24 #include <Riostream.h> 37 #include "AliEMCALGeometry.h" 39 #include "AliAODEvent.h" 42 const Int_t RainbowColors[]= {kRed, kRed-4, kRed-7, kRed-9, kRed-10, kYellow, kYellow-4, kYellow-7, kYellow-9, kYellow-10, kGreen, kGreen-4 , kGreen-7, kGreen-9, kGreen-10, kCyan, kCyan-4, kCyan-7, kCyan-9, kCyan-10, kBlue, kBlue-4, kBlue-7, kBlue-9, kBlue-10, kMagenta, kMagenta-4, kMagenta-7, kMagenta-9, kMagenta-10};
56 void Plot2DCells(
TString Block,
Int_t runNo, std::vector<Int_t> cellVectorRbR, std::vector<Int_t> cellVectorMerge);
64 gROOT->ProcessLine(
"gErrorIgnoreLevel = kWarning;");
67 gStyle->SetOptTitle(0);
68 gStyle->SetOptStat(0);
70 gStyle->SetPalette(91);
71 gStyle->SetCanvasColor(10);
72 TGaxis::SetMaxDigits(4);
73 gStyle->SetPadTopMargin(0.07);
74 gStyle->SetPadBottomMargin(0.18);
75 gStyle->SetPadRightMargin(0.10);
76 gStyle->SetPadLeftMargin(0.15);
77 gStyle->SetFrameFillColor(10);
78 gStyle->SetLabelSize(0.05,
"X");
79 gStyle->SetLabelSize(0.05,
"Y");
80 gStyle->SetTitleSize(5.0,
"X");
81 gStyle->SetTitleSize(5.0,
"Y");
82 gEnv->SetValue(
"Canvas.ShowEventStatus",1);
86 std::vector<Int_t> badcellsBlock1;
87 std::vector<Int_t> badcellsBlock2;
88 std::vector<Int_t> badcellsBlock3;
89 std::vector<Int_t> badcellsBlock4;
101 TString analysisInput = Form(
"AnalysisInput/%s",period.Data());
102 TString analysisOutput = Form(
"AnalysisOutput/%s/%s",period.Data(),train.Data());
103 TString runList = Form(
"./%s/%s/%s.txt", analysisInput.Data(), train.Data(),listName.Data());
107 cout<<
"o o o Open .txt file with run indices. Name = " << runList << endl;
108 FILE *pFile = fopen(runList.Data(),
"r");
111 cout<<
"couldn't open file "<<runList<<
"!"<<endl;
118 std::vector<Int_t> RunIdVec;
119 std::vector<Int_t> badRunIdVec;
123 ncols = fscanf(pFile,
" %d ",&q);
126 RunIdVec.push_back(q);
131 std::sort (RunIdVec.begin(), RunIdVec.end());
134 cout<<
"o o o Found " << RunIdVec.size() <<
" files in list"<< endl;
137 intRun= RunIdVec.size();
138 if(runsUsed>0 && runsUsed<intRun)intRun = runsUsed;
139 const Int_t nRun = intRun;
140 Int_t nRunsUsed = nRun;
142 Int_t totalperCv = 16;
143 Int_t nPad = TMath::Sqrt(totalperCv);
144 Int_t nCv = nRun/totalperCv+1;
150 TCanvas **cBad =
new TCanvas*[nCv];
151 TCanvas **cGood =
new TCanvas*[nCv];
152 TCanvas **cDead =
new TCanvas*[nCv];
153 TCanvas **cAmp =
new TCanvas*[nCv];
155 for(
Int_t ic = 0; ic<nCv; ic++)
157 cBad [ic] =
new TCanvas(TString::Format(
"badcells%d", ic), TString::Format(
"I) badcells (%d/%d)", ic+1, nCv), 1000,750);
158 cGood[ic] =
new TCanvas(TString::Format(
"goodcells%d", ic),TString::Format(
"I) goodcells (%d/%d)", ic+1, nCv),1000,750);
159 cDead[ic] =
new TCanvas(TString::Format(
"deadcells%d", ic),TString::Format(
"I) deadcells (%d/%d)", ic+1, nCv),1000,750);
160 cAmp [ic] =
new TCanvas(TString::Format(
"Amplitide%d", ic),TString::Format(
"I) Amplitide (%d/%d)", ic+1, nCv),1000,750);
162 cBad [ic] ->Divide(nPad,nPad,0.001,0.001);
163 cGood[ic] ->Divide(nPad,nPad,0.001,0.001);
164 cDead[ic] ->Divide(nPad,nPad,0.001,0.001);
165 cAmp [ic] ->Divide(nPad,nPad,0.001,0.001);
170 TH2F** hFlagvsRun =
new TH2F*[nFlags];
171 TH2F* hFlagNew = 0x0;
172 TH2F* hFlagNewClean = 0x0;
175 TH2F** ampIDCl3Block =
new TH2F*[nRun];
176 TH2F** ampIDCl1Block =
new TH2F*[nRun];
177 TH2F** ampIDDelete =
new TH2F*[nRun];
178 TH1D** hCellGoodMean =
new TH1D*[nRun];
180 TH2F* hBadVsEvent =
new TH2F(
"hBadVsEvent",
"hBadVsEvent",100,100000,25000000,60,700,1800);
181 TH2F* hDeadBadVsEvent =
new TH2F(
"hDeadBadVsEvent",
"hDeadBadVsEvent",100,100000,25000000,60,700,1800);
182 TH1D* deadbadCellsVsRun=
nullptr;
183 TH1D* deadCellsVsRun=
nullptr;
184 TH1D* badCellsVsRun=
nullptr;
185 TH1D* deadCellsVsRunC=
nullptr;
186 TH1D* badCellsVsRunC=
nullptr;
187 TH1D* projSum=
nullptr;
188 TH1D* projSumC=
nullptr;
189 TH1D* projSumC3Blocks=
nullptr;
190 TH1D* projSumC3BlocksA=
nullptr;
191 TH1D* projSumC3BlocksB=
nullptr;
192 TH1D* projSumC3BlocksC=
nullptr;
193 TH1D* projSumC3BlocksD=
nullptr;
194 TH1D* projSumC1Block=
nullptr;
195 TH1D* nEventsVsRuns=
nullptr;
196 TH2F* Sum2DSingleMask=
nullptr;
197 TH2F* Sum2D3BlockMask=
nullptr;
198 TH2F* Sum2D3BlockMaskA=
nullptr;
199 TH2F* Sum2D3BlockMaskB=
nullptr;
200 TH2F* Sum2D3BlockMaskC=
nullptr;
201 TH2F* Sum2D3BlockMaskD=
nullptr;
202 TH2F* Sum2DOrig=
nullptr;
203 TH2F* Sum2DIdeal=
nullptr;
204 TH1D* hgoodMean=
nullptr;
206 for(
Int_t i = 0; i<nFlags; i++)
210 TCanvas *cFlagDeadBadI =
new TCanvas(
"cFlagDeadBadI",
"II) Flag dead or bad a", 1600, 1000);
211 TCanvas *cFlagDeadBadII =
new TCanvas(
"cFlagDeadBadII",
"II) Flag dead or bad b", 1600, 1000);
212 TCanvas *cFlagSumI =
new TCanvas(
"cFlagSumI",
"II) Flag dead&bad a", 1600, 1000);
213 TCanvas *cFlagSumII =
new TCanvas(
"cFlagSumII",
"II) Flag dead&bad b", 1600, 1000);
214 TCanvas *cFlagSumCleanedI =
new TCanvas(
"cFlagSumCleanI",
"III) cleanded Flag dead&bad a", 1600, 1000);
215 TCanvas *cFlagSumCleanedII =
new TCanvas(
"cFlagSumCleanII",
"III) cleanded Flag dead&bad b", 1600, 1000);
216 TCanvas *cFlagSumCompAllI =
new TCanvas(
"cFlagSumCompAllI",
"III) compressed Flag dead&bad a", 1600, 1000);
217 TCanvas *cFlagSumCompAllII =
new TCanvas(
"cFlagSumCompAllII",
"III) compressed Flag dead&bad b", 1600, 1000);
218 TCanvas *cFlagSumCompCleanI =
new TCanvas(
"cFlagSumCompI",
"III) compressed&cleaned Flag dead&bad a", 1600, 1000);
219 TCanvas *cFlagSumCompCleanII=
new TCanvas(
"cFlagSumCompII",
"III) compressed&cleaned Flag dead&bad b", 1600, 1000);
221 TCanvas *cFlagNew =
new TCanvas(
"cFlagNew",
"IV) Frac dead&bad 2D", 1600, 800);
222 TCanvas *cellSummaryCan =
new TCanvas(
"cellSummaryCan",
"I) run overview", 1600, 800);
223 TCanvas *cellSummaryCan2 =
new TCanvas(
"cellSummaryCan2",
"I) run overview II",1600,800);
224 TCanvas *cAmpSum =
new TCanvas(
"SumOfAmplitudes",
"I) Sum of Amplitides over runs",1500,750);
225 TCanvas *cAmpSum2D =
new TCanvas(
"SumOf2DAmplitudes",
"I) Sum of 2D Amplitides over runs",1500,750);
226 TCanvas *cAmpSum2D4Blocks =
new TCanvas(
"cAmpSum2D4Blocks",
"I) Sum of 2D Amplitides in 4 run blocks",1500,750);
227 TCanvas *cAmpSum2D4BlocksRatio =
new TCanvas(
"cAmpSum2D4BlocksRatio",
"I) Ratio of 2D Amplitides in 4 run blocks",1500,750);
251 hFlagvsRun[0] =
new TH2F(
"hFlag1vsRun",
"hFlag1vsRun (?); cell ID; Run number", noOfCells+10, 0, noOfCells+10, nRun, 0, nRun);
252 hFlagvsRun[1] =
new TH2F(
"hFlag2vsRun",
"hFlag2vsRun (?); cell ID; Run number", noOfCells+10, 0, noOfCells+10, nRun, 0, nRun);
253 hFlagvsRun[2] =
new TH2F(
"hFlag3vsRun",
"hFlag3vsRun (?); cell ID; Run number", noOfCells+10, 0, noOfCells+10, nRun, 0, nRun);
254 nEventsVsRuns =
new TH1D(
"nEventVsRun",
"number of events in run", nRun, 0, nRun);
256 for(
Int_t i=0;i<nRun;i++)
258 hFlagvsRun[0]->GetYaxis()->SetBinLabel(i+1,Form(
"%i",RunIdVec.at(i)));
259 hFlagvsRun[1]->GetYaxis()->SetBinLabel(i+1,Form(
"%i",RunIdVec.at(i)));
260 hFlagvsRun[2]->GetYaxis()->SetBinLabel(i+1,Form(
"%i",RunIdVec.at(i)));
265 for(
Int_t i = 0 ; i < nRun ; i++)
267 rootFileName = Form(
"%s_%s_Histograms_V%i.root",period.Data(), trigger.Data(), RunIdVec.at(i));
268 badChannelOutput = Form(
"%s/Version%i/%s", analysisOutput.Data(), RunIdVec.at(i),rootFileName.Data());
271 cout<<
"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"<<endl;
272 cout<<
"Open root file No: "<<i+1<<endl;
273 cout<<badChannelOutput<<
" - "<<flush;
274 TFile *f = TFile::Open(badChannelOutput);
277 cout<<
"Couldn't open/find .root file: "<<badChannelOutput<<endl;
279 cout<<
"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"<<endl;
280 badRunIdVec.push_back(RunIdVec.at(i));
284 if(f->TestBit(TFile::kRecovered))
286 cout<<
"File had to be recovered (probably damaged): "<<badChannelOutput<<endl;
288 cout<<
"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"<<endl;
291 ampID[usedRuns] = (
TH2F*)ampID[usedRuns-1]->Clone(
"hCellAmplitudeCopy");
292 ampID[usedRuns]->Clear();
293 ampIDCl[usedRuns] = (
TH2F*)ampID[usedRuns]->Clone(Form(
"hCellAmplitudeClRun%i",usedRuns));
294 ampIDCl[usedRuns]->Clear();
295 ampIDCl3Block[usedRuns]= (
TH2F*)ampID[usedRuns]->Clone(Form(
"hCellAmplitudeCl3RunBlock%i",usedRuns));
296 ampIDCl3Block[usedRuns]->Clear();
297 ampIDCl1Block[usedRuns]= (
TH2F*)ampID[usedRuns]->Clone(Form(
"hCellAmplitudeCl1RunBlock%i",usedRuns));
298 ampIDCl1Block[usedRuns]->Clear();
299 ampIDDelete[usedRuns] = (
TH2F*)ampID[usedRuns]->Clone(Form(
"hCellAmplitudeTest%i",usedRuns));
300 ampIDDelete[usedRuns]->Clear();
301 hCellGoodMean[usedRuns]= (
TH1D*)hCellGoodMean[usedRuns-1]->Clone(
"hgoodMeanCopy");
302 hCellGoodMean[usedRuns]->Clear();
303 badRunIdVec.push_back(RunIdVec.at(i));
310 hNEvent[usedRuns] = (
TH1D*)f->Get(
"hNEvents");
311 cout<<hNEvent[usedRuns]->Integral()<<
" evt."<<endl;
315 TH2F *goodCells = (
TH2F*)f->Get(Form(
"2DChannelMap_Flag0_V%i", RunIdVec.at(i)));
316 TH2F *deadCells = (
TH2F*)f->Get(Form(
"2DChannelMap_Flag1_V%i", RunIdVec.at(i)));
317 TH2F *badCells = (
TH2F*)f->Get(Form(
"2DChannelMap_Flag2_V%i", RunIdVec.at(i)));
318 TH1F *hCellFlag = (TH1F*)f->Get(
"fhCellFlag");
319 ampID[usedRuns] = (
TH2F*)f->Get(
"hCellAmplitude");
320 hCellGoodMean[usedRuns]= (
TH1D*)f->Get(
"hgoodMean");
322 if(!badCells || !goodCells || !deadCells || !ampID[usedRuns] || !hCellFlag)
324 if(!badCells) Printf(
"Did not find 2DChannelMap_Flag2_V%i", RunIdVec.at(i));
325 if(!goodCells)Printf(
"Did not find 2DChannelMap_Flag0_V%i", RunIdVec.at(i));
326 if(!deadCells)Printf(
"Did not find 2DChannelMap_Flag1_V%i", RunIdVec.at(i));
327 if(!ampID[usedRuns]) Printf(
"hCellAmplitude not found");
328 if(!hCellFlag)Printf(
"fhCellFlag not found");
333 nEventsVsRuns->SetBinContent(usedRuns+1,hNEvent[usedRuns]->Integral());
334 ampID[usedRuns] ->SetName(Form(
"hCellAmplitudeRun%i",usedRuns));
335 ampIDCl[usedRuns] = (
TH2F*)ampID[usedRuns]->Clone(Form(
"hCellAmplitudeClRun%i",usedRuns));
336 ampIDCl3Block[usedRuns]= (
TH2F*)ampID[usedRuns]->Clone(Form(
"hCellAmplitudeCl3RunBlock%i",usedRuns));
337 ampIDCl1Block[usedRuns]= (
TH2F*)ampID[usedRuns]->Clone(Form(
"hCellAmplitudeCl1RunBlock%i",usedRuns));
338 ampIDDelete[usedRuns] = (
TH2F*)ampID[usedRuns]->Clone(Form(
"hCellAmplitudeTest%i",usedRuns));
340 hCellGoodMean[usedRuns]->SetLineColor(kGreen);
343 Sum2DOrig = (
TH2F*)ampID[usedRuns]->Clone(
"Sum2DOrig");
344 Sum2DSingleMask= (
TH2F*)ampID[usedRuns]->Clone(
"Sum2DSingleMask");
345 Sum2D3BlockMask= (
TH2F*)ampID[usedRuns]->Clone(
"Sum2D3BlockMask");
346 Sum2DIdeal = (
TH2F*)ampID[usedRuns]->Clone(
"Sum2DIdealDistr");
348 Sum2DSingleMask->Reset();
349 Sum2D3BlockMask->Reset();
350 Sum2DIdeal ->Reset();
351 hgoodMean = (
TH1D*)hCellGoodMean[usedRuns]->Clone(
"MeanSpectrumAllRuns");
353 Sum2D3BlockMaskA =(
TH2F*)Sum2D3BlockMask->Clone(
"Sum2D3BlockMaskA");
354 Sum2D3BlockMaskB =(
TH2F*)Sum2D3BlockMask->Clone(
"Sum2D3BlockMaskB");
355 Sum2D3BlockMaskC =(
TH2F*)Sum2D3BlockMask->Clone(
"Sum2D3BlockMaskC");
356 Sum2D3BlockMaskD =(
TH2F*)Sum2D3BlockMask->Clone(
"Sum2D3BlockMaskD");
359 hgoodMean->Add(hCellGoodMean[usedRuns]);
360 hCellGoodMean[usedRuns]->SetLineWidth(3);
364 for(
Int_t icell = 0; icell < noOfCells; icell++)
366 Int_t flag = hCellFlag->GetBinContent(icell+1);
368 if(flag == 1) hFlagvsRun[0]->Fill(icell+1, usedRuns, 1);
370 if(flag>1) hFlagvsRun[1]->Fill(icell+1, usedRuns, 1);
374 hFlagvsRun[2]->Fill(icell+1, usedRuns, 1);
379 if(1.0*percBad/noOfCells>0.3)
381 cout<<
"Problem in run "<<RunIdVec.at(i)<<
" detected. Large number of bad+dead cells (>30%) - please double check!"<<endl;
382 cout<<
"All entries of run: "<<RunIdVec.at(i)<<
"/"<<usedRuns<<
"(bin "<<usedRuns+1<<
") will be set to 0"<<endl;
383 badRunIdVec.push_back(RunIdVec.at(i));
385 for(
Int_t icell = 0; icell < noOfCells; icell++)
387 hFlagvsRun[0]->SetBinContent(icell+1, usedRuns+1, 0);
388 hFlagvsRun[1]->SetBinContent(icell+1, usedRuns+1, 0);
389 hFlagvsRun[2]->SetBinContent(icell+1, usedRuns+1, 0);
395 hFlagNew = (
TH2F*)goodCells->Clone(TString::Format(
"h2DChannelMapNew_FlagAll"));
397 hFlagNew->SetTitle(
"Selected flag greater than 0; cell column (#eta direction); cell raw (#phi direction)");
398 hFlagNewClean = (
TH2F*)goodCells->Clone(TString::Format(
"h2DChannelMapNew_FlagAllClean"));
399 hFlagNewClean->Reset();
400 hFlagNewClean->SetTitle(
"Selected flag greater than 0; cell column (#eta direction); cell raw (#phi direction)");
405 cBad[usedRuns/totalperCv]->cd(usedRuns%totalperCv+1);
407 badCells->Draw(
"colz");
408 TLatex*
text =
new TLatex(0.2,0.85,Form(
"Bad Cells - Run %i",RunIdVec.at(i)));
409 text->SetTextSize(0.06);
411 text->SetTextColor(1);
414 cGood[usedRuns/totalperCv]->cd(usedRuns%totalperCv+1);
416 goodCells->Draw(
"colz");
417 TLatex* text1 =
new TLatex(0.2,0.85,Form(
"Good Cells - Run %i",RunIdVec.at(i)));
418 text1->SetTextSize(0.06);
420 text1->SetTextColor(1);
423 cDead[usedRuns/totalperCv]->cd(usedRuns%totalperCv+1);
425 deadCells->Draw(
"colz");
426 TLatex* text2 =
new TLatex(0.2,0.85,Form(
"Dead Cells - Run %i",RunIdVec.at(i)));
427 text2->SetTextSize(0.06);
429 text2->SetTextColor(1);
432 cAmp[usedRuns/totalperCv]->cd(usedRuns%totalperCv+1)->SetLogy();
433 TH1D* proj = ampID[usedRuns]->ProjectionX(TString::Format(
"hampIDProj_Run%d",RunIdVec.at(i)));
435 proj->SetLineColor(kCyan+2);
436 proj->GetYaxis()->SetRangeUser(0.0000001,100);
438 TLatex* text3 =
new TLatex(0.2,0.85,Form(
"Amplitudes - Run %i",RunIdVec.at(i)));
439 text3->SetTextSize(0.06);
441 text3->SetTextColor(1);
444 if(iFirstRun==0)projSum = ampID[usedRuns]->ProjectionX(
"hampIDProj_Sum");
445 if(iFirstRun>0) projSum->Add(proj);
446 Sum2DOrig->Add(ampID[usedRuns]);
456 for(
Int_t ic = 0; ic < noOfCells; ic++)
458 TH1D *htmpCell = hFlagvsRun[2]->ProjectionY(TString::Format(
"hIDProj_cell%d", ic), ic+1, ic+1);
460 for(
Int_t ir = 0; ir < nRunsUsed ; ir++)
462 sumRun += htmpCell->GetBinContent(ir+1);
463 if(htmpCell->GetBinContent(ir+1)==1)
467 for (
Int_t amp = 1; amp <= ampIDCl[ir]->GetNbinsX(); amp++)
469 ampIDCl[ir]->SetBinContent(amp,ic+1,0);
473 if(sumRun!=0)nBadCells++;
476 hgoodMean->Scale(1.0/nRunsUsed);
481 for(
Int_t eBin=0;eBin<Sum2DIdeal->GetNbinsX();eBin++)
483 Double_t binVal=hgoodMean->GetBinContent(eBin+1);
484 for(
Int_t icell=0;icell<Sum2DIdeal->GetNbinsY();icell++)
486 Sum2DIdeal->SetBinContent(eBin+1,icell+1,binVal);
492 for(
Int_t ir = 0; ir < nRunsUsed ; ir++)
494 cAmp[ir/totalperCv]->cd(ir%totalperCv+1)->SetLogy();
495 TH1D* proj = ampIDCl[ir]->ProjectionX(TString::Format(
"hampIDMaskedProj_Run%d",RunIdVec.at(ir)));
497 proj->SetLineColor(kSpring-2);
498 proj->Draw(
"hist same");
500 if(ir==0)projSumC = ampIDCl[ir]->ProjectionX(
"hampIDProj_SumMasked");
501 if(ir>0) projSumC->Add(proj);
502 Sum2DSingleMask->Add(ampIDCl[ir]);
507 cout<<
"nbins hFlagvsRun[1]: "<<hFlagvsRun[1]->GetYaxis()->GetNbins()<<endl;
508 hFlagvsRun[1]->GetYaxis()->SetRange(1,nRunsUsed);
509 deadCellsVsRun =hFlagvsRun[0]->ProjectionY(
"deadCellsVsRun");
510 badCellsVsRun =hFlagvsRun[1]->ProjectionY(
"badCellsVsRun");
511 deadbadCellsVsRun =hFlagvsRun[2]->ProjectionY(
"badDeadCellsVsRun");
512 cellSummaryCan->Divide(2);
513 cellSummaryCan->cd(1);
514 SetHisto(badCellsVsRun,
"Run",
"No. of cells",0);
515 badCellsVsRun->GetYaxis()->SetTitleOffset(1.7);
516 badCellsVsRun->GetYaxis()->SetRangeUser(0,badCellsVsRun->GetMaximum()*1.2);
517 if(nRunsUsed>8)badCellsVsRun->GetXaxis()->SetLabelSize(0.06-0.01*(nRunsUsed-8)/4);
518 else badCellsVsRun->GetXaxis()->SetLabelSize(0.06);
519 if(nRunsUsed>24)badCellsVsRun->GetXaxis()->SetLabelSize(0.025);
520 badCellsVsRun->SetLineColor(kCyan+2);
521 badCellsVsRun->SetLineWidth(3);
523 badCellsVsRun->DrawCopy(
"hist");
524 deadCellsVsRun->SetLineColor(kMagenta-2);
525 deadCellsVsRun->SetLineWidth(3);
526 deadCellsVsRun->DrawCopy(
"same");
528 TLegend *legSum0 =
new TLegend(0.60,0.82,0.85,0.93);
529 legSum0->SetBorderSize(0);
530 legSum0->SetTextSize(0.03);
531 legSum0->AddEntry(badCellsVsRun,
"Bad cells",
"l");
532 legSum0->AddEntry(deadCellsVsRun,
"Dead cells",
"l");
534 cellSummaryCan->cd(2);
535 SetHisto(nEventsVsRuns,
"Run",
"No. of Events",0);
536 nEventsVsRuns->DrawCopy(
"hist");
538 cellSummaryCan2->Divide(2);
539 for(
Int_t iRun=0;iRun<nRunsUsed;iRun++)
541 hBadVsEvent ->Fill(nEventsVsRuns->GetBinContent(iRun+1),badCellsVsRun->GetBinContent(iRun+1));
542 hDeadBadVsEvent->Fill(nEventsVsRuns->GetBinContent(iRun+1),deadbadCellsVsRun->GetBinContent(iRun+1),1);
544 cellSummaryCan2->cd(1);
545 SetHisto(hBadVsEvent,
"events in run",
"bad cells in run",0);
546 hBadVsEvent->DrawCopy(
"colz");
547 cellSummaryCan2->cd(2);
548 SetHisto(hDeadBadVsEvent,
"events in run",
"bad+dead cells in run",0);
549 hDeadBadVsEvent->DrawCopy(
"colz");
553 Color_t histCol=kCyan-8;
555 cFlagDeadBadI->cd()->SetLeftMargin(0.05);
556 cFlagDeadBadI->cd()->SetRightMargin(0.05);
557 cFlagDeadBadI->cd()->SetBottomMargin(0.06);
558 cFlagDeadBadI->cd()->SetTopMargin(0.02);
559 SetHisto(hFlagvsRun[0],
"dead cell ID",
"Run No.",1);
560 hFlagvsRun[0]->SetFillColor(histCol);
561 hFlagvsRun[0]->Draw(
"BOX");
562 cFlagDeadBadII->cd()->SetLeftMargin(0.05);
563 cFlagDeadBadII->cd()->SetRightMargin(0.05);
564 cFlagDeadBadII->cd()->SetBottomMargin(0.05);
565 cFlagDeadBadII->cd()->SetTopMargin(0.02);
566 SetHisto(hFlagvsRun[1],
"bad cell ID",
"Run No.",1);
567 hFlagvsRun[1]->SetFillColor(histCol);
568 hFlagvsRun[1]->Draw(
"BOX");
570 cFlagSumI->cd()->SetLeftMargin(0.05);
571 cFlagSumI->cd()->SetRightMargin(0.05);
572 cFlagSumI->cd()->SetBottomMargin(0.05);
573 cFlagSumI->cd()->SetTopMargin(0.02);
574 SetHisto(hFlagvsRun[2],
"dead+bad cell ID pt.1",
"Run No.",1);
575 hFlagvsRun[2]->SetFillColor(histCol);
576 hFlagvsRun[2]->GetXaxis()->SetRangeUser(0,8837);
577 hFlagvsRun[2]->DrawCopy(
"BOX");
578 cFlagSumII->cd()->SetLeftMargin(0.05);
579 cFlagSumII->cd()->SetRightMargin(0.05);
580 cFlagSumII->cd()->SetBottomMargin(0.05);
581 cFlagSumII->cd()->SetTopMargin(0.02);
582 SetHisto(hFlagvsRun[2],
"dead+bad cell ID pt.2",
"Run No.",1);
583 hFlagvsRun[2]->GetXaxis()->SetRangeUser(8838,17674-2);
584 hFlagvsRun[2]->DrawCopy(
"BOX");
591 CompressedAll->SetName(Form(
"%s_V1",CompressedAll->GetName()));
592 cFlagSumCompAllI->cd()->SetLeftMargin(0.05);
593 cFlagSumCompAllI->cd()->SetRightMargin(0.05);
594 cFlagSumCompAllI->cd()->SetBottomMargin(0.05);
595 cFlagSumCompAllI->cd()->SetTopMargin(0.02);
596 SetHisto(CompressedAll,
"certain dead+bad cell pt.1",
"Run No.",1);
597 CompressedAll->GetXaxis()->SetRangeUser(0,nBadCells/2);
598 CompressedAll->SetFillColor(histCol);
599 CompressedAll->DrawCopy(
"BOX");
600 cFlagSumCompAllII->cd()->SetLeftMargin(0.05);
601 cFlagSumCompAllII->cd()->SetRightMargin(0.05);
602 cFlagSumCompAllII->cd()->SetBottomMargin(0.05);
603 cFlagSumCompAllII->cd()->SetTopMargin(0.02);
604 SetHisto(CompressedAll,
"certain dead+bad cell pt.2",
"Run No.",1);
605 CompressedAll->GetXaxis()->SetRangeUser(nBadCells/2,nBadCells+2);
606 CompressedAll->DrawCopy(
"BOX");
616 cout<<
" o Summary: "<<nBadCells<<
" bad cells of "<<noOfCells<<
" total cells and "<<nRunsUsed<<
" runs"<<endl;
620 cout<<
" o Cells with less than "<<percbad*100<<
"% of bad/dead runs are double checked. These are cells with less than "<<nRunsUsed*percbad<<
" runs"<<endl;
621 cout<<
" o Cell id with low fraction of bad/dead runs:"<<endl;
623 std::vector<Int_t> cellVector;
625 for(
Int_t ic = 0; ic < noOfCells; ic++)
627 TH1D *htmpCell = hFlagvsRun[2]->ProjectionY(TString::Format(
"hIDProj_cell%d", ic), ic+1, ic+1);
628 fracRun = 0, sumRun = 0;
629 for(
Int_t ir = 0; ir < nRunsUsed ; ir++)
631 sumRun += htmpCell->GetBinContent(ir+1);
633 fracRun = sumRun/(
Double_t)(nRunsUsed);
638 Int_t cellColumn=0, cellRow=0;
639 Int_t cellColumnAbs=0, cellRowAbs=0;
642 hFlagNew->Fill(cellColumnAbs, cellRowAbs, fracRun*100);
644 if(fracRun>setBadCompletley)
646 for(
Int_t j = 0 ; j < nRunsUsed; j++)
648 hFlagvsRun[2]->SetBinContent(ic+1,j+1,1);
654 for(
Int_t j = 0 ; j < nRunsUsed; j++)
656 hFlagvsRun[2]->SetBinContent(ic+1,j+1,0);
668 cout<<
" o In total "<<cellVector.size()<<
" cells fall under this category"<<endl;
673 gSystem->mkdir(TString::Format(
"%s/RunByRunSummary%i/", analysisOutput.Data(),nRunsUsed));
674 TString pdfName = Form(
"%s/RunByRunSummary%i/%s_LowFractionCells",analysisOutput.Data(),nRunsUsed,listName.Data());
679 for(
Int_t ic = 0; ic < noOfCells; ic++)
681 TH1D *htmpCellAllRuns =hFlagvsRun[2]->ProjectionY(TString::Format(
"hIDProj_cell%d", ic), ic+1, ic+1);
682 Double_t integralBlock1 =htmpCellAllRuns->Integral(0,splitRuns1);
683 Double_t integralBlock2 =htmpCellAllRuns->Integral(splitRuns1+1,splitRuns2);
684 Double_t integralBlock3 =htmpCellAllRuns->Integral(splitRuns2+1,splitRuns3);
685 Double_t integralBlock4 =htmpCellAllRuns->Integral(splitRuns3+1,nRunsUsed);
688 if(badcellsBlock1.size()>0 && ic==badcellsBlock1.at(0))integralBlock1=1;
689 if(badcellsBlock2.size()>0 && ic==badcellsBlock2.at(0))integralBlock2=1;
690 if(badcellsBlock3.size()>0 && ic==badcellsBlock3.at(0))integralBlock3=1;
691 if(badcellsBlock4.size()>0 && ic==badcellsBlock4.at(0))integralBlock4=1;
693 Double_t integralBlock3Sum=integralBlock1+integralBlock2+integralBlock3;
696 if(integralBlock3Sum>0)
698 for(
Int_t ir = 0; ir < nRunsUsed ; ir++)
700 if((integralBlock1>0 && ir<=splitRuns1) ||
701 (integralBlock2>0 && ir>splitRuns1 && ir<=splitRuns2) ||
702 (integralBlock3>0 && ir>splitRuns2 && ir<=splitRuns3) ||
703 (integralBlock4>0 && ir>splitRuns3))
705 for (
Int_t amp = 1; amp <= ampIDCl3Block[ir]->GetNbinsX(); amp++)
708 ampIDCl3Block[ir]->SetBinContent(amp,ic+1,0);
712 for (
Int_t amp = 1; amp <= ampIDCl1Block[ir]->GetNbinsX(); amp++)
714 ampIDCl1Block[ir]->SetBinContent(amp,ic+1,0);
720 for(
Int_t ir = 0; ir < nRunsUsed ; ir++)
722 cAmp[ir/totalperCv]->cd(ir%totalperCv+1)->SetLogy();
723 TH1D* proj = ampIDCl3Block[ir]->ProjectionX(TString::Format(
"hampIDMaskedCleanedProj_Run%d",RunIdVec.at(ir)));
724 TH1D* projBlock = ampIDCl1Block[ir]->ProjectionX(TString::Format(
"hampIDMaskedCleaned1blockProj_Run%d",RunIdVec.at(ir)));
726 proj->SetLineColor(kBlue-1);
727 proj->Draw(
"hist same");
731 projSumC3Blocks = ampIDCl3Block[ir]->ProjectionX(
"hampIDProj_SumMaskedMultipleBlock");
732 projSumC3BlocksA= ampIDCl3Block[ir]->ProjectionX(
"hampIDProj_SumMaskedMultipleBlockA");
733 projSumC3BlocksB= ampIDCl3Block[ir]->ProjectionX(
"hampIDProj_SumMaskedMultipleBlockB");
734 projSumC3BlocksC= ampIDCl3Block[ir]->ProjectionX(
"hampIDProj_SumMaskedMultipleBlockC");
735 projSumC3BlocksD= ampIDCl3Block[ir]->ProjectionX(
"hampIDProj_SumMaskedMultipleBlockD");
736 projSumC3BlocksB->Reset();
737 projSumC3BlocksC->Reset();
738 projSumC3BlocksD->Reset();
739 projSumC1Block = ampIDCl1Block[ir]->ProjectionX(
"hampIDProj_SumMaskedOneBlock");
743 projSumC3Blocks->Add(proj);
744 if(ir<=splitRuns1) projSumC3BlocksA->Add(proj);
745 if(ir>splitRuns1 && ir<=splitRuns2) projSumC3BlocksB->Add(proj);
746 if(ir>splitRuns2 && ir<=splitRuns3) projSumC3BlocksC->Add(proj);
747 if(ir>splitRuns3) projSumC3BlocksD->Add(proj);
748 projSumC1Block ->Add(projBlock);
750 Sum2D3BlockMask->Add(ampIDCl3Block[ir]);
751 if(ir<=splitRuns1) Sum2D3BlockMaskA->Add(ampIDCl3Block[ir]);
752 if(ir>splitRuns1 && ir<=splitRuns2)Sum2D3BlockMaskB->Add(ampIDCl3Block[ir]);
753 if(ir>splitRuns2 && ir<=splitRuns3)Sum2D3BlockMaskC->Add(ampIDCl3Block[ir]);
754 if(ir>splitRuns3) Sum2D3BlockMaskD->Add(ampIDCl3Block[ir]);
760 cAmpSum->cd(1)->SetLogy();
761 SetHisto(projSum,
"",
"No. of hits/event",0);
762 projSum->GetYaxis()->SetRangeUser(0.0000001,1000);
763 projSum->SetLineColor(kCyan+3);
764 projSum->SetLineWidth(2);
765 projSum->Draw(
"hist");
767 projSumC->SetLineColor(kSpring-2);
768 projSumC->SetLineWidth(2);
769 projSumC->DrawCopy(
"hist same");
771 projSumC3Blocks->SetLineColor(kCyan-8);
772 projSumC3Blocks->SetLineWidth(2);
773 projSumC3Blocks->DrawCopy(
"hist same");
774 projSumC1Block->SetLineColor(2);
775 projSumC1Block->DrawCopy(
"hist same");
788 TLegend *legSum =
new TLegend(0.35,0.70,0.55,0.85);
789 legSum->AddEntry((
TH1D*)projSum->Clone(
"A1"),
"Original engery distr.",
"l");
790 legSum->AddEntry((
TH1D*)projSumC->Clone(
"A2"),
"Cells masked in each run",
"l");
791 legSum->AddEntry((
TH1D*)projSumC3Blocks->Clone(
"A3"),
"Cells reincluded and masked in 3 blocks",
"l");
792 legSum->AddEntry((
TH1D*)projSumC1Block->Clone(
"A4"),
"1 Block",
"l");
793 legSum->SetBorderSize(0);
794 legSum->SetTextSize(0.03);
795 legSum->Draw(
"same");
798 TLegend *legRatio =
new TLegend(0.25,0.30,0.4,0.45);
800 projSumC3Blocks->Divide(projSumC);
801 SetHisto(projSumC3Blocks,
"",
"block masked/single masked",0);
802 projSumC3Blocks->SetLineColor(30);
803 projSumC3Blocks->DrawCopy(
"hist");
804 legRatio->AddEntry((
TH1D*)projSumC1Block->Clone(
"A"),
"re-incl & masked as one big block",
"l");
805 projSumC1Block->SetLineColor(4);
806 projSumC1Block->Divide(projSumC);
807 projSumC1Block->DrawCopy(
"same");
808 legRatio->AddEntry((
TH1D*)projSumC3Blocks->Clone(
"B"),
"re-incl & masked in three blocks",
"l");
809 projSumC1Block->SetLineStyle(3);
810 projSumC1Block->SetLineColor(6);
811 projSumC1Block->Divide(projSumC3Blocks);
812 projSumC1Block->DrawCopy(
"same");
813 legRatio->AddEntry((
TH1D*)projSumC1Block->Clone(
"C"),
"ratio 1Block/3Blocks",
"l");
814 legRatio->SetBorderSize(0);
815 legRatio->SetTextSize(0.03);
816 legRatio->Draw(
"same");
820 cAmpSum2D->Divide(2);
821 cAmpSum2D->cd(1)->SetLogz();
823 Sum2D3BlockMask->GetZaxis()->SetRangeUser(10e-8,10);
824 Sum2D3BlockMask->DrawCopy(
"colz");
827 Sum2D3BlockMask->Divide(Sum2DIdeal);
829 Sum2D3BlockMask->SetTitle(
"Amplitude Vs. run / av. amp. vs. run");
831 Sum2D3BlockMask->DrawCopy(
"colz");
834 TLatex* textA =
new TLatex(0.5,0.8,Form(
"Block over run %i-%i",0,splitRuns1));
835 textA->SetTextSize(0.04);
836 textA->SetTextColor(1);
838 TLatex* textB =
new TLatex(0.5,0.8,Form(
"Block over run %i-%i",splitRuns1,splitRuns2));
839 textB->SetTextSize(0.04);
840 textB->SetTextColor(1);
842 TLatex* textC =
new TLatex(0.5,0.8,Form(
"Block over run %i-%i",splitRuns2,splitRuns3));
843 textC->SetTextSize(0.04);
844 textC->SetTextColor(1);
846 TLatex* textD =
new TLatex(0.5,0.8,Form(
"Block over run %i-%i",splitRuns3,nRunsUsed));
847 textD->SetTextSize(0.04);
848 textD->SetTextColor(1);
851 cAmpSum2D4Blocks->Divide(2,2);
852 cAmpSum2D4Blocks->cd(1)->SetLogz();
854 Sum2D3BlockMaskA->GetZaxis()->SetRangeUser(10e-8,10);
855 Sum2D3BlockMaskA->DrawCopy(
"colz");
857 cAmpSum2D4Blocks->cd(2)->SetLogz();
859 Sum2D3BlockMaskB->GetZaxis()->SetRangeUser(10e-8,10);
860 Sum2D3BlockMaskB->DrawCopy(
"colz");
862 cAmpSum2D4Blocks->cd(3)->SetLogz();
864 Sum2D3BlockMaskC->GetZaxis()->SetRangeUser(10e-8,10);
865 Sum2D3BlockMaskC->DrawCopy(
"colz");
867 cAmpSum2D4Blocks->cd(4)->SetLogz();
869 Sum2D3BlockMaskD->GetZaxis()->SetRangeUser(10e-8,10);
870 Sum2D3BlockMaskD->DrawCopy(
"colz");
873 cAmpSum2D4BlocksRatio->Divide(2,2);
874 cAmpSum2D4BlocksRatio->cd(1)->SetLogz();
875 Sum2D3BlockMaskA->Divide(Sum2DIdeal);
877 Sum2D3BlockMaskA->SetTitle(
"Amplitude Vs. run / av. amp. vs. run");
878 Sum2D3BlockMaskA->DrawCopy(
"colz");
880 cAmpSum2D4BlocksRatio->cd(2)->SetLogz();
881 Sum2D3BlockMaskB->Divide(Sum2DIdeal);
883 Sum2D3BlockMaskB->SetTitle(
"Amplitude Vs. run / av. amp. vs. run");
884 Sum2D3BlockMaskB->DrawCopy(
"colz");
886 cAmpSum2D4BlocksRatio->cd(3)->SetLogz();
887 Sum2D3BlockMaskC->Divide(Sum2DIdeal);
889 Sum2D3BlockMaskC->SetTitle(
"Amplitude Vs. run / av. amp. vs. run");
890 Sum2D3BlockMaskC->DrawCopy(
"colz");
892 cAmpSum2D4BlocksRatio->cd(4)->SetLogz();
893 Sum2D3BlockMaskD->Divide(Sum2DIdeal);
895 Sum2D3BlockMaskD->SetTitle(
"Amplitude Vs. run / av. amp. vs. run");
896 Sum2D3BlockMaskD->DrawCopy(
"colz");
901 cFlagSumCleanedI->cd()->SetLeftMargin(0.05);
902 cFlagSumCleanedI->cd()->SetRightMargin(0.05);
903 cFlagSumCleanedI->cd()->SetBottomMargin(0.05);
904 cFlagSumCleanedI->cd()->SetTopMargin(0.02);
905 SetHisto(hFlagvsRun[2],
"dead+bad cell ID (cleaned) pt.1",
"Run No.",1);
906 hFlagvsRun[2]->GetXaxis()->SetRangeUser(0,8837);
907 hFlagvsRun[2]->SetFillColor(histCol);
908 hFlagvsRun[2]->DrawCopy(
"BOX");
909 cFlagSumCleanedII->cd()->SetLeftMargin(0.05);
910 cFlagSumCleanedII->cd()->SetRightMargin(0.05);
911 cFlagSumCleanedII->cd()->SetBottomMargin(0.05);
912 cFlagSumCleanedII->cd()->SetTopMargin(0.02);
913 SetHisto(hFlagvsRun[2],
"dead+bad cell ID (cleaned) pt.2",
"Run No.",1);
914 hFlagvsRun[2]->GetXaxis()->SetRangeUser(8837,17674);
915 hFlagvsRun[2]->DrawCopy(
"BOX");
920 badCellsVsRunC =hFlagvsRun[1]->ProjectionY(
"badCellsVsRunC");
921 cellSummaryCan->cd(1);
922 badCellsVsRunC->SetLineColor(kGreen-9);
923 badCellsVsRunC->SetLineWidth(2);
924 badCellsVsRunC->SetFillColorAlpha(10,0);
925 badCellsVsRunC->DrawCopy(
"same");
927 legSum0->AddEntry(badCellsVsRunC,
"Bad cells cleaned",
"l");
928 legSum0->Draw(
"same");
936 cFlagSumCompCleanI->cd()->SetLeftMargin(0.065);
937 cFlagSumCompCleanI->cd()->SetRightMargin(0.02);
938 cFlagSumCompCleanI->cd()->SetBottomMargin(0.05);
939 cFlagSumCompCleanI->cd()->SetTopMargin(0.02);
940 SetHisto(CompressedClean,
"certain dead+bad cell (cleaned) pt.1",
"Run No.",1);
941 CompressedClean->GetXaxis()->SetRangeUser(0,nBadCells/2);
942 CompressedClean->SetFillColor(histCol);
943 if(nRunsUsed>8 && nRunsUsed<24)CompressedClean->GetYaxis()->SetLabelSize(0.025-0.1*(nRunsUsed-8)/4);
944 else CompressedClean->GetYaxis()->SetLabelSize(0.025);
945 CompressedClean->GetYaxis()->SetTitleOffset(0.7);
946 CompressedClean->DrawCopy(
"BOX");
947 cFlagSumCompCleanII->cd()->SetLeftMargin(0.055);
948 cFlagSumCompCleanII->cd()->SetRightMargin(0.02);
949 cFlagSumCompCleanII->cd()->SetBottomMargin(0.05);
950 cFlagSumCompCleanII->cd()->SetTopMargin(0.02);
951 SetHisto(CompressedClean,
"certain dead+bad cell (cleaned) pt.2",
"Run No.",1);
952 if(nRunsUsed>8 && nRunsUsed<24)CompressedClean->GetYaxis()->SetLabelSize(0.025-0.1*(nRunsUsed-8)/4);
953 else CompressedClean->GetYaxis()->SetLabelSize(0.025);
954 CompressedClean->GetYaxis()->SetTitleOffset(0.7);
955 CompressedClean->GetXaxis()->SetRangeUser(nBadCells/2,nBadCells+2);
956 CompressedClean->DrawCopy(
"BOX");
961 for(
Int_t ic = 0; ic < noOfCells; ic++)
963 TH1D *htmpCell = hFlagvsRun[2]->ProjectionY(TString::Format(
"hIDProj_cell%d", ic), ic+1, ic+1);
964 fracRun = 0, sumRun = 0;
965 for(
Int_t ir = 0; ir < nRunsUsed ; ir++)
967 sumRun += htmpCell->GetBinContent(ir+1);
969 fracRun = sumRun/(
Double_t)(nRunsUsed);
972 Int_t cellColumn=0, cellRow=0;
973 Int_t cellColumnAbs=0, cellRowAbs=0;
976 hFlagNewClean->Fill(cellColumnAbs, cellRowAbs, fracRun*100);
983 hFlagNew->Draw(
"colz");
986 hFlagNewClean->Draw(
"colz");
992 TH1D *htmpCellSum = hFlagvsRun[2]->ProjectionX(
"countSum");
993 for(
Int_t ic = 0; ic < noOfCells; ic++)
995 if(htmpCellSum->GetBinContent(ic+1)>0)bcBolckSum++;
998 cout<<
"...................................."<<endl;
999 cout<<
"Summary: "<<nBadCells<<
" bad cells of "<<noOfCells<<
" total cells and "<<nRunsUsed<<
" runs"<<endl;
1000 cout<<
"o All bad cells: "<<nBadCells<<endl;
1001 cout<<
"o low fraction bad cells: "<<cellVector.size()<<endl;
1002 cout<<
"o bad cells after reinclusion: "<<bcBolckSum<<endl;
1003 cout<<
"o rescued cells: "<<nBadCells-bcBolckSum<<endl;
1004 if(cellVector.size()!=0)cout<<
"o These are: "<<100*(nBadCells-bcBolckSum)/cellVector.size()<<
"% of low frac cells"<<endl;
1005 cout<<
"...................................."<<endl;
1007 if(badRunIdVec.size()>0)
1009 cout<<
"There were bad runs detected that could not be used:"<<endl;
1010 for(
Int_t badRun=0; badRun<(
Int_t)badRunIdVec.size(); badRun++)
1012 cout<<badRunIdVec.at(badRun)<<
", "<<flush;
1016 cout<<
"...................................."<<endl;
1023 TString fileName = Form(
"%s/RunByRunSummary%i/%s_Results.root",analysisOutput.Data(),nRunsUsed,listName.Data());
1024 TFile* rootFile =
new TFile(fileName,
"recreate");
1025 for(
Int_t ic = 0; ic<nCv; ic++)
1027 rootFile->WriteObject(cBad [ic],cBad [ic]->GetName());
1028 rootFile->WriteObject(cGood[ic],cGood[ic]->GetName());
1029 rootFile->WriteObject(cDead[ic],cDead[ic]->GetName());
1030 rootFile->WriteObject(cAmp [ic],cAmp [ic]->GetName());
1033 rootFile->WriteObject(cellSummaryCan,cellSummaryCan->GetName());
1034 rootFile->WriteObject(cAmpSum,cAmpSum->GetName());
1035 rootFile->WriteObject(cFlagDeadBadI,cFlagDeadBadI->GetName());
1036 rootFile->WriteObject(cFlagDeadBadII,cFlagDeadBadII->GetName());
1037 rootFile->WriteObject(cFlagSumI,cFlagSumII->GetName());
1038 rootFile->WriteObject(cFlagSumII,cFlagSumII->GetName());
1039 rootFile->WriteObject(cFlagSumCleanedI,cFlagSumCleanedI->GetName());
1040 rootFile->WriteObject(cFlagSumCleanedII,cFlagSumCleanedII->GetName());
1041 rootFile->WriteObject(cFlagSumCompAllI,cFlagSumCompAllI->GetName());
1042 rootFile->WriteObject(cFlagSumCompAllII,cFlagSumCompAllII->GetName());
1043 rootFile->WriteObject(cFlagSumCompCleanI,cFlagSumCompCleanI->GetName());
1044 rootFile->WriteObject(cFlagSumCompCleanII,cFlagSumCompCleanII->GetName());
1045 rootFile->WriteObject(cFlagNew,cFlagNew->GetName());
1046 rootFile->WriteObject(cAmpSum2D,cAmpSum2D->GetName());
1047 rootFile->WriteObject(cAmpSum2D4Blocks,cAmpSum2D4Blocks->GetName());
1048 rootFile->WriteObject(cAmpSum2D4BlocksRatio,cAmpSum2D4BlocksRatio->GetName());
1050 rootFile->WriteObject(hFlagNew,hFlagNew->GetName());
1051 rootFile->WriteObject(CompressedAll,CompressedAll->GetName());
1052 rootFile->WriteObject(hFlagvsRun[2],hFlagvsRun[2]->GetName());
1053 rootFile->WriteObject(CompressedClean,CompressedClean->GetName());
1054 rootFile->WriteObject(projSum,projSum->GetName());
1055 rootFile->WriteObject(projSumC,projSumC->GetName());
1056 rootFile->WriteObject(projSumC3Blocks,projSumC3Blocks->GetName());
1057 rootFile->WriteObject(nEventsVsRuns,nEventsVsRuns->GetName());
1058 for(
Int_t ir = 0; ir < nRunsUsed ; ir++)
1060 rootFile->WriteObject(ampIDCl[ir],ampIDCl[ir]->GetName());
1061 rootFile->WriteObject(ampID[ir],ampID[ir]->GetName());
1062 rootFile->WriteObject(ampIDDelete[ir],ampIDDelete[ir]->GetName());
1067 TString badCanvasName =Form(
"%s/RunByRunSummary%i/%s_BadCells.pdf", analysisOutput.Data(),nRunsUsed,listName.Data());
1068 TString goodCanvasName=Form(
"%s/RunByRunSummary%i/%s_GoodCells.pdf", analysisOutput.Data(),nRunsUsed,listName.Data());
1069 TString deadCanvasName=Form(
"%s/RunByRunSummary%i/%s_DeadCells.pdf", analysisOutput.Data(),nRunsUsed,listName.Data());
1070 TString ampCanvasName =Form(
"%s/RunByRunSummary%i/%s_Amplitudes.pdf", analysisOutput.Data(),nRunsUsed,listName.Data());
1071 TString summaryPDF =Form(
"%s/RunByRunSummary%i/%s_FigureCollection.pdf", analysisOutput.Data(),nRunsUsed,listName.Data());
1073 for(
Int_t ic = 0; ic<nCv; ic++)
1078 cBad [ic] ->Print(Form(
"%s(",badCanvasName.Data()));
1079 cGood[ic] ->Print(Form(
"%s(",goodCanvasName.Data()));
1080 cDead[ic] ->Print(Form(
"%s(",deadCanvasName.Data()));
1081 cAmp [ic] ->Print(Form(
"%s(",ampCanvasName.Data()));
1083 else if(ic==(nCv-1) && nCv>1)
1086 cBad [ic] ->Print(Form(
"%s)",badCanvasName.Data()));
1087 cGood[ic] ->Print(Form(
"%s)",goodCanvasName.Data()));
1088 cDead[ic] ->Print(Form(
"%s)",deadCanvasName.Data()));
1089 cAmp [ic] ->Print(Form(
"%s)",ampCanvasName.Data()));
1094 cBad [ic] ->Print(Form(
"%s",badCanvasName.Data()));
1095 cGood[ic] ->Print(Form(
"%s",goodCanvasName.Data()));
1096 cDead[ic] ->Print(Form(
"%s",deadCanvasName.Data()));
1097 cAmp [ic] ->Print(Form(
"%s",ampCanvasName.Data()));
1102 cellSummaryCan ->Print(Form(
"%s(",summaryPDF.Data()));
1103 cellSummaryCan2 ->Print(Form(
"%s",summaryPDF.Data()));
1104 cAmpSum ->Print(Form(
"%s",summaryPDF.Data()));
1105 cAmpSum2D ->Print(Form(
"%s",summaryPDF.Data()));
1106 cAmpSum2D4Blocks ->Print(Form(
"%s",summaryPDF.Data()));
1107 cFlagNew ->Print(Form(
"%s",summaryPDF.Data()));
1108 cFlagDeadBadI ->Print(Form(
"%s",summaryPDF.Data()));
1109 cFlagDeadBadII ->Print(Form(
"%s",summaryPDF.Data()));
1110 cFlagSumI ->Print(Form(
"%s",summaryPDF.Data()));
1111 cFlagSumII ->Print(Form(
"%s",summaryPDF.Data()));
1112 cFlagSumCleanedI ->Print(Form(
"%s",summaryPDF.Data()));
1113 cFlagSumCleanedII->Print(Form(
"%s",summaryPDF.Data()));
1114 cFlagSumCompAllI ->Print(Form(
"%s",summaryPDF.Data()));
1115 cFlagSumCompAllII->Print(Form(
"%s",summaryPDF.Data()));
1116 cFlagSumCompCleanI->Print(Form(
"%s",summaryPDF.Data()));
1117 cFlagSumCompCleanII->Print(Form(
"%s)",summaryPDF.Data()));
1128 cout<<
"Error: so far only implemented for 1-5 splits"<<endl;
1131 gStyle->SetOptTitle(0);
1132 gStyle->SetOptStat(0);
1133 gStyle->SetPalette(55);
1134 gStyle->SetCanvasColor(10);
1135 TGaxis::SetMaxDigits(4);
1136 gStyle->SetPadTopMargin(0.07);
1137 gStyle->SetPadBottomMargin(0.18);
1138 gStyle->SetPadRightMargin(0.04);
1139 gStyle->SetPadLeftMargin(0.06);
1140 gStyle->SetFrameFillColor(10);
1141 gStyle->SetLabelSize(0.05,
"X");
1142 gStyle->SetLabelSize(0.05,
"Y");
1143 gStyle->SetTitleSize(5.0,
"X");
1144 gStyle->SetTitleSize(5.0,
"Y");
1145 gEnv->SetValue(
"Canvas.ShowEventStatus",1);
1154 Int_t runNumber=265630;
1171 TString fileName = Form(
"AnalysisOutput/%s/Train_%i/RunByRunSummary%i/%s_Results.root",period.Data(),train,Nruns,runList.Data());
1173 cout<<
"Open root file: "<<fileName<<endl;
1174 TFile *f = TFile::Open(fileName);
1177 cout<<
"Couldn't open/find .root file: "<<fileName<<endl;
1180 TH2F *hbadAndDeadvsRun = (
TH2F*)f->Get(
"hFlag3vsRun_Comp");
1181 TH2F *hbadAndDeadvsRunw = (
TH2F*)hbadAndDeadvsRun->Clone(
"hbadAndDeadvsRunWeight");
1182 if(!hbadAndDeadvsRun)cout<<
"couldn't find histogram - hFlag3vsRun_Comp"<<endl;
1183 hbadAndDeadvsRun->GetXaxis()->UnZoom();
1184 hbadAndDeadvsRunw->GetXaxis()->UnZoom();
1186 TH1D* hEventsPerRun = (
TH1D*)f->Get(
"nEventVsRun");
1187 if(!hEventsPerRun)cout<<
"couldn't find histogram - nEventVsRun"<<endl;
1199 for(
Int_t icell = 0; icell < noOfCells ; icell++)
1201 for(
Int_t iRun = 0; iRun < Nruns ; iRun++)
1203 if(hbadAndDeadvsRun->GetBinContent(icell+1,iRun+1)==1)
1205 hbadAndDeadvsRunw->SetBinContent(icell+1,iRun+1,hEventsPerRun->GetBinContent(iRun+1));
1211 TCanvas *canEvt=
new TCanvas(
"canEvt",
"canEvt", 500, 500);
1212 canEvt->cd()->SetLeftMargin(0.08);
1213 SetHisto(hEventsPerRun,
"Run",
"No of events",0);
1215 hEventsPerRun->DrawCopy(
"hist");
1246 Int_t sumRunBlockTotal=0;
1247 Int_t nBlockTotal=0;
1248 TH1D *hOneBigBlock = hbadAndDeadvsRunw->ProjectionX(TString::Format(
"%s_projSum",hbadAndDeadvsRunw->GetName()),0,Nruns);
1250 for(
Int_t iRun=1; iRun<=Nruns; iRun++)
1252 cout<<
"Round "<<iRun<<
" of "<<Nruns<<endl;
1262 for(
Int_t iRun2=endBlock2; iRun2<=Nruns; iRun2++)
1273 for(
Int_t iRun3=endBlock3; iRun3<=Nruns; iRun3++)
1283 for(
Int_t iRun4=endBlock4; iRun4<=Nruns; iRun4++)
1285 hbadAndDeadvsRun ->GetXaxis()->UnZoom();
1286 hbadAndDeadvsRunw->GetXaxis()->UnZoom();
1287 TH1D *htmpCell1=
nullptr;
1288 TH1D *htmpCell2=
nullptr;
1289 TH1D *htmpCell3=
nullptr;
1290 TH1D *htmpCell4=
nullptr;
1291 TH1D *htmpCell5=
nullptr;
1293 if(noOfSplits<3)iRun2=Nruns;
1294 if(noOfSplits<4)iRun3=Nruns;
1295 if(noOfSplits<5)iRun4=Nruns;
1299 htmpCell1 = hbadAndDeadvsRunw->ProjectionX(TString::Format(
"%s_proj1",hbadAndDeadvsRunw->GetName()),0,iRun);
1300 htmpCell2 = hbadAndDeadvsRunw->ProjectionX(TString::Format(
"%s_proj2",hbadAndDeadvsRunw->GetName()),iRun+1,iRun2);
1301 if(noOfSplits>2)htmpCell3 = hbadAndDeadvsRunw->ProjectionX(TString::Format(
"%s_proj3",hbadAndDeadvsRunw->GetName()),iRun2+1,iRun3);
1302 if(noOfSplits>3)htmpCell4 = hbadAndDeadvsRunw->ProjectionX(TString::Format(
"%s_proj4",hbadAndDeadvsRunw->GetName()),iRun3+1,iRun4);
1303 if(noOfSplits>4)htmpCell5 = hbadAndDeadvsRunw->ProjectionX(TString::Format(
"%s_proj5",hbadAndDeadvsRunw->GetName()),iRun4+1,Nruns);
1307 htmpCell1 = hbadAndDeadvsRun->ProjectionX(TString::Format(
"%s_proj1",hbadAndDeadvsRun->GetName()),0,iRun);
1308 htmpCell2 = hbadAndDeadvsRun->ProjectionX(TString::Format(
"%s_proj2",hbadAndDeadvsRun->GetName()),iRun+1,iRun2);
1309 if(noOfSplits>2)htmpCell3 = hbadAndDeadvsRun->ProjectionX(TString::Format(
"%s_proj3",hbadAndDeadvsRun->GetName()),iRun2+1,iRun3);
1310 if(noOfSplits>3)htmpCell4 = hbadAndDeadvsRun->ProjectionX(TString::Format(
"%s_proj4",hbadAndDeadvsRun->GetName()),iRun3+1,iRun4);
1311 if(noOfSplits>4)htmpCell5 = hbadAndDeadvsRun->ProjectionX(TString::Format(
"%s_proj5",hbadAndDeadvsRun->GetName()),iRun4+1,Nruns);
1314 Double_t nEvtBlock1 = hEventsPerRun->Integral(0,iRun);
1315 Double_t nEvtBlock2 = hEventsPerRun->Integral(iRun+1,iRun2);
1316 Double_t nEvtBlock3 = hEventsPerRun->Integral(iRun2+1,iRun3);
1317 Double_t nEvtBlock4 = hEventsPerRun->Integral(iRun3+1,iRun4);
1318 Double_t nEvtBlock5 = hEventsPerRun->Integral(iRun4+1,Nruns);
1321 Int_t sumRunBlock1=0;
1322 Int_t sumRunBlock2=0;
1323 Int_t sumRunBlock3=0;
1324 Int_t sumRunBlock4=0;
1325 Int_t sumRunBlock5=0;
1333 for(
Int_t icell = 0; icell < htmpCell1->GetNbinsX(); icell++)
1335 sumRunBlockTotal = hOneBigBlock->GetBinContent(icell+1);
1336 sumRunBlock1 = htmpCell1->GetBinContent(icell+1);
1337 sumRunBlock2 = htmpCell2->GetBinContent(icell+1);
1338 if(noOfSplits>2)sumRunBlock3 = htmpCell3->GetBinContent(icell+1);
1339 if(noOfSplits>3)sumRunBlock4 = htmpCell4->GetBinContent(icell+1);
1340 if(noOfSplits>4)sumRunBlock5 = htmpCell5->GetBinContent(icell+1);
1342 if(sumRunBlock1>0)nBlock1++;
1343 if(sumRunBlock2>0)nBlock2++;
1344 if(sumRunBlock3>0)nBlock3++;
1345 if(sumRunBlock4>0)nBlock4++;
1346 if(sumRunBlock5>0)nBlock5++;
1347 if(sumRunBlockTotal>0)nBlockTotal++;
1350 nCellRunsBlock1=nBlock1*iRun;
1351 nCellRunsBlock2=nBlock2*(iRun2-iRun+1);
1352 nCellRunsBlock3=nBlock3*(iRun3-iRun2+1);
1353 nCellRunsBlock4=nBlock4*(iRun4-iRun3+1);
1354 nCellRunsBlock5=nBlock5*(Nruns-iRun4+1);
1357 nCellEvtBlock1 =nBlock1*nEvtBlock1;
1358 nCellEvtBlock2 =nBlock2*nEvtBlock2;
1359 nCellEvtBlock3 =nBlock3*nEvtBlock3;
1360 nCellEvtBlock4 =nBlock4*nEvtBlock4;
1361 nCellEvtBlock5 =nBlock5*nEvtBlock5;
1364 if(totalCellsBadRun==0 || (nCellRunsBlock1+nCellRunsBlock2+nCellRunsBlock3+nCellRunsBlock4+nCellRunsBlock5)<totalCellsBadRun)
1366 totalCellsBadRun=nCellRunsBlock1+nCellRunsBlock2+nCellRunsBlock3+nCellRunsBlock4+nCellRunsBlock5;
1373 if(totalCellsBadEvt==0 || (nCellEvtBlock1+nCellEvtBlock2+nCellEvtBlock3+nCellEvtBlock4+nCellEvtBlock5)<totalCellsBadEvt)
1375 totalCellsBadEvt=nCellEvtBlock1+nCellEvtBlock2+nCellEvtBlock3+nCellEvtBlock4+nCellEvtBlock5;
1385 hbadAndDeadvsRun->GetXaxis()->UnZoom();
1386 TH1D *htmpCell1p = hbadAndDeadvsRun->ProjectionX(TString::Format(
"%s_proj1",hbadAndDeadvsRun->GetName()),0,splitRun1);
1387 TH1D *htmpCell2p = hbadAndDeadvsRun->ProjectionX(TString::Format(
"%s_proj2",hbadAndDeadvsRun->GetName()),splitRun1+1,splitRun2);
1388 TH1D *htmpCell3p = hbadAndDeadvsRun->ProjectionX(TString::Format(
"%s_proj3",hbadAndDeadvsRun->GetName()),splitRun2+1,splitRun3);
1389 TH1D *htmpCell4p = hbadAndDeadvsRun->ProjectionX(TString::Format(
"%s_proj4",hbadAndDeadvsRun->GetName()),splitRun3+1,splitRun4);
1390 TH1D *htmpCell5p = hbadAndDeadvsRun->ProjectionX(TString::Format(
"%s_proj5",hbadAndDeadvsRun->GetName()),splitRun4+1,Nruns);
1392 TCanvas *canSplit=
new TCanvas(
"canSplit",
"Split compressed cell ID's", 1600, 500);
1393 canSplit->Divide(2,2);
1394 if(noOfSplits>4)canSplit->Divide(2,3);
1396 SetHisto(htmpCell1p,
"",
"nruns bad",1);
1397 htmpCell1p->GetYaxis()->SetTitleOffset(0.35);
1398 htmpCell1p->DrawCopy(
"hist");
1400 SetHisto(htmpCell2p,
"",
"nruns bad",1);
1401 htmpCell2p->GetYaxis()->SetTitleOffset(0.35);
1402 htmpCell2p->DrawCopy(
"hist");
1404 SetHisto(htmpCell3p,
"",
"nruns bad",1);
1405 htmpCell3p->GetYaxis()->SetTitleOffset(0.35);
1406 htmpCell3p->DrawCopy(
"hist");
1408 SetHisto(htmpCell4p,
"",
"nruns bad",1);
1409 htmpCell4p->GetYaxis()->SetTitleOffset(0.35);
1410 htmpCell4p->DrawCopy(
"hist");
1414 SetHisto(htmpCell5p,
"",
"nruns bad",1);
1415 htmpCell5p->GetYaxis()->SetTitleOffset(0.35);
1416 htmpCell5p->DrawCopy(
"hist");
1420 TCanvas *can1=
new TCanvas(
"compressedIDs1",
"compressed cell ID's A)", 1600, 1000);
1421 can1->cd()->SetLeftMargin(0.05);
1422 can1->cd()->SetRightMargin(0.05);
1423 can1->cd()->SetBottomMargin(0.06);
1424 can1->cd()->SetTopMargin(0.02);
1425 SetHisto(hbadAndDeadvsRun,
"",
"Run in List",1);
1426 hbadAndDeadvsRun->GetYaxis()->SetTitleOffset(0.5);
1427 static Double_t rangeUp=nBlockTotal;
1428 hbadAndDeadvsRun->GetXaxis()->SetRangeUser(0,rangeUp);
1429 hbadAndDeadvsRun->DrawCopy(
"colz");
1435 TCanvas *can2=
new TCanvas(
"compressedIDs2",
"compressed cell ID's B)", 1600, 1000);
1436 can2->cd()->SetLeftMargin(0.05);
1437 can2->cd()->SetRightMargin(0.05);
1438 can2->cd()->SetBottomMargin(0.06);
1439 can2->cd()->SetTopMargin(0.02);
1440 SetHisto(hbadAndDeadvsRunw,
"",
"Run in List",1);
1441 hbadAndDeadvsRunw->GetYaxis()->SetTitleOffset(0.5);
1442 hbadAndDeadvsRunw->GetXaxis()->SetRangeUser(0,nBlockTotal);
1443 hbadAndDeadvsRunw->DrawCopy(
"colz");
1450 cout<<
"Best results are achieved by splitting into:"<<endl;
1451 cout<<
"- - - - - - - - GENERAL - - - - - - - - -"<<endl;
1452 cout<<
"Number of runs: "<<Nruns<<endl;
1453 cout<<
"Number events: "<<hEventsPerRun->Integral(0,Nruns)<<endl;
1454 cout<<
"Bad cells if masked as 1 block: "<<nBlockTotal<<endl;
1455 cout<<
"Bad cells * runs: "<<nBlockTotal*Nruns<<endl;
1456 cout<<
"Bad cells * evt: "<<nBlockTotal*hEventsPerRun->Integral(0,Nruns)<<endl;
1467 cout<<
"- - - - - - - - WEIGHTED Splitting - - - - - - - - -"<<endl;
1468 cout<<
"Run Block 1: 0-"<<splitRun1w<<endl;
1469 cout<<
"Run Block 2: "<<splitRun1w+1<<
"-"<<splitRun2w<<endl;
1470 if(noOfSplits>2)cout<<
"Run Block 3: "<<splitRun2w+1<<
"-"<<splitRun3w<<endl;
1471 if(noOfSplits>3)cout<<
"Run Block 4: "<<splitRun3w+1<<
"-"<<splitRun4w<<endl;
1472 if(noOfSplits>4)cout<<
"Run Block 5: "<<splitRun4w+1<<
"-"<<Nruns<<endl;
1473 cout<<
"Number of Bad cells*events ="<<totalCellsBadEvt<<endl;
1474 cout<<
"Number of effective Bad cells ="<<totalCellsBadEvt/hEventsPerRun->Integral(0,Nruns)<<endl;
1476 cout<<
" events block1 : "<<hEventsPerRun->Integral(0,splitRun1w)<<endl;
1477 cout<<
" events block2 : "<<hEventsPerRun->Integral(splitRun1w+1,splitRun2w)<<endl;
1478 if(noOfSplits>2)cout<<
" events block3 : "<<hEventsPerRun->Integral(splitRun2w+1,splitRun3w)<<endl;
1479 if(noOfSplits>3)cout<<
" events block4 : "<<hEventsPerRun->Integral(splitRun3w+1,splitRun4w)<<endl;
1480 if(noOfSplits>4)cout<<
" events block5 : "<<hEventsPerRun->Integral(splitRun4w+1,Nruns)<<endl;
1481 cout<<
"- - - - - - - - Improvement of WEIGHTED Splitting - - - - - - - - -"<<endl;
1482 cout<<
"Improvement of Bad cells * evt by "<<(nBlockTotal*hEventsPerRun->Integral(0,Nruns)-totalCellsBadEvt)*100/(nBlockTotal*hEventsPerRun->Integral(0,Nruns))<<
"%"<<endl;
1487 fileName = Form(
"AnalysisOutput/%s/Train_%i/RunByRunSummary%i/SplittingResults_%s_%iBlocks.gif",period.Data(),train,Nruns,period.Data(),noOfSplits);
1488 can2->SaveAs(fileName);
1500 gROOT->ProcessLine(
"gErrorIgnoreLevel = kWarning;");
1502 gStyle->SetOptStat(0);
1503 gStyle->SetPadLeftMargin(0.13);
1504 gStyle->SetPadRightMargin(0.1);
1505 gStyle->SetPadBottomMargin(0.13);
1506 gStyle->SetPadTopMargin(0.02);
1508 Int_t noOfCells=17674;
1509 const Int_t nRunsUsed=105;
1512 Int_t splitRuns1=34;
1513 Int_t splitRuns2=66;
1514 Int_t splitRuns3=74;
1515 Int_t nBadCellMerged[4]={noOfCells,noOfCells,noOfCells,noOfCells};
1516 Int_t nBadCellRbR[4] ={noOfCells,noOfCells,noOfCells,noOfCells};
1520 std::vector<Int_t> badcellsBlock1;
1521 std::vector<Int_t> badcellsBlock2;
1522 std::vector<Int_t> badcellsBlock3;
1523 std::vector<Int_t> badcellsBlock4;
1542 std::vector<Int_t> vOnlyMaskedInMergedA;
1543 std::vector<Int_t> vOnlyMaskedInRunbRunA;
1544 std::vector<Int_t> vOnlyMaskedInMergedB;
1545 std::vector<Int_t> vOnlyMaskedInRunbRunB;
1546 std::vector<Int_t> vOnlyMaskedInMergedC;
1547 std::vector<Int_t> vOnlyMaskedInRunbRunC;
1548 std::vector<Int_t> vOnlyMaskedInMergedD;
1549 std::vector<Int_t> vOnlyMaskedInRunbRunD;
1551 cout<<
"run splitting: "<<endl;
1552 cout<<0<<
"-"<<splitRuns1<<
" -> "<<splitRuns1<<
" runs"<<endl;
1553 cout<<splitRuns1+1<<
"-"<<splitRuns2<<
" -> "<<splitRuns2-splitRuns1<<
" runs"<<endl;
1554 cout<<splitRuns2+1<<
"-"<<splitRuns3<<
" -> "<<splitRuns3-splitRuns2<<
" runs"<<endl;
1555 cout<<splitRuns3+1<<
"-"<<nRunsUsed <<
" -> "<<nRunsUsed-splitRuns3 <<
" runs"<<endl;
1560 cout<<
"**Open files with merged runlist analysis: "<<endl;
1561 TString pathA = Form(
"./AnalysisOutput/%s/Train_%i/Version%i",period.Data(),trainNo,version);
1562 TString rootFileNameA= Form(
"INT7_Histograms_V%i.root",version);
1563 TFile* outputRootA = TFile::Open(Form(
"%s/%s",pathA.Data(),rootFileNameA.Data()));
1564 if(!outputRootA)cout<<
"File "<<outputRootA->GetName()<<
" does not exist"<<endl;
1565 else cout<<
"file A: "<<outputRootA->GetName()<<endl;
1566 TString pathB = Form(
"./AnalysisOutput/%s/Train_%i/Version%i",period.Data(),trainNo,version+1);
1567 TString rootFileNameB= Form(
"INT7_Histograms_V%i.root",version+1);
1568 TFile* outputRootB = TFile::Open(Form(
"%s/%s",pathB.Data(),rootFileNameB.Data()));
1569 if(!outputRootB)cout<<
"File "<<outputRootB->GetName()<<
" does not exist"<<endl;
1570 else cout<<
"file B: "<<outputRootB->GetName()<<endl;
1571 TString pathC = Form(
"./AnalysisOutput/%s/Train_%i/Version%i",period.Data(),trainNo,version+2);
1572 TString rootFileNameC= Form(
"INT7_Histograms_V%i.root",version+2);
1573 TFile* outputRootC = TFile::Open(Form(
"%s/%s",pathC.Data(),rootFileNameC.Data()));
1574 if(!outputRootC)cout<<
"File "<<outputRootC->GetName()<<
" does not exist"<<endl;
1575 else cout<<
"file C: "<<outputRootC->GetName()<<endl;
1576 TString pathD = Form(
"./AnalysisOutput/%s/Train_%i/Version%i",period.Data(),trainNo,version+3);
1577 TString rootFileNameD= Form(
"INT7_Histograms_V%i.root",version+3);
1578 TFile* outputRootD = TFile::Open(Form(
"%s/%s",pathD.Data(),rootFileNameD.Data()));
1579 if(!outputRootD)cout<<
"File "<<outputRootD->GetName()<<
" does not exist"<<endl;
1580 else cout<<
"file D: "<<outputRootD->GetName()<<endl;
1583 TH2F* hCellAmplitudeA =(
TH2F*)outputRootA->Get(
"hCellAmplitude");
1584 TH1F* hnEventsA =(TH1F*)outputRootA->Get(
"hNEvents");
1585 hCellAmplitudeA->Scale(hnEventsA->GetBinContent(1));
1586 TH2F* hCellAmplitudeBlockMaskA=(
TH2F*)hCellAmplitudeA->Clone(
"hCellAmplitudeMask");
1587 TH1F* hCellFlagA =(TH1F*)outputRootA->Get(
"fhCellFlag");
1589 TH2F* hCellAmplitudeB =(
TH2F*)outputRootB->Get(
"hCellAmplitude");
1590 TH1F* hnEventsB =(TH1F*)outputRootB->Get(
"hNEvents");
1591 hCellAmplitudeB->Scale(hnEventsB->GetBinContent(1));
1592 TH2F* hCellAmplitudeBlockMaskB=(
TH2F*)hCellAmplitudeB->Clone(
"hCellAmplitudeMask");
1593 TH1F* hCellFlagB =(TH1F*)outputRootB->Get(
"fhCellFlag");
1595 TH2F* hCellAmplitudeC =(
TH2F*)outputRootC->Get(
"hCellAmplitude");
1596 TH1F* hnEventsC =(TH1F*)outputRootC->Get(
"hNEvents");
1597 hCellAmplitudeC->Scale(hnEventsC->GetBinContent(1));
1598 TH2F* hCellAmplitudeBlockMaskC=(
TH2F*)hCellAmplitudeC->Clone(
"hCellAmplitudeMask");
1599 TH1F* hCellFlagC =(TH1F*)outputRootC->Get(
"fhCellFlag");
1601 TH2F* hCellAmplitudeD =(
TH2F*)outputRootD->Get(
"hCellAmplitude");
1602 TH1F* hnEventsD =(TH1F*)outputRootD->Get(
"hNEvents");
1603 hCellAmplitudeD->Scale(hnEventsD->GetBinContent(1));
1604 TH2F* hCellAmplitudeBlockMaskD=(
TH2F*)hCellAmplitudeD->Clone(
"hCellAmplitudeMask");
1605 TH1F* hCellFlagD =(TH1F*)outputRootD->Get(
"fhCellFlag");
1610 cout<<
"**Open file with masking based on run-by-run info within a block: "<<endl;
1611 TString pathRbR = Form(
"./AnalysisOutput/%s/Train_%i/RunByRunSummary105",period.Data(),trainNo);
1612 TString rootFileNameRbR = Form(
"GloballyGood_Results.root");
1613 TFile* outputRootRbR = TFile::Open(Form(
"%s/%s",pathRbR .
Data(),rootFileNameRbR .
Data()));
1614 if(!outputRootRbR )cout<<
"File "<<outputRootRbR ->GetName()<<
" does not exist"<<endl;
1615 else cout<<
"file R-b-R: "<<outputRootRbR ->GetName()<<endl;
1617 TH2F* BadCellsVsRun =(
TH2F*)outputRootRbR ->Get(
"hFlag3vsRun");
1618 TH1F* hEvtVsRun =(TH1F*)outputRootRbR ->Get(
"nEventVsRun");
1619 TH2F* AmpVsID[nRunsUsed];
1620 for(
Int_t nRun=0;nRun<nRunsUsed;nRun++)
1622 AmpVsID[nRun] = (
TH2F*)outputRootRbR ->Get(Form(
"hCellAmplitudeRun%i",nRun));
1623 AmpVsID[nRun]->Scale(hEvtVsRun->GetBinContent(nRun+1));
1626 TH2F* AmpVsIDrBrBlockA = (
TH2F*)AmpVsID[0]->Clone(
"AmpVsIDrBrBlockA");
1627 TH2F* AmpVsIDrBrBlockB = (
TH2F*)AmpVsID[0]->Clone(
"AmpVsIDrBrBlockB");
1628 TH2F* AmpVsIDrBrBlockC = (
TH2F*)AmpVsID[0]->Clone(
"AmpVsIDrBrBlockC");
1629 TH2F* AmpVsIDrBrBlockD = (
TH2F*)AmpVsID[0]->Clone(
"AmpVsIDrBrBlockD");
1632 AmpVsIDrBrBlockA->Reset();
1633 AmpVsIDrBrBlockB->Reset();
1634 AmpVsIDrBrBlockC->Reset();
1635 AmpVsIDrBrBlockD->Reset();
1637 for(
Int_t nRun=0;nRun<nRunsUsed;nRun++)
1639 if(nRun<=splitRuns1) AmpVsIDrBrBlockA->Add(AmpVsID[nRun]);
1640 if(nRun>splitRuns1 && nRun<=splitRuns2)AmpVsIDrBrBlockB->Add(AmpVsID[nRun]);
1641 if(nRun>splitRuns2 && nRun<=splitRuns3)AmpVsIDrBrBlockC->Add(AmpVsID[nRun]);
1642 if(nRun>splitRuns3) AmpVsIDrBrBlockD->Add(AmpVsID[nRun]);
1652 AmpVsIDrBrBlockA->Reset();
1653 AmpVsIDrBrBlockA=(
TH2F*)hCellAmplitudeA->Clone(
"AmpVsIDrBrBlockA");
1654 AmpVsIDrBrBlockB->Reset();
1655 AmpVsIDrBrBlockB=(
TH2F*)hCellAmplitudeB->Clone(
"AmpVsIDrBrBlockB");
1656 AmpVsIDrBrBlockC->Reset();
1657 AmpVsIDrBrBlockC=(
TH2F*)hCellAmplitudeC->Clone(
"AmpVsIDrBrBlockC");
1658 AmpVsIDrBrBlockD->Reset();
1659 AmpVsIDrBrBlockD=(
TH2F*)hCellAmplitudeD->Clone(
"AmpVsIDrBrBlockD");
1670 for(
Int_t ic = 0; ic < noOfCells; ic++)
1685 for (
Int_t amp = 1; amp <= hCellAmplitudeBlockMaskA->GetNbinsX(); amp++)
1687 if(hCellFlagA->GetBinContent(ic+1)>0 || maskA==1)
1689 hCellAmplitudeBlockMaskA->SetBinContent(amp,ic+1,0);
1690 if(amp==1)nBadCellMerged[0]--;
1692 if(hCellFlagB->GetBinContent(ic+1)>0 || maskB==1)
1694 hCellAmplitudeBlockMaskB->SetBinContent(amp,ic+1,0);
1695 if(amp==1)nBadCellMerged[1]--;
1697 if(hCellFlagC->GetBinContent(ic+1)>0 || maskC==1)
1699 hCellAmplitudeBlockMaskC->SetBinContent(amp,ic+1,0);
1700 if(amp==1)nBadCellMerged[2]--;
1702 if(hCellFlagD->GetBinContent(ic+1)>0 || maskD==1)
1704 hCellAmplitudeBlockMaskD->SetBinContent(amp,ic+1,0);
1705 if(amp==1)nBadCellMerged[3]--;
1713 TH1D *htmpCellAllRuns =BadCellsVsRun->ProjectionY(TString::Format(
"hIDProj_cell%d", ic), ic+1, ic+1);
1714 Double_t integralBlock1 =htmpCellAllRuns->Integral(0,splitRuns1);
1715 Double_t integralBlock2 =htmpCellAllRuns->Integral(splitRuns1+1,splitRuns2);
1716 Double_t integralBlock3 =htmpCellAllRuns->Integral(splitRuns2+1,splitRuns3);
1717 Double_t integralBlock4 =htmpCellAllRuns->Integral(splitRuns3+1,nRunsUsed);
1725 for(
Int_t amp = 1; amp <= AmpVsIDrBrBlockA->GetNbinsX(); amp++)
1727 if(integralBlock1>0)
1729 AmpVsIDrBrBlockA->SetBinContent(amp,ic+1,0);
1730 if(amp==1)nBadCellRbR[0]--;
1732 if(integralBlock2>0)
1734 AmpVsIDrBrBlockB->SetBinContent(amp,ic+1,0);
1735 if(amp==1)nBadCellRbR[1]--;
1737 if(integralBlock3>0)
1739 AmpVsIDrBrBlockC->SetBinContent(amp,ic+1,0);
1740 if(amp==1)nBadCellRbR[2]--;
1742 if(integralBlock4>0)
1744 AmpVsIDrBrBlockD->SetBinContent(amp,ic+1,0);
1745 if(amp==1)nBadCellRbR[3]--;
1754 if(hCellFlagA->GetBinContent(ic+1)>0 && integralBlock1==0)vOnlyMaskedInMergedA.push_back(ic);
1755 if(hCellFlagA->GetBinContent(ic+1)==0 && integralBlock1>0) vOnlyMaskedInRunbRunA.push_back(ic);
1759 if(hCellFlagB->GetBinContent(ic+1)>0 && integralBlock2==0)vOnlyMaskedInMergedB.push_back(ic);
1760 if(hCellFlagB->GetBinContent(ic+1)==0 && integralBlock2>0) vOnlyMaskedInRunbRunB.push_back(ic);
1764 if(hCellFlagC->GetBinContent(ic+1)>0 && integralBlock3==0)vOnlyMaskedInMergedC.push_back(ic);
1765 if(hCellFlagC->GetBinContent(ic+1)==0 && integralBlock3>0) vOnlyMaskedInRunbRunC.push_back(ic);
1769 if(hCellFlagD->GetBinContent(ic+1)>0 && integralBlock4==0)vOnlyMaskedInMergedD.push_back(ic);
1770 if(hCellFlagD->GetBinContent(ic+1)==0 && integralBlock4>0) vOnlyMaskedInRunbRunD.push_back(ic);
1775 TH1* projMaskedCellsA = hCellAmplitudeBlockMaskA->ProjectionX(
"MaskedCellsMergedBlockA");
1776 TH1* projMaskedCellsB = hCellAmplitudeBlockMaskB->ProjectionX(
"MaskedCellsMergedBlockB");
1777 TH1* projMaskedCellsC = hCellAmplitudeBlockMaskC->ProjectionX(
"MaskedCellsMergedBlockC");
1778 TH1* projMaskedCellsD = hCellAmplitudeBlockMaskD->ProjectionX(
"MaskedCellsMergedBlockD");
1781 TH1* projMaskedCellsBlockA = AmpVsIDrBrBlockA->ProjectionX(
"MaskedCellsRbRBlockA");
1782 TH1* projMaskedCellsBlockB = AmpVsIDrBrBlockB->ProjectionX(
"MaskedCellsRbRBlockB");
1783 TH1* projMaskedCellsBlockC = AmpVsIDrBrBlockC->ProjectionX(
"MaskedCellsRbRBlockC");
1784 TH1* projMaskedCellsBlockD = AmpVsIDrBrBlockD->ProjectionX(
"MaskedCellsRbRBlockD");
1789 TCanvas* C1 =
new TCanvas(
"-1-",
"Bock A and B",900,900);
1791 C1->cd(1)->SetLogy();
1792 SetHisto(projMaskedCellsA,
"",
"hits/event",0);
1793 projMaskedCellsA->DrawCopy(
"hist");
1794 projMaskedCellsBlockA->SetLineColor(8);
1795 projMaskedCellsBlockA->DrawCopy(
"same hist");
1797 projMaskedCellsA->Divide(projMaskedCellsBlockA);
1798 SetHisto(projMaskedCellsA,
"",
"Merged block/Run-by-Run block",0);
1799 projMaskedCellsA->DrawCopy(
"hist");
1800 projMaskedCellsA->Multiply(projMaskedCellsBlockA);
1802 C1->cd(3)->SetLogy();
1803 SetHisto(projMaskedCellsB,
"",
"hits/event",0);
1804 projMaskedCellsB->DrawCopy(
"hist");
1805 projMaskedCellsBlockB->SetLineColor(8);
1806 projMaskedCellsBlockB->DrawCopy(
"same hist");
1808 projMaskedCellsB->Divide(projMaskedCellsBlockB);
1809 SetHisto(projMaskedCellsB,
"",
"Merged block/Run-by-Run block",0);
1810 projMaskedCellsB->DrawCopy(
"hist");
1811 projMaskedCellsB->Multiply(projMaskedCellsBlockB);
1813 TCanvas* C2 =
new TCanvas(
"-2-",
"Block C and D",900,900);
1815 C2->cd(1)->SetLogy();
1816 SetHisto(projMaskedCellsC,
"",
"hits/event",0);
1817 projMaskedCellsC->DrawCopy(
"hist");
1818 projMaskedCellsBlockC->SetLineColor(8);
1819 projMaskedCellsBlockC->DrawCopy(
"same hist");
1821 projMaskedCellsC->Divide(projMaskedCellsBlockC);
1822 SetHisto(projMaskedCellsC,
"",
"Merged block/Run-by-Run block",0);
1823 projMaskedCellsC->DrawCopy(
"hist");
1824 projMaskedCellsC->Multiply(projMaskedCellsBlockC);
1826 C2->cd(3)->SetLogy();
1827 SetHisto(projMaskedCellsD,
"",
"hits/event",0);
1828 projMaskedCellsD->DrawCopy(
"hist");
1829 projMaskedCellsBlockD->SetLineColor(8);
1830 projMaskedCellsBlockD->DrawCopy(
"same hist");
1832 projMaskedCellsD->Divide(projMaskedCellsBlockD);
1833 SetHisto(projMaskedCellsD,
"",
"Merged block/Run-by-Run block",0);
1834 projMaskedCellsD->DrawCopy(
"hist");
1835 projMaskedCellsD->Multiply(projMaskedCellsBlockD);
1837 TCanvas* C3 =
new TCanvas(
"-3-",
"Merge A, B, C, and D",900,900);
1839 C3->cd(1)->SetLogz();
1840 SetHisto(hCellAmplitudeBlockMaskA,
"",
"cell ID",0);
1841 hCellAmplitudeBlockMaskA->DrawCopy(
"colz");
1842 C3->cd(2)->SetLogz();
1843 SetHisto(hCellAmplitudeBlockMaskB,
"",
"cell ID",0);
1844 hCellAmplitudeBlockMaskB->DrawCopy(
"colz");
1845 C3->cd(3)->SetLogz();
1846 SetHisto(hCellAmplitudeBlockMaskC,
"",
"cell ID",0);
1847 hCellAmplitudeBlockMaskC->DrawCopy(
"colz");
1848 C3->cd(4)->SetLogz();
1849 SetHisto(hCellAmplitudeBlockMaskD,
"",
"cell ID",0);
1850 hCellAmplitudeBlockMaskD->DrawCopy(
"colz");
1852 TCanvas* C4 =
new TCanvas(
"-4-",
"Run-by-Run A, B, C, and D",900,900);
1854 C4->cd(1)->SetLogz();
1855 SetHisto(AmpVsIDrBrBlockA,
"",
"cell ID",0);
1856 AmpVsIDrBrBlockA->DrawCopy(
"colz");
1857 C4->cd(2)->SetLogz();
1858 SetHisto(AmpVsIDrBrBlockB,
"",
"cell ID",0);
1859 AmpVsIDrBrBlockB->DrawCopy(
"colz");
1860 C4->cd(3)->SetLogz();
1861 SetHisto(AmpVsIDrBrBlockC,
"",
"cell ID",0);
1862 AmpVsIDrBrBlockC->DrawCopy(
"colz");
1863 C4->cd(4)->SetLogz();
1864 SetHisto(AmpVsIDrBrBlockD,
"",
"cell ID",0);
1865 AmpVsIDrBrBlockD->DrawCopy(
"colz");
1870 projMaskedCellsA->Scale(1.0/nBadCellMerged[0]);
1871 projMaskedCellsB->Scale(1.0/nBadCellMerged[1]);
1872 projMaskedCellsC->Scale(1.0/nBadCellMerged[2]);
1873 projMaskedCellsD->Scale(1.0/nBadCellMerged[3]);
1874 projMaskedCellsBlockA->Scale(1.0/nBadCellRbR[0]);
1875 projMaskedCellsBlockB->Scale(1.0/nBadCellRbR[1]);
1876 projMaskedCellsBlockC->Scale(1.0/nBadCellRbR[2]);
1877 projMaskedCellsBlockD->Scale(1.0/nBadCellRbR[3]);
1879 cout<<0<<
"-"<<splitRuns1<<
" -> "<<splitRuns1<<
" runs"<<endl;
1880 cout<<splitRuns1+1<<
"-"<<splitRuns2<<
" -> "<<splitRuns2-splitRuns1<<
" runs"<<endl;
1881 cout<<splitRuns2+1<<
"-"<<splitRuns3<<
" -> "<<splitRuns3-splitRuns2<<
" runs"<<endl;
1882 cout<<splitRuns3+1<<
"-"<<nRunsUsed<<
" -> "<<nRunsUsed-splitRuns3<<
" runs"<<endl;
1884 cout<<
"o Run block A ("<<
"0-"<<splitRuns1<<
")"<<endl;
1885 cout<<
" Cells masked in Merged version and not in Run-b-run version ("<<vOnlyMaskedInMergedA.size()<<
"):"<<endl;
1886 for(
Int_t i=0; i<(
Int_t)vOnlyMaskedInMergedA.size();i++)
1888 cout<<vOnlyMaskedInMergedA.at(i)<<
","<<flush;
1891 CreateCellCompPDF(AmpVsIDrBrBlockA,vOnlyMaskedInMergedA,projMaskedCellsA,projMaskedCellsBlockA,
"./cOnlyMergedBlockA.pdf");
1892 cout<<
" Cells masked in Run-b-run version and not in Merged version ("<<vOnlyMaskedInRunbRunA.size()<<
"):"<<endl;
1893 for(
Int_t i=0; i<(
Int_t)vOnlyMaskedInRunbRunA.size();i++)
1895 cout<<vOnlyMaskedInRunbRunA.at(i)<<
","<<flush;
1898 CreateCellCompPDF(hCellAmplitudeBlockMaskA,vOnlyMaskedInRunbRunA,projMaskedCellsA,projMaskedCellsBlockA,
"./cOnlyRbRBlockA.pdf");
1900 cout<<
"o Run block B ("<<splitRuns1+1<<
"-"<<splitRuns2<<
")"<<endl;
1901 cout<<
" Cells masked in Merged version and not in Run-b-run version ("<<vOnlyMaskedInMergedB.size()<<
"):"<<endl;
1902 for(
Int_t i=0; i<(
Int_t)vOnlyMaskedInMergedB.size();i++)
1904 cout<<vOnlyMaskedInMergedB.at(i)<<
","<<flush;
1907 CreateCellCompPDF(AmpVsIDrBrBlockB,vOnlyMaskedInMergedB,projMaskedCellsB,projMaskedCellsBlockB,
"./cOnlyMergedBlockB.pdf");
1908 cout<<
" Cells masked in Run-b-run version and not in Merged version ("<<vOnlyMaskedInRunbRunB.size()<<
"):"<<endl;
1909 for(
Int_t i=0; i<(
Int_t)vOnlyMaskedInRunbRunB.size();i++)
1911 cout<<vOnlyMaskedInRunbRunB.at(i)<<
","<<flush;
1914 CreateCellCompPDF(hCellAmplitudeBlockMaskB,vOnlyMaskedInRunbRunB,projMaskedCellsB,projMaskedCellsBlockB,
"./cOnlyRbRBlockB.pdf");
1916 cout<<
"o Run block C ("<<splitRuns2+1<<
"-"<<splitRuns3<<
")"<<endl;
1917 cout<<
" Cells masked in Merged version and not in Run-b-run version ("<<vOnlyMaskedInMergedC.size()<<
"):"<<endl;
1918 for(
Int_t i=0; i<(
Int_t)vOnlyMaskedInMergedC.size();i++)
1920 cout<<vOnlyMaskedInMergedC.at(i)<<
","<<flush;
1923 CreateCellCompPDF(AmpVsIDrBrBlockC,vOnlyMaskedInMergedC,projMaskedCellsC,projMaskedCellsBlockC,
"./cOnlyMergedBlockC.pdf");
1924 cout<<
" Cells masked in Run-b-run version and not in Merged version ("<<vOnlyMaskedInRunbRunC.size()<<
"):"<<endl;
1925 for(
Int_t i=0; i<(
Int_t)vOnlyMaskedInRunbRunC.size();i++)
1927 cout<<vOnlyMaskedInRunbRunC.at(i)<<
","<<flush;
1930 CreateCellCompPDF(hCellAmplitudeBlockMaskC,vOnlyMaskedInRunbRunC,projMaskedCellsC,projMaskedCellsBlockC,
"./cOnlyRbRBlockC.pdf");
1932 cout<<
"o Run block D ("<<splitRuns3+1<<
"-"<<nRunsUsed<<
")"<<endl;
1933 cout<<
" Cells masked in Merged version and not in Run-b-run version ("<<vOnlyMaskedInMergedD.size()<<
"):"<<endl;
1934 for(
Int_t i=0; i<(
Int_t)vOnlyMaskedInMergedD.size();i++)
1936 cout<<vOnlyMaskedInMergedD.at(i)<<
","<<flush;
1939 CreateCellCompPDF(AmpVsIDrBrBlockD,vOnlyMaskedInMergedD,projMaskedCellsD,projMaskedCellsBlockD,
"./cOnlyMergedBlockD.pdf");
1940 cout<<
" Cells masked in Run-b-run version and not in Merged version ("<<vOnlyMaskedInRunbRunD.size()<<
"):"<<endl;
1941 for(
Int_t i=0; i<(
Int_t)vOnlyMaskedInRunbRunD.size();i++)
1943 cout<<vOnlyMaskedInRunbRunD.at(i)<<
","<<flush;
1946 CreateCellCompPDF(hCellAmplitudeBlockMaskD,vOnlyMaskedInRunbRunD,projMaskedCellsD,projMaskedCellsBlockD,
"./cOnlyRbRBlockD.pdf");
1952 Plot2DCells(
"A",244917,vOnlyMaskedInRunbRunA,vOnlyMaskedInMergedA);
1953 Plot2DCells(
"B",244917,vOnlyMaskedInRunbRunB,vOnlyMaskedInMergedB);
1954 Plot2DCells(
"C",244917,vOnlyMaskedInRunbRunC,vOnlyMaskedInMergedC);
1955 Plot2DCells(
"D",244917,vOnlyMaskedInRunbRunD,vOnlyMaskedInMergedD);
1957 vOnlyMaskedInRunbRunA.insert( vOnlyMaskedInRunbRunA.end(), vOnlyMaskedInRunbRunB.begin(), vOnlyMaskedInRunbRunB.end() );
1958 vOnlyMaskedInRunbRunA.insert( vOnlyMaskedInRunbRunA.end(), vOnlyMaskedInRunbRunC.begin(), vOnlyMaskedInRunbRunC.end() );
1959 vOnlyMaskedInRunbRunA.insert( vOnlyMaskedInRunbRunA.end(), vOnlyMaskedInRunbRunD.begin(), vOnlyMaskedInRunbRunD.end() );
1960 vOnlyMaskedInMergedA.insert( vOnlyMaskedInMergedA.end(), vOnlyMaskedInMergedB.begin(), vOnlyMaskedInMergedB.end() );
1961 vOnlyMaskedInMergedA.insert( vOnlyMaskedInMergedA.end(), vOnlyMaskedInMergedC.begin(), vOnlyMaskedInMergedC.end() );
1962 vOnlyMaskedInMergedA.insert( vOnlyMaskedInMergedA.end(), vOnlyMaskedInMergedD.begin(), vOnlyMaskedInMergedD.end() );
1963 Plot2DCells(
"sum",244917,vOnlyMaskedInRunbRunA,vOnlyMaskedInMergedA);
1983 Int_t fNMaxColsAbs = 2*48;
1986 TH2F *plot2D_RbR =
new TH2F(Form(
"Block%s_MaskedRbR",Block.Data()),Form(
"Block%s_MaskedRbR",Block.Data()),fNMaxColsAbs+1,-0.5,fNMaxColsAbs+0.5, fNMaxRowsAbs+1,-0.5,fNMaxRowsAbs+0.5);
1987 plot2D_RbR->GetXaxis()->SetTitle(
"cell column (#eta direction)");
1988 plot2D_RbR->GetYaxis()->SetTitle(
"cell row (#phi direction)");
1989 TH2F *plot2D_Merge =
new TH2F(Form(
"Block%s_MaskedMerge",Block.Data()),Form(
"Block%s_MaskedMerge",Block.Data()),fNMaxColsAbs+1,-0.5,fNMaxColsAbs+0.5, fNMaxRowsAbs+1,-0.5,fNMaxRowsAbs+0.5);
1990 plot2D_Merge->GetXaxis()->SetTitle(
"cell column (#eta direction)");
1991 plot2D_Merge->GetYaxis()->SetTitle(
"cell row (#phi direction)");
1993 Int_t cellColumn=0,cellRow=0;
1994 Int_t cellColumnAbs=0,cellRowAbs=0;
1997 for(
Int_t i = 0; i < (
Int_t)cellVectorRbR.size(); i++)
1999 Int_t cell=cellVectorRbR.at(i);
2005 if(cellColumnAbs> fNMaxColsAbs || cellRowAbs>fNMaxRowsAbs)
2007 cout<<
"Problem! wrong calculated number of max col and max rows"<<endl;
2008 cout<<
"current col: "<<cellColumnAbs<<
", max col"<<fNMaxColsAbs<<endl;
2009 cout<<
"current row: "<<cellRowAbs<<
", max row"<<fNMaxRowsAbs<<endl;
2011 plot2D_RbR->Fill(cellColumnAbs,cellRowAbs);
2013 for(
Int_t i = 0; i < (
Int_t)cellVectorMerge.size(); i++)
2015 Int_t cell=cellVectorMerge.at(i);
2021 if(cellColumnAbs> fNMaxColsAbs || cellRowAbs>fNMaxRowsAbs)
2023 cout<<
"Problem! wrong calculated number of max col and max rows"<<endl;
2024 cout<<
"current col: "<<cellColumnAbs<<
", max col"<<fNMaxColsAbs<<endl;
2025 cout<<
"current row: "<<cellRowAbs<<
", max row"<<fNMaxRowsAbs<<endl;
2027 plot2D_Merge->Fill(cellColumnAbs,cellRowAbs,1);
2030 TCanvas *c1 =
new TCanvas(Form(
"2DMapForBlock%s",Block.Data()),Form(
"2DMapForBlock%s",Block.Data()),900,500);
2031 c1->ToggleEventStatus();
2034 plot2D_RbR->Draw(
"colz");
2036 plot2D_Merge->Draw(
"colz");
2045 for(
Int_t bin=1;bin<50;bin++)
2047 ref = inHisto->GetBinContent(bin);
2048 max = maxHist->GetBinContent(bin);
2049 min = minHist->GetBinContent(bin);
2050 if((ref!=0 && ref<min) || min==0)minHist->SetBinContent(bin,ref);
2051 if(ref>max)maxHist->SetBinContent(bin,ref);
2070 Double_t mBlock1=0,mBlock2=0,mBlock3=0,mBlock4=0,mBlock5=0;
2071 Double_t zBlock1=0,zBlock2=0,zBlock3=0,zBlock4=0,zBlock5=0;
2073 Double_t minMean=0, maxMean=0, meanMean=0;
2074 Double_t zminMean=0, zmaxMean=0, zmeanMean=0;
2081 for(
Int_t bin=3;bin<53;bin++)
2085 minMean += minHistoRatio ->GetBinContent(bin);
2086 maxMean += maxHistoRatio ->GetBinContent(bin);
2087 meanMean += meanHistoRatio->GetBinContent(bin);
2088 if(minHistoRatio->GetBinContent(bin)==0)zminMean++;
2089 if(maxHistoRatio->GetBinContent(bin)==0)zmaxMean++;
2090 if(meanHistoRatio->GetBinContent(bin)==0)zmeanMean++;
2101 if(bin<13) mBlock1+=meanHistoRatio->GetBinContent(bin);
2102 else if(bin<23) mBlock2+=meanHistoRatio->GetBinContent(bin);
2103 else if(bin<33) mBlock3+=meanHistoRatio->GetBinContent(bin);
2104 else if(bin<43) mBlock4+=meanHistoRatio->GetBinContent(bin);
2105 else if(bin<53) mBlock5+=meanHistoRatio->GetBinContent(bin);
2107 if(meanHistoRatio->GetBinContent(bin)==0)
2109 if(bin<13) zBlock1++;
2110 else if(bin<23) zBlock2++;
2111 else if(bin<33) zBlock3++;
2112 else if(bin<43) zBlock4++;
2113 else if(bin<53) zBlock5++;
2134 if(zBlock1<10 && zBlock1!=0)mBlock1=mBlock1/(1.0-1.0*zBlock1/10);
2135 if(zBlock2<10 && zBlock2!=0)mBlock2=mBlock2/(1.0-1.0*zBlock2/10);
2136 if(zBlock3<10 && zBlock3!=0)mBlock3=mBlock3/(1.0-1.0*zBlock3/10);
2137 if(zBlock4<10 && zBlock4!=0)mBlock4=mBlock4/(1.0-1.0*zBlock4/10);
2138 if(zBlock5<10 && zBlock5!=0)mBlock5=mBlock5/(1.0-1.0*zBlock5/10);
2140 if(zminMean!=0)minMean =minMean/(1.0-1.0*zminMean/30);
2141 if(zmaxMean!=0)maxMean =maxMean/(1.0-1.0*zmaxMean/30);
2142 if(zmeanMean!=0)meanMean=meanMean/(1.0-1.0*zmeanMean/30);
2145 if(zBlock1>5)mBlock1=0;
2146 if(zBlock2>5)mBlock2=0;
2147 if(zBlock3>5)mBlock3=0;
2148 if(zBlock4>5)mBlock4=0;
2149 if(zBlock5>5)mBlock5=0;
2155 crit =
"spectr. too low";
2156 if(meanMean/30.0>5)
return 1;
2157 if(minMean/30.0 >5)
return 1;
2159 crit =
"spectr. too high";
2160 if(meanMean/30.0<0.2)
return 1;
2161 if(maxMean/30.0 <0.2)
return 1;
2164 crit =
"slope down";
2166 if(mBlock1!=0 && mBlock2!=0 && mBlock1>mBlock2 && mBlock1>1.4*mBlock2)down++;
2167 if(mBlock2!=0 && mBlock3!=0 && mBlock2>mBlock3 && mBlock2>1.4*mBlock3)down++;
2168 if(mBlock3!=0 && mBlock4!=0 && mBlock3>mBlock4 && mBlock3>1.4*mBlock4)down++;
2169 if(mBlock4!=0 && mBlock5!=0 && mBlock4>mBlock5 && mBlock4>1.4*mBlock5)down++;
2170 if(down>=2)
return 1;
2174 if(mBlock1!=0 && mBlock2 !=0 && mBlock1<mBlock2 && 1.4*mBlock1<mBlock2)up++;
2175 if(mBlock2!=0 && mBlock3 !=0 && mBlock2<mBlock3 && 1.4*mBlock2<mBlock3)up++;
2176 if(mBlock3!=0 && mBlock4 !=0 && mBlock3<mBlock4 && 1.4*mBlock3<mBlock4)up++;
2177 if(mBlock4!=0 && mBlock5 !=0 && mBlock4<mBlock5 && 1.4*mBlock4<mBlock5)up++;
2181 crit =
"step 2.1 GeV";
2182 if(mBlock4!=0 && mBlock5!=0 && mBlock4>mBlock5 && mBlock4>20*mBlock5)
return 1;
2198 gROOT->ProcessLine(
"gErrorIgnoreLevel = kWarning;");
2201 Int_t nRescuableChannels=cellVector.size();
2202 Int_t totalperCv = 16;
2203 Int_t nPad = TMath::Sqrt(totalperCv);
2204 Int_t nCv = nRescuableChannels/totalperCv+1;
2207 TLatex*
text =
new TLatex(0.45,0.6,
"*Indeed bad*");
2208 text->SetTextSize(0.07);
2209 text->SetTextColor(kAzure-8);
2212 TH1D *maxHisto = ampID[0]->ProjectionX(
"hMaxCells", 1, 1);
2213 TH1D *minHisto = ampID[0]->ProjectionX(
"hMinCells", 1, 1);
2214 TH1D* hgoodMean = ampID[0]->ProjectionX(
"hMeanofRuns", 1, 1);
2217 cout<<
" o create: "<<nCv<<
" Canvases with "<<nPad*nPad<<
" pads"<<endl;
2219 TCanvas **cComp =
new TCanvas*[nCv];
2220 TCanvas **cCompDiv =
new TCanvas*[nCv];
2221 for(
Int_t i=0;i<nCv;i++)
2223 cComp[i] =
new TCanvas(TString::Format(
"CompareGood%d", i), TString::Format(
"V) Candidates (%d/%d)", i+1, nCv), 1000,750);
2224 cComp[i] ->Divide(nPad,nPad,0.001,0.001);
2225 cCompDiv[i] =
new TCanvas(TString::Format(
"CompareGood Ratio%d", i), TString::Format(
"V) Candidates Ratio (%d/%d)", i+1, nCv), 1000,750);
2226 cCompDiv[i] ->Divide(nPad,nPad,0.001,0.001);
2229 Int_t notBadCounter=0;
2231 for(
Int_t cell=0;cell< (
Int_t)cellVector.size();cell++)
2233 if(cell%400==0)cout<<
"cell No."<<cell<<endl;
2234 if(cell%20==0) cout<<
"."<<flush;
2239 std::vector<TH1D*> badHistVector;
2241 for(
Int_t i = 0 ; i < nRuns ; i++)
2243 TH1D *htmpCell = ampID[i]->ProjectionX(TString::Format(
"hIDProj_cell%dRun%i", cellVector.at(cell),i), cellVector.at(cell)+1, cellVector.at(cell)+1);
2244 htmpCell->SetLineColor(kGray+1);
2245 if(badVsCell[2]->GetBinContent(cellVector.at(cell)+1,i+1)==1)
2247 htmpCell->SetLineColor(2);
2248 htmpCell->SetFillColor(2);
2249 htmpCell->SetFillStyle(3002);
2250 declaredBad = (
TH1D*)htmpCell->Clone(
"saveForLater");
2251 badHistVector.push_back(htmpCell);
2258 hgoodMean->Add(htmpCell);
2264 cComp[nCv-1] ->cd(nPad*nPad)->SetLogy();
2265 SetHisto(hCellGoodMean[i],
"",
"Number of Hits",0);
2266 hCellGoodMean[i]->GetXaxis()->SetRangeUser(0,3);
2267 hCellGoodMean[i]->Draw(
"hist");
2271 cComp[nCv-1] ->cd(nPad*nPad)->SetLogy();
2272 hCellGoodMean[i]->Draw(
"same hist");
2275 lastGood=(cell-notBadCounter)/totalperCv;
2278 cComp[(cell-notBadCounter)/totalperCv]->cd(((cell-notBadCounter)%totalperCv)+1)->SetLogy();
2279 SetHisto(htmpCell,Form(
"Energy of cell %i",cellVector.at(cell)),
"Number of Hits",0);
2280 htmpCell->GetXaxis()->SetRangeUser(0,3);
2281 htmpCell->Draw(
"hist");
2285 cComp[(cell-notBadCounter)/totalperCv]->cd(((cell-notBadCounter)%totalperCv)+1)->SetLogy();
2286 htmpCell->DrawCopy(
"same hist");
2289 hgoodMean->Scale(1.0/nRuns);
2291 hCellGoodMean[badRun]->DrawCopy(
"same hist");
2292 minHisto->SetLineColor(1);
2293 maxHisto->SetLineColor(1);
2294 minHisto->DrawCopy(
"same");
2295 maxHisto->DrawCopy(
"same");
2298 for(
Int_t j=0;j< (
Int_t)badHistVector.size();j++)
2300 badHistVector[j]->SetLineColor(2);
2301 badHistVector[j]->DrawCopy(
"same");
2304 TLegend *leg =
new TLegend(0.35,0.65,0.75,0.85);
2305 leg->AddEntry(hCellGoodMean[badRun],
"mean of good cells",
"l");
2306 leg->AddEntry(declaredBad,
"Cell in the ''bad'' run",
"l");
2307 leg->AddEntry(maxHisto,
"max and min values",
"l");
2308 leg->SetBorderSize(0);
2309 leg->SetTextSize(0.07);
2314 cCompDiv[(cell-notBadCounter)/totalperCv]->cd(((cell-notBadCounter)%totalperCv)+1);
2320 for(
Int_t j=0;j< (
Int_t)badHistVector.size();j++)
2322 TH1D* minHistoCopy =(
TH1D*)minHisto->Clone(
"minHistoCopy");
2323 TH1D* maxHistoCopy =(
TH1D*)maxHisto->Clone(
"maxHistoCopy");
2324 TH1D* meanHistoCopy=(
TH1D*)hgoodMean->Clone(
"meanHistoCopy");
2325 minHistoCopy ->Divide(badHistVector[j]);
2326 maxHistoCopy ->Divide(badHistVector[j]);
2327 meanHistoCopy->Divide(badHistVector[j]);
2329 SetHisto(maxHistoCopy,Form(
"Energy of cell %i",cellVector.at(cell)),
"max,min,mean / bad cell",0);
2330 maxHistoCopy->GetXaxis()->SetRangeUser(0,3);
2331 maxHistoCopy->DrawCopy(
"hist");
2332 minHistoCopy->DrawCopy(
"same hist");
2333 meanHistoCopy->SetLineColor(kBlue-8);
2334 meanHistoCopy->DrawCopy(
"same hist");
2338 if(badRatio==1)
break;
2342 gPad->SetFrameFillColor(kRed-10);
2343 text->DrawLatexNDC(0.45,0.8,Form(
"#splitline{(%i)Excluded: }{%s}",runTry,(
const char*)failCrit));;
2348 for(
Int_t j = 0 ; j < nRuns ; j++)
2350 badVsCell[0]->SetBinContent(cellVector.at(cell)+1,j+1,0);
2351 badVsCell[1]->SetBinContent(cellVector.at(cell)+1,j+1,0);
2352 badVsCell[2]->SetBinContent(cellVector.at(cell)+1,j+1,0);
2355 if(cell==(
Int_t)cellVector.size()-1)text->SetText(0.45,0.8,
"test");
2361 for(
Int_t can=0;can<nCv;can++)
2363 TString internal_pdfName1=pdfName+
"Low.pdf";
2364 TString internal_pdfName2=pdfName+
"High.pdf";
2365 TString internal_pdfName3=pdfName+
"Ratio.pdf";
2369 internal_pdfName1 +=
"(";
2370 internal_pdfName2 +=
"(";
2371 internal_pdfName3 +=
"(";
2372 cComp[can] ->Print(internal_pdfName1.Data());
2373 cCompDiv[can] ->Print(internal_pdfName3.Data());
2375 else if(can==(nCv-1))
2378 internal_pdfName1 +=
")";
2379 internal_pdfName2 +=
")";
2380 internal_pdfName3 +=
")";
2381 cComp[can] ->Print(internal_pdfName1.Data());
2382 cCompDiv[can] ->Print(internal_pdfName3.Data());
2387 cComp[can] ->Print(internal_pdfName1.Data());
2388 cCompDiv[can] ->Print(internal_pdfName3.Data());
2391 for(
Int_t i=lastGood+1;i<nCv-1;i++)
2393 cout<<
"last good "<<lastGood<<endl;
2394 cout<<
"nCv "<<nCv<<endl;
2395 cout<<
"round "<<i<<endl;
2407 TH2F* cpmpressed =
new TH2F(Form(
"%s_Comp",Histo->GetName()),Form(
"%s_Comp",Histo->GetName()),badCells+2, 0,badCells+2,runIdVec.size(),0,runIdVec.size());
2409 Histo->GetXaxis()->UnZoom();
2410 TH1D *htmpCell = Histo->ProjectionX(TString::Format(
"%s_proj",cpmpressed->GetName()),0,runIdVec.size());
2411 Int_t sumRun=0,newHistoBin=0;
2412 for(
Int_t icell = 0; icell < totalCells ; icell++)
2414 sumRun = htmpCell->GetBinContent(icell+1);
2420 if(newHistoBin>badCells)cout<<
"PROBLEM"<<endl;
2421 for(
Int_t iRun = 0; iRun < (
Int_t)runIdVec.size() ; iRun++)
2423 cpmpressed->Fill(newHistoBin,iRun,Histo->GetBinContent(icell+1,iRun+1));
2430 cpmpressed->GetYaxis()->SetBinLabel(i+1,Form(
"%i",runIdVec.at(i)));
2440 TLine* Zero_line =
new TLine();
2441 Zero_line -> SetY1(y_val);
2442 Zero_line -> SetY2(y_val);
2443 Zero_line -> SetX1(xLow);
2444 Zero_line -> SetX2(xHigh);
2446 Zero_line -> SetLineWidth(3);
2447 Zero_line -> SetLineStyle(7);
2448 Zero_line -> SetLineColor(Line_Col);
2449 Zero_line ->
Draw();
2460 Histo->SetTitle(
"");
2463 Histo->GetYaxis()->SetTitleOffset(1.4);
2464 Histo->GetXaxis()->SetTitleOffset(1.4);
2465 Histo->GetXaxis()->SetLabelSize(0.05);
2466 Histo->GetYaxis()->SetLabelSize(0.05);
2467 Histo->GetXaxis()->SetTitleSize(0.045);
2468 Histo->GetYaxis()->SetTitleSize(0.045);
2473 Histo->GetYaxis()->SetTitleOffset(0.6);
2474 Histo->GetXaxis()->SetTitleOffset(0.8);
2475 Histo->GetYaxis()->SetLabelOffset(0.002);
2478 Histo->GetXaxis()->SetLabelSize(0.025);
2479 Histo->GetYaxis()->SetLabelSize(0.015);
2480 Histo->GetXaxis()->SetTitleSize(0.03);
2481 Histo->GetYaxis()->SetTitleSize(0.04);
2482 Histo->GetYaxis()->SetTickLength(0.02);
2489 Histo->GetXaxis()->SetNdivisions(520);
2494 Histo->GetXaxis()->SetNdivisions(505);
2495 Histo->GetYaxis()->SetNdivisions(505);
2499 Histo->GetXaxis()->SetLabelFont(42);
2500 Histo->GetYaxis()->SetLabelFont(42);
2501 Histo->GetXaxis()->SetTitleFont(42);
2502 Histo->GetYaxis()->SetTitleFont(42);
2503 if(Xtitel!=
"")Histo->GetXaxis()->SetTitle(Xtitel);
2504 if(Ytitel!=
"")Histo->GetYaxis()->SetTitle(Ytitel);
2505 Histo->SetLineColor(1);
2506 Histo->SetMarkerColor(1);
2507 Histo->SetMarkerStyle(20);
2508 Histo->SetMarkerSize(0.5);
2517 Histo->SetTitle(
"");
2520 Histo->GetYaxis()->SetTitleOffset(1.4);
2521 Histo->GetXaxis()->SetTitleOffset(1.4);
2522 Histo->GetXaxis()->SetLabelSize(0.05);
2523 Histo->GetYaxis()->SetLabelSize(0.05);
2524 Histo->GetXaxis()->SetTitleSize(0.045);
2525 Histo->GetYaxis()->SetTitleSize(0.045);
2526 Histo->GetXaxis()->SetNdivisions(505);
2527 Histo->GetYaxis()->SetNdivisions(505);
2532 Histo->GetYaxis()->SetTitleOffset(0.2);
2533 Histo->GetXaxis()->SetTitleOffset(1.0);
2536 Histo->GetXaxis()->SetLabelSize(0.07);
2537 Histo->GetYaxis()->SetLabelSize(0.07);
2538 Histo->GetXaxis()->SetTitleSize(0.08);
2539 Histo->GetYaxis()->SetTitleSize(0.08);
2542 Histo->GetXaxis()->SetNdivisions(520);
2543 Histo->GetYaxis()->SetNdivisions(10);
2546 Histo->GetXaxis()->SetLabelFont(42);
2547 Histo->GetYaxis()->SetLabelFont(42);
2548 Histo->GetXaxis()->SetTitleFont(42);
2549 Histo->GetYaxis()->SetTitleFont(42);
2550 if(Xtitel!=
"")Histo->GetXaxis()->SetTitle(Xtitel);
2551 if(Ytitel!=
"")Histo->GetYaxis()->SetTitle(Ytitel);
2553 Histo->SetLineColor(1);
2554 Histo->SetMarkerColor(1);
2555 Histo->SetMarkerStyle(20);
2556 Histo->SetMarkerSize(0.5);
2565 for(
Int_t i=0; i<(
Int_t)cellVector.size();i++)
2567 if(cell==cellVector.at(i))bad=1;
2574 Int_t NoOfCells=cellVector.size();
2582 for(
Int_t cell=0;cell<NoOfCells;cell++)
2585 TCanvas *c1=
nullptr;
2588 c1 =
new TCanvas(Form(
"badcells%i",cell),
"badcells",1000,750);
2589 if(cellVector.size() > 6) c1->Divide(3,3);
2590 else if (cellVector.size() > 3) c1->Divide(3,2);
2591 else c1->Divide(3,1);
2593 TH1 *hCell = hAmpIDMasked->ProjectionX(Form(
"Cell %d",cellVector.at(cell)),cellVector.at(cell)+1,cellVector.at(cell)+1);
2594 TH1 *hCell2 = (
TH1*)hCell->Clone(
"hCell2");
2596 c1->cd((cell%9) + 1);
2597 hCell->Divide(goodCellsRbR);
2598 hCell2->Divide(goodCellsMerged);
2600 hCell->SetLineColor(kBlue-8);
2601 hCell2->SetLineColor(kRed-9);
2602 hCell->GetXaxis()->SetTitle(
"E (GeV)");
2603 hCell->GetYaxis()->SetTitle(
"cell/mean of good");
2604 hCell->GetXaxis()->SetRangeUser(0.,10.);
2605 hCell->SetLineWidth(1) ;
2606 hCell->SetTitle(Form(
"Cell No. %d",cellVector.at(cell)));
2607 hCell->Draw(
"hist");
2608 hCell2->DrawCopy(
"same hist");
2614 if(cell%9==8 ||cell == NoOfCells-1)
2616 if(cell == NoOfCells-1)
2619 c1->Print(Form(
"%s)",pdfName.Data()));
2621 else if(firstCanvas==0)
2623 internal_pdfName +=
"(";
2624 c1->Print(internal_pdfName.Data());
2629 c1->Print(internal_pdfName.Data());
void PlotHorLineRange(Double_t y_val, Double_t xLow, Double_t xHigh, Int_t Line_Col)
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="")
void SetRunNumber(Int_t run)
void PlotLowFractionCells(TString pdfName, std::vector< Int_t > cellVector, TH2F *badVsCell[], Int_t nRuns, TH2F *ampID[], TH1D *hCellGoodMean[])
Bool_t IsItReallyBadRatio(TH1D *minHistoRatio, TH1D *maxHistoRatio, TH1D *meanHistoRatior, TString &crit)
TLatex * text[5]
option to what and if export to output file
void Plot2DCells(TString Block, Int_t runNo, std::vector< Int_t > cellVectorRbR, std::vector< Int_t > cellVectorMerge)
AliEMCALGeometry * GetEMCALGeometry() const
Bool_t GetBestPeriodSplitting(TString period="LHC15o", Int_t train=771, Int_t Nruns=105, Int_t noOfSplits=4)
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Bool_t IsCellMaskedByHand(Int_t cell, std::vector< Int_t > cellVector)
TH2F * CompressHistogram(TH2 *Histo, Int_t totalCells, Int_t badCells, std::vector< Int_t > runIdVec)
const Int_t RainbowColors[]
void SummarizeRunByRun(TString period="LHC15o", TString train="Train_641", TString trigger="AnyINTnoBC", TString listName="runList", Int_t runsUsed=-1)
void CompareTwoBCstrategies(TString period="LHC15n", Int_t trainNo=603, Int_t version=5)
void BuildMaxMinHisto(TH1D *inHisto, TH1D *minHist, TH1D *maxHist)
void SetHisto(TH2 *Histo, TString Xtitel, TString Ytitel, Bool_t longhisto)
Class with utils specific to calorimeter clusters/cells.
void AccessGeometry(AliVEvent *inputEvent)
void CreateCellCompPDF(TH2F *hAmpIDMasked, std::vector< Int_t > cellVector, TH1 *goodCellsMerged, TH1 *goodCellsRbR, TString pdfName)
Int_t GetModuleNumberCellIndexesAbsCaloMap(Int_t absId, Int_t calo, Int_t &icol, Int_t &irow, Int_t &iRCU, Int_t &icolAbs, Int_t &irowAbs) const