syntax = "proto3";

package biopb.ome;

option java_package = "biopb.ome";
option java_multiple_files = true;

import "biopb/ome/manufacturer_spec.proto";

// This records the range of wavelengths that are transmitted by the filter. It
// also records the maximum amount of light transmitted.
message TransmittanceRange {
    
    // CutIn is the wavelength below which there is less than 50% transmittance
    // for a filter. Units are set by CutInUnit.
    optional float cut_in = 2;

    // default is "nm"
    string cut_in_unit = 3;

    // CutOut is the wavelength above which there is less than 50% transmittance
    // for a filter. Units are set by CutOutUnit.
    optional float cut_out = 4;

    // default is "nm"
    string cut_out_unit = 5;

    // CutInTolerance. Units are set by CutInToleranceUnit.
    optional float cut_in_tolerance = 6;

    // The units of the CutInTolerance - default:nanometres[nm].
    string cut_in_tolerance_unit = 7;

    // CutOutTolerance. Units are set by CutInToleranceUnit.
    optional float cut_out_tolerance = 8;

    // The units of the CutOutTolerance - default:nanometres[nm].
    string cut_out_tolerance_unit = 9;

    // The amount of light the filter transmits at a maximum [units:none] A
    // fraction, as a value from 0.0 to 1.0.
    optional float transmittance = 10;

}



// A filter is either an excitation or emission filters. There should be one
// filter element specified per wavelength in the image. The channel number
// associated with a filter set is specified in Channel. It is based on the
// FilterSpec type, so has the required attributes Manufacturer, Model, and
// LotNumber. It may also contain a Type attribute which may be set to
// 'LongPass', 'ShortPass', 'BandPass', 'MultiPass', 'Dichroic',
// 'NeutralDensity', 'Tuneable' or 'Other'. It can be associated with an
// optional FilterWheel - Note: this is not the same as a FilterSet
//
message Filter {

    ManufacturerSpec manufacturer_spec = 2;

    enum Type {
        UNSPECIFIED = 0;
        DICHROIC = 1;
        LONGPASS = 2;
        SHORTPASS = 3;
        BANDPASS = 4;
        MULTIPASS = 5;
        NEUTRALDENSITY = 6;
        TUNABLE = 7;
        OTHER = 8;
    }
    Type type = 3;

    TransmittanceRange transmittence_range = 4;

    // A filter 'wheel' in OME can refer to any arrangement of filters in a
    // filter holder of any shape. It could, for example, be a filter slider.
    // [plain text string]
    string filter_wheel = 5;

    repeated string annotation_ids = 6;

}

// The dichromatic beamsplitter or dichroic mirror used for this filter
// combination.
//
message Dichroic {

    ManufacturerSpec manufacturer_spec = 2;

    repeated string annotation_ids = 6;

}
