syntax = "proto3";

package biopb.ome;

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

import "biopb/ome/microscope.proto";
import "biopb/ome/light_source.proto";
import "biopb/ome/detector.proto";
import "biopb/ome/objective.proto";
import "biopb/ome/filter_set.proto";
import "biopb/ome/filter.proto";

// This element describes the instrument used to capture the Image. It is
// primarily a container for manufacturer's model and catalog numbers for the
// Microscope, LightSource, Detector, Objective and Filters components. The
// Objective element contains the additional elements LensNA and Magnification.
// The Filters element can be composed either of separate excitation, emission
// filters and a dichroic mirror or a single filter set. Within the Image
// itself, a reference is made to this one Filter element. There may be multiple
// light sources, detectors, objectives and filters on a microscope. Each of
// these has their own ID attribute, which can be referred to from Channel. It
// is understood that the light path configuration can be different for each
// channel, but cannot be different for each timepoint or each plane of an XYZ
// stack.
//
message Instrument {

    Microscope microscope = 1;

    map<string, LightSource> light_sources = 2;

    map<string, Detector> detectors = 3;

    map<string, Objective> objectives = 4;

    map<string, FilterSet> filter_sets = 5;

    map<string, Filter> filters = 6;

    map<string, Dichroic> dichroics = 7;

    repeated string annotation_ids = 8;

}
