12 #include "TClonesArray.h"
13 #include "TGraphErrors.h"
14 #include "TPostScript.h"
20 #include "TPolyLine.h"
47 {
int a,b,
c,d,aTot,bTot,cTot,dTot,i,j,jFile,kNbFiles,iSM;
49 double minHist,maxHist,minHistProduct;
52 char SMP2Name[][100]={
"SMA0",
"SMC0",
"SMA1",
"SMC1",
"SMA2",
"SMC2",
"SMA3",
"SMC3",
"SMA4",
"SMC4",
"SMA5",
"SMC5",
"SMA9",
"SMC9",
"SMA10",
"SMC10",
"SMA11",
"SMC11",
"SMA12",
"SMC12"};
53 char SMnumber[][100]={
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19"};
57 char detTypeString[][100]={
"EMCAL",
"EMCALthird",
"DCAL",
"DCALthird"};
58 int SMdetType[]={
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCALthird,
kEMCALthird,
kDCAL,
kDCAL,
kDCAL,
kDCAL,
kDCAL,
kDCAL,
kDCALthird,kDCALthird};
85 FILE *txtFileOut = NULL;
86 txtFileOut = fopen(
"multiplyPi0CalibrationFactors_TextToHisto_Final.txt",
"w");
87 TFile * f =
new TFile(
"multiplyPi0CalibrationFactors_TextToHisto_Final.root",
"recreate");
88 sprintf(psfile,
"multiplyPi0CalibrationFactors_TextToHisto_Final.ps");
93 FILE **calibCoeffsInput;
94 calibCoeffsInput =
new FILE*[kNbFiles];
96 calibCoeffsInput[0] = fopen(
"/cebaf/cebaf/EMCAL/calibPi0_run2/calibPi0_4_with2015data/output/pass0_mergedDCALandThirdSMs/output_calibPi0_coeffs_clean_veryHighTowers.txt",
"r");
97 calibCoeffsInput[1] = fopen(
"/cebaf/cebaf/EMCAL/calibPi0_run2/calibPi0_4_with2015data/output/pass1_DCALandThirdSMs/output_calibPi0_coeffs_clean_veryHighTowers.txt",
"r");
98 calibCoeffsInput[2] = fopen(
"/cebaf/cebaf/EMCAL/calibPi0_run2/calibPi0_4_with2015data/output/pass2_DCALandThirdSMsVeryHighTowers/output_calibPi0_coeffs_clean_finalFile4HVcalculation_setUntrustedToOne.txt",
"r");
103 {h2Coeffs[i] =
new TH2F(Form(
"EMCALRecalFactors_SM%d",i),Form(
"EMCALRecalFactors_SM%d",i),kNbColMax,0,kNbColMax,kNbRowMax,0,kNbRowMax);
110 TH1F **hDistrNoonePerSM;
111 hSpace =
new TH2F*[(kNbFiles+1)*kNbSMtot];
112 hDistr =
new TH1F*[(kNbFiles+1)*2];
114 hDistrNoone =
new TH1F*[(kNbFiles+1)*2];
115 hDistrNoonePerSM =
new TH1F*[
kNbSMtot];
117 {hDistrPerSM[i] =
new TH1F(Form(
"hDistrPerSM%d",i),Form(
"hDistrPerSM%d",i),100,0.6,1.4);
118 hDistrPerSM[i]->SetXTitle(
"Coefficient");
119 hDistrPerSM[i]->SetYTitle(
"Counts");
120 hDistrPerSM[i]->SetStats(0);
121 hDistrNoonePerSM[i] =
new TH1F(Form(
"hDistrNoonePerSM%d",i),Form(
"hDistrNoonePerSM%d",i),100,0.6,1.4);
122 hDistrNoonePerSM[i]->SetXTitle(
"Coefficient");
123 hDistrNoonePerSM[i]->SetYTitle(
"Counts");
124 hDistrNoonePerSM[i]->SetStats(0);
125 for (j=0;j<kNbFiles+1;j++)
126 {hSpace[(kNbFiles+1)*i+j] =
new TH2F(Form(
"hSpace_%d_%d",i,j),Form(
"hSpace_%d_%d",i,j),
kNbColMax,-0.5,kNbColMax-0.5,
kNbRowMax,-0.5,kNbRowMax-0.5);
127 hSpace[(kNbFiles+1)*i+j]->SetXTitle(
"Column");
128 hSpace[(kNbFiles+1)*i+j]->SetYTitle(
"Row");
129 hSpace[(kNbFiles+1)*i+j]->SetStats(0);
130 hSpace[(kNbFiles+1)*i+j]->SetContour(30);
133 for (j=0;j<kNbFiles+1;j++)
134 {hDistr[j] =
new TH1F(Form(
"hDistr_%d",j),Form(
"hDistr_%d",j),100,0.0,3.0);
135 hDistr[j]->SetMaximum(20.);
136 hDistr[(kNbFiles+1)+j] =
new TH1F(Form(
"hDistrZm_%d",j),Form(
"hDistrZm_%d",j),100,0.85,1.15);
137 hDistrNoone[j] =
new TH1F(Form(
"hDistrNoone_%d",j),Form(
"hDistrNoone_%d",j),100,0.0,3.0);
138 hDistrNoone[j]->SetMaximum(20.);
139 hDistrNoone[(kNbFiles+1)+j] =
new TH1F(Form(
"hDistrNooneZm_%d",j),Form(
"hDistrNooneZm_%d",j),100,0.85,1.15);
141 {hDistr[(kNbFiles+1)*i+j]->SetXTitle(
"Coefficient");
142 hDistr[(kNbFiles+1)*i+j]->SetYTitle(
"Counts");
143 hDistr[(kNbFiles+1)*i+j]->SetStats(0);
144 hDistr[(kNbFiles+1)*i+j]->SetLineColor(4);
145 hDistrNoone[(kNbFiles+1)*i+j]->SetXTitle(
"Coefficient");
146 hDistrNoone[(kNbFiles+1)*i+j]->SetYTitle(
"Counts");
147 hDistrNoone[(kNbFiles+1)*i+j]->SetStats(0);
148 hDistrNoone[(kNbFiles+1)*i+j]->SetLineColor(4);
154 {
for(i = 0;i<kTabNbCol[SMdetType[iSM]]*kTabNbRow[SMdetType[iSM]];i++)
156 fscanf(calibCoeffsInput[jFile],
" %d %d %d %d %f\n", &a, &b, &c,&d,&e);
158 if (b != iSM) printf(
"File reading out of sync : received SM %d while expected %d.\n",b,iSM);
159 hSpace[(kNbFiles+1)*b+jFile]->Fill(c,d,e);
160 hDistr[jFile]->Fill(e);
161 hDistr[(kNbFiles+1)+jFile]->Fill(e);
163 {hDistrNoone[jFile]->Fill(e);
164 hDistrNoone[(kNbFiles+1)+jFile]->Fill(e);
171 for (jFile=1;jFile<kNbFiles;jFile++)
172 {fscanf(calibCoeffsInput[jFile],
" %d %d %d %d %f\n", &a, &b, &c,&d,&e);
173 hSpace[(kNbFiles+1)*b+jFile]->Fill(c,d,e);
174 hDistr[jFile]->Fill(e);
175 hDistr[(kNbFiles+1)+jFile]->Fill(e);
177 {hDistrNoone[jFile]->Fill(e);
178 hDistrNoone[(kNbFiles+1)+jFile]->Fill(e);
180 if (bTot != b) printf(
"Files reading out of sync : (%d,%d,%d) vs (%d,%d,%d)\n",b,c,d,bTot,cTot,dTot);
181 if (cTot != c) printf(
"Files reading out of sync : (%d,%d,%d) vs (%d,%d,%d)\n",b,c,d,bTot,cTot,dTot);
182 if (dTot != d) printf(
"Files reading out of sync : (%d,%d,%d) vs (%d,%d,%d)\n",b,c,d,bTot,cTot,dTot);
184 if (jFile == (kNbFiles-1))
185 {
if (e == 1) eTot=1.0;
188 hSpace[(kNbFiles+1)*bTot+kNbFiles]->Fill(cTot,dTot,eTot);
189 hDistr[kNbFiles]->Fill(eTot);
190 hDistr[(kNbFiles+1)+kNbFiles]->Fill(eTot);
191 hDistrPerSM[bTot]->Fill(eTot);
193 {hDistrNoone[kNbFiles]->Fill(eTot);
194 hDistrNoone[(kNbFiles+1)+kNbFiles]->Fill(eTot);
195 hDistrNoonePerSM[bTot]->Fill(eTot);
197 fprintf(txtFileOut,
"%d %d %d %f\n",bTot,cTot,dTot,eTot);
198 if(eTot==0) printf(
"\n###### Coeff cannot be 0 ! Please check tower : %d %d %d %f #######\n\n",bTot,cTot,dTot,eTot);
199 else h2Coeffs[bTot]->SetBinContent(cTot,dTot,1./eTot);
206 const int cWidth=500;
207 const int cHeight=(int)(500*(29./21.));
208 TCanvas *c1 =
new TCanvas(
"c1",
"EMCal cosmics analysis",cWidth,cHeight);
209 TPostScript *ps =
new TPostScript(psfile,111);
216 for (j=0;j<kNbFiles;j++)
218 if (hSpace[(kNbFiles+1)*i+j]->GetMaximum() > maxHist) maxHist=hSpace[(kNbFiles+1)*i+j]->GetMaximum();
219 for (
int iCol=0;iCol<kTabNbCol[SMdetType[i]];iCol++)
220 {
for (
int iRow=0;iRow<kTabNbRow[SMdetType[i]];iRow++)
221 {
if (hSpace[(kNbFiles+1)*i+j]->GetBinContent(iCol+1,iRow+1) < minHist) minHist=hSpace[(kNbFiles+1)*i+j]->GetBinContent(iCol+1,iRow+1);
225 for (
int iCol=0;iCol<kTabNbCol[SMdetType[i]];iCol++)
226 {
for (
int iRow=0;iRow<kTabNbRow[SMdetType[i]];iRow++)
227 {
if (hSpace[(kNbFiles+1)*i+kNbFiles]->GetBinContent(iCol+1,iRow+1) < minHistProduct) minHistProduct=hSpace[(kNbFiles+1)*i+kNbFiles]->GetBinContent(iCol+1,iRow+1);
233 for (j=0;j<kNbFiles;j++)
235 hSpace[(kNbFiles+1)*i+j]->SetMinimum(minHist);
236 hSpace[(kNbFiles+1)*i+j]->SetMaximum(maxHist);
237 hSpace[(kNbFiles+1)*i+j]->
Draw(
"COLZ");
238 hSpace[(kNbFiles+1)*i+j]->Write();
241 hSpace[(kNbFiles+1)*i+kNbFiles]->SetMinimum(minHistProduct);
242 hSpace[(kNbFiles+1)*i+kNbFiles]->
Draw(
"COLZ");
243 hSpace[(kNbFiles+1)*i+kNbFiles]->Write();
253 for (j=0;j<kNbFiles;j++)
264 hDistr[(kNbFiles+1)*i+j]->
Draw();
265 hDistr[(kNbFiles+1)*i+j]->Write();
290 hDistr[(kNbFiles+1)*i+kNbFiles]->
Draw();
291 hDistr[(kNbFiles+1)*i+kNbFiles]->Write();
300 for (j=0;j<kNbFiles;j++)
302 printf(
"Histo coeffs pass %d ",j+1);
304 {
case 0 : printf(
"(large range) ");
306 case 1 : printf(
"(reduced range) ");
308 default : printf(
"##### unknown histo i=%d ##### \n",i);
310 printf(
": mean = %f, RMS = %f\n",hDistrNoone[(kNbFiles+1)*i+j]->GetMean(),hDistrNoone[(kNbFiles+1)*i+j]->GetRMS());
311 hDistrNoone[(kNbFiles+1)*i+j]->
Draw();
312 hDistrNoone[(kNbFiles+1)*i+j]->Write();
315 printf(
"Histo 'product of all coeffs' ");
317 {
case 0 : printf(
"(large range) ");
319 case 1 : printf(
"(reduced range) ");
321 default : printf(
"##### unknown histo i=%d ##### \n",i);
323 printf(
": mean = %f, RMS = %f\n",hDistrNoone[(kNbFiles+1)*i+kNbFiles]->GetMean(),hDistrNoone[(kNbFiles+1)*i+kNbFiles]->GetRMS());
325 {TF1 *func =
new TF1(
"func",
"gaus(0)",0.85,1.15);
326 func->SetParLimits(0,10.,500.);
327 func->SetParLimits(1,0.9,1.1);
328 func->SetParLimits(2,0.01,0.2);
329 func->SetParameter(0,hDistrNoone[(kNbFiles+1)+kNbFiles]->GetMaximum());
330 func->SetParameter(1,1.);
331 func->SetParameter(2,0.1);
333 hDistrNoone[(kNbFiles+1)+kNbFiles]->Fit(func,
"BRM");
335 printf(
"\nFit over 'product of all coeffs' (reduced range) : mean = %f, RMS = %f\n",func->GetParameter(1),func->GetParameter(2));
337 hDistrNoone[(kNbFiles+1)*i+kNbFiles]->
Draw();
338 hDistrNoone[(kNbFiles+1)*i+kNbFiles]->Write();
343 printf(
"\n\nHistoes 'product of all coeffs' for each SM :\n");
351 hDistrPerSM[j]->Draw();
352 hDistrPerSM[j]->Write();
360 {c1->cd(j-kNbSMEMCAL+1);
362 hDistrPerSM[j]->Draw();
363 hDistrPerSM[j]->Write();
373 printf(
" SM %d : mean = %f, RMS = %f\n",j,hDistrNoonePerSM[j]->GetMean(),hDistrNoonePerSM[j]->GetRMS());
374 hDistrNoonePerSM[j]->Draw();
375 hDistrNoonePerSM[j]->Write();
383 {c1->cd(j-kNbSMEMCAL+1);
384 printf(
" SM %d : mean = %f, RMS = %f\n",j,hDistrNoonePerSM[j]->GetMean(),hDistrNoonePerSM[j]->GetRMS());
385 hDistrNoonePerSM[j]->Draw();
386 hDistrNoonePerSM[j]->Write();
393 for (i=0;i<
kNbSMtot;i++) h2Coeffs[i]->Write();
399 for (jFile=kNbFiles-1;jFile>-1;jFile--) fclose(calibCoeffsInput[jFile]);
void Draw(const char *filename, const char *title="", const char *others="ALL", const char *options="DEFAULT", const char *outFlg="ALL", UShort_t rebin=5, Float_t eff=0, const char *base="")
const int kNbColEMCALthird
char detTypeString[][100]
const int kNbColOffsetDCAL
const int kNbRowDCALthird
const int kNbSMEMCALthird
const int kNbRowEMCALthird
const int kNbColDCALthird
void MultiplyPi0CalibrationFactors_TextToHisto_Final()