Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-10-15 08:24:59

0001 #include "Fun4AllMemoryHistograms.h"
0002 
0003 #include "Fun4AllHistoManager.h"
0004 #include "Fun4AllUtils.h"
0005 
0006 #include <TH1.h>
0007 #include <TSystem.h>
0008 
0009 #include <iostream>
0010 #include <utility>  // for pair, make_pair
0011 
0012 Fun4AllMemoryHistograms *Fun4AllMemoryHistograms::mInstance {nullptr};
0013 
0014 Fun4AllMemoryHistograms::Fun4AllMemoryHistograms()
0015   : Fun4AllBase("Fun4AllMemoryHistograms")
0016 {
0017 }
0018 
0019 void Fun4AllMemoryHistograms::FillHistos()
0020 {
0021   if (! m_Enabled)
0022   {
0023     return;
0024   }
0025   if (! m_HistosCreated)
0026   {
0027     CreateHistos();
0028   }
0029 
0030   Fun4AllUtils::memoryvals mymem;
0031   Fun4AllUtils::GetMemory(mymem);
0032   if (m_EventCount >= m_NumChannels)
0033   {
0034     increase_TH1_channelcount();
0035   }
0036   int EventCountPlus1 = m_EventCount+1; // histos start at channel 1 ....
0037   m_histovector[0]->SetBinContent(EventCountPlus1,mymem.arena);
0038   m_histovector[1]->SetBinContent(EventCountPlus1,mymem.uordblks);
0039   m_histovector[2]->SetBinContent(EventCountPlus1,mymem.fordblks);
0040   m_histovector[3]->SetBinContent(EventCountPlus1,mymem.hblkhd);
0041   m_histovector[4]->SetBinContent(EventCountPlus1,mymem.VmHWM);
0042   m_histovector[5]->SetBinContent(EventCountPlus1,mymem.VmRSS);
0043   m_EventCount++;
0044 }
0045 
0046 void Fun4AllMemoryHistograms::SaveHistos(const std::string &fname)
0047 {
0048   if (! m_Enabled)
0049   {
0050     return;
0051   }
0052   Fun4AllHistoManager *hm = new Fun4AllHistoManager("MEMHISTOS");
0053   for (auto *iter : m_histovector)
0054   {
0055     hm->registerHisto(iter);
0056   }
0057   hm->dumpHistos(fname);
0058   return;
0059 }
0060 
0061 void Fun4AllMemoryHistograms::increase_TH1_channelcount()
0062 {
0063   m_NumChannels += 10000;
0064   float m_Range = m_NumChannels + 0.5;
0065   for (TH1* histo : m_histovector)
0066   {
0067     const int old_nbins = histo->GetNbinsX();
0068     std::vector<double> old_content(old_nbins + 2);
0069 // TH1::SetBins wipes the content, so we need to save it
0070     for (int bin = 0; bin <= old_nbins + 1; ++bin)
0071     {
0072       old_content[bin] = histo->GetBinContent(bin);
0073     }
0074 
0075     histo->SetBins(m_NumChannels, 0.5, m_Range);  // set number of bins which wipes the old histo content
0076 
0077 // and then restore it
0078     for (int bin = 0; bin <= old_nbins + 1; ++bin)
0079     {
0080       histo->SetBinContent(bin, old_content[bin]);
0081     }
0082   }
0083   return;
0084 }
0085 
0086 void Fun4AllMemoryHistograms::CreateHistos()
0087 {
0088   float m_Range = m_NumChannels + 0.5;
0089   TH1 *arena = new TH1D("arena","arena size",m_NumChannels,0.5,m_Range);
0090   m_histovector.push_back(arena);
0091   TH1 *uordblks = new TH1D("uordblks","uordblks size",m_NumChannels,0.5,m_Range);
0092   m_histovector.push_back(uordblks);
0093   TH1 *fordblks = new TH1D("fordblks","fordblks size",m_NumChannels,0.5,m_Range);
0094   m_histovector.push_back(fordblks);
0095   TH1 *hblkhd = new TH1D("hblkhd","hblkhd size",m_NumChannels,0.5,m_Range);
0096   m_histovector.push_back(hblkhd);
0097   TH1 *VmHWM = new TH1D("VmHWM","VmHWM size",m_NumChannels,0.5,m_Range);
0098   m_histovector.push_back(VmHWM);
0099   TH1 *VmRSS = new TH1D("VmRSS","VmRSS size",m_NumChannels,0.5,m_Range);
0100   m_histovector.push_back(VmRSS);
0101   m_HistosCreated = true;
0102 }