ROOT logo
void runTTreeFilterOnGrid() {
    // author: Redmer Alexander Bertens, Utrecht University
    // rbertens@cern.ch , rbertens@nikhef.nl , r.a.bertens@uu.nl
    //
    // example which converts input data (in this case local aod's put into a chain)
    // to a tree which holds
    // - AliFlowTTreeEvent : event object
    // - AliFlowTTreeTrack : track objects
    // see source of these classes for more details
    //
    // note that in this example macro the source classes (AliFlowTTreeEvent, AliFlowTTreeTrack,
    // AliAnalysisTaskTTreeFilter) are expected to be available in the folder
    // from which this macro is launched

    // load libraries
    gSystem->Load("libCore.so");        
    gSystem->Load("libGeom.so");
    gSystem->Load("libVMC.so");
    gSystem->Load("libPhysics.so");
    gSystem->Load("libTree.so");
    gSystem->Load("libSTEERBase.so");
    gSystem->Load("libESD.so");
    gSystem->Load("libAOD.so");
    gSystem->Load("libANALYSIS.so");
    gSystem->Load("libANALYSISalice.so");

    // create and customize the alien plugin
    AliAnalysisAlien *alienHandler = new AliAnalysisAlien();
    alienHandler->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/PWG/FLOW/Base -I$ALICE_ROOT/PWG/FLOW/Tasks -g");
    alienHandler->SetAdditionalLibs("libGui.so libProof.so libMinuit.so libXMLParser.so libRAWDatabase.so libRAWDatarec.so libCDB.so libSTEERBase.so libSTEER.so libTPCbase.so libTOFbase.so libTRDbase.so libVZERObase.so libVZEROrec.so libT0base.so libT0rec.so libTENDER.so libTENDERSupplies.so libPWGflowBase.so libPWGflowTasks.so AliFlowTTreeEvent.cxx AliFlowTTreeTrack.cxx AliAnalysisTaskTTreeFilter.cxx AliFlowTTreeEvent.h AliFlowTTreeTrack.h AliAnalysisTaskTTreeFilter.h");
    alienHandler->SetAnalysisSource("AliFlowTTreeEvent.cxx AliFlowTTreeTrack.cxx AliAnalysisTaskTTreeFilter.cxx");
    alienHandler->SetOverwriteMode();
    alienHandler->SetRunMode("full");
    alienHandler->SetNtestFiles(1);
    alienHandler->SetAPIVersion("V1.1x");
    alienHandler->SetROOTVersion("v5-34-08-6");
    alienHandler->SetAliROOTVersion("vAN-20140911");
    alienHandler->SetFileForTestMode("filelist.txt");
    alienHandler->SetGridDataDir("/alice/data/2011/LHC11h_2");
    alienHandler->SetDataPattern("*ESDs/pass2/AOD145/*AOD.root");
    alienHandler->SetRunPrefix("000");
    // runs from the 11h data taking period (36 from the 'good' tpc list, 28 from the 'semi good' list
    Int_t runs[] = {167813, 167988, 168066, 168068, 168069, 168076, 168104, 168212, 168311, 168322, 168325, 168341, 168361, 168362, 168458, 168460, 168461, 168992, 169091, 169094, 169138, 169143, 169167, 169417, 169835, 169837, 169838, 169846, 169855, 169858, 169859, 169923, 169956, 170027, 170036, 170081, 169975, 169981, 170038, 170040, 170083, 170084, 170085, 170088, 170089, 170091, 170152, 170155, 170159, 170163, 170193, 170195, 170203, 170204, 170205, 170228, 170230, 170264, 170268, 170269, 170270, 170306, 170308, 170309}; // 36 + 28 runs

    // add the runnnumbers to the handler
    for(int i = 0; i < 36; i++) alienHandler->AddRunNumber(runs[i]);

    alienHandler->SetDefaultOutputs();
    alienHandler->SetAnalysisMacro("PhiV2.C");
    alienHandler->SetSplitMaxInputFileNumber(40);
    alienHandler->SetExecutable("runTTreeFilterOnGrid.sh");
    alienHandler->SetTTL(10000);
    alienHandler->SetInputFormat("xml-single");
    alienHandler->SetJDLName("runTTreeFilterOnGrid.jdl");
    alienHandler->SetPrice(1);
    alienHandler->SetSplitMode("se");

    alienHandler->SetOutputToRunNo(kTRUE);
    alienHandler->SetKeepLogs(kTRUE);
    alienHandler->SetMaxMergeStages(1);
    alienHandler->SetMergeViaJDL(kTRUE);

    // define the output folders
    alienHandler->SetGridWorkingDir(Form("filteredTTree_runs_%i-%i", runs[0], runs[35]));
    alienHandler->SetGridOutputDir(Form("filteredTTree_runs_%i-%i", runs[0], runs[35]));

    // create the analysis manager
    AliAnalysisManager* mgr = new AliAnalysisManager("MyManager");
    // connect the alien plugin to the manager
    mgr->SetGridHandler(alienHandler);

    AliVEventHandler* inputH = new AliAODInputHandler();
    // and connect it to the manager
    mgr->SetInputEventHandler(inputH);

    // compile the relevant classes
    gSystem->AddIncludePath("-Wno-deprecated");
    gSystem->AddIncludePath("-I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/EMCAL");
    gSystem->AddIncludePath("-I$ALICE_ROOT/PWGDQ/dielectron -I$ALICE_ROOT/PWGHF/hfe");
    gSystem->AddIncludePath("-I$ALICE_ROOT/JETAN -I$ALICE_ROOT/JETAN/fastjet");

    gROOT->LoadMacro("AliFlowTTreeEvent.cxx+");
    gROOT->LoadMacro("AliFlowTTreeTrack.cxx+");
    gROOT->LoadMacro("AliAnalysisTaskTTreeFilter.cxx+");

    // load the addtask
    gROOT->LoadMacro("AddTaskTTreeFilter.C");

    // launch the task
    AddTaskTTreeFilter();

    // check if we can initialize the manager
    if(!mgr->InitAnalysis()) return;   
    // print the status of the manager to screen 
    mgr->PrintStatus();
    // print to screen how the analysis is progressing
    mgr->SetUseProgressBar(1, 25);
    // start the analysis locally, reading the events from the tchain
    mgr->StartAnalysis("grid");
}
 runTTreeFilterOnGrid.C:1
 runTTreeFilterOnGrid.C:2
 runTTreeFilterOnGrid.C:3
 runTTreeFilterOnGrid.C:4
 runTTreeFilterOnGrid.C:5
 runTTreeFilterOnGrid.C:6
 runTTreeFilterOnGrid.C:7
 runTTreeFilterOnGrid.C:8
 runTTreeFilterOnGrid.C:9
 runTTreeFilterOnGrid.C:10
 runTTreeFilterOnGrid.C:11
 runTTreeFilterOnGrid.C:12
 runTTreeFilterOnGrid.C:13
 runTTreeFilterOnGrid.C:14
 runTTreeFilterOnGrid.C:15
 runTTreeFilterOnGrid.C:16
 runTTreeFilterOnGrid.C:17
 runTTreeFilterOnGrid.C:18
 runTTreeFilterOnGrid.C:19
 runTTreeFilterOnGrid.C:20
 runTTreeFilterOnGrid.C:21
 runTTreeFilterOnGrid.C:22
 runTTreeFilterOnGrid.C:23
 runTTreeFilterOnGrid.C:24
 runTTreeFilterOnGrid.C:25
 runTTreeFilterOnGrid.C:26
 runTTreeFilterOnGrid.C:27
 runTTreeFilterOnGrid.C:28
 runTTreeFilterOnGrid.C:29
 runTTreeFilterOnGrid.C:30
 runTTreeFilterOnGrid.C:31
 runTTreeFilterOnGrid.C:32
 runTTreeFilterOnGrid.C:33
 runTTreeFilterOnGrid.C:34
 runTTreeFilterOnGrid.C:35
 runTTreeFilterOnGrid.C:36
 runTTreeFilterOnGrid.C:37
 runTTreeFilterOnGrid.C:38
 runTTreeFilterOnGrid.C:39
 runTTreeFilterOnGrid.C:40
 runTTreeFilterOnGrid.C:41
 runTTreeFilterOnGrid.C:42
 runTTreeFilterOnGrid.C:43
 runTTreeFilterOnGrid.C:44
 runTTreeFilterOnGrid.C:45
 runTTreeFilterOnGrid.C:46
 runTTreeFilterOnGrid.C:47
 runTTreeFilterOnGrid.C:48
 runTTreeFilterOnGrid.C:49
 runTTreeFilterOnGrid.C:50
 runTTreeFilterOnGrid.C:51
 runTTreeFilterOnGrid.C:52
 runTTreeFilterOnGrid.C:53
 runTTreeFilterOnGrid.C:54
 runTTreeFilterOnGrid.C:55
 runTTreeFilterOnGrid.C:56
 runTTreeFilterOnGrid.C:57
 runTTreeFilterOnGrid.C:58
 runTTreeFilterOnGrid.C:59
 runTTreeFilterOnGrid.C:60
 runTTreeFilterOnGrid.C:61
 runTTreeFilterOnGrid.C:62
 runTTreeFilterOnGrid.C:63
 runTTreeFilterOnGrid.C:64
 runTTreeFilterOnGrid.C:65
 runTTreeFilterOnGrid.C:66
 runTTreeFilterOnGrid.C:67
 runTTreeFilterOnGrid.C:68
 runTTreeFilterOnGrid.C:69
 runTTreeFilterOnGrid.C:70
 runTTreeFilterOnGrid.C:71
 runTTreeFilterOnGrid.C:72
 runTTreeFilterOnGrid.C:73
 runTTreeFilterOnGrid.C:74
 runTTreeFilterOnGrid.C:75
 runTTreeFilterOnGrid.C:76
 runTTreeFilterOnGrid.C:77
 runTTreeFilterOnGrid.C:78
 runTTreeFilterOnGrid.C:79
 runTTreeFilterOnGrid.C:80
 runTTreeFilterOnGrid.C:81
 runTTreeFilterOnGrid.C:82
 runTTreeFilterOnGrid.C:83
 runTTreeFilterOnGrid.C:84
 runTTreeFilterOnGrid.C:85
 runTTreeFilterOnGrid.C:86
 runTTreeFilterOnGrid.C:87
 runTTreeFilterOnGrid.C:88
 runTTreeFilterOnGrid.C:89
 runTTreeFilterOnGrid.C:90
 runTTreeFilterOnGrid.C:91
 runTTreeFilterOnGrid.C:92
 runTTreeFilterOnGrid.C:93
 runTTreeFilterOnGrid.C:94
 runTTreeFilterOnGrid.C:95
 runTTreeFilterOnGrid.C:96
 runTTreeFilterOnGrid.C:97
 runTTreeFilterOnGrid.C:98
 runTTreeFilterOnGrid.C:99
 runTTreeFilterOnGrid.C:100
 runTTreeFilterOnGrid.C:101