4 releases

0.2.0 Nov 20, 2022
0.1.5 Apr 27, 2019
0.1.4 Apr 24, 2019
0.1.3 Apr 24, 2019

#879 in Parser implementations

GPL-3.0 license

350KB
2K SLoC

cgats

Read, write, and manipulate CGATS color files

This crate is a library intended to read, write, and transform CGATS color files and is currently in development. Currently this library only supports ASCII text formats, but intends to add support for XML soon. The included binary is a simple implementation of the library's API.

What's new in v0.2

  • Complete rewrite with heavy reliance on iterators for reading and manipulating data.
  • Many new methods for iterating over data and converting betweeen types.
  • New example binary with added features.

Rust API Documentation

Or build the documentation yourself:

cargo doc --open

The CGATS format

Here is a basic CGATS color file:

CGATS.17
BEGIN_DATA_FORMAT
SAMPLE_ID	SAMPLE_NAME	CMYK_C	CMYK_M	CMYK_Y	CMYK_K
END_DATA_FORMAT
BEGIN_DATA
1	Cyan	100	0	0	0
2	Magenta	0	100	0	0
3	Yellow	0	0	100	0
4	Black	0	0	0	100
5	Blue	100	100	0	0
6	Red	0	100	100	0
7	Green	100	0	100	0
8	3cBlack	100	100	100	0
9	4cBlack	100	100	100	100
10	3cGray	50	40	40	0
11	1cGray	0	0	0	50
END_DATA

There are several more exmples in the test_files directory. The CGATS format is similar to TSV, but with a few additions. The BEGIN_DATA_FORMAT/END_DATA_FORMAT and BEGIN_DATA/END_DATA tags signal the way the measurements have been formatted.

Binary Usage

USAGE:
    cgats [OPTIONS] [FILE]... [SUBCOMMAND]

ARGS:
    <FILE>...    CGATS files

OPTIONS:
    -f, --output-file <output-file>...    Write output to a file
    -h, --help                            Print help information
    -P, --precision <precision>           Number of decimal places to round values to [default: 4]
    -V, --version                         Print version information

SUBCOMMANDS:
    average        Average two or more CGATS files
    colorburst     Convert to and from ColorBurst linearization format
    concatenate    Concatenate rows from multiple CGATS files
    delta          Calculate DeltaE between all values in two compatible CGATS files
    help           Print this message or the help of the given subcommand(s)
    info           Print basic CGATS info
    print          Print the processed CGATS file(s)
    transpose      Transpose chart patches given a layout width

Print basic CGATS info to console:

$ cgats test_files/cgats0.txt
cgats0.txt: Cgats[Cmyk, Lab, Xyz, Spectral(380, 780, 10); 1617]

Average values of 3 CGATS files:

cgats average test_files/cgats{1,2,3}.tsv
  • Note that these files must have the same DATA_FORMAT and sample count.

Concatenate sample sets from multiple CGATS files:

cgats cat test_files/cgats{1,2,3}.tsv
  • Note that these files must have the same DATA_FORMAT.

Calculate Delta E between each value pair in two CGATS files:

cgats delta --method 2000 test_files/colorburst{1,2}.lin

Calculate Delta E with a statistical analysis report:

$ cgats delta --report test_files/colorburst{1,2}.lin
Number of Samples: 126
DE Formula: DE2000
E-Factor (95th Percentile): 17.02

OVERALL 100% - (126 colors)
        Average DE: 7.7589
            Max DE: 17.8084
            Min DE: 1.4601
          StDev DE: 4.9772

BEST 95% - (120 colors)
        Average DE: 7.2736
            Max DE: 16.6847
            Min DE: 1.4601
          StDev DE: 4.5895

WORST 5% - (6 colors)
        Average DE: 17.4635
            Max DE: 17.8084
            Min DE: 17.0220
          StDev DE: 0.2825

  • Note that the two CGATS files must have the same number of samples and must each contain LAB_L, LAB_A, and LAB_B fields.

Binary Installation

First, you'll need to download and install rust. Then:

git clone https://gitlab.com/ryanobeirne/cgats
cd cgats
cargo install --example=cgats --path=.

TODO

  • Add conversion functions and support for conversion to and from CXF/MXF
  • Add support for writing data directly to a CGATS object, as from a spectrophotometer

Dependencies

~2MB