From 2da1d1586303d4d066f84047984cdcf842000b2c Mon Sep 17 00:00:00 2001 From: morsch Date: Thu, 13 Jan 2011 14:46:09 +0000 Subject: [PATCH] AliMultiInputEventHandler added and used in AliAnalysisTaskSE Martin Vala --- ANALYSIS/ANALYSISaliceLinkDef.h | 1 + ANALYSIS/AliAnalysisTaskSE.cxx | 73 ++++++++++++++++++-------- ANALYSIS/AliAnalysisTaskSE.h | 9 +++- ANALYSIS/AliMultiEventInputHandler.cxx | 8 +-- ANALYSIS/CMakelibANALYSISalice.pkg | 2 +- ANALYSIS/libANALYSISalice.pkg | 2 +- 6 files changed, 67 insertions(+), 28 deletions(-) diff --git a/ANALYSIS/ANALYSISaliceLinkDef.h b/ANALYSIS/ANALYSISaliceLinkDef.h index e179bb71e84..ce166b8c7e5 100644 --- a/ANALYSIS/ANALYSISaliceLinkDef.h +++ b/ANALYSIS/ANALYSISaliceLinkDef.h @@ -36,6 +36,7 @@ #pragma link C++ class AliAnalysisTaskAODCentralityMaker+; #pragma link C++ class AliCentralitySelectionTask+; #pragma link C++ class AliAnalysisTaskStat+; +#pragma link C++ class AliMultiInputEventHandler+; #ifdef WITHXML #pragma link C++ class AliTagAnalysis+; diff --git a/ANALYSIS/AliAnalysisTaskSE.cxx b/ANALYSIS/AliAnalysisTaskSE.cxx index 65e8e4b7253..1b15030285a 100644 --- a/ANALYSIS/AliAnalysisTaskSE.cxx +++ b/ANALYSIS/AliAnalysisTaskSE.cxx @@ -40,6 +40,7 @@ #include "AliAODInputHandler.h" #include "AliMCEventHandler.h" #include "AliInputEventHandler.h" +#include "AliMultiInputEventHandler.h" #include "AliESDInputHandler.h" #include "AliMCEvent.h" #include "AliStack.h" @@ -76,7 +77,9 @@ AliAnalysisTaskSE::AliAnalysisTaskSE(): fTreeA(0x0), fCurrentRunNumber(-1), fHistosQA(0x0), - fOfflineTriggerMask(0) + fOfflineTriggerMask(0), + fMultiInputHandler(0), + fMCEventHandler(0) { // Default constructor } @@ -93,7 +96,9 @@ AliAnalysisTaskSE::AliAnalysisTaskSE(const char* name): fTreeA(0x0), fCurrentRunNumber(-1), fHistosQA(0x0), - fOfflineTriggerMask(0) + fOfflineTriggerMask(0), + fMultiInputHandler(0), + fMCEventHandler(0) { // Default constructor DefineInput (0, TChain::Class()); @@ -112,7 +117,9 @@ AliAnalysisTaskSE::AliAnalysisTaskSE(const AliAnalysisTaskSE& obj): fTreeA(0x0), fCurrentRunNumber(-1), fHistosQA(0x0), - fOfflineTriggerMask(0) + fOfflineTriggerMask(0), + fMultiInputHandler(obj.fMultiInputHandler), + fMCEventHandler(obj.fMCEventHandler) { // Copy constructor fDebug = obj.fDebug; @@ -144,6 +151,8 @@ AliAnalysisTaskSE& AliAnalysisTaskSE::operator=(const AliAnalysisTaskSE& other) fCurrentRunNumber = other.fCurrentRunNumber; fHistosQA = other.fHistosQA; fOfflineTriggerMask = other.fOfflineTriggerMask; + fMultiInputHandler = other.fMultiInputHandler; + fMCEventHandler = other.fMCEventHandler; return *this; } @@ -152,20 +161,10 @@ void AliAnalysisTaskSE::ConnectInputData(Option_t* /*option*/) { // Connect the input data if (fDebug > 1) printf("AnalysisTaskSE::ConnectInputData() \n"); -// -// ESD -// - fInputHandler = (AliInputEventHandler*) - ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler()); -// -// Monte Carlo -// - AliMCEventHandler* mcH = 0; - mcH = (AliMCEventHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler()); - if (mcH) { - fMCEvent = mcH->MCEvent(); - } - + + // Connect input handlers (multi input handler is handled) + ConnectMultiHandler(); + if (fInputHandler) { if ((fInputHandler->GetTree())->GetBranch("ESDfriend.")) fESDfriend = ((AliESDInputHandler*)fInputHandler)->GetESDfriend(); @@ -177,6 +176,8 @@ void AliAnalysisTaskSE::ConnectInputData(Option_t* /*option*/) AliError("No Input Event Handler connected") ; return ; } + // Disconnect multi handler + DisconnectMultiHandler(); } void AliAnalysisTaskSE::CreateOutputObjects() @@ -297,6 +298,9 @@ void AliAnalysisTaskSE::Exec(Option_t* option) { // // Exec analysis of one event + + ConnectMultiHandler(); + if ( fDebug >= 10) printf("Task is active %5d\n", IsActive()); @@ -491,20 +495,19 @@ void AliAnalysisTaskSE::Exec(Option_t* option) } // Call the user analysis - AliMCEventHandler* mcH = 0; - mcH = (AliMCEventHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler()); - - if (!mcH) { + if (!fMCEventHandler) { if (isSelected) UserExec(option); } else { - if (isSelected && (mcH->InitOk())) + if (isSelected && (fMCEventHandler->InitOk())) UserExec(option); } // Added protection in case the derived task is not an AOD producer. AliAnalysisDataSlot *out0 = GetOutputSlot(0); if (out0 && out0->IsConnected()) PostData(0, fTreeA); + + DisconnectMultiHandler(); } const char* AliAnalysisTaskSE::CurrentFileName() @@ -573,3 +576,29 @@ void AliAnalysisTaskSE::LoadBranches() const TObject *obj; while ((obj=next())) mgr->LoadBranch(obj->GetName()); } + + +//_________________________________________________________________________________________________ +void AliAnalysisTaskSE::ConnectMultiHandler() +{ + // + // Connect MultiHandler + // + fInputHandler = (AliInputEventHandler *)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler()); + fMultiInputHandler = dynamic_cast(fInputHandler); + if (fMultiInputHandler) { +// fMultiInputHandler = (AliMultiInputEventHandler*)fInputHandler; + fInputHandler = dynamic_cast(fMultiInputHandler->GetFirstInputEventHandler()); + fMCEventHandler = dynamic_cast(fMultiInputHandler->GetFirstMCEventHandler()); + } + if (fMCEventHandler) fMCEvent = fMCEventHandler->MCEvent(); +} + +//_________________________________________________________________________________________________ +void AliAnalysisTaskSE::DisconnectMultiHandler() +{ + // + // Disconnect MultiHandler + // + if (fMultiInputHandler) fInputHandler = fMultiInputHandler; +} diff --git a/ANALYSIS/AliAnalysisTaskSE.h b/ANALYSIS/AliAnalysisTaskSE.h index e6c54025471..acc835bc1c6 100644 --- a/ANALYSIS/AliAnalysisTaskSE.h +++ b/ANALYSIS/AliAnalysisTaskSE.h @@ -14,7 +14,9 @@ class AliAODHeader; class AliAODTracklets; class AliAODCaloCells; class AliMCEvent; +class AliMCEventHandler; class AliInputEventHandler; +class AliMultiInputEventHandler; class AliAnalysisCuts; class AliESDfriend; class AliEventTag; @@ -63,6 +65,9 @@ class AliAnalysisTaskSE : public AliAnalysisTask virtual Bool_t IsStandardAOD() const; virtual TList* GetQAHistos() const {return fHistosQA;} virtual Bool_t IsEventInBinZero() { return kFALSE;} + protected: + void ConnectMultiHandler(); + void DisconnectMultiHandler(); protected: Int_t fDebug; // Debug flag @@ -93,7 +98,9 @@ class AliAnalysisTaskSE : public AliAnalysisTask static TClonesArray* fgAODDimuons; //! Dimuons replication // Event Selection UInt_t fOfflineTriggerMask; // Task processes collision candidates only - + // Event Mixing + AliMultiInputEventHandler *fMultiInputHandler; //! pointer to multihandler + AliMCEventHandler *fMCEventHandler; //! pointer to MCEventHandler ClassDef(AliAnalysisTaskSE, 4); // Analysis task for standard jet analysis }; diff --git a/ANALYSIS/AliMultiEventInputHandler.cxx b/ANALYSIS/AliMultiEventInputHandler.cxx index a3ddb794738..8985e255063 100644 --- a/ANALYSIS/AliMultiEventInputHandler.cxx +++ b/ANALYSIS/AliMultiEventInputHandler.cxx @@ -125,7 +125,7 @@ Bool_t AliMultiEventInputHandler::Init(TTree* tree, Option_t* /*opt*/) Bool_t AliMultiEventInputHandler::Notify(const char */*path*/) { // Connect to new tree - + TList* connectedList = (TList*) (fTree->GetUserInfo()->FindObject("AODObjectsConnectedToTree")); if (connectedList && !fInit) { fEventBuffer[0]->ReadFromTree(fTree, "reconnect"); @@ -144,6 +144,9 @@ Bool_t AliMultiEventInputHandler::BeginEvent(Long64_t /*entry*/) // Actions before analysis of each event // // Reset the number of events buffered for this bin to 0 + printf("BeginEvent %5d %5d \n", + fCurrentBin, fEventPool->BinNumber()); + if (fCurrentBin != (fEventPool->BinNumber())) { fCurrentBin = fEventPool->BinNumber(); fNBuffered = 0; @@ -167,7 +170,6 @@ Bool_t AliMultiEventInputHandler::FinishEvent() // Connect the next event in the buffer to the tree if (!fEventSkipped) fIndex++; fIndex %= fBufferSize; - AliInfo(Form("Connecting buffer entry %5d", fIndex)); fEventBuffer[fIndex]->Clear(); fCurrentEvt++; @@ -178,7 +180,7 @@ Bool_t AliMultiEventInputHandler::FinishEvent() fNBuffered++; if (fNBuffered > fBufferSize) fNBuffered = fBufferSize; - + Int_t nmax = fTree->GetEntries(); if (fTree->GetEntryList()) { nmax = (fTree->GetEntryList()->GetN()); diff --git a/ANALYSIS/CMakelibANALYSISalice.pkg b/ANALYSIS/CMakelibANALYSISalice.pkg index a59cfef1dbc..d9d93b64259 100644 --- a/ANALYSIS/CMakelibANALYSISalice.pkg +++ b/ANALYSIS/CMakelibANALYSISalice.pkg @@ -25,7 +25,7 @@ # SHLIBS - Shared Libraries and objects for linking (Executables only) # #--------------------------------------------------------------------------------# -set ( SRCS AliAnalysisTaskSE.cxx AliAnalysisTaskME.cxx AliAnalysisTaskESDfilter.cxx AliAnalysisTaskKineFilter.cxx AliAnalysisTaskMCParticleFilter.cxx AliKineTrackCuts.cxx AliESDtrackCuts.cxx AliESDpidCuts.cxx AliESDv0Cuts.cxx AliEventPoolOTF.cxx AliEventPoolLoop.cxx AliEventPoolSparse.cxx AliAnalysisTaskTagCreator.cxx AliMultiEventInputHandler.cxx AliTriggerAnalysis.cxx AliPhysicsSelection.cxx AliBackgroundSelection.cxx AliPhysicsSelectionTask.cxx AliAnalysisFilter.cxx AliAnalysisCuts.cxx AliCollisionNormalization.cxx AliCollisionNormalizationTask.cxx AliCentralitySelectionTask.cxx AliAnalysisTaskAODCentralityMaker.cxx AliAnalysisTaskStat.cxx) +set ( SRCS AliAnalysisTaskSE.cxx AliAnalysisTaskME.cxx AliAnalysisTaskESDfilter.cxx AliAnalysisTaskKineFilter.cxx AliAnalysisTaskMCParticleFilter.cxx AliKineTrackCuts.cxx AliESDtrackCuts.cxx AliESDpidCuts.cxx AliESDv0Cuts.cxx AliEventPoolOTF.cxx AliEventPoolLoop.cxx AliEventPoolSparse.cxx AliAnalysisTaskTagCreator.cxx AliMultiEventInputHandler.cxx AliTriggerAnalysis.cxx AliPhysicsSelection.cxx AliBackgroundSelection.cxx AliPhysicsSelectionTask.cxx AliAnalysisFilter.cxx AliAnalysisCuts.cxx AliCollisionNormalization.cxx AliCollisionNormalizationTask.cxx AliCentralitySelectionTask.cxx AliAnalysisTaskAODCentralityMaker.cxx AliAnalysisTaskStat.cxx AliMultiInputEventHandler.cxx) if( ROOTHASALIEN STREQUAL "yes") diff --git a/ANALYSIS/libANALYSISalice.pkg b/ANALYSIS/libANALYSISalice.pkg index 0a11cec141e..9f100de1ff4 100644 --- a/ANALYSIS/libANALYSISalice.pkg +++ b/ANALYSIS/libANALYSISalice.pkg @@ -12,7 +12,7 @@ SRCS = AliAnalysisTaskSE.cxx AliAnalysisTaskME.cxx \ AliAnalysisFilter.cxx AliAnalysisCuts.cxx \ AliCollisionNormalization.cxx AliCollisionNormalizationTask.cxx \ AliAnalysisTaskAODCentralityMaker.cxx AliCentralitySelectionTask.cxx \ - AliAnalysisTaskStat.cxx + AliAnalysisTaskStat.cxx AliMultiInputEventHandler.cxx ifeq (yes,$(CHECKALIEN)) -- 2.43.0