Re: Named Objects in TClonesArrays

Rene Brun (Rene.Brun@cern.ch)
Wed, 14 Apr 1999 07:58:42 +0200 (METDST)


Hi Norbert,
TClonesArray assumes that the objects in the array have the same length
(clones). You should put a TNamed object there. Replace your derivation
from TNamed by TObject. In general TClonesArray are used when you deal
with a large number of small physics objects. I have doubts that you want
to give a name to each of these objects.

Rene Brun

On Tue, 13 Apr 1999, Norbert Danneberg wrote:

> Hi Rooters,
>
> when I try to store a named object derived from TNamed in TTree and
> write this
> Tree to disk, I do not receive the name of the object when I try to read
> it back.
> All other member variables are read in correctly.
>
> Below is the slightly modified Event sample from the /test directory.
>
> I changed Track so that it is derived from TNamed.
>
> class Track : public TNamed {
>
> private:
> Float_t fPx; //X component of the momentum
> Float_t fPy; //Y component of the momentum
> Float_t fPz; //Z component of the momentum
> ....
> }
>
> During filling a name to each Track is assigned in MainEvent.cxx:
>
> // Create and Fill the Track objects
> for (Int_t t = 0; t < ntrack; t++){
> event->AddTrack(random);
> Track* MyTrack = (Track*)event->GetTracks()->At(t); // Added Code
> MyTrack->SetName("N"); //Added Code
>
> }
>
> I check after filling if the Name is set correctly:
>
> if (write) nb += tree->Fill(); //fill the tree
>
> Track* MyTrack = (Track*)event->GetTracks()->At(0);
> printf("%s\n",MyTrack->GetName());
>
> this gives the correct Name.
>
> But the following testmacro gives empty names for all Track Objects:
>
> {
> gROOT->Reset();
> f1 = new TFile("Event.root");
> Event* ev=new Event();
> T->SetBranchAddress("event",&ev);
> T->SetBranchStatus("*",1);
>
> for(Int_t i=0;i<1;i++){
> T->GetEvent(i);
> TClonesArray* TrackList = ev->GetTracks();
> Track* MyTrack = (Track*)TrackList->At(0);
> MyTrack->Inspect();
>
> printf("%s\n",MyTrack->GetName());
> }
> }
>
> I am sorry but I do not have a clue whats wrong ??
>
>
> Thanks, Norbert
>
>
>
> --
>
> Norbert Danneberg
>
> ETH Zurich - Institute for Particle Physics
> Laboratory for Nuclear Physics Phone.: +41-1-633-2034
> Hoenggerberg Fax.: +41-1-633-1067
> CH-8093 Zurich
>
>
> ETH Zurich - Institute for Particle Physics
> Paul Scherrer Institute Phone.: +41-56-310-3284
> CH-5232 Villigen PSI Fax.: +41-56-310-4362
>
> email: Norbert.Danneberg@psi.ch
>
>