Hi ROOTers, I have a raw data class for my experiment, and have used MakeClass to generate the skeleton code to read the data from the tree. I'm now trying to add a method to the MakeClass skeleton (which I assume is o.k. to do) to graph some of the data from each event. The problem is that the number of graphs for each event is different (the data is voltage traces from a wire chamber). Also, as there may be as many as thirty traces to graph per event, and I want to look at many events, I need to make sure any preceeding graphs are deleted every time this method is called. In my code (included below), I set an array of pointers to TGraph objects, name the graphs and add these to the current directory (following the example in http://root.cern.ch/root/roottalk/roottalk01/0759.html). Without any delete statements, the code runs fine and generates the required number of TGraphs (using gObjectTable->Print()), and gDirectory->Get("name of Graph") returns a non null pointer (although there is of course a memory leak). However, when I try to delete these graphs by using gDirectory->Delete("name of Graph"), the graphs are deleted (looking at gObjectTable), but after executing the method several times, it falls over with a segmentation violation: *** Break *** segmentation violation Root > Function GraphEvent() busy flag cleared I've also tried getting the graph pointers, casting them to a TGraph and then deleting, but this produces the same seg violation. I'm using ROOT v3.01/06 on a PC running RH6.2, any advice on what's causing the problem would be very gratefully received! Thanks, Ben Morgan. void RawDataClass::GraphEvent(Int_t entry) { b_fNwire->GetEntry(entry); b_fNchan->GetEntry(entry); b_fWaveform->GetEntry(entry); if(fNwire>8) { cout<<"Event has more than eight active wires, try again"<<endl; return; } char name[20]; char title[100]; const Int_t a = fNwire; for(Int_t i=0; i<8; i++) { sprintf(name,"Wire%d",i); gDirectory->Delete(name); } cout<<"Number of Active Wires = "<<fNwire<<endl; TGraph *G[a]; for(Int_t i=0; i<fNwire; i++) { sprintf(name,"Wire%d",i); G[i] = new TGraph(fNchan); G[i]->SetName(name); gDirectory->GetList()->Add(G[i]); } } -- ------------------------------------------------------------------------------- Mr. Ben Morgan Postgraduate Student University of Sheffield Department of Physics & Astronomy Hicks Building Hounsfield Road Sheffield S3 7RH -------------------------------------------------------------------------------
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:45 MET