9 #include <svd/modules/svdCalibration/SVDLocalCalibrationsCheckModule.h>
10 #include <vxd/geometry/GeoCache.h>
11 #include <svd/geometry/SensorInfo.h>
15 #include <TPaveText.h>
33 setDescription(
"Module to produce a list of histograms showing the uploaded calibration constants");
36 addParam(
"outputPdfName",
m_outputPdfName,
"output pdf filename", std::string(
"SVDLocalCalibrationsCheck.pdf"));
38 std::string(
"refID"));
40 std::string(
"checkID"));
42 std::string(
"SVDLocalCalibrationsMonitor_ref.root"));
44 std::string(
"SVDLocalCalibrationsMonitor_check.root"));
48 addParam(
"cutNoise_average",
m_cutNoise_ave,
"Max deviation of average noise per APV, in ADC",
float(0.1));
59 B2INFO(
"SVD Local Calibration Check Configuration");
60 B2INFO(
"-----------------------------------------");
62 B2INFO(
"- input files:");
65 B2INFO(
"- output file:");
68 B2INFO(
"- analysis parameters:");
69 B2INFO(
" outliers (Noise, Pedestal, CalPeakADC)");
70 B2INFO(
" max allowed outliers = " <<
m_cutN_out);
72 B2INFO(
" max difference on the APV averages = " <<
m_cutNoise_ave <<
" ADC");
73 B2INFO(
" max to mark a strip as outlier = " <<
m_cutNoise_out <<
" ADC");
74 B2INFO(
" CalPeakADC");
80 B2INFO(
"--------------------------------------------------------------");
89 gStyle->SetOptStat(0);
90 gStyle->SetLegendBorderSize(0);
91 gStyle->SetTextFont(42);
141 TH1F template_noise(
"noiseDIFF_L@layerL@ladderS@sensor@view@apv",
142 "Noise Deviation Distribution in @layer.@ladder.@sensor @view/@side",
146 template_noise.GetXaxis()->SetTitle(
"ref - check (ADC)");
158 TH1F template_calpeakTime(
"calpeakTimeDIFF_L@layerL@ladderS@sensor@view@apv",
160 "CalPeakTime Deviation Distribution in @layer.@ladder.@sensor @view/@side",
162 template_calpeakTime.GetXaxis()->SetTitle(
"( ref - check ) / ref");
166 "Number of problematic APV chips due to CalPeakTime for @view/@side Side for @view/@side Side");
172 TH1F template_calpeakADC(
"calpeakADCDIFF_L@layerL@ladderS@sensor@view@apv",
174 "CalPeakADC Deviation Distribution in @layer.@ladder.@sensor @view/@side",
176 template_calpeakADC.GetXaxis()->SetTitle(
"ref - check (ADC)");
180 "Number of problematic APV chips due to CalPeakADC for @view/@side Side");
187 TH1F template_pedestal(
"pedestalDIFF_L@layerL@ladderS@sensor@view@apv",
188 "Pedestal Deviation Distribution in @layer.@ladder.@sensor @view/@side",
192 template_pedestal.GetXaxis()->SetTitle(
"( ref - check) (ADC)");
196 "Number of problematic APV chips due to Pedestal for @view/@side Side");
205 Long64_t nentries =
m_treeREF->GetEntriesFast();
207 for (Long64_t jentry = 0; jentry < nentries; jentry++) {
231 std::set<Belle2::VxdID>::iterator itSvdLayers = svdLayers.begin();
233 while ((itSvdLayers != svdLayers.end()) && (itSvdLayers->getLayerNumber() != 7)) {
237 int layer = itSvdLayers->getLayerNumber();
243 std::set<Belle2::VxdID> svdLadders = aGeometry.
getLadders(*itSvdLayers);
244 std::set<Belle2::VxdID>::iterator itSvdLadders = svdLadders.begin();
246 while (itSvdLadders != svdLadders.end()) {
248 std::set<Belle2::VxdID> svdSensors = aGeometry.
getSensors(*itSvdLadders);
249 std::set<Belle2::VxdID>::iterator itSvdSensors = svdSensors.begin();
251 while (itSvdSensors != svdSensors.end()) {
252 B2DEBUG(1,
" svd sensor info " << *itSvdSensors);
255 int ladder = itSvdSensors->getLadderNumber();
256 int sensor = itSvdSensors->getSensorNumber();
260 TList* listEmpty =
new TList;
263 TList* listNoiseUBAD =
new TList;
264 TList* listNoiseUGOOD =
new TList;
265 TList* listNoiseVBAD =
new TList;
266 TList* listNoiseVGOOD =
new TList;
270 TList* listCalpeakADCUBAD =
new TList;
271 TList* listCalpeakADCUGOOD =
new TList;
272 TList* listCalpeakADCVBAD =
new TList;
273 TList* listCalpeakADCVGOOD =
new TList;
276 TList* listCalpeakTimeUGOOD =
new TList;
277 TList* listCalpeakTimeVGOOD =
new TList;
280 TList* listPedestalUBAD =
new TList;
281 TList* listPedestalUGOOD =
new TList;
282 TList* listPedestalVBAD =
new TList;
283 TList* listPedestalVGOOD =
new TList;
285 bool needPlot =
false;
286 for (
int side = 0; side < 2; side++) {
288 int Ncells = currentSensorInfo->
getUCells();
292 int Napv = Ncells / 128;
294 for (
int m_APV = 0; m_APV < Napv; m_APV++) {
303 B2INFO(
"WARNING, ONE APV has Noise problems in: L" << layer <<
"L" << ladder <<
"S" << sensor <<
" side = " << side <<
304 ", APV number = " << m_APV <<
", problem ID = " << problem);
307 listNoiseVBAD->Add(hNoise);
309 listNoiseUBAD->Add(hNoise);
312 listNoiseVGOOD->Add(hNoise);
314 listNoiseUGOOD->Add(hNoise);
324 B2INFO(
"WARNING, ONE APV has CalpeakADC problems in: L" << layer <<
"L" << ladder <<
"S" << sensor <<
" side = " << side <<
325 ", APV number = " << m_APV <<
" problem ID = " << problem);
328 listCalpeakADCVBAD->Add(hCalpeakADC);
330 listCalpeakADCUBAD->Add(hCalpeakADC);
333 listCalpeakADCVGOOD->Add(hCalpeakADC);
335 listCalpeakADCUGOOD->Add(hCalpeakADC);
341 listCalpeakTimeVGOOD->Add(hCalpeakTime);
343 listCalpeakTimeUGOOD->Add(hCalpeakTime);
351 B2INFO(
"WARNING, ONE APV has Pedestal problems in: L" << layer <<
"L" << ladder <<
"S" << sensor <<
" side = " << side <<
352 ", APV number = " << m_APV <<
" problem ID = " << problem);
355 listPedestalVBAD->Add(hPedestal);
357 listPedestalUBAD->Add(hPedestal);
360 listPedestalVGOOD->Add(hPedestal);
362 listPedestalUGOOD->Add(hPedestal);
370 printPage(theVxdID, listNoiseUBAD, listNoiseVBAD, listNoiseUGOOD, listNoiseVGOOD,
"Noise", isL3);
371 printPage(theVxdID, listCalpeakADCUBAD, listCalpeakADCVBAD, listCalpeakADCUGOOD, listCalpeakADCVGOOD,
"CalpeakADC", isL3);
372 printPage(theVxdID, listEmpty, listEmpty, listCalpeakTimeUGOOD, listCalpeakTimeVGOOD,
"CalpeakTime", isL3);
373 printPage(theVxdID, listPedestalUBAD, listPedestalVBAD, listPedestalUGOOD, listPedestalVGOOD,
"Pedestal", isL3);
390 TCanvas* empty =
new TCanvas();
392 empty->Print(pdf_open);
394 TCanvas* first =
new TCanvas(
"open_pag1",
"test first page");
396 TPaveText* pt_title =
new TPaveText(.05, .9, .95, 1,
"blNDC");
398 sprintf(name,
"Local Calibration Check Results");
399 pt_title->AddText(name);
400 pt_title->SetTextFont(42);
401 pt_title->SetTextColor(kBlack);
402 pt_title->SetShadowColor(0);
403 pt_title->SetFillColor(10);
404 pt_title->SetBorderSize(0);
405 pt_title->SetTextSize(0.08);
408 TPaveText* pt_input_title =
new TPaveText(.05, .8, .95, .85);
409 TPaveText* pt_input =
new TPaveText(.05, .72, .8, .8);
411 sprintf(input,
"%s",
"input files");
412 pt_input_title->AddText(input);
413 pt_input_title->SetShadowColor(0);
414 pt_input_title->SetBorderSize(0);
415 pt_input_title->SetTextSize(0.03);
420 pt_input->AddText(input);
421 ((TText*)pt_input->GetListOfLines()->Last())->SetTextColor(kRed);
426 pt_input->AddText(input);
427 ((TText*)pt_input->GetListOfLines()->Last())->SetTextColor(kBlue);
428 pt_input->SetTextSize(0.02);
429 pt_input->SetTextAlign(12);
430 pt_input->SetShadowColor(0);
431 pt_input->SetBorderSize(0);
432 pt_input->SetFillColor(10);
434 pt_input_title->Draw();
437 TPaveText* pt_cuts_title =
new TPaveText(.05, .65, .95, .7);
438 TPaveText* pt_cuts =
new TPaveText(.05, .15, .8, .60);
440 sprintf(cuts,
"%s",
"selection criteria");
441 pt_cuts_title->AddText(cuts);
442 pt_cuts_title->SetShadowColor(0);
443 pt_cuts_title->SetBorderSize(0);
444 pt_cuts_title->SetTextSize(0.03);
445 sprintf(cuts,
" An APV chip is selected as problematic if passes the criteria on Noise or CalPeakADC or Pedestal");
446 pt_cuts->AddText(cuts);
448 sprintf(cuts,
" Noise: an APV is problematic if 1. or 2. or 3.");
449 pt_cuts->AddText(cuts);
450 sprintf(cuts,
" 1. abs(ref_ave - check_ave) > %1.2f ADC",
m_cutNoise_ave);
451 pt_cuts->AddText(cuts);
452 sprintf(cuts,
" 2. more than %d strips with a value %1.2f ADC higher than the value of the ref calibration",
m_cutN_out,
454 pt_cuts->AddText(cuts);
455 sprintf(cuts,
" 3. more than %d strips with a value %1.2f ADC lower than the value of the ref calibration",
m_cutN_out,
457 pt_cuts->AddText(cuts);
459 sprintf(cuts,
" CalPeakADC: an APV is problematic if 1. or 2. or 3.");
460 pt_cuts->AddText(cuts);
462 pt_cuts->AddText(cuts);
463 sprintf(cuts,
" 2. more than %d strips with a value %1.1f ADC higher than the value of the ref calibration",
m_cutN_out,
465 pt_cuts->AddText(cuts);
466 sprintf(cuts,
" 3. more than %d strips with a value %1.1f ADC lower than the value of the ref calibration",
m_cutN_out,
468 pt_cuts->AddText(cuts);
470 sprintf(cuts,
" Pedestal: an APV is problematic if 1. or 2. or 3.");
471 pt_cuts->AddText(cuts);
473 pt_cuts->AddText(cuts);
474 sprintf(cuts,
" 2. more than %d strips with a value %1.1f ADC higher than the value of the ref calibration",
m_cutN_out,
476 pt_cuts->AddText(cuts);
477 sprintf(cuts,
" 3. more than %d strips with a value %1.1f ADC lower than the value of the ref calibration",
m_cutN_out,
479 pt_cuts->AddText(cuts);
482 pt_cuts->AddText(cuts);
484 " - {ref,check}_ave is the variable averaged on one APV chip of the reference or the check calibration");
485 pt_cuts->AddText(cuts);
487 " - 1 2 and 3 are the problem ID printed on screen while running the python script");
488 pt_cuts->AddText(cuts);
489 pt_cuts->SetTextSize(0.02);
490 pt_cuts->SetShadowColor(0);
491 pt_cuts->SetBorderSize(0);
492 pt_cuts->SetFillColor(10);
493 pt_cuts->SetTextAlign(12);
495 pt_cuts_title->Draw();
498 TPaveText* pt_tag_title =
new TPaveText(.05, .03, .95, .07);
500 sprintf(tag,
"analysis algorithm ID 1.0");
501 pt_tag_title->AddText(tag);
503 pt_tag_title->SetShadowColor(0);
504 pt_tag_title->SetFillColor(18);
505 pt_tag_title->SetBorderSize(0);
506 pt_tag_title->SetTextSize(0.02);
507 pt_tag_title->Draw();
514 TCanvas* cLayer =
new TCanvas();
516 TPaveText* pt_title =
new TPaveText(.05, .4, .95, 0.6,
"blNDC");
518 sprintf(name,
"Layer %d", layer);
519 pt_title->AddText(name);
520 pt_title->SetTextFont(42);
521 pt_title->SetTextColor(kBlack);
522 pt_title->SetShadowColor(0);
523 pt_title->SetFillColor(10);
524 pt_title->SetBorderSize(0);
525 pt_title->SetTextSize(0.08);
532 TList* listVGOOD, TString variable,
bool isL3)
535 TH2F* refU =
nullptr;
536 TH2F* refV =
nullptr;
537 TH2F* checkU =
nullptr;
538 TH2F* checkV =
nullptr;
543 Float_t leftLine = 0;
544 Float_t rightLine = 0;
547 if (variable ==
"Noise") {
559 }
else if (variable ==
"CalpeakADC") {
564 minY = refU->GetYaxis()->GetXmin();
565 maxY = refU->GetYaxis()->GetXmax();
569 }
else if (variable ==
"CalpeakTime") {
574 minY = refU->GetYaxis()->GetXmin();
575 maxY = refU->GetYaxis()->GetXmax();
576 }
else if (variable ==
"Pedestal") {
589 refU->GetYaxis()->SetRangeUser(minY, maxY);
590 refV->GetYaxis()->SetRangeUser(minY, maxY);
591 checkU->GetYaxis()->SetRangeUser(minY, maxY);
592 checkV->GetYaxis()->SetRangeUser(minY, maxY);
594 refU->SetMarkerColor(kRed);
595 refV->SetMarkerColor(kRed);
596 checkU->SetMarkerColor(kBlue);
597 checkV->SetMarkerColor(kBlue);
603 TLine lLeft(leftLine, 0, leftLine, topLine);
604 TLine lRight(rightLine, 0, rightLine, topLine);
605 lLeft.SetLineColor(15);
606 lRight.SetLineColor(15);
607 lLeft.SetLineStyle(kDashed);
608 lRight.SetLineStyle(kDashed);
611 TLine l1(128, min, 128, max);
612 TLine l2(128 * 2, min, 128 * 2, max);
613 TLine l3(128 * 3, min, 128 * 3, max);
614 TLine l4(128 * 4, min, 128 * 4, max);
615 TLine l5(128 * 5, min, 128 * 5, max);
621 TCanvas* c =
new TCanvas();
622 TPaveText* pt_sensorID =
new TPaveText(.495, 0.485, .505, 0.505,
"blNDC");
625 pt_sensorID->AddText(name);
626 pt_sensorID->SetTextFont(82);
627 pt_sensorID->SetTextColor(kBlack);
628 pt_sensorID->SetShadowColor(0);
629 pt_sensorID->SetFillColor(10);
630 pt_sensorID->SetBorderSize(0);
631 pt_sensorID->SetTextSize(0.08);
643 checkU->Draw(
"same");
650 TIter nextH_uGood(listUGOOD);
651 while ((objDiff = (TH1F*)nextH_uGood())) {
652 objDiff->SetFillStyle(3004);
656 objDiff->Draw(
"same");
660 TIter nextH_uBad(listUBAD);
661 while ((objDiff = (TH1F*)nextH_uBad())) {
662 objDiff->SetFillStyle(0);
666 objDiff->Draw(
"same");
686 checkV->Draw(
"same");
690 TIter nextH_vBad(listVBAD);
693 TIter nextH_vGood(listVGOOD);
694 while ((objDiff = (TH1F*)nextH_vGood())) {
695 objDiff->SetFillStyle(3004);
699 objDiff->Draw(
"same");
703 while ((objDiff = (TH1F*)nextH_vBad())) {
704 objDiff->SetFillStyle(0);
708 objDiff->Draw(
"same");
720 if (variable ==
"Noise")
721 pt_sensorID->Draw(
"same");
729 float average = h->GetMean();
730 if (std::fabs(average) > cutAve)
733 TAxis* xaxis = h->GetXaxis();
734 Int_t bin1 = xaxis->FindBin(-cutCOUNT);
735 Int_t bin2 = xaxis->FindBin(cutCOUNT);
742 B2DEBUG(1, bin1 <<
" -> " << bin2 <<
" with " << xaxis->GetNbins() <<
" bins");
744 if (h->Integral(1, bin1) >
m_cutN_out - 1)
return 2;
746 if (h->Integral(bin2, xaxis->GetNbins()) >
m_cutN_out - 1)
return 3;
757 std::set<Belle2::VxdID>::iterator itSvdLayers = svdLayers.begin();
759 while ((itSvdLayers != svdLayers.end()) && (itSvdLayers->getLayerNumber() != 7)) {
761 std::set<Belle2::VxdID> svdLadders = aGeometry.
getLadders(*itSvdLayers);
762 std::set<Belle2::VxdID>::iterator itSvdLadders = svdLadders.begin();
764 while (itSvdLadders != svdLadders.end()) {
766 std::set<Belle2::VxdID> svdSensors = aGeometry.
getSensors(*itSvdLadders);
767 std::set<Belle2::VxdID>::iterator itSvdSensors = svdSensors.begin();
769 while (itSvdSensors != svdSensors.end()) {
771 int layer = itSvdSensors->getLayerNumber();
772 int ladder = itSvdSensors->getLadderNumber();
773 int sensor = itSvdSensors->getSensorNumber();
777 for (
int side = 0; side < 2; side++) {
779 int Ncells = currentSensorInfo->
getUCells();
783 int Napv = Ncells / 128;
785 for (
int m_APV = 0; m_APV < Napv; m_APV++) {
787 TH1F* h = m_APVhistos->
getHistogram(theVxdID, side, m_APV);
809 TPaveText* pt_cuts_title =
new TPaveText(.05, .6, .95, .65);
810 TPaveText* pt_cuts =
new TPaveText(.15, .5, .85, .55);
812 sprintf(cuts,
"%s",
"SUMMARY");
813 pt_cuts_title->SetShadowColor(0);
814 pt_cuts_title->SetBorderSize(0);
815 pt_cuts_title->SetTextSize(0.03);
816 pt_cuts_title->AddText(cuts);
817 sprintf(cuts,
"each bin of the plots in the next pages contains the number of problematic APV chips of the sensor");
818 pt_cuts->AddText(cuts);
819 sprintf(cuts,
"corresponding to the combination of column (ladder number) and row (layer and sensor number)");
820 pt_cuts->AddText(cuts);
821 pt_cuts->SetTextSize(0.02);
822 pt_cuts->SetShadowColor(0);
823 pt_cuts->SetBorderSize(0);
824 pt_cuts->SetFillColor(10);
825 pt_cuts->SetTextAlign(12);
827 TCanvas* explain =
new TCanvas();
828 pt_cuts_title->Draw();
832 TCanvas* noise =
new TCanvas();
841 TCanvas* calpeakADC =
new TCanvas();
842 calpeakADC->Divide(2, 2);
851 TCanvas* pedestal =
new TCanvas();
852 pedestal->Divide(2, 2);
865 TCanvas* empty =
new TCanvas();
867 empty->Print(pdf_close);
877 m_legU =
new TLegend(0.75, 0.55, 0.89, 0.89);
878 m_legV =
new TLegend(0.75, 0.65, 0.89, 0.89);
883 TH1F* hAPV1 =
new TH1F(
"apv1",
"apv 1", 1, 0, 1);
885 m_legU->AddEntry(hAPV1,
"apv 1",
"l");
886 m_legV->AddEntry(hAPV1,
"apv 1",
"l");
887 TH1F* hAPV2 =
new TH1F(
"apv2",
"apv 2", 2, 0, 2);
890 hAPV2->SetMarkerStyle(21);
891 hAPV2->SetMarkerSize(0.5);
892 m_legU->AddEntry(hAPV2,
"apv 2",
"l");
893 m_legV->AddEntry(hAPV2,
"apv 2",
"l");
894 TH1F* hAPV3 =
new TH1F(
"apv3",
"apv 3", 3, 0, 3);
896 m_legU->AddEntry(hAPV3,
"apv 3",
"l");
897 m_legV->AddEntry(hAPV3,
"apv 3",
"l");
898 TH1F* hAPV4 =
new TH1F(
"apv4",
"apv 4", 4, 0, 4);
901 hAPV4->SetMarkerStyle(21);
902 hAPV4->SetMarkerSize(0.5);
903 m_legU->AddEntry(hAPV4,
"apv 4",
"l");
904 m_legV->AddEntry(hAPV4,
"apv 4",
"l");
905 TH1F* hAPV5 =
new TH1F(
"apv5",
"apv 5", 5, 0, 5);
907 m_legU->AddEntry(hAPV5,
"apv 5",
"l");
908 TH1F* hAPV6 =
new TH1F(
"apv6",
"apv 6", 6, 0, 6);
910 m_legU->AddEntry(hAPV6,
"apv 6",
"l");
912 m_leg2D =
new TLegend(0.78, 0.75, 0.89, 0.89);
913 m_leg2D->AddEntry(hAPV2,
"ref",
"pl");
914 m_leg2D->AddEntry(hAPV4,
"check",
"pl");
void setDescription(const std::string &description)
Sets the description of the module.
H * getHistogram(const VxdID &vxdID, int view, int apv)
get a reference to the histogram for
void fill(const VxdID &vxdID, int view, int apv, Types ... args)
fill the histogram for
H * getHistogram(const VxdID &vxdID, int view)
get a reference to the histogram for
SVDHistograms< TH2F > * m_h2CalpeakADCREF
CALPEAKS ADC.
void printSummaryPages()
summary page with 2D summary plot
SVDHistograms< TH2F > * m_h2NoiseREF
NOISES.
SVDSummaryPlots * m_hCalpeakADCSummary
calpeakADC summary histo
TLegend * m_legV
legend of V-side plot
TFile * m_rootFilePtrCHECK
pointer at the CHECK root file
SVDHistograms< TH2F > * m_h2CalpeakTimeCHECK
calpeakTime VS strip 2D histo
void printPage(VxdID theVxdID, TList *listUBAD, TList *listVBAD, TList *listUGOOD, TList *listVGOOD, TString variable, bool isL3)
print the page relative to a sensor with problematic APVs
UInt_t m_sideREF
sensor side
int m_cutN_out
maximum number of allowed outliers
TBranch * b_sideCHECK
sensor side
float m_noiseElCHECK
strip noise (e-)
float m_pulseWidthCHECK
strip pulse width
SVDAPVHistograms< TH1F > * m_hCalpeakTimeDIFF
calpeakTime histo
SVDLocalCalibrationsCheckModule()
Constructor: Sets the description, the properties and the parameters of the module.
UInt_t m_runREF
run number
TBranch * b_calPeakADCCHECK
strip calPeakADC (ADC of max pulse)
SVDHistograms< TH2F > * m_h2CalpeakADCCHECK
calpeakADC VS strip 2D histo
UInt_t m_layerCHECK
layer number
virtual void event() override
perform analysis and Draw pdf Canvas
TBranch * b_calPeakADCREF
strip calPeakADC (ADC of max pulse)
float m_pedestalCHECK
strip pedestal
float m_cutPedestal_ave
maximum relative deviation APV-average (pedestal)
float m_calPeakTimeCHECK
strip peak time
TBranch * b_pedestalREF
strip pedestal
TFile * m_rootFilePtrREF
pointer at the REFERENCE root file
float m_cutCalpeakADC_ave
maximum relative deviation APV-average (calpeakADC)
void printLayerPage(int layer)
print layer-number page
TLegend * m_leg2D
legend of the 2D plot
TTree * m_treeREF
pointer at REF tree
SVDSummaryPlots * m_hCalpeakTimeSummary
calpeakTime summary histo
TBranch * b_pulseWidthREF
strip pulse width
UInt_t m_runCHECK
run number
float m_cutCalpeakADC_out
maximum relative deviation strip (calpeakADC)
std::string m_outputPdfName
output pdf filename
TBranch * b_layerCHECK
layer number
TBranch * b_pedestalCHECK
strip pedestal
std::string m_idFileNameCHECK
ID of the xml file name CHECK.
TBranch * b_noiseElCHECK
strip noise (e-)
UInt_t m_sensorREF
sensor number
TBranch * b_ladderREF
ladder number
TLegend * m_legU
legend of U-side plot
TBranch * b_sideREF
sensor side
TBranch * b_stripCHECK
strip number
SVDHistograms< TH2F > * m_h2NoiseCHECK
noise VS strip 2D histo
SVDAPVHistograms< TH1F > * m_hPedestalDIFF
pedestal histo
float m_calPeakTimeREF
strip peak time
TBranch * b_runREF
run number
bool m_plotGoodAPVs
if true also the good APVs are plotted on the DIFF canvas
TBranch * b_gainCHECK
strip gain
TBranch * b_noiseElREF
strip noise (e-)
TBranch * b_stripREF
strip number
float m_gainCHECK
strip gain
float m_cutNoise_ave
maximum relative deviation APV-average (noise)
float m_calPeakADCCHECK
strip max peak ADC
TBranch * b_calPeakTimeCHECK
strip calPeakTime (time of max pulse)
UInt_t m_ladderREF
ladder number
float m_pulseWidthREF
strip pulse width
virtual void beginRun() override
initialize the TTrees and create SVDHistograms and SVDAPVHistograms
TBranch * b_gainREF
strip gain
TBranch * b_ladderCHECK
ladder number
TBranch * b_layerREF
layer number
UInt_t m_sensorCHECK
sensor number
float m_maskREF
strip mask 0/1
UInt_t m_stripREF
strip number
float m_cutNoise_out
maximum relative deviation strip (noise)
TTree * m_treeCHECK
pointer at CHECK tree
float m_noiseREF
strip noise (ADC)
void printConfiguration()
print the configuration of the check of the calibration VS a reference calibration
int hasAnyProblem(TH1F *h, float cutAve, float cutCOUNT)
return True if the APV has a problem, given a variable
TBranch * b_sensorCHECK
sensor number
std::string m_rootFileNameREF
root file name REFERENCE
float m_calPeakADCREF
strip max peak ADC
std::string m_idFileNameREF
ID of the xml file name REFERENCE.
SVDAPVHistograms< TH1F > * m_hCalpeakADCDIFF
calpeakADC histo
SVDHistograms< TH2F > * m_h2PedestalREF
PEDESTALS.
SVDHistograms< TH2F > * m_h2PedestalCHECK
pedestal VS strip 2D histo
TBranch * b_noiseCHECK
strip noise (ADC)
TBranch * b_calPeakTimeREF
strip calPeakTime (time of max pulse)
TBranch * b_pulseWidthCHECK
strip pulse width
TBranch * b_sensorREF
sensor number
float m_noiseElREF
strip noise (e-)
const int m_apvColors[6]
color palette
void printFirstPage()
print the first page of the output pdf
TBranch * b_noiseREF
strip noise (ADC)
TBranch * b_maskCHECK
strip mask 0/1
UInt_t m_layerREF
layer number
UInt_t m_stripCHECK
strip number
UInt_t m_sideCHECK
sensor side
void createLegends()
create the TLegends for the plot
float m_maskCHECK
strip mask 0/1
TBranch * b_runCHECK
run number
std::string m_rootFileNameCHECK
root file name CHECK
SVDAPVHistograms< TH1F > * m_hNoiseDIFF
noise histo
SVDSummaryPlots * m_hPedestalSummary
pedestal summary histo
SVDSummaryPlots * m_hNoiseSummary
noise summary histo
float m_pedestalREF
strip pedestal
UInt_t m_ladderCHECK
ladder number
void setAPVHistoStyles(SVDAPVHistograms< TH1F > *m_APVhistos)
set style of APV histograms
TBranch * b_maskREF
strip mask 0/1
float m_gainREF
strip gain
void printLastPage()
print last empty page
SVDHistograms< TH2F > * m_h2CalpeakTimeREF
CALPEAKS TIME.
float m_cutPedestal_out
maximum relative deviation strip (pedestal)
float m_noiseCHECK
strip noise (ADC)
class to summarize SVD quantities per sensor and side
void fill(int layer, int ladder, int sensor, int view, float value)
fill the histogram for
TH2F * getHistogram(int view)
get a reference to the histogram for
Specific implementation of SensorInfo for SVD Sensors which provides additional sensor specific infor...
Class to faciliate easy access to sensor information of the VXD like coordinate transformations or pi...
const std::set< Belle2::VxdID > getLayers(SensorInfoBase::SensorType sensortype=SensorInfoBase::VXD)
Return a set of all known Layers.
const std::set< Belle2::VxdID > & getSensors(Belle2::VxdID ladder) const
Return a set of all sensor IDs belonging to a given ladder.
static GeoCache & getInstance()
Return a reference to the singleton instance.
static const SensorInfoBase & get(Belle2::VxdID id)
Return a reference to the SensorInfo of a given SensorID.
const std::set< Belle2::VxdID > & getLadders(Belle2::VxdID layer) const
Return a set of all ladder IDs belonging to a given layer.
int getVCells() const
Return number of pixel/strips in v direction.
int getUCells() const
Return number of pixel/strips in u direction.
Class to uniquely identify a any structure of the PXD and SVD.
baseType getSensorNumber() const
Get the sensor id.
baseType getLadderNumber() const
Get the ladder id.
baseType getLayerNumber() const
Get the layer id.
REG_MODULE(arichBtest)
Register the Module.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Abstract base class for different kinds of events.