Hello, reading two events from a TTree I find the following behaviour root [0] .x anal.C // this is my analysis macro EventNumber : 1 // print the event counter, and now do Dump() fHeader.fEventNumber 256 fHeader.fRunNumber 288 fHeader.fDate 970723 fHeader.fTime 133445 fHeader.fMTime 2036085 fHeader.fType 1 fNentry 15 *fData ->4046b198 fUniqueID 0 object unique identifier fBits 50331648 bit field status word // now I dump a second event fHeader.fEventNumber 257 fHeader.fRunNumber 288 fHeader.fDate 970723 fHeader.fTime 133445 fHeader.fMTime 2036085 fHeader.fType 1 fNentry 19 *fData ->4046b198 fUniqueID 0 object unique identifier fBits 50331648 bit field status word this is fine, but as soon as I fprint() e.g. a counting variable in between reading both events I receive segmentation fault, here the macro { ////////////////////////////////////////////////////////// // This file has been automatically generated // (Sun Mar 1 13:07:33 1998 by ROOT version 1.03/09) // from TTree T/RD42/DIME/July97/Preliminary // found on file: /online/vsrd04/user/diamond/data/DSF288_980228.root ////////////////////////////////////////////////////////// //Reset ROOT and connect tree file gROOT->Reset(); TFile *f = new TFile("/online/vsrd04/user/diamond/data/DSF288_980228.root"); TTree *T = (TTree*)f->Get("T"); //Declaration of leaves types DEvent *fEvent = 0; Int_t fHeader_fEventNumber; Int_t fHeader_fRunNumber; Int_t fHeader_fDate; Int_t fHeader_fTime; Int_t fHeader_fMTime; Int_t fHeader_fType; Int_t fNentry; Int_t fData_; Int_t fData_fPlaneNumber[24]; Int_t fData_fNhits[24]; Int_t fData_fHitNumber[24]; // ... and so on UInt_t fUniqueID; UInt_t fBits; //Set branch addresses T->SetBranchAddress("fEvent",&fEvent); T->SetBranchAddress("fHeader.fEventNumber",&fHeader_fEventNumber); T->SetBranchAddress("fHeader.fRunNumber",&fHeader_fRunNumber); T->SetBranchAddress("fHeader.fDate",&fHeader_fDate); T->SetBranchAddress("fHeader.fTime",&fHeader_fTime); T->SetBranchAddress("fHeader.fMTime",&fHeader_fMTime); T->SetBranchAddress("fHeader.fType",&fHeader_fType); T->SetBranchAddress("fNentry",&fNentry); T->SetBranchAddress("fData_",&fData_); T->SetBranchAddress("fData.fPlaneNumber",fData_fPlaneNumber); T->SetBranchAddress("fData.fNhits",fData_fNhits); T->SetBranchAddress("fData.fHitNumber",fData_fHitNumber); // and so on T->SetBranchAddress("fData.fBits",fData_fBits); T->SetBranchAddress("fUniqueID",&fUniqueID); T->SetBranchAddress("fBits",&fBits); // This is the loop skeleton // To read only selected branches, Insert statements like: //T->SetBranchStatus("*",0); //T->SetBranchStatus("fHeader",1); //T->SetBranchStatus("fData",1); DEvent *fEvent = new DEvent(); // declare and create like // in Event example TClonesArray *fData = fEvent->GetData(); // like in Event::GetTracks() TBranch *branch = T->GetBranch("fEvent"); branch->SetAddress(&fEvent); Int_t nentries = T->GetEntries(); Int_t n = 1; Int_t m = 2; printf("EventNumber : %d\n",n); // accessing n still works T->GetEvent(n); // after this GetEvent(), // I can not access n or // any other variable any more fEvent->Dump(); // this works and Dumps as shown //printf("EventNumber : %d\n",m);// <-- this print causes seg. fault // also looping over events causes seg.fault T->GetEvent(2); // <-- also T->GetEvent(m) would cause // seg.fault!!!, but T->GetEvent(2) // works instead. fEvent->Dump(); } At the end I need to access values in the TClonesArray* fData (analog to the TClonesArray* track examples in the tutorial) thank you for any help Dirk
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:30 MET