ROOT logo
//--------------------------------------------------------------------------
// Base macro for submitting muon Resolution analysis.
//
// In case it is not run with full aliroot, it needs the following libraries:
//  - libSTEERBase.so
//  - libESD.so
//  - libAOD.so
//  - libANALYSIS.so
//  - libANALYSISalice.so
//  - libGui.so
//  - libMinuit.so
//  - libProofPlayer.so
//  - libXMLParser.so
//  - libRAWDatabase.so
//  - libCDB.so
//  - libSTEER.so
//  - libMUONcore.so
//  - libMUONmapping.so
//  - libMUONcalib.so
//  - libMUONgeometry.so
//  - libMUONtrigger.so
//  - libMUONraw.so
//  - libMUONbase.so
//  - libMUONrec.so
//  - libCORRFW.so
//  - libPWGHFbase.so
//  - libPWGmuondep.so
//
// It also needs to load magnetic field, mapping, geometry (+alignment), and reconstruction parameters from the OCDB
//
// The task reads ESDs
// Intermediate results are stored in a file chamberResolution_step<#step>.root
// Final results are stored in the file results.root
//
// Author: Philippe Pillot - SUBATECH Nantes
//--------------------------------------------------------------------------

void LoadAlirootLocally(TString& extraLibs);

//______________________________________________________________________________
void RunMuonResolution(TString smode = "local", TString inputFileName = "AliESDs.root",
		       TString rootVersion = "v5-34-01-1", TString alirootVersion = "v5-03-57-AN", Int_t nSteps = 5,
		       Bool_t selectPhysics = kFALSE, Bool_t selectTrigger = kFALSE, Bool_t matchTrig = kTRUE,
		       Bool_t applyAccCut = kTRUE, Double_t minMomentum = 0., Bool_t correctForSystematics = kTRUE,
		       Int_t extrapMode = 1, Bool_t shiftHalfCh = kFALSE, Bool_t shiftDE = kFALSE, Int_t nevents = 1234567890)
{
  /// Compute the cluster resolution by studying cluster-track residual, deconvoluting from track resolution
  /// - smode = "local" or "proof"
  /// - inputFileName = an ESD root file or a list of ESDs or a collection of ESDs or a dataset in proof mode
  /// - rootVersion = version of root package to enable on AAF (only used in proof mode)
  /// - alirootVersion = version of aliroot package to enable on AAF (only used in proof mode)
  /// - nSteps = number of times to task is run (at each step it starts with the chamber resolution obtained in the previous one)
  /// - selectPhysics : apply or not the physics selection
  /// - selectTrigger : select only muon trigger events or not (the type of trigger can eventually be changed)
  /// - matchTrigger : select only the tracks matching the trigger or not
  /// - applyAccCut : select only the tracks passing the Rabs and the eta cut or not
  /// - minMomentum : select only the tracks with a total momentum above this value
  /// - if correctForSystematics == kTRUE: the systematic shifts of the residuals is included in the resolution
  /// - if extrapMode == 0: extrapolate from the closest cluster
  /// - if extrapMode == 1: extrapolate from the previous cluster except between stations 2-3-4
  /// - nevents = maximum number of processed events
  
  // Load libraries locally
  TString extraLibs = "RAWDatabase:CDB:STEER:MUONcore:MUONmapping:MUONcalib:MUONgeometry:MUONtrigger:MUONraw:MUONbase:MUONrec:CORRFW:PWGmuon:PWGPPMUONdep";
  LoadAlirootLocally(extraLibs);
  
  // compile analysis macro locally
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/MUON/dep/MuonResolution.C++g");
  MuonResolution(smode, inputFileName, rootVersion, alirootVersion, nSteps, selectPhysics, selectTrigger, matchTrig,
		 applyAccCut, minMomentum, correctForSystematics, extrapMode, shiftHalfCh, shiftDE, nevents, extraLibs);
  
}

