MarlinTrkProcessors
2.4.1
|
=== FPCCDSiliconTracking_MarlinTrk Processor ===
This processor is based on SiliconTracking_MarlinTrk Processor (author: Steve Apline).
More...
#include <FPCCDSiliconTracking_MarlinTrk.h>
Classes | |
class | BuildedTrack |
class | ClusterStatus |
struct | compare_TrackExtended |
Compare tracks according to their chi2/ndf. More... | |
struct | GeoData_t |
class | MCP_BuildedTrack |
class | MCP_Triplet |
class | Timer |
class | TracksWithNHitsContainer |
A helper class to allow good code readability by accessing tracks with N hits. More... | |
class | Triplet |
struct | vxdGeoData_t |
Public Member Functions | |
virtual Processor * | newProcessor () |
virtual void | init () |
Initialization. | |
virtual void | processRunHeader (LCRunHeader *run) |
Run header processor. | |
virtual void | processEvent (LCEvent *evt) |
Event processor. | |
virtual void | check (LCEvent *evt) |
virtual void | end () |
Called after data processing for clean up. | |
Protected Types | |
enum | MCPContributions { contVXD, contFTD, contSIT, contVXDFTD, contVXDSIT, contFTDSIT, contVXDFTDSIT, contBG, contSize } |
enum | BuildTrackResult { NormalEnd, ManyMisAssignments, ManyOutliers, PhiThetaError, BuildTrackResultSize } |
typedef std::map< std::pair < int, int >, int > | RangeMap |
typedef std::map< std::vector < int >, std::vector< int > > | RangeMapVer2 |
typedef std::vector< BuildedTrack > | BuildedTrackVec |
typedef std::map< MCParticle *, MCP_BuildedTrack > | BTMap |
typedef std::map< MCParticle *, MCP_Triplet > | TripMap |
Protected Member Functions | |
void | drawEvent () |
LCCollection * | GetCollection (LCEvent *evt, std::string colName) |
helper function to get collection using try catch block | |
LCRelationNavigator * | GetRelations (LCEvent *evt, std::string RelName) |
helper function to get relations using try catch block | |
int | InitialiseVTX (LCEvent *evt) |
int | InitialiseFTD (LCEvent *evt) |
void | ProcessOneSector (int iSectorPhi, int iSectorTheta) |
void | ProcessOneSectorVer2 (int iSectorPhi, int iSectorTheta) |
void | CleanUp () |
TrackExtended * | TestTriplet (TrackerHitExtended *outerHit, TrackerHitExtended *middleHit, TrackerHitExtended *innerHit, HelixClass_double &helix, int omegamode) |
int | BuildTrack_KalFit (TrackerHitExtended *outerHit, TrackerHitExtended *middleHit, TrackerHitExtended *innerHit, HelixClass_double &helix, int innerlayer, TrackExtended *trackAR) |
void | getPhiThetaRegionForHighPt (int *boundaries, TrackExtended *trackAR) |
void | Sorting (TrackExtendedVec &trackVec) |
void | CreateTrack (TrackExtended *trackAR) |
void | AttachRemainingVTXHitsSlow () |
void | AttachRemainingFTDHitsSlow () |
void | AttachRemainingVTXHitsFast () |
void | AttachRemainingFTDHitsFast () |
void | AttachRemainingVTXHitsVeryFast () |
void | TrackingInFTD () |
int | BuildTrackFTD (TrackExtended *trackAR, int *nLR, int iS) |
int | AttachHitToTrack (TrackExtended *trackAR, TrackerHitExtended *hit, int iopt) |
int | AttachHitToTrack_KalFit (TrackExtended *trackAR, TrackerHitExtended *hit) |
void | FinalRefit (LCCollectionVec *trk_col, LCCollectionVec *rel_col) |
int | getDetectorID (TrackerHit *hit) |
int | getSideID (TrackerHit *hit) |
int | getLayerID (TrackerHit *hit) |
int | getModuleID (TrackerHit *hit) |
int | getSensorID (TrackerHit *hit) |
int | getDetectorID (SimTrackerHit *hit) |
int | getSideID (SimTrackerHit *hit) |
int | getLayerID (SimTrackerHit *hit) |
int | getModuleID (SimTrackerHit *hit) |
int | getSensorID (SimTrackerHit *hit) |
void | setupGearGeom (const gear::GearMgr *gearMgr) |
int | getIntersectionEasy (HelixClass_double &helix, TrackerHit *curInmos, int layer, double *isec, double *ref) |
int | getIntersectionEasyTest (HelixClass_double &helix, TrackerHit *basisTrkhit, int layer, std::vector< double > &vec) |
int | CheckTiltOf2Clusters (TrackerHit *A, TrackerHit *B, int level) |
float | DotOf2Clusters (TrackerHit *A, TrackerHit *B) |
int | KalFit (int &ndf, float &Chi2, TrackerHitVec trkHits, TrackerHitVec &hits_in_fit, TrackerHitVec &outliers, float *par, float *epar, HelixClass_double &helix) |
int | getPhiThetaRegion (TrackExtended *trackAR, int layer, int *Boundaries) |
void | InitVXDGeometry () |
void | InitSITGeometry () |
TVector3 | LocalToGlobal (TVector3 local, int layer, int ladder) |
void | calcTrackParameterOfMCP (MCParticle *pmcp, double *par) |
double | getNeededPhiSectors (double Pt, int outly, int inly) |
void | getNeededPhiSectorsVer2 (double Pt, std::vector< int > layers, std::vector< double > &phiDiff) |
MCPMap | LoadMCPMap () |
enum MCPContributions | getMCPContribution (IntVec nsub) |
void | SetBuildedTrack (TrackExtended *trackAR, BuildedTrackVec &btrackvec) |
void | BuildedTrackDebuger1 (BuildedTrackVec::iterator begin, BuildedTrackVec::iterator end) |
void | BuildedTrackDebuger2 (std::vector< const BuildedTrack * >::iterator begin, std::vector< const BuildedTrack * >::iterator end) |
void | TripletDebugerWithMCPRemain (int nth, std::vector< std::map< MCParticle *, MCP_Triplet > > A) |
IntVec | getNHitsInSubDet (SimTrackerHitVec simvec) |
void | TripletDebuger1 (std::vector< Triplet >::iterator begin, std::vector< Triplet >::iterator end) |
void | TripletDebuger2 (std::vector< const Triplet * >::iterator begin, std::vector< const Triplet * >::iterator end) |
Protected Attributes | |
int | _nRun |
int | _nEvt |
EVENT::LCEvent * | _current_event |
int | _nDivisionsInPhi |
int | _nDivisionsInTheta |
int | _nLayers |
MarlinTrk::HelixFit * | _fastfitter |
MarlinTrk::IMarlinTrkSystem * | _trksystem |
pointer to the IMarlinTrkSystem instance | |
bool | _runMarlinTrkDiagnostics |
std::string | _MarlinTrkDiagnosticsName |
bool | _MSOn |
bool | _ElossOn |
bool | _SmoothOn |
float | _initialTrackError_d0 |
float | _initialTrackError_phi0 |
float | _initialTrackError_omega |
float | _initialTrackError_z0 |
float | _initialTrackError_tanL |
double | _maxChi2PerHit |
double | _maxChi2PerHit2nd |
bool | _UseEventDisplay |
std::vector< int > | _colours |
bool | _createDiagnosticsHistograms |
DiagnosticsHistograms::Histograms * | _histos |
int | _ntriplets |
int | _ntriplets_good |
int | _ntriplets_2MCP |
int | _ntriplets_3MCP |
int | _ntriplets_1MCP_Bad |
int | _ntriplets_bad |
std::string | _colNameMCParticles |
input MCParticle collection and threshold used for Drawing | |
std::string | _VTXHitCollection |
std::string | _FTDPixelHitCollection |
std::string | _FTDSpacePointCollection |
std::string | _SITHitCollection |
std::string | _siTrkCollection |
std::vector< LCCollection * > | _colTrackerHits |
std::map< LCCollection *, std::string > | _colNamesTrackerHits |
std::vector < TrackerHitExtendedVec > | _sectors |
std::vector < TrackerHitExtendedVec > | _sectorsFTD |
TracksWithNHitsContainer | _tracksWithNHitsContainer |
int | _useBuildTrackForHighPt |
double | _cosThetaRangeForBuildTrackForHighPt |
double | _phiRangeForBuildTrackForHighPt |
float | _bField |
float | _chi2WRPhiTriplet |
float | _chi2WRPhiQuartet |
float | _chi2WRPhiSeptet |
float | _chi2WZTriplet |
float | _chi2WZQuartet |
float | _chi2WZSeptet |
float | _minDistCutAttachForFTD |
float | _minDistCutAttachForVXD |
int | _minimalLayerToAttach |
int | _minMissAddition |
double | _dPhi |
double | _dTheta |
double | _dPhiFTD |
std::vector< int > | _Combinations |
std::vector< int > | _CombinationsFTD |
float | _resolutionRPhiVTX |
float | _resolutionZVTX |
float | _resolutionRPhiFTD |
float | _resolutionZFTD |
float | _resolutionRPhiSIT |
float | _resolutionZSIT |
float | _phiCutForMerging |
float | _tanlambdaCutForMerging |
float | _angleCutForMerging |
int | _print |
int | _checkForDelta |
float | _minDistToDelta |
float | _distRPhi |
float | _distZ |
float | _chi2FitCut |
float | _chi2FitCut_lowPt |
TrackExtendedVec | _trackImplVec |
float | _cutOnD0 |
float | _cutOnZ0 |
float | _cutOnOmegaVXD |
float | _cutOnOmegaFTD |
double | _cutOnPtVXD |
double | _cutOnPtFTD |
int | _minimalHits |
int | _nHitsChi2 |
int | _attachVXD |
int | _attachFTD |
int | _max_hits_per_sector |
int | _nTotalVTXHits |
int | _nTotalFTDHits |
int | _nTotalSITHits |
int | _useSIT |
int | _useFTD |
UTIL::BitField64 * | _encoder |
unsigned int | _nLayersVTX |
unsigned int | _nLayersSIT |
std::vector< float > | _zLayerFTD |
unsigned int | _nlayersFTD |
bool | _petalBasedFTDWithOverlaps |
int | _nPhiFTD |
int | _output_track_col_quality |
int | _sw_theta |
float | _chi2FitCut_kalman |
bool | _useClusterRejection |
float | _minDotOf2Clusters |
struct FPCCDSiliconTracking_MarlinTrk::vxdGeoData_t | _vxd |
struct FPCCDSiliconTracking_MarlinTrk::vxdGeoData_t | _sit |
FloatVec | _pixelSizeVec |
float | _pixelheight |
RangeMap | _phiRangeForTriplet |
RangeMapVer2 | _phiRangeForTripletVer2 |
float | _safetyPhiRange_ratio |
int | _safetyPhiRange_fix |
Extra range in addition to main range used for triplet construction process and needed to find triplet is calculated by getNeededPhiSectors, but safety range is not considered. More... | |
float | _fudgeFactorForSITsr_rphi |
float | _fudgeFactorForSITsr_z |
int | _fudgePhiRange |
int | _fudgeThetaRange |
std::string | _colNameVXDTrackerHitRelations |
std::string | _colNameSITSpacePointRelations |
std::string | _colNameFTDSpacePointRelations |
std::string | _colNameFTDPixelTrackerHitRelations |
LCRelationNavigator * | _navVXD |
LCRelationNavigator * | _navSIT |
LCRelationNavigator * | _navFTDsp |
LCRelationNavigator * | _navFTDpix |
std::string | _colNameVXDSimHit |
std::string | _colNameSITSimHit |
std::string | _colNameFTDspSimHit |
std::string | _colNameFTDpixSimHit |
LCCollection * | _simVXD |
LCCollection * | _simSIT |
LCCollection * | _simFTDsp |
LCCollection * | _simFTDpix |
double | _nSigmaBuild_phi |
double | _nSigmaBuild_theta |
bool | _keepCandidate |
moriUTIL * | _moriUtil |
GetPurityUtil * | _purityUtil |
bool | _mydebug |
bool | _mydebugKalFit |
bool | _mydebugIntersection |
bool | _mydebugRoot |
bool | _mydebugRootVXD |
bool | _mydebugRootFTD |
bool | _mydebugRootVXDFTD |
bool | _mydebugVXDHits |
bool | _mydebugSITHits |
bool | _mydebugTriplet |
int | _mydebugTripletMode |
bool | _mydebugTripletVXD |
bool | _mydebugTripletFTD |
bool | _mydebugTripletVXDFTD |
bool | _mydebugBuildTrack |
int | _mydebugBuildTrackMode |
bool | _mydebugAttachVXD |
bool | _mydebugPrintMCP |
bool | _stopwatch |
class FPCCDSiliconTracking_MarlinTrk::Timer | _timer |
TStopwatch | _timer2Triplet |
TStopwatch | _timer2Build |
bool | _mydebugstopwatch2 |
float | _currentPurity |
std::map< MCParticle *, SimTrackerHitVec > | _mcpVXD |
std::map< MCParticle *, SimTrackerHitVec > | _mcpVXDFTD |
std::map< MCParticle *, SimTrackerHitVec > | _mcpVXDSIT |
std::map< MCParticle *, SimTrackerHitVec > | _mcpVXDFTDSIT |
std::map< MCParticle *, SimTrackerHitVec > | _mcpFTD |
std::map< MCParticle *, SimTrackerHitVec > | _mcpFTDSIT |
std::map< MCParticle *, SimTrackerHitVec > | _mcpSIT |
Triplet * | _curtriplet |
bool | _availableInBuildedTrack |
BuildedTrackVec | _buildedTrackContainer |
BTMap | _mcpBuildedTrackContainer |
std::vector< std::map < MCParticle *, MCP_BuildedTrack > > | _mcpRemainingBTContainerA |
std::vector< std::map < MCParticle *, MCP_BuildedTrack > > | _mcpRemainingBTContainerB |
std::vector< Triplet > | _tripletContainer |
TripMap | _mcpTripletContainer |
std::vector< std::map < MCParticle *, MCP_Triplet > > | _mcpRemainingTRContainerA |
std::vector< std::map < MCParticle *, MCP_Triplet > > | _mcpRemainingTRContainerB |
MCPMap | _mcpMap |
std::vector < LCRelationNavigator * > | _naviVec |
=== FPCCDSiliconTracking_MarlinTrk Processor ===
This processor is based on SiliconTracking_MarlinTrk Processor (author: Steve Apline).
The major differences between FPCCDSiliconTracking_MarlinTrk and SiliconTracking_MarlinTrk are
TestTriplet method and BuildTrack method, which is to say, making track seed process and extrapolation process.
In more detail, please see my talk slide in LCWS 13.
https://agenda.linearcollider.org/getFile.py/access?contribId=313&sessionId=37&resId=0&materialId=slides&confId=6000
This slide explains the major differences and shows improvement in tracking efficiency by using FPCCDSiliconTracking_MarlinTrk and
FPCCDFullLDCTracking_MarlinTrk.
In more detail than this slide, now I am preparing to submit proceedings of LCWS 13. In the future, I will write the address here.
This processor is named FPCCD~, but if you don't use FPCCD VXD Simulator but CMOS with VXDPlanarDigiProcessor or something like that,
abailable, and improves tracking efficiency and flavor tagging and reduces CPU time down to 1/10 if you include pair-BG into your analysis.
The performance evaluation study of this processor in the case including pair-BG is shown in
https://agenda.linearcollider.org/getFile.py/access?contribId=5&resId=0&materialId=slides&confId=6294
The following sentence is the copy of SiliconTracking_MarlinTrk.
Processor performing stand-alone pattern recognition in the vertex detector (VXD), forward tracking disks and SIT.
The procedure consists of three steps :
1) Tracking in VXD and SIT ;
2) Tracking in FTD ;
3) Merging compatible track segments reconstructed in VXD and FTD
STEP 1 : TRACKING IN VXD and SIT
Algorithm starts with finding of hit triplets satisfying helix hypothesis
in three different layers. Two layers of SIT are effectively considered as outermost
layers of the vertex detector. To accelerate procedure, the 4-pi solid angle is divided in NDivisionsInTheta and NDivisionsInPhi sectors in cosQ and Phi, respectively. Triplets are looked for in 2x2 window of adjacent sectors. Once triplet is found, attempt is made to associate additional hits to track. Combinatin of hits is accepted for further analysis if the Chi2 of the fit is less than certain predefined threshold. All accepted combinations are sorted in ascending order of their Chi2. First track candidate in the sorted array is automatically accepted. The hits belonging to this track are marked as used, and track candidates sharing these hits are discarded. The procedure proceeds with increasing index of track candidate in the sorted array until all track candidate have been output or discarded.
STEP 2 : TRACKING IN FTD
In the next step tracking in FTD is performed. The strategy of tracking in the FTD is the same as used for tracking in the VXD+SIT.
STEP 3 : MERGING TRACK SEGMENTS FOUND IN FTD AND VXD+SIT
In the last step, track segments reconstructed in the FTD and VXD+SIT, belonging to the same track are identified and merged into one track. All possible pairings are tested for their compatibility. The number of pairings considered is Ntrk_VXD_SIT*Ntrk_FTD, where Ntrk_VXD_SIT is the number of track segments reconstructed in the first step in VXD+SIT (segments containing solely VXD and SIT hits) and Ntrk_FTD is the number of track segments reconstructed in the second step (segments containing solely FTD hits). Pair of segments is accepted for further examination if the angle between track segments and than certain specified threshold. Pairing satisfying this condition is subjected for addtitional test. The fit is performed on unified array of hits belonging to both segments. If the chi2 of the fit does not exceed predefined cut value two segments are unified into one track.
Processor requires collection of digitized vertex, sit and ftd tracker hits.
If such a collections with the user specified names do not exist processor takes no action.
Processor produces an LCIO collection of the Tracks. Each track is characterised by five parameters : Omega (signed curvuture), Tan(lambda) where lambda is the dip angle, Phi (azimuthal angle @ point of closest approach), D0 (signed impact parameter), Z0 (displacement along z axis at the point of closest approach to IP). Covariance matrix for these parameters is also provided. Only lower left corner of the covariance matrix is stored. The sequence of the covariance matrix elements assigned to track is the following:
(Omega,Omega)
(Omega,TanLambda), (TanLambda,TanLambda)
(Omega,Phi), (TanLamda,Phi), (Phi,Phi)
(Omega,D0), (TanLambda,D0), (Phi,D0), (D0,D0)
(Omega,Z0), (TanLambda,Z0), (Phi,Z0), (D0,Z0), (Z0,Z0)
The number of hits in the different subdetectors associated with each track can be accessed via method Track::getSubdetectorHitNumbers(). This method returns vector of integers :
number of VXD hits in track is the first element in this vector (Track::getSubdetectorHitNumbers()[0])
number of FTD hits in track is the second element in this vector (Track::getSubdetectorHitNumbers()[1])
number of SIT hits in track is the third element in this vector (Track::getSubdetectorHitNumbers()[2])
Output track collection has a name "SiTracks".
VXDHitCollectionName | name of input VXD TrackerHit collection (default parameter value : "VXDTrackerHits") |
FTDHitCollectionName | name of input FTD TrackerHit collection (default parameter value : "FTDTrackerHits") |
SITHitCollectionName | name of input SIT TrackerHit collection (default parameter value : "SITTrackerHits") |
SiTrackCollectionName | name of the output Silicon track collection (default parameter value : "SiTracks") |
LayerCombinations | combinations of layers used to search for hit triplets in VXD+SIT (default parameters : 6 4 3 6 4 2 6 3 2 5 4 3 5 4 2 5 3 2 4 3 2 4 3 1 4 2 1 3 2 1) Note that in the VXD+SIT system the first and the second layers of SIT have indicies nLayerVXD and nLayerVXD+1. Combination given above means that triplets are looked first in layers 6 4 3, and then in 6 4 2; 5 4 3; 6 3 2 etc. NOTE THAT LAYER INDEXING STARTS FROM 0. LAYER 0 is the innermost layer |
LayerCombinationsFTD | combinations of layers used to search for hit triplets in FTD (default parameters 6 5 4 5 4 3 5 4 2 5 4 1 5 3 2 5 3 1 5 2 1 4 3 2 4 3 1 4 3 0 4 2 1 4 2 0 4 1 0 3 2 1 3 2 0 3 1 0 2 1 0). NOTE THAT TRACKS IN FTD ARE SEARCHED ONLY IN ONE HEMISPHERE. TRACK IS NOT ALLOWED TO HAVE HITS BOTH IN BACKWARD AND FORWARD PARTS OF FTD SIMULTANEOUSLY. |
NDivisionsInPhi | Number of divisions in Phi for tracking in VXD+SIT (default value is 40) |
NDivisionsInTheta | Number of divisions in cosQ for tracking in VXD+SIT (default value is 40) |
NDivisionsInPhiFTD | Number of divisions in Phi for tracking in FTD (default value is 3) |
Chi2WRphiTriplet | weight on chi2 in R-Phi plane for track with 3 hits (default value is 1) |
Chi2WZTriplet | weight on chi2 in S-Z plane for track with 3 hits (default value is 0.5) |
Chi2WRphiQuartet | weight on chi2 in R-Phi plane to accept track with 4 hits (default value is 1) |
Chi2WZQuartet | weight on chi2 in S-Z plane for track with 4 hits (default value is 0.5) |
Chi2WRphiSeptet | weight on chi2 in R-Phi plane for track with 5 and more hits (default value is 1) |
Chi2WZSeptet | Cut on chi2 in S-Z plane for track with 5 and more hits (default value is 0.5) |
Chi2FitCut | Cut on chi2/ndf to accept track candidate (default value is 100.) |
AngleCutForMerging | cut on the angle between two track segments. If the angle is greater than this cut, segments are not allowed to be merged. (default value is 0.1) |
MinDistCutAttach | cut on the distance (in mm) from hit to the helix. This parameter is used to decide whether hit can be attached to the track. If the distance is less than cut value. The track is refitted with a given hit being added to the list of hits already assigned for the track. Additional hit is assigned if chi2 of the new fit has good chi2. (default value is 2 ) |
MinLayerToAttach | the minimal layer index to attach VXD hits to the found hit triplets (default value is -1) |
CutOnZ0 | cut on Z0 parameter of track (in mm). If abs(Z0) is greater than the cut value, track is discarded (used to suppress fake track rate in the presence of beam induced background hits) (default value is 100) |
CutOnD0 | cut on D0 parameter of track (in mm). If abs(D0) is greater than the cut value, track is discarded (used to suppress fake track rate in the presence of beam induced background hits) (default value is 100) |
CutOnPt | cut on Pt (GeV/c). If Pt is less than this cut, track is discarded (used to suppress fake track rate in the presence of beam induced background hits) (default value is 0.1) |
MinimalHits | minimal number of hits in track required (default value is 3) |
NHitsChi2 | Maximal number of hits for which a track with n hits is aways better than one with n-1 hits. For tracks with equal or more than NHitsChi2 the track with the lower ![]() |
FastAttachment | if this flag is set to 1, less accurate but fast procedure to merge additional hits to tracks is used if set to 0, a more accurate, but slower procedure is invoked (default value is 0) |
UseSIT | When this flag is set to 1, SIT is included in pattern recognition. When this flag is set to 0, SIT is excluded from the procedure of pattern recognition (default value is 1) |
|
protected |
Method which creates Track out of TrackExtended objects. Checks for possible track splitting (separate track segments in VXD and FTD).
Referenced by processEvent().
|
protected |
Sorting of Track Vector in ascending order of chi2/ndf
Referenced by processEvent().
|
protected |
Extra range in addition to main range used for triplet construction process and needed to find triplet is calculated by getNeededPhiSectors, but safety range is not considered.
Value of _safetyRange is used such as Range = Range*(1 + _safetyRange);
Referenced by init().