46 CalculateTimeDifference();
51void FairRunInfo::GetInfo()
56 fTime.push_back(fTimeStamp.AsDouble());
58 gSystem->GetProcInfo(&fProcInfo);
59 fResidentMemory.push_back(fProcInfo.fMemResident / 1024);
60 fVirtualMemory.push_back(fProcInfo.fMemVirtual / 1024);
63void FairRunInfo::CalculateTimeDifference()
67 Int_t lastElement = fTime.size() - 1;
68 fTimeDiff.push_back(fTime.at(lastElement) - fTime.at(lastElement - 1));
71void FairRunInfo::PrintInfo()
74 LOG(
debug) <<
"Time to execute 1 event: " << fTimeDiff.back() <<
"s";
75 LOG(
debug) <<
"Used resident memory: " << fResidentMemory.back() <<
" MB";
76 LOG(
debug) <<
"Used virtual memory: " << fVirtualMemory.back() <<
" MB";
81 TList* histoList =
new TList();
82 CreateAndFillHistograms(histoList);
84 WriteHistosToFile(histoList);
87void FairRunInfo::CreateAndFillHistograms(TList* histoList)
90 Double_t timePeriod = fTime.back() - fTime.front();
91 Int_t timeBins =
static_cast<Int_t
>(timePeriod * 10);
95 TH1F* ResidentMemoryVsEvent =
new TH1F(
96 "ResidentMemoryVsEvent",
"Resident Memory as function of Eventnumber;Event;Memory [MB]",
entries, 0,
entries);
97 TH1F* VirtualMemoryVsEvent =
new TH1F(
98 "VirtualMemoryVsEvent",
"Virtual Memory as function of Eventnumber;Event;Memory [MB]",
entries, 0,
entries);
99 TH1F* ResidentMemoryVsTime =
new TH1F(
100 "ResidentMemoryVsTime",
"Resident memory as function of Runtime;Time [s];Memory [MB]", timeBins, 0, timeBins);
101 TH1F* VirtualMemoryVsTime =
new TH1F(
102 "VirtualMemoryVsTime",
"Virtual memory as function of Runtime;Time [s];Memory [MB]", timeBins, 0, timeBins);
103 TH1F* EventtimeVsEvent =
new TH1F(
104 "EventtimeVsEvent",
"Runtime per Event as function of Event number;Event;Time [s]",
entries - 1, 1,
entries);
106 std::vector<Double_t> timeDiffSorted(fTimeDiff);
107 std::vector<Double_t>::iterator it;
108 std::sort(timeDiffSorted.begin(), timeDiffSorted.end());
110 Double_t minTime = timeDiffSorted.front();
111 Double_t maxTime = timeDiffSorted.back();
112 timePeriod = maxTime - minTime;
114 TH1F* TimePerEvent =
new TH1F(
"TimePerEvent",
115 "Runtime;Time [s];Events",
116 static_cast<Int_t
>((timePeriod + 20) * 10),
117 static_cast<Int_t
>(minTime - 10),
118 static_cast<Int_t
>(maxTime + 10));
121 std::vector<Long_t>::iterator lit;
122 Double_t timeOffset = fTime.front() + 1.;
123 for (lit = fResidentMemory.begin(); lit < fResidentMemory.end(); ++lit) {
124 ResidentMemoryVsEvent->Fill(
counter, *lit);
125 ResidentMemoryVsTime->Fill(fTime.at(
counter) - timeOffset, *lit);
128 histoList->AddLast(ResidentMemoryVsEvent);
129 histoList->AddLast(ResidentMemoryVsTime);
132 for (lit = fVirtualMemory.begin(); lit < fVirtualMemory.end(); ++lit) {
133 VirtualMemoryVsEvent->Fill(
counter, *lit);
134 VirtualMemoryVsTime->Fill(fTime.at(
counter) - timeOffset, *lit);
137 histoList->AddLast(VirtualMemoryVsEvent);
138 histoList->AddLast(VirtualMemoryVsTime);
141 for (it = fTimeDiff.begin(); it < fTimeDiff.end(); ++it) {
142 TimePerEvent->Fill(*it);
143 EventtimeVsEvent->Fill(
counter, *it);
146 histoList->AddLast(TimePerEvent);
147 histoList->AddLast(EventtimeVsEvent);
150void FairRunInfo::WriteHistosToFile(TList* histoList)
156 TFile* oldfile = gFile;
158 TString directory = gFile->GetName();
159 LOG(
debug) <<
"Name: " << gFile->GetName();
160 Ssiz_t posLastSlash = directory.Last(
'/');
161 directory.Remove(posLastSlash + 1, directory.Length() - posLastSlash - 1);
163 if (directory.EndsWith(
"/")) {
167 directory = gFile->GetName();
168 LOG(
debug) <<
"Name: " << directory.Data();
169 posLastSlash = directory.Last(
'/');
170 directory.Remove(0, posLastSlash + 1);
171 directory.ReplaceAll(
".root",
"");
172 LOG(
debug) <<
"Name: " << directory.Data();
180 TFile*
f1 = TFile::Open(
filename,
"recreate");
183 TIterator* listIter = histoList->MakeIterator();
186 while ((obj = listIter->Next())) {
std::vector< long > entries
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"