Thanks, I figured that was probably the convention. Unluckily our
code has quite a few "dots", but we can fix it.
BTW, I meant to write T->Draw("A.B[0]") and T->Draw("A.B[1]"), etc.
Robert
On Mon, 5 May 2003, Philippe Canal wrote:
> > Now, my questions: Is this a bug in TTreeFormula, or should
> > I be doing something else ? Perhaps my choice of variable
> > names ("A" and "A.B") is poor and should be avoided ?
>
> Hi,
>
> This is probably not clear enough in the document for TTree::Branch, however
> '.' is a reserved by TTree for its own purpose and should be avoided. As
> noted in the code '.' is used as a delimiter to indicates an actual
> sub-branch or a data member into a non-split branch. Hence the algorithm,
> on purpose, try to looks for 'B' inside the branch 'A'.
>
> Please use something like '_':
>
> mytree->Branch("A_B",arr2,"arr2[ndat]/D");
> mytree->Branch("X_B",arr2,"arr2[ndat]/D");
>
> Cheers,
> Philippe.
>
> -----Original Message-----
> From: owner-roottalk@pcroot.cern.ch
> [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Robert Michaels
> Sent: Monday, May 05, 2003 4:54 PM
> To: roottalk@pcroot.cern.ch
> Subject: [ROOT] Problem with TTree::Draw("A.B") if "A" is already a
> branch.
>
>
> Using ROOT 3.05/02 on Red Hat Linux 8.0 with
> gcc version 3.2 20020903 (Dell laptop C840).
>
> After executing the root macro example below, my problem
> is trying to Draw("A.B")
>
> root [2] T->Draw("A")
> <TCanvas::MakeDefCanvas>: created default TCanvas with name c1
> root [3] T->Draw("A.B")
>
> *ERROR 26 :
> Unknown name : "A.B"
>
> I think the reason for this is that in
> TTreeFormula::DefinedVariable(TString &name)
> at line 1787 there is a check
> if (cname[i] == '.' || cname[i] == '[' || cname[i] == '\0' ) {
> // A delimiter happened let's see if what we have seen
> // so far does point to a leaf.
> and then it proceeds to corrupt the string "A.B".
> I can make it work by eliminating the check for '.'
>
> Incidentally, for an older version of ROOT (3.02/06)
> the T->Draw("A.B") draws something, but it is the
> same data as T->Draw("A"), which is wrong since "A" is
> connected to arr1 and "A.B" to arr2. I don't want to
> worry about old ROOT versions, but I offer this info to
> hint at what has changed.
>
> Another point: T->Draw("X.B") works fine (for any
> version of ROOT I tried).
>
> Now, my questions: Is this a bug in TTreeFormula, or should
> I be doing something else ? Perhaps my choice of variable
> names ("A" and "A.B") is poor and should be avoided ?
>
> { // This example script illustrates my problem
>
> mytree = new TTree("T","My Tree");
>
> Int_t ndat = 50;
> Double_t *arr1 = new Double_t[ndat];
> Double_t *arr2 = new Double_t[ndat];
>
> mytree->Branch("ndata",&ndat,"ndat/I");
> mytree->Branch("A",arr1,"arr1[ndat]/D");
> mytree->Branch("A.B",arr2,"arr2[ndat]/D");
> mytree->Branch("X.B",arr2,"arr2[ndat]/D");
>
> for (Int_t iev = 0; iev < 100; iev++) {
> for (Int_t i = 0; i < ndat; i++) {
> arr1[i] = (Double_t) (i + 100*iev);
> arr2[i] = 2*arr1[i];
> }
> mytree->Fill();
> }
>
> }
>
> Thanks a bunch for reading this LONG inquiry !
> ------------------------------------------------------
> Robert W. Michaels
> www.jlab.org/~rom
> Thomas Jefferson National Accelerator Facility
> 12000 Jefferson Ave, Newport News, VA 23606 USA
>
>
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:11 MET