CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
DQMStoreStats Class Reference

#include <DQMStoreStats.h>

Inheritance diagram for DQMStoreStats:
edm::EDAnalyzer edm::EDConsumerBase

Public Types

enum  statsMode { considerAllME = 0, considerOnlyLumiProductME = 1 }
 
- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

 DQMStoreStats (const edm::ParameterSet &)
 
 ~DQMStoreStats () override
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
 ~EDAnalyzer () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase &&)=default
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const * > *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Protected Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &c) override
 
void beginJob () override
 
void beginRun (const edm::Run &r, const edm::EventSetup &c) override
 
void endJob () override
 
void endLuminosityBlock (const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c) override
 
void endRun (const edm::Run &r, const edm::EventSetup &c) override
 
- Protected Member Functions inherited from edm::EDConsumerBase
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< B > consumes (edm::InputTag tag) noexcept
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes () noexcept
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag) noexcept
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 

Private Member Functions

void calcIgProfDump (Folder &)
 
int calcstats (int)
 
void dumpMemoryProfile ()
 
void print ()
 
std::pair< unsigned int, unsigned int > readMemoryEntry () const
 

Private Attributes

DQMStoredbe_
 
bool dumpMemHistory_
 
bool dumpToFWJR_
 
bool isOpenProcFileSuccessful_
 
int maxbinsglobal_
 
std::string maxbinsmeglobal_
 
std::string maxbinsmesubsys_
 
int maxbinssubsys_
 
std::vector< std::pair< time_t, unsigned int > > memoryHistoryVector_
 
int nbinsglobal_
 
int nbinssubsys_
 
int nmeglobal_
 
int nmesubsys_
 
edm::ParameterSet parameters_
 
std::string pathnamematch_
 
std::stringstream procFileName_
 
bool runineventloop_
 
bool runonendjob_
 
bool runonendlumi_
 
bool runonendrun_
 
time_t startingTime_
 
int statsdepth_
 
std::string subfolder_
 
std::string subsystem_
 
int verbose_
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsInputProcessBlocks ()
 
static bool wantsProcessBlocks ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 

Detailed Description

DQMStoreStats itself

Definition at line 299 of file DQMStoreStats.h.

Member Enumeration Documentation

◆ statsMode

Enumerator
considerAllME 
considerOnlyLumiProductME 

Definition at line 304 of file DQMStoreStats.h.

Constructor & Destructor Documentation

◆ DQMStoreStats()

DQMStoreStats::DQMStoreStats ( const edm::ParameterSet ps)

Definition at line 47 of file DQMStoreStats.cc.

48  : subsystem_(""),
49  subfolder_(""),
50  nbinsglobal_(0),
51  nbinssubsys_(0),
52  nmeglobal_(0),
53  nmesubsys_(0),
54  maxbinsglobal_(0),
55  maxbinssubsys_(0),
56  maxbinsmeglobal_(""),
57  maxbinsmesubsys_(""),
58  statsdepth_(1),
59  pathnamematch_(""),
60  verbose_(0) {
61  parameters_ = ps;
63  statsdepth_ = ps.getUntrackedParameter<int>("statsDepth", statsdepth_);
64  verbose_ = ps.getUntrackedParameter<int>("verbose", verbose_);
65  dumpMemHistory_ = ps.getUntrackedParameter<bool>("dumpMemoryHistory", false);
66  runonendrun_ = ps.getUntrackedParameter<bool>("runOnEndRun", true);
67  runonendjob_ = ps.getUntrackedParameter<bool>("runOnEndJob", false);
68  runonendlumi_ = ps.getUntrackedParameter<bool>("runOnEndLumi", false);
69  runineventloop_ = ps.getUntrackedParameter<bool>("runInEventLoop", false);
70  dumpToFWJR_ = ps.getUntrackedParameter<bool>("dumpToFWJR", false);
71 
72  startingTime_ = time(nullptr);
73 }

References dumpMemHistory_, dumpToFWJR_, edm::ParameterSet::getUntrackedParameter(), parameters_, pathnamematch_, runineventloop_, runonendjob_, runonendlumi_, runonendrun_, startingTime_, statsdepth_, AlCaHLTBitMon_QueryRunRegistry::string, protons_cff::time, and verbose_.

◆ ~DQMStoreStats()

DQMStoreStats::~DQMStoreStats ( )
overridedefault

Member Function Documentation

◆ analyze()

void DQMStoreStats::analyze ( const edm::Event e,
const edm::EventSetup c 
)
overrideprotectedvirtual

Implements edm::EDAnalyzer.

Definition at line 684 of file DQMStoreStats.cc.

684  {
685  //now read virtual memory size from proc folder
686  memoryHistoryVector_.emplace_back(readMemoryEntry());
687 
688  if (runineventloop_) {
692  }
693 }

References calcstats(), considerAllME, considerOnlyLumiProductME, dumpMemoryProfile(), memoryHistoryVector_, readMemoryEntry(), and runineventloop_.

◆ beginJob()

void DQMStoreStats::beginJob ( void  )
overrideprotectedvirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 655 of file DQMStoreStats.cc.

655  {
657  dbe_ = Service<DQMStore>().operator->();
658 
659  // access the proc/ folder for memory information
660  procFileName_ << "/proc/" << getpid() << "/status";
661 
662  // open for a test
663  std::ifstream procFile(procFileName_.str().c_str(), ios::in);
664 
665  if (procFile.good()) {
667  } else {
668  std::cerr << " [DQMStoreStats::beginJob] ** WARNING: could not open file: " << procFileName_.str() << std::endl;
669  std::cerr << " Total memory profile will not be available." << std::endl;
671  }
672 
673  procFile.close();
674 }

References EcnaPython_AdcPeg12_S1_10_R170298_1_0_150_Dee0::cerr, dbe_, recoMuon::in, isOpenProcFileSuccessful_, and procFileName_.

