ROOT logo
#include "Riostream.h"
#define BIT(n)       (1ULL << (n))
/*
   This macro should be called by a script TaskBuzzer.sh like:
 export ARG="TaskBuzzer.C($1)"
 aliroot -b -q $ARG
   Call: TaskBuzzer.sh "kCar00" or: TaskBuzzer.sh "kTender|kCar01"
*/   

TString config_name;
const char *ConfigName(UInt_t);
void LoadLibraries();
void AddAnalysisTasks();
TChain *CreateChain(const char *, const char *);

enum EBuzzerConfig {
   kBaseline         = 0x00,     // Baseline EVstat
   kCar00            = BIT(0),   // QAsym
   kCar01            = BIT(1),   // VZERO
   kCar02            = BIT(2),   // Vertex
   kCar03            = BIT(3),   // SPD
   kCar04            = BIT(4),   // SDD
   kCar05            = BIT(5),   // SSDdEdx
   kCar06            = BIT(6),   // FMD
   kCar07            = BIT(7),   // ITS
   kCar08            = BIT(8),   // TPC
   kCar09            = BIT(9),   // TRD
   kCar10            = BIT(10),  // CALO
   kCar11            = BIT(11),  // MUONTrig
   kTender           = BIT(30),  // TENDER
   kAOD              = BIT(31)   // AOD
};   
   
void TaskBuzzer(UInt_t config, const char *collection="wn.xml") 
{
  printf("Running buzzer with: %s\n", ConfigName(config));
  TGrid::Connect("alien://");
  if (!gGrid || !gGrid->IsConnected()) {
    ::Error("PilotAnalysis", "No grid connection");
    return;
  }
  TChain *chain = CreateChain(collection, "ESD");
  // Load libraries
  gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TRD");
  LoadLibraries();
  // Create manager
  AliAnalysisManager *mgr  = new AliAnalysisManager("ESDfiltering", "Production train");
  mgr->SetNSysInfo(100);
  // Input handler
  AliESDInputHandlerRP *esdHandler = new AliESDInputHandlerRP();
//  AliESDInputHandler *esdHandler = new AliESDInputHandler();
  esdHandler->SetReadFriends(kTRUE);
  esdHandler->SetActiveBranches("ESDfriend");
  mgr->SetInputEventHandler(esdHandler);
  if (config & kAOD) {
     // AOD output handler
     AliAODHandler* aodHandler   = new AliAODHandler();
     aodHandler->SetOutputFileName("AliAOD.root");
     if (!mergeExcludes.IsNull()) mergeExcludes += " ";
     mergeExcludes += "AliAOD.root";
     mgr->SetOutputEventHandler(aodHandler);
  }   
  // AnalysisTasks
  AddAnalysisTasks(config);

  mgr->SetDebugLevel(1);
  if (mgr->InitAnalysis()) {                                                                                                              
    mgr->PrintStatus(); 
    mgr->StartAnalysis("local", chain);
  }  
} 

//______________________________________________________________________________
void AddAnalysisTasks(UInt_t config)
{
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  mgr->SetCommonFileName("QAresults.root");
  //
  // Event Statistics (Jan Fiete)
  //

   gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
   AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
   mgr->RegisterExtraFile("event_stat.root");
  //
  // Tender and supplies
  //
  if (config & kTender) {
      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/TenderSupplies/AddTaskTender.C");
      AliAnalysisTaskSE *tender = AddTaskTender();
      // SelectCollisionCandidates ?? Tender has to derive from TaskSE
      tender->SelectCollisionCandidates();
      tender->SetDebugLevel(2);
  }
  // AOD creation with collision events
  if (config & kAOD) {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C");
    mgr->RegisterExtraFile("AliAOD.Muons.root");
    mgr->RegisterExtraFile("AliAOD.Dimuons.root");
    AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(kFALSE, kTRUE, kTRUE, doEventStat);
  }   
  // TPC QA (E. Sicking)
  //
  if (config & kCar00) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskQAsym.C");
    AliAnalysisTaskSE * taskqasim = AddTaskQAsym(0);
    taskqasim->SelectCollisionCandidates();
  }  
  //
  // VZERO QA  (C. Cheshkov)
  //
  if (config & kCar01) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskVZEROQA.C");
    AliAnalysisTaskSE * taskv0qa = AddTaskVZEROQA(0);
