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)