Hi,
If a TTree has a branch contained an object, TTree::Scan() and
TTree::Draw() methods can invoke methods of the object. I see it with my
custom class. If I try to pass TClonesArray::GetSize() as an argument of
TTree::Scan(), I get an error. I attached a script to reproduce the
problem. Its output:
$ root TClonesArray-GetSize.C
*******************************************
* *
* W E L C O M E to R O O T *
* *
* Version 4.00/08 3 September 2004 *
* *
* You are welcome to visit our Web site *
* http://root.cern.ch *
* *
*******************************************
FreeType Engine v2.1.3 used to render TrueType fonts.
Compiled for linux with thread support.
CINT/ROOT C/C++ Interpreter version 5.15.138, May 23 2004
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0]
Processing TClonesArray-GetSize.C...
Error in <TTreeFormula::DefinedVariable>: Unknown method:GetSize()
*ERROR 30 :
Bad numerical expression : "tca.GetSize()"
************************
* Row * tca.GetSi *
************************
* 0 * *
* 1 * *
* 2 * *
************************
root [1]
I'm expecting 3, 1, 2 values in the table. I can't find detailed
explanation of the invocation mechanism and its limitations.
--
Maxim Nikulin
{
// TTree::Scan(TClonesArray::GetSize())
tree = new TTree("tree", "Draw(TCLonesArray::GetSize()) trouble");
tca = new TClonesArray("TObjString", 10);
tree->Branch("tca", "TClonesArray", &tca);
new((*tca)[0]) TObjString("e0s0");
new((*tca)[1]) TObjString("e0s1");
new((*tca)[2]) TObjString("e0s2");
tree->Fill();
tca->Clear();
new((*tca)[0]) TObjString("e1s0");
tree->Fill();
tca->Clear();
new((*tca)[0]) TObjString("e2s0");
new((*tca)[1]) TObjString("e2s1");
tree->Fill();
tca->Clear();
tree->Scan("tca.GetSize()");
}
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET