FairRoot/PandaRoot
Functions
MCandRECTrkmatches_exe.C File Reference
#include <iostream>
#include <sstream>
#include <TApplication.h>
#include <TCanvas.h>
#include <TROOT.h>
#include <TString.h>
#include <TChain.h>
#include <TFile.h>
#include <TClonesArray.h>
#include <TSystem.h>
#include <TH1.h>
#include <TH2.h>
#include <TF1.h>
#include <TRotation.h>
#include <TVector3.h>
#include <TMath.h>
#include <TGaxis.h>
#include <TNtuple.h>
#include <TMatrixD.h>
#include <TStopwatch.h>
#include <PndMCTrack.h>
#include <PndTrack.h>
#include <PndSdsMCPoint.h>
#include "PndLmdDim.h"
#include <PndLinTrack.h>
#include <PndTrackCand.h>
#include <PndTrackCandHit.h>
#include <PndSdsHit.h>
#include <PndSdsClusterStrip.h>
#include <PndSdsDigiStrip.h>
#include <PndSdsDigiPixel.h>
#include <PndSdsClusterPixel.h>
#include <PndSdsMergedHit.h>
#include <FairRunAna.h>
#include <FairRootManager.h>
#include <FairGeane.h>
#include <FairRtdbRun.h>
#include <FairRuntimeDb.h>
#include <FairParRootFileIo.h>
#include <FairLogger.h>
#include <FairTrackParH.h>
#include <string>

Go to the source code of this file.

Functions

int main (int __argc, char *__argv[])
 

Function Documentation

int main ( int  __argc,
char *  __argv[] 
)

params of lin trk in lumi

Set MC ID for each track -—————————————————

get rid from most probably ghost track ————

get rid from most probably ghost track (END) —

Top cluster

Bottom cluster


Counting number of diff MC ids -—————————————


Set track quality: good or ghost? and assign MC id to rec trk ———


Comporision MC, trk-candidates and REConstructed tracks –——————————————

Try to find connection between position of –——— reconstructed track and track after GEANE propagation


CUT: Check position and coordinates errors of PCA —————————————


Read MC track parameters -------------------—————————————


Read track-parameters after back-propagation ------———————————

Let's checked for good tracks by phi definition ——————

(end) check for good tracks –————————


Compare lin trk and MC trk in LUMI frame========================



(I) missed tracks are defined on Phi difference between MC&REC trks

(II) missed tracks are defined on hits information



Definition at line 130 of file MCandRECTrkmatches_exe.C.

References c1, c10, c11, c14, c2, c3, c4, c6, c7, c8, c9, DigiFile, Double_t, dx, dy, dz, f, fabs(), PndLmdDim::Get_sensor_by_id(), PndSdsHit::GetBotIndex(), PndLinTrack::GetChiSquare(), PndSdsHit::GetClusterIndex(), PndSdsCluster::GetDigiIndex(), PndLinTrack::GetDirectionErrVec(), PndLinTrack::GetDirectionVec(), PndTrackCandHit::GetHitId(), PndSdsDigi::GetIndex(), PndMCTrack::GetMomentum(), PndTrackCand::GetNHits(), PndLinTrack::GetPar(), PndLinTrack::GetParErr(), PndMCTrack::GetPdgCode(), PndSdsHit::GetSensorID(), PndTrackCand::GetSortedHit(), PndLinTrack::GetStartErrVec(), PndLinTrack::GetStartVec(), PndMCTrack::GetStartVertex(), PndLinTrack::GetTCandID(), PndLmdDim::Instance(), m, MCPoint, n, nEvents, nk, out, Pi, sqrt(), CAMath::Sqrt(), startEvent, storePath, timer, trk, TString, verboseLevel, and x.

