Hi Ruben
After many iterations with you, I could identify and fix the problem
(now in CVS).
You had a special case (non-split mode) for a top level branch
being a TClonesArray and the array containing a class deriving
from an abstract class.
Thanks for reporting this problem.
Rene Brun
Ruben Shahoian wrote:
>
> Dear Rene,
> I did set address, and as I wrote you, when I am reading the tree in the
> same root session where it was created, it works fine (btw, I am using
> different branches for reading and writing).
> I put NaPCMuon::Class()->GetStreamerInfo()->ls(); as you suggested,
> the method to initialize the branch for reading looks like:
>
> void NaRecEvent::SetPCMuonsRead(TTree * tree)
> {
> // Init Specified Branch for reading
> fBrInPCMuons = tree->GetBranch(fgkBlockName[kPCMuonBL]);
> // fBrInPCMuons is the TBranch* data member of the NaRecEvent class
>
> if (!fBrInPCMuons) {
> Warning("SetPCMuonsRead","No %s",fgkBlockName[kPCMuonBL]);
> fBlockStatus[kPCMuonBL] = kBlockAbsent;
> return;
> }
> Warning("SetPCMuonsRead","Found Block %s",fgkBlockName[kPCMuonBL]);
> fBlockStatus[kPCMuonBL] = kReadWriteBlock;
> fBrInPCMuons->SetAddress(&fPCMuons);
> // fPCMuons is TClonesArray* initialized in advance by new
> // TClonesArray("NaPCMuon",). NaPCMuon is the class derived from the
> // mentioned abstract class
> // The full hierarchy is:
> // NaPCMuon : public NaTrack : public NaRecParticle : public TObject
> // Only NaTrack is an abstract clas
>
> NaPCMuon::Class()->GetStreamerInfo()->ls();
> NaTrack::Class()->GetStreamerInfo()->ls();
> NaRecParticle::Class()->GetStreamerInfo()->ls();
> // This is by request of Rene
>
> Warning("SetPCMuonsRead","Reading test Event");
> fBrInPCMuons->GetEntry(0); // Dummy reading to create or init the space
> }
>
> Here is the output:
>
> Warning in <NaRecEvent::SetPCMuonsRead>: Found Block PCMuons
>
> StreamerInfo for class: NaPCMuon, version=1
> BASE NaTrack offset= 0 type= 0 NA60 Track Class
> Float_t fParsUncorr[6] offset=168 type=25 ax,ay,bx,by,pfit,pcomp
> of Forward Space Track
> Int_t fSextantId offset=200 type= 3 Sextant ID
> Float_t fSlopErr2 offset=204 type= 5 RRR
> i= 0, NaTrack type= 0, offset= 0, len=1, method=159434808
> i= 1, fParsUncorr type= 25, offset=168, len=6, method=0
> i= 2, fSextantId type= 3, offset=200, len=1, method=0
> i= 3, fSlopErr2 type= 5, offset=204, len=1, method=0
>
> StreamerInfo for class: NaTrack, version=1
> BASE NaRecParticle offset= 0 type= 0 NA60 Reconstructed
> Particle Class
> Int_t fNClusters offset=99999 type= 3 Number of
> contributing clusters
> Int_t fClusters[24] offset=99999 type=23 Clusters Id's (in the
> station)
> i= 0, NaRecParticle type= 0, offset= 0, len=1, method=159232424
> i= 1, fNClusters type= 3, offset=99999, len=1, method=0
> i= 2, fClusters type= 23, offset=99999, len=24, method=0
>
> StreamerInfo for class: NaRecParticle, version=1
> BASE TObject offset= 0 type=66 Basic ROOT object
> Float_t fPXYZ[3] offset= 12 type=25 Px,Py,Pz of the
> Particle
> Float_t fVXYZ[3] offset= 24 type=25 x,y,z of the Particle
> beginning
> Float_t fMass offset= 36 type= 5 Imposed mass
> Float_t fPt offset= 40 type= 5 Particle Pt
> Float_t fYLab offset= 44 type= 5 Lab Rapidity
> Char_t fCharge offset= 48 type= 1 Particle charge
> Float_t fChi2 offset= 52 type= 5 Particle quality
> Int_t fNumber offset= 56 type= 3 Index in the Particles
> list
> Int_t fVertexId offset= 60 type= 3 Id of the vertex to
> which it is attached
> i= 0, TObject type= 66, offset= 0, len=1, method=0
> i= 1, fPXYZ type= 25, offset= 12, len=3, method=0
> i= 2, fVXYZ type= 25, offset= 24, len=3, method=0
> i= 3, fMass type= 5, offset= 36, len=1, method=0
> i= 4, fPt type= 5, offset= 40, len=1, method=0
> i= 5, fYLab type= 5, offset= 44, len=1, method=0
> i= 6, fCharge type= 1, offset= 48, len=1, method=0
> i= 7, fChi2 type= 5, offset= 52, len=1, method=0
> i= 8, fNumber type= 3, offset= 56, len=1, method=0
> i= 9, fVertexId type= 3, offset= 60, len=1, method=0
>
> *** Break *** segmentation violation
> Root > Function readrec() busy flag cleared
>
> Best reagrds,
> Ruben
>
> On Mon, 6 May 2002, Rene Brun wrote:
>
> > Ruben,
> >
> > Did you set the branch address before reading your Tree?
> > I see that the TStreamerInfo object for your base class
> > has not yet been computed when you read the branch.
> > This info should be computed when you set the address.
> >
> > In case you have correctly set the address (unlikely),
> > could you add the following statement before calling GetEntry:
> > NaPCMuon::Class()->GetStreamerInfo()->ls();
> >
> > Rene Brun
> >
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:52 MET