FairRoot/PandaRoot
anaGemSmearing.C
Go to the documentation of this file.
1 // root macro to analyze the clusterization output
2 int anaGemSmearing(int nEvents = 10, bool verbose = false)
3 {
4 
5  // ----- Timer --------------------------------------------------------
6  TStopwatch timer;
7  timer.Start();
8  // ------------------------------------------------------------------------
9 
10 
11  TFile* f = new TFile("Gem_Test_Smeared.root"); // the sim file you want to analyse
12  TTree *t=(TTree *) f->Get("pndsim") ;
13  TClonesArray* hit_array=new TClonesArray("PndGemHit");
14  t->SetBranchAddress("GEMHit",&hit_array);//Branch names
15 
16  TFile* F = new TFile("Gem_Test.root"); // the sim file you want to analyse
17  TTree *T=(TTree *) F->Get("pndsim") ;
18  TClonesArray* mc_array=new TClonesArray("PndGemMCPoint");
19  T->SetBranchAddress("GEMPoint",&mc_array);//Branch names
20 
21  TH2D* hisxy = new TH2D("hisxy","GEM smeared Hits, xy view",100,-150.,150.,100,-150.,150.);
22  TH2D* hisrz = new TH2D("hisrz","GEM smeared Hits, rz view",100,0.,300.,100,-150.,150.);
23 
24  double rng = 0.5;
25  TH2D* hisDiffXY = new TH2D("hisdiffxy","",100,-rng,rng,100,-rng,rng);
26  hisDiffXY->SetTitle("MC - RECO Hit coordinates xy view;#Deltax / cm;#Deltay / cm");
27  TH2D* hisDiffRZ = new TH2D("hisdiffrz","",100,-rng,rng,100,0.,rng);
28  hisDiffRZ->SetTitle("MC - RECO Hit coordinates rz view;#Deltaz / cm;#Deltar / cm");
29 
30  TH1D* hisDiffX = new TH1D("hisdiffx","",100,-rng,rng);
31  hisDiffX->SetTitle("MC - RECO Hit coordinate x;x / cm;");
32  TH1D* hisDiffY = new TH1D("hisdiffy","",100,-rng,rng);
33  hisDiffY->SetTitle("MC - RECO Hit coordinate y;y / cm;");
34  TH1D* hisDiffZ = new TH1D("hisdiffz","",100,-rng,rng);
35  hisDiffZ->SetTitle("MC - RECO Hit coordinate z;z / cm;");
36 
37  TVector3 vecs, vecmc, vecdiif;
38 
39  for (Int_t j=0; j<nEvents && j<t->GetEntriesFast(); j++)
40  {
41  t->GetEntry(j);
42  T->GetEntry(j);
43  if(verbose) cout<<"Event No "<<j<<endl;
44  for (Int_t i=0; i<hit_array->GetEntriesFast(); i++)
45  {
46  if(verbose) cout<<"Point No "<<i<<endl;
47  PndGemHit *hit=(PndGemHit*)hit_array->At(i);
48  PndGemMCPoint *point=(PndGemMCPoint*)mc_array->At(i);
49  int mcpdg = -1;
50 
51  vecs.SetXYZ(hit->GetX(), hit->GetY(), hit->GetZ());
52  vecmc.SetXYZ(point->GetX(),point->GetY(),point->GetZ());
53  vecdiff = vecmc - vecs;
54  Int_t layer = Int_t(10.*vecs.Mag());
55  if(verbose) cout<<vecs.x()<<"\t"<<vecs.y()<<"\t"<<vecs.z()<<endl;
56  hisxy->Fill(vecs.x(),vecs.y());
57  int vz=1; if(vecs.y()<0) vz=-1;
58  hisrz->Fill(vecs.z(),vz*vecs.Perp());
59  hisDiffXY->Fill(vecdiff.x(),vecdiff.y());
60  hisDiffRZ->Fill(vecdiff.z(),vecdiff.Perp());
61  hisDiffX->Fill(vecdiff.x());
62  hisDiffY->Fill(vecdiff.y());
63  hisDiffZ->Fill(vecdiff.z());
64  }//end for i (points in event)
65  }// end for j (events)
66 
67 TCanvas* can1 = new TCanvas("GemTestPlot","MCHit view in GEM",0,0,1200,600);
68 can1->Divide(4,2);
69 
70 
71 can1->cd(1);
72 DrawNice2DHisto(hisxy);
73 can1->cd(2);
74 DrawNice2DHisto(hisrz);
75 
76 can1->cd(3);
77 DrawNice2DHisto(hisDiffXY);
78 can1->cd(4);
79 DrawNice2DHisto(hisDiffRZ);
80 
81 
82 
83  gStyle->SetOptFit();
84  Double_t par[6];
85 
86  TF1 *g1 = new TF1("g1","gaus",-0.07,0.07);
87  TF1 *g2 = new TF1("g2","gaus",-0.3,0.3);
88  TF1 *total = new TF1("total","gaus(0)+gaus(3)",-0.3,0.3);
89 
90  total->SetLineColor(kRed);
91  total->SetLineWidth(1);
92  g1->SetLineWidth(1);
93  g2->SetLineWidth(1);
94 
95 can1->cd(5);
96  hisDiffX->Fit(g1,"R");
97  hisDiffX->Fit(g2,"R+");
98  g1->GetParameters(&par[0]);
99  g2->GetParameters(&par[3]);
100  total->SetParameters(par);
101  hisDiffX->Fit(total,"R");//"R+"
102 hisDiffX->DrawCopy("");
103 
104 can1->cd(6);
105  hisDiffY->Fit(g1,"R");
106  hisDiffY->Fit(g2,"R+");
107  g1->GetParameters(&par[0]);
108  g2->GetParameters(&par[3]);
109  total->SetParameters(par);
110  hisDiffY->Fit(total,"R");//"R+"
111 hisDiffY->DrawCopy("");
112 
113 can1->cd(7);
114  hisDiffZ->Fit(g1,"R");
115  hisDiffZ->Fit(g2,"R+");
116  g1->GetParameters(&par[0]);
117  g2->GetParameters(&par[3]);
118  total->SetParameters(par);
119  hisDiffZ->Fit(total,"R");//"R+"
120 hisDiffZ->DrawCopy("");
121 
122 // can1->Print("outAnaGemIdealReco.ps");
123 //
124 //delete hisxy;
125 //delete hisrz;
126 //
127 //delete hisDiffXY;
128 //delete hisDiffRZ;
129 //
130 //delete hisDiffX;
131 //delete hisDiffY;
132 //delete hisDiffZ;
133 
134  // ----- Finish -------------------------------------------------------
135  timer.Stop();
136  Double_t rtime = timer.RealTime();
137  Double_t ctime = timer.CpuTime();
138  cout << endl << endl;
139  cout << "Macro finished succesfully." << endl;
140  cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl;
141  cout << endl;
142  // ------------------------------------------------------------------------
143 
144  return 0;
145 }
TH2D * hisDiffXY
Definition: anaLmdReco.C:57
Int_t i
Definition: run_full.C:25
TH1F * hisDiffX
Definition: anaLmdReco.C:62
#define verbose
DrawNice2DHisto(hisxy)
Double_t par[3]
TClonesArray * mc_array
Definition: anaLmdCluster.C:25
TH1F * hisDiffZ
Definition: anaLmdReco.C:66
TF1 * g2
TF1 * g1
TClonesArray * hit_array
TVector3 vecs
TH2D * hisDiffRZ
Definition: anaLmdReco.C:59
TTree * T
Definition: anaLmdReco.C:32
Double_t
TFile * F
Definition: anaLmdReco.C:31
Int_t nEvents
Definition: hit_dirc.C:11
TStopwatch timer
Definition: hit_dirc.C:51
TFile * f
Definition: bump_analys.C:12
TF1 * total
TVector3 vecmc
Definition: anaLmdCluster.C:52
TH2D * hisxy
Definition: anaLmdDigi.C:38
int mcpdg
Double_t ctime
Definition: hit_dirc.C:114
TH2D * hisrz
Definition: anaLmdDigi.C:41
Int_t layer
Definition: reco_muo.C:36
TVector3 vecdiif
Definition: anaLmdReco.C:73
TTree * t
Definition: bump_analys.C:13
TH1F * hisDiffY
Definition: anaLmdReco.C:64
PndSdsMCPoint * hit
Definition: anasim.C:70
TCanvas * can1
Double_t rtime
Definition: hit_dirc.C:113
TVector3 vecdiff
Definition: anaLmdReco.C:77
PndSdsMCPoint * point
Definition: anaLmdCluster.C:72
int anaGemSmearing(int nEvents=10, bool verbose=false)
Definition: anaGemSmearing.C:2