@@ -114,7 +114,7 @@ class SiStripHitEffFromCalibTree : public ConditionDBWriter<SiStripBadStrip> {
114114 void totalStatistics ();
115115 void makeSummary ();
116116 void makeSummaryVsBx ();
117- void computeEff (vector<TH1F*>& vhfound, vector<TH1F*>& vhtotal, string name);
117+ void computeEff (vector<TH1F*>& vhfound, vector<TH1F*>& vhtotal, string name, vector<TGraphAsymmErrors*> geff );
118118 void makeSummaryVsLumi ();
119119 void makeSummaryVsCM ();
120120 TString getLayerSideName (Long_t k);
@@ -172,11 +172,11 @@ class SiStripHitEffFromCalibTree : public ConditionDBWriter<SiStripBadStrip> {
172172 vector<hit> hits[::k_END_OF_LAYERS];
173173 vector<TH2F*> HotColdMaps;
174174 map<unsigned int , pair<unsigned int , unsigned int > > modCounter[::k_END_OF_LAYERS];
175- TrackerMap* tkmap;
176- TrackerMap* tkmapbad;
177- TrackerMap* tkmapeff;
178- TrackerMap* tkmapnum;
179- TrackerMap* tkmapden;
175+ TrackerMap* tkmap{ nullptr } ;
176+ TrackerMap* tkmapbad{ nullptr } ;
177+ TrackerMap* tkmapeff{ nullptr } ;
178+ TrackerMap* tkmapnum{ nullptr } ;
179+ TrackerMap* tkmapden{ nullptr } ;
180180 long layerfound[::k_END_OF_LAYERS];
181181 long layertotal[::k_END_OF_LAYERS];
182182 map<unsigned int , vector<int > > layerfound_perBx;
@@ -189,6 +189,11 @@ class SiStripHitEffFromCalibTree : public ConditionDBWriter<SiStripBadStrip> {
189189 vector<TH1F*> layertotal_vsCM;
190190 vector<TH1F*> layerfound_vsBX;
191191 vector<TH1F*> layertotal_vsBX;
192+ vector<TGraphAsymmErrors*> geff_vsBX;
193+ vector<TGraphAsymmErrors*> geff_avg_vsBX;
194+ vector<TGraphAsymmErrors*> geff_avg_vsLumi;
195+ vector<TGraphAsymmErrors*> geff_avg_vsPU;
196+ vector<TGraphAsymmErrors*> geff_avg_vsCM;
192197 int goodlayertotal[::k_END_OF_LAYS_AND_RINGS];
193198 int goodlayerfound[::k_END_OF_LAYS_AND_RINGS];
194199 int alllayertotal[::k_END_OF_LAYS_AND_RINGS];
@@ -239,6 +244,11 @@ SiStripHitEffFromCalibTree::SiStripHitEffFromCalibTree(const edm::ParameterSet&
239244 layertotal_vsCM.reserve (::k_END_OF_LAYERS);
240245 layerfound_vsBX.reserve (::k_END_OF_LAYERS);
241246 layertotal_vsBX.reserve (::k_END_OF_LAYERS);
247+ geff_vsBX.reserve (::k_END_OF_LAYERS);
248+ geff_avg_vsBX.reserve (::k_END_OF_LAYERS);
249+ geff_avg_vsLumi.reserve (::k_END_OF_LAYERS);
250+ geff_avg_vsPU.reserve (::k_END_OF_LAYERS);
251+ geff_avg_vsCM.reserve (::k_END_OF_LAYERS);
242252}
243253
244254namespace utils {
@@ -296,8 +306,7 @@ SiStripHitEffFromCalibTree::~SiStripHitEffFromCalibTree() {
296306 edm::LogPrint (" " ) << __PRETTY_FUNCTION__ << " File has inconsistent hash: " << tFile.HasInconsistentHash ()
297307 << std::endl;
298308
299- bool debug{false };
300-
309+ bool debug{false }; // the following is only used for debugging purposes
301310 if (!tFile.IsZombie () && tFile.IsWritable () && debug) {
302311 // Delete all objects in the file recursively
303312 utils::Recursion (&tFile, &tFile);
@@ -378,11 +387,40 @@ void SiStripHitEffFromCalibTree::algoAnalyze(const edm::Event& e, const edm::Eve
378387 layertotal_vsBX.push_back (fs->make <TH1F>(
379388 Form (" totalVsBx_layer%i" , (int )ilayer), Form (" layer %i" , (int )ilayer), nBxInAnOrbit_, 0 , nBxInAnOrbit_));
380389
390+ geff_vsBX.push_back (fs->make <TGraphAsymmErrors>(nBxInAnOrbit_ - 1 ));
391+ geff_vsBX[ilayer]->SetName (Form (" effVsBx_layer%i" , (int )ilayer));
392+ geff_vsBX[ilayer]->SetTitle (
393+ fmt::format (" Hit Efficiency vs bx - {}" , ::layerName (ilayer, showRings_, nTEClayers)).c_str ());
394+
395+ geff_avg_vsBX.push_back (fs->make <TGraphAsymmErrors>(nBxInAnOrbit_ - 1 ));
396+ geff_avg_vsBX[ilayer]->SetName (Form (" effVsBxAvg_layer%i" , (int )ilayer));
397+ geff_avg_vsBX[ilayer]->SetTitle (
398+ fmt::format (" Hit Efficiency vs bx - {}" , ::layerName (ilayer, showRings_, nTEClayers)).c_str ());
399+ geff_avg_vsBX[ilayer]->SetMarkerStyle (20 );
400+
401+ geff_avg_vsLumi.push_back (fs->make <TGraphAsymmErrors>(99 ));
402+ geff_avg_vsLumi[ilayer]->SetName (Form (" effVsLumiAvg_layer%i" , (int )ilayer));
403+ geff_avg_vsLumi[ilayer]->SetTitle (
404+ fmt::format (" Hit Efficiency vs inst. lumi. - {}" , ::layerName (ilayer, showRings_, nTEClayers)).c_str ());
405+ geff_avg_vsLumi[ilayer]->SetMarkerStyle (20 );
406+
407+ geff_avg_vsPU.push_back (fs->make <TGraphAsymmErrors>(44 ));
408+ geff_avg_vsLumi[ilayer]->SetName (Form (" effVsPUAvg_layer%i" , (int )ilayer));
409+ geff_avg_vsPU[ilayer]->SetTitle (
410+ fmt::format (" Hit Efficiency vs pileup - {}" , ::layerName (ilayer, showRings_, nTEClayers)).c_str ());
411+ geff_avg_vsPU[ilayer]->SetMarkerStyle (20 );
412+
381413 if (useCM_) {
382414 layerfound_vsCM.push_back (
383415 fs->make <TH1F>(Form (" layerfound_vsCM_layer_%i" , (int )(ilayer)), lyrName.c_str (), 20 , 0 , 400 ));
384416 layertotal_vsCM.push_back (
385417 fs->make <TH1F>(Form (" layertotal_vsCM_layer_%i" , (int )(ilayer)), lyrName.c_str (), 20 , 0 , 400 ));
418+
419+ geff_avg_vsCM.push_back (fs->make <TGraphAsymmErrors>(19 ));
420+ geff_avg_vsCM[ilayer]->SetName (Form (" effVsCMAvg_layer%i" , (int )ilayer));
421+ geff_avg_vsCM[ilayer]->SetTitle (
422+ fmt::format (" Hit Efficiency vs common Mode - {}" , ::layerName (ilayer, showRings_, nTEClayers)).c_str ());
423+ geff_avg_vsCM[ilayer]->SetMarkerStyle (20 );
386424 }
387425 layertotal[ilayer] = 0 ;
388426 layerfound[ilayer] = 0 ;
@@ -1528,7 +1566,7 @@ void SiStripHitEffFromCalibTree::makeSummaryVsBx() {
15281566 if (showRings_)
15291567 nLayers = 20 ;
15301568
1531- for (unsigned int ilayer = 1 ; ilayer < nLayers; ilayer++) {
1569+ for (unsigned int ilayer = 0 ; ilayer <= nLayers; ilayer++) {
15321570 for (unsigned int ibx = 0 ; ibx <= nBxInAnOrbit_; ibx++) {
15331571 layerfound_vsBX[ilayer]->SetBinContent (ibx, 1e-6 );
15341572 layertotal_vsBX[ilayer]->SetBinContent (ibx, 1 );
@@ -1546,17 +1584,9 @@ void SiStripHitEffFromCalibTree::makeSummaryVsBx() {
15461584 layerfound_vsBX[ilayer]->Sumw2 ();
15471585 layertotal_vsBX[ilayer]->Sumw2 ();
15481586
1549- TGraphAsymmErrors* geff = fs->make <TGraphAsymmErrors>(nBxInAnOrbit_ - 1 );
1550- geff->SetName (Form (" effVsBx_layer%i" , ilayer));
1551-
1552- geff->SetTitle (fmt::format (" Hit Efficiency vs bx - {}" , ::layerName (ilayer, showRings_, nTEClayers)).c_str ());
1553- geff->BayesDivide (layerfound_vsBX[ilayer], layertotal_vsBX[ilayer]);
1587+ geff_vsBX[ilayer]->BayesDivide (layerfound_vsBX[ilayer], layertotal_vsBX[ilayer]);
15541588
15551589 // Average over trains
1556- TGraphAsymmErrors* geff_avg = fs->make <TGraphAsymmErrors>();
1557- geff_avg->SetName (Form (" effVsBxAvg_layer%i" , ilayer));
1558- geff_avg->SetTitle (fmt::format (" Hit Efficiency vs bx - {}" , ::layerName (ilayer, showRings_, nTEClayers)).c_str ());
1559- geff_avg->SetMarkerStyle (20 );
15601590 int ibx = 0 ;
15611591 int previous_bx = -80 ;
15621592 int delta_bx = 0 ;
@@ -1574,10 +1604,11 @@ void SiStripHitEffFromCalibTree::makeSummaryVsBx() {
15741604 if (delta_bx > (int )spaceBetweenTrains_ && nbx > 0 && total > 0 ) {
15751605 eff = found / (float )total;
15761606 // LOGPRINT<<"new train "<<ipt<<" "<<sum_bx/nbx<<" "<<eff<<endl;
1577- geff_avg ->SetPoint (ipt, sum_bx / nbx, eff);
1607+ geff_avg_vsBX[ilayer] ->SetPoint (ipt, sum_bx / nbx, eff);
15781608 low = TEfficiency::Bayesian (total, found, .683 , 1 , 1 , false );
15791609 up = TEfficiency::Bayesian (total, found, .683 , 1 , 1 , true );
1580- geff_avg->SetPointError (ipt, sum_bx / nbx - firstbx, previous_bx - sum_bx / nbx, eff - low, up - eff);
1610+ geff_avg_vsBX[ilayer]->SetPointError (
1611+ ipt, sum_bx / nbx - firstbx, previous_bx - sum_bx / nbx, eff - low, up - eff);
15811612 ipt++;
15821613 sum_bx = 0 ;
15831614 found = 0 ;
@@ -1595,22 +1626,25 @@ void SiStripHitEffFromCalibTree::makeSummaryVsBx() {
15951626 // last train
15961627 eff = found / (float )total;
15971628 // LOGPRINT<<"new train "<<ipt<<" "<<sum_bx/nbx<<" "<<eff<<endl;
1598- geff_avg ->SetPoint (ipt, sum_bx / nbx, eff);
1629+ geff_avg_vsBX[ilayer] ->SetPoint (ipt, sum_bx / nbx, eff);
15991630 low = TEfficiency::Bayesian (total, found, .683 , 1 , 1 , false );
16001631 up = TEfficiency::Bayesian (total, found, .683 , 1 , 1 , true );
1601- geff_avg ->SetPointError (ipt, sum_bx / nbx - firstbx, previous_bx - sum_bx / nbx, eff - low, up - eff);
1632+ geff_avg_vsBX[ilayer] ->SetPointError (ipt, sum_bx / nbx - firstbx, previous_bx - sum_bx / nbx, eff - low, up - eff);
16021633 }
16031634}
16041635
1605- void SiStripHitEffFromCalibTree::computeEff (vector<TH1F*>& vhfound, vector<TH1F*>& vhtotal, string name) {
1636+ void SiStripHitEffFromCalibTree::computeEff (vector<TH1F*>& vhfound,
1637+ vector<TH1F*>& vhtotal,
1638+ string name,
1639+ vector<TGraphAsymmErrors*> geff) {
16061640 unsigned int nLayers = siStripLayers_;
16071641 if (showRings_)
16081642 nLayers = 20 ;
16091643
16101644 TH1F* hfound;
16111645 TH1F* htotal;
16121646
1613- for (unsigned int ilayer = 1 ; ilayer < nLayers; ilayer++) {
1647+ for (unsigned int ilayer = 0 ; ilayer <= nLayers; ilayer++) {
16141648 hfound = vhfound[ilayer];
16151649 htotal = vhtotal[ilayer];
16161650
@@ -1625,18 +1659,7 @@ void SiStripHitEffFromCalibTree::computeEff(vector<TH1F*>& vhfound, vector<TH1F*
16251659 htotal->SetBinContent (i, 1 );
16261660 }
16271661
1628- TGraphAsymmErrors* geff = fs->make <TGraphAsymmErrors>(hfound->GetNbinsX ());
1629- geff->SetName (Form (" %s_layer%i" , name.c_str (), ilayer));
1630- geff->BayesDivide (hfound, htotal);
1631- if (name == " effVsLumi" )
1632- geff->SetTitle (
1633- fmt::format (" Hit Efficiency vs inst. lumi. - {}" , ::layerName (ilayer, showRings_, nTEClayers)).c_str ());
1634- if (name == " effVsPU" )
1635- geff->SetTitle (fmt::format (" Hit Efficiency vs pileup - {}" , ::layerName (ilayer, showRings_, nTEClayers)).c_str ());
1636- if (name == " effVsCM" )
1637- geff->SetTitle (
1638- fmt::format (" Hit Efficiency vs common Mode - {}" , ::layerName (ilayer, showRings_, nTEClayers)).c_str ());
1639- geff->SetMarkerStyle (20 );
1662+ geff[ilayer]->BayesDivide (hfound, htotal);
16401663 }
16411664}
16421665
@@ -1674,13 +1697,13 @@ void SiStripHitEffFromCalibTree::makeSummaryVsLumi() {
16741697 LOGPRINT << " Avg conditions: lumi :" << avgLumi << " pu: " << avgPU;
16751698 }
16761699
1677- computeEff (layerfound_vsLumi, layertotal_vsLumi, " effVsLumi" );
1678- computeEff (layerfound_vsPU, layertotal_vsPU, " effVsPU" );
1700+ computeEff (layerfound_vsLumi, layertotal_vsLumi, " effVsLumi" , geff_avg_vsLumi );
1701+ computeEff (layerfound_vsPU, layertotal_vsPU, " effVsPU" , geff_avg_vsPU );
16791702}
16801703
16811704void SiStripHitEffFromCalibTree::makeSummaryVsCM () {
16821705 LOGPRINT << " Computing efficiency vs CM" ;
1683- computeEff (layerfound_vsCM, layertotal_vsCM, " effVsCM" );
1706+ computeEff (layerfound_vsCM, layertotal_vsCM, " effVsCM" , geff_avg_vsCM );
16841707}
16851708
16861709TString SiStripHitEffFromCalibTree::getLayerSideName (Long_t k) {
0 commit comments