◆ beginRun()

void DQMStoreStats::beginRun ( const edm::Run r,
const edm::EventSetup c 
)
overrideprotectedvirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 679 of file DQMStoreStats.cc.

679 {}

◆ calcIgProfDump()

void DQMStoreStats::calcIgProfDump ( Folder root)
private

Definition at line 77 of file DQMStoreStats.cc.

77  {
78  std::ofstream stream("dqm-bin-stats.sql");
79  stream << ""
80  " PRAGMA journal_mode=OFF;"
81  " PRAGMA count_changes=OFF;"
82  " DROP TABLE IF EXISTS files;"
83  " DROP TABLE IF EXISTS symbols;"
84  " DROP TABLE IF EXISTS mainrows;"
85  " DROP TABLE IF EXISTS children;"
86  " DROP TABLE IF EXISTS parents;"
87  " DROP TABLE IF EXISTS summary;"
88  " CREATE TABLE children ("
89  " self_id INTEGER CONSTRAINT self_exists REFERENCES mainrows(id),"
90  " parent_id INTEGER CONSTRAINT parent_exists REFERENCES mainrows(id),"
91  " from_parent_count INTEGER,"
92  " from_parent_calls INTEGER,"
93  " from_parent_paths INTEGER,"
94  " pct REAL"
95  " );"
96  " CREATE TABLE files ("
97  " id,"
98  " name TEXT"
99  " );"
100  " CREATE TABLE mainrows ("
101  " id INTEGER PRIMARY KEY,"
102  " symbol_id INTEGER CONSTRAINT symbol_id_exists REFERENCES symbols(id),"
103  " self_count INTEGER,"
104  " cumulative_count INTEGER,"
105  " kids INTEGER,"
106  " self_calls INTEGER,"
107  " total_calls INTEGER,"
108  " self_paths INTEGER,"
109  " total_paths INTEGER,"
110  " pct REAL"
111  " );"
112  " CREATE TABLE parents ("
113  " self_id INTEGER CONSTRAINT self_exists REFERENCES mainrows(id),"
114  " child_id INTEGER CONSTRAINT child_exists REFERENCES mainrows(id),"
115  " to_child_count INTEGER,"
116  " to_child_calls INTEGER,"
117  " to_child_paths INTEGER,"
118  " pct REAL"
119  " );"
120  " CREATE TABLE summary ("
121  " counter TEXT,"
122  " total_count INTEGER,"
123  " total_freq INTEGER,"
124  " tick_period REAL"
125  " );"
126  " CREATE TABLE symbols ("
127  " id,"
128  " name TEXT,"
129  " filename_id INTEGER CONSTRAINT file_id_exists REFERENCES files(id)"
130  " );"
131  " CREATE UNIQUE INDEX fileIndex ON files (id);"
132  " CREATE INDEX selfCountIndex ON mainrows(self_count);"
133  " CREATE UNIQUE INDEX symbolsIndex ON symbols (id);"
134  " CREATE INDEX totalCountIndex ON mainrows(cumulative_count);"
135  << std::endl;
136 
137  std::string sql_statement("");
138 
139  root.files(sql_statement);
140  root.symbols(sql_statement);
141  root.mainrows_cumulative(sql_statement);
142  root.summary(sql_statement);
143  VIterator<Folder*> subsystems = root.CreateIterator();
144  size_t ii = 0;
145  for (subsystems.First(); !subsystems.IsDone(); subsystems.Next(), ++ii) {
146  subsystems.CurrentItem()->mainrows(sql_statement);
147  subsystems.CurrentItem()->parents(sql_statement);
148  subsystems.CurrentItem()->children(sql_statement);
149  }
150  stream << sql_statement << std::endl;
151 }

References Folder::children(), VIterator< Item >::CurrentItem(), VIterator< Item >::First(), cuy::ii, VIterator< Item >::IsDone(), Folder::mainrows(), VIterator< Item >::Next(), Folder::parents(), cms::cuda::stream, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by calcstats().

◆ calcstats()

int DQMStoreStats::calcstats ( int  mode = DQMStoreStats::considerAllME)
private

do the stats here and produce output;

mode is coded in DQMStoreStats::statMode enum (select subsets of ME, e.g. those with getLumiFlag() == true)

Definition at line 159 of file DQMStoreStats.cc.

