-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
- ////// ADD THE FULL D2H TRAIN\r
- taskName="AddD2HTrain.C"; taskName.Prepend(loadMacroPath.Data());\r
- gROOT->LoadMacro(taskName.Data());\r
- Bool_t readMC=kFALSE;\r
- AddD2HTrain(readMC);//,1,0,0,0,0,0,0,0,0,0,0);\r
-\r
- ////// OR ADD INDIVIDUAL TASKS\r
- /*\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",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(1);\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/data_pass4_good_runCINT1B_8thfeb/");\r
- //plugin->SetGridDataDir("/alice/sim/PDC_09/LHC09a4/AOD3/");\r
- // Set data search pattern\r
- plugin->SetDataPattern("AliAOD.root");\r
- plugin->SetFriendChainName("./AliAOD.VertexingHF.root");\r
- //plugin->SetFriendChainName("deltas/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");\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
- }\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/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/PWG3 -I$ALICE_ROOT/PWG3/base -I$ALICE_ROOT/PWG3/vertexingHF -I$ALICE_ROOT/PWG2/FLOW/AliFlowCommon -I$ALICE_ROOT/PWG2/FLOW/AliFlowTasks -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="full";
+ 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)
+ //
+ // First add the task for the PID response setting
+ gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
+ AliAnalysisTaskSE *setupTask = AddTaskPIDResponse(kFALSE,kTRUE);
+
+ 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="AddTaskCFMultiVarMultiStep.C"; taskName.Prepend(loadMacroPath.Data());
+ gROOT->LoadMacro(taskName.Data());
+ AliCFHeavyFlavourTaskMultiVarMultiStep *cfmvmsTask = AddTaskCFMultiVarMultiStep();
+
+
+ taskName="AddTaskSECharmFraction.C";
+ taskName.Prepend(loadMacroPath.Data());
+ gROOT->LoadMacro(taskName.Data());
+ Int_t switchMC[5]={0,0,0,0,0};
+ Int_t ppPbPb=1;// 0 for pp, 1 for PbPb, used to siwtch on/off the removal of daughters from the primary vertex
+ AliAnalysisTaskSECharmFraction *cFractTask = AddTaskSECharmFraction("standard",switchMC,readMC,kTRUE,kFALSE,"D0toKpiCharmFractCuts.root","c",ppPbPb);
+ // arguments: filename,switchMC,readmc,usepid,likesign,cutfilename,containerprefix
+
+
+ // 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.
+ AliAnalysisAlien *plugin = new AliAnalysisAlien();
+ // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
+ plugin->SetRunMode(pluginmode.Data());
+ plugin->SetUser();
+ // Set versions of used packages
+ plugin->SetAPIVersion("V1.1x");
+ plugin->SetROOTVersion();
+ plugin->SetAliROOTVersion();
+
+ gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/AddGoodRuns.C");
+
+ // Declare input data to be processed.
+ //************************************************
+ // Set data search pattern for DATA
+ //************************************************
+ plugin->SetGridDataDir("/alice/data/2010/LHC10d"); // specify LHC period
+ plugin->SetDataPattern("pass2/AOD018/*AliAOD.root"); // specify reco pass and AOD set
+ plugin->SetFriendChainName("./AliAOD.VertexingHF.root");
+ // OR plugin->SetFriendChainName("deltas/AliAOD.VertexingHF.root");
+ // Adds only the good runs from the Monalisa Run Condition Table
+ // More than one period can be added but the period name has to be removed from GridDataDir (to be tested)
+ Int_t totruns=0;
+ //totruns += AddGoodRuns(plugin,"LHC10b"); // specify LHC period
+ //totruns += AddGoodRuns(plugin,"LHC10c"); // specify LHC period
+ totruns += AddGoodRuns(plugin,"LHC10d"); // specify LHC period
+ plugin->SetNrunsPerMaster(totruns);
+
+ //************************************************
+ // Set data search pattern for MONTECARLO
+ //************************************************
+ /*
+ plugin->SetGridDataDir("/alice/sim/LHC10d3"); // specify MC sample
+ plugin->SetDataPattern("AOD005/*AliAOD.root"); // specify AOD set
+ plugin->SetFriendChainName("./AliAOD.VertexingHF.root");
+ // OR plugin->SetFriendChainName("deltas/AliAOD.VertexingHF.root");
+ // Adds only the good runs from the Monalisa Run Condition Table
+ // More than one period can be added!
+ Int_t totruns=0;
+ totruns += AddGoodRuns(plugin,"LHC10b","LHC10d3"); // specify LHC period for anchor runs; and the name of the MC production
+ //totruns += AddGoodRuns(plugin,"LHC10c","LHC10f7"); // specify LHC period for anchor runs; and the name of the MC production
+ //totruns += AddGoodRuns(plugin,"LHC10d","LHC10f7"); // specify LHC period for anchor runs; and the name of the MC production
+ plugin->SetNrunsPerMaster(totruns);
+ */
+ //
+ // 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("libPWG3base.so libPWG3vertexingHF.so");
+ // use par files
+ if(useParFiles) {
+ plugin->EnablePackage("STEERBase.par");
+ plugin->EnablePackage("ESD.par");
+ plugin->EnablePackage("AOD.par");
+ plugin->EnablePackage("ANALYSIS.par");
+ plugin->EnablePackage("OADB.par");
+ plugin->EnablePackage("ANALYSISalice.par");
+ plugin->EnablePackage("CORRFW.par");
+ plugin->EnablePackage("PWG3base.par");
+ plugin->EnablePackage("PWG3vertexingHF.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/OADB -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/base -I$ALICE_ROOT/PWG3/vertexingHF -g");
+
+ plugin->SetDefaultOutputs(kTRUE);
+ // merging via jdl
+ plugin->SetMergeViaJDL(kTRUE);
+ plugin->SetOneStageMerging(kFALSE);
+ plugin->SetMaxMergeStages(2);
+
+ // 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)
+ // Optionally modify the name of the generated JDL (default analysis.jdl)
+ plugin->SetJDLName("TaskHF.jdl");
+
+ return plugin;
+}