]>
Commit | Line | Data |
---|---|---|
1ee39b3a | 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" | |
82b74bd6 | 8 | #include "TRandom.h" |
1ee39b3a | 9 | #include <fstream> |
10 | #endif | |
11 | ||
12 | #ifndef HELPER_C | |
13 | #define HELPER_C | |
14 | ||
15 | //____________________________________________ | |
16 | Int_t ParseOptions(Char_t *trd) | |
17 | { | |
8ee59659 | 18 | Int_t fSteerTask = 0; |
1ee39b3a | 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; | |
e9d62bd2 | 25 | } else if(s.CompareTo("NOMC") == 0 || s.CompareTo("NOFR") == 0){ |
26 | continue; // taken care by special functions | |
1ee39b3a | 27 | } else { |
28 | Bool_t foundOpt = kFALSE; | |
a7fa310f | 29 | for(Int_t itask = 0; itask < NTRDTASKS; itask++){ |
1ee39b3a | 30 | if(s.CompareTo(fgkTRDtaskOpt[itask]) != 0) continue; |
a7fa310f | 31 | SETBITT(fSteerTask, itask); |
32 | if(itask>1) SETBITT(fSteerTask, kInfoGen); | |
1ee39b3a | 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); | |
45d01ff8 | 46 | if(TSTBIT(fSteerTask, kV0Monitor)) SETBITT(fSteerTask, kCheckPID); |
1ee39b3a | 47 | |
48 | return fSteerTask; | |
49 | } | |
50 | ||
51 | //______________________________________________________ | |
bd5a6c1b | 52 | void mergeProd(const Char_t *mark, const Char_t *files, const Int_t nBatch = 20) |
1ee39b3a | 53 | { |
1ee39b3a | 54 | |
bd5a6c1b | 55 | |
56 | // Clear first predefines | |
82b74bd6 | 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.)); | |
bd5a6c1b | 59 | gSystem->Exec("mkdir -p merge; rm -rf merge/*"); |
60 | ||
61 | // purge file list | |
f0cc7f57 | 62 | std::string filename; |
63 | std::ifstream file(files); | |
bd5a6c1b | 64 | Int_t iline(0); |
1ee39b3a | 65 | while(getline(file, filename)){ |
66 | if(Int_t(filename.find(mark)) < 0) continue; | |
bd5a6c1b | 67 | gSystem->Exec(Form("echo %s >> %s", filename.c_str(), PURGE)); |
68 | iline++; | |
1ee39b3a | 69 | } |
bd5a6c1b | 70 | Int_t nBatches(iline/nBatch); |
1ee39b3a | 71 | |
bd5a6c1b | 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)); | |
1ee39b3a | 77 | } |
bd5a6c1b | 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)); | |
1ee39b3a | 82 | } |
83 | ||
84 | #endif |