#include "AliAnalysisStatistics.h"
#include "Riostream.h"
#include "TObjArray.h"
#include "TStopwatch.h"
#include "AliVEvent.h"
using std::cout;
using std::endl;
ClassImp(AliAnalysisStatistics)
AliAnalysisStatistics::AliAnalysisStatistics(const AliAnalysisStatistics &other)
:TNamed(other),
fNinput(other.fNinput),
fNprocessed(other.fNprocessed),
fNfailed(other.fNfailed),
fNaccepted(other.fNaccepted),
fOfflineMask(other.fOfflineMask),
fMaxTasks(other.fMaxTasks),
fNtasks(other.fNtasks),
fCurrentTask(other.fCurrentTask),
fTaskTimeReal(0),
fTaskTimeCPU(0),
fTaskNames(0),
fTaskTimer(0)
{
if (fNtasks) {
fTaskTimer = new TStopwatch();
fTaskTimeReal = new Double_t[fMaxTasks];
memset(fTaskTimeReal, 0, fMaxTasks*sizeof(Double_t));
memcpy(fTaskTimeReal, other.fTaskTimeReal, fNtasks*sizeof(Double_t));
fTaskTimeCPU = new Double_t[fMaxTasks];
memset(fTaskTimeCPU, 0, fMaxTasks*sizeof(Double_t));
memcpy(fTaskTimeCPU, other.fTaskTimeCPU, fNtasks*sizeof(Double_t));
fTaskNames = new TObjArray(fMaxTasks);
for (Int_t i=0; i<fNtasks; i++) fTaskNames->AddAt(new TObjString(other.GetTaskName(i)), i);
}
}
AliAnalysisStatistics &AliAnalysisStatistics::operator=(const AliAnalysisStatistics &other)
{
if (&other == this) return *this;
fNinput = other.fNinput;
fNprocessed = other.fNprocessed;
fNfailed = other.fNfailed;
fNaccepted = other.fNaccepted;
fOfflineMask = other.fOfflineMask;
fMaxTasks = other.fMaxTasks;
fNtasks = other.fNtasks;
fCurrentTask = other.fCurrentTask;
fTaskTimeReal = 0;
fTaskTimeCPU = 0;
fTaskNames = 0;
fTaskTimer = 0;
if (fNtasks) {
fTaskTimer = new TStopwatch();
fTaskTimeReal = new Double_t[fMaxTasks];
memset(fTaskTimeReal, 0, fMaxTasks*sizeof(Double_t));
memcpy(fTaskTimeReal, other.fTaskTimeReal, fNtasks*sizeof(Double_t));
fTaskTimeCPU = new Double_t[fMaxTasks];
memset(fTaskTimeCPU, 0, fMaxTasks*sizeof(Double_t));
memcpy(fTaskTimeCPU, other.fTaskTimeCPU, fNtasks*sizeof(Double_t));
fTaskNames = new TObjArray(fMaxTasks);
for (Int_t i=0; i<fNtasks; i++) fTaskNames->AddAt(new TObjString(other.GetTaskName(i)), i);
}
return *this;
}
void AliAnalysisStatistics::StartTimer(Int_t itask, const char *name, const char *classname)
{
if (!fTaskTimer) {
if (!fMaxTasks) fMaxTasks = 100;
fTaskTimer = new TStopwatch();
fTaskTimeReal = new Double_t[fMaxTasks];
memset(fTaskTimeReal, 0, fMaxTasks*sizeof(Double_t));
fTaskTimeCPU = new Double_t[fMaxTasks];
memset(fTaskTimeCPU, 0, fMaxTasks*sizeof(Double_t));
fTaskNames = new TObjArray(fMaxTasks);
} else {
StopTimer();
}
if (fNtasks<itask+1) {
if (itask>=fMaxTasks) {
Int_t newsize = TMath::Max(2*fMaxTasks, itask+1);
Double_t *taskTimeReal = new Double_t[newsize];
memset(taskTimeReal, 0, newsize*sizeof(Double_t));
memcpy(taskTimeReal, fTaskTimeReal, fMaxTasks*sizeof(Double_t));
delete [] fTaskTimeReal;
fTaskTimeReal = taskTimeReal;
Double_t *taskTimeCPU = new Double_t[newsize];
memset(taskTimeCPU, 0, newsize*sizeof(Double_t));
memcpy(taskTimeCPU, fTaskTimeCPU, fMaxTasks*sizeof(Double_t));
delete [] fTaskTimeCPU;
fTaskTimeCPU = taskTimeCPU;
fMaxTasks = newsize;
}
fNtasks = itask+1;
}
fCurrentTask = itask;
if (!fTaskNames->At(fCurrentTask)) {
TString sname = name;
if (strlen(classname)) sname += Form("(%s)", classname);
fTaskNames->AddAt(new TObjString(sname), fCurrentTask);
}
fTaskTimer->Start(kTRUE);
}
void AliAnalysisStatistics::StopTimer()
{
if (fCurrentTask>=0) {
fTaskTimer->Stop();
fTaskTimeReal[fCurrentTask] += fTaskTimer->RealTime();
fTaskTimeCPU[fCurrentTask] += fTaskTimer->CpuTime();
fCurrentTask = -1;
}
}
Long64_t AliAnalysisStatistics::Merge(TCollection* list)
{
TIter next(list);
AliAnalysisStatistics *current;
Long64_t count = 1;
while ((current = (AliAnalysisStatistics*)next())) {
fNinput += current->GetNinput();
fNprocessed += current->GetNprocessed();
fNfailed += current->GetNfailed();
fNaccepted += current->GetNaccepted();
for (Int_t i=0; i<fNtasks; i++) {
fTaskTimeReal[i] += current->GetRealTime(i);
fTaskTimeCPU[i] += current->GetCPUTime(i);
}
}
return count;
}
void AliAnalysisStatistics::Print(const Option_t *) const
{
cout << "### Input events : " << fNinput << endl;
cout << "### Processed events w/o errors : " << fNprocessed << endl;
cout << "### Failed events : " << fNfailed << endl;
cout << "### Accepted events for mask: " << GetMaskAsString(fOfflineMask) << ": " << fNaccepted << endl;
if (fNtasks) {
cout << "Timing per task:" <<endl;
TString s;
for (Int_t i=0; i<fNtasks; i++) {
s = Form("%03d: real: %9.2f cpu: %9.2f => %s", i,fTaskTimeReal[i], fTaskTimeCPU[i], GetTaskName(i));
cout << s << endl;
}
}
}
const char *AliAnalysisStatistics::GetMaskAsString(UInt_t mask)
{
static TString smask;
smask = "ALL EVT.";
if (!mask) return smask.Data();
smask.Clear();
if (mask & AliVEvent::kMB) smask = "MB";
if (mask & AliVEvent::kMUON) {
if (!smask.IsNull()) smask += " | ";
smask += "MUON";
}
if (mask & AliVEvent::kHighMult) {
if (!smask.IsNull()) smask += " | ";
smask += "HighMult";
}
if (mask & AliVEvent::kUserDefined) {
if (!smask.IsNull()) smask += " | ";
smask += "UserDefined";
}
if (mask == AliVEvent::kAny) smask = "ANY";
return smask.Data();
}
const char *AliAnalysisStatistics::GetTaskName(Int_t itask) const
{
if (!fTaskNames || !fTaskNames->At(itask)) return 0;
return fTaskNames->At(itask)->GetName();
}
AliAnalysisStatistics.cxx:1 AliAnalysisStatistics.cxx:2 AliAnalysisStatistics.cxx:3 AliAnalysisStatistics.cxx:4 AliAnalysisStatistics.cxx:5 AliAnalysisStatistics.cxx:6 AliAnalysisStatistics.cxx:7 AliAnalysisStatistics.cxx:8 AliAnalysisStatistics.cxx:9 AliAnalysisStatistics.cxx:10 AliAnalysisStatistics.cxx:11 AliAnalysisStatistics.cxx:12 AliAnalysisStatistics.cxx:13 AliAnalysisStatistics.cxx:14 AliAnalysisStatistics.cxx:15 AliAnalysisStatistics.cxx:16 AliAnalysisStatistics.cxx:17 AliAnalysisStatistics.cxx:18 AliAnalysisStatistics.cxx:19 AliAnalysisStatistics.cxx:20 AliAnalysisStatistics.cxx:21 AliAnalysisStatistics.cxx:22 AliAnalysisStatistics.cxx:23 AliAnalysisStatistics.cxx:24 AliAnalysisStatistics.cxx:25 AliAnalysisStatistics.cxx:26 AliAnalysisStatistics.cxx:27 AliAnalysisStatistics.cxx:28 AliAnalysisStatistics.cxx:29 AliAnalysisStatistics.cxx:30 AliAnalysisStatistics.cxx:31 AliAnalysisStatistics.cxx:32 AliAnalysisStatistics.cxx:33 AliAnalysisStatistics.cxx:34 AliAnalysisStatistics.cxx:35 AliAnalysisStatistics.cxx:36 AliAnalysisStatistics.cxx:37 AliAnalysisStatistics.cxx:38 AliAnalysisStatistics.cxx:39 AliAnalysisStatistics.cxx:40 AliAnalysisStatistics.cxx:41 AliAnalysisStatistics.cxx:42 AliAnalysisStatistics.cxx:43 AliAnalysisStatistics.cxx:44 AliAnalysisStatistics.cxx:45 AliAnalysisStatistics.cxx:46 AliAnalysisStatistics.cxx:47 AliAnalysisStatistics.cxx:48 AliAnalysisStatistics.cxx:49 AliAnalysisStatistics.cxx:50 AliAnalysisStatistics.cxx:51 AliAnalysisStatistics.cxx:52 AliAnalysisStatistics.cxx:53 AliAnalysisStatistics.cxx:54 AliAnalysisStatistics.cxx:55 AliAnalysisStatistics.cxx:56 AliAnalysisStatistics.cxx:57 AliAnalysisStatistics.cxx:58 AliAnalysisStatistics.cxx:59 AliAnalysisStatistics.cxx:60 AliAnalysisStatistics.cxx:61 AliAnalysisStatistics.cxx:62 AliAnalysisStatistics.cxx:63 AliAnalysisStatistics.cxx:64 AliAnalysisStatistics.cxx:65 AliAnalysisStatistics.cxx:66 AliAnalysisStatistics.cxx:67 AliAnalysisStatistics.cxx:68 AliAnalysisStatistics.cxx:69 AliAnalysisStatistics.cxx:70 AliAnalysisStatistics.cxx:71 AliAnalysisStatistics.cxx:72 AliAnalysisStatistics.cxx:73 AliAnalysisStatistics.cxx:74 AliAnalysisStatistics.cxx:75 AliAnalysisStatistics.cxx:76 AliAnalysisStatistics.cxx:77 AliAnalysisStatistics.cxx:78 AliAnalysisStatistics.cxx:79 AliAnalysisStatistics.cxx:80 AliAnalysisStatistics.cxx:81 AliAnalysisStatistics.cxx:82 AliAnalysisStatistics.cxx:83 AliAnalysisStatistics.cxx:84 AliAnalysisStatistics.cxx:85 AliAnalysisStatistics.cxx:86 AliAnalysisStatistics.cxx:87 AliAnalysisStatistics.cxx:88 AliAnalysisStatistics.cxx:89 AliAnalysisStatistics.cxx:90 AliAnalysisStatistics.cxx:91 AliAnalysisStatistics.cxx:92 AliAnalysisStatistics.cxx:93 AliAnalysisStatistics.cxx:94 AliAnalysisStatistics.cxx:95 AliAnalysisStatistics.cxx:96 AliAnalysisStatistics.cxx:97 AliAnalysisStatistics.cxx:98 AliAnalysisStatistics.cxx:99 AliAnalysisStatistics.cxx:100 AliAnalysisStatistics.cxx:101 AliAnalysisStatistics.cxx:102 AliAnalysisStatistics.cxx:103 AliAnalysisStatistics.cxx:104 AliAnalysisStatistics.cxx:105 AliAnalysisStatistics.cxx:106 AliAnalysisStatistics.cxx:107 AliAnalysisStatistics.cxx:108 AliAnalysisStatistics.cxx:109 AliAnalysisStatistics.cxx:110 AliAnalysisStatistics.cxx:111 AliAnalysisStatistics.cxx:112 AliAnalysisStatistics.cxx:113 AliAnalysisStatistics.cxx:114 AliAnalysisStatistics.cxx:115 AliAnalysisStatistics.cxx:116 AliAnalysisStatistics.cxx:117 AliAnalysisStatistics.cxx:118 AliAnalysisStatistics.cxx:119 AliAnalysisStatistics.cxx:120 AliAnalysisStatistics.cxx:121 AliAnalysisStatistics.cxx:122 AliAnalysisStatistics.cxx:123 AliAnalysisStatistics.cxx:124 AliAnalysisStatistics.cxx:125 AliAnalysisStatistics.cxx:126 AliAnalysisStatistics.cxx:127 AliAnalysisStatistics.cxx:128 AliAnalysisStatistics.cxx:129 AliAnalysisStatistics.cxx:130 AliAnalysisStatistics.cxx:131 AliAnalysisStatistics.cxx:132 AliAnalysisStatistics.cxx:133 AliAnalysisStatistics.cxx:134 AliAnalysisStatistics.cxx:135 AliAnalysisStatistics.cxx:136 AliAnalysisStatistics.cxx:137 AliAnalysisStatistics.cxx:138 AliAnalysisStatistics.cxx:139 AliAnalysisStatistics.cxx:140 AliAnalysisStatistics.cxx:141 AliAnalysisStatistics.cxx:142 AliAnalysisStatistics.cxx:143 AliAnalysisStatistics.cxx:144 AliAnalysisStatistics.cxx:145 AliAnalysisStatistics.cxx:146 AliAnalysisStatistics.cxx:147 AliAnalysisStatistics.cxx:148 AliAnalysisStatistics.cxx:149 AliAnalysisStatistics.cxx:150 AliAnalysisStatistics.cxx:151 AliAnalysisStatistics.cxx:152 AliAnalysisStatistics.cxx:153 AliAnalysisStatistics.cxx:154 AliAnalysisStatistics.cxx:155 AliAnalysisStatistics.cxx:156 AliAnalysisStatistics.cxx:157 AliAnalysisStatistics.cxx:158 AliAnalysisStatistics.cxx:159 AliAnalysisStatistics.cxx:160 AliAnalysisStatistics.cxx:161 AliAnalysisStatistics.cxx:162 AliAnalysisStatistics.cxx:163 AliAnalysisStatistics.cxx:164 AliAnalysisStatistics.cxx:165 AliAnalysisStatistics.cxx:166 AliAnalysisStatistics.cxx:167 AliAnalysisStatistics.cxx:168 AliAnalysisStatistics.cxx:169 AliAnalysisStatistics.cxx:170 AliAnalysisStatistics.cxx:171 AliAnalysisStatistics.cxx:172 AliAnalysisStatistics.cxx:173 AliAnalysisStatistics.cxx:174 AliAnalysisStatistics.cxx:175 AliAnalysisStatistics.cxx:176 AliAnalysisStatistics.cxx:177 AliAnalysisStatistics.cxx:178 AliAnalysisStatistics.cxx:179 AliAnalysisStatistics.cxx:180 AliAnalysisStatistics.cxx:181 AliAnalysisStatistics.cxx:182 AliAnalysisStatistics.cxx:183 AliAnalysisStatistics.cxx:184 AliAnalysisStatistics.cxx:185 AliAnalysisStatistics.cxx:186 AliAnalysisStatistics.cxx:187 AliAnalysisStatistics.cxx:188 AliAnalysisStatistics.cxx:189 AliAnalysisStatistics.cxx:190 AliAnalysisStatistics.cxx:191 AliAnalysisStatistics.cxx:192 AliAnalysisStatistics.cxx:193 AliAnalysisStatistics.cxx:194 AliAnalysisStatistics.cxx:195 AliAnalysisStatistics.cxx:196 AliAnalysisStatistics.cxx:197 AliAnalysisStatistics.cxx:198 AliAnalysisStatistics.cxx:199 AliAnalysisStatistics.cxx:200 AliAnalysisStatistics.cxx:201 AliAnalysisStatistics.cxx:202 AliAnalysisStatistics.cxx:203 AliAnalysisStatistics.cxx:204 AliAnalysisStatistics.cxx:205 AliAnalysisStatistics.cxx:206 AliAnalysisStatistics.cxx:207 AliAnalysisStatistics.cxx:208 AliAnalysisStatistics.cxx:209 AliAnalysisStatistics.cxx:210 AliAnalysisStatistics.cxx:211 AliAnalysisStatistics.cxx:212 AliAnalysisStatistics.cxx:213 AliAnalysisStatistics.cxx:214 AliAnalysisStatistics.cxx:215 AliAnalysisStatistics.cxx:216 AliAnalysisStatistics.cxx:217 AliAnalysisStatistics.cxx:218 AliAnalysisStatistics.cxx:219 AliAnalysisStatistics.cxx:220 AliAnalysisStatistics.cxx:221 AliAnalysisStatistics.cxx:222 AliAnalysisStatistics.cxx:223 AliAnalysisStatistics.cxx:224 AliAnalysisStatistics.cxx:225 AliAnalysisStatistics.cxx:226 AliAnalysisStatistics.cxx:227