532 size_t subsysStringEnd = 0, subfolderStringBegin = 0, subfolderStringEnd = 0;
534 std::vector<MonitorElement*> melist;
541 for (
auto& it : melist) {
549 subfolderStringBegin = 0;
550 Folder* curr = &dbeFolder;
552 subfolderStringEnd =
path.find(
'/', subfolderStringBegin);
553 if (std::string::npos == subfolderStringEnd) {
554 curr = curr->
cd(
path.substr(subfolderStringBegin,
path.size() - subfolderStringBegin));
557 curr = curr->
cd(
path.substr(subfolderStringBegin, subfolderStringEnd - subfolderStringBegin));
558 subfolderStringBegin = ++subfolderStringEnd <
path.size() ? subfolderStringEnd :
path.size();
565 subsysStringEnd =
path.find(
'/', 0);
566 if (std::string::npos == subsysStringEnd)
567 subsysStringEnd =
path.size();
570 if (
path.substr(0, subsysStringEnd) != subsystemname) {
572 subsystemname =
path.substr(0, subsysStringEnd);
574 dqmStoreStatsTopLevel.push_back(aSubsystem);
579 if (
path.size() == subsysStringEnd) {
583 dqmStoreStatsTopLevel.back().push_back(aSubfolder);
588 subfolderStringEnd =
path.find(
'/', subsysStringEnd + 1);
589 if (std::string::npos == subfolderStringEnd)
590 subfolderStringEnd =
path.size();
593 if (
path.substr(subsysStringEnd + 1, subfolderStringEnd - subsysStringEnd - 1) != subfoldername) {
594 subfoldername =
path.substr(subsysStringEnd + 1, subfolderStringEnd - subsysStringEnd - 1);
597 dqmStoreStatsTopLevel.back().push_back(aSubfolder);
604 switch (it->kind()) {
607 currentSubfolder.
AddBinsF(it->getNbinsX(),
getEmptyMetric(it->getTH1F()->GetArray(), it->getTH1F()->fN, 0, 0));
608 curr->
update(it->getNbinsX(),
609 getEmptyMetric(it->getTH1F()->GetArray(), it->getTH1F()->fN, 0, 0),
610 it->getNbinsX() *
sizeof(
float));
613 currentSubfolder.
AddBinsS(it->getNbinsX(),
getEmptyMetric(it->getTH1S()->GetArray(), it->getTH1S()->fN, 0, 0));
614 curr->
update(it->getNbinsX(),
615 getEmptyMetric(it->getTH1S()->GetArray(), it->getTH1S()->fN, 0, 0),
616 it->getNbinsX() *
sizeof(short));
619 currentSubfolder.
AddBinsD(it->getNbinsX(),
getEmptyMetric(it->getTH1D()->GetArray(), it->getTH1D()->fN, 0, 0));
620 curr->
update(it->getNbinsX(),
621 getEmptyMetric(it->getTH1D()->GetArray(), it->getTH1D()->fN, 0, 0),
622 it->getNbinsX() *
sizeof(double));
625 currentSubfolder.
AddBinsI(it->getNbinsX(),
getEmptyMetric(it->getTH1I()->GetArray(), it->getTH1I()->fN, 0, 0));
626 curr->
update(it->getNbinsX(),
627 getEmptyMetric(it->getTH1I()->GetArray(), it->getTH1I()->fN, 0, 0),
628 it->getNbinsX() *
sizeof(
int));
631 currentSubfolder.
AddBinsD(it->getNbinsX(),
632 getEmptyMetric(it->getTProfile()->GetArray(), it->getTProfile()->fN, 0, 0));
633 curr->
update(it->getNbinsX(),
634 getEmptyMetric(it->getTProfile()->GetArray(), it->getTProfile()->fN, 0, 0),
635 it->getNbinsX() *
sizeof(double));
641 it->getNbinsX() * it->getNbinsY(),
642 getEmptyMetric(it->getTH2F()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0));
643 curr->
update(it->getNbinsX() * it->getNbinsY(),
644 getEmptyMetric(it->getTH2F()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0),
645 it->getNbinsX() * it->getNbinsY() *
sizeof(
float));
649 it->getNbinsX() * it->getNbinsY(),
650 getEmptyMetric(it->getTH2S()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0));
651 curr->
update(it->getNbinsX() * it->getNbinsY(),
652 getEmptyMetric(it->getTH2S()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0),
653 it->getNbinsX() * it->getNbinsY() *
sizeof(short));
657 it->getNbinsX() * it->getNbinsY(),
658 getEmptyMetric(it->getTH2D()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0));
659 curr->
update(it->getNbinsX() * it->getNbinsY(),
660 getEmptyMetric(it->getTH2D()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0),
661 it->getNbinsX() * it->getNbinsY() *
sizeof(double));
665 it->getNbinsX() * it->getNbinsY(),
666 getEmptyMetric(it->getTH2I()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0));
667 curr->
update(it->getNbinsX() * it->getNbinsY(),
668 getEmptyMetric(it->getTH2I()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0),
669 it->getNbinsX() * it->getNbinsY() *
sizeof(
int));
673 it->getNbinsX() * it->getNbinsY(),
674 getEmptyMetric(it->getTProfile2D()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0));
675 curr->
update(it->getNbinsX() * it->getNbinsY(),
676 getEmptyMetric(it->getTProfile2D()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, 0),
677 it->getNbinsX() * it->getNbinsY() *
sizeof(double));
683 it->getNbinsX() * it->getNbinsY() * it->getNbinsZ(),
684 getEmptyMetric(it->getTH3F()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, it->getNbinsZ() + 2));
686 it->getNbinsX() * it->getNbinsY() * it->getNbinsZ(),
687 getEmptyMetric(it->getTH3F()->GetArray(), it->getNbinsX() + 2, it->getNbinsY() + 2, it->getNbinsZ() + 2),
688 it->getNbinsX() * it->getNbinsY() * it->getNbinsZ() *
sizeof(
float));
708 std::cout <<
"===========================================================================================" 710 std::cout <<
"[DQMStoreStats::calcstats] -- Dumping stats results ";
714 std::cout <<
"FOR LUMI PRODUCTS ONLY" << std::endl;
715 std::cout <<
"===========================================================================================" 719 std::cout <<
"------------------------------------------------------------------------------------------" 721 std::cout <<
"Configuration:" << std::endl;
722 std::cout <<
"------------------------------------------------------------------------------------------" 728 std::cout <<
"on lumi end." << std::endl;
732 std::cout <<
"in event loop." << std::endl;
737 std::cout <<
"------------------------------------------------------------------------------------------" 739 std::cout <<
"Top level folder tree:" << std::endl;
740 std::cout <<
"------------------------------------------------------------------------------------------" 742 for (
auto it0 = dqmStoreStatsTopLevel.begin(); it0 < dqmStoreStatsTopLevel.end(); ++it0) {
743 std::cout << it0->subsystemName_ <<
" (subsystem)" << std::endl;
745 for (
auto it1 = it0->begin(); it1 < it0->end(); ++it1) {
746 std::cout <<
" |--> " << it1->subfolderName_ <<
" (subfolder)" << std::endl;
752 unsigned int overallNHistograms = 0, overallNBins = 0, overallNEmptyBins = 0, overallNBytes = 0;
755 std::cout <<
"------------------------------------------------------------------------------------------" 757 std::cout <<
"Detailed ressource usage information ";
761 std::cout <<
"FOR LUMI PRODUCTS ONLY" << std::endl;
762 std::cout <<
"------------------------------------------------------------------------------------------" 764 std::cout <<
"subsystem/folder histograms bins Empty bins Empty/Total " 768 "histogram (total) histogram " 770 std::cout <<
"------------------------------------------------------------------------------------------" 772 for (
auto it0 = dqmStoreStatsTopLevel.begin(); it0 < dqmStoreStatsTopLevel.end(); ++it0) {
773 std::cout << it0->subsystemName_ << std::endl;
775 unsigned int nHistograms = 0,
nBins = 0, nEmptyBins = 0, nBytes = 0;
777 for (
auto it1 = it0->begin(); it1 < it0->end(); ++it1) {
779 std::string thisSubfolderName(it1->subfolderName_);
780 if (thisSubfolderName.size() > 30) {
781 thisSubfolderName.resize(30);
782 thisSubfolderName.replace(thisSubfolderName.size() - 3, 3, 3,
'.');
785 std::cout <<
" -> " << std::setw(30) << std::left << thisSubfolderName;
786 std::cout << std::setw(14) << std::right << it1->totalHistos_;
787 std::cout << std::setw(14) << std::right << it1->totalBins_;
788 std::cout << std::setw(14) << std::right << it1->totalEmptyBins_;
789 std::cout << std::setw(14) << std::right << std::setprecision(3)
790 << (
float)it1->totalEmptyBins_ / (
float)it1->totalBins_;
793 if (it1->totalHistos_) {
794 std::cout << std::setw(14) << std::right << std::setprecision(3) << it1->totalBins_ /
float(it1->totalHistos_);
796 std::cout << std::setw(14) << std::right <<
"-";
798 std::cout << std::setw(14) << std::right << std::setprecision(3) << it1->totalMemory_ / 1024. / 1024.;
801 if (it1->totalHistos_) {
802 std::cout << std::setw(14) << std::right << std::setprecision(3)
803 << it1->totalMemory_ / 1024. / it1->totalHistos_;
805 std::cout << std::setw(14) << std::right <<
"-";
810 nHistograms += it1->totalHistos_;
811 nBins += it1->totalBins_;
812 nEmptyBins += it1->totalEmptyBins_;
813 nBytes += it1->totalMemory_;
816 overallNHistograms += nHistograms;
817 overallNBins +=
nBins;
818 overallNEmptyBins += nEmptyBins;
819 overallNBytes += nBytes;
822 std::cout <<
" " << std::setw(30) << std::left <<
"SUBSYSTEM TOTAL";
823 std::cout << std::setw(14) << std::right << nHistograms;
825 std::cout << std::setw(14) << std::right << nEmptyBins;
827 std::cout << std::setw(14) << std::right << std::setprecision(3) <<
nBins /
float(nHistograms);
828 std::cout << std::setw(14) << std::right << std::setprecision(3) << nBytes / 1024. / 1000.;
829 std::cout << std::setw(14) << std::right << std::setprecision(3) << nBytes / 1024. / nHistograms;
832 std::cout <<
".........................................................................................." 838 std::cout <<
"------------------------------------------------------------------------------------------" 844 std::cout <<
"FOR LUMI PRODUCTS ONLY:" << std::endl;
845 std::cout <<
"------------------------------------------------------------------------------------------" 847 std::cout <<
"Number of subsystems: " << dqmStoreStatsTopLevel.size() << std::endl;
848 std::cout <<
"Total number of histograms: " << overallNHistograms <<
" with: " << overallNBins <<
" bins alltogether" 850 std::cout <<
"Total memory occupied by histograms (excl. overhead): " << overallNBytes / 1024. / 1000. <<
" MB" 854 std::cout <<
"===========================================================================================" 856 std::cout <<
"[DQMStoreStats::calcstats] -- End of output ";
860 std::cout <<
"FOR LUMI PRODUCTS ONLY." << std::endl;
861 std::cout <<
"===========================================================================================" 874 std::map<std::string, std::string> jrInfo;
875 unsigned int overallNHistograms = 0, overallNBins = 0, overallNBytes = 0;
877 jrInfo[
"Source"] =
"DQMServices/Components";
878 jrInfo[
"FileClass"] =
"DQMStoreStats";
880 jrInfo[
"DumpType"] =
"EndRun";
882 jrInfo[
"DumpType"] =
"EndLumi";
884 jrInfo[
"DumpType"] =
"EndJob";
886 jrInfo[
"DumpType"] =
"EventLoop";
888 jrInfo[
"Type"] =
"RunProduct";
890 jrInfo[
"Type"] =
"LumiProduct";
894 for (
auto it0 = dqmStoreStatsTopLevel.begin(); it0 < dqmStoreStatsTopLevel.end(); ++it0) {
895 unsigned int nHistograms = 0,
nBins = 0, nEmptyBins = 0, nBytes = 0;
896 for (
auto it1 = it0->begin(); it1 < it0->end(); ++it1) {
898 nHistograms += it1->totalHistos_;
899 nBins += it1->totalBins_;
900 nEmptyBins += it1->totalEmptyBins_;
901 nBytes += it1->totalMemory_;
903 overallNHistograms += nHistograms;
904 overallNBins +=
nBins;
905 overallNBytes += nBytes;
906 std::stringstream iss(
"");
908 jrInfo[it0->subsystemName_ +
std::string(
"_h")] = iss.str();
911 jrInfo[it0->subsystemName_ +
std::string(
"_b")] = iss.str();
914 jrInfo[it0->subsystemName_ +
std::string(
"_be")] = iss.str();
917 jrInfo[it0->subsystemName_ +
std::string(
"_fbe")] = iss.str();
920 jrInfo[it0->subsystemName_ +
std::string(
"_b_h")] = iss.str();
922 iss << nBytes / 1024. / 1024.;
923 jrInfo[it0->subsystemName_ +
std::string(
"_MB")] = iss.str();
925 iss << nBytes / 1024. / nHistograms;
926 jrInfo[it0->subsystemName_ +
std::string(
"_Kb_h")] = iss.str();
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)
void AddBinsI(unsigned int nBins, unsigned int nEmptyBins)
std::string subsystemName_
virtual std::vector< dqm::harvesting::MonitorElement * > getAllContents(std::string const &path) const
std::string pathnamematch_
static unsigned int getEmptyMetric(T *array, int lenx, int leny, int lenz)
Folder * cd(const std::string &name)
void AddBinsF(unsigned int nBins, unsigned int nEmptyBins)
void reportAnalysisFile(std::string const &fileName, std::map< std::string, std::string > const &fileData)
void calcIgProfDump(Folder &)