/***************************************************************************** * Project: RooFit * * * * This code was autogenerated by RooClassFactory * *****************************************************************************/ // Your description goes here... #include "Riostream.h" #include "Roo2DimGaussVar.h" #include "RooAbsReal.h" #include "RooAbsCategory.h" #include #include "TMath.h" ClassImp(Roo2DimGaussVar); Roo2DimGaussVar::Roo2DimGaussVar(const char *name, const char *title, RooAbsReal& _x, RooAbsReal& _y, RooAbsReal& _rho, RooAbsReal& _sigX, RooAbsReal& _sigY, RooAbsReal& _muX, RooAbsReal& _muY, RooAbsReal& _height) : RooAbsReal(name,title), x("x","x",this,_x), y("y","y",this,_y), rho("rho","rho",this,_rho), sigX("sigX","sigX",this,_sigX), sigY("sigY","sigY",this,_sigY), muX("muX","muX",this,_muX), muY("muY","muY",this,_muY), height("height","height",this,_height) { ; } Roo2DimGaussVar::Roo2DimGaussVar(const Roo2DimGaussVar& other, const char* name) : RooAbsReal(other,name), x("x",this,other.x), y("y",this,other.y), rho("rho",this,other.rho), sigX("sigX",this,other.sigX), sigY("sigY",this,other.sigY), muX("muX",this,other.muX), muY("muY",this,other.muY), height("height",this,other.height) { } Double_t Roo2DimGaussVar::evaluate() const { double factor=2*TMath::Pi()*sigX.arg().getVal()*sigY.arg().getVal(); factor*=TMath::Sqrt(1-rho.arg().getVal()*rho.arg().getVal()); factor=1./factor; double val1=(x-muX.arg().getVal())*(x-muX.arg().getVal()); val1/=sigX.arg().getVal()*sigX.arg().getVal();; double val2=(y-muY.arg().getVal())*(y-muY.arg().getVal()); val2/=sigY.arg().getVal()*sigY.arg().getVal(); double val3=2*rho.arg().getVal()*(x-muX.arg().getVal())*(y-muY.arg().getVal()); val3/=sigX.arg().getVal()*sigY.arg().getVal(); double exponent=-1./(2*(1-rho.arg().getVal()*rho.arg().getVal())); exponent*=(val1+val2-val3); double retval=height.arg().getVal()*TMath::Exp(exponent); return retval; }