MarlinTPC
1.2.0
|
Track finder based on Fast Hough Transformation. More...
#include <RowBasedFastHoughTransformationProcessor.h>
Public Member Functions | |
virtual Processor * | newProcessor () |
RowBasedFastHoughTransformationProcessor () | |
Construct processor. | |
virtual void | init () |
Initialize processor. | |
virtual void | processRunHeader (EVENT::LCRunHeader *run) |
virtual void | processEvent (EVENT::LCEvent *evt) |
Process event. More... | |
virtual void | check (EVENT::LCEvent *evt) |
virtual void | end () |
Protected Attributes | |
std::string | _inputColName |
Name of the input collection. | |
std::string | _outputColName |
Name of the output collection. | |
double | _bfieldScaleFactor |
scale factor for magnetic field (default: 1.0) | |
bool | _useXY |
Use XY (anode plane) measurement. | |
bool | _useXZ |
Use XZ (drift time) measurement. | |
double | _centerXY |
Center of XY (anode plane) measurement. | |
double | _rangeXY |
Range of XY (anode plane) measurement. | |
double | _centerXZ |
Center of XZ (drift time) measurement. | |
double | _rangeXZ |
Range of XZ (drift time) measurement. | |
int | _minRow |
Minimal number of (correlated) rows. | |
float | _fracRow |
Relative minimum cube content. | |
int | _maxRowDiff |
Row correation parameter. | |
int | _maxCube |
Maximum number of (hyper) cubes to check. | |
int | _minLevel |
Minimum number of (hyper) cubes splittings. | |
int | _maxLevel |
Maximum number of (hyper) cubes splittings. | |
float | _effCut |
Minimum hit density (hits/tracklength) | |
float | _purCut |
Maximum hit density (hits/tracklength) | |
int | _maxHitsPerRow |
Maximum number hits per row. | |
double | _unusedCut |
Chi2 cut for matching unused hits in XY and Z. | |
int | _maxGap |
Cut for (row) distance to segment for matching unused hits in XY and Z. | |
bool | _encodedModuleID |
Module ID is encoded in CellID0. | |
bool | _refAtPCA |
Use Pca as reference point (else 1. hit) | |
bool | _timePixFlag |
Is timepix data. | |
Track finder based on Fast Hough Transformation.
Fast Hough transformation to construct tracks from space points.
The average track direction is in (local) X direction. The measured coordinates have to be shifted and rescaled to: X->u in [-1, +1], Y,Z -> v,w in [-0.5, 0.5]. The resolution in v and w should be comparable. The track projections v(u), w(u) are parametrized by series of Legendre polynomials L_i, in the (XY) bending plane up to order 2 and in the (XZ) plane with order 1.:
The track parameters a_i, b_i are in [-0.5, +0.5] (the initial hypercube). Each space point defines 2 hyperplanes (v(u)-v_meas=0, w(u)-w_meas=0) in the 5 (or 4) dimensional parameter space (a_i, b_i) with normal vectors (L_i(u), 0.) and (0., L_i(u)). The unit normal vector is used to calculate the distance of a hyperplane to the center of a hypercube. They intersect if the absolute value of the distance times the largest component of the unit normal vector is smaller than 0.5. The root cube is recursivly split for each dimension in two child cubes. Only childs containing a minimum number of rows are considered further until the hit density in a cube is compatible with a single track. The search stops with the first found track candidate.
Extended for timepix data (allow multiple hits per row).
"InputHits":string | The name of the input collection of TPC hits (default: "TPCHits") |
"OutputTracks":string | The name of the output collection with the found tracks (default: "FHTTracks") |
"CenterXYMeasurement":double | Center of XY (anode plane) measurement (default 60.) |
"RangeXYMeasurement":double | Range of XY (anode plane) measurement (default 200.) |
"CenterXZMeasurement":double | Center of XY (drift time) measurement (default 300.) |
"RangeXZMeasurement":double | Range of XY (drift time) measurement (default 600.) |
"BFieldScaleFactor":double | Optional parameter, scales magnetic field (map), use 1.0 (default) for field ON or 0.0 for field OFF |
"UseXYMeasurement":bool | Optional parameter, flag for using XY (anode plane) measurement (default true) |
"UseXZMeasurement":bool | Optional parameter, flag for using XZ (drift time) measurement (default true) |
"MinimumRows":int | Optional parameter, minimal number of (correlated) rows (default 8) |
"MaximumRowDifference":int | Optional parameter, row correation parameter (max. distance of correlated rows) (default 1) |
"FractionOfRows":float | Optional parameter, relative minimum cube content (rows >= fraction * (correlated) rows) (default 0.8) |
"MaximumCubes":int | Optional parameter, maximum number of (hyper) cubes to check (default 250) |
"MinimumLevel":int | Optional parameter, minimum number of (hyper) cubes splittings (default 5) |
"MaximumLevel":int | Optional parameter, maximum number of (hyper) cubes splittings (default 8) |
"EfficienyCut":float | Optional parameter, minimum hit density (hits/tracklength) (default 0.8) |
"PurityCut":float | Optional parameter, maximum hit density (hits/tracklength) (default 1.1) |
"MaxHitsPerRow":int | Optional parameter, mximum number of hits per row (default 1) |
"UnusedHitMatchingChi2Cut":double | Optional parameter, Chi2 cut for matching unused hits in XY and Z (default 20.) |
"UnusedHitMaxGapCut:int | Optional parameter, maximal (row) gap for matching unused hits in XY and Z (default 4) |
"EncodedModuleID":bool | Optional parameter, flag for encoding of module ID in CellID0 (default true) |
"ReferencePointAtPca":bool | Optional parameter, use PCA as reference point, else 1. hit (default false) |
"TimePixFlag":bool | Optional parameter, is timepix data(default false) |
createProcessor.py
A detailed description is available as lcnote LC-TOOL-2014-006.
|
virtual |
Process event.
References _bfieldScaleFactor, _centerXY, _centerXZ, _effCut, _encodedModuleID, _fracRow, _inputColName, _maxCube, _maxGap, _maxHitsPerRow, _maxLevel, _maxRowDiff, _minLevel, _minRow, _outputColName, _purCut, _rangeXY, _rangeXZ, _refAtPCA, _timePixFlag, _unusedCut, _useXY, _useXZ, marlintpc::rb_Segment::addHit(), marlintpc::rb_HyperCube::divide(), marlintpc::rb_Segment::fillRowMap(), marlintpc::rb_Segment::getFirstRow(), marlintpc::rb_Segment::getHitList(), marlintpc::rb_Segment::getLastRow(), marlintpc::rb_Segment::getNdf(), and marlintpc::rb_Segment::match().