ROOT logo
#include "TList.h"
#include "TTree.h"
#include "AliSysInfo.h"
#include "TObjString.h"
#include "TCanvas.h"
#include "TH1.h"
#include "TSystem.h"
#include "TDirectory.h"
#include "TFile.h"

const Int_t NMODS = 14;
TString folder;
const char *module_name[NMODS] = {"SPD_Performance",
                                  "CaloQA",
                                  "Vertex_Performance",
                                  "PWGPP_QAsymHists",
                                  "VZERO_Performance",
                                  "TPC_PerformanceQA",
                                  "SDD_Performance",
                                  "PWGPPdEdxSSDQA",
                                  "ITS_Performance",
                                  "TRD_Performance",
                                  "MTR_ChamberEffMap",
                                  "PWG2forwardDnDeta",
                                  "ImpParRes_Performance",
                                  "MUON_QA"
};                                  

void SetFolder(const char *task_name) 
{
   if (!strcmp(task_name, "SPD_Performance")) folder = "coutput1";
   if (!strcmp(task_name, "CaloQA")) folder = "CaloQA";
   if (!strcmp(task_name, "Vertex_Performance")) folder = "cOutputVtxESD";
   if (!strcmp(task_name, "PWGPP_QAsymHists")) folder = "QAsymHists_Global QAsymHists_ITS QAsymHists_ITS_SA QAsymHists_TPC";
   if (!strcmp(task_name, "VZERO_Performance")) folder = "QAVZEROHists";
   if (!strcmp(task_name, "TPC_PerformanceQA")) folder = "TPCQA";
   if (!strcmp(task_name, "SDD_Performance")) folder = "coutputRP";
   if (!strcmp(task_name, "PWGPPdEdxSSDQA")) folder = "SSDdEdxQA";
   if (!strcmp(task_name, "ITS_Performance")) folder = "cOutputITS";
   if (!strcmp(task_name, "TRD_Performance")) folder = "checkESD infoGen checkDET TRDefficiency TRDresolution checkPID";
   if (!strcmp(task_name, "MTR_ChamberEffMap")) folder = "testMTRChamberEff triggerChamberEff";
   if (!strcmp(task_name, "PWG2forwardDnDeta")) folder = "BackgroundCorrected";
   if (!strcmp(task_name, "ImpParRes_Performance")) folder = "coutputd0ITSpureSARec coutputd0ITSpureSASkip coutputd0allPointRec coutputd0allPointSkip coutputd0partPointRec coutputd0partPointSkip coutputd0onepointSPDRec coutputd0onepointSPDSkip coutputd0postvTracRec coutputd0postvTracSkip coutputd0negtvTracRec coutputd0negtvTracSkip coutputd0pullAllpointRec coutputd0pullAllpointSkip coutputd0onlyRefitRec coutputd0onlyRefitSkip coutputd0sinThetaRec coutputd0sinThetaSkip coutputd0allPointTrue coutputd0postvTracTrue coutputd0negtvTracTrue coutputd0pullAllpointTrue coutputd0phiAllpointSkip coutputd0phiPostvtracSkip coutputd0phiNegtvtracSkip coutputd0clusterTypeSPD01Skip coutputd0clusterTypeSPD02Skip coutputd0clusterTypeSPD03Skip coutputd0clusterTypeSPD11Skip coutputd0clusterTypeSPD12Skip coutputd0clusterTypeSPD13Skip coutputd0PID coutputd0Pt coutputNentries coutputEstimVtx";
   if (!strcmp(task_name, "MUON_QA")) folder = "general1 expert general2";
}


