174 size_t subsysStringEnd = 0, subfolderStringBegin = 0, subfolderStringEnd = 0;
177 std::vector<MonitorElement*> melist;
184 typedef std::vector <MonitorElement*>::iterator meIt;
185 for(meIt it = melist.begin(); it != melist.end(); ++it) {
189 !( (*it)->getLumiFlag() ) )
continue;
194 subfolderStringBegin = 0;
195 Folder * curr = &dbeFolder;
198 subfolderStringEnd = path.find(
'/', subfolderStringBegin );
199 if( std::string::npos == subfolderStringEnd )
201 curr = curr->
cd(path.substr( subfolderStringBegin, path.size()-subfolderStringBegin ));
204 curr = curr->
cd(path.substr( subfolderStringBegin, subfolderStringEnd-subfolderStringBegin ));
205 subfolderStringBegin = ++subfolderStringEnd < path.size() ? subfolderStringEnd : path.size();
209 if( path.empty() )
continue;
211 subsysStringEnd = path.find(
'/', 0 );
212 if( std::string::npos == subsysStringEnd ) subsysStringEnd = path.size();
215 if( path.substr( 0, subsysStringEnd ) != subsystemname ) {
217 subsystemname = path.substr( 0, subsysStringEnd );
219 dqmStoreStatsTopLevel.push_back( aSubsystem );
224 if( path.size() == subsysStringEnd ) {
228 dqmStoreStatsTopLevel.back().push_back( aSubfolder );
234 subfolderStringEnd = path.find(
'/', subsysStringEnd + 1 );
235 if( std::string::npos == subfolderStringEnd ) subfolderStringEnd = path.size();
238 if( path.substr( subsysStringEnd + 1, subfolderStringEnd - subsysStringEnd - 1 ) != subfoldername ) {
239 subfoldername = path.substr( subsysStringEnd + 1, subfolderStringEnd - subsysStringEnd - 1 );
242 dqmStoreStatsTopLevel.back().push_back( aSubfolder );
250 switch( (*it)->kind() ) {
254 currentSubfolder.
AddBinsF( (*it)->getNbinsX(),
getEmptyMetric((*it)->getTH1F()->GetArray(), (*it)->getTH1F()->fN, 0, 0) );
255 curr->
update( (*it)->getNbinsX(),
getEmptyMetric((*it)->getTH1F()->GetArray(), (*it)->getTH1F()->fN, 0, 0), (*it)->getNbinsX()*
sizeof(
float ) );
258 currentSubfolder.
AddBinsS( (*it)->getNbinsX(),
getEmptyMetric((*it)->getTH1S()->GetArray(), (*it)->getTH1S()->fN, 0, 0) );
259 curr->
update( (*it)->getNbinsX(),
getEmptyMetric((*it)->getTH1S()->GetArray(), (*it)->getTH1S()->fN, 0, 0), (*it)->getNbinsX()*
sizeof( short ) );
262 currentSubfolder.
AddBinsD( (*it)->getNbinsX(),
getEmptyMetric((*it)->getTH1D()->GetArray(), (*it)->getTH1D()->fN, 0, 0) );
263 curr->
update( (*it)->getNbinsX(),
getEmptyMetric((*it)->getTH1D()->GetArray(), (*it)->getTH1D()->fN, 0, 0), (*it)->getNbinsX()*
sizeof( double ) );
266 currentSubfolder.
AddBinsD( (*it)->getNbinsX(),
getEmptyMetric((*it)->getTProfile()->GetArray(), (*it)->getTProfile()->fN, 0, 0) );
267 curr->
update( (*it)->getNbinsX(),
getEmptyMetric((*it)->getTProfile()->GetArray(), (*it)->getTProfile()->fN, 0, 0), (*it)->getNbinsX()*
sizeof( double ) );
272 currentSubfolder.
AddBinsF( (*it)->getNbinsX() * (*it)->getNbinsY(),
getEmptyMetric((*it)->getTH2F()->GetArray(), (*it)->getNbinsX()+2, (*it)->getNbinsY()+2, 0) );
273 curr->
update( (*it)->getNbinsX() * (*it)->getNbinsY(),
getEmptyMetric((*it)->getTH2F()->GetArray(), (*it)->getNbinsX()+2, (*it)->getNbinsY()+2, 0), (*it)->getNbinsX() * (*it)->getNbinsY()*
sizeof(
float) );
276 currentSubfolder.
AddBinsS( (*it)->getNbinsX() * (*it)->getNbinsY(),
getEmptyMetric((*it)->getTH2S()->GetArray(), (*it)->getNbinsX()+2, (*it)->getNbinsY()+2, 0) );
277 curr->
update( (*it)->getNbinsX() * (*it)->getNbinsY(),
getEmptyMetric((*it)->getTH2S()->GetArray(), (*it)->getNbinsX()+2, (*it)->getNbinsY()+2, 0), (*it)->getNbinsX() * (*it)->getNbinsY()*
sizeof(short) );
280 currentSubfolder.
AddBinsD( (*it)->getNbinsX() * (*it)->getNbinsY(),
getEmptyMetric((*it)->getTH2D()->GetArray(), (*it)->getNbinsX()+2, (*it)->getNbinsY()+2, 0) );
281 curr->
update( (*it)->getNbinsX() * (*it)->getNbinsY(),
getEmptyMetric((*it)->getTH2D()->GetArray(), (*it)->getNbinsX()+2, (*it)->getNbinsY()+2, 0), (*it)->getNbinsX() * (*it)->getNbinsY()*
sizeof(double) );
284 currentSubfolder.
AddBinsD( (*it)->getNbinsX() * (*it)->getNbinsY(),
getEmptyMetric((*it)->getTProfile2D()->GetArray(), (*it)->getNbinsX()+2, (*it)->getNbinsY()+2, 0) );
285 curr->
update( (*it)->getNbinsX() * (*it)->getNbinsY(),
getEmptyMetric((*it)->getTProfile2D()->GetArray(), (*it)->getNbinsX()+2, (*it)->getNbinsY()+2, 0), (*it)->getNbinsX() * (*it)->getNbinsY()*
sizeof(double) );
290 currentSubfolder.
AddBinsF( (*it)->getNbinsX() * (*it)->getNbinsY() * (*it)->getNbinsZ(),
getEmptyMetric( (*it)->getTH3F()->GetArray(), (*it)->getNbinsX()+2, (*it)->getNbinsY()+2, (*it)->getNbinsZ()+2 ) );
291 curr->
update( (*it)->getNbinsX() * (*it)->getNbinsY() * (*it)->getNbinsZ(),
292 getEmptyMetric( (*it)->getTH3F()->GetArray(), (*it)->getNbinsX()+2, (*it)->getNbinsY()+2, (*it)->getNbinsZ()+2 ),
293 (*it)->getNbinsX() * (*it)->getNbinsY() * (*it)->getNbinsZ()*
sizeof(
float));
312 std::cout <<
"===========================================================================================" << std::endl;
313 std::cout <<
"[DQMStoreStats::calcstats] -- Dumping stats results ";
316 std::cout <<
"===========================================================================================" << std::endl;
319 std::cout <<
"------------------------------------------------------------------------------------------" << std::endl;
320 std::cout <<
"Configuration:" << std::endl;
321 std::cout <<
"------------------------------------------------------------------------------------------" << std::endl;
331 std::cout <<
"------------------------------------------------------------------------------------------" << std::endl;
332 std::cout <<
"Top level folder tree:" << std::endl;
333 std::cout <<
"------------------------------------------------------------------------------------------" << std::endl;
334 for( DQMStoreStatsTopLevel::const_iterator it0 = dqmStoreStatsTopLevel.begin(); it0 < dqmStoreStatsTopLevel.end(); ++it0 ) {
335 std::cout << it0->subsystemName_ <<
" (subsystem)" << std::endl;
337 for( DQMStoreStatsSubsystem::const_iterator it1 = it0->begin(); it1 < it0->end(); ++it1 ) {
338 std::cout <<
" |--> " << it1->subfolderName_ <<
" (subfolder)" << std::endl;
345 unsigned int overallNHistograms = 0, overallNBins = 0, overallNEmptyBins = 0, overallNBytes = 0;
348 std::cout <<
"------------------------------------------------------------------------------------------" << std::endl;
349 std::cout <<
"Detailed ressource usage information ";
352 std::cout <<
"------------------------------------------------------------------------------------------" << std::endl;
353 std::cout <<
"subsystem/folder histograms bins Empty bins Empty/Total bins per MB kB per" << std::endl;
354 std::cout <<
" (total) (total) (total) histogram (total) histogram " << std::endl;
355 std::cout <<
"------------------------------------------------------------------------------------------" << std::endl;
356 for( DQMStoreStatsTopLevel::const_iterator it0 = dqmStoreStatsTopLevel.begin(); it0 < dqmStoreStatsTopLevel.end(); ++it0 ) {
357 std::cout << it0->subsystemName_ << std::endl;
359 unsigned int nHistograms = 0, nBins = 0, nEmptyBins = 0, nBytes = 0;
361 for( DQMStoreStatsSubsystem::const_iterator it1 = it0->begin(); it1 < it0->end(); ++it1 ) {
364 std::string thisSubfolderName( it1->subfolderName_ );
365 if( thisSubfolderName.size() > 30 ) {
366 thisSubfolderName.resize( 30 );
367 thisSubfolderName.replace( thisSubfolderName.size() - 3, 3, 3,
'.' );
370 std::cout <<
" -> " << std::setw( 30 ) << std::left << thisSubfolderName;
371 std::cout << std::setw( 14 ) << std::right << it1->totalHistos_;
372 std::cout << std::setw( 14 ) << std::right << it1->totalBins_;
373 std::cout << std::setw( 14 ) << std::right << it1->totalEmptyBins_;
374 std::cout << std::setw( 14 ) << std::right << std::setprecision( 3 ) << (
float)it1->totalEmptyBins_/(
float)it1->totalBins_;
377 if( it1->totalHistos_ ) {
378 std::cout << std::setw( 14 ) << std::right << std::setprecision( 3 ) << it1->totalBins_ /
float( it1->totalHistos_ );
380 else std::cout << std::setw( 14 ) << std::right <<
"-";
382 std::cout << std::setw( 14 ) << std::right << std::setprecision( 3 ) << it1->totalMemory_ / 1024. / 1024.;
385 if( it1->totalHistos_ ) {
386 std::cout << std::setw( 14 ) << std::right << std::setprecision( 3 ) << it1->totalMemory_ / 1024. / it1->totalHistos_;
388 else std::cout << std::setw( 14 ) << std::right <<
"-";
393 nHistograms += it1->totalHistos_;
394 nBins += it1->totalBins_;
395 nEmptyBins += it1->totalEmptyBins_;
396 nBytes += it1->totalMemory_;
403 overallNHistograms += nHistograms;
404 overallNBins += nBins;
405 overallNEmptyBins += nEmptyBins;
406 overallNBytes += nBytes;
409 std::cout <<
" " << std::setw( 30 ) << std::left <<
"SUBSYSTEM TOTAL";
410 std::cout << std::setw( 14 ) << std::right << nHistograms;
411 std::cout << std::setw( 14 ) << std::right << nBins;
412 std::cout << std::setw( 14 ) << std::right << nEmptyBins;
413 std::cout << std::setw( 14 ) << std::right << (
float)nEmptyBins/(
float)nBins;
414 std::
cout <<
std::setw( 14 ) <<
std::right <<
std::setprecision( 3 ) << nBins /
float( nHistograms );
415 std::
cout <<
std::setw( 14 ) <<
std::right <<
std::setprecision( 3 ) << nBytes / 1024. / 1000.;
416 std::
cout <<
std::setw( 14 ) <<
std::right <<
std::setprecision( 3 ) << nBytes / 1024. / nHistograms;
419 std::
cout << ".........................................................................................." <<
std::endl;
426 std::
cout << "------------------------------------------------------------------------------------------" <<
std::endl;
430 std::
cout << "------------------------------------------------------------------------------------------" <<
std::endl;
431 std::
cout << "Number of subsystems: " << dqmStoreStatsTopLevel.
size() <<
std::endl;
432 std::
cout << "Total number of
histograms: " << overallNHistograms << " with: " << overallNBins << "
bins alltogether" <<
std::endl;
438 std::
cout << "===========================================================================================" <<
std::endl;
442 std::
cout << "===========================================================================================" <<
std::endl;
455 std::map<std::string, std::string> jrInfo;
456 unsigned int overallNHistograms = 0, overallNBins = 0, overallNBytes = 0;
458 jrInfo[
"Source"] =
"DQMServices/Components";
459 jrInfo[
"FileClass"] =
"DQMStoreStats";
461 jrInfo[
"DumpType"] =
"EndRun";
463 jrInfo[
"DumpType"] =
"EndLumi";
465 jrInfo[
"DumpType"] =
"EndJob";
467 jrInfo[
"DumpType"] =
"EventLoop";
469 jrInfo[
"Type"] =
"RunProduct";
471 jrInfo[
"Type"] =
"LumiProduct";
476 for (DQMStoreStatsTopLevel::const_iterator it0 = dqmStoreStatsTopLevel.begin(); it0 < dqmStoreStatsTopLevel.end(); ++it0 )
478 unsigned int nHistograms = 0, nBins = 0, nEmptyBins = 0, nBytes = 0;
479 for( DQMStoreStatsSubsystem::const_iterator it1 = it0->begin(); it1 < it0->end(); ++it1 ) {
481 nHistograms += it1->totalHistos_;
482 nBins += it1->totalBins_;
483 nEmptyBins += it1->totalEmptyBins_;
484 nBytes += it1->totalMemory_;
486 overallNHistograms += nHistograms;
487 overallNBins += nBins;
488 overallNBytes += nBytes;
489 std::stringstream iss(
"");
491 jrInfo[it0->subsystemName_ +
std::string(
"_h")] = iss.str();
492 iss.str(
"");iss<<nBins;
493 jrInfo[it0->subsystemName_ +
std::string(
"_b")] = iss.str();
494 iss.str(
"");iss<<nEmptyBins;
495 jrInfo[it0->subsystemName_ +
std::string(
"_be")] = iss.str();
496 iss.str(
"");iss<< ((
float)nEmptyBins/(
float)nBins);
497 jrInfo[it0->subsystemName_ +
std::
string("_fbe")] = iss.
str();
498 iss.str("");iss<< ((
float)nBins/(
float)nHistograms);
499 jrInfo[it0->subsystemName_ +
std::
string("_b_h")] = iss.str();
500 iss.str("");iss<<nBytes / 1024. / 1024.;
501 jrInfo[it0->subsystemName_ +
std::
string("_MB")] = iss.str();
502 iss.str("");iss<<nBytes / 1024. / nHistograms;
503 jrInfo[it0->subsystemName_ +
std::
string("_Kb_h")] = iss.str();
505 jr->reportAnalysisFile("DQMStatsReport", jrInfo);
std::string subfolderName_
void AddBinsS(unsigned int nBins, unsigned int nEmptyBins)
void update(unsigned int bins, unsigned int empty, unsigned int memory)
void AddBinsD(unsigned int nBins, unsigned int nEmptyBins)
std::string subsystemName_
def ALL(dt, wheel, station, sector)
std::string pathnamematch_
static unsigned int getEmptyMetric(T *array, int lenx, int leny, int lenz)
Folder * cd(const std::string &name)
return(e1-e2)*(e1-e2)+dp *dp
void AddBinsF(unsigned int nBins, unsigned int nEmptyBins)
void calcIgProfDump(Folder &)