1 class AliAnalysisGrid;
\r
2 TString mySE="ALICE::CNAF::SE";
\r
4 void RunAnalysisAODVertexingHF()
\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
13 // A.Dainese, andrea.dainese@lnl.infn.it
\r
14 // "grid" mode added by R.Bala, bala@to.infn.it
\r
17 gSystem->Setenv("alien_CLOSE_SE",mySE.Data());
\r
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
21 TString trainName = "Test";
\r
22 TString analysisMode = "grid"; // "local", "grid", or "proof"
\r
23 TString inputMode = "list"; // "list", "xml", or "dataset"
\r
24 Long64_t nentries=1234567890,firstentry=0;
\r
25 Bool_t useParFiles=kFALSE;
\r
26 Bool_t useAlienPlugin=kTRUE;
\r
27 TString pluginmode="test";
\r
28 Bool_t saveProofToAlien=kFALSE;
\r
29 TString proofOutdir = "";
\r
30 TString loadMacroPath="$ALICE_ROOT/PWG3/vertexingHF/";
\r
31 //TString loadMacroPath="./"; // this is normally needed for CAF
\r
34 if(analysisMode=="grid") {
\r
36 TGrid::Connect("alien://");
\r
37 } else if(analysisMode=="proof") {
\r
38 // Connect to the PROOF cluster
\r
39 if(inputMode!="dataset") {printf("Input mode must be dataset, for proof analysis\n"); return;}
\r
40 gEnv->SetValue("XSec.GSI.DelegProxy","2");
\r
41 TProof::Open("alicecaf");
\r
42 //TProof::Reset("alicecaf");
\r
43 if(saveProofToAlien) {
\r
44 TGrid::Connect("alien://");
\r
46 TString homedir = gGrid->GetHomeDirectory();
\r
47 TString workdir = homedir + trainName;
\r
48 if(!gGrid->Cd(workdir)) {
\r
50 if(gGrid->Mkdir(workdir)) {
\r
51 gGrid->Cd(trainName);
\r
52 ::Info("VertexingTrain::Connect()", "Directory %s created", gGrid->Pwd());
\r
55 gGrid->Mkdir("proof_output");
\r
56 gGrid->Cd("proof_output");
\r
57 proofOutdir = Form("alien://%s", gGrid->Pwd());
\r
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
73 // Enable the needed packages
\r
74 //gProof->ClearPackages();
\r
75 TString parDir="/afs/cern.ch/user/d/dainesea/code/";
\r
78 gProof->UploadPackage("AF-v4-17");
\r
79 gProof->EnablePackage("AF-v4-17");
\r
80 // --- Enable the PWG3vertexingHF Package
\r
81 parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());
\r
82 gProof->UploadPackage(parFile.Data());
\r
83 gProof->EnablePackage("PWG3vertexingHF");
\r
85 // --- Enable the STEERBase Package
\r
86 parFile="STEERBase.par"; parFile.Prepend(parDir.Data());
\r
87 gProof->UploadPackage(parFile.Data());
\r
88 gProof->EnablePackage("STEERBase");
\r
89 // --- Enable the ESD Package
\r
90 parFile="ESD.par"; parFile.Prepend(parDir.Data());
\r
91 gProof->UploadPackage(parFile.Data());
\r
92 gProof->EnablePackage("ESD");
\r
93 // --- Enable the AOD Package
\r
94 parFile="AOD.par"; parFile.Prepend(parDir.Data());
\r
95 gProof->UploadPackage(parFile.Data());
\r
96 gProof->EnablePackage("AOD");
\r
97 // --- Enable the ANALYSIS Package
\r
98 parFile="ANALYSIS.par"; parFile.Prepend(parDir.Data());
\r
99 gProof->UploadPackage(parFile.Data());
\r
100 gProof->EnablePackage("ANALYSIS");
\r
101 // --- Enable the ANALYSISalice Package
\r
102 parFile="ANALYSISalice.par"; parFile.Prepend(parDir.Data());
\r
103 gProof->UploadPackage(parFile.Data());
\r
104 gProof->EnablePackage("ANALYSISalice");
\r
105 // --- Enable the CORRFW Package
\r
106 parFile="CORRFW.par"; parFile.Prepend(parDir.Data());
\r
107 gProof->UploadPackage(parFile.Data());
\r
108 gProof->EnablePackage("CORRFW");
\r
109 // --- Enable the PWG3base Package
\r
110 parFile="PWG3base.par"; parFile.Prepend(parDir.Data());
\r
111 gProof->UploadPackage(parFile.Data());
\r
112 gProof->EnablePackage("PWG3base");
\r
113 // --- Enable the PWG3vertexingHF Package
\r
114 parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());
\r
115 gProof->UploadPackage(parFile.Data());
\r
116 gProof->EnablePackage("PWG3vertexingHF");
\r
117 // --- Enable the JETAN Package
\r
118 parFile="JETAN.par"; parFile.Prepend(parDir.Data());
\r
119 gProof->UploadPackage(parFile.Data());
\r
120 gProof->EnablePackage("JETAN");
\r
121 // --- Enable the PWG3muon Package
\r
122 parFile="PWG3muon.par"; parFile.Prepend(parDir.Data());
\r
123 gProof->UploadPackage(parFile.Data());
\r
124 gProof->EnablePackage("PWG3muon");
\r
125 // --- Enable the PWG4PartCorrBase Package
\r
126 parFile="PWG4PartCorrBase.par"; parFile.Prepend(parDir.Data());
\r
127 gProof->UploadPackage(parFile.Data());
\r
128 gProof->EnablePackage("PWG4PartCorrBase");
\r
129 // --- Enable the PWG4PartCorrDep Package
\r
130 parFile="PWG4PartCorrDep.par"; parFile.Prepend(parDir.Data());
\r
131 gProof->UploadPackage(parFile.Data());
\r
132 gProof->EnablePackage("PWG4PartCorrDep");
\r
134 gProof->ShowEnabledPackages(); // show a list of enabled packages
\r
138 // Create Alien plugin, if requested
\r
139 if(useAlienPlugin) {
\r
140 if(analysisMode!="grid") {printf("Analysis mode must be grid, to use alien plugin\n"); return;}
\r
141 AliAnalysisGrid *alienHandler = CreateAlienHandler(pluginmode,useParFiles);
\r
142 if(!alienHandler) return;
\r
146 //-------------------------------------------------------------------
\r
148 TChain *chainAOD = 0;
\r
149 TString dataset; // for proof
\r
151 if(!useAlienPlugin) {
\r
152 TString makeAODInputChain="MakeAODInputChain.C"; makeAODInputChain.Prepend(loadMacroPath.Data());
\r
153 if(inputMode=="list") {
\r
155 gROOT->LoadMacro(makeAODInputChain.Data());
\r
156 chainAOD = MakeAODInputChain();// with this it reads ./AliAOD.root and ./AliAOD.VertexingHF.root
\r
157 //chainAOD = MakeAODInputChain("alien:///alice/cern.ch/user/r/rbala/newtrain/out_lhc08x/180100/",1,1);
\r
158 } else if(inputMode=="xml") {
\r
160 gROOT->LoadMacro(makeAODInputChain.Data());
\r
161 chainAOD = MakeAODInputChain("collection_aod.xml","collection_aodHF.xml");
\r
162 } else if(inputMode=="dataset") {
\r
164 //gProof->ShowDataSets();
\r
165 dataset="/ITS/dainesea/AODVertexingHF_LHC08x_180100";
\r
169 // Create the analysis manager
\r
170 AliAnalysisManager *mgr = new AliAnalysisManager("My Manager","My Manager");
\r
171 mgr->SetDebugLevel(0);
\r
172 // Connect plug-in to the analysis manager
\r
173 if(useAlienPlugin) mgr->SetGridHandler(alienHandler);
\r
176 AliAODInputHandler *inputHandler = new AliAODInputHandler();
\r
177 if(analysisMode=="proof") {
\r
178 inputHandler->AddFriend("AliAOD.VertexingHF.root");
\r
179 if(saveProofToAlien) mgr->SetSpecialOutputLocation(proofOutdir);
\r
181 mgr->SetInputEventHandler(inputHandler);
\r
182 //-------------------------------------------------------------------
\r
185 //-------------------------------------------------------------------
\r
186 // Analysis tasks (wagons of the train)
\r
190 taskName="AddTaskCompareHF.C"; taskName.Prepend(loadMacroPath.Data());
\r
191 gROOT->LoadMacro(taskName.Data());
\r
192 AliAnalysisTaskSECompareHF *cmpTask = AddTaskCompareHF();
\r
194 taskName="AddTaskD0Mass.C"; taskName.Prepend(loadMacroPath.Data());
\r
195 gROOT->LoadMacro(taskName.Data());
\r
196 AliAnalysisTaskSED0Mass *d0massTask = AddTaskD0Mass();
\r
199 taskName="AddTaskDplus.C"; taskName.Prepend(loadMacroPath.Data());
\r
200 gROOT->LoadMacro(taskName.Data());
\r
201 AliAnalysisTaskSEDplus *dplusTask = AddTaskDplus();
\r
203 //taskName="AddTaskSelectHF.C"; taskName.Prepend(loadMacroPath.Data());
\r
204 //gROOT->LoadMacro(taskName.Data());
\r
205 //AliAnalysisTaskSESelectHF *seleTask = AddTaskSelectHF();
\r
207 taskName="AddTaskBkgLikeSignD0.C"; taskName.Prepend(loadMacroPath.Data());
\r
208 gROOT->LoadMacro(taskName.Data());
\r
209 AliAnalysisTaskSEBkgLikeSignD0 *lsD0Task = AddTaskBkgLikeSignD0();
\r
211 taskName="AddTaskBkgLikeSignJPSI.C"; taskName.Prepend(loadMacroPath.Data());
\r
212 gROOT->LoadMacro(taskName.Data());
\r
213 AliAnalysisTaskSEBkgLikeSignJPSI *lsJPSITask = AddTaskBkgLikeSignJPSI();
\r
215 taskName="AddTaskBtoJPSItoEle.C"; taskName.Prepend(loadMacroPath.Data());
\r
216 gROOT->LoadMacro(taskName.Data());
\r
217 AliAnalysisTaskSEBtoJPSItoEle *jpsiTask = AddTaskBtoJPSItoEle();
\r
219 taskName="AddTaskCFMultiVarMultiStep.C"; taskName.Prepend(loadMacroPath.Data());
\r
220 gROOT->LoadMacro(taskName.Data());
\r
221 AliCFHeavyFlavourTaskMultiVarMultiStep *cfmvmsTask = AddTaskCFMultiVarMultiStep();
\r
223 taskName="AddTaskCharmFraction.C"; taskName.Prepend(loadMacroPath.Data());
\r
224 gROOT->LoadMacro(taskName.Data());
\r
225 Int_t switchMC[5]={1,1,1,1,1};
\r
226 AliAnalysisTaskSECharmFraction *cFractTask = AddTaskCharmFraction("d0D0.root",switchMC);
\r
228 // attach a private task (not committed)
\r
229 // (the files MyTask.h MyTask.cxx AddMyTask.C have to be declared in plugin
\r
230 // configuration, see below)
\r
232 if(analysisMode.Data()=="proof") {
\r
233 gProof->LoadMacro("MyTask.cxx++g");
\r
235 gROOT->LoadMacro("MyTask.cxx++g");
\r
237 gROOT->LoadMacro("AddMyTask.C");
\r
238 MyTask *myTask = AddMyTask();
\r
241 if(analysisMode.Data()=="proof") {
\r
242 gProof->LoadMacro("AliDStarJets.cxx++g");
\r
244 gROOT->LoadMacro("AliDStarJets.cxx++g");
\r
246 gROOT->LoadMacro("AddTaskDStarJets.C");
\r
247 AliDStarJets *myTask = AddTaskDStarJets();
\r
249 //-------------------------------------------------------------------
\r
252 // Run the analysis
\r
254 if(chainAOD) printf("CHAIN HAS %d ENTRIES\n",(Int_t)chainAOD->GetEntries());
\r
256 if(!mgr->InitAnalysis()) return;
\r
257 mgr->PrintStatus();
\r
258 if(analysisMode=="grid" && !useAlienPlugin) analysisMode="local";
\r
259 if(analysisMode!="proof") {
\r
260 mgr->StartAnalysis(analysisMode.Data(),chainAOD,nentries,firstentry);
\r
263 mgr->StartAnalysis(analysisMode.Data(),dataset.Data(),nentries,firstentry);
\r
268 //_____________________________________________________________________________
\r
270 AliAnalysisGrid* CreateAlienHandler(TString pluginmode="test",Bool_t useParFiles=kFALSE)
\r
272 // Check if user has a valid token, otherwise make one. This has limitations.
\r
273 // One can always follow the standard procedure of calling alien-token-init then
\r
274 // source /tmp/gclient_env_$UID in the current shell.
\r
275 if (!AliAnalysisGrid::CreateToken()) return NULL;
\r
276 AliAnalysisAlien *plugin = new AliAnalysisAlien();
\r
277 // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
\r
278 plugin->SetRunMode(pluginmode.Data());
\r
279 plugin->SetUser("dainesea");
\r
280 plugin->SetNtestFiles(1);
\r
281 // Set versions of used packages
\r
282 plugin->SetAPIVersion("V2.4");
\r
283 plugin->SetROOTVersion("v5-24-00");
\r
284 plugin->SetAliROOTVersion("v4-18-06-AN");
\r
285 // Declare input data to be processed.
\r
286 // Method 1: Create automatically XML collections using alien 'find' command.
\r
287 // Define production directory LFN
\r
288 //plugin->SetGridDataDir("/alice/cern.ch/user/r/rbala/newtrain/out_lhc08x/");
\r
289 //plugin->SetGridDataDir("/alice/cern.ch/user/m/mgheata/analysisESD/output_train_default_28May2009_09h33/");
\r
290 plugin->SetGridDataDir("/alice/sim/PDC_09/LHC09a5/AOD1/");
\r
291 // Set data search pattern
\r
292 plugin->SetDataPattern("AliAOD.root");
\r
293 plugin->SetFriendChainName("AliAOD.VertexingHF.root");
\r
294 // ...then add run numbers to be considered
\r
295 //plugin->AddRunNumber(529007);
\r
297 //plugin->SetRunRange(529000,529007);
\r
298 // Method 2: Declare existing data files (raw collections, xml collections, root file)
\r
299 // If no path mentioned data is supposed to be in the work directory (see SetGridWorkingDir())
\r
300 // XML collections added via this method can be combined with the first method if
\r
301 // the content is compatible (using or not tags)
\r
302 //plugin->AddDataFile("/alice/cern.ch/user/r/rbala/newtrain/collection/collection_aod_lhc08w.xml");
\r
303 // plugin->AddDataFile("/alice/data/2008/LHC08c/000057657/raw/Run57657.Merged.RAW.tag.root");
\r
304 // Define alien work directory where all files will be copied. Relative to alien $HOME.
\r
305 plugin->SetGridWorkingDir("lhc09a5_061009");
\r
306 // Declare alien output directory. Relative to working directory.
\r
307 plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output
\r
308 // Declare the analysis source files names separated by blancs. To be compiled runtime
\r
309 // using ACLiC on the worker nodes.
\r
310 //plugin->SetAnalysisSource("AliDStarJets.cxx");
\r
311 // Declare all libraries (other than the default ones for the framework. These will be
\r
312 // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.
\r
313 plugin->SetAdditionalLibs("libPWG3vertexingHF.so libPWG3base.so libPWG3muon.so libPWG4PartCorrBase.so libPWG4PartCorrDep.so MakeAODInputChain.C"/* AliDStarJets.cxx AliDStarJets.h"*/);
\r
316 plugin->EnablePackage("STEERBase.par");
\r
317 plugin->EnablePackage("ESD.par");
\r
318 plugin->EnablePackage("AOD.par");
\r
319 plugin->EnablePackage("ANALYSIS.par");
\r
320 plugin->EnablePackage("ANALYSISalice.par");
\r
321 plugin->EnablePackage("CORRFW.par");
\r
322 plugin->EnablePackage("PWG3base.par");
\r
323 plugin->EnablePackage("PWG3vertexingHF.par");
\r
324 plugin->EnablePackage("PWG3muon.par");
\r
325 plugin->EnablePackage("PWG4PartCorrBase.par");
\r
326 plugin->EnablePackage("PWG4PartCorrDep.par");
\r
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
329 // Declare the output file names separated by blancs.
\r
330 // (can be like: file.root or file.root@ALICE::Niham::File)
\r
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
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
355 plugin->SetPreferedSE(mySE.Data());
\r