ROOT logo
void runProofCascadePbPb(
                     TString  proofCluster      = "mnicassi@alice-caf.cern.ch",//kiaf.sdfarm.kr", //skaf.saske.sk"
                     TString  alirootVer        = "VO_ALICE@AliRoot::v5-03-50-AN",
                     TString  rootVer           = "VO_ALICE@ROOT::v5-34-01-1", 
                     TString  dataset           = "/alice/sim/LHC11f5_000139514", 
                     TString  outFileMC         = "CascadePerformance.root",
                     TString  outFileData       = "CascadeAna.root",
                     Bool_t   runperformancetask= kFALSE, 
                     Bool_t   useMC             = kTRUE, 
                     Bool_t   dataonalien       = kFALSE,
                     Float_t  centrlowlim       = 0., 
                     Float_t  centruplim        = 90., 
                     TString  centrest          = "V0M",
                     Bool_t   kusecleaning      = kTRUE,
                     Float_t  vtxlim            = 10., 
                     Int_t    minnTPCcls        = 70,     
                     Float_t  minptondaughtertracks = 0.,
                     Float_t  etacutondaughtertracks = 9999999., 
                     Bool_t   kextrasel         = kFALSE,
                     Bool_t   kacccut           = kFALSE,
                     Bool_t   krelaunchvertexers= kFALSE,
                     Int_t    nEvents           = 1.0*1e7, 
                     Int_t    nEventsSkip       = 0) { 

  gEnv->SetValue("XSec.GSI.DelegProxy","2");

  TString alirootMode = "";    // STEERBase,ESD,AOD,ANALYSIS,ANALYSISalice (default aliroot mode)
  TString extraLibs;
  TList *list = new TList();
  alirootMode="ALIROOT";
  extraLibs+= "ANALYSIS:OADB:ANALYSISalice:CORRFW";//:PWGLFSTRANGENESS";  
  // sets $ALIROOT_MODE on each worker to let proof to know to run in special mode
  list->Add(new TNamed("ALIROOT_MODE", alirootMode.Data()));
  list->Add(new TNamed("ALIROOT_EXTRA_LIBS", extraLibs.Data()));
  if (dataonalien) list->Add(new TNamed("ALIROOT_ENABLE_ALIEN", "1"));

  // REM: same version of AliRoot on client!
  TProof::Mgr(proofCluster.Data())->SetROOTVersion(rootVer.Data()); //If not using the default version, do it the first time only
  TProof::Open(proofCluster.Data());

  // enable n workers per machine
//  TProof::Open(proofCluster.Data(),"workers=nx")       
  // enable less workers
//  TProof::Open(proofCluster.Data(),"workers=20"); //For performance reasons, try to avoid it.
  if (!gProof) {
    Error("runProof.C","Connection to AF failed.");
    return;
  }

  gProof->EnablePackage(alirootVer.Data(), list);


  Analysis(dataset.Data(), outFileMC, outFileData, 
           useMC, nEvents, nEventsSkip,
           minnTPCcls, centrlowlim, centruplim, centrest, kusecleaning,
           vtxlim, kextrasel,
           runperformancetask, kacccut, krelaunchvertexers, minptondaughtertracks, etacutondaughtertracks);

}

