SLAC PEP-II
BABAR
SLAC<->RAL
Babar logo
HEPIC E,S & H Databases PDG HEP preprints
Organization Detector Computing Physics Documentation
Personnel Glossary Sitemap Search Hypernews
Unwrap page!
Comp. Search
Who's who?
Meetings
FAQ Homepage
Archive
Environment
Administration
New User Info.
Web Info/Tools
Monitoring
Training
Tools & Utils
Programming
C++ Standard
SRT, AFS, CVS
QA and QC
Remedy
Histogramming
Operations
PromptReco
Simulation Production
Online SW
Dataflow
Detector Control
Evt Processing
Run Control
Calibration
Databases
Offline
Workbook
Coding Standards
Simulation
Reconstruction
Prompt Reco.
BaBar Grid
Data Distribution
Beta & BetaTools
Kanga & Root
Analysis Tools
RooFit Toolkit
Data Management
Data Quality
Event display
Event Browser
Code releases
Databases
Check this page for HTML 4.01 Transitional compliance with the
W3C Validator
(More checks...)

RooFitDalitz

BABAR Main Page

RooFitDalitz design

RooFit

RooFit comes with many bells and whistles, such as plotting, automatic PDF normalization, support for analytic integrals. But at its core its a MINUIT based unbinned maximum likelihood fitter based on ROOT's TFitter.

In RooFit the fitting function is specified by building a dependency tree at the top of which is a PDF object derived from RooAbsPdf. RooFit can compute the normalization by numeric or where appropriate analytic integration and builds a negative log likelihood object RooNLLVar. The interface into ROOT is through the RooMinuitGlue which is set in class RooMinuit.

All tree nodes derive from RooAbsArg class, which encapsulates the Observer-Observable pattern (Client-Server in RooFit terminology). Each node has an associated value. When the value of an observable changes, the change propagates to the top of the tree and the values of all affected nodes are recalculated.

Essentially the fitter tries different values for the leaf nodes that represent the parameters that are being fit. The change propagates forcing the recalculation of the affected nodes higher up the tree. For unaffected nodes, precalculated (cached) values can be used. The negative log likelihood thus calculated is passed back to the fitter.

RooFit only allows real-valued parameters. There are also 'categories' e.g. signal/background. Categories can be also used as integer variables, but they are somewhat inconvenient because each possible value has to be explicitely defined.

RooFitDalitz

In Dalitz plot fitting one has to work with complex valued amplitudes, but there is no support for complex valued objects in RooFit (the reason of course is that TFitter only handles real-valued parameters).

RooFitDalitz (RFD) extends RooFit to handle objects that are not real-valued. A templated class RfdAbsVar<T> is introduced. It derives from RooAbsArg and so can be used in the dependency tree, but the value that it holds is an arbitrary type T. Complex-valued nodes derive from RfdAbsVar<RooComplex>, or a node holding a Dalitz point object would derive from RfdAbsVar<EvtDalitzPoint>. This gives more flexibility in constructing dependency trees.

RFD also introduces RfdAbsPtr<T> objects that can be inserted in the tree. They essentially hold pointers to outside objects of type T. This can help bridge code from other packages into the tree. RfdAbsPtr<EvtAmplitude<T>> derived objects allow using Dalitz plot amplitude descriptions from the EvtGen package. The most simple leaf objects are RfdDummyPtr<T> which hold a pointer to an immutable object of type T.

A PDF model can be build using RFD extensions and regular RooFit classes. It is then handed of to RooFit. It performs PDF normalization using vegas algorithm for adaptive MC integration, constructs the NLL variable and builds the glue fit function which is in turned passed to ROOT's TFitter for a MINUIT fit. This is what goes on "under the hood."

Last update: Alexei Dvoretskii, Wed Jul 23 15:54:59 PDT 2003 Top