1 ////////////////////////////////////////////////////////////////////////////
3 // Helper class for PWG1 TRD train //
6 // Markus Fasel <M.Fasel@gsi.de> //
8 ////////////////////////////////////////////////////////////////////////////
12 #include <TObjArray.h>
13 #include <TObjString.h>
21 #include "AliTRDpwg1Helper.h"
23 const Char_t * AliTRDpwg1Helper::fgkTRDtaskClassName[AliTRDpwg1Helper::kNTRDTASKS] = {
33 ,"AliTRDalignmentTask"
35 ,"AliTRDclusterResolution"
39 const Char_t * AliTRDpwg1Helper::fgkTRDtaskOpt[AliTRDpwg1Helper::kNTRDTASKS+1] = {
56 //______________________________________________________
57 Bool_t AliTRDpwg1Helper::DoTask(Int_t idx, Int_t map)
59 return TESTBIT(map, idx);
62 //______________________________________________________
63 Int_t AliTRDpwg1Helper::ParseOptions(Char_t *trd)
65 // Parse space separated options.
66 // Possible options are:
67 // "ALL" : [default] all performance (no calibration) tasks
68 // ------- Performance tasks ----------
69 // "ESD" : Basic TRD Detector checks on ESD only (no TRD tracks analysed)
70 // "DET" : Basic TRD Detector checks
71 // "RES" : TRD tracking Resolution
72 // "EFF" : TRD Tracking Efficiency
73 // "PID" : TRD PID - pion efficiency
74 // "V0" : monitor V0 performance for use in TRD PID calibration
75 // ------- Calibration tasks ----------
76 // "EFFC" : TRD Tracking Efficiency Combined (barrel + stand alone) - only in case of simulations
77 // "MULT" : TRD single track selection
78 // "CLRES": clusters Resolution
79 // "CAL" : TRD calibration
80 // "ALGN" : TRD alignment
81 // "PIDR" : TRD PID - reference data
82 // ------- SPECIAL OPTIONS -----------
83 // "NOFR" : Data set does not have AliESDfriends.root
84 // "NOMC" : Data set does not have Monte Carlo Informations (default have MC),
87 TObjArray *tasksArray = TString(trd).Tokenize(" ");
88 for(Int_t isel = 0; isel < tasksArray->GetEntriesFast(); isel++){
89 TString s = (dynamic_cast<TObjString *>(tasksArray->UncheckedAt(isel)))->String();
90 if(s.CompareTo("ALL") == 0){
91 for(Int_t itask = 0; itask < kNTRDQATASKS; itask++) SETBIT(fSteerTask, itask);
93 } else if(s.CompareTo("NOMC") == 0 || s.CompareTo("NOFR") == 0){
94 continue; // taken care by special functions
96 Bool_t foundOpt = kFALSE;
97 for(Int_t itask = 0; itask < kNTRDTASKS; itask++){
98 if(s.CompareTo(fgkTRDtaskOpt[itask]) != 0) continue;
99 SETBIT(fSteerTask, itask);
100 if(itask>1) SETBIT(fSteerTask, kInfoGen);
104 if(!foundOpt) Info("ParseOptions()", Form("TRD task %s not implemented (yet).", s.Data()));
107 // extra rules for calibration tasks
108 if(TESTBIT(fSteerTask, kCalibration)) SETBIT(fSteerTask, kCheckDET);
109 if(TESTBIT(fSteerTask, kMultiplicity)) SETBIT(fSteerTask, kEfficiency);
110 if(TESTBIT(fSteerTask, kEfficiencyMC)) SETBIT(fSteerTask, kEfficiency);
111 if(TESTBIT(fSteerTask, kClErrParam)) SETBIT(fSteerTask, kResolution);
112 if(TESTBIT(fSteerTask, kAlignment)) SETBIT(fSteerTask, kResolution);
113 if(TESTBIT(fSteerTask, kPIDRefMaker)) SETBIT(fSteerTask, kCheckPID);
114 if(TESTBIT(fSteerTask, kV0Monitor)) SETBIT(fSteerTask, kCheckPID);
120 //______________________________________________________
121 void AliTRDpwg1Helper::MergeProd(const Char_t *mark, const Char_t *files, const Int_t nBatch = 20)
123 // Merge Output files named "mark" from list in "files"
125 Char_t lMERGE[8]; sprintf(lMERGE, "%d.lst", (Int_t)gRandom->Uniform(9999.));
126 Char_t lPURGE[8]; sprintf(lPURGE, "%d.lst", (Int_t)gRandom->Uniform(9999.));
127 gSystem->Exec("mkdir -p merge; rm -rf merge/*");
130 std::string filename;
131 std::ifstream file(files);
133 while(getline(file, filename)){
134 if(Int_t(filename.find(mark)) < 0) continue;
135 gSystem->Exec(Form("echo %s >> %s", filename.c_str(), lPURGE));
138 Int_t nBatches(iline/nBatch);
140 for(Int_t ibatch(0); ibatch<nBatches; ibatch++){
141 Int_t first(ibatch*nBatch);
142 if(!gSystem->Exec(Form("root.exe -b -q \'$ALICE_ROOT/PWG1/TRD/macros/mergeBatch.C(\"%s\", \"%s\", %d, %d)\'", mark, lPURGE, nBatch, first))) continue;
143 gSystem->Exec(Form("mv %d_%s merge/", first, mark));
144 gSystem->Exec(Form("echo %s/merge/%d_%s >> %s", gSystem->ExpandPathName("$PWD"), first, mark, lMERGE));
146 gSystem->Exec(Form("root.exe -b -q \'$ALICE_ROOT/PWG1/TRD/macros/mergeBatch.C(\"%s\", \"%s\", %d, 0, kFALSE, kTRUE)\'", mark, lMERGE, nBatches));
147 gSystem->Exec(Form("mv 0_%s %s", mark, mark));
149 gSystem->Exec(Form("rm -rfv %s %s merge", lMERGE, lPURGE));
152 //______________________________________________________
153 Int_t AliTRDpwg1Helper::GetTaskIndex(const Char_t *name)
155 // Give index in TRD train of task class "name"
156 for(Int_t it(0); it<kNTRDTASKS; it++){
157 if(strcmp(fgkTRDtaskClassName[it], name)==0) return it;
162 //______________________________________________________
163 Bool_t AliTRDpwg1Helper::HasReadMCData(Char_t *opt)
165 // Use MC data option
166 return !(Bool_t)strstr(opt, "NOMC");
169 //____________________________________________
170 Bool_t AliTRDpwg1Helper::HasReadFriendData(Char_t *opt)
172 // Use friends data option
173 return !(Bool_t)strstr(opt, "NOFR");