#ifndef UEVENT_H
#define UEVENT_H

#include "TObject.h"
#include "TLorentzVector.h"

class TString;
class TClonesArray;
class UParticle;


class UEvent : public TObject {

 private:
    Int_t         fEventNr;      // Event number
    Double_t      fB;            // Impact parameter (fm)
    Double_t      fPhi;          // Event plane angle
    Int_t         fNes;          // Number of event steps
    Int_t         fStepNr;       // Event step number
    Double_t      fStepT;        // Event step time
    Int_t         fNpa;          // Number of particles
    TClonesArray *fParticles;    // Array of particles
    
 public:
    UEvent();
    UEvent(const UEvent& right);
    virtual ~UEvent();
    using TObject::Print;
    void Print(Option_t *option = "");
    inline Int_t    GetEventNr() const {return fEventNr;}
    inline Double_t GetB()       const {return fB;}
    inline Double_t GetPhi()     const {return fPhi;}
    inline Int_t    GetNes()     const {return fNes;}
    inline Int_t    GetStepNr()  const {return fStepNr;}
    inline Double_t GetStepT()   const {return fStepT;}
    inline Int_t    GetNpa()     const {return fNpa;}
    inline TClonesArray *GetParticleList() const {return fParticles;}
    UParticle* GetParticle(Int_t index) const;
    void SetParameters(Int_t eventNr, Double_t b, Double_t phi, Int_t nes,
		       Int_t stepNr, Double_t stepT);
    inline void SetEventNr(Int_t eventNr)    {fEventNr = eventNr;}
    inline void SetB      (Double_t b)       {fB = b;}
    inline void SetPhi    (Double_t phi)     {fPhi = phi;}
    inline void SetNes    (Int_t nes)        {fNes = nes;}
    inline void SetStepNr (Int_t stepNr)     {fStepNr = stepNr;}
    inline void SetStepT  (Double_t stepT)   {fStepT = stepT;}
    void AddParticle(Int_t index, Int_t pdg, Int_t status,
		     Int_t parent, Int_t parentDecay,
		     Int_t mate, Int_t decay, Int_t child[2],
		     Double_t px, Double_t py, Double_t pz, Double_t e,
		     Double_t x, Double_t y, Double_t z, Double_t t,
		     Double_t weight);
    void AddParticle(Int_t index, Int_t pdg, Int_t status,
		     Int_t parent, Int_t parentDecay,
		     Int_t mate, Int_t decay, Int_t child[2],
		     TLorentzVector mom, TLorentzVector pos,
		     Double_t weight);
    void AddParticle(const UParticle &particle);
    using TObject::Clear;
    void Clear(const Option_t * = NULL);
    void RemoveAt(Int_t i);
    
    ClassDef(UEvent, 1);
};


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