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