BmnRoot
Loading...
Searching...
No Matches
BmnTrackingQa.h
Go to the documentation of this file.
1
9#ifndef BMNTRACKINGQA_H_
10#define BMNTRACKINGQA_H_
11
12#include "FairTask.h"
13#include "BmnGemStripStationSet.h"
14#include "BmnSiliconStationSet.h"
15#include "BmnCSCStationSet.h"
16#include "BmnMCTrackCreator.h"
17#include "CbmVertex.h"
18
19class BmnHistManager;
20class BmnTrackMatch;
22class BmnGlobalElectronId;
23
24using std::string;
25using std::vector;
26using std::multimap;
27
28class BmnTrackingQa : public FairTask {
29public:
30
35
39 BmnTrackingQa(Short_t ch, TString name, TString gemConf, TString silConf, TString cscConf);
40
44 virtual ~BmnTrackingQa();
45
49 virtual InitStatus Init();
50
54 virtual void Exec(
55 Option_t* opt);
56
60 virtual void Finish();
61
63 void SetMinNofPointsSts(Int_t minNofPointsSts) {
64 fMinNofPoints = minNofPointsSts;
65 }
66
67 void SetMinNofPointsTof(Int_t minNofPointsTof) {
68 fMinNofPointsTof = minNofPointsTof;
69 }
70
71 void SetQuota(Double_t quota) {
72 fQuota = quota;
73 }
74
75 void SetOutputDir(const std::string& dir) {
76 fOutputDir = dir;
77 }
78
79 void SetPRange(Int_t bins, Int_t min, Int_t max) {
80 fPRangeBins = bins;
81 fPRangeMin = min;
82 fPRangeMax = max;
83 }
84
85 void SetYRange(Int_t bins, Int_t min, Int_t max) {
86 fYRangeBins = bins;
87 fYRangeMin = min;
88 fYRangeMax = max;
89 }
90
91 void SetPtRange(Int_t bins, Int_t min, Int_t max) {
92 fPtRangeBins = bins;
93 fPtRangeMin = min;
94 fPtRangeMax = max;
95 }
96
98 Double_t min,
99 Double_t max,
100 Int_t nofBins) {
101 fThetaRangeMin = min;
102 fThetaRangeMax = max;
103 fThetaRangeBins = nofBins;
104 }
105
106 void SetOnlyPrimes(const Bool_t prime) {
107 fPrimes = prime;
108 }
109
110 Bool_t GetOnlyPrimes() const {
111 return fPrimes;
112 }
113
114 void SetInnerTrackerSetup(map<DetectorId, Bool_t> setup) {
115 fInnerTrackerSetup = setup;
116 };
117
118 void SetDetectorPresence(DetectorId det, Bool_t use) {
119 fInnerTrackerSetup[det] = use;
120 };
121
122 void SetInnerTracksBranchName(TString name) {
123 fInnerTrackBranchName = name;
124 }
125
126
127private:
131 void ReadDataBranches();
132
133 void CreateH1(
134 const string& name,
135 const string& xTitle,
136 const string& yTitle,
137 Int_t nofBins,
138 Double_t minBin,
139 Double_t maxBin);
140
141 void CreateH2(
142 const string& name,
143 const string& xTitle,
144 const string& yTitle,
145 const string& zTitle,
146 Int_t nofBinsX,
147 Double_t minBinX,
148 Double_t maxBinX,
149 Int_t nofBinsY,
150 Double_t minBinY,
151 Double_t maxBinY);
152
153 void CreateTrackHitsHistogram(const string& detName);
154
155 void ReadEventHeader();
156
157
158 void CreateHistograms();
159 void ProcessGlobal();
160
161 Int_t CalcNumberOfMcPointInTrack(BmnMCTrack mcTrack);
162 Int_t CalcNumberOfMcPointInTrack(Int_t trId);
163
164 TString fOutName;
165
166 BmnHistManager* fHM; // Histogram manager
167 string fOutputDir; // Output directory for results
168 BmnMCTrackCreator* fMCTrackCreator; // MC track creator tool
169
170 // Acceptance defined by MC points
171 Int_t fMinNofPoints; // Minimal number of MCPoints in STS
172 Int_t fMinNofPointsTof; // Minimal number of MCPoints in TOF
173 Int_t fMinNofPointsDch; // Minimal number of MCPoints in TOF
174
175 Double_t fQuota; // True/all hits for track to be considered correctly reconstructed
176 Double_t fEtaCut; // threshold for pseudorapidity (cat for spectators)
177 Double_t fPCut; // threshold for momentum
178
179 Bool_t fPrimes; //calculate efficiency only for primaries or for all particles
180
181 // Minimal number of hits in track to be considered as accepted.
182 // This is needed because the definition of the correctly reconstructed track
183 // is 60% of hits in the reconstructed track are from the same MC track.
184 // But this can lead to the situation when a reconstructed track has 4 hits,
185 // all of them from the same MC track, which means that the track is correctly
186 // reconstructed. BUT the real MC track has 12 points(hits). This is especially
187 // important for the MUCH detector. To avoid such situations one has to put
188 // such cut.
189
190 Double_t fPRangeMin; // Minimum momentum for tracks for efficiency calculation [GeV/c]
191 Double_t fPRangeMax; // Maximum momentum for tracks for efficiency calculation [GeV/c]
192 Int_t fPRangeBins; // Number of bins for efficiency vs. momentum histogram
193 Double_t fPtRangeMin; // Minimum Pt for tracks for efficiency calculation [GeV/c]
194 Double_t fPtRangeMax; // Maximum Pt for tracks for efficiency calculation [GeV/c]
195 Int_t fPtRangeBins; // Number of bins for efficiency vs. Pt histogram
196 Double_t fYRangeMin; // Minimum rapidity for tracks for efficiency calculation
197 Double_t fYRangeMax; // Maximum rapidity for tracks for efficiency calculation
198 Int_t fYRangeBins; // Number of bins for efficiency vs. rapidity histogram
199 Double_t fEtaRangeMin; // Minimum pseudorapidity for tracks for efficiency calculation
200 Double_t fEtaRangeMax; // Maximum pseudorapidity for tracks for efficiency calculation
201 Int_t fEtaRangeBins; // Number of bins for efficiency vs. pseudorapidity histogram
202 Double_t fThetaRangeMin; // Minimum polar angle [grad]
203 Double_t fThetaRangeMax; // Maximum polar angle [grad]
204 Int_t fThetaRangeBins; // Number of bins for efficiency vs. polar angle histogram
205
206 UInt_t fNHitsCut; //cut to exclude overflowed events
207
208 map<DetectorId, Bool_t> fInnerTrackerSetup;
209 Int_t fNStations;
210
211 // Pointers to data arrays
212 TClonesArray* fMCTracks; // CbmMCTrack array
213 TClonesArray* fGlobalTracks; // BmnGlobalTrack array
214 TClonesArray* fGemTracks;
215 TClonesArray* fSilTracks;
216 TClonesArray* fStsTracks;
217 TClonesArray* fStsTrackMatches;
218 TClonesArray* fGlobalTrackMatches; // BmnGemTrackMatch array
219 TClonesArray* fGemHits;
220 TClonesArray* fSilHits;
221 TClonesArray* fSsdHits;
222 TClonesArray* fStsHits;
223 TClonesArray* fInnerHits;
224 TClonesArray* fTof400Hits;
225 TClonesArray* fTof700Hits;
226 TClonesArray* fCscHits;
227 TClonesArray* fCscPoints;
228 TClonesArray* fDchTracks;
229 TClonesArray* fGemPoints;
230 TClonesArray* fSilPoints;
231
232 TClonesArray* fVertex; //BMN tracking
233 CbmVertex* fVertexL1; //L1 tracking
234 TString fConfigGem;
235 TString fConfigSil;
236 TString fConfigCsc;
237 BmnGemStripStationSet* fGemDetector;
238 BmnSiliconStationSet* fSilDetector;
239 BmnCSCStationSet* fCscDetector;
240
241 TString fInnerTrackBranchName;
242
243 Short_t fChargeCut; //(-1, 0, +1) do QA for negative, all or positive particles
244
245 Int_t fEventNo; // event counter
246
247 BmnTrackingQa(const BmnTrackingQa&) = delete;
248 BmnTrackingQa& operator=(const BmnTrackingQa&) = delete;
249
250 ClassDef(BmnTrackingQa, 1);
251};
252
253#endif /* BMNTRACKINGQA_H_ */
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
Definition P4_F32vec4.h:30
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
Definition P4_F32vec4.h:31
DetectorId
Histogram manager.
Monte-Carlo track.
Definition BmnMCTrack.h:27
void SetMinNofPointsTof(Int_t minNofPointsTof)
virtual InitStatus Init()
Derived from FairTask.
void SetOutputDir(const std::string &dir)
void SetThetaRange(Double_t min, Double_t max, Int_t nofBins)
virtual void Exec(Option_t *opt)
Derived from FairTask.
void SetPRange(Int_t bins, Int_t min, Int_t max)
void SetInnerTracksBranchName(TString name)
void SetMinNofPointsSts(Int_t minNofPointsSts)
virtual void Finish()
Derived from FairTask.
BmnTrackingQa(Short_t ch, TString name, TString gemConf, TString silConf, TString cscConf)
Constructor.
void SetInnerTrackerSetup(map< DetectorId, Bool_t > setup)
void SetDetectorPresence(DetectorId det, Bool_t use)
void SetPtRange(Int_t bins, Int_t min, Int_t max)
BmnTrackingQa()
Constructor.
void SetQuota(Double_t quota)
Bool_t GetOnlyPrimes() const
void SetOnlyPrimes(const Bool_t prime)
virtual ~BmnTrackingQa()
Destructor.
void SetYRange(Int_t bins, Int_t min, Int_t max)
Definition setup.py:1