Hi Rene, Thanks for the help - your suggestion to add the + sign solves the problem of seg faults for multiple runs and the loading/unloading problem. However, when ACLiC creates the shared library, the messages: Info in <ACLiC>: creating shared library /home/morgan/Analysis/drift1/protodrift/TDriftEvent/./EventSelector_C.so Class EventSelector: Streamer() not declared Class EventSelector: ShowMembers() not declared Is this a problem? Also, when I make changes to EventSelector's ProcessCut() method and rerun Analyse.C, ACLiC recognises that changes have been made, but it fails to recreate the shared library correctly - it puts out the message: Warning in <ACLiC>: modified script has already been compiled and loaded Warning in <ACLiC>: it will be regenerated and reloaded! Function Analyse() busy. loaded after "/home/morgan/Analysis/drift1/protodrift/TDriftEvent/./EventSelector_C.so" Error: G__unloadfile() Can not unload "/home/morgan/Analysis/drift1/protodrift/TDriftEvent/./EventSelector_C.so", file busy FILE:Analyse.C LINE:18 I thought this might be due to the Process call being made within a for loop (this is line 18), so I made the selector external, as this alos saves ACLiC making checks on every pass through the loop. I've included the modified code below (ROOT v3.02/07 RH7.1 on Intel PC), but I still get the same error message as above - line 18 is still the start of the for loop. Again, any suggestions for a solution would be gratefully received! Thanks, Ben Morgan. #include <iostream.h> int Analyse() { char filedirectory[100]; char filename[100]; int lowrun, uprun; cout<<"Enter directory containing files to be analysed: "<<endl; cin>>filedirectory; cout<<"Enter run number bounds to be analysed: "; cin>>lowrun>>uprun; cout<<endl; TSelector *sel = TSelector::GetSelector("EventSelector.C+"); for(int i=lowrun; i<(uprun+1); i++) { if(gROOT->FindObject(filename)) delete gROOT->FindObject(filename); sprintf(filename,"%s/Trun0%d.root",filedirectory,i); cout<<"Start of loop for file "<<filename<<endl; TFile *f = new TFile(filename,"update"); cout<<"Address of Tfile Object is "<<f<<endl; TTree *t4 = (TTree*)f->Get("DriftEventData"); t4->Process(sel,"fillList"); cout<<"End of loop "<<i<<endl<<endl; } if(gROOT->FindObject(filename)) delete gROOT->FindObject(filename); return 0; } -- ------------------------------------------------------------------------------- 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:53 MET