Hi Ben, Add one more "+", ie: TSelector *sel = TSelector::GetSelector("EventSelector.C++"); With one single "+", ACLIC will take the previous shared lib even if one of the files referenced by EventSelector.C has been modified. The "++" forces recompilation and relinking of the shared lib. The messages from ACLIC are OK (are removed in 3.03). Rene Brun Ben Morgan wrote: > > 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