ROOT logo
// run.C
//
// Template run macro for AliBasicTask.cxx/.h with example layout of
// physics selections and options, in macro and task.
//
// Author: Arvinder Palaha
//
class AliAnalysisGrid;

//______________________________________________________________________________
void runAllCh(
              Bool_t isNano = 1,
              const char* runtype = "local", // local, proof or grid
              const char *gridmode = "test", // Set the run mode (can be "full", "test", "offline", "submit" or "terminate"). Full & Test work for proof
              const bool bMCtruth = 1, // 1 = MCEvent handler is on (MC truth), 0 = MCEvent handler is off (MC reconstructed/real data)
              const bool bMCphyssel = 0, // 1 = looking at MC truth or reconstructed, 0 = looking at real data
              const Long64_t nentries = 2000, // for local and proof mode, ignored in grid mode. Set to 1234567890 for all events.
              const Long64_t firstentry = 0, // for local and proof mode, ignored in grid mode
              const char *proofdataset = "/alice/data/LHC10c_000120821_p1", // path to dataset on proof cluster, for proof analysis
              const char *proofcluster = "alice-caf.cern.ch", // which proof cluster to use in proof mode
              const char *taskname = "example_task" // sets name of grid generated macros
         )
{
    // check run type
    if(runtype != "local" && runtype != "proof" && runtype != "grid"){
        Printf("\n\tIncorrect run option, check first argument of run macro");
        Printf("\tint runtype = local, proof or grid\n");
        return;
    }
    Printf("%s analysis chosen",runtype);
  
    // load libraries
  gSystem->Load("libCore.so");  
  gSystem->Load("libGeom.so");
  gSystem->Load("libPhysics.so");
  gSystem->Load("libVMC");
  gSystem->Load("libTree");
  gSystem->Load("libProof");
  gSystem->Load("libMatrix");
  gSystem->Load("libMinuit");
  gSystem->Load("libSTEERBase");
  gSystem->Load("libESD");
  gSystem->Load("libAOD");
  gSystem->Load("libANALYSIS");
  //  return;
    gSystem->Load("libOADB");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libTENDER");
  gSystem->Load("libCORRFW");
  //  gSystem->Load("libPWG0base");
  gSystem->Load("libMinuit");
  gSystem->Load("libPWGTools");
  gSystem->Load("libPWGLFspectra");
  gSystem->Load("libPWGLFthermalfits");    
  gSystem->Load("libPWGDevNanoAOD.so");

  
    // add aliroot indlude path
    gROOT->ProcessLine(Form(".include %s/include",gSystem->ExpandPathName("$ALICE_ROOT")));
    gROOT->SetStyle("Plain");
        
    // analysis manager
    AliAnalysisManager* mgr = new AliAnalysisManager(taskname);
    
    // create the alien handler and attach it to the manager
    AliAnalysisGrid *plugin = CreateAlienHandler(taskname, gridmode, proofcluster, proofdataset); 
    mgr->SetGridHandler(plugin);
    
    AliInputEventHandler* iH = new AliAODInputHandler();
    if(isNano) {
      iH->SetEventSelection(new AliAnalysisNanoAODTrackCuts); // FIXME: we need this, otherwise we crash in AliAODInputHandler::BeginEvent where fIsSelectedResult = fEvent->GetHeader()->GetOfflineTrigger(). This is a temporary hack. In the future, it will be solved by using AliVHeader in the AliAODInputHandler.
    }

//    AliAODInputHandler* iH = new AliAODInputHandler();
//    iH->SetInactiveBranches("tracks. vertices. v0s. cascades. jets. caloClusters. fmdClusters. pmdClusters. dimuons. AliAODZDC");
//    iH->SetInactiveBranches("*");
//    iH->SetCheckStatistics(kTRUE);
    mgr->SetInputEventHandler(iH);
        
    // mc event handlerrunEx01.C
    if(bMCtruth) {
        AliMCEventHandler* mchandler = new AliMCEventHandler();
        // Not reading track references
        mchandler->SetReadTR(kFALSE);
        mgr->SetMCtruthEventHandler(mchandler);
    }   

    // === Physics Selection Task ===
    //
    // In SelectCollisionCandidate(), default is kMB, so the task UserExec() 
    // function is only called for these events.
    // Options are:
    //    kMB             Minimum Bias trigger
    //    kMBNoTRD        Minimum bias trigger where the TRD is not read out
    //    kMUON           Muon trigger
    //    kHighMult       High-Multiplicity Trigger
    //    kUserDefined    For manually defined trigger selection
    //
    // Multiple options possible with the standard AND/OR operators && and ||
    // These all have the usual offline SPD or V0 selections performed.
    //
    // With a pointer to the physics selection object using physSelTask->GetPhysicsSelection(),
    // one can manually set the selected and background classes using:
    //    AddCollisionTriggerClass("+CINT1B-ABCE-NOPF-ALL")
    //    AddBGTriggerClass("+CINT1A-ABCE-NOPF-ALL");
    //
    // One can also specify multiple classes at once, or require a class to NOT
    // trigger, for e.g.
    //    AddBGTriggerClass("+CSMBA-ABCE-NOPF-ALL -CSMBB-ABCE-NOPF-ALL");
    //
    // NOTE that manually setting the physics selection overrides the standard
    // selection, so it must be done in completeness.
    //
    // ALTERNATIVELY, one can make the physics selection inside the task
    // UserExec().
    // For this case, comment out the task->SelectCol.... line, 
    // and see AliBasicTask.cxx UserExec() function for details on this.

//    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
//    AliPhysicsSelectionTask *physSelTask = AddTaskPhysicsSelection(bMCphyssel);
//    if(!physSelTask) { Printf("no physSelTask"); return; }
    //AliPhysicsSelection *physSel = physSelTask->GetPhysicsSelection();
    //physSel->AddCollisionTriggerClass("+CINT1B-ABCE-NOPF-ALL");// #3119 #769");
                
    // PID RESPONSE
    if(!isNano){
      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
      AliAnalysisTaskPIDResponse *taskPID=AddTaskPIDResponse(bMCtruth);
      taskPID->SetUseTPCEtaCorrection(kTRUE); 
      taskPID->SetUserDataRecoPass(2);
    }


    // create task
    gROOT->LoadMacro("AddTaskSpectraAllChNanoAOD.C");
    //load calibration object for LHC10h
    AliAnalysisTaskSpectraAllChNanoAOD* task =     AddTaskSpectraAllChAOD(bMCtruth, // MC
                                                                          0, // cent min
                                                                          100, //cent max
                                                                          -999999., // q min
                                                                          999999., // q max
                                                                          -0.8, // eta min
                                                                          0.8, //  eta max
                                                                          15.0, // pt max
                                                                          0.6, // pt tof
                                                                          1024, // trkbit
                                                                          100000, // dca
                                                                          70, // tpc cls
                                                                          3.0, // nsigma
                                                                          2, // pid type, 2 = nsigma TPC TOF
                                                                          "_EvtOnly_F1024_VZEROA");
    TFile * fCalib=TFile::Open("calibV0New.root");
    task->GetEventCuts()->SetCalibFile(fCalib);
    task->GetEventCuts()->SetIsLHC10h(kTRUE);
    task->GetEventCuts()->SetCentralityMethod("V0M");
    
    task->SetVZEROside(0); //0: VZERO-A 1: VZERO-C
    
    task->SetFillOnlyEvents(0);
    task->SetnCentBins(100);
    task->SetnQvecBins(400);
    task->SetnNchBins(1);

    //    task->SelectCollisionCandidates(AliVEvent::kMB); // if physics selection performed in UserExec(), this line should be commented
    mgr->AddTask(task);
    
    // set output root file name for different analysis
    // TString outfilename = Form("list.%s.root",runtype);
  
    // create containers for input/output
    // AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
    // AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("coutput1", TList::Class(), AliAnalysisManager::kOutputContainer, outfilename);
        
    // connect input/output
    // mgr->ConnectInput(task, 0, cinput);
    // mgr->ConnectOutput(task, 1, coutput1);
        
    // enable debug printouts
    mgr->SetDebugLevel(10);
    //    mgr->SetNSysInfo(100);
    if (!mgr->InitAnalysis()) return;
    mgr->PrintStatus();
  
    // start analysis
    Printf("Starting Analysis....");
    mgr->StartAnalysis(runtype,nentries,firstentry);
}

