fcl_( | |
*ftpcndx_h, *ftpcndx, | indices to beginning of tpcs (input data) |
*ftpcsqndx_h, *ftpcsqndx, | raw data sequence indices (input data) |
*ftpcadc_h, *ftpcadc, | raw data adc values (input data) |
*fppoint_h, *fppoint, | ftpc hit points (output data) |
*ampslope_h, *ampslope, | amplitude calibration slopes (parameters) |
*ampoff_h, *ampoff, | amplitude calibration offsets (parameters) |
*timeoff_h, *timeoff, | time calibration offsets (parameters) |
*padtrans_h, *padtrans, | ExB drift calculation table (parameters) |
*det_h, *det, | geometry and runtime parameters for fcl (parameters) |
*zrow_h, *zrow) | z positions of all padrows (parameters) |
The FTPC cluster finder is implemented in both STAF(fcl) and ROOT(St_fcl_Maker).
FCL is programmed in C by Holm Hümmler.
In the first step fcl follows the principle of the
peep-hole cluster finder used by
Dirk Schmischke
in the development of the online cluster finder:
Only the raw data sequences on each two consecutive pads are compared to find
coherent areas of nonzero charge. In this step, the actual ADC values are
never accessed. Once an independent area of charge has been found,
its sequences are stored as a cluster.
In the second step the clusters are searched for peaks:
Looping over the ADC values for each sequence in a cluster, the peak for
each sequence is found. As this is the only time when all the ADC values are
accessed, this is also the point where the amplitude calibration can be done
most efficiently. Comparing the sequence peaks with their neighbours,
local maxima in the charge distribution are found. Each local maximum
is stored as one hit. In this step, the original sequence data is never
accessed.
In the third step, the individual hits are fitted:
If a cluster contains only one hit, the cluster position can be determined
using either a weighted mean over the whole cluster or a gaussian fit
around its peak independently for pad and time direction,
depending on the input parameters.
If a cluster contains more than one hit, it is unfolded: Starting with the
local maxima as a first hypothesis, the influence of each hit on its
neighbours is calculated and subtracted from their data for their
new fit. For simpler clusters, this procedure converges usually within
less than four iterations. The algorithm can, however, also unfold very
complicated clusters of more than 50 hits at the expense of longer
calculation time.
The fitting is also the step where the time calibration offsets for each
pad are applied.
The coordinates for each reconstructed hit are then transformed
from pad/time to x/y. In this step, the ExB-correction is also applied.
This can be done fast, because at the first call of fcl, the
transformation table has been calculated from a
database (created using the MAGBOLTZ code) and the calibrated air pressure.
Thus, the transformation from time to radius and ExB-shift is a simple
interpolation.
FCL is designed to work fast. If there is no heavy unfolding necessary
(clusters with 5 peaks or less), fcl needs less than 5 seconds for one
event in both FTPCs. In the worst expected case of very high track densities
due to slow delta-electrons, calculation time can go up to three minutes.
You can download a zipped ps-file
of the data and reconstructed hits in one very heavily populated
FTPC sector. Plotted is the time vs pad direction; the black dots show the
reconstructed hits.
This page was created by Holm Hümmler on February 23, 1999 and updated by Janet Seyboth on June 1, 2005