2 class AliAnalysisAlien;
4 void RunAnalysisAODVertexingHF()
7 // Test macro for AliAnalysisTaskSE's for heavy-flavour candidates
8 // It has the structure of a Analysis Train:
9 // - in this macro, change things related to running mode
10 // and input preparation
11 // - add your task using a AddTaskXXX macro
13 // A.Dainese, andrea.dainese@lnl.infn.it
14 // "grid" mode added by R.Bala, bala@to.infn.it
18 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/STEER -I$ALICE_ROOT/STEER/STEERBase -I$ALICE_ROOT/STEER/ESD -I$ALICE_ROOT/STEER/AOD -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/OADB -I$ALICE_ROOT/PWGHF -I$ALICE_ROOT/PWGHF/base -I$ALICE_ROOT/PWGHF/vertexingHF -I$ALICE_ROOT/PWG/FLOW/Base -I$ALICE_ROOT/PWG/FLOW/Tasks -g");
20 TString trainName = "D2H";
21 TString analysisMode = "grid"; // "local", "grid", or "proof"
22 TString inputMode = "list"; // "list", "xml", or "dataset"
23 Long64_t nentries=123567890,firstentry=0;
24 Bool_t useParFiles=kFALSE;
25 Bool_t useAlienPlugin=kTRUE;
26 TString pluginmode="full";
27 TString testfileslistWithPlugin="";
28 Bool_t saveProofToAlien=kFALSE;
29 TString proofOutdir = "";
30 TString loadMacroPath="$ALICE_ROOT/PWGHF/vertexingHF/macros/";
31 //TString loadMacroPath="./"; // this is normally needed for CAF
34 if(analysisMode=="grid") {
36 TGrid::Connect("alien://");
37 } else if(analysisMode=="proof") {
38 // Connect to the PROOF cluster
39 if(inputMode!="dataset") {printf("Input mode must be dataset, for proof analysis\n"); return;}
40 gEnv->SetValue("XSec.GSI.DelegProxy","2");
41 TProof::Open("alicecaf");
42 //TProof::Reset("alicecaf");
43 if(saveProofToAlien) {
44 TGrid::Connect("alien://");
46 TString homedir = gGrid->GetHomeDirectory();
47 TString workdir = homedir + trainName;
48 if(!gGrid->Cd(workdir)) {
50 if(gGrid->Mkdir(workdir)) {
52 ::Info("VertexingTrain::Connect()", "Directory %s created", gGrid->Pwd());
55 gGrid->Mkdir("proof_output");
56 gGrid->Cd("proof_output");
57 proofOutdir = Form("alien://%s", gGrid->Pwd());
64 if(analysisMode=="local" || analysisMode=="grid") {
65 TString loadLibraries="LoadLibraries.C"; loadLibraries.Prepend(loadMacroPath.Data());
66 gROOT->LoadMacro(loadLibraries.Data());
67 LoadLibraries(useParFiles);
68 } else if (analysisMode=="proof") {
69 gSystem->Load("libTree.so");
70 gSystem->Load("libGeom.so");
71 gSystem->Load("libPhysics.so");
72 gSystem->Load("libVMC.so");
73 gSystem->Load("libMinuit.so");
74 // Enable the needed packages
75 //gProof->ClearPackages();
76 TString parDir="/afs/cern.ch/user/d/dainesea/code/";
79 gProof->UploadPackage("AF-v4-17");
80 gProof->EnablePackage("AF-v4-17");
81 // --- Enable the PWGHFvertexingHF Package
82 parFile="PWGHFvertexingHF.par"; parFile.Prepend(parDir.Data());
83 gProof->UploadPackage(parFile.Data());
84 gProof->EnablePackage("PWGHFvertexingHF");
86 // --- Enable the STEERBase Package
87 parFile="STEERBase.par"; parFile.Prepend(parDir.Data());
88 gProof->UploadPackage(parFile.Data());
89 gProof->EnablePackage("STEERBase");
90 // --- Enable the ESD Package
91 parFile="ESD.par"; parFile.Prepend(parDir.Data());
92 gProof->UploadPackage(parFile.Data());
93 gProof->EnablePackage("ESD");
94 // --- Enable the AOD Package
95 parFile="AOD.par"; parFile.Prepend(parDir.Data());
96 gProof->UploadPackage(parFile.Data());
97 gProof->EnablePackage("AOD");
98 // --- Enable the ANALYSIS Package
99 parFile="ANALYSIS.par"; parFile.Prepend(parDir.Data());
100 gProof->UploadPackage(parFile.Data());
101 gProof->EnablePackage("ANALYSIS");
102 // --- Enable the ANALYSISalice Package
103 parFile="ANALYSISalice.par"; parFile.Prepend(parDir.Data());
104 gProof->UploadPackage(parFile.Data());
105 gProof->EnablePackage("ANALYSISalice");
106 // --- Enable the CORRFW Package
107 parFile="CORRFW.par"; parFile.Prepend(parDir.Data());
108 gProof->UploadPackage(parFile.Data());
109 gProof->EnablePackage("CORRFW");
110 // --- Enable the PWGHFbase Package
111 parFile="PWGHFbase.par"; parFile.Prepend(parDir.Data());
112 gProof->UploadPackage(parFile.Data());
113 gProof->EnablePackage("PWGHFbase");
114 // --- Enable the PWGHFvertexingHF Package
115 parFile="PWGHFvertexingHF.par"; parFile.Prepend(parDir.Data());
116 gProof->UploadPackage(parFile.Data());
117 gProof->EnablePackage("PWGHFvertexingHF");
119 gProof->ShowEnabledPackages(); // show a list of enabled packages
123 // Create Alien plugin, if requested
125 // if(analysisMode!="grid") {printf("Analysis mode must be grid, to use alien plugin\n"); return;}
126 AliAnalysisGrid *alienHandler = CreateAlienHandler(pluginmode,useParFiles,testfileslistWithPlugin);
127 if(!alienHandler) return;
131 //-------------------------------------------------------------------
133 TChain *chainAOD = 0;
134 TString dataset; // for proof
136 if(!useAlienPlugin) {
137 TString makeAODInputChain="../MakeAODInputChain.C"; makeAODInputChain.Prepend(loadMacroPath.Data());
138 if(inputMode=="list") {
140 gROOT->LoadMacro(makeAODInputChain.Data());
141 chainAOD = MakeAODInputChain();// with this it reads ./AliAOD.root and ./AliAOD.VertexingHF.root
142 //chainAOD = MakeAODInputChain("alien:///alice/cern.ch/user/r/rbala/newtrain/out_lhc08x/180100/",1,1);
143 printf("ENTRIES %d\n",chainAOD->GetEntries());
144 } else if(inputMode=="xml") {
146 gROOT->LoadMacro(makeAODInputChain.Data());
147 chainAOD = MakeAODInputChain("collection_aod.xml","collection_aodHF.xml");
148 } else if(inputMode=="dataset") {
150 //gProof->ShowDataSets();
151 dataset="/ITS/dainesea/AODVertexingHF_LHC08x_180100";
155 // Create the analysis manager
156 AliAnalysisManager *mgr = new AliAnalysisManager("My Manager","My Manager");
157 mgr->SetDebugLevel(10);
158 // Connect plug-in to the analysis manager
159 if(useAlienPlugin) mgr->SetGridHandler(alienHandler);
162 AliAODInputHandler *inputHandler = new AliAODInputHandler("handler","handler for D2H");
163 if(analysisMode=="proof" ) {
164 inputHandler->AddFriend("./AliAOD.VertexingHF.root");
165 //inputHandler->AddFriend("deltas/AliAOD.VertexingHF.root");
166 if(saveProofToAlien) mgr->SetSpecialOutputLocation(proofOutdir);
168 mgr->SetInputEventHandler(inputHandler);
169 //-------------------------------------------------------------------
172 //-------------------------------------------------------------------
173 // Analysis tasks (wagons of the train)
175 // First add the task for the PID response setting
176 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
177 AliAnalysisTaskSE *setupTask = AddTaskPIDResponse(kFALSE,kTRUE);
181 ////// ADD THE FULL D2H TRAIN
182 /*taskName="../AddD2HTrain.C"; taskName.Prepend(loadMacroPath.Data());
183 gROOT->LoadMacro(taskName.Data());
184 Bool_t readMC=kFALSE;
185 AddD2HTrain(readMC);//,1,0,0,0,0,0,0,0,0,0,0);*/
187 ////// OR ADD INDIVIDUAL TASKS
190 /* taskName="AddTaskCompareHF.C"; taskName.Prepend(loadMacroPath.Data());
191 gROOT->LoadMacro(taskName.Data());
192 AliAnalysisTaskSECompareHF *cmpTask = AddTaskCompareHF();
194 taskName="AddTaskD0Mass.C"; taskName.Prepend(loadMacroPath.Data());
195 gROOT->LoadMacro(taskName.Data());
196 AliAnalysisTaskSED0Mass *d0massTask = AddTaskD0Mass();
197 AliAnalysisTaskSED0Mass *d0massLikeSignTask = AddTaskD0Mass(1);
199 taskName="AddTaskDplus.C"; taskName.Prepend(loadMacroPath.Data());
200 gROOT->LoadMacro(taskName.Data());
201 AliAnalysisTaskSEDplus *dplusTask = AddTaskDplus();
203 taskName="AddTaskDs.C"; taskName.Prepend(loadMacroPath.Data());
204 gROOT->LoadMacro(taskName.Data());
205 AliAnalysisTaskSEDs *dsTask = AddTaskDs();
207 //taskName="AddTaskSelectHF.C"; taskName.Prepend(loadMacroPath.Data());
208 //gROOT->LoadMacro(taskName.Data());
209 //AliAnalysisTaskSESelectHF *seleTask = AddTaskSelectHF();
211 taskName="AddTaskBkgLikeSignD0.C"; taskName.Prepend(loadMacroPath.Data());
212 gROOT->LoadMacro(taskName.Data());
213 AliAnalysisTaskSEBkgLikeSignD0 *lsD0Task = AddTaskBkgLikeSignD0();
215 taskName="AddTaskCFMultiVarMultiStep.C"; taskName.Prepend(loadMacroPath.Data());
216 gROOT->LoadMacro(taskName.Data());
217 AliCFHeavyFlavourTaskMultiVarMultiStep *cfmvmsTask = AddTaskCFMultiVarMultiStep();
220 taskName="AddTaskSECharmFraction.C";
221 taskName.Prepend(loadMacroPath.Data());
222 gROOT->LoadMacro(taskName.Data());
223 Int_t switchMC[5]={0,0,0,0,0};
224 Int_t ppPbPb=1;// 0 for pp, 1 for PbPb, used to siwtch on/off the removal of daughters from the primary vertex
225 AliAnalysisTaskSECharmFraction *cFractTask = AddTaskSECharmFraction("standard",switchMC,readMC,kTRUE,kFALSE,"D0toKpiCharmFractCuts.root","c",ppPbPb);
226 // arguments: filename,switchMC,readmc,usepid,likesign,cutfilename,containerprefix
229 // attach a private task (not committed)
230 // (the files MyTask.h MyTask.cxx AddMyTask.C have to be declared in plugin
231 // configuration, see below)
233 if(analysisMode.Data()=="proof") {
234 gProof->LoadMacro("MyTask.cxx++g");
236 gROOT->LoadMacro("MyTask.cxx++g");
238 gROOT->LoadMacro("AddMyTask.C");
239 MyTask *myTask = AddMyTask();
242 if(analysisMode.Data()=="proof") {
243 gProof->LoadMacro("AliDStarJets.cxx++g");
245 gROOT->LoadMacro("AliDStarJets.cxx++g");
247 gROOT->LoadMacro("AddTaskDStarJets.C");
248 AliDStarJets *myTask = AddTaskDStarJets();
250 //-------------------------------------------------------------------
255 if(chainAOD) printf("CHAIN HAS %d ENTRIES\n",(Int_t)chainAOD->GetEntries());
257 if(!mgr->InitAnalysis()) return;
259 if(analysisMode=="grid" && !useAlienPlugin) analysisMode="local";
260 if(analysisMode!="proof") {
261 mgr->StartAnalysis(analysisMode.Data(),chainAOD,nentries,firstentry);
264 mgr->StartAnalysis(analysisMode.Data(),dataset.Data(),nentries,firstentry);
269 //_____________________________________________________________________________
271 AliAnalysisGrid* CreateAlienHandler(TString pluginmode="test",Bool_t useParFiles=kFALSE, TString testfileslistWithPlugin="")
273 // Check if user has a valid token, otherwise make one. This has limitations.
274 // One can always follow the standard procedure of calling alien-token-init then
275 // source /tmp/gclient_env_$UID in the current shell.
276 AliAnalysisAlien *plugin = new AliAnalysisAlien();
277 // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
278 plugin->SetRunMode(pluginmode.Data());
280 // Set versions of used packages
281 plugin->SetAPIVersion("V1.1x");
282 plugin->SetROOTVersion();
283 plugin->SetAliROOTVersion();
284 plugin->SetNtestFiles(1);
285 gROOT->LoadMacro("$ALICE_ROOT/PWGHF/vertexingHF/AddGoodRuns.C");
287 // Declare input data to be processed.
288 //************************************************
289 // Set data file list to test on local mode
290 //************************************************
291 plugin->SetFileForTestMode(testfileslistWithPlugin.Data());
293 //************************************************
294 // Set data search pattern for DATA
295 //************************************************
296 //Method 1: To create automatically xml through plugin
297 plugin->SetGridDataDir("/alice/data/2010/LHC10d"); // specify LHC period
298 plugin->SetDataPattern("pass2/AOD018/*AliAOD.root"); // specify reco pass and AOD set
299 plugin->SetFriendChainName("./AliAOD.VertexingHF.root");
300 // OR plugin->SetFriendChainName("deltas/AliAOD.VertexingHF.root");
301 // Adds only the good runs from the Monalisa Run Condition Table
302 // More than one period can be added but the period name has to be removed from GridDataDir (to be tested)
304 //totruns += AddGoodRuns(plugin,"LHC10b"); // specify LHC period
305 //totruns += AddGoodRuns(plugin,"LHC10c"); // specify LHC period
306 totruns += AddGoodRuns(plugin,"LHC10d"); // specify LHC period
307 plugin->SetNrunsPerMaster(totruns);
309 // Method 2: Declare existing data files (e.g xml collections)
311 //plugin->AddDataFile("/alice/cern.ch/user/r/rbala/000168068_000170593.xml");
312 // plugin->SetDataPattern("*AliAOD.root");
313 // plugin->SetFriendChainName("./AliAOD.VertexingHF.root");
315 //************************************************
316 // Set data search pattern for MONTECARLO
317 //************************************************
319 plugin->SetGridDataDir("/alice/sim/LHC10d3"); // specify MC sample
320 plugin->SetDataPattern("AOD005/*AliAOD.root"); // specify AOD set
321 plugin->SetFriendChainName("./AliAOD.VertexingHF.root");
322 // OR plugin->SetFriendChainName("deltas/AliAOD.VertexingHF.root");
323 // Adds only the good runs from the Monalisa Run Condition Table
324 // More than one period can be added!
326 totruns += AddGoodRuns(plugin,"LHC10b","LHC10d3"); // specify LHC period for anchor runs; and the name of the MC production
327 //totruns += AddGoodRuns(plugin,"LHC10c","LHC10f7"); // specify LHC period for anchor runs; and the name of the MC production
328 //totruns += AddGoodRuns(plugin,"LHC10d","LHC10f7"); // specify LHC period for anchor runs; and the name of the MC production
329 plugin->SetNrunsPerMaster(totruns);
332 // Define alien work directory where all files will be copied. Relative to alien $HOME.
333 plugin->SetGridWorkingDir("myHFanalysis");
334 // Name of executable
335 plugin->SetExecutable("myHFanalysis.sh");
336 // Declare alien output directory. Relative to working directory.
337 plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output
338 // Declare the analysis source files names separated by blancs. To be compiled runtime
339 // using ACLiC on the worker nodes.
340 //plugin->SetAnalysisSource("AliDStarJets.cxx");
341 // Declare all libraries (other than the default ones for the framework. These will be
342 // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.
343 plugin->SetAdditionalLibs("libPWGflowBase.so libPWGflowTasks.so libPWGHFbase.so libPWGHFvertexingHF.so");
346 plugin->EnablePackage("STEERBase.par");
347 plugin->EnablePackage("ESD.par");
348 plugin->EnablePackage("AOD.par");
349 plugin->EnablePackage("ANALYSIS.par");
350 plugin->EnablePackage("OADB.par");
351 plugin->EnablePackage("ANALYSISalice.par");
352 plugin->EnablePackage("CORRFW.par");
353 plugin->EnablePackage("PWGHFbase.par");
354 plugin->EnablePackage("PWGHFvertexingHF.par");
356 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/STEER -I$ALICE_ROOT/STEER/STEERBase -I$ALICE_ROOT/STEER/ESD -I$ALICE_ROOT/STEER/AOD -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/OADB -I$ALICE_ROOT/PWGHF -I$ALICE_ROOT/PWGHF/base -I$ALICE_ROOT/PWGHF/vertexingHF -I$ALICE_ROOT/PWG/FLOW/Base -I$ALICE_ROOT/PWG/FLOW/Tasks -g");
358 plugin->SetDefaultOutputs(kTRUE);
360 plugin->SetMergeViaJDL(kTRUE);
361 plugin->SetOneStageMerging(kFALSE);
362 plugin->SetMaxMergeStages(2);
364 // Optionally set a name for the generated analysis macro (default MyAnalysis.C)
365 plugin->SetAnalysisMacro("AnalysisHF.C");
366 // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
367 // Optionally modify the name of the generated JDL (default analysis.jdl)
368 plugin->SetJDLName("TaskHF.jdl");