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