159  {
161  nbinsglobal_ = 0;
162  nbinssubsys_ = 0;
163  maxbinsglobal_ = 0;
164  maxbinssubsys_ = 0;
165  std::string path = "";
166  std::string subsystemname = "";
167  std::string subfoldername = "";
168  size_t subsysStringEnd = 0, subfolderStringBegin = 0, subfolderStringEnd = 0;
169 
170  std::vector<MonitorElement*> melist;
172 
173  Folder dbeFolder("root");
174  DQMStoreStatsTopLevel dqmStoreStatsTopLevel;
175 
176  // loop all ME
177  for (auto& it : melist) {
178  // consider only ME with getLumiFlag() == true ?
179  if (mode == DQMStoreStats::considerOnlyLumiProductME && !(it->getLumiFlag()))
180  continue;
181 
182  // figure out subsystem/subfolder names
183  const std::string& path = it->getPathname();
184 
185  subfolderStringBegin = 0;
186  Folder* curr = &dbeFolder;
187  while (true) {
188  subfolderStringEnd = path.find('/', subfolderStringBegin);
189  if (std::string::npos == subfolderStringEnd) {
190  curr = curr->cd(path.substr(subfolderStringBegin, path.size() - subfolderStringBegin));
191  break;
192  }
193  curr = curr->cd(path.substr(subfolderStringBegin, subfolderStringEnd - subfolderStringBegin));
194  subfolderStringBegin = ++subfolderStringEnd < path.size() ? subfolderStringEnd : path.size();
195  }
196 
197  // protection against ghost ME with empty paths
198  if (path.empty())
199  continue;
200 
201  subsysStringEnd = path.find('/', 0);
202  if (std::string::npos == subsysStringEnd)
203  subsysStringEnd = path.size(); // no subfolder
204 
205  // new subsystem?
206  if (path.substr(0, subsysStringEnd) != subsystemname) {
207  DQMStoreStatsSubsystem aSubsystem;
208  subsystemname = path.substr(0, subsysStringEnd);
209  aSubsystem.subsystemName_ = subsystemname;
210  dqmStoreStatsTopLevel.push_back(aSubsystem);
211  subfoldername = "";
212  }
213 
214  // get subfolder name (if there is one..)
215  if (path.size() == subsysStringEnd) {
216  // no subfolders in subsystem, make dummy
217  DQMStoreStatsSubfolder aSubfolder;
218  aSubfolder.subfolderName_ = subsystemname; // <-- for tagging this case
219  dqmStoreStatsTopLevel.back().push_back(aSubfolder);
220  }
221 
222  else {
223  // there is a subfolder, get its name
224  subfolderStringEnd = path.find('/', subsysStringEnd + 1);
225  if (std::string::npos == subfolderStringEnd)
226  subfolderStringEnd = path.size();
227 
228  // new subfolder?
229  if (path.substr(subsysStringEnd + 1, subfolderStringEnd - subsysStringEnd - 1) != subfoldername) {
230  subfoldername = path.substr(subsysStringEnd + 1, subfolderStringEnd - subsysStringEnd - 1);
231  DQMStoreStatsSubfolder aSubfolder;
232  aSubfolder.subfolderName_ = subfoldername;
233  dqmStoreStatsTopLevel.back().push_back(aSubfolder);
234  }
235  }
236 
237  // shortcut
238  DQMStoreStatsSubfolder& currentSubfolder = dqmStoreStatsTopLevel.back().back();
239 
240  switch (it->kind()) {
241  // one-dim ME
243  currentSubfolder.AddBinsF(it->getNbinsX(), getEmptyMetric(it->getTH1F()->GetArray(), it->getTH1F()->fN, 0, 0));
244  curr->update(it->getNbinsX(),
245  getEmptyMetric(it->getTH1F()->GetArray(), it->getTH1F()->fN, 0, 0),
246  it->getNbinsX() * sizeof(float));
247  break;
249  currentSubfolder.AddBinsS(it->getNbinsX(), getEmptyMetric(it->getTH1S()->GetArray(), it->getTH1S()->fN, 0, 0));
250  curr->update(it->getNbinsX(),
251  getEmptyMetric(it->getTH1S()->GetArray(), it->getTH1S()->fN, 0, 0),
252  it->getNbinsX() * sizeof(short));
253  break;
255  currentSubfolder.AddBinsD(it->getNbinsX(), getEmptyMetric(it->getTH1D()->GetArray(), it->getTH1D()->fN, 0, 0));
256  curr->update(it->getNbinsX(),
257  getEmptyMetric(it->getTH1D()->GetArray(), it->getTH1D()->fN, 0, 0),
258  it->getNbinsX() * sizeof(double));
259  break;
261  currentSubfolder.AddBinsD(it->getNbinsX(),
262  getEmptyMetric(it->getTProfile()->GetArray(), it->getTProfile()->fN, 0, 0));
263  curr->update(it->getNbinsX(),
264  getEmptyMetric(it->getTProfile()->GetArray(), it->getTProfile()->fN, 0, 0),
265  it->getNbinsX() * sizeof(double));
266  break;
267 
268  // two-dim ME
270  currentSubfolder.AddBinsF(
271  it->getNbinsX() * it->getNbinsY(),
272  getEmptyMetric(it->getTH2F()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0));
273  curr->update(it->getNbinsX() * it->getNbinsY(),
274  getEmptyMetric(it->getTH2F()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0),
275  it->getNbinsX() * it->getNbinsY() * sizeof(float));
276  break;
278  currentSubfolder.AddBinsS(
279  it->getNbinsX() * it->getNbinsY(),
280  getEmptyMetric(it->getTH2S()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0));
281  curr->update(it->getNbinsX() * it->getNbinsY(),
282  getEmptyMetric(it->getTH2S()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0),
283  it->getNbinsX() * it->getNbinsY() * sizeof(short));
284  break;
286  currentSubfolder.AddBinsD(
287  it->getNbinsX() * it->getNbinsY(),
288  getEmptyMetric(it->getTH2D()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0));
289  curr->update(it->getNbinsX() * it->getNbinsY(),
290  getEmptyMetric(it->getTH2D()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0),
291  it->getNbinsX() * it->getNbinsY() * sizeof(double));
292  break;
294  currentSubfolder.AddBinsD(
295  it->getNbinsX() * it->getNbinsY(),
296  getEmptyMetric(it->getTProfile2D()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0));
297  curr->update(it->getNbinsX() * it->getNbinsY(),
298  getEmptyMetric(it->getTProfile2D()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0),
299  it->getNbinsX() * it->getNbinsY() * sizeof(double));
300  break;
301 
302  // three-dim ME
304  currentSubfolder.AddBinsF(
305  it->getNbinsX() * it->getNbinsY() * it->getNbinsZ(),
306  getEmptyMetric(it->getTH3F()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, it->getNbinsZ() + 2));
307  curr->update(
308  it->getNbinsX() * it->getNbinsY() * it->getNbinsZ(),
309  getEmptyMetric(it->getTH3F()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, it->getNbinsZ() + 2),
310  it->getNbinsX() * it->getNbinsY() * it->getNbinsZ() * sizeof(float));
311  break;
312 
313  default: {
314  }
315  // here we have a DQM_KIND_INVALID, DQM_KIND_INT, DQM_KIND_REAL or DQM_KIND_STRING
316  // which we don't care much about. Alternatively:
317 
318  // std::cerr << "[DQMStoreStats::calcstats] ** WARNING: monitor element of kind: "
319  // << (*it)->kind() << ", name: \"" << (*it)->getName() << "\"\n"
320  // << " in path: \"" << path << "\" not considered." << std::endl;
321  }
322  }
323 
325  calcIgProfDump(dbeFolder);
326 
327  // OUTPUT
328 
329  std::cout << endl;
330  std::cout << "==========================================================================================="
331  << std::endl;
332  std::cout << "[DQMStoreStats::calcstats] -- Dumping stats results ";
334  std::cout << "FOR ALL ME" << std::endl;
336  std::cout << "FOR LUMI PRODUCTS ONLY" << std::endl;
337  std::cout << "==========================================================================================="
338  << std::endl;
339  std::cout << endl;
340 
341  std::cout << "------------------------------------------------------------------------------------------"
342  << std::endl;
343  std::cout << "Configuration:" << std::endl;
344  std::cout << "------------------------------------------------------------------------------------------"
345  << std::endl;
346  std::cout << " > running ";
347  if (runonendrun_)
348  std::cout << "on run end." << std::endl;
349  if (runonendlumi_)
350  std::cout << "on lumi end." << std::endl;
351  if (runonendjob_)
352  std::cout << "on job end." << std::endl;
353  if (runineventloop_)
354  std::cout << "in event loop." << std::endl;
355  std::cout << " > pathNameMatch = \"" << pathnamematch_ << "\"" << std::endl;
356  std::cout << std::endl;
357 
358  // dump folder structure
359  std::cout << "------------------------------------------------------------------------------------------"
360  << std::endl;
361  std::cout << "Top level folder tree:" << std::endl;
362  std::cout << "------------------------------------------------------------------------------------------"
363  << std::endl;
364  for (auto it0 = dqmStoreStatsTopLevel.begin(); it0 < dqmStoreStatsTopLevel.end(); ++it0) {
365  std::cout << it0->subsystemName_ << " (subsystem)" << std::endl;
366 
367  for (auto it1 = it0->begin(); it1 < it0->end(); ++it1) {
368  std::cout << " |--> " << it1->subfolderName_ << " (subfolder)" << std::endl;
369  }
370  }
371 
372  // dump mem/bin table
373 
374  unsigned int overallNHistograms = 0, overallNBins = 0, overallNEmptyBins = 0, overallNBytes = 0;
375 
376  std::cout << std::endl;
377  std::cout << "------------------------------------------------------------------------------------------"
378  << std::endl;
379  std::cout << "Detailed ressource usage information ";
381  std::cout << "FOR ALL ME" << std::endl;
383  std::cout << "FOR LUMI PRODUCTS ONLY" << std::endl;
384  std::cout << "------------------------------------------------------------------------------------------"
385  << std::endl;
386  std::cout << "subsystem/folder histograms bins Empty bins Empty/Total "
387  "bins per MB kB per"
388  << std::endl;
389  std::cout << " (total) (total) (total) "
390  "histogram (total) histogram "
391  << std::endl;
392  std::cout << "------------------------------------------------------------------------------------------"
393  << std::endl;
394  for (auto it0 = dqmStoreStatsTopLevel.begin(); it0 < dqmStoreStatsTopLevel.end(); ++it0) {
395  std::cout << it0->subsystemName_ << std::endl;
396 
397  unsigned int nHistograms = 0, nBins = 0, nEmptyBins = 0, nBytes = 0;
398 
399  for (auto it1 = it0->begin(); it1 < it0->end(); ++it1) {
400  // fixed-size working copy
401  std::string thisSubfolderName(it1->subfolderName_);
402  if (thisSubfolderName.size() > 30) {
403  thisSubfolderName.resize(30);
404  thisSubfolderName.replace(thisSubfolderName.size() - 3, 3, 3, '.');
405  }
406 
407  std::cout << " -> " << std::setw(30) << std::left << thisSubfolderName;
408  std::cout << std::setw(14) << std::right << it1->totalHistos_;
409  std::cout << std::setw(14) << std::right << it1->totalBins_;
410  std::cout << std::setw(14) << std::right << it1->totalEmptyBins_;
411  std::cout << std::setw(14) << std::right << std::setprecision(3)
412  << (float)it1->totalEmptyBins_ / (float)it1->totalBins_;
413 
414  // bins/histogram, need to catch nan if histos=0
415  if (it1->totalHistos_) {
416  std::cout << std::setw(14) << std::right << std::setprecision(3) << it1->totalBins_ / float(it1->totalHistos_);
417  } else
418  std::cout << std::setw(14) << std::right << "-";
419 
420  std::cout << std::setw(14) << std::right << std::setprecision(3) << it1->totalMemory_ / 1024. / 1024.;
421 
422  // mem/histogram, need to catch nan if histos=0
423  if (it1->totalHistos_) {
424  std::cout << std::setw(14) << std::right << std::setprecision(3)
425  << it1->totalMemory_ / 1024. / it1->totalHistos_;
426  } else
427  std::cout << std::setw(14) << std::right << "-";
428 
429  std::cout << std::endl;
430 
431  // collect totals
432  nHistograms += it1->totalHistos_;
433  nBins += it1->totalBins_;
434  nEmptyBins += it1->totalEmptyBins_;
435  nBytes += it1->totalMemory_;
436  }
437 
438  overallNHistograms += nHistograms;
439  overallNBins += nBins;
440  overallNEmptyBins += nEmptyBins;
441  overallNBytes += nBytes;
442 
443  // display totals
444  std::cout << " " << std::setw(30) << std::left << "SUBSYSTEM TOTAL";
445  std::cout << std::setw(14) << std::right << nHistograms;
446  std::cout << std::setw(14) << std::right << nBins;
447  std::cout << std::setw(14) << std::right << nEmptyBins;
448  std::cout << std::setw(14) << std::right << (float)nEmptyBins / (float)nBins;
449  std::cout << std::setw(14) << std::right << std::setprecision(3) << nBins / float(nHistograms);
450  std::cout << std::setw(14) << std::right << std::setprecision(3) << nBytes / 1024. / 1000.;
451  std::cout << std::setw(14) << std::right << std::setprecision(3) << nBytes / 1024. / nHistograms;
452  std::cout << std::endl;
453 
454  std::cout << ".........................................................................................."
455  << std::endl;
456  }
457 
458  // dump total
459  std::cout << std::endl;
460  std::cout << "------------------------------------------------------------------------------------------"
461  << std::endl;
462  std::cout << "Grand total ";
464  std::cout << "FOR ALL ME:" << std::endl;
466  std::cout << "FOR LUMI PRODUCTS ONLY:" << std::endl;
467  std::cout << "------------------------------------------------------------------------------------------"
468  << std::endl;
469  std::cout << "Number of subsystems: " << dqmStoreStatsTopLevel.size() << std::endl;
470  std::cout << "Total number of histograms: " << overallNHistograms << " with: " << overallNBins << " bins alltogether"
471  << std::endl;
472  std::cout << "Total memory occupied by histograms (excl. overhead): " << overallNBytes / 1024. / 1000. << " MB"
473  << std::endl;
474 
475  std::cout << endl;
476  std::cout << "==========================================================================================="
477  << std::endl;
478  std::cout << "[DQMStoreStats::calcstats] -- End of output ";
480  std::cout << "FOR ALL ME." << std::endl;
482  std::cout << "FOR LUMI PRODUCTS ONLY." << std::endl;
483  std::cout << "==========================================================================================="
484  << std::endl;
485  std::cout << endl;
486 
487  // Put together a simplified version of the complete dump that is
488  // sent to std::cout. Just dump the very basic information,
489  // i.e. summary for each folder, both for run and LS products.
490  if (dumpToFWJR_) {
492  // Do not even try if the FWJR service is not available.
493  if (!jr.isAvailable())
494  return 0;
495  // Prepare appropriate map to store FWJR output.
496  std::map<std::string, std::string> jrInfo;
497  unsigned int overallNHistograms = 0, overallNBins = 0, overallNBytes = 0;
498 
499  jrInfo["Source"] = "DQMServices/Components";
500  jrInfo["FileClass"] = "DQMStoreStats";
501  if (runonendrun_)
502  jrInfo["DumpType"] = "EndRun";
503  if (runonendlumi_)
504  jrInfo["DumpType"] = "EndLumi";
505  if (runonendjob_)
506  jrInfo["DumpType"] = "EndJob";
507  if (runineventloop_)
508  jrInfo["DumpType"] = "EventLoop";
510  jrInfo["Type"] = "RunProduct";
512  jrInfo["Type"] = "LumiProduct";
513 
514  jrInfo["pathNameMatch"] = pathnamematch_;
515 
516  for (auto it0 = dqmStoreStatsTopLevel.begin(); it0 < dqmStoreStatsTopLevel.end(); ++it0) {
517  unsigned int nHistograms = 0, nBins = 0, nEmptyBins = 0, nBytes = 0;
518  for (auto it1 = it0->begin(); it1 < it0->end(); ++it1) {
519  // collect totals
520  nHistograms += it1->totalHistos_;
521  nBins += it1->totalBins_;
522  nEmptyBins += it1->totalEmptyBins_;
523  nBytes += it1->totalMemory_;
524  }
525  overallNHistograms += nHistograms;
526  overallNBins += nBins;
527  overallNBytes += nBytes;
528  std::stringstream iss("");
529  iss << nHistograms;
530  jrInfo[it0->subsystemName_ + std::string("_h")] = iss.str();
531  iss.str("");
532  iss << nBins;
533  jrInfo[it0->subsystemName_ + std::string("_b")] = iss.str();
534  iss.str("");
535  iss << nEmptyBins;
536  jrInfo[it0->subsystemName_ + std::string("_be")] = iss.str();
537  iss.str("");
538  iss << ((float)nEmptyBins / (float)nBins);
539  jrInfo[it0->subsystemName_ + std::string("_fbe")] = iss.str();
540  iss.str("");
541  iss << ((float)nBins / (float)nHistograms);
542  jrInfo[it0->subsystemName_ + std::string("_b_h")] = iss.str();
543  iss.str("");
544  iss << nBytes / 1024. / 1024.;
545  jrInfo[it0->subsystemName_ + std::string("_MB")] = iss.str();
546  iss.str("");
547  iss << nBytes / 1024. / nHistograms;
548  jrInfo[it0->subsystemName_ + std::string("_Kb_h")] = iss.str();
549  }
550  jr->reportAnalysisFile("DQMStatsReport", jrInfo);
551  }
552 
553  return 0;
554 }

