Hi, I am finding that when doing a TTree::Draw() an "or"ed cut is failing to act as I expect it should, leading to bogus results. Our top level tree object is like: class TTreeSR : public TObject { public: ... EventSRHeader evthdr; // contains "hdr.ntrack" holding # of tracks TClonesArray* trk; // TrackSRTTree ... }; class TrackSRTTree : public TObject { public: ... Float_t ds; ... }; I am trying to plot the number of tracks (A UShort_t in "evthdr.ntrack") for all events which either have 0 tracks or have >0 tracks but have a certain value, ds<1.0. This "ds" is held as a Float_t in a data member of the "TrackSRTTree" elements of the "trk" TClonesArray. The two commands I use are: 1) tree->Draw("evthdr.ntrack"); 2) tree->Draw("evthdr.ntrack","evthdr.ntrack==0||trk[0].ds<1.0"); or more explicitly: 2') tree->Draw("evthdr.ntrack","evthdr.ntrack==0||(evthdr.ntrack==1&&trk[0].ds<1.0)") In the first case the data populates the ntrack==0 and 1 bins. In both of the second cases, only bin ntracks==1 is populated. There is a test file (14.4 MB): http://minos.phy.bnl.gov/~bviren/minos/mc/gminos/test.root Using it, this session should reproduce the problem: root [1] TFile f("test.root") root [2] TTree* t = (TTree*)f.Get("reco") root [3] t->Draw("evthdr.ntrack") root [4] t->Draw("evthdr.ntrack","evthdr.ntrack==0||trk[0].ds<1.0") root [5] t->Draw("evthdr.ntrack","evthdr.ntrack==0||(evthdr.ntrack==1&&trk[0].ds<1.0)") This is with today's CVS on x86, GCC 3.2. -Brett.
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET