Description of the .ti3 format
    This is an ASCII text, CGATS,
    Argyll specific format, used to hold device value and CIE/Spectral
    value pairs, the raw information needed to create device profiles.
    This file is typically created using the chartread,  dispread, filmread,
     scanin, 
      fakeread or one of the conversion tools such as cb2ti3, kodak2ti3,
    txt2ti3.
    
    While fully compatible with the CGATS.5 Data Exchange Format, the
    particular required keywords and fields are unique to Argyll, hence
    an Argyll specific file identifier CTI3
    is used to avoid confusion with standard ANSI or CGATS files.
    
    The .ti3 format changes
    from time to time with new releases, to add new functionality, but
    generally retains backwards compatibility. Note that in the
    description below, the word "may" indicates an optional component,
    while the word "shall" indicates a necessary component.
    
    Generally a .ti3 file contains only one table, the table containing
    the colorimetric information. The exception is for a display in
    which a set of RAMDAC values (most likely the result of display
    calibration, or simply the video LUT (RAMDAC) values present in the
    display when the test values were read) are recorded in a second
    table.
    
    
    The first table contains the following:
    
    The file identifier (First 7 characters) shall be CTI3.
    
    A # character introduces a
    comment.
    
    There may be DESCRIPTOR, ORIGINATOR, or CREATED keywords and values (as
    per CGATS).
    
    There shall be a DEVICE_CLASS
    keyword that has a value of "OUTPUT",
    "DISPLAY",  "INPUT" or "EMISINPUT".
    This indicates to the profile program what type of device the color
    information is from. (An OUTPUT device is typically a printer. An
    INPUT device is typically a Scanner or Camera with data from a
    reflective reference chart. An EMISINPUT is a camera with emissive
    rather than reflective reference data. ).
    
    An "OUTPUT" type device may
    have a TOTAL_INK_LIMIT
    keyword that has a numeric value indicating the maximum sum of the
    device channel values as a percentage (T.A.C.), used in creating the
    test chart. This will be used by the profiler as a value indicating
    what the valid device gamut is, and what total ink limit should be
    used in creating the profile tables.
    
    An "OUTPUT" type device may
    have an ILLUMINANT_WHITE_POINT_XYZ
    keyword that contains the XYZ of the illuminant used to compute the
    CIE values from spectral reflectance or transmittance values. If
    this tag is absent, the illuminant is assumes to be ICC standard
    D50.
    
    A "DISPLAY" type device may
    have a LUMINANCE_XYZ_CDM2
    keyword that contains the absolute XYZ value of white in candelas
    per meter squared, e.g. "112.334770
      119.657745 121.474236".
      
    A display device may also have a NORMALIZED_TO_Y_100 keyword that must have a value
    of "NO" or "YES", to indicate whether the
    CIE values have been normalised so that the largest has a Y value of
    100. If this is a display type device and there is no NORMALIZED_TO_Y_100 keyword,
    then it can be assumed that the value are normalized to Y = 100. If the values are
    normalized to Y = 100, then the absolute values can be restored by
    multiplying the XYZ values by the LUMINANCE_XYZ_CDM2
    Y value and dividing by 100.
    
    There may be a keyword TARGET_INSTRUMENT
    which will identify the instrument used to read the test values.
    This is used by the profiling program to determine the spectral
    characteristics of the instrument illuminant if Fluorescent Whitener
    Compensation is desired. The value shall be one of:
     "X-Rite DTP20"
      "X-Rite DTP22"
      "X-Rite DTP41"
      "X-Rite DTP51"
      "X-Rite DTP92"
      "X-Rite DTP94"
      "GretagMacbeth Spectrolino"
      "GretagMacbeth SpectroScan"
      "GretagMacbeth SpectroScanT"
      "Spectrocam"
      "GretagMacbeth i1 Display 1"
      "GretagMacbeth i1 Display 2"
      "X-Rite i1 DisplayPro, ColorMunki Display"
      "GretagMacbeth i1 Monitor"
      "GretagMacbeth i1 Pro"
      "X-Rite i1 Pro 2"
      "X-Rite ColorMunki"
      "Colorimtre HCFR"
      "ColorVision Spyder1"
      "ColorVision Spyder2"
      "Datacolor Spyder3"
      "Datacolor Spyder4"
      "Datacolor Spyder5"
      "GretagMacbeth Huey"
      "ColorMunki Smile"
      "JETI specbos 1201"
      "JETI specbos"
      "Klein K-10"
      "Image Engineering EX1"
    
    All instruments except the Spectrocam are assumed to have an "A"
    type illuminant (incandescent lamp of  2850 degrees Kelvin.)
    
    There may be a INSTRUMENT_TYPE_SPECTRAL
    keyword that must have a value of "NO"
    or "YES", to indicate
    whether the instrument is based on spectral measurement or not.
    
    There may be a DISPLAY_TYPE_REFRESH
    keyword that must have a value of "NO"
    or "YES", to indicate
    whether the instrument was used in a display refresh mode during
    measurement. 
    
    There may be keywords with associated values SINGLE_DIM_STEPS, COMP_GREY_STEPS, MULTI_DIM_STEPS or FULL_SPREAD_PATCHES, that
    document the composition of the test chart patches.
    
    There shall be a keyword COLOR_REP
    that has a value that indicates what colorspaces the test values
    connect. The colorspaces shall be encoded with one  or two
    letters per component, and the two color spaces shall then separated
    by an _ (underscore) character. For output and
    display devices, the device space shall come first, followed by the
    PCS space. For an input device, the PCS shall come first, followed
    by the device space. The PCS space shall be either XYZ space,
    indicated by XYZ, or D50
    while point L*a*b* space, indicated by LAB. The device spaces shall use the following
    letter encoding:
    
       
