10 TH1F *h_energy=
new TH1F(
"h_energy",
"Cluster energy",100,0.8,1.2);
11 TH1F *h_energy_corr1=
new TH1F(
"h_energy_corr1",
"Cluster energy (corrected), (hist)",100,0.8,1.2);
12 TH1F *h_energy_corr2=
new TH1F(
"h_energy_corr2",
"Cluster energy (corrected), (parametrization)",100,0.8,1.2);
13 TH1F *h_energy_corr_old=
new TH1F(
"h_energy_corr_old",
"Cluster energy (corrected), (old)",100,0.8,1.2);
14 TH1F *h_energy_shashlyk=
new TH1F(
"h_energy_shashlyk",
"Cluster energy (shashlyk)",100,0.8,1.2);
15 TH1F *h_energy_shashlyk_corr1=
new TH1F(
"h_energy_shashlyk_corr1",
"Cluster energy (shashlyk) (corrected), (hist)",100,0.8,1.2);
16 TH1F *h_energy_shashlyk_corr2=
new TH1F(
"h_energy_shashlyk_corr2",
"Cluster energy (shashlyk) (corrected), (parametrization)",100,0.8,1.2);
17 TH1F *h_energy_shashlyk_corr_old=
new TH1F(
"h_energy_shashlyk_corr_old",
"Cluster energy (shashlyk) (corrected)",100,0.8,1.2);
20 TH2F *hEnergyRatioTheta=
new TH2F(
"hEnergyRatioTheta",
"Energy_reco/Energy_MC",100, 0., 180., 100, 0.8, 1.2);
21 hEnergyRatioTheta->GetXaxis()->SetTitle(
"Cluster Reconstructed #theta Angle (#circ)");
22 TH2F *hEnergyRatioEnergy=
new TH2F(
"hEnergyRatioEnergy",
"Energy_reco/Energy_MC",100, 0., 10., 100, 0.8, 1.2);
23 hEnergyRatioEnergy->GetXaxis()->SetTitle(
"Cluster Reconstructed Energy (GeV)");
24 TH2F *hEnergyRatioCorrEnergy1=
new TH2F(
"hEnergyRatioCorrEnergy1",
"Energy_reco (corrected)/Energy_MC, (hist)",100, 0., 10., 100, 0.8, 1.2);
25 hEnergyRatioCorrEnergy1->GetXaxis()->SetTitle(
"Cluster Reconstructed Energy (GeV)");
26 TH2F *hEnergyRatioCorrTheta1=
new TH2F(
"hEnergyRatioCorrTheta1",
"Energy_reco (corrected)/Energy_MC, (hist)",100, 0., 180., 100, 0.8, 1.2);
27 hEnergyRatioCorrTheta1->GetXaxis()->SetTitle(
"Cluster Reconstructed #theta Angle (#circ)");
28 TH2F *hEnergyRatioCorrEnergy2=
new TH2F(
"hEnergyRatioCorrEnergy2",
"Energy_reco (corrected)/Energy_MC, (parametrization)",100, 0., 10., 100, 0.8, 1.2);
29 hEnergyRatioCorrEnergy2->GetXaxis()->SetTitle(
"Cluster Reconstructed Energy (GeV)");
30 TH2F *hEnergyRatioCorrTheta2=
new TH2F(
"hEnergyRatioCorrTheta2",
"Energy_reco (corrected)/Energy_MC, (parametrization)",100, 0., 180., 100, 0.8, 1.2);
31 hEnergyRatioCorrTheta2->GetXaxis()->SetTitle(
"Cluster Reconstructed #theta Angle (#circ)");
32 TH2F *hEnergyRatioCorrEnergyOld=
new TH2F(
"hEnergyRatioCorrEnergyOld",
"Energy_reco (corrected)/Energy_MC, (old)",100, 0., 10., 100, 0.8, 1.2);
33 hEnergyRatioCorrEnergyOld->GetXaxis()->SetTitle(
"Cluster Reconstructed Energy (GeV)");
34 TH2F *hEnergyRatioCorrThetaOld=
new TH2F(
"hEnergyRatioCorrThetaOld",
"Energy_reco (corrected)/Energy_MC, (old)",100, 0., 180., 100, 0.8, 1.2);
35 hEnergyRatioCorrThetaOld->GetXaxis()->SetTitle(
"Cluster Reconstructed #theta Angle (#circ)");
38 TH1F *h_mpi0=
new TH1F(
"h_mpi0",
"pi0 invariant mass",100,0.05,0.2);
39 TH1F *h_mpi0_corr1=
new TH1F(
"h_mpi0_corr1",
"pi0 invariant mass (corrected) (hist)",100,0.05,0.2);
40 TH1F *h_mpi0_corr2=
new TH1F(
"h_mpi0_corr2",
"pi0 invariant mass (corrected) (parametrization)",100,0.05,0.2);
41 TH1F *h_mpi0_corr_old=
new TH1F(
"h_mpi0_corr_old",
"pi0 invariant mass (corrected) (old)",100,0.05,0.2);
43 TFile *
f=
new TFile(InputFile);
44 TTree *
t=(TTree *) f->Get(
"pndsim") ;
47 t->SetBranchAddress(
"MCTrack",&mctrack_array);
49 TClonesArray*
cluster_array=
new TClonesArray(
"PndEmcCluster");
50 t->SetBranchAddress(
"EmcCluster",&cluster_array);
63 if ((test==1)||(test==2))
65 for (Int_t j=0; j<t->GetEntriesFast(); j++)
70 energyMC=mc_momentum.Mag();
71 thetaMC=mc_momentum.Theta()*180./
TMath::Pi();
73 for (Int_t
i=0;
i<cluster_array->GetEntriesFast();
i++)
76 cluster_energy=cluster->
energy();
78 if (cluster_energy>max_energy)
81 TVector3 cluster_pos=cluster->
where();
82 cluster_theta=cluster_pos.Theta()*180./
TMath::Pi();
88 Double_t e_ratio=max_energy/energyMC;
89 Double_t e_ratio_corr1=energy_corr1/energyMC;
90 Double_t e_ratio_corr2=energy_corr2/energyMC;
91 Double_t e_ratio_corr_old=energy_corr_old/energyMC;
95 h_energy_shashlyk->Fill(max_energy);
96 h_energy_shashlyk_corr1->Fill(energy_corr1);
97 h_energy_shashlyk_corr2->Fill(energy_corr2);
98 h_energy_shashlyk_corr_old->Fill(energy_corr_old);
100 h_energy->Fill(max_energy);
101 h_energy_corr1->Fill(energy_corr1);
102 h_energy_corr2->Fill(energy_corr2);
103 h_energy_corr_old->Fill(energy_corr_old);
106 hEnergyRatioEnergy->Fill( energyMC, e_ratio);
107 hEnergyRatioTheta->Fill( thetaMC, e_ratio);
108 hEnergyRatioCorrEnergy1->Fill(energyMC, e_ratio_corr1);
109 hEnergyRatioCorrTheta1->Fill(thetaMC, e_ratio_corr1);
110 hEnergyRatioCorrEnergy2->Fill(energyMC, e_ratio_corr2);
111 hEnergyRatioCorrTheta2->Fill(thetaMC, e_ratio_corr2);
112 hEnergyRatioCorrEnergyOld->Fill(energyMC, e_ratio_corr_old);
113 hEnergyRatioCorrThetaOld->Fill(thetaMC, e_ratio_corr_old);
122 TVector3 v1_corr1,v2_corr1;
123 TVector3 v1_corr2,v2_corr2;
124 Double_t energy1, energy2, energy1_corr1, energy2_corr1;
125 Double_t energy1_corr2, energy2_corr2, energy1_corr_old, energy2_corr_old;
127 for (Int_t j=0; j< t->GetEntriesFast(); j++)
130 for (Int_t
i=0;
i<cluster_array->GetEntriesFast();
i++)
133 energy1=cluster1->
energy();
134 if (energy1<threshold)
continue;
135 v1=cluster1->
where();
136 energy1_corr1 = calibrator1->
Energy(cluster1);
137 v1_corr1 = calibrator1->
Where(cluster1);
138 energy1_corr2 = calibrator2->
Energy(cluster1);
139 v1_corr2 = calibrator2->
Where(cluster1);
142 for (Int_t k=
i; k<cluster_array->GetEntriesFast(); k++)
146 energy2=cluster2->
energy();
147 energy2_corr1 = calibrator1->
Energy(cluster2);
148 energy2_corr2 = calibrator2->
Energy(cluster2);
150 v2=cluster2->
where();
151 v2_corr1 = calibrator1->
Where(cluster2);
152 v2_corr2 = calibrator2->
Where(cluster2);
153 double alpha=v1.Angle(v2);
154 double invMass=
sqrt(2*energy1*energy2*(1-
cos(alpha)));
155 h_mpi0->Fill(invMass);
156 double alpha_corr1=v1_corr1.Angle(v2_corr1);
157 double invMass_corr1=
sqrt(2*energy1_corr1*energy2_corr1*(1-
cos(alpha_corr1)));
158 h_mpi0_corr1->Fill(invMass_corr1);
159 double alpha_corr2=v1_corr2.Angle(v2_corr2);
160 double invMass_corr2=
sqrt(2*energy1_corr2*energy2_corr2*(1-
cos(alpha_corr2)));
161 h_mpi0_corr2->Fill(invMass_corr2);
162 double invMass_corr_old=
sqrt(2*energy1_corr_old*energy2_corr_old*(1-
cos(alpha)));
163 h_mpi0_corr_old->Fill(invMass_corr_old);
172 TCanvas*
c1 =
new TCanvas(
"c1",
"Energy reconstruction vs Energy", 100, 100, 800, 800);
175 hEnergyRatioEnergy->Draw(
"contz");
176 TLine *l=
new TLine(0.,1.,10.,1.0);
182 hEnergyRatioCorrEnergy1->Draw(
"contz");
183 TLine *l=
new TLine(0.,1.,10.,1.0);
189 hEnergyRatioCorrEnergy2->Draw(
"contz");
190 TLine *l=
new TLine(0.,1.,10.,1.0);
202 TCanvas*
c2 =
new TCanvas(
"c2",
"Energy reconstruction vs Theta", 100, 100, 800, 800);
205 hEnergyRatioTheta->Draw(
"contz");
206 TLine *l=
new TLine(0.,1.,180.,1.0);
211 hEnergyRatioCorrTheta1->Draw(
"contz");
212 TLine *l=
new TLine(0.,1.,180.,1.0);
217 hEnergyRatioCorrTheta2->Draw(
"contz");
218 TLine *l=
new TLine(0.,1.,180.,1.0);
232 TCanvas*
c3 =
new TCanvas(
"c3",
"Energy (TS)", 100, 100, 800, 800);
237 h_energy_corr1->Draw();
239 h_energy_corr2->Draw();
243 TCanvas*
c4 =
new TCanvas(
"c4",
"Energy (shashlyk)", 100, 100, 800, 800);
246 h_energy_shashlyk->Draw();
248 h_energy_shashlyk_corr1->Draw();
250 h_energy_shashlyk_corr2->Draw();
256 gStyle->SetOptFit(kTRUE);
258 double pars[5]={800,0.13,0.01,100,-500};
259 TF1 *
f1 =
new TF1(
"f1",
"gaus(0)+pol1(3)",0.08,0.18);
260 TF1 *
f2 =
new TF1(
"f2",
"gaus(0)+pol1(3)",0.08,0.18);
261 TF1 *
f3 =
new TF1(
"f3",
"gaus(0)+pol1(3)",0.08,0.18);
262 TF1 *
f4 =
new TF1(
"f4",
"gaus(0)+pol1(3)",0.08,0.18);
263 f1->SetParameters(pars);
264 f2->SetParameters(pars);
265 f3->SetParameters(pars);
266 f4->SetParameters(pars);
268 TCanvas*
c5 =
new TCanvas(
"c5",
"pi0 mass", 100, 100, 800, 800);
274 h_mpi0_corr1->Draw();
275 h_mpi0_corr1->Fit(f2,
"R");
277 h_mpi0_corr2->Draw();
278 h_mpi0_corr2->Fit(f3,
"R");
friend F32vec4 cos(const F32vec4 &a)
friend F32vec4 sqrt(const F32vec4 &a)
TVector3 GetMomentum() const
virtual Double_t Energy(PndEmcCluster *clust, Int_t pid=22)=0
TClonesArray * cluster_array
static PndEmcAbsClusterCalibrator * MakeEmcClusterCalibrator(Int_t method, Int_t version=1)
a cluster (group of neighboring crystals) of hit emc crystals
virtual TVector3 Where(PndEmcCluster *clust, Int_t pid=22)=0
Double_t GetEnergyCorrected() const
virtual Double_t energy() const
TClonesArray * mctrack_array