References DQMStoreStatsSubfolder::AddBinsD(), DQMStoreStatsSubfolder::AddBinsF(), DQMStoreStatsSubfolder::AddBinsS(), calcIgProfDump(), Folder::cd(), considerAllME, considerOnlyLumiProductME, gather_cfg::cout, dbe_, dumpToFWJR_, dqmMemoryStats::float, dqm::implementation::IGetter::getAllContents(), getEmptyMetric(), edm::Service< T >::isAvailable(), maxbinsglobal_, maxbinssubsys_, ALCARECOPromptCalibProdSiPixelAli0T_cff::mode, seedmultiplicitymonitor_newtracking_cfi::nBins, nbinsglobal_, nbinssubsys_, castor_dqm_sourceclient_file_cfg::path, pathnamematch_, edm::JobReport::reportAnalysisFile(), runineventloop_, runonendjob_, runonendlumi_, runonendrun_, AlCaHLTBitMon_QueryRunRegistry::string, DQMStoreStatsSubfolder::subfolderName_, DQMStoreStatsSubsystem::subsystemName_, MonitorElementData::TH1D, MonitorElementData::TH1F, MonitorElementData::TH1S, MonitorElementData::TH2D, MonitorElementData::TH2F, MonitorElementData::TH2S, MonitorElementData::TH3F, MonitorElementData::TPROFILE, MonitorElementData::TPROFILE2D, and Folder::update().

