/***************************************************************************** * Project: RooFit * * Package: RooFitModels * * @(#)root/roofit:$Id$ * Authors: * * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu * * DK, David Kirkby, UC Irvine, dkirkby@uci.edu * * * * Copyright (c) 2000-2005, Regents of the University of California * * and Stanford University. All rights reserved. * * * * Redistribution and use in source and binary forms, * * with or without modification, are permitted according to the terms * * listed in LICENSE (http://roofit.sourceforge.net/license.txt) * *****************************************************************************/ ////////////////////////////////////////////////////////////////////////////// // // BEGIN_HTML // Landau Distribution p.d.f // END_HTML // #include "TMath.h" #include "RooFit.h" #include "RooLandau.h" #include "RooLandau.h" #include "RooRandom.h" using namespace std; ClassImp(RooLandau) //_____________________________________________________________________________ RooLandau::RooLandau(const char *name, const char *title, RooAbsReal& _x, RooAbsReal& _mean, RooAbsReal& _sigma) : RooAbsPdf(name,title), x("x","Dependent",this,_x), mean("mean","Mean",this,_mean), sigma("sigma","Width",this,_sigma) { } //_____________________________________________________________________________ RooLandau::RooLandau(const RooLandau& other, const char* name) : RooAbsPdf(other,name), x("x",this,other.x), mean("mean",this,other.mean), sigma("sigma",this,other.sigma) { } //_____________________________________________________________________________ Double_t RooLandau::evaluate() const { return TMath::Landau(x, mean, sigma); } //_____________________________________________________________________________ Int_t RooLandau::getGenerator(const RooArgSet& directVars, RooArgSet &generateVars, Bool_t /*staticInitOK*/) const { if (matchArgs(directVars,generateVars,x)) return 1 ; return 0 ; } //_____________________________________________________________________________ void RooLandau::generateEvent(Int_t code) { (void)code; assert(code==1) ; Double_t xgen ; while(1) { xgen = RooRandom::randomGenerator()->Landau(mean,sigma); if (xgen<x.max() && xgen>x.min()) { x = xgen ; break; } } return; }