@Override
  public Structure buildStructure(Serialiser serialiser, PerimeterBoxROI roi)
      throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    FieldCreate fieldCreate = FieldFactory.getFieldCreate();

    Structure structure =
        fieldCreate
            .createFieldBuilder()
            .add("angle", ScalarType.pvDouble)
            .addArray("lengths", ScalarType.pvDouble)
            .addArray("point", ScalarType.pvDouble)
            .setId("PerimeterBoxROI")
            .createStructure();
    return structure;
  }
  @Override
  public Structure buildStructure(Serialiser serialiser, SpiralModel model) throws Exception {
    FieldCreate fieldCreate = FieldFactory.getFieldCreate();

    Structure boundingBoxStructure = serialiser.buildStructure(model.getBoundingBox());

    Structure structure =
        fieldCreate
            .createFieldBuilder()
            .add("name", ScalarType.pvString)
            .add("boundingBox", boundingBoxStructure)
            .add("fastAxisName", ScalarType.pvString)
            .add("slowAxisName", ScalarType.pvString)
            .add("scale", ScalarType.pvDouble)
            .setId("SpiralModel")
            .createStructure();
    return structure;
  }
  public static HelloPutGetRecord create(String recordName) {
    StandardField standardField = StandardFieldFactory.getStandardField();
    FieldCreate fieldCreate = FieldFactory.getFieldCreate();
    PVDataCreate pvDataCreate = PVDataFactory.getPVDataCreate();
    Structure topStructure =
        fieldCreate
            .createFieldBuilder()
            .add("timeStamp", standardField.timeStamp())
            .addNestedStructure("argument")
            .add("value", ScalarType.pvString)
            .endNested()
            .addNestedStructure("result")
            .add("value", ScalarType.pvString)
            .endNested()
            .createStructure();
    PVStructure pvStructure = pvDataCreate.createPVStructure(topStructure);

    HelloPutGetRecord pvRecord = new HelloPutGetRecord(recordName, pvStructure);
    if (!pvRecord.init()) return null;
    return pvRecord;
  }