Hi Andre, I was looking through the roottalk archives and saw your post at the bottom of this email. I saw Rene's reply, but thought I'd tell you what I do. I create TTreeFormulas (as you suggested). I then add these formulas to the Root list of functions: TSeqCollection* ListOfFuncs = gROOT->GetListOfFunctions(); f1 = new TTreeFormulas(.....); f2 = new TTreeFormulas(.....); ... ListOfFuncs->Add(f1); ListOfFuncs->Add(f2); ... In fact, I wrote a macro which defines all my "functions" for me, and in it I wrote a function "formulate()" which takes the TTreeFormula arguments and automatically creates and adds the function to the global list. It works not only for selections but for drawing purposes and it's great! My macro defines ~1000 functions this way :-) I'd be happy to send you the macro so you can see what I do if you'd like. The power of this is fantastic because you can make new formulas that use the other formulas. It thus becomes similar to writing a C++ class of member functions using the data members of the class (tree) as a base. In this way, I have "implemented" all the member functions for any functions I would have wanted to make hsitograms of in a way that they can be used with TTree::Draw, which can be MUCH faster than using MakeClass-created event loops. Depends on how many of the tree variables you use and if the TTree is on a file. -Gene Van Buren --------------------------------------------- You wrote: Hello rooters, I have some TTree of events. For each event, I'd like to perform a complex calculation (e.g. calculate the value of a pdf based on a variable in the event or combine multiple pdf values). I currently have a method in this calculation class to which I can give a TTree and it plots the distribution of this value (possibly after some cuts). However, I would find it much more convenient, if I could use such a calculation directly in TTree::Draw (as a value, as a cut would also be useful !). I'm thinking of the following example: TTree *signal_events, *background_events, *data_events; ... MyCalculation *calc = new MyCalculation; calc->calculate_pdfs_from_mc(signal_events,background_events); calc->SetName("final_discriminant"); ... data_events->Draw("final_discriminant"); data_events->Draw("mass","final_discriminant>0.9"); So here's my question: Is it possible in root to have a class (which e.g. inherits from TTreeFormula ??) which can be registered in some dictionary and then can be used in TTree::Draw in an expression ? thanks for the advice, André
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:04 MET