BmnRoot
Loading...
Searching...
No Matches
BmnRecoTools.cxx
Go to the documentation of this file.
1
2
3#include "BmnRecoTools.h"
4
7
10
12 TClonesArray* mcTracks, TClonesArray* gemPoints, TClonesArray* silPoints, TClonesArray* cscPoints,
13 Int_t code, vector<Int_t> &outCodes, Int_t minHits) {
14
15 Int_t decaysWritten = 0;
16
17 for (Int_t iTrack = 0; iTrack < mcTracks->GetEntriesFast(); iTrack++) {
18 CbmMCTrack* track = (CbmMCTrack*) mcTracks->UncheckedAt(iTrack);
19 if (track->GetMotherId() != -1 || track->GetPdgCode() != code)
20 continue;
21 // printf("found %dth track for %d\n", iTrack, track->GetPdgCode());
22 vector<Int_t> outHitsCnt;
23 outHitsCnt.resize(outCodes.size(), 0);
24 // find the offsprings & count their hits in the inner tracker
25 for (Int_t jTrack = 0; jTrack < mcTracks->GetEntriesFast(); jTrack++) {
26 CbmMCTrack* offspringTrack = (CbmMCTrack*) mcTracks->UncheckedAt(jTrack);
27 if (offspringTrack->GetMotherId() != iTrack)
28 continue;
29 auto it = find(outCodes.begin(), outCodes.end(), offspringTrack->GetPdgCode());
30 if (it == outCodes.end())
31 continue;
32 Int_t iOffspring = it - outCodes.begin();
33 // printf("found %dth offspring for %d\n", iOffspring, offspringTrack->GetPdgCode());
34
36 UInt_t stations = 0u;
37 for (Int_t iPoint = 0; iPoint < gemPoints->GetEntriesFast(); iPoint++) {
38 CbmStsPoint* point = (CbmStsPoint*) gemPoints->UncheckedAt(iPoint);
39 if (point->GetTrackID() != jTrack)
40 continue;
41 // printf("found %dth gem point for %d\n", iPoint, offspringTrack->GetPdgCode());
42 UInt_t iStation = point->GetStation();
43 if (TESTBIT(stations, iStation)) // primitive test whether the track is curly
44 return kFALSE;
45 SETBIT(stations, iStation);
46 outHitsCnt[iOffspring]++;
47 }
49 stations = 0u;
50 for (Int_t iPoint = 0; iPoint < silPoints->GetEntriesFast(); iPoint++) {
51 BmnSiliconPoint* point = (BmnSiliconPoint*) silPoints->UncheckedAt(iPoint);
52 if (point->GetTrackID() != jTrack)
53 continue;
54 // printf("found %dth sil point for %d\n", iPoint, offspringTrack->GetPdgCode());
55 UInt_t iStation = point->GetStation();
56 if (TESTBIT(stations, iStation))
57 return kFALSE;
58 SETBIT(stations, iStation);
59 outHitsCnt[iOffspring]++;
60 }
62 // for (Int_t iPoint = 0; iPoint < cscPoints->GetEntriesFast(); iPoint++) {
63 // BmnCSCPoint* cscPoint = (BmnCSCPoint*) cscPoints->UncheckedAt(iPoint);
64 // if (cscPoint->GetTrackID() != jTrack)
65 // continue;
66 // // printf("found %dth csc point for %d\n", iPoint, offspringTrack->GetPdgCode());
67 // outHitsCnt[iOffspring]++;
68 // }
69 }
70 Int_t insuff = -1;
71 for (size_t iOffspring = 0; iOffspring < outCodes.size(); iOffspring++) {
72 // printf("%d counts %d hits\n", iOffspring, outHitsCnt[iOffspring]);
73 if (outHitsCnt[iOffspring] < minHits) {
74 insuff = iOffspring;
75 break;
76 }
77 }
78 if (insuff > -1)
79 continue;
80 decaysWritten++;
81 }
82 // printf("\n Found %d Good Lambda Decays\n", decaysWritten);
83 return (decaysWritten == 1);
84
85}
86
87//static void BmnRecoTools::ShowHitMakerEff(TClonesArray * hits, BmnSiliconStationSet set) {
88//
89// vector<vector<vector<Int_t > > > histSiliconStrip;
90// for (Int_t iStation = 0; iStation < set->GetNStations(); iStation++) {
91// vector<vector<TH1F*> > rowGEM;
92// BmnSiliconStation* st = set->GetSiliconStation(iStation);
93// for (Int_t iModule = 0; iModule < st->GetNModules(); iModule++) {
94// vector<UInt_t> colGEM;
95// BmnSiliconModule *mod = st->GetModule(iModule);
96// colGEM.resize(mod->GetNStripLayers(), 0)
97// rowGEM.push_back(colGEM);
98// }
99// histSiliconStrip.push_back(rowGEM);
100// }
101//
102// for (Int_t iHit = 0; iHit < hits->GetEntriesFast(); iHit++) {
103// BmnHit *hit = (BmnHit *) hits->UncheckedAt(iHit);
104// hit->Get
105// }
106//}
107
108vector<TString> BmnRecoTools::GetFileVecFromDir(TString dir) {
109 vector<TString> vec;
110 struct dirent **namelist;
111 const regex re(".+.r12");
112 Int_t n;
113 n = scandir(dir, &namelist, 0, alphasort);
114 if (n < 0) {
115 perror("scandir");
116 return vec;
117 } else {
118 for (Int_t i = 0; i < n; ++i) {
119 TString _curFile = TString(namelist[i]->d_name);
120 if (regex_match(namelist[i]->d_name, re)) {
121 vec.push_back(dir + _curFile);
122 // printf("dir file %d %s\n", i, _curFile.Data());
123 }
124 free(namelist[i]);
125 }
126 free(namelist);
127 }
128 return vec;
129}
130
132 TClonesArray* pts,
134 // vector<TH2* > &hitVec) {
135 vector<vector<vector<TH2* > > > &hitVec) {
136 // vector<vector<vector<UInt_t > > > &hitVec) {
137 for (Int_t iHit = 0; iHit < pts->GetEntriesFast(); iHit++) {
138 CbmStsPoint *pt = (CbmStsPoint *) pts->UncheckedAt(iHit);
139 Int_t iSt = pt->GetStation();
140 Int_t iMod = pt->GetModule();
141 // Double_t x = ((FairMCPoint*) pt)->GetX();
142 // Double_t y = ((FairMCPoint*) pt)->GetY();
143 BmnGemStripModule* mod = set->GetStation(iSt)->GetModule(iMod);
144 Double_t driftCenterShift = 0.0;
146 driftCenterShift = 0.15;
147 else
148 driftCenterShift = 0.75;
149 Double_t x = pt->GetX(pt->GetZ() + driftCenterShift);
150 Double_t y = pt->GetY(pt->GetZ() + driftCenterShift);
151 Int_t iLayerOwned = -1;
152 for (size_t iLay = 0; iLay < mod->GetStripLayers().size(); iLay++) {
153 BmnGemStripLayer l = mod->GetStripLayer(iLay);
154 if (l.IsPointInsideStripLayer(x * (-1.0), y)) {
155 iLayerOwned = iLay;
156 break;
157 }
158 }
159 if (iLayerOwned == -1)
160 continue;
161 Int_t iZone = iLayerOwned / 2;
162 // printf("zax = %08X\n",hitVec[pt->GetStation()][pt->GetModule()][iZone]->GetZaxis());
163 Double_t Pz = ((FairMCPoint*) pt)->GetPz();
164 if (Pz > 0)
165 // hitVec[pt->GetStation()]->Fill(
166 // ((FairMCPoint*) pt)->GetPx() / Pz,
167 // ((FairMCPoint*) pt)->GetPy() / Pz);
168 // hitVec[pt->GetStation()]->Fill(x, y);
169 hitVec[pt->GetStation()][pt->GetModule()][iZone]->Fill(x, y);
170 // hitVec[pt->GetStation()][pt->GetModule()][iZone]++;
171 }
172}
173
175 TClonesArray* pts, TClonesArray* hits,
177 // vector<TH2* > &hitVec,
178 // vector<TH1D* > &hrx,
179 // vector<TH1D* > &hry
180 //) {
181 vector<vector<vector<TH2* > > > &hitVec) {
182 // vector<vector<vector<UInt_t > > > &hitVec) {
183
184 for (Int_t iPt = 0; iPt < pts->GetEntriesFast(); iPt++) {
185 CbmStsPoint *pt = (CbmStsPoint *) pts->UncheckedAt(iPt);
186 Int_t iSt = pt->GetStation();
187 Int_t iMod = pt->GetModule();
188 // Double_t x = ((FairMCPoint*) pt)->GetX();
189 // Double_t y = ((FairMCPoint*) pt)->GetY();
190 Double_t thr = 0.;
191 Int_t iLayerOwned = -1;
192 BmnGemStripModule* mod = set->GetStation(iSt)->GetModule(iMod);
193 Double_t driftCenterShift = 0.0;
195 driftCenterShift = 0.15;
196 else
197 driftCenterShift = 0.75;
198 Double_t x = pt->GetX(pt->GetZ() + driftCenterShift);
199 Double_t y = pt->GetY(pt->GetZ() + driftCenterShift);
200 for (size_t iLay = 0; iLay < mod->GetStripLayers().size(); iLay++) {
201 BmnGemStripLayer l = mod->GetStripLayer(iLay);
202 // printf("%d th layer pitch %f\n", iLay, l.GetPitch());
203 if (l.IsPointInsideStripLayer(x * (-1.0), y)) {
204 // layers.push_back(l);
205 iLayerOwned = iLay;
206 // printf("%d th layer found\n", iLay);
207 if (iLay > 1) // hot zone
208 thr = 0.5;
209 else
210 thr = 0.5;
211 thr = thr*thr;
212 break;
213 }
214 }
215 if (iLayerOwned == -1)
216 continue;
217 Int_t iZone = iLayerOwned / 2;
218 // printf("Point %f : %f thr %f\n", x, y, thr);
219 BmnHit *hitClosest = nullptr;
220 Double_t MinDistance = DBL_MAX;
221 for (Int_t iHit = 0; iHit < hits->GetEntriesFast(); iHit++) {
222 BmnHit *hit = (BmnHit *) hits->UncheckedAt(iHit);
223 if (
224 hit->GetFlag() == kFALSE ||
225 hit->GetStation() != iSt ||
226 hit->GetModule() != iMod)
227 continue;
228 Double_t dist = Sq(hit->GetX() - x) + Sq(hit->GetY() - y);
229 // hrx[pt->GetStation()]->Fill(hit->GetX() - x);
230 // hry[pt->GetStation()]->Fill(hit->GetY() - y);
231 // printf("Hit %f : %f dist = %f\n", hit->GetX(), hit->GetY(), dist);
232 if (dist < MinDistance) {
233 hitClosest = hit;
234 MinDistance = dist;
235 }
236 }
237 if (MinDistance < thr) {
238 // printf("Hit %f : %f dist = %f Minimum! \n", hitClosest->GetX(), hitClosest->GetY(), MinDistance);
239 Double_t Pz = ((FairMCPoint*) pt)->GetPz();
240 if (Pz > 0)
241 // hitVec[pt->GetStation()]->Fill(
242 // ((FairMCPoint*) pt)->GetPx() / Pz,
243 // ((FairMCPoint*) pt)->GetPy() / Pz);
244 // hitVec[pt->GetStation()]->Fill(x, y);
245 hitVec[pt->GetStation()][pt->GetModule()][iZone]->Fill(x, y);
246 // hitVec[pt->GetStation()][pt->GetModule()][iZone]++;
247 hitClosest->SetFlag(kFALSE);
248 } else {
249 // printf("\tnot found in st %d mod %d\n", iSt, iMod);
250 }
251 }
252}
253
254TCutG* BmnRecoTools::Ellipse2CutG(TString name, Double_t x, Double_t y, Double_t rx, Double_t ry, Double_t theta) {
255 if (ry < 0.0)
256 ry = rx;
257 const Int_t nIters = 20;
258 TCutG *cutg = new TCutG(name, nIters);
259 Double_t ct = TMath::Cos(theta);
260 Double_t st = TMath::Sin(theta);
261 Double_t dphi = 2 * M_PI / nIters;
262 Double_t phi = 0.0;
263 for (Int_t i = 0; i < nIters - 1; i++) {
264 phi += dphi;
265 Double_t projX = rx * TMath::Cos(phi);
266 Double_t projY = ry * TMath::Sin(phi);
267 cutg->SetPoint(i,
268 x + projX * ct - projY*st,
269 y + projX * st + projY * ct);
270 }
271 Double_t firstX = 0.0;
272 Double_t firstY = 0.0;
273 cutg->GetPoint(0, firstX, firstY);
274 cutg->SetPoint(nIters - 1, firstX, firstY); // why??
275 return cutg;
276}
277
278TF1* BmnRecoTools::GetSignalDistribution(TTree *tree, TClonesArray *arMC,
279 TTree *treeDST, TClonesArray *gemHits, TClonesArray *gemTracks, TClonesArray *tracks,
280 Double_t lowThr, Int_t ClusterSizeThr, Int_t nBins) {
281 Double_t minVal = DBL_MAX;
282 Double_t maxVal = DBL_MIN;
283 if (treeDST && gemHits/* && gemTracks && tracks*/) {
284 Double_t val = 0.0;
285 if (gemHits->GetClass() == BmnGemStripHit::Class()) {
286 for (Long64_t i = 0; i < tree->GetEntries(); i++) {
287 treeDST->GetEntry(i);
288 for (Int_t iHit = 0; iHit < gemHits->GetEntriesFast(); iHit++) {
289 BmnGemStripHit *hit = (BmnGemStripHit *) gemHits->UncheckedAt(iHit);
291 if (val <= lowThr)
292 continue;
293 if (hit->GetClusterSizeInLowerLayer() <= ClusterSizeThr)
294 continue;
295 if (maxVal < val)
296 maxVal = val;
297 if (minVal > val)
298 minVal = val;
299 }
300 }
301 }
302 if (gemHits->GetClass() == BmnSiliconHit::Class()) {
303 for (Long64_t i = 0; i < tree->GetEntries(); i++) {
304 treeDST->GetEntry(i);
305 for (Int_t iHit = 0; iHit < gemHits->GetEntriesFast(); iHit++) {
306 BmnSiliconHit *hit = (BmnSiliconHit *) gemHits->UncheckedAt(iHit);
308 if (val <= lowThr)
309 continue;
310 if (hit->GetClusterSizeInLowerLayer() <= ClusterSizeThr)
311 continue;
312 if (maxVal < val)
313 maxVal = val;
314 if (minVal > val)
315 minVal = val;
316 }
317 }
318
319 }
320 if (gemHits->GetClass() == BmnCSCHit::Class()) {
321 for (Long64_t i = 0; i < tree->GetEntries(); i++) {
322 treeDST->GetEntry(i);
323 for (Int_t iHit = 0; iHit < gemHits->GetEntriesFast(); iHit++) {
324 BmnCSCHit *hit = (BmnCSCHit *) gemHits->UncheckedAt(iHit);
326 if (val <= lowThr)
327 continue;
328 if (hit->GetClusterSizeInLowerLayer() <= ClusterSizeThr)
329 continue;
330 if (maxVal < val)
331 maxVal = val;
332 if (minVal > val)
333 minVal = val;
334 }
335 }
336 }
337 } else
338 for (Long64_t i = 0; i < tree->GetEntries(); i++) {
339 tree->GetEntry(i);
340 for (Int_t iDig = 0; iDig < arMC->GetEntriesFast(); iDig++) {
341 BmnStripDigit* dig = (BmnStripDigit*) arMC->At(iDig);
342 if (dig->GetStripSignal() <= lowThr)
343 continue;
344 Double_t val = dig->GetStripSignal();
345 if (maxVal < val)
346 maxVal = val;
347 if (minVal > val)
348 minVal = val;
349 }
350 }
351 // minVal = log(minVal);
352 // maxVal = log(maxVal);
353 printf("Min = %f max = %f\n", minVal, maxVal);
354 TString name = Form("hSig_%s_%d", arMC->GetName(), rand());
355 TH1F *hSig = new TH1F(name, name, nBins, minVal, maxVal);
356
357 if (treeDST && gemHits/* && gemTracks && tracks*/) {
359 if (gemHits->GetClass() == BmnGemStripHit::Class()) {
360 for (Long64_t i = 0; i < tree->GetEntries(); i++) {
361 treeDST->GetEntry(i);
362 for (Int_t iHit = 0; iHit < gemHits->GetEntriesFast(); iHit++) {
363 BmnGemStripHit *hit = (BmnGemStripHit *) gemHits->UncheckedAt(iHit);
364 // for (Int_t iTrack = 0; iTrack < tracks->GetEntriesFast(); iTrack++) {
365 // BmnGlobalTrack* track = (BmnGlobalTrack*) tracks->UncheckedAt(iTrack);
366 // if (track->GetGemTrackIndex() != -1) {
367 // // for (Int_t iTrack = 0; iTrack < gemTrack->GetEntriesFast(); iTrack++) {
368 // BmnTrack * gemTr = (BmnTrack*) gemTracks->UncheckedAt(track->GetGemTrackIndex());
369 // for (Int_t iHit = 0; iHit < gemTr->GetNHits(); iHit++) {
370 // BmnGemStripHit *hit = (BmnGemStripHit *) gemHits->UncheckedAt(gemTr->GetHitIndex(iHit));
371 if (hit->GetClusterSizeInLowerLayer() <= ClusterSizeThr)
372 continue;
373 Double_t val = hit->GetStripTotalSignalInLowerLayer();
374 if (val <= lowThr)
375 continue;
376 hSig->Fill(val);
377 // BmnMatch match = hit->GetDigitNumberMatch();
378 // const vector<BmnLink> links = match.GetLinks();
379 // for (const BmnLink& link : links) {
380 // if (link.GetIndex() > (arMC->GetEntriesFast() - 1)) {
381 // printf("Warning in event %lld hit %d! Hits Link index out of range! index = %d entries %d\n",
382 // i, iHit, link.GetIndex(), arMC->GetEntriesFast());
383 // continue;
384 // }
385 // BmnStripDigit * dig = (BmnStripDigit*) arMC->At(link.GetIndex());
386 // if (dig->GetStripSignal() <= lowThr)
387 // continue;
388 // if (strcmp(dig->GetName(), ""))
389 // continue;
390 // dig->SetName("used");
391 // Double_t val = dig->GetStripSignal();
392 // hSig->Fill(val);
393 // }
394 // }
395 // // }
396 // }
397 }
398 }
399 }
400 if (gemHits->GetClass() == BmnSiliconHit::Class()) {
401 for (Long64_t i = 0; i < tree->GetEntries(); i++) {
402 treeDST->GetEntry(i);
403 for (Int_t iHit = 0; iHit < gemHits->GetEntriesFast(); iHit++) {
404 BmnSiliconHit *hit = (BmnSiliconHit *) gemHits->UncheckedAt(iHit);
405 if (hit->GetClusterSizeInLowerLayer() <= ClusterSizeThr)
406 continue;
407 Double_t val = hit->GetStripTotalSignalInLowerLayer();
408 if (val <= lowThr)
409 continue;
410 hSig->Fill(val);
411 }
412 }
413 }
414 if (gemHits->GetClass() == BmnCSCHit::Class()) {
415 for (Long64_t i = 0; i < tree->GetEntries(); i++) {
416 treeDST->GetEntry(i);
417 for (Int_t iHit = 0; iHit < gemHits->GetEntriesFast(); iHit++) {
418 BmnCSCHit *hit = (BmnCSCHit *) gemHits->UncheckedAt(iHit);
419 if (hit->GetClusterSizeInLowerLayer() <= ClusterSizeThr)
420 continue;
421 Double_t val = hit->GetStripTotalSignalInLowerLayer();
422 if (val <= lowThr)
423 continue;
424 hSig->Fill(val);
425 }
426 }
427 }
428 } else // all digs
429 for (Long64_t i = 0; i < tree->GetEntries(); i++) {
430 tree->GetEntry(i);
431 for (Int_t iDig = 0; iDig < arMC->GetEntriesFast(); iDig++) {
432 BmnStripDigit* dig = (BmnStripDigit*) arMC->At(iDig);
433 Double_t val = dig->GetStripSignal();
434 if (val <= lowThr)
435 continue;
436 // val = log(val);
437 hSig->Fill(val);
438 }
439 }
440 name = Form("hIntSig_%s_%d", arMC->GetName(), rand());
441 TH1F hIntSig = TH1F(name, Form("Signal_%s", arMC->GetName()), nBins, minVal - 0.5 * (maxVal - minVal) / (Double_t) nBins, maxVal + 0.5 * (maxVal - minVal) / (Double_t) nBins);
442 Double_t bc = 0;
443 for (Int_t i = 0; i < nBins; i++) {
444 bc += hSig->GetBinContent(i);
445 hIntSig.SetBinContent(i, bc);
446 // printf("i = %d center = %f content = %f\n", i, hIntSig.GetBinCenter(i), bc);
447 }
448// name = "can";
449// gStyle->SetOptStat(0);
450// TCanvas* can = new TCanvas(name, name, 1600, 900 * 2);
451// can->Divide(1, 2);
452// TVirtualPad * padSig = can->cd(1);
453// padSig->SetLogy();
454// padSig->SetLogx();
455// hSig->Scale();
456// hSig->Draw();
457//
458// TVirtualPad * padInt = can->cd(2);
459// padInt->SetLogy();
460// padInt->SetLogx();
461 if (bc == 0)
462 return nullptr;
463 hIntSig.Scale(1 / bc);
464 hIntSig.SetLineColor(kRed);
465// hIntSig.Draw();
466
467 TF1 *sig = new TF1(Form("SignalInt_%s", arMC->GetName()),
468 [hIntSig, bc, minVal, maxVal, nBins](Double_t *x, Double_t * p) {
469 // Double_t val = (bc - x[0])/bc;//log(x[0]);
470 if (x[0] >= maxVal) return 1.0;
471 Int_t iBin = hIntSig.GetXaxis()->FindBin(x[0]); //(Int_t) floor(nBins * (x[0] - minVal) / (maxVal - minVal));
472 Int_t jBin = iBin + ((x[0] > hIntSig.GetBinCenter(iBin)) ? 1 : -1); // next bin along direction from center to x
473 Double_t v = hIntSig.GetBinContent(iBin) +
474 (hIntSig.GetBinContent(jBin) - hIntSig.GetBinContent(iBin))*
475 2 * abs(x[0] - hIntSig.GetBinCenter(iBin)) / (hIntSig.GetBinWidth(iBin) + hIntSig.GetBinWidth(jBin));
476 // printf("x = %f bincenter = %f iBin = %d jBin %d f(ibin) = %f f(x) = %f\n",
477 // x[0], hIntSig.GetBinCenter(iBin), iBin, jBin, hIntSig.GetBinContent(iBin), v);
478 return v;
479 }, minVal, maxVal, 0); //(bc - maxVal) / bc, (bc - minVal) / bc, 0);
480 sig->SetNpx(nBins);
481 sig->SetLineColor(kBlue);
482 // hIntSig.Fit(sig, "R");
483 // sig->Draw("same");
484// can->Print(Form("sigs_%s_%d.pdf", arMC->GetName(), tree->GetNbranches()));
485 delete hSig;
486// delete can;
487 return sig;
488}
489
490TF1* BmnRecoTools::GetRescaleFunc(TString name, TF1 *mc, TF1 *ex) {
491 TF1 *funcRescale = new TF1(name,
492 [mc, ex](Double_t *x, Double_t * p) {
493 Double_t r = mc->Eval(x[0]);
494 Double_t f = ex->GetX(r); //, ex->GetXmin(), ex->GetXmax(), 1.E-15, 100, kTRUE);
495 // printf("x = %f mc = %f y = %f\n", x[0], r, f);
496 return f;
497 }, mc->GetXmin(), mc->GetXmax(), 0);
498 return funcRescale;
499}
vector< Double_t > dist(vector< Double_t > qp, Double_t mu)
Definition BmnMath.cxx:869
const float thr
int i
Definition P4_F32vec4.h:22
float f
Definition P4_F32vec4.h:21
Double_t GetStripTotalSignalInLowerLayer()
Definition BmnCSCHit.h:48
Int_t GetClusterSizeInLowerLayer()
Definition BmnCSCHit.h:64
Int_t GetClusterSizeInLowerLayer()
Double_t GetStripTotalSignalInLowerLayer()
Bool_t IsPointInsideStripLayer(Double_t x, Double_t y)
BmnGemStripLayer & GetStripLayer(Int_t num)
ElectronDriftDirectionInModule GetElectronDriftDirection()
vector< BmnGemStripLayer > & GetStripLayers()
Bool_t GetFlag() const
Definition BmnHit.h:33
Int_t GetModule()
Definition BmnHit.h:77
void SetFlag(Bool_t fl)
Definition BmnHit.h:49
Short_t GetStation() const
Definition BmnHit.h:45
static TF1 * GetSignalDistribution(TTree *tree, TClonesArray *ar, TTree *treeDST=nullptr, TClonesArray *gemHits=nullptr, TClonesArray *gemTracks=nullptr, TClonesArray *tracks=nullptr, Double_t lowThr=0, Int_t ClusterSizeThr=0, Int_t nBins=100000)
static Bool_t IsReconstructable(TClonesArray *tracks, TClonesArray *gemPoints, TClonesArray *silPoints, TClonesArray *cscPoints, Int_t code, vector< Int_t > &outCodes, Int_t minHits=4)
static void FillSetStsPoints(TClonesArray *pts, BmnGemStripStationSet *set, vector< vector< vector< TH2 * > > > &hitVec)
static TF1 * GetRescaleFunc(TString name, TF1 *mc, TF1 *ex)
static void FillSetStsHits(TClonesArray *pts, TClonesArray *hits, BmnGemStripStationSet *set, vector< vector< vector< TH2 * > > > &hitVec)
static TCutG * Ellipse2CutG(TString name, Double_t x, Double_t y, Double_t rx, Double_t ry=-1.0, Double_t theta=0.0)
virtual ~BmnRecoTools()
static vector< TString > GetFileVecFromDir(TString dir)
Double_t GetStripTotalSignalInLowerLayer()
Int_t GetClusterSizeInLowerLayer()
Double_t GetStripSignal()
Int_t GetMotherId() const
Definition CbmMCTrack.h:57
Int_t GetPdgCode() const
Definition CbmMCTrack.h:56
Double_t GetY(Double_t z) const
Double_t GetX(Double_t z) const
Int_t GetModule() const
Definition CbmStsPoint.h:82
Int_t GetStation() const
Definition CbmStsPoint.h:81
@ ForwardZAxisEDrift