/***************************************************************************** * Project: RooFit * * Package: RooFitCore * * File: $Id: RooAddPdf.h,v 1.46 2007/07/12 20:30:28 wouter Exp $ * Authors: * * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu * * DK, David Kirkby, UC Irvine, dkirkby@uci.edu * * * * Copyright (c) 2000-2005, Regents of the University of California * * and Stanford University. All rights reserved. * * * * Redistribution and use in source and binary forms, * * with or without modification, are permitted according to the terms * * listed in LICENSE (http://roofit.sourceforge.net/license.txt) * *****************************************************************************/ #ifndef ROO_ADD_PDF #define ROO_ADD_PDF #include "RooAbsPdf.h" #include "RooListProxy.h" #include "RooSetProxy.h" #include "RooAICRegistry.h" #include "RooObjCacheManager.h" #include "RooNameReg.h" #include "RooTrace.h" #include #include #include class AddCacheElem; class RooAddPdf : public RooAbsPdf { public: RooAddPdf() : _projCacheMgr(this,10) { TRACE_CREATE; } RooAddPdf(const char *name, const char *title=nullptr); RooAddPdf(const char *name, const char *title, RooAbsPdf& pdf1, RooAbsPdf& pdf2, RooAbsReal& coef1) ; RooAddPdf(const char *name, const char *title, const RooArgList& pdfList) ; RooAddPdf(const char *name, const char *title, const RooArgList& pdfList, const RooArgList& coefList, bool recursiveFraction=false) ; RooAddPdf(const RooAddPdf& other, const char* name=nullptr) ; TObject* clone(const char* newname) const override { return new RooAddPdf(*this,newname) ; } ~RooAddPdf() override { TRACE_DESTROY; } bool checkObservables(const RooArgSet* nset) const override; /// Force RooRealIntegral to offer all observables for internal integration. bool forceAnalyticalInt(const RooAbsArg& /*dep*/) const override { return true ; } Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& numVars, const RooArgSet* normSet, const char* rangeName=nullptr) const override; double analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=nullptr) const override; bool selfNormalized() const override { // P.d.f is self normalized return true ; } ExtendMode extendMode() const override { // Return extended mode capabilities return ((_haveLastCoef&&!_recursive) || _allExtendable) ? MustBeExtended : CanNotBeExtended; } /// Return expected number of events for extended likelihood calculation, which /// is the sum of all coefficients. double expectedEvents(const RooArgSet* nset) const override; std::unique_ptr createExpectedEventsFunc(const RooArgSet* nset) const override; const RooArgList& pdfList() const { // Return list of component p.d.fs return _pdfList ; } const RooArgList& coefList() const { // Return list of coefficients of component p.d.f.s return _coefList ; } void fixCoefNormalization(const RooArgSet& refCoefNorm) ; void fixCoefRange(const char* rangeName) ; const RooArgSet& getCoefNormalization() const; const char* getCoefRange() const { return _refCoefRangeName?RooNameReg::str(_refCoefRangeName):"" ; } void resetErrorCounters(Int_t resetValue=10) override; std::list* plotSamplingHint(RooAbsRealLValue& obs, double xlo, double xhi) const override; std::list* binBoundaries(RooAbsRealLValue& /*obs*/, double /*xlo*/, double /*xhi*/) const override; bool isBinnedDistribution(const RooArgSet& obs) const override; void printMetaArgs(std::ostream& os) const override; CacheMode canNodeBeCached() const override { return RooAbsArg::NotAdvised ; }; void setCacheAndTrackHints(RooArgSet&) override; void translate(RooFit::Detail::CodeSquashContext &ctx) const override; std::unique_ptr compileForNormSet(RooArgSet const &normSet, RooFit::Detail::CompileContext & ctx) const override; protected: void selectNormalization(const RooArgSet* depSet=nullptr, bool force=false) override; void selectNormalizationRange(const char* rangeName=nullptr, bool force=false) override; mutable RooSetProxy _refCoefNorm ; ///< Reference observable set for coefficient interpretation mutable TNamed* _refCoefRangeName = nullptr ; ///< Reference range name for coefficient interpretation mutable std::vector _coefCache; /// getNormAndCache(const RooArgSet* nset) const; mutable RooFit::UniqueId::Value_t _idOfLastUsedNormSet = RooFit::UniqueId::nullval; /// _copyOfLastNormSet = nullptr; ///