c30df2711b88213fe4a0c3f13860ec2fbe8509ce
[u/mrichter/AliRoot.git] / PWG / muon / AddTaskSingleMuonAnalysis.C
1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 #include "TString.h"
3 #include "TList.h"
4
5 #include "AliLog.h"
6 #include "AliVEventHandler.h"
7
8 #include "AliAnalysisManager.h"
9 #include "AliAnalysisDataContainer.h"
10
11 #include "AliCFContainer.h"
12
13 #include "AliAnalysisTaskSingleMu.h"
14 #endif
15
16 AliAnalysisTaskSingleMu* AddTaskSingleMuonAnalysis(Bool_t applyPhysicsSelection=kTRUE, Int_t fillNtupleScaleDown=0, Bool_t keepAll=kFALSE, Bool_t separateSpecialOut=kFALSE){
17
18    // Get the pointer to the existing analysis manager via the static access method.
19    //==============================================================================
20    
21    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
22    if (!mgr) {
23       ::Error("AddtaskSingleMuonAnalysis", "No analysis manager to connect to.");
24       return NULL;
25    }   
26
27    // This task requires an ESD or AOD output handler.
28    // Check this using the analysis manager.
29    //===============================================================================
30    TString type = mgr->GetInputEventHandler()->GetDataType();
31    if (!type.Contains("ESD") && !type.Contains("AOD")) {
32      ::Error("AddtaskSingleMuonAnalysis", "SingleMuon task needs the manager to have an ESD or AOD input handler.");
33      return NULL;
34    }
35
36    TString currName = "";
37    TString outputfile = mgr->GetCommonFileName();
38    if ( ! outputfile.IsNull() ) {
39      currName = ( applyPhysicsSelection ) ? ":PWG3_muon_SingleMu" : ":PWG3_muon_SingleMu_NoPS";
40      outputfile += currName;
41    }
42    else outputfile = "singleMuonAnalysis.root";
43
44    currName = ( applyPhysicsSelection ) ? "SingleMuonContainer" : "SingleMuonContainerNoPS";
45    AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(currName.Data(),AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile);
46
47    currName = ( applyPhysicsSelection ) ? "SingleMuon" : "SingleMuonNoPS";
48    AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(currName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
49
50    currName = ( applyPhysicsSelection ) ? "SingleMuonQA" : "SingleMuonQANoPS";
51    AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(currName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
52
53    currName = ( applyPhysicsSelection ) ? "SingleMuonMC" : "SingleMuonMCNoPS";
54    AliAnalysisDataContainer *coutput4 = mgr->CreateContainer(currName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
55
56    AliAnalysisDataContainer *coutput5 = 0x0;
57    if ( fillNtupleScaleDown > 0 ) {
58      currName = ( applyPhysicsSelection ) ? "SingleMuonNtuple" : "SingleMuonNtupleNoPS";
59      TString specialOutFilename = separateSpecialOut ? currName + ".root" : outputfile;
60      coutput5 = mgr->CreateContainer(currName.Data(),TTree::Class(),AliAnalysisManager::kOutputContainer,specialOutFilename);
61      coutput5->SetSpecialOutput();
62    }
63
64
65    // Create the task, add it to the manager and configure it.
66    //===========================================================================
67    TString taskName =  ( applyPhysicsSelection ) ? "SingleMuonAnalysisTask" : "SingleMuonAnalysisTaskNoPS";
68    AliAnalysisTaskSingleMu *singleMuonAnalysisTask = new AliAnalysisTaskSingleMu(taskName.Data(), fillNtupleScaleDown, keepAll);
69    mgr->AddTask(singleMuonAnalysisTask);
70    if ( applyPhysicsSelection ) 
71      singleMuonAnalysisTask->SelectCollisionCandidates(AliVEvent::kAny);
72    
73    // Create ONLY the output containers for the data produced by the task.
74    // Get and connect other common input/output containers via the manager as below
75    //==============================================================================
76    
77    mgr->ConnectInput  (singleMuonAnalysisTask,  0, mgr->GetCommonInputContainer());
78    mgr->ConnectOutput (singleMuonAnalysisTask,  1, coutput1);
79    mgr->ConnectOutput (singleMuonAnalysisTask,  2, coutput2);
80    mgr->ConnectOutput (singleMuonAnalysisTask,  3, coutput3);
81    mgr->ConnectOutput (singleMuonAnalysisTask,  4, coutput4);
82
83    if ( coutput5 )
84      mgr->ConnectOutput (singleMuonAnalysisTask,  5, coutput5);
85
86    return singleMuonAnalysisTask;
87 }