130  {
131  //gROOT->Macro("/PANDA/pandaroot/macro/lmd/Style_Imported_Style.C");
132  // gROOT->SetStyle("Imported_Style");
133 
134  //TODO: read this like params!
135  // const int nEvents=500000;
136  int nEvents=1000;
137  int nMCtracks=1;
138  int startEvent=0;
139  TString storePath="/data/FAIRsorf/pandaroot/trunk/macro/lmd/tmpOutput";
140  double Plab=15.;
141  int verboseLevel=5;
142  int mh = 0;//if>0 : use merged hit collection
143  int dnu=0;//if>0 : use namespace for pixel
144  std::string startStr="", momStr="", nStr="", pathStr="", verbStr="" , mcTrkStr="", useNewDStr="",usedMHStr="";
145  // decode arguments
146  if( __argc>1 && ( strcmp( __argv[1], "-help" ) == 0
147  || strcmp( __argv[1], "--help" ) == 0 ) ){
148 
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"
158  <<"Have fun! \n"
159  << std::endl;
160  return 0;
161  }
162  while ((optind < (__argc-1) ) && (__argv[optind][0]=='-')) {
163  bool found=false;
164  std::string sw = __argv[optind];
165  if (sw=="-s") {
166  optind++;
167  startStr = __argv[optind];
168  found=true;
169  }
170  if (sw=="-n"){
171  optind++;
172  nStr = __argv[optind];
173  found=true;
174  }
175  if (sw=="-t"){
176  optind++;
177  mcTrkStr = __argv[optind];
178  found=true;
179  }
180  if (sw=="-path"){
181  optind++;
182  pathStr = __argv[optind];
183  found=true;
184  }
185  if (sw=="-mom"){
186  optind++;
187  momStr = __argv[optind];
188  found=true;
189  }
190  if (sw=="-v"){
191  optind++;
192  verbStr = __argv[optind];
193  found=true;
194  }
195  if (sw=="-npx"){
196  optind++;
197  useNewDStr = __argv[optind];
198  found=true;
199  }
200  if (sw=="-mh"){
201  optind++;
202  usedMHStr = __argv[optind];
203  found=true;
204  }
205  if (!found){
206  std::cout<< "Unknown switch: "
207  << __argv[optind] <<std::endl;
208  optind++;
209  }
210 
211  while ( (optind < __argc ) && __argv[optind][0]!='-' ) optind++;
212  }
213 
214  std::stringstream startSStr(startStr), momSStr(momStr), nSStr(nStr), pathSStr(pathStr), verbSStr(verbStr), mcTrkSStr(mcTrkStr),useNewDSStr(useNewDStr), usedMHSStr(usedMHStr);
215 
216  startSStr >> startEvent;
217  momSStr >> Plab;
218  nSStr >> nEvents;
219  pathSStr >> storePath;
220  verbSStr >> verboseLevel;
221  mcTrkSStr >> nMCtracks;
222  useNewDSStr >> dnu;
223  usedMHSStr >> mh;
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;
231  //void MCandRECTrkmatches(const int nEvents=2, const int startEvent=0, TString storePath="tmpOutput", const int verboseLevel=3, double dv=0.5, bool no4d=false)
232  //{
233  // ---- Load libraries -------------------------------------------------
234  gROOT->Macro("$VMCWORKDIR/gconfig/rootlogon.C");
235  gSystem->Load("libLmdTrk");
236  // gROOT->LoadMacro("line3Dfit.C");
237  // ------------------------------------------------------------------------
238 
239  // ----- Timer --------------------------------------------------------
240  TStopwatch timer;
241  timer.Start();
242  // ------------------------------------------------------------------------
243 
244  // ---- Input files --------------------------------------------------------
245  TString simMC=storePath+"/Lumi_MC_";
246  simMC += startEvent;
247  simMC += ".root";
248  TChain tMC("pndsim");
249  tMC.Add(simMC);
250 
251  TString DigiFile = storePath+"/Lumi_digi_";
252  DigiFile += startEvent;
253  DigiFile += ".root";
254  TChain tdigiHits("pndsim");
255  tdigiHits.Add(DigiFile);
256 
257  TString recHit=storePath+"/Lumi_reco";
258  // if(dnu>0) recHit+="Merged";
259  recHit +="_";
260  recHit += startEvent;
261  recHit += ".root";
262  TChain tHits("pndsim");
263  tHits.Add(recHit);
264 
265  TString recHitmerged=storePath+"/Lumi_recoMerged_";
266  recHitmerged += startEvent;
267  recHitmerged += ".root";
268  TChain tHitsMerged("pndsim");
269  if(mh)
270  tHitsMerged.Add(recHitmerged);
271 
272 
273  TString trkCand = storePath+"/Lumi_TCand_";
274  trkCand += startEvent;
275  trkCand += ".root";
276  TChain tTrkCand("pndsim");
277  tTrkCand.Add(trkCand);
278 
279  TString recTrack;
280  TChain tTrkRec("pndsim");
281  recTrack = storePath+"/Lumi_Track_";
282  recTrack += startEvent;
283  recTrack += ".root";
284  tTrkRec.Add(recTrack);
285  // if(kf<1){
286  // recTrack = storePath+"/Lumi_Track_";
287  // recTrack += startEvent;
288  // recTrack += ".root";
289  // tTrkRec.Add(recTrack);
290  // }
291 
292  TString geaneFile = storePath+"/Lumi_Geane_";
293  geaneFile += startEvent;
294  geaneFile += ".root";
295  TChain tgeane("pndsim");
296  tgeane.Add(geaneFile);
297 
298  // ---------------------------------------------------------------------------------
299 
300  // ---- Output file ----------------------------------------------------------------
301  TString out=storePath+"/Lumi_out_MC_and_REC_trks_matches_with_IDs";
302  out += startEvent;
303  out += ".root";
304  TFile *f = new TFile(out,"RECREATE");
305  // ---------------------------------------------------------------------------------
306 
307  //--- MC info -----------------------------------------------------------------
308  TClonesArray* true_tracks=new TClonesArray("PndMCTrack");
309  tMC.SetBranchAddress("MCTrack",&true_tracks); //True Track to compare
310 
311  TClonesArray* true_points=new TClonesArray("PndSdsMCPoint");
312  tMC.SetBranchAddress("LMDPoint",&true_points); //True Points to compare
313  //----------------------------------------------------------------------------------
314 
315 
316  //--- Digitization info ------------------------------------------------------------
317  TClonesArray* fStripClusterArray;
318  if(dnu>0){
319  fStripClusterArray = new TClonesArray("PndSdsClusterPixel");
320  tHits.SetBranchAddress("LMDPixelClusterCand",&fStripClusterArray);
321  }
322  else{
323  fStripClusterArray = new TClonesArray("PndSdsClusterStrip");
324  tHits.SetBranchAddress("LMDStripClusterCand",&fStripClusterArray);
325  }
326 
327 
328  TClonesArray* fStripDigiArray;
329  if(dnu>0){
330  fStripDigiArray = new TClonesArray("PndSdsDigiPixel");
331  tdigiHits.SetBranchAddress("LMDPixelDigis",&fStripDigiArray);
332  }
333  else{
334  fStripDigiArray = new TClonesArray("PndSdsDigiStrip");
335  tdigiHits.SetBranchAddress("LMDStripDigis",&fStripDigiArray);
336  }
337  //----------------------------------------------------------------------------------
338 
339  //--- Real Hits --------------------------------------------------------------------
340  TClonesArray* rechit_array;
341  if(dnu>0){
342  if(mh>0){
343  rechit_array = new TClonesArray("PndSdsMergedHit");
344  tHitsMerged.SetBranchAddress("LMDHitsMerged",&rechit_array); //Points for Tracks
345  }
346  else{
347  rechit_array = new TClonesArray("PndSdsHit");
348  tHits.SetBranchAddress("LMDHitsPixel",&rechit_array); //Points for Tracks
349  }
350  }
351  else{
352  rechit_array = new TClonesArray("PndSdsHit");
353  tHits.SetBranchAddress("LMDHitsStrip",&rechit_array); //Points for Tracks
354  }
355  //----------------------------------------------------------------------------------
356 
357 
358  //--- Track Candidate ---------------------------------------------------------------
359  TClonesArray* trkcand_array=new TClonesArray("PndTrackCand");
360  tTrkCand.SetBranchAddress("LMDTrackCand",&trkcand_array); //Points for Track Canidates
361  //-----------------------------------------------------------------------------------
362 
363  //--- Real tracks -------------------------------------------------------------------
364  TClonesArray* rec_trk=new TClonesArray("PndLinTrack");
365  tTrkRec.SetBranchAddress("LMDTrack",&rec_trk); //Tracks
366  // tgeane.SetBranchAddress("PndTrackLmd",&rec_trk); //Tracks
367  // if(kf>0){
368  // rec_trk = new TClonesArray("PndTrack");
369  // tgeane.SetBranchAddress("PndTrackLmd",&rec_trk); //Tracks
370  // }
371  // else{
372  // rec_trk = new TClonesArray("PndLinTrack");
373  // tTrkRec.SetBranchAddress("LMDTrack",&rec_trk); //Tracks
374  // }
375 
376  cout<<"Here we go to GEANE file: "<<endl;
377  //----------------------------------------------------------------------------------
378 
379  //--- Geane info ------------------------------------------------------------------
380  // TClonesArray* geaneArray =new TClonesArray("FairTrackParP");
381  TClonesArray* geaneArray =new TClonesArray("FairTrackParH");
382  tgeane.SetBranchAddress("GeaneTrackFinal",&geaneArray); //Tracks with parabolic parametrisation
383 
384  cout<<"And we'll make some hists"<<endl;
385  //--- Output histogram -----------------------------------------------------
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);
403 
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);
405 
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);
412 
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);
415 
416  // TH1 *hMomMC = new TH1F("hMomMC","P_{MC};P,GeV/c",1e3,0,16.);
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");
420  // TH1 *hMomMCnearLUMI = new TH1F("hMomMCnear","P_{MC};P,GeV/c",1e3,0,16.);
421 
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);
425  // TH1 *hResTheta = new TH1F("hResTheta","#theta_{MC}-#theta_{rec};#delta#theta,rad",1e3,-1e-2,1e-2);
426  TH1 *hResTheta = new TH1F("hResTheta","#theta_{MC}-#theta_{rec};#delta#theta,rad",1e2,-1e-3,1e-3);//TEST
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);
432 
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);
436 
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);
441 
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);
445 
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);
449 
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.);
453 
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);
457 
458  // TH1 *hResLumiTrkTheta = new TH1F("hResLumiTrkTheta","#theta_{MC}-#theta_{rec}(near Lumi);#delta#theta, rad",1e2,-0.001,0.001);
459  // TH1 *hResLumiTrkPhi = new TH1F("hResLumiTrkPhi","#phi_{MC}-#phi_{rec}(near Lumi);#delta#phi, rad",1e2,-0.01,0.01);
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);
462 
463 
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);
472 
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);
480 
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);
484 
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);
488 
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);
492 
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.);
496 
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.);
499 
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);
507 
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.);
515 
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.);
521 
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);
524 
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);
532 
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.);
538 
539  //-----------------------------------------------------------------------------
540 
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",
546  30,0,30,5e2,0,50.);
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);
551  //Load lumi geo params
552  PndLmdDim *lmddim = PndLmdDim::Instance();
553  // lmddim -> Read_transformation_matrices("matrices.txt", true);
554  lmddim -> Read_transformation_matrices("matrices_perfect.txt", false);
555  int glBADGEANE=0;
556  int glBadEv = 0;
557  int glNoisehit = 0;// total number of noise hits
558  for (Int_t j=0; j<nEvents; j++){
559  // cout<<"Event #"<<j<<endl;
560  // Read GEANE & MC info -----------------------------------------------------------------
561  // if(kf<1)
562  tTrkRec.GetEntry(j);
563  tgeane.GetEntry(j);
564  tMC.GetEntry(j);
565  tTrkCand.GetEntry(j);
566  tHits.GetEntry(j);
567  tdigiHits.GetEntry(j);
568  if(mh>0)
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();
575 
576  const int nTrkCandidates = trkcand_array->GetEntriesFast();
577  const int nRecTrks = rec_trk->GetEntriesFast();
578  if(verboseLevel>0)
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++;
585  // if(nRecHits<3*nMCtracks) cout<<"Event #"<<j<<" doesn't have enough rec.hits!!!"<<endl;
586  // if(nRecHits<3*nMCtracks) continue;
587  double chi2Cont[5*numTrk];
588  double ndiffIDCont[5*numTrk];
589 
590  hMCtrkvshits->Fill(nRecHits,nParticles);
591  if(nTrkCandidates>numTrk) cout<<"Event #"<<j<<" has "<<nTrkCandidates<<" trk-cands and "<<numTrk<<" tracks!"<<endl;
592 
593  hntrkcand->Fill(nTrkCandidates);
594  hntrkcandvsMC->Fill(nParticles,nTrkCandidates);
595 
597  Int_t nRecGEANEtrk = 0;
598  int MCtrk[nParticles]; //Number of participation this MCid in rec.tracks
599  int RECtrkMCid[nGeaneTrks];//Assignment MC id to REC trk;
600  for(int nk=0;nk<nParticles;nk++)
601  MCtrk[nk]=0;
602  bool goodTrk[nGeaneTrks];
603  bool ghostTrk[nGeaneTrks];
604  for (Int_t iN=0; iN<nGeaneTrks; iN++){
605  goodTrk[iN] = false;
606  ghostTrk[iN] = false;
607  RECtrkMCid[iN]=-1;
608  }
609 
610  int goodRectrk=0;//for missed trk-search
611  for (Int_t iN=0; iN<nGeaneTrks; iN++){// loop over all reconstructed trks
612 
613 
614  vector<int> MCtrkID; //arrray of hits MCid
615  Int_t diffIDs=1;
616  FairTrackParH *fRes = (FairTrackParH*)geaneArray->At(iN);
618  TVector3 PosRec = fRes->GetPosition();
619  double pca_lim = 1.;//=10*sigma_Xpca~10*{0.093,0.11,0.12,0.22,0.55};
620  if(Plab<5) pca_lim = 2.;
621  if(Plab<2) pca_lim = 5.;
622  // if(fabs(PosRec.X())>pca_lim && fabs(PosRec.Y())>pca_lim){
623  // cout<<"666 Event #"<<j<<" has too large X_pca ot Y_pca 666"<<endl;
624  // }
625  if(fabs(PosRec.X())>pca_lim && fabs(PosRec.Y())>pca_lim) continue; // PCA_x and PCA_y should be < 10sigmaX
626 
627 
629  Double_t lyambda = fRes->GetLambda();
630  if(lyambda==0){
631  cout<<"GEANE didn't propagate this trk!"<<endl;
632  cout<<"Event #"<<j<<" diffIDs = "<<diffIDs<<endl;
633  glBADGEANE++;
634  }
635  if(lyambda==0) continue;
636  PndLinTrack *trk;
637  double linpar[6];
638  Double_t errparlin[6];
639  double chi2;
640  PndTrack *trkpnd;
641  Int_t candID;
642  PndTrackCand *trkcand;
643  Int_t trkSensor;
644  trk = (PndLinTrack*)rec_trk->At(iN);
645  trk->GetPar(linpar);
646  hLumiTrkA->Fill(linpar[1]);
647  hLumiTrkB->Fill(linpar[0]);
648  hLumiTrkC->Fill(linpar[3]);
649  hLumiTrkD->Fill(linpar[2]);
650  trk->GetParErr(errparlin);
651  candID = trk->GetTCandID();
652  trkcand = (PndTrackCand*)trkcand_array->At(candID);
653  chi2 = trk->GetChiSquare();
654  chi2Cont[iN] = chi2;
655  hchi2nTrkCand->Fill(nTrkCandidates,chi2);
656 
657  // PndTrackCand *trkcand = (PndTrackCand*)trkcand_array->At(iN); //TODO: find out how to check trk-cand in case then cut are applied to trk-fit results
658  const int Ntrkcandhits= trkcand->GetNHits();
659  PndSdsMCPoint* MCPointHit;
660 
661  //Matching between MC & Rec on hits level-----------------------------------
662  if(verboseLevel>1) cout<<"MCidTOP:"<<endl;
663  double momMC0,momMC1,momMC2;
664  momMC0 = Plab;
665  for (Int_t iHit = 0; iHit < Ntrkcandhits; iHit++){ // loop over rec.hits
666  PndTrackCandHit candhit = (PndTrackCandHit)(trkcand->GetSortedHit(iHit));
667  Int_t hitID = candhit.GetHitId();
668  PndSdsHit* myHit = (PndSdsHit*)(rechit_array->At(hitID));
669 
670  //for pixel design
671  double MCpointMom;
672  if(dnu>0){
673  // if(verboseLevel>1) cout<<"Rec hit("<<myHit->GetClusterIndex()<<")";
674  PndSdsClusterPixel* myCluster = (PndSdsClusterPixel*)(fStripClusterArray->At(myHit->GetClusterIndex()));
675  PndSdsDigiPixel* astripdigi = (PndSdsDigiPixel*)(fStripDigiArray->At(myCluster->GetDigiIndex(0)));
676  if (astripdigi->GetIndex(0) == -1){
677  glNoisehit++;
678  // MCtrkID.push_back(-111);
679  continue;
680  }
681  int sensorID = myHit->GetSensorID();
682  int ihalf, iplane, imodule, iside, idie, isensor;
683  // calculate the plane and sensor on this plane
684  lmddim->Get_sensor_by_id(sensorID, ihalf, iplane, imodule, iside, idie, isensor);
685  trkSensor = ihalf*5+imodule;
686  // if (astripdigi->GetIndex(0) == -1) continue; // sort out noise
687  PndSdsMCPoint* MCPoint = (PndSdsMCPoint*)(true_points->At(astripdigi->GetIndex(0)));
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);
692  // if(verboseLevel>1) cout<<"MCid("<<MCidTOP<<") ";
693  if(verboseLevel>1) cout<<MCidTOP<<" ";
694  }
695 
696  //for strip design
697  else{
699  PndSdsClusterStrip* myCluster = (PndSdsClusterStrip*)(fStripClusterArray->At(myHit->GetClusterIndex()));
700  PndSdsDigiStrip* astripdigi = (PndSdsDigiStrip*)(fStripDigiArray->At(myCluster->GetDigiIndex(0)));
701  if (astripdigi->GetIndex(0) == -1) glNoisehit++;
702  if (astripdigi->GetIndex(0) == -1) continue; // sort out noise
703  PndSdsMCPoint* MCPoint = (PndSdsMCPoint*)(true_points->At(astripdigi->GetIndex(0)));
704  MCpointMom = sqrt(MCPoint->GetPx()*MCPoint->GetPx()+MCPoint->GetPy()*MCPoint->GetPy()+MCPoint->GetPz()*MCPoint->GetPz());
705 
706  int MCidTOP = MCPoint->GetTrackID();
707  if(verboseLevel>1) cout<<MCidTOP<<" ";
708  if(iHit==0) MCPointHit = MCPoint;
709  // double zTop = MCPoint->GetZ();
710  // double xTop = MCPoint->GetX();
711  // double yTop = MCPoint->GetY();
713  Int_t botIndex = myHit->GetBotIndex();
714  PndSdsClusterStrip* myClusterBot = (PndSdsClusterStrip*)(fStripClusterArray->At(botIndex));
715  PndSdsDigiStrip* astripdigiBot = (PndSdsDigiStrip*)(fStripDigiArray->At(myClusterBot->GetDigiIndex(0)));
716  if (astripdigiBot->GetIndex(0) == -1) glNoisehit++;
717  if (astripdigiBot->GetIndex(0) == -1) continue; // sort out noise
718  PndSdsMCPoint* MCPointBot = (PndSdsMCPoint*)(true_points->At(astripdigiBot->GetIndex(0)));
719  // double zBot = MCPointBot->GetZ();
720  // double xBot = MCPointBot->GetX();
721  // double yBot = MCPointBot->GetY();
722  // cout<<"zTop - zBot = "<<zTop-zBot<<endl;
723  // cout<<"xTop - xBot = "<<xTop-xBot<<endl;
724  // cout<<"yTop - yBot = "<<yTop-yBot<<endl;
725  int MCidBOT = MCPointBot->GetTrackID();
726  // if(MCidTOP!=MCidBOT) continue;
727  MCtrkID.push_back(MCidTOP);
728  MCtrkID.push_back(MCidBOT);
729  }
730  if(iHit==0) momMC1 = MCpointMom;
731  if(iHit==(Ntrkcandhits-1)) momMC2 = MCpointMom;
732  }
733 
734  // TNtuple *nmomMC = new TNtuple("nmomMC","MCmomentum","p0:p_nearLUMI:p_afterLUMI");
735  nmomMC->Fill(momMC0,momMC1,momMC2);
736  if(verboseLevel>1) cout<<""<<endl;
737  // Sorting MC IDs ----------------------------------------
738  Int_t k, x;
739  bool ch=false; //Was element changed?
740  Int_t nch = 0; //How many times?
741  for(Int_t n=0; n<MCtrkID.size(); n++) { // n - current position
742  k=n; x=MCtrkID[n];
743  for(Int_t m=n+1; m<MCtrkID.size(); m++) // find the least element
744  if (MCtrkID[m]<x){
745  k=m; x=MCtrkID[m]; // k - index for the least element
746  ch=true; nch++;
747  }
748  MCtrkID[k] = MCtrkID[n]; MCtrkID[n] = x; // change position between the least and current elements
749  }
751 
753  Int_t prevID = MCtrkID[0];
754  for(int nk=0;nk<nParticles;nk++){
755  if(MCtrkID[0]==nk)
756  MCtrk[nk]=MCtrk[nk]+1;
757  }
758  diffIDs = 1;
759  for(Int_t n=1; n<MCtrkID.size(); n++){
760  if(prevID<MCtrkID[n]){
761  diffIDs++;
762  prevID=MCtrkID[n];
763  for(int nk=0;nk<nParticles;nk++){
764  if(MCtrkID[n]==nk)
765  MCtrk[nk]=MCtrk[nk]+1;
766  }
767  }
768  }
769 
770  ndiffIDCont[iN]=diffIDs;
771  hDiffIDs->Fill(diffIDs);
772  hntrkcandvsIDs->Fill(diffIDs,nTrkCandidates);
773  hnhitsvsIDs->Fill(diffIDs,Ntrkcandhits);
775 
777  if(diffIDs<2){
778  RECtrkMCid[iN] = MCtrkID[0];
779  goodTrk[iN] = true;
780  }
781  else{
782  vector<int> countMC_IDs(diffIDs);
783  prevID = MCtrkID[0];
784  int diffCount=0;
785  for(Int_t n=0; n<MCtrkID.size(); n++) {
786  countMC_IDs[diffCount]++;
787  if(prevID<MCtrkID[n]){
788  diffCount++;
789  prevID=MCtrkID[n];
790  }
791  }
792  int maxID=countMC_IDs[0];
793  int posIDmax=0;
794  for(int kn=0;kn<diffIDs;kn++){
795  // cout<<"countMC_IDs["<<kn<<"]="<<countMC_IDs[kn]<<" 0.7*MCtrkID.size() = "<<0.7*MCtrkID.size()<<endl;
796  if(countMC_IDs[kn]>0.65*MCtrkID.size()){ //more then 65% of hits come from the same MC id
797  goodTrk[iN] = true;
798  ghostTrk[iN] = false;
799  }
800  else{
801  if(!goodTrk[iN]) ghostTrk[iN] = true;
802  }
803 
804  if(countMC_IDs[kn]>maxID){
805  maxID=countMC_IDs[kn];
806  posIDmax = kn;
807  }
808  }
809  prevID = MCtrkID[0];
810  diffCount=0;
811  for(Int_t n=0; n<MCtrkID.size(); n++) {
812  if(diffCount==posIDmax) RECtrkMCid[iN] = prevID;
813  if(prevID<MCtrkID[n]){
814  diffCount++;
815  prevID=MCtrkID[n];
816  }
817  }
818  }
820 
822  TVector3 posSeed = trkcand->getPosSeed();
823  TVector3 dirSeed = trkcand->getDirSeed();
824  hSeedThetaDiffIDs->Fill(diffIDs,dirSeed.Theta());
825  hSeedPhiDiffIDs->Fill(diffIDs,dirSeed.Phi());
826  if(diffIDs>-1){ // All tracks
829  TVector3 pos_prop_geane_trk = fRes->GetPosition();
830  Double_t theta_prop_geane_trk = TMath::Pi()/2. - lyambda;
831  Double_t phi_prop_geane_trk = fRes->GetPhi();
832  TVector3 pos_rec_trk,dir_rec_trk;
833 
834  pos_rec_trk = trk->GetStartVec();
835  dir_rec_trk = trk->GetDirectionVec();
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());
843 
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());
851 
853 
855 
856  hDiffIDsPointX->Fill(diffIDs,PosRec.X());
857  hDiffIDsPointY->Fill(diffIDs,PosRec.Y());
858  hDiffIDsPointZ->Fill(diffIDs,PosRec.Z());
859  Double_t CovGEANELAB[6][6];
860  fRes->GetMARSCov(CovGEANELAB);
861 
862  Double_t errX = fRes->GetDX();
863  Double_t errY = fRes->GetDY();
864  Double_t errZ = fRes->GetDZ();
865 
866  Double_t errXlin = errparlin[0];
867  Double_t errYlin = errparlin[1];
868  hchi2Errx->Fill(chi2,errX);
869  hchi2Erry->Fill(chi2,errY);
870  nRecGEANEtrk++;
872 
874  int MCidforREC = RECtrkMCid[iN];
875  PndMCTrack *mctrk =(PndMCTrack*) true_tracks->At(MCidforREC);
876  Int_t mcID = mctrk->GetPdgCode();
877  TVector3 MomMC = mctrk->GetMomentum();
878  Double_t thetaMC = MomMC.Theta();
879  Double_t phiMC = MomMC.Phi();
881 
883  //TODO: problem with covarance matrix in FairTrackParH???
884 
885  Double_t errPx = fRes->GetDPx();
886  Double_t errPy = fRes->GetDPy();
887  Double_t errPz = fRes->GetDPz();
888  TVector3 errMomBP(errPx,errPy,errPz);
889 
890  Double_t thetaBP = TMath::Pi()/2. - lyambda;
891  Double_t err_lyambda = fRes->GetDLambda();
892  if(err_lyambda==0) err_lyambda = errMomBP.Theta();
893  // Double_t err_lyambda = errMom.Theta();
894  Double_t phiBP = fRes->GetPhi();
895  Double_t err_phi = fRes->GetDPhi();
896  if(err_phi==0) err_phi=errMomBP.Phi();
897  Double_t errMomRecBP = fRes->GetDQp();
898 
899 
900  TVector3 MomRecBP = fRes->GetMomentum();
901 
902 
903 
904  Double_t resTheta = thetaBP-thetaMC;
905 
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);
912 
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());
920  Double_t errPCA = TMath::Sqrt(errX*errX+errY*errY+errZ*errZ);
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));
939 
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);
949 
950  Double_t resPhi = phiBP-phiMC;
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());
962 
963  Double_t angMCRec = MomMC.Angle(MomRecBP); // Angle between two vectors
964  hangMCRec->Fill(angMCRec);
965  hchi2->Fill(chi2);
966 
968 
969  for(Int_t jk=0; jk< nParticles;jk++){
970  PndMCTrack *mctrk =(PndMCTrack*) true_tracks->At(jk);
971  Int_t mcID = mctrk->GetPdgCode();
972  if(mcID==-2212){
973  TVector3 MomMC = mctrk->GetMomentum();
974  double diffTheta=fabs(MomMC.Theta()-thetaBP)/err_lyambda;
975  double diffPhi=fabs(MomMC.Phi()-phiBP)/err_phi;
976 
977  if(fabs(MomMC.Phi())<0.14 || fabs(MomMC.Phi())>3){ //for #phi near edge reconstructed angle can differ
978  double phiMC1 = -MomMC.Phi();
979  double diffPhi2=fabs(phiMC1-phiBP)/err_phi;
980  if(diffPhi2<diffPhi) diffPhi = diffPhi2;
981  }
982 
983  hntrkmissedPhiTheta->Fill(diffTheta,diffPhi);
984  if(diffTheta<4. && diffPhi<4.) goodRectrk++;
985  }
986  }
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());
995 
996 
998  // cout<<" "<<endl;
999  // cout<<"=============================="<<endl;
1000  TVector3 vtxLumi = trk->GetStartVec();
1001  TVector3 vtxLumiErr = trk->GetStartErrVec();
1002  TVector3 dirLumi = trk->GetDirectionVec();
1003  TVector3 dirLumiErr = trk->GetDirectionErrVec();
1004  // // //do the transformation from LUMI frame (with z-axis perp. to lumi planes) to lab frame
1005  // if(dnu>0){
1006  // vtxLumi = lmddim->Transform_lmd_local_to_global(vtxLumi, false, false);
1007  // dirLumi = lmddim->Transform_lmd_local_to_global(dirLumi, true, false);
1008  // vtxLumiErr = lmddim->Transform_lmd_local_to_global(vtxLumiErr, true, false);
1009  // dirLumiErr = lmddim->Transform_lmd_local_to_global(dirLumiErr, true, false);
1010  // }
1011  // else{
1012  // combitransFromLumiFrame(vtxLumi,dnu);
1013  // rotateFromLumiFrame(dirLumi, false, dnu);
1014  // rotateFromLumiFrame(dirLumiErr, true, dnu);
1015  // rotateFromLumiFrame(vtxLumiErr, true, dnu);
1016  // }
1017  double xTrue = MCPointHit->GetX();
1018  double yTrue = MCPointHit->GetY();
1019  double zTrue = MCPointHit->GetZ();
1020  TVector3 vtxLumiMC = TVector3(xTrue,yTrue,zTrue);
1021 
1022 
1023  double pxTrue = MCPointHit->GetPx();
1024  double pyTrue = MCPointHit->GetPy();
1025  double pzTrue = MCPointHit->GetPz();
1026  TVector3 dirLumiMC = TVector3(pxTrue,pyTrue,pzTrue);
1027  // hMomMC->Fill(dirLumiMC.Mag());
1028  dirLumiMC *=1./dirLumiMC.Mag();
1029 
1030  double dz = -zTrue+vtxLumi.Z();//Correct definition Z coord for comparision
1031  // double dz = 0;//TEST
1032  double dx = dirLumiMC.X()*dz;
1033  double dy = dirLumiMC.Y()*dz;
1034  vtxLumiMC += TVector3(dx,dy,dz);
1035 
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());
1040  // hResLumiTrkPhiPull->Fill(dirLumiMC.Phi()-dirLumi.Phi());
1041  hResLumiTrkPhiPull->Fill((dirLumiMC.Phi()-dirLumi.Phi())/dirLumiErr.Phi());
1042 
1043  hResLumiTrkPointX->Fill(vtxLumiMC.X()-vtxLumi.X());
1044  hResLumiTrkPointY->Fill(vtxLumiMC.Y()-vtxLumi.Y());
1045  hResLumiTrkPointZ->Fill(vtxLumiMC.Z()-vtxLumi.Z());
1046 
1047  hResLumiTrkPointPx->Fill(dirLumiMC.X()-dirLumi.X());
1048  hResLumiTrkPointPy->Fill(dirLumiMC.Y()-dirLumi.Y());
1049  hResLumiTrkPointPz->Fill(dirLumiMC.Z()-dirLumi.Z());
1050 
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());
1054 
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());
1058 
1059  hMCThetaResSeedTheta->Fill(dirLumiMC.Theta(),(dirLumiMC.Theta()-dirLumi.Theta()));
1060  hMCPhiResSeedPhi->Fill(dirLumiMC.Phi(),(dirLumiMC.Phi()-dirLumi.Phi()));
1062  }
1064  MCtrkID.clear();
1065  }
1066  for(int nk=0;nk<numTrk;nk++){
1067  hntrkMCtrkID->Fill(nk,MCtrk[nk]);
1068  hchi2MCdiffID->Fill(chi2Cont[nk],ndiffIDCont[nk]);
1069  }
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);
1074  if(verboseLevel>0){
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;
1079  }
1081  int goodRecII=0, ghostRecII=0;
1082  for (Int_t iN=0; iN<nGeaneTrks; iN++){
1083  int trkType = -1;
1084  if(goodTrk[iN]){
1085  goodRecII++;
1086  trkType = 0;
1087  }
1088  if(ghostTrk[iN]){
1089  ghostRecII++;
1090  trkType = +1;
1091  }
1092 
1093  FairTrackParH *fRes = (FairTrackParH*)geaneArray->At(iN);
1094  Double_t lyambda = fRes->GetLambda();
1095  Double_t thetaBP = TMath::Pi()/2. - lyambda;
1096  Double_t phiBP = fRes->GetPhi();
1097  TVector3 MomRecBP = fRes->GetMomentum();
1098  TVector3 PosBP = fRes->GetPosition();
1099  ntuprecTrk->Fill(PosBP.X(),PosBP.Y(),PosBP.Z(),MomRecBP.Mag(),thetaBP,phiBP,trkType);
1100  }
1101  hntrkgood_II->Fill(goodRecII);
1102  if(ghostRecII>0) hntrkghost_II->Fill(ghostRecII);
1103  if((nMCtracks-goodRecII)>0){
1104  hntrkmissed_II->Fill(nMCtracks-goodRecII);
1105  }
1106 
1107  for(int imc=0;imc<nParticles;imc++){//MC trks
1108  bool missTrk=true;
1109  for(int irec=0;irec<nGeaneTrks;irec++){//RECids assigment
1110  int mc_comp = RECtrkMCid[irec];
1111  if(mc_comp==imc) missTrk=false;
1112  }
1113 
1114  PndMCTrack *mctrk =(PndMCTrack*) true_tracks->At(imc);
1115  TVector3 MomMC = mctrk->GetMomentum();
1116  TVector3 PosMC = mctrk->GetStartVertex();
1117  int trkQ;
1118  if(missTrk) trkQ=-1;
1119  else trkQ=0;
1120  ntupMCTrk->Fill(PosMC.X(),PosMC.Y(),PosMC.Z(),MomMC.Mag(),MomMC.Theta(),MomMC.Phi(),trkQ,nRecHits);
1121  }
1122 
1123  if(verboseLevel>0){
1124  cout<<"-- (II) Hits matching -------------------------"<<endl;
1125  cout<<"Good trks: "<<goodRecII<<" missed: "<<nMCtracks-goodRecII<<" ghost: "<<ghostRecII<<endl;
1126  cout<<"--------------------------------"<<endl;
1127  cout<<" "<<endl;
1128  }
1129  // cout<<"number of good: "<<goodRecII<<" number of missed: "<<nMCtracks-goodRecII<<" number of ghost: "<<ghostRecII<<endl;
1131 
1132  // cout<<"nGeaneTrks = "<<nGeaneTrks<<" nRecGEANEtrk = "<<nRecGEANEtrk<<endl;
1133  hntrk->Fill(nRecGEANEtrk);
1135  // cout<<"========="<<endl;
1136  for(Int_t jk=0; jk< nParticles;jk++){
1137  // if(nParticles!=4) continue;
1138  PndMCTrack *mctrk =(PndMCTrack*) true_tracks->At(jk);
1139  Int_t mcID = mctrk->GetPdgCode();
1140  if(mcID==-2212){
1141  // if(nParticles!=4) cout<<"For event #"<<j<<" mcID="<<mcID<<endl;
1142  TVector3 MomMC = mctrk->GetMomentum();
1143  hallTheta->Fill(MomMC.Theta());
1144  hallPhi->Fill(MomMC.Phi());
1145  hallPhiTheta->Fill(MomMC.Theta(),MomMC.Phi());
1146  }
1147  }
1148  }
1149 
1150  // TCanvas *c1 = new TCanvas("IDsINFO");
1151  // c1->Divide(2,2);
1152  // c1->cd(1);
1153  // hnRecnMC->Draw();
1154  // c1->cd(2);
1155  // hntrkcand->Draw();
1156  // hntrk->SetLineColor(2);
1157  // hntrk->Draw("same");
1158  // c1->cd(3);
1159  // hDiffIDs->Draw();
1160  // c1->cd(4);
1161  // // hntrkcandvsIDs->Draw();
1162  // hchi2->Draw();
1163  // c1->Write();
1164  // c1->Close();
1165  TCanvas *c1 = new TCanvas("IDsINFO");
1166  c1->Divide(2,2);
1167  c1->cd(1);
1168  hnRecnMC->Draw("colz");
1169  c1->cd(2);
1170  hntrkcand->Draw();
1171  hntrk->SetLineColor(2);
1172  hntrk->Draw("same");
1173  c1->cd(3);
1174  hDiffIDs->Draw();
1175  c1->cd(4);
1176  // hntrkcandvsIDs->Draw("colz");
1177  // hntrkcandvsMC->Draw("colz");
1178  hnhitsvsIDs->Draw("colz");
1179  //hchi2->Draw();
1180  c1->Write();
1181  c1->Close();
1182 
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);
1189 
1190  TH2F *heffPhiTheta = (TH2F*)hgoodPhiTheta->Clone("heffPhiTheta");
1191  heffPhiTheta->SetTitle("Efficiency #phi & #theta");
1192  heffPhiTheta->Divide(hallPhiTheta);
1193 
1194  TCanvas *c2 = new TCanvas("EffINFO");
1195  c2->Divide(3,2);
1196  c2->cd(1);
1197  hallTheta->SetLineWidth(2);
1198  hallTheta->SetFillStyle(3354);
1199  hallTheta->SetFillColor(kBlack);
1200  hallTheta->Draw();
1201  hgoodTheta->SetLineWidth(2);
1202  hgoodTheta->SetLineColor(2);
1203  hgoodTheta->SetFillStyle(3690);
1204  hgoodTheta->SetFillColor(kRed);
1205  hgoodTheta->Draw("same");
1206  c2->cd(4);
1207  heffTheta->SetMinimum(0.9);
1208  heffTheta->Draw();
1209  c2->cd(3);
1210  hallPhiTheta->Draw("colz");
1211  c2->cd(2);
1212  hallPhi->SetLineWidth(2);
1213  hallPhi->SetFillStyle(3354);
1214  hallPhi->SetFillColor(kBlack);
1215  hallPhi->Draw();
1216  hgoodPhi->SetLineWidth(2);
1217  hgoodPhi->SetLineColor(2);
1218  hgoodPhi->SetFillColor(kRed);
1219  hgoodPhi->SetFillStyle(3690);
1220  hgoodPhi->Draw("same");
1221  c2->cd(5);
1222  heffPhi->SetMinimum(0.9);
1223  heffPhi->Draw();
1224  c2->cd(6);
1225  heffPhiTheta->Draw("colz");
1226 
1227  c2->Write();
1228  c2->Close();
1229 
1230  TF1 *funrp = new TF1("fitrp","gaus",-1e-5,1e-5);
1231  funrp->SetParameters(100,0,3e-3);
1232  funrp->SetParNames("Constant","Mean","Sigma");
1233 
1234  TF1 *funrth = new TF1("fitrth","gaus",-0.01,0.01);
1235  funrth->SetParameters(100,0,3e-3);
1236  funrth->SetParNames("Constant","Mean","Sigma");
1237 
1238  TF1 *funrphi = new TF1("fitrphi","gaus",-1,1);
1239  funrphi->SetParameters(100,0,3e-3);
1240  funrphi->SetParNames("Constant","Mean","Sigma");
1241 
1242  TF1 *funp = new TF1("fitp","gaus",-20,20);
1243  funp->SetParameters(100,0,3e-3);
1244  funp->SetParNames("Constant","Mean","Sigma");
1245 
1246  TCanvas *c3 = new TCanvas("ResMomINFO");
1247  c3->Divide(3,3);
1248  c3->cd(1);
1249  hResMom->Fit(funrp,"r");
1250  hResMom->Draw();
1251  c3->cd(2);
1252  hResTheta->Fit(funrth,"r");
1253  hResTheta->Draw();
1254  c3->cd(3);
1255  hResPhi->Fit(funrphi,"r");
1256  hResPhi->Draw();
1257  c3->cd(4);
1258  // hPullMom->Fit(funp,"r");
1259  hPullMom->Draw();
1260  c3->cd(5);
1261  hPullTheta->Fit(funp,"r");
1262  hPullTheta->Draw();
1263  c3->cd(6);
1264  hPullPhi->Fit(funp,"r");
1265  hPullPhi->Draw();
1266  c3->cd(7);
1267  hErrMom->Draw();
1268  c3->cd(8);
1269  hErrTheta->Draw();
1270  c3->cd(9);
1271  hErrPhi->Draw();
1272 
1273  c3->Write();
1274  c3->Close();
1275 
1276 
1277  TF1 *funcoord = new TF1("fitcoord","gaus",-1,1.);
1278  funcoord->SetParameters(1e4,0,1e-1);
1279  funcoord->SetParNames("Constant","Mean","Sigma");
1280 
1281  // TF1 *funp = new TF1("fitp","gaus",-10,10);
1282  funp->SetParameters(100,0,1);
1283  funp->SetParNames("Constant","Mean","Sigma");
1284 
1285  TCanvas *c4 = new TCanvas("ResPCAINFO");
1286  c4->Divide(3,3);
1287  c4->cd(1);
1288  hResPointX->Fit(funcoord,"r");
1289  hResPointX->Draw();
1290  c4->cd(2);
1291  hResPointY->Fit(funcoord,"r");
1292  hResPointY->Draw();
1293  c4->cd(3);
1294  hResPointZ->Fit(funcoord,"r");
1295  hResPointZ->Draw();
1296  c4->cd(4);
1297  hErrPointX->Draw();
1298  c4->cd(5);
1299  hErrPointY->Draw();
1300  c4->cd(6);
1301  hErrPointZ->Draw();
1302  c4->cd(7);
1303  hPullPointX->Fit(funp,"r");
1304  hPullPointX->Draw();
1305  c4->cd(8);
1306  hPullPointY->Fit(funp,"r");
1307  hPullPointY->Draw();
1308  c4->cd(9);
1309  hPullPointZ->Fit(funp,"r");
1310  hPullPointZ->Draw();
1311  c4->Write();
1312  c4->Close();
1313 
1314  TCanvas *c42 = new TCanvas("ResMomPointINFO");
1315  c42->Divide(3,3);
1316  c42->cd(1);
1317  hResPointPx->Fit(funcoord,"r");
1318  hResPointPx->Draw();
1319  c42->cd(2);
1320  hResPointPy->Fit(funcoord,"r");
1321  hResPointPy->Draw();
1322  c42->cd(3);
1323  hResPointPz->Fit(funcoord,"r");
1324  hResPointPz->Draw();
1325  c42->cd(4);
1326  hErrPointPx->Draw();
1327  c42->cd(5);
1328  hErrPointPy->Draw();
1329  c42->cd(6);
1330  hErrPointPz->Draw();
1331  c42->cd(7);
1332  hPullPointPx->Fit(funp,"r");
1333  hPullPointPx->Draw();
1334  c42->cd(8);
1335  hPullPointPy->Fit(funp,"r");
1336  hPullPointPy->Draw();
1337  c42->cd(9);
1338  hPullPointPz->Fit(funp,"r");
1339  hPullPointPz->Draw();
1340  c42->Write();
1341  c42->Close();
1342 
1343 
1344 
1345  TCanvas *c41 = new TCanvas("ResLinINFO");
1346  c41->Divide(2,2);
1347  c41->cd(1);
1348  hErrLinPointX->Draw();
1349  c41->cd(2);
1350  hErrLinPointY->Draw();
1351  c41->Write();
1352  c41->Close();
1353 
1354  // TCanvas *c5 = new TCanvas("HitIdINFO");
1355  // c5->Divide(1,2);
1356  // c5->cd(1);
1357  // hHitIDHitX->SetMarkerStyle(24);
1358  // hHitIDHitX->Draw();
1359  // c5->cd(2);
1360  // hHitIDHitY->SetMarkerStyle(24);
1361  // hHitIDHitY->Draw();
1362  // c5->Write();
1363  // c5->Close();
1364 
1365  TCanvas *c6 = new TCanvas("VertexINFO");
1366  c6->Divide(2,2);
1367  c6->cd(1);
1368  hPointXY->Draw();
1369  c6->cd(2);
1370  hPointXYcut->Draw();
1371  c6->cd(3);
1372  hErrPointXY->Draw();
1373  c6->Write();
1374  c6->Close();
1375 
1376  TCanvas *c7 = new TCanvas("GEANEvsRecINFO");
1377  c7->Divide(3,2);
1378  c7->cd(1);
1379  hRecGEANEX->Draw();
1380  c7->cd(2);
1381  hRecGEANEY->Draw();
1382  c7->cd(3);
1383  hRecGEANEZ->Draw();
1384  c7->cd(4);
1385  hRecGEANETheta->Draw();
1386  c7->cd(5);
1387  hRecGEANEPhi->Draw();
1388  c7->cd(6);
1389  hRecThetaPhi->Draw();
1390  c7->Write();
1391  c7->Close();
1392 
1393  TCanvas *c8 = new TCanvas("GEANEvsCandINFO");
1394  c8->Divide(3,2);
1395  c8->cd(1);
1396  hSeedGEANEX->Draw();
1397  c8->cd(2);
1398  hSeedGEANEY->Draw();
1399  c8->cd(3);
1400  hSeedGEANEZ->Draw();
1401  c8->cd(4);
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);
1409  uplim->Draw();
1410  downlim->Draw();
1411  // ---- Count number events in range [3-8] mrad ------------------------
1412  Int_t binx1, binx2;
1413  Int_t binmax = hSeedGEANETheta->GetNbinsX();
1414  for(int bin=0;bin<binmax;bin++){
1415  Double_t binCenter = hSeedGEANETheta->GetBinCenter(bin);
1416  if(binCenter>0.05){
1417  // if(binCenter>5){
1418  binx2 = bin;
1419  break;
1420  }
1421  }
1422  for(int bin=0;bin<binmax;bin++){
1423  Double_t binCenter = hSeedGEANETheta->GetBinCenter(bin);
1424  if(binCenter>0.03){
1425  binx1 = bin;
1426  break;
1427  }
1428  }
1429  // cout<<"binmax = "<<binmax<<" binx1 = "<<binx1<<" binx2 = "<<binx2<<endl;
1430  Double_t nall = hSeedGEANETheta->Integral(0, binmax);
1431  Double_t neff = hSeedGEANETheta->Integral(binx1, binx2);
1432  // cout<<"Number of track-candidate with #theta from [30-50] mrad = "<<neff<<endl;
1433  cout<<"Total number of track-candidate = "<<nall<<endl;
1434 
1435  //----------------------------------------------------------------------
1436  c8->cd(5);
1437  hSeedGEANEPhi->Draw();
1438  c8->cd(6);
1439  hSeedThetaPhi->Draw();
1440  c8->Write();
1441  c8->Close();
1442 
1443  TCanvas *c9 = new TCanvas("DCA");
1444  c9->Divide(3,2);
1445  c9->cd(1);
1446  hResDCA->Draw();
1447  c9->cd(2);
1448  hErrDCA->Draw();
1449  c9->cd(3);
1450  hPullDCA->Draw();
1451  c9->Write();
1452  c9->Close();
1453 
1454  hangMCRec->Write();
1455  hchi2->Write();
1456  heffTheta->Write();
1457  heffPhi->Write();
1458 
1459  hnRecnMC->Write();
1460  hDiffIDs->Write();
1461  hntrkcand->Write();
1462  hntrk->Write();
1463  hntrkcandvsIDs->Write();
1464 
1465  hResMom->Write();
1466  hErrMom->Write();
1467  hPullMom->Write();
1468  hResPhi->Write();
1469  hErrPhi->Write();
1470  hPullPhi->Write();
1471  hResTheta->Write();
1472  hErrTheta->Write();
1473  hPullTheta->Write();
1474  hangMCRec->Write();
1475  hPointXY->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();
1487  hchi2Errx->Write();
1488  hchi2Erry->Write();
1489 
1490  TCanvas *c10 = new TCanvas("ThetaPhiDistr");
1491  c10->Divide(4,2);
1492  // c10->cd(1);
1493  // hSeedThetaDiffIDs->Draw("colz");
1494  // c10->cd(2);
1495  // hSeedPhiDiffIDs->Draw("colz");
1496  // c10->cd(1);
1497  // hMCThetaGEANETheta->Draw("colz");
1498  // c10->cd(2);
1499  // hMCPhiGEANEPhi->Draw("colz");
1500  c10->cd(1);
1501  hMCThetaResTheta->Draw("colz");
1502  c10->cd(5);
1503  hMCPhiResPhi->Draw("colz");
1504 
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");
1512  TH1F *fdiffPhiMean;
1513  TH1F *fdiffPhiSigma;
1514  TH1F *fdiffPhiChi2;
1515  hMCPhiResPhi->FitSlicesY();
1516  fdiffPhiMean = (TH1F*)gDirectory->Get("hMCPhiResPhi_1");
1517  fdiffPhiSigma = (TH1F*)gDirectory->Get("hMCPhiResPhi_2");
1518  fdiffPhiChi2 = (TH1F*)gDirectory->Get("hMCPhiResPhi_chi2");
1519  c10->cd(2);
1520  fdiffThetaMean->Draw();
1521  c10->cd(6);
1522  fdiffPhiMean->Draw();
1523  c10->cd(3);
1524  fdiffThetaSigma->Draw();
1525  c10->cd(7);
1526  fdiffPhiSigma->Draw();
1527  c10->cd(4);
1528  fdiffThetaChi2->Draw();
1529  c10->cd(8);
1530  fdiffPhiChi2->Draw();
1531  c10->Write();
1532  c10->Close();
1533 
1534  TCanvas *c11 = new TCanvas("HitsUsing");
1535  c11->Divide(2,2);
1536  c11->cd(1);
1537  hntrkMCtrkID->Draw("colz");
1538  c11->cd(2);
1539  // hntrkMCtrkID->ProjectionY();
1540  // hntrkMCtrkID_py->Draw();
1541  c11->cd(3);
1542  // hntrkMCtrkID->ProjectionX();
1543  // hntrkMCtrkID_px->Draw();
1544  c11->Write();
1545  c11->Close();
1546 
1547  TCanvas *c12 = new TCanvas("TrkLin_and_MC");
1548  c12->Divide(3,3);
1549  c12->cd(1);
1550  hResLumiTrkMom->Fit(funrp,"r");
1551  hResLumiTrkMom->Draw();
1552  c12->cd(2);
1553  hResLumiTrkTheta->Fit(funrth,"r");
1554  hResLumiTrkTheta->Draw();
1555  c12->cd(3);
1556  hResLumiTrkPhi->Fit(funrphi,"r");
1557  hResLumiTrkPhi->Draw();
1558  c12->cd(4);
1559  hResLumiTrkPointX->Fit(funcoord,"r");
1560  hResLumiTrkPointX->Draw();
1561  c12->cd(5);
1562  hResLumiTrkPointY->Fit(funcoord,"r");
1563  hResLumiTrkPointY->Draw();
1564  c12->cd(6);
1565  hResLumiTrkPointZ->Fit(funcoord,"r");
1566  hResLumiTrkPointZ->Draw();
1567  c12->cd(7);
1568  hResLumiTrkPointPx->Fit(funp,"r");
1569  hResLumiTrkPointPx->Draw();
1570  c12->cd(8);
1571  hResLumiTrkPointPy->Fit(funp,"r");
1572  hResLumiTrkPointPy->Draw();
1573  c12->cd(9);
1574  hResLumiTrkPointPz->Fit(funp,"r");
1575  hResLumiTrkPointPz->Draw();
1576  c12->Write();
1577  c12->Close();
1578 
1579  TCanvas *c13 = new TCanvas("TrkLin_and_MC_pulls");
1580  c13->Divide(3,2);
1581  c13->cd(1);
1582  hResLumiTrkPointXPull->Fit(funp,"r");
1583  hResLumiTrkPointXPull->Draw();
1584  c13->cd(2);
1585  hResLumiTrkPointYPull->Fit(funp,"r");
1586  hResLumiTrkPointYPull->Draw();
1587  c13->cd(3);
1588  hResLumiTrkPointZPull->Fit(funp,"r");
1589  hResLumiTrkPointZPull->Draw();
1590  c13->cd(4);
1591  hResLumiTrkPointPxPull->Fit(funp,"r");
1592  hResLumiTrkPointPxPull->Draw();
1593  c13->cd(5);
1594  hResLumiTrkPointPyPull->Fit(funp,"r");
1595  hResLumiTrkPointPyPull->Draw();
1596  c13->cd(6);
1597  hResLumiTrkPointPzPull->Fit(funp,"r");
1598  hResLumiTrkPointPzPull->Draw();
1599  c13->Write();
1600  c13->Close();
1601 
1602  TCanvas *c14 = new TCanvas("TrkIP_andLin_and_MC_pulls");
1603  c14->Divide(3,2);
1604  c14->cd(1);
1605  //Grey = Trk near IP
1606  //Blue = Trk near Lumi
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");
1615  c14->cd(2);
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");
1624  c14->cd(3);
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");
1633  c14->cd(4);
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");
1642  c14->cd(5);
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");
1651  c14->cd(6);
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");
1660  c14->Write();
1661  c14->Close();
1662 
1663 
1664  hSeedThetaDiffIDs->Write();
1665  hSeedPhiDiffIDs->Write();
1666  hMCThetaGEANETheta->Write();
1667  hMCPhiGEANEPhi->Write();
1668  hMCThetaResTheta->Write();
1669  hMCPhiResPhi->Write();
1670 
1671  hDiffIDsPointX->Write();
1672  hDiffIDsPointY->Write();
1673  hDiffIDsPointZ->Write();
1674 
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();
1684 
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();
1694 
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();
1719  // hMomMC->Write();
1720  hResZResPhi->Write();
1721  nrecpointall->Write();
1722  nrecdirall->Write();
1723 
1724  TCanvas *c134 = new TCanvas("TrkLinparams");
1725  c134->Divide(2,2);
1726  c134->cd(1);
1727  hLumiTrkA->Draw();
1728  c134->cd(2);
1729  hLumiTrkB->Draw();
1730  c134->cd(3);
1731  hLumiTrkC->Draw();
1732  c134->cd(4);
1733  hLumiTrkD->Draw();
1734  c134->Write();
1735  c134->Close();
1736  hLumiTrkA->Write();
1737  hLumiTrkB->Write();
1738  hLumiTrkC->Write();
1739  hLumiTrkD->Write();
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();
1750  nmomMC->Write();
1751  ntuprecTrk->Write();
1752  ntupMCTrk->Write();
1753  hnhits->Write();
1754  nsectors->Write();
1755  hPullPointXphi->Write();
1756  hPullPointYphi->Write();
1757  hPullPointXtheta->Write();
1758  hPullPointYtheta->Write();
1759  f->Close();
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;
1763 }
Double_t GetChiSquare() const
Definition: PndLinTrack.h:80
double dy
TCanvas * c11
int verboseLevel
Definition: Lars/runMvdSim.C:7
c4
Definition: plot_dirc.C:71
TVector3 GetStartVec() const
Definition: PndLinTrack.h:70
__m128 m
Definition: P4_F32vec4.h:28
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
int nk
Definition: toy_core.C:124
static T Sqrt(const T &x)
Definition: PndCAMath.h:37
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
Int_t GetIndex(int i=0) const
Definition: PndSdsDigi.h:63
static PndLmdDim * Instance()
Definition: PndLmdDim.cxx:249
TCanvas * c7
PndTrackCandHit GetSortedHit(UInt_t i)
Definition: PndTrackCand.h:54
TCanvas * c10
Class for digitised strip hits.
int n
TFile * MCPoint
Definition: anaLmdDigi.C:25
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
void GetPar(Double_t *par) const
Definition: PndLinTrack.h:61
Int_t startEvent
c2
Definition: plot_dirc.C:39
void GetParErr(Double_t *errpar)
TString storePath
TString DigiFile
Int_t GetDigiIndex(Int_t i) const
Definition: PndSdsCluster.h:40
Double_t
void Get_sensor_by_id(const int sensor_id, int &ihalf, int &iplane, int &imodule, int &iside, int &idie, int &isensor)
Definition: PndLmdDim.h:526
Int_t nEvents
Definition: hit_dirc.C:11
TStopwatch timer
Definition: hit_dirc.C:51
TFile * f
Definition: bump_analys.C:12
Int_t GetBotIndex() const
Definition: PndSdsHit.h:96
TCanvas * c14
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
TFile * out
Definition: reco_muo.C:20
c1
Definition: plot_dirc.C:35
c3
Definition: plot_dirc.C:50
double dx
GFTrack * trk
Definition: checkgenfit.C:13
TVector3 GetDirectionVec() const
Definition: PndLinTrack.h:72
Double_t x
UInt_t GetNHits() const
Definition: PndTrackCand.h:59
Data class to store the digi output of a pixel module.
Int_t GetClusterIndex() const
Definition: PndSdsHit.h:94
Int_t GetTCandID() const
Definition: PndLinTrack.h:83
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
Int_t GetSensorID() const
Definition: PndSdsHit.h:90
Int_t GetHitId() const
Double_t Pi
TCanvas * c8
TVector3 GetStartErrVec()
Definition: PndLinTrack.cxx:63
TVector3 GetDirectionErrVec()
Definition: PndLinTrack.cxx:69