MarlinTPC
1.2.0
|
A hit finder for row based (pad) geometries It searches for connected pulses in a row and combines them into a hit. More...
#include <RowBasedHitFinderProcessor.h>
Public Member Functions | |
virtual Processor * | newProcessor () |
virtual void | init () |
Called at the begin of the job before anything is read. More... | |
virtual void | processRunHeader (lcio::LCRunHeader *run) |
Called for every run. | |
virtual void | processEvent (lcio::LCEvent *evt) |
Called for every event - the working horse. More... | |
virtual void | check (lcio::LCEvent *evt) |
virtual void | end () |
Called after data processing for clean up. | |
A hit finder for row based (pad) geometries It searches for connected pulses in a row and combines them into a hit.
The position inside the row is calculated by a center-of-gravity w.r.t. to the charge of the individual pulses. The position on the row is fixed by the r/y coordinate of the row. The z-position is inherited from the pulse with the highest charge within the hit.
Hit quality flag (including inheritance of pulse flags)
Handling of dead and noisy channels.
InputTrackerPulses | Name of input TrackerPulses collection (default: TPCPulses) |
OutputTrackerHits | Name of output TrackerHits collection (default: TPCHits) |
InputTPCConditions | OPTIONAL: Name of the input collection containing the TPC conditions data (default: tpcconddata::TPCConditions::getDefaultColName() ) |
WriteOutputToStorage:bool | If true the output collection is written to file (default: true) |
ChargeConversionIsCalibrated:bool | Set true, if the charge conversion factor from ADC values to primary electrons is known (default:true). |
MaxEmptyPadsOverride | Maximum number of consecutive empty pads in a row (default: 1) |
MinHitSizeOverride | Minimum size of hit in number of pads (default: 1) |
MinMaxPulseSliceHeightOverrid | Minimum size of the maximum pulse slice of the highest pulse in the hit (default: 12.) |
MaxTimeSpreadOverride | Maximum time between pulses in a hit [in ns] (default: 200) |
VDriftOverride | OPTIONAL: Set drift velocity in case there is no conditions data [in mm/us] (default: 0) |
DeadPadsOverride | OPTIONAL: a vector of geometry indices of dead channels, default should be conditions data |
ChargeConversionFactorOverride | OPTIONAL The factor to convert adc counts into number of primary electrons (-> should be conditions data) |
UseGlobalCoordinates | OPTIONAL If set to true, the output coordinate system will be forced to global/cartesian; otherwise it is the local coordinate system of the pad plan (either polar or cartesian) (default: false) |
List of open issues/questions:
|
virtual |
Called at the begin of the job before anything is read.
Use to initialize the processor, e.g. book histograms.
|
virtual |
Called for every event - the working horse.
the processor is supposed to find "hits" in "rows" input are pulses: (charge,time,moduleID,cellID + qualityFlag) output are hits: ( [x,y,z] + covariance matrix, charge + qualityFlag )
steering input: - minimal hit size
structurally this happens in a decomposition of: (A) sort the pulses by module & row (B) LOOP: look for pulses that belong together in a row (for all rows in a module, for all modules) (C) create the "Hit" by calculating all numbers
the basic data structure for the hit search is a single row; the row is a simple vector of the Pulse pointers: vector<TrackerPulse*>
this is repeated for every (unique) row on a module -> use a map of these repeat this for every possible module, since the module id is unique use a map
so the final data structure for the hit search is: map<int moduleID, map<int rowID, vector<TrackerPulse*>* > (no typedef is introduced, although arguably this might improve the readability)
a helper class is instantiated to hold the hit candidates: "hitCandidate" the temporary result of the hit candidate finding is stored in a vector of these the key is again a map – since it is stored per /unique/ module