** Warning **
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=lxr at /lxr/lib/LXR/Common.pm line 1113.
Last-Modified: Sun, 21 Jun 2025 01:29:21 GMT
Content-Type: text/html; charset=utf-8
/CMSSW_15_1_X_2025-06-20-2300/DQM/DTMonitorModule/src/DTTimeEvolutionHisto.cc
File indexing completed on 2024-10-25 05:06:25
0001
0002
0003
0004
0005
0006
0007
0008 #include "DQM /DTMonitorModule /interface /DTTimeEvolutionHisto.h "
0009
0010 #include "DQMServices /Core /interface /DQMStore.h "
0011 #include "FWCore /MessageLogger /interface /MessageLogger.h "
0012
0013 using namespace std ;
0014 using namespace edm ;
0015
0016 DTTimeEvolutionHisto ::DTTimeEvolutionHisto (DQMStore ::IBooker & ibooker ,
0017 const string & name ,
0018 const string & title ,
0019 int nbins ,
0020 int lsPrescale,
0021 bool sliding ,
0022 int mode )
0023 : DTTimeEvolutionHisto (ibooker , name , title , nbins , 1, lsPrescale, sliding , mode ) {
0024 nBookedBins = histo ->getNbinsX ();
0025 }
0026
0027 DTTimeEvolutionHisto ::DTTimeEvolutionHisto (DQMStore ::IBooker & ibooker ,
0028 const string & name ,
0029 const string & title ,
0030 int nbins ,
0031 int firstLS,
0032 int lsPrescale,
0033 bool sliding ,
0034 int mode )
0035 : valueLastTimeSlot (0), theFirstLS (firstLS), theLSPrescale (lsPrescale), doSlide (sliding ), theMode (mode ) {
0036
0037 nBookedBins = nbins ;
0038 binLabelCounter = -1;
0039 if (sliding )
0040 nBookedBins ++;
0041 if (!sliding && theMode == 0)
0042 LogWarning ("DTDQM|DTMonitorModule|DTMonitorClient|DTTimeEvolutionHisto" )
0043 << "[DTTimeEvolutionHisto]***Error: wrong configuration" << endl ;
0044
0045 stringstream realTitle ;
0046 realTitle << title << "/" << theLSPrescale << " LS" ;
0047
0048
0049
0050 histo = ibooker .book1D (name , realTitle .str (), nBookedBins , (float )theFirstLS , nBookedBins + 1.);
0051
0052
0053 if (sliding ) {
0054 histo ->setBinLabel (1, "avg. previous" , 1);
0055 } else {
0056
0057
0058 for (int bin = 1; bin != nBookedBins + 1; ++bin ) {
0059 stringstream label ;
0060 if (theLSPrescale > 1) {
0061 label << "LS " << ((bin - 1) * theLSPrescale ) + theFirstLS << "-" << bin * theLSPrescale + theFirstLS ;
0062 } else {
0063 label << "LS " << ((bin - 1) * theLSPrescale ) + theFirstLS ;
0064 }
0065 if (bin % (2 * (int )theLSPrescale ) == 0)
0066 histo ->setBinLabel (bin , label .str (), 1);
0067 }
0068 }
0069 }
0070
0071
0072
0073
0074 DTTimeEvolutionHisto ::DTTimeEvolutionHisto (MonitorElement * histoGot)
0075 : valueLastTimeSlot (0),
0076 theFirstLS (1),
0077 theLSPrescale (-1),
0078 doSlide (false ),
0079 theMode (0) {
0080 LogVerbatim ("DTDQM|DTMonitorModule|DTMonitorClient|DTTimeEvolutionHisto" )
0081 << "[DTTimeEvolutionHisto] Retrieve ME with name: "
0082 << " " << endl ;
0083 histo = histoGot;
0084 }
0085
0086 DTTimeEvolutionHisto ::~DTTimeEvolutionHisto () {}
0087
0088 void DTTimeEvolutionHisto ::setTimeSlotValue (float value , int timeSlot) {
0089 if (!doSlide ) {
0090 histo ->Fill (timeSlot, value );
0091 } else {
0092 for (int bin = 1; bin != nBookedBins ; ++bin ) {
0093 float value = histo ->getBinContent (bin );
0094
0095 if (bin == 1) {
0096 histo ->setBinContent (bin , (value + histo ->getBinContent (bin + 1)) / 2.);
0097 } else if (bin != nBookedBins ) {
0098 histo ->setBinContent (bin , histo ->getBinContent (bin + 1));
0099 histo ->setBinError (bin , histo ->getBinError (bin + 1));
0100 histo ->setBinLabel (bin , histo ->getTH1F ()->GetXaxis ()->GetBinLabel(bin + 1), 1);
0101 histo ->setBinLabel (bin + 1, "" , 1);
0102 }
0103 }
0104 histo ->setBinContent (nBookedBins , value );
0105 }
0106 }
0107
0108 void DTTimeEvolutionHisto ::accumulateValueTimeSlot (float value ) { valueLastTimeSlot += value ; }
0109
0110 void DTTimeEvolutionHisto ::updateTimeSlot (int ls , int nEventsInLS ) {
0111 if (doSlide ) {
0112
0113 if (nEventsInLastTimeSlot .find (ls ) != nEventsInLastTimeSlot .end ()) {
0114 nEventsInLastTimeSlot [ls ] += nEventsInLS ;
0115 nLumiTrInLastTimeSlot [ls ]++;
0116 } else {
0117 nEventsInLastTimeSlot [ls ] = nEventsInLS ;
0118 nLumiTrInLastTimeSlot [ls ] = 1;
0119 }
0120
0121 if (!nEventsInLastTimeSlot .empty () &&
0122 nEventsInLastTimeSlot .size () % theLSPrescale == 0) {
0123 int firstLSinTimeSlot = nEventsInLastTimeSlot .begin ()->first ;
0124 int lastLSinTimeSlot = nEventsInLastTimeSlot .rbegin ()->first ;
0125
0126 map <int , int >::const_iterator nEventsIt = nEventsInLastTimeSlot .begin ();
0127 map <int , int >::const_iterator nEventsEnd = nEventsInLastTimeSlot .end ();
0128
0129 int nEvents = 0;
0130 for (; nEventsIt != nEventsEnd ; ++nEventsIt )
0131 nEvents += nEventsIt ->second ;
0132
0133 LogVerbatim ("DTDQM|DTMonitorModule|DTMonitorClient|DTTimeEvolutionHisto" )
0134 << "[DTTimeEvolutionHisto] Update time-slot, # entries: " << valueLastTimeSlot << " # events: " << nEvents
0135 << endl ;
0136
0137
0138 float value = 0;
0139 if (theMode == 0) {
0140 if (nEvents != 0)
0141 value = valueLastTimeSlot / (float )nEvents ;
0142 } else if (theMode == 1) {
0143 value = valueLastTimeSlot ;
0144 } else if (theMode == 2) {
0145 value = nEvents ;
0146 } else if (theMode == 3) {
0147 map <int , int >::const_iterator nLumiTrIt = nLumiTrInLastTimeSlot .begin ();
0148 map <int , int >::const_iterator nLumiTrEnd = nLumiTrInLastTimeSlot .end ();
0149
0150 float nLumiTr = 0.;
0151 for (; nLumiTrIt != nLumiTrEnd ; ++nLumiTrIt )
0152 nLumiTr += nLumiTrIt ->second ;
0153
0154 value = valueLastTimeSlot / nLumiTr ;
0155 }
0156 setTimeSlotValue (value , nBookedBins );
0157 LogVerbatim ("DTDQM|DTMonitorModule|DTMonitorClient|DTTimeEvolutionHisto" )
0158 << " updated value: " << histo ->getBinContent (nBookedBins ) << endl ;
0159
0160
0161 stringstream binLabel ;
0162 binLabel << "LS " << firstLSinTimeSlot ;
0163 if (nEventsInLastTimeSlot .size () > 1) {
0164 binLabel << "-" << lastLSinTimeSlot ;
0165 binLabelCounter ++;
0166 }
0167
0168
0169 if (nBookedBins >= 25 && binLabelCounter % (nBookedBins / 25) == 0)
0170 histo ->setBinLabel (nBookedBins , binLabel .str (), 1);
0171
0172
0173
0174 nEventsInLastTimeSlot .clear ();
0175 nLumiTrInLastTimeSlot .clear ();
0176 valueLastTimeSlot = 0;
0177 }
0178
0179 } else {
0180 int binN = (int )ls - (theFirstLS - 1) / (int )theLSPrescale ;
0181
0182 float value = 0;
0183 if (theMode == 1) {
0184 value = valueLastTimeSlot ;
0185 } else if (theMode == 2) {
0186 value = nEventsInLS ;
0187 } else if (theMode == 3) {
0188 value = valueLastTimeSlot / theLSPrescale ;
0189 }
0190 LogVerbatim ("DTDQM|DTMonitorModule|DTMonitorClient|DTTimeEvolutionHisto" )
0191 << "[DTTimeEvolutionHisto] Update time-slot: " << binN << " with value: " << value << endl ;
0192 setTimeSlotValue (value , binN );
0193 }
0194 }
0195
0196 void DTTimeEvolutionHisto ::normalizeTo (const MonitorElement * histForNorm) {
0197 if (histo == nullptr ) {
0198 LogWarning ("DTDQM|DTMonitorModule|DTMonitorClient|DTTimeEvolutionHisto" )
0199 << "[DTTimeEvolutionHisto]***Error: pointer to ME is NULL" << endl ;
0200 return ;
0201 }
0202 int nBins = histo ->getNbinsX ();
0203 if (histForNorm->getNbinsX () != nBins ) {
0204 LogWarning ("DTDQM|DTMonitorModule|DTMonitorClient|DTTimeEvolutionHisto" )
0205 << "[DTTimeEvolutionHisto]***Error: normalizing histos with != # of bins" << endl ;
0206 return ;
0207 }
0208 for (int bin = 1; bin <= nBins ; ++bin ) {
0209 if (histForNorm->getBinContent (bin ) != 0) {
0210 double normValue = histo ->getBinContent (bin ) / histForNorm->getBinContent (bin );
0211 LogVerbatim ("DTDQM|DTMonitorModule|DTMonitorClient|DTTimeEvolutionHisto" )
0212 << "[DTTimeEvolutionHisto] Normalizing bin: " << bin << " to: " << histo ->getBinContent (bin ) << " / "
0213 << histForNorm->getBinContent (bin ) << " = " << normValue << endl ;
0214 histo ->setBinContent (bin , normValue );
0215 } else {
0216 histo ->setBinContent (bin , 0);
0217 }
0218 }
0219 }
0220
0221
0222
0223
0224