ROOT logo
void AnalysisMacroGlob(TString dataset="/alice/sim/LHC10f8f_130844",
		       TString outFName="glovar.root",
		       Int_t  nEvents     = 5000,
		       Int_t  nEventsSkip = 0) 
{
  //  
  TString format = GetFormatFromDataSet(dataset);
  //
  // ALICE stuff
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) mgr = new AliAnalysisManager("Test train");
  //
  Bool_t isMC = dataset.Contains("sim");
  InputHandlerSetup(format,kFALSE,isMC);
  gProof->Load("AliTaskGlobVar.cxx++g");
  //
  /*
  gROOT->LoadMacro("AddTaskGlobVar.C");
  AliTaskGlobVar *task = AddTaskGlobVar(outFName.Data());
  */
  AliTaskGlobVar *task = new AliTaskGlobVar("AliTaskGlobVar");
  // create output container
  AliAnalysisDataContainer *coutput1 = 
    mgr->CreateContainer("clist", TList::Class(),AliAnalysisManager::kOutputContainer,outFName.Data());
  // add our task to the manager
  mgr->AddTask(task);
  //
  // finaly connect input and output
  mgr->ConnectInput(task, 0,  mgr->GetCommonInputContainer());
  mgr->ConnectOutput(task,1,coutput1);
  //
  if (!isMC) {
    AddPhysicsSelection();
    task->SelectCollisionCandidates( AliVEvent::kUserDefined );
    task->SetUseMC(kFALSE);
  }
  else task->SetUseMC(kTRUE);
  //  else task->SelectCollisionCandidates( AliVEvent::kMB);
  //
  // Run analysis
  mgr->InitAnalysis();
  // process dataset  
  mgr->StartAnalysis("proof", dataset.Data(), nEvents, nEventsSkip); 
  //
  TString evstCmd = "if [ -e event_stat.root ]; then \nmv event_stat.root evstat_"; 
  evstCmd += outFName;  evstCmd += " \nfi";
  gSystem->Exec( evstCmd.Data() );
  
}