//________________________________________________________________________
void Analysis(TString dataset, TString outFileMC, TString outFileData, 
              Bool_t useMC, Int_t nEvents, Int_t nEventsSkip, 
              Int_t minnTPCcls, Float_t centrlowlim, Float_t centruplim, TString centrest, Bool_t kusecleaning,
              Float_t vtxlim, 
              Bool_t kextrasel, Bool_t runperformancetask, Bool_t kacccut, Bool_t krelaunchvertexers, Float_t  minptondaughtertracks,
              Float_t  etacutondaughtertracks) {


  TString format = GetFormatFromDataSet(dataset);

  // ALICE stuff
  // create manager
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) mgr = new AliAnalysisManager("Test train");

  InputHandlerSetup(format,runperformancetask);

  cout<<"Format"<<format.Data()<<endl;
  
  if (!format.CompareTo("ESD")) {
    // physics selection
    gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
    AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(useMC);

    // centrality selection
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
    AliCentralitySelectionTask *taskCentr = AddTaskCentrality();
    if (useMC) {
      taskCentr->SetMCInput();
      taskCentr->DontUseCleaning(); // for injected MC
    }
  }

  
  // add PID response task
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
  AliAnalysisTaskPIDResponse *pidTask = AddTaskPIDResponse(useMC);

  // create task
  if (runperformancetask) {
//    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/AliAnalysisTaskCheckPerformanceCascadePbPb.cxx++g");
//    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/macros/AddTaskCheckPerformanceCascadePbPb.C");
    gProof->Load("AliAnalysisTaskCheckPerformanceCascadePbPb.cxx++");
    gProof->Load("AddTaskCheckPerformanceCascadePbPb.C");
    AliAnalysisTaskCheckPerformanceCascadePbPb *task = AddTaskCheckPerformanceCascadePbPb(minnTPCcls, centrlowlim, centruplim, centrest, kusecleaning, vtxlim,kextrasel ,kacccut ,krelaunchvertexers,minptondaughtertracks,etacutondaughtertracks);
  
  } else {
//    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/AliAnalysisTaskCheckCascadePbPb.cxx++g");
//    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/macros/AddTaskCheckCascadePbPb.C");
    gProof->Load("AliAnalysisTaskCheckCascadePbPb.cxx++");
    gProof->Load("AddTaskCheckCascadePbPb.C");

    AliAnalysisTaskCheckCascadePbPb *task = AddTaskCheckCascadePbPb(minnTPCcls, centrlowlim, centruplim, centrest, kusecleaning, vtxlim,kextrasel ,krelaunchvertexers,minptondaughtertracks,etacutondaughtertracks);

  }

  // run analysis
  mgr->InitAnalysis();
  // process dataset  
  mgr->StartAnalysis("proof", dataset.Data(), nEvents, nEventsSkip);  // single dataset
  //mgr->StartAnalysis("proof","/alice/sim/LHC11f5_000139514|/alice/sim/LHC11f5_000139517",nEvents, nEventsSkip);  // multiple dataset

}

//________________________________________________________________________
TString GetFormatFromDataSet(TString dataset) {

//  Info("runProof.C","Detecting format from dataset (may take while, depends on network connection)...");
  TString dsTreeName;
  if (dataset.Contains("#")) {
    Info("runProof.C",Form("Detecting format from dataset name '%s' ...",dataset.Data()));
    dsTreeName=dataset(dataset.Last('#'),dataset.Length());
  } else {
    Info("runProof.C",Form("Detecting format from dataset '%s' (may take while, depends on network connection) ...",dataset.Data()));
    TFileCollection *ds = gProof->GetDataSet(dataset.Data());
    if (!ds) {
      Error(Form("Dataset %s doesn't exist on proof cluster!!!!",dataset.Data()));
      return "";
    }
    dsTreeName = ds->GetDefaultTreeName();
  }

  if (dsTreeName.Contains("esdTree")) {
    Info("runProof.C","ESD input format detected ...");
    return "ESD";
  } else if (dsTreeName.Contains("aodTree"))  {
    Info("runProof.C","AOD input format detected ...");
    return "AOD";
  } else {
    Error("runProof.C",Form("Tree %s is not supported !!!",dsTreeName.Data()));
    Error("runProof.C",Form("Maybe set your DS to %s#esdTree or %s#aodTree",dataset.Data(),dataset.Data()));
  }

  return "";
}

