Hello, my problem is the following. I have a class Event so defined (just like your example): ------------------------------ #ifndef ROOT_Event #define ROOT_Event #include "TObject.h" #include "TClonesArray.h" #include "TMath.h" #include <iostream.h> class TDirectory; class EventHeader { private: Int_t fEvtNum; Int_t fRun; Int_t fDate; public: EventHeader() : fEvtNum(0), fRun(0), fDate(0) { } virtual ~EventHeader() { } void Set(Int_t i, Int_t r, Int_t d) { fEvtNum = i; fRun = r; fDate = d; } Int_t GetEvtNum() const { return fEvtNum; } Int_t GetRun() const { return fRun; } Int_t GetDate() const { return fDate; } ClassDef(EventHeader,1) //Event Header }; class Track; class Event : public TObject { private: Int_t necht; EventHeader fEvtHdr; TClonesArray *fTracks; static TClonesArray *fgTracks; public: Event(); virtual ~Event(); void Clear(Option_t *option =""); static void Reset(Option_t *option =""); void SetNecht(Int_t n) { necht = n; }; void SetHeader(Int_t i, Int_t run, Int_t date, Float_t random); void AddTrack(Float_t energy,Int_t cell,Int_t plane,Int_t proj,Int_t status); Int_t GetNecht() const { return necht; } EventHeader *GetHeader() { return &fEvtHdr; } TClonesArray *GetTracks() const { return fTracks; } ClassDef(Event,1) //Event structure }; class Track : public TObject { private: Float_t Echtedep; Int_t Echtcell; Int_t Echtplane; Int_t Echtproj; Int_t Echtstatus; public: Track() { } Track(Float_t energy,Int_t cell,Int_t plane,Int_t proj,Int_t status); virtual ~Track() { } void Stampa() {cout << Echtedep<<endl;}; Float_t GetEnergy() const { return Echtedep; }; Float_t GetCell() const { return Echtcell; } Float_t GetPlane() const { return Echtplane; } Float_t GetProj() const { return Echtproj; } ClassDef(Track,1) //A track segment }; #endif ---------------------- When I use eventa.c to get information from the tree, I would like to get each tracks in each event. I try with: { gROOT->Reset(); gSystem.Load("libEvent.so"); TFile f("Event.root"); TTree *T = (TTree*)f.Get("T"); Event *event = new Event(); TClonesArray *tracks=event->GetTracks(); TBranch *branch=T->GetBranch("event"); T->SetBranchAddress("event",&event); Int_t nevent = T->GetEntries(); Int_t nb = 0; for (Int_t i=0;i<nevent;i++) { nb += T->GetEntry(i); // get data from the second track of the i-event Track *prova=tracks->AddrAt(2); //THIS LINE cout <<prova->GetEnergy()<<endl; cout <<prova->GetCell()<<endl; cout <<prova->GetPlane()<<endl; event->Clear(); } printf("%d events and %d bytes read.\n",nevent,nb); f.Close(); } ---- This macro works well when I execute with .x eventa.c. Futhermore when I try to compile it (out of ROOT,as I would like to do), including all the required library, the compiler gives the error: THIS LINE: type `Track' is not a base type for type `TObject' Why this behaviour? Are There other methods to extract data from a TClonesArray? Thank you in advance for your help. ******************************************** * Paolo Maestro * Istituto Nazionale di Fisica Nucleare * INFN - V.Vecchia Livornese,1291 * 56010 S.Piero a Grado (Pisa) Italy * tel : +39-050-880309/245 * fax : +39-050-880317 ********************************************
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:29 MET