TString GetFormatFromDataSet(TString dataset) {
  
//   Info("runAAF.C","Detecting format from dataset (may take while, depends on network connection)...");
  TString dsTreeName;
  if (dataset.Contains("#")) {
    Info("runAAF.C",Form("Detecting format from dataset name '%s' ...",dataset.Data()));
    dsTreeName=dataset(dataset.Last('#'),dataset.Length());
  } else {
    Info("runAAF.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("runAAF.C","ESD input format detected ...");
    return "ESD";
  } else if (dsTreeName.Contains("aodTree"))  {
    Info("runAAF.C","AOD input format detected ...");
    return "AOD";
  } else {
    Error("runAAF.C",Form("Tree %s is not supported !!!",dsTreeName.Data()));
    Error("runAAF.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 useRP=kFALSE, Bool_t useKine = kFALSE)
{
  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 ...");
      if (useRP) esdInputHandler = new AliESDInputHandlerRP();
      else       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
  {
    Info("Wrong input format!!! Only ESD and AOD are supported. Skipping Task ...");
    return kFALSE;
  }

  return kTRUE;
}

void AddPhysicsSelection(Bool_t isMC=kFALSE)
{
  // physics selection a la Michele
  printf("Requesting physics selection in %s mode\n",isMC ? "MC":"Data");
  gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
  //isMC is true when processing monte carlo, the second 0 disables the cluster vs tracklets
  AliPhysicsSelectionTask* physicsSelectionTask = AddTaskPhysicsSelection(isMC,0);
  if(!isMC) {
    AliPhysicsSelection * physSel = physicsSelectionTask->GetPhysicsSelection();
    physSel->AddCollisionTriggerClass("+CMBAC-B-NOPF-ALL");
    /*
    physSel->AddCollisionTriggerClass("+CMBS1C-B-NOPF-ALL");
    physSel->AddCollisionTriggerClass("+CMBS1A-B-NOPF-ALL");
    */
    //
    physSel->AddCollisionTriggerClass("+CMBS2C-B-NOPF-ALL");
    physSel->AddCollisionTriggerClass("+CMBS2A-B-NOPF-ALL");
    //
    // This are needed only to fill the statistics tables
    physSel->AddBGTriggerClass("+CMBAC-C-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBAC-A-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBAC-E-NOPF-ALL");
    //
    /*
    physSel->AddBGTriggerClass("+CMBS1C-C-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS1C-A-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS1C-E-NOPF-ALL");
    //
    physSel->AddBGTriggerClass("+CMBS1A-C-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS1A-A-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS1A-E-NOPF-ALL");
    //
    */
    /*
    //
    physSel->AddBGTriggerClass("+CMBS2C-C-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS2C-A-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS2C-E-NOPF-ALL");
    //
    physSel->AddBGTriggerClass("+CMBS2A-C-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS2A-A-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS2A-E-NOPF-ALL");
    */
  } 
  // if you use the following line, your task only gets the selected events
  //  task->SelectCollisionCandidates(AliVEvent::kUserDefined);
  //
  //Alternatively, in the UserExec of your task:
  //Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kUserDefined);
  //
}
 AnalysisMacroGlob.C:1
 AnalysisMacroGlob.C:2
 AnalysisMacroGlob.C:3
 AnalysisMacroGlob.C:4
 AnalysisMacroGlob.C:5
 AnalysisMacroGlob.C:6
 AnalysisMacroGlob.C:7
 AnalysisMacroGlob.C:8
 AnalysisMacroGlob.C:9
 AnalysisMacroGlob.C:10
 AnalysisMacroGlob.C:11
 AnalysisMacroGlob.C:12
 AnalysisMacroGlob.C:13
 AnalysisMacroGlob.C:14
 AnalysisMacroGlob.C:15
 AnalysisMacroGlob.C:16
 AnalysisMacroGlob.C:17
 AnalysisMacroGlob.C:18
 AnalysisMacroGlob.C:19
 AnalysisMacroGlob.C:20
 AnalysisMacroGlob.C:21
 AnalysisMacroGlob.C:22
 AnalysisMacroGlob.C:23
 AnalysisMacroGlob.C:24
 AnalysisMacroGlob.C:25
 AnalysisMacroGlob.C:26
 AnalysisMacroGlob.C:27
 AnalysisMacroGlob.C:28
 AnalysisMacroGlob.C:29
 AnalysisMacroGlob.C:30
 AnalysisMacroGlob.C:31
 AnalysisMacroGlob.C:32
 AnalysisMacroGlob.C:33
 AnalysisMacroGlob.C:34
 AnalysisMacroGlob.C:35
 AnalysisMacroGlob.C:36
 AnalysisMacroGlob.C:37
 AnalysisMacroGlob.C:38
 AnalysisMacroGlob.C:39
 AnalysisMacroGlob.C:40
 AnalysisMacroGlob.C:41
 AnalysisMacroGlob.C:42
 AnalysisMacroGlob.C:43
 AnalysisMacroGlob.C:44
 AnalysisMacroGlob.C:45
 AnalysisMacroGlob.C:46
 AnalysisMacroGlob.C:47
 AnalysisMacroGlob.C:48
 AnalysisMacroGlob.C:49
 AnalysisMacroGlob.C:50
 AnalysisMacroGlob.C:51
 AnalysisMacroGlob.C:52
 AnalysisMacroGlob.C:53
 AnalysisMacroGlob.C:54
 AnalysisMacroGlob.C:55
 AnalysisMacroGlob.C:56
 AnalysisMacroGlob.C:57
 AnalysisMacroGlob.C:58
 AnalysisMacroGlob.C:59
 AnalysisMacroGlob.C:60
 AnalysisMacroGlob.C:61
 AnalysisMacroGlob.C:62
 AnalysisMacroGlob.C:63
 AnalysisMacroGlob.C:64
 AnalysisMacroGlob.C:65
 AnalysisMacroGlob.C:66
 AnalysisMacroGlob.C:67
 AnalysisMacroGlob.C:68
 AnalysisMacroGlob.C:69
 AnalysisMacroGlob.C:70
 AnalysisMacroGlob.C:71
 AnalysisMacroGlob.C:72
 AnalysisMacroGlob.C:73
 AnalysisMacroGlob.C:74
 AnalysisMacroGlob.C:75
 AnalysisMacroGlob.C:76
 AnalysisMacroGlob.C:77
 AnalysisMacroGlob.C:78
 AnalysisMacroGlob.C:79
 AnalysisMacroGlob.C:80
 AnalysisMacroGlob.C:81
 AnalysisMacroGlob.C:82
 AnalysisMacroGlob.C:83
 AnalysisMacroGlob.C:84
 AnalysisMacroGlob.C:85
 AnalysisMacroGlob.C:86
 AnalysisMacroGlob.C:87
 AnalysisMacroGlob.C:88
 AnalysisMacroGlob.C:89
 AnalysisMacroGlob.C:90
 AnalysisMacroGlob.C:91
 AnalysisMacroGlob.C:92
 AnalysisMacroGlob.C:93
 AnalysisMacroGlob.C:94
 AnalysisMacroGlob.C:95
 AnalysisMacroGlob.C:96
 AnalysisMacroGlob.C:97
 AnalysisMacroGlob.C:98
 AnalysisMacroGlob.C:99
 AnalysisMacroGlob.C:100
 AnalysisMacroGlob.C:101
 AnalysisMacroGlob.C:102
 AnalysisMacroGlob.C:103
 AnalysisMacroGlob.C:104
 AnalysisMacroGlob.C:105
 AnalysisMacroGlob.C:106
 AnalysisMacroGlob.C:107
 AnalysisMacroGlob.C:108
 AnalysisMacroGlob.C:109
 AnalysisMacroGlob.C:110
 AnalysisMacroGlob.C:111
 AnalysisMacroGlob.C:112
 AnalysisMacroGlob.C:113
 AnalysisMacroGlob.C:114
 AnalysisMacroGlob.C:115
 AnalysisMacroGlob.C:116
 AnalysisMacroGlob.C:117
 AnalysisMacroGlob.C:118
 AnalysisMacroGlob.C:119
 AnalysisMacroGlob.C:120
 AnalysisMacroGlob.C:121
 AnalysisMacroGlob.C:122
 AnalysisMacroGlob.C:123
 AnalysisMacroGlob.C:124
 AnalysisMacroGlob.C:125
 AnalysisMacroGlob.C:126
 AnalysisMacroGlob.C:127
 AnalysisMacroGlob.C:128
 AnalysisMacroGlob.C:129
 AnalysisMacroGlob.C:130
 AnalysisMacroGlob.C:131
 AnalysisMacroGlob.C:132
 AnalysisMacroGlob.C:133
 AnalysisMacroGlob.C:134
 AnalysisMacroGlob.C:135
 AnalysisMacroGlob.C:136
 AnalysisMacroGlob.C:137
 AnalysisMacroGlob.C:138
 AnalysisMacroGlob.C:139
 AnalysisMacroGlob.C:140
 AnalysisMacroGlob.C:141
 AnalysisMacroGlob.C:142
 AnalysisMacroGlob.C:143
 AnalysisMacroGlob.C:144
 AnalysisMacroGlob.C:145
 AnalysisMacroGlob.C:146
 AnalysisMacroGlob.C:147
 AnalysisMacroGlob.C:148
 AnalysisMacroGlob.C:149
 AnalysisMacroGlob.C:150
 AnalysisMacroGlob.C:151
 AnalysisMacroGlob.C:152
 AnalysisMacroGlob.C:153
 AnalysisMacroGlob.C:154
 AnalysisMacroGlob.C:155
 AnalysisMacroGlob.C:156
 AnalysisMacroGlob.C:157
 AnalysisMacroGlob.C:158
 AnalysisMacroGlob.C:159
 AnalysisMacroGlob.C:160
 AnalysisMacroGlob.C:161
 AnalysisMacroGlob.C:162
 AnalysisMacroGlob.C:163
 AnalysisMacroGlob.C:164
 AnalysisMacroGlob.C:165
 AnalysisMacroGlob.C:166
 AnalysisMacroGlob.C:167
 AnalysisMacroGlob.C:168
 AnalysisMacroGlob.C:169
 AnalysisMacroGlob.C:170
 AnalysisMacroGlob.C:171
 AnalysisMacroGlob.C:172
 AnalysisMacroGlob.C:173
 AnalysisMacroGlob.C:174
 AnalysisMacroGlob.C:175
 AnalysisMacroGlob.C:176
 AnalysisMacroGlob.C:177
 AnalysisMacroGlob.C:178
 AnalysisMacroGlob.C:179
 AnalysisMacroGlob.C:180
 AnalysisMacroGlob.C:181
 AnalysisMacroGlob.C:182
 AnalysisMacroGlob.C:183
 AnalysisMacroGlob.C:184
 AnalysisMacroGlob.C:185
 AnalysisMacroGlob.C:186
 AnalysisMacroGlob.C:187
 AnalysisMacroGlob.C:188
 AnalysisMacroGlob.C:189