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};
132 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)
133 {
int nbTowersAbove395,nbTowersBelowMin,nbTowersLargeModif,nbTowersBadHVscan,nbTowersProblem;
134 int icol,irow,expectSameE;
135 double hv,p0,p1,p2,gainChange,newHV,tmpNewHV;
140 double ampliIn,Eout1,Eout2,Ediff,initialGain,newGain;
142 double kMaxDeltaGainLook=2.0;
143 double kMaxDeltaGainAuthorize=3.0;
144 double kMaxDeltaHVgraph=50.;
147 double kMaxDeltaHVcut=10.;
149 double kMaxEmismatchCut=0.01;
154 {printf(
" (side A)\n");
155 fprintf(outFile,
" (side A) -----\n\n");
158 {printf(
" (side C)\n");
159 fprintf(outFile,
" (side C) -----\n\n");
163 FILE *inFile,*outHVFile,*outParamFile;
164 inFile=fopen(hvFileName.Data(),
"r");
165 if(!inFile) {printf(
"File %s can not be found\n",hvFileName.Data());exit(-1);}
166 while(fscanf(inFile,
"%d %d %lf\n",&icol,&irow,&hv)>0) HVtab[icol][irow]=hv;
169 inFile=fopen(paramFileName.Data(),
"r");
170 if(!inFile) {printf(
"File %s can not be found\n",paramFileName.Data());exit(-1);}
171 while(fscanf(inFile,
"%d %d %lf %lf %lf\n",&icol,&irow,&p0,&p1,&p2)>0)
172 {p0tab[icol][irow]=p0;
173 p1tab[icol][irow]=p1;
174 p2tab[icol][irow]=p2;
179 TH1F *hEChange =
new TH1F(Form(
"hEChange%d",smNb),Form(
"hEChange%d",smNb),80,-50.,50.);
180 hEChange->SetXTitle(
"(E_{2}-E_{1})/E_{1} (%)");
181 hEChange->SetYTitle(
"Counts");
182 hEChange->SetStats(0);
183 TH1F *hEChangeLogP =
new TH1F(Form(
"hEChangeLogP%d",smNb),Form(
"hEChangeLogP%d",smNb),80,-3.,3.);
184 hEChangeLogP->SetXTitle(
"log [(E_{2}-E_{1})/E_{1} (%)]");
185 hEChangeLogP->SetYTitle(
"Counts");
186 hEChangeLogP->SetStats(0);
187 TH1F *hEChangeLogN =
new TH1F(Form(
"hEChangeLogN%d",smNb),Form(
"hEChangeLogN%d",smNb),80,-3.,3.);
188 hEChangeLogN->SetXTitle(
"log [(E_{2}-E_{1})/E_{1} (%)]");
189 hEChangeLogN->SetYTitle(
"Counts");
190 hEChangeLogN->SetStats(0);
191 TH2F *h2HVdiffVsOCDB =
new TH2F(Form(
"h2HVdiffVsOCDB%d",smNb),Form(
"h2HVdiffVsOCDB%d",smNb),80,0.,5.,80,-kMaxDeltaHVgraph,kMaxDeltaHVgraph);
192 h2HVdiffVsOCDB->SetXTitle(
"OCDB factor / 0.0162");
193 h2HVdiffVsOCDB->SetYTitle(
"NewHV - OldHV (V)");
194 h2HVdiffVsOCDB->SetStats(0);
195 h2HVdiffVsOCDB->SetContour(30);
196 TH2F *h2HVdiffVsOCDBZm =
new TH2F(Form(
"h2HVdiffVsOCDBZm%d",smNb),Form(
"h2HVdiffVsOCDBZm%d",smNb),80,0.5,2.,80,-30.,30.);
197 h2HVdiffVsOCDBZm->SetXTitle(
"OCDB factor / 0.0162");
198 h2HVdiffVsOCDBZm->SetYTitle(
"NewHV - OldHV (V)");
199 h2HVdiffVsOCDBZm->SetStats(0);
200 h2HVdiffVsOCDBZm->SetContour(30);
201 TH2F *hSpaceHVbefore =
new TH2F(Form(
"hSpaceHVbefore%d",smNb),Form(
"hSpaceHVbefore%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
202 hSpaceHVbefore->SetXTitle(
"Column");
203 hSpaceHVbefore->SetYTitle(
"Row");
204 hSpaceHVbefore->SetStats(0);
205 hSpaceHVbefore->SetContour(30);
206 TH2F *hSpaceHVafter =
new TH2F(Form(
"hSpaceHVafter%d",smNb),Form(
"hSpaceHVafter%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
207 hSpaceHVafter->SetXTitle(
"Column");
208 hSpaceHVafter->SetYTitle(
"Row");
209 hSpaceHVafter->SetStats(0);
210 hSpaceHVafter->SetContour(30);
211 TH2F *hSpaceOCDBbefore =
new TH2F(Form(
"hSpaceOCDBbefore%d",smNb),Form(
"hSpaceOCDBbefore%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
212 hSpaceOCDBbefore->SetXTitle(
"Column");
213 hSpaceOCDBbefore->SetYTitle(
"Row");
214 hSpaceOCDBbefore->SetStats(0);
215 hSpaceOCDBbefore->SetContour(30);
216 TH2F *hSpaceOCDBafter =
new TH2F(Form(
"hSpaceOCDBafter%d",smNb),Form(
"hSpaceOCDBafter%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
217 hSpaceOCDBafter->SetXTitle(
"Column");
218 hSpaceOCDBafter->SetYTitle(
"Row");
219 hSpaceOCDBafter->SetStats(0);
220 hSpaceOCDBafter->SetContour(30);
221 TH2F *hSpaceAboveBefore =
new TH2F(Form(
"hSpaceAboveBefore%d",smNb),Form(
"hSpaceAboveBefore%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
222 hSpaceAboveBefore->SetXTitle(
"Column");
223 hSpaceAboveBefore->SetYTitle(
"Row");
224 hSpaceAboveBefore->SetStats(0);
225 hSpaceAboveBefore->SetContour(30);
226 TH2F *hSpaceAboveAfter =
new TH2F(Form(
"hSpaceAboveAfter%d",smNb),Form(
"hSpaceAboveAfter%d",smNb),kNbColMax,-0.5,kNbColMax-0.5,kNbRowMax,-0.5,kNbRowMax-0.5);
227 hSpaceAboveAfter->SetXTitle(
"Column");
228 hSpaceAboveAfter->SetYTitle(
"Row");
229 hSpaceAboveAfter->SetStats(0);
230 hSpaceAboveAfter->SetContour(30);
236 nbTowersLargeModif=0;
241 for(icol=0;icol<kTabNbCol[
SMdetType[smNb]];icol++)
242 {
for(irow=0;irow<kTabNbRow[SMdetType[smNb]];irow++)
245 {hv=HVtab[icol][irow];
246 p0=p0tab[icol][irow];
247 p1=p1tab[icol][irow];
248 p2=p2tab[icol][irow];
251 hSpaceHVbefore->Fill(icol,irow,hv);
252 hSpaceOCDBbefore->Fill(icol,irow,coeffOCDB[smNb][icol][irow]/
coefFactorWanted);
257 if ((coeffCalib[smNb][icol][irow] == 1.0) && (flag[smNb][icol][irow] == 5))
258 {fprintf(outFile,
"######## Tower with calib coeff 1.0 (%d,%d,%d) ### do nothing.\n",smNb,icol,irow);
259 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]);
265 if ((p1==0.) && (p2==0.))
266 {fprintf(outFile,
"######## Bad HV scan for tower (%d,%d,%d), HV %7.3f ### do nothing.\n",smNb,icol,irow,hv);
271 if ((p1<=0.) || (p2<=0.))
272 {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);
277 if ( (p0 + p1 * exp(p2*(hv-kMaxDeltaHVcut-10.))) < 0. )
278 {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);
286 if (flag[smNb][icol][irow] == 0)
287 {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]);
291 if (flag[smNb][icol][irow] == -3)
292 {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]);
293 gainChange=forcedGainChange[smNb][icol][irow];
294 initialGain = p0 + p1 * exp(p2*hv);
295 newGain = initialGain * gainChange;
296 Eout1=ampliIn*initialGain*coeffOCDB[smNb][icol][irow];
298 if ((newGain-p0) > 0)
299 {newHV = log ( (newGain - p0)/p1 ) / p2;
300 HVtab[icol][irow]=newHV;
301 coeffOCDB[smNb][icol][irow]=forcedOCDBcoeff[smNb][icol][irow];
302 Eout2=ampliIn*(p0 + p1 * exp(p2*newHV))*coeffOCDB[smNb][icol][irow];
303 h2HVdiffVsOCDB->Fill(gainChange,newHV-hv);
304 h2HVdiffVsOCDBZm->Fill(gainChange,newHV-hv);
305 Ediff=100.*(Eout2-Eout1)/Eout1;
306 if (expectSameE == 1)
307 {hEChange->Fill(Ediff);
308 if (Eout2 > Eout1) hEChangeLogP->Fill(TMath::Log10(TMath::Abs(Ediff)));
309 if (Eout2 < Eout1) hEChangeLogN->Fill(TMath::Log10(TMath::Abs(Ediff)));
310 if (TMath::Abs(Ediff) > kMaxEmismatchCut)
311 {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]);
312 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]);
318 {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);
322 if (forcedGainChange[smNb][icol][irow] != 0.)
323 {
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]);
324 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]);
325 gainChange=forcedGainChange[smNb][icol][irow];
328 {
if (gainChange < 1./kMaxDeltaGainAuthorize)
329 {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);
330 fprintf(badGainFileOut,
"%d %2d %2d XXX-4 %f %4.2f %f %f\n",smNb,icol,irow,gainChange,1.,1./kMaxDeltaGainAuthorize,
coefFactorWanted*1./kMaxDeltaGainAuthorize);
331 nbTowersLargeModif++;
335 if (gainChange > kMaxDeltaGainAuthorize)
336 {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);
337 fprintf(badGainFileOut,
"%d %2d %2d XXX-4 %f %4.2f %f %f\n",smNb,icol,irow,gainChange,1.,kMaxDeltaGainAuthorize,
coefFactorWanted*kMaxDeltaGainAuthorize);
338 nbTowersLargeModif++;
342 if ((gainChange < 1./kMaxDeltaGainLook) || (gainChange > kMaxDeltaGainLook))
343 {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);
344 fprintf(badGainFileOut,
"%d %2d %2d XXX1 %f %4.2f %4.2f %4.2f\n",smNb,icol,irow,gainChange,1.,0.,0.);
345 nbTowersLargeModif++;
350 if ((flag[smNb][icol][irow] == 2) || (flag[smNb][icol][irow] == 12) || (flag[smNb][icol][irow] == 3) || (flag[smNb][icol][irow] == 13)) expectSameE=0;
354 initialGain = p0 + p1 * exp(p2*hv);
355 newGain = initialGain * gainChange;
356 Eout1=ampliIn*initialGain*coeffOCDB[smNb][icol][irow];
357 if ((newGain-p0) <= 0)
358 {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);
364 newHV = log ( (newGain - p0)/p1 ) / p2;
365 if (flag[smNb][icol][irow] == -4) coeffOCDB[smNb][icol][irow]=forcedOCDBcoeff[smNb][icol][irow];
369 {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);
373 if (TMath::Abs(newHV-hv) > kMaxDeltaHVcut)
374 {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);
375 fprintf(badGainFileOut,
"%d %2d %2d XXX-3 %f %4.2f ",smNb,icol,irow,gainChange,1.);
376 if (newHV > hv) tmpNewHV=TMath::Min(
kMaxHV,hv+(kMaxDeltaHVcut-0.01));
377 else tmpNewHV=TMath::Max(
kMinHV,hv-(kMaxDeltaHVcut-0.01));
378 newGain= p0 + p1 * exp(p2*tmpNewHV);
379 gainChange=newGain/initialGain;
380 fprintf(outFile,
"suggest gain %f w/ OCDBcoeff %f\n",gainChange,coeffOCDB[smNb][icol][irow]/gainChange);
381 fprintf(badGainFileOut,
"%f %f\n",gainChange,coeffOCDB[smNb][icol][irow]/gainChange);
386 {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);
389 newGain= p0 + p1 * exp(p2*
kMinHV);
390 gainChange=newGain/initialGain;
391 coeffOCDB[smNb][icol][irow]=coeffOCDB[smNb][icol][irow]/gainChange;
393 Eout2=ampliIn*newGain*coeffOCDB[smNb][icol][irow];
394 Ediff=100.*(Eout2-Eout1)/Eout1;
395 if (expectSameE == 1)
396 {hEChange->Fill(Ediff);
397 if (Eout2 > Eout1) hEChangeLogP->Fill(TMath::Log10(TMath::Abs(Ediff)));
398 if (Eout2 < Eout1) hEChangeLogN->Fill(TMath::Log10(TMath::Abs(Ediff)));
399 if (TMath::Abs(Ediff) > kMaxEmismatchCut)
400 {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]);
401 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]);
407 {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);
410 newGain= p0 + p1 * exp(p2*
kMaxHV);
411 gainChange=newGain/initialGain;
412 coeffOCDB[smNb][icol][irow]=coeffOCDB[smNb][icol][irow]/gainChange;
414 Eout2=ampliIn*newGain*coeffOCDB[smNb][icol][irow];
415 Ediff=100.*(Eout2-Eout1)/Eout1;
416 if (expectSameE == 1)
417 {hEChange->Fill(Ediff);
418 if (Eout2 > Eout1) hEChangeLogP->Fill(TMath::Log10(TMath::Abs(Ediff)));
419 if (Eout2 < Eout1) hEChangeLogN->Fill(TMath::Log10(TMath::Abs(Ediff)));
420 if (TMath::Abs(Ediff) > kMaxEmismatchCut)
421 {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]);
422 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]);
428 HVtab[icol][irow]=newHV;
430 Eout2=ampliIn*(p0 + p1 * exp(p2*newHV))*coeffOCDB[smNb][icol][irow];
432 h2HVdiffVsOCDB->Fill(gainChange,newHV-hv);
433 h2HVdiffVsOCDBZm->Fill(gainChange,newHV-hv);
434 Ediff=100.*(Eout2-Eout1)/Eout1;
435 if (expectSameE == 1)
436 {hEChange->Fill(Ediff);
437 if (Eout2 > Eout1) hEChangeLogP->Fill(TMath::Log10(TMath::Abs(Ediff)));
438 if (Eout2 < Eout1) hEChangeLogN->Fill(TMath::Log10(TMath::Abs(Ediff)));
439 if (TMath::Abs(Ediff) > kMaxEmismatchCut)
440 {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]);
441 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]);
448 outHVFile=fopen(Form(
"%s/%s/NewBias.txt",fchNameBase,
SMP2Name[smNb]),
"w");
449 outParamFile=fopen(Form(
"%s/%s/NewParamFactor.txt",fchNameBase,
SMP2Name[smNb]),
"w");
450 for(icol=0;icol<kTabNbCol[SMdetType[smNb]];icol++)
451 {
for(irow=0;irow<kTabNbRow[SMdetType[smNb]];irow++)
452 {fprintf(outHVFile,
"%d %d %f\n",icol,irow,HVtab[icol][irow]);
454 if ((smNb%2) == 0) fprintf(outParamFile,
"%d %d %d %f\n",smNb,icol,irow,coeffOCDB[smNb][icol][irow]);
455 else fprintf(outParamFile,
"%d %d %d %f\n",smNb,(kTabNbCol[SMdetType[smNb]]-1)-icol,(kTabNbRow[SMdetType[smNb]]-1)-irow,coeffOCDB[smNb][icol][irow]);
456 hSpaceHVafter->Fill(icol,irow,HVtab[icol][irow]);
457 hSpaceOCDBafter->Fill(icol,irow,coeffOCDB[smNb][icol][irow]/
coefFactorWanted);
458 if (HVtab[icol][irow] ==
kMaxHV) hSpaceAboveAfter->Fill(icol,irow,coeffOCDB[smNb][icol][irow]/
coefFactorWanted);
462 fclose(outParamFile);
464 fprintf(outFile,
"\n\nNb towers above 395 V : %d\n",nbTowersAbove395);
465 fprintf(outFile,
"Nb towers below min voltage : %d\n",nbTowersBelowMin);
466 fprintf(outFile,
"Nb towers w/ too large gain : %d <--\n",nbTowersLargeModif);
467 fprintf(outFile,
"Nb towers w/ bad HV scan : %d <--\n",nbTowersBadHVscan);
468 fprintf(outFile,
"Nb other towers to look at : %d <--\n",nbTowersProblem-nbTowersAbove395-nbTowersBelowMin-nbTowersLargeModif-nbTowersBadHVscan);
469 fprintf(outFile,
"Tot nb towers w/ problem : %d\n",nbTowersProblem);
470 fprintf(outFile,
"\n");
473 TLine *lineH =
new TLine(h2HVdiffVsOCDBZm->GetXaxis()->GetXmin(),0.,h2HVdiffVsOCDBZm->GetXaxis()->GetXmax(),0.);
474 TLine *lineV =
new TLine(1.,h2HVdiffVsOCDBZm->GetYaxis()->GetXmin(),1.,h2HVdiffVsOCDBZm->GetYaxis()->GetXmax());
483 hEChangeLogP->Draw();
485 hEChangeLogP->Write();
487 hEChangeLogN->Draw();
489 hEChangeLogN->Write();
491 h2HVdiffVsOCDB->Draw(
"COLZ");
492 h2HVdiffVsOCDB->Write();
496 h2HVdiffVsOCDBZm->Draw(
"COLZ");
497 h2HVdiffVsOCDBZm->Write();
506 hSpaceHVbefore->SetMinimum(
kMinHV);
507 hSpaceHVbefore->SetMaximum(
kMaxHV+5.);
508 hSpaceHVbefore->Draw(
"COLZ");
509 hSpaceHVbefore->Write();
511 hSpaceHVafter->SetMinimum(
kMinHV);
512 hSpaceHVafter->SetMaximum(
kMaxHV+5.);
513 hSpaceHVafter->Draw(
"COLZ");
514 hSpaceHVafter->Write();
516 hSpaceOCDBbefore->Draw(
"COLZ");
517 hSpaceOCDBbefore->Write();
519 hSpaceOCDBafter->Draw(
"COLZ");
520 hSpaceOCDBafter->Write();
522 hSpaceAboveBefore->Draw(
"COLZ");
523 hSpaceAboveBefore->Write();
525 hSpaceAboveAfter->Draw(
"COLZ");
526 hSpaceAboveAfter->Write();
529 if (smNb < (lastSM-1))
533 delete h2HVdiffVsOCDB;
534 delete h2HVdiffVsOCDBZm;
535 delete hSpaceHVbefore;
536 delete hSpaceHVafter;
537 delete hSpaceOCDBbefore;
538 delete hSpaceOCDBafter;
539 delete hSpaceAboveBefore;
540 delete hSpaceAboveAfter;
561 {
int i,ism,icol,irow,choice,oldFlag;
562 int tabChoiceCalos[4],tmpChoice;
564 double val1,val2,val3,ocdbCoeff;
569 {tmpChoice=choiceArg>>i;
570 tabChoiceCalos[i]=tmpChoice;
571 choiceArg-=tmpChoice*pow(2,i);
573 printf(
"\n\n---------------------------------\n| Running for :");
578 if (tabChoiceCalos[0] == 1) lastSM=
kNbSMEMCAL;
581 if (tabChoiceCalos[3] == 1) lastSM=
kNbSMtot;
588 char fchNameBase[250],fchNameRoot[250],fchNamePs[250],fchNameOut[250],fchNameBadGainIn[250],fchNameBadGainOut[250];
589 FILE *inFile,*outFile,*badGainFileIn,*badGainFileOut,*OCDBcoeffsFile,*calibCoeffsFile;
590 sprintf(fchNameBase,
"output_HVrecalculation_%s",ident.Data());
591 sprintf(fchNameRoot,
"%s/%s.root",fchNameBase,fchNameBase);
592 sprintf(fchNamePs,
"%s/%s.ps",fchNameBase,fchNameBase);
593 sprintf(fchNameOut,
"%s/%s.out",fchNameBase,fchNameBase);
594 sprintf(fchNameBadGainOut,
"%s/%s_badGain.txt",fchNameBase,fchNameBase);
595 gSystem->Exec(Form(
"mkdir %s",fchNameBase));
597 outFile=fopen(fchNameOut,
"w");
599 inFile=fopen(fchNameBadGainOut,
"r");
601 {printf(
"File %s already exists, exiting.\n",fchNameBadGainOut);
606 TFile *rootFileOut =
new TFile(fchNameRoot,
"RECREATE");
607 const int cWidth=500;
608 const int cHeight=(int)(500*(29./21.));
609 TCanvas *c1 =
new TCanvas(
"c1",
"EMCal cosmics analysis",cWidth,cHeight);
610 TPostScript *ps =
new TPostScript(fchNamePs,111);
613 const char fchNameOCDBcoeffsFile[] =
"/cebaf/cebaf/EMCAL/calibPi0_run2/recalculateHV_4_with2015data/OCDBparamsAfterCalib2015.txt";
614 const char fchNameCalibCoeffsFile[] =
"/cebaf/cebaf/EMCAL/calibPi0_run2/calibPi0_4_with2015data/output/pass2_DCALandThirdSMsVeryHighTowers/output_calibPi0_coeffs_clean_finalFile4HVcalculation_setUntrustedToOne.txt";
623 sprintf(fchNameBadGainIn,
"/cebaf/cebaf/EMCAL/calibPi0_run2/recalculateHV_4_with2015data/output_HVrecalculation_pass1/output_HVrecalculation_pass1_badGain_Custom.txt");
625 printf(
"\n***** Will be using 'bad gain' correction file %s. PLEASE CHECK.\n",fchNameBadGainIn);
626 fprintf(outFile,
"\nUse 'bad gain' correction file %s.\n",fchNameBadGainIn);
627 printf(
"Number of lines with 'XXX' :\n");
628 fprintf(outFile,
"Number of lines with 'XXX' :\n");
629 gSystem->Exec(Form(
"grep -c XXX %s",fchNameBadGainIn));
630 gSystem->Exec(Form(
"grep -c XXX %s >> %s",fchNameBadGainIn,fchNameOut));
632 fprintf(outFile,
"\n\n");
633 fprintf(outFile,
"Tower numbers are given in Grenoble/electronic convention.\n\n");
638 OCDBcoeffsFile = fopen(fchNameOCDBcoeffsFile,
"r");
639 if(!OCDBcoeffsFile) {printf(
"File %s can not be found\n",fchNameOCDBcoeffsFile);exit(-1);}
640 while (fscanf(OCDBcoeffsFile,
"%d %d %d %lf",&ism,&icol,&irow,¶mFactor)>0)
641 {
if ((ism%2) == 0) coeffOCDB[ism][icol][irow]=paramFactor;
642 else coeffOCDB[ism][(kTabNbCol[
SMdetType[ism]]-1)-icol][(kTabNbRow[
SMdetType[ism]]-1)-irow]=paramFactor;
644 fclose(OCDBcoeffsFile);
646 calibCoeffsFile = fopen(fchNameCalibCoeffsFile,
"r");
647 if(!calibCoeffsFile) {printf(
"File %s can not be found\n",fchNameCalibCoeffsFile);exit(-1);}
648 while (fscanf(calibCoeffsFile,
"%d %d %d %d %lf",&oldFlag,&ism,&icol,&irow,¶mFactor)>0)
649 {
if ((ism%2) == 0) coeffCalib[ism][icol][irow]=paramFactor;
650 else coeffCalib[ism][(kTabNbCol[
SMdetType[ism]]-1)-icol][(kTabNbRow[
SMdetType[ism]]-1)-irow]=paramFactor;
652 fclose(calibCoeffsFile);
655 printf(
"\n\nRead 'bad gain' correction file.\n");
662 {
for (irow=0;irow<
kNbRowMax;irow++) flag[ism][icol][irow]=5;
674 badGainFileIn=fopen(fchNameBadGainIn,
"r");
676 {printf(
"##### 'Bad gain' correction file %s can not be found.\n##### CAUTION : is this the 1st pass ? #####\n\n",fchNameBadGainIn);
677 fprintf(outFile,
"##### 'Bad gain' correction file %s can not be found.\n##### CAUTION : is this the 1st pass ? #####\n\n",fchNameBadGainIn);
680 {
while (fscanf(badGainFileIn,
"%d %d %d %d %lf %lf %lf %lf",&ism,&icol,&irow,&choice,&val1,&val2,&val3,&ocdbCoeff)>0)
681 {
switch (TMath::Abs(choice))
682 {
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);
683 case 11 : forcedGainChange[ism][icol][irow]=val1;
684 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);
685 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);
688 case 12 : forcedGainChange[ism][icol][irow]=val2;
693 case 13 : forcedGainChange[ism][icol][irow]=val3;
694 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);
695 if (val3 == 0.) printf(
"#### Check 'bad gain' correction file (%d,%d,%d) : choice %d while val3 %f.\n",ism,icol,irow,choice,val3);
697 default : printf(
"*** Unknown choice %d for (SM,col,row) (%d,%d,%d)\n",choice,ism,icol,irow);
698 fprintf(outFile,
"*** Unknown choice %d for (SM,col,row) (%d,%d,%d)\n",choice,ism,icol,irow);
700 forcedOCDBcoeff[ism][icol][irow]=ocdbCoeff;
701 flag[ism][icol][irow]=choice;
703 fclose(badGainFileIn);
708 badGainFileOut=fopen(fchNameBadGainOut,
"w");
713 {
if (tabChoiceCalos[
SMdetType[ism]] == 0)
continue;
715 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);
718 fclose(badGainFileOut);
722 rootFileOut->Close();
const int kNbColOffsetDCAL
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 kNbSMEMCALthird
const int kNbColEMCALthird
const int kNbRowDCALthird
char detTypeString[][100]
void HVrecalculation(TString ident, int choiceArg=0b0100)
const int kNbColDCALthird
const double coefFactorWanted