ROOT logo
///
/// Example macro to run the AliAnalysisTaskMuMu task
///
/// \author L. Aphecetche
///

//______________________________________________________________________________
void LoadLocalLibs(Bool_t localAnalysis=kTRUE)
{
  gSystem->Load("libVMC");
  gSystem->Load("libMinuit");
  gSystem->Load("libTree");
  gSystem->Load("libProofPlayer");
  gSystem->Load("libXMLParser");
  gSystem->Load("libSTEERBase");
  gSystem->Load("libESD");
  gSystem->Load("libAOD");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");

  if (!localAnalysis)
  {
    gSystem->Load("libCORRFW");
  }
  else
  {
  	gROOT->LoadMacro("AliOADBMuonTrackCutsParam.cxx+g");
  	gROOT->LoadMacro("AliAnalysisMuonUtility.cxx+g");
  	gROOT->LoadMacro("AliMuonTrackCuts.cxx+g");
  	gROOT->LoadMacro("AliMergeableCollection.cxx+g");
  	gROOT->LoadMacro("AliAnalysisMuMuBinning.cxx+g");
  	gROOT->LoadMacro("AliMuonEventCuts.cxx+g");
    
    gROOT->LoadMacro("AliAnalysisMuMuCutElement.cxx+g");
    gROOT->LoadMacro("AliAnalysisMuMuCutCombination.cxx+g");
    gROOT->LoadMacro("AliAnalysisMuMuCutRegistry.cxx+g");
    gROOT->LoadMacro("AliAnalysisMuMuEventCutter.cxx+g");
    gROOT->LoadMacro("AliAnalysisMuMuBase.cxx+g");

    gROOT->LoadMacro("AliAnalysisTaskMuMu.cxx+g");

    gROOT->LoadMacro("AliAnalysisMuMuGlobal.cxx+g");

    gROOT->LoadMacro("AliAnalysisMuMuMinv.cxx+g");
    gROOT->LoadMacro("AliAnalysisMuMuSingle.cxx+g");
    gROOT->LoadMacro("AliAnalysisMuMuNch.cxx+g");

  }
}

//______________________________________________________________________________
TChain* CreateLocalChain(const char* filelist)
{
	TChain* c = new TChain("aodTree");
	
	char line[1024];
	
	ifstream in(filelist);
	while ( in.getline(line,1024,'\n') )
	{
		c->Add(line);
	}
	return c;
}

//______________________________________________________________________________
TString GetInputType(const TString& sds, TProof* p)
{
   if (sds.Length()==0 ) return "AOD";

   if (sds.Contains("SIM_JPSI")) return "AOD";
   
   if (sds.Contains("AOD")) return "AOD";
   if (sds.Contains("ESD")) return "ESD";
   
   if ( gSystem->AccessPathName(gSystem->ExpandPathName(sds.Data())) )
   {
   	// dataset is not a local file so it must be a dataset name
   	if (!p) return "NOPROOF";
   	
   	TFileCollection* fc = p->GetDataSet(sds.Data());
    if (!fc) return "NODATASET";
    
    TIter next(fc->GetList());
    TFileInfo* fi;
    while ( ( fi = static_cast<TFileInfo*>(next()) ) )
    {
      TUrl url(*(fi->GetFirstUrl()));
	  TString surl(url.GetUrl());
	  
	  if (surl.Contains("AOD")) return "AOD";
	  if (surl.Contains("AliESD")) return "ESD";      
    }      

   }
   else
   {
   std::cout << "Will use datasets from file " << sds.Data() << std::endl;
   
   // dataset is a local text file containing a list of dataset names
   	std::ifstream in(sds.Data());
   	char line[1014];
   
   	while (in.getline(line,1023,'\n'))
   	{
    	  TString sline(line);
      	sline.ToUpper();
    	if ( sline.Contains("SIM_JPSI") ) return "AOD";
      	if ( sline.Contains("AOD") ) return "AOD";
      	if ( sline.Contains("ESD") ) return "ESD";
   	}
   }
   
   return "BUG";   
}

