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