12 #include "TClonesArray.h" 13 #include "TGraphErrors.h" 14 #include "TPostScript.h" 20 #include "TPolyLine.h" 45 {
int a,b,
c,d,aTot,bTot,cTot,dTot,i,j,jFile,kNbFiles,iSM;
47 double minHist,maxHist,minHistProduct;
50 char SMP2Name[][100]={
"SMA0",
"SMC0",
"SMA1",
"SMC1",
"SMA2",
"SMC2",
"SMA3",
"SMC3",
"SMA4",
"SMC4",
"SMA5",
"SMC5",
"SMA9",
"SMC9",
"SMA10",
"SMC10",
"SMA11",
"SMC11",
"SMA12",
"SMC12"};
51 char SMnumber[][100]={
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19"};
55 char detTypeString[][100]={
"EMCAL",
"EMCALthird",
"DCAL",
"DCALthird"};
56 int SMdetType[]={
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCALthird,
kEMCALthird,
kDCAL,
kDCAL,
kDCAL,
kDCAL,
kDCAL,
kDCAL,
kDCALthird,kDCALthird};
84 FILE *txtFileOut = NULL;
87 txtFileOut = fopen(Form(
"multiplyPi0CalibrationFactors_TextToHisto_forIter%d.txt",kNbFiles),
"w");
88 TFile * f =
new TFile(Form(
"multiplyPi0CalibrationFactors_TextToHisto_forIter%d.root",kNbFiles),
"recreate");
89 sprintf(psfile,Form(
"multiplyPi0CalibrationFactors_TextToHisto_forIter%d.ps",kNbFiles));
109 FILE **calibCoeffsInput;
110 calibCoeffsInput =
new FILE*[kNbFiles];
113 calibCoeffsInput[0] = fopen(
"/cebaf/cebaf/EMCAL/calibPi0_run2/calibPi0_4_with2015data/output/pass0_mergedDCALandThirdSMs/output_calibPi0_coeffs_clean_veryHighTowers.txt",
"r");
115 calibCoeffsInput[1] = fopen(
"/cebaf/cebaf/EMCAL/calibPi0_run2/calibPi0_4_with2015data/output/pass1_DCALandThirdSMs/output_calibPi0_coeffs_clean_veryHighTowers.txt",
"r");
119 calibCoeffsInput[2] = fopen(
"/cebaf/cebaf/EMCAL/calibPi0_run2/calibPi0_4_with2015data/output/pass2_DCALandThirdSMsVeryHighTowers/output_calibPi0_coeffs_clean_AndersCorrectionTowersVeryFar.txt",
"r");
120 calibCoeffsInput[3] = fopen(
"/cebaf/cebaf/EMCAL/calibPi0_run2/calibPi0_4_with2015data/output/pass3_DCALandThirdSMsWithAndersCoeffsTowersVeryFarFromPDG/output_calibPi0_coeffs_cleanForMultiply.txt",
"r");
121 calibCoeffsInput[4] = fopen(
"/cebaf/cebaf/EMCAL/calibPi0_run2/calibPi0_4_with2015data/output/pass4_DCALandEMCALThirds/output_calibPi0_coeffs_cleanForMultiply.txt",
"r");
143 {h2Coeffs[i] =
new TH2F(Form(
"EMCALRecalFactors_SM%d",i),Form(
"EMCALRecalFactors_SM%d",i),kNbColMax,0,kNbColMax,kNbRowMax,0,kNbRowMax);
150 TH1F **hDistrNoonePerSM;
151 hSpace =
new TH2F*[(kNbFiles+1)*kNbSMtot];
152 hDistr =
new TH1F*[(kNbFiles+1)*2];
154 hDistrNoone =
new TH1F*[(kNbFiles+1)*2];
155 hDistrNoonePerSM =
new TH1F*[
kNbSMtot];
157 {hDistrPerSM[i] =
new TH1F(Form(
"hDistrPerSM%d",i),Form(
"hDistrPerSM%d",i),100,0.6,1.4);
158 hDistrPerSM[i]->SetXTitle(
"Coefficient");
159 hDistrPerSM[i]->SetYTitle(
"Counts");
160 hDistrPerSM[i]->SetStats(0);
161 hDistrNoonePerSM[i] =
new TH1F(Form(
"hDistrNoonePerSM%d",i),Form(
"hDistrNoonePerSM%d",i),100,0.6,1.4);
162 hDistrNoonePerSM[i]->SetXTitle(
"Coefficient");
163 hDistrNoonePerSM[i]->SetYTitle(
"Counts");
164 hDistrNoonePerSM[i]->SetStats(0);
165 for (j=0;j<kNbFiles+1;j++)
166 {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);
167 hSpace[(kNbFiles+1)*i+j]->SetXTitle(
"Column");
168 hSpace[(kNbFiles+1)*i+j]->SetYTitle(
"Row");
169 hSpace[(kNbFiles+1)*i+j]->SetStats(0);
170 hSpace[(kNbFiles+1)*i+j]->SetContour(30);
173 for (j=0;j<kNbFiles+1;j++)
174 {hDistr[j] =
new TH1F(Form(
"hDistr_%d",j),Form(
"hDistr_%d",j),100,0.0,3.0);
175 hDistr[j]->SetMaximum(20.);
176 hDistr[(kNbFiles+1)+j] =
new TH1F(Form(
"hDistrZm_%d",j),Form(
"hDistrZm_%d",j),100,0.85,1.15);
177 hDistrNoone[j] =
new TH1F(Form(
"hDistrNoone_%d",j),Form(
"hDistrNoone_%d",j),100,0.0,3.0);
178 hDistrNoone[j]->SetMaximum(20.);
179 hDistrNoone[(kNbFiles+1)+j] =
new TH1F(Form(
"hDistrNooneZm_%d",j),Form(
"hDistrNooneZm_%d",j),100,0.85,1.15);
181 {hDistr[(kNbFiles+1)*i+j]->SetXTitle(
"Coefficient");
182 hDistr[(kNbFiles+1)*i+j]->SetYTitle(
"Counts");
183 hDistr[(kNbFiles+1)*i+j]->SetStats(0);
184 hDistr[(kNbFiles+1)*i+j]->SetLineColor(4);
185 hDistrNoone[(kNbFiles+1)*i+j]->SetXTitle(
"Coefficient");
186 hDistrNoone[(kNbFiles+1)*i+j]->SetYTitle(
"Counts");
187 hDistrNoone[(kNbFiles+1)*i+j]->SetStats(0);
188 hDistrNoone[(kNbFiles+1)*i+j]->SetLineColor(4);
194 {
for(i = 0;i<kTabNbCol[SMdetType[iSM]]*kTabNbRow[SMdetType[iSM]];i++)
196 fscanf(calibCoeffsInput[jFile],
" %d %d %d %d %f\n", &a, &b, &c,&d,&e);
198 if (b != iSM) printf(
"$$$ File reading out of sync : received SM %d while expected %d.\n",b,iSM);
200 hSpace[(kNbFiles+1)*b+jFile]->Fill(c,d,e);
201 hDistr[jFile]->Fill(e);
202 hDistr[(kNbFiles+1)+jFile]->Fill(e);
204 {hDistrNoone[jFile]->Fill(e);
205 hDistrNoone[(kNbFiles+1)+jFile]->Fill(e);
212 for (jFile=1;jFile<kNbFiles;jFile++)
213 {fscanf(calibCoeffsInput[jFile],
" %d %d %d %d %f\n", &a, &b, &c,&d,&e);
214 if (bTot != b) printf(
"$$$ Files reading out of sync : (%d,%d,%d) vs (%d,%d,%d)\n",b,c,d,bTot,cTot,dTot);
215 if (cTot != c) printf(
"$$$ Files reading out of sync : (%d,%d,%d) vs (%d,%d,%d)\n",b,c,d,bTot,cTot,dTot);
216 if (dTot != d) printf(
"$$$ Files reading out of sync : (%d,%d,%d) vs (%d,%d,%d)\n",b,c,d,bTot,cTot,dTot);
218 hSpace[(kNbFiles+1)*b+jFile]->Fill(c,d,e);
219 hDistr[jFile]->Fill(e);
220 hDistr[(kNbFiles+1)+jFile]->Fill(e);
222 {hDistrNoone[jFile]->Fill(e);
223 hDistrNoone[(kNbFiles+1)+jFile]->Fill(e);
231 hSpace[(kNbFiles+1)*bTot+kNbFiles]->Fill(cTot,dTot,eTot);
232 hDistr[kNbFiles]->Fill(eTot);
233 hDistr[(kNbFiles+1)+kNbFiles]->Fill(eTot);
234 hDistrPerSM[bTot]->Fill(eTot);
236 {hDistrNoone[kNbFiles]->Fill(eTot);
237 hDistrNoone[(kNbFiles+1)+kNbFiles]->Fill(eTot);
238 hDistrNoonePerSM[bTot]->Fill(eTot);
240 fprintf(txtFileOut,
"%d %d %d %f\n",bTot,cTot,dTot,eTot);
241 if(eTot==0) printf(
"\n###### Coeff cannot be 0 ! Please check tower : %d %d %d %f #######\n\n",bTot,cTot,dTot,eTot);
242 else h2Coeffs[bTot]->SetBinContent(cTot,dTot,1./eTot);
249 const int cWidth=500;
250 const int cHeight=(int)(500*(29./21.));
251 TCanvas *c1 =
new TCanvas(
"c1",
"EMCal cosmics analysis",cWidth,cHeight);
252 TPostScript *ps =
new TPostScript(psfile,111);
259 for (j=0;j<kNbFiles;j++)
261 if (hSpace[(kNbFiles+1)*i+j]->GetMaximum() > maxHist) maxHist=hSpace[(kNbFiles+1)*i+j]->GetMaximum();
262 for (
int iCol=0;iCol<kTabNbCol[SMdetType[i]];iCol++)
263 {
for (
int iRow=0;iRow<kTabNbRow[SMdetType[i]];iRow++)
264 {
if (hSpace[(kNbFiles+1)*i+j]->GetBinContent(iCol+1,iRow+1) < minHist) minHist=hSpace[(kNbFiles+1)*i+j]->GetBinContent(iCol+1,iRow+1);
268 for (
int iCol=0;iCol<kTabNbCol[SMdetType[i]];iCol++)
269 {
for (
int iRow=0;iRow<kTabNbRow[SMdetType[i]];iRow++)
270 {
if (hSpace[(kNbFiles+1)*i+kNbFiles]->GetBinContent(iCol+1,iRow+1) < minHistProduct) minHistProduct=hSpace[(kNbFiles+1)*i+kNbFiles]->GetBinContent(iCol+1,iRow+1);
276 for (j=0;j<kNbFiles;j++)
278 hSpace[(kNbFiles+1)*i+j]->SetMinimum(minHist);
279 hSpace[(kNbFiles+1)*i+j]->SetMaximum(maxHist);
280 hSpace[(kNbFiles+1)*i+j]->
Draw(
"COLZ");
281 hSpace[(kNbFiles+1)*i+j]->Write();
284 hSpace[(kNbFiles+1)*i+kNbFiles]->SetMinimum(minHistProduct);
285 hSpace[(kNbFiles+1)*i+kNbFiles]->
Draw(
"COLZ");
286 hSpace[(kNbFiles+1)*i+kNbFiles]->Write();
296 for (j=0;j<kNbFiles;j++)
307 hDistr[(kNbFiles+1)*i+j]->
Draw();
308 hDistr[(kNbFiles+1)*i+j]->Write();
333 hDistr[(kNbFiles+1)*i+kNbFiles]->
Draw();
334 hDistr[(kNbFiles+1)*i+kNbFiles]->Write();
343 for (j=0;j<kNbFiles;j++)
345 printf(
"Histo coeffs pass %d ",j+1);
347 {
case 0 : printf(
"(large range) ");
349 case 1 : printf(
"(reduced range) ");
351 default : printf(
"##### unknown histo i=%d ##### \n",i);
353 printf(
": mean = %f, RMS = %f\n",hDistrNoone[(kNbFiles+1)*i+j]->GetMean(),hDistrNoone[(kNbFiles+1)*i+j]->GetRMS());
354 hDistrNoone[(kNbFiles+1)*i+j]->
Draw();
355 hDistrNoone[(kNbFiles+1)*i+j]->Write();
358 printf(
"Histo 'product of all coeffs' ");
360 {
case 0 : printf(
"(large range) ");
362 case 1 : printf(
"(reduced range) ");
364 default : printf(
"##### unknown histo i=%d ##### \n",i);
366 printf(
": mean = %f, RMS = %f\n",hDistrNoone[(kNbFiles+1)*i+kNbFiles]->GetMean(),hDistrNoone[(kNbFiles+1)*i+kNbFiles]->GetRMS());
368 {TF1 *func =
new TF1(
"func",
"gaus(0)",0.85,1.15);
369 func->SetParLimits(0,10.,500.);
370 func->SetParLimits(1,0.9,1.1);
371 func->SetParLimits(2,0.01,0.2);
372 func->SetParameter(0,hDistrNoone[(kNbFiles+1)+kNbFiles]->GetMaximum());
373 func->SetParameter(1,1.);
374 func->SetParameter(2,0.1);
376 hDistrNoone[(kNbFiles+1)+kNbFiles]->Fit(func,
"BRM");
378 printf(
"\nFit over 'product of all coeffs' (reduced range) : mean = %f, RMS = %f\n",func->GetParameter(1),func->GetParameter(2));
380 hDistrNoone[(kNbFiles+1)*i+kNbFiles]->
Draw();
381 hDistrNoone[(kNbFiles+1)*i+kNbFiles]->Write();
386 printf(
"\n\nHistoes 'product of all coeffs' for each SM :\n");
394 hDistrPerSM[j]->Draw();
395 hDistrPerSM[j]->Write();
403 {c1->cd(j-kNbSMEMCAL+1);
405 hDistrPerSM[j]->Draw();
406 hDistrPerSM[j]->Write();
416 printf(
" SM %d : mean = %f, RMS = %f\n",j,hDistrNoonePerSM[j]->GetMean(),hDistrNoonePerSM[j]->GetRMS());
417 hDistrNoonePerSM[j]->Draw();
418 hDistrNoonePerSM[j]->Write();
426 {c1->cd(j-kNbSMEMCAL+1);
427 printf(
" SM %d : mean = %f, RMS = %f\n",j,hDistrNoonePerSM[j]->GetMean(),hDistrNoonePerSM[j]->GetRMS());
428 hDistrNoonePerSM[j]->Draw();
429 hDistrNoonePerSM[j]->Write();
436 for (i=0;i<
kNbSMtot;i++) h2Coeffs[i]->Write();
442 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
void MultiplyPi0CalibrationFactors_TextToHisto()
const int kNbRowDCALthird
const int kNbSMEMCALthird
const int kNbRowEMCALthird
const int kNbColDCALthird