highestenergy_sumOfclusters += highestenergy[k]; if (k==NumberOfClusters_thresholdPassed-1) //eventually write the summation of the cluster enegies
11 gROOT->LoadMacro(
"$VMCWORKDIR/macro/mvd/Tools.C");
12 gROOT->Macro(
"$VMCWORKDIR/gconfig/rootlogon.C");
15 TString inputfile(
"/home/moini/myPandaRoot/myCodes/ROOTfiles/FullEmc_isotropicPhotonGeneration/emc_complete_10to5000MeVphotons.root");
16 TString outputfile(
"./energyCorrectionFactors_30MeVthreshold_cond2_Ntuple_10MillionEvt.root");
20 TFile*
fsim =
new TFile(inputfile);
22 TNtuple evtParams(
"EventParams",
"Selected Event parameters",
"eMc:eCluster:ClustEnCorrFactor:clustTheta:clustPhi");
24 TTree *
tsim=(TTree *) fsim->Get(
"pndsim") ;
26 tsim->SetBranchAddress(
"MCTrack",&mctrack_array);
28 TClonesArray*
digi_array=
new TClonesArray(
"PndEmcDigi");
29 tsim->SetBranchAddress(
"EmcDigi",&digi_array);
31 TClonesArray*
cluster_array=
new TClonesArray(
"PndEmcCluster");
32 tsim->SetBranchAddress(
"EmcCluster",&cluster_array);
40 Double_t clusterThresholdEnergy=0.030;
42 Int_t
ncounts = tsim->GetEntriesFast();
43 cout <<
"Number of events = " << ncounts<< endl;
46 TH1I *HISTnumberOfClusters_thresholdPassed =
new TH1I(
"HISTnumberOfClusters_thresholdPassed",
"Total number of clusters per event satisfying cluster threshold",140,0,70);
47 TH1F *moduleDistribution_3MeVthreshold =
new TH1F(
"moduleDistribution_3MeVthreshold",
"",10,0.25,5.25);
48 TH1F *moduleDistribution_10MeVthreshold =
new TH1F(
"moduleDistribution_10MeVthreshold",
"",10,0.25,5.25);
49 TH1F *moduleDistribution_30MeVthreshold =
new TH1F(
"moduleDistribution_30MeVthreshold",
"",10,0.25,5.25);
51 Double_t clusterEnergyCorrectionFactor_max = 0;
54 for (
int j = 0; j <
ncounts; j++) {
56 Double_t clusterEnergyCorrectionFactor = 0;
57 float ClustEnergy = 0.0;
58 float clustPhi, clustTheta;
64 theta_mc=photon_momentum.Theta()*(180./
TMath::Pi());
65 phi_mc=photon_momentum.Phi()*(180./
TMath::Pi());
69 Int_t NumberOfClusters, ClustNo, NumberOfClusters_thresholdPassed;
70 NumberOfClusters=ClustNo=NumberOfClusters_thresholdPassed=0;
71 Int_t idClusterSatisfiedThresholdEnergy=-1;
75 std::vector <double> highestenergy;
76 std::vector <double> originalClusterIndex;
78 if (cluster_array->GetEntriesFast() > 0)
80 NumberOfClusters=cluster_array->GetEntriesFast();
81 std::vector <double> clusterEnergies;
82 std::vector <double> clusterEnergies_original;
84 for (Int_t
i=0;
i<NumberOfClusters;
i++)
88 clusterEnergies.push_back(cluster_energy);
89 clusterEnergies_original.push_back(cluster_energy);
91 if (cluster_energy >= 0.003)
92 moduleDistribution_3MeVthreshold->Fill(cluster->
GetModule());
93 if (cluster_energy >= 0.010)
94 moduleDistribution_10MeVthreshold->Fill(cluster->
GetModule());
95 if (cluster_energy >= 0.030)
96 moduleDistribution_30MeVthreshold->Fill(cluster->
GetModule());
98 if (cluster_energy >= clusterThresholdEnergy)
100 NumberOfClusters_thresholdPassed++;
106 std::sort(clusterEnergies.begin(), clusterEnergies.end());
109 if (NumberOfClusters_thresholdPassed >= 1)
111 for (
int k=0; k<NumberOfClusters; k++)
113 highestenergy.push_back(clusterEnergies[(NumberOfClusters-1)-k]);
119 for (
int i=0;
i<NumberOfClusters;
i++)
120 if (!(clusterEnergies_original[
i]>highestenergy[k]) && !(clusterEnergies_original[
i]<highestenergy[k]))
121 originalClusterIndex.push_back(
i);
126 if (k==0 && (totalClusterEnergies >= (ene_mc - 0.050)) && NumberOfClusters_thresholdPassed==1)
131 ClustEnergy = cluster->
energy();
132 clusterEnergyCorrectionFactor = ene_mc/ClustEnergy;
133 if (clusterEnergyCorrectionFactor > clusterEnergyCorrectionFactor_max)
135 clusterEnergyCorrectionFactor_max = clusterEnergyCorrectionFactor;
142 evtParams.Fill(ene_mc, ClustEnergy, clusterEnergyCorrectionFactor, clustTheta, clustPhi);
149 if (NumberOfClusters_thresholdPassed>0)
150 HISTnumberOfClusters_thresholdPassed->Fill(NumberOfClusters_thresholdPassed);
154 cout<<
"Evt. No. "<< j<<endl;
156 cout <<
"clusterEnergyCorrectionFactor_max= "<<clusterEnergyCorrectionFactor_max <<
" for the Monte Carlo energy of "<< ene_mc_max<<
" GeV\n"<< endl;
159 TFile myoutPutFile(outputfile,
"RECREATE",
"Woww", 9);
160 HISTnumberOfClusters_thresholdPassed->Write();
161 moduleDistribution_3MeVthreshold->Write();
162 moduleDistribution_10MeVthreshold->Write();
163 moduleDistribution_30MeVthreshold->Write();
167 myoutPutFile.Close();
173 printf(
"RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
Short_t GetModule() const
TClonesArray * digi_array
TVector3 GetMomentum() const
TLorentzVector Get4Momentum() const
TClonesArray * cluster_array
a cluster (group of neighboring crystals) of hit emc crystals
virtual Double_t energy() const
TClonesArray * mctrack_array