//====================================================================================================================================================
Bool_t RunAnalysisTaskMFTExample(const Char_t *runType="local", // "grid" and "local" types have been tested
const Char_t *runMode="full") {
// enum {kGenerated, kReconstructed};
LoadLibs();
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
if (mgr) delete mgr;
mgr = new AliAnalysisManager("AM","Analysis Manager");
AliAODInputHandler* inputHandler = new AliAODInputHandler();
mgr->SetInputEventHandler(inputHandler);
if (!strcmp(runType,"grid")) mgr->SetGridHandler(CreateAlienHandler(runMode));
gROOT->LoadMacro("AliAnalysisTaskMFTExample.cxx++g");
AliAnalysisTaskMFTExample *task = new AliAnalysisTaskMFTExample("AliAnalysisTaskMFTExample");
// in cm, taken from Fig. 7.4 of the ITS Upgrade TDR, in the hypothesis of ~80 tracks participating to the vtx
task -> SetVtxResolutionITS(5.e-4, 5.e-4, 4.e-4);
task -> SetVertexMode(AliAnalysisTaskMFTExample::kGenerated);
mgr->AddTask(task);
// create output container(s)
AliAnalysisDataContainer *histogramList = mgr->CreateContainer("list", TList::Class(), AliAnalysisManager::kOutputContainer, "AnalysisMFT_Output.root");
// connect input and output
mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
mgr->ConnectOutput(task, 1, histogramList);
// RUN ANALYSIS
TStopwatch timer;
timer.Start();
mgr->InitAnalysis();
mgr->PrintStatus();
if (!strcmp(runType,"grid")) {
printf("Starting MFT analysis on the grid");
mgr->StartAnalysis("grid");
}
else if (!strcmp(runType,"local")) {
printf("Starting MFT analysis locally");
mgr->StartAnalysis("local", GetInputLocalData());
}
else AliError(Form("Specified run type %s is not supported", runType));
timer.Stop();
timer.Print();
return kTRUE;
}
//====================================================================================================================================================
AliAnalysisGrid* CreateAlienHandler(const Char_t *runMode) {
// Set up the analysis plugin in case of a grid analysis
TString rootVersion = "v5-34-08-6";
TString alirootVersion = "vAN-20140727";
AliAnalysisAlien *analysisPlugin = new AliAnalysisAlien();
if (!analysisPlugin) { Printf("Error : analysisPlugin is null !!!"); return kFALSE; }
analysisPlugin->SetAPIVersion("V1.1x");
analysisPlugin->SetROOTVersion(rootVersion.Data());
analysisPlugin->SetAliROOTVersion(alirootVersion.Data());
analysisPlugin->SetExecutableCommand("aliroot -b -q");
// Overwrite all generated files, datasets and output results from a previous session
analysisPlugin->SetOverwriteMode();
// Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
analysisPlugin->SetRunMode(runMode); // VERY IMPORTANT
analysisPlugin->SetAdditionalRootLibs("CORRFW");
analysisPlugin->SetAdditionalRootLibs("PWGmuon");
// Location of Data and Working dir
analysisPlugin->SetGridDataDir("/alice/cern.ch/user/a/auras/MFT/simulations_2014/PbPb/jpsi_prompt/pix20um20um_plane400um/");
analysisPlugin->SetDataPattern("*/AliAOD.Muons.root");
analysisPlugin->SetRunPrefix("");
analysisPlugin->SetGridWorkingDir("MFT/analysis_2014/PbPb/jpsi_prompt/pix20um20um_plane400um/");
// Declare alien output directory. Relative to working directory.
analysisPlugin->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.
analysisPlugin->SetAnalysisSource("AliAnalysisTaskMFTExample.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.
analysisPlugin->SetAdditionalLibs("libCORRFW.so libPWGmuon.so AliAnalysisTaskMFTExample.h AliAnalysisTaskMFTExample.cxx");
analysisPlugin->AddIncludePath("-I.");
analysisPlugin->SetOutputToRunNo();
// Optionally set a name for the generated analysis macro (default MyAnalysis.C)
analysisPlugin->SetAnalysisMacro("MFTAnalysis.C");
// Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
analysisPlugin->SetSplitMaxInputFileNumber(100);
// Number of runs per master job
analysisPlugin->SetNrunsPerMaster(1);
// Optionally modify the executable name (default analysis.sh)
analysisPlugin->SetExecutable("MFTAnalysis.sh");
// Optionally set number of failed jobs that will trigger killing waiting sub-jobs.
analysisPlugin->SetMaxInitFailed(5);
// Optionally resubmit threshold.
analysisPlugin->SetMasterResubmitThreshold(90);
// Optionally set time to live (default 30000 sec)
analysisPlugin->SetTTL(30000);
// Optionally set input format (default xml-single)
analysisPlugin->SetInputFormat("xml-single");
// Optionally modify the name of the generated JDL (default analysis.jdl)
analysisPlugin->SetJDLName("MFTAnalysis.jdl");
// Optionally modify job price (default 1)
analysisPlugin->SetPrice(1);
// Optionally modify split mode (default 'se')
analysisPlugin->SetSplitMode("se");
analysisPlugin->SetNtestFiles(5);
// analysisPlugin->SetMergeViaJDL(1);
analysisPlugin->SetOverwriteMode(kTRUE);
return analysisPlugin;
}
//====================================================================================================================================================
TChain* GetInputLocalData() {
// Set up the chain of input events in case of a local analysis
TChain *chain = new TChain("aodTree");
chain->Add("./AliAOD.Muons.root");
return chain;
}
//====================================================================================================================================================
void LoadLibs() {
gSystem->AddIncludePath("-I$ALICE_ROOT/include ");
gSystem->Load("libTree.so") ;
gSystem->Load("libGeom.so") ;
gSystem->Load("libVMC.so") ;
gSystem->Load("libMinuit.so") ;
gSystem->Load("libPhysics.so") ;
gSystem->Load("libSTEERBase.so") ;
gSystem->Load("libESD.so") ;
gSystem->Load("libAOD.so") ;
gSystem->Load("libANALYSIS.so") ;
gSystem->Load("libOADB.so") ;
gSystem->Load("libANALYSISalice.so") ;
gSystem->Load("libCORRFW.so") ;
gSystem->Load("libPWGmuon.so") ;
}
//====================================================================================================================================================
RunAnalysisTaskMFTExample.C:1 RunAnalysisTaskMFTExample.C:2 RunAnalysisTaskMFTExample.C:3 RunAnalysisTaskMFTExample.C:4 RunAnalysisTaskMFTExample.C:5 RunAnalysisTaskMFTExample.C:6 RunAnalysisTaskMFTExample.C:7 RunAnalysisTaskMFTExample.C:8 RunAnalysisTaskMFTExample.C:9 RunAnalysisTaskMFTExample.C:10 RunAnalysisTaskMFTExample.C:11 RunAnalysisTaskMFTExample.C:12 RunAnalysisTaskMFTExample.C:13 RunAnalysisTaskMFTExample.C:14 RunAnalysisTaskMFTExample.C:15 RunAnalysisTaskMFTExample.C:16 RunAnalysisTaskMFTExample.C:17 RunAnalysisTaskMFTExample.C:18 RunAnalysisTaskMFTExample.C:19 RunAnalysisTaskMFTExample.C:20 RunAnalysisTaskMFTExample.C:21 RunAnalysisTaskMFTExample.C:22 RunAnalysisTaskMFTExample.C:23 RunAnalysisTaskMFTExample.C:24 RunAnalysisTaskMFTExample.C:25 RunAnalysisTaskMFTExample.C:26 RunAnalysisTaskMFTExample.C:27 RunAnalysisTaskMFTExample.C:28 RunAnalysisTaskMFTExample.C:29 RunAnalysisTaskMFTExample.C:30 RunAnalysisTaskMFTExample.C:31 RunAnalysisTaskMFTExample.C:32 RunAnalysisTaskMFTExample.C:33 RunAnalysisTaskMFTExample.C:34 RunAnalysisTaskMFTExample.C:35 RunAnalysisTaskMFTExample.C:36 RunAnalysisTaskMFTExample.C:37 RunAnalysisTaskMFTExample.C:38 RunAnalysisTaskMFTExample.C:39 RunAnalysisTaskMFTExample.C:40 RunAnalysisTaskMFTExample.C:41 RunAnalysisTaskMFTExample.C:42 RunAnalysisTaskMFTExample.C:43 RunAnalysisTaskMFTExample.C:44 RunAnalysisTaskMFTExample.C:45 RunAnalysisTaskMFTExample.C:46 RunAnalysisTaskMFTExample.C:47 RunAnalysisTaskMFTExample.C:48 RunAnalysisTaskMFTExample.C:49 RunAnalysisTaskMFTExample.C:50 RunAnalysisTaskMFTExample.C:51 RunAnalysisTaskMFTExample.C:52 RunAnalysisTaskMFTExample.C:53 RunAnalysisTaskMFTExample.C:54 RunAnalysisTaskMFTExample.C:55 RunAnalysisTaskMFTExample.C:56 RunAnalysisTaskMFTExample.C:57 RunAnalysisTaskMFTExample.C:58 RunAnalysisTaskMFTExample.C:59 RunAnalysisTaskMFTExample.C:60 RunAnalysisTaskMFTExample.C:61 RunAnalysisTaskMFTExample.C:62 RunAnalysisTaskMFTExample.C:63 RunAnalysisTaskMFTExample.C:64 RunAnalysisTaskMFTExample.C:65 RunAnalysisTaskMFTExample.C:66 RunAnalysisTaskMFTExample.C:67 RunAnalysisTaskMFTExample.C:68 RunAnalysisTaskMFTExample.C:69 RunAnalysisTaskMFTExample.C:70 RunAnalysisTaskMFTExample.C:71 RunAnalysisTaskMFTExample.C:72 RunAnalysisTaskMFTExample.C:73 RunAnalysisTaskMFTExample.C:74 RunAnalysisTaskMFTExample.C:75 RunAnalysisTaskMFTExample.C:76 RunAnalysisTaskMFTExample.C:77 RunAnalysisTaskMFTExample.C:78 RunAnalysisTaskMFTExample.C:79 RunAnalysisTaskMFTExample.C:80 RunAnalysisTaskMFTExample.C:81 RunAnalysisTaskMFTExample.C:82 RunAnalysisTaskMFTExample.C:83 RunAnalysisTaskMFTExample.C:84 RunAnalysisTaskMFTExample.C:85 RunAnalysisTaskMFTExample.C:86 RunAnalysisTaskMFTExample.C:87 RunAnalysisTaskMFTExample.C:88 RunAnalysisTaskMFTExample.C:89 RunAnalysisTaskMFTExample.C:90 RunAnalysisTaskMFTExample.C:91 RunAnalysisTaskMFTExample.C:92 RunAnalysisTaskMFTExample.C:93 RunAnalysisTaskMFTExample.C:94 RunAnalysisTaskMFTExample.C:95 RunAnalysisTaskMFTExample.C:96 RunAnalysisTaskMFTExample.C:97 RunAnalysisTaskMFTExample.C:98 RunAnalysisTaskMFTExample.C:99 RunAnalysisTaskMFTExample.C:100 RunAnalysisTaskMFTExample.C:101 RunAnalysisTaskMFTExample.C:102 RunAnalysisTaskMFTExample.C:103 RunAnalysisTaskMFTExample.C:104 RunAnalysisTaskMFTExample.C:105 RunAnalysisTaskMFTExample.C:106 RunAnalysisTaskMFTExample.C:107 RunAnalysisTaskMFTExample.C:108 RunAnalysisTaskMFTExample.C:109 RunAnalysisTaskMFTExample.C:110 RunAnalysisTaskMFTExample.C:111 RunAnalysisTaskMFTExample.C:112 RunAnalysisTaskMFTExample.C:113 RunAnalysisTaskMFTExample.C:114 RunAnalysisTaskMFTExample.C:115 RunAnalysisTaskMFTExample.C:116 RunAnalysisTaskMFTExample.C:117 RunAnalysisTaskMFTExample.C:118 RunAnalysisTaskMFTExample.C:119 RunAnalysisTaskMFTExample.C:120 RunAnalysisTaskMFTExample.C:121 RunAnalysisTaskMFTExample.C:122 RunAnalysisTaskMFTExample.C:123 RunAnalysisTaskMFTExample.C:124 RunAnalysisTaskMFTExample.C:125 RunAnalysisTaskMFTExample.C:126 RunAnalysisTaskMFTExample.C:127 RunAnalysisTaskMFTExample.C:128 RunAnalysisTaskMFTExample.C:129 RunAnalysisTaskMFTExample.C:130 RunAnalysisTaskMFTExample.C:131 RunAnalysisTaskMFTExample.C:132 RunAnalysisTaskMFTExample.C:133 RunAnalysisTaskMFTExample.C:134 RunAnalysisTaskMFTExample.C:135 RunAnalysisTaskMFTExample.C:136 RunAnalysisTaskMFTExample.C:137 RunAnalysisTaskMFTExample.C:138 RunAnalysisTaskMFTExample.C:139 RunAnalysisTaskMFTExample.C:140 RunAnalysisTaskMFTExample.C:141 RunAnalysisTaskMFTExample.C:142 RunAnalysisTaskMFTExample.C:143 RunAnalysisTaskMFTExample.C:144 RunAnalysisTaskMFTExample.C:145 RunAnalysisTaskMFTExample.C:146 RunAnalysisTaskMFTExample.C:147 RunAnalysisTaskMFTExample.C:148 RunAnalysisTaskMFTExample.C:149 RunAnalysisTaskMFTExample.C:150 RunAnalysisTaskMFTExample.C:151 RunAnalysisTaskMFTExample.C:152 RunAnalysisTaskMFTExample.C:153 RunAnalysisTaskMFTExample.C:154 RunAnalysisTaskMFTExample.C:155 RunAnalysisTaskMFTExample.C:156 RunAnalysisTaskMFTExample.C:157 RunAnalysisTaskMFTExample.C:158 RunAnalysisTaskMFTExample.C:159 RunAnalysisTaskMFTExample.C:160 RunAnalysisTaskMFTExample.C:161 RunAnalysisTaskMFTExample.C:162 RunAnalysisTaskMFTExample.C:163 RunAnalysisTaskMFTExample.C:164 RunAnalysisTaskMFTExample.C:165 RunAnalysisTaskMFTExample.C:166 RunAnalysisTaskMFTExample.C:167 RunAnalysisTaskMFTExample.C:168 RunAnalysisTaskMFTExample.C:169 RunAnalysisTaskMFTExample.C:170 RunAnalysisTaskMFTExample.C:171 RunAnalysisTaskMFTExample.C:172