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()) {
610 it->getNbinsX() *
sizeof(
float));
616 it->getNbinsX() *
sizeof(short));
622 it->getNbinsX() *
sizeof(double));
628 it->getNbinsX() *
sizeof(
int));
635 it->getNbinsX() *
sizeof(double));
641 it->getNbinsX() *
it->getNbinsY(),
643 curr->
update(
it->getNbinsX() *
it->getNbinsY(),
645 it->getNbinsX() *
it->getNbinsY() *
sizeof(
float));
649 it->getNbinsX() *
it->getNbinsY(),
651 curr->
update(
it->getNbinsX() *
it->getNbinsY(),
653 it->getNbinsX() *
it->getNbinsY() *
sizeof(short));
657 it->getNbinsX() *
it->getNbinsY(),
659 curr->
update(
it->getNbinsX() *
it->getNbinsY(),
661 it->getNbinsX() *
it->getNbinsY() *
sizeof(double));
665 it->getNbinsX() *
it->getNbinsY(),
667 curr->
update(
it->getNbinsX() *
it->getNbinsY(),
669 it->getNbinsX() *
it->getNbinsY() *
sizeof(
int));
673 it->getNbinsX() *
it->getNbinsY(),
675 curr->
update(
it->getNbinsX() *
it->getNbinsY(),
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(),
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, 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 overallNBytes += nBytes;
821 std::cout <<
" " << std::setw(30) << std::left <<
"SUBSYSTEM TOTAL";
822 std::cout << std::setw(14) << std::right << nHistograms;
824 std::cout << std::setw(14) << std::right << nEmptyBins;
826 std::cout << std::setw(14) << std::right << std::setprecision(3) <<
nBins /
float(nHistograms);
827 std::cout << std::setw(14) << std::right << std::setprecision(3) << nBytes / 1024. / 1000.;
828 std::cout << std::setw(14) << std::right << std::setprecision(3) << nBytes / 1024. / nHistograms;
831 std::cout <<
".........................................................................................." 837 std::cout <<
"------------------------------------------------------------------------------------------" 843 std::cout <<
"FOR LUMI PRODUCTS ONLY:" << std::endl;
844 std::cout <<
"------------------------------------------------------------------------------------------" 846 std::cout <<
"Number of subsystems: " << dqmStoreStatsTopLevel.size() << std::endl;
847 std::cout <<
"Total number of histograms: " << overallNHistograms <<
" with: " << overallNBins <<
" bins alltogether" 849 std::cout <<
"Total memory occupied by histograms (excl. overhead): " << overallNBytes / 1024. / 1000. <<
" MB" 853 std::cout <<
"===========================================================================================" 855 std::cout <<
"[DQMStoreStats::calcstats] -- End of output ";
859 std::cout <<
"FOR LUMI PRODUCTS ONLY." << std::endl;
860 std::cout <<
"===========================================================================================" 873 std::map<std::string, std::string> jrInfo;
875 jrInfo[
"Source"] =
"DQMServices/Components";
876 jrInfo[
"FileClass"] =
"DQMStoreStats";
878 jrInfo[
"DumpType"] =
"EndRun";
880 jrInfo[
"DumpType"] =
"EndLumi";
882 jrInfo[
"DumpType"] =
"EndJob";
884 jrInfo[
"DumpType"] =
"EventLoop";
886 jrInfo[
"Type"] =
"RunProduct";
888 jrInfo[
"Type"] =
"LumiProduct";
892 for (
auto it0 = dqmStoreStatsTopLevel.begin(); it0 < dqmStoreStatsTopLevel.end(); ++it0) {
893 unsigned int nHistograms = 0,
nBins = 0, nEmptyBins = 0, nBytes = 0;
894 for (
auto it1 = it0->begin(); it1 < it0->end(); ++it1) {
896 nHistograms += it1->totalHistos_;
897 nBins += it1->totalBins_;
898 nEmptyBins += it1->totalEmptyBins_;
899 nBytes += it1->totalMemory_;
901 std::stringstream iss(
"");
903 jrInfo[it0->subsystemName_ +
std::string(
"_h")] = iss.str();
906 jrInfo[it0->subsystemName_ +
std::string(
"_b")] = iss.str();
909 jrInfo[it0->subsystemName_ +
std::string(
"_be")] = iss.str();
912 jrInfo[it0->subsystemName_ +
std::string(
"_fbe")] = iss.str();
915 jrInfo[it0->subsystemName_ +
std::string(
"_b_h")] = iss.str();
917 iss << nBytes / 1024. / 1024.;
918 jrInfo[it0->subsystemName_ +
std::string(
"_MB")] = iss.str();
920 iss << nBytes / 1024. / nHistograms;
921 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 &)