Cyan
            
                  
    C
        Magenta          
              M
        Yellow    
                     
    Y
        Black   
                        
    K
        Orange   
                     
    O
        Red
                             
    R
        Green     
                     
    G
        Blue      
                       
    B
        White  
                
             W
        Light Cyan
                    
    c
        Light
    Magenta            
    m
        Light
    Yellow              
    y
        Light
    Black                
    k
        Medium Cyan 
               2c
        Medium Magenta
           2m
        Medium Yellow
             2y
        Medium Black
               2k
        Light Light Black        1k
    
    There may be an a previx i
    preceeding the device space letter encoding, indicating that
    although the space appears to be an additive space, it is in fact a
    subtractive device.
    
    Typical values might be: "RGB_XYZ"
    or "RGB_LAB" for an RGB
    display, "iRGB_XYZ" or "iRGB_LAB" for an RGB printer, "CMYK_XYZ" for a printer, "XYZ_RGB" for an RGB scanner.
    
    If spectral values are going to be included in the file, the
    following keywords and values shall be used:
    
      SPECTRAL_BANDS shall
    contain the number of spectral bands in the readings, e.g. "36".
      SPECTRAL_START_NM
    shall contain the wavelength in nanometers of the first band, e.g. "380.0".
      SPECTRAL_END_NM
    shall contain the wavelength in nanometers of the last band, e.g. "730.0".
    
    The NUMBER_OF_FIELDS
    keyword shall have a value that indicates the number of fields in
    each data set, e.g. 43 (as
    per CGATS).
    
    The start of the declaration of the fields shall be marked by the BEGIN_DATA_FORMAT keyword (as
    per CGATS).
    Then shall follow the names of the fields. Standard CGATS field
    names such as:
    
     SAMPLE_ID, RGB_R, RGB_G, RGB_B, CMYK_C, CMYK_M, CMYK_Y, CMYK_K, XYZ_X, XYZ_Y, XYZ_Z, LAB_L, LAB_A or LAB_B
    
    shall be used where appropriate. Other device fields shall use the
    appropriate pattern, e.g. CMYKOG_G
    etc. Spectral band values shall be named SPEC_XXX, where XXX
    is the nearest integer values of the number of nanometers of the
    band.
    
    Optional patch location information shall use the  SAMPLE_LOC field and shall be of
    quoted string type.
    
    The definition of the fields shall be terminated by the END_DATA_FORMAT keyword (as per
    CGATS).
    
    The NUMBER_OF_SETS keyword
    shall have a value that indicates the number of sets of data, e.g. 1000 (as per CGATS).
    
    The start of the values of the data sets shall be marked by the BEGIN_DATA keyword (as per
    CGATS).
    
    Each set of data shall be on one line, and shall be separated by
    white space. All device values shall be percentages (e.g. values
    from 0.0 to 100.0). XYZ values shall normalized to a Y value of
    100.0. L*a*b* values will have their normal range (L* 0.0 to 100.0,
    a* and b* typically -128.0 to 128.0).
    
    The end of the values of the data sets shall be marked by the END_DATA keyword (as per CGATS).
    
    Generally any other keywords and values will be ignored.
    
    If a second table is present, and it is a display RAMDAC
    calibration, printers or input devices per channel calibration
    curves, and will be of the CAL file
      format..