Hi Dario, { Int_t i; TFile * f ; TTree *h2; //<=== TString file; gROOt->ProcessLine(".L myselect.C"); //<==== for (i=1; i<3; i++ ) { file = "/vtx4/menasce/k4pi_" ; file += i ; file += ".root" ; f=TFile::Open(file.Data()) ; h2 = (TTree*)f->Get("h2"); //<=== h2.Print(); h2->Process("myselect()") ; f->Close() ; } } You can ignore the warning printed by CINT. In principle, an interpreted class cannot derive from a comnpiled class. However, if the derived class does not redefine virtual functions of the base class, it is OK. You can also use ACLIC, replacing the gROOT line with gROOT->ProcessLine(".L myselect.C++"); Rene Brun Dario Menasce wrote: > > Dear Rooters, > I have two ntuple files converted by h2root from PAW to Root format, > k4pi_1.root and k4pi_2.root. The idea is to loop over the two files and > fill > histograms based upon cuts. > > If I do the following interactively it works just fine: > > root[] f = TFile::Open("/vtx4/menasce/k4pi_1.root"); > root[] h2.Print(); > root[] h2->Process("myselect.C") ; > root[] f->Close() ; > root[] f = TFile::Open("/vtx4/menasce/k4pi_2.root"); > root[] h2.Print(); > root[] h2->Process("myselect.C") ; > root[] f->Close() ; > > This is cumbersome, so I try something fancier, like the following, > which > crashes the interpreter: > > { > Int_t i; > TFile * f ; > TString file; > for (i=1; i<3; i++ ) { > file = "/vtx4/menasce/k4pi_" ; > file += i ; > file += ".root" ; > f=TFile::Open(file.Data()) ; > h2.Print(); > h2->Process("myselect.C") ; > f->Close() ; > } > } > > What happens is that, after the expected display of h2.Print() I get the > following message on screen: > > root[] .x example.cc > > ... output from the first iteration, which works fine... > ... output from the second iteration is just the result of > h2.Print(); > ... after that, I get: > > reloading /vtx4/menasce/./myselect.C 0 > Warning: Interpreted class myselect derived from precompiled class > TSelector FILE:myselect.h LINE:17 > !!!There are some limitations regarding compiled/interpreted class > inheritance > reloading myselect.h 0 > > *** Break *** segmentation violation > > During these attempts I never changed myselect.C which is just the > skeleton > provided by MakeSelector (I just removed comments for readability): > > #define myselect_cxx 1 > #include "myselect.h" > #include "TH2.h" > #include "TStyle.h" > #include "TCanvas.h" > > void myselect::Begin(TTree *tree) > { > Init(tree); > cout << "Init" << endl; > } > > Bool_t myselect::ProcessCut(Int_t entry) > { > fChain->GetTree()->GetEntry(entry); > return kTRUE; > } > > void myselect::ProcessFill(Int_t entry) > { > } > > void myselect::Terminate() > { > cout << "Terminate" << endl; > } > > Any suggestion? By the way, does a template exist on how to proceed > in a general case, where one has a set of large ntuples files (derived > by > old data in paw) and one needs to loop over them, apply cuts, fill > histograms > and save those histograms for fitting? > > Thanks in advance > > -- > +------------------------------------------------------------------------+ > | Dario Menasce, INFN Milano, via Celoria 16, Italy Tel: +39 02 58357322 > | > | > | > | WEB home page: http://sgimida.mi.infn.it/~menasce/home.html > | > | > | > | In a world without fences and walls, who needs Windows and Gates? > | > +------------------------------------------------------------------------+ > > -------------------------------------------------------------------------------- > > Name: Dario.Menasce.vcf > Dario.Menasce.vcf Type: VCard (text/x-vcard) > Encoding: 7bit > Description: Card for Dario Menasce
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:02 MET