//  taskv0qa->SelectCollisionCandidates();
  }
  // Vertexing (A. Dainese)
  // 
  if (config & kCar02) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskVertexESD.C");
    AliAnalysisTaskVertexESD* taskvertexesd =  AddTaskVertexESD();
    taskvertexesd->SelectCollisionCandidates();
  }  
  //
  // SPD (A. Mastroserio)
  //
  if (config & kCar03) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskSPDQA.C");
    AliAnalysisTaskSE* taskspdqa = AddTaskSPDQA();
    taskspdqa->SelectCollisionCandidates();
  }  
  //
  // SDD (F. Prino)
  //
  if (config & kCar04) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddSDDPoints.C");
    AliAnalysisTaskSE* tasksdd = AddSDDPoints();
    tasksdd->SelectCollisionCandidates();
  }
  //
  // SSD dEdx (Marek Chojnacki)
  //
  if (config & kCar05) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskdEdxSSDQA.C");
    AliAnalysisTaskSE* taskssddedx = AddTaskdEdxSSDQA();
    taskssddedx->SelectCollisionCandidates();
  }

  // FMD (Hans Hjersing Dalsgaard)
  //
  if (config & kCar06) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskFMD.C");
    AliAnalysisTaskSE* taskfmd = AddTaskFMD();
    taskfmd->SelectCollisionCandidates();
  }  
  //
  // ITS
  //
  if (config & kCar07) {
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskPerformanceITS.C");
      AliAnalysisTaskITSTrackingCheck *itsQA = AddTaskPerformanceITS(kFALSE);
  }
  //
  // TPC (Jacek Otwinowski)
  //
  if (config & kCar08) {
    gROOT->LoadMacro("$(ALICE_ROOT)/PWGPP/TPC/macros/AddTaskPerformanceTPCQA.C");
    AliPerformanceTask *tpcQA = AddTaskPerformanceTPCQA(kFALSE, kTRUE);
  }  
  //
  // TRD (Alex Bercuci, M. Fasel) 
  //
  if(config & kCar09) {
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTrainPerformanceTRD.C");
      AddTrainPerformanceTRD("ALL");
  }

  //
  // Calorimetry (Gustavo Conesa)
  //

  if(config & kCar10) {
      gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/QA/AddTaskCalorimeterQA.C");
      AliAnalysisTaskParticleCorrelation *taskCaloQA = AddTaskCalorimeterQA("ESD", kTRUE, kFALSE);
      taskCaloQA->SetDebugLevel(0);
  }

  //
  // Muon Trigger
  //
  
  if(config & kCar11) {
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskMTRchamberEfficiency.C");
      AliAnalysisTaskTrigChEff *taskMuonTrig = AddTaskMTRchamberEfficiency();
  }

  //
  // Muon Efficiency
  //
/*
  if(doMUONEff) {
      gROOT->LoadMacro("$ALICE_ROOT/PWG3/muondep/AddTaskMUONTrackingEfficiency.C");
      AliAnalysisTaskMuonTrackingEff *taskMuonTrackEff = AddTaskMUONTrackingEfficiency();
  }
  
  //
  // V0-Decay Reconstruction (Ana Marin)
  // 

  if (doV0) {
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskV0QA.C");
      AliAnalysisTaskV0QA *taskv0QA = AddTaskV0QA(kFALSE);
  }
*/
}

//______________________________________________________________________________
const char *ConfigName(UInt_t config) 
{
   config_name = "EVstat";
   if (config & kTender) config_name += "+TENDER";
   if (config & kAOD)    config_name   += "+AOD";
   if (config & kCar00)  config_name += "+QAsym";
   if (config & kCar01)  config_name += "+VZERO";
   if (config & kCar02)  config_name += "+Vertex";
   if (config & kCar03)  config_name += "+SPD";
   if (config & kCar04)  config_name += "+SDD";
   if (config & kCar05)  config_name += "+SSDdEdx";
   if (config & kCar06)  config_name += "+FMD";
   if (config & kCar07)  config_name += "+ITS";
   if (config & kCar08)  config_name += "+TPC";
   if (config & kCar09)  config_name += "+TRD";
   if (config & kCar10)  config_name += "+CALO";
   if (config & kCar11)  config_name += "+MUONTrig";
   return config_name.Data();
}

