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) |
StFtpcClusterFinder is programmed in C++ by Holm Hümmler and is supported by Janet Seyboth.
In the first step StFtpcClusterFinder 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.
A more detailed documentation of the StFtpcClusterFinder source code can be downloaded as pdf-file or ps-file .
StFtpcClusterFinder is designed to work fast. If there is no
heavy unfolding necessary (clusters with 5 peaks or less), StFtpcClusterFinder
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 updated by Joern Putschke on June 28, 2001