Referenced by analyze(), endJob(), endLuminosityBlock(), and endRun().

◆ dumpMemoryProfile()

void DQMStoreStats::dumpMemoryProfile ( )
private

Definition at line 559 of file DQMStoreStats.cc.

559  {
560  std::cout << std::endl;
561  std::cout << "------------------------------------------------------------------------------------------"
562  << std::endl;
563  std::cout << "Memory profile:" << std::endl;
564  std::cout << "------------------------------------------------------------------------------------------"
565  << std::endl;
566 
567  // determine virtual memory maximum
568  std::pair<time_t, unsigned int> maxItem(0, 0);
569  for (auto it = memoryHistoryVector_.begin(); it < memoryHistoryVector_.end(); ++it) {
570  if (it->second > maxItem.second) {
571  maxItem = *it;
572  }
573  }
574 
575  std::stringstream rootOutputFileName;
576  rootOutputFileName << "dqmStoreStats_memProfile_" << getpid() << ".root";
577 
578  // dump memory history to root file
580  TFile outputFile(rootOutputFileName.str().c_str(), "RECREATE");
581 
582  int aTime;
583  float aMb;
584 
585  TTree memHistoryTree("dqmstorestats_memhistory", "memory history");
586  memHistoryTree.Branch("seconds", &aTime, "seconds/I");
587  memHistoryTree.Branch("megabytes", &aMb, "megabytes/F");
588  for (auto it = memoryHistoryVector_.begin(); it < memoryHistoryVector_.end(); ++it) {
589  aTime = it->first - startingTime_;
590  aMb = it->second / 1000.;
591  memHistoryTree.Fill();
592  }
593 
594  outputFile.Write();
595  outputFile.Close();
596  }
597 
598  std::cout << "Approx. maximum total virtual memory size of job: ";
600  std::cout << maxItem.second / 1000. << " MB (reached " << maxItem.first - startingTime_
601  << " sec. after constructor called)," << std::endl;
602  std::cout << " memory history written to: " << rootOutputFileName.str() << " (" << memoryHistoryVector_.size()
603  << " samples)" << std::endl;
604  } else {
605  std::cout << "(could not be determined)" << std::endl;
606  }
607 
608  std::cout << std::endl << std::endl;
609 }

