add downloading SVN status info for trending
[u/mrichter/AliRoot.git] / TRD / qaRec / macros / helper.C
1 #if ! defined (__CINT__) || defined (__MAKECINT__)
2 #include "TFileMerger.h"
3 #include "TSystem.h"
4 #include "TString.h"
5 #include "TObjString.h"
6 #include "TObjArray.h"
7 #include "TError.h"
8 #include <fstream>
9 #endif
10
11 #ifndef HELPER_C
12 #define HELPER_C
13
14 //____________________________________________
15 Int_t ParseOptions(Char_t *trd)
16 {
17   Int_t fSteerTask = 1;
18   TObjArray *tasksArray = TString(trd).Tokenize(" ");
19   for(Int_t isel = 0; isel < tasksArray->GetEntriesFast(); isel++){
20     TString s = (dynamic_cast<TObjString *>(tasksArray->UncheckedAt(isel)))->String();
21     if(s.CompareTo("ALL") == 0){
22       for(Int_t itask = 0; itask < NTRDQATASKS; itask++) SETBITT(fSteerTask, itask);
23       continue;
24     } else { 
25       Bool_t foundOpt = kFALSE;  
26       for(Int_t itask = 2; itask < NTRDTASKS; itask++){
27         if(s.CompareTo(fgkTRDtaskOpt[itask]) != 0) continue;
28         SETBITT(fSteerTask, itask); SETBITT(fSteerTask, kInfoGen);
29         foundOpt = kTRUE;
30         break;
31       }
32       if(!foundOpt) Info("ParseOptions()", Form("TRD task %s not implemented (yet).", s.Data()));
33     }
34   }
35   // extra rules for calibration tasks
36   if(TSTBIT(fSteerTask, kCalibration)) SETBITT(fSteerTask, kCheckDET);
37   if(TSTBIT(fSteerTask, kMultiplicity)) SETBITT(fSteerTask, kEfficiency);
38   if(TSTBIT(fSteerTask, kEfficiencyMC)) SETBITT(fSteerTask, kEfficiency);
39   if(TSTBIT(fSteerTask, kClErrParam)) SETBITT(fSteerTask, kResolution);
40   if(TSTBIT(fSteerTask, kAlignment)) SETBITT(fSteerTask, kResolution);
41   if(TSTBIT(fSteerTask, kPIDRefMakerNN)) SETBITT(fSteerTask, kCheckPID);
42   if(TSTBIT(fSteerTask, kPIDRefMakerLQ)) SETBITT(fSteerTask, kCheckPID);
43
44   return fSteerTask;
45 }
46
47 //______________________________________________________
48 void mergeProd(const Char_t *mark, const Char_t *files, const Int_t kBatch = 20)
49 {
50   TFileMerger *fFM = 0x0;
51   Bool_t kSVN = kFALSE;
52
53   Int_t jbatch = 0, nbatch = 0;
54   string filename;
55   ifstream file(files);
56   while(getline(file, filename)){
57     if(Int_t(filename.find(mark)) < 0) continue;
58     if(!nbatch){
59       if(fFM){ 
60         delete fFM;
61         fFM = new TFileMerger(kTRUE);
62       } else fFM = new TFileMerger(kTRUE);
63       fFM->OutputFile(Form("%s/%d_%s",  gSystem->ExpandPathName("$PWD"), jbatch, mark));
64     }
65     if(!kSVN){ // download SVN info for trending
66       string base=filename.substr(0, filename.find_last_of('/'));
67       if(gSystem->Exec(Form("cp -v %s/svnInfo.log .", base.c_str())) == 0) kSVN=kTRUE;
68     }
69     fFM->AddFile(filename.c_str()); nbatch++;
70     if(nbatch==kBatch){
71       printf("MERGING BATCH %d [%d] ... \n", jbatch, nbatch);
72       fFM->Merge(); jbatch++;
73       nbatch=0;
74     }
75   }
76   if(nbatch){
77     printf("MERGING INCOMPLETE BATCH %d [%d] ... \n", jbatch, nbatch);
78     fFM->Merge(); jbatch++;
79   }
80   if(!jbatch){
81     delete fFM;
82     return;
83   }
84
85   new(fFM) TFileMerger(kTRUE);
86   fFM->OutputFile(Form("%s/%s",  gSystem->ExpandPathName("$PWD"), mark));
87   for(Int_t ib=jbatch; ib--;){
88     fFM->AddFile(Form("%s/%d_%s",  gSystem->ExpandPathName("$PWD"), ib, mark));
89     gSystem->Exec(Form("rm -f %s/%d_%s", gSystem->ExpandPathName("$PWD"), ib, mark));
90   }
91   fFM->Merge();
92   delete fFM;
93 }
94
95 #endif