]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/vertexingHF/RunAnalysisAODVertexingHF.C
Added event-level selection (Chiara)
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / RunAnalysisAODVertexingHF.C
CommitLineData
1a6db1e0 1class AliAnalysisGrid;\r
7cf95461 2TString mySE="ALICE::CNAF::SE";\r
1a6db1e0 3\r
32bb35a1 4void RunAnalysisAODVertexingHF()\r
5{\r
6 //\r
7 // Test macro for AliAnalysisTaskSE's for heavy-flavour candidates\r
8 // It has the structure of a Analysis Train:\r
9 // - in this macro, change things related to running mode\r
10 // and input preparation \r
11 // - add your task using a AddTaskXXX macro \r
12 //\r
13 // A.Dainese, andrea.dainese@lnl.infn.it\r
14 // "grid" mode added by R.Bala, bala@to.infn.it\r
15 //\r
16\r
7cf95461 17 gSystem->Setenv("alien_CLOSE_SE",mySE.Data());\r
18\r
d2a0f79f 19 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"); \r
1a6db1e0 20 //\r
dafe1805 21 TString trainName = "D2H";\r
75e79c0f 22 TString analysisMode = "grid"; // "local", "grid", or "proof"\r
23 TString inputMode = "list"; // "list", "xml", or "dataset"\r
dafe1805 24 Long64_t nentries=1000,firstentry=0;\r
aabcfd8f 25 Bool_t useParFiles=kFALSE;\r
75ff3310 26 Bool_t useAlienPlugin=kTRUE;\r
034b71b0 27 TString pluginmode="test";\r
6015e14b 28 Bool_t saveProofToAlien=kFALSE;\r
29 TString proofOutdir = "";\r
aa06ab78 30 TString loadMacroPath="$ALICE_ROOT/PWG3/vertexingHF/macros/";\r
a73f46fd 31 //TString loadMacroPath="./"; // this is normally needed for CAF\r
1a6db1e0 32 //\r
32bb35a1 33\r
1a6db1e0 34 if(analysisMode=="grid") {\r
35 // Connect to AliEn\r
36 TGrid::Connect("alien://");\r
37 } else if(analysisMode=="proof") {\r
38 // Connect to the PROOF cluster\r
1a02c480 39 if(inputMode!="dataset") {printf("Input mode must be dataset, for proof analysis\n"); return;}\r
75e79c0f 40 gEnv->SetValue("XSec.GSI.DelegProxy","2");\r
1a6db1e0 41 TProof::Open("alicecaf");\r
42 //TProof::Reset("alicecaf");\r
6015e14b 43 if(saveProofToAlien) {\r
44 TGrid::Connect("alien://");\r
45 if(gGrid) {\r
46 TString homedir = gGrid->GetHomeDirectory();\r
47 TString workdir = homedir + trainName;\r
48 if(!gGrid->Cd(workdir)) {\r
49 gGrid->Cd(homedir);\r
50 if(gGrid->Mkdir(workdir)) {\r
51 gGrid->Cd(trainName);\r
52 ::Info("VertexingTrain::Connect()", "Directory %s created", gGrid->Pwd());\r
53 }\r
54 } \r
55 gGrid->Mkdir("proof_output");\r
56 gGrid->Cd("proof_output");\r
57 proofOutdir = Form("alien://%s", gGrid->Pwd());\r
58 } \r
59 }\r
1a6db1e0 60 }\r
32bb35a1 61\r
32bb35a1 62\r
1a6db1e0 63 // AliRoot libraries\r
64 if(analysisMode=="local" || analysisMode=="grid") {\r
65 TString loadLibraries="LoadLibraries.C"; loadLibraries.Prepend(loadMacroPath.Data());\r
66 gROOT->LoadMacro(loadLibraries.Data());\r
67 LoadLibraries(useParFiles);\r
68 } else if (analysisMode=="proof") {\r
69 gSystem->Load("libTree.so");\r
70 gSystem->Load("libGeom.so");\r
71 gSystem->Load("libPhysics.so");\r
72 gSystem->Load("libVMC.so"); \r
034b71b0 73 gSystem->Load("libMinuit.so"); \r
1a6db1e0 74 // Enable the needed packages\r
75 //gProof->ClearPackages();\r
a73f46fd 76 TString parDir="/afs/cern.ch/user/d/dainesea/code/";\r
77 TString parFile;\r
1a6db1e0 78 if(!useParFiles) {\r
75e79c0f 79 gProof->UploadPackage("AF-v4-17");\r
80 gProof->EnablePackage("AF-v4-17");\r
a73f46fd 81 // --- Enable the PWG3vertexingHF Package\r
82 parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());\r
83 gProof->UploadPackage(parFile.Data());\r
84 gProof->EnablePackage("PWG3vertexingHF");\r
1a6db1e0 85 } else {\r
1a6db1e0 86 // --- Enable the STEERBase Package\r
87 parFile="STEERBase.par"; parFile.Prepend(parDir.Data());\r
88 gProof->UploadPackage(parFile.Data());\r
89 gProof->EnablePackage("STEERBase");\r
90 // --- Enable the ESD Package\r
91 parFile="ESD.par"; parFile.Prepend(parDir.Data());\r
92 gProof->UploadPackage(parFile.Data());\r
93 gProof->EnablePackage("ESD");\r
94 // --- Enable the AOD Package\r
95 parFile="AOD.par"; parFile.Prepend(parDir.Data());\r
96 gProof->UploadPackage(parFile.Data());\r
97 gProof->EnablePackage("AOD");\r
98 // --- Enable the ANALYSIS Package\r
99 parFile="ANALYSIS.par"; parFile.Prepend(parDir.Data());\r
100 gProof->UploadPackage(parFile.Data());\r
101 gProof->EnablePackage("ANALYSIS");\r
102 // --- Enable the ANALYSISalice Package\r
103 parFile="ANALYSISalice.par"; parFile.Prepend(parDir.Data());\r
104 gProof->UploadPackage(parFile.Data());\r
105 gProof->EnablePackage("ANALYSISalice");\r
106 // --- Enable the CORRFW Package\r
107 parFile="CORRFW.par"; parFile.Prepend(parDir.Data());\r
108 gProof->UploadPackage(parFile.Data());\r
109 gProof->EnablePackage("CORRFW");\r
b093f071 110 // --- Enable the PWG3base Package\r
111 parFile="PWG3base.par"; parFile.Prepend(parDir.Data());\r
112 gProof->UploadPackage(parFile.Data());\r
113 gProof->EnablePackage("PWG3base");\r
1a6db1e0 114 // --- Enable the PWG3vertexingHF Package\r
115 parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());\r
116 gProof->UploadPackage(parFile.Data());\r
117 gProof->EnablePackage("PWG3vertexingHF");\r
b093f071 118 // --- Enable the PWG3muon Package\r
119 parFile="PWG3muon.par"; parFile.Prepend(parDir.Data());\r
120 gProof->UploadPackage(parFile.Data());\r
121 gProof->EnablePackage("PWG3muon");\r
1a6db1e0 122 }\r
123 gProof->ShowEnabledPackages(); // show a list of enabled packages\r
124 }\r
32bb35a1 125\r
126\r
1a6db1e0 127 // Create Alien plugin, if requested\r
128 if(useAlienPlugin) { \r
75e79c0f 129 if(analysisMode!="grid") {printf("Analysis mode must be grid, to use alien plugin\n"); return;}\r
1a6db1e0 130 AliAnalysisGrid *alienHandler = CreateAlienHandler(pluginmode,useParFiles); \r
131 if(!alienHandler) return;\r
132 }\r
32bb35a1 133\r
134\r
135 //-------------------------------------------------------------------\r
75e79c0f 136 // Prepare input\r
32bb35a1 137 TChain *chainAOD = 0;\r
1a6db1e0 138 TString dataset; // for proof\r
139\r
140 if(!useAlienPlugin) {\r
aabcfd8f 141 TString makeAODInputChain="MakeAODInputChain.C"; makeAODInputChain.Prepend(loadMacroPath.Data());\r
1a6db1e0 142 if(inputMode=="list") {\r
143 // Local files\r
75e79c0f 144 gROOT->LoadMacro(makeAODInputChain.Data());\r
1a6db1e0 145 chainAOD = MakeAODInputChain();// with this it reads ./AliAOD.root and ./AliAOD.VertexingHF.root\r
aabcfd8f 146 //chainAOD = MakeAODInputChain("alien:///alice/cern.ch/user/r/rbala/newtrain/out_lhc08x/180100/",1,1);\r
dafe1805 147 printf("ENTRIES %d\n",chainAOD->GetEntries());\r
1a6db1e0 148 } else if(inputMode=="xml") {\r
149 // xml\r
75e79c0f 150 gROOT->LoadMacro(makeAODInputChain.Data());\r
1a6db1e0 151 chainAOD = MakeAODInputChain("collection_aod.xml","collection_aodHF.xml");\r
152 } else if(inputMode=="dataset") {\r
153 // CAF dataset\r
75e79c0f 154 //gProof->ShowDataSets();\r
155 dataset="/ITS/dainesea/AODVertexingHF_LHC08x_180100";\r
1a6db1e0 156 }\r
32bb35a1 157 }\r
158\r
159 // Create the analysis manager\r
160 AliAnalysisManager *mgr = new AliAnalysisManager("My Manager","My Manager");\r
dafe1805 161 mgr->SetDebugLevel(10);\r
1a6db1e0 162 // Connect plug-in to the analysis manager\r
163 if(useAlienPlugin) mgr->SetGridHandler(alienHandler);\r
164\r
32bb35a1 165 // Input\r
166 AliAODInputHandler *inputHandler = new AliAODInputHandler();\r
4a493b89 167 if(analysisMode=="proof" ) {\r
6015e14b 168 inputHandler->AddFriend("AliAOD.VertexingHF.root");\r
169 if(saveProofToAlien) mgr->SetSpecialOutputLocation(proofOutdir);\r
170 }\r
32bb35a1 171 mgr->SetInputEventHandler(inputHandler);\r
172 //-------------------------------------------------------------------\r
173\r
174 \r
175 //-------------------------------------------------------------------\r
1a6db1e0 176 // Analysis tasks (wagons of the train) \r
32bb35a1 177 //\r
1a6db1e0 178 TString taskName;\r
38fae784 179 ////// ADD THE FULL D2H TRAIN\r
180 taskName="AddD2HTrain.C"; taskName.Prepend(loadMacroPath.Data());\r
181 gROOT->LoadMacro(taskName.Data());\r
182 Bool_t readMC=kFALSE;\r
183 AddD2HTrain(readMC);//,1,0,0,0,0,0,0,0,0,0,0);\r
184\r
185 ////// OR ADD INDIVIDUAL TASKS\r
186 /*\r
dafe1805 187 \r
188 //taskName="AddTaskCompareHF.C"; taskName.Prepend(loadMacroPath.Data());\r
189 //gROOT->LoadMacro(taskName.Data());\r
190 //AliAnalysisTaskSECompareHF *cmpTask = AddTaskCompareHF();\r
f3be8296 191 \r
a273622f 192 taskName="AddTaskD0Mass.C"; taskName.Prepend(loadMacroPath.Data());\r
193 gROOT->LoadMacro(taskName.Data());\r
194 AliAnalysisTaskSED0Mass *d0massTask = AddTaskD0Mass();\r
dafe1805 195 AliAnalysisTaskSED0Mass *d0massLikeSignTask = AddTaskD0Mass(1); \r
a273622f 196 \r
d486095a 197 taskName="AddTaskDplus.C"; taskName.Prepend(loadMacroPath.Data());\r
198 gROOT->LoadMacro(taskName.Data());\r
199 AliAnalysisTaskSEDplus *dplusTask = AddTaskDplus();\r
81c01455 200 \r
30a87263 201 taskName="AddTaskDs.C"; taskName.Prepend(loadMacroPath.Data());\r
202 gROOT->LoadMacro(taskName.Data());\r
203 AliAnalysisTaskSEDs *dsTask = AddTaskDs();\r
204\r
1a6db1e0 205 //taskName="AddTaskSelectHF.C"; taskName.Prepend(loadMacroPath.Data());\r
206 //gROOT->LoadMacro(taskName.Data());\r
207 //AliAnalysisTaskSESelectHF *seleTask = AddTaskSelectHF();\r
dafe1805 208 \r
17e8df02 209 taskName="AddTaskBkgLikeSignD0.C"; taskName.Prepend(loadMacroPath.Data());\r
210 gROOT->LoadMacro(taskName.Data());\r
211 AliAnalysisTaskSEBkgLikeSignD0 *lsD0Task = AddTaskBkgLikeSignD0();\r
212\r
8f6dd855 213 taskName="AddTaskBkgLikeSignJPSI.C"; taskName.Prepend(loadMacroPath.Data());\r
b093f071 214 gROOT->LoadMacro(taskName.Data());\r
17e8df02 215 AliAnalysisTaskSEBkgLikeSignJPSI *lsJPSITask = AddTaskBkgLikeSignJPSI();\r
a9f684f8 216\r
dafe1805 217 //taskName="AddTaskBtoJPSItoEle.C"; taskName.Prepend(loadMacroPath.Data());\r
218 //gROOT->LoadMacro(taskName.Data());\r
219 //AliAnalysisTaskSEBtoJPSItoEle *jpsiTask = AddTaskBtoJPSItoEle();\r
a9f684f8 220\r
75ff3310 221 taskName="AddTaskCFMultiVarMultiStep.C"; taskName.Prepend(loadMacroPath.Data());\r
b093f071 222 gROOT->LoadMacro(taskName.Data());\r
09d822de 223 AliCFHeavyFlavourTaskMultiVarMultiStep *cfmvmsTask = AddTaskCFMultiVarMultiStep();\r
a9f684f8 224\r
d234e959 225 taskName="AddTaskCharmFraction.C"; taskName.Prepend(loadMacroPath.Data());\r
226 gROOT->LoadMacro(taskName.Data());\r
624c07ab 227 Int_t switchMC[5]={1,1,1,1,1};\r
38fae784 228 AliAnalysisTaskSECharmFraction *cFractTask = AddTaskCharmFraction("d0D0",switchMC);\r
229 */\r
f6cc2d5d 230 // attach a private task (not committed)\r
231 // (the files MyTask.h MyTask.cxx AddMyTask.C have to be declared in plugin\r
232 // configuration, see below)\r
233 /*\r
75e79c0f 234 if(analysisMode.Data()=="proof") {\r
235 gProof->LoadMacro("MyTask.cxx++g");\r
236 } else {\r
237 gROOT->LoadMacro("MyTask.cxx++g");\r
238 }\r
239 gROOT->LoadMacro("AddMyTask.C");\r
240 MyTask *myTask = AddMyTask();\r
f6cc2d5d 241 */\r
624c07ab 242 /*\r
243 if(analysisMode.Data()=="proof") {\r
244 gProof->LoadMacro("AliDStarJets.cxx++g");\r
245 } else {\r
246 gROOT->LoadMacro("AliDStarJets.cxx++g");\r
247 }\r
248 gROOT->LoadMacro("AddTaskDStarJets.C");\r
249 AliDStarJets *myTask = AddTaskDStarJets();\r
250 */\r
32bb35a1 251 //-------------------------------------------------------------------\r
252\r
253 //\r
254 // Run the analysis\r
255 // \r
1a6db1e0 256 if(chainAOD) printf("CHAIN HAS %d ENTRIES\n",(Int_t)chainAOD->GetEntries());\r
257\r
258 if(!mgr->InitAnalysis()) return;\r
259 mgr->PrintStatus();\r
260 if(analysisMode=="grid" && !useAlienPlugin) analysisMode="local";\r
ff395ef6 261 if(analysisMode!="proof") {\r
75e79c0f 262 mgr->StartAnalysis(analysisMode.Data(),chainAOD,nentries,firstentry);\r
263 } else {\r
264 // proof\r
265 mgr->StartAnalysis(analysisMode.Data(),dataset.Data(),nentries,firstentry);\r
266 }\r
32bb35a1 267\r
268 return;\r
269}\r
1a6db1e0 270//_____________________________________________________________________________\r
271//\r
272AliAnalysisGrid* CreateAlienHandler(TString pluginmode="test",Bool_t useParFiles=kFALSE)\r
273{\r
274 // Check if user has a valid token, otherwise make one. This has limitations.\r
275 // One can always follow the standard procedure of calling alien-token-init then\r
276 // source /tmp/gclient_env_$UID in the current shell.\r
277 if (!AliAnalysisGrid::CreateToken()) return NULL;\r
278 AliAnalysisAlien *plugin = new AliAnalysisAlien();\r
279 // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")\r
280 plugin->SetRunMode(pluginmode.Data());\r
281 plugin->SetUser("dainesea");\r
4a493b89 282 plugin->SetNtestFiles(1);\r
1a6db1e0 283 // Set versions of used packages\r
284 plugin->SetAPIVersion("V2.4");\r
e501585f 285 plugin->SetROOTVersion("v5-24-00");\r
dafe1805 286 plugin->SetAliROOTVersion("v4-18-07-AN");\r
1a6db1e0 287 // Declare input data to be processed.\r
288 // Method 1: Create automatically XML collections using alien 'find' command.\r
289 // Define production directory LFN\r
38fae784 290 plugin->SetGridDataDir("/alice/cern.ch/user/r/rbala/data_pass4_good_runCINT1B_8thfeb/");\r
291 //plugin->SetGridDataDir("/alice/sim/PDC_09/LHC09a4/AOD3/");\r
1a6db1e0 292 // Set data search pattern\r
293 plugin->SetDataPattern("AliAOD.root");\r
4a493b89 294 plugin->SetFriendChainName("./AliAOD.VertexingHF.root");\r
295 //plugin->SetFriendChainName("deltas/AliAOD.VertexingHF.root");\r
1a6db1e0 296 // ...then add run numbers to be considered\r
e501585f 297 //plugin->AddRunNumber(529007);\r
d234e959 298 // or\r
299 //plugin->SetRunRange(529000,529007);\r
1a6db1e0 300 // Method 2: Declare existing data files (raw collections, xml collections, root file)\r
301 // If no path mentioned data is supposed to be in the work directory (see SetGridWorkingDir())\r
302 // XML collections added via this method can be combined with the first method if\r
303 // the content is compatible (using or not tags)\r
304 //plugin->AddDataFile("/alice/cern.ch/user/r/rbala/newtrain/collection/collection_aod_lhc08w.xml");\r
305 // plugin->AddDataFile("/alice/data/2008/LHC08c/000057657/raw/Run57657.Merged.RAW.tag.root");\r
306 // Define alien work directory where all files will be copied. Relative to alien $HOME.\r
dafe1805 307 plugin->SetGridWorkingDir("lhc09a5_231009");\r
1a6db1e0 308 // Declare alien output directory. Relative to working directory.\r
309 plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output\r
310 // Declare the analysis source files names separated by blancs. To be compiled runtime\r
311 // using ACLiC on the worker nodes.\r
624c07ab 312 //plugin->SetAnalysisSource("AliDStarJets.cxx");\r
1a6db1e0 313 // Declare all libraries (other than the default ones for the framework. These will be\r
314 // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.\r
4a493b89 315 plugin->SetAdditionalLibs("libPWG3vertexingHF.so libPWG3base.so libPWG3muon.so");\r
1a6db1e0 316 // use par files\r
317 if(useParFiles) {\r
318 plugin->EnablePackage("STEERBase.par");\r
319 plugin->EnablePackage("ESD.par");\r
320 plugin->EnablePackage("AOD.par");\r
321 plugin->EnablePackage("ANALYSIS.par");\r
322 plugin->EnablePackage("ANALYSISalice.par");\r
323 plugin->EnablePackage("CORRFW.par");\r
75ff3310 324 plugin->EnablePackage("PWG3base.par");\r
1a6db1e0 325 plugin->EnablePackage("PWG3vertexingHF.par");\r
75ff3310 326 plugin->EnablePackage("PWG3muon.par");\r
1a6db1e0 327 }\r
d2a0f79f 328 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");\r
1a6db1e0 329 // Declare the output file names separated by blancs.\r
330 // (can be like: file.root or file.root@ALICE::Niham::File)\r
e501585f 331 plugin->SetDefaultOutputs(kTRUE);\r
332 //plugin->SetOutputFiles("output.root CmpHF.root CmpHFnt.root D0InvMass.root InvMassDplus.root InvMassDplus_nt1.root InvMassDplus_nt2.root");\r
1a6db1e0 333 // Optionally define the files to be archived.\r
334 // plugin->SetOutputArchive("log_archive.zip:stdout,stderr@ALICE::NIHAM::File root_archive.zip:*.root@ALICE::NIHAM::File");\r
335 plugin->SetOutputArchive("log_archive.zip:stdout,stderr");\r
336 // Optionally set a name for the generated analysis macro (default MyAnalysis.C)\r
337 plugin->SetAnalysisMacro("AnalysisHF.C");\r
338 // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)\r
339 plugin->SetSplitMaxInputFileNumber(5);\r
340 // Optionally set number of failed jobs that will trigger killing waiting sub-jobs.\r
341 //plugin->SetMaxInitFailed(5);\r
342 // Optionally resubmit threshold.\r
343 //plugin->SetMasterResubmitThreshold(90);\r
344 // Optionally set time to live (default 30000 sec)\r
345 //plugin->SetTTL(20000);\r
346 // Optionally set input format (default xml-single)\r
347 plugin->SetInputFormat("xml-single");\r
348 // Optionally modify the name of the generated JDL (default analysis.jdl)\r
349 plugin->SetJDLName("TaskHF.jdl");\r
350 // Optionally modify job price (default 1)\r
351 //plugin->SetPrice(1); \r
352 // Optionally modify split mode (default 'se') \r
353 plugin->SetSplitMode("se");\r
354 // Optionally set the preferred SE \r
7cf95461 355 plugin->SetPreferedSE(mySE.Data());\r
1a6db1e0 356 \r
357 return plugin;\r
358}\r