void testOutputSize(const char *filename="QA/QAresults.root")
{
   gSystem->Load("libANALYSIS");
   gSystem->Load("libANALYSISalice");
   gSystem->Load("libCORRFW");
// Add aditional AliRoot libraries
   gSystem->Load("libTENDER.so");
   gSystem->Load("libPWG0base.so");
   gSystem->Load("libPWG0dep.so");
   gSystem->Load("libPWG0selectors.so");
   gSystem->Load("libPWGPP.so");
   gSystem->Load("libPWG2.so");
   gSystem->Load("libPWG2forward.so");
   gSystem->Load("libEMCALUtils.so");
   gSystem->Load("libPWG4PartCorrBase.so");
   gSystem->Load("libPWG4PartCorrDep.so");
   gSystem->Load("libPWGHFbase.so");
   gSystem->Load("libPWGmuon.so");
   gSystem->Load("libPWGmuondep.so");
   gSystem->Unlink("syswatch.log");
   AliSysInfo::AddStamp("Start", 0, 0);
 
   TList temp;
   TObjString *os;
   if (!TFile::Open(filename)) return;
   TDirectory *cdir = gDirectory;

   for (Int_t imod=0; imod<NMODS; imod++) {
      SetFolder(module_name[imod]);
      TObjArray *arr = folder.Tokenize(" ");
      TIter next(arr);
      cdir->cd();
      if (!gDirectory->cd(module_name[imod])) continue;
      printf("Module: %s folder: %s\n", module_name[imod], gDirectory->GetName());
      gDirectory->ls();
      while ((os=(TObjString*)next())) {
         TSeqCollection *list = (TSeqCollection*)gDirectory->Get(os->GetString());
         if (list) list->SetOwner();
         temp.Add(list);
      }
      AliSysInfo::AddStamp(module_name[imod], imod+1,1);
      delete arr;
//      temp.Clear();
   }
   TTree *tree = AliSysInfo::MakeTree("syswatch.log");
   tree->SetName("syswatch");
   tree->SetAlias("event", "id0");
   tree->SetAlias("task",  "id1");
   tree->SetAlias("stage", "id2");
   // Already defined aliases
   // tree->SetAlias("deltaT","stampSec-stampOldSec");
   // tree->SetAlias("T","stampSec-first");
   // tree->SetAlias("deltaVM","(pI.fMemVirtual-pIOld.fMemVirtual)");
   // tree->SetAlias("VM","pI.fMemVirtual");
   TCanvas *c = new TCanvas("SysInfo","PWGPP QA train, run #127719 (2.84 M events)" ,10,10,1200,800);
   tree->SetMarkerStyle(kFullSquare);
   tree->SetMarkerColor(kRed);
   tree->SetMarkerSize(1.5);
   tree->Draw("deltaVM:sname","id1==1","", 1234567890, 0);
   TH1* hist = (TH1*)gPad->GetListOfPrimitives()->FindObject("htemp");
   if (hist) {
      hist->SetTitle("dVM[MB] output list");
      hist->GetXaxis()->SetTitle("Module");
      hist->GetYaxis()->SetTitle("deltaVM [MB]");
   }   
   c->SetGridx();
   c->SetGridy();
//   tree->SetMarkerStyle(kOpenSquare);
//   tree->SetMarkerColor(kRed);
//   tree->SetMarkerSize(1);
//   tree->Draw("VM:event","id1==2","SAME", 1234567890, 0);
   temp.Clear();
   delete tree;
/*
   TFileMerger m;
   m.AddFile("QAresults1.root");
   m.AddFile("QAresults2.root");
   m.OutputFile("QAresults.root");
   m.Merge();
*/   
}
 testOutputSize.C:1
 testOutputSize.C:2
 testOutputSize.C:3
 testOutputSize.C:4
 testOutputSize.C:5
 testOutputSize.C:6
 testOutputSize.C:7
 testOutputSize.C:8
 testOutputSize.C:9
 testOutputSize.C:10
 testOutputSize.C:11
 testOutputSize.C:12
 testOutputSize.C:13
 testOutputSize.C:14
 testOutputSize.C:15
 testOutputSize.C:16
 testOutputSize.C:17
 testOutputSize.C:18
 testOutputSize.C:19
 testOutputSize.C:20
 testOutputSize.C:21
 testOutputSize.C:22
 testOutputSize.C:23
 testOutputSize.C:24
 testOutputSize.C:25
 testOutputSize.C:26
 testOutputSize.C:27
 testOutputSize.C:28
 testOutputSize.C:29
 testOutputSize.C:30
 testOutputSize.C:31
 testOutputSize.C:32
 testOutputSize.C:33
 testOutputSize.C:34
 testOutputSize.C:35
 testOutputSize.C:36
 testOutputSize.C:37
 testOutputSize.C:38
 testOutputSize.C:39
 testOutputSize.C:40
 testOutputSize.C:41
 testOutputSize.C:42
 testOutputSize.C:43
 testOutputSize.C:44
 testOutputSize.C:45
 testOutputSize.C:46
 testOutputSize.C:47
 testOutputSize.C:48
 testOutputSize.C:49
 testOutputSize.C:50
 testOutputSize.C:51
 testOutputSize.C:52
 testOutputSize.C:53
 testOutputSize.C:54
 testOutputSize.C:55
 testOutputSize.C:56
 testOutputSize.C:57
 testOutputSize.C:58
 testOutputSize.C:59
 testOutputSize.C:60
 testOutputSize.C:61
 testOutputSize.C:62
 testOutputSize.C:63
 testOutputSize.C:64
 testOutputSize.C:65
 testOutputSize.C:66
 testOutputSize.C:67
 testOutputSize.C:68
 testOutputSize.C:69
 testOutputSize.C:70
 testOutputSize.C:71
 testOutputSize.C:72
 testOutputSize.C:73
 testOutputSize.C:74
 testOutputSize.C:75
 testOutputSize.C:76
 testOutputSize.C:77
 testOutputSize.C:78
 testOutputSize.C:79
 testOutputSize.C:80
 testOutputSize.C:81
 testOutputSize.C:82
 testOutputSize.C:83
 testOutputSize.C:84
 testOutputSize.C:85
 testOutputSize.C:86
 testOutputSize.C:87
 testOutputSize.C:88
 testOutputSize.C:89
 testOutputSize.C:90
 testOutputSize.C:91
 testOutputSize.C:92
 testOutputSize.C:93
 testOutputSize.C:94
 testOutputSize.C:95
 testOutputSize.C:96
 testOutputSize.C:97
 testOutputSize.C:98
 testOutputSize.C:99
 testOutputSize.C:100
 testOutputSize.C:101
 testOutputSize.C:102
 testOutputSize.C:103
 testOutputSize.C:104
 testOutputSize.C:105
 testOutputSize.C:106
 testOutputSize.C:107
 testOutputSize.C:108
 testOutputSize.C:109
 testOutputSize.C:110
 testOutputSize.C:111
 testOutputSize.C:112
 testOutputSize.C:113
 testOutputSize.C:114
 testOutputSize.C:115
 testOutputSize.C:116
 testOutputSize.C:117
 testOutputSize.C:118
 testOutputSize.C:119
 testOutputSize.C:120
 testOutputSize.C:121
 testOutputSize.C:122
 testOutputSize.C:123
 testOutputSize.C:124
 testOutputSize.C:125
 testOutputSize.C:126
 testOutputSize.C:127
 testOutputSize.C:128
 testOutputSize.C:129