In an executable program linked to root I'm filling
a "TTree* fEventTree" with events and want to
write the fEventTree to a "TFile* fEventFile".
As soon as I close the file it seems that fEventTree is automatically
deleted. The fEventFile is created and correctly closed, but it does not
contain fEventTree data. Then Loading the file is possible, but looking
at the data gives a segmentaion fault.
Here is the fEventTree before filling and then after filling.
************************************************************************************
*Tree :T : GroupData
*
*Entries : 0 : Total Size = 0 bytes File Size =
0 bytes *
* : : Tree compression factor = 1.00
*
************************************************************************************
*Branch :fEvent : fEvent
*
*Entries : 0 : BranchObject (see below)
*
*..................................................................................*
*Branch :fNplane : fNplane
*
*Entries : 0 : Total Size = 0 bytes File Size =
0 bytes *
*Baskets : 0 : Basket Size = 64000 bytes Compression= 1.00
*
*..................................................................................*
*Branch :fDummy : fDummy
*
*Entries : 0 : Total Size = 0 bytes File Size =
0 bytes *
*Baskets : 0 : Basket Size = 64000 bytes Compression= 1.00
*
*..................................................................................*
*Branch :fUniqueID : fUniqueID
*
*Entries : 0 : Total Size = 0 bytes File Size =
0 bytes *
*Baskets : 0 : Basket Size = 64000 bytes Compression= 1.00
*
*..................................................................................*
*Branch :fBits : fBits
*
*Entries : 0 : Total Size = 0 bytes File Size =
0 bytes *
*Baskets : 0 : Basket Size = 64000 bytes Compression= 1.00
*
*..................................................................................*
DSession, fEventTree is setup and will be filled with fEvent
************************************************************************************
*Tree :T : GroupData
*
*Entries : 500 : Total Size = 0 bytes File Size =
0 bytes *
* : : Tree compression factor = 1.00
*
************************************************************************************
*Branch :fEvent : fEvent
*
*Entries : 500 : BranchObject (see below)
*
*..................................................................................*
*Branch :fNplane : fNplane
*
*Entries : 500 : Total Size = 0 bytes File Size =
0 bytes *
*Baskets : 0 : Basket Size = 64000 bytes Compression= 1.00
*
*..................................................................................*
*Branch :fDummy : fDummy
*
*Entries : 500 : Total Size = 0 bytes File Size =
0 bytes *
*Baskets : 0 : Basket Size = 64000 bytes Compression= 1.00
*
*..................................................................................*
*Branch :fUniqueID : fUniqueID
*
*Entries : 500 : Total Size = 0 bytes File Size =
0 bytes *
*Baskets : 0 : Basket Size = 64000 bytes Compression= 1.00
*
*..................................................................................*
*Branch :fBits : fBits
*
*Entries : 500 : Total Size = 0 bytes File Size =
0 bytes *
*Baskets : 0 : Basket Size = 64000 bytes Compression= 1.00
*
*..................................................................................*
DSession, fEventTree->Print() was correct
DSession, now fFile->Close()
DSession, fEventTree->Print() will give segment fault
*** Break *** segmentation violation
( 0) 0xc0f17d40 StackTrace__11TUnixSystemFv + 0x28
[/afs/cern.ch/na49/library/local/ROOT/hpux10aCC/root/lib/libUnix.sl]
( 1) 0xc0f167f0 DispatchSignals__11TUnixSystemF8ESignals + 0xd0
[/afs/cern.ch/na49/library/local/ROOT/hpux10aCC/root/lib/libUnix.sl]
( 2) 0xc0f153a8 SigHandler__F8ESignals + 0x28
... and so on...
Here is the part of the code (nearly from root's wwwpage),
which gave the above output:
void DSession::WarmStart(){
// this is the initialization part
// Create a new ROOT binary machine independent file.
// Note that this file may contain any kind of ROOT objects, histograms,
// pictures, graphics objects, detector geometries, tracks, events, etc..
// This file is now becoming the current directory.
Int_t tCompressionLevel = 1;
fFile = new TFile("GroupData.root","RECREATE","GroupDT");
fFile->SetCompressionLevel(tCompressionLevel);
fEvent = new DEvent(); // declared in DSession.h as DEvent* fEvent;
fEventTree = new TTree("T","GroupData");
// decleared in DSession.h as TTree* fEventTree;
fEventTree->SetAutoSave(1000000); // autosave when 1 Mbyte written
Int_t tBufSize = 64000;
Int_t tSplitLevel = 1;
fEventTree->Branch("fEvent", "DEvent", &fEvent, tBufSize, tSplitLevel);
fEventTree->Print();
printf("DSession, fEventTree is setup and will be filled with fEvent \n");
}
//______________________________________________________________________________
//
void DSession::Loop(){
// here load rawevents from a file and fill events which are put
// into another file
while(NextRawEvent() == kTRUE) {
fEventTree->Fill(); // here the tree is filled
}
fEventTree->Print();
printf("DSession, fEventTree->Print() was correct \n");
printf("DSession, now fFile->Close()\n");
fFile->Close();
printf("DSession, fEventTree->Print() will give segment fault \n");
fEventTree->Print();
}
The TFile GroupData.root is generated, but looking at it gives
segment fault:
root [1] TFile *f("GroupData.root");
root [2] f.ls();
*** Break *** segmentation violation
( 0) 0xc0f17d40 StackTrace__11TUnixSystemFv + 0x28
[/afs/cern.ch/na49/library/local/ROOT/hpux10aCC/root/lib/libUnix.sl]
( 1) 0xc0f167f0 DispatchSignals__11TUnixSystemF8ESignals + 0xd0
[/afs/cern.ch/na49/library/local/ROOT/hpux10a
thanks for any help
Dirk