f6c95ed669c9390378b114ffdb1f945f69701e10
[u/mrichter/AliRoot.git] / PWG1 / TRD / 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 "TRandom.h"
9 #include <fstream>
10 #endif
11
12 #ifndef HELPER_C
13 #define HELPER_C
14
15 //____________________________________________
16 Int_t ParseOptions(Char_t *trd)
17 {
18   Int_t fSteerTask = 0;
19   TObjArray *tasksArray = TString(trd).Tokenize(" ");
20   for(Int_t isel = 0; isel < tasksArray->GetEntriesFast(); isel++){
21     TString s = (dynamic_cast<TObjString *>(tasksArray->UncheckedAt(isel)))->String();
22     if(s.CompareTo("ALL") == 0){
23       for(Int_t itask = 0; itask < NTRDQATASKS; itask++) SETBITT(fSteerTask, itask);
24       continue;
25     } else if(s.CompareTo("NOMC") == 0 || s.CompareTo("NOFR") == 0){
26       continue; // taken care by special functions
27     } else { 
28       Bool_t foundOpt = kFALSE;  
29       for(Int_t itask = 0; itask < NTRDTASKS; itask++){
30         if(s.CompareTo(fgkTRDtaskOpt[itask]) != 0) continue;
31         SETBITT(fSteerTask, itask); 
32         if(itask>1) SETBITT(fSteerTask, kInfoGen);
33         foundOpt = kTRUE;
34         break;
35       }
36       if(!foundOpt) Info("ParseOptions()", Form("TRD task %s not implemented (yet).", s.Data()));
37     }
38   }
39   // extra rules for calibration tasks
40   if(TSTBIT(fSteerTask, kCalibration)) SETBITT(fSteerTask, kCheckDET);
41   if(TSTBIT(fSteerTask, kMultiplicity)) SETBITT(fSteerTask, kEfficiency);
42   if(TSTBIT(fSteerTask, kEfficiencyMC)) SETBITT(fSteerTask, kEfficiency);
43   if(TSTBIT(fSteerTask, kClErrParam)) SETBITT(fSteerTask, kResolution);
44   if(TSTBIT(fSteerTask, kAlignment)) SETBITT(fSteerTask, kResolution);
45   if(TSTBIT(fSteerTask, kPIDRefMaker)) SETBITT(fSteerTask, kCheckPID);
46   if(TSTBIT(fSteerTask, kV0Monitor)) SETBITT(fSteerTask, kCheckPID);
47
48   return fSteerTask;
49 }
50
51 //______________________________________________________
52 void mergeProd(const Char_t *mark, const Char_t *files, const Int_t nBatch = 20)
53 {
54
55
56   // Clear first predefines
57   Char_t MERGE[8]; sprintf(MERGE, "%d.lst", (Int_t)gRandom->Uniform(9999.));
58   Char_t PURGE[8]; sprintf(PURGE, "%d.lst", (Int_t)gRandom->Uniform(9999.));
59   gSystem->Exec("mkdir -p merge; rm -rf merge/*");
60
61   // purge file list
62   std::string filename;
63   std::ifstream file(files);
64   Int_t iline(0);
65   while(getline(file, filename)){
66     if(Int_t(filename.find(mark)) < 0) continue;
67     gSystem->Exec(Form("echo %s >> %s", filename.c_str(), PURGE));
68     iline++;
69   }
70   Int_t nBatches(iline/nBatch);
71
72   for(Int_t ibatch(0); ibatch<nBatches; ibatch++){
73     Int_t first(ibatch*nBatch);
74     if(!gSystem->Exec(Form("root.exe -b -q \'$ALICE_ROOT/PWG1/TRD/macros/mergeBatch.C(\"%s\", \"%s\", %d, %d)\'", mark, PURGE, nBatch, first))) continue;
75     gSystem->Exec(Form("mv %d_%s merge/", first, mark));
76     gSystem->Exec(Form("echo %s/merge/%d_%s >> %s", gSystem->ExpandPathName("$PWD"), first, mark, MERGE));
77   }
78   gSystem->Exec(Form("root.exe -b -q \'$ALICE_ROOT/PWG1/TRD/macros/mergeBatch.C(\"%s\", \"%s\", %d, 0, kFALSE, kTRUE)\'", mark, MERGE, nBatches));
79   gSystem->Exec(Form("mv 0_%s %s", mark, mark));
80   
81   gSystem->Exec(Form("rm -rfv %s %s merge", MERGE, PURGE));
82 }
83
84 #endif