26 #include <boost/type_index.hpp> 27 #include <fmt/printf.h> 33 #include "TEfficiency.h" 34 #include "TGraphAsymmErrors.h" 40 #define LOGPRINT edm::LogPrint("SiStripHitEfficiencyHarvester") 70 std::unique_ptr<TrackerTopology>
tTopo_;
89 const std::array<long, bounds::k_END_OF_LAYERS>& layerTotal)
const;
92 unsigned int countTotalHits(
const std::vector<MonitorElement*>& maps);
100 : inputFolder_(conf.getParameter<
std::
string>(
"inputFolder")),
101 isAtPCL_(conf.getParameter<
bool>(
"isAtPCL")),
102 autoIneffModTagging_(conf.getUntrackedParameter<
bool>(
"AutoIneffModTagging",
false)),
103 doStoreOnDB_(conf.getParameter<
bool>(
"doStoreOnDB")),
104 doStoreOnTree_(conf.getUntrackedParameter<
bool>(
"doStoreOnTree")),
105 showRings_(conf.getUntrackedParameter<
bool>(
"ShowRings",
false)),
106 showEndcapSides_(conf.getUntrackedParameter<
bool>(
"ShowEndcapSides",
true)),
107 showTOB6TEC9_(conf.getUntrackedParameter<
bool>(
"ShowTOB6TEC9",
false)),
108 showOnlyGoodModules_(conf.getUntrackedParameter<
bool>(
"ShowOnlyGoodModules",
false)),
109 nTEClayers_(showRings_ ? 7 : 9),
110 threshold_(conf.getParameter<double>(
"Threshold")),
111 nModsMin_(conf.getParameter<
int>(
"nModsMin")),
112 effPlotMin_(conf.getUntrackedParameter<double>(
"EffPlotMin", 0.9)),
113 tkMapMin_(conf.getUntrackedParameter<double>(
"TkMapMin", 0.9)),
114 title_(conf.getParameter<
std::
string>(
"Title")),
115 record_(conf.getParameter<
std::
string>(
"Record")),
121 for (
int l = 0;
l < bounds::k_END_OF_LAYS_AND_RINGS;
l++) {
141 for (
const auto& det : tkGeom.detUnits()) {
142 if (dynamic_cast<const StripGeomDetUnit*>(det)) {
151 std::vector<bool> isThere;
152 isThere.reserve(maps.size());
153 std::transform(maps.begin() + 1, maps.end(), std::back_inserter(isThere), [](
auto&
x) {
return !(
x ==
nullptr); });
156 for (
const auto& it : isThere) {
158 LogDebug(
"SiStripHitEfficiencyHarvester") <<
" layer: " <<
count <<
" " << it << std::endl;
160 LogDebug(
"SiStripHitEfficiencyHarvester") <<
"resolving to " << maps[
count]->getName() << std::endl;
164 bool areMapsAvailable{
true};
166 for (
const auto& it : isThere) {
170 <<
type <<
" TkHistoMap for layer " << layerCount <<
" was not found.\n -> Aborting!";
171 areMapsAvailable =
false;
175 return areMapsAvailable;
187 if (!
fs.isAvailable()) {
189 <<
"please add it to config file";
194 tree =
fs->make<TTree>(
"ModEff",
"ModEff");
197 tree->Branch(
"FoundHits", &
t_found,
"FoundHits/i");
207 LOGPRINT <<
"A module is bad if the upper limit on the efficiency is < to the avg in the layer - " <<
threshold_ 208 <<
" and has at least " <<
nModsMin_ <<
" nModsMin.";
210 auto h_module_total = std::make_unique<TkHistoMap>(
tkDetMap_.get());
212 auto h_module_found = std::make_unique<TkHistoMap>(
tkDetMap_.get());
216 const auto& totalMaps = h_module_total->getAllMaps();
217 const auto& foundMaps = h_module_found->getAllMaps();
219 LogDebug(
"SiStripHitEfficiencyHarvester")
220 <<
"totalMaps.size(): " << totalMaps.size() <<
" foundMaps.size() " << foundMaps.size() << std::endl;
226 LogDebug(
"SiStripHitEfficiencyHarvester")
227 <<
"isTotalMapAvailable: " << isTotalMapAvailable <<
" isFoundMapAvailable " << isFoundMapAvailable << std::endl;
230 if (!isTotalMapAvailable
or !isFoundMapAvailable)
233 LogDebug(
"SiStripHitEfficiencyHarvester")
234 <<
"Entries in total TkHistoMap for layer 3: " << h_module_total->getMap(3)->getEntries() <<
", found " 235 << h_module_found->getMap(3)->getEntries();
241 for (
size_t i = 1;
i < totalMaps.size();
i++) {
242 h_module_total->getMap(
i)->setOption(
"colz");
243 h_module_found->getMap(
i)->setOption(
"colz");
249 std::vector<MonitorElement*> hEffInLayer(std::size_t(1),
nullptr);
250 hEffInLayer.reserve(bounds::k_END_OF_LAYERS);
251 for (std::size_t
i = 1;
i != bounds::k_END_OF_LAYERS; ++
i) {
253 hEffInLayer.push_back(booker.
book1D(
254 Form(
"eff_layer%i",
int(
i)), Form(
"Module efficiency in layer %s", lyrName.c_str()), 201, 0, 1.005));
256 std::array<long, bounds::k_END_OF_LAYERS> layerTotal{};
257 std::array<long, bounds::k_END_OF_LAYERS> layerFound{};
269 TrackerMap tkMapDen{
" Detector denominator "};
270 std::map<unsigned int, double> badModules;
277 "perModule_FEDErrors");
283 LogDebug(
"SiStripHitEfficiencyHarvester")
284 << __PRETTY_FUNCTION__ <<
" bad module from FEDError " << badId <<
"," <<
fraction << std::endl;
289 const auto num = h_module_found->getValue(det);
290 const auto denom = h_module_total->getValue(det);
295 hEffInLayer[
layer]->Fill(eff);
299 badModules[det] = eff;
300 tkMapBad.fillc(det, 255, 0, 0);
302 << det.rawId() <<
" efficiency: " << eff <<
" , " <<
num <<
"/" <<
denom;
305 tkMapBad.fillc(det, 255, 255, 255);
309 << det.rawId() <<
" efficiency: " << eff <<
" , " <<
num <<
"/" <<
denom;
313 << det.rawId() <<
" is under occupancy at " <<
denom;
328 tkMap.fill(det, 1. - eff);
329 tkMapEff.fill(det, eff);
330 tkMapNum.fill(det,
num);
331 tkMapDen.fill(det,
denom);
338 if (
layer <= bounds::k_LayersAtTOBEnd) {
341 }
else if (
layer > bounds::k_LayersAtTOBEnd &&
layer <= bounds::k_LayersAtTIDEnd) {
342 if (
tTopo_->tidSide(det) == 1) {
345 }
else if (
tTopo_->tidSide(det) == 2) {
349 }
else if (
layer > bounds::k_LayersAtTIDEnd &&
layer <= bounds::k_LayersAtTECEnd) {
350 if (
tTopo_->tecSide(det) == 1) {
353 }
else if (
tTopo_->tecSide(det) == 2) {
361 if (
layer <= bounds::k_LayersAtTOBEnd) {
364 }
else if (
layer > bounds::k_LayersAtTOBEnd &&
layer <= bounds::k_LayersAtTIDEnd) {
365 if (
tTopo_->tidSide(det) == 1) {
368 }
else if (
tTopo_->tidSide(det) == 2) {
372 }
else if (
layer > bounds::k_LayersAtTIDEnd &&
layer <= bounds::k_LayersAtTECEnd) {
373 if (
tTopo_->tecSide(det) == 1) {
376 }
else if (
tTopo_->tecSide(det) == 2) {
386 for (
unsigned int i = 1;
i <= k_LayersAtTECEnd;
i++) {
388 hEffInLayer[
i]->getTH1()->GetXaxis()->SetRange(
389 3, hEffInLayer[
i]->getNbinsX() + 1);
390 const double layer_min_eff = hEffInLayer[
i]->getMean() -
std::max(2.5 * hEffInLayer[
i]->getRMS(),
threshold_);
391 LOGPRINT <<
"Layer " <<
i <<
" threshold for bad modules: <" << layer_min_eff
392 <<
" (layer mean: " << hEffInLayer[
i]->getMean() <<
" rms: " << hEffInLayer[
i]->getRMS() <<
")";
394 hEffInLayer[
i]->getTH1()->GetXaxis()->SetRange(1, hEffInLayer[
i]->getNbinsX() + 1);
399 const auto layer = ::checkLayer(det,
tTopo_.get());
401 const auto num = h_module_found->getValue(det);
402 const auto denom = h_module_total->getValue(det);
405 const auto eff_up = TEfficiency::Bayesian(
denom,
num, .99, 1, 1,
true);
409 badModules[det] = eff;
410 tkMapBad.fillc(det, 255, 0, 0);
416 tkMapBad.fillc(det, 255, 255, 255);
421 if (eff_up < layer_min_eff + 0.08) {
424 << det.rawId() <<
" efficiency: " << eff <<
" , " <<
num <<
"/" <<
denom 425 <<
" , upper limit: " << eff_up;
429 << det.rawId() <<
" layer " <<
layer <<
" is under occupancy at " <<
denom;
447 tkMap.save(
true, 0, 0,
"SiStripHitEffTKMap_NEW.png");
448 tkMapBad.save(
true, 0, 0,
"SiStripHitEffTKMapBad_NEW.png");
449 tkMapEff.save(
true,
tkMapMin_, 1.,
"SiStripHitEffTKMapEff_NEW.png");
450 tkMapNum.save(
true, 0, 0,
"SiStripHitEffTKMapNum_NEW.png");
451 tkMapDen.save(
true, 0, 0,
"SiStripHitEffTKMapDen_NEW.png");
459 for (
const auto it : badModules) {
460 const auto det = it.first;
461 std::vector<unsigned int> badStripList;
466 badStripList.push_back(pQuality.encode(0,
nStrips, 0));
468 LOGPRINT <<
"ID1 shoudl match list of modules above " << det;
469 pQuality.compact(det, badStripList);
472 pQuality.fillBadComponents();
474 if (totalHits > 0u) {
478 << __PRETTY_FUNCTION__ <<
" There are no SiStrip hits for a valid measurement, skipping!";
481 edm::LogInfo(
"SiStripHitEfficiencyHarvester") <<
"Will not produce payload!";
497 const std::array<long, bounds::k_END_OF_LAYERS>& layerFound,
498 const std::array<long, bounds::k_END_OF_LAYERS>& layerTotal)
const {
503 int subdetfound[5] = {0, 0, 0, 0, 0};
504 int subdettotal[5] = {0, 0, 0, 0, 0};
506 for (
unsigned int i = 1;
i <= bounds::k_LayersAtTECEnd;
i++) {
507 layereff = double(layerFound[
i]) / double(layerTotal[
i]);
509 << layereff <<
" " << layerFound[
i] <<
"/" << layerTotal[
i];
510 totalfound += layerFound[
i];
511 totaltotal += layerTotal[
i];
512 if (
i <= bounds::k_LayersAtTIBEnd) {
513 subdetfound[1] += layerFound[
i];
514 subdettotal[1] += layerTotal[
i];
516 if (
i > bounds::k_LayersAtTIBEnd &&
i <= bounds::k_LayersAtTOBEnd) {
517 subdetfound[2] += layerFound[
i];
518 subdettotal[2] += layerTotal[
i];
520 if (
i > bounds::k_LayersAtTOBEnd &&
i <= bounds::k_LayersAtTIDEnd) {
521 subdetfound[3] += layerFound[
i];
522 subdettotal[3] += layerTotal[
i];
524 if (
i > bounds::k_LayersAtTIDEnd) {
525 subdetfound[4] += layerFound[
i];
526 subdettotal[4] += layerTotal[
i];
530 LOGPRINT <<
"The total efficiency is " << double(totalfound) / double(totaltotal);
531 LOGPRINT <<
" TIB: " << double(subdetfound[1]) / subdettotal[1] <<
" " << subdetfound[1] <<
"/" 533 LOGPRINT <<
" TOB: " << double(subdetfound[2]) / subdettotal[2] <<
" " << subdetfound[2] <<
"/" 535 LOGPRINT <<
" TID: " << double(subdetfound[3]) / subdettotal[3] <<
" " << subdetfound[3] <<
"/" 537 LOGPRINT <<
" TEC: " << double(subdetfound[4]) / subdettotal[4] <<
" " << subdetfound[4] <<
"/" 543 const auto pQdvBegin =
quality.getDataVectorBegin();
544 for (
auto rIt =
quality.getRegistryVectorBegin(); rIt !=
quality.getRegistryVectorEnd(); ++rIt) {
546 if (!pBadStrip.put(rIt->detid,
range))
547 edm::LogError(
"SiStripHitEfficiencyHarvester") <<
"detid already exists in SiStripBadStrip";
559 bool doProfiles)
const {
579 found->setBinContent(0, -1);
580 all->setBinContent(0, 1);
583 for (
unsigned int i = 1;
i <
nLayers + 2; ++
i) {
585 all->setBinContent(
i, 1);
590 TCanvas* c7 =
new TCanvas(
"c7",
" test ", 10, 10, 800, 600);
594 unsigned int nLayers_max =
nLayers + 1;
597 for (
unsigned int i = 1;
i < nLayers_max; ++
i) {
614 for (
unsigned int i = 11;
i < 14; ++
i) {
629 LOGPRINT <<
"Fill only good modules layer " <<
i - 3
636 LOGPRINT <<
"Filling all modules layer " <<
i - 3
646 found->getTH1F()->Sumw2();
647 all->getTH1F()->Sumw2();
655 booker.
book1D(
"eff_good",
"Strip hit efficiency for good modules",
nLayers + 1, 0,
nLayers + 1);
659 TProfile* profile_all = ::computeEff(found2->
getTH1F(), all2->
getTH1F(),
"all");
661 profile_all->SetTitle(
"Strip hit efficiency for all modules");
662 booker.
bookProfile(profile_all->GetName(), profile_all);
664 TProfile* profile_good = ::computeEff(
found->getTH1F(),
all->getTH1F(),
"good");
666 profile_good->SetTitle(
"Strip hit efficiency for good modules");
667 booker.
bookProfile(profile_good->GetName(), profile_good);
674 for (
int i = 1;
i <
found->getNbinsX();
i++) {
677 const auto& den_good =
all->getBinContent(
i);
678 const auto& num_good =
found->getBinContent(
i);
687 const auto& effPair_all = ::computeCPEfficiency(num_all, den_all);
699 const auto& effPair_good = ::computeCPEfficiency(num_good, den_good);
714 if (!
fs.isAvailable()) {
716 <<
"please add it to config file";
719 TGraphAsymmErrors* gr = (*fs).make<TGraphAsymmErrors>(
nLayers + 1);
720 gr->SetName(
"eff_good");
721 gr->BayesDivide(
found->getTH1F(),
all->getTH1F());
723 TGraphAsymmErrors* gr2 = (*fs).make<TGraphAsymmErrors>(
nLayers + 1);
724 gr2->SetName(
"eff_all");
727 for (
unsigned int j = 0;
j <
nLayers + 1;
j++) {
728 gr->SetPointError(
j, 0., 0., gr->GetErrorYlow(
j), gr->GetErrorYhigh(
j));
729 gr2->SetPointError(
j, 0., 0., gr2->GetErrorYlow(
j), gr2->GetErrorYhigh(
j));
734 gr->GetXaxis()->SetLimits(0,
nLayers);
735 gr->SetMarkerColor(2);
736 gr->SetMarkerSize(1.2);
739 gr->SetMarkerStyle(20);
741 gr->SetMaximum(1.001);
742 gr->GetYaxis()->SetTitle(
"Efficiency");
743 gStyle->SetTitleFillColor(0);
744 gStyle->SetTitleBorderSize(0);
745 gr->SetTitle(
"SiStripHitEfficiency by Layer");
747 gr2->GetXaxis()->SetLimits(0,
nLayers);
748 gr2->SetMarkerColor(1);
749 gr2->SetMarkerSize(1.2);
750 gr2->SetLineColor(1);
751 gr2->SetLineWidth(4);
752 gr2->SetMarkerStyle(21);
754 gr2->SetMaximum(1.001);
755 gr2->GetYaxis()->SetTitle(
"Efficiency");
756 gr2->SetTitle(
"SiStripHitEfficiency by Layer");
759 gr->GetXaxis()->SetNdivisions(36);
762 TPad*
overlay =
new TPad(
"overlay",
"", 0, 0, 1, 1);
765 overlay->SetFrameFillStyle(4000);
771 TLegend* leg =
new TLegend(0.70, 0.27, 0.88, 0.40);
772 leg->AddEntry(gr,
"Good Modules",
"p");
774 leg->AddEntry(gr2,
"All Modules",
"p");
775 leg->SetTextSize(0.020);
776 leg->SetFillColor(0);
779 c7->SaveAs(
"Summary.png");
780 c7->SaveAs(
"Summary.root");
784 template <
typename T>
786 LogDebug(
"SiStripHitEfficiencyHarvester")
787 <<
"nLayers = " <<
nLayers <<
" number of bins, gr1: " << gr->GetXaxis()->GetNbins()
788 <<
" number of bins, gr2: " << gr2->GetXaxis()->GetNbins() <<
" showRings: " <<
showRings_ 790 << boost::typeindex::type_id<T>().pretty_name();
792 for (
unsigned int k = 1;
k <
nLayers + 1;
k++) {
808 if constexpr (std::is_same_v<T, TGraphAsymmErrors*>) {
810 <<
"class name: " << gr->ClassName() <<
" expected TGraphAsymErrors" << std::endl;
826 <<
"class name: " << gr->ClassName() <<
" expected TH1F" << std::endl;
829 gr->GetXaxis()->SetBinLabel(
bin,
label.data());
830 gr2->GetXaxis()->SetBinLabel(
bin,
label.data());
837 std::vector<MonitorElement*> effVsVariable;
840 const auto& folderString = ::projFolder[theProj];
841 const auto& foundHistoString = ::projFoundHisto[theProj];
842 const auto& totalHistoString = ::projTotalHisto[theProj];
843 const auto& titleString = ::projTitle[theProj];
844 const auto& titleXString = ::projXtitle[theProj];
846 LogDebug(
"SiStripHitEfficiencyHarvester")
847 <<
" inside" << __PRETTY_FUNCTION__ <<
" from " << ::projFolder[theProj] <<
" " << __LINE__ << std::endl;
849 for (
unsigned int iLayer = 1; iLayer != (
showRings_ ? 20 : 22); ++iLayer) {
850 LogDebug(
"SiStripHitEfficiencyHarvester")
851 <<
"iLayer " << iLayer <<
" " <<
fmt::format(
"{}/{}/{}{}",
inputFolder_, folderString, foundHistoString, iLayer)
858 if (hfound ==
nullptr or htotal ==
nullptr) {
859 if (hfound ==
nullptr)
862 if (htotal ==
nullptr)
870 if (!hfound->getTH1F()->GetSumw2())
871 hfound->getTH1F()->Sumw2();
872 if (!htotal->getTH1F()->GetSumw2())
873 htotal->getTH1F()->Sumw2();
876 for (
int i = 0;
i != hfound->getNbinsX() + 1; ++
i) {
877 if (hfound->getBinContent(
i) == 0)
878 hfound->setBinContent(
i, 1
e-6);
879 if (htotal->getBinContent(
i) == 0)
880 htotal->setBinContent(
i, 1);
882 LogDebug(
"SiStripHitEfficiencyHarvester") <<
"Total hits for layer " << iLayer <<
" (" << folderString
883 <<
"): " << htotal->getEntries() <<
", found " << hfound->getEntries();
886 effVsVariable[iLayer] = booker.
book1D(
887 fmt::sprintf(
"eff%sLayer%s", folderString, lyrName),
888 fmt::sprintf(
"Efficiency vs %s for layer %s;%s;SiStrip Hit efficiency", titleString, lyrName, titleXString),
890 hfound->getAxisMin(),
891 hfound->getAxisMax());
893 LogDebug(
"SiStripHitEfficiencyHarvester")
894 <<
" bin 0 " << hfound->getAxisMin() <<
" bin last: " << hfound->getAxisMax() << std::endl;
896 for (
int i = 0;
i != hfound->getNbinsX() + 1; ++
i) {
897 const auto& den = htotal->getBinContent(
i);
898 const auto&
num = hfound->getBinContent(
i);
902 const auto& effPair = ::computeCPEfficiency(
num, den);
903 effVsVariable[iLayer]->setBinContent(
i, effPair.value());
904 effVsVariable[iLayer]->setBinError(
i, effPair.error());
906 LogDebug(
"SiStripHitEfficiencyHarvester")
907 << __PRETTY_FUNCTION__ <<
" " << lyrName <<
" bin:" <<
i <<
" err:" << effPair.error() << std::endl;
912 effVsVariable[iLayer]->getTH1F()->SetMinimum(
tkMapMin_);
915 TProfile*
profile = ::computeEff(hfound->getTH1F(), htotal->getTH1F(), lyrName);
917 fmt::sprintf(
"Efficiency vs %s for layer %s;%s;SiStrip Hit efficiency", titleString, lyrName, titleXString);
931 std::stringstream ssV[4][19],
940 ssV[
i][
comp] <<
" \t " << ((bc.
BadApvs) & 0
x1) <<
" " << ((bc.BadApvs >> 1) & 0
x1) <<
" ";
942 ssV[
i][
comp] <<
"x x " << ((bc.BadApvs >> 2) & 0
x1) <<
" " << ((bc.BadApvs >> 3) & 0
x1);
944 ssV[
i][
comp] << ((bc.BadApvs >> 2) & 0
x1) <<
" " << ((bc.BadApvs >> 3) & 0
x1) <<
" " << ((bc.BadApvs >> 4) & 0
x1)
945 <<
" " << ((bc.BadApvs >> 5) & 0
x1) <<
" ";
948 nBad[
i][0][2] += ((bc.BadApvs >> 5) & 0
x1) + ((bc.BadApvs >> 4) & 0
x1) + ((bc.BadApvs >> 3) & 0
x1) +
949 ((bc.BadApvs >> 2) & 0
x1) + ((bc.BadApvs >> 1) & 0
x1) + ((bc.BadApvs) & 0
x1);
950 nBad[
i][
comp][2] += ((bc.BadApvs >> 5) & 0
x1) + ((bc.BadApvs >> 4) & 0
x1) + ((bc.BadApvs >> 3) & 0
x1) +
951 ((bc.BadApvs >> 2) & 0
x1) + ((bc.BadApvs >> 1) & 0
x1) + ((bc.BadApvs) & 0
x1);
954 nBad[
i][0][1] += ((bc.BadFibers >> 2) & 0
x1) + ((bc.BadFibers >> 1) & 0
x1) + ((bc.BadFibers) & 0
x1);
955 nBad[
i][
comp][1] += ((bc.BadFibers >> 2) & 0
x1) + ((bc.BadFibers >> 1) & 0
x1) + ((bc.BadFibers) & 0
x1);
970 int nBadComp[4][19][4];
974 std::stringstream ssV[4][19];
976 for (
int i = 0;
i < 4; ++
i) {
978 for (
int j = 0;
j < 19; ++
j) {
980 for (
int k = 0;
k < 4; ++
k)
981 nBadComp[
i][
j][
k] = 0;
985 for (
const auto& bc :
quality.getBadComponentList()) {
990 nTkBadComp[1] += ((bc.BadFibers >> 2) & 0
x1) + ((bc.BadFibers >> 1) & 0
x1) + ((bc.BadFibers) & 0
x1);
992 nTkBadComp[2] += ((bc.BadApvs >> 5) & 0
x1) + ((bc.BadApvs >> 4) & 0
x1) + ((bc.BadApvs >> 3) & 0
x1) +
993 ((bc.BadApvs >> 2) & 0
x1) + ((bc.BadApvs >> 1) & 0
x1) + ((bc.BadApvs) & 0
x1);
1027 for (
auto rp =
quality.getRegistryVectorBegin(); rp !=
quality.getRegistryVectorEnd(); ++rp) {
1028 DetId det{rp->detid};
1030 int component = -999;
1031 switch (det.subdetId()) {
1034 component =
tTopo_->tibLayer(det);
1038 component =
tTopo_->tidSide(det) == 2 ?
tTopo_->tidWheel(det) :
tTopo_->tidWheel(det) + 3;
1042 component =
tTopo_->tobLayer(det);
1046 component =
tTopo_->tecSide(det) == 2 ?
tTopo_->tecWheel(det) :
tTopo_->tecWheel(det) + 9;
1052 const auto pQdvBegin =
quality.getDataVectorBegin();
1054 float percentage = 0;
1055 for (
int it = 0; it < sqrange.second - sqrange.first; it++) {
1056 unsigned int range =
quality.decode(*(sqrange.first + it)).range;
1057 nTkBadComp[3] +=
range;
1058 nBadComp[subdet][0][3] +=
range;
1059 nBadComp[subdet][component][3] +=
range;
1060 percentage +=
range;
1062 if (percentage != 0)
1065 edm::LogError(
"SiStripHitEfficiencyHarvester") <<
"PROBLEM detid " << det.rawId() <<
" value " << percentage;
1069 std::ostringstream
ss;
1070 ss <<
"\n-----------------\nGlobal Info\n-----------------";
1071 ss <<
"\nBadComp \t Modules \tFibers " 1072 "\tApvs\tStrips\n----------------------------------------------------------------";
1073 ss <<
"\nTracker:\t\t" << nTkBadComp[0] <<
"\t" << nTkBadComp[1] <<
"\t" << nTkBadComp[2] <<
"\t" << nTkBadComp[3];
1074 ss <<
"\nTIB:\t\t\t" << nBadComp[0][0][0] <<
"\t" << nBadComp[0][0][1] <<
"\t" << nBadComp[0][0][2] <<
"\t" 1075 << nBadComp[0][0][3];
1076 ss <<
"\nTID:\t\t\t" << nBadComp[1][0][0] <<
"\t" << nBadComp[1][0][1] <<
"\t" << nBadComp[1][0][2] <<
"\t" 1077 << nBadComp[1][0][3];
1078 ss <<
"\nTOB:\t\t\t" << nBadComp[2][0][0] <<
"\t" << nBadComp[2][0][1] <<
"\t" << nBadComp[2][0][2] <<
"\t" 1079 << nBadComp[2][0][3];
1080 ss <<
"\nTEC:\t\t\t" << nBadComp[3][0][0] <<
"\t" << nBadComp[3][0][1] <<
"\t" << nBadComp[3][0][2] <<
"\t" 1081 << nBadComp[3][0][3];
1084 for (
int i = 1;
i < 5; ++
i)
1085 ss <<
"\nTIB Layer " <<
i <<
" :\t\t" << nBadComp[0][
i][0] <<
"\t" << nBadComp[0][
i][1] <<
"\t" << nBadComp[0][
i][2]
1086 <<
"\t" << nBadComp[0][
i][3];
1088 for (
int i = 1;
i < 4; ++
i)
1089 ss <<
"\nTID+ Disk " <<
i <<
" :\t\t" << nBadComp[1][
i][0] <<
"\t" << nBadComp[1][
i][1] <<
"\t" << nBadComp[1][
i][2]
1090 <<
"\t" << nBadComp[1][
i][3];
1091 for (
int i = 4;
i < 7; ++
i)
1092 ss <<
"\nTID- Disk " <<
i - 3 <<
" :\t\t" << nBadComp[1][
i][0] <<
"\t" << nBadComp[1][
i][1] <<
"\t" 1093 << nBadComp[1][
i][2] <<
"\t" << nBadComp[1][
i][3];
1095 for (
int i = 1;
i < 7; ++
i)
1096 ss <<
"\nTOB Layer " <<
i <<
" :\t\t" << nBadComp[2][
i][0] <<
"\t" << nBadComp[2][
i][1] <<
"\t" << nBadComp[2][
i][2]
1097 <<
"\t" << nBadComp[2][
i][3];
1099 for (
int i = 1;
i < 10; ++
i)
1100 ss <<
"\nTEC+ Disk " <<
i <<
" :\t\t" << nBadComp[3][
i][0] <<
"\t" << nBadComp[3][
i][1] <<
"\t" << nBadComp[3][
i][2]
1101 <<
"\t" << nBadComp[3][
i][3];
1102 for (
int i = 10;
i < 19; ++
i)
1103 ss <<
"\nTEC- Disk " <<
i - 9 <<
" :\t\t" << nBadComp[3][
i][0] <<
"\t" << nBadComp[3][
i][1] <<
"\t" 1104 << nBadComp[3][
i][2] <<
"\t" << nBadComp[3][
i][3];
1107 ss <<
"\n----------------------------------------------------------------\n\t\t Detid \tModules Fibers " 1108 "Apvs\n----------------------------------------------------------------";
1109 for (
int i = 1;
i < 5; ++
i)
1110 ss <<
"\nTIB Layer " <<
i <<
" :" << ssV[0][
i].
str();
1112 for (
int i = 1;
i < 4; ++
i)
1113 ss <<
"\nTID+ Disk " <<
i <<
" :" << ssV[1][
i].
str();
1114 for (
int i = 4;
i < 7; ++
i)
1115 ss <<
"\nTID- Disk " <<
i - 3 <<
" :" << ssV[1][
i].
str();
1117 for (
int i = 1;
i < 7; ++
i)
1118 ss <<
"\nTOB Layer " <<
i <<
" :" << ssV[2][
i].
str();
1120 for (
int i = 1;
i < 10; ++
i)
1121 ss <<
"\nTEC+ Disk " <<
i <<
" :" << ssV[3][
i].
str();
1122 for (
int i = 10;
i < 19; ++
i)
1123 ss <<
"\nTEC- Disk " <<
i - 9 <<
" :" << ssV[3][
i].
str();
1128 std::ofstream badModules;
1129 badModules.open(
"BadModules_NEW.log");
1130 badModules <<
"\n----------------------------------------------------------------\n\t\t Detid \tModules Fibers " 1131 "Apvs\n----------------------------------------------------------------";
1132 for (
int i = 1;
i < 5; ++
i)
1133 badModules <<
"\nTIB Layer " <<
i <<
" :" << ssV[0][
i].
str();
1135 for (
int i = 1;
i < 4; ++
i)
1136 badModules <<
"\nTID+ Disk " <<
i <<
" :" << ssV[1][
i].
str();
1137 for (
int i = 4;
i < 7; ++
i)
1138 badModules <<
"\nTID- Disk " <<
i - 3 <<
" :" << ssV[1][
i].
str();
1140 for (
int i = 1;
i < 7; ++
i)
1141 badModules <<
"\nTOB Layer " <<
i <<
" :" << ssV[2][
i].
str();
1143 for (
int i = 1;
i < 10; ++
i)
1144 badModules <<
"\nTEC+ Disk " <<
i <<
" :" << ssV[3][
i].
str();
1145 for (
int i = 10;
i < 19; ++
i)
1146 badModules <<
"\nTEC- Disk " <<
i - 9 <<
" :" << ssV[3][
i].
str();
1152 desc.add<
std::string>(
"inputFolder",
"AlCaReco/SiStripHitEfficiency");
1153 desc.add<
bool>(
"isAtPCL",
false);
1154 desc.add<
bool>(
"doStoreOnDB",
false);
1156 desc.add<
double>(
"Threshold", 0.1);
1158 desc.add<
int>(
"nModsMin", 5);
1159 desc.addUntracked<
bool>(
"doStoreOnTree",
false);
1160 desc.addUntracked<
bool>(
"AutoIneffModTagging",
false);
1161 desc.addUntracked<
double>(
"TkMapMin", 0.9);
1162 desc.addUntracked<
double>(
"EffPlotMin", 0.9);
1163 desc.addUntracked<
bool>(
"ShowRings",
false);
1164 desc.addUntracked<
bool>(
"ShowEndcapSides",
true);
1165 desc.addUntracked<
bool>(
"ShowTOB6TEC9",
false);
1166 desc.addUntracked<
bool>(
"ShowOnlyGoodModules",
false);
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
const bool doStoreOnTree_
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
void setEffBinLabels(const T gr, const T gr2, const unsigned int nLayers) const
void makeSummary(DQMStore::IGetter &getter, DQMStore::IBooker &booker, bool doProfiles=false) const
int goodlayerfound[bounds::k_END_OF_LAYS_AND_RINGS]
int goodlayertotal[bounds::k_END_OF_LAYS_AND_RINGS]
virtual void setCurrentFolder(std::string const &fullpath)
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
std::unique_ptr< TrackerTopology > tTopo_
void endRun(edm::Run const &, edm::EventSetup const &) override
int alllayertotal[bounds::k_END_OF_LAYS_AND_RINGS]
void printAndWriteBadModules(const SiStripQuality &quality, const SiStripDetInfo &detInfo) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const bool autoIneffModTagging_
Log< level::Error, false > LogError
std::unordered_map< uint32_t, int > fedErrorCounts
const bool showEndcapSides_
const edm::ESGetToken< SiStripQuality, SiStripQualityRcd > stripQualityToken_
nStrips
1.2 is to make the matching window safely the two nearest strips 0.35 is the size of an ME0 chamber i...
std::unique_ptr< TkHistoMap > FEDErrorOccupancy
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken_
def overlay(hists, ytitle, header, addon)
std::unique_ptr< TkDetMap > tkDetMap_
cond::Time_t currentTime() const
std::vector< DetId > stripDetIds_
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
const bool checkFedError(const DetId det)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
void printTotalStatistics(const std::array< long, bounds::k_END_OF_LAYERS > &layerFound, const std::array< long, bounds::k_END_OF_LAYERS > &layerTotal) const
unsigned int countTotalHits(const std::vector< MonitorElement *> &maps)
void writeBadStripPayload(const SiStripQuality &quality) const
Hash writeOneIOV(const T &payload, Time_t time, const std::string &recordName)
#define DEFINE_FWK_MODULE(type)
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
SiStripDetInfo read(std::string filePath)
Log< level::Warning, true > LogPrint
SiStripHitEfficiencyHarvester(const edm::ParameterSet &)
Log< level::Info, false > LogInfo
void setBadComponents(int i, int component, const SiStripQuality::BadComponent &BC, int NBadComponent[4][19][4])
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
void fillMapFromTkMap(const int nevents, const float threshold, const std::vector< DetId > &stripDetIds)
const std::pair< unsigned short, double > getNumberOfApvsAndStripLength(uint32_t detId) const
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
Constants and enumerated types for FED/FEC systems.
virtual TH1F * getTH1F() const
virtual MonitorElement * get(std::string const &fullpath) const
~SiStripHitEfficiencyHarvester() override=default
const unsigned int nTEClayers_
const std::string inputFolder_
const bool showOnlyGoodModules_
static const uint16_t STRIPS_PER_APV
std::pair< ContainerIterator, ContainerIterator > Range
std::unique_ptr< SiStripQuality > stripQuality_
int alllayerfound[bounds::k_END_OF_LAYS_AND_RINGS]
static constexpr char const *const kDefaultFile
virtual void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
void makeSummaryVsVariable(DQMStore::IGetter &getter, DQMStore::IBooker &booker, ::projections theProj) const
const edm::ESGetToken< TkDetMap, TrackerTopologyRcd > tkDetMapToken_
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
bool checkMapsValidity(const std::vector< MonitorElement *> &maps, const std::string &type) const
const std::string record_
virtual double getBinContent(int binx) const
get content of bin (1-D)
SiStripHitEffData calibData_