syntax = "proto3";

package biopb.ome;

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

import "biopb/ome/manufacturer_spec.proto";

// A description of the microscope's objective lens. Required elements include
// the lens numerical aperture, and the magnification, both of which a floating
// point (real) numbers.
//
// The values are those that are fixed for a particular objective: either
// because it has been manufactured to this specification or the value has been
// measured on this particular objective.
//
// Correction: This is the type of correction coating applied to this lens.
// Immersion: This is the types of immersion medium the lens is designed to work
// with. It is not the same as 'Medium' in ObjectiveRef (a single type) as here
// Immersion can have compound values like 'Multi'. LensNA: The numerical
// aperture of the lens (as a float) NominalMagnification: The specified
// magnification e.g. x10 CalibratedMagnification: The measured magnification
// e.g. x10.3 WorkingDistance: WorkingDistance of the lens.
//
message Objective {

    ManufacturerSpec manufacturer_spec = 2;

    // Abberation correction design
    enum Correction {
        UNSPECIFIED = 0;
        UV = 1;
        PLANAPO = 2;
        PLANFLUOR = 3;
        SUPERFLUOR = 4;
        VIOLETCORRECTED = 5;
        ACHRO = 6;
        ACHROMAT = 7;
        FLUOR = 8;
        FL = 9;
        FLUAR = 10;
        ENOFLUAR = 11;
        FLUOTAR = 12;
        APO = 13;
        PLANNEOFLUAR = 14;
        OTHER = 15;        
    }
    Correction correction = 3;

    // The immersion medium the lens is designed for
    // Note: OME-XML uses Enum here
    string emmersion = 4;

    // The numerical aperture of the lens expressed as a floating point (real)
    // number. Expected range 0.02 - 1.5 [units:none]
    optional float lens_na = 5;

    // The magnification of the lens as specified by the manufacturer - i.e.
    // '60' is a 60X lens. [units:none] Note: The type of this has been changed
    // from int to float to allow the specification of additional lenses e.g.
    // 0.5X lens
    optional float nominal_magnification = 6;

    // The magnification of the lens as measured by a calibration process- i.e.
    // '59.987' for a 60X lens. [units:none]
    optional float calibrated_magnification = 7;

    // The working distance of the lens expressed as a floating point (real)
    // number. Units are set by WorkingDistanceUnit.
    optional float working_distance = 8;

    // The units of the working distance - default:microns[µm].
    string working_distance_unit = 9;

    // Records whether or not the objective was fitted with an Iris. [flag]
    optional bool iris = 10;

    // Reference
    repeated string annotation_ids = 11;
}
