Class AreaDetectorWritingFilesRunnableDevice

All Implemented Interfaces:
INexusDevice<NXdetector>, IActivatable, IPausableDevice<AreaDetectorRunnableDeviceModel>, IResettableDevice, IRunnableDevice<AreaDetectorRunnableDeviceModel>, IRunnableEventDevice<AreaDetectorRunnableDeviceModel>, IWritableDetector<AreaDetectorRunnableDeviceModel>, IDeviceRoleActor, IConfigurable<AreaDetectorRunnableDeviceModel>, ILevel, IModelProvider<AreaDetectorRunnableDeviceModel>, INameable, IScanAttributeContainer, IValidator<AreaDetectorRunnableDeviceModel>

public class AreaDetectorWritingFilesRunnableDevice extends AreaDetectorRunnableDevice

This is an implementation of a new style GDA detector that can connects to an area detector.

The area detector directly writes its own HDF5 file which is linked to the GDA NeXus file.

  • Constructor Details

    • AreaDetectorWritingFilesRunnableDevice

      public AreaDetectorWritingFilesRunnableDevice()
  • Method Details

    • preConfigure

      public void preConfigure(ScanInformation info)
    • configure

      public void configure(AreaDetectorRunnableDeviceModel model) throws ScanningException
      Description copied from interface: IConfigurable
      Call to configure the device. If the model provided is invalid, a scanning exception will be thrown.
      Specified by:
      configure in interface IConfigurable<AreaDetectorRunnableDeviceModel>
      Overrides:
      configure in class AreaDetectorRunnableDevice
      Parameters:
      model -
      Throws:
      ScanningException
    • setPathToDataNode

      public void setPathToDataNode(String pathToDataNode)
    • postConfigure

      public void postConfigure()
    • getNexusProvider

      public NexusObjectProvider<NXdetector> getNexusProvider(NexusScanInfo scanInfo)
      Description copied from interface: INexusDevice
      Returns the object provider required for writing correct NeXus files.

      In this method you should prepare the LazyDatasets the device will fill during the scan. You can also write out static device metadata, which will not change during the scan.

      Use the methods on NexusNodeFactory to create a NeXus object which matches the device e.g. a NXdetector. final NXdetector detector = NexusNodeFactory.createNXdetector();

      On the detector object you can create LazyDatasets and keep references which you can later use during the scan to write data. e.g. imageData = detector.initializeLazyDataset(NXdetector.NX_DATA, info.getRank() + 2, Double.class); You should also set chunking on the LazyDatasets you create e.g. imageData.setChunking(info.createChunk(detectorXSize, detectorYSize));.

      In this method you can also write static metadata such as the detector exposure e.g. detector.setField("exposure_time", model.getExposure());. Or static datasets such as the image axis data detector.setDataset("image_x_axis", DatasetFactory.createLinearSpace(DoubleDataset.class, minX, maxX, xPoints)); For fields that are defined in the NXDL base class definition for the returned nexus object, a setXXX or setXXXScalar method may be used as appropriate, e.g. detector.setLocalName(DatasetFactory.createFromObject("my detector")); or detector.setLocalNameScalar("my detector");

      If this device is a 'metadata scannable', then the device should write its data at this point directly into the returned nexus object. This can be done with the NXobject.setField(String, Object) method, or the setXXXScalar methods for fields defined in the appropriate NXDL base class definition.

      The default implementation of this method throws UnsupportedOperationException. One of either this method or INexusDevice.getNexusProviders(NexusScanInfo) must be overridden to create and return the nexus object(s) for this INexusDevice.

      Specified by:
      getNexusProvider in interface INexusDevice<NXdetector>
      Overrides:
      getNexusProvider in class AreaDetectorRunnableDevice
      Parameters:
      scanInfo - information about the scan which can be useful when creating datasets e.g. info.getRank()
      Returns:
      The NXobject created using the nodeFactory to represent this device
    • write

      public boolean write(IPosition pos) throws ScanningException
      Description copied from interface: IWritableDetector
      For GDA9 detectors, returns a boolean for the readout completed, true for complete, false for error. Generally detectors running in GDA9 will be IDetector. For GDA8 detectors, the readout will be overridden.
      Specified by:
      write in interface IWritableDetector<AreaDetectorRunnableDeviceModel>
      Overrides:
      write in class AreaDetectorRunnableDevice
      Returns:
      true for a successful readout. If false the events will not be fired and the scan will continue.
      Throws:
      ScanningException