References gather_cfg::cout, dumpMemHistory_, isOpenProcFileSuccessful_, memoryHistoryVector_, download_sqlite_cfg::outputFile, and startingTime_.

Referenced by analyze(), endJob(), endLuminosityBlock(), and endRun().

◆ endJob()

void DQMStoreStats::endJob ( void  )
overrideprotectedvirtual

◆ endLuminosityBlock()

void DQMStoreStats::endLuminosityBlock ( const edm::LuminosityBlock lumiSeg,
const edm::EventSetup c 
)
overrideprotectedvirtual

◆ endRun()

void DQMStoreStats::endRun ( const edm::Run r,
const edm::EventSetup c 
)
overrideprotectedvirtual

◆ print()

void DQMStoreStats::print ( void  )
private

Definition at line 614 of file DQMStoreStats.cc.

614  {
615  // subsystem info printout
616  std::cout << " ---------- " << subsystem_ << " ---------- " << std::endl;
617  std::cout << " " << subfolder_ << ": ";
618  std::cout << nmesubsys_ << " histograms with " << nbinssubsys_ << " bins. ";
619  if (nmesubsys_ > 0)
620  std::cout << nbinssubsys_ / nmesubsys_ << " bins/histogram ";
621  std::cout << std::endl;
622  std::cout << " Largest histogram: " << maxbinsmesubsys_ << " with " << maxbinssubsys_ << " bins." << std::endl;
623 }

References gather_cfg::cout, maxbinsmesubsys_, maxbinssubsys_, nbinssubsys_, nmesubsys_, subfolder_, and subsystem_.

◆ readMemoryEntry()

std::pair< unsigned int, unsigned int > DQMStoreStats::readMemoryEntry ( ) const
private

read virtual memory size from /proc/<pid>/status file

Definition at line 628 of file DQMStoreStats.cc.

628  {
629  // see if initial test reading was successful
631  std::ifstream procFile(procFileName_.str().c_str(), ios::in);
632 
633  std::string readBuffer("");
634  unsigned int memSize = 0;
635 
636  // scan procfile
637  while (!procFile.eof()) {
638  procFile >> readBuffer;
639  if (std::string("VmSize:") == readBuffer) {
640  procFile >> memSize;
641  break;
642  }
643  }
644 
645  procFile.close();
646  return std::pair<time_t, unsigned int>(time(nullptr), memSize);
647  }
648 
649  return std::pair<time_t, unsigned int>(0, 0);
650 }

References recoMuon::in, isOpenProcFileSuccessful_, procFileName_, AlCaHLTBitMon_QueryRunRegistry::string, and protons_cff::time.

Referenced by analyze().

Member Data Documentation

◆ dbe_

DQMStore* DQMStoreStats::dbe_
private

Definition at line 332 of file DQMStoreStats.h.

Referenced by beginJob(), and calcstats().

◆ dumpMemHistory_

bool DQMStoreStats::dumpMemHistory_
private

Definition at line 359 of file DQMStoreStats.h.

Referenced by DQMStoreStats(), and dumpMemoryProfile().

◆ dumpToFWJR_

bool DQMStoreStats::dumpToFWJR_
private

Definition at line 360 of file DQMStoreStats.h.

Referenced by calcstats(), and DQMStoreStats().

◆ isOpenProcFileSuccessful_

