[ROOT] Problem (?) with MakeSelector

From: Ben Morgan (B.Morgan@sheffield.ac.uk)
Date: Tue May 21 2002 - 17:06:29 MEST


Hi ROOTers,
           I'm currently writing a named script (ROOT v3.02/07 on Linux 
PC running RH7.1) to perform cuts a series 
of files, each one containing a tree holding the data objects. I've used 
MakeSelector to build the skeleton selector code for this tree. Due to the 
nature of the data, I want to analyse each file separately and then 
append the TEventList generated by the MakeSelector code to this file. My 
script loops over each file in turn (I've included the script code below), 
but each time the line "t4->Process(...);" is executed, I get the error 
message:

Function Analyse() busy. loaded after 
"/home/morgan/Analysis/drift1/protodrift/TDriftEvent/./Analyse.C"
Error: G__unloadfile() Can not unload 
"/home/morgan/Analysis/drift1/protodrift/TDriftEvent/./Analyse.C", file 
busy  FILE:Analyse.C LINE:21
*** Interpreter error recovered ***

This doesn't seem to affect the execution (first time), but if I try to 
execute it again, I get the error message:

Function Analyse() busy. loaded after "/cern/root/lib/libProof.so"
Error: G__unloadfile() Can not unload "/cern/root/lib/libProof.so", file 
busy  FILE:Analyse.C LINE:32
*** Interpreter error recovered ***

Also, on second execution, the script falls over with a seg fault that 
seems to be due to how I write the list to the file (I use Write with the 
fOverwrite option because I'm tuning cuts and only want one list in 
there), I've included the 
relevant code fragments from the selector code below as well. I'm making 
some really simple mistake, but any help would be very gratefully 
received! Thanks,

Ben Morgan.

CODE FOR ANALYSE
------------------------------------------------------------------------------
#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;

  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("EventSelector.C","fillList");

      cout<<"End of loop "<<i<<endl<<endl;
    }

  if(gROOT->FindObject(filename))
    delete gROOT->FindObject(filename);

  return 0;
}
-------------------------------------------------------------------------------

MAKESELECTOR FUNCTIONS
-------------------------------------------------------------------------------
TEventList *clist = 0;
Bool_t useList, fillList;

void EventSelector::Begin(TTree *tree)
{
   // Function called before starting the event loop.
   // Initialize the tree branches.

   Init(tree);

   TString option = GetOption();
   fillList=kFALSE;
   useList=kFALSE;
   fChain->SetEventList(0);
   delete gDirectory->GetList()->FindObject("clist");

   if (option.Contains("fillList")) {
      fillList = kTRUE;
      clist = new TEventList("clist","selection from Cut",5000);
    }

   if (option.Contains("useList")) {
      useList  = kTRUE;
      TFile *f = fChain->GetCurrentFile();
      elist = (TEventList*)f.Get("clist");
      if (elist) elist->SetDirectory(0);
      fChain->SetEventList(clist);
   }


   cout<<"In Selector, current file is: "<<fChain->GetCurrentFile()<<endl;

}


void EventSelector::Terminate()
{
   // Function called at the end of the event loop.

  if(fillList)
    { 
       cout<<"Writing (Rewriting) List to File"<<endl;
       clist->Write("clist",TObject::kOverwrite);
    }

  cout<<"Termintate Selector Loop"<<endl;

}


-- 
-------------------------------------------------------------------------------
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