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