//______________________________________________________________________________
void LoadAlirootLocally(TString& extraLibs)
{
  /// Load libraries locally
  
  // Load common libraries
  gSystem->Load("libVMC");
  gSystem->Load("libTree.so");
  gSystem->Load("libPhysics.so");
  gSystem->Load("libMinuit.so");
  gSystem->Load("libXMLParser.so");
  gSystem->Load("libGui.so");
  gSystem->Load("libSTEERBase");
  gSystem->Load("libESD");
  gSystem->Load("libAOD");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  
  // Load additional libraries
  gSystem->Load("libProofPlayer");
  TObjArray* libs = extraLibs.Tokenize(":");
  for (Int_t i = 0; i < libs->GetEntriesFast(); i++)
    gSystem->Load(Form("lib%s",static_cast<TObjString*>(libs->UncheckedAt(i))->GetName()));
  delete libs;
  
  // Load lib for final mchview display
  gSystem->Load("libMUONgraphics");
  
  // Add AliRoot includes to compile the macro
  gROOT->ProcessLine(".include $ALICE_ROOT/include");
  gROOT->ProcessLine(".include $ALICE_ROOT/MUON");
  gROOT->ProcessLine(".include $ALICE_ROOT/MUON/mapping");
  gROOT->ProcessLine(".include $ALICE_ROOT/PWG/muon");
  gROOT->ProcessLine(".include $ALICE_ROOT/ANALYSIS/macros");
  
}

 RunMuonResolution.C:1
 RunMuonResolution.C:2
 RunMuonResolution.C:3
 RunMuonResolution.C:4
 RunMuonResolution.C:5
 RunMuonResolution.C:6
 RunMuonResolution.C:7
 RunMuonResolution.C:8
 RunMuonResolution.C:9
 RunMuonResolution.C:10
 RunMuonResolution.C:11
 RunMuonResolution.C:12
 RunMuonResolution.C:13
 RunMuonResolution.C:14
 RunMuonResolution.C:15
 RunMuonResolution.C:16
 RunMuonResolution.C:17
 RunMuonResolution.C:18
 RunMuonResolution.C:19
 RunMuonResolution.C:20
 RunMuonResolution.C:21
 RunMuonResolution.C:22
 RunMuonResolution.C:23
 RunMuonResolution.C:24
 RunMuonResolution.C:25
 RunMuonResolution.C:26
 RunMuonResolution.C:27
 RunMuonResolution.C:28
 RunMuonResolution.C:29
 RunMuonResolution.C:30
 RunMuonResolution.C:31
 RunMuonResolution.C:32
 RunMuonResolution.C:33
 RunMuonResolution.C:34
 RunMuonResolution.C:35
 RunMuonResolution.C:36
 RunMuonResolution.C:37
 RunMuonResolution.C:38
 RunMuonResolution.C:39
 RunMuonResolution.C:40
 RunMuonResolution.C:41
 RunMuonResolution.C:42
 RunMuonResolution.C:43
 RunMuonResolution.C:44
 RunMuonResolution.C:45
 RunMuonResolution.C:46
 RunMuonResolution.C:47
 RunMuonResolution.C:48
 RunMuonResolution.C:49
 RunMuonResolution.C:50
 RunMuonResolution.C:51
 RunMuonResolution.C:52
 RunMuonResolution.C:53
 RunMuonResolution.C:54
 RunMuonResolution.C:55
 RunMuonResolution.C:56
 RunMuonResolution.C:57
 RunMuonResolution.C:58
 RunMuonResolution.C:59
 RunMuonResolution.C:60
 RunMuonResolution.C:61
 RunMuonResolution.C:62
 RunMuonResolution.C:63
 RunMuonResolution.C:64
 RunMuonResolution.C:65
 RunMuonResolution.C:66
 RunMuonResolution.C:67
 RunMuonResolution.C:68
 RunMuonResolution.C:69
 RunMuonResolution.C:70
 RunMuonResolution.C:71
 RunMuonResolution.C:72
 RunMuonResolution.C:73
 RunMuonResolution.C:74
 RunMuonResolution.C:75
 RunMuonResolution.C:76
 RunMuonResolution.C:77
 RunMuonResolution.C:78
 RunMuonResolution.C:79
 RunMuonResolution.C:80
 RunMuonResolution.C:81
 RunMuonResolution.C:82
 RunMuonResolution.C:83
 RunMuonResolution.C:84
 RunMuonResolution.C:85
 RunMuonResolution.C:86
 RunMuonResolution.C:87
 RunMuonResolution.C:88
 RunMuonResolution.C:89
 RunMuonResolution.C:90
 RunMuonResolution.C:91
 RunMuonResolution.C:92
 RunMuonResolution.C:93
 RunMuonResolution.C:94
 RunMuonResolution.C:95
 RunMuonResolution.C:96
 RunMuonResolution.C:97
 RunMuonResolution.C:98
 RunMuonResolution.C:99
 RunMuonResolution.C:100
 RunMuonResolution.C:101
 RunMuonResolution.C:102
 RunMuonResolution.C:103
 RunMuonResolution.C:104
 RunMuonResolution.C:105
 RunMuonResolution.C:106
 RunMuonResolution.C:107
 RunMuonResolution.C:108
 RunMuonResolution.C:109
 RunMuonResolution.C:110
 RunMuonResolution.C:111