45 #include "TEfficiency.h" 49 #include "TGraphAsymmErrors.h" 55 #include "TObjString.h" 80 void algoEndJob()
override;
82 void SetBadComponents(
int i,
85 std::stringstream ssV[4][19],
86 int NBadComponent[4][19][4]);
90 void totalStatistics();
96 TString GetLayerName(Long_t
k);
97 TString GetLayerSideName(Long_t
k);
98 float calcPhi(
float x,
float y);
103 std::unique_ptr<SiStripBadStrip> getNewObject()
override;
138 map<pair<unsigned int, unsigned int>, array<double, 3> >
eventInfos;
140 vector<hit>
hits[::k_END_OF_LAYERS];
142 map<unsigned int, pair<unsigned int, unsigned int> > modCounter[::k_END_OF_LAYERS];
148 long layerfound[::k_END_OF_LAYERS];
149 long layertotal[::k_END_OF_LAYERS];
158 int goodlayertotal[::k_END_OF_LAYS_AND_RINGS];
159 int goodlayerfound[::k_END_OF_LAYS_AND_RINGS];
160 int alllayertotal[::k_END_OF_LAYS_AND_RINGS];
161 int alllayerfound[::k_END_OF_LAYS_AND_RINGS];
211 ifstream badModules_file;
212 set<uint32_t> badModules_list;
215 uint32_t badmodule_detid;
216 int mods, fiber1, fiber2, fiber3;
217 if (badModules_file.is_open()) {
219 while (getline(badModules_file,
line)) {
220 if (badModules_file.eof())
223 ss >> badmodule_detid >>
mods >> fiber1 >> fiber2 >> fiber3;
224 if (badmodule_detid != 0 &&
mods == 1 && (fiber1 == 1 || fiber2 == 1 || fiber3 == 1))
225 badModules_list.insert(badmodule_detid);
227 badModules_file.close();
230 if (!badModules_list.empty())
231 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Remove additionnal bad modules from the analysis: " << endl;
232 set<uint32_t>::iterator itBadMod;
233 for (itBadMod = badModules_list.begin(); itBadMod != badModules_list.end(); ++itBadMod)
234 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
" " << *itBadMod << endl;
238 bxHisto =
fs->make<TH1F>(
"bx",
"bx", 3600, 0, 3600);
239 instLumiHisto =
fs->make<TH1F>(
"instLumi",
"inst. lumi.", 250, 0, 25000);
240 PUHisto =
fs->make<TH1F>(
"PU",
"PU", 200, 0, 200);
242 for (
int l = 0;
l < ::k_END_OF_LAYS_AND_RINGS;
l++) {
249 TH1F* PredPlots_m[::k_END_OF_LAYERS];
250 TH1F* PredPlots_p[::k_END_OF_LAYERS];
251 TH1F* MeasPlots_m[::k_END_OF_LAYERS];
252 TH1F* MeasPlots_p[::k_END_OF_LAYERS];
253 TH1F* ResidPlots_m[::k_END_OF_LAYERS];
254 TH1F* ResidPlots_p[::k_END_OF_LAYERS];
262 if (UnitString ==
"cm") {
263 PlotTitleClusX =
"clusX [cm]";
264 PlotTitleTrajX =
"trajX [cm]";
265 FileNameEnding =
"CM";
266 }
else if (UnitString ==
"strip unit") {
267 PlotTitleClusX =
"clusX [strip unit]";
268 PlotTitleTrajX =
"trajX [strip unit]";
269 FileNameEnding =
"StripUnit";
271 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"ERROR: Unit must either be cm or strip unit." << std::endl;
274 for (Long_t ilayer = 0; ilayer < ::k_END_OF_LAYERS; ilayer++) {
275 MeasPlots_m[ilayer] =
276 fs->make<TH1F>(Form(
"MeasPlots_m_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 1000, -5., 5.);
277 MeasPlots_m[ilayer]->GetXaxis()->SetTitle(
"clusX [cm]");
278 MeasPlots_p[ilayer] =
279 fs->make<TH1F>(Form(
"MeasPlots_p_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 1000, -400, 400);
280 MeasPlots_p[ilayer]->GetXaxis()->SetTitle(
"clusX [strip]");
282 PredPlots_m[ilayer] =
283 fs->make<TH1F>(Form(
"PredPlots_m_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 1000, -5., 5.);
284 PredPlots_m[ilayer]->GetXaxis()->SetTitle(
"trajX [cm]");
285 PredPlots_p[ilayer] =
286 fs->make<TH1F>(Form(
"PredPlots_p_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 1000, -400, 400);
287 PredPlots_p[ilayer]->GetXaxis()->SetTitle(
"trajX [strip]");
289 ResidPlots_m[ilayer] =
290 fs->make<TH1F>(Form(
"ResidPlots_m_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 250, -.125, .125);
291 ResidPlots_m[ilayer]->GetXaxis()->SetTitle(
"trajX [cm]");
292 ResidPlots_p[ilayer] =
293 fs->make<TH1F>(Form(
"ResidPlots_p_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 200, -10., 10);
294 ResidPlots_p[ilayer]->GetXaxis()->SetTitle(
"trajX [strip]");
297 fs->make<TH1F>(Form(
"layerfound_vsLumi_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 100, 0, 25000));
299 fs->make<TH1F>(Form(
"layertotal_vsLumi_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 100, 0, 25000));
301 fs->make<TH1F>(Form(
"layerfound_vsPU_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 45, 0, 90));
303 fs->make<TH1F>(Form(
"layertotal_vsPU_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 45, 0, 90));
307 fs->make<TH1F>(Form(
"layerfound_vsCM_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 20, 0, 400));
309 fs->make<TH1F>(Form(
"layertotal_vsCM_layer_%i", (
int)(ilayer)),
GetLayerName(ilayer), 20, 0, 400));
317 <<
" and has at least " <<
nModsMin_ <<
" nModsMin." << endl;
319 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"A module is bad if efficiency < the avg in layer - " <<
threshold_ 320 <<
" and has at least " <<
nModsMin_ <<
" nModsMin." << endl;
322 unsigned int run, evt,
bx;
331 bool foundEventInfos =
false;
333 CalibTreeFile->cd(
"eventInfo");
335 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"No event infos tree" << endl;
337 TTree* EventTree = (TTree*)(gDirectory->Get(
"tree"));
345 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Found event infos tree" << endl;
347 runLf = EventTree->GetLeaf(
"run");
348 evtLf = EventTree->GetLeaf(
"event");
350 BunchLf = EventTree->GetLeaf(
"bx");
351 InstLumiLf = EventTree->GetLeaf(
"instLumi");
352 PULf = EventTree->GetLeaf(
"PU");
354 int nevt = EventTree->GetEntries();
356 foundEventInfos =
true;
358 for (
int j = 0;
j <
nevt;
j++) {
359 EventTree->GetEntry(
j);
360 run = runLf->GetValue();
361 evt = evtLf->GetValue();
362 bx = BunchLf->GetValue();
364 PU = PULf->GetValue();
375 CalibTreeFile->cd(
"anEff");
376 CalibTree = (TTree*)(gDirectory->Get(
"traj"));
380 TLeaf* BadLf =
CalibTree->GetLeaf(
"ModIsBad");
381 TLeaf* sistripLf =
CalibTree->GetLeaf(
"SiStripQualBad");
383 TLeaf* acceptLf =
CalibTree->GetLeaf(
"withinAcceptance");
384 TLeaf* layerLf =
CalibTree->GetLeaf(
"layer");
386 TLeaf* highPurityLf =
CalibTree->GetLeaf(
"highPurity");
387 TLeaf* xLf =
CalibTree->GetLeaf(
"TrajGlbX");
388 TLeaf* yLf =
CalibTree->GetLeaf(
"TrajGlbY");
389 TLeaf* zLf =
CalibTree->GetLeaf(
"TrajGlbZ");
390 TLeaf* ResXSigLf =
CalibTree->GetLeaf(
"ResXSig");
391 TLeaf* TrajLocXLf =
CalibTree->GetLeaf(
"TrajLocX");
392 TLeaf* TrajLocYLf =
CalibTree->GetLeaf(
"TrajLocY");
393 TLeaf* ClusterLocXLf =
CalibTree->GetLeaf(
"ClusterLocX");
395 InstLumiLf =
CalibTree->GetLeaf(
"instLumi");
397 TLeaf* CMLf =
nullptr;
403 <<
"Successfully loaded analyze function with " <<
nevents <<
" events!\n";
405 map<pair<unsigned int, unsigned int>, array<double, 3> >::iterator itEventInfos;
410 run = (
unsigned int)runLf->GetValue();
411 evt = (
unsigned int)evtLf->GetValue();
412 unsigned int isBad = (
unsigned int)BadLf->GetValue();
413 unsigned int quality = (
unsigned int)sistripLf->GetValue();
414 unsigned int id = (
unsigned int)idLf->GetValue();
415 unsigned int accept = (
unsigned int)acceptLf->GetValue();
416 unsigned int layer_wheel = (
unsigned int)layerLf->GetValue();
417 unsigned int layer = layer_wheel;
420 layer = 10 + ((
id >> 9) & 0x3);
422 layer = 13 + ((
id >> 5) & 0x7);
426 double x = xLf->GetValue();
427 double y = yLf->GetValue();
428 double z = zLf->GetValue();
429 double resxsig = ResXSigLf->GetValue();
430 double TrajLocX = TrajLocXLf->GetValue();
431 double TrajLocY = TrajLocYLf->GetValue();
432 double ClusterLocX = ClusterLocXLf->GetValue();
436 bool badquality =
false;
442 if (!foundEventInfos) {
443 bx = (
unsigned int)BunchLf->GetValue();
444 if (InstLumiLf !=
nullptr)
447 PU = PULf->GetValue();
451 CM = CMLf->GetValue();
454 if (foundEventInfos) {
457 bx = itEventInfos->second[0];
459 PU = itEventInfos->second[2];
478 if (!
showTOB6TEC9_ && (layer_wheel == 10 || layer_wheel == 22))
482 itBadMod = badModules_list.find(
id);
483 if (itBadMod != badModules_list.end())
489 bool badflag =
false;
496 if (isBad == 1 || resxsig >
resXSig_)
515 if (resxsig == 1000.0) {
518 stripTrajMid = TrajLocX / Pitch + nstrips / 2.0;
521 DetId ClusterDetId(
id);
526 stripTrajMid = TrajLocX / Pitch + nstrips / 2.0;
537 dynamic_cast<const TrapezoidalPlaneBounds*>(&(plane.bounds())));
538 std::array<const float, 4>
const&
parameters = (*trapezoidalBounds).parameters();
542 TrajLocXMid = TrajLocX / (1 + (htedge - hbedge) * TrajLocY / (htedge + hbedge) /
544 stripTrajMid = TrajLocXMid / Pitch + nstrips / 2.0;
557 if (!badquality &&
layer < ::k_END_OF_LAYERS) {
558 if (resxsig != 1000.0) {
559 MeasPlots_m[
layer]->Fill(ClusterLocX);
560 MeasPlots_p[
layer]->Fill(ClusterLocX / Pitch);
561 PredPlots_m[
layer]->Fill(TrajLocX);
562 PredPlots_p[
layer]->Fill(TrajLocX / Pitch);
563 ResidPlots_m[
layer]->Fill(ClusterLocX - TrajLocX);
564 ResidPlots_p[
layer]->Fill((ClusterLocX - TrajLocX) / Pitch);
566 MeasPlots_m[
layer]->Fill(1000);
567 MeasPlots_p[
layer]->Fill(1000);
568 PredPlots_m[
layer]->Fill(1000);
569 PredPlots_p[
layer]->Fill(1000);
576 float stripInAPV = 64.;
580 if (resxsig == 1000.0) {
591 tapv = (
int)stripTrajMid / 128;
593 stripInAPV = stripTrajMid - tapv * 128;
595 if (stripInAPV < stripsApvEdge_ || stripInAPV > 128 -
stripsApvEdge_)
603 if (badflag && !badquality) {
611 pair<unsigned int, unsigned int> newgoodpair(1, 1);
612 pair<unsigned int, unsigned int> newbadpair(1, 0);
614 map<unsigned int, pair<unsigned int, unsigned int> >::iterator it =
modCounter[
layer].find(
id);
622 ((*it).second.first)++;
624 ((*it).second.second)++;
654 if (((
id >> 13) & 0x3) == 1) {
658 }
else if (((
id >> 13) & 0x3) == 2) {
664 if (((
id >> 18) & 0x3) == 1) {
668 }
else if (((
id >> 18) & 0x3) == 2) {
681 if (((
id >> 13) & 0x3) == 1) {
685 }
else if (((
id >> 13) & 0x3) == 2) {
691 if (((
id >> 18) & 0x3) == 1) {
695 }
else if (((
id >> 18) & 0x3) == 2) {
718 int NTkBadComponent[4];
719 int NBadComponent[4][19][4];
723 std::stringstream ssV[4][19];
725 for (
int i = 0;
i < 4; ++
i) {
726 NTkBadComponent[
i] = 0;
727 for (
int j = 0;
j < 19; ++
j) {
729 for (
int k = 0;
k < 4; ++
k)
730 NBadComponent[
i][
j][
k] = 0;
736 for (
size_t i = 0;
i < BC.size(); ++
i) {
742 NTkBadComponent[0]++;
744 NTkBadComponent[1] += ((BC[
i].BadFibers >> 2) & 0
x1) + ((BC[
i].BadFibers >> 1) & 0
x1) + ((BC[
i].BadFibers) & 0
x1);
746 NTkBadComponent[2] += ((BC[
i].BadApvs >> 5) & 0
x1) + ((BC[
i].BadApvs >> 4) & 0
x1) + ((BC[
i].BadApvs >> 3) & 0
x1) +
747 ((BC[
i].BadApvs >> 2) & 0
x1) + ((BC[
i].BadApvs >> 1) & 0
x1) + ((BC[
i].BadApvs) & 0
x1);
768 component = tTopo.tidSide(BC[
i].detid) == 2 ? tTopo.tidWheel(BC[
i].detid) : tTopo.tidWheel(BC[
i].detid) + 3;
784 component = tTopo.tecSide(BC[
i].detid) == 2 ? tTopo.tecWheel(BC[
i].detid) : tTopo.tecWheel(BC[
i].detid) + 9;
792 float percentage = 0;
798 unsigned int detid = rp->detid;
803 if (
a.subdetId() == 3) {
806 }
else if (
a.subdetId() == 4) {
808 component = tTopo.tidSide(detid) == 2 ? tTopo.tidWheel(detid) : tTopo.tidWheel(detid) + 3;
809 }
else if (
a.subdetId() == 5) {
812 }
else if (
a.subdetId() == 6) {
814 component = tTopo.tecSide(detid) == 2 ? tTopo.tecWheel(detid) : tTopo.tecWheel(detid) + 9;
821 for (
int it = 0; it < sqrange.second - sqrange.first; it++) {
823 NTkBadComponent[3] +=
range;
824 NBadComponent[subdet][0][3] +=
range;
831 edm::LogError(
"SiStripQualityStatistics") <<
"PROBLEM detid " << detid <<
" value " << percentage << std::endl;
837 std::ofstream ResolutionValues;
838 int RunNumInt =
e.id().run();
840 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"RunNumString" << RunNumString << std::endl;
841 std::string ResolutionTextFileString =
"ResolutionValues_" + RunNumString +
"_" + FileNameEnding +
".txt";
843 ResolutionValues.open(ResolutionTextFileString.c_str());
845 for (Long_t ilayer = 0; ilayer < ::k_END_OF_LAYERS; ilayer++) {
848 float Meas = MeasPlots_p[ilayer]->GetStdDev();
849 float Pred = PredPlots_p[ilayer]->GetStdDev();
851 float PredMinusMeas =
pow(Meas, 2) +
pow(Pred, 2);
856 ResolutionValues <<
'\n' 857 <<
"Resolution for layer number " << ilayer <<
" (" <<
GetLayerName(ilayer) <<
")" 859 <<
"Double difference of the measured and predicted position between the two sensors under " 860 "consideration for layer number " 862 <<
" is: " << PredMinusMeas <<
'\n' 863 <<
"The difference between the two positions of the hit measurements for layer number " << ilayer
865 <<
" is: " << Meas <<
'\n' 870 <<
"\n-----------------\nNew IOV starting from run " <<
e.id().run() <<
" event " <<
e.id().event()
871 <<
" lumiBlock " <<
e.luminosityBlock() <<
" time " <<
e.time().value() <<
"\n-----------------\n";
872 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"\n-----------------\nGlobal Info\n-----------------";
874 <<
"\nBadComponent \t Modules \tFibers " 875 "\tApvs\tStrips\n----------------------------------------------------------------";
876 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"\nTracker:\t\t" << NTkBadComponent[0] <<
"\t" << NTkBadComponent[1]
877 <<
"\t" << NTkBadComponent[2] <<
"\t" << NTkBadComponent[3];
880 <<
"\nTIB:\t\t\t" << NBadComponent[0][0][0] <<
"\t" << NBadComponent[0][0][1] <<
"\t" << NBadComponent[0][0][2]
881 <<
"\t" << NBadComponent[0][0][3];
883 <<
"\nTID:\t\t\t" << NBadComponent[1][0][0] <<
"\t" << NBadComponent[1][0][1] <<
"\t" << NBadComponent[1][0][2]
884 <<
"\t" << NBadComponent[1][0][3];
886 <<
"\nTOB:\t\t\t" << NBadComponent[2][0][0] <<
"\t" << NBadComponent[2][0][1] <<
"\t" << NBadComponent[2][0][2]
887 <<
"\t" << NBadComponent[2][0][3];
889 <<
"\nTEC:\t\t\t" << NBadComponent[3][0][0] <<
"\t" << NBadComponent[3][0][1] <<
"\t" << NBadComponent[3][0][2]
890 <<
"\t" << NBadComponent[3][0][3];
893 for (
int i = 1;
i < 5; ++
i)
895 <<
"\nTIB Layer " <<
i <<
" :\t\t" << NBadComponent[0][
i][0] <<
"\t" << NBadComponent[0][
i][1] <<
"\t" 896 << NBadComponent[0][
i][2] <<
"\t" << NBadComponent[0][
i][3];
898 for (
int i = 1;
i < 4; ++
i)
900 <<
"\nTID+ Disk " <<
i <<
" :\t\t" << NBadComponent[1][
i][0] <<
"\t" << NBadComponent[1][
i][1] <<
"\t" 901 << NBadComponent[1][
i][2] <<
"\t" << NBadComponent[1][
i][3];
902 for (
int i = 4;
i < 7; ++
i)
904 <<
"\nTID- Disk " <<
i - 3 <<
" :\t\t" << NBadComponent[1][
i][0] <<
"\t" << NBadComponent[1][
i][1] <<
"\t" 905 << NBadComponent[1][
i][2] <<
"\t" << NBadComponent[1][
i][3];
907 for (
int i = 1;
i < 7; ++
i)
909 <<
"\nTOB Layer " <<
i <<
" :\t\t" << NBadComponent[2][
i][0] <<
"\t" << NBadComponent[2][
i][1] <<
"\t" 910 << NBadComponent[2][
i][2] <<
"\t" << NBadComponent[2][
i][3];
912 for (
int i = 1;
i < 10; ++
i)
914 <<
"\nTEC+ Disk " <<
i <<
" :\t\t" << NBadComponent[3][
i][0] <<
"\t" << NBadComponent[3][
i][1] <<
"\t" 915 << NBadComponent[3][
i][2] <<
"\t" << NBadComponent[3][
i][3];
916 for (
int i = 10;
i < 19; ++
i)
918 <<
"\nTEC- Disk " <<
i - 9 <<
" :\t\t" << NBadComponent[3][
i][0] <<
"\t" << NBadComponent[3][
i][1] <<
"\t" 919 << NBadComponent[3][
i][2] <<
"\t" << NBadComponent[3][
i][3];
923 <<
"\n----------------------------------------------------------------\n\t\t Detid \tModules Fibers " 924 "Apvs\n----------------------------------------------------------------";
925 for (
int i = 1;
i < 5; ++
i)
926 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"\nTIB Layer " <<
i <<
" :" << ssV[0][
i].str();
928 for (
int i = 1;
i < 4; ++
i)
929 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"\nTID+ Disk " <<
i <<
" :" << ssV[1][
i].str();
930 for (
int i = 4;
i < 7; ++
i)
931 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"\nTID- Disk " <<
i - 3 <<
" :" << ssV[1][
i].str();
933 for (
int i = 1;
i < 7; ++
i)
934 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"\nTOB Layer " <<
i <<
" :" << ssV[2][
i].str();
936 for (
int i = 1;
i < 10; ++
i)
937 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"\nTEC+ Disk " <<
i <<
" :" << ssV[3][
i].str();
938 for (
int i = 10;
i < 19; ++
i)
939 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"\nTEC- Disk " <<
i - 9 <<
" :" << ssV[3][
i].str();
943 badModules.open(
"BadModules.log");
944 badModules <<
"\n----------------------------------------------------------------\n\t\t Detid \tModules Fibers " 945 "Apvs\n----------------------------------------------------------------";
946 for (
int i = 1;
i < 5; ++
i)
947 badModules <<
"\nTIB Layer " <<
i <<
" :" << ssV[0][
i].
str();
949 for (
int i = 1;
i < 4; ++
i)
950 badModules <<
"\nTID+ Disk " <<
i <<
" :" << ssV[1][
i].
str();
951 for (
int i = 4;
i < 7; ++
i)
952 badModules <<
"\nTID- Disk " <<
i - 3 <<
" :" << ssV[1][
i].
str();
954 for (
int i = 1;
i < 7; ++
i)
955 badModules <<
"\nTOB Layer " <<
i <<
" :" << ssV[2][
i].
str();
957 for (
int i = 1;
i < 10; ++
i)
958 badModules <<
"\nTEC+ Disk " <<
i <<
" :" << ssV[3][
i].
str();
959 for (
int i = 10;
i < 19; ++
i)
960 badModules <<
"\nTEC- Disk " <<
i - 9 <<
" :" << ssV[3][
i].
str();
965 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Entering hot cold map generation!\n";
966 TStyle* gStyle =
new TStyle(
"gStyle",
"myStyle");
968 gStyle->SetPalette(1);
969 gStyle->SetCanvasColor(kWhite);
970 gStyle->SetOptStat(0);
975 for (Long_t maplayer = 1; maplayer <= 22; maplayer++) {
977 if (maplayer > 0 && maplayer <= 4) {
979 temph2 =
fs->make<TH2F>(Form(
"%s%i",
"TIB", (
int)(maplayer)),
"TIB", 100, -1, 361, 100, -100, 100);
980 temph2->GetXaxis()->SetTitle(
"Phi");
981 temph2->GetXaxis()->SetBinLabel(1, TString(
"360"));
982 temph2->GetXaxis()->SetBinLabel(50, TString(
"180"));
983 temph2->GetXaxis()->SetBinLabel(100, TString(
"0"));
984 temph2->GetYaxis()->SetTitle(
"Global Z");
985 temph2->SetOption(
"colz");
987 }
else if (maplayer > 4 && maplayer <= 10) {
989 temph2 =
fs->make<TH2F>(Form(
"%s%i",
"TOB", (
int)(maplayer - 4)),
"TOB", 100, -1, 361, 100, -120, 120);
990 temph2->GetXaxis()->SetTitle(
"Phi");
991 temph2->GetXaxis()->SetBinLabel(1, TString(
"360"));
992 temph2->GetXaxis()->SetBinLabel(50, TString(
"180"));
993 temph2->GetXaxis()->SetBinLabel(100, TString(
"0"));
994 temph2->GetYaxis()->SetTitle(
"Global Z");
995 temph2->SetOption(
"colz");
997 }
else if (maplayer > 10 && maplayer <= 13) {
1000 temph2 =
fs->make<TH2F>(Form(
"%s%i",
"TID-", (
int)(maplayer - 10)),
"TID-", 100, -100, 100, 100, -100, 100);
1001 temph2->GetXaxis()->SetTitle(
"Global Y");
1002 temph2->GetXaxis()->SetBinLabel(1, TString(
"+Y"));
1003 temph2->GetXaxis()->SetBinLabel(50, TString(
"0"));
1004 temph2->GetXaxis()->SetBinLabel(100, TString(
"-Y"));
1005 temph2->GetYaxis()->SetTitle(
"Global X");
1006 temph2->GetYaxis()->SetBinLabel(1, TString(
"-X"));
1007 temph2->GetYaxis()->SetBinLabel(50, TString(
"0"));
1008 temph2->GetYaxis()->SetBinLabel(100, TString(
"+X"));
1009 temph2->SetOption(
"colz");
1011 temph2 =
fs->make<TH2F>(Form(
"%s%i",
"TID+", (
int)(maplayer - 10)),
"TID+", 100, -100, 100, 100, -100, 100);
1012 temph2->GetXaxis()->SetTitle(
"Global Y");
1013 temph2->GetXaxis()->SetBinLabel(1, TString(
"+Y"));
1014 temph2->GetXaxis()->SetBinLabel(50, TString(
"0"));
1015 temph2->GetXaxis()->SetBinLabel(100, TString(
"-Y"));
1016 temph2->GetYaxis()->SetTitle(
"Global X");
1017 temph2->GetYaxis()->SetBinLabel(1, TString(
"-X"));
1018 temph2->GetYaxis()->SetBinLabel(50, TString(
"0"));
1019 temph2->GetYaxis()->SetBinLabel(100, TString(
"+X"));
1020 temph2->SetOption(
"colz");
1022 }
else if (maplayer > 13) {
1025 temph2 =
fs->make<TH2F>(Form(
"%s%i",
"TEC-", (
int)(maplayer - 13)),
"TEC-", 100, -120, 120, 100, -120, 120);
1026 temph2->GetXaxis()->SetTitle(
"Global Y");
1027 temph2->GetXaxis()->SetBinLabel(1, TString(
"+Y"));
1028 temph2->GetXaxis()->SetBinLabel(50, TString(
"0"));
1029 temph2->GetXaxis()->SetBinLabel(100, TString(
"-Y"));
1030 temph2->GetYaxis()->SetTitle(
"Global X");
1031 temph2->GetYaxis()->SetBinLabel(1, TString(
"-X"));
1032 temph2->GetYaxis()->SetBinLabel(50, TString(
"0"));
1033 temph2->GetYaxis()->SetBinLabel(100, TString(
"+X"));
1034 temph2->SetOption(
"colz");
1036 temph2 =
fs->make<TH2F>(Form(
"%s%i",
"TEC+", (
int)(maplayer - 13)),
"TEC+", 100, -120, 120, 100, -120, 120);
1037 temph2->GetXaxis()->SetTitle(
"Global Y");
1038 temph2->GetXaxis()->SetBinLabel(1, TString(
"+Y"));
1039 temph2->GetXaxis()->SetBinLabel(50, TString(
"0"));
1040 temph2->GetXaxis()->SetBinLabel(100, TString(
"-Y"));
1041 temph2->GetYaxis()->SetTitle(
"Global X");
1042 temph2->GetYaxis()->SetBinLabel(1, TString(
"-X"));
1043 temph2->GetYaxis()->SetBinLabel(50, TString(
"0"));
1044 temph2->GetYaxis()->SetBinLabel(100, TString(
"+X"));
1045 temph2->SetOption(
"colz");
1049 for (Long_t mylayer = 1; mylayer <= 22; mylayer++) {
1053 vector<hit>::const_iterator iter;
1054 for (iter =
hits[mylayer].begin(); iter !=
hits[mylayer].end(); iter++) {
1058 if (mylayer > 0 && mylayer <= 4) {
1062 }
else if (mylayer > 4 && mylayer <= 10) {
1066 }
else if (mylayer > 10 && mylayer <= 13) {
1069 int side = (((iter->id) >> 13) & 0x3);
1071 HotColdMaps[(mylayer - 1) + (mylayer - 11)]->Fill(-iter->y, iter->x, 1.);
1073 HotColdMaps[(mylayer - 1) + (mylayer - 10)]->Fill(-iter->y, iter->x, 1.);
1076 }
else if (mylayer > 13) {
1079 int side = (((iter->id) >> 18) & 0x3);
1081 HotColdMaps[(mylayer + 2) + (mylayer - 14)]->Fill(-iter->y, iter->x, 1.);
1083 HotColdMaps[(mylayer + 2) + (mylayer - 13)]->Fill(-iter->y, iter->x, 1.);
1089 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Finished HotCold Map Generation\n";
1093 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Entering TKMap generation!\n";
1100 double myeff, mynum, myden;
1101 double eff_limit = 0;
1103 for (Long_t
i = 1;
i <= 22;
i++) {
1109 fs->make<TH1F>(Form(
"eff_layer%i",
int(
i)), Form(
"Module efficiency in layer %i",
int(
i)), 201, 0, 1.005);
1111 map<unsigned int, pair<unsigned int, unsigned int> >::const_iterator ih;
1115 mynum = (double)(((*ih).second).second);
1116 myden = (double)(((*ih).second).first);
1118 myeff = mynum / myden;
1121 hEffInLayer->Fill(myeff);
1129 <<
"Layer " <<
i <<
" (" <<
GetLayerName(
i) <<
") module " << (*ih).first <<
" efficiency: " << myeff
1130 <<
" , " << mynum <<
"/" << myden << endl;
1137 << (*ih).first <<
" is under occupancy at " << myden << endl;
1154 hEffInLayer->GetXaxis()->SetRange(3, hEffInLayer->GetNbinsX() + 1);
1155 eff_limit = hEffInLayer->GetMean() -
threshold_;
1157 <<
"Layer " <<
i <<
" threshold for bad modules: " << eff_limit << endl;
1158 hEffInLayer->GetXaxis()->SetRange(1, hEffInLayer->GetNbinsX() + 1);
1162 mynum = (double)(((*ih).second).second);
1163 myden = (double)(((*ih).second).first);
1165 myeff = mynum / myden;
1168 if ((myden >=
nModsMin_) && (myeff < eff_limit)) {
1173 <<
"Layer " <<
i <<
" (" <<
GetLayerName(
i) <<
") module " << (*ih).first <<
" efficiency: " << myeff
1174 <<
" , " << mynum <<
"/" << myden << endl;
1181 <<
"Layer " <<
i <<
" (" <<
GetLayerName(
i) <<
") module " << (*ih).first <<
" layer " <<
i 1182 <<
" is under occupancy at " << myden << endl;
1187 tkmap->
save(
true, 0, 0,
"SiStripHitResolTKMap.png");
1188 tkmapbad->
save(
true, 0, 0,
"SiStripHitResolTKMapBad.png");
1190 tkmapnum->
save(
true, 0, 0,
"SiStripHitResolTKMapNum.png");
1191 tkmapden->
save(
true, 0, 0,
"SiStripHitResolTKMapDen.png");
1192 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Finished TKMap Generation\n";
1197 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Entering SQLite file generation!\n";
1198 std::vector<unsigned int> BadStripList;
1199 unsigned short NStrips;
1201 std::unique_ptr<SiStripQuality> pQuality = std::make_unique<SiStripQuality>(
detInfo_);
1205 map<unsigned int, double>::const_iterator it;
1211 <<
"Number of strips module " << (*it).first <<
" is " << NStrips << endl;
1212 BadStripList.push_back(pQuality->encode(0, NStrips, 0));
1214 id1 = (
unsigned int)(*it).first;
1215 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"ID1 shoudl match list of modules above " <<
id1 << endl;
1219 BadStripList.clear();
1233 for (Long_t
i = 1;
i < 5;
i++) {
1238 for (Long_t
i = 1;
i <= 22;
i++) {
1249 if (
i >= 5 &&
i < 11) {
1253 if (
i >= 11 &&
i < 14) {
1264 <<
"The total efficiency is " << double(totalfound) / double(totaltotal) << endl;
1265 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
" TIB: " << double(subdetfound[1]) / subdettotal[1] <<
" " 1266 << subdetfound[1] <<
"/" << subdettotal[1] << endl;
1267 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
" TOB: " << double(subdetfound[2]) / subdettotal[2] <<
" " 1268 << subdetfound[2] <<
"/" << subdettotal[2] << endl;
1269 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
" TID: " << double(subdetfound[3]) / subdettotal[3] <<
" " 1270 << subdetfound[3] <<
"/" << subdettotal[3] << endl;
1271 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
" TEC: " << double(subdetfound[4]) / subdettotal[4] <<
" " 1272 << subdetfound[4] <<
"/" << subdettotal[4] << endl;
1290 TH1F* found2 =
fs->make<TH1F>(
"found2",
"found2",
nLayers + 1, 0,
nLayers + 1);
1293 found->SetBinContent(0, -1);
1294 all->SetBinContent(0, 1);
1298 found->SetBinContent(
i, 1
e-6);
1299 all->SetBinContent(
i, 1);
1300 found2->SetBinContent(
i, 1
e-6);
1301 all2->SetBinContent(
i, 1);
1304 TCanvas* c7 =
new TCanvas(
"c7",
" test ", 10, 10, 800, 600);
1305 c7->SetFillColor(0);
1308 int nLayers_max =
nLayers + 1;
1311 for (Long_t
i = 1;
i < nLayers_max; ++
i) {
1330 for (Long_t
i = 11;
i < 14; ++
i) {
1348 <<
"Fill only good modules layer " <<
i - 3
1371 TGraphAsymmErrors* gr =
fs->make<TGraphAsymmErrors>(
nLayers + 1);
1372 gr->SetName(
"eff_good");
1375 TGraphAsymmErrors* gr2 =
fs->make<TGraphAsymmErrors>(
nLayers + 1);
1376 gr2->SetName(
"eff_all");
1377 gr2->BayesDivide(found2, all2);
1380 gr->SetPointError(
j, 0., 0., gr->GetErrorYlow(
j), gr->GetErrorYhigh(
j));
1381 gr2->SetPointError(
j, 0., 0., gr2->GetErrorYlow(
j), gr2->GetErrorYhigh(
j));
1384 gr->GetXaxis()->SetLimits(0,
nLayers);
1385 gr->SetMarkerColor(2);
1386 gr->SetMarkerSize(1.2);
1387 gr->SetLineColor(2);
1388 gr->SetLineWidth(4);
1389 gr->SetMarkerStyle(20);
1391 gr->SetMaximum(1.001);
1392 gr->GetYaxis()->SetTitle(
"Efficiency");
1393 gStyle->SetTitleFillColor(0);
1394 gStyle->SetTitleBorderSize(0);
1397 gr2->GetXaxis()->SetLimits(0,
nLayers);
1398 gr2->SetMarkerColor(1);
1399 gr2->SetMarkerSize(1.2);
1400 gr2->SetLineColor(1);
1401 gr2->SetLineWidth(4);
1402 gr2->SetMarkerStyle(21);
1404 gr2->SetMaximum(1.001);
1405 gr2->GetYaxis()->SetTitle(
"Efficiency");
1424 gr->GetXaxis()->SetBinLabel(((
k + 1) * 100 + 2) / (
nLayers)-4,
label);
1425 gr2->GetXaxis()->SetBinLabel(((
k + 1) * 100 + 2) / (
nLayers)-4,
label);
1427 gr->GetXaxis()->SetBinLabel((
k + 1) * 100 / (
nLayers)-6,
label);
1428 gr2->GetXaxis()->SetBinLabel((
k + 1) * 100 / (
nLayers)-6,
label);
1432 gr->GetXaxis()->SetBinLabel((
k + 1) * 100 / (
nLayers)-4,
label);
1433 gr2->GetXaxis()->SetBinLabel((
k + 1) * 100 / (
nLayers)-4,
label);
1435 gr->GetXaxis()->SetBinLabel((
k + 1) * 100 / (
nLayers)-7,
label);
1436 gr2->GetXaxis()->SetBinLabel((
k + 1) * 100 / (
nLayers)-7,
label);
1442 gr->GetXaxis()->SetNdivisions(36);
1445 TPad*
overlay =
new TPad(
"overlay",
"", 0, 0, 1, 1);
1448 overlay->SetFrameFillStyle(4000);
1454 TLegend* leg =
new TLegend(0.70, 0.27, 0.88, 0.40);
1455 leg->AddEntry(gr,
"Good Modules",
"p");
1457 leg->AddEntry(gr2,
"All Modules",
"p");
1458 leg->SetTextSize(0.020);
1459 leg->SetFillColor(0);
1462 c7->SaveAs(
"Summary.png");
1466 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Computing efficiency vs bx" << endl;
1472 for (
unsigned int ilayer = 1; ilayer <
nLayers; ilayer++) {
1473 TH1F* hfound =
fs->make<TH1F>(Form(
"foundVsBx_layer%i", ilayer), Form(
"layer %i", ilayer), 3565, 0, 3565);
1474 TH1F* htotal =
fs->make<TH1F>(Form(
"totalVsBx_layer%i", ilayer), Form(
"layer %i", ilayer), 3565, 0, 3565);
1476 for (
unsigned int ibx = 0; ibx < 3566; ibx++) {
1477 hfound->SetBinContent(ibx, 1
e-6);
1478 htotal->SetBinContent(ibx, 1);
1480 map<unsigned int, vector<int> >::iterator iterMapvsBx;
1482 hfound->SetBinContent(iterMapvsBx->first, iterMapvsBx->second[ilayer]);
1484 if (iterMapvsBx->second[ilayer] > 0)
1485 htotal->SetBinContent(iterMapvsBx->first, iterMapvsBx->second[ilayer]);
1490 TGraphAsymmErrors* geff =
fs->make<TGraphAsymmErrors>(3564);
1491 geff->SetName(Form(
"effVsBx_layer%i", ilayer));
1492 geff->SetTitle(
"Hit Efficiency vs bx - " +
GetLayerName(ilayer));
1493 geff->BayesDivide(hfound, htotal);
1496 TGraphAsymmErrors* geff_avg =
fs->make<TGraphAsymmErrors>();
1497 geff_avg->SetName(Form(
"effVsBxAvg_layer%i", ilayer));
1498 geff_avg->SetTitle(
"Hit Efficiency vs bx - " +
GetLayerName(ilayer));
1499 geff_avg->SetMarkerStyle(20);
1501 int previous_bx = -80;
1511 ibx = iterMapvsBx->first;
1512 delta_bx = ibx - previous_bx;
1517 geff_avg->SetPoint(ipt, sum_bx / nbx, eff);
1518 low = TEfficiency::Bayesian(
total,
found, .683, 1, 1,
false);
1519 up = TEfficiency::Bayesian(
total,
found, .683, 1, 1,
true);
1520 geff_avg->SetPointError(ipt, sum_bx / nbx - firstbx, previous_bx - sum_bx / nbx, eff -
low,
up - eff);
1529 found += hfound->GetBinContent(ibx);
1530 total += htotal->GetBinContent(ibx);
1538 geff_avg->SetPoint(ipt, sum_bx / nbx, eff);
1539 low = TEfficiency::Bayesian(
total,
found, .683, 1, 1,
false);
1540 up = TEfficiency::Bayesian(
total,
found, .683, 1, 1,
true);
1541 geff_avg->SetPointError(ipt, sum_bx / nbx - firstbx, previous_bx - sum_bx / nbx, eff -
low,
up - eff);
1546 TString layername =
"";
1547 TString ringlabel =
"D";
1550 if (
k > 0 &&
k < 5) {
1551 layername = TString(
"TIB L") +
k;
1552 }
else if (
k > 4 &&
k < 11) {
1553 layername = TString(
"TOB L") + (
k - 4);
1554 }
else if (
k > 10 &&
k < 14) {
1555 layername = TString(
"TID ") + ringlabel + (
k - 10);
1557 layername = TString(
"TEC ") + ringlabel + (
k - 13);
1564 vector<TH1F*>& vhfound,
1565 vector<TH1F*>& vhtotal,
1574 for (
unsigned int ilayer = 1; ilayer <
nLayers; ilayer++) {
1575 hfound = vhfound[ilayer];
1576 htotal = vhtotal[ilayer];
1582 for (Long_t
i = 0;
i < hfound->GetNbinsX() + 1; ++
i) {
1583 if (hfound->GetBinContent(
i) == 0)
1584 hfound->SetBinContent(
i, 1
e-6);
1585 if (htotal->GetBinContent(
i) == 0)
1586 htotal->SetBinContent(
i, 1);
1589 TGraphAsymmErrors* geff =
fs->make<TGraphAsymmErrors>(hfound->GetNbinsX());
1590 geff->SetName(Form(
"%s_layer%i",
name.c_str(), ilayer));
1591 geff->BayesDivide(hfound, htotal);
1592 if (
name ==
"effVsLumi")
1593 geff->SetTitle(
"Hit Efficiency vs inst. lumi. - " +
GetLayerName(ilayer));
1594 if (
name ==
"effVsPU")
1595 geff->SetTitle(
"Hit Efficiency vs pileup - " +
GetLayerName(ilayer));
1596 if (
name ==
"effVsCM")
1597 geff->SetTitle(
"Hit Efficiency vs common Mode - " +
GetLayerName(ilayer));
1598 geff->SetMarkerStyle(20);
1603 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Computing efficiency vs lumi" << endl;
1608 <<
" pu: " <<
PUHisto->GetMean() <<
"+/-" <<
PUHisto->GetRMS() << endl;
1615 unsigned int nLayersForAvg = 0;
1616 float layerLumi = 0;
1621 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Lumi summary: (avg over trajectory measurements)" << endl;
1622 for (
unsigned int ilayer = 1; ilayer <
nLayers; ilayer++) {
1626 if (layerLumi != 0 && layerPU != 0) {
1627 avgLumi += layerLumi;
1632 avgLumi /= nLayersForAvg;
1633 avgPU /= nLayersForAvg;
1634 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Avg conditions: lumi :" << avgLumi <<
" pu: " << avgPU << endl;
1642 edm::LogInfo(
"SiStripHitResolFromCalibTree") <<
"Computing efficiency vs CM" << endl;
1647 TString layername =
"";
1648 TString ringlabel =
"D";
1651 if (
k > 0 &&
k < 5) {
1652 layername = TString(
"TIB L") +
k;
1653 }
else if (
k > 4 &&
k < 11) {
1654 layername = TString(
"TOB L") + (
k - 4);
1655 }
else if (
k > 10 &&
k < 14) {
1656 layername = TString(
"TID- ") + ringlabel + (
k - 10);
1657 }
else if (
k > 13 &&
k < 17) {
1658 layername = TString(
"TID+ ") + ringlabel + (
k - 13);
1660 layername = TString(
"TEC- ") + ringlabel + (
k - 16);
1662 layername = TString(
"TEC+ ") + ringlabel + (
k - 16 -
nTEClayers_);
1671 auto obj = std::make_unique<SiStripBadStrip>();
1676 for (; rIter != rIterEnd; ++rIter) {
1679 if (!
obj->put(rIter->detid,
range))
1681 <<
"[SiStripHitResolFromCalibTree::getNewObject] detid already exists" << std::endl;
1690 if ((
x >= 0) && (
y >= 0))
1692 else if ((
x >= 0) && (
y <= 0))
1694 else if ((
x <= 0) && (
y >= 0))
1733 NBadComponent[
i][0][0]++;
static const std::string kSharedResource
float calcPhi(float x, float y)
static constexpr auto TEC
virtual int nstrips() const =0
edm::FileInPath FileInPath_
ContainerIterator getDataVectorBegin() const
T getParameter(std::string const &) const
vector< TH1F * > layertotal_vsPU
std::unique_ptr< SiStripBadStrip > getNewObject() override
map< unsigned int, vector< int > > layertotal_perBx
bool useOnlyHighPurityTracks_
vector< TH1F * > layerfound_vsCM
std::string fullPath() const
map< unsigned int, vector< int > > layerfound_perBx
int goodlayertotal[::k_END_OF_LAYS_AND_RINGS]
vector< TH1F * > layertotal_vsCM
vector< TH1F * > layerfound_vsLumi
unsigned int clusterMatchingMethod_
vector< string > calibTreeFileNames_
void makeSummaryVsBx(const edm::Service< TFileService > &fs)
std::string to_string(const V &value)
SiStripQuality * quality_
Registry::const_iterator RegistryIterator
long layerfound[::k_END_OF_LAYERS]
unsigned int spaceBetweenTrains_
Log< level::Error, false > LogError
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
const std::vector< BadComponent > & getBadComponentList() const
void makeSummary(const edm::Service< TFileService > &fs)
T getUntrackedParameter(std::string const &, T const &) const
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
def overlay(hists, ytitle, header, addon)
map< unsigned int, double > BadModules
vector< TH1F * > layertotal_vsLumi
map< pair< unsigned int, unsigned int >, array< double, 3 > > eventInfos
void save(bool print_total=true, float minval=0., float maxval=0., std::string s="svgmap.svg", int width=1500, int height=800)
void compact(uint32_t detid, std::vector< unsigned int > &)
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
Abs< T >::type abs(const T &t)
RegistryIterator getRegistryVectorEnd() const
#define DEFINE_FWK_MODULE(type)
SiStripDetInfo read(std::string filePath)
static constexpr auto TOB
map< unsigned int, pair< unsigned int, unsigned int > > modCounter[::k_END_OF_LAYERS]
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken_
vector< TH1F * > layerfound_vsPU
void fillc(int idmod, int RGBcode)
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
vector< hit > hits[::k_END_OF_LAYERS]
Log< level::Info, false > LogInfo
int alllayerfound[::k_END_OF_LAYS_AND_RINGS]
static constexpr auto TIB
const Plane & surface() const
The nominal surface of the GeomDet.
const std::pair< unsigned short, double > getNumberOfApvsAndStripLength(uint32_t detId) const
void ComputeEff(const edm::Service< TFileService > &fs, vector< TH1F *> &vhfound, vector< TH1F *> &vhtotal, string name)
long layertotal[::k_END_OF_LAYERS]
bool autoIneffModTagging_
void makeTKMap(const edm::Service< TFileService > &fs, bool autoTagging)
void algoEndJob() override
vector< TH2F * > HotColdMaps
std::pair< ContainerIterator, ContainerIterator > Range
void algoAnalyze(const edm::Event &e, const edm::EventSetup &c) override
void makeSummaryVsCM(const edm::Service< TFileService > &fs)
int goodlayerfound[::k_END_OF_LAYS_AND_RINGS]
int alllayertotal[::k_END_OF_LAYS_AND_RINGS]
data decode(const unsigned int &value) const
void makeSummaryVsLumi(const edm::Service< TFileService > &fs)
bool showOnlyGoodModules_
bool put(const uint32_t &detID, const InputVector &vect)
void SetBadComponents(int i, int component, SiStripQuality::BadComponent &BC, std::stringstream ssV[4][19], int NBadComponent[4][19][4])
virtual float width() const =0
static constexpr auto TID
SiStripHitResolFromCalibTree(const edm::ParameterSet &)
RegistryIterator getRegistryVectorBegin() const
void makeHotColdMaps(const edm::Service< TFileService > &fs)
TString GetLayerSideName(Long_t k)
Power< A, B >::type pow(const A &a, const B &b)
void fill(int layer, int ring, int nmod, float x)
void algoBeginJob(const edm::EventSetup &) override
TString GetLayerName(Long_t k)
const Bounds & bounds() const