//______________________________________________________________________________
void LoadLibraries()
{
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libCORRFW");
  gSystem->Load("libTENDER");
  gSystem->Load("libTENDERSupplies");
  gSystem->Load("libPWG0base.so");
  gSystem->Load("libPWG0dep.so");
  gSystem->Load("libPWG0selectors.so");
  gSystem->Load("libPWGPP.so");
  gSystem->Load("libPWG2.so");
  gSystem->Load("libPWG2forward.so");
  gSystem->Load("libEMCALUtils");
  gSystem->Load("libPWG4PartCorrBase");
  gSystem->Load("libPWG4PartCorrDep");
  gSystem->Load("libPWGHFbase");
  gSystem->Load("libPWGmuon");
  gSystem->Load("libPWGmuondep");
// fast xrootd reading enabled
   printf("!!! You requested FastRead option. Using xrootd flags to reduce timeouts. Note that this may skip some files that could be accessed !!!");
   gEnv->SetValue("XNet.ConnectTimeout",10);
   gEnv->SetValue("XNet.RequestTimeout",10);
   gEnv->SetValue("XNet.MaxRedirectCount",2);
   gEnv->SetValue("XNet.ReconnectTimeout",10);
   gEnv->SetValue("XNet.FirstConnectMaxCnt",1);
}

