16 #ifndef ROO_MULTI_VAR_GAUSSIAN
17 #define ROO_MULTI_VAR_GAUSSIAN
31 class RooMultiVarGaussian :
public RooAbsPdf {
34 RooMultiVarGaussian() {} ;
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_t reduceToConditional=kTRUE) ;
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_t z) { _z = z ; }
41 RooMultiVarGaussian(
const RooMultiVarGaussian& other,
const char* name=0) ;
42 virtual TObject* clone(
const char* newname)
const {
return new RooMultiVarGaussian(*
this,newname); }
43 inline virtual ~RooMultiVarGaussian() { }
45 Int_t getAnalyticalIntegral(RooArgSet& allVars, RooArgSet& analVars,
const char* rangeName=0)
const ;
46 Double_t analyticalIntegral(Int_t code,
const char* rangeName=0)
const ;
48 Int_t getGenerator(
const RooArgSet& directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE)
const;
49 void initGenerator(Int_t code) ;
50 void generateEvent(Int_t code);
52 const TMatrixDSym& covarianceMatrix()
const {
return _cov ; }
58 std::vector<int> pmap ;
65 std::vector<int> omap ;
66 std::vector<int> pmap ;
74 BitBlock() : b0(0), b1(0), b2(0), b3(0) {} ;
76 void setBit(Int_t ibit) ;
77 Bool_t getBit(Int_t ibit) ;
78 Bool_t operator==(
const BitBlock& other) ;
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) ;
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 ;
94 mutable std::map<int,AnaIntData> _anaIntCache ;
95 mutable std::map<int,GenData> _genCache ;
97 mutable std::vector<BitBlock> _aicMap ;
106 void syncMuVec()
const ;
107 mutable TVectorD _muVec ;
109 Double_t evaluate()
const ;
113 ClassDef(RooMultiVarGaussian,1)