//________________________________________________________________________
Bool_t InputHandlerSetup(TString format = "esd", Bool_t useKine = kTRUE) {
  format.ToLower();

  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();

  AliAnalysisDataContainer *cin = mgr->GetCommonInputContainer();

  if (cin) return;

  if (!format.CompareTo("esd")) {
    AliESDInputHandler *esdInputHandler = dynamic_cast<AliESDInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());

    if (!esdInputHandler) {
      Info("CustomAnalysisTaskInputSetup", "Creating esdInputHandler ...");
      esdInputHandler = new AliESDInputHandler();
      mgr->SetInputEventHandler(esdInputHandler);
    }

    if (useKine) {
      AliMCEventHandler* mcInputHandler = dynamic_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());

      if (!mcInputHandler) {
        Info("CustomAnalysisTaskInputSetup", "Creating mcInputHandler ...");
        AliMCEventHandler* mcInputHandler = new AliMCEventHandler();
        mgr->SetMCtruthEventHandler(mcInputHandler);
      }
    }
  } else if (!format.CompareTo("aod")) {
    AliAODInputHandler *aodInputHandler = dynamic_cast<AliAODInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());

    if (!aodInputHandler) {
      Info("CustomAnalysisTaskInputSetup", "Creating aodInputHandler ...");
      aodInputHandler = new AliAODInputHandler();
      mgr->SetInputEventHandler(aodInputHandler);
    }
  } else {
    AliWarning("Wrong input format!!! Only ESD and AOD are supported. Skipping Task ...");
    return kFALSE;
  }

  return kTRUE; 
} 
 runProofCascadePbPb.C:1
 runProofCascadePbPb.C:2
 runProofCascadePbPb.C:3
 runProofCascadePbPb.C:4
 runProofCascadePbPb.C:5
 runProofCascadePbPb.C:6
 runProofCascadePbPb.C:7
 runProofCascadePbPb.C:8
 runProofCascadePbPb.C:9
 runProofCascadePbPb.C:10
 runProofCascadePbPb.C:11
 runProofCascadePbPb.C:12
 runProofCascadePbPb.C:13
 runProofCascadePbPb.C:14
 runProofCascadePbPb.C:15
 runProofCascadePbPb.C:16
 runProofCascadePbPb.C:17
 runProofCascadePbPb.C:18
 runProofCascadePbPb.C:19
 runProofCascadePbPb.C:20
 runProofCascadePbPb.C:21
 runProofCascadePbPb.C:22
 runProofCascadePbPb.C:23
 runProofCascadePbPb.C:24
 runProofCascadePbPb.C:25
 runProofCascadePbPb.C:26
 runProofCascadePbPb.C:27
 runProofCascadePbPb.C:28
 runProofCascadePbPb.C:29
 runProofCascadePbPb.C:30
 runProofCascadePbPb.C:31
 runProofCascadePbPb.C:32
 runProofCascadePbPb.C:33
 runProofCascadePbPb.C:34
 runProofCascadePbPb.C:35
 runProofCascadePbPb.C:36
 runProofCascadePbPb.C:37
 runProofCascadePbPb.C:38
 runProofCascadePbPb.C:39
 runProofCascadePbPb.C:40
 runProofCascadePbPb.C:41
 runProofCascadePbPb.C:42
 runProofCascadePbPb.C:43
 runProofCascadePbPb.C:44
 runProofCascadePbPb.C:45
 runProofCascadePbPb.C:46
 runProofCascadePbPb.C:47
 runProofCascadePbPb.C:48
 runProofCascadePbPb.C:49
 runProofCascadePbPb.C:50
 runProofCascadePbPb.C:51
 runProofCascadePbPb.C:52
 runProofCascadePbPb.C:53
 runProofCascadePbPb.C:54
 runProofCascadePbPb.C:55
 runProofCascadePbPb.C:56
 runProofCascadePbPb.C:57
 runProofCascadePbPb.C:58
 runProofCascadePbPb.C:59
 runProofCascadePbPb.C:60
 runProofCascadePbPb.C:61
 runProofCascadePbPb.C:62
 runProofCascadePbPb.C:63
 runProofCascadePbPb.C:64
 runProofCascadePbPb.C:65
 runProofCascadePbPb.C:66
 runProofCascadePbPb.C:67
 runProofCascadePbPb.C:68
 runProofCascadePbPb.C:69
 runProofCascadePbPb.C:70
 runProofCascadePbPb.C:71
 runProofCascadePbPb.C:72
 runProofCascadePbPb.C:73
 runProofCascadePbPb.C:74
 runProofCascadePbPb.C:75
 runProofCascadePbPb.C:76
 runProofCascadePbPb.C:77
 runProofCascadePbPb.C:78
 runProofCascadePbPb.C:79
 runProofCascadePbPb.C:80
 runProofCascadePbPb.C:81
 runProofCascadePbPb.C:82
 runProofCascadePbPb.C:83
 runProofCascadePbPb.C:84
 runProofCascadePbPb.C:85
 runProofCascadePbPb.C:86
 runProofCascadePbPb.C:87
 runProofCascadePbPb.C:88
 runProofCascadePbPb.C:89
 runProofCascadePbPb.C:90
 runProofCascadePbPb.C:91
 runProofCascadePbPb.C:92
 runProofCascadePbPb.C:93
 runProofCascadePbPb.C:94
 runProofCascadePbPb.C:95
 runProofCascadePbPb.C:96
 runProofCascadePbPb.C:97
 runProofCascadePbPb.C:98
 runProofCascadePbPb.C:99
 runProofCascadePbPb.C:100
 runProofCascadePbPb.C:101
 runProofCascadePbPb.C:102
 runProofCascadePbPb.C:103
 runProofCascadePbPb.C:104
 runProofCascadePbPb.C:105
 runProofCascadePbPb.C:106
 runProofCascadePbPb.C:107
 runProofCascadePbPb.C:108
 runProofCascadePbPb.C:109
 runProofCascadePbPb.C:110
 runProofCascadePbPb.C:111
 runProofCascadePbPb.C:112
 runProofCascadePbPb.C:113
 runProofCascadePbPb.C:114
 runProofCascadePbPb.C:115
 runProofCascadePbPb.C:116
 runProofCascadePbPb.C:117
 runProofCascadePbPb.C:118
 runProofCascadePbPb.C:119
 runProofCascadePbPb.C:120
 runProofCascadePbPb.C:121
 runProofCascadePbPb.C:122
 runProofCascadePbPb.C:123
 runProofCascadePbPb.C:124
 runProofCascadePbPb.C:125
 runProofCascadePbPb.C:126
 runProofCascadePbPb.C:127
 runProofCascadePbPb.C:128
 runProofCascadePbPb.C:129
 runProofCascadePbPb.C:130
 runProofCascadePbPb.C:131
 runProofCascadePbPb.C:132
 runProofCascadePbPb.C:133
 runProofCascadePbPb.C:134
 runProofCascadePbPb.C:135
 runProofCascadePbPb.C:136
 runProofCascadePbPb.C:137
 runProofCascadePbPb.C:138
 runProofCascadePbPb.C:139
 runProofCascadePbPb.C:140
 runProofCascadePbPb.C:141
 runProofCascadePbPb.C:142
 runProofCascadePbPb.C:143
 runProofCascadePbPb.C:144
 runProofCascadePbPb.C:145
 runProofCascadePbPb.C:146
 runProofCascadePbPb.C:147
 runProofCascadePbPb.C:148
 runProofCascadePbPb.C:149
 runProofCascadePbPb.C:150
 runProofCascadePbPb.C:151
 runProofCascadePbPb.C:152
 runProofCascadePbPb.C:153
 runProofCascadePbPb.C:154
 runProofCascadePbPb.C:155
 runProofCascadePbPb.C:156
 runProofCascadePbPb.C:157
 runProofCascadePbPb.C:158
 runProofCascadePbPb.C:159
 runProofCascadePbPb.C:160
 runProofCascadePbPb.C:161
 runProofCascadePbPb.C:162
 runProofCascadePbPb.C:163
 runProofCascadePbPb.C:164
 runProofCascadePbPb.C:165
 runProofCascadePbPb.C:166
 runProofCascadePbPb.C:167
 runProofCascadePbPb.C:168
 runProofCascadePbPb.C:169
 runProofCascadePbPb.C:170
 runProofCascadePbPb.C:171
 runProofCascadePbPb.C:172
 runProofCascadePbPb.C:173
 runProofCascadePbPb.C:174
 runProofCascadePbPb.C:175
 runProofCascadePbPb.C:176
 runProofCascadePbPb.C:177
 runProofCascadePbPb.C:178
 runProofCascadePbPb.C:179
 runProofCascadePbPb.C:180
 runProofCascadePbPb.C:181
 runProofCascadePbPb.C:182
 runProofCascadePbPb.C:183
 runProofCascadePbPb.C:184
 runProofCascadePbPb.C:185
 runProofCascadePbPb.C:186
 runProofCascadePbPb.C:187
 runProofCascadePbPb.C:188
 runProofCascadePbPb.C:189
 runProofCascadePbPb.C:190
 runProofCascadePbPb.C:191
 runProofCascadePbPb.C:192
 runProofCascadePbPb.C:193
 runProofCascadePbPb.C:194
 runProofCascadePbPb.C:195
 runProofCascadePbPb.C:196
 runProofCascadePbPb.C:197
 runProofCascadePbPb.C:198
 runProofCascadePbPb.C:199
 runProofCascadePbPb.C:200
 runProofCascadePbPb.C:201