Line data Source code
1 : #ifndef ALITRDONLINETRACKMATCHING_H
2 : #define ALITRDONLINETRACKMATCHING_H
3 :
4 : //
5 : // Track matching between TRD online tracks and ESD tracks.
6 : // Author: Felix Rettig <rettig@compeng.uni-frankfurt.de>
7 :
8 : #include "TObject.h"
9 : class TH1;
10 : class AliESDEvent;
11 : class AliExternalTrackParam;
12 : class AliTRDgeometry;
13 : class AliESDtrack;
14 : class AliESDTrdTrack;
15 :
16 : //#define TRD_TM_DEBUG
17 :
18 : class AliTRDonlineTrackMatching : public TObject {
19 : public:
20 : AliTRDonlineTrackMatching();
21 : ~AliTRDonlineTrackMatching();
22 :
23 0 : inline static Short_t TrdLsiSec(Short_t lsi) { return (lsi < 0) ? -1 : (lsi/5); } // convert linear stack index 0-89 to TRD sector 0-17
24 424 : inline static Short_t TrdLsiSi(Short_t lsi) { return (lsi < 0) ? -1 : (lsi%5); } // convert stack index 0-89 to local stack index 0-4
25 584 : inline static Short_t TrdDetLsi(Short_t det) { return det/6; } // convert TRD detector/chamber 0-539 index to linear stack index 0-89
26 584 : inline static Short_t TrdDetSi(Short_t det) { return (det%30)/6; } // convert detector (=chamber) number 0-539 to local stack index 0-4
27 584 : inline static Short_t TrdDetLyr(Short_t det) { return det%6; } // convert detector (=chamber) number 0-539 to local layer 0-5
28 4638 : inline static Short_t TrdSecSiLsi(Short_t sec, Short_t si) { return 5*sec + si; } // convert sector (0-17) and local stack index (0-4) to linear stack index 0-89
29 :
30 : static Short_t EstimateSector(const Double_t globalCoords[3]);
31 : static Short_t EstimateLayer(Double_t radius);
32 : static Short_t EstimateLocalStack(const Double_t globalCoords[3]);
33 : static Short_t EstimateStack(const Double_t globalCoords[3]);
34 :
35 : static Bool_t StackToTrack(const AliExternalTrackParam* track, Short_t &stack, UShort_t &layersWithTracklet, Double_t magFieldinKiloGauss);
36 : static Bool_t StackToTrack(const AliESDtrack* track, Short_t &stack, UShort_t &layersWithTracklet, Double_t magFieldinKiloGauss);
37 :
38 : static Bool_t TrackPlaneIntersect(AliExternalTrackParam *trk, Double_t pnt[3], Double_t norm[3], Double_t mag);
39 : Int_t EstimateTrackDistance(AliESDtrack *esd_track, AliESDTrdTrack* gtu_track, Double_t mag, Double_t *ydist, Double_t *zdist);
40 : static Double_t RateTrackMatch(Double_t distY, Double_t distZ, Double_t rpt, Double_t gpt);
41 :
42 0 : static void SetEsdTrackCutMinTPCrows(Double_t setting) { fEsdTrackCutMinTPCrows = setting; };
43 0 : static void SetEsdTrackCutMinRatioRowsFindableClusters(Double_t setting) { fEsdTrackCutMinRatioRowsFindableClusters = setting; };
44 0 : static void SetEsdTrackCutMaxChi2TPCclusters(Float_t setting) { fEsdTrackCutMaxChi2TPCclusters = setting; };
45 0 : static void SetEsdTrackCutMaxChi2ITSclusters(Float_t setting) { fEsdTrackCutMaxChi2ITSclusters = setting; };
46 0 : static void SetEsdTrackCutMaxDCAtoVertexXY(Float_t setting) { fEsdTrackCutMaxDCAtoVertexXY = setting; };
47 0 : static void SetEsdTrackCutMaxDCAtoVertexZ( Float_t setting) { fEsdTrackCutMaxDCAtoVertexZ = setting; };
48 0 : static void SetEsdTrackCutITSlayerMask(UShort_t setting) { fEsdTrackCutsITSlayerMask = setting; };
49 0 : static void SetEsdTrackCutsChi2TPCconstrainedVsGlobal(Float_t setting) { fEsdTrackVCutsChi2TPCconstrainedVsGlobal = setting; };
50 0 : static void SetEsdTrackCutMinimal(Bool_t setting) { fEsdTrackCutMinimal = setting; };
51 0 : static void SetEsdTrackCutRequireITSrefit(Bool_t setting) { fEsdTrackCutRequireITSrefit = setting; };
52 0 : static void SetEsdTrackCutRequireTPCrefit(Bool_t setting) { fEsdTrackCutRequireTPCrefit = setting; };
53 0 : static void SetEsdTrackCutPrim(Bool_t setting) { fEsdTrackCutPrim = setting; };
54 :
55 : static void SetEsdTrackDefaultCuts(const char* cutIdent = "minimal");
56 :
57 0 : void SetMinMatchRating(Float_t setting) { fMinMatchRating = setting; };
58 0 : void SetHistMatchRating(TH1* hist) { fHistMatchRating = hist; };
59 :
60 : static Bool_t AcceptTrack(const AliESDtrack* esdTrack, const AliESDEvent* esdEvent);
61 : Bool_t ProcessEvent(AliESDEvent *esdEvent, Bool_t updateRef = kTRUE, Int_t label = -1);
62 :
63 : protected:
64 :
65 : inline static Double_t PtDiffRel(Double_t refPt, Double_t gtuPt);
66 :
67 : static const unsigned int fgkMaxEsdTracksPerStack = 20000; // max no. of tracks per stack
68 : static const unsigned int fgkTrdStacks = 90; // no. of TRD stacks (0-89)
69 : static const Float_t fgkSaveInnerRadius; // inner radius for extrapolation
70 : static const Float_t fgkSaveOuterRadius; // outer radius for extrapolation
71 :
72 : static Float_t fEsdTrackCutMinTPCrows; // track cut
73 : static Float_t fEsdTrackCutMinRatioRowsFindableClusters; // track cut
74 : static Float_t fEsdTrackCutMaxChi2TPCclusters; // track cut
75 : static Float_t fEsdTrackCutMaxChi2ITSclusters; // track cut
76 : static Float_t fEsdTrackCutMaxDCAtoVertexXY; // track cut
77 : static Float_t fEsdTrackCutMaxDCAtoVertexZ; // track cut
78 : static UShort_t fEsdTrackCutsITSlayerMask; // track cut
79 : static Float_t fEsdTrackVCutsChi2TPCconstrainedVsGlobal; // track cut
80 : static Float_t fEsdTrackCutPtDCAOfs; // track cut
81 : static Float_t fEsdTrackCutPtDCACoeff; // track cut
82 : static Bool_t fEsdTrackCutMinimal; // activate/deactive minimal track cuts
83 : static Bool_t fEsdTrackCutRequireITSrefit; // track cut
84 : static Bool_t fEsdTrackCutRequireTPCrefit; // track cut
85 : static Bool_t fEsdTrackCutPrim; // select primaries or keep secondaries for matching
86 :
87 : AliTRDgeometry* fTRDgeo; //! TRD geometry instance
88 : Float_t fMinMatchRating; //! min rating to accept pair of matched tracks
89 : TH1* fHistMatchRating; //! optional histogram for match rating for all TRD tracks
90 :
91 : AliTRDonlineTrackMatching(const AliTRDonlineTrackMatching &c);
92 : AliTRDonlineTrackMatching& operator=(const AliTRDonlineTrackMatching& rhs);
93 :
94 74 : ClassDef(AliTRDonlineTrackMatching, 0);
95 : };
96 :
97 : #endif
|