Ludger Janauschek wrote: > > Hello, > > inspired by the mail below from Thierry to roottalk I tried this on my on. > As described Tree::Draw works fine with methods of the event class. And > "when I add a cut, I just change the shared library" > is very nice. > > But Tree::Draw does not work on public data elements of the event class. > > Using the for everyone available program > $ROOTSYS/test/Event and > $ROOTSYS/test/libEvent.so > the problem shows as the follwing: > > ---------------------------------------------------------------------- > $ROOTSYS/test/Event 400 1 0 1 > ^ > split = 0 > ---------------------------------------------------------------------- > root [0] gSystem->Load("libEvent.so"); > root [1] TFile *f = new TFile("Event.root"); > root [2] T->Draw("event.GetNtrack()"); > Warning in <MakeDefCanvas>: creating a default canvas with name c1 > // T->Draw("event.GetNtrack()") seems to work well > root [3] T->Draw("event.fNtrack"); > > *** Break *** segmentation violation > > Error: No symbol T->Draw("event.fNtrack") in current scope FILE:./08870faa LINE:1 > *** Interpreter error recovered *** > root [5] > ---------------------------------------------------------------------- > (root 2.00/13 for Linux RH 4.2, AIX 4.1) > > Do I have to write get-functions for each data element of the event class? > Hi Ludger, Yes, I agree, that this should work in case of a public data member. I did not implement this case assuming that data members should be private or protected. I could also implement this facility for private/protected members. It would be nice also from the browser to histogram any member of an object in case of non-split mode. Rene Brun > +-------------------------------------------------------------------+ > > On Thu, 3 Sep 1998, T Auger wrote: > > > [...snip...] > > > > It makes a lot of sense to be able to add leaves to a tree after it > > was created, at one point I wanted to do that myself. However, I use a > > different approach which can be useful for small event size type analysis. > > To be able to use the tree.Draw() function and make cuts on it, I > > defined a Event class which does contain method returning invariant > > masses, missing masses, angles for certain type of particle, etc... : > > > > Float_t TClasEvent::InvM_gp() { > > ... > > return(inv_mass); > > } > > > > Then when creating the tree, I use the split switch set to 0. That > > way, the event is saved as a TObject and is no longer a collection of > > leaves. Then when I want to draw a quantity I simply need to call the > > method I defined InvM_gp() like that : > > T.Draw("event.InvM_gp()","event.InvM_gp()>0&&event.Mm_ppip()>0.5") > > > > All of that works because I store the event with the non-split method. > > > > Therefore, I do not want to store these kinematic quantities anymore > > since I can recalculate them on the fly. > > Of course the drawback is that I have to read back the entire event > > from the file which means that it takes longer to draw my > > histograms. But I still prefer it because, I do not need to re-create > > my tree when I add a cut, I just change the shared library TClasEvent that I > > created. > > > > hope this helps, > > Thierry > >
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:39 MET