MakeClass() and TChain

From: Oliver Mang (mang@ifkhep.uni-kiel.de)
Date: Thu Aug 05 1999 - 15:08:55 MEST


Hi Rooters,
I'm having a problem with the class generated by MakeClass() and
initialization with a TChain. I start with a TChain object containing
several files and call MakeClass(). When I produce an object of this
class and start the Loop(), all branches (one leaf per branch) are read
as zeros. If I call TChain::Draw(), everything works as expected (i.e.
leaves are non-zero).

Another oddity: I start root, read the Classfile, set up the TChain, but
when I initialize the ClassObject with the Chain, I get a segfault. If I
call the Draw()-function first, the Object is initialized !?

------------- start session log ---------------------
ifkpe1> root
  *******************************************
  *                                         *
  *        W E L C O M E  to  R O O T       *
  *                                         *
  *   Version   2.22/09      19 July 1999   *
  *                                         *
  *  You are welcome to visit our Web site  *
  *          http://root.cern.ch            *
  *                                         *
  *******************************************

CINT/ROOT C/C++ Interpreter version 5.14.9, Jul 17 1999
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0] .L bllac.C    // contains macro open_all()
root [1] .L MyClass.C 
root [2] open_all("crab.root_list","bllac.root_list")  // set up TChain
root [3] MyClass *ana = new MyClass(con) 

 *** Break *** segmentation violation
Root > 
root [4] con->Draw("len")
Warning in <MakeDefCanvas>: creating a default canvas with name c1
root [5] MyClass *ana = new MyClass(con)
root [6] 
[...]
root [8] ana->Loop()   
Alpha: 0, 
 *** Break *** segmentation violation
Root > 
----------- end session log ------------------------

con is of type (TTree *) and points to the TChain.
The offending statement in MyClass::Loop() is obviously
b_alpha->GetEntry(i):

---- begin code snippet from MyClass::Loop() ----------
   for (Int_t i=0; i<nentries;i++) 
     {
       nb = fTree->GetEntry(i);   nbytes += nb;
       cout << "Alpha: " << alpha << ", ";
       b_alpha->GetEntry(i);
       cout << alpha << endl;
     }
---- end code snippet --------------------

Any help is highly appreciated. 
Regards, Oliver
--
Oliver Mang
Institut fuer Experimentelle und Angewandte Physik, CAU Kiel
Phone: ++49/431/880-2482	E-Mail: mang@ifkhep.uni-kiel.de
---------------------------------------------------------------
"The future is not what it used to be"



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:37 MET