MarlinTPC  1.2.0
Classes | Public Member Functions | List of all members
marlintpc::RowBasedHitFinderProcessor Class Reference

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>

Inheritance diagram for marlintpc::RowBasedHitFinderProcessor:

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.
 

Detailed Description

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.

Author
Christoph Rosemann, DESY

Input - Prerequisites

Output

Parameters
InputTrackerPulsesName of input TrackerPulses collection (default: TPCPulses)
OutputTrackerHitsName of output TrackerHits collection (default: TPCHits)
InputTPCConditionsOPTIONAL: Name of the input collection containing the TPC conditions data (default: tpcconddata::TPCConditions::getDefaultColName() )
WriteOutputToStorage:boolIf true the output collection is written to file (default: true)
ChargeConversionIsCalibrated:boolSet true, if the charge conversion factor from ADC values to primary electrons is known (default:true).
MaxEmptyPadsOverrideMaximum number of consecutive empty pads in a row (default: 1)
MinHitSizeOverrideMinimum size of hit in number of pads (default: 1)
MinMaxPulseSliceHeightOverridMinimum size of the maximum pulse slice of the highest pulse in the hit (default: 12.)
MaxTimeSpreadOverrideMaximum time between pulses in a hit [in ns] (default: 200)
VDriftOverrideOPTIONAL: Set drift velocity in case there is no conditions data [in mm/us] (default: 0)
DeadPadsOverrideOPTIONAL: a vector of geometry indices of dead channels, default should be conditions data
ChargeConversionFactorOverrideOPTIONAL The factor to convert adc counts into number of primary electrons (-> should be conditions data)
UseGlobalCoordinatesOPTIONAL 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:

Member Function Documentation

void marlintpc::RowBasedHitFinderProcessor::init ( )
virtual

Called at the begin of the job before anything is read.

Use to initialize the processor, e.g. book histograms.

void marlintpc::RowBasedHitFinderProcessor::processEvent ( lcio::LCEvent *  evt)
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

  • max number of dead/empty pads within a hit
  • max distance in z/time between pulses external input: - dead pads
  • drift velocity
  • charge conversion factor
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


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