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