Logo ROOT  
Reference Guide
RooMultiVarGaussian.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitModels *
4 * File: $Id$
5 * Authors: *
6 * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7 * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8 * *
9 * Copyright (c) 2000-2005, 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_MULTI_VAR_GAUSSIAN
17#define ROO_MULTI_VAR_GAUSSIAN
18
19#include "RooAbsPdf.h"
20#include "RooListProxy.h"
21#include "TMatrixDSym.h"
22#include "TMatrixD.h"
23#include "TVectorD.h"
24
25class RooRealVar;
26class RooFitResult ;
27
28#include <map>
29#include <vector>
30
32public:
33
35 RooMultiVarGaussian(const char *name, const char *title, const RooArgList& xvec, const RooArgList& mu, const TMatrixDSym& covMatrix) ;
36 RooMultiVarGaussian(const char *name, const char *title, const RooArgList& xvec, const RooFitResult& fr, bool reduceToConditional=true) ;
37 RooMultiVarGaussian(const char *name, const char *title, const RooArgList& xvec, const TVectorD& mu, const TMatrixDSym& covMatrix) ;
38 RooMultiVarGaussian(const char *name, const char *title, const RooArgList& xvec,const TMatrixDSym& covMatrix) ;
39 void setAnaIntZ(double z) { _z = z ; }
40
41 RooMultiVarGaussian(const RooMultiVarGaussian& other, const char* name=0) ;
42 TObject* clone(const char* newname) const override { return new RooMultiVarGaussian(*this,newname); }
43 inline ~RooMultiVarGaussian() override { }
44
45 Int_t getAnalyticalIntegral(RooArgSet& allVars, RooArgSet& analVars, const char* rangeName=0) const override ;
46 double analyticalIntegral(Int_t code, const char* rangeName=0) const override ;
47
48 Int_t getGenerator(const RooArgSet& directVars, RooArgSet &generateVars, bool staticInitOK=true) const override;
49 void initGenerator(Int_t code) override ;
50 void generateEvent(Int_t code) override;
51
52 const TMatrixDSym& covarianceMatrix() const { return _cov ; }
53
54 class AnaIntData {
55 public:
57 double S22det ;
58 std::vector<int> pmap ;
60 } ;
61
62 class GenData {
63 public:
65 std::vector<int> omap ;
66 std::vector<int> pmap ;
70 } ;
71
72 class BitBlock {
73 public:
74 BitBlock() : b0(0), b1(0), b2(0), b3(0) {} ;
75
76 void setBit(Int_t ibit) ;
77 bool getBit(Int_t ibit) ;
78 bool operator==(const BitBlock& other) ;
79
84 } ;
85
86 static void blockDecompose(const TMatrixD& input, const std::vector<int>& map1, const std::vector<int>& map2, TMatrixDSym& S11, TMatrixD& S12, TMatrixD& S21, TMatrixDSym& S22) ;
87
88protected:
89
90 void decodeCode(Int_t code, std::vector<int>& map1, std::vector<int>& map2) const;
91 AnaIntData& anaIntData(Int_t code) const ;
92 GenData& genData(Int_t code) const ;
93
94 mutable std::map<int,AnaIntData> _anaIntCache ; ///<!
95 mutable std::map<int,GenData> _genCache ; ///<!
96
97 mutable std::vector<BitBlock> _aicMap ; ///<!
98
103 double _det ;
104 double _z ;
105
106 void syncMuVec() const ;
107 mutable TVectorD _muVec ; //! Do not persist
108
109 double evaluate() const override ;
110
111private:
112
113 ClassDefOverride(RooMultiVarGaussian,1) // Multivariate Gaussian PDF with correlations
114};
115
116#endif
#define ClassDefOverride(name, id)
Definition: Rtypes.h:339
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void input
char name[80]
Definition: TGX11.cxx:110
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:57
RooFitResult is a container class to hold the input and output of a PDF fit to a dataset.
Definition: RooFitResult.h:40
bool operator==(const BitBlock &other)
Multivariate Gaussian p.d.f.
const TMatrixDSym & covarianceMatrix() const
void decodeCode(Int_t code, std::vector< int > &map1, std::vector< int > &map2) const
Decode analytical integration/generation code into index map of integrated/generated (map2) and non-i...
std::vector< BitBlock > _aicMap
!
static void blockDecompose(const TMatrixD &input, const std::vector< int > &map1, const std::vector< int > &map2, TMatrixDSym &S11, TMatrixD &S12, TMatrixD &S21, TMatrixDSym &S22)
Block decomposition of covI according to given maps of observables.
AnaIntData & anaIntData(Int_t code) const
Check if cache entry was previously created.
double evaluate() const override
Do not persist.
std::map< int, GenData > _genCache
!
TObject * clone(const char *newname) const override
Int_t getGenerator(const RooArgSet &directVars, RooArgSet &generateVars, bool staticInitOK=true) const override
Special case: generate all observables.
Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=0) const override
Interface function getAnalyticalIntergral advertises the analytical integrals that are supported.
void initGenerator(Int_t code) override
Clear the GenData cache as its content is not invariant under changes in the mu vector.
GenData & genData(Int_t code) const
WVE – CHECK THAT GENDATA IS VALID GIVEN CURRENT VALUES OF _MU.
std::map< int, AnaIntData > _anaIntCache
!
double analyticalIntegral(Int_t code, const char *rangeName=0) const override
Handle full integral here.
void generateEvent(Int_t code) override
Retrieve generator config from cache.
void setAnaIntZ(double z)
RooRealVar represents a variable that can be changed from the outside.
Definition: RooRealVar.h:40
Mother of all ROOT objects.
Definition: TObject.h:37