bool DQMStoreStats::isOpenProcFileSuccessful_
private

Definition at line 352 of file DQMStoreStats.h.

Referenced by beginJob(), dumpMemoryProfile(), and readMemoryEntry().

◆ maxbinsglobal_

int DQMStoreStats::maxbinsglobal_
private

Definition at line 341 of file DQMStoreStats.h.

Referenced by calcstats().

◆ maxbinsmeglobal_

std::string DQMStoreStats::maxbinsmeglobal_
private

Definition at line 343 of file DQMStoreStats.h.

◆ maxbinsmesubsys_

std::string DQMStoreStats::maxbinsmesubsys_
private

Definition at line 344 of file DQMStoreStats.h.

Referenced by print().

◆ maxbinssubsys_

int DQMStoreStats::maxbinssubsys_
private

Definition at line 342 of file DQMStoreStats.h.

Referenced by calcstats(), and print().

◆ memoryHistoryVector_

std::vector<std::pair<time_t, unsigned int> > DQMStoreStats::memoryHistoryVector_
private

Definition at line 350 of file DQMStoreStats.h.

Referenced by analyze(), and dumpMemoryProfile().

◆ nbinsglobal_

int DQMStoreStats::nbinsglobal_
private

Definition at line 337 of file DQMStoreStats.h.

Referenced by calcstats().

◆ nbinssubsys_

int DQMStoreStats::nbinssubsys_
private

Definition at line 338 of file DQMStoreStats.h.

Referenced by calcstats(), and print().

◆ nmeglobal_

int DQMStoreStats::nmeglobal_
private

Definition at line 339 of file DQMStoreStats.h.

◆ nmesubsys_

int DQMStoreStats::nmesubsys_
private

Definition at line 340 of file DQMStoreStats.h.

Referenced by print().

◆ parameters_

edm::ParameterSet DQMStoreStats::parameters_
private

◆ pathnamematch_

std::string DQMStoreStats::pathnamematch_
private

Definition at line 347 of file DQMStoreStats.h.

Referenced by calcstats(), and DQMStoreStats().

◆ procFileName_

std::stringstream DQMStoreStats::procFileName_
private

Definition at line 353 of file DQMStoreStats.h.

Referenced by beginJob(), and readMemoryEntry().

◆ runineventloop_

bool DQMStoreStats::runineventloop_
private

Definition at line 358 of file DQMStoreStats.h.

Referenced by analyze(), calcstats(), and DQMStoreStats().

◆ runonendjob_

bool DQMStoreStats::runonendjob_
private

Definition at line 356 of file DQMStoreStats.h.

Referenced by calcstats(), DQMStoreStats(), and endJob().

◆ runonendlumi_

bool DQMStoreStats::runonendlumi_
private

Definition at line 357 of file DQMStoreStats.h.

Referenced by calcstats(), DQMStoreStats(), and endLuminosityBlock().

◆ runonendrun_

bool DQMStoreStats::runonendrun_
private

Definition at line 355 of file DQMStoreStats.h.

Referenced by calcstats(), DQMStoreStats(), and endRun().

◆ startingTime_

time_t DQMStoreStats::startingTime_
private

Definition at line 351 of file DQMStoreStats.h.

Referenced by DQMStoreStats(), and dumpMemoryProfile().

◆ statsdepth_

int DQMStoreStats::statsdepth_
private

Definition at line 346 of file DQMStoreStats.h.

Referenced by DQMStoreStats().

◆ subfolder_

std::string DQMStoreStats::subfolder_
private

Definition at line 336 of file DQMStoreStats.h.

Referenced by print().

◆ subsystem_

std::string DQMStoreStats::subsystem_
private

Definition at line 335 of file DQMStoreStats.h.

Referenced by print().

◆ verbose_

int DQMStoreStats::verbose_
private

Definition at line 348 of file DQMStoreStats.h.

Referenced by DQMStoreStats().

