ROOT logo
#ifndef ALIMULTIEVENTINPUTHANDLER_H
#define ALIMULTIEVENTINPUTHANDLER_H
/* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

//----------------------------------------------------------------------------
//     Multi VEvent Input Handler realisation of the AliVEventHandler interface.
//     This class handles multiple events for mixing.
//     Author: Andreas Morsch, CERN
//----------------------------------------------------------------------------

#include "AliInputEventHandler.h"
class AliVEventPool;
class AliVEvent;

class AliMultiEventInputHandler : public AliInputEventHandler {

 public:
    AliMultiEventInputHandler();
    AliMultiEventInputHandler(Int_t size, Int_t format = 1);
    AliMultiEventInputHandler(const char* name, const char* title, Int_t size, Int_t format = 1);
    virtual ~AliMultiEventInputHandler();
    void   SetBufferSize(Int_t size) {fBufferSize = size;}
    void   SetEventPool(AliVEventPool* pool) {fEventPool = pool;}
    Int_t  GetBufferSize()           const {return fBufferSize;}
    Int_t  GetNBuffered()            const {return fNBuffered;}
    Bool_t IsBufferReady()           const {return (fNBuffered >= (fBufferSize -1));}
    Bool_t IsFreshBuffer()           const {return (fIndex == (fBufferSize - 1));}
    AliVEventPool           *GetEventPool()      const {return fEventPool;}
    virtual AliVEvent       *GetEvent()          const {return GetLatestEvent();}
    virtual AliVEvent       *GetEvent(Int_t iev) const;
    AliVEvent               *GetLatestEvent()    const {return fEventBuffer[fIndex];}
    Int_t                    GetFormat() { return fFormat ;} 
    void                     EventSkipped() {fEventSkipped = kTRUE;}
    // From the interface
    virtual Bool_t Init(Option_t* /*opt*/)    {return kTRUE;}
    virtual Bool_t Init(TTree* tree, Option_t* /*opt*/);
    virtual Bool_t FinishEvent();
    virtual Bool_t BeginEvent(Long64_t /*entry*/);
    virtual Bool_t Notify() { return AliInputEventHandler::Notify();}
    virtual Bool_t Notify(const char */*path*/);
 private:
    AliMultiEventInputHandler(const AliMultiEventInputHandler& handler);             
    AliMultiEventInputHandler& operator=(const AliMultiEventInputHandler& handler);  
 private:
    Int_t          fBufferSize;   // Size of the buffer
    Int_t          fFormat;       // 0: ESD 1: AOD
    Int_t          fNBuffered;    // Number of events actually buffered
    Int_t          fIndex;        // Pointer to most recent event
    Int_t          fCurrentBin;   // Current bin from the pool
    Int_t          fCurrentEvt;   // Current event
    Bool_t         fInit;         // Current event
    AliVEventPool* fEventPool;    // Pointer to the pool
    AliVEvent**    fEventBuffer;  //! The event buffer
    Bool_t         fEventSkipped; // User requires event to be skip
    ClassDef(AliMultiEventInputHandler, 1);
};

#endif
 AliMultiEventInputHandler.h:1
 AliMultiEventInputHandler.h:2
 AliMultiEventInputHandler.h:3
 AliMultiEventInputHandler.h:4
 AliMultiEventInputHandler.h:5
 AliMultiEventInputHandler.h:6
 AliMultiEventInputHandler.h:7
 AliMultiEventInputHandler.h:8
 AliMultiEventInputHandler.h:9
 AliMultiEventInputHandler.h:10
 AliMultiEventInputHandler.h:11
 AliMultiEventInputHandler.h:12
 AliMultiEventInputHandler.h:13
 AliMultiEventInputHandler.h:14
 AliMultiEventInputHandler.h:15
 AliMultiEventInputHandler.h:16
 AliMultiEventInputHandler.h:17
 AliMultiEventInputHandler.h:18
 AliMultiEventInputHandler.h:19
 AliMultiEventInputHandler.h:20
 AliMultiEventInputHandler.h:21
 AliMultiEventInputHandler.h:22
 AliMultiEventInputHandler.h:23
 AliMultiEventInputHandler.h:24
 AliMultiEventInputHandler.h:25
 AliMultiEventInputHandler.h:26
 AliMultiEventInputHandler.h:27
 AliMultiEventInputHandler.h:28
 AliMultiEventInputHandler.h:29
 AliMultiEventInputHandler.h:30
 AliMultiEventInputHandler.h:31
 AliMultiEventInputHandler.h:32
 AliMultiEventInputHandler.h:33
 AliMultiEventInputHandler.h:34
 AliMultiEventInputHandler.h:35
 AliMultiEventInputHandler.h:36
 AliMultiEventInputHandler.h:37
 AliMultiEventInputHandler.h:38
 AliMultiEventInputHandler.h:39
 AliMultiEventInputHandler.h:40
 AliMultiEventInputHandler.h:41
 AliMultiEventInputHandler.h:42
 AliMultiEventInputHandler.h:43
 AliMultiEventInputHandler.h:44
 AliMultiEventInputHandler.h:45
 AliMultiEventInputHandler.h:46
 AliMultiEventInputHandler.h:47
 AliMultiEventInputHandler.h:48
 AliMultiEventInputHandler.h:49
 AliMultiEventInputHandler.h:50
 AliMultiEventInputHandler.h:51
 AliMultiEventInputHandler.h:52
 AliMultiEventInputHandler.h:53
 AliMultiEventInputHandler.h:54
 AliMultiEventInputHandler.h:55
 AliMultiEventInputHandler.h:56
 AliMultiEventInputHandler.h:57
 AliMultiEventInputHandler.h:58
 AliMultiEventInputHandler.h:59
 AliMultiEventInputHandler.h:60
 AliMultiEventInputHandler.h:61