MarlinTPC  1.2.0
Public Member Functions | Protected Attributes | List of all members
marlintpc::RowBasedFastHoughTransformationProcessor Class Reference

Track finder based on Fast Hough Transformation. More...

#include <RowBasedFastHoughTransformationProcessor.h>

Inheritance diagram for marlintpc::RowBasedFastHoughTransformationProcessor:

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.
 

Detailed Description

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).

Parameters
"InputHits":stringThe name of the input collection of TPC hits (default: "TPCHits")
"OutputTracks":stringThe name of the output collection with the found tracks (default: "FHTTracks")
"CenterXYMeasurement":doubleCenter of XY (anode plane) measurement (default 60.)
"RangeXYMeasurement":doubleRange of XY (anode plane) measurement (default 200.)
"CenterXZMeasurement":doubleCenter of XY (drift time) measurement (default 300.)
"RangeXZMeasurement":doubleRange of XY (drift time) measurement (default 600.)
"BFieldScaleFactor":doubleOptional parameter, scales magnetic field (map), use 1.0 (default) for field ON or 0.0 for field OFF
"UseXYMeasurement":boolOptional parameter, flag for using XY (anode plane) measurement (default true)
"UseXZMeasurement":boolOptional parameter, flag for using XZ (drift time) measurement (default true)
"MinimumRows":intOptional parameter, minimal number of (correlated) rows (default 8)
"MaximumRowDifference":intOptional parameter, row correation parameter (max. distance of correlated rows) (default 1)
"FractionOfRows":floatOptional parameter, relative minimum cube content (rows >= fraction * (correlated) rows) (default 0.8)
"MaximumCubes":intOptional parameter, maximum number of (hyper) cubes to check (default 250)
"MinimumLevel":intOptional parameter, minimum number of (hyper) cubes splittings (default 5)
"MaximumLevel":intOptional parameter, maximum number of (hyper) cubes splittings (default 8)
"EfficienyCut":floatOptional parameter, minimum hit density (hits/tracklength) (default 0.8)
"PurityCut":floatOptional parameter, maximum hit density (hits/tracklength) (default 1.1)
"MaxHitsPerRow":intOptional parameter, mximum number of hits per row (default 1)
"UnusedHitMatchingChi2Cut":doubleOptional parameter, Chi2 cut for matching unused hits in XY and Z (default 20.)
"UnusedHitMaxGapCut:intOptional parameter, maximal (row) gap for matching unused hits in XY and Z (default 4)
"EncodedModuleID":boolOptional parameter, flag for encoding of module ID in CellID0 (default true)
"ReferencePointAtPca":boolOptional parameter, use PCA as reference point, else 1. hit (default false)
"TimePixFlag":boolOptional parameter, is timepix data(default false)
Author
C. Kleinwort (140205)
Credits:
The processor skeleton was generated by the script createProcessor.py
Todo:
  • (average) track direction different from X direction ?
  • hit cleaning for segment creation ?
  • replace hard coded radial row number for timepix data ?

A detailed description is available as lcnote LC-TOOL-2014-006.

Member Function Documentation

void marlintpc::RowBasedFastHoughTransformationProcessor::processEvent ( EVENT::LCEvent *  evt)
virtual

Process event.

  • Prepare input: map of rows with vectors of hits
  • While sufficient input (unused (correlated) rows)
  1. From unused hits get x range and number of (correlated) rows (row <= lastRow + _maxRowDiff)
  2. Build hyperplanes, root cube entries (distances)
  3. Subdivide root cube
  4. Process candidate
  • Fill output collection.

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().


The documentation for this class was generated from the following files: