#ifndef ROOT_JetEvent
#define ROOT_JetEvent

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// JetEvent                                                             //
//                                                                      //
// Description of the event and track parameters                        //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TClonesArray.h"
#include "TRefArray.h"
#include "TVector3.h"

class Hit : public TObject {

public:
   Float_t      fX;           //X of hit
   Float_t      fY;           //Y of hit
   Float_t      fZ;           //Z of hit

public:
   Hit() { }
   ~Hit() override { }

   ClassDefOverride(Hit,1)  //A track hit
};

class Track : public TObject {

public:
   Float_t      fPx;           //X component of the momentum
   Float_t      fPy;           //Y component of the momentum
   Float_t      fPz;           //Z component of the momentum
   Int_t        fNhit;         //Number of hits for this track
   TRefArray    fHits;         //List of Hits for this track

public:
   Track() { }
   ~Track() override { }
   Int_t         GetNhit() const { return fNhit; }
   TRefArray   &GetHits()  {return fHits; }

   ClassDefOverride(Track,1)  //A track segment
};


class Jet : public TObject {

public:
   Double_t   fPt;       //Pt of jet
   Double_t   fPhi;      //Phi of jet
   TRefArray  fTracks;   //List of tracks in the jet

public:
   Jet() { }
   ~Jet() override{ }
   TRefArray   &GetTracks() {return fTracks; }

   ClassDefOverride(Jet,1)  //Jet class
};

class JetEvent : public TObject {

private:
   TVector3       fVertex;            //vertex coordinates
   Int_t          fNjet;              //Number of jets
   Int_t          fNtrack;            //Number of tracks
   Int_t          fNhitA;             //Number of hist in detector A
   Int_t          fNhitB;             //Number of hist in detector B
   TClonesArray  *fJets;              //->array with all jets
   TClonesArray  *fTracks;            //->array with all tracks
   TClonesArray  *fHitsA;             //->array of hits in detector A
   TClonesArray  *fHitsB;             //->array of hits in detector B

   static TClonesArray *fgJets;
   static TClonesArray *fgTracks;
   static TClonesArray *fgHitsA;
   static TClonesArray *fgHitsB;

public:
   JetEvent();
   ~JetEvent() override;
   void          Build(Int_t jetm=3, Int_t trackm=10, Int_t hitam=100, Int_t hitbm=10);
   void          Clear(Option_t *option ="") override;
   void          Reset(Option_t *option ="");
   Int_t         GetNjet()   const { return fNjet; }
   Int_t         GetNtrack() const { return fNtrack; }
   Int_t         GetNhitA()  const { return fNhitA; }
   Int_t         GetNhitB()  const { return fNhitB; }
   Jet          *AddJet();
   Track        *AddTrack();
   Hit          *AddHitA();
   Hit          *AddHitB();
   TClonesArray *GetJets() const { return fJets; }

   ClassDefOverride(JetEvent,1)  //Event structure
};

#endif




















