18 #include<TApplication.h>
24 #include<TClonesArray.h>
35 #include<TStopwatch.h>
54 #include<FairRunAna.h>
55 #include<FairRootManager.h>
57 #include<FairRtdbRun.h>
58 #include<FairRuntimeDb.h>
59 #include<FairParRootFileIo.h>
60 #include<FairLogger.h>
61 #include<FairTrackParH.h>
66 int main(
int __argc,
char *__argv[]) {
80 std::string startStr=
"", momStr=
"", nStr=
"", pathStr=
"", verbStr=
"" , mcTrkStr=
"", useNewDStr=
"",usedMHStr=
"";
82 if( __argc>1 && ( strcmp( __argv[1],
"-help" ) == 0
83 || strcmp( __argv[1],
"--help" ) == 0 ) ){
85 std::cout <<
"This is script for comparision reconstructed and simulated tracks with parameters\n"
87 <<
"-n Number of events \n"
88 <<
"-mom Beam Momentum \n"
89 <<
"-path path to the file(s) \n"
90 <<
"-v verbose Level (if>0, print out some information) \n"
95 while ((optind < (__argc-1) ) && (__argv[optind][0]==
'-')) {
97 std::string sw = __argv[optind];
100 startStr = __argv[optind];
105 nStr = __argv[optind];
110 pathStr = __argv[optind];
115 momStr = __argv[optind];
120 verbStr = __argv[optind];
124 std::cout<<
"Unknown switch: "
125 << __argv[optind] <<std::endl;
129 while ( (optind < __argc ) && __argv[optind][0]!=
'-' ) optind++;
132 std::stringstream startSStr(startStr), momSStr(momStr), nSStr(nStr), pathSStr(pathStr), verbSStr(verbStr);
139 cout<<
"====================================="<<endl;
140 cout<<
"some INFO about this macro params: "<<endl;
141 cout<<
"expected number of events: "<<nEvents<<endl;
142 cout<<
"Pbeam: "<<Plab<<endl;
143 cout<<
"Will be used Path: "<<storePath<<endl;
144 cout<<
"====================================="<<endl;
146 gROOT->Macro(
"$VMCWORKDIR/gconfig/rootlogon.C");
147 gSystem->Load(
"libLmdTrk");
157 TString simMC=storePath+
"/Lumi_MC_";
160 TChain tMC(
"pndsim");
166 TChain tdigiHits(
"pndsim");
167 tdigiHits.Add(DigiFile);
169 TString recHit=storePath+
"/Lumi_reco";
174 TChain tHits(
"pndsim");
177 TString recHitmerged=storePath+
"/Lumi_recoMerged_";
179 recHitmerged +=
".root";
180 TChain tHitsMerged(
"pndsim");
181 tHitsMerged.Add(recHitmerged);
184 TString trkCand = storePath+
"/Lumi_TCand_";
187 TChain tTrkCand(
"pndsim");
188 tTrkCand.Add(trkCand);
191 TChain tTrkRec(
"pndsim");
192 recTrack = storePath+
"/Lumi_Track_";
195 tTrkRec.Add(recTrack);
197 TString geaneFile = storePath+
"/Lumi_Geane_";
199 geaneFile +=
".root";
200 TChain tgeane(
"pndsim");
201 tgeane.Add(geaneFile);
206 TString out=storePath+
"/Lumi_compare_MC_and_REC_trks_";
209 TFile *
f =
new TFile(out,
"RECREATE");
213 TClonesArray* true_tracks=
new TClonesArray(
"PndMCTrack");
214 tMC.SetBranchAddress(
"MCTrack",&true_tracks);
216 TClonesArray* true_points=
new TClonesArray(
"PndSdsMCPoint");
217 tMC.SetBranchAddress(
"LMDPoint",&true_points);
222 TClonesArray* fStripClusterArray;
223 fStripClusterArray =
new TClonesArray(
"PndSdsClusterPixel");
224 tHits.SetBranchAddress(
"LMDPixelClusterCand",&fStripClusterArray);
227 TClonesArray* fStripDigiArray;
228 fStripDigiArray =
new TClonesArray(
"PndSdsDigiPixel");
229 tdigiHits.SetBranchAddress(
"LMDPixelDigis",&fStripDigiArray);
233 TClonesArray* rechit_array;
234 rechit_array =
new TClonesArray(
"PndSdsMergedHit");
235 tHitsMerged.SetBranchAddress(
"LMDHitsMerged",&rechit_array);
240 TClonesArray* trkcand_array=
new TClonesArray(
"PndTrackCand");
241 tTrkCand.SetBranchAddress(
"LMDTrackCand",&trkcand_array);
247 TClonesArray* rec_trk=
new TClonesArray(
"PndTrack");
248 tTrkRec.SetBranchAddress(
"LMDPndTrack",&rec_trk);
252 TClonesArray* geaneArray =
new TClonesArray(
"FairTrackParH");
253 tgeane.SetBranchAddress(
"GeaneTrackFinal",&geaneArray);
255 cout<<
"And we'll make some hists"<<endl;
257 double thetarange[2]={0.001,0.01};
258 double thetam = thetarange[0];
259 if(Plab<5) thetam = thetarange[1];
262 TH1 *hResMom =
new TH1F(
"hResMom",
"P_{MC}-P_{REC};#deltaP,GeV/c",1e3,-1e-4,1e-4);
263 TH1 *hErrMom =
new TH1F(
"hErrMom",
"#sigma_{P};#sigmaP,GeV/c",1e3,0,1e-3);
264 TH1 *hPullMom =
new TH1F(
"hPullMom",
"(P_{MC}-P_{REC})/#sigma_{P};",1e3,-1e1,1e1);
266 TH1 *hResTheta =
new TH1F(
"hResTheta",
"#theta_{MC}-#theta_{REC};#delta#theta,rad",1e2,-thetam,thetam);
267 TH2 *hThetaResTheta =
new TH2F(
"hThetaResTheta",
"#theta_{MC}-#theta_{REC};#theta,rad;#delta#theta,rad",2e1,0,1e-2,1e2,-thetam,thetam);
268 TH1 *hErrTheta =
new TH1F(
"hErrTheta",
"#sigma(#theta_{REC});#sigma,rad",1e3,0,10*thetam);
269 TH1 *hPullTheta =
new TH1F(
"hPullTheta",
"(#theta_{MC}-#theta_{REC})/#sigma_{#theta};",1e2,-10,10);
270 TH1 *hResPhi =
new TH1F(
"hResPhi",
"#phi_{MC}-#phi_{REC};#delta#phi,rad",2e3,-1.,1.);
271 TH1 *hErrPhi =
new TH1F(
"hErrPhi",
"#sigma(#phi_{REC});#sigma,rad",1e3,0,0.1);
272 TH1 *hPullPhi =
new TH1F(
"hPullPhi",
"(#phi_{MC}-#phi_{REC})/#sigma_{#phi};",1e2,-10,10);
274 TH1 *hResPointPx =
new TH1F(
"hResPointPx",
"Px_{MC}-Px_{REC};#deltaPx, GeV/c",1e2,-0.01,0.01);
275 TH1 *hErrPointPx =
new TH1F(
"hErrPointPx",
"#sigma_{Px};#sigmaPx, GeV/c",1e3,0,0.01);
276 TH1 *hPullPointPx =
new TH1F(
"hPullPointPx",
"(Px_{MC}-Px_{REC})/#sigma_{Px};(Px_{MC}-Px_{REC})/#sigma_{Px}",1e2,-10,10);
278 TH1 *hResPointPy =
new TH1F(
"hResPointPy",
"Py_{MC}-Py_{REC};#deltaPy, GeV/c",1e2,-0.01,0.01);
279 TH1 *hErrPointPy =
new TH1F(
"hErrPointPy",
"#sigma_{Py};#sigmaPy, GeV/c",1e3,0,0.01);
280 TH1 *hPullPointPy =
new TH1F(
"hPullPointPy",
"(Py_{MC}-Py_{REC})/#sigma_{Py};(Py_{MC}-Py_{REC})/#sigma_{Py}",1e2,-10,10);
282 TH1 *hResPointPz =
new TH1F(
"hResPointPz",
"Pz_{MC}-Pz_{REC};#deltaPz, GeV/c",1e2,-1e-3,1e-3);
283 TH1 *hErrPointPz =
new TH1F(
"hErrPointPz",
"#sigma_{Pz};#sigmaPz, GeV/c",1e3,0,1e-2);
284 TH1 *hPullPointPz =
new TH1F(
"hPullPointPz",
"(Pz_{MC}-Pz_{REC})/#sigma_{Pz};(Pz_{MC}-Pz_{REC})/#sigma_{Pz}",1e2,-10,10);
286 TH1 *hResPointX =
new TH1F(
"hResPointX",
"X_{MC}-X_{REC};#deltaX,cm",1e2,-2.,2.);
287 TH1 *hPullPointX =
new TH1F(
"hPullPointX",
"(X_{MC}-X_{REC})/#sigma_{X};(X_{MC}-X_{REC})/#sigma_{X}",1e2,-10,10);
288 TH1 *hResPointY =
new TH1F(
"hResPointY",
"Y_{MC}-Y_{REC};#deltaY,cm",1e2,-2.,2.);
289 TH1 *hPullPointY =
new TH1F(
"hPullPointY",
"(Y_{MC}-Y_{REC})/#sigma_{Y};(Y_{MC}-Y_{REC})/#sigma_{Y}",1e2,-10,10);
290 TH1 *hResPointZ =
new TH1F(
"hResPointZ",
"Z_{MC}-Z_{REC};#deltaZ,cm",1e3,-0.15,0.15);
291 TH1 *hPullPointZ =
new TH1F(
"hPullPointZ",
"(Z_{MC}-Z_{REC})/#sigma_{Z};(Z_{MC}-Z_{REC})/#sigma_{Z}",1e2,-10,10);
294 TH1 *hhits =
new TH1I(
"hhits",
"number of hits in trk",7,0,7);
295 TH1 *hchi2 =
new TH1F(
"hchi2",
"#chi^2 for reconstructed tracks;#chi^2;",1.5e2,0,15.);
296 TH1 *hResLumiTrkMom =
new TH1F(
"hResLumiTrkMom",
"P_{MC}-P_{REC}(near Lumi);#deltaP,GeV/c",1e3,-6e-7,6e-7);
297 TH1 *hResLumiTrkTheta =
new TH1F(
"hResLumiTrkTheta",
"#theta_{MC}-#theta_{REC}(near Lumi);#delta#theta,rad",1e3,-6e-3,6e-3);
298 TH1 *hResLumiTrkPhi =
new TH1F(
"hResLumiTrkPhi",
"#phi_{MC}-#phi_{REC}(near Lumi);#delta#phi,rad",2e3,-1e-1,1e-1);
299 TH1 *hResLumiTrkPointX =
new TH1F(
"hResLumiTrkPointX",
"X_{MC}-X_{REC}(near Lumi);#deltaX,cm",1e2,-0.02,0.02);
300 TH1 *hResLumiTrkPointY =
new TH1F(
"hResLumiTrkPointY",
"Y_{MC}-Y_{REC}(near Lumi);#deltaY,cm",1e2,-0.02,0.02);
301 TH1 *hResLumiTrkPointZ =
new TH1F(
"hResLumiTrkPointZ",
"Z_{MC}-Z_{REC}(near Lumi);#deltaZ,cm",1e2,-0.02,0.02);
303 TH1 *hResLumiTrkPointPx =
new TH1F(
"hResLumiTrkPointPx",
"Px_{MC}-Px_{REC}(near Lumi);#deltaPx, GeV/c",1e2,-0.01,0.01);
304 TH1 *hResLumiTrkPointPy =
new TH1F(
"hResLumiTrkPointPy",
"Py_{MC}-Py_{REC}(near Lumi);#deltaPy, GeV/c",1e2,-0.01,0.01);
305 TH1 *hResLumiTrkPointPz =
new TH1F(
"hResLumiTrkPointPz",
"Pz_{MC}-Pz_{REC}(near Lumi);#deltaPz, GeV/c",1e2,-0.001,0.001);
309 TH1 *hResLumiTrkPointXErr =
new TH1F(
"hResLumiTrkPointXErr",
"#sigma(X_{REC})(near Lumi);#sigma_{X},cm",1e2,0,0.02);
310 TH1 *hResLumiTrkPointYErr =
new TH1F(
"hResLumiTrkPointYErr",
"#sigma(Y_{REC})(near Lumi);#sigma_{Y},cm",1e2,0,0.02);
311 TH1 *hResLumiTrkPointZErr =
new TH1F(
"hResLumiTrkPointZErr",
"#sigma(Z_{REC})(near Lumi);#sigma_{Z},cm",1e2,0,0.02);
312 TH1 *hResLumiTrkPointPxErr =
new TH1F(
"hResLumiTrkPointPxErr",
"#sigma(Px_{REC})(near Lumi);#sigma_{Px}, GeV/c",1e2,0,0.01);
313 TH1 *hResLumiTrkPointPyErr =
new TH1F(
"hResLumiTrkPointPyErr",
"#sigma(Py_{REC})(near Lumi);#sigma_{Py}, GeV/c",1e2,0,0.01);
314 TH1 *hResLumiTrkPointPzErr =
new TH1F(
"hResLumiTrkPointPzErr",
"#sigma(Pz_{REC})(near Lumi);#sigma_{Pz}, GeV/c",1e2,0,0.001);
316 TH1 *hResLumiTrkPointXPull =
new TH1F(
"hResLumiTrkPointXPull",
"(X_{MC}-X_{REC})/#sigma (near Lumi) ;(X_{MC}-X_{REC})/#sigma",1e2,-10.,10.);
317 TH1 *hResLumiTrkPointYPull =
new TH1F(
"hResLumiTrkPointYPull",
"(Y_{MC}-Y_{REC})/#sigma (near Lumi);(Y_{MC}-Y_{REC})/#sigma",1e2,-10.,10.);
318 TH1 *hResLumiTrkPointZPull =
new TH1F(
"hResLumiTrkPointZPull",
"(Z_{MC}-Z_{REC})/#sigma (near Lumi);(Z_{MC}-Z_{REC})/#sigma",1e3,-100.,100.);
320 TH1 *hResLumiTrkPointPxPull =
new TH1F(
"hResLumiTrkPointPxPull",
"(Px_{MC}-Px_{REC})/#sigma (near Lumi);(Px_{MC}-Px_{REC})/#sigma",1e2,-10,10.);
321 TH1 *hResLumiTrkPointPyPull =
new TH1F(
"hResLumiTrkPointPyPull",
"(Py_{MC}-Py_{REC})/#sigma (near Lumi);(Py_{MC}-Py_{REC})/#sigma",1e2,-10,10);
322 TH1 *hResLumiTrkPointPzPull =
new TH1F(
"hResLumiTrkPointPzPull",
"(Pz_{MC}-Pz_{REC})/#sigma (near Lumi);(Pz_{MC}-Pz_{REC})/#sigma",1e2,-10,10);
323 TH1 *hResLumiTrkThetaPull =
new TH1F(
"hResLumiTrkThetaPull",
"(#theta_{MC}-#theta_{REC})/#sigma (near Lumi);#delta#theta, rad",1e2,-10,10);
324 TH1 *hResLumiTrkPhiPull =
new TH1F(
"hResLumiTrkPhiPull",
"(#phi_{MC}-#phi_{REC})/#sigma (near Lumi);#delta#phi, rad",1e2,-10,10);
328 TNtuple *nBadTrks =
new TNtuple(
"nBadTrks",
"Info about _bad_ rec.tracks ",
"xrec:yrec:zrec:pxrec:pyrec:pzrec:nrechits:xmc:ymc:zmc:pxmc:pymc:pzmc:mvID");
333 for (Int_t j=0; j<
nEvents; j++){
339 tTrkCand.GetEntry(j);
341 tdigiHits.GetEntry(j);
342 tHitsMerged.GetEntry(j);
343 const int nGeaneTrks = geaneArray->GetEntriesFast();
344 const int nParticles = true_tracks->GetEntriesFast();
345 const int numTrk = nGeaneTrks;
346 const int nRecHits = rechit_array->GetEntriesFast();
347 const int nMCHits = true_points->GetEntriesFast();
349 const int nTrkCandidates = trkcand_array->GetEntriesFast();
350 const int nRecTrks = rec_trk->GetEntriesFast();
352 cout<<
"Event #"<<j<<
" has "<<nParticles<<
" true particles, "<<
" out of it "<<nRecHits<<
" hits, "<<nTrkCandidates
353 <<
" trk-cands, "<<numTrk<<
" tracks and "<<nGeaneTrks<<
" geane Trks!"<<endl;
355 for (Int_t iN=0; iN<nGeaneTrks; iN++){
356 FairTrackParH *fRes = (FairTrackParH*)geaneArray->At(iN);
357 Double_t lyambda = fRes->GetLambda();
359 cout<<
"GEANE didn't propagate this trk!"<<endl;
361 nBadTrks->Fill(1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6);
363 if(lyambda==0)
continue;
366 TVector3 MomRecPCA = fRes->GetMomentum();
367 TVector3 MomRecPCAnotnorm = MomRecPCA;
368 MomRecPCA *= Plab/MomRecPCA.Mag();
369 TVector3 PosRecPCA = fRes->GetPosition();
373 TVector3 errMomRecPCA(errPx,errPy,errPz);
377 TVector3 errPosRecPCA(errX,errY,errZ);
385 double fLmPCA =
TMath::ASin(MomRecPCA.Z()/MomRecPCA.Mag());
388 Double_t fPPCA =
sqrt(MomRecPCA.X()*MomRecPCA.X()+MomRecPCA.Y()*MomRecPCA.Y()+MomRecPCA.Z()*MomRecPCA.Z());
389 Double_t fDPPCA= (2*MomRecPCA.X()*errMomRecPCA.X()+2*MomRecPCA.Y()*errMomRecPCA.Y()+2*MomRecPCA.Z()*errMomRecPCA.Z())/(2*fPPCA);
390 Double_t err_lyambda = (-((MomRecPCA.Z()*fDPPCA)/pow(fPPCA,2)) + errMomRecPCA.Z()/fPPCA)/
TMath::Sqrt(1 - pow(MomRecPCA.Z(),2)/pow(fPPCA,2));
391 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));
408 double chi2 = trkpnd->
GetChi2();
410 FairTrackParP fFittedTrkP = trkpnd->GetParamFirst();
411 TVector3 PosRecLMD(fFittedTrkP.GetX(),fFittedTrkP.GetY(),fFittedTrkP.GetZ());
412 TVector3 MomRecLMD(fFittedTrkP.GetPx(),fFittedTrkP.GetPy(),fFittedTrkP.GetPz());
413 MomRecLMD *=Plab/MomRecLMD.Mag();
414 double covMARS[6][6];
415 fFittedTrkP.GetMARSCov(covMARS);
416 TVector3 errMomRecLMD(
sqrt(covMARS[0][0]),
sqrt(covMARS[1][1]),
sqrt(covMARS[2][2]));
417 TVector3 errPosRecLMD(
sqrt(covMARS[3][3]),
sqrt(covMARS[4][4]),
sqrt(covMARS[5][5]));
420 double fLm =
TMath::ASin(MomRecLMD.Z()/MomRecLMD.Mag());
423 Double_t fP =
sqrt(MomRecLMD.X()*MomRecLMD.X()+MomRecLMD.Y()*MomRecLMD.Y()+MomRecLMD.Z()*MomRecLMD.Z());
424 Double_t fDP= (2*MomRecLMD.X()*errMomRecLMD.X()+2*MomRecLMD.Y()*errMomRecLMD.Y()+2*MomRecLMD.Z()*errMomRecLMD.Z())/(2*fP);
425 Double_t err_lyambdaLMD = (-((MomRecLMD.Z()*fDP)/pow(fP,2)) + errMomRecLMD.Z()/fP)/
TMath::Sqrt(1 - pow(MomRecLMD.Z(),2)/pow(fP,2));
426 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));
432 int candID = trkpnd->GetRefIndex();
434 const int Ntrkcandhits= trkcand->
GetNHits();
438 if(Ntrkcandhits<4)
continue;
439 hhits->Fill(Ntrkcandhits);
440 for (Int_t iHit = 0; iHit < Ntrkcandhits; iHit++){
451 int MCidTOP = MCPoint->GetTrackID();
459 cout<<
"REC trk contains hits from different MC trks! Skip this event."<<endl;
475 Double_t thetaMC = MomMCpca.Theta();
478 hResPointPx->Fill(MomMCpca.X()-MomRecPCA.X());
479 hResPointPy->Fill(MomMCpca.Y()-MomRecPCA.Y());
480 hResPointPz->Fill(MomMCpca.Z()-MomRecPCA.Z());
481 hErrPointPx->Fill(errMomRecPCA.X());
482 hErrPointPy->Fill(errMomRecPCA.Y());
483 hErrPointPz->Fill(errMomRecPCA.Z());
484 hPullPointPx->Fill((MomMCpca.X()-MomRecPCA.X())/errMomRecPCA.X());
485 hPullPointPy->Fill((MomMCpca.Y()-MomRecPCA.Y())/errMomRecPCA.Y());
486 hPullPointPz->Fill((MomMCpca.Z()-MomRecPCA.Z())/errMomRecPCA.Z());
487 hResPointX->Fill(PosMCpca.X()-PosRecPCA.X());
488 hResPointY->Fill(PosMCpca.Y()-PosRecPCA.Y());
489 hResPointZ->Fill(PosMCpca.Z()-PosRecPCA.Z());
490 hPullPointX->Fill((PosMCpca.X()-PosRecPCA.X())/errPosRecPCA.X());
491 hPullPointY->Fill((PosMCpca.Y()-PosRecPCA.Y())/errPosRecPCA.Y());
492 hPullPointZ->Fill((PosMCpca.Z()-PosRecPCA.Z())/errPosRecPCA.Z());
494 hResTheta->Fill(MomMCpca.Theta()-MomRecPCA.Theta());
495 hThetaResTheta->Fill(MomMCpca.Theta(),(MomMCpca.Theta()-MomRecPCA.Theta()));
496 hResPhi->Fill(MomMCpca.Phi()-MomRecPCA.Phi());
497 hPullTheta->Fill((MomMCpca.Theta()-MomRecPCA.Theta())/err_lyambda);
498 hPullPhi->Fill((MomMCpca.Phi()-MomRecPCA.Phi())/err_phi);
500 if(
fabs(MomRecPCAnotnorm.Mag()-Plab)>0.1*Plab){
501 nBadTrks->Fill(PosRecPCA.X(),PosRecPCA.Y(),PosRecPCA.Z(),MomRecPCAnotnorm.X(),MomRecPCAnotnorm.Y(),MomRecPCAnotnorm.Z(),Ntrkcandhits,PosMCpca.X(),PosMCpca.Y(),PosMCpca.Z(),MomMCpca.X(),MomMCpca.Y(),MomMCpca.Z(),mvID);
502 cout<<
"Event #"<<j<<
" contains BAD trk"<<endl;
508 double pxTrue = MCPointHit->GetPx();
509 double pyTrue = MCPointHit->GetPy();
510 double pzTrue = MCPointHit->GetPz();
511 TVector3 MomMClmd(pxTrue,pyTrue,pzTrue);
512 TVector3 dirMClmd = MomMClmd;
513 dirMClmd *=1./MomMClmd.Mag();
514 double deltaZ = -PosMClmd.Z()+PosRecLMD.Z();
516 double xneu=PosMClmd.X()+dirMClmd.X()*deltaZ;
517 double yneu=PosMClmd.Y()+dirMClmd.Y()*deltaZ;
518 double zneu = PosMClmd.Z()+deltaZ;
519 PosMClmd.SetXYZ(xneu,yneu,zneu);
520 MomMClmd = dirMClmd*Plab;
532 hResLumiTrkPointX->Fill(PosMClmd.X()-PosRecLMD.X());
533 hResLumiTrkPointY->Fill(PosMClmd.Y()-PosRecLMD.Y());
534 hResLumiTrkPointZ->Fill(PosMClmd.Z()-PosRecLMD.Z());
535 hResLumiTrkPointXPull->Fill((PosMClmd.X()-PosRecLMD.X())/errPosRecLMD.X());
536 hResLumiTrkPointYPull->Fill((PosMClmd.Y()-PosRecLMD.Y())/errPosRecLMD.Y());
537 hResLumiTrkPointZPull->Fill((PosMClmd.Z()-PosRecLMD.Z())/errPosRecLMD.Z());
539 hResLumiTrkPointPx->Fill(MomMClmd.X()-MomRecLMD.X());
540 hResLumiTrkPointPy->Fill(MomMClmd.Y()-MomRecLMD.Y());
541 hResLumiTrkPointPz->Fill(MomMClmd.Z()-MomRecLMD.Z());
542 hResLumiTrkPointPxPull->Fill((MomMClmd.X()-MomRecLMD.X())/errMomRecLMD.X());
543 hResLumiTrkPointPyPull->Fill((MomMClmd.Y()-MomRecLMD.Y())/errMomRecLMD.Y());
544 hResLumiTrkPointPzPull->Fill((MomMClmd.Z()-MomRecLMD.Z())/errMomRecLMD.Z());
545 hResLumiTrkTheta->Fill(MomMClmd.Theta()-MomRecLMD.Theta());
546 hResLumiTrkPhi->Fill(MomMClmd.Phi()-MomRecLMD.Phi());
547 hResLumiTrkThetaPull->Fill((MomMClmd.Theta()-MomRecLMD.Theta())/err_lyambdaLMD);
548 hResLumiTrkPhiPull->Fill((MomMClmd.Phi()-MomRecLMD.Phi())/err_phiLMD);
549 hResLumiTrkPointXErr->Fill(errPosRecLMD.X());
550 hResLumiTrkPointYErr->Fill(errPosRecLMD.Y());
551 hResLumiTrkPointZErr->Fill(errPosRecLMD.Z());
552 hResLumiTrkPointPxErr->Fill(errMomRecLMD.X());
553 hResLumiTrkPointPyErr->Fill(errMomRecLMD.Y());
554 hResLumiTrkPointPzErr->Fill(errMomRecLMD.Z());
562 TCanvas *
c1 =
new TCanvas(
"pulls_before_bp");
565 hResLumiTrkPointXPull->Draw();
567 hResLumiTrkPointYPull->Draw();
569 hResLumiTrkPointZPull->Draw();
571 hResLumiTrkPointPxPull->Draw();
573 hResLumiTrkPointPyPull->Draw();
575 hResLumiTrkPointPzPull->Draw();
579 TCanvas *
c2 =
new TCanvas(
"pulls_after_bp");
588 hPullPointPx->Draw();
590 hPullPointPy->Draw();
592 hPullPointPz->Draw();
597 hResPointPx->Write();
598 hResPointPy->Write();
599 hResPointPz->Write();
600 hErrPointPx->Write();
601 hErrPointPy->Write();
602 hErrPointPz->Write();
603 hPullPointPx->Write();
604 hPullPointPy->Write();
605 hPullPointPz->Write();
609 hPullPointX->Write();
610 hPullPointY->Write();
611 hPullPointZ->Write();
612 hResLumiTrkPointX->Write();
613 hResLumiTrkPointY->Write();
614 hResLumiTrkPointZ->Write();
615 hResLumiTrkPointXPull->Write();
616 hResLumiTrkPointYPull->Write();
617 hResLumiTrkPointZPull->Write();
618 hResLumiTrkPointPx->Write();
619 hResLumiTrkPointPy->Write();
620 hResLumiTrkPointPz->Write();
621 hResLumiTrkPointPxPull->Write();
622 hResLumiTrkPointPyPull->Write();
623 hResLumiTrkPointPzPull->Write();
628 hResLumiTrkTheta->Write();
629 hResLumiTrkPhi->Write();
630 hResLumiTrkThetaPull->Write();
631 hResLumiTrkPhiPull->Write();
633 hResLumiTrkPointXErr->Write();
634 hResLumiTrkPointYErr->Write();
635 hResLumiTrkPointZErr->Write();
636 hResLumiTrkPointPxErr->Write();
637 hResLumiTrkPointPyErr->Write();
638 hResLumiTrkPointPzErr->Write();
642 hThetaResTheta->Write();
645 cout<<
"Number of trks where GEANE failed: "<<glBADGEANE<<endl;
static T ASin(const T &x)
int main(int argc, char **argv)
friend F32vec4 sqrt(const F32vec4 &a)
static T Sqrt(const T &x)
Int_t GetIndex(int i=0) const
PndTrackCandHit GetSortedHit(UInt_t i)
TVector3 GetMomentum() const
Int_t GetDigiIndex(Int_t i) const
friend F32vec4 fabs(const F32vec4 &a)
TVector3 GetPosition() const
Data class to store the digi output of a pixel module.
Int_t GetClusterIndex() const
TVector3 GetStartVertex() const
Int_t GetMotherID() const