16 #ifndef ROO_GAUSS_MODEL
17 #define ROO_GAUSS_MODEL
26 class RooGaussModel :
public RooResolutionModel {
29 enum RooGaussBasis { noBasis=0, expBasisMinus= 1, expBasisSum= 2, expBasisPlus= 3,
30 sinBasisMinus=11, sinBasisSum=12, sinBasisPlus=13,
31 cosBasisMinus=21, cosBasisSum=22, cosBasisPlus=23,
34 coshBasisMinus=51,coshBasisSum=52,coshBasisPlus=53,
35 sinhBasisMinus=61,sinhBasisSum=62,sinhBasisPlus=63};
36 enum BasisType { none=0, expBasis=1, sinBasis=2, cosBasis=3,
37 linBasis=4, quadBasis=5, coshBasis=6, sinhBasis=7 } ;
38 enum BasisSign { Both=0, Plus=+1, Minus=-1 } ;
41 inline RooGaussModel() : _flatSFInt(kFALSE), _asympInt(kFALSE) { }
42 RooGaussModel(
const char *name,
const char *title, RooRealVar& x,
43 RooAbsReal& mean, RooAbsReal& sigma) ;
44 RooGaussModel(
const char *name,
const char *title, RooRealVar& x,
45 RooAbsReal& mean, RooAbsReal& sigma, RooAbsReal& msSF) ;
46 RooGaussModel(
const char *name,
const char *title, RooRealVar& x,
47 RooAbsReal& mean, RooAbsReal& sigma, RooAbsReal& meanSF, RooAbsReal& sigmaSF) ;
48 RooGaussModel(
const RooGaussModel& other,
const char* name=0);
49 virtual TObject* clone(
const char* newname)
const {
return new RooGaussModel(*
this,newname) ; }
50 virtual ~RooGaussModel();
52 virtual Int_t basisCode(
const char* name)
const ;
53 virtual Int_t getAnalyticalIntegral(RooArgSet& allVars, RooArgSet& analVars,
const char* rangeName=0)
const ;
54 virtual Double_t analyticalIntegral(Int_t code,
const char* rangeName)
const ;
56 Int_t getGenerator(
const RooArgSet& directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE)
const;
57 void generateEvent(Int_t code);
59 void advertiseFlatScaleFactorIntegral(Bool_t flag) { _flatSFInt = flag ; }
61 void advertiseAymptoticIntegral(Bool_t flag) { _asympInt = flag ; }
65 virtual Double_t evaluate()
const ;
66 static std::complex<Double_t> evalCerfApprox(Double_t swt, Double_t u, Double_t c);
69 static inline std::complex<Double_t> evalCerf(Double_t swt, Double_t u, Double_t c)
71 std::complex<Double_t> z(swt*c,u+c);
72 return (z.imag()>-4.0) ? (std::exp(-u*u)*RooMath::faddeeva_fast(z)) : evalCerfApprox(swt,u,c);
76 std::complex<Double_t> evalCerfInt(Double_t sign, Double_t wt, Double_t tau, Double_t umin, Double_t umax, Double_t c)
const;
87 ClassDef(RooGaussModel,1)