Try to find connection between position of –——— reconstructed track and track after GEANE propagation
144 std::string startStr=
"", momStr=
"", nStr=
"", pathStr=
"", verbStr=
"" , mcTrkStr=
"", useNewDStr=
"",usedMHStr=
"";
146 if( __argc>1 && ( strcmp( __argv[1],
"-help" ) == 0
147 || strcmp( __argv[1],
"--help" ) == 0 ) ){
149 std::cout <<
"This is script for comparision reconstructed and simulated tracks with parameters\n"
150 <<
"-s start event \n"
151 <<
"-n Number of events \n"
152 <<
"-t Number of trks per event \n"
153 <<
"-mom Beam Momentum \n"
154 <<
"-path path to the file(s) \n"
155 <<
"-v verbose Level (if>0, print out some information) \n"
156 <<
"-npx if>0: use namespace for pixel \n"
157 <<
"-mh if>0: use merged hits\n"
162 while ((optind < (__argc-1) ) && (__argv[optind][0]==
'-')) {
164 std::string sw = __argv[optind];
167 startStr = __argv[optind];
172 nStr = __argv[optind];
177 mcTrkStr = __argv[optind];
182 pathStr = __argv[optind];
187 momStr = __argv[optind];
192 verbStr = __argv[optind];
197 useNewDStr = __argv[optind];
202 usedMHStr = __argv[optind];
206 std::cout<<
"Unknown switch: "
207 << __argv[optind] <<std::endl;
211 while ( (optind < __argc ) && __argv[optind][0]!=
'-' ) optind++;
214 std::stringstream startSStr(startStr), momSStr(momStr), nSStr(nStr), pathSStr(pathStr), verbSStr(verbStr), mcTrkSStr(mcTrkStr),useNewDSStr(useNewDStr), usedMHSStr(usedMHStr);
221 mcTrkSStr >> nMCtracks;
224 cout<<
"====================================="<<endl;
225 cout<<
"some INFO about this macro params: "<<endl;
226 cout<<
"expected number of tracks per event: "<<nMCtracks<<endl;
227 cout<<
"expected number of events: "<<nEvents<<endl;
228 cout<<
"Pbeam: "<<Plab<<endl;
229 cout<<
"Will be used Path: "<<storePath<<endl;
230 cout<<
"====================================="<<endl;
234 gROOT->Macro(
"$VMCWORKDIR/gconfig/rootlogon.C");
235 gSystem->Load(
"libLmdTrk");
245 TString simMC=storePath+
"/Lumi_MC_";
248 TChain tMC(
"pndsim");
254 TChain tdigiHits(
"pndsim");
255 tdigiHits.Add(DigiFile);
257 TString recHit=storePath+
"/Lumi_reco";
262 TChain tHits(
"pndsim");
265 TString recHitmerged=storePath+
"/Lumi_recoMerged_";
267 recHitmerged +=
".root";
268 TChain tHitsMerged(
"pndsim");
270 tHitsMerged.Add(recHitmerged);
273 TString trkCand = storePath+
"/Lumi_TCand_";
276 TChain tTrkCand(
"pndsim");
277 tTrkCand.Add(trkCand);
280 TChain tTrkRec(
"pndsim");
281 recTrack = storePath+
"/Lumi_Track_";
284 tTrkRec.Add(recTrack);
292 TString geaneFile = storePath+
"/Lumi_Geane_";
294 geaneFile +=
".root";
295 TChain tgeane(
"pndsim");
296 tgeane.Add(geaneFile);
301 TString out=storePath+
"/Lumi_out_MC_and_REC_trks_matches_with_IDs";
304 TFile *
f =
new TFile(out,
"RECREATE");
308 TClonesArray* true_tracks=
new TClonesArray(
"PndMCTrack");
309 tMC.SetBranchAddress(
"MCTrack",&true_tracks);
311 TClonesArray* true_points=
new TClonesArray(
"PndSdsMCPoint");
312 tMC.SetBranchAddress(
"LMDPoint",&true_points);
317 TClonesArray* fStripClusterArray;
319 fStripClusterArray =
new TClonesArray(
"PndSdsClusterPixel");
320 tHits.SetBranchAddress(
"LMDPixelClusterCand",&fStripClusterArray);
323 fStripClusterArray =
new TClonesArray(
"PndSdsClusterStrip");
324 tHits.SetBranchAddress(
"LMDStripClusterCand",&fStripClusterArray);
328 TClonesArray* fStripDigiArray;
330 fStripDigiArray =
new TClonesArray(
"PndSdsDigiPixel");
331 tdigiHits.SetBranchAddress(
"LMDPixelDigis",&fStripDigiArray);
334 fStripDigiArray =
new TClonesArray(
"PndSdsDigiStrip");
335 tdigiHits.SetBranchAddress(
"LMDStripDigis",&fStripDigiArray);
340 TClonesArray* rechit_array;
343 rechit_array =
new TClonesArray(
"PndSdsMergedHit");
344 tHitsMerged.SetBranchAddress(
"LMDHitsMerged",&rechit_array);
347 rechit_array =
new TClonesArray(
"PndSdsHit");
348 tHits.SetBranchAddress(
"LMDHitsPixel",&rechit_array);
352 rechit_array =
new TClonesArray(
"PndSdsHit");
353 tHits.SetBranchAddress(
"LMDHitsStrip",&rechit_array);
359 TClonesArray* trkcand_array=
new TClonesArray(
"PndTrackCand");
360 tTrkCand.SetBranchAddress(
"LMDTrackCand",&trkcand_array);
364 TClonesArray* rec_trk=
new TClonesArray(
"PndLinTrack");
365 tTrkRec.SetBranchAddress(
"LMDTrack",&rec_trk);
376 cout<<
"Here we go to GEANE file: "<<endl;
381 TClonesArray* geaneArray =
new TClonesArray(
"FairTrackParH");
382 tgeane.SetBranchAddress(
"GeaneTrackFinal",&geaneArray);
384 cout<<
"And we'll make some hists"<<endl;
386 TH1 *hchi2 =
new TH1F(
"hchi2",
"#chi^2 for reconstructed tracks;#chi^2;",1.5e2,0,15.);
387 TH2 *hnRecnMC =
new TH2F(
"hnRecnMC",
"Number reconstracted tracks vs. Number simulated tracks; N_{MC}; N_{rec}",
388 100,0,100,100,0,100);
389 TH1 *hDiffIDs =
new TH1F(
"hDiffIDs",
"Number of track-candidates with hits from diff. MC-track;N_{IDs}",10,0,10);
390 TH2 *hMCtrkvshits =
new TH2F(
"hMCtrkvshits",
"Number of simulated tracks vs. Number of rec. hits",
391 1000,0,1000,100,0,100);
392 TH1 *hntrkcand =
new TH1F(
"hntrkcand",
"Number of track-candidates per event;N_{trk-cand}",100,0,100);
393 TH1 *hntrk =
new TH1F(
"hntrk",
"Number of tracks per event;N_{trk}",100,0,100);
394 TH1 *hntrkmissed_I =
new TH1F(
"hntrkmissed_I",
"Number of missed tracks per event (#phi, #theta trks);N_{trk}",30,0,30);
395 TH1 *hntrkgood_I =
new TH1F(
"hntrkgood_I",
"Number of good tracks per event (#phi, #theta trks);N_{trk}",30,0,30);
396 TH1 *hntrkghost_I =
new TH1F(
"hntrkghost_I",
"Number of ghost tracks per event (#phi, #theta trks);N_{trk}",30,0,30);
397 TH1 *hntrkmissed_II =
new TH1F(
"hntrkmissed_II",
"Number of missed tracks per event (hits matching);N_{trk}",30,0,30);
398 TH1 *hntrkgood_II =
new TH1F(
"hntrkgood_II",
"Number of good tracks per event (hits matching);N_{trk}",30,0,30);
399 TH1 *hntrkghost_II =
new TH1F(
"hntrkghost_II",
"Number of ghost tracks per event (hits matching);N_{trk}",30,0,30);
400 TH2 *hntrkmissedPhiTheta =
new TH2F(
"hntrkmissedPhiTheta",
";#delta#theta/#sigma#theta;#delta#phi/#sigma#phi",1000,0,100,1000,0,100);
401 TH2 *hntrkcandvsIDs =
new TH2F(
"hntrkcandvsIDs",
"Number of track-candidates per event vs Number of track-candidates with hits from diff. MC-track;N_{IDs};N_{trk-cand}",10,0,10,100,0,100);
402 TH2 *hntrkcandvsMC =
new TH2F(
"hntrkcandvsMC",
"Number of per event vs. Number of simulated tracks; N_{MC};N_{trk-cand}",100,0,100,100,0,100);
404 TH2 *hnhitsvsIDs =
new TH2F(
"hnhitsvsIDs",
"Number of hits per track-candidate vs Number of track-candidates with hits from diff. MC-track;N_{IDs};Number of hits",10,0,10,10,2,12);
406 TH1 * hallTheta =
new TH1F(
"hallTheta",
"#theta for all MC-track;#theta, rad",50,2e-3,10e-3);
407 TH1 * hgoodTheta =
new TH1F(
"hgoodTheta",
"#theta for good track-candidates",50,2e-3,10e-3);
408 TH1 * hallPhi =
new TH1F(
"hallPhi",
"#phi for all MC-track;#phi, rad",50,-355./113,355./113);
409 TH1 * hgoodPhi =
new TH1F(
"hgoodPhi",
"#phi for good track-candidates",50,-355./113,355./113);
410 TH2 * hgoodPhiTheta =
new TH2F(
"hgoodPhiTheta",
"#phi and #thete for good track-candidates",50,2e-3,10e-3,100,-355./113,355./113);
411 TH2 * hallPhiTheta =
new TH2F(
"hallPhiTheta",
"#phi & #theta for all MC",50,2e-3,10e-3,100,-355./113,355./113);
413 TH2 * hgoodPhichi2 =
new TH2F(
"hgoodPhichi2",
"#phi for good track-candidates vs. #chi^{2} ",5e2,0,50,20,-355./113,355./113);
414 TH2 * hgoodThetachi2 =
new TH2F(
"hgoodThetachi2",
"#theta for good track-candidates vs. #chi^{2} ",5e2,0,50,20,3.5e-3,8.5e-3);
417 TNtuple *nmomMC =
new TNtuple(
"nmomMC",
"MCmomentum",
"p0:p_nearLUMI:p_afterLUMI");
418 TNtuple *ntuprecTrk =
new TNtuple(
"ntuprecTrk",
"Info about reconstructed trks: goodTrk [0=good,+1=ghost]",
"x:y:z:mom:theta:phi:goodTrk");
419 TNtuple *ntupMCTrk =
new TNtuple(
"ntupMCTrk",
"Info about simulated trks: goodTrk [0=good, -1=missed]",
"x:y:z:mom:theta:phi:goodTrk:nrechits");
422 TH1 *hResMom =
new TH1F(
"hResMom",
"P_{MC}-P_{rec};#deltaP,GeV/c",1e3,-1e-4,1e-4);
423 TH1 *hErrMom =
new TH1F(
"hErrMom",
"#sigma_{P};#sigmaP,GeV/c",1e3,0,1e-3);
424 TH1 *hPullMom =
new TH1F(
"hPullMom",
"(P_{MC}-P_{rec})/#sigma_{P};",1e3,-1e1,1e1);
426 TH1 *hResTheta =
new TH1F(
"hResTheta",
"#theta_{MC}-#theta_{rec};#delta#theta,rad",1e2,-1e-3,1e-3);
427 TH1 *hErrTheta =
new TH1F(
"hErrTheta",
"#sigma(#theta_{rec});#sigma,rad",1e3,0,0.01);
428 TH1 *hPullTheta =
new TH1F(
"hPullTheta",
"(#theta_{MC}-#theta_{rec})/#sigma_{#theta};",1e2,-10,10);
429 TH1 *hResPhi =
new TH1F(
"hResPhi",
"#phi_{MC}-#phi_{rec};#delta#phi,rad",2e3,-1.,1.);
430 TH1 *hErrPhi =
new TH1F(
"hErrPhi",
"#sigma(#phi_{rec});#sigma,rad",1e3,0,0.1);
431 TH1 *hPullPhi =
new TH1F(
"hPullPhi",
"(#phi_{MC}-#phi_{rec})/#sigma_{#phi};",1e2,-10,10);
433 TH1 *hResLumiTrkMom =
new TH1F(
"hResLumiTrkMom",
"P_{MC}-P_{rec}(near Lumi);#deltaP,GeV/c",1e3,-6e-7,6e-7);
434 TH1 *hResLumiTrkTheta =
new TH1F(
"hResLumiTrkTheta",
"#theta_{MC}-#theta_{rec}(near Lumi);#delta#theta,rad",1e3,-6e-3,6e-3);
435 TH1 *hResLumiTrkPhi =
new TH1F(
"hResLumiTrkPhi",
"#phi_{MC}-#phi_{rec}(near Lumi);#delta#phi,rad",2e3,-1e-1,1e-1);
437 TH1 *hangMCRec =
new TH1F(
"hangMCRec",
"Angle between Pmc and Prec;#delta#alpha, rad", 1e3,0.,0.1);
438 TH1 *hResPointX =
new TH1F(
"hResPointX",
"X_{MC}-X_{rec};#deltaX,cm",1e2,-2.,2.);
439 TH1 *hResPointY =
new TH1F(
"hResPointY",
"Y_{MC}-Y_{rec};#deltaY,cm",1e2,-2.,2.);
440 TH1 *hResPointZ =
new TH1F(
"hResPointZ",
"Z_{MC}-Z_{rec};#deltaZ,cm",1e3,-0.15,0.15);
442 TH1 *hResLumiTrkPointX =
new TH1F(
"hResLumiTrkPointX",
"X_{MC}-X_{rec}(near Lumi);#deltaX,cm",1e2,-0.02,0.02);
443 TH1 *hResLumiTrkPointY =
new TH1F(
"hResLumiTrkPointY",
"Y_{MC}-Y_{rec}(near Lumi);#deltaY,cm",1e2,-0.02,0.02);
444 TH1 *hResLumiTrkPointZ =
new TH1F(
"hResLumiTrkPointZ",
"Z_{MC}-Z_{rec}(near Lumi);#deltaZ,cm",1e2,-0.02,0.02);
446 TH1 *hResLumiTrkPointPx =
new TH1F(
"hResLumiTrkPointPx",
"Px_{MC}-Px_{rec}(near Lumi);#deltaPx, GeV/c",1e2,-0.001,0.001);
447 TH1 *hResLumiTrkPointPy =
new TH1F(
"hResLumiTrkPointPy",
"Py_{MC}-Py_{rec}(near Lumi);#deltaPy, GeV/c",1e2,-0.001,0.001);
448 TH1 *hResLumiTrkPointPz =
new TH1F(
"hResLumiTrkPointPz",
"Pz_{MC}-Pz_{rec}(near Lumi);#deltaPz, GeV/c",1e2,-0.0001,0.0001);
450 TH1 *hResLumiTrkPointXPull =
new TH1F(
"hResLumiTrkPointXPull",
"(X_{MC}-X_{rec})/#sigma;(X_{MC}-X_{rec})/#sigma",1e2,-10.,10.);
451 TH1 *hResLumiTrkPointYPull =
new TH1F(
"hResLumiTrkPointYPull",
"(Y_{MC}-Y_{rec})/#sigma;(Y_{MC}-Y_{rec})/#sigma",1e2,-10.,10.);
452 TH1 *hResLumiTrkPointZPull =
new TH1F(
"hResLumiTrkPointZPull",
"(Z_{MC}-Z_{rec})/#sigma;(Z_{MC}-Z_{rec})/#sigma",1e2,-10.,10.);
454 TH1 *hResLumiTrkPointPxPull =
new TH1F(
"hResLumiTrkPointPxPull",
"(Px_{MC}-Px_{rec})/#sigma;(Px_{MC}-Px_{rec})/#sigma",1e2,-10,10.);
455 TH1 *hResLumiTrkPointPyPull =
new TH1F(
"hResLumiTrkPointPyPull",
"(Py_{MC}-Py_{rec})/#sigma;(Py_{MC}-Py_{rec})/#sigma",1e2,-10,10);
456 TH1 *hResLumiTrkPointPzPull =
new TH1F(
"hResLumiTrkPointPzPull",
"(Pz_{MC}-Pz_{rec})/#sigma;(Pz_{MC}-Pz_{rec})/#sigma",1e2,-10,10);
460 TH1 *hResLumiTrkThetaPull =
new TH1F(
"hResLumiTrkThetaPull",
"(#theta_{MC}-#theta_{rec})/#sigma (near Lumi);#delta#theta, rad",1e2,-10,10);
461 TH1 *hResLumiTrkPhiPull =
new TH1F(
"hResLumiTrkPhiPull",
"(#phi_{MC}-#phi_{rec})/#sigma (near Lumi);#delta#phi, rad",1e2,-10,10);
464 TH1 *hErrPointX =
new TH1F(
"hErrPointX",
"#sigma_{X};#sigmaX,cm",1e3,0,1.);
465 TH1 *hErrPointY =
new TH1F(
"hErrPointY",
"#sigma_{Y};#sigmaY,cm",1e3,0,1.);
466 TH1 *hErrLinPointX =
new TH1F(
"hErrLinPointX",
"#sigma_{X};#sigmaX,cm",1e3,0,0.01);
467 TH1 *hErrLinPointY =
new TH1F(
"hErrLinPointY",
"#sigma_{Y};#sigmaY,cm",1e3,0,0.001);
468 TH1 *hErrPointZ =
new TH1F(
"hErrPointZ",
"#sigma_{Z};#sigmaZ,cm",1e2,0,0.01);
469 TH1 *hPullPointX =
new TH1F(
"hPullPointX",
"(X_{MC}-X_{rec})/#sigma_{X};(X_{MC}-X_{rec})/#sigma_{X}",1e2,-10,10);
470 TH1 *hPullPointY =
new TH1F(
"hPullPointY",
"(Y_{MC}-Y_{rec})/#sigma_{Y};(Y_{MC}-Y_{rec})/#sigma_{Y}",1e2,-10,10);
471 TH1 *hPullPointZ =
new TH1F(
"hPullPointZ",
"(Z_{MC}-Z_{rec})/#sigma_{Z};(Z_{MC}-Z_{rec})/#sigma_{Z}",1e3,-100,100);
473 TH2 *hPullPointXphi =
new TH2F(
"hPullPointXphi",
"(X_{MC}-X_{rec})/#sigma_{X} vs. #phi;#phi_{MC}, rad;(X_{MC}-X_{rec})/#sigma_{X}",2e1,-355./113,355./113,1e2,-10,10);
474 TH2 *hPullPointYphi =
new TH2F(
"hPullPointYphi",
"(Y_{MC}-Y_{rec})/#sigma_{Y} vs. #phi;#phi_{MC}, rad;(Y_{MC}-Y_{rec})/#sigma_{Y}",2e1,-355./113,355./113,1e2,-10,10);
475 TH2 *hPullPointXtheta =
new TH2F(
"hPullPointXtheta",
"(X_{MC}-X_{rec})/#sigma_{X} vs. #theta;#theta_{MC}, rad;(X_{MC}-X_{rec})/#sigma_{X}",2e1,0.003, 0.009,1e2,-10,10);
476 TH2 *hPullPointYtheta =
new TH2F(
"hPullPointYtheta",
"(Y_{MC}-Y_{rec})/#sigma_{Y} vs. #theta;#theta_{MC}, rad;(Y_{MC}-Y_{rec})/#sigma_{Y}",2e1,0.003, 0.009,1e2,-10,10);
477 TH1 *hResPointPx =
new TH1F(
"hResPointPx",
"Px_{MC}-Px_{rec};#deltaPx, GeV/c",1e2,-0.01,0.01);
478 TH1 *hErrPointPx =
new TH1F(
"hErrPointPx",
"#sigma_{Px};#sigmaPx, GeV/c",1e3,0,0.01);
479 TH1 *hPullPointPx =
new TH1F(
"hPullPointPx",
"(Px_{MC}-Px_{rec})/#sigma_{Px};(Px_{MC}-Px_{rec})/#sigma_{Px}",1e2,-10,10);
481 TH1 *hResPointPy =
new TH1F(
"hResPointPy",
"Py_{MC}-Py_{rec};#deltaPy, GeV/c",1e2,-0.01,0.01);
482 TH1 *hErrPointPy =
new TH1F(
"hErrPointPy",
"#sigma_{Py};#sigmaPy, GeV/c",1e3,0,0.01);
483 TH1 *hPullPointPy =
new TH1F(
"hPullPointPy",
"(Py_{MC}-Py_{rec})/#sigma_{Py};(Py_{MC}-Py_{rec})/#sigma_{Py}",1e2,-10,10);
485 TH1 *hResPointPz =
new TH1F(
"hResPointPz",
"Pz_{MC}-Pz_{rec};#deltaPz, GeV/c",1e2,-1e-3,1e-3);
486 TH1 *hErrPointPz =
new TH1F(
"hErrPointPz",
"#sigma_{Pz};#sigmaPz, GeV/c",1e3,0,1e-1);
487 TH1 *hPullPointPz =
new TH1F(
"hPullPointPz",
"(Pz_{MC}-Pz_{rec})/#sigma_{Pz};(Pz_{MC}-Pz_{rec})/#sigma_{Pz}",1e2,-10,10);
489 TH1 *hResDCA =
new TH1F(
"hDCA",
"|DCA|;|DCA|,cm",1e3,0,10.);
490 TH1 *hErrDCA =
new TH1F(
"hErrDCA",
"#sigma_{DCA};#sigmaDCA,cm",1e3,0,1.);
491 TH1 *hPullDCA =
new TH1F(
"hPullDCA",
"|DCA|/#sigma_{DCA};",1e2,0,10);
493 TH2 *hPointXY =
new TH2F(
"hPointXY",
"PCA;X,cm;Y,cm",1e3,-10,10.,1e3,-10,10.);
494 TH2 *hPointXYcut =
new TH2F(
"hPointXYcut",
"PCA;#X,cm;#Y,cm",1e3,-1.,1.,1e3,-1.,1.);
495 TH2 *hErrPointXY =
new TH2F(
"hErrPointXY",
"#sigma_{PCA};#sigmaX,cm;#sigmaY,cm",1e3,0,30.,1e3,0,30.);
497 TH2 *hHitIDHitX =
new TH2F(
"hHitIDHitX",
";MC_{ID} ;hit_{X}, cm;",6,-1,5,1e3,24.,45.);
498 TH2 *hHitIDHitY =
new TH2F(
"hHitIDHitY",
";MC_{ID} ;hit_{Y}, cm;",6,-1,5,1e3,-10.,10.);
500 TH2 *hRecGEANEX =
new TH2F(
"hRecGEANEX",
";X_{rec}, cm;X_{GEANE}, cm",1e3,-15.,15.,1e3,-100,100.);
501 TH2 *hRecGEANEY =
new TH2F(
"hRecGEANEY",
";Y_{rec}, cm;Y_{GEANE}, cm",1e3,-15.,15.,1e3,-100,100.);
502 TH2 *hRecGEANEZ =
new TH2F(
"hRecGEANEZ",
";Z_{rec}, cm;Z_{GEANE}, cm",1e3,-15.,15.,1e3,-1.,1.);
503 TH2 *hRecGEANER =
new TH2F(
"hRecGEANER",
";R_{rec}, cm;R_{GEANE}, cm",1e3,0,10.,1e3,0,10.);
504 TH2 *hRecGEANETheta =
new TH2F(
"hRecGEANETheta",
";#theta_{rec}, rad;#theta_{GEANE}, rad",1e3,0,1,1e3,0,1);
505 TH2 *hRecGEANEPhi =
new TH2F(
"hRecGEANEPhi",
";#phi_{rec}, rad;#phi_{GEANE}, rad",1e3,-7,7,1e3,-7,7);
506 TH2 *hRecThetaPhi =
new TH2F(
"hRecThetaPhi",
";#theta_{rec}, rad;#phi_{rec}, rad",1e3,0,1.,1e3,-7,7);
508 TH2 *hSeedGEANEX =
new TH2F(
"hSeedGEANEX",
";X_{cand}, cm;X_{GEANE}, cm",1e3,-100.,100.,1e3,-100.,100.);
509 TH2 *hSeedGEANEY =
new TH2F(
"hSeedGEANEY",
";Y_{cand}, cm;Y_{GEANE}, cm",1e3,-100.,100.,1e3,-100.,100.);
510 TH2 *hSeedGEANEZ =
new TH2F(
"hSeedGEANEZ",
";Z_{cand}, cm;Z_{GEANE}, cm",1e3,-0.015,0.015,1e3,-0.05,0.05);
511 TH2 *hSeedGEANER =
new TH2F(
"hSeedGEANER",
";R_{cand}, cm;R_{GEANE}, cm",1e3,0,100.,1e3,0,100.);
512 TH2 *hSeedGEANETheta =
new TH2F(
"hSeedGEANETheta",
";#theta_{cand}, rad;#theta_{GEANE}, rad",1e3,0,0.1,1e3,0,0.1);
513 TH2 *hSeedGEANEPhi =
new TH2F(
"hSeedGEANEPhi",
";#phi_{cand}, rad;#phi_{GEANE}, rad",1e3,-7,7,1e3,-7,7);
514 TH2 *hSeedThetaPhi =
new TH2F(
"hSeedThetaPhi",
";#theta_{cand}, rad;#phi_{cand}, rad",1e3,0,1.,1e3,-1.,1.);
516 TH2 *hSeedThetaDiffIDs =
new TH2F(
"hSeedThetaDiffIDs",
";# IDs;#theta_{cand}, rad",7,0,7,1e3,0,0.1);
517 TH2 *hSeedPhiDiffIDs =
new TH2F(
"hSeedPhiDiffIDs",
";# IDs;#phi_{cand}, rad",7,0,7,1e3,-4.,4.);
518 TH2 *hDiffIDsPointX =
new TH2F(
"hDiffIDsPointX",
";# IDs;X,cm",7,0,7,1e3,-10,10.);
519 TH2 *hDiffIDsPointY =
new TH2F(
"hDiffIDsPointY",
";# IDs;Y,cm",7,0,7,1e3,-10,10.);
520 TH2 *hDiffIDsPointZ =
new TH2F(
"hDiffIDsPointZ",
";# IDs;Z,cm",7,0,7,1e3,-1.,1.);
522 TH2 *hMCThetaGEANETheta =
new TH2F(
"hMCThetaGEANETheta",
";#theta_{MC}, rad;#theta_{GEANE}, rad",1e3,0,0.012,1e3,0,0.012);
523 TH2 *hMCPhiGEANEPhi =
new TH2F(
"hMCPhiGEANEPhi",
";#phi_{MC}, rad;#phi_{GEANE}, rad",1e3,-3.15,3.15,1e3,-3.15,3.15);
525 TH2 *hMCThetaResTheta =
new TH2F(
"hMCThetaResTheta",
";#theta_{MC}, rad;#Delta#theta, rad",1e2,0,0.012,1e3,-1e-2,1e-2);
526 TH2 *hMCPhiResPhi =
new TH2F(
"hMCPhiResPhi",
";#phi_{MC}, rad;#Delta#phi, rad",1e2,-3.15,3.15,1e2,-5e-1,5e-1);
527 TH2 *hMCThetaResSeedTheta =
new TH2F(
"hMCThetaResSeedTheta",
";#theta_{MC}, rad;#Delta#theta, rad",1e2,0.,0.1,1e3,-1e-2,1e-2);
528 TH2 *hMCPhiResSeedPhi =
new TH2F(
"hMCPhiResSeedPhi",
";#phi_{MC}, rad;#Delta#phi, rad",1e2,-3.15,3.15,1e2,-1e-1,1e-1);
529 TH2 *hResZResPhi =
new TH2F(
"hResZResPhi",
";#Delta#phi, rad;#Delta Z, cm",1e3,-2e-1,2e-1,1e3,-0.02,0.02);
530 TH2 *hntrkMCtrkID =
new TH2F(
"hntrkMCtrkID",
"Number of participation this MCid in rec.tracks;ID;Number of rec.trks",10,0,10,10,0,10);
531 TH2 *hchi2MCdiffID =
new TH2F(
"hchi2MCdiffID",
"number diff MCid in rec.tracks vs. #chi^{2};#chi^{2};N",5e2,0,50,10,0,10);
534 TH1 *hLumiTrkA =
new TH1F(
"hLumiTrkA",
"param a [x=a*z+b];",1e3,-0.1,0.1);
535 TH1 *hLumiTrkB =
new TH1F(
"hLumiTrkB",
"param b [x=a*z+b];",1e3,-10.,10.);
536 TH1 *hLumiTrkC =
new TH1F(
"hLumiTrkC",
"param c [y=c*z+d];",1e3,-0.1,0.1);
537 TH1 *hLumiTrkD =
new TH1F(
"hLumiTrkD",
"param d [y=c*z+d];",1e3,-10.,10.);
541 TH2 *hchi2Errx =
new TH2F(
"hchi2Errx",
"#sigma_{X} vs. #chi^2 for reconstructed tracks;#chi^2;#sigma_{X}, cm",
542 1e3,0,100,2e1,0,0.2);
543 TH2 *hchi2Erry =
new TH2F(
"hchi2Erry",
"#sigma_{Y} vs. #chi^2 for reconstructed tracks;#chi^2;#sigma_{X}, cm",
544 1e3,0,100,2e1,0,0.2);
545 TH2 *hchi2nTrkCand =
new TH2F(
"hchi2nTrkCand",
" ;Number of trk-cand;#chi^2",
547 TNtuple *nrecpointall =
new TNtuple(
"nrecpointall",
"recpointAll",
"xrecbp:yrecbp:zrecbp:xrec:yrec:zrec:xseed:yseed:zseed:chi2");
548 TNtuple *nrecdirall =
new TNtuple(
"nrecdirall",
"recdirAll",
"dxmc:dymc:dzmc:dxrecbp:dyrecbp:dzrecbp:dirxrec:diryrec:dirzrec:dirxseed:diryseed:dirzseed");
549 TNtuple *nsectors =
new TNtuple(
"nsectors",
"sectors",
"thetares:sector");
550 TH2I *hnhits =
new TH2I(
"hnhits",
"# rec hits vs. # sim hits; sim; rec",100,0,100,100,0,100);
554 lmddim -> Read_transformation_matrices(
"matrices_perfect.txt",
false);
558 for (Int_t j=0; j<
nEvents; j++){
565 tTrkCand.GetEntry(j);
567 tdigiHits.GetEntry(j);
569 tHitsMerged.GetEntry(j);
570 const int nGeaneTrks = geaneArray->GetEntriesFast();
571 const int nParticles = true_tracks->GetEntriesFast();
572 const int numTrk = nGeaneTrks;
573 const int nRecHits = rechit_array->GetEntriesFast();
574 const int nMCHits = true_points->GetEntriesFast();
576 const int nTrkCandidates = trkcand_array->GetEntriesFast();
577 const int nRecTrks = rec_trk->GetEntriesFast();
579 cout<<
"Event #"<<j<<
" has "<<nParticles<<
" true particles, "<<
" out of it "<<nRecHits<<
" hits, "<<nTrkCandidates
580 <<
" trk-cands, "<<numTrk<<
" tracks and "<<nGeaneTrks<<
" geane Trks!"<<endl;
581 hnRecnMC->Fill(nParticles,nGeaneTrks);
582 if(nParticles!=nMCtracks)
continue;
583 hnhits->Fill(nMCHits,nRecHits);
584 if(nRecHits<3*nMCtracks) glBadEv++;
587 double chi2Cont[5*numTrk];
588 double ndiffIDCont[5*numTrk];
590 hMCtrkvshits->Fill(nRecHits,nParticles);
591 if(nTrkCandidates>numTrk) cout<<
"Event #"<<j<<
" has "<<nTrkCandidates<<
" trk-cands and "<<numTrk<<
" tracks!"<<endl;
593 hntrkcand->Fill(nTrkCandidates);
594 hntrkcandvsMC->Fill(nParticles,nTrkCandidates);
597 Int_t nRecGEANEtrk = 0;
598 int MCtrk[nParticles];
599 int RECtrkMCid[nGeaneTrks];
600 for(
int nk=0;
nk<nParticles;
nk++)
602 bool goodTrk[nGeaneTrks];
603 bool ghostTrk[nGeaneTrks];
604 for (Int_t iN=0; iN<nGeaneTrks; iN++){
606 ghostTrk[iN] =
false;
611 for (Int_t iN=0; iN<nGeaneTrks; iN++){
616 FairTrackParH *fRes = (FairTrackParH*)geaneArray->At(iN);
618 TVector3 PosRec = fRes->GetPosition();
620 if(Plab<5) pca_lim = 2.;
621 if(Plab<2) pca_lim = 5.;
625 if(
fabs(PosRec.X())>pca_lim &&
fabs(PosRec.Y())>pca_lim)
continue;
629 Double_t lyambda = fRes->GetLambda();
631 cout<<
"GEANE didn't propagate this trk!"<<endl;
632 cout<<
"Event #"<<j<<
" diffIDs = "<<diffIDs<<endl;
635 if(lyambda==0)
continue;
646 hLumiTrkA->Fill(linpar[1]);
647 hLumiTrkB->Fill(linpar[0]);
648 hLumiTrkC->Fill(linpar[3]);
649 hLumiTrkD->Fill(linpar[2]);
655 hchi2nTrkCand->Fill(nTrkCandidates,chi2);
658 const int Ntrkcandhits= trkcand->
GetNHits();
662 if(verboseLevel>1) cout<<
"MCidTOP:"<<endl;
663 double momMC0,momMC1,momMC2;
665 for (Int_t iHit = 0; iHit < Ntrkcandhits; iHit++){
682 int ihalf, iplane, imodule, iside, idie, isensor;
684 lmddim->
Get_sensor_by_id(sensorID, ihalf, iplane, imodule, iside, idie, isensor);
685 trkSensor = ihalf*5+imodule;
688 MCpointMom =
sqrt(MCPoint->GetPx()*MCPoint->GetPx()+MCPoint->GetPy()*MCPoint->GetPy()+MCPoint->GetPz()*MCPoint->GetPz());
689 int MCidTOP = MCPoint->GetTrackID();
690 if(iHit==0) MCPointHit =
MCPoint;
691 MCtrkID.push_back(MCidTOP);
693 if(verboseLevel>1) cout<<MCidTOP<<
" ";
701 if (astripdigi->
GetIndex(0) == -1) glNoisehit++;
702 if (astripdigi->
GetIndex(0) == -1)
continue;
704 MCpointMom =
sqrt(MCPoint->GetPx()*MCPoint->GetPx()+MCPoint->GetPy()*MCPoint->GetPy()+MCPoint->GetPz()*MCPoint->GetPz());
706 int MCidTOP = MCPoint->GetTrackID();
707 if(verboseLevel>1) cout<<MCidTOP<<
" ";
708 if(iHit==0) MCPointHit =
MCPoint;
716 if (astripdigiBot->
GetIndex(0) == -1) glNoisehit++;
717 if (astripdigiBot->
GetIndex(0) == -1)
continue;
725 int MCidBOT = MCPointBot->GetTrackID();
727 MCtrkID.push_back(MCidTOP);
728 MCtrkID.push_back(MCidBOT);
730 if(iHit==0) momMC1 = MCpointMom;
731 if(iHit==(Ntrkcandhits-1)) momMC2 = MCpointMom;
735 nmomMC->Fill(momMC0,momMC1,momMC2);
736 if(verboseLevel>1) cout<<
""<<endl;
741 for(Int_t
n=0;
n<MCtrkID.size();
n++) {
743 for(Int_t
m=
n+1;
m<MCtrkID.size();
m++)
748 MCtrkID[k] = MCtrkID[
n]; MCtrkID[
n] =
x;
753 Int_t prevID = MCtrkID[0];
754 for(
int nk=0;
nk<nParticles;
nk++){
756 MCtrk[
nk]=MCtrk[
nk]+1;
759 for(Int_t
n=1;
n<MCtrkID.size();
n++){
760 if(prevID<MCtrkID[
n]){
763 for(
int nk=0;
nk<nParticles;
nk++){
765 MCtrk[
nk]=MCtrk[
nk]+1;
770 ndiffIDCont[iN]=diffIDs;
771 hDiffIDs->Fill(diffIDs);
772 hntrkcandvsIDs->Fill(diffIDs,nTrkCandidates);
773 hnhitsvsIDs->Fill(diffIDs,Ntrkcandhits);
778 RECtrkMCid[iN] = MCtrkID[0];
782 vector<int> countMC_IDs(diffIDs);
785 for(Int_t n=0; n<MCtrkID.size(); n++) {
786 countMC_IDs[diffCount]++;
787 if(prevID<MCtrkID[n]){
792 int maxID=countMC_IDs[0];
794 for(
int kn=0;kn<diffIDs;kn++){
796 if(countMC_IDs[kn]>0.65*MCtrkID.size()){
798 ghostTrk[iN] =
false;
801 if(!goodTrk[iN]) ghostTrk[iN] =
true;
804 if(countMC_IDs[kn]>maxID){
805 maxID=countMC_IDs[kn];
811 for(Int_t n=0; n<MCtrkID.size(); n++) {
812 if(diffCount==posIDmax) RECtrkMCid[iN] = prevID;
813 if(prevID<MCtrkID[n]){
822 TVector3 posSeed = trkcand->getPosSeed();
823 TVector3 dirSeed = trkcand->getDirSeed();
824 hSeedThetaDiffIDs->Fill(diffIDs,dirSeed.Theta());
825 hSeedPhiDiffIDs->Fill(diffIDs,dirSeed.Phi());
829 TVector3 pos_prop_geane_trk = fRes->GetPosition();
831 Double_t phi_prop_geane_trk = fRes->GetPhi();
832 TVector3 pos_rec_trk,dir_rec_trk;
836 hRecGEANEX->Fill(pos_rec_trk.X(),pos_prop_geane_trk.X());
837 hRecGEANEY->Fill(pos_rec_trk.Y(),pos_prop_geane_trk.Y());
838 hRecGEANEZ->Fill(pos_rec_trk.Z(),pos_prop_geane_trk.Z());
839 hRecGEANER->Fill(pos_rec_trk.Perp(),pos_prop_geane_trk.Perp());
840 hRecGEANETheta->Fill(dir_rec_trk.Theta(), theta_prop_geane_trk);
841 hRecGEANEPhi->Fill(dir_rec_trk.Phi(), phi_prop_geane_trk);
842 hRecThetaPhi->Fill(dir_rec_trk.Theta(),dir_rec_trk.Phi());
844 hSeedGEANEX->Fill(posSeed.X(),pos_prop_geane_trk.X());
845 hSeedGEANEY->Fill(posSeed.Y(),pos_prop_geane_trk.Y());
846 hSeedGEANEZ->Fill(posSeed.Z(),pos_prop_geane_trk.Z());
847 hSeedGEANER->Fill(posSeed.Perp(),pos_prop_geane_trk.Perp());
848 hSeedGEANETheta->Fill(dirSeed.Theta(), theta_prop_geane_trk);
849 hSeedGEANEPhi->Fill(dirSeed.Phi(), phi_prop_geane_trk);
850 hSeedThetaPhi->Fill(dirSeed.Theta(),dir_rec_trk.Phi());
856 hDiffIDsPointX->Fill(diffIDs,PosRec.X());
857 hDiffIDsPointY->Fill(diffIDs,PosRec.Y());
858 hDiffIDsPointZ->Fill(diffIDs,PosRec.Z());
860 fRes->GetMARSCov(CovGEANELAB);
868 hchi2Errx->Fill(chi2,errX);
869 hchi2Erry->Fill(chi2,errY);
874 int MCidforREC = RECtrkMCid[iN];
888 TVector3 errMomBP(errPx,errPy,errPz);
891 Double_t err_lyambda = fRes->GetDLambda();
892 if(err_lyambda==0) err_lyambda = errMomBP.Theta();
896 if(err_phi==0) err_phi=errMomBP.Phi();
897 Double_t errMomRecBP = fRes->GetDQp();
900 TVector3 MomRecBP = fRes->GetMomentum();
904 Double_t resTheta = thetaBP-thetaMC;
906 double resMom = MomRecBP.Mag()-MomMC.Mag();
907 hgoodTheta->Fill(thetaMC);
908 hgoodPhi->Fill(phiMC);
909 hgoodPhiTheta->Fill(thetaMC,phiMC);
910 hgoodThetachi2->Fill(chi2,thetaMC);
911 hgoodPhichi2->Fill(chi2,phiMC);
913 hMCThetaGEANETheta->Fill(thetaMC,thetaBP);
914 hMCPhiGEANEPhi->Fill(phiMC,phiBP);
915 hMCThetaResTheta->Fill(thetaMC,thetaMC-thetaBP);
916 hMCPhiResPhi->Fill(phiMC,phiMC-phiBP);
917 hResPointX->Fill(PosRec.X());
918 hResPointY->Fill(PosRec.Y());
919 hResDCA->Fill(PosRec.Mag());
921 hErrDCA->Fill(errPCA);
922 hPullDCA->Fill(PosRec.Mag()/errPCA);
923 hPointXY->Fill(-PosRec.X(), -PosRec.Y());
924 hPointXYcut->Fill(-PosRec.X(), -PosRec.Y());
925 hResPointZ->Fill(-PosRec.Z());
926 hErrPointX->Fill(errX);
927 hErrPointY->Fill(errY);
928 hErrLinPointX->Fill(errXlin);
929 hErrLinPointY->Fill(errYlin);
930 hErrPointXY->Fill(errX,errY);
931 hErrPointZ->Fill(errZ);
932 hPullPointX->Fill(-PosRec.X()/errX);
933 hPullPointY->Fill(-PosRec.Y()/errY);
934 hPullPointZ->Fill(-PosRec.Z()/errZ);
935 hPullPointXphi->Fill(phiMC,(-PosRec.X()/errX));
936 hPullPointYphi->Fill(phiMC,(-PosRec.Y()/errY));
937 hPullPointXtheta->Fill(thetaMC,(-PosRec.X()/errX));
938 hPullPointYtheta->Fill(thetaMC,(-PosRec.Y()/errY));
940 hResPointPx->Fill(MomMC.X()-MomRecBP.X());
941 hResPointPy->Fill(MomMC.Y()-MomRecBP.Y());
942 hResPointPz->Fill(MomMC.Z()-MomRecBP.Z());
943 hErrPointPx->Fill(errPx);
944 hPullPointPx->Fill((MomMC.X()-MomRecBP.X())/errPx);
945 hErrPointPy->Fill(errPy);
946 hPullPointPy->Fill((MomMC.Y()-MomRecBP.Y())/errPy);
947 hErrPointPz->Fill(errPz);
948 hPullPointPz->Fill((MomMC.Z()-MomRecBP.Z())/errPz);
951 hResMom->Fill(resMom);
952 hErrMom->Fill(errMomRecBP);
953 hPullMom->Fill(resMom/errMomRecBP);
954 hResTheta->Fill(resTheta);
955 nsectors->Fill(resTheta,trkSensor);
956 hErrTheta->Fill(err_lyambda);
957 hPullTheta->Fill(resTheta/err_lyambda);
958 hResPhi->Fill(resPhi);
959 hErrPhi->Fill(err_phi);
960 hPullPhi->Fill(resPhi/err_phi);
961 hResZResPhi->Fill(resPhi,PosRec.Z());
963 Double_t angMCRec = MomMC.Angle(MomRecBP);
964 hangMCRec->Fill(angMCRec);
969 for(Int_t jk=0; jk< nParticles;jk++){
974 double diffTheta=
fabs(MomMC.Theta()-thetaBP)/err_lyambda;
975 double diffPhi=
fabs(MomMC.Phi()-phiBP)/err_phi;
977 if(
fabs(MomMC.Phi())<0.14 ||
fabs(MomMC.Phi())>3){
978 double phiMC1 = -MomMC.Phi();
979 double diffPhi2=
fabs(phiMC1-phiBP)/err_phi;
980 if(diffPhi2<diffPhi) diffPhi = diffPhi2;
983 hntrkmissedPhiTheta->Fill(diffTheta,diffPhi);
984 if(diffTheta<4. && diffPhi<4.) goodRectrk++;
988 nrecpointall->Fill(pos_prop_geane_trk.X(),pos_prop_geane_trk.Y(),pos_prop_geane_trk.Z(),
989 pos_rec_trk.X(),pos_rec_trk.Y(),pos_rec_trk.Z(),
990 posSeed.X(),posSeed.Y(),posSeed.Z(),chi2);
991 nrecdirall->Fill(MomMC.X()/MomMC.Mag(),MomMC.Y()/MomMC.Mag(),MomMC.Z()/MomMC.Mag(),MomRecBP.X()/MomRecBP.Mag(),MomRecBP.Y()/MomRecBP.Mag(),MomRecBP.Z()/MomRecBP.Mag(),
992 dir_rec_trk.X(),dir_rec_trk.Y(),dir_rec_trk.Z(),
993 dirSeed.X(),dirSeed.Y(),dirSeed.Z());
1017 double xTrue = MCPointHit->GetX();
1018 double yTrue = MCPointHit->GetY();
1019 double zTrue = MCPointHit->GetZ();
1020 TVector3 vtxLumiMC = TVector3(xTrue,yTrue,zTrue);
1023 double pxTrue = MCPointHit->GetPx();
1024 double pyTrue = MCPointHit->GetPy();
1025 double pzTrue = MCPointHit->GetPz();
1026 TVector3 dirLumiMC = TVector3(pxTrue,pyTrue,pzTrue);
1028 dirLumiMC *=1./dirLumiMC.Mag();
1030 double dz = -zTrue+vtxLumi.Z();
1032 double dx = dirLumiMC.X()*
dz;
1033 double dy = dirLumiMC.Y()*
dz;
1034 vtxLumiMC += TVector3(dx,dy,dz);
1036 hResLumiTrkMom->Fill(dirLumiMC.Mag()-dirLumi.Mag());
1037 hResLumiTrkTheta->Fill(dirLumiMC.Theta()-dirLumi.Theta());
1038 hResLumiTrkPhi->Fill(dirLumiMC.Phi()-dirLumi.Phi());
1039 hResLumiTrkThetaPull->Fill((dirLumiMC.Theta()-dirLumi.Theta())/dirLumiErr.Theta());
1041 hResLumiTrkPhiPull->Fill((dirLumiMC.Phi()-dirLumi.Phi())/dirLumiErr.Phi());
1043 hResLumiTrkPointX->Fill(vtxLumiMC.X()-vtxLumi.X());
1044 hResLumiTrkPointY->Fill(vtxLumiMC.Y()-vtxLumi.Y());
1045 hResLumiTrkPointZ->Fill(vtxLumiMC.Z()-vtxLumi.Z());
1047 hResLumiTrkPointPx->Fill(dirLumiMC.X()-dirLumi.X());
1048 hResLumiTrkPointPy->Fill(dirLumiMC.Y()-dirLumi.Y());
1049 hResLumiTrkPointPz->Fill(dirLumiMC.Z()-dirLumi.Z());
1051 hResLumiTrkPointXPull->Fill((vtxLumiMC.X()-vtxLumi.X())/vtxLumiErr.X());
1052 hResLumiTrkPointYPull->Fill((vtxLumiMC.Y()-vtxLumi.Y())/vtxLumiErr.Y());
1053 hResLumiTrkPointZPull->Fill((vtxLumiMC.Z()-vtxLumi.Z())/vtxLumiErr.Z());
1055 hResLumiTrkPointPxPull->Fill((dirLumiMC.X()-dirLumi.X())/dirLumiErr.X());
1056 hResLumiTrkPointPyPull->Fill((dirLumiMC.Y()-dirLumi.Y())/dirLumiErr.Y());
1057 hResLumiTrkPointPzPull->Fill((dirLumiMC.Z()-dirLumi.Z())/dirLumiErr.Z());
1059 hMCThetaResSeedTheta->Fill(dirLumiMC.Theta(),(dirLumiMC.Theta()-dirLumi.Theta()));
1060 hMCPhiResSeedPhi->Fill(dirLumiMC.Phi(),(dirLumiMC.Phi()-dirLumi.Phi()));
1066 for(
int nk=0;
nk<numTrk;
nk++){
1067 hntrkMCtrkID->Fill(
nk,MCtrk[
nk]);
1068 hchi2MCdiffID->Fill(chi2Cont[nk],ndiffIDCont[nk]);
1071 hntrkgood_I->Fill(goodRectrk);
1072 if((nMCtracks-goodRectrk)>0) hntrkmissed_I->Fill(nMCtracks-goodRectrk);
1073 if((nGeaneTrks-goodRectrk)>0) hntrkghost_I->Fill(nGeaneTrks-goodRectrk);
1075 cout<<nMCtracks<<
" trks per event were simulated and "<<nGeaneTrks<<
" were reconstructed"<<endl;
1076 cout<<
"-- (I) dPhi\dTheta -------------------------"<<endl;
1077 cout<<
"Good trks: "<<goodRectrk<<
" missed: "<<nMCtracks-goodRectrk<<
" ghost: "<<nGeaneTrks-goodRectrk<<endl;
1078 cout<<
"--------------------------------"<<endl;
1081 int goodRecII=0, ghostRecII=0;
1082 for (Int_t iN=0; iN<nGeaneTrks; iN++){
1093 FairTrackParH *fRes = (FairTrackParH*)geaneArray->At(iN);
1094 Double_t lyambda = fRes->GetLambda();
1097 TVector3 MomRecBP = fRes->GetMomentum();
1098 TVector3 PosBP = fRes->GetPosition();
1099 ntuprecTrk->Fill(PosBP.X(),PosBP.Y(),PosBP.Z(),MomRecBP.Mag(),thetaBP,phiBP,trkType);
1101 hntrkgood_II->Fill(goodRecII);
1102 if(ghostRecII>0) hntrkghost_II->Fill(ghostRecII);
1103 if((nMCtracks-goodRecII)>0){
1104 hntrkmissed_II->Fill(nMCtracks-goodRecII);
1107 for(
int imc=0;imc<nParticles;imc++){
1109 for(
int irec=0;irec<nGeaneTrks;irec++){
1110 int mc_comp = RECtrkMCid[irec];
1111 if(mc_comp==imc) missTrk=
false;
1118 if(missTrk) trkQ=-1;
1120 ntupMCTrk->Fill(PosMC.X(),PosMC.Y(),PosMC.Z(),MomMC.Mag(),MomMC.Theta(),MomMC.Phi(),trkQ,nRecHits);
1124 cout<<
"-- (II) Hits matching -------------------------"<<endl;
1125 cout<<
"Good trks: "<<goodRecII<<
" missed: "<<nMCtracks-goodRecII<<
" ghost: "<<ghostRecII<<endl;
1126 cout<<
"--------------------------------"<<endl;
1133 hntrk->Fill(nRecGEANEtrk);
1136 for(Int_t jk=0; jk< nParticles;jk++){
1143 hallTheta->Fill(MomMC.Theta());
1144 hallPhi->Fill(MomMC.Phi());
1145 hallPhiTheta->Fill(MomMC.Theta(),MomMC.Phi());
1165 TCanvas *
c1 =
new TCanvas(
"IDsINFO");
1168 hnRecnMC->Draw(
"colz");
1171 hntrk->SetLineColor(2);
1172 hntrk->Draw(
"same");
1178 hnhitsvsIDs->Draw(
"colz");
1183 TH1F *heffTheta = (TH1F*)hgoodTheta->Clone(
"heffTheta");
1184 heffTheta->SetTitle(
"Efficiency vs. #theta");
1185 heffTheta->Divide(hallTheta);
1186 TH1F *heffPhi = (TH1F*)hgoodPhi->Clone(
"heffPhi");
1187 heffPhi->SetTitle(
"Efficiency vs. #phi");
1188 heffPhi->Divide(hallPhi);
1190 TH2F *heffPhiTheta = (TH2F*)hgoodPhiTheta->Clone(
"heffPhiTheta");
1191 heffPhiTheta->SetTitle(
"Efficiency #phi & #theta");
1192 heffPhiTheta->Divide(hallPhiTheta);
1194 TCanvas *
c2 =
new TCanvas(
"EffINFO");
1197 hallTheta->SetLineWidth(2);
1198 hallTheta->SetFillStyle(3354);
1199 hallTheta->SetFillColor(kBlack);
1201 hgoodTheta->SetLineWidth(2);
1202 hgoodTheta->SetLineColor(2);
1203 hgoodTheta->SetFillStyle(3690);
1204 hgoodTheta->SetFillColor(kRed);
1205 hgoodTheta->Draw(
"same");
1207 heffTheta->SetMinimum(0.9);
1210 hallPhiTheta->Draw(
"colz");
1212 hallPhi->SetLineWidth(2);
1213 hallPhi->SetFillStyle(3354);
1214 hallPhi->SetFillColor(kBlack);
1216 hgoodPhi->SetLineWidth(2);
1217 hgoodPhi->SetLineColor(2);
1218 hgoodPhi->SetFillColor(kRed);
1219 hgoodPhi->SetFillStyle(3690);
1220 hgoodPhi->Draw(
"same");
1222 heffPhi->SetMinimum(0.9);
1225 heffPhiTheta->Draw(
"colz");
1230 TF1 *funrp =
new TF1(
"fitrp",
"gaus",-1e-5,1e-5);
1231 funrp->SetParameters(100,0,3e-3);
1232 funrp->SetParNames(
"Constant",
"Mean",
"Sigma");
1234 TF1 *funrth =
new TF1(
"fitrth",
"gaus",-0.01,0.01);
1235 funrth->SetParameters(100,0,3e-3);
1236 funrth->SetParNames(
"Constant",
"Mean",
"Sigma");
1238 TF1 *funrphi =
new TF1(
"fitrphi",
"gaus",-1,1);
1239 funrphi->SetParameters(100,0,3e-3);
1240 funrphi->SetParNames(
"Constant",
"Mean",
"Sigma");
1242 TF1 *funp =
new TF1(
"fitp",
"gaus",-20,20);
1243 funp->SetParameters(100,0,3e-3);
1244 funp->SetParNames(
"Constant",
"Mean",
"Sigma");
1246 TCanvas *
c3 =
new TCanvas(
"ResMomINFO");
1249 hResMom->Fit(funrp,
"r");
1252 hResTheta->Fit(funrth,
"r");
1255 hResPhi->Fit(funrphi,
"r");
1261 hPullTheta->Fit(funp,
"r");
1264 hPullPhi->Fit(funp,
"r");
1277 TF1 *funcoord =
new TF1(
"fitcoord",
"gaus",-1,1.);
1278 funcoord->SetParameters(1e4,0,1e-1);
1279 funcoord->SetParNames(
"Constant",
"Mean",
"Sigma");
1282 funp->SetParameters(100,0,1);
1283 funp->SetParNames(
"Constant",
"Mean",
"Sigma");
1285 TCanvas *
c4 =
new TCanvas(
"ResPCAINFO");
1288 hResPointX->Fit(funcoord,
"r");
1291 hResPointY->Fit(funcoord,
"r");
1294 hResPointZ->Fit(funcoord,
"r");
1303 hPullPointX->Fit(funp,
"r");
1304 hPullPointX->Draw();
1306 hPullPointY->Fit(funp,
"r");
1307 hPullPointY->Draw();
1309 hPullPointZ->Fit(funp,
"r");
1310 hPullPointZ->Draw();
1314 TCanvas *c42 =
new TCanvas(
"ResMomPointINFO");
1317 hResPointPx->Fit(funcoord,
"r");
1318 hResPointPx->Draw();
1320 hResPointPy->Fit(funcoord,
"r");
1321 hResPointPy->Draw();
1323 hResPointPz->Fit(funcoord,
"r");
1324 hResPointPz->Draw();
1326 hErrPointPx->Draw();
1328 hErrPointPy->Draw();
1330 hErrPointPz->Draw();
1332 hPullPointPx->Fit(funp,
"r");
1333 hPullPointPx->Draw();
1335 hPullPointPy->Fit(funp,
"r");
1336 hPullPointPy->Draw();
1338 hPullPointPz->Fit(funp,
"r");
1339 hPullPointPz->Draw();
1345 TCanvas *c41 =
new TCanvas(
"ResLinINFO");
1348 hErrLinPointX->Draw();
1350 hErrLinPointY->Draw();
1365 TCanvas *
c6 =
new TCanvas(
"VertexINFO");
1370 hPointXYcut->Draw();
1372 hErrPointXY->Draw();
1376 TCanvas *
c7 =
new TCanvas(
"GEANEvsRecINFO");
1385 hRecGEANETheta->Draw();
1387 hRecGEANEPhi->Draw();
1389 hRecThetaPhi->Draw();
1393 TCanvas *
c8 =
new TCanvas(
"GEANEvsCandINFO");
1396 hSeedGEANEX->Draw();
1398 hSeedGEANEY->Draw();
1400 hSeedGEANEZ->Draw();
1402 hSeedGEANETheta->Draw();
1403 TLine *uplim =
new TLine(0.05, 0, 0.05, 0.1);
1404 TLine *downlim =
new TLine(0.03, 0, 0.03, 0.1);
1405 uplim->SetLineColor(kRed);
1406 downlim->SetLineColor(kRed);
1407 uplim->SetLineWidth(2);
1408 downlim->SetLineWidth(2);
1413 Int_t binmax = hSeedGEANETheta->GetNbinsX();
1414 for(
int bin=0;bin<binmax;bin++){
1415 Double_t binCenter = hSeedGEANETheta->GetBinCenter(bin);
1422 for(
int bin=0;bin<binmax;bin++){
1423 Double_t binCenter = hSeedGEANETheta->GetBinCenter(bin);
1430 Double_t nall = hSeedGEANETheta->Integral(0, binmax);
1431 Double_t neff = hSeedGEANETheta->Integral(binx1, binx2);
1433 cout<<
"Total number of track-candidate = "<<nall<<endl;
1437 hSeedGEANEPhi->Draw();
1439 hSeedThetaPhi->Draw();
1443 TCanvas *
c9 =
new TCanvas(
"DCA");
1463 hntrkcandvsIDs->Write();
1473 hPullTheta->Write();
1476 hPointXYcut->Write();
1477 hSeedGEANEX->Write();
1478 hSeedGEANEY->Write();
1479 hSeedGEANEZ->Write();
1480 hSeedGEANER->Write();
1481 hSeedGEANETheta->Write();
1482 hSeedGEANEPhi->Write();
1483 hSeedThetaPhi->Write();
1484 hRecGEANEX->Write();
1485 hRecGEANEY->Write();
1486 hRecGEANEZ->Write();
1490 TCanvas *
c10 =
new TCanvas(
"ThetaPhiDistr");
1501 hMCThetaResTheta->Draw(
"colz");
1503 hMCPhiResPhi->Draw(
"colz");
1505 TH1F *fdiffThetaMean;
1506 TH1F *fdiffThetaSigma;
1507 TH1F *fdiffThetaChi2;
1508 hMCThetaResTheta->FitSlicesY();
1509 fdiffThetaMean = (TH1F*)gDirectory->Get(
"hMCThetaResTheta_1");
1510 fdiffThetaSigma = (TH1F*)gDirectory->Get(
"hMCThetaResTheta_2");
1511 fdiffThetaChi2= (TH1F*)gDirectory->Get(
"hMCThetaResTheta_chi2");
1513 TH1F *fdiffPhiSigma;
1515 hMCPhiResPhi->FitSlicesY();
1516 fdiffPhiMean = (TH1F*)gDirectory->Get(
"hMCPhiResPhi_1");
1517 fdiffPhiSigma = (TH1F*)gDirectory->Get(
"hMCPhiResPhi_2");
1518 fdiffPhiChi2 = (TH1F*)gDirectory->Get(
"hMCPhiResPhi_chi2");
1520 fdiffThetaMean->Draw();
1522 fdiffPhiMean->Draw();
1524 fdiffThetaSigma->Draw();
1526 fdiffPhiSigma->Draw();
1528 fdiffThetaChi2->Draw();
1530 fdiffPhiChi2->Draw();
1534 TCanvas *
c11 =
new TCanvas(
"HitsUsing");
1537 hntrkMCtrkID->Draw(
"colz");
1547 TCanvas *c12 =
new TCanvas(
"TrkLin_and_MC");
1550 hResLumiTrkMom->Fit(funrp,
"r");
1551 hResLumiTrkMom->Draw();
1553 hResLumiTrkTheta->Fit(funrth,
"r");
1554 hResLumiTrkTheta->Draw();
1556 hResLumiTrkPhi->Fit(funrphi,
"r");
1557 hResLumiTrkPhi->Draw();
1559 hResLumiTrkPointX->Fit(funcoord,
"r");
1560 hResLumiTrkPointX->Draw();
1562 hResLumiTrkPointY->Fit(funcoord,
"r");
1563 hResLumiTrkPointY->Draw();
1565 hResLumiTrkPointZ->Fit(funcoord,
"r");
1566 hResLumiTrkPointZ->Draw();
1568 hResLumiTrkPointPx->Fit(funp,
"r");
1569 hResLumiTrkPointPx->Draw();
1571 hResLumiTrkPointPy->Fit(funp,
"r");
1572 hResLumiTrkPointPy->Draw();
1574 hResLumiTrkPointPz->Fit(funp,
"r");
1575 hResLumiTrkPointPz->Draw();
1579 TCanvas *c13 =
new TCanvas(
"TrkLin_and_MC_pulls");
1582 hResLumiTrkPointXPull->Fit(funp,
"r");
1583 hResLumiTrkPointXPull->Draw();
1585 hResLumiTrkPointYPull->Fit(funp,
"r");
1586 hResLumiTrkPointYPull->Draw();
1588 hResLumiTrkPointZPull->Fit(funp,
"r");
1589 hResLumiTrkPointZPull->Draw();
1591 hResLumiTrkPointPxPull->Fit(funp,
"r");
1592 hResLumiTrkPointPxPull->Draw();
1594 hResLumiTrkPointPyPull->Fit(funp,
"r");
1595 hResLumiTrkPointPyPull->Draw();
1597 hResLumiTrkPointPzPull->Fit(funp,
"r");
1598 hResLumiTrkPointPzPull->Draw();
1602 TCanvas *
c14 =
new TCanvas(
"TrkIP_andLin_and_MC_pulls");
1607 hPullPointX->SetLineWidth(2);
1608 hPullPointX->SetLineColor(12);
1609 hPullPointX->SetFillColor(12);
1610 hPullPointX->SetFillStyle(3003);
1611 hPullPointX->Draw();
1612 hResLumiTrkPointXPull->SetLineColor(4);
1613 hResLumiTrkPointXPull->SetLineWidth(2);
1614 hResLumiTrkPointXPull->Draw(
"same");
1616 hPullPointY->SetLineWidth(2);
1617 hPullPointY->SetLineColor(12);
1618 hPullPointY->SetFillColor(12);
1619 hPullPointY->SetFillStyle(3003);
1620 hPullPointY->Draw();
1621 hResLumiTrkPointYPull->SetLineColor(4);
1622 hResLumiTrkPointYPull->SetLineWidth(2);
1623 hResLumiTrkPointYPull->Draw(
"same");
1625 hPullPointZ->SetLineWidth(2);
1626 hPullPointZ->SetLineColor(12);
1627 hPullPointZ->SetFillColor(12);
1628 hPullPointZ->SetFillStyle(3003);
1629 hPullPointZ->Draw();
1630 hResLumiTrkPointZPull->SetLineColor(4);
1631 hResLumiTrkPointZPull->SetLineWidth(2);
1632 hResLumiTrkPointZPull->Draw(
"same");
1634 hPullPointPx->SetLineWidth(2);
1635 hPullPointPx->SetLineColor(12);
1636 hPullPointPx->SetFillColor(12);
1637 hPullPointPx->SetFillStyle(3003);
1638 hPullPointPx->Draw();
1639 hResLumiTrkPointPxPull->SetLineColor(4);
1640 hResLumiTrkPointPxPull->SetLineWidth(2);
1641 hResLumiTrkPointPxPull->Draw(
"same");
1643 hPullPointPy->SetLineWidth(2);
1644 hPullPointPy->SetLineColor(12);
1645 hPullPointPy->SetFillColor(12);
1646 hPullPointPy->SetFillStyle(3003);
1647 hPullPointPy->Draw();
1648 hResLumiTrkPointPyPull->SetLineColor(4);
1649 hResLumiTrkPointPyPull->SetLineWidth(2);
1650 hResLumiTrkPointPyPull->Draw(
"same");
1652 hPullPointPz->SetLineWidth(2);
1653 hPullPointPz->SetLineColor(12);
1654 hPullPointPz->SetFillColor(12);
1655 hPullPointPz->SetFillStyle(3003);
1656 hPullPointPz->Draw();
1657 hResLumiTrkPointPzPull->SetLineColor(4);
1658 hResLumiTrkPointPzPull->SetLineWidth(2);
1659 hResLumiTrkPointPzPull->Draw(
"same");
1664 hSeedThetaDiffIDs->Write();
1665 hSeedPhiDiffIDs->Write();
1666 hMCThetaGEANETheta->Write();
1667 hMCPhiGEANEPhi->Write();
1668 hMCThetaResTheta->Write();
1669 hMCPhiResPhi->Write();
1671 hDiffIDsPointX->Write();
1672 hDiffIDsPointY->Write();
1673 hDiffIDsPointZ->Write();
1675 hResPointPx->Write();
1676 hErrPointPx->Write();
1677 hPullPointPx->Write();
1678 hResPointPy->Write();
1679 hErrPointPy->Write();
1680 hPullPointPy->Write();
1681 hResPointPz->Write();
1682 hErrPointPz->Write();
1683 hPullPointPz->Write();
1685 hResPointX->Write();
1686 hErrPointX->Write();
1687 hPullPointX->Write();
1688 hResPointY->Write();
1689 hErrPointY->Write();
1690 hPullPointY->Write();
1691 hResPointZ->Write();
1692 hErrPointZ->Write();
1693 hPullPointZ->Write();
1695 hMCtrkvshits->Write();
1696 hntrkMCtrkID->Write();
1697 hchi2nTrkCand->Write();
1698 hgoodPhichi2->Write();
1699 hgoodThetachi2->Write();
1700 hchi2MCdiffID->Write();
1701 hnhitsvsIDs->Write();
1702 hResLumiTrkMom->Write();
1703 hResLumiTrkTheta->Write();
1704 hResLumiTrkPhi->Write();
1705 hResLumiTrkThetaPull->Write();
1706 hResLumiTrkPhiPull->Write();
1707 hResLumiTrkPointX->Write();
1708 hResLumiTrkPointY->Write();
1709 hResLumiTrkPointZ->Write();
1710 hResLumiTrkPointPx->Write();
1711 hResLumiTrkPointPy->Write();
1712 hResLumiTrkPointPz->Write();
1713 hResLumiTrkPointXPull->Write();
1714 hResLumiTrkPointYPull->Write();
1715 hResLumiTrkPointZPull->Write();
1716 hResLumiTrkPointPxPull->Write();
1717 hResLumiTrkPointPyPull->Write();
1718 hResLumiTrkPointPzPull->Write();
1720 hResZResPhi->Write();
1721 nrecpointall->Write();
1722 nrecdirall->Write();
1724 TCanvas *c134 =
new TCanvas(
"TrkLinparams");
1740 hMCThetaResSeedTheta->Write();
1741 hMCPhiResSeedPhi->Write();
1742 hntrkmissedPhiTheta->Write();
1743 hntrkmissed_I->Write();
1744 hntrkghost_I->Write();
1745 hntrkmissed_II->Write();
1746 hntrkghost_II->Write();
1747 hntrkgood_I->Write();
1748 hntrkgood_II->Write();
1749 heffPhiTheta->Write();
1751 ntuprecTrk->Write();
1755 hPullPointXphi->Write();
1756 hPullPointYphi->Write();
1757 hPullPointXtheta->Write();
1758 hPullPointYtheta->Write();
1760 cout<<
"Number of events with low number of hits (less then 3 per trk): "<<glBadEv<<endl;
1761 cout<<
"Number of trks where GEANE failed: "<<glBADGEANE<<endl;
1762 cout<<
"Total number of noise hits = "<<glNoisehit<<endl;
Double_t GetChiSquare() const
TVector3 GetStartVec() const
friend F32vec4 sqrt(const F32vec4 &a)
static T Sqrt(const T &x)
Int_t GetIndex(int i=0) const
static PndLmdDim * Instance()
PndTrackCandHit GetSortedHit(UInt_t i)
Class for digitised strip hits.
TVector3 GetMomentum() const
void GetPar(Double_t *par) const
void GetParErr(Double_t *errpar)
Int_t GetDigiIndex(Int_t i) const
void Get_sensor_by_id(const int sensor_id, int &ihalf, int &iplane, int &imodule, int &iside, int &idie, int &isensor)
Int_t GetBotIndex() const
friend F32vec4 fabs(const F32vec4 &a)
TVector3 GetDirectionVec() const
Data class to store the digi output of a pixel module.
Int_t GetClusterIndex() const
TVector3 GetStartVertex() const
Int_t GetSensorID() const
TVector3 GetStartErrVec()
TVector3 GetDirectionErrVec()