ccxxmake
Author: Graeme Gill

## spectro/ccxxmake

### Summary

For Colorimeters that rely on a calibration matrix, ccxxmake allows creation of a correction matrix file (ccmx) for a particular Colorimeter & Display combination, by making use a reference Spectrometer or Colorimeter instrument. This can then be used to improve the accuracy of subsequent measurements with that Colorimeter on that Display by using it with the dispcal, dispread and spotread -X option. A ccmx file can also be installed, and will then appear in the available display type selection (-y option). See Wide Gamut Displays and Colorimeters for more information on why this may be useful. [ Note that to make use of a colorimeter as a CCMX reference, you will have to provide two .ti3 files rather than using interactive measurement- see -f. ]
For Colorimeters that have sensor spectral sensitivity calibration information built into them (ie. the X-Rite i1d3, and DataColor Spyder4 & Spyder5), ccxxmake allows a creation of a calibration spectral sample (ccss) for a particular Display, by making use a reference Spectrometer instrument. This can then be used to improve the accuracy of subsequent measurements on that Display using such Colorimeters, by using it with the dispcal, dispread and spotread -X option, or it can be installed, and will then appear in the available display type selection (-y option).
NOTE that there is no point in attempting to use both a CCSS and a CCMX together, since they are just different ways of arriving at the same 3x3 colorimeter calibration matrix. If you have access to a spectrometer, the screen and the colorimeter, and you just need the calibration for yourself, then make a CCMX as it will be slightly more accurate. If you need to make a calibration for someone else, then a CCSS for their screen type is the way to do it, since it can be used with a different colorimeter than your particular instrument.
The instrument manufacturer may supply spectral sample files (see oeminst).
There is a list of contributed ccss (Colorimeter Correction Spectral Sample) files for some displays.
There is a list of contributed ccmx (Colorimeter Correction Matrix) files.

### Usage Summary

ccxxmake -t dtech [-options] correction.ccmx
-v Verbose mode
```-S` `Create CCSS rather than CCMX``
` `` `-f ref.ti3[,targ.ti3]``Create from one or two .ti3 files rather than measure.`
-display displayname [X11 only] Choose X11 display name
-d n[,m] [X11 only] Choose the display from the following list (default 1),
and optionally choose a different display m for VideoLUT access.
-d n Choose the display from the following list (default 1)
-d web[:port] Display via a web server at port (default 8080)
`` `-d cc[:n]` `Display via n'th ChromeCast (default 1, ? for list)
` -d madvr [MSWin] Display via MadVR Video Renderer
-d dummy Dummy (non-existant, invisible) display
-p Use telephoto mode (ie. for a projector, if available)
-a Use ambient mode (ie. for a projector, if available)
```-y X Display type - instrument specific list to choose from.``(CCMX)``
` `-z disptype Different display type for spectrometer (see -y)``
` `` `` `-P ho,vo,ss[,vs]``Position test window and scale it`
ho,vi: 0.0 = left/top, 0.5 = center, 1.0 = right/bottom etc.
ss: 0.5 = half, 1.0 = normal, 2.0 = double etc.
ss,vs: = optional horizontal, vertical scale.
-F Fill whole screen with black background
-n [X11 only] Don't set override redirect on test window
-N Disable initial calibration of instrument if possible
-H Use high resolution spectrum mode (if available)
-C "command" Invoke shell "command" each time a color is set
-M "command" Invoke shell "command" each time a color is measured
-o observ Choose CIE Observer for CCMX spectral data:
1931_2 (def.), 1964_10, `2012_2, 2012_10,` S&B 1955_2, shaw, J&V 1978_2 or file.cmf
-s steps Override default patch sequence combination steps (default 3)
-W n|h|x Override serial port flow control: n = none, h = HW, x = Xon/Xoff
-D [level] Print debug diagnostics to stderr
-E "description" Override the default overall description
-I "displayname" Set display make and model description (optional)
-t dtech Set display technology type
c CRT
m Plasma
l LCD
1 LCD CCFL
2 LCD CCFL IPS
3 LCD CCFL PVA
4 LCD CCFL TFT
L LCD CCFL Wide Gamut
5 LCD CCFL Wide Gamut IPS
6 LCD CCFL Wide Gamut PVA
7 LCD CCFL Wide Gamut TFT
e LCD White LED
8 LCD White LED IPS
9 LCD White LED PVA
a LCD White LED TFT
b LCD RGB LED
b LCD RGB LED IPS
c LCD RGB LED PVA
d LCD RGB LED TFT
h LCD RG Phosphor
e LCD RG Phosphor IPS
f LCD RG Phosphor PVA
g LCD RG Phosphor TFT
r LCD PFS Phosphor
s LCD PFS Phosphor IPS
t LCD PFS Phosphor PVA
v LCD PFS Phosphor TFT
i LCD GB-R Phosphor
x LCD GB-R Phosphor IPS
y LCD GB-R Phosphor PVA
z LCD GB-R Phosphor TFT
o LED OLED
a LED AMOLED
w LED WOLED
p DLP Projector
h DLP Projector RGB Filter Wheel
i DPL Projector RGBW Filter Wheel
j DLP Projector RGBCMY Filter Wheel
u Unknown
`-U c Set UI selection character(s)`
-Y r|n Override refresh, non-refresh display mode
`-Y R:rate Override measured refresh rate with rate Hz`
-YA Use non-adaptive integration time mode (if available).
correction.ccmx | calibration.ccss
File to save result to.

