#include "AliAODEvent.h"
#include "AliESDEvent.h"
#include "AliVEventPool.h"
+#include "AliVCuts.h"
#include "AliLog.h"
#include <TObjArray.h>
#include <TTree.h>
+#include <TList.h>
+#include <TEntryList.h>
ClassImp(AliMultiEventInputHandler)
fNBuffered(0),
fIndex(0),
fCurrentBin(0),
+ fCurrentEvt(0),
+ fInit(0),
fEventPool(0),
- fEventBuffer(0)
+ fEventBuffer(0),
+ fEventSkipped(0)
{
// Default constructor
}
fNBuffered(0),
fIndex(0),
fCurrentBin(0),
+ fCurrentEvt(0),
+ fInit(0),
fEventPool(0),
- fEventBuffer(new AliVEvent*[size])
+ fEventBuffer(0),
+ fEventSkipped(0)
{
- // Default constructor
- for (Int_t i = 0; i < size; i++)
- if (fFormat == 1) {
- fEventBuffer[i] = new AliAODEvent();
- } else if (fFormat == 0) {
- fEventBuffer[i] = new AliESDEvent();
- } else{
- AliWarning(Form("Unknown Format %5d", fFormat));
- }
+ // constructor
}
//______________________________________________________________________________
fNBuffered(0),
fIndex(0),
fCurrentBin(0),
+ fCurrentEvt(0),
+ fInit(0),
fEventPool(0),
- fEventBuffer(new AliVEvent*[size])
+ fEventBuffer(0),
+ fEventSkipped(0)
{
// Constructor
- for (Int_t i = 0; i < size; i++)
- if (fFormat == 1) {
- fEventBuffer[i] = new AliAODEvent();
- } else if (fFormat == 0) {
- fEventBuffer[i] = new AliESDEvent();
- } else{
- AliWarning(Form("Unknown Format %5d", fFormat));
- }
+
}
//______________________________________________________________________________
Bool_t AliMultiEventInputHandler::Init(TTree* tree, Option_t* /*opt*/)
{
// Initialisation necessary for each new tree
+ if (!fEventBuffer) {
+ fEventBuffer = new AliVEvent*[fBufferSize];
+
+ for (Int_t i = 0; i < fBufferSize; i++)
+ if (fFormat == 1) {
+ fEventBuffer[i] = new AliAODEvent();
+ } else if (fFormat == 0) {
+ fEventBuffer[i] = new AliESDEvent();
+ } else{
+ AliWarning(Form("Unknown Format %5d", fFormat));
+ }
+ }
+
+
fTree = tree;
+ fInit = 1;
+
if (!fTree) return kFALSE;
for (Int_t i = 0; i < fBufferSize; i++)
fEventBuffer[i]->Clear();
Bool_t AliMultiEventInputHandler::Notify(const char */*path*/)
{
// Connect to new tree
- fEventBuffer[0]->ReadFromTree(fTree, "");
+
+ TList* connectedList = (TList*) (fTree->GetUserInfo()->FindObject("AODObjectsConnectedToTree"));
+ if (connectedList && !fInit) {
+ fEventBuffer[0]->ReadFromTree(fTree, "reconnect");
+ } else {
+ if (fInit) fEventBuffer[0]->ReadFromTree(fTree, "");
+ }
+
+ fCurrentEvt = 0;
+ fInit = 0;
+
return (kTRUE);
}
// Actions before analysis of each event
//
// Reset the number of events buffered for this bin to 0
+
if (fCurrentBin != (fEventPool->BinNumber())) {
fCurrentBin = fEventPool->BinNumber();
fNBuffered = 0;
}
+ //
+ // Event selection
+ //
+ if (fFormat == 0) {
+ fIsSelectedResult = 0;
+ if (fEventCuts && !IsUserCallSelectionMask())
+ fIsSelectedResult =
+ fEventCuts->GetSelectionMask((AliESDEvent*)fEventBuffer[fIndex]);
+ }
+
return kTRUE;
}
{
//
// Connect the next event in the buffer to the tree
- fIndex++;
-
+ if (!fEventSkipped) fIndex++;
fIndex %= fBufferSize;
AliInfo(Form("Connecting buffer entry %5d", fIndex));
fEventBuffer[fIndex]->Clear();
+ fCurrentEvt++;
+ if (fEventBuffer[fIndex]->GetList() && fCurrentEvt > (fBufferSize - 1))
+ fEventBuffer[fIndex]->GetList()->Delete();
+
fEventBuffer[fIndex]->ReadFromTree(fTree, "reconnect");
fNBuffered++;
if (fNBuffered > fBufferSize) fNBuffered = fBufferSize;
-
+
+ Int_t nmax = fTree->GetEntries();
+ if (fTree->GetEntryList()) {
+ nmax = (fTree->GetEntryList()->GetN());
+ } else {
+ if (fTree->GetTree()) nmax = fTree->GetTree()->GetEntries();
+ }
+
+ if (fCurrentEvt == nmax)
+ {
+ for (Int_t i = 0; i < fBufferSize; i++) {
+ fEventBuffer[i]->Clear();
+ }
+ }
+
return (kTRUE);
}