Gaudi Framework, version v21r9

Home   Generated: 3 May 2010

RndmGenerators.h

Go to the documentation of this file.
00001 // $Id: RndmGenerators.h,v 1.8 2005/07/21 14:35:31 hmd Exp $
00002 #ifndef GAUDIKERNEL_RNDMGENGENERATORS_H
00003 #define GAUDIKERNEL_RNDMGENGENERATORS_H
00004 
00005 // STL include files
00006 #include <vector>
00007 
00008 // Framework include files
00009 #include "GaudiKernel/IRndmGen.h"
00010 #include "GaudiKernel/SmartIF.h"
00011 
00012 // Forward declarations
00013 class IRndmGen;
00014 class IRndmGenSvc;
00015 
00016 namespace Rndm   {
00017 
00018   template <class TYPE> class Generator;
00019 
00022   class GAUDI_API Gauss: public IRndmGen::Param {
00023   protected:
00025     friend class Generator<Gauss>;
00027     double m_mean;
00029     double m_sigma;
00030   public:
00032     Gauss(double m, double s)
00033     : IRndmGen::Param(IID_IRndmGauss), m_mean(m), m_sigma(s)  { }
00035     virtual ~Gauss()                          {  }
00037     double mean()  const                      {   return m_mean; }
00039     double sigma()  const                     {   return m_sigma; }
00041     static const InterfaceID& typeID()        {   return IID_IRndmGauss; }
00043     virtual IRndmGen::Param* clone() const {
00044       return new Gauss(m_mean, m_sigma);
00045     }
00046   };
00047 
00050   class GAUDI_API Exponential: public IRndmGen::Param  {
00051   protected:
00053     double m_mean;
00054   public:
00056     Exponential(double m)
00057     : IRndmGen::Param(IID_IRndmExponential), m_mean(m)  { }
00059     virtual ~Exponential()                 {  }
00061     double mean()  const                   { return m_mean; }
00063     static const InterfaceID& typeID()     { return IID_IRndmExponential; }
00065     virtual IRndmGen::Param* clone() const { return new Exponential(m_mean); }
00066   };
00067 
00070   class GAUDI_API Chi2: public IRndmGen::Param {
00071     friend class Generator<Chi2>;
00072   protected:
00074     long m_nDOF;
00075   public:
00077     Chi2(long   n_dof) : IRndmGen::Param(IID_IRndmChi2), m_nDOF(n_dof) { }
00079     virtual ~Chi2()                           { }
00081     long nDOF()  const                        { return m_nDOF; }
00083     static const InterfaceID& typeID()        { return IID_IRndmChi2; }
00085     virtual IRndmGen::Param* clone()  const   { return new Chi2(m_nDOF); }
00086   };
00087 
00090   class GAUDI_API BreitWigner : public IRndmGen::Param {
00091     friend class Generator<BreitWigner>;
00092   protected:
00094     double m_mean, m_gamma;
00095   public:
00097     BreitWigner(double m, double g)
00098     : IRndmGen::Param(IID_IRndmBreitWigner), m_mean(m), m_gamma(g) { }
00100     virtual ~BreitWigner()                    { }
00102     double mean()  const                      { return m_mean;                }
00104     double gamma()  const                     { return m_gamma;               }
00106     static const InterfaceID& typeID()        { return IID_IRndmBreitWigner;  }
00108     virtual IRndmGen::Param* clone()  const   {
00109       return new BreitWigner(m_mean, m_gamma);
00110     }
00111   };
00112 
00115   class GAUDI_API Landau : public IRndmGen::Param {
00116     friend class Generator<Landau>;
00117   protected:
00119     double m_mean, m_sigma;
00120   public:
00122     Landau(double m, double s)
00123     : IRndmGen::Param(IID_IRndmLandau), m_mean(m), m_sigma(s) { }
00125     virtual ~Landau()                         { }
00127     double mean()  const                      { return m_mean;                }
00129     double sigma()  const                     { return m_sigma;               }
00131     static const InterfaceID& typeID()        { return IID_IRndmLandau;       }
00133     virtual IRndmGen::Param* clone() const    {
00134       return new Landau(m_mean, m_sigma);
00135     }
00136   };
00137 
00141   class GAUDI_API BreitWignerCutOff : public IRndmGen::Param {
00142     friend class Generator<BreitWignerCutOff>;
00143   protected:
00145     double m_mean, m_gamma, m_cut;
00146   public:
00148     BreitWignerCutOff(double m, double g, double c)
00149     : IRndmGen::Param(IID_IRndmBreitWignerCutOff),
00150       m_mean(m),
00151       m_gamma(g),
00152       m_cut(c) {  }
00154     virtual ~BreitWignerCutOff()              { }
00156     double mean()  const                      { return m_mean; }
00158     double gamma()  const                     { return m_gamma; }
00160     double cutOff()  const                    { return m_cut; }
00162     static const InterfaceID& typeID()        { return IID_IRndmBreitWignerCutOff;}
00164     virtual IRndmGen::Param* clone() const {
00165       return new BreitWignerCutOff(m_mean, m_gamma, m_cut);
00166     }
00167   };
00168 
00171   class GAUDI_API StudentT: public IRndmGen::Param {
00172     friend class Generator<StudentT>;
00173   protected:
00175     double m_aValue;
00176   public:
00178     StudentT(double a) : IRndmGen::Param(IID_IRndmStudentT), m_aValue(a) { }
00180     virtual ~StudentT()                       { }
00182     double aValue()  const                    { return m_aValue;              }
00184     static const InterfaceID& typeID()        { return IID_IRndmStudentT;     }
00186     virtual IRndmGen::Param* clone()  const   { return new StudentT(m_aValue);}
00187   };
00188 
00191   class GAUDI_API Gamma: public IRndmGen::Param {
00192     friend class Generator<Gamma>;
00193   protected:
00195     double m_kValue;
00197     double m_lambda;
00198   public:
00200     Gamma(double k, double l)
00201     : IRndmGen::Param(IID_IRndmGamma), m_kValue(k), m_lambda(l) { }
00203     virtual ~Gamma()                          {  }
00205     double kValue()  const                    { return m_kValue;              }
00207     double lambda()  const                    { return m_lambda;              }
00209     static const InterfaceID& typeID()        { return IID_IRndmGamma;        }
00211     virtual IRndmGen::Param* clone()  const   {
00212       return new Gamma(m_kValue, m_lambda);
00213     }
00214   };
00215 
00219   class GAUDI_API Poisson: public IRndmGen::Param {
00220     friend class Generator<Poisson>;
00221   protected:
00223     double m_mean;
00224   public:
00226     Poisson(double m) : IRndmGen::Param(IID_IRndmPoisson), m_mean(m) { }
00228     virtual ~Poisson()                        {  }
00230     double mean()  const                      { return m_mean;                }
00232     static const InterfaceID& typeID()        { return IID_IRndmPoisson;      }
00234     virtual IRndmGen::Param* clone()  const   { return new Poisson(m_mean);   }
00235   };
00236 
00240   class GAUDI_API Binomial: public IRndmGen::Param {
00241   protected:
00243     long m_nEvent;
00245     double m_probability;
00246   public:
00248     Binomial(long n, double p)
00249     : IRndmGen::Param(IID_IRndmBinomial), m_nEvent(n), m_probability(p) { }
00251     virtual ~Binomial()                       {  }
00253     long nEvent()  const                      { return m_nEvent;              }
00255     double probability()  const               { return m_probability;         }
00257     static const InterfaceID& typeID()        { return IID_IRndmBinomial;     }
00259     virtual IRndmGen::Param* clone()  const   {
00260       return new Binomial(m_nEvent, m_probability);
00261     }
00262   };
00263 
00267   class GAUDI_API Flat: public IRndmGen::Param {
00268   protected:
00270     double m_minimum;
00272     double m_maximum;
00273   public:
00275     Flat(double mi, double ma)
00276     : IRndmGen::Param(IID_IRndmFlat), m_minimum(mi), m_maximum(ma) { }
00278     virtual ~Flat()                           {  }
00280     double minimum()  const                   { return m_minimum;             }
00282     double maximum()  const                   { return m_maximum;             }
00284     static const InterfaceID& typeID()        { return IID_IRndmFlat;         }
00286     virtual IRndmGen::Param* clone()  const   {
00287       return new Flat(m_minimum, m_maximum);
00288     }
00289   };
00290 
00293   class GAUDI_API Bit: public IRndmGen::Param {
00294   public:
00296     Bit() : IRndmGen::Param(IID_IRndmBit)     {  }
00298     virtual ~Bit()                            {  }
00300     static const InterfaceID& typeID()        { return IID_IRndmBit; }
00302     virtual IRndmGen::Param* clone()  const   { return new Bit(); }
00303   };
00304 
00321   class GAUDI_API DefinedPdf: public IRndmGen::Param {
00322   protected:
00324     std::vector<double> m_pdf;
00326     long m_interpolation;
00327   public:
00329     DefinedPdf(const std::vector<double>& pdf, long intpol)
00330     : IRndmGen::Param(IID_IRndmDefinedPdf),
00331       m_pdf(pdf),
00332       m_interpolation(intpol)  {     }
00334     virtual ~DefinedPdf()                     {  }
00336     std::vector<double>& pdf()                { return m_pdf;                 }
00338     long interpolation()  const               { return m_interpolation;       }
00340     static const InterfaceID& typeID()        { return IID_IRndmDefinedPdf;   }
00342     virtual IRndmGen::Param* clone()  const   {
00343       return new DefinedPdf(m_pdf,m_interpolation);
00344     }
00345   };
00346 
00349   class GAUDI_API GaussianTail: public IRndmGen::Param {
00350   protected:
00352     double m_cut;
00354     double m_sigma;
00355   public:
00357     GaussianTail(double a, double s)
00358       : IRndmGen::Param(IID_IRndmGaussianTail), m_cut(a), m_sigma(s)  { }
00360     virtual ~GaussianTail() { }
00362     double cut()  const { return m_cut; }
00364     double sigma()  const { return m_sigma; }
00366     static const InterfaceID& typeID() { return IID_IRndmGaussianTail; }
00368     virtual IRndmGen::Param* clone() const {
00369       return new GaussianTail(m_cut, m_sigma);
00370     }
00371   };
00372 
00373 
00389   class GAUDI_API Numbers   {
00390   protected:
00392     IRndmGen*           m_generator;
00393   public:
00395     Numbers();
00397     Numbers(const Numbers& copy );
00399     Numbers(const SmartIF<IRndmGenSvc>& svc, const IRndmGen::Param& par);
00401     virtual ~Numbers();
00403     virtual StatusCode initialize(const SmartIF<IRndmGenSvc>& svc, const IRndmGen::Param& par);
00404 #if !defined(GAUDI_V22_API) || defined(G22_NEW_SVCLOCATOR)
00406     Numbers(IRndmGenSvc* svc, const IRndmGen::Param& par);
00408     virtual StatusCode initialize(IRndmGenSvc* svc, const IRndmGen::Param& par);
00409 #endif
00411     virtual StatusCode finalize();
00413     operator bool  ()  const  {
00414       return m_generator != 0;
00415     }
00417     double operator() ()   {
00418       return this->shoot();
00419     }
00421     double pop()    {
00422       return this->shoot();
00423     }
00425     double shoot()    {
00426       if ( 0 != m_generator )   {
00427         return m_generator->shoot();
00428       }
00429       return -1;
00430     }
00432     StatusCode shootArray(std::vector<double>& array, long num, long start=0)  {
00433       if ( 0 != m_generator )   {
00434         return m_generator->shootArray(array, num, start);
00435       }
00436       return StatusCode::FAILURE;
00437     }
00438   };
00439 }
00440 #endif    // GAUDIKERNEL_RNDMGENGENERATORS_H

Generated at Mon May 3 12:14:26 2010 for Gaudi Framework, version v21r9 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004