BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnEfficiency.cxx
Go to the documentation of this file.
1#include "BmnEfficiency.h"
2
3#include "TFile.h"
4
6{
7 dstChain = nullptr;
8 fNEvents = 0;
9 fKalman = nullptr;
10
11 fHeader = nullptr;
12
13 fInnerHits = nullptr;
14 fGemHits = nullptr;
15 fSiliconHits = nullptr;
16 fGlobTracks = nullptr;
17 fGemTracks = nullptr;
18 fSiliconTracks = nullptr;
19 fVertices = nullptr;
20
21 fField = nullptr;
22 fMagField = nullptr;
23 fKalman = nullptr;
24
26
27 gem = fInnTracker->GetGemGeometry();
28 silicon = fInnTracker->GetSiliconGeometry();
29
30 fNHits = 5;
31}
32
33BmnEfficiency::BmnEfficiency(FairRunAna* fAna, BmnInnerTrackerGeometryDraw* fInnTracker, TString dstFile, Int_t nEvents)
35 , fNHitsSilicon(2)
36 , fNHitsGem(4)
37 , gem(nullptr)
38 , silicon(nullptr)
39 , fHeader(nullptr)
40 , fInnerHits(nullptr)
41 , fGemHits(nullptr)
42 , fSiliconHits(nullptr)
43 , fGlobTracks(nullptr)
44 , fGemTracks(nullptr)
45 , fSiliconTracks(nullptr)
46 , fVertices(nullptr)
47 , dstChain(nullptr)
48 , fNEvents(nEvents)
49 , fMagField(nullptr)
50 , fKalman(nullptr)
51 , fNHits(6)
52{
53 // Open dst file ...
54 dstChain = new TChain("bmndata");
55
56 // Adding dst file to the chain ...
57 TFile f(dstFile);
58 if (f.IsOpen() && !f.IsZombie()) {
59 dstChain->Add(dstFile.Data());
61 }
62
63 if (!isGoodDst)
64 return;
65
66 cout << "Num. of events to be used# " << dstChain->GetEntries() << endl;
67
68 dstChain->SetBranchAddress("DstEventHeader.", &fHeader);
69 dstChain->SetBranchAddress("BmnInnerHits", &fInnerHits);
70 dstChain->SetBranchAddress("BmnGemStripHit", &fGemHits);
71 dstChain->SetBranchAddress("BmnSiliconHit", &fSiliconHits);
72 dstChain->SetBranchAddress("BmnGlobalTrack", &fGlobTracks);
73 dstChain->SetBranchAddress("BmnGemTrack", &fGemTracks);
74 dstChain->SetBranchAddress("BmnSiliconTrack", &fSiliconTracks);
75 dstChain->SetBranchAddress("BmnVertex", &fVertices);
76
77 dstChain->GetEntry();
78
79 UInt_t runId = fHeader->GetRunId();
80 cout << "runId = " << runId << endl;
81
82 fMagField = new BmnNewFieldMap("field_sp41v4_ascii_Extrap.root");
83
84 if (runId && runId < 10000) {
85 UniRun* runInfo = UniRun::GetRun(7, runId);
86
87 if (!runInfo)
88 return;
89
90 fMagField->SetScale(*runInfo->GetFieldVoltage() / 55.87);
91 } else
92 fMagField->SetScale(1251.9 / 900.); // FIXME!!!
93
94 fMagField->Init();
95
96 fAna->SetField(fMagField);
97 fField = fAna->GetField();
98
100
101 // Calculating boarders and stat (mod) positions to be sure whether we are in acceptance ...
102 gem = fInnTracker->GetGemGeometry();
103 silicon = fInnTracker->GetSiliconGeometry();
104
105 TClonesArray* GEM = new TClonesArray("InnerTrackerParams");
106 TClonesArray* SILICON = new TClonesArray("InnerTrackerParams");
107
108 for (Int_t iEvent = 0; iEvent < 2000; iEvent++) {
109 dstChain->GetEntry(iEvent);
110
111 // Loop over GEM hits ...
112 for (Int_t iHit = 0; iHit < fGemHits->GetEntriesFast(); iHit++) {
113 BmnHit* hit = (BmnHit*)fGemHits->UncheckedAt(iHit);
114
115 new ((*GEM)[GEM->GetEntriesFast()])
116 InnerTrackerParams((Int_t)hit->GetStation(), hit->GetModule(), hit->GetX(), hit->GetY(), hit->GetZ());
117 }
118
119 // Loop over SILICON hits ...
120 for (Int_t iHit = 0; iHit < fSiliconHits->GetEntriesFast(); iHit++) {
121 BmnHit* hit = (BmnHit*)fSiliconHits->UncheckedAt(iHit);
122
123 new ((*SILICON)[SILICON->GetEntriesFast()])
124 InnerTrackerParams((Int_t)hit->GetStation(), hit->GetModule(), hit->GetX(), hit->GetY(), hit->GetZ());
125 }
126 }
127
129 FillAcceptanceMaps(GEM, SILICON);
130
131 delete GEM;
132 delete SILICON;
133}
134
136{
137 Int_t nStats = 0;
138 Int_t nMods = 0;
139
140 if (!SILs) {
141 nStats = gem->GetNStations();
142 nMods = gem->GetStation(0)->GetNModules();
143 } else {
144 nStats = silicon->GetNStations();
145 nMods = silicon->GetStation(2)->GetNModules();
146 }
147
148 set<Double_t>*** x = new set<Double_t>**[nStats];
149 set<Double_t>*** y = new set<Double_t>**[nStats];
150 set<Double_t>*** z = new set<Double_t>**[nStats];
151
152 for (Int_t iStat = 0; iStat < nStats; iStat++) {
153 x[iStat] = new set<Double_t>*[nMods];
154 y[iStat] = new set<Double_t>*[nMods];
155 z[iStat] = new set<Double_t>*[nMods];
156
157 for (Int_t iMod = 0; iMod < nMods; iMod++) {
158 x[iStat][iMod] = new set<Double_t>();
159 y[iStat][iMod] = new set<Double_t>();
160 z[iStat][iMod] = new set<Double_t>();
161 }
162 }
163
164 TClonesArray* arr = (!SILs) ? GEMs : SILs;
165
166 for (Int_t iStat = 0; iStat < nStats; iStat++)
167 for (Int_t iMod = 0; iMod < nMods; iMod++)
168 for (Int_t iEle = 0; iEle < arr->GetEntriesFast(); iEle++) {
170 if (g->station() == iStat && g->module() == iMod) {
171 x[iStat][iMod]->insert(g->xyz().X());
172 y[iStat][iMod]->insert(g->xyz().Y());
173 z[iStat][iMod]->insert(g->xyz().Z());
174 }
175 }
176
177 Int_t shift = (!SILs) ? silicon->GetNStations() : 0;
178
179 for (Int_t iStat = 0; iStat < nStats; iStat++)
180 for (Int_t iMod = 0; iMod < nMods; iMod++) {
181
182 Double_t minX = *min_element(x[iStat][iMod]->begin(), x[iStat][iMod]->end());
183 Double_t maxX = *max_element(x[iStat][iMod]->begin(), x[iStat][iMod]->end());
184
185 Double_t minY = *min_element(y[iStat][iMod]->begin(), y[iStat][iMod]->end());
186 Double_t maxY = *max_element(y[iStat][iMod]->begin(), y[iStat][iMod]->end());
187
188 vector<Double_t> borders{minX, maxX, minY, maxY};
189
190 if (z[iStat][iMod]->size()) {
191 fStatZ[make_pair(iStat + shift, iMod)] = *z[iStat][iMod]->begin();
192 fStatAcceptance[make_pair(iStat + shift, iMod)] = borders;
193 }
194 }
195
196 // Deleting allocated memory ...
197 for (Int_t iStat = 0; iStat < nStats; iStat++)
198 for (Int_t iMod = 0; iMod < nMods; iMod++) {
199 delete x[iStat][iMod];
200 delete y[iStat][iMod];
201 delete z[iStat][iMod];
202 }
203
204 delete[] x;
205 delete[] y;
206 delete[] z;
207}
208
209BmnEfficiency::BmnEfficiency(FairRunAna* fAna, TString dstFile, Int_t nEvents)
210{
212 fNEvents = nEvents;
213 gem = nullptr;
214 silicon = nullptr;
215 fHeader = nullptr;
216 fInnerHits = nullptr;
217 fGemHits = nullptr;
218 fSiliconHits = nullptr;
219 fGlobTracks = nullptr;
220 fGemTracks = nullptr;
221 fSiliconTracks = nullptr;
222 fVertices = nullptr;
223 dstChain = nullptr;
224 fKalman = nullptr;
225 fMagField = nullptr;
226 fNHits = 6;
227 fNHitsSilicon = 2;
228 fNHitsGem = 4;
229
230 // Open dst file ...
231 dstChain = new TChain("bmndata");
232
233 // Adding dst file to the chain ...
234 TFile f(dstFile);
235 if (f.IsOpen() && !f.IsZombie()) {
236 dstChain->Add(dstFile.Data());
238 }
239
240 if (!isGoodDst)
241 return;
242
243 cout << "Num. of events to be used# " << dstChain->GetEntries() << endl;
244
245 dstChain->SetBranchAddress("DstEventHeader.", &fHeader);
246 dstChain->SetBranchAddress("BmnInnerHits", &fInnerHits);
247 dstChain->SetBranchAddress("BmnGemStripHit", &fGemHits);
248 dstChain->SetBranchAddress("BmnSiliconHit", &fSiliconHits);
249 dstChain->SetBranchAddress("BmnGlobalTrack", &fGlobTracks);
250 dstChain->SetBranchAddress("BmnGemTrack", &fGemTracks);
251 dstChain->SetBranchAddress("BmnSiliconTrack", &fSiliconTracks);
252 dstChain->SetBranchAddress("BmnVertex", &fVertices);
253
254 dstChain->GetEntry();
255
256 UInt_t runId = fHeader->GetRunId();
257
258 fMagField = new BmnNewFieldMap("field_sp41v4_ascii_Extrap.root");
259
260 if (runId && runId < 10000) {
261 UniRun* runInfo = UniRun::GetRun(7, runId);
262
263 if (!runInfo)
264 return;
265
266 fMagField->SetScale(*runInfo->GetFieldVoltage() / 55.87);
267 } else
268 fMagField->SetScale(1251.9 / 900.); // FIXME !!!
269
270 fMagField->Init();
271
272 fAna->SetField(fMagField);
273 fField = fAna->GetField();
274
275 fKalman = new BmnKalmanFilter();
276}
277
279 TClonesArray* effSilicon,
280 map<Int_t, vector<pair<Double_t, Double_t>>> gYr,
281 map<Int_t, vector<pair<Double_t, Double_t>>> sYr)
282{
283
284 if (!isGoodDst)
285 return;
286
287 auto silFirst = fStatZ.begin();
288 auto gemLast = fStatZ.rbegin();
289
290 Int_t nHitsMax = gem->GetNStations() + silicon->GetNStations();
291 Double_t zBegin = silFirst->second - 5.; // first SILICON - 5 cm
292 Double_t zEnd = gemLast->second + 5.; // last GEM + 5 cm
293
294 Int_t nModsSilicon = 0;
295 for (Int_t iStat = 0; iStat < silicon->GetNStations(); iStat++)
296 for (Int_t iMod = 0; iMod < silicon->GetStation(iStat)->GetNModules(); iMod++)
297 nModsSilicon++;
298
299 auto gemFirst = next(fStatZ.begin(), nModsSilicon);
300 auto silLast = next(fStatZ.begin(), nModsSilicon - 1);
301
302 Double_t borderSilGem = .5 * (gemFirst->second + silLast->second);
303
304 gStyle->SetOptStat(0);
305
306 for (Int_t iEvent = 0; iEvent < ((fNEvents == 0) ? dstChain->GetEntries() : fNEvents); iEvent++) {
307 dstChain->GetEntry(iEvent);
308
309 if (iEvent % 100000 == 0)
310 cout << "Event# " << iEvent << endl;
311
312 BmnVertex* Vp = (BmnVertex*)fVertices->UncheckedAt(0);
313 if (Vp->GetNTracks() < 3) // FIXME !!!
314 continue;
315
316 // Whether we skip it or not ...
317 if (TMath::Abs(Vp->GetZ()) > 6.) // FIXME !!!
318 continue;
319
320 // Loop over glob. tracks ...
321 for (Int_t iTrack = 0; iTrack < fGlobTracks->GetEntriesFast(); iTrack++) {
322 BmnGlobalTrack* track = (BmnGlobalTrack*)fGlobTracks->UncheckedAt(iTrack);
323
324 if (TMath::Abs(track->GetP()) < .5 || TMath::Abs(track->GetP()) > 5.) /// FIXME !!!
325 continue;
326
327 vector<BmnHit*> hits;
328
329 // Loop over silicon hits ...
330 if (track->GetSilTrackIndex() != -1) {
331 BmnTrack* silTrack = (BmnTrack*)fSiliconTracks->UncheckedAt(track->GetSilTrackIndex());
332
333 for (Int_t iHit = 0; iHit < silTrack->GetNHits(); iHit++)
334 hits.push_back((BmnHit*)fSiliconHits->UncheckedAt(silTrack->GetHitIndex(iHit)));
335 }
336
337 // Loop over gem hits ...
338 if (track->GetGemTrackIndex() != -1) {
339 BmnTrack* gemTrack = (BmnTrack*)fGemTracks->UncheckedAt(track->GetGemTrackIndex());
340
341 for (Int_t iHit = 0; iHit < gemTrack->GetNHits(); iHit++)
342 hits.push_back((BmnHit*)fGemHits->UncheckedAt(gemTrack->GetHitIndex(iHit)));
343 }
344
345 Int_t nHits = 0;
346
347 // Let us calculate number of hits in [zBegin, zEnd] ...
348 for (BmnHit* hit : hits) {
349 Double_t Z = hit->GetZ();
350 if (Z > zBegin && Z < zEnd)
351 nHits++;
352 }
353
354 if (nHits < fNHits)
355 continue;
356
357 // Also, a track should satisfy the condition: SilHits >= 2 && GemHits >= 4
358 Int_t nHitsPerSilicon = 0;
359 Int_t nHitsPerGem = 0;
360
361 for (BmnHit* hit : hits) {
362 if (hit->GetZ() < borderSilGem)
363 nHitsPerSilicon++;
364 else
365 nHitsPerGem++;
366 }
367
368 if (nHitsPerSilicon < fNHitsSilicon || nHitsPerGem < fNHitsGem)
369 continue;
370
371 // 1. Selecting tracks assumed to be from Vp ...
372 Double_t x = Vp->GetX();
373 Double_t y = Vp->GetY();
374 Double_t z = Vp->GetZ();
375
376 // Updating track params. for all hits connected to the track ...
377 FairTrackParam* first = track->GetParamFirst();
378 FairTrackParam* last = track->GetParamLast();
379
380 FairTrackParam par = *first;
381 for (BmnHit* hit : hits) {
382 BmnStatus status = fKalman->TGeoTrackPropagate(&par, hit->GetZ(), last->GetQp() > 0. ? 2212 : -211,
383 nullptr, nullptr, kTRUE);
384 if (status == kBMNERROR)
385 continue;
386
387 Double_t chi2 = 0.;
388 fKalman->Update(&par, hit, chi2);
389 }
390
391 // Going to the VpZ with the updated params ...
392 BmnStatus status =
393 fKalman->TGeoTrackPropagate(&par, z, last->GetQp() > 0. ? 2212 : -211, nullptr, nullptr, kTRUE);
394 if (status == kBMNERROR)
395 continue;
396
397 Double_t xPredictedAtVp = par.GetX();
398 Double_t yPredictedAtVp = par.GetY();
399
400 const Double_t distCut = 2.; // FIXME!!!
401 Double_t distXY =
402 TMath::Sqrt((xPredictedAtVp - x) * (xPredictedAtVp - x) + (yPredictedAtVp - y) * (yPredictedAtVp - y));
403
404 if (distXY > distCut)
405 continue;
406
407 FairTrackParam parPredicted = *track->GetParamFirst();
408 pair<FairTrackParam, FairTrackParam> trackParams = make_pair(parPredicted, *track->GetParamLast());
409
410 // 3. Array to store info on hits per SILICON and GEM part of tracker
411 Bool_t hitsPerStation[nHitsMax];
412 for (Int_t iHit = 0; iHit < nHitsMax; iHit++)
413 hitsPerStation[iHit] = kFALSE;
414
415 // 4. Collecting hits found on the track in one array ...
416 for (BmnHit* hit : hits) {
417 TString det = GetDetector(hit);
418 Int_t shift = (det.Contains("GEM")) ? silicon->GetNStations() : 0;
419
420 Int_t stat = hit->GetStation();
421 hitsPerStation[stat + shift] = kTRUE;
422 }
423
424 inputForEfficiency input;
425 // Setting for GEM ...
426 input.hits = hits;
427
428 vector<Bool_t> v;
429 v.assign(hitsPerStation, hitsPerStation + nHitsMax);
430 input.usedStats = v;
431
432 input.sfIndices.first = silicon->GetNStations();
433 input.sfIndices.second = nHitsMax;
434
435 input.flParams = trackParams;
436 input.eContainers = effGem;
437
438 input.gPairMap = gYr;
439 input.sPairMap = sYr;
440
441 fillEfficiency(std::move(input));
442
443 inputForEfficiency input1;
444 input1 =
445 std::move(input); // Right now input becomes not fully valid since is in unspecified state !!! ...
446
447 input1.det = "SILICON";
448 input1.sfIndices.first = 0;
449 input1.sfIndices.second = silicon->GetNStations();
450 input1.eContainers = effSilicon;
451
452 fillEfficiency(std::move(input1));
453 }
454 }
455}
456
458 vector<BmnHit*> hits,
459 pair<FairTrackParam, FairTrackParam> params,
460 pair<Double_t, Double_t>& xyPred)
461{
462 // Averaged Z by all modules for station ... ???
463 Double_t Z = FindZ(iHit);
464
465 vector<BmnHit*> hitsBeforeCurrentZ;
466
467 for (BmnHit* hit : hits) {
468 Double_t zHit = hit->GetZ();
469
470 if (zHit > Z)
471 continue;
472
473 hitsBeforeCurrentZ.push_back(hit);
474 }
475
476 for (BmnHit* hit : hitsBeforeCurrentZ) {
477 BmnStatus status = fKalman->TGeoTrackPropagate(
478 &(params.first), hit->GetZ(), params.second.GetQp() > 0. ? 2212 : -211, nullptr, nullptr, kTRUE);
479 if (status == kBMNERROR)
480 continue;
481
482 Double_t chi2 = 0.;
483 fKalman->Update(&(params.first), hit, chi2);
484 }
485
486 BmnStatus status = fKalman->TGeoTrackPropagate(&(params.first), Z, params.second.GetQp() > 0. ? 2212 : -211,
487 nullptr, nullptr, kTRUE);
488 if (status == kBMNERROR)
489 return kFALSE;
490
491 Int_t mod0 = -1;
492 Double_t xPred = params.first.GetX();
493 Double_t yPred = params.first.GetY();
494
495 xyPred.first = xPred;
496 xyPred.second = yPred;
497
498 for (auto it : fStatAcceptance) {
499 Int_t stat = it.first.first;
500 Int_t mod = it.first.second;
501
502 Double_t xMin = it.second[0];
503 Double_t xMax = it.second[1];
504 Double_t yMin = it.second[2];
505 Double_t yMax = it.second[3];
506
507 if (xPred > xMin && xPred < xMax && yPred > yMin && yPred < yMax && (stat == iHit)) {
508 mod0 = mod;
509 break;
510 }
511 }
512
513 return (mod0 > -1) ? kTRUE : kFALSE;
514}
515
517{
518 const Int_t hitCut = (input.det.Contains("GEM") ? input.nGemCut : input.nSilCut);
519 const Int_t shift = (input.det.Contains("GEM") ? -silicon->GetNStations() : 0);
520
521 // Getting nHits per detector ...
522 Int_t nHitsPerDetector = 0;
523
524 auto itBegin = input.usedStats.begin();
525 auto itEnd = input.usedStats.end();
526 auto itMiddle = next(input.usedStats.begin(), silicon->GetNStations());
527
528 if (input.det.Contains("SILICON"))
529 for (auto it = itBegin; it < itMiddle; it++) {
530 if (*it)
531 nHitsPerDetector++;
532 }
533 else
534 for (auto it = itMiddle; it != itEnd; it++) {
535 if (*it)
536 nHitsPerDetector++;
537 }
538
539 if (!nHitsPerDetector)
540 return;
541
542 for (Int_t iHit = input.sfIndices.first; iHit < input.sfIndices.second; iHit++) {
543 // Skipping tracks with four hits having a hit in considering station ...
544 if (nHitsPerDetector == hitCut && input.usedStats.at(iHit))
545 continue;
546
547 if (input.usedStats.at(iHit) && nHitsPerDetector != hitCut) {
548 // Trying to get required hit ...
549 BmnHit* hit0 = nullptr;
550
551 Int_t stat = -1;
552 for (BmnHit* hit : input.hits) {
553 if (!GetDetector(hit).Contains(input.det.Data()))
554 continue;
555 stat = hit->GetStation();
556
557 if (stat == (iHit + shift)) {
558 hit0 = hit;
559 break;
560 }
561 }
562
563 if (hit0) {
564 Int_t eCont = -1;
565 for (Int_t iCont = 0; iCont < input.eContainers->GetEntriesFast(); iCont++) {
566 EffStore2D* effCont = (EffStore2D*)input.eContainers->UncheckedAt(iCont);
567
568 if (effCont->Detector() == input.det && effCont->Station() == (iHit + shift)) {
569 eCont = iCont;
570 break;
571 }
572 }
573
574 if (eCont > -1) {
575 EffStore2D* eff = (EffStore2D*)input.eContainers->UncheckedAt(eCont);
576 eff->efficiency(((input.flParams.second.GetQp() > 0.) ? 0 : 1), "", input.det)
577 ->Fill(kTRUE, hit0->GetX(), hit0->GetY());
578
579 if (input.det.Contains("SILICON"))
580 eff->efficiency(((input.flParams.second.GetQp() > 0.) ? 0 : 1), "xP", input.det)
581 ->Fill(kTRUE, hit0->GetX(), TMath::Abs(1. / input.flParams.first.GetQp()));
582
583 Int_t yBin =
584 FindBin(hit0->GetY(), stat, ((input.det.Contains("GEM")) ? input.gPairMap : input.sPairMap));
585 if (yBin != -1)
586 eff->efficiency4range(yBin, ((input.flParams.second.GetQp() > 0.) ? 0 : 1), input.det)
587 ->Fill(kTRUE, hit0->GetX());
588 }
589 }
590 } else {
591 pair<Double_t, Double_t> xyPred;
592
593 if (isVirtualHitInAcceptance(iHit, input.hits, input.flParams, xyPred)) {
594 Int_t yBin = FindBin(xyPred.second, iHit + shift,
595 ((input.det.Contains("GEM")) ? input.gPairMap : input.sPairMap));
596 if (yBin == -1)
597 continue;
598
599 Int_t eCont = -1;
600 for (Int_t iCont = 0; iCont < input.eContainers->GetEntriesFast(); iCont++) {
601 EffStore2D* effCont = (EffStore2D*)input.eContainers->UncheckedAt(iCont);
602
603 if (effCont->Detector() == input.det && effCont->Station() == (iHit + shift)) {
604 eCont = iCont;
605 break;
606 }
607 }
608
609 if (eCont > -1) {
610 EffStore2D* eff = (EffStore2D*)input.eContainers->UncheckedAt(eCont);
611 eff->efficiency(((input.flParams.second.GetQp() > 0.) ? 0 : 1), "", input.det)
612 ->Fill(kFALSE, xyPred.first, xyPred.second);
613
614 if (input.det.Contains("SILICON"))
615 eff->efficiency(((input.flParams.second.GetQp() > 0.) ? 0 : 1), "xP", input.det)
616 ->Fill(kFALSE, xyPred.first, TMath::Abs(1. / input.flParams.first.GetQp()));
617
618 eff->efficiency4range(yBin, ((input.flParams.second.GetQp() > 0.) ? 0 : 1), input.det)
619 ->Fill(kFALSE, xyPred.first);
620 }
621 }
622 }
623 }
624}
625
627{
628 TString zone = "";
629
630 if (hit->GetZ() < gem->GetStation(0)->GetZPosition() - 5.)
631 return zone;
632
633 Int_t stat = hit->GetStation();
634 Int_t mod = hit->GetModule();
635
636 Double_t x = hit->GetX();
637 Double_t y = hit->GetY();
638
639 const Int_t nLayers = gem->GetStation(stat)->GetModule(mod)->GetNStripLayers();
640 Bool_t isHitInside[nLayers];
641
642 for (Int_t iLayer = 0; iLayer < nLayers; iLayer++) {
643 BmnGemStripLayer layer = gem->GetStation(stat)->GetModule(mod)->GetStripLayer(iLayer);
644 isHitInside[iLayer] = layer.IsPointInsideStripLayer(-x, y);
645 }
646
647 if (isHitInside[0] && isHitInside[1])
648 zone = "big";
649 else if (isHitInside[2] && isHitInside[3])
650 zone = "hot";
651
652 return zone;
653}
__m128 v
Definition P4_F32vec4.h:1
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
R__EXTERN TStyle * gStyle
BmnStatus
Define status code.
Definition BmnEnums.h:93
@ kBMNERROR
Error.
Definition BmnEnums.h:95
void fillEfficiency(inputForEfficiency &&in)
BmnKalmanFilter * fKalman
BmnNewFieldMap * fMagField
TClonesArray * fInnerHits
void Efficiency(TClonesArray *, TClonesArray *effSilicon, map< Int_t, vector< pair< Double_t, Double_t > > >, map< Int_t, vector< pair< Double_t, Double_t > > >)
BmnGemStripStationSet * gem
TClonesArray * fSiliconTracks
map< pair< Int_t, Int_t >, Double_t > fStatZ
TString GetDetector(BmnHit *hit)
BmnSiliconStationSet * silicon
TClonesArray * fGemTracks
TClonesArray * fVertices
Double_t FindZ(Int_t stat)
DstEventHeader * fHeader
FairField * fField
TClonesArray * fGemHits
Int_t FindBin(Double_t y, Int_t stat, map< Int_t, vector< pair< Double_t, Double_t > > > pairMap)
TClonesArray * fSiliconHits
void FillAcceptanceMaps(TClonesArray *, TClonesArray *SILs=nullptr)
TChain * dstChain
map< pair< Int_t, Int_t >, vector< Double_t > > fStatAcceptance
TString GetGemZone(BmnHit *)
Bool_t isVirtualHitInAcceptance(Int_t, vector< BmnHit * >, pair< FairTrackParam, FairTrackParam >, pair< Double_t, Double_t > &)
TClonesArray * fGlobTracks
Bool_t IsPointInsideStripLayer(Double_t x, Double_t y)
BmnGlobalTrack.h.
Int_t GetGemTrackIndex() const
Accessors.
Int_t GetModule()
Definition BmnHit.h:36
Short_t GetStation() const
Definition BmnHit.h:35
BmnGemStripStationSet * GetGemGeometry()
BmnSiliconStationSet * GetSiliconGeometry()
Field Map does not have any symmetries w.r.t coordinate axises.
FairTrackParam * GetParamFirst()
Definition BmnTrack.h:63
Int_t GetNHits() const
Accessors.
Definition BmnTrack.h:49
Int_t GetHitIndex(Int_t iHit) const
Definition BmnTrack.h:51
Double_t GetP()
Definition BmnTrack.h:67
FairTrackParam * GetParamLast()
Definition BmnTrack.h:65
Int_t GetNTracks() const
Definition BmnVertex.h:60
Double_t GetX() const
Accessors.
Definition BmnVertex.h:55
Double_t GetZ() const
Definition BmnVertex.h:57
Double_t GetY() const
Definition BmnVertex.h:56
TEfficiency * efficiency(Int_t qpBin=0, TString hType="", TString det="GEM")
TEfficiency * efficiency4range(Int_t range, Int_t qpBin=0, TString det="GEM")
Int_t Station()
TString Detector()
void Fill(Bool_t bPassed, Double_t x, Double_t y=0, Double_t z=0)
Int_t GetEntriesFast() const
TObject * UncheckedAt(Int_t i) const
friend friend class TClonesArray
const char * Data() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Double_t Z() const
Double_t Y() const
Double_t X() const
UniRun.h Class for the table: run_.
Definition UniRun.h:21
static UniRun * GetRun(int period_number, int run_number)
get run from the database
Definition UniRun.cxx:161
double * GetFieldVoltage()
get field voltage of the current run
Definition UniRun.h:121
map< Int_t, vector< pair< Double_t, Double_t > > > sPairMap
pair< Int_t, Int_t > sfIndices
vector< Bool_t > usedStats
pair< FairTrackParam, FairTrackParam > flParams
vector< BmnHit * > hits
map< Int_t, vector< pair< Double_t, Double_t > > > gPairMap
TClonesArray * eContainers
Double_t Sqrt(Double_t x)
Double_t Abs(Double_t d)