BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
drawMatchingEffSRC.C
Go to the documentation of this file.
1
2R__ADD_INCLUDE_PATH($VMCWORKDIR)
3#include "macro/run/bmnloadlibs.C"
4
5const Int_t nBins = 20;
6const Int_t nBinsXY = 50;
7
8const Double_t resBoard = 3;
9
10TH1F* hAllNoCSC = new TH1F("hAllNoCSC", "; Rigidity [GeV/(Qc)]; N", nBins, 0, 15);
11TH1F* hAllYesCSC = new TH1F("hAllYesCSC", "; Rigidity [GeV/(Qc)]; N", nBins, 0, 15);
12TH1F* hEffCSC = new TH1F("hEffCSC", "; Rigidity [GeV/(Qc)]; Efficiency", nBins, 0, 15);
13TH1F* hResXCSC = new TH1F("hResXCSC", "; X Residual [cm]; N", 100, -resBoard, resBoard);
14TH1F* hResYCSC = new TH1F("hResYCSC", "; Y Residual [cm]; N", 100, -resBoard, resBoard);
15TH1F* hPullXCSC = new TH1F("hPullXCSC", "; X Pull; N", 100, -resBoard, resBoard);
16TH1F* hPullYCSC = new TH1F("hPullYCSC", "; Y Pull; N", 100, -resBoard, resBoard);
17TH2F* hAllNoCSCXY = new TH2F("hAllNoCSCXY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
18TH2F* hAllYesCSCXY = new TH2F("hAllYesCSCXY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
19TH2F* hEffCSCXY = new TH2F("hEffCSCXY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
20
21TH1F* hAllNoDCH1 = new TH1F("hAllNoDCH1", "; Rigidity [GeV/(Qc)]; N", nBins, 0, 15);
22TH1F* hAllYesDCH1 = new TH1F("hAllYesDCH1", "; Rigidity [GeV/(Qc)]; N", nBins, 0, 15);
23TH1F* hEffDCH1 = new TH1F("hEffDCH1", "; Rigidity [GeV/(Qc)]; Efficiency", nBins, 0, 15);
24TH1F* hResXDCH1 = new TH1F("hResXDCH1", "; X Residual [cm]; N", 100, -resBoard, resBoard);
25TH1F* hResYDCH1 = new TH1F("hResYDCH1", "; Y Residual [cm]; N", 100, -resBoard, resBoard);
26TH1F* hPullXDCH1 = new TH1F("hPullXDCH1", "; X Pull; N", 100, -resBoard, resBoard);
27TH1F* hPullYDCH1 = new TH1F("hPullYDCH1", "; Y Pull; N", 100, -resBoard, resBoard);
28TH2F* hAllNoDCH1XY = new TH2F("hAllNoDCH1XY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
29TH2F* hAllYesDCH1XY = new TH2F("hAllYesDCH1XY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
30TH2F* hEffDCH1XY = new TH2F("hEffDCH1XY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
31
32TH1F* hAllNoTOF700 = new TH1F("hAllNoTOF700", "; Rigidity [GeV/(Qc)]; N", nBins, 0, 15);
33TH1F* hAllYesTOF700 = new TH1F("hAllYesTOF700", "; Rigidity [GeV/(Qc)]; N", nBins, 0, 15);
34TH1F* hEffTOF700 = new TH1F("hEffTOF700", "; Rigidity [GeV/(Qc)]; Efficiency", nBins, 0, 15);
35TH1F* hResXTOF700 = new TH1F("hResXTOF700", "; X Residual [cm]; N", 100, -resBoard, resBoard);
36TH1F* hResYTOF700 = new TH1F("hResYTOF700", "; Y Residual [cm]; N", 100, -resBoard, resBoard);
37TH1F* hPullXTOF700 = new TH1F("hPullXTOF700", "; X Pull; N", 100, -resBoard, resBoard);
38TH1F* hPullYTOF700 = new TH1F("hPullYTOF700", "; Y Pull; N", 100, -resBoard, resBoard);
39TH2F* hAllNoTOF700XY = new TH2F("hAllNoTOF700XY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
40TH2F* hAllYesTOF700XY = new TH2F("hAllYesTOF700XY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
41TH2F* hEffTOF700XY = new TH2F("hEffTOF700XY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
42
43TH1F* hAllNoDCH2 = new TH1F("hAllNoDCH2", "; Rigidity [GeV/(Qc)]; N", nBins, 0, 15);
44TH1F* hAllYesDCH2 = new TH1F("hAllYesDCH2", "; Rigidity [GeV/(Qc)]; N", nBins, 0, 15);
45TH1F* hEffDCH2 = new TH1F("hEffDCH2", "; Rigidity [GeV/(Qc)]; Efficiency", nBins, 0, 15);
46TH1F* hResXDCH2 = new TH1F("hResXDCH2", "; X Residual [cm]; N", 100, -resBoard, resBoard);
47TH1F* hResYDCH2 = new TH1F("hResYDCH2", "; Y Residual [cm]; N", 100, -resBoard, resBoard);
48TH1F* hPullXDCH2 = new TH1F("hPullXDCH2", "; X Pull; N", 100, -resBoard, resBoard);
49TH1F* hPullYDCH2 = new TH1F("hPullYDCH2", "; Y Pull; N", 100, -resBoard, resBoard);
50TH2F* hAllNoDCH2XY = new TH2F("hAllNoDCH2XY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
51TH2F* hAllYesDCH2XY = new TH2F("hAllYesDCH2XY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
52TH2F* hEffDCH2XY = new TH2F("hEffDCH2XY", "; X [cm]; Y [cm]", nBinsXY, -20, 100, nBinsXY, -60, 60);
53
54BmnHit* MatchDetector(FairTrackParam* par, TClonesArray* hits, Bool_t doUpdate, Int_t detNum);
55void AnalizeFile(TString fileName);
56
58{
59 gStyle->SetOptStat(0);
60 gStyle->SetFitFormat("5.3f");
61 gStyle->SetOptFit(0010);
62
63 TGeoManager::Import("../run/current_geo_file.root");
64 FairRunAna* fRunAna = new FairRunAna();
65 BmnFieldMap* magField = new BmnNewFieldMap("field_sp41v4_ascii_Extrap.root");
66 magField->SetScale(108.1 / 55.7);
67 fRunAna->SetField(magField);
68 magField->Init();
69
70 vector<TString> listOfFiles;
71 // listOfFiles.push_back("../run/srcdst_3581.root");
72 // listOfFiles.push_back("../run/srcdst_3582.root");
73 // listOfFiles.push_back("../run/srcdst_3583.root");
74 // listOfFiles.push_back("../run/srcdst_3584.root");
75 // listOfFiles.push_back("../run/srcdst_3587.root");
76 // listOfFiles.push_back("../run/srcdst_3588.root");
77 listOfFiles.push_back("../run/srcdst_3387.root");
78
79 vector<TH1F*> listOfHistoEff = {hEffCSC, hEffDCH1, hEffTOF700, hEffDCH2};
80 vector<TH1F*> listOfHistoWithDet = {hAllYesCSC, hAllYesDCH1, hAllYesTOF700, hAllYesDCH2};
81 vector<TH1F*> listOfHistoWithoutDet = {hAllNoCSC, hAllNoDCH1, hAllNoTOF700, hAllNoDCH2};
82 vector<TH1F*> listOfHistoResX = {hResXCSC, hResXDCH1, hResXTOF700, hResXDCH2};
83 vector<TH1F*> listOfHistoResY = {hResYCSC, hResYDCH1, hResYTOF700, hResYDCH2};
84 vector<TH1F*> listOfHistoPullX = {hPullXCSC, hPullXDCH1, hPullXTOF700, hPullXDCH2};
85 vector<TH1F*> listOfHistoPullY = {hPullYCSC, hPullYDCH1, hPullYTOF700, hPullYDCH2};
86 vector<TH2F*> listOfHistoEffXY = {hEffCSCXY, hEffDCH1XY, hEffTOF700XY, hEffDCH2XY};
87 vector<TH2F*> listOfHistoWithDetXY = {hAllYesCSCXY, hAllYesDCH1XY, hAllYesTOF700XY, hAllYesDCH2XY};
88 vector<TH2F*> listOfHistoWithoutDetXY = {hAllNoCSCXY, hAllNoDCH1XY, hAllNoTOF700XY, hAllNoDCH2XY};
89
90 const Int_t nDet = 4;
91 const Int_t nFiles = listOfFiles.size();
92 TString namesDet[nDet] = {"CSC", "DCH1", "TOF-700", "DCH2"};
93
94 for (Int_t i = 0; i < nFiles; ++i)
95 AnalizeFile(listOfFiles.at(i));
96
97 for (Int_t i = 0; i < nDet; ++i) {
98 listOfHistoWithoutDet[i]->Sumw2();
99 listOfHistoWithDet[i]->Sumw2();
100 listOfHistoEff[i]->Divide(listOfHistoWithDet[i], listOfHistoWithoutDet[i]);
101 listOfHistoEff[i]->Scale(100);
102 listOfHistoEff[i]->SetMaximum(110);
103 listOfHistoEff[i]->SetMinimum(0);
104 listOfHistoWithoutDetXY[i]->Sumw2();
105 listOfHistoWithDetXY[i]->Sumw2();
106 listOfHistoEffXY[i]->Divide(listOfHistoWithDetXY[i], listOfHistoWithoutDetXY[i]);
107 }
108
109 TLatex ltx;
110 ltx.SetTextSize(0.08);
111 TCanvas* cMomWithoutDet = new TCanvas("cMomWithoutDet", "cMomWithoutDet", 1000, 1000);
112 cMomWithoutDet->Divide(2, 2, 0, 0);
113 TCanvas* cMomWithDet = new TCanvas("cMomWithDet", "cMomWithDet", 1000, 1000);
114 cMomWithDet->Divide(2, 2, 0, 0);
115 TCanvas* cEff = new TCanvas("eff", "eff", 1000, 1000);
116 cEff->Divide(2, 2, 0, 0);
117 TCanvas* cEffXY = new TCanvas("effXY", "effXY", 1000, 1000);
118 cEffXY->Divide(2, 2);
119 TCanvas* cRes = new TCanvas("cRes", "cRes", 2000, 1000);
120 cRes->Divide(4, 2);
121 TCanvas* cPull = new TCanvas("cPull", "cPull", 2000, 1000);
122 cPull->Divide(4, 2);
123 for (Int_t i = 0; i < nDet; ++i) {
124 cMomWithoutDet->cd(i + 1);
125 listOfHistoWithoutDet[i]->SetMarkerStyle(19);
126 listOfHistoWithoutDet[i]->SetMarkerSize(1.2);
127 listOfHistoWithoutDet[i]->SetLineColor(1);
128 listOfHistoWithoutDet[i]->Draw("X0 E1 P");
129 cMomWithDet->cd(i + 1)->SetGrid(0, 0);
130 listOfHistoWithDet[i]->SetMarkerStyle(19);
131 listOfHistoWithDet[i]->SetMarkerSize(1.2);
132 listOfHistoWithDet[i]->SetLineColor(1);
133 listOfHistoWithDet[i]->Draw("X0 E1 P");
134 cEff->cd(i + 1)->SetGrid(0, 0);
135 listOfHistoEff[i]->SetMarkerStyle(19);
136 listOfHistoEff[i]->SetMarkerSize(1.2);
137 listOfHistoEff[i]->SetLineColor(1);
138 listOfHistoEff[i]->Draw("X0 E1 P");
139 ltx.DrawLatex(2, 10, namesDet[i]);
140 cRes->cd(i + 1)->SetGrid(0, 0);
141 listOfHistoResX[i]->Fit("gaus", "WWQ");
142 listOfHistoResX[i]->Draw();
143 ltx.DrawLatex(-1, 0, namesDet[i]);
144 cRes->cd(i + 1 + nDet)->SetGrid(0, 0);
145 listOfHistoResY[i]->Fit("gaus", "WWQ");
146 listOfHistoResY[i]->Draw();
147 ltx.DrawLatex(-1, 0, namesDet[i]);
148 cPull->cd(i + 1)->SetGrid(0, 0);
149 listOfHistoPullX[i]->Fit("gaus", "WWQ");
150 listOfHistoPullX[i]->Draw();
151 ltx.DrawLatex(-1, 0, namesDet[i]);
152 cPull->cd(i + 1 + nDet)->SetGrid(0, 0);
153 listOfHistoPullY[i]->Fit("gaus", "WWQ");
154 listOfHistoPullY[i]->Draw();
155 ltx.DrawLatex(-1, 0, namesDet[i]);
156 cEffXY->cd(i + 1)->SetGrid(0, 0);
157 listOfHistoEffXY[i]->Draw("colz");
158 }
159
160 cMomWithoutDet->SaveAs("matchingMomWithoutSRC.pdf");
161 cMomWithDet->SaveAs("matchingMomWithSRC.pdf");
162 cEff->SaveAs("matchingEffSRC.pdf");
163 cEffXY->SaveAs("matchingEffSRCXY.pdf");
164 cRes->SaveAs("matchingResSRC.pdf");
165 cPull->SaveAs("matchingPullSRC.pdf");
166}
167
168void AnalizeFile(TString fileName)
169{
170 TChain* out = new TChain("bmndata");
171 out->Add(fileName.Data());
172 cout << "File processed: " << fileName << endl;
173 cout << "Number of recorded entries = " << out->GetEntries() << endl;
174
175 TClonesArray* gemTracks = nullptr;
176 out->SetBranchAddress("BmnGemTrack", &gemTracks);
177 TClonesArray* dchHits = nullptr;
178 out->SetBranchAddress("BmnDchHit", &dchHits);
179 TClonesArray* cscHits = nullptr;
180 out->SetBranchAddress("BmnCSCHit", &cscHits);
181 TClonesArray* tof700Hits = nullptr;
182 out->SetBranchAddress("BmnTof700Hit", &tof700Hits);
183
184 Double_t dX = -1000.0;
185 Double_t dY = -1000.0;
186
187 for (Int_t iEv = 0; iEv < out->GetEntries(); iEv++) {
188 out->GetEntry(iEv);
189 if (iEv % 10000 == 0)
190 printf("event: %d\n", iEv);
191 // cout << "N GEM tracks = " << gemTracks->GetEntriesFast() << endl;
192 for (Int_t iTrack = 0; iTrack < gemTracks->GetEntriesFast(); iTrack++) {
193 BmnGemTrack* track = (BmnGemTrack*)gemTracks->At(iTrack);
194
195 // CSC
196 FairTrackParam parLastCSC(*(track->GetParamLast()));
197 if (MatchDetector(&parLastCSC, dchHits, kTRUE, 0) != nullptr)
198 if (MatchDetector(&parLastCSC, tof700Hits, kFALSE, -1) != nullptr)
199 if (MatchDetector(&parLastCSC, dchHits, kTRUE, 1) != nullptr) {
200 BmnHit* hit = MatchDetector(&parLastCSC, cscHits, kFALSE, 0);
201 hAllNoCSC->Fill(1.0 / parLastCSC.GetQp());
202 hAllNoCSCXY->Fill(parLastCSC.GetX(), parLastCSC.GetY());
203 if (hit != nullptr) {
204 hAllYesCSC->Fill(1.0 / parLastCSC.GetQp());
205 hAllYesCSCXY->Fill(parLastCSC.GetX(), parLastCSC.GetY());
206 hResXCSC->Fill(parLastCSC.GetX() - hit->GetX());
207 hResYCSC->Fill(parLastCSC.GetY() - hit->GetY());
208 hPullXCSC->Fill((parLastCSC.GetX() - hit->GetX()) / hit->GetDx());
209 hPullYCSC->Fill((parLastCSC.GetY() - hit->GetY()) / hit->GetDy());
210 }
211 }
212
213 // DCH1
214 FairTrackParam parLastDCH1(*(track->GetParamLast()));
215 if (MatchDetector(&parLastDCH1, cscHits, kTRUE, 0) != nullptr)
216 if (MatchDetector(&parLastDCH1, tof700Hits, kFALSE, -1) != nullptr)
217 if (MatchDetector(&parLastDCH1, dchHits, kTRUE, 1) != nullptr) {
218 BmnHit* hit = MatchDetector(&parLastDCH1, dchHits, kFALSE, 0);
219 hAllNoDCH1->Fill(1.0 / parLastDCH1.GetQp());
220 hAllNoDCH1XY->Fill(parLastDCH1.GetX(), parLastDCH1.GetY());
221 if (hit != nullptr) {
222 hAllYesDCH1->Fill(1.0 / parLastDCH1.GetQp());
223 hAllYesDCH1XY->Fill(parLastDCH1.GetX(), parLastDCH1.GetY());
224 hResXDCH1->Fill(parLastDCH1.GetX() - hit->GetX());
225 hResYDCH1->Fill(parLastDCH1.GetY() - hit->GetY());
226 hPullXDCH1->Fill((parLastDCH1.GetX() - hit->GetX()) / hit->GetDx());
227 hPullYDCH1->Fill((parLastDCH1.GetY() - hit->GetY()) / hit->GetDy());
228 }
229 }
230
231 // TOF700
232 FairTrackParam parLastTOF700(*(track->GetParamLast()));
233 if (MatchDetector(&parLastTOF700, cscHits, kTRUE, 0) != nullptr)
234 if (MatchDetector(&parLastTOF700, dchHits, kTRUE, 0) != nullptr)
235 if (MatchDetector(&parLastTOF700, dchHits, kTRUE, 1) != nullptr) {
236 BmnHit* hit = MatchDetector(&parLastTOF700, tof700Hits, kFALSE, -1);
237 hAllNoTOF700->Fill(1.0 / parLastTOF700.GetQp());
238 hAllNoTOF700XY->Fill(parLastTOF700.GetX(), parLastTOF700.GetY());
239 if (hit != nullptr) {
240 hAllYesTOF700->Fill(1.0 / parLastTOF700.GetQp());
241 hAllYesTOF700XY->Fill(parLastTOF700.GetX(), parLastTOF700.GetY());
242 hResXTOF700->Fill(parLastTOF700.GetX() - hit->GetX());
243 hResYTOF700->Fill(parLastTOF700.GetY() - hit->GetY());
244 hPullXTOF700->Fill((parLastTOF700.GetX() - hit->GetX()) / hit->GetDx());
245 hPullYTOF700->Fill((parLastTOF700.GetY() - hit->GetY()) / hit->GetDy());
246 }
247 }
248
249 // DCH2
250 FairTrackParam parLastDCH2(*(track->GetParamLast()));
251 if (MatchDetector(&parLastDCH2, cscHits, kTRUE, 0) != nullptr)
252 if (MatchDetector(&parLastDCH2, dchHits, kTRUE, 0) != nullptr)
253 if (MatchDetector(&parLastDCH2, tof700Hits, kFALSE, -1) != nullptr) {
254 BmnHit* hit = MatchDetector(&parLastDCH2, dchHits, kFALSE, 1);
255 hAllNoDCH2->Fill(1.0 / parLastDCH2.GetQp());
256 hAllNoDCH2XY->Fill(parLastDCH2.GetX(), parLastDCH2.GetY());
257 if (hit != nullptr) {
258 hAllYesDCH2->Fill(1.0 / parLastDCH2.GetQp());
259 hAllYesDCH2XY->Fill(parLastDCH2.GetX(), parLastDCH2.GetY());
260 hResXDCH2->Fill(parLastDCH2.GetX() - hit->GetX());
261 hResYDCH2->Fill(parLastDCH2.GetY() - hit->GetY());
262 hPullXDCH2->Fill((parLastDCH2.GetX() - hit->GetX()) / hit->GetDx());
263 hPullYDCH2->Fill((parLastDCH2.GetY() - hit->GetY()) / hit->GetDy());
264 }
265 }
266 }
267 }
268 delete out;
269}
270
271// BmnHit* MatchDetector(FairTrackParam* par, TClonesArray* hits, Bool_t doUpdate, Int_t detNum, Double_t& ResX,
272// Double_t& ResY) {
273// //Int_t detNum - need for DCH
274
275// Double_t minDX = DBL_MAX;
276// Double_t minDY = DBL_MAX;
277// BmnHit* minHit = nullptr;
278// Double_t xCut = 2.0;
279// Double_t yCut = 2.0;
280
281// BmnKalmanFilter* kalman = new BmnKalmanFilter();
282// Double_t minZ = DBL_MAX;
283// for (Int_t iHit = 0; iHit < hits->GetEntriesFast(); ++iHit) {
284// BmnHit* hit = (BmnHit*)hits->At(iHit);
285// if (!hit) continue;
286// if (hit->GetStation() != detNum) continue;
287// if (hit->GetZ() < minZ) minZ = hit->GetZ();
288// }
289// kalman->TGeoTrackPropagate(par, minZ, 2212, NULL, NULL, kTRUE);
290
291// for (Int_t iHit = 0; iHit < hits->GetEntriesFast(); ++iHit) {
292// BmnHit* hit = (BmnHit*)hits->At(iHit);
293// if (!hit) continue;
294// if (hit->GetStation() != detNum) continue;
295// kalman->TGeoTrackPropagate(par, hit->GetZ(), 2212, NULL, NULL, kTRUE);
296// Double_t dX = par->GetX() - hit->GetX();
297// Double_t dY = par->GetY() - hit->GetY();
298// if (Abs(dX) < xCut && Abs(dY) < yCut && Abs(dX) < minDX && Abs(dY) < minDY) {
299// minHit = hit;
300// minDX = dX;
301// minDY = dY;
302// }
303// }
304
305// if (minHit) {
306// ResX = minDX;
307// ResY = minDY;
308// if (doUpdate) {
309// Double_t chi = 0;
310// kalman->Update(par, minHit, chi);
311// }
312// }
313// delete kalman;
314// return minHit;
315// }
316
317BmnHit* MatchDetector(FairTrackParam* parTrack, TClonesArray* hits, Bool_t doUpdate, Int_t detNum)
318{
319 // Int_t detNum - need for DCH
320
321 FairTrackParam minPar;
322 Double_t minDX = DBL_MAX;
323 Double_t minDY = DBL_MAX;
324 BmnHit* minHit = nullptr;
325 Double_t xCut = 5.0;
326 Double_t yCut = 5.0;
327 Int_t pdg = 2212;
328
329 Double_t minZ = DBL_MAX;
330 BmnKalmanFilter* kalman = new BmnKalmanFilter();
331
332 map<Double_t, FairTrackParam> zParamMap;
333 for (Int_t iHit = 0; iHit < hits->GetEntriesFast(); ++iHit) {
334 BmnHit* hit = (BmnHit*)hits->At(iHit);
335 if (!hit)
336 continue;
337 if (hit->GetStation() != detNum)
338 continue;
339 minZ = Min(minZ, hit->GetZ());
340 zParamMap[hit->GetZ()] = FairTrackParam();
341 }
342 FairTrackParam par(*parTrack);
343 kalman->TGeoTrackPropagate(&par, minZ, pdg, NULL, NULL, kTRUE);
344
345 for (map<Double_t, FairTrackParam>::iterator it = zParamMap.begin(); it != zParamMap.end(); ++it) {
346 (*it).second = par;
347 kalman->TGeoTrackPropagate(&(*it).second, (*it).first, pdg, NULL, NULL, kTRUE);
348 }
349
350 for (Int_t iHit = 0; iHit < hits->GetEntriesFast(); ++iHit) {
351 BmnHit* hit = (BmnHit*)hits->At(iHit);
352 if (!hit)
353 continue;
354 if (hit->GetStation() != detNum)
355 continue;
356 if (zParamMap.find(hit->GetZ()) == zParamMap.end()) {
357 std::cout << "-E- CbmLitNearestHitTofMerger::DoMerge: Z position " << hit->GetZ()
358 << " not found in map. Something is wrong.\n";
359 }
360 FairTrackParam tpar(zParamMap[hit->GetZ()]);
361 Double_t dX = tpar.GetX() - hit->GetX();
362 Double_t dY = tpar.GetY() - hit->GetY();
363 if (Abs(dX) < xCut && Abs(dY) < yCut && Abs(dX) < minDX && Abs(dY) < minDY) {
364 minHit = hit;
365 minDX = dX;
366 minDY = dY;
367 minPar = tpar;
368 }
369 }
370
371 *(parTrack) = par;
372
373 if (minHit) {
374 *(parTrack) = minPar;
375 if (doUpdate) {
376 Double_t chi = 0;
377 kalman->Update(parTrack, minHit, chi);
378 }
379 }
380 delete kalman;
381
382 return minHit;
383}
int i
Definition P4_F32vec4.h:22
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
#define R__ADD_INCLUDE_PATH(PATH)
R__EXTERN TStyle * gStyle
void SetScale(Double_t factor)
Set a global field scaling factor.
Definition BmnFieldMap.h:55
virtual void Init()
Short_t GetStation() const
Definition BmnHit.h:35
BmnStatus TGeoTrackPropagate(FairTrackParam *par, Double_t zOut, Int_t pdg, vector< Double_t > *F, Double_t *length, Bool_t isField)
BmnStatus Update(FairTrackParam *par, const BmnHit *hit, Double_t &chiSq)
Field Map does not have any symmetries w.r.t coordinate axises.
FairTrackParam * GetParamLast()
Definition BmnTrack.h:65
virtual void SetLineColor(Color_t lcolor)
virtual void SetTextSize(Float_t tsize=1)
TVirtualPad * cd(Int_t subpadnumber=0) override
Int_t SetBranchAddress(const char *bname, T **add, TBranch **ptr=nullptr)
virtual Int_t Add(const char *name, Long64_t nentries=TTree::kMaxEntries)
Long64_t GetEntries() const override
Int_t GetEntry(Long64_t entry=0, Int_t getall=0) override
static TGeoManager * Import(const char *filename, const char *name="", Option_t *option="")
TLatex * DrawLatex(Double_t x, Double_t y, const char *text)
Int_t GetEntriesFast() const
TObject * At(Int_t idx) const override
void Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0) override
void SaveAs(const char *filename="", Option_t *option="") const override
const char * Data() const
virtual void SetGrid(Int_t valuex=1, Int_t valuey=1)=0
TH1F * hAllNoTOF700
void drawMatchingEffSRC()
TH1F * hAllYesDCH1
BmnHit * MatchDetector(FairTrackParam *par, TClonesArray *hits, Bool_t doUpdate, Int_t detNum)
TH2F * hAllNoDCH1XY
TH2F * hAllYesTOF700XY
TH2F * hAllYesCSCXY
TH2F * hEffDCH2XY
TH1F * hResXDCH2
const Int_t nBins
TH1F * hPullXTOF700
TH2F * hEffDCH1XY
TH1F * hResXCSC
const Double_t resBoard
TH1F * hResYTOF700
TH2F * hAllNoDCH2XY
TH1F * hPullXCSC
TH1F * hEffDCH2
TH1F * hPullYTOF700
TH1F * hResYDCH1
TH1F * hAllNoCSC
TH1F * hEffTOF700
TH1F * hAllYesDCH2
TH1F * hPullXDCH1
TH1F * hEffDCH1
TH1F * hAllYesCSC
TH2F * hEffTOF700XY
TH2F * hAllNoTOF700XY
const Int_t nBinsXY
TH2F * hAllYesDCH2XY
TH1F * hPullXDCH2
TH1F * hEffCSC
TH1F * hResXTOF700
TH1F * hPullYCSC
TH1F * hResXDCH1
TH2F * hEffCSCXY
TH1F * hPullYDCH1
TH1F * hAllNoDCH2
TH1F * hResYDCH2
TH1F * hResYCSC
TH1F * hPullYDCH2
TH2F * hAllYesDCH1XY
TH2F * hAllNoCSCXY
TH1F * hAllYesTOF700
void AnalizeFile(TString fileName)
TH1F * hAllNoDCH1