Comporision between MC tracks, reconstructed tracks near LMD and back propagated tracks -————
Comporision between MC tracks, reconstructed tracks near LMD and back propagated tracks (END) --— 
   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)
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