21 #include <TApplication.h> 29 #include <TPostScript.h> 33 #include <TGraphErrors.h> 42 namespace std {}
using namespace std;
51 char SMP2Name[][100]={
"SMA0",
"SMC0",
"SMA1",
"SMC1",
"SMA2",
"SMC2",
"SMA3",
"SMC3",
"SMA4",
"SMC4",
"SMA5",
"SMC5",
"SMA9",
"SMC9",
"SMA10",
"SMC10",
"SMA11",
"SMC11",
"SMA12",
"SMC12"};
52 char SMcalibName[][100]={
"US2",
"US1",
"EU2",
"EU1",
"US3",
"US5",
"US4",
"EU3",
"US7",
"US6",
"US8C0",
"US8C2",
"DCN1",
"DJP1",
"DUS2",
"DUS1",
"DJP2",
"DUS3",
"CN1A",
"CN1C"};
53 char SMnumber[][100]={
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19"};
58 int SMdetType[]={
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCAL,
kEMCALthird,
kEMCALthird,
kDCAL,
kDCAL,
kDCAL,
kDCAL,
kDCAL,
kDCAL,
kDCALthird,kDCALthird};
134 void CalcNewHVperSM(
TString hvFileName,
TString paramFileName,
int smNb,
char *fchNameBase,FILE *outFile,FILE *badGainFileOut,
double coeffOCDB[kNbSMtot][kNbColMax][kNbRowMax],
double coeffCalib[kNbSMtot][kNbColMax][kNbRowMax],
double forcedGainChange[kNbSMtot][kNbColMax][kNbRowMax],
double forcedOCDBcoeff[kNbSMtot][kNbColMax][kNbRowMax],
int flag[kNbSMtot][kNbColMax][kNbRowMax],TPostScript *ps,TCanvas *c1)
135 {
int nbTowersAbove395,nbTowersBelowMin,nbTowersLargeModif,nbTowersBadHVscan,nbTowersProblem;
136 int icol,irow,expectSameE;
137 double hv,p0,p1,p2,gainChange,newHV,tmpNewHV;
142 double ampliIn,Eout1,Eout2,Ediff,initialGain,newGain;
144 double kMaxDeltaGainLook=2.0;
145 double kMaxDeltaGainAuthorize=3.0;
146 double kMaxDeltaHVgraph=50.;
149 double kMaxDeltaHVcut=10.;
151 double kMaxEmismatchCut=0.01;
156 {printf(
" (side A)\n");
157 fprintf(outFile,
" (side A) -----\n\n");
160 {printf(
" (side C)\n");
161 fprintf(outFile,
" (side C) -----\n\n");
165 FILE *inFile,*outHVFile,*outParamFile;
166 inFile=fopen(hvFileName.Data(),
"r");
167 if(!inFile) {printf(
"File %s can not be found\n",hvFileName.Data());exit(-1);}
168 while (fscanf(inFile,
"%d %d %lf\n",&icol,&irow,&hv)>0)
169 {
if (smNb == 10) HVtab[icol][irow]=hv;
170 else HVtab[icol][irow-16]=hv;
174 inFile=fopen(paramFileName.Data(),
"r");
175 if(!inFile) {printf(
"File %s can not be found\n",paramFileName.Data());exit(-1);}
176 while(fscanf(inFile,
"%d %d %lf %lf %lf\n",&icol,&irow,&p0,&p1,&p2)>0)
178 {p0tab[icol][irow]=p0;
179 p1tab[icol][irow]=p1;
180 p2tab[icol][irow]=p2;
183 {p0tab[icol][irow-16]=p0;
184 p1tab[icol][irow-16]=p1;
185 p2tab[icol][irow-16]=p2;
191 TH1F *hEChange =
new TH1F(Form(
"hEChange%d",smNb),Form(
"hEChange%d",smNb),80,-50.,50.);
192 hEChange->SetXTitle(
"(E_{2}-E_{1})/E_{1} (%)");
193 hEChange->SetYTitle(
"Counts");
194 hEChange->SetStats(0);
195 TH1F *hEChangeLogP =
new TH1F(Form(
"hEChangeLogP%d",smNb),Form(
"hEChangeLogP%d",smNb),80,-3.,3.);
196 hEChangeLogP->SetXTitle(
"log [(E_{2}-E_{1})/E_{1} (%)]");
197 hEChangeLogP->SetYTitle(
"Counts");
198 hEChangeLogP->SetStats(0);
199 TH1F *hEChangeLogN =
new TH1F(Form(
"hEChangeLogN%d",smNb),Form(
"hEChangeLogN%d",smNb),80,-3.,3.);
200 hEChangeLogN->SetXTitle(
"log [(E_{2}-E_{1})/E_{1} (%)]");
201 hEChangeLogN->SetYTitle(
"Counts");
202 hEChangeLogN->SetStats(0);
203 TH2F *h2HVdiffVsOCDB =
new TH2F(Form(
"h2HVdiffVsOCDB%d",smNb),Form(
"h2HVdiffVsOCDB%d",smNb),80,0.,5.,80,-kMaxDeltaHVgraph,kMaxDeltaHVgraph);
204 h2HVdiffVsOCDB->SetXTitle(
"OCDB factor / 0.0162");
205 h2HVdiffVsOCDB->SetYTitle(
"NewHV - OldHV (V)");
206 h2HVdiffVsOCDB->SetStats(0);
207 h2HVdiffVsOCDB->SetContour(30);
208 TH2F *h2HVdiffVsOCDBZm =
new TH2F(Form(
"h2HVdiffVsOCDBZm%d",smNb),Form(
"h2HVdiffVsOCDBZm%d",smNb),80,0.5,2.,80,-30.,30.);
209 h2HVdiffVsOCDBZm->SetXTitle(
"OCDB factor / 0.0162");
210 h2HVdiffVsOCDBZm->SetYTitle(
"NewHV - OldHV (V)");
211 h2HVdiffVsOCDBZm->SetStats(0);
212 h2HVdiffVsOCDBZm->SetContour(30);
213 TH2F *hSpaceHVbefore =
new TH2F(Form(
"hSpaceHVbefore%d",smNb),Form(
"hSpaceHVbefore%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
214 hSpaceHVbefore->SetXTitle(
"Column");
215 hSpaceHVbefore->SetYTitle(
"Row");
216 hSpaceHVbefore->SetStats(0);
217 hSpaceHVbefore->SetContour(30);
218 TH2F *hSpaceHVafter =
new TH2F(Form(
"hSpaceHVafter%d",smNb),Form(
"hSpaceHVafter%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
219 hSpaceHVafter->SetXTitle(
"Column");
220 hSpaceHVafter->SetYTitle(
"Row");
221 hSpaceHVafter->SetStats(0);
222 hSpaceHVafter->SetContour(30);
223 TH2F *hSpaceOCDBbefore =
new TH2F(Form(
"hSpaceOCDBbefore%d",smNb),Form(
"hSpaceOCDBbefore%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
224 hSpaceOCDBbefore->SetXTitle(
"Column");
225 hSpaceOCDBbefore->SetYTitle(
"Row");
226 hSpaceOCDBbefore->SetStats(0);
227 hSpaceOCDBbefore->SetContour(30);
228 TH2F *hSpaceOCDBafter =
new TH2F(Form(
"hSpaceOCDBafter%d",smNb),Form(
"hSpaceOCDBafter%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
229 hSpaceOCDBafter->SetXTitle(
"Column");
230 hSpaceOCDBafter->SetYTitle(
"Row");
231 hSpaceOCDBafter->SetStats(0);
232 hSpaceOCDBafter->SetContour(30);
233 TH2F *hSpaceAboveBefore =
new TH2F(Form(
"hSpaceAboveBefore%d",smNb),Form(
"hSpaceAboveBefore%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
234 hSpaceAboveBefore->SetXTitle(
"Column");
235 hSpaceAboveBefore->SetYTitle(
"Row");
236 hSpaceAboveBefore->SetStats(0);
237 hSpaceAboveBefore->SetContour(30);
238 TH2F *hSpaceAboveAfter =
new TH2F(Form(
"hSpaceAboveAfter%d",smNb),Form(
"hSpaceAboveAfter%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
239 hSpaceAboveAfter->SetXTitle(
"Column");
240 hSpaceAboveAfter->SetYTitle(
"Row");
241 hSpaceAboveAfter->SetStats(0);
242 hSpaceAboveAfter->SetContour(30);
248 nbTowersLargeModif=0;
253 for(icol=0;icol<kTabNbCol[
SMdetType[smNb]];icol++)
254 {
for(irow=0;irow<kTabNbRow[SMdetType[smNb]];irow++)
257 {hv=HVtab[icol][irow];
258 p0=p0tab[icol][irow];
259 p1=p1tab[icol][irow];
260 p2=p2tab[icol][irow];
263 hSpaceHVbefore->Fill(icol,irow,hv);
264 hSpaceOCDBbefore->Fill(icol,irow,coeffOCDB[smNb][icol][irow]/
coefFactorWanted);
269 if ((coeffCalib[smNb][icol][irow] == 1.0) && (flag[smNb][icol][irow] == 5))
270 {fprintf(outFile,
"######## Tower with calib coeff 1.0 (%d,%d,%d) ### do nothing.\n",smNb,icol,irow);
271 fprintf(badGainFileOut,
"%d %2d %2d XXX2 %f %4.2f %f %f\n",smNb,icol,irow,gainChange,1.,forcedGainChange[smNb][icol][irow],forcedOCDBcoeff[smNb][icol][irow]);
277 if ((p1==0.) && (p2==0.))
280 fprintf(outFile,
"######## Bad HV scan for tower (%d,%d,%d), HV %7.3f ### use default parameters.\n",smNb,icol,irow,hv);
281 fprintf(outFile,
"######## CAUTION : EMCAL thirds 2015 only !!!!!!\n");
289 if ((p1<=0.) || (p2<=0.))
290 {fprintf(outFile,
"######## Bad HV scan parameters for tower (%d,%d,%d), HV %7.3f (params : %f %e %f) ### do nothing.\n",smNb,icol,irow,hv,p0,p1,p2);
295 if ( (p0 + p1 * exp(p2*(hv-kMaxDeltaHVcut-10.))) < 0. )
296 {fprintf(outFile,
"######## Bad HV scan value for tower (%d,%d,%d), HV %7.3f (params : %f %e %f) ### do nothing.\n",smNb,icol,irow,hv,p0,p1,p2);
304 if (flag[smNb][icol][irow] == 0)
305 {fprintf(badGainFileOut,
"%d %2d %2d XXX %f %4.2f %f %f\n",smNb,icol,irow,gainChange,1.,forcedGainChange[smNb][icol][irow],forcedOCDBcoeff[smNb][icol][irow]);
309 if (flag[smNb][icol][irow] == -3)
310 {fprintf(badGainFileOut,
"%d %2d %2d -3 %f %4.2f %f %f\n",smNb,icol,irow,gainChange,1.,forcedGainChange[smNb][icol][irow],forcedOCDBcoeff[smNb][icol][irow]);
311 gainChange=forcedGainChange[smNb][icol][irow];
312 initialGain = p0 + p1 * exp(p2*hv);
313 newGain = initialGain * gainChange;
314 Eout1=ampliIn*initialGain*coeffOCDB[smNb][icol][irow];
316 if ((newGain-p0) > 0)
317 {newHV = log ( (newGain - p0)/p1 ) / p2;
318 HVtab[icol][irow]=newHV;
319 coeffOCDB[smNb][icol][irow]=forcedOCDBcoeff[smNb][icol][irow];
320 Eout2=ampliIn*(p0 + p1 * exp(p2*newHV))*coeffOCDB[smNb][icol][irow];
321 h2HVdiffVsOCDB->Fill(gainChange,newHV-hv);
322 h2HVdiffVsOCDBZm->Fill(gainChange,newHV-hv);
323 Ediff=100.*(Eout2-Eout1)/Eout1;
324 if (expectSameE == 1)
325 {hEChange->Fill(Ediff);
326 if (Eout2 > Eout1) hEChangeLogP->Fill(TMath::Log10(TMath::Abs(Ediff)));
327 if (Eout2 < Eout1) hEChangeLogN->Fill(TMath::Log10(TMath::Abs(Ediff)));
328 if (TMath::Abs(Ediff) > kMaxEmismatchCut)
329 {printf(
"##### E mismatch tower (%d,%d,%d) : Eout1 = %f, Eout2 = %f HV %7.3f -> %7.3f => %7.3f w/ OCDB %f flag %d\n",smNb,icol,irow,Eout1,Eout2,hv,newHV,HVtab[icol][irow],coeffOCDB[smNb][icol][irow],flag[smNb][icol][irow]);
330 fprintf(outFile,
"E mismatch tower (%d,%d,%d) : Eout1 = %f, Eout2 = %f HV %7.3f -> %7.3f => %7.3f w/ OCDB %f flag %d\n",smNb,icol,irow,Eout1,Eout2,hv,newHV,HVtab[icol][irow],coeffOCDB[smNb][icol][irow],flag[smNb][icol][irow]);
336 {fprintf(outFile,
"######## Negative in log for forced tower (%d,%d,%d), HV %7.3f and gain %5.3f (params : %f %e %f) ### do nothing.\n",smNb,icol,irow,hv,gainChange,p0,p1,p2);
340 if (forcedGainChange[smNb][icol][irow] != 0.)
341 {
if ((flag[smNb][icol][irow] > 9) || (flag[smNb][icol][irow] == -4)) fprintf(badGainFileOut,
"%d %2d %2d %d %f %4.2f %f %f\n",smNb,icol,irow,flag[smNb][icol][irow],gainChange,1.,forcedGainChange[smNb][icol][irow],forcedOCDBcoeff[smNb][icol][irow]);
342 else fprintf(badGainFileOut,
"%d %2d %2d %d %f %4.2f %f %f\n",smNb,icol,irow,flag[smNb][icol][irow]+10,gainChange,1.,forcedGainChange[smNb][icol][irow],forcedOCDBcoeff[smNb][icol][irow]);
343 gainChange=forcedGainChange[smNb][icol][irow];
346 {
if (gainChange < 1./kMaxDeltaGainAuthorize)
347 {fprintf(outFile,
"######## Gain change < factor 1/%4.2f for tower (%d,%d,%d), HV %7.3f and gain %5.3f ### do nothing.\n",kMaxDeltaGainAuthorize,smNb,icol,irow,hv,gainChange);
348 fprintf(badGainFileOut,
"%d %2d %2d XXX-4 %f %4.2f %f %f\n",smNb,icol,irow,gainChange,1.,1./kMaxDeltaGainAuthorize,
coefFactorWanted*1./kMaxDeltaGainAuthorize);
349 nbTowersLargeModif++;
353 if (gainChange > kMaxDeltaGainAuthorize)
354 {fprintf(outFile,
"######## Gain change > factor %4.2f for tower (%d,%d,%d), HV %7.3f and gain %5.3f ### do nothing.\n",kMaxDeltaGainAuthorize,smNb,icol,irow,hv,gainChange);
355 fprintf(badGainFileOut,
"%d %2d %2d XXX-4 %f %4.2f %f %f\n",smNb,icol,irow,gainChange,1.,kMaxDeltaGainAuthorize,
coefFactorWanted*kMaxDeltaGainAuthorize);
356 nbTowersLargeModif++;
360 if ((gainChange < 1./kMaxDeltaGainLook) || (gainChange > kMaxDeltaGainLook))
361 {fprintf(outFile,
"######## Gain change > factor %4.2f for tower (%d,%d,%d), HV %7.3f and gain %5.3f ### do nothing.\n",kMaxDeltaGainLook,smNb,icol,irow,hv,gainChange);
362 fprintf(badGainFileOut,
"%d %2d %2d XXX1 %f %4.2f %4.2f %4.2f\n",smNb,icol,irow,gainChange,1.,0.,0.);
363 nbTowersLargeModif++;
368 if ((flag[smNb][icol][irow] == 2) || (flag[smNb][icol][irow] == 12) || (flag[smNb][icol][irow] == 3) || (flag[smNb][icol][irow] == 13)) expectSameE=0;
372 initialGain = p0 + p1 * exp(p2*hv);
373 newGain = initialGain * gainChange;
374 Eout1=ampliIn*initialGain*coeffOCDB[smNb][icol][irow];
375 if ((newGain-p0) <= 0)
376 {fprintf(outFile,
"######## Negative in log for tower (%d,%d,%d), HV %7.3f and gain %5.3f (params : %f %e %f) ### do nothing.\n",smNb,icol,irow,hv,gainChange,p0,p1,p2);
382 newHV = log ( (newGain - p0)/p1 ) / p2;
383 if (flag[smNb][icol][irow] == -4) coeffOCDB[smNb][icol][irow]=forcedOCDBcoeff[smNb][icol][irow];
387 {fprintf(outFile,
"######## Neg HV returned for tower (%d,%d,%d), HV %7.3f and gain %5.3f (params : %f %e %f) ### keeping previous value.\n",smNb,icol,irow,hv,gainChange,p0,p1,p2);
391 if (TMath::Abs(newHV-hv) > kMaxDeltaHVcut)
392 {fprintf(outFile,
"######## Too large HV change for tower (%d,%d,%d), HV %7.3f -> %7.3f with gain %5.3f (params : %f %e %f) ### do nothing, ",smNb,icol,irow,hv,newHV,gainChange,p0,p1,p2);
393 fprintf(badGainFileOut,
"%d %2d %2d XXX-3 %f %4.2f ",smNb,icol,irow,gainChange,1.);
394 if (newHV > hv) tmpNewHV=TMath::Min(
kMaxHV,hv+(kMaxDeltaHVcut-0.01));
395 else tmpNewHV=TMath::Max(
kMinHV,hv-(kMaxDeltaHVcut-0.01));
396 newGain= p0 + p1 * exp(p2*tmpNewHV);
397 gainChange=newGain/initialGain;
398 fprintf(outFile,
"suggest gain %f w/ OCDBcoeff %f\n",gainChange,coeffOCDB[smNb][icol][irow]/gainChange);
399 fprintf(badGainFileOut,
"%f %f\n",gainChange,coeffOCDB[smNb][icol][irow]/gainChange);
404 {fprintf(outFile,
"HV below min voltage for tower (%d,%d,%d), HV %7.3f -> %7.3f with gain %5.3f -- set to supply voltage %7.3f.\n",smNb,icol,irow,hv,newHV,gainChange,
kMinHV);
407 newGain= p0 + p1 * exp(p2*
kMinHV);
408 gainChange=newGain/initialGain;
409 coeffOCDB[smNb][icol][irow]=coeffOCDB[smNb][icol][irow]/gainChange;
411 Eout2=ampliIn*newGain*coeffOCDB[smNb][icol][irow];
412 Ediff=100.*(Eout2-Eout1)/Eout1;
413 if (expectSameE == 1)
414 {hEChange->Fill(Ediff);
415 if (Eout2 > Eout1) hEChangeLogP->Fill(TMath::Log10(TMath::Abs(Ediff)));
416 if (Eout2 < Eout1) hEChangeLogN->Fill(TMath::Log10(TMath::Abs(Ediff)));
417 if (TMath::Abs(Ediff) > kMaxEmismatchCut)
418 {printf(
"##### E mismatch tower (%d,%d,%d) : Eout1 = %f, Eout2 = %f HV %7.3f -> %7.3f => %7.3f w/ OCDB %f flag %d\n",smNb,icol,irow,Eout1,Eout2,hv,newHV,HVtab[icol][irow],coeffOCDB[smNb][icol][irow],flag[smNb][icol][irow]);
419 fprintf(outFile,
"E mismatch tower (%d,%d,%d) : Eout1 = %f, Eout2 = %f HV %7.3f -> %7.3f => %7.3f w/ OCDB %f flag %d\n",smNb,icol,irow,Eout1,Eout2,hv,newHV,HVtab[icol][irow],coeffOCDB[smNb][icol][irow],flag[smNb][icol][irow]);
425 {fprintf(outFile,
"HV above supply voltage for tower (%d,%d,%d), HV %7.3f -> %7.3f with gain %5.3f -- set to supply voltage %7.3f.\n",smNb,icol,irow,hv,newHV,gainChange,
kMaxHV);
428 newGain= p0 + p1 * exp(p2*
kMaxHV);
429 gainChange=newGain/initialGain;
430 coeffOCDB[smNb][icol][irow]=coeffOCDB[smNb][icol][irow]/gainChange;
432 Eout2=ampliIn*newGain*coeffOCDB[smNb][icol][irow];
433 Ediff=100.*(Eout2-Eout1)/Eout1;
434 if (expectSameE == 1)
435 {hEChange->Fill(Ediff);
436 if (Eout2 > Eout1) hEChangeLogP->Fill(TMath::Log10(TMath::Abs(Ediff)));
437 if (Eout2 < Eout1) hEChangeLogN->Fill(TMath::Log10(TMath::Abs(Ediff)));
438 if (TMath::Abs(Ediff) > kMaxEmismatchCut)
439 {printf(
"##### E mismatch tower (%d,%d,%d) : Eout1 = %f, Eout2 = %f HV %7.3f -> %7.3f => %7.3f w/ OCDB %f flag %d\n",smNb,icol,irow,Eout1,Eout2,hv,newHV,HVtab[icol][irow],coeffOCDB[smNb][icol][irow],flag[smNb][icol][irow]);
440 fprintf(outFile,
"E mismatch tower (%d,%d,%d) : Eout1 = %f, Eout2 = %f HV %7.3f -> %7.3f => %7.3f w/ OCDB %f flag %d\n",smNb,icol,irow,Eout1,Eout2,hv,newHV,HVtab[icol][irow],coeffOCDB[smNb][icol][irow],flag[smNb][icol][irow]);
446 HVtab[icol][irow]=newHV;
448 Eout2=ampliIn*(p0 + p1 * exp(p2*newHV))*coeffOCDB[smNb][icol][irow];
450 h2HVdiffVsOCDB->Fill(gainChange,newHV-hv);
451 h2HVdiffVsOCDBZm->Fill(gainChange,newHV-hv);
452 Ediff=100.*(Eout2-Eout1)/Eout1;
453 if (expectSameE == 1)
454 {hEChange->Fill(Ediff);
455 if (Eout2 > Eout1) hEChangeLogP->Fill(TMath::Log10(TMath::Abs(Ediff)));
456 if (Eout2 < Eout1) hEChangeLogN->Fill(TMath::Log10(TMath::Abs(Ediff)));
457 if (TMath::Abs(Ediff) > kMaxEmismatchCut)
458 {printf(
"##### E mismatch tower (%d,%d,%d) : Eout1 = %f, Eout2 = %f HV %7.3f -> %7.3f => %7.3f w/ OCDB %f flag %d\n",smNb,icol,irow,Eout1,Eout2,hv,newHV,HVtab[icol][irow],coeffOCDB[smNb][icol][irow],flag[smNb][icol][irow]);
459 fprintf(outFile,
"E mismatch tower (%d,%d,%d) : Eout1 = %f, Eout2 = %f HV %7.3f -> %7.3f => %7.3f w/ OCDB %f flag %d\n",smNb,icol,irow,Eout1,Eout2,hv,newHV,HVtab[icol][irow],coeffOCDB[smNb][icol][irow],flag[smNb][icol][irow]);
466 outHVFile=fopen(Form(
"%s/%s/NewBias.txt",fchNameBase,
SMP2Name[smNb]),
"w");
467 outParamFile=fopen(Form(
"%s/%s/NewParamFactor.txt",fchNameBase,
SMP2Name[smNb]),
"w");
468 for(icol=0;icol<kTabNbCol[SMdetType[smNb]];icol++)
469 {
for(irow=0;irow<kTabNbRow[SMdetType[smNb]];irow++)
470 {fprintf(outHVFile,
"%d %d %f\n",icol,irow,HVtab[icol][irow]);
472 if ((smNb%2) == 0) fprintf(outParamFile,
"%d %d %d %f\n",smNb,icol,irow,coeffOCDB[smNb][icol][irow]);
473 else fprintf(outParamFile,
"%d %d %d %f\n",smNb,(kTabNbCol[SMdetType[smNb]]-1)-icol,(kTabNbRow[SMdetType[smNb]]-1)-irow,coeffOCDB[smNb][icol][irow]);
474 hSpaceHVafter->Fill(icol,irow,HVtab[icol][irow]);
475 hSpaceOCDBafter->Fill(icol,irow,coeffOCDB[smNb][icol][irow]/
coefFactorWanted);
476 if (HVtab[icol][irow] ==
kMaxHV) hSpaceAboveAfter->Fill(icol,irow,coeffOCDB[smNb][icol][irow]/
coefFactorWanted);
480 fclose(outParamFile);
482 fprintf(outFile,
"\n\nNb towers above 395 V : %d\n",nbTowersAbove395);
483 fprintf(outFile,
"Nb towers below min voltage : %d\n",nbTowersBelowMin);
484 fprintf(outFile,
"Nb towers w/ too large gain : %d <--\n",nbTowersLargeModif);
485 fprintf(outFile,
"Nb towers w/ bad HV scan : %d <--\n",nbTowersBadHVscan);
486 fprintf(outFile,
"Nb other towers to look at : %d <--\n",nbTowersProblem-nbTowersAbove395-nbTowersBelowMin-nbTowersLargeModif-nbTowersBadHVscan);
487 fprintf(outFile,
"Tot nb towers w/ problem : %d\n",nbTowersProblem);
488 fprintf(outFile,
"\n");
491 TLine *lineH =
new TLine(h2HVdiffVsOCDBZm->GetXaxis()->GetXmin(),0.,h2HVdiffVsOCDBZm->GetXaxis()->GetXmax(),0.);
492 TLine *lineV =
new TLine(1.,h2HVdiffVsOCDBZm->GetYaxis()->GetXmin(),1.,h2HVdiffVsOCDBZm->GetYaxis()->GetXmax());
501 hEChangeLogP->Draw();
503 hEChangeLogP->Write();
505 hEChangeLogN->Draw();
507 hEChangeLogN->Write();
509 h2HVdiffVsOCDB->Draw(
"COLZ");
510 h2HVdiffVsOCDB->Write();
514 h2HVdiffVsOCDBZm->Draw(
"COLZ");
515 h2HVdiffVsOCDBZm->Write();
524 hSpaceHVbefore->SetMinimum(
kMinHV);
525 hSpaceHVbefore->SetMaximum(
kMaxHV+5.);
526 hSpaceHVbefore->Draw(
"COLZ");
527 hSpaceHVbefore->Write();
529 hSpaceHVafter->SetMinimum(
kMinHV);
530 hSpaceHVafter->SetMaximum(
kMaxHV+5.);
531 hSpaceHVafter->Draw(
"COLZ");
532 hSpaceHVafter->Write();
534 hSpaceOCDBbefore->Draw(
"COLZ");
535 hSpaceOCDBbefore->Write();
537 hSpaceOCDBafter->Draw(
"COLZ");
538 hSpaceOCDBafter->Write();
540 hSpaceAboveBefore->Draw(
"COLZ");
541 hSpaceAboveBefore->Write();
543 hSpaceAboveAfter->Draw(
"COLZ");
544 hSpaceAboveAfter->Write();
547 if (smNb < (lastSM-1))
551 delete h2HVdiffVsOCDB;
552 delete h2HVdiffVsOCDBZm;
553 delete hSpaceHVbefore;
554 delete hSpaceHVafter;
555 delete hSpaceOCDBbefore;
556 delete hSpaceOCDBafter;
557 delete hSpaceAboveBefore;
558 delete hSpaceAboveAfter;
581 {
int i,ism,icol,irow,choice,oldFlag;
582 int tabChoiceCalos[4],tmpChoice;
584 double val1,val2,val3,ocdbCoeff;
589 {tmpChoice=choiceArg>>i;
590 tabChoiceCalos[i]=tmpChoice;
591 choiceArg-=tmpChoice*pow(2,i);
593 printf(
"\n\n---------------------------------\n| Running for :");
598 if (tabChoiceCalos[0] == 1) lastSM=
kNbSMEMCAL;
601 if (tabChoiceCalos[3] == 1) lastSM=
kNbSMtot;
608 char fchNameBase[250],fchNameRoot[250],fchNamePs[250],fchNameOut[250],fchNameBadGainIn[250],fchNameBadGainOut[250];
609 FILE *inFile,*outFile,*badGainFileIn,*badGainFileOut,*OCDBcoeffsFile,*calibCoeffsFile;
610 sprintf(fchNameBase,
"output_HVrecalculation_EMCALthirds_%s",ident.Data());
611 sprintf(fchNameRoot,
"%s/%s.root",fchNameBase,fchNameBase);
612 sprintf(fchNamePs,
"%s/%s.ps",fchNameBase,fchNameBase);
613 sprintf(fchNameOut,
"%s/%s.out",fchNameBase,fchNameBase);
614 sprintf(fchNameBadGainOut,
"%s/%s_badGain.txt",fchNameBase,fchNameBase);
615 gSystem->Exec(Form(
"mkdir %s",fchNameBase));
617 outFile=fopen(fchNameOut,
"w");
619 inFile=fopen(fchNameBadGainOut,
"r");
621 {printf(
"File %s already exists, exiting.\n",fchNameBadGainOut);
626 TFile *rootFileOut =
new TFile(fchNameRoot,
"RECREATE");
627 const int cWidth=500;
628 const int cHeight=(int)(500*(29./21.));
629 TCanvas *c1 =
new TCanvas(
"c1",
"EMCal cosmics analysis",cWidth,cHeight);
630 TPostScript *ps =
new TPostScript(fchNamePs,111);
633 const char fchNameOCDBcoeffsFile[] =
"/cebaf/cebaf/EMCAL/calibPi0_run2/recalculateHV_4_with2015data/OCDBparamsAfterCalib2015.txt";
634 const char fchNameCalibCoeffsFile[] =
"/cebaf/cebaf/EMCAL/calibPi0_run2/calibPi0_4_with2015data/output/pass2_DCALandThirdSMsVeryHighTowers/output_calibPi0_coeffs_clean_finalFile4HVcalculation_setUntrustedToOne.txt";
643 sprintf(fchNameBadGainIn,
"/cebaf/cebaf/EMCAL/calibPi0_run2/recalculateHV_4_with2015data/output_HVrecalculation_EMCALthirds_pass1/output_HVrecalculation_EMCALthirds_pass1_badGain.txt");
645 printf(
"\n***** Will be using 'bad gain' correction file %s. PLEASE CHECK.\n",fchNameBadGainIn);
646 fprintf(outFile,
"\nUse 'bad gain' correction file %s.\n",fchNameBadGainIn);
647 printf(
"Number of lines with 'XXX' :\n");
648 fprintf(outFile,
"Number of lines with 'XXX' :\n");
649 gSystem->Exec(Form(
"grep -c XXX %s",fchNameBadGainIn));
650 gSystem->Exec(Form(
"grep -c XXX %s >> %s",fchNameBadGainIn,fchNameOut));
652 fprintf(outFile,
"\n\n");
653 fprintf(outFile,
"Tower numbers are given in Grenoble/electronic convention.\n\n");
658 OCDBcoeffsFile = fopen(fchNameOCDBcoeffsFile,
"r");
659 if(!OCDBcoeffsFile) {printf(
"File %s can not be found\n",fchNameOCDBcoeffsFile);exit(-1);}
660 while (fscanf(OCDBcoeffsFile,
"%d %d %d %lf",&ism,&icol,&irow,¶mFactor)>0)
661 {
if ((ism%2) == 0) coeffOCDB[ism][icol][irow]=paramFactor;
662 else coeffOCDB[ism][(kTabNbCol[
SMdetType[ism]]-1)-icol][(kTabNbRow[
SMdetType[ism]]-1)-irow]=paramFactor;
664 fclose(OCDBcoeffsFile);
666 calibCoeffsFile = fopen(fchNameCalibCoeffsFile,
"r");
667 if(!calibCoeffsFile) {printf(
"File %s can not be found\n",fchNameCalibCoeffsFile);exit(-1);}
668 while (fscanf(calibCoeffsFile,
"%d %d %d %d %lf",&oldFlag,&ism,&icol,&irow,¶mFactor)>0)
669 {
if ((ism%2) == 0) coeffCalib[ism][icol][irow]=paramFactor;
670 else coeffCalib[ism][(kTabNbCol[
SMdetType[ism]]-1)-icol][(kTabNbRow[
SMdetType[ism]]-1)-irow]=paramFactor;
672 fclose(calibCoeffsFile);
675 printf(
"\n\nRead 'bad gain' correction file.\n");
682 {
for (irow=0;irow<
kNbRowMax;irow++) flag[ism][icol][irow]=5;
694 badGainFileIn=fopen(fchNameBadGainIn,
"r");
696 {printf(
"##### 'Bad gain' correction file %s can not be found.\n##### CAUTION : is this the 1st pass ? #####\n\n",fchNameBadGainIn);
697 fprintf(outFile,
"##### 'Bad gain' correction file %s can not be found.\n##### CAUTION : is this the 1st pass ? #####\n\n",fchNameBadGainIn);
700 {
while (fscanf(badGainFileIn,
"%d %d %d %d %lf %lf %lf %lf",&ism,&icol,&irow,&choice,&val1,&val2,&val3,&ocdbCoeff)>0)
701 {
switch (TMath::Abs(choice))
702 {
case 1 :
if (val3 != 0.0) printf(
"#### Check 'bad gain' correction file (%d,%d,%d) : choice %d while val3 %f (should be 0.)\n",ism,icol,irow,choice,val3);
703 case 11 : forcedGainChange[ism][icol][irow]=val1;
704 if (val2 != 1.0) printf(
"#### Check 'bad gain' correction file (%d,%d,%d) : choice %d while val2 %f (should be 1.)\n",ism,icol,irow,choice,val2);
705 if (ocdbCoeff != 0.0) printf(
"#### Check 'bad gain' correction file (%d,%d,%d) : choice %d while OCDB coeff %f (should be 0.)\n",ism,icol,irow,choice,ocdbCoeff);
708 case 12 : forcedGainChange[ism][icol][irow]=val2;
713 case 13 : forcedGainChange[ism][icol][irow]=val3;
714 if ((choice == -3) && (ocdbCoeff == 0.)) printf(
"#### Check 'bad gain' correction file (%d,%d,%d) : choice %d while OCDB coeff %f.\n",ism,icol,irow,choice,ocdbCoeff);
715 if (val3 == 0.) printf(
"#### Check 'bad gain' correction file (%d,%d,%d) : choice %d while val3 %f.\n",ism,icol,irow,choice,val3);
717 default : printf(
"*** Unknown choice %d for (SM,col,row) (%d,%d,%d)\n",choice,ism,icol,irow);
718 fprintf(outFile,
"*** Unknown choice %d for (SM,col,row) (%d,%d,%d)\n",choice,ism,icol,irow);
720 forcedOCDBcoeff[ism][icol][irow]=ocdbCoeff;
721 flag[ism][icol][irow]=choice;
723 fclose(badGainFileIn);
728 badGainFileOut=fopen(fchNameBadGainOut,
"w");
733 {
if (tabChoiceCalos[
SMdetType[ism]] == 0)
continue;
735 CalcNewHVperSM(Form(
"/cebaf/faivre/recherche/calibPi0/recalculateDCAL_HV_July2015/output_HVrecalculationDCAL2015July_mergedWithEMCalHV_lowerTemperature_createBias/%s/NewBias.txt",
SMP2Name[ism]),Form(
"/cebaf/faivre/recherche/calibPi0/recalculateDCAL_HV_July2015/HVscanParametersGrenobleDCAL/HVscanParamsGrenobleDCAL/HvscanSM%s_%s_%s/parameters.txt",
SMnumber[ism],
SMcalibName[ism],
SMP2Name[ism]),ism,fchNameBase,outFile,badGainFileOut,coeffOCDB,coeffCalib,forcedGainChange,forcedOCDBcoeff,flag,ps,c1);
738 fclose(badGainFileOut);
742 rootFileOut->Close();
char detTypeString[][100]
const double coefFactorWanted
void HVrecalculation_EMCALthirds(TString ident, int choiceArg=0b0010)
const int kNbColDCALthird
const int kNbColEMCALthird
const int kNbRowEMCALthird
void CalcNewHVperSM(TString hvFileName, TString paramFileName, int smNb, char *fchNameBase, FILE *outFile, FILE *badGainFileOut, double coeffOCDB[kNbSMtot][kNbColMax][kNbRowMax], double coeffCalib[kNbSMtot][kNbColMax][kNbRowMax], double forcedGainChange[kNbSMtot][kNbColMax][kNbRowMax], double forcedOCDBcoeff[kNbSMtot][kNbColMax][kNbRowMax], int flag[kNbSMtot][kNbColMax][kNbRowMax], TPostScript *ps, TCanvas *c1)
const int kNbRowDCALthird
const int kNbSMEMCALthird
const int kNbColOffsetDCAL