//________________________________________________________________________________
TChain* CreateChain(const char *xmlfile, const char *type)
{
// Create a chain using url's from xml file
   TString treename = type;
   treename.ToLower();
   treename += "Tree";
   printf("***************************************\n");
   printf("    Getting chain of trees %s\n", treename.Data());
   printf("***************************************\n");
   TAlienCollection *coll = TAlienCollection::Open(xmlfile);
   if (!coll) {
      ::Error("CreateChain", "Cannot create an AliEn collection from %s", xmlfile);
      return NULL;
   }
   TChain *chain = new TChain(treename);
   coll->Reset();
   while (coll->Next()) {
      chain->Add(coll->GetTURL(""));
   }
   if (!chain->GetNtrees()) {
      ::Error("CreateChain", "No tree found from collection %s", xmlfile);
      return NULL;
   }
   return chain;
}
 TaskBuzzer.C:1
 TaskBuzzer.C:2
 TaskBuzzer.C:3
 TaskBuzzer.C:4
 TaskBuzzer.C:5
 TaskBuzzer.C:6
 TaskBuzzer.C:7
 TaskBuzzer.C:8
 TaskBuzzer.C:9
 TaskBuzzer.C:10
 TaskBuzzer.C:11
 TaskBuzzer.C:12
 TaskBuzzer.C:13
 TaskBuzzer.C:14
 TaskBuzzer.C:15
 TaskBuzzer.C:16
 TaskBuzzer.C:17
 TaskBuzzer.C:18
 TaskBuzzer.C:19
 TaskBuzzer.C:20
 TaskBuzzer.C:21
 TaskBuzzer.C:22
 TaskBuzzer.C:23
 TaskBuzzer.C:24
 TaskBuzzer.C:25
 TaskBuzzer.C:26
 TaskBuzzer.C:27
 TaskBuzzer.C:28
 TaskBuzzer.C:29
 TaskBuzzer.C:30
 TaskBuzzer.C:31
 TaskBuzzer.C:32
 TaskBuzzer.C:33
 TaskBuzzer.C:34
 TaskBuzzer.C:35
 TaskBuzzer.C:36
 TaskBuzzer.C:37
 TaskBuzzer.C:38
 TaskBuzzer.C:39
 TaskBuzzer.C:40
 TaskBuzzer.C:41
 TaskBuzzer.C:42
 TaskBuzzer.C:43
 TaskBuzzer.C:44
 TaskBuzzer.C:45
 TaskBuzzer.C:46
 TaskBuzzer.C:47
 TaskBuzzer.C:48
 TaskBuzzer.C:49
 TaskBuzzer.C:50
 TaskBuzzer.C:51
 TaskBuzzer.C:52
 TaskBuzzer.C:53
 TaskBuzzer.C:54
 TaskBuzzer.C:55
 TaskBuzzer.C:56
 TaskBuzzer.C:57
 TaskBuzzer.C:58
 TaskBuzzer.C:59
 TaskBuzzer.C:60
 TaskBuzzer.C:61
 TaskBuzzer.C:62
 TaskBuzzer.C:63
 TaskBuzzer.C:64
 TaskBuzzer.C:65
 TaskBuzzer.C:66
 TaskBuzzer.C:67
 TaskBuzzer.C:68
 TaskBuzzer.C:69
 TaskBuzzer.C:70
 TaskBuzzer.C:71
 TaskBuzzer.C:72
 TaskBuzzer.C:73
 TaskBuzzer.C:74
 TaskBuzzer.C:75
 TaskBuzzer.C:76
 TaskBuzzer.C:77
 TaskBuzzer.C:78
 TaskBuzzer.C:79
 TaskBuzzer.C:80
 TaskBuzzer.C:81
 TaskBuzzer.C:82
 TaskBuzzer.C:83
 TaskBuzzer.C:84
 TaskBuzzer.C:85
 TaskBuzzer.C:86
 TaskBuzzer.C:87
 TaskBuzzer.C:88
 TaskBuzzer.C:89
 TaskBuzzer.C:90
 TaskBuzzer.C:91
 TaskBuzzer.C:92
 TaskBuzzer.C:93
 TaskBuzzer.C:94
 TaskBuzzer.C:95
 TaskBuzzer.C:96
 TaskBuzzer.C:97
 TaskBuzzer.C:98
 TaskBuzzer.C:99
 TaskBuzzer.C:100
 TaskBuzzer.C:101
 TaskBuzzer.C:102
 TaskBuzzer.C:103
 TaskBuzzer.C:104
 TaskBuzzer.C:105
 TaskBuzzer.C:106
 TaskBuzzer.C:107
 TaskBuzzer.C:108
 TaskBuzzer.C:109
 TaskBuzzer.C:110
 TaskBuzzer.C:111
 TaskBuzzer.C:112
 TaskBuzzer.C:113
 TaskBuzzer.C:114
 TaskBuzzer.C:115
 TaskBuzzer.C:116
 TaskBuzzer.C:117
 TaskBuzzer.C:118
 TaskBuzzer.C:119
 TaskBuzzer.C:120
 TaskBuzzer.C:121
 TaskBuzzer.C:122
 TaskBuzzer.C:123
 TaskBuzzer.C:124
 TaskBuzzer.C:125
 TaskBuzzer.C:126
 TaskBuzzer.C:127
 TaskBuzzer.C:128
 TaskBuzzer.C:129
 TaskBuzzer.C:130
 TaskBuzzer.C:131
 TaskBuzzer.C:132
 TaskBuzzer.C:133
 TaskBuzzer.C:134
 TaskBuzzer.C:135
 TaskBuzzer.C:136
 TaskBuzzer.C:137
 TaskBuzzer.C:138
 TaskBuzzer.C:139
 TaskBuzzer.C:140
 TaskBuzzer.C:141
 TaskBuzzer.C:142
 TaskBuzzer.C:143
 TaskBuzzer.C:144
 TaskBuzzer.C:145
 TaskBuzzer.C:146
 TaskBuzzer.C:147
 TaskBuzzer.C:148
 TaskBuzzer.C:149
 TaskBuzzer.C:150
 TaskBuzzer.C:151
 TaskBuzzer.C:152
 TaskBuzzer.C:153
 TaskBuzzer.C:154
 TaskBuzzer.C:155
 TaskBuzzer.C:156
 TaskBuzzer.C:157
 TaskBuzzer.C:158
 TaskBuzzer.C:159
 TaskBuzzer.C:160
 TaskBuzzer.C:161
 TaskBuzzer.C:162
 TaskBuzzer.C:163
 TaskBuzzer.C:164
 TaskBuzzer.C:165
 TaskBuzzer.C:166
 TaskBuzzer.C:167
 TaskBuzzer.C:168
 TaskBuzzer.C:169
 TaskBuzzer.C:170
 TaskBuzzer.C:171
 TaskBuzzer.C:172
 TaskBuzzer.C:173
 TaskBuzzer.C:174
 TaskBuzzer.C:175
 TaskBuzzer.C:176
 TaskBuzzer.C:177
 TaskBuzzer.C:178
 TaskBuzzer.C:179
 TaskBuzzer.C:180
 TaskBuzzer.C:181
 TaskBuzzer.C:182
 TaskBuzzer.C:183
 TaskBuzzer.C:184
 TaskBuzzer.C:185
 TaskBuzzer.C:186
 TaskBuzzer.C:187
 TaskBuzzer.C:188
 TaskBuzzer.C:189
 TaskBuzzer.C:190
 TaskBuzzer.C:191
 TaskBuzzer.C:192
 TaskBuzzer.C:193
 TaskBuzzer.C:194
 TaskBuzzer.C:195
 TaskBuzzer.C:196
 TaskBuzzer.C:197
 TaskBuzzer.C:198
 TaskBuzzer.C:199
 TaskBuzzer.C:200
 TaskBuzzer.C:201
 TaskBuzzer.C:202
 TaskBuzzer.C:203
 TaskBuzzer.C:204
 TaskBuzzer.C:205
 TaskBuzzer.C:206
 TaskBuzzer.C:207
 TaskBuzzer.C:208
 TaskBuzzer.C:209
 TaskBuzzer.C:210
 TaskBuzzer.C:211
 TaskBuzzer.C:212
 TaskBuzzer.C:213
 TaskBuzzer.C:214
 TaskBuzzer.C:215
 TaskBuzzer.C:216
 TaskBuzzer.C:217
 TaskBuzzer.C:218
 TaskBuzzer.C:219
 TaskBuzzer.C:220
 TaskBuzzer.C:221
 TaskBuzzer.C:222
 TaskBuzzer.C:223
 TaskBuzzer.C:224
 TaskBuzzer.C:225
 TaskBuzzer.C:226
 TaskBuzzer.C:227
 TaskBuzzer.C:228
 TaskBuzzer.C:229
 TaskBuzzer.C:230
 TaskBuzzer.C:231
 TaskBuzzer.C:232
 TaskBuzzer.C:233
 TaskBuzzer.C:234
 TaskBuzzer.C:235
 TaskBuzzer.C:236
 TaskBuzzer.C:237
 TaskBuzzer.C:238
 TaskBuzzer.C:239
 TaskBuzzer.C:240
 TaskBuzzer.C:241
 TaskBuzzer.C:242
 TaskBuzzer.C:243
 TaskBuzzer.C:244
 TaskBuzzer.C:245
 TaskBuzzer.C:246
 TaskBuzzer.C:247
 TaskBuzzer.C:248
 TaskBuzzer.C:249
 TaskBuzzer.C:250
 TaskBuzzer.C:251
 TaskBuzzer.C:252
 TaskBuzzer.C:253
 TaskBuzzer.C:254
 TaskBuzzer.C:255
 TaskBuzzer.C:256
 TaskBuzzer.C:257
 TaskBuzzer.C:258
 TaskBuzzer.C:259
 TaskBuzzer.C:260
 TaskBuzzer.C:261
 TaskBuzzer.C:262
 TaskBuzzer.C:263
 TaskBuzzer.C:264
 TaskBuzzer.C:265
 TaskBuzzer.C:266
 TaskBuzzer.C:267
 TaskBuzzer.C:268
 TaskBuzzer.C:269
 TaskBuzzer.C:270
 TaskBuzzer.C:271
 TaskBuzzer.C:272
 TaskBuzzer.C:273
 TaskBuzzer.C:274
 TaskBuzzer.C:275
 TaskBuzzer.C:276
 TaskBuzzer.C:277
 TaskBuzzer.C:278
 TaskBuzzer.C:279
 TaskBuzzer.C:280
 TaskBuzzer.C:281
 TaskBuzzer.C:282
 TaskBuzzer.C:283
 TaskBuzzer.C:284
 TaskBuzzer.C:285
 TaskBuzzer.C:286
 TaskBuzzer.C:287
 TaskBuzzer.C:288
 TaskBuzzer.C:289
 TaskBuzzer.C:290
 TaskBuzzer.C:291
 TaskBuzzer.C:292
 TaskBuzzer.C:293