]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/vertexingHF/RunAnalysisAODVertexingHF.C
Added list of good runs (from RCT) for LHC10b and LHC10c
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / RunAnalysisAODVertexingHF.C
CommitLineData
8931206f 1class AliAnalysisGrid;
2
3void RunAnalysisAODVertexingHF()
4{
5 //
6 // Test macro for AliAnalysisTaskSE's for heavy-flavour candidates
7 // It has the structure of a Analysis Train:
8 // - in this macro, change things related to running mode
9 // and input preparation
10 // - add your task using a AddTaskXXX macro
11 //
12 // A.Dainese, andrea.dainese@lnl.infn.it
13 // "grid" mode added by R.Bala, bala@to.infn.it
14 //
15
16
17 gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -g");
18 //
19 TString trainName = "D2H";
20 TString analysisMode = "grid"; // "local", "grid", or "proof"
21 TString inputMode = "list"; // "list", "xml", or "dataset"
22 Long64_t nentries=123567890,firstentry=0;
23 Bool_t useParFiles=kFALSE;
24 Bool_t useAlienPlugin=kTRUE;
25 TString pluginmode="full";
26 Bool_t saveProofToAlien=kFALSE;
27 TString proofOutdir = "";
28 TString loadMacroPath="$ALICE_ROOT/PWG3/vertexingHF/macros/";
29 //TString loadMacroPath="./"; // this is normally needed for CAF
30 //
31
32 if(analysisMode=="grid") {
33 // Connect to AliEn
34 TGrid::Connect("alien://");
35 } else if(analysisMode=="proof") {
36 // Connect to the PROOF cluster
37 if(inputMode!="dataset") {printf("Input mode must be dataset, for proof analysis\n"); return;}
38 gEnv->SetValue("XSec.GSI.DelegProxy","2");
39 TProof::Open("alicecaf");
40 //TProof::Reset("alicecaf");
41 if(saveProofToAlien) {
42 TGrid::Connect("alien://");
43 if(gGrid) {
44 TString homedir = gGrid->GetHomeDirectory();
45 TString workdir = homedir + trainName;
46 if(!gGrid->Cd(workdir)) {
47 gGrid->Cd(homedir);
48 if(gGrid->Mkdir(workdir)) {
49 gGrid->Cd(trainName);
50 ::Info("VertexingTrain::Connect()", "Directory %s created", gGrid->Pwd());
51 }
52 }
53 gGrid->Mkdir("proof_output");
54 gGrid->Cd("proof_output");
55 proofOutdir = Form("alien://%s", gGrid->Pwd());
56 }
57 }
58 }
59
60
61 // AliRoot libraries
62 if(analysisMode=="local" || analysisMode=="grid") {
63 TString loadLibraries="LoadLibraries.C"; loadLibraries.Prepend(loadMacroPath.Data());
64 gROOT->LoadMacro(loadLibraries.Data());
65 LoadLibraries(useParFiles);
66 } else if (analysisMode=="proof") {
67 gSystem->Load("libTree.so");
68 gSystem->Load("libGeom.so");
69 gSystem->Load("libPhysics.so");
70 gSystem->Load("libVMC.so");
71 gSystem->Load("libMinuit.so");
72 // Enable the needed packages
73 //gProof->ClearPackages();
74 TString parDir="/afs/cern.ch/user/d/dainesea/code/";
75 TString parFile;
76 if(!useParFiles) {
77 gProof->UploadPackage("AF-v4-17");
78 gProof->EnablePackage("AF-v4-17");
79 // --- Enable the PWG3vertexingHF Package
80 parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());
81 gProof->UploadPackage(parFile.Data());
82 gProof->EnablePackage("PWG3vertexingHF");
83 } else {
84 // --- Enable the STEERBase Package
85 parFile="STEERBase.par"; parFile.Prepend(parDir.Data());
86 gProof->UploadPackage(parFile.Data());
87 gProof->EnablePackage("STEERBase");
88 // --- Enable the ESD Package
89 parFile="ESD.par"; parFile.Prepend(parDir.Data());
90 gProof->UploadPackage(parFile.Data());
91 gProof->EnablePackage("ESD");
92 // --- Enable the AOD Package
93 parFile="AOD.par"; parFile.Prepend(parDir.Data());
94 gProof->UploadPackage(parFile.Data());
95 gProof->EnablePackage("AOD");
96 // --- Enable the ANALYSIS Package
97 parFile="ANALYSIS.par"; parFile.Prepend(parDir.Data());
98 gProof->UploadPackage(parFile.Data());
99 gProof->EnablePackage("ANALYSIS");
100 // --- Enable the ANALYSISalice Package
101 parFile="ANALYSISalice.par"; parFile.Prepend(parDir.Data());
102 gProof->UploadPackage(parFile.Data());
103 gProof->EnablePackage("ANALYSISalice");
104 // --- Enable the CORRFW Package
105 parFile="CORRFW.par"; parFile.Prepend(parDir.Data());
106 gProof->UploadPackage(parFile.Data());
107 gProof->EnablePackage("CORRFW");
108 // --- Enable the PWG3base Package
109 parFile="PWG3base.par"; parFile.Prepend(parDir.Data());
110 gProof->UploadPackage(parFile.Data());
111 gProof->EnablePackage("PWG3base");
112 // --- Enable the PWG3vertexingHF Package
113 parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());
114 gProof->UploadPackage(parFile.Data());
115 gProof->EnablePackage("PWG3vertexingHF");
116 // --- Enable the PWG3muon Package
117 parFile="PWG3muon.par"; parFile.Prepend(parDir.Data());
118 gProof->UploadPackage(parFile.Data());
119 gProof->EnablePackage("PWG3muon");
120 }
121 gProof->ShowEnabledPackages(); // show a list of enabled packages
122 }
123
124
125 // Create Alien plugin, if requested
126 if(useAlienPlugin) {
127 if(analysisMode!="grid") {printf("Analysis mode must be grid, to use alien plugin\n"); return;}
128 AliAnalysisGrid *alienHandler = CreateAlienHandler(pluginmode,useParFiles);
129 if(!alienHandler) return;
130 }
131
132
133 //-------------------------------------------------------------------
134 // Prepare input
135 TChain *chainAOD = 0;
136 TString dataset; // for proof
137
138 if(!useAlienPlugin) {
139 TString makeAODInputChain="MakeAODInputChain.C"; makeAODInputChain.Prepend(loadMacroPath.Data());
140 if(inputMode=="list") {
141 // Local files
142 gROOT->LoadMacro(makeAODInputChain.Data());
143 chainAOD = MakeAODInputChain();// with this it reads ./AliAOD.root and ./AliAOD.VertexingHF.root
144 //chainAOD = MakeAODInputChain("alien:///alice/cern.ch/user/r/rbala/newtrain/out_lhc08x/180100/",1,1);
145 printf("ENTRIES %d\n",chainAOD->GetEntries());
146 } else if(inputMode=="xml") {
147 // xml
148 gROOT->LoadMacro(makeAODInputChain.Data());
149 chainAOD = MakeAODInputChain("collection_aod.xml","collection_aodHF.xml");
150 } else if(inputMode=="dataset") {
151 // CAF dataset
152 //gProof->ShowDataSets();
153 dataset="/ITS/dainesea/AODVertexingHF_LHC08x_180100";
154 }
155 }
156
157 // Create the analysis manager
158 AliAnalysisManager *mgr = new AliAnalysisManager("My Manager","My Manager");
159 mgr->SetDebugLevel(10);
160 // Connect plug-in to the analysis manager
161 if(useAlienPlugin) mgr->SetGridHandler(alienHandler);
162
163 // Input
164 AliAODInputHandler *inputHandler = new AliAODInputHandler();
165 inputHandler->AddFriend("./AliAOD.VertexingHF.root");
166 //inputHandler->AddFriend("deltas/AliAOD.VertexingHF.root");
167 if(analysisMode=="proof" ) {
168 if(saveProofToAlien) mgr->SetSpecialOutputLocation(proofOutdir);
169 }
170 mgr->SetInputEventHandler(inputHandler);
171 //-------------------------------------------------------------------
172
173
174 //-------------------------------------------------------------------
175 // Analysis tasks (wagons of the train)
176 //
177 TString taskName;
178
179 ////// ADD THE FULL D2H TRAIN
180 taskName="AddD2HTrain.C"; taskName.Prepend(loadMacroPath.Data());
181 gROOT->LoadMacro(taskName.Data());
182 Bool_t readMC=kFALSE;
183 AddD2HTrain(readMC);//,1,0,0,0,0,0,0,0,0,0,0);
184
185 ////// OR ADD INDIVIDUAL TASKS
186
187 /*
188 taskName="AddTaskCompareHF.C"; taskName.Prepend(loadMacroPath.Data());
189 gROOT->LoadMacro(taskName.Data());
190 AliAnalysisTaskSECompareHF *cmpTask = AddTaskCompareHF();
191
192 taskName="AddTaskD0Mass.C"; taskName.Prepend(loadMacroPath.Data());
193 gROOT->LoadMacro(taskName.Data());
194 AliAnalysisTaskSED0Mass *d0massTask = AddTaskD0Mass();
195 AliAnalysisTaskSED0Mass *d0massLikeSignTask = AddTaskD0Mass(1);
196
197 taskName="AddTaskDplus.C"; taskName.Prepend(loadMacroPath.Data());
198 gROOT->LoadMacro(taskName.Data());
199 AliAnalysisTaskSEDplus *dplusTask = AddTaskDplus();
200
201 taskName="AddTaskDs.C"; taskName.Prepend(loadMacroPath.Data());
202 gROOT->LoadMacro(taskName.Data());
203 AliAnalysisTaskSEDs *dsTask = AddTaskDs();
204
205 //taskName="AddTaskSelectHF.C"; taskName.Prepend(loadMacroPath.Data());
206 //gROOT->LoadMacro(taskName.Data());
207 //AliAnalysisTaskSESelectHF *seleTask = AddTaskSelectHF();
208
209 taskName="AddTaskBkgLikeSignD0.C"; taskName.Prepend(loadMacroPath.Data());
210 gROOT->LoadMacro(taskName.Data());
211 AliAnalysisTaskSEBkgLikeSignD0 *lsD0Task = AddTaskBkgLikeSignD0();
212
213 taskName="AddTaskBkgLikeSignJPSI.C"; taskName.Prepend(loadMacroPath.Data());
214 gROOT->LoadMacro(taskName.Data());
215 AliAnalysisTaskSEBkgLikeSignJPSI *lsJPSITask = AddTaskBkgLikeSignJPSI();
216
217 //taskName="AddTaskBtoJPSItoEle.C"; taskName.Prepend(loadMacroPath.Data());
218 //gROOT->LoadMacro(taskName.Data());
219 //AliAnalysisTaskSEBtoJPSItoEle *jpsiTask = AddTaskBtoJPSItoEle();
220
221 taskName="AddTaskCFMultiVarMultiStep.C"; taskName.Prepend(loadMacroPath.Data());
222 gROOT->LoadMacro(taskName.Data());
223 AliCFHeavyFlavourTaskMultiVarMultiStep *cfmvmsTask = AddTaskCFMultiVarMultiStep();
224
225 taskName="AddTaskCharmFraction.C"; taskName.Prepend(loadMacroPath.Data());
226 gROOT->LoadMacro(taskName.Data());
227 Int_t switchMC[5]={1,1,1,1,1};
228 AliAnalysisTaskSECharmFraction *cFractTask = AddTaskCharmFraction("d0D0",switchMC);
229
230 // attach a private task (not committed)
231 // (the files MyTask.h MyTask.cxx AddMyTask.C have to be declared in plugin
232 // configuration, see below)
233
234 if(analysisMode.Data()=="proof") {
235 gProof->LoadMacro("MyTask.cxx++g");
236 } else {
237 gROOT->LoadMacro("MyTask.cxx++g");
238 }
239 gROOT->LoadMacro("AddMyTask.C");
240 MyTask *myTask = AddMyTask();
241
242
243 if(analysisMode.Data()=="proof") {
244 gProof->LoadMacro("AliDStarJets.cxx++g");
245 } else {
246 gROOT->LoadMacro("AliDStarJets.cxx++g");
247 }
248 gROOT->LoadMacro("AddTaskDStarJets.C");
249 AliDStarJets *myTask = AddTaskDStarJets();
250 */
251 //-------------------------------------------------------------------
252
253 //
254 // Run the analysis
255 //
256 if(chainAOD) printf("CHAIN HAS %d ENTRIES\n",(Int_t)chainAOD->GetEntries());
257
258 if(!mgr->InitAnalysis()) return;
259 mgr->PrintStatus();
260 if(analysisMode=="grid" && !useAlienPlugin) analysisMode="local";
261 if(analysisMode!="proof") {
262 mgr->StartAnalysis(analysisMode.Data(),chainAOD,nentries,firstentry);
263 } else {
264 // proof
265 mgr->StartAnalysis(analysisMode.Data(),dataset.Data(),nentries,firstentry);
266 }
267
268 return;
269}
270//_____________________________________________________________________________
271//
272AliAnalysisGrid* CreateAlienHandler(TString pluginmode="test",Bool_t useParFiles=kFALSE)
273{
274 // Check if user has a valid token, otherwise make one. This has limitations.
275 // One can always follow the standard procedure of calling alien-token-init then
276 // source /tmp/gclient_env_$UID in the current shell.
277 if (!AliAnalysisGrid::CreateToken()) return NULL;
278 AliAnalysisAlien *plugin = new AliAnalysisAlien();
279 // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
280 plugin->SetRunMode(pluginmode.Data());
281 plugin->SetUser("rbala");
282 plugin->SetNtestFiles(1);
283 // Set versions of used packages
284 plugin->SetAPIVersion("V1.1x");
285 plugin->SetROOTVersion("v5-26-00b-6");
286 plugin->SetAliROOTVersion("v4-19-18-AN");
287 // Declare input data to be processed.
288 // Method 1: Create automatically XML collections using alien 'find' command.
289 // Define production directory LFN
290 // plugin->SetGridDataDir("/alice/cern.ch/user/r/rbala/data_pass4_good_runCINT1B_8thfeb/");
291 //plugin->SetGridDataDir("/alice/sim/PDC_09/LHC09a4/AOD3/");
292 // Set data search pattern
293 plugin->SetGridDataDir("/alice/data/2010/LHC10c");
294 plugin->SetDataPattern("pass2/*AliAOD.root");
46627015 295 // Adds only the good runs from the Monalisa Run Condition Table
296 AddGoodRuns(plugin,"LHC10c");
8931206f 297 // ...then add run numbers to be considered
8931206f 298 plugin->SetMaxMergeFiles(100);
299 plugin->SetNrunsPerMaster(100);
300 plugin->SetNumberOfReplicas(2);
301 // or
302 //plugin->SetRunRange(529000,529007);
303 // Method 2: Declare existing data files (raw collections, xml collections, root file)
304 // If no path mentioned data is supposed to be in the work directory (see SetGridWorkingDir())
305 // XML collections added via this method can be combined with the first method if
306 // the content is compatible (using or not tags)
307 //plugin->AddDataFile("/alice/cern.ch/user/r/rbala/newtrain/collection/collection_aod_lhc08w.xml");
308 // plugin->AddDataFile("/alice/data/2008/LHC08c/000057657/raw/Run57657.Merged.RAW.tag.root");
309 // Define alien work directory where all files will be copied. Relative to alien $HOME.
310 plugin->SetGridWorkingDir("myHFanalysis");
311 // Declare alien output directory. Relative to working directory.
312 plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output
313 // Declare the analysis source files names separated by blancs. To be compiled runtime
314 // using ACLiC on the worker nodes.
315 //plugin->SetAnalysisSource("AliDStarJets.cxx");
316 // Declare all libraries (other than the default ones for the framework. These will be
317 // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.
318 plugin->SetAdditionalLibs("libPWG3vertexingHF.so libPWG3base.so libPWG3muon.so");
319 // use par files
320 if(useParFiles) {
321 plugin->EnablePackage("STEERBase.par");
322 plugin->EnablePackage("ESD.par");
323 plugin->EnablePackage("AOD.par");
324 plugin->EnablePackage("ANALYSIS.par");
325 plugin->EnablePackage("ANALYSISalice.par");
326 plugin->EnablePackage("CORRFW.par");
327 plugin->EnablePackage("PWG3base.par");
328 plugin->EnablePackage("PWG3vertexingHF.par");
329 plugin->EnablePackage("PWG3muon.par");
330 }
331 plugin->AddIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -g");
332 // Declare the output file names separated by blancs.
333 // (can be like: file.root or file.root@ALICE::Niham::File)
334 plugin->SetDefaultOutputs(kTRUE);
335 //plugin->SetOutputFiles("output.root CmpHF.root CmpHFnt.root D0InvMass.root InvMassDplus.root InvMassDplus_nt1.root InvMassDplus_nt2.root");
336 // Optionally define the files to be archived.
337 // plugin->SetOutputArchive("log_archive.zip:stdout,stderr@ALICE::NIHAM::File root_archive.zip:*.root@ALICE::NIHAM::File");
338 // plugin->SetOutputArchive("log_archive.zip:stdout,stderr");
339 // Optionally set a name for the generated analysis macro (default MyAnalysis.C)
340 plugin->SetAnalysisMacro("AnalysisHF.C");
341 // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
342 plugin->SetSplitMaxInputFileNumber(10);
343 // Optionally set number of failed jobs that will trigger killing waiting sub-jobs.
344 //plugin->SetMaxInitFailed(5);
345 // Optionally resubmit threshold.
346 //plugin->SetMasterResubmitThreshold(90);
347 // Optionally set time to live (default 30000 sec)
348 //plugin->SetTTL(20000);
349 // Optionally set input format (default xml-single)
350 plugin->SetInputFormat("xml-single");
351 // Optionally modify the name of the generated JDL (default analysis.jdl)
352 plugin->SetJDLName("TaskHF.jdl");
353 // Optionally modify job price (default 1)
354 //plugin->SetPrice(1);
355 // Optionally modify split mode (default 'se')
356 plugin->SetSplitMode("se");
357
358
359 return plugin;
360}
46627015 361//----------------------------------------------------------------------------
362void AddGoodRuns(AliAnalysisAlien* plugin,TString lhcPeriod) {
363 //
364 // Adds good runs from the Monalisa Run Condition Table
365 //
366 plugin->SetRunPrefix("000");
367
368 if(lhcPeriod=="LHC10b") {
369 Int_t nruns=52;
370 Int_t runlist[52]={117222, 117220, 117120, 117118, 117116, 117112, 117109, 117099, 117092, 117086, 117082, 117077, 117063, 117060, 117059, 117054, 117053, 117052, 117050, 117048, 116684, 116643, 116642, 116611, 116610, 116609, 116574, 116571, 116562, 116561, 116559, 116403, 116402, 116401, 116288, 116287, 116102, 115514, 115414, 115413, 115401, 115393, 115345, 115335, 115328, 115325, 115322, 115318, 115310, 115193, 115186, 114931};
371
372 for(Int_t k=0;k<nruns;k++){
373 plugin->AddRunNumber(runlist[k]);
374 }
375 plugin->SetNRuns(nruns);
376 }
377
378 if(lhcPeriod=="LHC10c") {
379 Int_t nruns=57;
380 Int_t runlist[57]={120829, 120825, 120824, 120823, 120822, 120821, 120820, 120758, 120750, 120741, 120671, 120617, 120616, 120505, 120504, 120503, 120244, 120079, 120076, 120073, 120072, 120069, 120067, 120066, 120064, 119971, 119969, 119965, 119961, 119952, 119948, 119941, 119935, 119934, 119926, 119924, 119923, 119917, 119913, 119909, 119907, 119904, 119862, 119859, 119856, 119853, 119849, 119846, 119845, 119844, 119842, 119841, 119838, 119837, 119163, 119161, 119159};
381
382 for(Int_t k=0;k<nruns;k++){
383 plugin->AddRunNumber(runlist[k]);
384 }
385 plugin->SetNRuns(nruns);
386 }
387
388 return;
389}