Hi ROOTers,
I have some ROOT files, each containing a TTree that holds
events. I've generated MakeClass code, RawClass, to read these TTrees, and
added a method HistEvent(Int_t entry) to draw out some parameters for
each event and plot these in a canvas.
I've been trying to write a named script to loop over several
files and plot each event in turn using HistEvent (code included below).
For each file I create the RawClass object, and then loop over the entries
with HistEvent being called for each one. As I want to pause between each
event to study the canvas, I added a cin.get(). However, running the code
produces the following seg fault:
root [0] .L libTDriftData.so (Load appropriate library for TTree)
root [1] .L RawClass.C
root [2] .L rdplotevents.C
root [3] rdplotevents()
Enter path to directory containing runXXXXX.root files:
/driftdata0/data5/raw
Enter run number bounds to plot events over: 5000 5010
Plotting Events from file /driftdata0/data5/raw/run05000.root
*** Break *** segmentation violation
Root > Function rdplotevents() busy flag cleared
Function HistEvent() busy flag cleared
This appears to be something to do with the inner for loop, as I have
another very similar (perfectly working) script that calls the Loop()
method of RawClass at the same point as the inner for loop. I'm using
ROOT v3.02/07 on a PC running RH7.1. Any
suggestions for a solution will be gratefully received! Thanks,
Ben Morgan.
#include<iostream.h>
Int_t rdplotevents()
{
char filedirectory[100];
char filename[100];
Int_t lowrun, uprun;
cout<<"Enter path to directory containing runXXXXX.root files: "<<endl;
cin>>filedirectory;
cout<<"Enter run number bounds to plot events over: ";
cin>>lowrun>>uprun;
cout<<endl;
for(Int_t i=lowrun; i<(uprun+1); i++)
{
if(i<10000) sprintf(filename,"%s/run0%d.root",filedirectory,i);
else sprintf(filename,"%s/run%d.root",filedirectory,i);
cout<<"Plotting Events from file "<<filename<<endl;
//Open File, Get Tree and make RawClass object
TFile *f = new TFile(filename,"read");
if(f->IsZombie())
{
cout<<"File "<<filename<<" does not exist, continuing....."<<endl;
continue;
}
TTree *t1 = (TTree*)f->Get("DriftRawData");
RawClass *RC = new RawClass(t1);
Int_t nentries = (Int_t)(RC->fChain->GetEntries());
for(Int_t j=0; j<nentries; j++)
{
RC->HistEvent(j);
cin.get();
}
delete RC;
}
return 0;
}
--
-------------------------------------------------------------------------------
Mr. Ben Morgan Tel: 44 (0)114 22 23553 (Work)
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:51:03 MET