### Usage Details and Discussion

The -v flag causes extra information to be printed out during chartread operation.
-S By default a Colorimeter Correction Matrix (CCMX) will be created from both Colorimeter and Spectrometer readings, which allows correction for errors with a particular Colorimeter and Display combination. If the -S flag is used, then instead a Colorimeter Calibration Spectral Set (CCSS) file is created from just the Spectrometer readings, that allows calibrating any suitable Colorimeter to the Display.
-f ref.ti3[,targ.ti3] By default ccxxmake creates a CCMX file by displaying test patches on the screen, and then prompting you to measure them interactively with the two instruments. An alternative is to create a small number of test values using targen suitable for display profiling (or use the ref/ccxx.ti1 file provided with ArgyllCMS), and then measure them with the two instruments using dispread to create a reference and target .ti3 files, and then provide the two files as arguments to ccxxmake -f. Normally the reference file will be created using a spectral instrument and you will want to use the -s flag with dispread for this. If you want to use a colorimeter as a reference instrument, then make sure that it is the first file provided to the ccxxmake -f option. The filenames should be concatenated with a "," separator without spaces. You will also have to supply a display name using the -I option and/or technology description using -T.
When creating a CCSS file, only spectral readings from the display measured with the reference instrument are needed, and a single .ti3 file should be provided.
When running on a UNIX based system that used the X11 Windowing System, ccxxmake will by default use the $DISPLAY environment variable to determine which display and screen to read from. This can be overridden by supplying an X11 display name to the -display option. Note that if Xinerama is active, you can't select the screen using $DISPLAY or -display, you have to select it using the -d parameter.
By default the main display will be the location of the test window. If the system has more than one display or screen, an alternate display/screen can be selected with the -d parameter. If you invoke ccxxmake so as to display the usage information (i.e. "dispcal -?" or "dispcal --"), then the discovered displays/screens will be listed. Multiple displays may not be listed, if they appear as a single display to the operating system (ie. the multi-display support is hidden in the video card driver). On UNIX based system that used the X11 Windowing System, the -d parameter will override the screen specified by the $DISPLAY or parameter.
Because of the difficulty cause by TwinView and MergedFB in X11 based systems, you can optionally specify a separate display number after the display that is going to be used to present test patches, for accessing the VideoLUT hardware. This must be specified as a single string, e.g. -d 1,2 . Some experimentation may be needed using dispwin on such systems, to discover what screen has access to the VideoLUT hardware, and which screens the test patches appear on.
-dweb or -dweb:port starts a standalone web server on your machine, which then allows a local or remote web browser to display the the color test patches. By default port 8080 is used, but this can be overridden by appending a : and the port number i.e. -dweb:8001. The URL will be http:// then name of the machine or its I.P. address followed by a colon and the port number - e.g something like http://192.168.0.1:8080. If you use the verbose option (-v) then a likely URL will be printed once the server is started, or you could run ipconfig (MSWin) or /sbin/ifconfig (Linux or OS X) and identify an internet address for your machine that way. You may have to modify any firewall to permit port 8080 to be accessed on your machine.
-dcc or -dcc:no causes test patches to be displayed using and available ChromeCast to your TV. Use -dcc:? to display a list of ChromeCasts on your local network. You may have to modify any firewall to permit port 8081 to be accessed on your machine if it falls back to the Default receiver.
-dmadvr [MSWin only] causes test patches to be displayed using the MadVR video renderer. Note that will have to start MadTPG before running ccxxmake, and that while you can adjust the "Test Pattern Configuration" controls, you should not normally alter the "Existing Calibration" controls, as ccxxmake will set these appropriately.
-ddummy causes test patches not to be displayed at all. This is useful when patch values are going to be displayed via the -C option.
The -p flag allows measuring in telephoto mode, using instruments that support this mode, e.g. the ColorMunki. Telephoto mode is one for taking emissive measurements from a distance (ie. telespectometer, tele-colorimeter) mode, and typically would be used for measuring projector type displays. If a device does not support a specific telephoto mode, then the normal emissive mode may be suitable for measuring projectors.
The -a flag allows measuring in ambient mode, using instruments that support this mode. This typically would be used for measuring projector type displays when the light levels reflected from the projection surface are very low. Note that this means that the color value will not be quite as accurate, because the effect the projection surface has on the color is not taken into account.
The -y flag allows setting the Display Type used as a base for color correction matrix CCMX creation. Only base calibration display types will be listed. The selection typically determines two aspects of of the instrument operation: 1) It may set the measuring mode to suite refresh or non-refresh displays. Typically only LCD (Liquid Crystal) displays have a non-refresh nature. 2) It may select an instrument internal calibration matrix suitable for a particular display type. The selections available depends on the type and model of instrument, and a list of the options for the discovered instruments will be shown in the usage information. For more details on what particular instruments support and how this works, see Operation of particular instruments. Any CCMX created will work on top of the selected Display Type, so to be valid, the same Display Type must be selected whenever the CCMX is used with this instrument. Installed CCMX files will automatically select the appropriate base type.
The -z flag allows setting a different Display Type for the reference spectral instrument, such as refresh or non-refresh type, if it supports it. You may have to use this if you are setting a specific base type for the colorimeter using -y, and the spectrometer doesn't have this display type.
The -P parameter allows you to position and size the test patch window. By default it is places in the center of the screen, and sized appropriately for the type of instrument. The ho and vo values govern the horizontal and vertical offset respectively. A value of 0.0 positions the window to the far left or top of the screen, a value of 0.5 positions it in the center of the screen (the default), and 1.0 positions it to the far right or bottom of the screen. If three parameters are provided, then the ss parameter is a scale factor for the test window size. A value of 0.5 for instance, would produce a half sized window. A value of 2.0 will produce a double size window. If four parameters are provided, then the last two set independent horizontal and vertical scaling factors. Note that the ho,vo,ss or ho,vo,hs,vs numbers must be specified as a single string (no space between the numbers and the comma). For example, to create a double sized test window at the top right of the screen, use -P 1,0,2 . To create a window twice as wide as high: -P 1,0,2,1.
The -F flag causes the while screen behind the test window to be masked with black. This can aid black accuracy when measuring CRT displays or projectors.
-n When running on a UNIX based system that used the X11 Windowing System, dispcal normally selects the override redirect so that the test window will appear above any other windows on the display. On some systems this can interfere with window manager operation, and the -n option turns this behaviour off.
-N Any instrument that requires regular calibration will ask for calibration on initial start-up. Sometimes this can be awkward if the instrument is being mounted in some sort of measuring jig, or annoying if several sets of readings are being taken in quick succession. The -N suppresses this initial calibration if a valid and not timed out previous calibration is recorded in the instrument or on the host computer. It is advisable to only use this option on the second and subsequent measurements in a single session.
The -H option on high resolution spectral mode, if the instrument supports it, such as the Eye-One Pro. See Operation of particular instruments for more details. This may give better accuracy for display measurements.
The -C "command" option allows a method of relaying each test value to some other display than that on the system running dispcal (for instance, a photo frame, PDA screen etc.), by causing the given command to be invoked to the shell, with six arguments. The first three arguments are the RGB test color as integers in the range 0 to 255, the second three parameters are the RGB test color as floating point numbers in the range 0.0 to 1.0. The script or tool should relay the given color to the screen in some manner (e.g. by generating a raster file of the given color and sending it to the display being profiled), before returning. Note that a test window will also be created on the system running ccxxmake.
The -M "command" option allows a method of gathering each test value from some external source, such as an instrument that is not directly supported by Argyll. The given command is invoked to the shell, with six arguments. The first three arguments are the RGB test color as integers in the range 0 to 255, the second three parameters are the RGB test color as floating point numbers in the range 0.0 to 1.0. The script or tool should create a file called "command.meas" that contains the XYZ values for the given RGB (or measured from the test window) in cd/m^2 as three numbers separated by spaces, before returning. If the command returns a non-zero return value, cxxmake will abort. Note that a test window will also be created on the system running ccxxmake.
(CCMX creation) The -o flag allows specifying a tristimulus observer, and is used to compute tristimulus values from spectral readings. The following choices are available:
1931_2 selects the standard CIE 1931 2 degree observer. The default.
1964_10 selects the standard CIE 1964 10 degree observer.
2012_2 selects the proposed CIE 2012 2 degree observer.
2012_10 selects the proposed CIE 2012 10 degree observer.
1955_2 selects the Stiles and Birch 1955 2 degree observer
1978_2 selects the Judd and Voss 1978 2 degree observer
shaw selects the Shaw and Fairchild 1997 2 degree observer
file.cmf selects an observer specified by the given .cmf file.
The -s steps parameter overrides the default number of test patch combination steps used in measuring a colorimeter & display combination. The steps are those out of every combination of R,G & B values of the given number of steps that have at least one colorant at 100%. So 2 steps gives 7 test patches, 3 gives 19, 4 gives 37, 5 gives 61, 6 gives 91 etc. Note that typically this won't make much difference to the resulting calibration, since it depends primarily on the underlying spectral characteristics of the display.
The -W n|h|x parameter overrides the default serial communications flow control setting. The value n turns all flow control off, h sets hardware handshaking, and x sets Xon/Xoff handshaking. This commend may be useful in workaround serial communications issues with some systems and cables.
The -D flag causes communications and other instrument diagnostics to be printed to stdout. A level can be set between 1 .. 9, that may give progressively more verbose information, depending on the instrument. This can be useful in tracking down why an instrument can't connect.
The -E parameter allows overriding the ccmx/ccss files overall description tag. Normally this is not necessary. With most command line shells, it will be necessary to enclose the parameter with double quotes, so that spaces and other special characters are included in the parameter, and not mistaken for the start of another flag, or as a final command line parameter.
The -I parameter allows optional setting of the display description string in the resulting ccmx/ccss file. Since the default display description is probably very generic, it is highly recommended that a description of the make and model of the display be provided here. The default or given display description will be printed before the menu. With most command line shells, it will be necessary to enclose the parameter with double quotes, so that spaces and other special characters are included in the parameter, and not mistaken for the start of another flag, or as a final command line parameters.
The -t parameter allows setting of the display technology type from the available list. You can get a usage that includes the list using "ccxxmake -??". This is a required parameter, since it conveys information about the refresh type and settling time of the display. If the specific details of the display are not known (i.e. backlight type, pannel type etc.), then choose the next most generic type. If none of these are applicable, choose "Unknown".
The -U parameter allows setting of the user interface selection character this display type can be selected by, if installed. This character will only be used if there is no clash with any preceding selections. Characters in the range 0-9, A-Z a-z can be used.
The -Y r and -Y n options overrides the refresh display mode set by the -y display type selection, with -Y r forcing refresh display mode, and -Y n forcing a non-refresh display mode. Not all instruments support a display measurement refresh mode, or the ability to override the mode set by the display type selection.
The -Y R:rate options overrides calibration of the instrument refresh rate. This may be useful if the instrument supports this function and the refresh rate cannot be accurately calibrated from the display itself.
The -Y A option uses a non-adaptive integration time emission measurement mode, if the instrument supports it, such as the Eye-One Pro or ColorMunki. By default an adaptive integration time measurement mode will be used for emission measurements, but some instruments support a fixed integration time mode that can be used with display devices. This may give increased consistency and faster measurement times, but may also give less accurate low level readings.
The correction.ccmx is the name of the file to save the resulting Colorimeter Correction Matrix to. It is best to give it a short but informative name that includes the Colorimeter model and the display make and model. By convention it should have a .ccmx file extension.
The correction.ccss is the name of the file to save the resulting Colorimeter Calibration Spectral Samples to. It is best to give it a short but informative name that includes the display technology or model. By convention it should have a .ccss file extension.
If you are going to use the same CCMX or CCSS file all the time, then you may want to set the ARGYLL_COLMTER_CAL_SPEC_SET environment variable.

### Instrument Communications:

Unlike the other measurement utilities, ccxxmake doesn't connect to the instrument until it is about to make a measurement. This allows for the possibility of using a different instrument for each measurement.
It will display a menu:
Press 1 .. 4:
1) Select an instrument, Currently 1 'usb:/bus4/dev2/ (GretagMacbeth i1 Pro)'
2) Measure test patches with current instrument
3) [ Compute Colorimeter Correction Matrix & save it ]
4) Exit
For creating a CCMX there are two measurements to be made, after which the correction matrix can be computed and saved. Before each measurement, the instrument may need calibrating. For creating a CCSS a single measurement is needed.
A spectral measurement using a spectral instrument is always needed.
A measurement using the Colorimeter that the correction matrix is being created for is needed in the case of creating a CCMX, but not needed when creating a CCSS.
There will be a message before the menu indicating which of the measurements has been completed.

#### Display Setup:

Because ccmx/ccss is measuring spectral matching, the exact levels of each channel is not important, so the display settings or calibration state shouldn't make any difference to the result, as long as it is the same for the readings of both instruments. Similarly, the number and variety of test patches shouldn't make a huge difference, as long as there is at least Red, Green, Blue and White test patches.