1 #if !defined(__CINT__) || defined(__MAKECINT__)
6 #include "AliVEventHandler.h"
8 #include "AliAnalysisManager.h"
9 #include "AliAnalysisDataContainer.h"
11 #include "AliCFContainer.h"
13 #include "AliAnalysisTaskSingleMu.h"
16 AliAnalysisTaskSingleMu* AddTaskSingleMuonAnalysis(Bool_t applyPhysicsSelection=kTRUE, Int_t fillNtupleScaleDown=0, Bool_t keepAll=kFALSE, Bool_t separateSpecialOut=kFALSE){
18 // Get the pointer to the existing analysis manager via the static access method.
19 //==============================================================================
21 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
23 ::Error("AddtaskSingleMuonAnalysis", "No analysis manager to connect to.");
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.");
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;
42 else outputfile = "singleMuonAnalysis.root";
44 currName = ( applyPhysicsSelection ) ? "SingleMuonContainer" : "SingleMuonContainerNoPS";
45 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(currName.Data(),AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile);
47 currName = ( applyPhysicsSelection ) ? "SingleMuon" : "SingleMuonNoPS";
48 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(currName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
50 currName = ( applyPhysicsSelection ) ? "SingleMuonQA" : "SingleMuonQANoPS";
51 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(currName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
53 currName = ( applyPhysicsSelection ) ? "SingleMuonMC" : "SingleMuonMCNoPS";
54 AliAnalysisDataContainer *coutput4 = mgr->CreateContainer(currName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
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();
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);
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 //==============================================================================
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);
84 mgr->ConnectOutput (singleMuonAnalysisTask, 5, coutput5);
86 return singleMuonAnalysisTask;