-AliAnalysisTaskESDMCLabelAddition *AddTaskESDMCLabelAddition(Bool_t useKineFilter=kTRUE)
+AliAnalysisTaskESDMCLabelAddition *AddTaskESDMCLabelAddition()
{
-// Creates a filter task and adds it to the analysis manager.
-// This file allows the creation of MC labels (based on the code of Philippe P.)
+ /// Add AliAnalysisTaskESDMCLabelAddition to the train (Philippe Pillot)
+
+ // Get the pointer to the existing analysis manager via the static access method.
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if(!mgr) {
+ Error("AddTaskESDMCLabelAddition","AliAnalysisManager not set!");
+ return NULL;
+ }
+
+ // This task runs on ESDs
+ TString type = mgr->GetInputEventHandler()->GetDataType();
+ if (!type.Contains("ESD")) {
+ Error("AddTaskESDMCLabelAddition", "ESD input handler needed!");
+ return NULL;
+ }
+
+ // This task needs MC input
+ AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
+ if (!mcH) {
+ Error("AddTaskESDMCLabelAddition", "No MC handler connected!");
+ return NULL;
+ }
+
+ // Create and configure task
+ AliAnalysisTaskESDMCLabelAddition *task = new AliAnalysisTaskESDMCLabelAddition("ESD MC Labels addition");
+ if (!task) {
+ Error("AddTaskESDMCLabelAddition", "MClabel addition task cannot be created!");
+ return NULL;
+ }
+
+ // Add task to analysis manager
+ mgr->AddTask(task);
+
+ // Connect input container
+ mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
+
+ return task;
+
+}
- // Get the pointer to the existing analysis manager via the static access method.
- //==============================================================================
- AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
- if (!mgr) {
- ::Error("AddTaskESDMCLabelAddition", "No analysis manager to connect to.");
- return NULL;
- }
-
- TString type = mgr->GetInputEventHandler()->GetDataType();
- // Check if MC handler is connected in case kine filter requested
- AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
- if (!mcH && useKineFilter) {
- ::Error("AddTaskESDFilter", "No MC handler connected while kine filtering requested");
- return NULL;
- }
-
- if (useKineFilter) {
- AliAnalysisTaskMCParticleFilter *kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Kine Filter");
- mgr->AddTask(kinefilter);
- }
-
-
- // Create the task, add it to the manager and configure it.
- //===========================================================================
- // Barrel tracks filter
- AliAnalysisTaskESDMCLabelAddition *ESDMCLabeltask = new AliAnalysisTaskESDMCLabelAddition("ESD MC Labels addition");
- mgr->AddTask(ESDMCLabeltask);
-
- // 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 (ESDMCLabeltask, 0, mgr->GetCommonInputContainer());
-
- return ESDMCLabeltask;
-}
/* $Id$ */
-#include <TChain.h>
-#include <TFile.h>
-#include <TParticle.h>
-
-#include "AliAnalysisTaskESDMCLabelAddition.h"
-#include "AliAnalysisManager.h"
+// STEER includes
#include "AliESDEvent.h"
-#include "AliAODEvent.h"
-#include "AliESDInputHandler.h"
-#include "AliAODHandler.h"
-#include "AliAnalysisFilter.h"
-#include "AliESDtrack.h"
#include "AliESDMuonTrack.h"
-#include "AliESDMuonCluster.h"
-#include "AliESDVertex.h"
-#include "AliMultiplicity.h"
#include "AliLog.h"
-#include "AliStack.h"
-#include "AliMCEvent.h"
#include "AliMCEventHandler.h"
-#include "AliAODMCParticle.h"
+#include "AliGeomManager.h"
+#include "AliCDBManager.h"
+
+// ANALYSIS includes
+#include "AliAnalysisManager.h"
+// MUON includes
+#include "AliMUONCDB.h"
+#include "AliMUONRecoParam.h"
#include "AliMUONRecoCheck.h"
#include "AliMUONESDInterface.h"
#include "AliMUONTrack.h"
-#include "AliMUONTrackParam.h"
#include "AliMUONVTrackStore.h"
-#include "AliMUONVCluster.h"
-#include "AliMUONVClusterStore.h"
+#include "AliMUONTriggerTrack.h"
+#include "AliMUONVTriggerTrackStore.h"
+#include "AliMUONLocalTrigger.h"
-ClassImp(AliAnalysisTaskESDMCLabelAddition)
+#include "AliAnalysisTaskESDMCLabelAddition.h"
-// sigma cut applied to match a reconstructed cluster with a trackref
-const Double_t AliAnalysisTaskESDMCLabelAddition::fgkSigmaCut = 10.;
+ClassImp(AliAnalysisTaskESDMCLabelAddition)
//----------------------------------------------------------------------
AliAnalysisTaskESDMCLabelAddition::AliAnalysisTaskESDMCLabelAddition():
- AliAnalysisTaskSE()
+AliAnalysisTaskSE(),
+fDefaultStorage(""),
+fSigmaCut(-1.),
+fSigmaCutTrig(-1.)
{
- // Default constructor
+ /// Default constructor
}
//----------------------------------------------------------------------
AliAnalysisTaskESDMCLabelAddition::AliAnalysisTaskESDMCLabelAddition(const char* name):
- AliAnalysisTaskSE(name)
+AliAnalysisTaskSE(name),
+fDefaultStorage("raw://"),
+fSigmaCut(-1.),
+fSigmaCutTrig(-1.)
{
- // Constructor
+ /// Constructor
}
//----------------------------------------------------------------------
void AliAnalysisTaskESDMCLabelAddition::UserCreateOutputObjects()
{
+ /// Create output objects
}
//----------------------------------------------------------------------
-void AliAnalysisTaskESDMCLabelAddition::Init()
+void AliAnalysisTaskESDMCLabelAddition::NotifyRun()
{
- AliDebug(2, "Init()");
+ /// Load OCDB inputs
+
+ // set OCDB location
+ AliCDBManager* cdbm = AliCDBManager::Instance();
+ cdbm->SetDefaultStorage(fDefaultStorage.Data());
+ cdbm->SetRun(fCurrentRunNumber);
+
+ // load mapping
+ if (!AliMUONCDB::LoadMapping()) return;
+
+ // load geometry
+ if (!AliGeomManager::GetGeometry()) AliGeomManager::LoadGeometry();
+ if (!AliGeomManager::GetGeometry()) return;
+
+ // load recoParam
+ AliMUONRecoParam* recoParam = AliMUONCDB::LoadRecoParam();
+ if (!recoParam) {
+ fSigmaCut = -1.;
+ fSigmaCutTrig = -1.;
+ return;
+ }
+
+ // get sigma cut from recoParam to associate clusters with TrackRefs in case the labels are not used
+ fSigmaCut = (recoParam->ImproveTracks()) ? recoParam->GetSigmaCutForImprovement() : recoParam->GetSigmaCutForTracking();
+
+ // get sigma cut from recoParam to associate trigger track to triggerable track
+ fSigmaCutTrig = recoParam->GetSigmaCutForTrigger();
+
}
//----------------------------------------------------------------------
void AliAnalysisTaskESDMCLabelAddition::UserExec(Option_t */*option*/)
{
- // Execute analysis for current event
- Long64_t ientry = Entry();
- AliDebug(1, Form("MCLabel Addition: Analysing event # %5d\n",(Int_t) ientry));
- AddMCLabel();
-}
-
-
-//----------------------------------------------------------------------
-void AliAnalysisTaskESDMCLabelAddition::AddMCLabel()
-{
- // Load ESD event
+ /// Execute analysis for current event
+
+ AliDebug(1, Form("MCLabel Addition: Analysing event # %5d\n",(Int_t) Entry()));
+
+ // make sure necessary information from PCDB have been loaded
+ if (fSigmaCut < 0) return;
+
+ /// Load ESD event
AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
if (!esd) {
AliError("Cannot get input event");
}
// Load MC event
- AliMCEventHandler *mcH = 0;
- if(MCEvent()) mcH = (AliMCEventHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
+ AliMCEventHandler* mcH = static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
+ if ( ! mcH ) {
+ AliError ("MCH event handler not found. Nothing done!");
+ return;
+ }
+
// Get reference tracks
AliMUONRecoCheck rc(esd,mcH);
AliMUONVTrackStore* trackRefStore = rc.TrackRefs(-1);
+ AliMUONVTriggerTrackStore* triggerTrackRefStore = rc.TriggerableTracks(-1);
// Loop over reconstructed tracks
AliESDMuonTrack *esdTrack = 0x0;
esdTrack = esd->GetMuonTrack(nMuTrack);
- // skip ghosts
- if (!esdTrack->ContainTrackerData()) continue;
-
- // convert ESD track to MUON track (without recomputing track parameters at each clusters)
- AliMUONTrack muonTrack;
- AliMUONESDInterface::ESDToMUON(*esdTrack, muonTrack, kFALSE);
-
- // try to match the reconstructed track with a simulated one
- Int_t nMatchClusters = 0;
- AliMUONTrack* matchedTrackRef = rc.FindCompatibleTrack(muonTrack, *trackRefStore, nMatchClusters, kFALSE, fgkSigmaCut);
-
- // set the MC label
- if (matchedTrackRef) esdTrack->SetLabel(matchedTrackRef->GetUniqueID());
- else esdTrack->SetLabel(-1);
+ // tracker tracks
+ if (esdTrack->ContainTrackerData()) {
+
+ // convert ESD track to MUON track (without recomputing track parameters at each clusters)
+ AliMUONTrack muonTrack;
+ AliMUONESDInterface::ESDToMUON(*esdTrack, muonTrack, kFALSE);
+
+ // try to match the reconstructed track with a simulated one
+ Int_t nMatchClusters = 0;
+ AliMUONTrack* matchedTrackRef = rc.FindCompatibleTrack(muonTrack, *trackRefStore, nMatchClusters, kFALSE, fSigmaCut);
+
+ // set the MC label
+ if (matchedTrackRef) esdTrack->SetLabel(matchedTrackRef->GetUniqueID());
+ else esdTrack->SetLabel(-1);
+
+ } else { // ghosts
+
+ // Convert ESD track to trigger track
+ AliMUONLocalTrigger locTrg;
+ AliMUONESDInterface::ESDToMUON(*esdTrack, locTrg);
+ AliMUONTriggerTrack trigTrack;
+ rc.TriggerToTrack(locTrg, trigTrack);
+
+ // try to match the reconstructed track with a simulated one
+ AliMUONTriggerTrack* matchedTrigTrackRef = rc.FindCompatibleTrack(trigTrack, *triggerTrackRefStore, fSigmaCutTrig);
+
+ // set the MC label
+ if (matchedTrigTrackRef) esdTrack->SetLabel(matchedTrigTrackRef->GetUniqueID());
+ else esdTrack->SetLabel(-1);
+
+ }
}
//----------------------------------------------------------------------
void AliAnalysisTaskESDMCLabelAddition::Terminate(Option_t */*option*/)
{
- // Terminate analysis
- //
+ /// Terminate analysis
AliDebug(2, "Terminate()");
}
/* $Id$ */
-#include <TList.h>
+#include <TString.h>
#include "AliAnalysisTaskSE.h"
-class AliAnalysisFilter;
-class AliStack;
-class AliESDMuonTrack;
-class AliMUONTrack;
-class AliMUONVTrackStore;
-
class AliAnalysisTaskESDMCLabelAddition : public AliAnalysisTaskSE
{
- public:
- AliAnalysisTaskESDMCLabelAddition();
- AliAnalysisTaskESDMCLabelAddition(const char* name);
- virtual ~AliAnalysisTaskESDMCLabelAddition() {;}
- // Implementation of interface methods
- virtual void UserCreateOutputObjects();
- virtual void Init();
- virtual void LocalInit() {Init();}
- virtual void UserExec(Option_t *option);
- virtual void Terminate(Option_t *option);
-
-
- private:
-
- static const Double_t fgkSigmaCut; // sigma cut applied to match a reconstructed cluster with a trackref
-
- AliAnalysisTaskESDMCLabelAddition(const AliAnalysisTaskESDMCLabelAddition&);
- AliAnalysisTaskESDMCLabelAddition& operator=(const AliAnalysisTaskESDMCLabelAddition&);
-
- void AddMCLabel();
- AliMUONTrack* ESDToMUON(AliESDMuonTrack &esdTrack);
- AliMUONTrack* MatchWithTrackRef(AliESDMuonTrack &esdTrack, AliMUONVTrackStore &trackRefStore);
- Bool_t TrackMatched(AliMUONTrack &track, AliMUONTrack &trackRef);
-
- ClassDef(AliAnalysisTaskESDMCLabelAddition, 1); // Analysis task for standard ESD filtering
-
+public:
+ AliAnalysisTaskESDMCLabelAddition();
+ AliAnalysisTaskESDMCLabelAddition(const char* name);
+ virtual ~AliAnalysisTaskESDMCLabelAddition() {;}
+
+ // Implementation of interface methods
+ virtual void UserCreateOutputObjects();
+ virtual void NotifyRun();
+ virtual void UserExec(Option_t *option);
+ virtual void Terminate(Option_t *option);
+
+ /// Set location of the default OCDB storage (if not set use "raw://")
+ void SetDefaultStorage(const char* ocdbPath) { fDefaultStorage = ocdbPath; }
+
+
+private:
+
+ AliAnalysisTaskESDMCLabelAddition(const AliAnalysisTaskESDMCLabelAddition&);
+ AliAnalysisTaskESDMCLabelAddition& operator=(const AliAnalysisTaskESDMCLabelAddition&);
+
+ TString fDefaultStorage; ///< location of the default OCDB storage
+ Double_t fSigmaCut; //!< sigma cut to associate clusters with TrackRefs
+ Double_t fSigmaCutTrig; //!< sigma cut to associate trigger track to triggerable track
+
+ ClassDef(AliAnalysisTaskESDMCLabelAddition, 2); // Analysis task for standard ESD filtering
+
};
#endif
+