-AliAnalysisTaskSingleMu *AddTaskSingleMuonAnalysis(){
+#if !defined(__CINT__) || defined(__MAKECINT__)
+#include "TString.h"
+#include "TList.h"
+
+#include "AliLog.h"
+#include "AliVEventHandler.h"
+
+#include "AliAnalysisManager.h"
+#include "AliAnalysisDataContainer.h"
+
+#include "AliCFContainer.h"
+
+#include "AliAnalysisTaskSingleMu.h"
+#endif
+
+AliAnalysisTaskSingleMu* AddTaskSingleMuonAnalysis(Bool_t applyPhysicsSelection=kTRUE, Int_t fillNtupleScaleDown=0, Bool_t keepAll=kFALSE){
// Get the pointer to the existing analysis manager via the static access method.
//==============================================================================
+
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
if (!mgr) {
::Error("AddtaskSingleMuonAnalysis", "No analysis manager to connect to.");
return NULL;
}
-
+
+ // This task requires an ESD or AOD output handler.
// Check this using the analysis manager.
//===============================================================================
TString type = mgr->GetInputEventHandler()->GetDataType();
- if (!type.Contains("ESD")) {
- ::Error("AddTaskSingleMuonAnalysis", "ESD filtering task needs the manager to have an ESD input handler.");
- return NULL;
- }
+ if (!type.Contains("ESD") && !type.Contains("AOD")) {
+ ::Error("AddtaskSingleMuonAnalysis", "SingleMuon task needs the manager to have an ESD or AOD input handler.");
+ return NULL;
+ }
+
+ TString currName = "";
+ TString outputfile = mgr->GetCommonFileName();
+ if ( ! outputfile.IsNull() ) {
+ currName = ( applyPhysicsSelection ) ? ":PWG3_muon_SingleMu" : ":PWG3_muon_SingleMu_NoPS";
+ outputfile += currName;
+ }
+ else outputfile = "singleMuonAnalysis.root";
+
+ currName = ( applyPhysicsSelection ) ? "SingleMuonContainer" : "SingleMuonContainerNoPS";
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(currName.Data(),AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile);
-// // Check if MC handler is connected in case kine filter requested
+ currName = ( applyPhysicsSelection ) ? "SingleMuon" : "SingleMuonNoPS";
+ AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(currName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
- AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
- if (!mcH) {
- ::Error("AddTaskSingleMuonAnalysis", "No MC handler connected");
- return NULL;
- }
+ currName = ( applyPhysicsSelection ) ? "SingleMuonQA" : "SingleMuonQANoPS";
+ AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(currName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
- TString outputfile = AliAnalysisManager::GetCommonFileName();
- outputfile += ":PWG3Muon_SingleMuon";
+ currName = ( applyPhysicsSelection ) ? "SingleMuonMC" : "SingleMuonMCNoPS";
+ AliAnalysisDataContainer *coutput4 = mgr->CreateContainer(currName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
- AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("SingleMuon",TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
+ AliAnalysisDataContainer *coutput5 = 0x0;
+ if ( fillNtupleScaleDown > 0 ) {
+ currName = ( applyPhysicsSelection ) ? "SingleMuonNtuple" : "SingleMuonNtupleNoPS";
+ coutput5 = mgr->CreateContainer(currName.Data(),TTree::Class(),AliAnalysisManager::kOutputContainer,outputfile);
+ //coutput5 = mgr->CreateContainer(currName.Data(),TTree::Class(),AliAnalysisManager::kOutputContainer,"SingleMuNtuple.root");
+ coutput5->SetSpecialOutput();
+ }
- // Create the task, add it to the manager and configure it.
- //===========================================================================
- // Barrel tracks filter
- AliAnalysisTaskSingleMu *SingleMuonAnalysisTask = new AliAnalysisTaskSingleMu("Single Muon Analysis Task");
- mgr->AddTask(SingleMuonAnalysisTask);
+
+ // Create the task, add it to the manager and configure it.
+ //===========================================================================
+ TString taskName = ( applyPhysicsSelection ) ? "SingleMuonAnalysisTask" : "SingleMuonAnalysisTaskNoPS";
+ AliAnalysisTaskSingleMu *singleMuonAnalysisTask = new AliAnalysisTaskSingleMu(taskName.Data(), fillNtupleScaleDown, keepAll);
+ mgr->AddTask(singleMuonAnalysisTask);
+ if ( applyPhysicsSelection )
+ singleMuonAnalysisTask->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kMUON);
// Create ONLY the output containers for the data produced by the task.
// Get and connect other common input/output containers via the manager as below
//==============================================================================
- mgr->ConnectInput (SingleMuonAnalysisTask, 0, mgr->GetCommonInputContainer());
- mgr->ConnectOutput (SingleMuonAnalysisTask, 1, coutput1);
+
+ mgr->ConnectInput (singleMuonAnalysisTask, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectOutput (singleMuonAnalysisTask, 1, coutput1);
+ mgr->ConnectOutput (singleMuonAnalysisTask, 2, coutput2);
+ mgr->ConnectOutput (singleMuonAnalysisTask, 3, coutput3);
+ mgr->ConnectOutput (singleMuonAnalysisTask, 4, coutput4);
+
+ if ( coutput5 )
+ mgr->ConnectOutput (singleMuonAnalysisTask, 5, coutput5);
- return SingleMuonAnalysisTask;
-}
+ return singleMuonAnalysisTask;
+}