//______________________________________________________________________________
AliAnalysisTask* runMuMu(const char* dataset="SIM_JPSI_LHC13f_CynthiaTuneWithRejectList_000197388",
                         Bool_t simulations=kTRUE,
                         Bool_t baseline=kFALSE,
                         const char* where="laphecet@nansafmaster.in2p3.fr/?N")
{
  // Create the analysis manager
  
  Bool_t prooflite = (strlen(where)==0) || TString(where).Contains("workers");

  TString sds(dataset);
  
//  if (!prooflite && sds.Length()>0) TProof::Mgr(where)->SetROOTVersion("VO_ALICE@ROOT::v5-34-05");
  
  TProof* p(0x0);
  TString alirootMode("");
  TString workers("workers=8x");

  if (TString(where).Contains("alice-caf"))
  {
    workers="workers=1x";
  }
  if (TString(where).Contains("localhost:2093"))
  {
    workers="workers=8x";
  }
  
  if (prooflite)
  {
    cout << "Will work in LITE mode" << endl;
  }
  
  if ( sds.Length()>0 )
  {
    p = TProof::Open(where,workers.Data());
    
    if (!p)
    {
      cout << "Cannot connect to Proof : " << where << endl;
      return 0;
    }
    
    alirootMode.ToUpper();
    
    if ( alirootMode == "PAR" ) 
    {
      cout << "Will work with PAR files" << endl;
      
      std::vector<std::string> pars;
      
      pars.push_back("STEERBase");
      pars.push_back("ESD");
      pars.push_back("AOD");
      pars.push_back("ANALYSIS");
      pars.push_back("OADB");
      pars.push_back("ANALYSISalice");
      //       pars.push_back("CORRFW");
      //       pars.push_back("PWGmuon");
      
      Bool_t ok(kTRUE);
      
      for ( std::vector<std::string>::size_type i = 0; i < pars.size(); ++i )
      {
        std::string package = pars[i];
        
        if ( gProof->UploadPackage(package.c_str()) ) 
        {
          ok = kFALSE;
        }
        
        if ( gProof->EnablePackage(package.c_str(),"",kTRUE) ) 
        {
          ok = kFALSE;
        }
        
        if (!ok) 
        {
          cout << "Problem with PAR " << package.c_str() << endl;
          return 0;           
        }
      }
    }
    else 
    {
      TList* list = new TList();
      
      //       list->Add(new TNamed("ALIROOT_EXTRA_LIBS", "PWG3base"));
      //       list->Add(new TNamed("ALIROOT_EXTRA_INCLUDES", "PWG3"));
      //       list->Add(new TNamed("ALIROOT_EXTRA_LIBS", "PWG3base"));//:CORRFW:PWG3muon"));
      //       list->Add(new TNamed("ALIROOT_EXTRA_INCLUDES", "PWG3/base"));//:PWG3/muon"));
      
      //    list->Add(new TNamed("ALIROOT_ENABLE_ALIEN", "1"));
      
      if (!alirootMode.IsNull())
      {
        list->Add(new TNamed("ALIROOT_MODE", alirootMode.Data()));  
      }
      else
      {
        list->Add(new TNamed("ALIROOT_MODE",""));
      }
      
      if (!prooflite)
      {
//        p->SetParameter("PROOF_UseTreeCache", 0);
        p->EnablePackage("VO_ALICE@AliRoot::v5-04-65-AN", list, kTRUE);
      }
      else
      {
        //      list->Add(new TNamed("ALIROOT_LOCAL_PATH",gSystem->Getenv("ALICE_ROOT")));       
        p->UploadPackage("$ALICE_ROOT/ANALYSIS/macros/AliRootProofLite.par");
        if (p->EnablePackage("AliRootProofLite",list)) return 0;
      }
    }
    
    // compile task on workers
    if ( alirootMode != "PAR" )
    {
      p->Load("AliOADBMuonTrackCutsParam.cxx+");
      p->Load("AliAnalysisMuonUtility.cxx+");
      p->Load("AliMuonTrackCuts.cxx+");
      p->Load("AliMergeableCollection.cxx+");
      p->Load("AliAnalysisMuMuBinning.cxx+");
      p->Load("AliMuonEventCuts.cxx+");
       p->Load("AliAnalysisMuMuCutElement.cxx+");
       p->Load("AliAnalysisMuMuCutCombination.cxx+");       
       p->Load("AliAnalysisMuMuCutRegistry.cxx+");
      p->Load("AliAnalysisMuMuBase.cxx+");      
      p->Load("AliAnalysisTaskMuMu.cxx+");
       p->Load("AliAnalysisMuMuEventCutter.cxx+");       
     p->Load("AliAnalysisMuMuGlobal.cxx+");
     p->Load("AliAnalysisMuMuNch.cxx+");
     p->Load("AliAnalysisMuMuSingle.cxx+");
     p->Load("AliAnalysisMuMuMinv.cxx+");
	}
  }
  
  LoadLocalLibs(kTRUE);
  
  AliAnalysisManager *mgr = new AliAnalysisManager("MuMu");
  
  AliInputEventHandler* input(0x0);

  TString inputType = GetInputType(sds,p);
  
  if ( inputType == "AOD" ) 
  {
    input = new AliAODInputHandler;
  }
  else if ( inputType == "ESD" ) 
  {
    input = new AliESDInputHandler;
  }
  else
  {
  	std::cout << "Cannot get input type !" << std::endl;
  	return 0;
  }

  mgr->SetInputEventHandler(input);
  
  TList* triggers = new TList;
  triggers->SetOwner(kTRUE);

  if (!simulations)
  {
    triggers->Add(new TObjString("CINT7-B-NOPF-ALLNOTRD"));

//   triggers->Add(new TObjString("CINT7-B-NOPF-ALLNOTRD & 0MUL"));
//   triggers->Add(new TObjString("CINT7-B-NOPF-ALLNOTRD & 0MSL"));
//   triggers->Add(new TObjString("CINT7-B-NOPF-ALLNOTRD & 0MSH"));
//   triggers->Add(new TObjString("CMSL7-B-NOPF-MUON & 0MUL"));
//   triggers->Add(new TObjString("CMSL7-B-NOPF-MUON & 0MSH"));
// 
//   triggers->Add(new TObjString("CMSL7-B-NOPF-MUON"));
//   triggers->Add(new TObjString("CMSH7-B-NOPF-MUON"));
//    triggers->Add(new TObjString("CMUL7-B-NOPF-MUON"));
 
  // below for MB periods only
//  triggers->Add(new TObjString("CMSL7-B-NOPF-ALLNOTRD"));
//   triggers->Add(new TObjString("CMSH7-B-NOPF-ALLNOTRD"));
  triggers->Add(new TObjString("CMUL7-B-NOPF-ALLNOTRD"));
  triggers->Add(new TObjString("CMUL7-B-NOPF-MUON"));
//   triggers->Add(new TObjString("CMSL7-B-NOPF-ALLNOTRD & 0MUL"));
//   triggers->Add(new TObjString("CMSL7-B-NOPF-ALLNOTRD & 0MSH"));
  }

  TString outputname("test.MuMu.AOD.1.root");
  
  if ( sds.Length()>0 ) 
  {
  	TString af("local");
  	
  	if ( gProof )
  	{
  	  af="unknown";
  	  TString master(gProof->GetSessionTag());
      if (master.Contains("lx")) af = "caf";
      if (master.Contains("nansaf")) af = "saf";
      if (master.Contains("skaf")) af = "skaf";
      if (master.Contains("localhost:2093")) af="laf";
  	}
  	outputname = Form("%s.%s.root",gSystem->BaseName(sds.Data()),af.Data());
    outputname.ReplaceAll("|","-");
  	cout << outputname << endl;
  }

  AliAnalysisTask* task(0x0);

  if (!baseline)
  {  
  	gROOT->LoadMacro("AddTaskMuMu.C");

  	task = AddTaskMuMu(outputname.Data(),triggers,"pA",simulations);
  }
  else
  {
  	gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/train/AddTaskBaseLine.C");
  	task = AddTaskBaseLine();
  }
  
  if (!mgr->InitAnalysis()) 
  {
  	cout << "Could not InitAnalysis" << endl;
    return 0;
  }
  
  if ( sds.Length()>0 )
  {
    TStopwatch timer;
    
    mgr->StartAnalysis("proof",sds.Data());
    
    timer.Print();
  }
  else
  {
    mgr->PrintStatus();
  
   	task->Print();
	
//	return task;
	
    TChain* c = CreateLocalChain("list.aod.txt");
//   	mgr->SetNSysInfo(10);
    TStopwatch timer;
//    mgr->SetDebugLevel(10);
    mgr->StartAnalysis("local",c);
    timer.Print();
//    mgr->ProfileTask("AliAnalysisTaskMuMu");
//    if (baseline) mgr->ProfileTask("baseline");
  }
  
  AliCodeTimer::Instance()->Print();
  
  if (alirootMode=="PAR")
  {
    TProofLog *pl = TProof::Mgr(where)->GetSessionLogs(); pl->Save("*","aod.log");
  }
  
  delete triggers;
  
  return task;
}

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