FairRoot/PandaRoot
PndLmdQATask.cxx
Go to the documentation of this file.
1 //-----------------------------------------------------------
2 //
3 // Description:
4 // Task to generate and store some useful histograms
5 //
6 // Author List:
7 // Anastasia Karavdina
8 // Mathias Michel
9 //
10 //-----------------------------------------------------------
11 
12 // This Class' Header ------------------
13 #include "PndLmdQATask.h"
14 
15 // C/C++ Headers ----------------------
16 #include <iostream>
17 
18 // Collaborating Class Headers --------
19 #include "FairRootManager.h"
20 #include "TClonesArray.h"
21 #include "PndLinTrack.h"
22 #include "TrackData/PndTrackCand.h"
23 #include "PndSdsHit.h"
24 #include "PndSdsMCPoint.h"
26 #include "PndTrack.h"
27 #include "PndSdsClusterPixel.h"
28 #include "PndSdsDigiPixel.h"
29 #include "TFile.h"
30 #include "TLorentzVector.h"
31 #include "FairTrackParH.h"
32 #include "PndMCTrack.h"
33 #include <TMath.h>
34 #include <TVector3.h>
35 #include <TRandom2.h>
36 //#include <TStyle.h>
37 //#include <TCanvas.h>
38 #include <TPolyLine3D.h>
39 #include <Math/Vector3D.h>
40 #include "TH2D.h"
41 #include "TH1D.h"
42 #include "TH2F.h"
43 #include "TH1F.h"
44 #include "TCanvas.h"
45 using namespace ROOT::Math;
46 using namespace std;
47 
48 PndLmdQATask::PndLmdQATask(TString mcHitBranch, TString mcTrkBranch, TString clusterBranch, TString digiBrunch, TString hitBranch, TString trkCandBranch,TString trackBranch, TString geaneBranch, TString outFile)
49  : FairTask("Histogram creator")
50 {
51  fmcHitName=mcHitBranch;
52  fmcTrkName=mcTrkBranch;
53  fHitName=hitBranch;
54  fClusterName = clusterBranch;
55  fDigiName = digiBrunch;
56  fTrkCandName = trkCandBranch;
57  fTrkName=trackBranch;
58  fGeaneName=geaneBranch;
60  fEvent=0;
61  verboseLevel=false;
62  // fPlab = Plab;
63 }
64 
66 {
67  // cout<<"start... PndLmdQATask::~PndLmdQATask()"<<endl;
68  // delete hResMom;
69  // delete hErrMom;
70  // delete hPullMom;
71  // delete hResTheta;
72  // delete hErrTheta;
73  // delete hPullTheta;
74  // delete hResPhi;
75  // delete hErrPhi;
76  // delete hPullPhi;
77 
78  // delete hResPointPx;
79  // delete hErrPointPx;
80  // delete hPullPointPx;
81 
82  // delete hResPointPy;
83  // delete hErrPointPy;
84  // delete hPullPointPy;
85 
86  // delete hResPointPz;
87  // delete hErrPointPz;
88  // delete hPullPointPz;
89 
90  // delete hResPointX;
91  // delete hPullPointX;
92  // delete hResPointY;
93  // delete hPullPointY;
94  // delete hResPointZ;
95  // delete hPullPointZ;
96 
97  // delete hhits;
98  // delete hchi2;
99  // delete hResLumiTrkMom;
100  // delete hResLumiTrkTheta;
101  // delete hResLumiTrkPhi;
102  // delete hResLumiTrkPointX;
103  // delete hResLumiTrkPointY;
104  // delete hResLumiTrkPointZ;
105 
106  // delete hResLumiTrkPointPx;
107  // delete hResLumiTrkPointPy;
108  // delete hResLumiTrkPointPz;
109 
110  // delete hResLumiTrkPointXErr;
111  // delete hResLumiTrkPointYErr;
112  // delete hResLumiTrkPointZErr;
113  // delete hResLumiTrkPointPxErr;
114  // delete hResLumiTrkPointPyErr;
115  // delete hResLumiTrkPointPzErr;
116 
117  // delete hResLumiTrkPointXPull;
118  // delete hResLumiTrkPointYPull;
119  // delete hResLumiTrkPointZPull;
120 
121  // delete hResLumiTrkPointPxPull;
122  // delete hResLumiTrkPointPyPull;
123  // delete hResLumiTrkPointPzPull;
124  // delete hResLumiTrkThetaPull;
125  // delete hResLumiTrkPhiPull;
126 
127  cout<<"PndLmdQATask::~PndLmdQATask().. finished"<<endl;
128 }
129 
131 
132  // //Write histos
133  TFile *f = new TFile(foutFile,"RECREATE");
134  f->Print();
135 
136  //OutputResolutionAndPulls Directory
137  f->mkdir("NearIP");
138  f->cd("NearIP");
139 
140  hResMom->Write();
141  // hErrMom->Write();
142  // hPullMom->Write();
143  hResTheta->Write();
144  hResTheta_th->Write();
145  hResTheta_ph->Write();
146  hErrTheta->Write();
147  hPullTheta->Write();
148  hResPhi->Write();
149  hErrPhi->Write();
150  hPullPhi->Write();
151 
152  hResPointPx->Write();
153  hErrPointPx->Write();
154  hPullPointPx->Write();
155 
156  hResPointPy->Write();
157  hErrPointPy->Write();
158  hPullPointPy->Write();
159 
160  hResPointPz->Write();
161  hErrPointPz->Write();
162  hPullPointPz->Write();
163 
164  hResPointX->Write();
165  hPullPointX->Write();
166  hResPointY->Write();
167  hPullPointY->Write();
168  hResPointZ->Write();
169  hPullPointZ->Write();
170  f->cd();
171 
172  f->mkdir("NearLMD");
173  f->cd("NearLMD");
174  //Near 1st LMD plane
175  hResHitX->Write();
176  hResHitY->Write();
177  hResHitZ->Write();
178  hchi2->Write();
179  hhits->Write();
180  hResLumiTrkMom->Write();
181  hResLumiTrkTheta->Write();
182 
183  hResLumiTrkTheta2D->Write();
184  hMCLumiTrkTheta2D->Write();
185  hRecLumiTrkTheta2D->Write();
186 
187  hResLumiTrkPhi->Write();
188  hResLumiTrkPointX->Write();
189  hResLumiTrkPointY->Write();
190  hResLumiTrkPointZ->Write();
191 
192  hResLumiTrkPointPx->Write();
193  hResLumiTrkPointPy->Write();
194  hResLumiTrkPointPz->Write();
195  hResLumiTrkPointXErr->Write();
196  hResLumiTrkPointYErr->Write();
197  hResLumiTrkPointZErr->Write();
198  hResLumiTrkPointPxErr->Write();
199  hResLumiTrkPointPyErr->Write();
200  hResLumiTrkPointPzErr->Write();
201 
202  hResLumiTrkPointXPull->Write();
203  hResLumiTrkPointYPull->Write();
204  hResLumiTrkPointZPull->Write();
205 
206  hResLumiTrkPointPxPull->Write();
207  hResLumiTrkPointPyPull->Write();
208  hResLumiTrkPointPzPull->Write();
209  hResLumiTrkThetaPull->Write();
210  hResLumiTrkPhiPull->Write();
211  f->cd();
212 
213  //RecoReso Directory
214  f->mkdir("Pulls");
215  f->cd("Pulls");
216 
217  TCanvas *c1 = new TCanvas("pulls_before_bp");
218  c1->Divide(3,2);
219  c1->cd(1);
220  hResLumiTrkPointXPull->Draw();
221  c1->cd(2);
222  hResLumiTrkPointYPull->Draw();
223  c1->cd(3);
224  hResLumiTrkPointZPull->Draw();
225  c1->cd(4);
226  hResLumiTrkPointPxPull->Draw();
227  c1->cd(5);
228  hResLumiTrkPointPyPull->Draw();
229  c1->cd(6);
230  hResLumiTrkPointPzPull->Draw();
231  c1->Write();
232  c1->Close();
233 
234  TCanvas *c2 = new TCanvas("pulls_after_bp");
235  c2->Divide(3,2);
236  c2->cd(1);
237  hPullPointX->Draw();
238  c2->cd(2);
239  hPullPointY->Draw();
240  c2->cd(3);
241  hPullPointZ->Draw();
242  c2->cd(4);
243  hPullPointPx->Draw();
244  c2->cd(5);
245  hPullPointPy->Draw();
246  c2->cd(6);
247  hPullPointPz->Draw();
248  c2->Write();
249  c2->Close();
250  // f->cd();
251 
252 // f->mkdir("QA_cand");
253 // f->cd("QA_cand");
254 // TCanvas *c3 = new TCanvas("QA_candidates_PCA_zMC");
255 // c3->Divide(3,3);
256 // c3->cd(1);
257 // hXrecZmc->Draw("colz");
258 // c3->cd(2);
259 // hYrecZmc->Draw("colz");
260 // c3->cd(3);
261 // hZrecZmc->Draw("colz");
262 // c3->cd(4);
263 // herrXrecZmc->Draw("colz");
264 // c3->cd(5);
265 // herrYrecZmc->Draw("colz");
266 // c3->cd(6);
267 // herrZrecZmc->Draw("colz");
268 // c3->cd(7);
269 // hPullLikeX_Zmc->Draw("colz");
270 // c3->cd(8);
271 // hPullLikeY_Zmc->Draw("colz");
272 // c3->cd(9);
273 // hPullLikeZ_Zmc->Draw("colz");
274 // c3->Write();
275 // c3->Close();
276 
277 // TCanvas *c4 = new TCanvas("QA_candidates_dir_zMC");
278 // c4->Divide(3,3);
279 // c4->cd(1);
280 // hThrecZmc->Draw("colz");
281 // c4->cd(2);
282 // hPhrecZmc->Draw("colz");
283 // c4->cd(3);
284 // hPrecZmc->Draw("colz");
285 // c4->cd(4);
286 // herrThrecZmc->Draw("colz");
287 // c4->cd(5);
288 // herrPhrecZmc->Draw("colz");
289 // c4->cd(6);
290 // herrPrecZmc->Draw("colz");
291 // c4->cd(7);
292 // hPullLikeTh_Zmc->Draw("colz");
293 // c4->cd(8);
294 // hPullLikePh_Zmc->Draw("colz");
295 // c4->cd(9);
296 // hPullLikeP_Zmc->Draw("colz");
297 // c4->Write();
298 // c4->Close();
299 
300 // TCanvas *c5 = new TCanvas("QA_resolution_vs_zMC");
301 // c5->Divide(3,2);
302 // c5->cd(1);
303 // hResXrecZmc->Draw("colz");
304 // c5->cd(2);
305 // hResYrecZmc->Draw("colz");
306 // c5->cd(3);
307 // hResZrecZmc->Draw("colz");
308 // c5->cd(4);
309 // hResThrecZmc->Draw("colz");
310 // c5->cd(5);
311 // hResPhrecZmc->Draw("colz");
312 // c5->cd(6);
313 // hResPrecZmc->Draw("colz");
314 // c5->Write();
315 // c5->Close();
316 
317 // /////////////////////////
318 // TCanvas *c31 = new TCanvas("QA_candidates_PCA_xMC");
319 // c31->Divide(3,3);
320 // c31->cd(1);
321 // hXrecXmc->Draw("colz");
322 // c31->cd(2);
323 // hYrecXmc->Draw("colz");
324 // c31->cd(3);
325 // hZrecXmc->Draw("colz");
326 // c31->cd(4);
327 // herrXrecXmc->Draw("colz");
328 // c31->cd(5);
329 // herrYrecXmc->Draw("colz");
330 // c31->cd(6);
331 // herrZrecXmc->Draw("colz");
332 // c31->cd(7);
333 // hPullLikeX_Xmc->Draw("colz");
334 // c31->cd(8);
335 // hPullLikeY_Xmc->Draw("colz");
336 // c31->cd(9);
337 // hPullLikeZ_Xmc->Draw("colz");
338 // c31->Write();
339 // c31->Close();
340 
341 // TCanvas *c41 = new TCanvas("QA_candidates_dir_xMC");
342 // c41->Divide(3,3);
343 // c41->cd(1);
344 // hThrecXmc->Draw("colz");
345 // c41->cd(2);
346 // hPhrecXmc->Draw("colz");
347 // c41->cd(3);
348 // hPrecXmc->Draw("colz");
349 // c41->cd(4);
350 // herrThrecXmc->Draw("colz");
351 // c41->cd(5);
352 // herrPhrecXmc->Draw("colz");
353 // c41->cd(6);
354 // herrPrecXmc->Draw("colz");
355 // c41->cd(7);
356 // hPullLikeTh_Xmc->Draw("colz");
357 // c41->cd(8);
358 // hPullLikePh_Xmc->Draw("colz");
359 // c41->cd(9);
360 // hPullLikeP_Xmc->Draw("colz");
361 // c41->Write();
362 // c41->Close();
363 
364 // TCanvas *c51 = new TCanvas("QA_resolution_vs_xMC");
365 // c51->Divide(3,2);
366 // c51->cd(1);
367 // hResXrecXmc->Draw("colz");
368 // c51->cd(2);
369 // hResYrecXmc->Draw("colz");
370 // c51->cd(3);
371 // hResZrecXmc->Draw("colz");
372 // c51->cd(4);
373 // hResThrecXmc->Draw("colz");
374 // c51->cd(5);
375 // hResPhrecXmc->Draw("colz");
376 // c51->cd(6);
377 // hResPrecXmc->Draw("colz");
378 // c51->Write();
379 // c51->Close();
380 
381 
382 // /////////////////////////
383 // TCanvas *c32 = new TCanvas("QA_candidates_PCA_yMC");
384 // c32->Divide(3,3);
385 // c32->cd(1);
386 // hXrecYmc->Draw("colz");
387 // c32->cd(2);
388 // hYrecYmc->Draw("colz");
389 // c32->cd(3);
390 // hZrecYmc->Draw("colz");
391 // c32->cd(4);
392 // herrXrecYmc->Draw("colz");
393 // c32->cd(5);
394 // herrYrecYmc->Draw("colz");
395 // c32->cd(6);
396 // herrZrecYmc->Draw("colz");
397 // c32->cd(7);
398 // hPullLikeX_Ymc->Draw("colz");
399 // c32->cd(8);
400 // hPullLikeY_Ymc->Draw("colz");
401 // c32->cd(9);
402 // hPullLikeZ_Ymc->Draw("colz");
403 // c32->Write();
404 // c32->Close();
405 
406 // TCanvas *c42 = new TCanvas("QA_candidates_dir_yMC");
407 // c42->Divide(3,3);
408 // c42->cd(1);
409 // hThrecYmc->Draw("colz");
410 // c42->cd(2);
411 // hPhrecYmc->Draw("colz");
412 // c42->cd(3);
413 // hPrecYmc->Draw("colz");
414 // c42->cd(4);
415 // herrThrecYmc->Draw("colz");
416 // c42->cd(5);
417 // herrPhrecYmc->Draw("colz");
418 // c42->cd(6);
419 // herrPrecYmc->Draw("colz");
420 // c42->cd(7);
421 // hPullLikeTh_Ymc->Draw("colz");
422 // c42->cd(8);
423 // hPullLikePh_Ymc->Draw("colz");
424 // c42->cd(9);
425 // hPullLikeP_Ymc->Draw("colz");
426 // c42->Write();
427 // c42->Close();
428 
429 // TCanvas *c52 = new TCanvas("QA_resolution_vs_yMC");
430 // c52->Divide(3,2);
431 // c52->cd(1);
432 // hResXrecYmc->Draw("colz");
433 // c52->cd(2);
434 // hResYrecYmc->Draw("colz");
435 // c52->cd(3);
436 // hResZrecYmc->Draw("colz");
437 // c52->cd(4);
438 // hResThrecYmc->Draw("colz");
439 // c52->cd(5);
440 // hResPhrecYmc->Draw("colz");
441 // c52->cd(6);
442 // hResPrecYmc->Draw("colz");
443 // c52->Write();
444 // c52->Close();
445 
446 
447 // hPullLikePointX->Write();
448 // hPullLikePointY->Write();
449 // hPullLikePointZ->Write();
450 // hPullLikeX_Zmc->Write();
451 // hPullLikeY_Zmc->Write();
452 // hPullLikeZ_Zmc->Write();
453 // hPullLikeTh_Zmc->Write();
454 // hPullLikePh_Zmc->Write();
455 // hPullLikeP_Zmc->Write();
456 // hXrecZmc->Write();
457 // hYrecZmc->Write();
458 // hZrecZmc->Write();
459 // hThrecZmc->Write();
460 // hPhrecZmc->Write();
461 // hPrecZmc->Write();
462 // hResXrecZmc->Write();
463 // hResYrecZmc->Write();
464 // hResZrecZmc->Write();
465 // hResThrecZmc->Write();
466 // hResPhrecZmc->Write();
467 // hResPrecZmc->Write();
468 // herrXrecZmc->Write();
469 // herrYrecZmc->Write();
470 // herrZrecZmc->Write();
471 // herrThrecZmc->Write();
472 // herrPhrecZmc->Write();
473 // herrPrecZmc->Write();
474 
475 // hPullLikeX_Xmc->Write();
476 // hPullLikeY_Xmc->Write();
477 // hPullLikeZ_Xmc->Write();
478 // hPullLikeTh_Xmc->Write();
479 // hPullLikePh_Xmc->Write();
480 // hPullLikeP_Xmc->Write();
481 // hXrecXmc->Write();
482 // hYrecXmc->Write();
483 // hZrecXmc->Write();
484 // hThrecXmc->Write();
485 // hPhrecXmc->Write();
486 // hPrecXmc->Write();
487 // hResXrecXmc->Write();
488 // hResYrecXmc->Write();
489 // hResZrecXmc->Write();
490 // hResThrecXmc->Write();
491 // hResPhrecXmc->Write();
492 // hResPrecXmc->Write();
493 // herrXrecXmc->Write();
494 // herrYrecXmc->Write();
495 // herrZrecXmc->Write();
496 // herrThrecXmc->Write();
497 // herrPhrecXmc->Write();
498 // herrPrecXmc->Write();
499 
500 // hPullLikeX_Ymc->Write();
501 // hPullLikeY_Ymc->Write();
502 // hPullLikeZ_Ymc->Write();
503 // hPullLikeTh_Ymc->Write();
504 // hPullLikePh_Ymc->Write();
505 // hPullLikeP_Ymc->Write();
506 // hXrecYmc->Write();
507 // hYrecYmc->Write();
508 // hZrecYmc->Write();
509 // hThrecYmc->Write();
510 // hPhrecYmc->Write();
511 // hPrecYmc->Write();
512 // hResXrecYmc->Write();
513 // hResYrecYmc->Write();
514 // hResZrecYmc->Write();
515 // hResThrecYmc->Write();
516 // hResPhrecYmc->Write();
517 // hResPrecYmc->Write();
518 // herrXrecYmc->Write();
519 // herrYrecYmc->Write();
520 // herrZrecYmc->Write();
521 // herrThrecYmc->Write();
522 // herrPhrecYmc->Write();
523 // herrPrecYmc->Write();
524 
525 // f->cd();
526  f->Write();
527  f->Close();
528  std::cout<<"PndLmdQATask::WriteHists() Finished successfull"<<std::endl;
529 }
530 
532 {
533  // cout<<"PndLmdQATask::FinishTask()"<<endl;
534 
535  cout<<"Number of missed tracks is "<<mistrk<<" and number of ghost tracks is "<<ghosttrk<<endl;
536  WriteHists();
537 
538  //clean up stuff
539  // delete c1;
540  // delete c2;
541 
542 }
543 
544 InitStatus PndLmdQATask::Init()
545 {
546  tot = 0;
547  all=0; uneff=0; mistrk=0; ghosttrk=0;
548 
549  // fouthists = new TFile(foutFile,"RECREATE");
550 
551  //Get ROOT Manager
552  FairRootManager* ioman= FairRootManager::Instance();
553 
554  if(ioman==0)
555  {
556  Error("PndLmdQATask::Init","RootManager not instantiated!");
557  return kERROR;
558  }
559 
560  // Get input collection
561  fmcHitArray=(TClonesArray*) ioman->GetObject(fmcHitName);
562  if(fmcHitArray==0)
563  {
564  Error("PndLmdQATask::Init","mcHit-array not found!");
565  return kERROR;
566  }
567 
568  fHitArray=(TClonesArray*) ioman->GetObject(fHitName);
569  if(fHitArray==0)
570  {
571  Error("PndLmdQATask::Init","hit-array not found!");
572  return kERROR;
573  }
574 
575  fTrkArray=(TClonesArray*) ioman->GetObject(fTrkName);
576  if(fTrkArray==0)
577  {
578  Error("PndLmdQATask::Init","track-array not found!");
579  return kERROR;
580  }
581 
582  fmcTrkArray=(TClonesArray*) ioman->GetObject(fmcTrkName);
583  if(fmcTrkArray==0)
584  {
585  Error("PndLmdQATask::Init","mcTrk-array not found!");
586  return kERROR;
587  }
588 
589  fGeaneArray=(TClonesArray*) ioman->GetObject(fGeaneName);
590  if(fGeaneArray==0)
591  {
592  Error("PndLmdQATask::Init","geane-array not found!");
593  return kERROR;
594  }
595  fTrkCandArray=(TClonesArray*) ioman->GetObject(fTrkCandName);
596  if(fTrkCandArray==0)
597  {
598  Error("PndLmdQATask::Init","trk-cand--array not found!");
599  return kERROR;
600  }
601  fClusterArray=(TClonesArray*) ioman->GetObject(fClusterName);
602  if(fClusterArray==0)
603  {
604  Error("PndLmdQATask::Init","cluster-array not found!");
605  return kERROR;
606  }
607  fDigiArray=(TClonesArray*) ioman->GetObject(fDigiName);
608  if(fDigiArray==0)
609  {
610  Error("PndLmdQATask::Init","digi-array not found!");
611  return kERROR;
612  }
613  // double thetarange[2]={0.001,0.01};
614  double thetam = 3.;
615  // double thetarange[2]={1.5,10.};
616  // double thetam = thetarange[0];
617  // if(fPlab<4) thetam = thetarange[1];
618  //Near IP
619  hResMom = new TH1F("hResMom","P_{MC}-P_{REC};#deltaP,GeV/c",1e3,-1e-1,1e-1);
620  // hErrMom = new TH1F("hErrMom","#sigma_{P};#sigmaP,GeV/c",1e3,0,1e-3);
621  // hPullMom = new TH1F("hPullMom","(P_{MC}-P_{REC})/#sigma_{P};",1e3,-1e1,1e1);
622  hResTheta = new TH1F("hResTheta","#theta_{MC}-#theta_{REC};#delta#theta,mrad",1e2,-thetam,thetam);//TEST
623  hResTheta_th = new TH2F("hResTheta_th","#theta_{MC}-#theta_{REC};#theta_{MC}, mrad; #delta#theta,mrad",2e2,0,10,6e2,-thetam,thetam);//TEST
624  hResTheta_ph = new TH2F("hResTheta_ph","#theta_{MC}-#theta_{REC};#phi_{MC}, rad; #delta#theta,mrad",2e2,-TMath::Pi(),TMath::Pi(),2e2,-thetam,thetam);//TEST
625  hErrTheta = new TH1F("hErrTheta","#sigma(#theta_{REC});#sigma,rad",1e3,0,10*thetam);
626  hPullTheta = new TH1F("hPullTheta","(#theta_{MC}-#theta_{REC})/#sigma_{#theta};",1e2,-10,10);
627  hResPhi = new TH1F("hResPhi","#phi_{MC}-#phi_{REC};#delta#phi,rad",2e3,-1.,1.);
628  hErrPhi = new TH1F("hErrPhi","#sigma(#phi_{REC});#sigma,rad",1e3,0,0.1);
629  hPullPhi = new TH1F("hPullPhi","(#phi_{MC}-#phi_{REC})/#sigma_{#phi};",1e2,-10,10);
630 
631  hResPointPx = new TH1F("hResPointPx","Px_{MC}-Px_{REC};#deltaPx, GeV/c",1e2,-0.01,0.01);
632  hErrPointPx = new TH1F("hErrPointPx","#sigma_{Px};#sigmaPx, GeV/c",1e3,0,0.001);
633  hPullPointPx = new TH1F("hPullPointPx","(Px_{MC}-Px_{REC})/#sigma_{Px};(Px_{MC}-Px_{REC})/#sigma_{Px}",1e2,-10,10);
634 
635  hResPointPy = new TH1F("hResPointPy","Py_{MC}-Py_{REC};#deltaPy, GeV/c",1e2,-0.01,0.01);
636  hErrPointPy = new TH1F("hErrPointPy","#sigma_{Py};#sigmaPy, GeV/c",1e3,0,0.001);
637  hPullPointPy = new TH1F("hPullPointPy","(Py_{MC}-Py_{REC})/#sigma_{Py};(Py_{MC}-Py_{REC})/#sigma_{Py}",1e2,-10,10);
638 
639  hResPointPz = new TH1F("hResPointPz","Pz_{MC}-Pz_{REC};#deltaPz, GeV/c",1e2,-1e-4,1e-4);
640  hErrPointPz = new TH1F("hErrPointPz","#sigma_{Pz};#sigmaPz, GeV/c",1e3,0,1e-3);
641  hPullPointPz = new TH1F("hPullPointPz","(Pz_{MC}-Pz_{REC})/#sigma_{Pz};(Pz_{MC}-Pz_{REC})/#sigma_{Pz}",1e2,-10,10);
642 
643  hResPointX = new TH1F("hResPointX","X_{MC}-X_{REC};#deltaX,cm",1e2,-2.,2.);
644  hPullPointX = new TH1F("hPullPointX","(X_{MC}-X_{REC})/#sigma_{X};(X_{MC}-X_{REC})/#sigma_{X}",1e2,-10,10);
645  hResPointY = new TH1F("hResPointY","Y_{MC}-Y_{REC};#deltaY,cm",1e2,-2.,2.);
646  hPullPointY = new TH1F("hPullPointY","(Y_{MC}-Y_{REC})/#sigma_{Y};(Y_{MC}-Y_{REC})/#sigma_{Y}",1e2,-10,10);
647  hResPointZ = new TH1F("hResPointZ","Z_{MC}-Z_{REC};#deltaZ,cm",1e3,-0.15,0.15);
648  hPullPointZ = new TH1F("hPullPointZ","(Z_{MC}-Z_{REC})/#sigma_{Z};(Z_{MC}-Z_{REC})/#sigma_{Z}",1e2,-10,10);
649 
650  // //back-propagation QA candidates
651 // hPullLikePointX = new TH1F("hPullLikePointX","X_{REC}/#sigma_{X};X_{REC}/#sigma_{X}",1e2,-10,10);
652 // hPullLikePointY = new TH1F("hPullLikePointY","Y_{REC}/#sigma_{Y};Y_{REC}/#sigma_{Y}",1e2,-10,10);
653 // hPullLikePointZ = new TH1F("hPullLikePointZ","Z_{REC}/#sigma_{Z};Z_{REC}/#sigma_{Z}",1e2,-10,10);
654 // hPullLikeX_Zmc = new TH2D("hPullLikeX_Zmc",";Z_{MC}, cm;X_{REC}/#sigma_{X}",1e3,-60,60,1e3,-10,10);
655 // hPullLikeY_Zmc = new TH2D("hPullLikeY_Zmc",";Z_{MC}, cm;Y_{REC}/#sigma_{Y}",1e3,-60,60,1e2,-10,10);
656 // hPullLikeZ_Zmc = new TH2D("hPullLikeZ_Zmc",";Z_{MC}, cm;Z_{REC}/#sigma_{Z}",1e3,-60,60,1e2,-10,10);
657 // hPullLikeTh_Zmc = new TH2D("hPullLikeTh_Zmc",";Z_{MC}, cm;#theta_{REC}/#sigma_{#theta}",1e3,-60,60,2e3,-1000,1000);
658 // hPullLikePh_Zmc = new TH2D("hPullLikePh_Zmc",";Z_{MC}, cm;#phi_{REC}/#sigma_{#phi}",1e3,-60,60,2e3,-1000,1000);
659 // hPullLikeP_Zmc = new TH2D("hPullLikeP_Zmc",";Z_{MC}, cm;P_{REC}/P_{#phi}",1e3,-60,60,2e3,0,2e4);
660 // hXrecZmc = new TH2D("hXrecZmc","; Z_{MC}, cm; X_{REC}, cm",1e3,-60,60,1e3,-5,5);
661 // hYrecZmc = new TH2D("hYrecZmc","; Z_{MC}, cm; Y_{REC}, cm",1e3,-60,60,1e3,-5,5);
662 // // hZrecZmc = new TH2D("hZrecZmc","; Z_{MC}, cm; Z_{REC}, cm",1e3,-60,60,2e3,-110.,110.); //LINE
663 // hZrecZmc = new TH2D("hZrecZmc","; Z_{MC}, cm; Z_{REC}, cm",1e3,-60,60,2e3,-1.,1.);//PCA
664 // hThrecZmc = new TH2D("hThrecZmc","; Z_{MC}, cm; #theta_{REC}, mrad",1e3,-60,60,1e3,0,20);
665 // hPhrecZmc = new TH2D("hPhrecZmc","; Z_{MC}, cm; #phi_{REC}, rad",1e3,-60,60,1e3,-3.15,3.15);
666 // hPrecZmc = new TH2D("hPrecZmc","; Z_{MC}, cm; P_{REC}, GeV/c",1e3,-60,60,1e3,0,2);
667 // hResXrecZmc = new TH2D("hResXrecZmc","; Z_{MC}, cm; X_{MC}-X_{REC}, cm",3e2,-60,60,1e3,-5,5);
668 // hResYrecZmc = new TH2D("hResYrecZmc","; Z_{MC}, cm; Y_{MC}-Y_{REC}, cm",3e2,-60,60,1e3,-5,5);
669 // hResZrecZmc = new TH2D("hResZrecZmc","; Z_{MC}, cm; Z_{MC}-Z_{REC}, cm",3e2,-60,60,2e3,-200,200);
670 // hResThrecZmc = new TH2D("hResThrecZmc","; Z_{MC}, cm; #theta_{MC}-#theta_{REC}, mrad",3e2,-60,60,1e3,-3,3);
671 // hResPhrecZmc = new TH2D("hResPhrecZmc","; Z_{MC}, cm; #phi_{MC}-#phi_{REC}, rad",3e2,-60,60,1e3,-2.,2.);
672 // hResPrecZmc = new TH2D("hResPrecZmc","; Z_{MC}, cm; P_{MC}-P_{REC}, GeV/c",3e2,-60,60,1e3,-10.,10.);
673 
674 // herrXrecZmc = new TH2D("herrXrecZmc","; Z_{MC}, cm; #sigma(X_{REC}), cm",1e3,-60,60,1e3,0,2);
675 // herrYrecZmc = new TH2D("herrYrecZmc","; Z_{MC}, cm; #sigma(Y_{REC}), cm",1e3,-60,60,1e3,0,2);
676 // herrZrecZmc = new TH2D("herrZrecZmc","; Z_{MC}, cm; #sigma(Z_{REC}), cm",1e3,-60,60,1e3,0,0.1);
677 // herrThrecZmc = new TH2D("herrThrecZmc","; Z_{MC}, cm; #sigma(#theta_{REC}), mrad",1e3,-60,60,1e3,0,2.);
678 // herrPhrecZmc = new TH2D("herrPhrecZmc","; Z_{MC}, cm; #sigma(#phi_{REC}), rad",1e3,-60,60,1e3,0,1.);
679 // herrPrecZmc = new TH2D("herrPrecZmc","; Z_{MC}, cm; #sigma(P_{REC}), GeV/c",1e3,-60,60,1e3,0,0.1);
680 
681 
682 // hPullLikeX_Xmc = new TH2D("hPullLikeX_Xmc",";X_{MC}, cm;X_{REC}/#sigma_{X}",1e3,-2,2,1e3,-10,10);
683 // hPullLikeY_Xmc = new TH2D("hPullLikeY_Xmc",";X_{MC}, cm;Y_{REC}/#sigma_{Y}",1e3,-2,2,1e2,-10,10);
684 // hPullLikeZ_Xmc = new TH2D("hPullLikeZ_Xmc",";X_{MC}, cm;Z_{REC}/#sigma_{Z}",1e3,-2,2,1e2,-10,10);
685 // hPullLikeTh_Xmc = new TH2D("hPullLikeTh_Xmc",";X_{MC}, cm;#theta_{REC}/#sigma_{#theta}",1e3,-2,2,2e3,-1000,1000);
686 // hPullLikePh_Xmc = new TH2D("hPullLikePh_Xmc",";X_{MC}, cm;#phi_{REC}/#sigma_{#phi}",1e3,-2,2,2e3,-1000,1000);
687 // hPullLikeP_Xmc = new TH2D("hPullLikeP_Xmc",";X_{MC}, cm;P_{REC}/P_{#phi}",1e3,-2,2,2e3,0,2e4);
688 // hXrecXmc = new TH2D("hXrecXmc","; X_{MC}, cm; X_{REC}, cm",1e3,-2,2,1e3,-5,5);
689 // hYrecXmc = new TH2D("hYrecXmc","; X_{MC}, cm; Y_{REC}, cm",1e3,-2,2,1e3,-5,5);
690 // // hZrecXmc = new TH2D("hZrecXmc","; X_{MC}, cm; Z_{REC}, cm",1e3,-2,2,2e3,-110.,110.);//LINE
691 // hZrecXmc = new TH2D("hZrecXmc","; X_{MC}, cm; Z_{REC}, cm",1e3,-2,2,2e3,-1.,1.);//PCA
692 // hThrecXmc = new TH2D("hThrecXmc","; X_{MC}, cm; #theta_{REC}, mrad",1e3,-2,2,1e3,0,20);
693 // hPhrecXmc = new TH2D("hPhrecXmc","; X_{MC}, cm; #phi_{REC}, rad",1e3,-2,2,1e3,-3.15,3.15);
694 // hPrecXmc = new TH2D("hPrecXmc","; X_{MC}, cm; P_{REC}, GeV/c",1e3,-2,2,1e3,0,2);
695 // hResXrecXmc = new TH2D("hResXrecXmc","; X_{MC}, cm; X_{MC}-X_{REC}, cm",3e2,-2,2,1e3,-5,5);
696 // hResYrecXmc = new TH2D("hResYrecXmc","; X_{MC}, cm; Y_{MC}-Y_{REC}, cm",3e2,-2,2,1e3,-5,5);
697 // hResZrecXmc = new TH2D("hResZrecXmc","; X_{MC}, cm; Z_{MC}-Z_{REC}, cm",3e2,-2,2,2e3,-200,200);
698 // hResThrecXmc = new TH2D("hResThrecXmc","; X_{MC}, cm; #theta_{MC}-#theta_{REC}, mrad",3e2,-2,2,1e3,-3,3);
699 // hResPhrecXmc = new TH2D("hResPhrecXmc","; X_{MC}, cm; #phi_{MC}-#phi_{REC}, rad",3e2,-2,2,1e3,-2.,2.);
700 // hResPrecXmc = new TH2D("hResPrecXmc","; X_{MC}, cm; P_{MC}-P_{REC}, GeV/c",3e2,-2,2,1e3,-10.,10.);
701 
702 // herrXrecXmc = new TH2D("herrXrecXmc","; X_{MC}, cm; #sigma(X_{REC}), cm",1e3,-2,2,1e3,0,2);
703 // herrYrecXmc = new TH2D("herrYrecXmc","; X_{MC}, cm; #sigma(Y_{REC}), cm",1e3,-2,2,1e3,0,2);
704 // herrZrecXmc = new TH2D("herrZrecXmc","; X_{MC}, cm; #sigma(Z_{REC}), cm",1e3,-2,2,1e3,0,0.1);
705 // herrThrecXmc = new TH2D("herrThrecXmc","; X_{MC}, cm; #sigma(#theta_{REC}), mrad",1e3,-2,2,1e3,0,2.);
706 // herrPhrecXmc = new TH2D("herrPhrecXmc","; X_{MC}, cm; #sigma(#phi_{REC}), rad",1e3,-2,2,1e3,0,1.);
707 // herrPrecXmc = new TH2D("herrPrecXmc","; X_{MC}, cm; #sigma(P_{REC}), GeV/c",1e3,-2,2,1e3,0,0.1);
708 
709 
710 // ////////////
711 
712 // hPullLikeX_Ymc = new TH2D("hPullLikeX_Ymc",";Y_{MC}, cm;X_{REC}/#sigma_{X}",1e3,-2,2,1e3,-10,10);
713 // hPullLikeY_Ymc = new TH2D("hPullLikeY_Ymc",";Y_{MC}, cm;Y_{REC}/#sigma_{Y}",1e3,-2,2,1e2,-10,10);
714 // hPullLikeZ_Ymc = new TH2D("hPullLikeZ_Ymc",";Y_{MC}, cm;Z_{REC}/#sigma_{Z}",1e3,-2,2,1e2,-10,10);
715 // hPullLikeTh_Ymc = new TH2D("hPullLikeTh_Ymc",";Y_{MC}, cm;#theta_{REC}/#sigma_{#theta}",1e3,-2,2,2e3,-1000,1000);
716 // hPullLikePh_Ymc = new TH2D("hPullLikePh_Ymc",";Y_{MC}, cm;#phi_{REC}/#sigma_{#phi}",1e3,-2,2,2e3,-1000,1000);
717 // hPullLikeP_Ymc = new TH2D("hPullLikeP_Ymc",";Y_{MC}, cm;P_{REC}/P_{#phi}",1e3,-2,2,2e3,0,2e4);
718 // hXrecYmc = new TH2D("hXrecYmc","; Y_{MC}, cm; X_{REC}, cm",1e3,-2,2,1e3,-5,5);
719 // hYrecYmc = new TH2D("hYrecYmc","; Y_{MC}, cm; Y_{REC}, cm",1e3,-2,2,1e3,-5,5);
720 // // hZrecYmc = new TH2D("hZrecYmc","; X_{MC}, cm; Z_{REC}, cm",1e3,-2,2,2e3,-110.,110.);//LINE
721 // hZrecYmc = new TH2D("hZrecYmc","; Y_{MC}, cm; Z_{REC}, cm",1e3,-2,2,2e3,-1.,1.);//PCA
722 // hThrecYmc = new TH2D("hThrecYmc","; Y_{MC}, cm; #theta_{REC}, mrad",1e3,-2,2,1e3,0,20);
723 // hPhrecYmc = new TH2D("hPhrecYmc","; Y_{MC}, cm; #phi_{REC}, rad",1e3,-2,2,1e3,-3.15,3.15);
724 // hPrecYmc = new TH2D("hPrecYmc","; Y_{MC}, cm; P_{REC}, GeV/c",1e3,-2,2,1e3,0,2);
725 // hResXrecYmc = new TH2D("hResXrecYmc","; Y_{MC}, cm; X_{MC}-X_{REC}, cm",3e2,-2,2,1e3,-5,5);
726 // hResYrecYmc = new TH2D("hResYrecYmc","; Y_{MC}, cm; Y_{MC}-Y_{REC}, cm",3e2,-2,2,1e3,-5,5);
727 // hResZrecYmc = new TH2D("hResZrecYmc","; Y_{MC}, cm; Z_{MC}-Z_{REC}, cm",3e2,-2,2,2e3,-200,200);
728 // hResThrecYmc = new TH2D("hResThrecYmc","; Y_{MC}, cm; #theta_{MC}-#theta_{REC}, mrad",3e2,-2,2,1e3,-3,3);
729 // hResPhrecYmc = new TH2D("hResPhrecYmc","; Y_{MC}, cm; #phi_{MC}-#phi_{REC}, rad",3e2,-2,2,1e3,-2.,2.);
730 // hResPrecYmc = new TH2D("hResPrecYmc","; Y_{MC}, cm; P_{MC}-P_{REC}, GeV/c",3e2,-2,2,1e3,-10.,10.);
731 
732 // herrXrecYmc = new TH2D("herrXrecYmc","; Y_{MC}, cm; #sigma(X_{REC}), cm",1e3,-2,2,1e3,0,2);
733 // herrYrecYmc = new TH2D("herrYrecYmc","; Y_{MC}, cm; #sigma(Y_{REC}), cm",1e3,-2,2,1e3,0,2);
734 // herrZrecYmc = new TH2D("herrZrecYmc","; Y_{MC}, cm; #sigma(Z_{REC}), cm",1e3,-2,2,1e3,0,0.1);
735 // herrThrecYmc = new TH2D("herrThrecYmc","; Y_{MC}, cm; #sigma(#theta_{REC}), mrad",1e3,-2,2,1e3,0,2.);
736 // herrPhrecYmc = new TH2D("herrPhrecYmc","; Y_{MC}, cm; #sigma(#phi_{REC}), rad",1e3,-2,2,1e3,0,1.);
737 // herrPrecYmc = new TH2D("herrPrecYmc","; Y_{MC}, cm; #sigma(P_{REC}), GeV/c",1e3,-2,2,1e3,0,0.1);
738 
739  //Near 1st LMD plane
740  hhits = new TH1I("hhits","number of hits in trk",7,0,7);
741  hchi2 = new TH1F("hchi2","#chi^2 for reconstructed tracks;#chi^2;",1.5e2,-1,15.);
742  hResLumiTrkMom = new TH1F("hResLumiTrkMom","P_{MC}-P_{REC}(near Lumi);#deltaP,GeV/c",1e3,-6e-7,6e-7);
743  hResLumiTrkTheta = new TH1F("hResLumiTrkTheta","#theta_{MC}-#theta_{REC}(near Lumi);#delta#theta,rad",1e3,-6e-3,6e-3);
744  hResLumiTrkTheta2D = new TH2D("hResLumiTrkTheta2D", ";#Delta#theta_{x}(near Lumi);#Delta#theta_{y},rad", 1e3,-0.0005, 0.0005, 1e3,-0.0005, 0.0005);
745  hMCLumiTrkTheta2D = new TH2D("hMCLumiTrkTheta2D", ";#theta_{x}(MC near Lumi);#theta_{y},rad", 1e3, 0.030, 0.050, 1e3,-0.012, 0.012);
746  hRecLumiTrkTheta2D = new TH2D("hRecLumiTrkTheta2D", ";#theta_{x}(Rec near Lumi);#theta_{y},rad", 1e3, 0.030, 0.050, 1e3,-0.012, 0.012);
747 
748 
749  hResLumiTrkPhi = new TH1F("hResLumiTrkPhi","#phi_{MC}-#phi_{REC}(near Lumi);#delta#phi,rad",2e3,-1e-1,1e-1);
750  hResLumiTrkPointX = new TH1F("hResLumiTrkPointX","X_{MC}-X_{REC}(near Lumi);#deltaX,cm",1e2,-0.02,0.02);
751  hResLumiTrkPointY = new TH1F("hResLumiTrkPointY","Y_{MC}-Y_{REC}(near Lumi);#deltaY,cm",1e2,-0.02,0.02);
752  hResLumiTrkPointZ = new TH1F("hResLumiTrkPointZ","Z_{MC}-Z_{REC}(near Lumi);#deltaZ,cm",1e2,-0.02,0.02);
753 
754  hResLumiTrkPointPx = new TH1F("hResLumiTrkPointPx","Px_{MC}-Px_{REC}(near Lumi);#deltaPx, GeV/c",1e2,-0.01,0.01);
755  hResLumiTrkPointPy = new TH1F("hResLumiTrkPointPy","Py_{MC}-Py_{REC}(near Lumi);#deltaPy, GeV/c",1e2,-0.01,0.01);
756  hResLumiTrkPointPz = new TH1F("hResLumiTrkPointPz","Pz_{MC}-Pz_{REC}(near Lumi);#deltaPz, GeV/c",1e2,-5e-4,5e-4);
757 
758  hResLumiTrkPointXErr = new TH1F("hResLumiTrkPointXErr","#sigma(X_{REC})(near Lumi);#sigma_{X},cm",1e2,0,0.02);
759  hResLumiTrkPointYErr = new TH1F("hResLumiTrkPointYErr","#sigma(Y_{REC})(near Lumi);#sigma_{Y},cm",1e2,0,0.02);
760  hResLumiTrkPointZErr = new TH1F("hResLumiTrkPointZErr","#sigma(Z_{REC})(near Lumi);#sigma_{Z},cm",1e2,0,0.02);
761  hResLumiTrkPointPxErr = new TH1F("hResLumiTrkPointPxErr","#sigma(Px_{REC})(near Lumi);#sigma_{Px}, GeV/c",1e2,0,0.001);
762  hResLumiTrkPointPyErr = new TH1F("hResLumiTrkPointPyErr","#sigma(Py_{REC})(near Lumi);#sigma_{Py}, GeV/c",1e2,0,0.001);
763  hResLumiTrkPointPzErr = new TH1F("hResLumiTrkPointPzErr","#sigma(Pz_{REC})(near Lumi);#sigma_{Pz}, GeV/c",1e2,0,0.0001);
764 
765  hResLumiTrkPointXPull = new TH1F("hResLumiTrkPointXPull","(X_{MC}-X_{REC})/#sigma (near Lumi) ;(X_{MC}-X_{REC})/#sigma",1e2,-10.,10.);
766  hResLumiTrkPointYPull = new TH1F("hResLumiTrkPointYPull","(Y_{MC}-Y_{REC})/#sigma (near Lumi);(Y_{MC}-Y_{REC})/#sigma",1e2,-10.,10.);
767  hResLumiTrkPointZPull = new TH1F("hResLumiTrkPointZPull","(Z_{MC}-Z_{REC})/#sigma (near Lumi);(Z_{MC}-Z_{REC})/#sigma",1e3,-100.,100.);
768 
769  hResLumiTrkPointPxPull = new TH1F("hResLumiTrkPointPxPull","(Px_{MC}-Px_{REC})/#sigma (near Lumi);(Px_{MC}-Px_{REC})/#sigma",1e2,-10,10.);
770  hResLumiTrkPointPyPull = new TH1F("hResLumiTrkPointPyPull","(Py_{MC}-Py_{REC})/#sigma (near Lumi);(Py_{MC}-Py_{REC})/#sigma",1e2,-10,10);
771  hResLumiTrkPointPzPull = new TH1F("hResLumiTrkPointPzPull","(Pz_{MC}-Pz_{REC})/#sigma (near Lumi);(Pz_{MC}-Pz_{REC})/#sigma",1e2,-10,10);
772  hResLumiTrkThetaPull = new TH1F("hResLumiTrkThetaPull","(#theta_{MC}-#theta_{REC})/#sigma (near Lumi);#delta#theta, rad",1e2,-10,10);
773  hResLumiTrkPhiPull = new TH1F("hResLumiTrkPhiPull","(#phi_{MC}-#phi_{REC})/#sigma (near Lumi);#delta#phi, rad",1e2,-10,10);
774 
775 
776  //info about hits
777  hResHitX = new TH1F("hResHitX","X_{MC}-X_{rec};#deltaX,cm",2e3,-0.5,0.5);
778  hResHitY = new TH1F("hResHitY","Y_{MC}-Y_{rec};#deltaY,cm",2e3,-0.5,0.5);
779  hResHitZ = new TH1F("hResHitZ","Z_{MC}-Z_{rec};#deltaZ,cm",2e2,-3e-2,3e-2);
780 
781 
782  std::cout << "-I- PndLmdQATask: Initialisation successfull" << std::endl;
783  return kSUCCESS;
784 }
785 
786 void PndLmdQATask::Exec(Option_t*)
787 {
788 fEvent++;
789  // std::cout<<"PndLmdQATask::Exec"<<std::endl;
790  bool isPr = HitReco();
791  if(isPr) ResoAndPulls();
792 
793  return;
794 }
795 
797 {
798  bool isProblem = true;
799  //const int nMCHits = fmcHitArray->GetEntriesFast(); //[R.K. 01/2017] unused variable
800  const int nRecHits = fHitArray->GetEntriesFast();
801 
802  for (Int_t i=0; i<nRecHits; i++){
803 
804  PndSdsHit* hit = (PndSdsHit*)(fHitArray->At(i));
805  //for pixel design
807  PndSdsDigiPixel* astripdigi = (PndSdsDigiPixel*)(fDigiArray->At(myCluster->GetDigiIndex(0)));
808  if (astripdigi->GetIndex(0) == -1)
809  continue;
810  PndSdsMCPoint* mc = (PndSdsMCPoint*)(fmcHitArray->At(astripdigi->GetIndex(0)));
811  //int MCidTOP = mc->GetTrackID(); //[R.K. 01/2017] unused variable
812  // PndSdsHit *hit = (PndSdsHit*) fHitArray->At(i);
813  // if(hit->GetRefIndex()<0) continue;
814  // PndSdsMCPoint *mc = (PndSdsMCPoint*) fmcHitArray->At(hit->GetRefIndex());
815  // if(!mc) continue;
816 
817  TVector3 recovec(hit->GetX(),hit->GetY(),hit->GetZ());
818  TVector3 mcvec(mc->GetX()+mc->GetXOut(),mc->GetY()+mc->GetYOut(),mc->GetZ()+mc->GetZOut()); mcvec*=0.5;
819 
820  // TVector3 mcvec(mc->GetXOut(),mc->GetYOut(),mc->GetZOut());
821  TVector3 dvec(recovec-mcvec);
822  // if(1e4*(mc->GetZOut()-mc->GetZ())<0)
823  // cout<<"For MCtrk#"<<MCidTOP<<" mc.Z() = "<<0.5*(mc->GetZ()+mc->GetZOut())<<" diff rec- mc [mkm] (x,y,z) = ("<<1e4*dvec.X()<<", "<<1e4*dvec.Y()<<", "<<1e4*dvec.Z()<<")"<<endl;
824 
825  // if(hit->GetZ()<1135.) //Acc of first plane
826  // h2dPnts->Fill(mc->GetX(),mc->GetY()); // = new TH2D("h2dPnts", "xy reconstructed points, cm",2e2,-20.,20., 2e2,-20.,20.);
827 
828 
829  // if(fabs(dvec.X())<2*0.0015 && fabs(dvec.Y())<2*0.0015){
830  // if(1e4*(mc->GetZOut()-mc->GetZ())<0){// secondary!
831  //if(1e4*(mc->GetZOut()-mc->GetZ())>0 && abs(dvec.Z())>0.0100){// primary & merged hits!@15 GeV/c
832  //if(1e4*(mc->GetZOut()-mc->GetZ())>0 && abs(dvec.Z())<0.0100){// primary & not-merged (single) hits!@15 GeV/c
833  if(1e4*(mc->GetZOut()-mc->GetZ())>0){// primary
834  hResHitX->Fill(dvec.X()); // = new TH1F("hResPointX","X_{MC}-X_{rec};#deltaX,cm",2e2,-1.5,1.5);
835  hResHitY->Fill(dvec.Y()); // = new TH1F("hResPointY","Y_{MC}-Y_{rec};#deltaY,cm",2e2,-1.5,1.5);
836  hResHitZ->Fill(dvec.Z()); // = new TH1F("hResPointZ","Z_{MC}-Z_{rec};#deltaZ,cm",2e2,-3e-2,3e-2);
837  isProblem=true;
838  // cout<<"NOW!!!"<<endl;
839  }
840  else
841  isProblem=false;
842  // cout<<"Event #"<<fEvent<<endl;
843 
844  // //TODO
845  // hErrHitX->Fill(0); // = new TH1F("hErrPointX","#sigma_{X};#sigmaX,cm",1e2,0,5e-1);
846  // hErrHitY->Fill(0); // = new TH1F("hErrPointY","#sigma_{Y};#sigmaY,cm",1e2,0,5e-1);
847  // hErrHitZ->Fill(0); // = new TH1F("hErrPointZ","#sigma_{Z};#sigmaZ,cm",1e2,0,5e-3);
848  // hPullHitX->Fill(0); // = new TH1F("hPullPointX","(X_{MC}-X_{rec})/#sigma_{X};",1e2,-10,10);
849  // hPullHitY->Fill(0); // = new TH1F("hPullPointY","(Y_{MC}-Y_{rec})/#sigma_{Y};",1e2,-10,10);
850  // hPullHitZ->Fill(0); // = new TH1F("hPullPointZ","(Z_{MC}-Z_{rec})/#sigma_{Z};",1e2,-10,10);
851 
852  }
853  // //----------------------------------------------------------------------------------
854  return isProblem;
855 }
856 
858 {
859 
860  // Read GEANE & MC info -----------------------------------------------------------------
861  const int nGeaneTrks = fGeaneArray->GetEntriesFast();
862  const int nParticles = fmcTrkArray->GetEntriesFast();
863  //const int nRecHits = fHitArray->GetEntriesFast(); //[R.K. 01/2017] unused variable
864  const int nRecTrks = fTrkArray->GetEntriesFast();
865 
866  if(nGeaneTrks<nParticles)
867  mistrk += nParticles-nGeaneTrks;
868 
869  if(nGeaneTrks>nParticles)
870  ghosttrk += nGeaneTrks-nParticles;
871  if(verboseLevel>0) {
872  if(nParticles!=1)
873  std::cout<<"Hey, QA task is implemented only for 1 trk/event case. In Ev #"<<fEvent-1<<" you have "<<nParticles<<" MC tracks!"<<std::endl;
874  }
875  // if(nParticles!=1) return; //TODO: currently works only 1 trk/event !
876  if(verboseLevel>0)
877  cout<<"# "<< fEvent-1 <<"\t nGeaneTrks="<<nGeaneTrks<<" nParticles="<<nParticles<<" nRecTrks="<<nRecTrks<<endl;
878  //TODO: correct assignment between MC and REC trks
879  // vector<int> missedTrk;
880  // missedTrk.resize(nParticles);
881  // vector<int> ghostTrk;
882  // ghostTrk.resize(nGeaneTrks);
883 
884  for (Int_t iN=0; iN<nGeaneTrks; iN++){// loop over all reconstructed trks
885  FairTrackParH *fRes = (FairTrackParH*)fGeaneArray->At(iN);
886  Double_t lyambda = fRes->GetLambda();
887  if(lyambda==0){
888  cout<<"GEANE didn't propagate this trk!"<<endl;
889  // glBADGEANE++;
890  }
891  if(lyambda==0) continue;
892 
894  TVector3 MomRecPCA = fRes->GetMomentum();
895  // MomRecPCA *= fPlab/MomRecPCA.Mag();
896  TVector3 PosRecPCA = fRes->GetPosition();
897  Double_t errPx = fRes->GetDPx();
898  Double_t errPy = fRes->GetDPy();
899  Double_t errPz = fRes->GetDPz();
900  TVector3 errMomRecPCA(errPx,errPy,errPz);
901  Double_t errX = fRes->GetDX();
902  Double_t errY = fRes->GetDY();
903  Double_t errZ = fRes->GetDZ();
904  TVector3 errPosRecPCA(errX,errY,errZ);
905 
906  //Double_t thetaBP = TMath::Pi()/2. - lyambda; //[R.K. 01/2017] unused variable
907  // Double_t err_lyambda = fRes->GetDLambda();
908  //Double_t phiBP = fRes->GetPhi(); //[R.K. 01/2017] unused variable
909  // Double_t err_phi = fRes->GetDPhi();
910 
911  //calculate theta & phi errors
912  double fLmPCA = TMath::ASin(MomRecPCA.Z()/MomRecPCA.Mag());
913  double cLmPCA= TMath::Cos(fLmPCA);
914  //double sLmPCA= TMath::Sin(fLmPCA); //[R.K. 01/2017] unused variable
915  Double_t fPPCA =sqrt(MomRecPCA.X()*MomRecPCA.X()+MomRecPCA.Y()*MomRecPCA.Y()+MomRecPCA.Z()*MomRecPCA.Z());
916  Double_t fDPPCA= (2*MomRecPCA.X()*errMomRecPCA.X()+2*MomRecPCA.Y()*errMomRecPCA.Y()+2*MomRecPCA.Z()*errMomRecPCA.Z())/(2*fPPCA); //dp
917  Double_t err_lyambda = (-((MomRecPCA.Z()*fDPPCA)/pow(fPPCA,2)) + errMomRecPCA.Z()/fPPCA)/ TMath::Sqrt(1 - pow(MomRecPCA.Z(),2)/pow(fPPCA,2));
918  Double_t err_phi = (-((MomRecPCA.Y()*fDPPCA/cLmPCA)/pow(fPPCA,2)) + (errMomRecPCA.Y()/cLmPCA)/fPPCA +(MomRecPCA.Y()*err_lyambda*TMath::Tan(fLmPCA)/cLmPCA)/fPPCA) /TMath::Sqrt(1 - (pow(MomRecPCA.Y(),2)*pow(1/cLmPCA,2))/pow(fPPCA,2));
919 
920 
921  // Double_t CovGEANELAB[6][6];
922  // fRes->GetMARSCov(CovGEANELAB);
923  // Double_t errMomRecBP = fRes->GetDQp();
924  // ///get rid from most probably ghost track ----------
925  // //TODO: find reason for such trks in Kalman
926  // double pca_lim = 1.;//=10*sigma_Xpca~10*{0.093,0.11,0.12,0.22,0.55};
927  // if(fPlab<5) pca_lim = 2.;
928  // if(fPlab<2) pca_lim = 5.;
929  // if(fabs(PosRecPCA.X())>pca_lim && fabs(PosRecPCA.Y())>pca_lim) continue; // PCA_x and PCA_y should be < 10sigmaX
930  // ///get rid from most probably ghost track (END) ---
931  // ///------------------------------------------------------------------------------------
932 
934  PndTrack *trkpnd = (PndTrack*)fTrkArray->At(iN);
935  double chi2 = trkpnd->GetChi2();
936  hchi2->Fill(chi2);
937  FairTrackParP fFittedTrkP = trkpnd->GetParamFirst();
938  TVector3 PosRecLMD(fFittedTrkP.GetX(),fFittedTrkP.GetY(),fFittedTrkP.GetZ());
939  TVector3 MomRecLMD(fFittedTrkP.GetPx(),fFittedTrkP.GetPy(),fFittedTrkP.GetPz());
940  // MomRecLMD *=fPlab/MomRecLMD.Mag();
941  double covMARS[6][6];
942  fFittedTrkP.GetMARSCov(covMARS);
943  TVector3 errMomRecLMD(sqrt(covMARS[0][0]),sqrt(covMARS[1][1]),sqrt(covMARS[2][2]));
944  TVector3 errPosRecLMD(sqrt(covMARS[3][3]),sqrt(covMARS[4][4]),sqrt(covMARS[5][5]));
945 
946  //calculate theta & phi errors
947  double fLm = TMath::ASin(MomRecLMD.Z()/MomRecLMD.Mag());
948  double cLm= TMath::Cos(fLm);
949  //double sLm= TMath::Sin(fLm); //[R.K. 01/2017] unused variable
950  Double_t fP =sqrt(MomRecLMD.X()*MomRecLMD.X()+MomRecLMD.Y()*MomRecLMD.Y()+MomRecLMD.Z()*MomRecLMD.Z());
951  Double_t fDP= (2*MomRecLMD.X()*errMomRecLMD.X()+2*MomRecLMD.Y()*errMomRecLMD.Y()+2*MomRecLMD.Z()*errMomRecLMD.Z())/(2*fP); //dp
952  Double_t err_lyambdaLMD = (-((MomRecLMD.Z()*fDP)/pow(fP,2)) + errMomRecLMD.Z()/fP)/ TMath::Sqrt(1 - pow(MomRecLMD.Z(),2)/pow(fP,2));
953  Double_t err_phiLMD = (-((MomRecLMD.Y()*fDP/cLm)/pow(fP,2)) + (errMomRecLMD.Y()/cLm)/fP +(MomRecLMD.Y()*err_lyambdaLMD*TMath::Tan(fLm)/cLm)/fP) /TMath::Sqrt(1 - (pow(MomRecLMD.Y(),2)*pow(1/cLm,2))/pow(fP,2));
955 
956 
957 
958  //Matching between MC & Rec on 1st hit level-----------------------------------
959  int candID = trkpnd->GetRefIndex();
960  PndTrackCand *trkcand = (PndTrackCand*)fTrkCandArray->At(candID);
961  const int Ntrkcandhits= trkcand->GetNHits();
962  PndSdsMCPoint* MCPointHit;
963  int MCid;
964  bool hitmix = false;
965  //if(Ntrkcandhits<4) continue; //require trks with hits on all planes
966  // if(Ntrkcandhits>3) continue; //require trks with hits not on all planes
967  hhits->Fill(Ntrkcandhits);
968  for (Int_t iHit = 0; iHit < Ntrkcandhits; iHit++){ // loop over rec.hits
969  PndTrackCandHit candhit = (PndTrackCandHit)(trkcand->GetSortedHit(iHit));
970  Int_t hitID = candhit.GetHitId();
971  PndSdsHit* myHit = (PndSdsHit*)(fHitArray->At(hitID));
972 
973  //for pixel design
975  PndSdsDigiPixel* astripdigi = (PndSdsDigiPixel*)(fDigiArray->At(myCluster->GetDigiIndex(0)));
976  if (astripdigi->GetIndex(0) == -1)
977  continue;
978  PndSdsMCPoint* MCPoint = (PndSdsMCPoint*)(fmcHitArray->At(astripdigi->GetIndex(0)));
979  int MCidTOP = MCPoint->GetTrackID();
980  if(iHit<1){
981  MCPointHit = MCPoint;
982  MCid = MCidTOP;
983  }
984  else
985  if(MCid!=MCidTOP){
986  cout<<"REC trk contains hits from different MC trks! Skip event #"<<fEvent<<endl;
987  hitmix = true;
988  }
989  }
990  if(hitmix) continue;
992 
993 
995  if(MCid<0) continue;
997  PndMCTrack *mctrk =(PndMCTrack*) fmcTrkArray->At(MCid);
998  //Int_t mcID = mctrk->GetPdgCode(); //[R.K. 01/2017] unused variable
999  TVector3 MomMCpca = mctrk->GetMomentum();
1000  TVector3 PosMCpca = mctrk->GetStartVertex();
1001  //Double_t thetaMC = MomMCpca.Theta(); //[R.K. 01/2017] unused variable
1002  //Double_t phiMC = MomMCpca.Phi(); //[R.K. 01/2017] unused variable
1004 
1005  MomRecPCA *= MomMCpca.Mag()/MomRecPCA.Mag();
1006  hResPointPx->Fill(MomMCpca.X()-MomRecPCA.X());
1007  hResPointPy->Fill(MomMCpca.Y()-MomRecPCA.Y());
1008  hResPointPz->Fill(MomMCpca.Z()-MomRecPCA.Z());
1009  hErrPointPx->Fill(errMomRecPCA.X());
1010  hErrPointPy->Fill(errMomRecPCA.Y());
1011  hErrPointPz->Fill(errMomRecPCA.Z());
1012  hPullPointPx->Fill((MomMCpca.X()-MomRecPCA.X())/errMomRecPCA.X());
1013  hPullPointPy->Fill((MomMCpca.Y()-MomRecPCA.Y())/errMomRecPCA.Y());
1014  hPullPointPz->Fill((MomMCpca.Z()-MomRecPCA.Z())/errMomRecPCA.Z());
1015  hResPointX->Fill(PosMCpca.X()-PosRecPCA.X());
1016  hResPointY->Fill(PosMCpca.Y()-PosRecPCA.Y());
1017  hResPointZ->Fill(PosMCpca.Z()-PosRecPCA.Z());
1018  hPullPointX->Fill((PosMCpca.X()-PosRecPCA.X())/errPosRecPCA.X());
1019  hPullPointY->Fill((PosMCpca.Y()-PosRecPCA.Y())/errPosRecPCA.Y());
1020  hPullPointZ->Fill((PosMCpca.Z()-PosRecPCA.Z())/errPosRecPCA.Z());
1021 
1022  // hPullLikePointX->Fill(PosRecPCA.X()/errPosRecPCA.X());
1023  // hPullLikePointY->Fill(PosRecPCA.Y()/errPosRecPCA.Y());
1024  // hPullLikePointZ->Fill(PosRecPCA.Z()/errPosRecPCA.Z());
1025 
1026  // hXrecZmc->Fill(PosMCpca.Z(),PosRecPCA.X());
1027  // hYrecZmc->Fill(PosMCpca.Z(),PosRecPCA.Y());
1028  // hZrecZmc->Fill(PosMCpca.Z(),PosRecPCA.Z());
1029  // hThrecZmc->Fill(PosMCpca.Z(),1e3*MomRecPCA.Theta());
1030  // hPhrecZmc->Fill(PosMCpca.Z(),MomRecPCA.Phi());
1031  // hPrecZmc->Fill(PosMCpca.Z(),MomRecPCA.Mag());
1032 
1033  // hResXrecZmc->Fill(PosMCpca.Z(),PosMCpca.X()-PosRecPCA.X());
1034  // hResYrecZmc->Fill(PosMCpca.Z(),PosMCpca.Y()-PosRecPCA.Y());
1035  // hResZrecZmc->Fill(PosMCpca.Z(),PosMCpca.Z()-PosRecPCA.Z());
1036  // hResThrecZmc->Fill(PosMCpca.Z(),1e3*(MomMCpca.Theta()-MomRecPCA.Theta()));
1037  // hResPhrecZmc->Fill(PosMCpca.Z(),MomMCpca.Phi()-MomRecPCA.Phi());
1038  // hResPrecZmc->Fill(PosMCpca.Z(),MomMCpca.Mag()-MomRecPCA.Mag());
1039 
1040  // herrXrecZmc->Fill(PosMCpca.Z(),errPosRecPCA.X());
1041  // herrYrecZmc->Fill(PosMCpca.Z(),errPosRecPCA.Y());
1042  // herrZrecZmc->Fill(PosMCpca.Z(),errPosRecPCA.Z());
1043  // herrThrecZmc->Fill(PosMCpca.Z(),1e3*err_lyambda);
1044  // herrPhrecZmc->Fill(PosMCpca.Z(),err_phi);
1045  // herrPrecZmc->Fill(PosMCpca.Z(),errMomRecPCA.Mag());
1046 
1047  // hPullLikeX_Zmc->Fill(PosMCpca.Z(),PosRecPCA.X()/errPosRecPCA.X());
1048  // hPullLikeY_Zmc->Fill(PosMCpca.Z(),PosRecPCA.Y()/errPosRecPCA.Y());
1049  // hPullLikeZ_Zmc->Fill(PosMCpca.Z(),PosRecPCA.Z()/errPosRecPCA.Z());
1050  // hPullLikeTh_Zmc->Fill(PosMCpca.Z(),MomRecPCA.Theta()/err_lyambda);
1051  // hPullLikePh_Zmc->Fill(PosMCpca.Z(),MomRecPCA.Phi()/err_phi);
1052  // hPullLikeP_Zmc->Fill(PosMCpca.Z(),MomRecPCA.Mag()/errMomRecPCA.Mag());
1053 
1054 
1055  // hXrecXmc->Fill(PosMCpca.X(),PosRecPCA.X());
1056  // hYrecXmc->Fill(PosMCpca.X(),PosRecPCA.Y());
1057  // hZrecXmc->Fill(PosMCpca.X(),PosRecPCA.Z());
1058  // hThrecXmc->Fill(PosMCpca.X(),1e3*MomRecPCA.Theta());
1059  // hPhrecXmc->Fill(PosMCpca.X(),MomRecPCA.Phi());
1060  // hPrecXmc->Fill(PosMCpca.X(),MomRecPCA.Mag());
1061 
1062  // hResXrecXmc->Fill(PosMCpca.X(),PosMCpca.X()-PosRecPCA.X());
1063  // hResYrecXmc->Fill(PosMCpca.X(),PosMCpca.Y()-PosRecPCA.Y());
1064  // hResZrecXmc->Fill(PosMCpca.X(),PosMCpca.Z()-PosRecPCA.Z());
1065  // hResThrecXmc->Fill(PosMCpca.X(),1e3*(MomMCpca.Theta()-MomRecPCA.Theta()));
1066  // hResPhrecXmc->Fill(PosMCpca.X(),MomMCpca.Phi()-MomRecPCA.Phi());
1067  // hResPrecXmc->Fill(PosMCpca.X(),MomMCpca.Mag()-MomRecPCA.Mag());
1068 
1069  // herrXrecXmc->Fill(PosMCpca.X(),errPosRecPCA.X());
1070  // herrYrecXmc->Fill(PosMCpca.X(),errPosRecPCA.Y());
1071  // herrZrecXmc->Fill(PosMCpca.X(),errPosRecPCA.Z());
1072  // herrThrecXmc->Fill(PosMCpca.X(),1e3*err_lyambda);
1073  // herrPhrecXmc->Fill(PosMCpca.X(),err_phi);
1074  // herrPrecXmc->Fill(PosMCpca.X(),errMomRecPCA.Mag());
1075 
1076  // hPullLikeX_Xmc->Fill(PosMCpca.X(),PosRecPCA.X()/errPosRecPCA.X());
1077  // hPullLikeY_Xmc->Fill(PosMCpca.X(),PosRecPCA.Y()/errPosRecPCA.Y());
1078  // hPullLikeZ_Xmc->Fill(PosMCpca.X(),PosRecPCA.Z()/errPosRecPCA.Z());
1079  // hPullLikeTh_Xmc->Fill(PosMCpca.X(),MomRecPCA.Theta()/err_lyambda);
1080  // hPullLikePh_Xmc->Fill(PosMCpca.X(),MomRecPCA.Phi()/err_phi);
1081  // hPullLikeP_Xmc->Fill(PosMCpca.X(),MomRecPCA.Mag()/errMomRecPCA.Mag());
1082 
1083 
1084  // ///////
1085  // hXrecYmc->Fill(PosMCpca.Y(),PosRecPCA.X());
1086  // hYrecYmc->Fill(PosMCpca.Y(),PosRecPCA.Y());
1087  // hZrecYmc->Fill(PosMCpca.Y(),PosRecPCA.Z());
1088  // hThrecYmc->Fill(PosMCpca.Y(),1e3*MomRecPCA.Theta());
1089  // hPhrecYmc->Fill(PosMCpca.Y(),MomRecPCA.Phi());
1090  // hPrecYmc->Fill(PosMCpca.Y(),MomRecPCA.Mag());
1091 
1092  // hResXrecYmc->Fill(PosMCpca.Y(),PosMCpca.X()-PosRecPCA.X());
1093  // hResYrecYmc->Fill(PosMCpca.Y(),PosMCpca.Y()-PosRecPCA.Y());
1094  // hResZrecYmc->Fill(PosMCpca.Y(),PosMCpca.Z()-PosRecPCA.Z());
1095  // hResThrecYmc->Fill(PosMCpca.Y(),1e3*(MomMCpca.Theta()-MomRecPCA.Theta()));
1096  // hResPhrecYmc->Fill(PosMCpca.Y(),MomMCpca.Phi()-MomRecPCA.Phi());
1097  // hResPrecYmc->Fill(PosMCpca.Y(),MomMCpca.Mag()-MomRecPCA.Mag());
1098 
1099  // herrXrecYmc->Fill(PosMCpca.Y(),errPosRecPCA.X());
1100  // herrYrecYmc->Fill(PosMCpca.Y(),errPosRecPCA.Y());
1101  // herrZrecYmc->Fill(PosMCpca.Y(),errPosRecPCA.Z());
1102  // herrThrecYmc->Fill(PosMCpca.Y(),1e3*err_lyambda);
1103  // herrPhrecYmc->Fill(PosMCpca.Y(),err_phi);
1104  // herrPrecYmc->Fill(PosMCpca.Y(),errMomRecPCA.Mag());
1105 
1106  // hPullLikeX_Ymc->Fill(PosMCpca.Y(),PosRecPCA.X()/errPosRecPCA.X());
1107  // hPullLikeY_Ymc->Fill(PosMCpca.Y(),PosRecPCA.Y()/errPosRecPCA.Y());
1108  // hPullLikeZ_Ymc->Fill(PosMCpca.Y(),PosRecPCA.Z()/errPosRecPCA.Z());
1109  // hPullLikeTh_Ymc->Fill(PosMCpca.Y(),MomRecPCA.Theta()/err_lyambda);
1110  // hPullLikePh_Ymc->Fill(PosMCpca.Y(),MomRecPCA.Phi()/err_phi);
1111  // hPullLikeP_Ymc->Fill(PosMCpca.Y(),MomRecPCA.Mag()/errMomRecPCA.Mag());
1112 
1113  hResTheta->Fill(1e3*(MomMCpca.Theta()-MomRecPCA.Theta()));
1114  hResTheta_th->Fill(1e3*MomMCpca.Theta(),1e3*(MomMCpca.Theta()-MomRecPCA.Theta()));
1115  hResTheta_ph->Fill(MomMCpca.Phi(),1e3*(MomMCpca.Theta()-MomRecPCA.Theta()));
1116  hResPhi->Fill(MomMCpca.Phi()-MomRecPCA.Phi());
1117  hPullTheta->Fill((MomMCpca.Theta()-MomRecPCA.Theta())/err_lyambda);
1118  hPullPhi->Fill((MomMCpca.Phi()-MomRecPCA.Phi())/err_phi);
1119  hErrTheta->Fill(err_lyambda);
1120  hErrPhi->Fill(err_phi);
1121  hResMom->Fill(MomMCpca.Mag()-MomRecPCA.Mag());
1122  //Near 1st LMD plane
1124  TVector3 PosMClmd = MCPointHit->GetPosition();
1125  double pxTrue = MCPointHit->GetPx();
1126  double pyTrue = MCPointHit->GetPy();
1127  double pzTrue = MCPointHit->GetPz();
1128  TVector3 MomMClmd(pxTrue,pyTrue,pzTrue);
1129  TVector3 dirMClmd = MomMClmd;
1130  dirMClmd *=1./MomMClmd.Mag();
1131  double deltaZ = -PosMClmd.Z()+PosRecLMD.Z();
1132  // double deltaZ = 0;
1133  double xneu=PosMClmd.X()+dirMClmd.X()*deltaZ;
1134  double yneu=PosMClmd.Y()+dirMClmd.Y()*deltaZ;
1135  double zneu = PosMClmd.Z()+deltaZ;
1136  PosMClmd.SetXYZ(xneu,yneu,zneu);
1137  // MomMClmd = dirMClmd*MomMClmd.Mag();
1138  MomMClmd = dirMClmd*MomRecLMD.Mag();
1139  // hResLumiTrkPointP->Fill((MomMClmd.Mag()-MomRecLMD.Mag()));
1140  // hResLumiTrkPointPmcPrec->Fill(MomRecLMD.Mag(),MomMClmd.Mag());
1141 
1142 
1143  // MomMClmd *=1./MomMClmd.Mag();//TEST
1144  // MomRecLMD *=1./MomRecLMD.Mag();//TEST
1145  // errMomRecLMD *=1./MomRecLMD.Mag();//TEST
1146 
1147  //cout<<"MomMClmd.Mag() = "<<MomMClmd.Mag()<<" MomRecLMD.Mag() = "<<MomRecLMD.Mag()<<endl;
1148  // cout<<" MC - REC = "<<1e3*(MomMClmd.Mag()-MomRecLMD.Mag())<<" MeV"<<endl;
1150  hResLumiTrkPointX->Fill(PosMClmd.X()-PosRecLMD.X());
1151  hResLumiTrkPointY->Fill(PosMClmd.Y()-PosRecLMD.Y());
1152  hResLumiTrkPointZ->Fill(PosMClmd.Z()-PosRecLMD.Z());
1153  hResLumiTrkPointXPull->Fill((PosMClmd.X()-PosRecLMD.X())/errPosRecLMD.X());
1154  hResLumiTrkPointYPull->Fill((PosMClmd.Y()-PosRecLMD.Y())/errPosRecLMD.Y());
1155  hResLumiTrkPointZPull->Fill((PosMClmd.Z()-PosRecLMD.Z())/errPosRecLMD.Z());
1156 
1157  hResLumiTrkPointPx->Fill(MomMClmd.X()-MomRecLMD.X());
1158  hResLumiTrkPointPy->Fill(MomMClmd.Y()-MomRecLMD.Y());
1159  hResLumiTrkPointPz->Fill(MomMClmd.Z()-MomRecLMD.Z());
1160  hResLumiTrkPointPxPull->Fill((MomMClmd.X()-MomRecLMD.X())/errMomRecLMD.X());
1161  hResLumiTrkPointPyPull->Fill((MomMClmd.Y()-MomRecLMD.Y())/errMomRecLMD.Y());
1162  hResLumiTrkPointPzPull->Fill((MomMClmd.Z()-MomRecLMD.Z())/errMomRecLMD.Z());
1163 
1164 
1165  hResLumiTrkTheta2D->Fill((MomMClmd.X()/MomMClmd.Z()-MomRecLMD.X()/MomRecLMD.Z()), (MomMClmd.Y()/MomMClmd.Z()-MomRecLMD.Y()/MomRecLMD.Z()));
1166  hMCLumiTrkTheta2D->Fill(MomMClmd.X()/MomMClmd.Z(), MomMClmd.Y()/MomMClmd.Z());
1167  hRecLumiTrkTheta2D->Fill(MomRecLMD.X()/MomRecLMD.Z(), MomRecLMD.Y()/MomRecLMD.Z());
1168 
1169 
1170  hResLumiTrkTheta->Fill(MomMClmd.Theta()-MomRecLMD.Theta());
1171  hResLumiTrkPhi->Fill(MomMClmd.Phi()-MomRecLMD.Phi());
1172  hResLumiTrkThetaPull->Fill((MomMClmd.Theta()-MomRecLMD.Theta())/err_lyambdaLMD);
1173  hResLumiTrkPhiPull->Fill((MomMClmd.Phi()-MomRecLMD.Phi())/err_phiLMD);
1174  hResLumiTrkPointXErr->Fill(errPosRecLMD.X());
1175  hResLumiTrkPointYErr->Fill(errPosRecLMD.Y());
1176  hResLumiTrkPointZErr->Fill(errPosRecLMD.Z());
1177  hResLumiTrkPointPxErr->Fill(errMomRecLMD.X());
1178  hResLumiTrkPointPyErr->Fill(errMomRecLMD.Y());
1179  hResLumiTrkPointPzErr->Fill(errMomRecLMD.Z());
1180 
1182  }
1183 
1184  return;
1185 }
1186 
TH1 * hResLumiTrkPointPzErr
Definition: PndLmdQATask.h:217
static T ASin(const T &x)
TH1 * hResLumiTrkPointPyErr
Definition: PndLmdQATask.h:216
TH1 * hResLumiTrkPointPx
Definition: PndLmdQATask.h:208
Double_t GetXOut() const
Definition: PndSdsMCPoint.h:81
TH1 * hResLumiTrkPointXErr
Definition: PndLmdQATask.h:212
TH2 * hMCLumiTrkTheta2D
Definition: PndLmdQATask.h:202
Int_t i
Definition: run_full.C:25
TString fmcHitName
Definition: PndLmdQATask.h:60
TString fTrkCandName
Definition: PndLmdQATask.h:65
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
TString outFile
Definition: hit_dirc.C:17
void ResoAndPulls()
Double_t GetZOut() const
Definition: PndSdsMCPoint.h:83
static T Sqrt(const T &x)
Definition: PndCAMath.h:37
TH1 * hResLumiTrkPointPyPull
Definition: PndLmdQATask.h:224
Int_t GetIndex(int i=0) const
Definition: PndSdsDigi.h:63
TString fmcTrkName
Definition: PndLmdQATask.h:61
PndTrackCandHit GetSortedHit(UInt_t i)
Definition: PndTrackCand.h:54
TClonesArray * fmcHitArray
Definition: PndLmdQATask.h:51
TH1 * hResLumiTrkPointPz
Definition: PndLmdQATask.h:210
TH1 * hResLumiTrkPhiPull
Definition: PndLmdQATask.h:227
TFile * MCPoint
Definition: anaLmdDigi.C:25
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
TH1 * hResPointPx
Definition: PndLmdQATask.h:94
c2
Definition: plot_dirc.C:39
float Tan(float x)
Definition: PndCAMath.h:165
TH1 * hResLumiTrkMom
Definition: PndLmdQATask.h:198
TH1 * hResPointPy
Definition: PndLmdQATask.h:98
TH1 * hResPointX
Definition: PndLmdQATask.h:106
TH1 * hResLumiTrkPointPxPull
Definition: PndLmdQATask.h:223
TH1 * hResLumiTrkPointXPull
Definition: PndLmdQATask.h:219
TString fGeaneName
Definition: PndLmdQATask.h:67
static T Cos(const T &x)
Definition: PndCAMath.h:43
TString fTrkName
Definition: PndLmdQATask.h:66
TH1 * hPullPointPy
Definition: PndLmdQATask.h:100
TClonesArray * fTrkCandArray
Definition: PndLmdQATask.h:56
TH1 * hResLumiTrkThetaPull
Definition: PndLmdQATask.h:226
TH2 * hResLumiTrkTheta2D
Definition: PndLmdQATask.h:201
TH1 * hResTheta
Definition: PndLmdQATask.h:86
TH1 * hResLumiTrkPointYPull
Definition: PndLmdQATask.h:220
TH1 * hResLumiTrkPointPzPull
Definition: PndLmdQATask.h:225
TH1 * hErrPointPz
Definition: PndLmdQATask.h:103
Int_t GetDigiIndex(Int_t i) const
Definition: PndSdsCluster.h:40
TH1 * hPullPointPx
Definition: PndLmdQATask.h:96
TH1 * hResLumiTrkPointZ
Definition: PndLmdQATask.h:206
TClonesArray * fClusterArray
Definition: PndLmdQATask.h:54
TH1 * hErrPointPx
Definition: PndLmdQATask.h:95
TH1 * hResLumiTrkPointPy
Definition: PndLmdQATask.h:209
TH1 * hResPointY
Definition: PndLmdQATask.h:108
Double_t
TH1 * hResPointZ
Definition: PndLmdQATask.h:110
TH1 * hResLumiTrkTheta
Definition: PndLmdQATask.h:199
virtual void Exec(Option_t *opt)
TH1 * hPullPointX
Definition: PndLmdQATask.h:107
TH1 * hPullPointPz
Definition: PndLmdQATask.h:104
TH1 * hResLumiTrkPointX
Definition: PndLmdQATask.h:204
TH1 * hPullPhi
Definition: PndLmdQATask.h:93
TH1 * hResLumiTrkPhi
Definition: PndLmdQATask.h:200
TFile * f
Definition: bump_analys.C:12
PndLmdQATask(TString mcHitBranch="LMDPoint", TString mcTrkBranch="MCTrack", TString clusterBranch="LMDPixelClusterCand", TString digiBrunch="LMDPixelDigis", TString hitBranch="LmdHits", TString TrkCandBranch="LMDTrackCand", TString trackBranch="LMDTrack", TString geaneBranch="GeaneTrackFinal", TString outFile="tmpOutput/QA.root")
TH1 * hResLumiTrkPointPxErr
Definition: PndLmdQATask.h:215
TClonesArray * fTrkArray
Definition: PndLmdQATask.h:57
TH1 * hErrPointPy
Definition: PndLmdQATask.h:99
TH1 * hPullPointZ
Definition: PndLmdQATask.h:111
TH1 * hPullPointY
Definition: PndLmdQATask.h:109
TString fClusterName
Definition: PndLmdQATask.h:64
TString fHitName
Definition: PndLmdQATask.h:62
c1
Definition: plot_dirc.C:35
TVector3 GetPosition() const
Definition: PndSdsMCPoint.h:90
TH1 * hResLumiTrkPointYErr
Definition: PndLmdQATask.h:213
Double_t GetYOut() const
Definition: PndSdsMCPoint.h:82
TH1 * hResLumiTrkPointZPull
Definition: PndLmdQATask.h:221
TH2 * hRecLumiTrkTheta2D
Definition: PndLmdQATask.h:203
TH2 * hResTheta_ph
Definition: PndLmdQATask.h:88
virtual InitStatus Init()
TH1 * hErrTheta
Definition: PndLmdQATask.h:89
TH1 * hResLumiTrkPointZErr
Definition: PndLmdQATask.h:214
TString foutFile
Definition: PndLmdQATask.h:70
TH1 * hResLumiTrkPointY
Definition: PndLmdQATask.h:205
UInt_t GetNHits() const
Definition: PndTrackCand.h:59
ClassImp(PndAnaContFact)
TClonesArray * fHitArray
Definition: PndLmdQATask.h:53
Data class to store the digi output of a pixel module.
Int_t GetClusterIndex() const
Definition: PndSdsHit.h:94
PndSdsMCPoint * hit
Definition: anasim.C:70
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
virtual void FinishTask()
virtual ~PndLmdQATask()
Int_t GetHitId() const
Double_t Pi
TClonesArray * fmcTrkArray
Definition: PndLmdQATask.h:52
TH1 * hResPointPz
Definition: PndLmdQATask.h:102
TH2 * hResTheta_th
Definition: PndLmdQATask.h:87
TClonesArray * fGeaneArray
Definition: PndLmdQATask.h:58
TClonesArray * fDigiArray
Definition: PndLmdQATask.h:55
TString fDigiName
Definition: PndLmdQATask.h:63
TH1 * hPullTheta
Definition: PndLmdQATask.h:90