(v13) How to apply a calibration in Harlequin Core
This page applies to Harlequin v13.1r0 and later; both Harlequin Core and Harlequin MultiRIP.
Page content:
Calibration dictionaries may be used directly in the HMR or HHR RIPs, although in the HMR RIP it would be more usual to use them via the GUI. This section describes how to use calibration dictionaries directly in an HHR TestConfig as well as describing some other PostScript language operators that it is recommended to use in conjunction with calibration or that may be useful to know about when creating a TestConfig containing calibration.
The PostScript setcalibration operator
The setcalibration
operator is in internaldict
so the actual PostScript code to use is:
<< calibration dict >> 1183615869 internaldict /setcalibration get exec
OverprintPreview and calibration
In order to apply calibration correctly in transparent regions you must set the /OverprintPreview
flag to a value other than the default.
The setting that is generally recommended is as follows:
<< /OverprintPreview /SpotsOnly
>> setinterceptcolorspace
<<>> setpagedevice
If, however, you are already using /OverprintPreview true
in your TestConfig as in the following example this will also apply calibration correctly and may be retained:
<< /OverprintPreview true
>> setinterceptcolorspace
<<>> setpagedevice
For more information, see OverprintPreview and calibration.
If you want to apply a bump-up curve you must apply it using the /BumpUpCurve
array in the /ActualPress
calibration.
The setpagedevice operator and calibration
In order to allow PostScript language jobs to process correctly, there must be a setpagedevice
call after the setcalibration
call and the setinterceptcolorspace
call which sets up /OverprintPreview
. This can either contain other information needed for the TestConfig or it can, more simply, be:
<< >> setpagedevice
This call is not needed for other Page Description Languages, but it does no harm to them to include it in the TestConfig.
DefaultScreenName and calibration
The RIP has a default screen that it will use for transparent objects if the /TopMost
user parameter is not set. By default, this is (Euclidean)
. Unless it is overridden by /OverrideSpotFunctionName
this screen will also be used for any objects which are placed on the page before the job sets up a specific halftone, and for the /EraseColor
(although such objects do not normally show).
The default screen name can be changed in the TestConfig. If, for example you wish to change the default screen to /Line
, add the following:
<< /DefaultScreenName /Line >> setpagedevice
As the /DefaultScreenName
is used for the /EraseColor
at least, (unless overridden by /OverrideSpotFunctionName
), it is important to ensure the calibration groups for any of the four device types which are in use, contain a calibration set sub-dictionary which is valid for this screen. This can either be done by including a sub-dictionary with a /WarningsCriteria
dictionary containing an entry for /HalftoneName
with a value of the screen concerned, such as, /Line
in the above example, or it can also be achieved by including a calibration sub-dictionary with no /HalftoneName
entry, in its /WarningsCriteria
dictionary, as this is valid for any halftone.
OverrideSpotFunctionName and calibration
Sometimes it is useful to be able to override spot functions named in the job with a single spot function instead. This is set up using a systemparam as follows:
<< /OverrideSpotFunctionName /Line >> setsystemparams
or
<</OverrideSpotFunctionName (Line) >> setsystemparams
To remove the override use:
<< /OverrideSpotFunctionName null >> setsystemparams
Again, if you are using /OverrideSpotFunctionName
you need to ensure that the calibration dictionary contains a calibration set sub-dictionary, which is valid for the override that you have selected.
NegativePrint and calibration
If the implementation using the HHR SDK supports /NegativePrint
, that is, it will print a negative image of the job, then if this is wanted for a particular set up, this is signaled in the TestConfig as follows:
<< /NegativePrint true >> setpagedevice
setpagedevice
and setsystemparams
calls are cumulative although they may be issued separately. It is usually more efficient to combine them into a single call.
Example configuration files
The following examples show how the CMYKSeparations300dpi file supplied in the SWclrip/TestConfig
folder of the HHR SDK can be extended to support calibration. They illustrate the use of some of the keys above.
Example 1:
% CMYK separations, 300 dpi
% Copyright (C) 2014 Global Graphics Software Ltd. All rights reserved.
<<
/PageBufferType /LE
/Separations true
/HWResolution [ 300 300 ]
/DefaultScreenName /Line
/NegativePrint true % request the SDK client to make a negative image of the job
>> setpagedevice
<< /OverprintPreview /SpotsOnly >> setinterceptcolorspace
<<
% There is no Device calibration in this dictionary presumably because the
% film device or CTP is linear, so there is just an ActualPress calibration
% to compensate for dot gain.
/CalibrationType 6
/MissingCalibrationAbort false
/ActualPress[
<<
% This calibration is the fallback for any conditions.
% Remove this if it is preferable to abort the job if an unexpected
% halftone comes along.
% Compensate for dot gain at 50% by calibrating to 40%
/Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 1.0 1.0 ] >>
/BumpUpCurve [0.0 0.0 0.99 0.9 0.99 1.0 1.0 1.0 ]
>>
<<
% This is an important one as it ensures we can calibrate for
% the DefaultScreenName. This is needed for the the white background
% of the job even if no dots actually show for that and also for any
% marks that are made before the job sets up a halftone screen.
% It may however be omitted if using a fallback calibration valid for
% any conditions.
% Compensate for dot gain at 50% by calibrating to 40%
/WarningsCriteria
<<
/HalftoneName /Line
>>
/Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 1.0 1.0 ] >>
/BumpUpCurve [0.0 0.0 0.75 0.75 0.99 0.9 0.99 1.0 1.0 1.0 ]
>>
<<
% Compensate for dot gain at 50% by calibrating to 40%
% and for dot gain at 40% by calibrating to 30%
/WarningsCriteria << /HalftoneName /Round >>
/Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 0.6 0.7 1.0 1.0 ] >>
/BumpUpCurve [0.0 0.0 0.7 0.7 0.996 0.9 0.996 1.0 1.0 1.0 ]
>>
]
>>
1183615869 internaldict /setcalibration get exec
% This additional setpagedevice call is needed for PS jobs.
% It makes no difference for other PDLs.
<< >> setpagedevice
Example 2:
% CMYK separations, 300 dpi
% Copyright (C) 2014 Global Graphics Software Ltd. All rights reserved.
<<
/PageBufferType /LE
/Separations true
/HWResolution [ 300 300 ]
/DefaultScreenName /Line
>> setpagedevice
<< /OverprintPreview /SpotsOnly >> setinterceptcolorspace
<<
/CalibrationType 6
/MissingCalibrationAbort false
/Device[
<<
% This calibration is the fallback for any conditions.
% Remove this if it is preferable to abort the job if an unexpected
% halftone comes along.
% In this case it is linear.
/Default << /CalibrationType 2 /Curve [ 0.0 0.0 1.0 1.0] >>
>>
<<
% This is an important one as it ensures we can calibrate for
% the DefaultScreenName. This is needed for the the white background
% of the job even if no dots actually show for that and also for any
% marks that are made before the job sets up a halftone screen.
% It may however be omitted if using a fallback calibration valid for
% any conditions.
% For test purposes this has been setup to make Cyan print very
% heavily, i.e. 20% Cyan prints as 90%, and Magenta very light
% i.e. 80% Magenta prints as 30%.
/WarningsCriteria
<<
/HalftoneName /Line
>>
/Default << /CalibrationType 2 /Curve [ 0.0 0.0 1.0 1.0 ] >>
/Cyan << /CalibrationType 2 /Curve [ 0.0 0.0 0.8 0.1 1.0 1.0 ] >>
/Magenta << /CalibrationType 2 /Curve [ 0.0 0.0 0.2 0.7 1.0 1.0 ] >>
>>
<<
% For test purposes this has been set up to make black print very
% heavily, i.e. 30% black prints as 85%.
/WarningsCriteria << /HalftoneName /Round >>
/Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.7 0.15 1.0 1.0 ] >>
/BumpUpCurve [0.0 0.0 0.7 0.7 0.996 0.9 0.996 1.0 1.0 1.0 ]
>>
]
/ActualPress[
<<
% This calibration will is the fallback for any conditions.
% Remove this if it is preferable to abort the job if an unexpected
% halftone comes along.
% Compensate for dot gain at 50% by calibrating to 40%
/Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 1.0 1.0 ] >>
/BumpUpCurve [0.0 0.0 0.99 0.9 0.99 1.0 1.0 1.0 ]
>>
<<
% This is an important one as it ensures we can calibrate for
% the DefaultScreenName. This is needed for the the white background
% of the job even if no dots actually show for that and also for any
% marks that are made before the job sets up a halftone screen.
% It may however be omitted if using a fallback calibration valid for
% any conditions.
% Compensate for dot gain at 50% by calibrating to 40%
/WarningsCriteria
<<
/HalftoneName /Line
>>
/Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 1.0 1.0 ] >>
/BumpUpCurve [0.0 0.0 0.75 0.75 0.99 0.9 0.99 1.0 1.0 1.0 ]
>>
<<
% Compensate for dot gain at 50% by calibrating to 40%
% and for dot gain at 40% by calibrating to 30%
/WarningsCriteria << /HalftoneName /Round >>
/Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 0.6 0.7 1.0 1.0 ] >>
/BumpUpCurve [0.0 0.0 0.7 0.7 0.996 0.9 0.996 1.0 1.0 1.0 ]
>>
]
>>
1183615869 internaldict /setcalibration get exec
% This additional setpagedevice call is needed for PS jobs.
% It makes no difference for other PDLs.
<< >> setpagedevice
Example 3:
% CMYK separations, 300 dpi
% Copyright (C) 2014 Global Graphics Software Ltd. All rights reserved.
<<
/PageBufferType /LE
/Separations true
/HWResolution [ 300 300 ]
/DefaultScreenName /Round
>> setpagedevice
<< /OverprintPreview /SpotsOnly >> setinterceptcolorspace
<<
/CalibrationType 6
/MissingCalibrationAbort false
/Device [
<<
/ForceSolids true
/CalibrationName (round)
/WarningsCriteria
<<
/HalftoneName /Round
>>
/Cyan
<<
% For test purposes this makes Cyan very dark, i.e. 50% Cyan
% prints as 90%.
/CalibrationType 2
/ForceSolids true
/Curve [[0.0 0.0 0.5 0.1 1.0 1.0 ] [0 0 1 1 ] ]
>>
/Magenta
<<
% Linear calibration
/CalibrationType 2
/ForceSolids true
/Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
>>
/Yellow
<<
% Linear calibration
/CalibrationType 2
/ForceSolids true
/Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
>>
/Black
<<
% Linear calibration
/CalibrationType 2
/ForceSolids true
/Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
>>
/Default
<<
% Linear calibration
/CalibrationType 2
/Curve [[] [0 0 1 1 ] ]
>>
>>
<<
/ForceSolids true
/CalibrationName (line)
/WarningsCriteria
<<
/HalftoneName /Line
>>
/Cyan
<<
% Linear calibration
/CalibrationType 2
/ForceSolids true
/Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
>>
/Magenta
<<
% For test purposes this makes Magenta very light, i.e. 50%
% Magenta prints as 10%.
/CalibrationType 2
/ForceSolids true
/Curve [[0.0 0.0 0.5 0.9 1.0 1.0 ] [0 0 1 1 ] ]
>>
/Yellow
<<
% Linear calibration
/CalibrationType 2
/ForceSolids true
/Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
>>
/Black
<<
% Linear calibration
/CalibrationType 2
/ForceSolids true
/Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
>>
/Default
<<
% Linear calibration
/CalibrationType 2
/Curve [[] [0 0 1 1 ] ]
>>
>>
]
/ActualPress
<<
% Note in this example the ActualPress calibration is not for a calibration
% group at all, i.e. this calibration will be applied to any halftone.
/CalibrationName (CommercialA)
/ForceSolids true
/Cyan
<<
/CalibrationType 2
/ForceSolids true
/Curve [0.0 0.0 0.00717425 0.02 0.0162743 0.04 0.0233935 0.06 0.0343828 0.08
0.0530851 0.1 0.061653 0.12 0.0667412 0.14 0.0843521 0.16 0.0958065 0.18 0.110828
0.2 0.179115 0.3 0.262697 0.4 0.306025 0.45 0.365769 0.5 0.425477 0.55 0.473972 0.6
0.590661 0.7 0.727825 0.8 0.745993 0.82 0.777854 0.84 0.809002 0.86 0.833127 0.88
0.86213 0.9 0.894259 0.92 0.914075 0.94 0.94573 0.96 0.980797 0.98 1.0 1.0 ]
>>
/Magenta
<<
/CalibrationType 2
/ForceSolids true
/Curve [0.0 0.0 0.0089556 0.02 0.0214646 0.04 0.0305122 0.06 0.0372412 0.08
0.0560291 0.1 0.0656937 0.12 0.082176 0.14 0.0877552 0.16 0.0883895 0.18 0.0999761
0.2 0.182636 0.3 0.25516 0.4 0.304374 0.45 0.360587 0.5 0.420284 0.55 0.469196 0.6
0.574143 0.7 0.705515 0.8 0.735662 0.82 0.770782 0.84 0.797661 0.86 0.823408 0.88
0.852011 0.9 0.888007 0.92 0.91206 0.94 0.943567 0.96 0.983217 0.98 1.0 1.0 ]
>>
/Yellow
<<
/CalibrationType 2
/ForceSolids true
/Curve [0.0 0.0 0.00493813 0.02 0.0114393 0.04 0.0169165 0.06 0.0241274 0.08
0.0333467 0.1 0.0415312 0.12 0.0519952 0.14 0.0632076 0.16 0.0731615 0.18 0.0858877
0.2 0.158414 0.3 0.250259 0.4 0.29175 0.45 0.332014 0.5 0.3797 0.55 0.44511 0.6
0.541285 0.7 0.65428 0.8 0.690053 0.82 0.723688 0.84 0.746899 0.86 0.787037 0.88
0.80781 0.9 0.861885 0.92 0.886681 0.94 0.935801 0.96 0.987354 0.98 1.0 1.0 ]
>>
/Black
<<
/CalibrationType 2
/ForceSolids true
/Curve [0.0 0.0 0.00385118 0.02 0.00676 0.04 0.0133985 0.06 0.0165476 0.08
0.0272707 0.1 0.0382585 0.12 0.0536124 0.14 0.0596916 0.16 0.0742491 0.18 0.0839247
0.2 0.150373 0.3 0.227298 0.4 0.265406 0.45 0.325731 0.5 0.371644 0.55 0.436093 0.6
0.527291 0.7 0.662939 0.8 0.69848 0.82 0.727203 0.84 0.760665 0.86 0.795623 0.88
0.824322 0.9 0.866203 0.92 0.893163 0.94 0.934047 0.96 0.981364 0.98 1.0 1.0 ]
>>
/Default
<<
/CalibrationType 2
/ForceSolids true
/Curve [0.0 0.0 1.0 1.0 ]
>>
/BumpUpCurve [0.0 0.0 0.7 0.7 0.996 0.9 0.996 1.0 1.0 1.0 ]
>>
</p>
<p> >>
1183615869 internaldict /setcalibration get exec
% This additional setpagedevice call is needed for PS jobs.
% It makes no difference for other PDLs.
<< >> setpagedevice