Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooProduct.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * File: $Id: RooProduct.h,v 1.5 2007/05/11 09:11:30 verkerke Exp $
5 * Authors: *
6 * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7 * GR, Gerhard Raven, VU Amsterdan, graven@nikhef.nl *
8 * *
9 * Copyright (c) 2000-2007, Regents of the University of California *
10 * and Stanford University. All rights reserved. *
11 * *
12 * Redistribution and use in source and binary forms, *
13 * with or without modification, are permitted according to the terms *
14 * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15 *****************************************************************************/
16#ifndef ROO_PRODUCT
17#define ROO_PRODUCT
18
19#include "RooAbsReal.h"
20#include "RooListProxy.h"
21#include "RooObjCacheManager.h"
22
23#include <list>
24
25class RooRealVar;
26class RooArgList;
27
28
29class RooProduct : public RooAbsReal {
30public:
31
32 RooProduct() ;
33 RooProduct(const char *name, const char *title, const RooArgList& prodSet) ;
34 RooProduct(const char *name, const char *title, RooAbsReal& real1, RooAbsReal& real2) ;
35
36 RooProduct(const RooProduct& other, const char *name = nullptr);
37
38 void addTerm(RooAbsArg* term);
39
40 TObject* clone(const char* newname=nullptr) const override { return new RooProduct(*this, newname); }
41 bool forceAnalyticalInt(const RooAbsArg& dep) const override ;
43 const RooArgSet* normSet,
44 const char* rangeName=nullptr) const override ;
45 double analyticalIntegral(Int_t code, const char* rangeName=nullptr) const override;
46
47
49
50 const RooArgList& realComponents() const { return _compRSet; }
51 const RooArgList& categoricalComponents() const { return _compCSet; }
52
53 ~RooProduct() override ;
54
55 class ProdMap ;
56
57 void printMetaArgs(std::ostream& os) const override ;
58
59 std::list<double>* binBoundaries(RooAbsRealLValue& /*obs*/, double /*xlo*/, double /*xhi*/) const override ;
60 std::list<double>* plotSamplingHint(RooAbsRealLValue& /*obs*/, double /*xlo*/, double /*xhi*/) const override ;
61 bool isBinnedDistribution(const RooArgSet& obs) const override ;
62
63
64protected:
65
66 void ioStreamerPass2() override ;
67
70
72 public:
73 ~CacheElem() override;
74 // Payload
78 };
79 mutable RooObjCacheManager _cacheMgr ; ///<! The cache manager
80
81
82 double calculate(const RooArgList& partIntList) const;
83 double evaluate() const override;
84 void doEval(RooFit::EvalContext &) const override;
85
86 const char* makeFPName(const char *pfx,const RooArgSet& terms) const ;
87 ProdMap* groupProductTerms(const RooArgSet&) const;
88 Int_t getPartIntList(const RooArgSet* iset, const char *rangeName=nullptr) const;
89
90 ClassDefOverride(RooProduct,3) // Product of RooAbsReal and/or RooAbsCategory terms
91};
92
93#endif
#define ClassDefOverride(name, id)
Definition Rtypes.h:347
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
char name[80]
Definition TGX11.cxx:142
Common abstract base class for objects that represent a value and a "shape" in RooFit.
Definition RooAbsArg.h:76
Abstract base class for objects to be stored in RooAbsCache cache manager objects.
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
Abstract base class for objects that represent a real value and implements functionality common to al...
Definition RooAbsReal.h:63
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition RooArgList.h:22
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:24
Implementation of a RooCacheManager<RooAbsCacheElement> that specializes in the storage of cache elem...
RooArgList containedArgs(Action) override
Return list of all RooAbsArgs in cache element.
RooArgList _ownedList
Definition RooProduct.h:76
~CacheElem() override
Destructor.
Represents the product of a given set of RooAbsReal objects.
Definition RooProduct.h:29
std::list< double > * binBoundaries(RooAbsRealLValue &, double, double) const override
Forward the plot sampling hint from the p.d.f. that defines the observable obs.
void doEval(RooFit::EvalContext &) const override
Base function for computing multiple values of a RooAbsReal.
RooListProxy _compRSet
Definition RooProduct.h:68
double evaluate() const override
Evaluate product of input functions.
double analyticalIntegral(Int_t code, const char *rangeName=nullptr) const override
Calculate integral internally from appropriate partial integral cache.
void addTerm(RooAbsArg *term)
Add a term to this product.
std::list< double > * plotSamplingHint(RooAbsRealLValue &, double, double) const override
Forward the plot sampling hint from the p.d.f. that defines the observable obs.
ProdMap * groupProductTerms(const RooArgSet &) const
Group observables into subsets in which the product factorizes and that can thus be integrated separa...
double calculate(const RooArgList &partIntList) const
Calculate and return product of partial terms in partIntList.
bool forceAnalyticalInt(const RooAbsArg &dep) const override
Force internal handling of integration of given observable if any of the product terms depend on it.
const RooArgList & categoricalComponents() const
Definition RooProduct.h:51
const RooArgList & realComponents() const
Definition RooProduct.h:50
~RooProduct() override
Destructor.
bool isBinnedDistribution(const RooArgSet &obs) const override
Tests if the distribution is binned. Unless overridden by derived classes, this always returns false.
void ioStreamerPass2() override
Method called by workspace container to finalize schema evolution issues that cannot be handled in a ...
Int_t getPartIntList(const RooArgSet *iset, const char *rangeName=nullptr) const
Return list of (partial) integrals whose product defines the integral of this RooProduct over the obs...
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Declare that we handle all integrations internally.
void printMetaArgs(std::ostream &os) const override
Customized printing of arguments of a RooProduct to more intuitively reflect the contents of the prod...
const char * makeFPName(const char *pfx, const RooArgSet &terms) const
Construct automatic name for internal product terms.
TObject * clone(const char *newname=nullptr) const override
Definition RooProduct.h:40
RooProduct()
Default constructor.
RooObjCacheManager _cacheMgr
! The cache manager
Definition RooProduct.h:79
RooListProxy _compCSet
Definition RooProduct.h:69
RooArgList components()
Definition RooProduct.h:48
Variable that can be changed from the outside.
Definition RooRealVar.h:37
Mother of all ROOT objects.
Definition TObject.h:42