]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/vertexingHF/RunAnalysisAODVertexingHF.C
Update (Zaida)
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / RunAnalysisAODVertexingHF.C
index d309bbedfd6c61186525de5b93c45286f9dd074c..6f7501e9025a72bbd5dc1db3fab152bc26d27825 100644 (file)
-class AliAnalysisGrid;\r
-TString mySE="ALICE::CNAF::SE";\r
-\r
-void RunAnalysisAODVertexingHF()\r
-{\r
-  //\r
-  // Test macro for AliAnalysisTaskSE's for heavy-flavour candidates\r
-  // It has the structure of a Analysis Train:\r
-  // - in this macro, change things related to running mode\r
-  //   and input preparation \r
-  // - add your task using a AddTaskXXX macro \r
-  //\r
-  // A.Dainese, andrea.dainese@lnl.infn.it\r
-  // "grid" mode added by R.Bala, bala@to.infn.it\r
-  //\r
-\r
-  gSystem->Setenv("alien_CLOSE_SE",mySE.Data());\r
-\r
-  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
-  //\r
-  TString trainName = "D2H";\r
-  TString analysisMode = "grid"; // "local", "grid", or "proof"\r
-  TString inputMode    = "list"; // "list", "xml", or "dataset"\r
-  Long64_t nentries=1000,firstentry=0;\r
-  Bool_t useParFiles=kFALSE;\r
-  Bool_t useAlienPlugin=kTRUE;\r
-  TString pluginmode="test";\r
-  Bool_t saveProofToAlien=kFALSE;\r
-  TString proofOutdir = "";\r
-  TString loadMacroPath="$ALICE_ROOT/PWG3/vertexingHF/";\r
-  //TString loadMacroPath="./"; // this is normally needed for CAF\r
-  //\r
-\r
-  if(analysisMode=="grid") {\r
-    // Connect to AliEn\r
-    TGrid::Connect("alien://");\r
-  } else if(analysisMode=="proof") {\r
-    // Connect to the PROOF cluster\r
-    if(inputMode!="dataset") {printf("Input mode must be dataset, for proof analysis\n"); return;}\r
-    gEnv->SetValue("XSec.GSI.DelegProxy","2");\r
-    TProof::Open("alicecaf");\r
-    //TProof::Reset("alicecaf");\r
-    if(saveProofToAlien) {\r
-      TGrid::Connect("alien://");\r
-      if(gGrid) {\r
-       TString homedir = gGrid->GetHomeDirectory();\r
-       TString workdir = homedir + trainName;\r
-       if(!gGrid->Cd(workdir)) {\r
-         gGrid->Cd(homedir);\r
-         if(gGrid->Mkdir(workdir)) {\r
-           gGrid->Cd(trainName);\r
-           ::Info("VertexingTrain::Connect()", "Directory %s created", gGrid->Pwd());\r
-         }\r
-       }          \r
-       gGrid->Mkdir("proof_output");\r
-       gGrid->Cd("proof_output");\r
-       proofOutdir = Form("alien://%s", gGrid->Pwd());\r
-      } \r
-    }\r
-  }\r
-\r
-\r
-  // AliRoot libraries\r
-  if(analysisMode=="local" || analysisMode=="grid") {\r
-    TString loadLibraries="LoadLibraries.C"; loadLibraries.Prepend(loadMacroPath.Data());\r
-    gROOT->LoadMacro(loadLibraries.Data());\r
-    LoadLibraries(useParFiles);\r
-  } else if (analysisMode=="proof") {\r
-    gSystem->Load("libTree.so");\r
-    gSystem->Load("libGeom.so");\r
-    gSystem->Load("libPhysics.so");\r
-    gSystem->Load("libVMC.so");    \r
-    gSystem->Load("libMinuit.so");    \r
-    // Enable the needed packages\r
-    //gProof->ClearPackages();\r
-    TString parDir="/afs/cern.ch/user/d/dainesea/code/";\r
-    TString parFile;\r
-    if(!useParFiles) {\r
-      gProof->UploadPackage("AF-v4-17");\r
-      gProof->EnablePackage("AF-v4-17");\r
-      // --- Enable the PWG3vertexingHF Package\r
-      parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());\r
-      gProof->UploadPackage(parFile.Data());\r
-      gProof->EnablePackage("PWG3vertexingHF");\r
-    } else {\r
-      // --- Enable the STEERBase Package\r
-      parFile="STEERBase.par"; parFile.Prepend(parDir.Data());\r
-      gProof->UploadPackage(parFile.Data());\r
-      gProof->EnablePackage("STEERBase");\r
-      // --- Enable the ESD Package\r
-      parFile="ESD.par"; parFile.Prepend(parDir.Data());\r
-      gProof->UploadPackage(parFile.Data());\r
-      gProof->EnablePackage("ESD");\r
-      // --- Enable the AOD Package\r
-      parFile="AOD.par"; parFile.Prepend(parDir.Data());\r
-      gProof->UploadPackage(parFile.Data());\r
-      gProof->EnablePackage("AOD");\r
-      // --- Enable the ANALYSIS Package\r
-      parFile="ANALYSIS.par"; parFile.Prepend(parDir.Data());\r
-      gProof->UploadPackage(parFile.Data());\r
-      gProof->EnablePackage("ANALYSIS");\r
-      // --- Enable the ANALYSISalice Package\r
-      parFile="ANALYSISalice.par"; parFile.Prepend(parDir.Data());\r
-      gProof->UploadPackage(parFile.Data());\r
-      gProof->EnablePackage("ANALYSISalice");\r
-      // --- Enable the CORRFW Package\r
-      parFile="CORRFW.par"; parFile.Prepend(parDir.Data());\r
-      gProof->UploadPackage(parFile.Data());\r
-      gProof->EnablePackage("CORRFW");\r
-      // --- Enable the PWG3base Package\r
-      parFile="PWG3base.par"; parFile.Prepend(parDir.Data());\r
-      gProof->UploadPackage(parFile.Data());\r
-      gProof->EnablePackage("PWG3base");\r
-      // --- Enable the PWG3vertexingHF Package\r
-      parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());\r
-      gProof->UploadPackage(parFile.Data());\r
-      gProof->EnablePackage("PWG3vertexingHF");\r
-      // --- Enable the PWG3muon Package\r
-      parFile="PWG3muon.par"; parFile.Prepend(parDir.Data());\r
-      gProof->UploadPackage(parFile.Data());\r
-      gProof->EnablePackage("PWG3muon");\r
-    }\r
-    gProof->ShowEnabledPackages(); // show a list of enabled packages\r
-  }\r
-\r
-\r
-  // Create Alien plugin, if requested\r
-  if(useAlienPlugin) {  \r
-    if(analysisMode!="grid") {printf("Analysis mode must be grid, to use alien plugin\n"); return;}\r
-    AliAnalysisGrid *alienHandler = CreateAlienHandler(pluginmode,useParFiles);  \r
-    if(!alienHandler) return;\r
-  }\r
-\r
-\r
-  //-------------------------------------------------------------------\r
-  // Prepare input\r
-  TChain *chainAOD = 0;\r
-  TString dataset; // for proof\r
-\r
-  if(!useAlienPlugin) {\r
-    TString makeAODInputChain="MakeAODInputChain.C"; makeAODInputChain.Prepend(loadMacroPath.Data());\r
-    if(inputMode=="list") {\r
-      // Local files\r
-      gROOT->LoadMacro(makeAODInputChain.Data());\r
-      chainAOD = MakeAODInputChain();// with this it reads ./AliAOD.root and ./AliAOD.VertexingHF.root\r
-      //chainAOD = MakeAODInputChain("alien:///alice/cern.ch/user/r/rbala/newtrain/out_lhc08x/180100/",1,1);\r
-      printf("ENTRIES %d\n",chainAOD->GetEntries());\r
-    } else if(inputMode=="xml") {\r
-      // xml\r
-      gROOT->LoadMacro(makeAODInputChain.Data());\r
-      chainAOD = MakeAODInputChain("collection_aod.xml","collection_aodHF.xml");\r
-    } else if(inputMode=="dataset") {\r
-      // CAF dataset\r
-      //gProof->ShowDataSets();\r
-      dataset="/ITS/dainesea/AODVertexingHF_LHC08x_180100";\r
-    }\r
-  }\r
-\r
-  // Create the analysis manager\r
-  AliAnalysisManager *mgr  = new AliAnalysisManager("My Manager","My Manager");\r
-  mgr->SetDebugLevel(10);\r
-  // Connect plug-in to the analysis manager\r
-  if(useAlienPlugin) mgr->SetGridHandler(alienHandler);\r
-\r
-  // Input\r
-  AliAODInputHandler *inputHandler = new AliAODInputHandler();\r
-  if(analysisMode=="proof") {\r
-    inputHandler->AddFriend("AliAOD.VertexingHF.root");\r
-    if(saveProofToAlien) mgr->SetSpecialOutputLocation(proofOutdir);\r
-  }\r
-  mgr->SetInputEventHandler(inputHandler);\r
-  //-------------------------------------------------------------------\r
-\r
-  \r
-  //-------------------------------------------------------------------\r
-  // Analysis tasks (wagons of the train)   \r
-  //\r
-  TString taskName;\r
-  \r
-  //taskName="AddTaskCompareHF.C"; taskName.Prepend(loadMacroPath.Data());\r
-  //gROOT->LoadMacro(taskName.Data());\r
-  //AliAnalysisTaskSECompareHF *cmpTask = AddTaskCompareHF();\r
-  \r
-  taskName="AddTaskD0Mass.C"; taskName.Prepend(loadMacroPath.Data());\r
-  gROOT->LoadMacro(taskName.Data());\r
-  AliAnalysisTaskSED0Mass *d0massTask = AddTaskD0Mass();\r
-  AliAnalysisTaskSED0Mass *d0massLikeSignTask = AddTaskD0Mass(1); \r
-  \r
-  taskName="AddTaskDplus.C"; taskName.Prepend(loadMacroPath.Data());\r
-  gROOT->LoadMacro(taskName.Data());\r
-  AliAnalysisTaskSEDplus *dplusTask = AddTaskDplus();\r
-  \r
-  taskName="AddTaskDs.C"; taskName.Prepend(loadMacroPath.Data());\r
-  gROOT->LoadMacro(taskName.Data());\r
-  AliAnalysisTaskSEDs *dsTask = AddTaskDs();\r
-\r
-  //taskName="AddTaskSelectHF.C"; taskName.Prepend(loadMacroPath.Data());\r
-  //gROOT->LoadMacro(taskName.Data());\r
-  //AliAnalysisTaskSESelectHF *seleTask = AddTaskSelectHF();\r
-  \r
-  taskName="AddTaskBkgLikeSignD0.C"; taskName.Prepend(loadMacroPath.Data());\r
-  gROOT->LoadMacro(taskName.Data());\r
-  AliAnalysisTaskSEBkgLikeSignD0 *lsD0Task = AddTaskBkgLikeSignD0();\r
-\r
-  taskName="AddTaskBkgLikeSignJPSI.C"; taskName.Prepend(loadMacroPath.Data());\r
-  gROOT->LoadMacro(taskName.Data());\r
-  AliAnalysisTaskSEBkgLikeSignJPSI *lsJPSITask = AddTaskBkgLikeSignJPSI();\r
-\r
-  //taskName="AddTaskBtoJPSItoEle.C"; taskName.Prepend(loadMacroPath.Data());\r
-  //gROOT->LoadMacro(taskName.Data());\r
-  //AliAnalysisTaskSEBtoJPSItoEle *jpsiTask = AddTaskBtoJPSItoEle();\r
-\r
-  taskName="AddTaskCFMultiVarMultiStep.C"; taskName.Prepend(loadMacroPath.Data());\r
-  gROOT->LoadMacro(taskName.Data());\r
-  AliCFHeavyFlavourTaskMultiVarMultiStep *cfmvmsTask = AddTaskCFMultiVarMultiStep();\r
-\r
-  taskName="AddTaskCharmFraction.C"; taskName.Prepend(loadMacroPath.Data());\r
-  gROOT->LoadMacro(taskName.Data());\r
-  Int_t switchMC[5]={1,1,1,1,1};\r
-  AliAnalysisTaskSECharmFraction *cFractTask = AddTaskCharmFraction("d0D0.root",switchMC);\r
-  \r
-  // attach a private task (not committed)\r
-  // (the files MyTask.h MyTask.cxx AddMyTask.C have to be declared in plugin\r
-  // configuration, see below)\r
-  /*\r
-  if(analysisMode.Data()=="proof") {\r
-    gProof->LoadMacro("MyTask.cxx++g");\r
-  } else {\r
-    gROOT->LoadMacro("MyTask.cxx++g");\r
-  }\r
-  gROOT->LoadMacro("AddMyTask.C");\r
-  MyTask *myTask = AddMyTask();\r
-  */\r
-  /*\r
-  if(analysisMode.Data()=="proof") {\r
-    gProof->LoadMacro("AliDStarJets.cxx++g");\r
-  } else {\r
-    gROOT->LoadMacro("AliDStarJets.cxx++g");\r
-  }\r
-  gROOT->LoadMacro("AddTaskDStarJets.C");\r
-  AliDStarJets *myTask = AddTaskDStarJets();\r
-  */\r
-  //-------------------------------------------------------------------\r
-\r
-  //\r
-  // Run the analysis\r
-  //    \r
-  if(chainAOD) printf("CHAIN HAS %d ENTRIES\n",(Int_t)chainAOD->GetEntries());\r
-\r
-  if(!mgr->InitAnalysis()) return;\r
-  mgr->PrintStatus();\r
-  if(analysisMode=="grid" && !useAlienPlugin) analysisMode="local";\r
-  if(analysisMode!="proof") {\r
-    mgr->StartAnalysis(analysisMode.Data(),chainAOD,nentries,firstentry);\r
-  } else {\r
-    // proof\r
-    mgr->StartAnalysis(analysisMode.Data(),dataset.Data(),nentries,firstentry);\r
-  }\r
-\r
-  return;\r
-}\r
-//_____________________________________________________________________________\r
-//\r
-AliAnalysisGrid* CreateAlienHandler(TString pluginmode="test",Bool_t useParFiles=kFALSE)\r
-{\r
-  // Check if user has a valid token, otherwise make one. This has limitations.\r
-  // One can always follow the standard procedure of calling alien-token-init then\r
-  //   source /tmp/gclient_env_$UID in the current shell.\r
-   if (!AliAnalysisGrid::CreateToken()) return NULL;\r
-   AliAnalysisAlien *plugin = new AliAnalysisAlien();\r
-   // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")\r
-   plugin->SetRunMode(pluginmode.Data());\r
-   plugin->SetUser("dainesea");\r
-   plugin->SetNtestFiles(2);\r
-   // Set versions of used packages\r
-   plugin->SetAPIVersion("V2.4");\r
-   plugin->SetROOTVersion("v5-24-00");\r
-   plugin->SetAliROOTVersion("v4-18-07-AN");\r
-   // Declare input data to be processed.\r
-   // Method 1: Create automatically XML collections using alien 'find' command.\r
-   // Define production directory LFN\r
-   //plugin->SetGridDataDir("/alice/cern.ch/user/r/rbala/newtrain/out_lhc08x/");\r
-   //plugin->SetGridDataDir("/alice/cern.ch/user/m/mgheata/analysisESD/output_train_default_28May2009_09h33/");\r
-   plugin->SetGridDataDir("/alice/sim/PDC_09/LHC09a5/AOD1/");\r
-   // Set data search pattern\r
-   plugin->SetDataPattern("AliAOD.root");\r
-   plugin->SetFriendChainName("AliAOD.VertexingHF.root");\r
-   // ...then add run numbers to be considered\r
-   //plugin->AddRunNumber(529007);\r
-   //  or\r
-   //plugin->SetRunRange(529000,529007);\r
-   // Method 2: Declare existing data files (raw collections, xml collections, root file)\r
-   // If no path mentioned data is supposed to be in the work directory (see SetGridWorkingDir())\r
-   // XML collections added via this method can be combined with the first method if\r
-   // the content is compatible (using or not tags)\r
-   //plugin->AddDataFile("/alice/cern.ch/user/r/rbala/newtrain/collection/collection_aod_lhc08w.xml");\r
-   //   plugin->AddDataFile("/alice/data/2008/LHC08c/000057657/raw/Run57657.Merged.RAW.tag.root");\r
-   // Define alien work directory where all files will be copied. Relative to alien $HOME.\r
-   plugin->SetGridWorkingDir("lhc09a5_231009");\r
-   // Declare alien output directory. Relative to working directory.\r
-   plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output\r
-   // Declare the analysis source files names separated by blancs. To be compiled runtime\r
-   // using ACLiC on the worker nodes.\r
-   //plugin->SetAnalysisSource("AliDStarJets.cxx");\r
-   // Declare all libraries (other than the default ones for the framework. These will be\r
-   // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.\r
-   plugin->SetAdditionalLibs("libPWG3vertexingHF.so libPWG3base.so libPWG3muon.so libPWG4PartCorrBase.so libPWG4PartCorrDep.so MakeAODInputChain.C"/* AliDStarJets.cxx AliDStarJets.h"*/);\r
-   // use par files\r
-   if(useParFiles) {\r
-     plugin->EnablePackage("STEERBase.par");\r
-     plugin->EnablePackage("ESD.par");\r
-     plugin->EnablePackage("AOD.par");\r
-     plugin->EnablePackage("ANALYSIS.par");\r
-     plugin->EnablePackage("ANALYSISalice.par");\r
-     plugin->EnablePackage("CORRFW.par");\r
-     plugin->EnablePackage("PWG3base.par");\r
-     plugin->EnablePackage("PWG3vertexingHF.par");\r
-     plugin->EnablePackage("PWG3muon.par");\r
-     plugin->EnablePackage("PWG4PartCorrBase.par");\r
-     plugin->EnablePackage("PWG4PartCorrDep.par");\r
-   }\r
-   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
-   // Declare the output file names separated by blancs.\r
-   // (can be like: file.root or file.root@ALICE::Niham::File)\r
-   plugin->SetDefaultOutputs(kTRUE);\r
-   //plugin->SetOutputFiles("output.root CmpHF.root CmpHFnt.root D0InvMass.root InvMassDplus.root InvMassDplus_nt1.root InvMassDplus_nt2.root");\r
-   // Optionally define the files to be archived.\r
-   //   plugin->SetOutputArchive("log_archive.zip:stdout,stderr@ALICE::NIHAM::File root_archive.zip:*.root@ALICE::NIHAM::File");\r
-   plugin->SetOutputArchive("log_archive.zip:stdout,stderr");\r
-   // Optionally set a name for the generated analysis macro (default MyAnalysis.C)\r
-   plugin->SetAnalysisMacro("AnalysisHF.C");\r
-   // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)\r
-   plugin->SetSplitMaxInputFileNumber(5);\r
-   // Optionally set number of failed jobs that will trigger killing waiting sub-jobs.\r
-   //plugin->SetMaxInitFailed(5);\r
-   // Optionally resubmit threshold.\r
-   //plugin->SetMasterResubmitThreshold(90);\r
-   // Optionally set time to live (default 30000 sec)\r
-   //plugin->SetTTL(20000);\r
-   // Optionally set input format (default xml-single)\r
-   plugin->SetInputFormat("xml-single");\r
-   // Optionally modify the name of the generated JDL (default analysis.jdl)\r
-   plugin->SetJDLName("TaskHF.jdl");\r
-   // Optionally modify job price (default 1)\r
-   //plugin->SetPrice(1);      \r
-   // Optionally modify split mode (default 'se')    \r
-   plugin->SetSplitMode("se");\r
-   // Optionally set the preferred SE    \r
-   plugin->SetPreferedSE(mySE.Data());\r
-   \r
-   return plugin;\r
-}\r
+class AliAnalysisGrid;
+class AliAnalysisAlien;
+
+void RunAnalysisAODVertexingHF()
+{
+  //
+  // Test macro for AliAnalysisTaskSE's for heavy-flavour candidates
+  // It has the structure of a Analysis Train:
+  // - in this macro, change things related to running mode
+  //   and input preparation 
+  // - add your task using a AddTaskXXX macro 
+  //
+  // A.Dainese, andrea.dainese@lnl.infn.it
+  // "grid" mode added by R.Bala, bala@to.infn.it
+  //
+
+
+  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"); 
+  //
+  TString trainName = "D2H";
+  TString analysisMode = "grid"; // "local", "grid", or "proof"
+  TString inputMode    = "list"; // "list", "xml", or "dataset"
+  Long64_t nentries=123567890,firstentry=0;
+  Bool_t useParFiles=kFALSE;
+  Bool_t useAlienPlugin=kTRUE;
+  TString pluginmode="test";
+  Bool_t saveProofToAlien=kFALSE;
+  TString proofOutdir = "";
+  TString loadMacroPath="$ALICE_ROOT/PWG3/vertexingHF/macros/";
+  //TString loadMacroPath="./"; // this is normally needed for CAF
+  //
+
+  if(analysisMode=="grid") {
+    // Connect to AliEn
+    TGrid::Connect("alien://");
+  } else if(analysisMode=="proof") {
+    // Connect to the PROOF cluster
+    if(inputMode!="dataset") {printf("Input mode must be dataset, for proof analysis\n"); return;}
+    gEnv->SetValue("XSec.GSI.DelegProxy","2");
+    TProof::Open("alicecaf");
+    //TProof::Reset("alicecaf");
+    if(saveProofToAlien) {
+      TGrid::Connect("alien://");
+      if(gGrid) {
+       TString homedir = gGrid->GetHomeDirectory();
+       TString workdir = homedir + trainName;
+       if(!gGrid->Cd(workdir)) {
+         gGrid->Cd(homedir);
+         if(gGrid->Mkdir(workdir)) {
+           gGrid->Cd(trainName);
+           ::Info("VertexingTrain::Connect()", "Directory %s created", gGrid->Pwd());
+         }
+       }          
+       gGrid->Mkdir("proof_output");
+       gGrid->Cd("proof_output");
+       proofOutdir = Form("alien://%s", gGrid->Pwd());
+      } 
+    }
+  }
+
+
+  // AliRoot libraries
+  if(analysisMode=="local" || analysisMode=="grid") {
+    TString loadLibraries="LoadLibraries.C"; loadLibraries.Prepend(loadMacroPath.Data());
+    gROOT->LoadMacro(loadLibraries.Data());
+    LoadLibraries(useParFiles);
+  } else if (analysisMode=="proof") {
+    gSystem->Load("libTree.so");
+    gSystem->Load("libGeom.so");
+    gSystem->Load("libPhysics.so");
+    gSystem->Load("libVMC.so");    
+    gSystem->Load("libMinuit.so");    
+    // Enable the needed packages
+    //gProof->ClearPackages();
+    TString parDir="/afs/cern.ch/user/d/dainesea/code/";
+    TString parFile;
+    if(!useParFiles) {
+      gProof->UploadPackage("AF-v4-17");
+      gProof->EnablePackage("AF-v4-17");
+      // --- Enable the PWG3vertexingHF Package
+      parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());
+      gProof->UploadPackage(parFile.Data());
+      gProof->EnablePackage("PWG3vertexingHF");
+    } else {
+      // --- Enable the STEERBase Package
+      parFile="STEERBase.par"; parFile.Prepend(parDir.Data());
+      gProof->UploadPackage(parFile.Data());
+      gProof->EnablePackage("STEERBase");
+      // --- Enable the ESD Package
+      parFile="ESD.par"; parFile.Prepend(parDir.Data());
+      gProof->UploadPackage(parFile.Data());
+      gProof->EnablePackage("ESD");
+      // --- Enable the AOD Package
+      parFile="AOD.par"; parFile.Prepend(parDir.Data());
+      gProof->UploadPackage(parFile.Data());
+      gProof->EnablePackage("AOD");
+      // --- Enable the ANALYSIS Package
+      parFile="ANALYSIS.par"; parFile.Prepend(parDir.Data());
+      gProof->UploadPackage(parFile.Data());
+      gProof->EnablePackage("ANALYSIS");
+      // --- Enable the ANALYSISalice Package
+      parFile="ANALYSISalice.par"; parFile.Prepend(parDir.Data());
+      gProof->UploadPackage(parFile.Data());
+      gProof->EnablePackage("ANALYSISalice");
+      // --- Enable the CORRFW Package
+      parFile="CORRFW.par"; parFile.Prepend(parDir.Data());
+      gProof->UploadPackage(parFile.Data());
+      gProof->EnablePackage("CORRFW");
+      // --- Enable the PWG3base Package
+      parFile="PWG3base.par"; parFile.Prepend(parDir.Data());
+      gProof->UploadPackage(parFile.Data());
+      gProof->EnablePackage("PWG3base");
+      // --- Enable the PWG3vertexingHF Package
+      parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());
+      gProof->UploadPackage(parFile.Data());
+      gProof->EnablePackage("PWG3vertexingHF");
+      // --- Enable the PWG3muon Package
+      parFile="PWG3muon.par"; parFile.Prepend(parDir.Data());
+      gProof->UploadPackage(parFile.Data());
+      gProof->EnablePackage("PWG3muon");
+    }
+    gProof->ShowEnabledPackages(); // show a list of enabled packages
+  }
+
+
+  // Create Alien plugin, if requested
+  if(useAlienPlugin) {  
+    if(analysisMode!="grid") {printf("Analysis mode must be grid, to use alien plugin\n"); return;}
+    AliAnalysisGrid *alienHandler = CreateAlienHandler(pluginmode,useParFiles);  
+    if(!alienHandler) return;
+  }
+
+
+  //-------------------------------------------------------------------
+  // Prepare input
+  TChain *chainAOD = 0;
+  TString dataset; // for proof
+
+  if(!useAlienPlugin) {
+    TString makeAODInputChain="MakeAODInputChain.C"; makeAODInputChain.Prepend(loadMacroPath.Data());
+    if(inputMode=="list") {
+      // Local files
+      gROOT->LoadMacro(makeAODInputChain.Data());
+      chainAOD = MakeAODInputChain();// with this it reads ./AliAOD.root and ./AliAOD.VertexingHF.root
+      //chainAOD = MakeAODInputChain("alien:///alice/cern.ch/user/r/rbala/newtrain/out_lhc08x/180100/",1,1);
+      printf("ENTRIES %d\n",chainAOD->GetEntries());
+    } else if(inputMode=="xml") {
+      // xml
+      gROOT->LoadMacro(makeAODInputChain.Data());
+      chainAOD = MakeAODInputChain("collection_aod.xml","collection_aodHF.xml");
+    } else if(inputMode=="dataset") {
+      // CAF dataset
+      //gProof->ShowDataSets();
+      dataset="/ITS/dainesea/AODVertexingHF_LHC08x_180100";
+    }
+  }
+
+  // Create the analysis manager
+  AliAnalysisManager *mgr  = new AliAnalysisManager("My Manager","My Manager");
+  mgr->SetDebugLevel(10);
+  // Connect plug-in to the analysis manager
+  if(useAlienPlugin) mgr->SetGridHandler(alienHandler);
+
+  // Input
+  AliAODInputHandler *inputHandler = new AliAODInputHandler();
+  if(analysisMode=="proof" ) {
+    inputHandler->AddFriend("./AliAOD.VertexingHF.root");
+    //inputHandler->AddFriend("deltas/AliAOD.VertexingHF.root");
+    if(saveProofToAlien) mgr->SetSpecialOutputLocation(proofOutdir);
+  }
+  mgr->SetInputEventHandler(inputHandler);
+  //-------------------------------------------------------------------
+
+  
+  //-------------------------------------------------------------------
+  // Analysis tasks (wagons of the train)   
+  //
+  TString taskName;
+  
+  ////// ADD THE FULL D2H TRAIN
+  /*taskName="AddD2HTrain.C"; taskName.Prepend(loadMacroPath.Data());
+  gROOT->LoadMacro(taskName.Data());
+  Bool_t readMC=kFALSE;
+  AddD2HTrain(readMC);//,1,0,0,0,0,0,0,0,0,0,0);*/
+  
+  ////// OR ADD INDIVIDUAL TASKS
+  
+  
+  /*  taskName="AddTaskCompareHF.C"; taskName.Prepend(loadMacroPath.Data());
+    gROOT->LoadMacro(taskName.Data());
+    AliAnalysisTaskSECompareHF *cmpTask = AddTaskCompareHF();
+  */ 
+    taskName="AddTaskD0Mass.C"; taskName.Prepend(loadMacroPath.Data());
+    gROOT->LoadMacro(taskName.Data());
+    AliAnalysisTaskSED0Mass *d0massTask = AddTaskD0Mass();
+    AliAnalysisTaskSED0Mass *d0massLikeSignTask = AddTaskD0Mass(1); 
+    /*
+    taskName="AddTaskDplus.C"; taskName.Prepend(loadMacroPath.Data());
+    gROOT->LoadMacro(taskName.Data());
+    AliAnalysisTaskSEDplus *dplusTask = AddTaskDplus();
+  
+    taskName="AddTaskDs.C"; taskName.Prepend(loadMacroPath.Data());
+    gROOT->LoadMacro(taskName.Data());
+    AliAnalysisTaskSEDs *dsTask = AddTaskDs();
+    
+    //taskName="AddTaskSelectHF.C"; taskName.Prepend(loadMacroPath.Data());
+    //gROOT->LoadMacro(taskName.Data());
+    //AliAnalysisTaskSESelectHF *seleTask = AddTaskSelectHF();
+    
+    taskName="AddTaskBkgLikeSignD0.C"; taskName.Prepend(loadMacroPath.Data());
+    gROOT->LoadMacro(taskName.Data());
+    AliAnalysisTaskSEBkgLikeSignD0 *lsD0Task = AddTaskBkgLikeSignD0();
+    
+    taskName="AddTaskBkgLikeSignJPSI.C"; taskName.Prepend(loadMacroPath.Data());
+    gROOT->LoadMacro(taskName.Data());
+    AliAnalysisTaskSEBkgLikeSignJPSI *lsJPSITask = AddTaskBkgLikeSignJPSI();
+    
+    //taskName="AddTaskBtoJPSItoEle.C"; taskName.Prepend(loadMacroPath.Data());
+    //gROOT->LoadMacro(taskName.Data());
+    //AliAnalysisTaskSEBtoJPSItoEle *jpsiTask = AddTaskBtoJPSItoEle();
+    
+    taskName="AddTaskCFMultiVarMultiStep.C"; taskName.Prepend(loadMacroPath.Data());
+    gROOT->LoadMacro(taskName.Data());
+    AliCFHeavyFlavourTaskMultiVarMultiStep *cfmvmsTask = AddTaskCFMultiVarMultiStep();
+    
+    taskName="AddTaskCharmFraction.C"; taskName.Prepend(loadMacroPath.Data());
+    gROOT->LoadMacro(taskName.Data());
+    Int_t switchMC[5]={1,1,1,1,1};
+    AliAnalysisTaskSECharmFraction *cFractTask = AddTaskCharmFraction("d0D0",switchMC);
+    
+    // attach a private task (not committed)
+    // (the files MyTask.h MyTask.cxx AddMyTask.C have to be declared in plugin
+    // configuration, see below)
+    
+    if(analysisMode.Data()=="proof") {
+    gProof->LoadMacro("MyTask.cxx++g");
+    } else {
+    gROOT->LoadMacro("MyTask.cxx++g");
+    }
+    gROOT->LoadMacro("AddMyTask.C");
+    MyTask *myTask = AddMyTask();
+    
+    
+    if(analysisMode.Data()=="proof") {
+    gProof->LoadMacro("AliDStarJets.cxx++g");
+    } else {
+    gROOT->LoadMacro("AliDStarJets.cxx++g");
+    }
+    gROOT->LoadMacro("AddTaskDStarJets.C");
+    AliDStarJets *myTask = AddTaskDStarJets();
+  */
+  //-------------------------------------------------------------------
+  
+  //
+  // Run the analysis
+  //    
+  if(chainAOD) printf("CHAIN HAS %d ENTRIES\n",(Int_t)chainAOD->GetEntries());
+  
+  if(!mgr->InitAnalysis()) return;
+  mgr->PrintStatus();
+  if(analysisMode=="grid" && !useAlienPlugin) analysisMode="local";
+  if(analysisMode!="proof") {
+    mgr->StartAnalysis(analysisMode.Data(),chainAOD,nentries,firstentry);
+  } else {
+    // proof
+    mgr->StartAnalysis(analysisMode.Data(),dataset.Data(),nentries,firstentry);
+  }
+  
+  return;
+}
+//_____________________________________________________________________________
+//
+AliAnalysisGrid* CreateAlienHandler(TString pluginmode="test",Bool_t useParFiles=kFALSE)
+{
+  // Check if user has a valid token, otherwise make one. This has limitations.
+  // One can always follow the standard procedure of calling alien-token-init then
+  //   source /tmp/gclient_env_$UID in the current shell.
+   if (!AliAnalysisGrid::CreateToken()) return NULL;
+   AliAnalysisAlien *plugin = new AliAnalysisAlien();
+   // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
+   plugin->SetRunMode(pluginmode.Data());
+   plugin->SetUser("dainesea");
+   plugin->SetNtestFiles(1);
+   // Set versions of used packages
+   plugin->SetAPIVersion("V1.1x");
+   plugin->SetROOTVersion("v5-26-00b-6");
+   plugin->SetAliROOTVersion("v4-19-18-AN");
+   // Declare input data to be processed.
+   // Method 1: Create automatically XML collections using alien 'find' command.
+   // Define production directory LFN
+   //  plugin->SetGridDataDir("/alice/cern.ch/user/r/rbala/data_pass4_good_runCINT1B_8thfeb/");
+   //plugin->SetGridDataDir("/alice/sim/PDC_09/LHC09a4/AOD3/");
+   // Set data search pattern
+   plugin->SetGridDataDir("/alice/data/2010/LHC10b");
+   plugin->SetDataPattern("pass2/AOD001/*AliAOD.root");
+   plugin->SetFriendChainName("./AliAOD.VertexingHF.root");
+   //plugin->SetFriendChainName("deltas/AliAOD.VertexingHF.root");
+   // Adds only the good runs from the Monalisa Run Condition Table
+   AddGoodRuns(plugin,"LHC10b");
+   // ...then add run numbers to be considered
+   // plugin->SetMaxMergeFiles(100);
+   plugin->SetNrunsPerMaster(100);
+   //plugin->SetNumberOfReplicas(2);
+   //  or
+   //plugin->SetRunRange(529000,529007);
+   // Method 2: Declare existing data files (raw collections, xml collections, root file)
+   // If no path mentioned data is supposed to be in the work directory (see SetGridWorkingDir())
+   // XML collections added via this method can be combined with the first method if
+   // the content is compatible (using or not tags)
+   //plugin->AddDataFile("/alice/cern.ch/user/r/rbala/newtrain/collection/collection_aod_lhc08w.xml");
+   //   plugin->AddDataFile("/alice/data/2008/LHC08c/000057657/raw/Run57657.Merged.RAW.tag.root");
+   // Define alien work directory where all files will be copied. Relative to alien $HOME.
+   plugin->SetGridWorkingDir("myHFanalysis");
+   // Declare alien output directory. Relative to working directory.
+   plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output
+   // Declare the analysis source files names separated by blancs. To be compiled runtime
+   // using ACLiC on the worker nodes.
+   //plugin->SetAnalysisSource("AliDStarJets.cxx");
+   // Declare all libraries (other than the default ones for the framework. These will be
+   // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.
+   plugin->SetAdditionalLibs("libPWG3vertexingHF.so libPWG3base.so libPWG3muon.so");
+   // use par files
+   if(useParFiles) {
+     plugin->EnablePackage("STEERBase.par");
+     plugin->EnablePackage("ESD.par");
+     plugin->EnablePackage("AOD.par");
+     plugin->EnablePackage("ANALYSIS.par");
+     plugin->EnablePackage("ANALYSISalice.par");
+     plugin->EnablePackage("CORRFW.par");
+     plugin->EnablePackage("PWG3base.par");
+     plugin->EnablePackage("PWG3vertexingHF.par");
+     plugin->EnablePackage("PWG3muon.par");
+   }
+   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");
+   // Declare the output file names separated by blancs.
+   // (can be like: file.root or file.root@ALICE::Niham::File)
+   plugin->SetDefaultOutputs(kTRUE);
+   //plugin->SetOutputFiles("output.root CmpHF.root CmpHFnt.root D0InvMass.root InvMassDplus.root InvMassDplus_nt1.root InvMassDplus_nt2.root");
+   // Optionally define the files to be archived.
+   //   plugin->SetOutputArchive("log_archive.zip:stdout,stderr@ALICE::NIHAM::File root_archive.zip:*.root@ALICE::NIHAM::File");
+   //   plugin->SetOutputArchive("log_archive.zip:stdout,stderr");
+   // Optionally set a name for the generated analysis macro (default MyAnalysis.C)
+   plugin->SetAnalysisMacro("AnalysisHF.C");
+   // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
+   plugin->SetSplitMaxInputFileNumber(10);
+   // Optionally set number of failed jobs that will trigger killing waiting sub-jobs.
+   //plugin->SetMaxInitFailed(5);
+   // Optionally resubmit threshold.
+   //plugin->SetMasterResubmitThreshold(90);
+   // Optionally set time to live (default 30000 sec)
+   //plugin->SetTTL(20000);
+   // Optionally set input format (default xml-single)
+   plugin->SetInputFormat("xml-single");
+   // Optionally modify the name of the generated JDL (default analysis.jdl)
+   plugin->SetJDLName("TaskHF.jdl");
+   // Optionally modify job price (default 1)
+   //plugin->SetPrice(1);      
+   // Optionally modify split mode (default 'se')    
+   plugin->SetSplitMode("se");
+
+
+   return plugin;
+}
+//----------------------------------------------------------------------------
+void AddGoodRuns(AliAnalysisAlien* plugin,TString lhcPeriod) {
+  //
+  // Adds good runs from the Monalisa Run Condition Table
+  //
+  plugin->SetRunPrefix("000");
+
+  if(lhcPeriod=="LHC10b") {
+    Int_t nruns=33;
+    Int_t runlist[33]={117222, 117220, 117116, 117112, 117109, 117099, 117092, 117086, 117077, 117065, 117063, 117060, 117059, 117054, 117053, 117052, 117050, 117048, 116645, 116643, 116574, 116571, 116562, 116403, 116402, 116288, 116102, 115414, 115401, 115393, 115193, 115186, 114931};
+   
+    for(Int_t k=0;k<nruns;k++){
+      plugin->AddRunNumber(runlist[k]);
+    }
+    plugin->SetNrunsPerMaster(nruns);
+  }
+
+  if(lhcPeriod=="LHC10c") { 
+    Int_t nruns=46;
+    Int_t runlist[46]={120829, 120825, 120824, 120823, 120822, 120821, 120820, 120758, 120750, 120741, 120671, 120617, 120616, 120505, 120504, 120503, 120244, 120079, 120076, 120073, 120072, 120069, 120067, 119862, 119859, 119856, 119853, 119849, 119846, 119845, 119844, 119842, 119841, 119163, 119161, 119159, 119086, 119085, 119084, 119079, 119077, 119067, 119061, 119047, 119041, 119037};
+   
+    for(Int_t k=0;k<nruns;k++){
+      plugin->AddRunNumber(runlist[k]);
+    }
+    plugin->SetNrunsPerMaster(nruns);
+  }
+
+  if(lhcPeriod=="LHC10dhighmu") { // only runs with high mu
+    Int_t nruns=19;
+    Int_t runlist[19]={124750, 124746, 124702, 124608, 124607, 124606, 124605, 124604, 124381, 124380, 124378, 124367, 124362, 124358, 124355, 124191, 124187, 122375, 122374};
+   
+    for(Int_t k=0;k<nruns;k++){
+      plugin->AddRunNumber(runlist[k]);
+    }
+    plugin->SetNrunsPerMaster(nruns);
+  }
+
+  if(lhcPeriod=="LHC10d") { // runs with high mu excluded
+    Int_t nruns=59;
+    Int_t runlist[59]={126437, 126432, 126425, 126424, 126422, 126409, 126408, 126407, 126406, 126405, 126404, 126403, 126359, 126352, 126351, 126350, 126285, 126284, 126283, 126168, 126167, 126160, 126158, 126097, 126090, 126088, 126082, 126081, 126078, 126073, 126008, 126007, 126004, 125855, 125851, 125850, 125849, 125848, 125847, 125844, 125843, 125842, 125633, 125632, 125630, 125628, 125296, 125186, 125156, 125140, 125139, 125134, 125133, 125101, 125100, 125097, 125085, 125023, 124751};
+   
+    for(Int_t k=0;k<nruns;k++){
+      plugin->AddRunNumber(runlist[k]);
+    }
+    plugin->SetNrunsPerMaster(nruns);
+  }
+
+
+  return;
+}