Dear ROOters,
I am following the example “Event” in the test directory in order to write my own data layout and see the features of objects saved in a TTree. I am using ROOT v6.02.12.
I generated a ROOT file with 20 events using the maximum splitting (99) option to test which queries are allowed in TTree::Scan() or TTree::Draw().
I noticed that they have access to methods of the class ‘‘Track’’, embedded in ‘‘Event’’ via a ‘‘TClonesArray’’, while they have no access to the methods of the class ‘‘EventHeader’’, directly embedded in ‘‘Event’’.
In other words:
root [4] T->Scan("GetPx()") //I do not even need the full "fTracks.GetPx()"
***********************************
* Row * Instance * GetPx() *
***********************************
* 0 * 0 * 0.8419713 *
* 0 * 1 * 2.3338847 *
[...]
root [8] T->Scan("fEvtHdr.GetEvtNum()")
Error in <TTreeFormula::Compile>: Bad numerical expression : "fEvtHdr.GetEvtNum()"
************************
* Row * fEvtHdr.G *
************************
* 0 * *
* 1 * *
[...]
What is preventing the method access for the class ''EventHeader"? What is the “rule”?
- The fact that it is not deriving from TObject? (In a quick test I does not seem the case)
- Some declaration in the LinkDef file? (but the #pragma instruction is the same)
- Just the fact that it is a direct member of the ‘‘Event’’ class instead or being embedded via a TClonesArray? What is the workaround if this is the case?
Thanks in advance for the clarifications,
Matteo