//______________________________________________________________________________
AliAnalysisGrid* CreateAlienHandler(const char *taskname, const char *gridmode, const char *proofcluster, const char *proofdataset)
{
    AliAnalysisAlien *plugin = new AliAnalysisAlien();
    // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
    plugin->SetRunMode(gridmode);

    // Set versions of used packages
    plugin->SetAPIVersion("V1.1x");
    plugin->SetROOTVersion("v5-34-08-5");
    plugin->SetAliROOTVersion("vAN-20140317");

    // Declare input data to be processed.
//    plugin->SetCheckCopy(kFALSE);

    // Method 1: Create automatically XML collections using alien 'find' command.
    // Define production directory LFN
    plugin->SetGridDataDir("/alice/data/2010/LHC10b");
    // On real reconstructed data:
    // plugin->SetGridDataDir("/alice/data/2009/LHC09d");
    // Set data search pattern
    //plugin->SetDataPattern("*ESDs.root"); // THIS CHOOSES ALL PASSES
    // Data pattern for reconstructed data
    plugin->SetDataPattern("*ESDs/pass2/*ESDs.root"); // CHECK LATEST PASS OF DATA SET IN ALIENSH
    //    plugin->SetDataPattern("ESDs/pass2/AOD038/*AliAOD.root"); // CHECK LATEST PASS OF DATA SET IN ALIENSH
    plugin->SetRunPrefix("000");   // real data
    // ...then add run numbers to be considered
    Int_t runlist[15]={117039, 146859, 146858, 146856, 146824, 146817, 146806, 146805, 146804, 146803, 146802, 146801, 146748, 146747, 146746};  
    for (Int_t ind=0; ind<1; ind++) {
//     plugin->AddRunNumber(138275);
      plugin->AddRunNumber(runlist[ind]);
    }
    //plugin->SetRunRange(114917,115322);
    plugin->SetNrunsPerMaster(10); // 1
    plugin->SetOutputToRunNo();
    // comment out the next line when using the "terminate" option, unless
    // you want separate merged files for each run
    plugin->SetMergeViaJDL();

    // 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("tag.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(taskname);

    // Declare alien output directory. Relative to working directory.
    plugin->SetGridOutputDir("out"); // In this case will be $HOME/taskname/out

    // Declare the analysis source files names separated by blancs. To be compiled runtime
    // using ACLiC on the worker nodes.
    plugin->SetAnalysisSource("AliAnalysisTaskEx01.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("AliAnalysisTaskEx01.h AliAnalysisTaskEx01.cxx");

    // Declare the output file names separated by blancs.
    // (can be like: file.root or file.root@ALICE::Niham::File)
    // To only save certain files, use SetDefaultOutputs(kFALSE), and then
    // SetOutputFiles("list.root other.filename") to choose which files to save
    plugin->SetDefaultOutputs();
    //plugin->SetOutputFiles("list.root");

    // Optionally set a name for the generated analysis macro (default MyAnalysis.C)
    plugin->SetAnalysisMacro(Form("%s.C",taskname));

    // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
    plugin->SetSplitMaxInputFileNumber(100);

    // Optionally modify the executable name (default analysis.sh)
    plugin->SetExecutable(Form("%s.sh",taskname));

    // set number of test files to use in "test" mode
    plugin->SetNtestFiles(10);

    // Optionally resubmit threshold.
    plugin->SetMasterResubmitThreshold(90);

    // Optionally set time to live (default 30000 sec)
    plugin->SetTTL(30000);

    // Optionally set input format (default xml-single)
    plugin->SetInputFormat("xml-single");

    // Optionally modify the name of the generated JDL (default analysis.jdl)
    plugin->SetJDLName(Form("%s.jdl",taskname));

    // Optionally modify job price (default 1)
    plugin->SetPrice(1);      

    // Optionally modify split mode (default 'se')    
    plugin->SetSplitMode("se");
    
    //----------------------------------------------------------
    //---      PROOF MODE SPECIFIC SETTINGS         ------------
    //---------------------------------------------------------- 
    // Proof cluster
    plugin->SetProofCluster(proofcluster);
    // Dataset to be used   
    plugin->SetProofDataSet(proofdataset);
    // May need to reset proof. Supported modes: 0-no reset, 1-soft, 2-hard
    plugin->SetProofReset(0);
    // May limit number of workers
    plugin->SetNproofWorkers(0);
    // May limit the number of workers per slave
    plugin->SetNproofWorkersPerSlave(1);   
    // May use a specific version of root installed in proof
    plugin->SetRootVersionForProof("current");
    // May set the aliroot mode. Check http://aaf.cern.ch/node/83 
    plugin->SetAliRootMode("default"); // Loads AF libs by default
    // May request ClearPackages (individual ClearPackage not supported)
    plugin->SetClearPackages(kFALSE);
    // Plugin test mode works only providing a file containing test file locations, used in "local" mode also
    plugin->SetFileForTestMode("files.txt"); // file should contain path name to a local directory containg *ESDs.root etc
    // Request connection to alien upon connection to grid
    plugin->SetProofConnectGrid(kFALSE);
    // Other PROOF specific parameters
    plugin->SetProofParameter("PROOF_UseMergers","-1");
    printf("Using: PROOF_UseMergers   : %s\n", plugin->GetProofParameter("PROOF_UseMergers"));
    return plugin;
}

 runAllCh.C:1
 runAllCh.C:2
 runAllCh.C:3
 runAllCh.C:4
 runAllCh.C:5
 runAllCh.C:6
 runAllCh.C:7
 runAllCh.C:8
 runAllCh.C:9
 runAllCh.C:10
 runAllCh.C:11
 runAllCh.C:12
 runAllCh.C:13
 runAllCh.C:14
 runAllCh.C:15
 runAllCh.C:16
 runAllCh.C:17
 runAllCh.C:18
 runAllCh.C:19
 runAllCh.C:20
 runAllCh.C:21
 runAllCh.C:22
 runAllCh.C:23
 runAllCh.C:24
 runAllCh.C:25
 runAllCh.C:26
 runAllCh.C:27
 runAllCh.C:28
 runAllCh.C:29
 runAllCh.C:30
 runAllCh.C:31
 runAllCh.C:32
 runAllCh.C:33
 runAllCh.C:34
 runAllCh.C:35
 runAllCh.C:36
 runAllCh.C:37
 runAllCh.C:38
 runAllCh.C:39
 runAllCh.C:40
 runAllCh.C:41
 runAllCh.C:42
 runAllCh.C:43
 runAllCh.C:44
 runAllCh.C:45
 runAllCh.C:46
 runAllCh.C:47
 runAllCh.C:48
 runAllCh.C:49
 runAllCh.C:50
 runAllCh.C:51
 runAllCh.C:52
 runAllCh.C:53
 runAllCh.C:54
 runAllCh.C:55
 runAllCh.C:56
 runAllCh.C:57
 runAllCh.C:58
 runAllCh.C:59
 runAllCh.C:60
 runAllCh.C:61
 runAllCh.C:62
 runAllCh.C:63
 runAllCh.C:64
 runAllCh.C:65
 runAllCh.C:66
 runAllCh.C:67
 runAllCh.C:68
 runAllCh.C:69
 runAllCh.C:70
 runAllCh.C:71
 runAllCh.C:72
 runAllCh.C:73
 runAllCh.C:74
 runAllCh.C:75
 runAllCh.C:76
 runAllCh.C:77
 runAllCh.C:78
 runAllCh.C:79
 runAllCh.C:80
 runAllCh.C:81
 runAllCh.C:82
 runAllCh.C:83
 runAllCh.C:84
 runAllCh.C:85
 runAllCh.C:86
 runAllCh.C:87
 runAllCh.C:88
 runAllCh.C:89
 runAllCh.C:90
 runAllCh.C:91
 runAllCh.C:92
 runAllCh.C:93
 runAllCh.C:94
 runAllCh.C:95
 runAllCh.C:96
 runAllCh.C:97
 runAllCh.C:98
 runAllCh.C:99
 runAllCh.C:100
 runAllCh.C:101
 runAllCh.C:102
 runAllCh.C:103
 runAllCh.C:104
 runAllCh.C:105
 runAllCh.C:106
 runAllCh.C:107
 runAllCh.C:108
 runAllCh.C:109
 runAllCh.C:110
 runAllCh.C:111
 runAllCh.C:112
 runAllCh.C:113
 runAllCh.C:114
 runAllCh.C:115
 runAllCh.C:116
 runAllCh.C:117
 runAllCh.C:118
 runAllCh.C:119
 runAllCh.C:120
 runAllCh.C:121
 runAllCh.C:122
 runAllCh.C:123
 runAllCh.C:124
 runAllCh.C:125
 runAllCh.C:126
 runAllCh.C:127
 runAllCh.C:128
 runAllCh.C:129
 runAllCh.C:130
 runAllCh.C:131
 runAllCh.C:132
 runAllCh.C:133
 runAllCh.C:134
 runAllCh.C:135
 runAllCh.C:136
 runAllCh.C:137
 runAllCh.C:138
 runAllCh.C:139
 runAllCh.C:140
 runAllCh.C:141
 runAllCh.C:142
 runAllCh.C:143
 runAllCh.C:144
 runAllCh.C:145
 runAllCh.C:146
 runAllCh.C:147
 runAllCh.C:148
 runAllCh.C:149
 runAllCh.C:150
 runAllCh.C:151
 runAllCh.C:152
 runAllCh.C:153
 runAllCh.C:154
 runAllCh.C:155
 runAllCh.C:156
 runAllCh.C:157
 runAllCh.C:158
 runAllCh.C:159
 runAllCh.C:160
 runAllCh.C:161
 runAllCh.C:162
 runAllCh.C:163
 runAllCh.C:164
 runAllCh.C:165
 runAllCh.C:166
 runAllCh.C:167
 runAllCh.C:168
 runAllCh.C:169
 runAllCh.C:170
 runAllCh.C:171
 runAllCh.C:172
 runAllCh.C:173
 runAllCh.C:174
 runAllCh.C:175
 runAllCh.C:176
 runAllCh.C:177
 runAllCh.C:178
 runAllCh.C:179
 runAllCh.C:180
 runAllCh.C:181
 runAllCh.C:182
 runAllCh.C:183
 runAllCh.C:184
 runAllCh.C:185
 runAllCh.C:186
 runAllCh.C:187
 runAllCh.C:188
 runAllCh.C:189
 runAllCh.C:190
 runAllCh.C:191
 runAllCh.C:192
 runAllCh.C:193
 runAllCh.C:194
 runAllCh.C:195
 runAllCh.C:196
 runAllCh.C:197
 runAllCh.C:198
 runAllCh.C:199
 runAllCh.C:200
 runAllCh.C:201
 runAllCh.C:202
 runAllCh.C:203
 runAllCh.C:204
 runAllCh.C:205
 runAllCh.C:206
 runAllCh.C:207
 runAllCh.C:208
 runAllCh.C:209
 runAllCh.C:210
 runAllCh.C:211
 runAllCh.C:212
 runAllCh.C:213
 runAllCh.C:214
 runAllCh.C:215
 runAllCh.C:216
 runAllCh.C:217
 runAllCh.C:218
 runAllCh.C:219
 runAllCh.C:220
 runAllCh.C:221
 runAllCh.C:222
 runAllCh.C:223
 runAllCh.C:224
 runAllCh.C:225
 runAllCh.C:226
 runAllCh.C:227
 runAllCh.C:228
 runAllCh.C:229
 runAllCh.C:230
 runAllCh.C:231
 runAllCh.C:232
 runAllCh.C:233
 runAllCh.C:234
 runAllCh.C:235
 runAllCh.C:236
 runAllCh.C:237
 runAllCh.C:238
 runAllCh.C:239
 runAllCh.C:240
 runAllCh.C:241
 runAllCh.C:242
 runAllCh.C:243
 runAllCh.C:244
 runAllCh.C:245
 runAllCh.C:246
 runAllCh.C:247
 runAllCh.C:248
 runAllCh.C:249
 runAllCh.C:250
 runAllCh.C:251
 runAllCh.C:252
 runAllCh.C:253
 runAllCh.C:254
 runAllCh.C:255
 runAllCh.C:256
 runAllCh.C:257
 runAllCh.C:258
 runAllCh.C:259
 runAllCh.C:260
 runAllCh.C:261
 runAllCh.C:262
 runAllCh.C:263
 runAllCh.C:264
 runAllCh.C:265
 runAllCh.C:266
 runAllCh.C:267
 runAllCh.C:268
 runAllCh.C:269
 runAllCh.C:270
 runAllCh.C:271
 runAllCh.C:272
 runAllCh.C:273
 runAllCh.C:274
 runAllCh.C:275
 runAllCh.C:276
 runAllCh.C:277
 runAllCh.C:278
 runAllCh.C:279
 runAllCh.C:280
 runAllCh.C:281
 runAllCh.C:282
 runAllCh.C:283
 runAllCh.C:284
 runAllCh.C:285
 runAllCh.C:286
 runAllCh.C:287
 runAllCh.C:288
 runAllCh.C:289
 runAllCh.C:290
 runAllCh.C:291
 runAllCh.C:292
 runAllCh.C:293
 runAllCh.C:294
 runAllCh.C:295
 runAllCh.C:296
 runAllCh.C:297
 runAllCh.C:298
 runAllCh.C:299
 runAllCh.C:300
 runAllCh.C:301
 runAllCh.C:302
 runAllCh.C:303
 runAllCh.C:304
 runAllCh.C:305
 runAllCh.C:306
 runAllCh.C:307
 runAllCh.C:308
 runAllCh.C:309
 runAllCh.C:310
 runAllCh.C:311
 runAllCh.C:312
 runAllCh.C:313
 runAllCh.C:314
 runAllCh.C:315