2022.08_3 Artifact Release

RELEASE DATE: Aug 16, 2022

Bug Fixes

N/A

Enhancements (New Features and Functionality)

BioTek Gen5 IDS and Parser Update
  • Protocol

    • namespace: common
    • slug: biotek-gen5-raw-json-to-ids
    • version: v1.2.0
    • changelog:
      • Update protocol use task script common/biotek-gen5-raw-json-to-ids:v3.0.0
  • Task Script

    • namespace: common
    • slug: biotek-gen5-raw-json-to-ids
    • version: v3.0.0
    • changelog:
      • Update parser to output common/plate-reader-biotek-gen5:v4.0.0 IDS
      • Update protocol parsing to read protocol information from measurement Datasets
      • Update parser to support protocols that include kinetic steps
      • Update datacube parsing to use fixed linear well indexing for its dimension, e.g. for a 96 well plate A1 -> 1, B1 -> 13, H12 -> 96
      • Update datacube parsing to ensure every measure is of equal length
      • Update datacube parsing to skip empty datacubes
      • Update sample parsing to parse samples when no plate layout definition is included with the protocol
      • Rename IDS output file to 0.json
  • IDS

    • namespace: common
    • slug: plate-reader-biotek-gen5
    • version: v4.0.0
    • changelog:
      • Summary of changes:
        • Change method section to contain a field protocol to collect measurement protocol data
        • Add support for luminescence measurement mode
        • Add support for kinetic and spectral scan method information for absorbance, fluorescence and luminescence measurement modes
        • Add support for multi-step protocols including shaking, dispensing, temperature, delay and carrier movement steps
        • Add support for absorbance measurement mode path length correction data
      • Detailed changes:
        • Add datacubes[*].holder_barcode
        • Add methods[*].imaging.channels[*].gain
        • Add methods[*].options
        • Add methods[*].options.discontinuous_kinetics
        • Add methods[*].options.eject_on_completion
        • Add methods[*].options.read_plate_barcode
        • Add methods[*].options.skip_load_plate_dialog
        • Add methods[*].options.use_slower_carrier_speed
        • Add methods[*].protocol
        • Add methods[*].protocol[*]
        • Add methods[*].protocol[*].carrier
        • Add methods[*].protocol[*].carrier.comment
        • Add methods[*].protocol[*].carrier.operation
        • Add methods[*].protocol[*].delay
        • Add methods[*].protocol[*].delay.duration
        • Add methods[*].protocol[*].delay.duration.unit
        • Add methods[*].protocol[*].delay.duration.value
        • Add methods[*].protocol[*].delay.reference_time
        • Add methods[*].protocol[*].dispense
        • Add methods[*].protocol[*].dispense.aligned_dispense
        • Add methods[*].protocol[*].dispense.index
        • Add methods[*].protocol[*].dispense.priming
        • Add methods[*].protocol[*].dispense.priming.mode
        • Add methods[*].protocol[*].dispense.priming.volume
        • Add methods[*].protocol[*].dispense.priming.volume.unit
        • Add methods[*].protocol[*].dispense.priming.volume.value
        • Add methods[*].protocol[*].dispense.rate
        • Add methods[*].protocol[*].dispense.rate.unit
        • Add methods[*].protocol[*].dispense.rate.value
        • Add methods[*].protocol[*].dispense.volume
        • Add methods[*].protocol[*].dispense.volume.unit
        • Add methods[*].protocol[*].dispense.volume.value
        • Add methods[*].protocol[*].dispense.wells
        • Add methods[*].protocol[*].kinetic
        • Add methods[*].protocol[*].kinetic.interval
        • Add methods[*].protocol[*].kinetic.interval.unit
        • Add methods[*].protocol[*].kinetic.interval.value
        • Add methods[*].protocol[*].kinetic.runtime
        • Add methods[*].protocol[*].kinetic.runtime.unit
        • Add methods[*].protocol[*].kinetic.runtime.value
        • Add methods[*].protocol[*].kinetic.sub_protocol
        • Add methods[*].protocol[*].kinetic.sub_protocol[*]
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].carrier
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].carrier.comment
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].carrier.operation
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].delay
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].delay.duration
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].delay.duration.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].delay.duration.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].delay.reference_time
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.aligned_dispense
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.index
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.priming
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.priming.mode
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.priming.volume
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.priming.volume.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.priming.volume.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.rate
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.rate.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.rate.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.volume
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.volume.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.volume.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].dispense.wells
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.calibrate_before_read
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.index
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.path_length_correction
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.path_length_correction.method
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.path_length_correction.reference_wavelength
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.path_length_correction.reference_wavelength.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.path_length_correction.reference_wavelength.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.path_length_correction.test_wavelength
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.path_length_correction.test_wavelength.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.path_length_correction.test_wavelength.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.path_length_correction.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.wavelength
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.wavelength.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.endpoint.wavelength.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan.calibrate_before_read
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan.spectrum
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan.spectrum.start
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan.spectrum.start.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan.spectrum.start.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan.spectrum.step
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan.spectrum.step.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan.spectrum.step.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan.spectrum.stop
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan.spectrum.stop.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.absorbance.spectral_scan.spectrum.stop.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.delay
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.delay.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.delay.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.detection_type
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.emission
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.emission.bandwidth
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.emission.bandwidth.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.emission.bandwidth.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.emission.position
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.emission.raw_value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.emission.wavelength
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.emission.wavelength.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.emission.wavelength.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.excitation
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.excitation.bandwidth
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.excitation.bandwidth.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.excitation.bandwidth.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.excitation.position
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.excitation.raw_value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.excitation.wavelength
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.excitation.wavelength.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.excitation.wavelength.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.gain
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.gain.mode
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.gain.raw_value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.gain.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.gain.wells
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.index
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.filter_set.optics
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.fluorescence_polarization
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.light_source
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.light_source.energy
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.light_source.range
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.light_source.type
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.measurements_per_datapoint
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.mirror
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.time_resolve
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.time_resolve.collection_time
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.time_resolve.collection_time.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.time_resolve.collection_time.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.time_resolve.delay
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.time_resolve.delay.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.time_resolve.delay.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.top_probe_offset
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.top_probe_offset.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.endpoint.top_probe_offset.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.excitation
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.excitation.bandwidth
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.excitation.bandwidth.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.excitation.bandwidth.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.excitation.position
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.excitation.raw_value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.excitation.wavelength
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.excitation.wavelength.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.excitation.wavelength.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.fluorescence_polarization
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.light_source
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.light_source.energy
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.light_source.range
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.light_source.type
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.spectrum
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.spectrum.start
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.spectrum.start.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.spectrum.start.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.spectrum.step
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.spectrum.step.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.spectrum.step.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.spectrum.stop
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.spectrum.stop.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.fluorescence.spectral_scan.spectrum.stop.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.dynamic_range
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.emission
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.gain
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.gain.mode
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.gain.raw_value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.gain.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.gain.wells
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.integration_time
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.integration_time.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.integration_time.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.mirror
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.optics
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.top_probe_offset
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.top_probe_offset.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.endpoint.top_probe_offset.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.gain
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.gain.mode
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.gain.raw_value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.gain.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.gain.wells
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.integration_time
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.integration_time.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.integration_time.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.spectrum
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.spectrum.start
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.spectrum.start.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.spectrum.start.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.spectrum.step
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.spectrum.step.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.spectrum.step.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.spectrum.stop
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.spectrum.stop.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.luminescence.spectral_scan.spectrum.stop.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.measurements_per_data_point
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.speed
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.type
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.label
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].read.wells
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].shake
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].shake.displacement
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].shake.displacement.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].shake.displacement.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].shake.duration
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].shake.duration.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].shake.duration.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].shake.mode
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].shake.orbital_speed
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].temperature
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].temperature.incubate
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].temperature.preheat
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].temperature.set_gradient
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].temperature.set_gradient.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].temperature.set_gradient.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].temperature.set_temperature
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].temperature.set_temperature.unit
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].temperature.set_temperature.value
        • Add methods[*].protocol[*].kinetic.sub_protocol[*].type
        • Add methods[*].protocol[*].read
        • Add methods[*].protocol[*].read.absorbance
        • Add methods[*].protocol[*].read.absorbance.endpoint
        • Add methods[*].protocol[*].read.absorbance.endpoint.calibrate_before_read
        • Add methods[*].protocol[*].read.absorbance.endpoint.index
        • Add methods[*].protocol[*].read.absorbance.endpoint.path_length_correction
        • Add methods[*].protocol[*].read.absorbance.endpoint.path_length_correction.method
        • Add methods[*].protocol[*].read.absorbance.endpoint.path_length_correction.reference_wavelength
        • Add methods[*].protocol[*].read.absorbance.endpoint.path_length_correction.reference_wavelength.unit
        • Add methods[*].protocol[*].read.absorbance.endpoint.path_length_correction.reference_wavelength.value
        • Add methods[*].protocol[*].read.absorbance.endpoint.path_length_correction.test_wavelength
        • Add methods[*].protocol[*].read.absorbance.endpoint.path_length_correction.test_wavelength.unit
        • Add methods[*].protocol[*].read.absorbance.endpoint.path_length_correction.test_wavelength.value
        • Add methods[*].protocol[*].read.absorbance.endpoint.path_length_correction.value
        • Add methods[*].protocol[*].read.absorbance.endpoint.wavelength
        • Add methods[*].protocol[*].read.absorbance.endpoint.wavelength.unit
        • Add methods[*].protocol[*].read.absorbance.endpoint.wavelength.value
        • Add methods[*].protocol[*].read.absorbance.spectral_scan
        • Add methods[*].protocol[*].read.absorbance.spectral_scan.calibrate_before_read
        • Add methods[*].protocol[*].read.absorbance.spectral_scan.spectrum
        • Add methods[*].protocol[*].read.absorbance.spectral_scan.spectrum.start
        • Add methods[*].protocol[*].read.absorbance.spectral_scan.spectrum.start.unit
        • Add methods[*].protocol[*].read.absorbance.spectral_scan.spectrum.start.value
        • Add methods[*].protocol[*].read.absorbance.spectral_scan.spectrum.step
        • Add methods[*].protocol[*].read.absorbance.spectral_scan.spectrum.step.unit
        • Add methods[*].protocol[*].read.absorbance.spectral_scan.spectrum.step.value
        • Add methods[*].protocol[*].read.absorbance.spectral_scan.spectrum.stop
        • Add methods[*].protocol[*].read.absorbance.spectral_scan.spectrum.stop.unit
        • Add methods[*].protocol[*].read.absorbance.spectral_scan.spectrum.stop.value
        • Add methods[*].protocol[*].read.delay
        • Add methods[*].protocol[*].read.delay.unit
        • Add methods[*].protocol[*].read.delay.value
        • Add methods[*].protocol[*].read.detection_type
        • Add methods[*].protocol[*].read.fluorescence
        • Add methods[*].protocol[*].read.fluorescence.endpoint
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.emission
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.emission.bandwidth
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.emission.bandwidth.unit
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.emission.bandwidth.value
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.emission.position
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.emission.raw_value
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.emission.wavelength
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.emission.wavelength.unit
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.emission.wavelength.value
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.excitation
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.excitation.bandwidth
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.excitation.bandwidth.unit
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.excitation.bandwidth.value
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.excitation.position
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.excitation.raw_value
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.excitation.wavelength
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.excitation.wavelength.unit
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.excitation.wavelength.value
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.gain
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.gain.mode
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.gain.raw_value
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.gain.value
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.gain.wells
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.index
        • Add methods[*].protocol[*].read.fluorescence.endpoint.filter_set.optics
        • Add methods[*].protocol[*].read.fluorescence.endpoint.fluorescence_polarization
        • Add methods[*].protocol[*].read.fluorescence.endpoint.light_source
        • Add methods[*].protocol[*].read.fluorescence.endpoint.light_source.energy
        • Add methods[*].protocol[*].read.fluorescence.endpoint.light_source.range
        • Add methods[*].protocol[*].read.fluorescence.endpoint.light_source.type
        • Add methods[*].protocol[*].read.fluorescence.endpoint.measurements_per_data_point
        • Add methods[*].protocol[*].read.fluorescence.endpoint.mirror
        • Add methods[*].protocol[*].read.fluorescence.endpoint.time_resolved
        • Add methods[*].protocol[*].read.fluorescence.endpoint.time_resolved.collection_time
        • Add methods[*].protocol[*].read.fluorescence.endpoint.time_resolved.collection_time.unit
        • Add methods[*].protocol[*].read.fluorescence.endpoint.time_resolved.collection_time.value
        • Add methods[*].protocol[*].read.fluorescence.endpoint.time_resolved.delay
        • Add methods[*].protocol[*].read.fluorescence.endpoint.time_resolved.delay.unit
        • Add methods[*].protocol[*].read.fluorescence.endpoint.time_resolved.delay.value
        • Add methods[*].protocol[*].read.fluorescence.endpoint.top_probe_offset
        • Add methods[*].protocol[*].read.fluorescence.endpoint.top_probe_offset.unit
        • Add methods[*].protocol[*].read.fluorescence.endpoint.top_probe_offset.value
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.excitation
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.excitation.bandwidth
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.excitation.bandwidth.unit
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.excitation.bandwidth.value
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.excitation.position
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.excitation.raw_value
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.excitation.wavelength
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.excitation.wavelength.unit
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.excitation.wavelength.value
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.fluorescence_polarization
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.light_source
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.light_source.energy
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.light_source.range
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.light_source.type
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.spectrum
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.spectrum.start
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.spectrum.start.unit
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.spectrum.start.value
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.spectrum.step
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.spectrum.step.unit
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.spectrum.step.value
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.spectrum.stop
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.spectrum.stop.unit
        • Add methods[*].protocol[*].read.fluorescence.spectral_scan.spectrum.stop.value
        • Add methods[*].protocol[*].read.luminescence
        • Add methods[*].protocol[*].read.luminescence.endpoint
        • Add methods[*].protocol[*].read.luminescence.endpoint.dynamic_range
        • Add methods[*].protocol[*].read.luminescence.endpoint.emission
        • Add methods[*].protocol[*].read.luminescence.endpoint.gain
        • Add methods[*].protocol[*].read.luminescence.endpoint.gain.mode
        • Add methods[*].protocol[*].read.luminescence.endpoint.gain.raw_value
        • Add methods[*].protocol[*].read.luminescence.endpoint.gain.value
        • Add methods[*].protocol[*].read.luminescence.endpoint.gain.wells
        • Add methods[*].protocol[*].read.luminescence.endpoint.integration_time
        • Add methods[*].protocol[*].read.luminescence.endpoint.integration_time.unit
        • Add methods[*].protocol[*].read.luminescence.endpoint.integration_time.value
        • Add methods[*].protocol[*].read.luminescence.endpoint.mirror
        • Add methods[*].protocol[*].read.luminescence.endpoint.optics
        • Add methods[*].protocol[*].read.luminescence.endpoint.top_probe_offset
        • Add methods[*].protocol[*].read.luminescence.endpoint.top_probe_offset.unit
        • Add methods[*].protocol[*].read.luminescence.endpoint.top_probe_offset.value
        • Add methods[*].protocol[*].read.luminescence.spectral_scan
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.gain
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.gain.mode
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.gain.raw_value
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.gain.value
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.gain.wells
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.integration_time
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.integration_time.unit
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.integration_time.value
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.spectrum
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.spectrum.start
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.spectrum.start.unit
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.spectrum.start.value
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.spectrum.step
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.spectrum.step.unit
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.spectrum.step.value
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.spectrum.stop
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.spectrum.stop.unit
        • Add methods[*].protocol[*].read.luminescence.spectral_scan.spectrum.stop.value
        • Add methods[*].protocol[*].read.measurements_per_datapoint
        • Add methods[*].protocol[*].read.speed
        • Add methods[*].protocol[*].read.type
        • Add methods[*].protocol[*].read.label
        • Add methods[*].protocol[*].read.wells
        • Add methods[*].protocol[*].shake
        • Add methods[*].protocol[*].shake.displacement
        • Add methods[*].protocol[*].shake.displacement.unit
        • Add methods[*].protocol[*].shake.displacement.value
        • Add methods[*].protocol[*].shake.duration
        • Add methods[*].protocol[*].shake.duration.unit
        • Add methods[*].protocol[*].shake.duration.value
        • Add methods[*].protocol[*].shake.mode
        • Add methods[*].protocol[*].shake.orbital_speed
        • Add methods[*].protocol[*].temperature
        • Add methods[*].protocol[*].temperature.incubate
        • Add methods[*].protocol[*].temperature.preheat
        • Add methods[*].protocol[*].temperature.set_gradient
        • Add methods[*].protocol[*].temperature.set_gradient.unit
        • Add methods[*].protocol[*].temperature.set_gradient.value
        • Add methods[*].protocol[*].temperature.set_temperature
        • Add methods[*].protocol[*].temperature.set_temperature.unit
        • Add methods[*].protocol[*].temperature.set_temperature.value
        • Add methods[*].protocol[*].type
        • Add methods[*].well_selection
        • Add runs[*].holder_barcode
        • Add runs[*].time.raw_acquired
        • Add samples[*].labels[*].time.raw
        • Add samples[*].labels[*].time.raw.lookup
        • Add samples[*].properties[*].time.raw
        • Add samples[*].properties[*].time.raw.lookup
        • Add systems[*].firmware[*].time
        • Add systems[*].firmware[*].time.last_updated
        • Add systems[*].firmware[*].time.raw_last_updated
        • Add systems[*].software[*].time
        • Add systems[*].software[*].time.last_updated
        • Add systems[*].software[*].time.raw_last_updated
        • Update root schema: modify $id from "https://ids.tetrascience.com/common/plate-reader-biotek-gen5/v3.0.0/schema.json" to "http://ids.tetrascience.com/common/plate-reader-biotek-gen5/v4.0.0/schema.json"
        • Update root schema: modify required from ["@idsConventionVersion", "@idsNamespace", "@idsType", "@idsVersion", "systems"] to ["@idsNamespace", "@idsType", "@idsVersion"]
        • Update @idsType schema: modify const from "plate-reader-biotek-gen5" to "biotek-gen-5"
        • Update @idsVersion schema: modify const from "v3.0.0" to "v4.0.0"
        • Update datacubes[*] schema: modify required from ["dimensions", "holder_name", "measures", "name"] to ["dimensions", "measures", "name"]
        • Update datacubes[*].dimensions[*] schema: modify required from ["name", "scale", "unit"] to ["scale", "unit"]
        • Update datacubes[*].dimensions[*].name schema: add enum: ["Null", "Sample Index", "Time", "Wavelength"]
        • Update datacubes[*].dimensions[*].name schema: modify type from ["null", "string"] to "string"
        • Update methods[*] schema: remove required
        • Update methods[*].imaging.channels[*] schema: remove required
        • Update results[*] schema: remove required
        • Update results[*].formulas[*] schema: remove required
        • Update results[*].standard_curves[*] schema: remove required
        • Update results[*].standard_curves[*].coefficients[*] schema: remove required
        • Update runs[*] schema: remove required
        • Update samples[*].labels[*].source.name schema: modify type from "string" to ["null", "string"]
        • Remove methods[*].eject_on_completion
        • Remove methods[*].extended_dynamic_range
        • Remove methods[*].filter_sets
        • Remove methods[*].filter_sets[*]
        • Remove methods[*].filter_sets[*].emission
        • Remove methods[*].filter_sets[*].emission.bandwidth
        • Remove methods[*].filter_sets[*].emission.raw_value
        • Remove methods[*].filter_sets[*].emission.unit
        • Remove methods[*].filter_sets[*].emission.value
        • Remove methods[*].filter_sets[*].excitation
        • Remove methods[*].filter_sets[*].excitation.bandwidth
        • Remove methods[*].filter_sets[*].excitation.raw_value
        • Remove methods[*].filter_sets[*].excitation.unit
        • Remove methods[*].filter_sets[*].excitation.value
        • Remove methods[*].filter_sets[*].gain
        • Remove methods[*].filter_sets[*].gain.raw_value
        • Remove methods[*].filter_sets[*].gain.value
        • Remove methods[*].filter_sets[*].index
        • Remove methods[*].filter_sets[*].optics
        • Remove methods[*].imaging.channels[*].camera_gain
        • Remove methods[*].integration_time
        • Remove methods[*].integration_time.unit
        • Remove methods[*].integration_time.value
        • Remove methods[*].lamp_energy
        • Remove methods[*].light_source
        • Remove methods[*].read
        • Remove methods[*].read.delay
        • Remove methods[*].read.delay.unit
        • Remove methods[*].read.delay.value
        • Remove methods[*].read.height
        • Remove methods[*].read.height.unit
        • Remove methods[*].read.height.value
        • Remove methods[*].read.measurements_per_data_point
        • Remove methods[*].read.speed
        • Remove methods[*].read.type
        • Remove methods[*].read.wells
        • Remove methods[*].wavelengths
        • Remove methods[*].wavelengths[*]
        • Remove methods[*].wavelengths[*].unit
        • Remove methods[*].wavelengths[*].value
        • Remove systems[*].firmware[*].last_updated_timestamp
        • Remove systems[*].software[*].last_updated_timestamp