FairRoot/PandaRoot
bump_analys.C
Go to the documentation of this file.
1 {
2  // Plot opening angle between 2 bumps and invariant mass of 2 bumps
3  // It is assumed that high enrgy pi0 was generated which lead to 1 cluster with 2 bumps
4 
5  Double_t threshold=0.02;
6 
7  gROOT->LoadMacro("$VMCWORKDIR/gconfig/rootlogon.C");
8  gROOT->LoadMacro("$VMCWORKDIR/gconfig/basiclibs.C");
9  rootlogon();
10  basiclibs();
11 
12  TFile* f = new TFile("cluster_emc.root"); //file you want to analyse
13  TTree *t=(TTree *) f->Get("pndsim") ;
14  TClonesArray* bump_array=new TClonesArray("PndEmcBump");
15  t->SetBranchAddress("EmcBump",&bump_array);
16 
17  TFile* fsim = new TFile("sim_emc.root"); //file you want to analyse
18  TTree *tsim=(TTree *) fsim->Get("pndsim") ;
19  TClonesArray* mctrack_array=new TClonesArray("PndMCTrack");
20  tsim->SetBranchAddress("MCTrack",&mctrack_array);
21 
22  TFile* fpar = new TFile("simparams.root");
23  fpar->Get("FairBaseParSet");
24 
26 
29 
30  TH1F *h_MC_angle= new TH1F("h_MC_angle","MC truth: opening angle of #pi^{0}",200,0.,15.);
31  TH1F *h_angle= new TH1F("h_angle","reconstructed opening angle of #pi^{0}",200,0.,15.);
32  TH1F *h_egamma= new TH1F("h_egamma","Energy of #gamma 's (MC truth)",100,0.0,10.0);
33  TH1F *h_ebump= new TH1F("h_ebump","Bump energy",100,0.0,10.0);
34  TH1F *h_MC= new TH1F("h_MC","Invariant mass",100,0.0,0.3);
35  TH1F *h_MC_mass= new TH1F("h_MC_mass","Invariant mass MC",100,0.0,0.3);
36 
37  TH2F *h_energy_vs_angle_MC=new TH2F("h_energy_vs_angle_MC", "Energy vs. opening angle", 100,0.0,10.0,100,0.,15.0);
38 
39 
40  TVector3 v1,v2; // Bump position
43 
44  // Bump energy
45  cout<<"Number of events : "<<t->GetEntriesFast()<<endl;
46  for (Int_t j=0; j< t->GetEntriesFast(); j++)
47  {
48  t->GetEntry(j);
49  for (Int_t i=0; i<bump_array->GetEntriesFast(); i++)
50  {
51  PndEmcBump *bump1=(PndEmcBump*)bump_array->At(i);
52  bump_energy1=bump1->energy();
53  if (bump_energy1<threshold) continue;
54  h_ebump->Fill(bump_energy1);
55  v1=bump1->where();
56 
57  for (Int_t k=i+1; k<bump_array->GetEntriesFast(); k++)
58  {
59  PndEmcBump *bump2=(PndEmcBump*)bump_array->At(k);
60  bump_energy2=bump2->energy();
61  if (bump_energy2<threshold) continue;
62  v2=bump2->where();
63  double alpha=v1.Angle(v2);
64  double invMass=sqrt(2*bump_energy1*bump_energy2*(1-cos(alpha)));
65  h_angle->Fill(alpha*TMath::RadToDeg());
66  h_MC->Fill(invMass);
67  }
68 
69  }
70  }
71 
72  TVector3 pi0_momentum;
73  for (Int_t j=0; j< t->GetEntriesFast(); j++)
74  {
75  tsim->GetEntry(j);
76 
77  for (Int_t i=0; i<mctrack_array->GetEntriesFast(); i++)
78  {
79  PndMCTrack *mctrack1=(PndMCTrack *) mctrack_array->At(i);
80  if (mctrack1->GetPdgCode()==22) // photons
81  {
82  mc_momentum1=mctrack1->GetMomentum();
83  mc_vertex1=mctrack1->GetStartVertex();
84  if (mc_vertex1.Mag()>2.) continue;
85  h_egamma->Fill(mc_momentum1.Mag());
86 
87  for (Int_t k=i+1; k<mctrack_array->GetEntriesFast(); k++)
88  {
89  PndMCTrack *mctrack2=(PndMCTrack *) mctrack_array->At(k);
90  if (mctrack2->GetPdgCode()==22) // photons
91  {
92  mc_momentum2=mctrack2->GetMomentum();
93  mc_vertex2=mctrack2->GetStartVertex();
94  if (mc_vertex2.Mag()>2.) continue;
95  double alphaMC=mc_momentum1.Angle(mc_momentum2);
96  double invMassMC=sqrt(2*mc_momentum1.Mag()*mc_momentum2.Mag()*(1-cos(alphaMC)));
97  h_MC_angle->Fill(alphaMC*TMath::RadToDeg());
98  h_MC_mass->Fill(invMassMC);
99  pi0_momentum=mc_momentum1+mc_momentum2;
100  h_energy_vs_angle_MC->Fill(pi0_momentum.Mag(),alphaMC*TMath::RadToDeg());
101 
102  }
103  }
104  }
105  }
106  }
107 
108  TCanvas* c1 = new TCanvas("c1", "c1", 100, 100, 800, 800);
109  c1->Divide(1,2);
110  c1->cd(1);
111  h_MC_angle->SetTitle("MC truth: opening angle of #pi^{0}");
112  h_MC_angle->GetXaxis()->SetTitle("Opening angle, degree");
113  h_MC_angle->Draw();
114 
115  c1->cd(2);
116  h_angle->SetTitle("reconstructed opening angle of #pi^{0}");
117  h_angle->GetXaxis()->SetTitle("Opening angle, degree");
118  h_angle->Draw();
119 
120  TCanvas* c2 = new TCanvas("c2", "c2", 100, 100, 800, 800);
121  c2->Divide(1,2);
122  c2->cd(1);
123  h_egamma->SetTitle("Energy of #gamma 's (MC truth)");
124  h_egamma->GetXaxis()->SetTitle("Energy, GeV");
125  h_egamma->Draw();
126 
127  c2->cd(2);
128  h_ebump->SetTitle("Energy of bumps");
129  h_ebump->GetXaxis()->SetTitle("Energy, GeV");
130  h_ebump->Draw();
131 
132  TCanvas* c3 = new TCanvas("c3", "c3", 100, 100, 800, 800);
133  c3->Divide(1,2);
134  c3->cd(1);
135  h_MC->SetTitle("Invariant mass");
136  h_MC->GetXaxis()->SetTitle("M, GeV");
137  h_MC->Draw();
138 
139  c3->cd(2);
140  h_MC_mass->SetTitle("Invariant mass MC");
141  h_MC_mass->GetXaxis()->SetTitle("M, GeV");
142  h_MC_mass->Draw();
143 
144  TCanvas* c4 = new TCanvas("c4", "c4", 100, 100, 800, 800);
145  h_energy_vs_angle_MC->SetTitle("Energy vs. opening angle (MC Truth)");
146  h_energy_vs_angle_MC->GetXaxis()->SetTitle("Energy, GeV");
147  h_energy_vs_angle_MC->GetYaxis()->SetTitle("Angle, degree");
148  h_energy_vs_angle_MC->Draw();
149 }
150 
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
TVector3 where() const
basiclibs()
c4
Definition: plot_dirc.C:71
TH1F * h_ebump
Definition: bump_analys.C:33
Int_t i
Definition: run_full.C:25
Double_t bump_energy2
Definition: bump_analys.C:42
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
TH2F * h_energy_vs_angle_MC
Definition: bump_analys.C:37
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
c2
Definition: plot_dirc.C:39
Double_t bump_energy1
Definition: bump_analys.C:41
TH1F * h_MC
Definition: bump_analys.C:34
Emc geometry mapper.
Definition: PndEmcMapper.h:22
TH1F * h_MC_mass
Definition: bump_analys.C:35
TVector3 mc_momentum1
Definition: bump_analys.C:27
TVector3 mc_momentum2
Definition: bump_analys.C:27
Double_t
PndEmcMapper * emcMap
TH1F * h_egamma
Definition: bump_analys.C:32
TFile * f
Definition: bump_analys.C:12
TH1F * h_angle
Definition: bump_analys.C:31
c1
Definition: plot_dirc.C:35
double threshold
c3
Definition: plot_dirc.C:50
TFile * fpar
Definition: bump_analys.C:22
TVector3 pi0_momentum
Definition: bump_analys.C:72
TVector3 v1
Definition: bump_analys.C:40
TH1F * h_MC_angle
Definition: bump_analys.C:30
virtual Double_t energy() const
TVector3 v2
Definition: bump_analys.C:40
TVector3 mc_vertex1
Definition: bump_analys.C:28
TTree * t
Definition: bump_analys.C:13
TVector3 mc_vertex2
Definition: bump_analys.C:28
TClonesArray * bump_array
Definition: bump_analys.C:14
double alpha
Definition: f_Init.h:9
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
TClonesArray * mctrack_array
static PndEmcMapper * Instance()
represents a reconstructed (splitted) emc cluster
Definition: PndEmcBump.h:34