DQMStoreStats::dumpMemHistory_
bool dumpMemHistory_
Definition: DQMStoreStats.h:359
DQMStoreStats::readMemoryEntry
std::pair< unsigned int, unsigned int > readMemoryEntry() const
Definition: DQMStoreStats.cc:628
DQMStoreStats::dbe_
DQMStore * dbe_
Definition: DQMStoreStats.h:332
VIterator::First
void First() override
Definition: DQMStoreStats.h:111
dqmMemoryStats.float
float
Definition: dqmMemoryStats.py:127
MonitorElementData::Kind::TH1S
MonitorElementData::Kind::TH1F
cms::cuda::stream
cudaStream_t stream
Definition: HistoContainer.h:57
Folder::cd
Folder * cd(const std::string &name)
Definition: DQMStoreStats.h:155
gather_cfg.cout
cout
Definition: gather_cfg.py:144
DQMStoreStats::subsystem_
std::string subsystem_
Definition: DQMStoreStats.h:335
edm::JobReport::reportAnalysisFile
void reportAnalysisFile(std::string const &fileName, std::map< std::string, std::string > const &fileData)
Definition: JobReport.cc:473
ALCARECOPromptCalibProdSiPixelAli0T_cff.mode
mode
Definition: ALCARECOPromptCalibProdSiPixelAli0T_cff.py:96
protons_cff.time
time
Definition: protons_cff.py:39
DQMStoreStats::memoryHistoryVector_
std::vector< std::pair< time_t, unsigned int > > memoryHistoryVector_
Definition: DQMStoreStats.h:350
DQMStoreStatsSubfolder::AddBinsF
void AddBinsF(unsigned int nBins, unsigned int nEmptyBins)
Definition: DQMStoreStats.h:54
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
dqm::implementation::IGetter::getAllContents
virtual std::vector< dqm::harvesting::MonitorElement * > getAllContents(std::string const &path) const
Definition: DQMStore.cc:609
edm::Service::isAvailable
bool isAvailable() const
Definition: Service.h:40
DQMStoreStats::nmeglobal_
int nmeglobal_
Definition: DQMStoreStats.h:339
VIterator::IsDone
bool IsDone() const override
Definition: DQMStoreStats.h:116
MonitorElementData::Kind::TH2D
DQMStoreStats::startingTime_
time_t startingTime_
Definition: DQMStoreStats.h:351
DQMStoreStatsSubfolder
Definition: DQMStoreStats.h:41
MonitorElementData::Kind::TH2F
DQMStoreStatsTopLevel
Definition: DQMStoreStats.h:88
VIterator
Definition: DQMStoreStats.h:107
download_sqlite_cfg.outputFile
outputFile
Definition: download_sqlite_cfg.py:5
DQMStoreStatsSubsystem
Definition: DQMStoreStats.h:78
DQMStoreStats::considerOnlyLumiProductME
Definition: DQMStoreStats.h:304
DQMStoreStats::isOpenProcFileSuccessful_
bool isOpenProcFileSuccessful_
Definition: DQMStoreStats.h:352
DQMStoreStats::runineventloop_
bool runineventloop_
Definition: DQMStoreStats.h:358
seedmultiplicitymonitor_newtracking_cfi.nBins
nBins
Definition: seedmultiplicitymonitor_newtracking_cfi.py:8
DQMStoreStatsSubfolder::subfolderName_
std::string subfolderName_
Definition: DQMStoreStats.h:49
DQMStoreStats::pathnamematch_
std::string pathnamematch_
Definition: DQMStoreStats.h:347
DQMStoreStats::dumpToFWJR_
bool dumpToFWJR_
Definition: DQMStoreStats.h:360
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
DQMStoreStats::maxbinsmesubsys_
std::string maxbinsmesubsys_
Definition: DQMStoreStats.h:344
DQMStoreStats::runonendjob_
bool runonendjob_
Definition: DQMStoreStats.h:356
Folder::parents
void parents(std::string &sql_statement)
Definition: DQMStoreStats.h:238
DQMStoreStats::maxbinsglobal_
int maxbinsglobal_
Definition: DQMStoreStats.h:341
Folder::mainrows
void mainrows(std::string &sql_statement)
Definition: DQMStoreStats.h:216
DQMStoreStats::maxbinsmeglobal_
std::string maxbinsmeglobal_
Definition: DQMStoreStats.h:343
Folder::children
void children(std::string &sql_statement)
Definition: DQMStoreStats.h:249
recoMuon::in
Definition: RecoMuonEnumerators.h:6
DQMStoreStats::calcstats
int calcstats(int)
Definition: DQMStoreStats.cc:159
Folder
Definition: DQMStoreStats.h:134
DQMStoreStats::verbose_
int verbose_
Definition: DQMStoreStats.h:348
DQMStoreStats::considerAllME
Definition: DQMStoreStats.h:304
edm::Service
Definition: Service.h:30
DQMStoreStats::runonendrun_
bool runonendrun_
Definition: DQMStoreStats.h:355
root
Definition: RooFitFunction.h:10
DQMStoreStatsSubfolder::AddBinsS
void AddBinsS(unsigned int nBins, unsigned int nEmptyBins)
Definition: DQMStoreStats.h:60
DQMStoreStats::maxbinssubsys_
int maxbinssubsys_
Definition: DQMStoreStats.h:342
DQMStoreStats::statsdepth_
int statsdepth_
Definition: DQMStoreStats.h:346
MonitorElementData::Kind::TH1D
DQMStoreStats::procFileName_
std::stringstream procFileName_
Definition: DQMStoreStats.h:353
DQMStoreStats::nbinsglobal_
int nbinsglobal_
Definition: DQMStoreStats.h:337
DQMStoreStatsSubfolder::AddBinsD
void AddBinsD(unsigned int nBins, unsigned int nEmptyBins)
Definition: DQMStoreStats.h:66
DQMStoreStats::subfolder_
std::string subfolder_
Definition: DQMStoreStats.h:336
DQMStoreStats::nmesubsys_
int nmesubsys_
Definition: DQMStoreStats.h:340
MonitorElementData::Kind::TH2S
MonitorElementData::Kind::TPROFILE2D
MonitorElementData::Kind::TH3F
VIterator::Next
void Next() override
Definition: DQMStoreStats.h:112
DQMStoreStats::calcIgProfDump
void calcIgProfDump(Folder &)
Definition: DQMStoreStats.cc:77
DQMStoreStatsSubsystem::subsystemName_
std::string subsystemName_
Definition: DQMStoreStats.h:81
VIterator::CurrentItem
Item CurrentItem() const override
Definition: DQMStoreStats.h:122
DQMStoreStats::nbinssubsys_
int nbinssubsys_
Definition: DQMStoreStats.h:338
castor_dqm_sourceclient_file_cfg.path
path
Definition: castor_dqm_sourceclient_file_cfg.py:37
getEmptyMetric
static unsigned int getEmptyMetric(T *array, int lenx, int leny, int lenz)
Definition: DQMStoreStats.cc:17
EcnaPython_AdcPeg12_S1_10_R170298_1_0_150_Dee0.cerr
cerr
Definition: EcnaPython_AdcPeg12_S1_10_R170298_1_0_150_Dee0.py:8
DQMStoreStats::parameters_
edm::ParameterSet parameters_
Definition: DQMStoreStats.h:333
DQMStoreStats::dumpMemoryProfile
void dumpMemoryProfile()
Definition: DQMStoreStats.cc:559
MonitorElementData::Kind::TPROFILE
cuy.ii
ii
Definition: cuy.py:590
Folder::update
void update(unsigned int bins, unsigned int empty, unsigned int memory)
Definition: DQMStoreStats.h:200
DQMStoreStats::runonendlumi_
bool runonendlumi_
Definition: DQMStoreStats.h:357