#include "AliAODInputHandler.h"
#include "AliMCEventHandler.h"
#include "AliInputEventHandler.h"
+#include "AliMultiInputEventHandler.h"
#include "AliESDInputHandler.h"
#include "AliMCEvent.h"
#include "AliStack.h"
fTreeA(0x0),
fCurrentRunNumber(-1),
fHistosQA(0x0),
- fOfflineTriggerMask(0)
+ fOfflineTriggerMask(0),
+ fMultiInputHandler(0),
+ fMCEventHandler(0)
{
// Default constructor
}
fTreeA(0x0),
fCurrentRunNumber(-1),
fHistosQA(0x0),
- fOfflineTriggerMask(0)
+ fOfflineTriggerMask(0),
+ fMultiInputHandler(0),
+ fMCEventHandler(0)
{
// Default constructor
DefineInput (0, TChain::Class());
fTreeA(0x0),
fCurrentRunNumber(-1),
fHistosQA(0x0),
- fOfflineTriggerMask(0)
+ fOfflineTriggerMask(0),
+ fMultiInputHandler(obj.fMultiInputHandler),
+ fMCEventHandler(obj.fMCEventHandler)
{
// Copy constructor
fDebug = obj.fDebug;
fCurrentRunNumber = other.fCurrentRunNumber;
fHistosQA = other.fHistosQA;
fOfflineTriggerMask = other.fOfflineTriggerMask;
+ fMultiInputHandler = other.fMultiInputHandler;
+ fMCEventHandler = other.fMCEventHandler;
return *this;
}
{
// 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();
AliError("No Input Event Handler connected") ;
return ;
}
+ // Disconnect multi handler
+ DisconnectMultiHandler();
}
void AliAnalysisTaskSE::CreateOutputObjects()
{
//
// Exec analysis of one event
+
+ ConnectMultiHandler();
+
if ( fDebug >= 10)
printf("Task is active %5d\n", IsActive());
TClonesArray& dimuons = *fgAODDimuons;
TClonesArray& tracksnew = *fgAODTracks;
- Int_t nMuonTrack[10];
- for(Int_t imuon = 0; imuon < 10; imuon++) nMuonTrack[imuon] = 0;
+ Int_t nMuonTrack[100];
+ for(Int_t imuon = 0; imuon < 100; imuon++) nMuonTrack[imuon] = 0;
Int_t nMuons=0;
for(Int_t ii=0; ii < fgAODTracks->GetEntries(); ii++){
AliAODTrack *track = (AliAODTrack*) fgAODTracks->At(ii);
}
// 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()
return (UserNotify());
}
+const AliEventTag *AliAnalysisTaskSE::EventTag() const
+{
+// Returns tag for the current event, if any. The return value should always be checked by the user.
+ if (!fInputHandler) {
+ Error("EventTag", "Input handler not yet available. Call this in UserExec");
+ return NULL;
+ }
+ return fInputHandler->GetEventTag();
+}
+
+void AliAnalysisTaskSE::LoadBranches() const
+{
+// Load all branches declared in fBranchNames data member of the parent class.
+// Should be called in UserExec.
+ if (!fInputHandler) {
+ Error("LoadBranches", "Input handler not available yet. Call this in UserExec");
+ return;
+ }
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (mgr->GetAutoBranchLoading()) return;
+ TString taskbranches;
+ GetBranches(fInputHandler->GetDataType(), taskbranches);
+ if (taskbranches.IsNull()) return;
+ TObjArray *arr = taskbranches.Tokenize(",");
+ TIter next(arr);
+ TObject *obj;
+ while ((obj=next())) mgr->LoadBranch(obj->GetName());
+}
+
+//_________________________________________________________________________________________________
+void AliAnalysisTaskSE::ConnectMultiHandler()
+{
+ //
+ // Connect MultiHandler
+ //
+ fInputHandler = (AliInputEventHandler *)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
+ fMultiInputHandler = dynamic_cast<AliMultiInputEventHandler *>(fInputHandler);
+ if (fMultiInputHandler) {
+ fInputHandler = dynamic_cast<AliInputEventHandler *>(fMultiInputHandler->GetFirstInputEventHandler());
+ fMCEventHandler = dynamic_cast<AliMCEventHandler *>(fMultiInputHandler->GetFirstMCEventHandler());
+ } else {
+ fMCEventHandler = dynamic_cast<AliMCEventHandler *>((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
+ }
+ if (fMCEventHandler) fMCEvent = fMCEventHandler->MCEvent();
+}
+
+//_________________________________________________________________________________________________
+void AliAnalysisTaskSE::DisconnectMultiHandler()
+{
+ //
+ // Disconnect MultiHandler
+ //
+ if (fMultiInputHandler) fInputHandler = fMultiInputHandler;
+}