Radphi Pass-0 Calibration
The purpose of pass-0 calibration is to derive a set of constants from the
data that can be used to convert raw tdc and adc values into hit energies
and times in physical units: MeV or GeV and ns. The purpose of pass-0 is
to obtain a set of parameters that allow the response of all of the counters
in a detector to be compared directly or plotted on the same scale, where
gain and delay differences between channels have been removed and a sensible
common scale adopted. More complicated corrections may be required before
amplitudes can be interpreted as particle energies or time differences can
be converted to time-of-flight; these are called pass-1 (or higher)
calibrations. An example a pass-1 calibration is the LGD energy calibration
based upon optimization of the observed mass of the π°, as described
in another document. Pass-1 calibrations differ
from detector to detector and are not even necessary in some cases.
Pass-0 calibration is simpler and is fairly uniform across all detectors
and counters. The description of pass-0 requires that the following three
questions be addressed.
- What formulas are used to convert adc/tdc values to hit data?
- Where are the constants stored on disk? in the c libraries?
- How are the constants derived?
1. formulas
In the following formulas a uniform naming convention is used to distinguish
different kinds of variables and constants. Variables are designated without
subscripts and constants have subscripts. Variables are named either
a (amplitude or pulse-height) or t (time) with lower-case
referring to float hit data (after transformation to physical units) and
upper-case referring to raw integer values. For time variables the physical
units are always ns, whereas for amplitudes the units may depend on the kind
of detector. The detector to which any given variable or constant belongs is
either implicit from the context or shown explicitly within parentheses after
the symbol. For example, the delay time correction for BSD left counter 5
would be written as T(bsd 5).
The following two formulas cover all cases.
t = -p (T - T) + t
|
(1) |
a = g (A - A) |
(2) |
The constants A are called
pedestals. These were evaluated periodically during the data taking by
dedicated runs, and were stored in the Radphi map database together with
estimates for the threshold between signal and noise for each adc channel.
The online pedestals are taken as correct, and not adjusted during pass-0
calibration. The gain coefficients
g are adjusted during pass-0
to match the response of all counters in a detector to a reference counter,
with the absolute scale set by comparison with Monte Carlo to give either
dE/dx or total energy in units of MeV (scintillators) or GeV (calorimeters).
The g coefficients are
looked up on a per-run and per-counter basis, as are the pedestals.
By contrast, the tdc clock period
p is assigned the unique
value of 0.5ns for all counters and runs. The minus sign is present in
Eq. (1) because the tdc's were operated in common-stop mode, so that
small tdc values correspond to later signals relative to the trigger.
The time offsets
T reflect the variation
in signal propagation times between counters.
Some care must be taken
in the definition of these offsets, because the most convenient convention
for use in the analysis does not always correspond to the exact time of
day that the flash appeared in the counter. For example, in the tagger
there is a dispersion in time-of-flight from the radiator to the focal
plane, depending on the photon energy, but such time-of-flight differences
are of no interest in the tagging coincidence analysis. The following
general rule is used in deciding how to determine the time offsets.
Time offsets are adjusted for each counter so that the time difference
between a hit in a Radphi detector and a hit in the tagger gives the
time of flight from the point of interaction in the Radphi target to
the point of detection if the two hits correspond to the same gamma.
This definition gives an unambiguous specification for how the time
offsets are established for all counters, except because it deals only
with differences it leaves undefined one overall shift. This ambiguity
is left open during pass-0 for sake of flexibility in the calibration
procedure, but at the end it is lifted by the use of a global
t (see above formula).
The same t coefficient
is used for channels in a detector, but depends upon run number.
It was introduced to allow a convenient way to remove jumps in the
overall time scale that occurred at several points during the run when
the tdc window and start delay were changed. Intrinsic jitter in the
trigger start time make absolute hit times of limited interest, but
they are often used in the analysis to place broad windows around the
signals of interest in an event. The
t coefficients are
adjusted so that the tagger coincidence peaks center around zero for
all runs.
2. parameter names
The following table provides a summary of all pass-0 calibration
constants, where they are stored in the map database and where they
may be accessed within the analysis code. Note that in analysis
code the function setup_makehits(event) must be called before the
values in makehits.h can be considered valid for this event.
Note that setup_makehits need only be called at the beginning of
a new run, since map parameters do not change within a single run.
Table 1: Summary of pass-0 calibration parameters.
parameter |
run dependent? |
counter dependent? |
found in map |
name in map |
name in makehits.h |
p |
no |
no |
- |
|
TDC_1877_GAIN |
T(tag i) |
yes |
yes |
detector_params.map |
TAG:tdc_offset_38 |
tag_tdc_offset[i] |
T(cpv i) |
yes |
yes |
detector_params.map |
CPV:tdc_offset_30 |
cpv_tdc_offset[i] |
T(upv i) |
yes |
yes |
detector_params.map |
UPV:tdc_offset_8 |
upv_tdc_offset[i] |
T(bsd i) |
yes |
yes |
detector_params.map |
BSD:tdc_offset_48 |
bsd_tdc_offset[i] |
T(bgv i) |
yes |
yes |
detector_params.map |
BGV:tdc_offset_48 |
bgv_tdc_offset[i] |
t(tag) |
yes |
no |
detector_params.map |
TAG:t0_offset |
tag_t0_offset |
t(cpv) |
yes |
no |
detector_params.map |
CPV:t0_offset |
cpv_t0_offset |
t(upv) |
yes |
no |
detector_params.map |
UPV:t0_offset |
upv_t0_offset |
t(bsd) |
yes |
no |
detector_params.map |
BSD:t0_offset |
bsd_t0_offset |
t(bgv) |
yes |
no |
detector_params.map |
BGV:t0_offset |
bgv_t0_offset |
g(cpv i) |
yes |
yes |
calibration.map |
CPV:cc_30 |
cpv_cc[i] |
g(upv i) |
yes |
yes |
calibration.map |
UPV:cc_8 |
upv_cc[i] |
g(bsd i) |
yes |
yes |
calibration.map |
BSD:cc_48 |
bsd_cc[i] |
g(bgv i) |
yes |
yes |
calibration.map |
BGV:cc_48 |
bgv_cc[i] |
g(lgd i) |
yes |
yes |
calibration.map |
LGD:cc_784 LGD:tune_784 |
lgd_cc[i] lgd_cc_tune[i] |
A(cpv i) |
yes |
yes |
pedestals.map |
TAG:ped_30 |
cpv_ped[i] |
A(upv i) |
yes |
yes |
pedestals.map |
UPV:ped_8 |
upv_ped[i] |
A(bsd i) |
yes |
yes |
pedestals.map |
BSD:ped_48 |
bsd_ped[i] |
A(bgv i) |
yes |
yes |
pedestals.map |
BGV:ped_48 |
bgv_ped[i] |
A(lgd i) |
yes |
yes |
pedestals.map |
LGD:ped_768 |
lgd_ped[i] |
3. procedures
The pass-0 calibration procedures have been separated into timing
and amplitude calibrations. The procedures for timing calibration
are first.
-
Make a window around the coincidence peak in the tdc spectrum for
CPV counter 28. Do this for all runs, grouping together run
sequences where the peak is stationary. Note the position of the
narrow peak like the one in Fig. 1.
When multiplied by p
(0.5ns), these are the constants
t(tag)
to be loaded into the map. It is important that these not be
confused with the
t(cpv)
coefficients to be determined later.
run range |
cpv28 tdc peak |
t(tag) |
|
7415-7475 |
604.0 |
302.0 ns |
7476-7810 |
580.0 |
290.0 ns |
7811-8020 |
303.0 |
151.5 ns |
8021-8150 |
199.0 |
99.5 ns |
8151-8220 |
102.5 |
51.3 ns |
8221-8731 |
108.0 |
54.0 ns |
|
-
Let us define a tdc window of about ±40 counts around the
coincidence peak in cpv28. Form a histogram for each tagging channel
to hold a tdc histogram, with separate histograms for left and right
channels. For each event, for each tdc in cpv28 within this window,
for each tdc recorded for tagger counter i fill the histogram for
counter i with the value T(tag i) - T(cpv 28). This must be
done separately for each of the run ranges above. Fit each of these
histograms to a constant+Gaussian lineshape as shown in
Fig. 2. and record the centroid for
each channel. These are the constants
T(tag i) to be
loaded into the map.
-
Using the two parameters
T(tag i) and
t(tag)
evaluated in the previous steps, let us define a tagger "hit time"
using the formula (1) above. Now let us define a coincidence window
[-20ns, 20ns] for all tagger hits. Form a tdc histogram for each
bsd counter. For each event, for each tagger hit j within the
coincidence window of any tagging counter, for each tdc recorded for
bsd counter i, fill the corresponding histogram with the value
T(bsd i) + t(tag j)/p.
Fit each of these histograms to a polynomial+Gaussian lineshape as
shown in Fig. 3 and record the centroid
for each counter. These are the are the constants
T(bsd i) to be
loaded into the map.
-
For the parameters
t(bsd) take the
constant value of 3ns.
-
Let us define a coincidence window [-20ns, 20ns] for all tagger hits,
as described above. Form a tdc histogram for each end of the bgv counters.
For each event, for each tagger hit j within the coincidence window,
for each tdc recorded for bgv end i, fill the corresponding
histogram with the value
T(bgv i) + t(tag j)/p. Fit each of these histograms to a polynomial+Gaussian lineshape as
shown in Fig. 4 and record the centroid
for each counter. These are the are the constants
T(bgv i) to be
loaded into the map.
-
For the parameters
t(bgv) take the
constant value of 3ns.
-
Form a tdc histogram for each cpv counter.
For each event, for each tagger hit j within the tagger coincidence
window described above,
for each tdc recorded for bgv end i, fill the corresponding
histogram with the value
T(cpv i) + t(tag j)/p. Fit each of these histograms to a polynomial+Gaussian lineshape as
shown in Fig. 5 and record the centroid
for each counter. These are the are the constants
T(cpv i) to be
loaded into the map.
-
For the parameters
t(cpv) take the
constant value of 2ns.
4. fits
The above calibration procedure was carried out by
Dan Steiner,
a graduate student working with
David Armstrong at the College of
William & Mary. Selected graphs showing the quality of the fits
are saved in this hbook file. More
info regarding problems seen in specific channels can be found on
Dan's web site.
5. notes
- This procedure does not address the calibration of the upv because
those counters are not of much interest in the offline analysis. Their
role in the experiment was to reduce the first-level trigger rate.
- When the above procedure is complete, the tagger coincidence peaks
should average near zero and the bsd coincidence spectra should peak
around 3ns. However this is only approximate, and there should be
noticeable differences between channels if the procedure was carried
out correctly. This is because absolute hit times are relative to the
trigger start, whose formation involved a different set of signal pathways
than those used by the tdcs. For counters that took part in the
formation of the trigger, this can produce shifts in unsubtracted hit
time spectra, depending on which counter produced the trigger.
- Even for counters such as the bgv and cpv that did not participate
directly in the trigger, the unsubtracted hit time spectra may show
shifts from one channel to the next, because of their proximity to
triggering counters.
- In the analysis only differences between hit times should be
considered to be a calibrated measurement.
This material is based upon work supported by the National Science Foundation under Grant No. 0072416.