AllenNeuralDynamics / exa-spim-control

Acquisition control for the exaSPIM microscope system
MIT License
2 stars 1 forks source link

Add instrument.json generation to ExA-SPIM #53

Open adamkglaser opened 11 months ago

adamkglaser commented 11 months ago

Use this to generate a JSON. Read that JSON in and resave it as a TOML file. Then in the launch script, use the TOML read dictionary to resave a JSON using something like the code below.

from aind_data_schema.device import DAQChannel, DAQDevice, Manufacturer
from aind_data_schema.imaging import instrument

#ADD MPB manufacturer
#ADD AAOpto manufacturer
#ADD Navitar manufacturer
#ADD Mitutuyo manufacturer

inst = instrument.Instrument(
    instrument_id='exaSPIM1-01',
    instrument_type='exaSPIM',
    manufacturer=Manufacturer.CUSTOM,
    objectives=[
        instrument.Objective(
            name='Detection objective',
            model='JM_DIAMOND 5.0X/1.3',
            manufacturer=Manufacturer.VIEWORKS,
            numerical_aperture=0.305,
            magnification=5.0,
            immersion='air',
            serial_number='15618844',
            notes='detection objective. manufacturer collaboration between Schneider-Kreuznach and Vieworks',
        ),
    ],
    objectives=[
        instrument.Objective(
            name='Excitation objective',
            model='TL2X-SAP',
            manufacturer=Manufacturer.THORLABS,
            numerical_aperture=0.1,
            magnification=2.0,
            immersion='air',
            serial_number=None,
            notes='excitation objective. magnification assuming 200 mm tube lens focal length',
        ),
    ],
    lenses=[
        instrument.Lens(
            name='L1',
            model='LMPLANFL N 50X',
            manufacturer=Manufacturer.OLYMPUS,
            focal_length=3.6,
            focal_length_unit=SizeUnit.MM,
            serial_number=None,
            notes='L1. first beam expander lens.',
        ),
        instrument.Lens(
            name='L2',
            model='7.5X Mitutoyo Plan Apo',
            manufacturer=Manufacturer.MITUTUYO,
            focal_length=26.67,
            focal_length_unit=SizeUnit.MM,
            serial_number=None,
            notes='L2. second beam expander lens.',            
        ),
        instrument.Lens(
            name='L3',
            model='ACY254-050-A-ML',
            manufacturer=Manufacturer.THORLABS,
            focal_length=50,
            focal_length_unit=SizeUnit.MM,
            serial_number=None,
            notes='L3. cylindrical lens.',            
        ),
        instrument.Lens(
            name='L4',
            model='AC508-200-A-ML',
            manufacturer=Manufacturer.THORLABS,
            focal_length=200,
            focal_length_unit=SizeUnit.MM,
            serial_number=None,
            notes='L4. first relay lens.',            
        ),
        instrument.Lens(
            name='L5',
            model='AC508-300-A-ML',
            manufacturer=Manufacturer.THORLABS,
            focal_length=300,
            focal_length_unit=SizeUnit.MM,
            serial_number=None,
            notes='L5. second relay lens.',            
        ),
    ],
    detectors=[
        instrument.Detector(
            name='Imaging camera',
            type=CameraType.CAMERA,
            model='VP-151MX-M6H0',
            manufacturer=Manufacturer.VIEWORKS,
            max_frame_rate=6.4,
            frame_rate_unit=Frequency.HZ,
            pixel_width=3.76,
            pixel_height=3.76,
            size_unit=SizeUnit.UM,
            chroma=CameraChroma.BW,
            data_interface='Coax',
            cooling='air',
            serial_number='MP151BBX006',
        ),
    ],
    light_sources=[
        instrument.Lightsource(
            name='488 nm laser',
            type=LightsourceType.LASER,
            model='Genesis MX488-1000 STM OPSLaser-Diode System',
            manufacturer=Manufacturer.COHERENT,
            coupling=Coupling.FREE_SPACE,
            wavelength=488,
            wavelength_unit=SizeUnit.NM,
            max_power=1000,
            power_unit=PowerUnit.MW,
            serial_number='MX1275',
            notes='Housed in custom laser combiner. Water cooled.',
        ),
        instrument.Lightsource(
            name='561 nm laser',
            type=LightsourceType.LASER,
            model='Genesis MX561-1000 STM OPSLaser-Diode System',
            manufacturer=Manufacturer.COHERENT,
            coupling=Coupling.FREE_SPACE,
            wavelength=561,
            wavelength_unit=SizeUnit.NM,
            max_power=1000,
            power_unit=PowerUnit.MW,
            serial_number='MX1276',
            notes='Housed in custom laser combiner. Water cooled.',
        ),
        instrument.Lightsource(
            name='639 nm laser',
            type=LightsourceType.LASER,
            model='Genesis MX639-1000 STM OPSLaser-Diode System',
            manufacturer=Manufacturer.COHERENT,
            coupling=Coupling.FREE_SPACE,
            wavelength=639,
            wavelength_unit=SizeUnit.NM,
            max_power=1000,
            power_unit=PowerUnit.MW,
            serial_number='MX1274',
            notes='Housed in custom laser combiner. Water cooled.',
        )
    ],
    fluorescence_filters=[
        instrument.Filter(
            name='Emission filter',
            model='ZET488/561m',
            manufacturer=Manufacturer.CHROMA,
            filter_type=FilterType.MULTIBAND,
            diameter=44.05,
            size_unit=SizeUnit.MM,
            thickness=1.0,
            thickness_unit=SizeUnit.MM,
            notes='Custom made filter. No filter wheel.',
            serial_number=None,
        )
    ],
    daqs=[
        DAQDevice(
            name='NIDAQ',
            model='PCIe-6738',
            manufacturer=Manufacturer.NATIONAL_INSTRUMENTS,
            data_interface='USB',
            computer_name='Dev2',
            name='Dev2',
            serial_number=None,
            channels=[
                DAQChannel(channel_name='0', channel_type='Analog Output', device_name='ETL', sample_rate=10000),
                DAQChannel(channel_name='1', channel_type='Analog Output', device_name='Imaging camera', sample_rate=10000),
                DAQChannel(channel_name='2', channel_type='Analog Output', device_name='Z scanning stage', sample_rate=10000),
                DAQChannel(channel_name='3', channel_type='Analog Output', device_name='AOTF RF driver, 488 nm', sample_rate=10000),
                DAQChannel(channel_name='3', channel_type='Analog Output', device_name='AOTF RF driver, 488 nm', sample_rate=10000),
                DAQChannel(channel_name='4', channel_type='Analog Output', device_name='AOTF RF driver, 639 nm', sample_rate=10000),
                DAQChannel(channel_name='13', channel_type='Analog Output', device_name='AOTF RF driver, 561 nm', sample_rate=10000),
                DAQChannel(channel_name='17', channel_type='Analog Output', device_name='Galvo servo 1', sample_rate=10000),
                DAQChannel(channel_name='19', channel_type='Analog Output', device_name='Galvo servo 2', sample_rate=10000),
            ],
        )
    ],
    scanning_stages=[
        instrument.ScanningStage(
            name='X scanning stage',
            model='MS-8000',
            manufacturer=Manufacturer.ASI,
            stage_axis_direction='Detection axis',
            stage_axis_name='X',
            travel=1000,
            travel_unit=SizeUnit.MM,
            serial_number=None,
        ),
        instrument.ScanningStage(
            name='Y scanning stage',
            model='MS-8000',
            manufacturer=Manufacturer.ASI,
            stage_axis_direction='Perpendicular axis',
            stage_axis_name='Y',
            travel=1000,
            travel_unit=SizeUnit.MM,
            serial_number=None,
        ),
        instrument.ScanningStage(
            name='Z scanning stage',
            model='LS-100',
            manufacturer=Manufacturer.ASI,
            stage_axis_direction='Illumination axis',
            stage_axis_name='Z',
            travel=100,
            travel_unit=SizeUnit.MM,
            serial_number=None,
        ),
    ],
    motorized_stages=[
        instrument.MotorizedStage(
            name='Illumination objective stage 1',
            model='LS-50',
            manufacturer=Manufacturer.ASI,
            travel=50,
            travel_unit=SizeUnit.MM,
            stage_axis_name='M',
            serial_number=None,
            notes='translates illumination objective along detection axis'

        ),
        instrument.MotorizedStage(
            name='Illumination objective stage 2',
            model='LS-50',
            manufacturer=Manufacturer.ASI,
            travel=50,
            travel_unit=SizeUnit.MM,
            stage_axis_name='N',
            serial_number=None,
            notes='translates illumination objective perpendicular to detection axis'

        ),
    ],
    additional_devices=[
        instrument.AdditionalImagingDevice(
            name='ETL',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.OPTOTUNE,
            model='EL-16-40-TC-VIS-20D-C',
            serial_number='ANAC4286',
        ),
        instrument.AdditionalImagingDevice(
            name='Cylindrical lens rotation stage',
            type='Rotation mount',
            manufacturer=Manufacturer.ASI,
            model='C60-3060-CMR-MO',
            serial_number=None,
        ),
        instrument.AdditionalImagingDevice(
            name='AOTF',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.AAOPTO,
            model='AOTFnC-400.650-TN',
            serial_number='1002-Q220234',
        ),
        instrument.AdditionalImagingDevice(
            name='AOTF RF driver',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.AAOPTO,
            model='MPDS8C-D65-22-74.158-RS',
            serial_number='2001-Q220234',
        ),
        instrument.AdditionalImagingDevice(
            name='Tiger controller',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.ASI,
            model='TG8-XY:A(Xb)H-Z/F:5A:FTP',
            serial_number='2112-2317-8584-5632-5631',
        ),
        instrument.AdditionalImagingDevice(
            name='NIDAQ breakout board',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.NATIONAL_INSTRUMENTS,
            model='SCB-68A',
            serial_number='1FCD210',
        ),
        instrument.AdditionalImagingDevice(
            name='Galvo 1',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.THORLABS,
            model='QS20Y-AG',
            serial_number='20375',
        ),
        instrument.AdditionalImagingDevice(
            name='Galvo 2',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.THORLABS,
            model='QS20Y-AG',
            serial_number='20385',
        ),
        instrument.AdditionalImagingDevice(
            type='Galvo servo 1',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.THORLABS,
            model='QS20Y-AG',
            serial_number='02232',
        ),
        instrument.AdditionalImagingDevice(
            type='Galvo servo 2',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.THORLABS,
            model='QS20Y-AG',
            serial_number='02216',
        ),
        instrument.AdditionalImagingDevice(
            name='488 nm laser 210 Watt Thermoelectric Chiller with Coherent Logo',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.COHERENT,
            model='0P9T257P30',
            serial_number='A76636',
        ),
        instrument.AdditionalImagingDevice(
            name='561 nm laser 210 Watt Thermoelectric Chiller with Coherent Logo',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.COHERENT,
            model='0P9T257P30',
            serial_number='A76626',
        ),
        instrument.AdditionalImagingDevice(
            name='639 nm laser 210 Watt Thermoelectric Chiller with Coherent Logo',
            type=ImagingDeviceType.OTHER,
            manufacturer=Manufacturer.COHERENT,
            model='0P9T257P30',
            serial_number='A76606',
        ),
    ],
    optical_tables=[
        instrument.OpticalTable(
            manufacturer=Manufacturer.MKS_NEWPORT,
            model='VIS3648-PG2-325A',
            length=36,
            width=48,
            vibration_control=True,
            serial_number='10349925',
        )
    ],
    com_ports=[
        instrument.Com(
            hardware_name='AOTF RF driver',
            com_port='COM13',
        ),
        instrument.Com(
            hardware_name='Tiger Controller',
            com_port='COM5',
        ),
    ],
    humidity_control=False,
    temperature_control=False,
)

inst.write_standard_file()