Instrument Model

IN PROGRESS

The Instrument model is described in Data Dictionary Instrument Configuration.

The BaseInstrumentModel defines each physical instrument and the InstrumentInfoModel defines the configuration settings used for one or more experiments.

        classDiagram
   BaseInstrumentModel <|-- InstrumentInfoModel
   InstrumentInfoModel "1" *--"1" InstrumentProjectionRunSchema
   InstrumentInfoModel "1" *--"N<=3" InstrumentGoniometerAngleModel

   class BaseInstrumentModel{
       <<Abstract>>
       +String facility
       +String filesystem_name
       +String reference_name
       +create()

   }

   class InstrumentInfoModel{
       +String state_info
       +List~Number~[1|2] wavelength
       +String raw_file_format
       +List~InstrumentGoniometerAngleModel~ goniometer_settings
       +InstrumentProjectionRunSchema run_schema
       +create()

   }

   class InstrumentGoniometerAngleModel{
       +String name
       +String reference_name
       +List~Number~[3] direction
       +Number sense
       +Bool used_in_goniometer_setting
       +get_angle_field_name()
   }
   class InstrumentProjectionRunSchema{
       +grouping_field
       +run_number_field
       +scale_field
   }
    
The InstrumentInfo is created from the InstrumentConfiguration Settings. Based on the information, we can create the following instruments:
  • SNAP

  • CORELLI

  • TOPAZ

  • MANDI

  • WAND2

  • DEMAND

The InstrumentInfoModel model captures the changes in the configuration parameters for a specific instrument, e.g. DEMAND can have two InstrumentInfoObjects with different parameters. The state_info (optionally) includes the description of the change/upgrade for that instrument.

        classDiagram
    InstrumentInfoModel <|-- SNAPInfo
    InstrumentInfoModel <|-- CORELLIInfo
    InstrumentInfoModel <|-- TOPAZInfo
    InstrumentInfoModel <|-- MANDIInfo
    InstrumentInfoModel <|-- WAND2Info
    InstrumentInfoModel <|-- DEMANDInfo

    class InstrumentInfoModel{
        <>
    }

    class SNAPInfo{
        <>
    }
    class CORELLIInfo{
        <>
    }
    class TOPAZInfo{
        <>
    }
    class MANDIInfo{
        <>
    }
    class WAND2Info{
        <>
    }
    class DEMANDInfo{
        <>
    }