| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

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 
00011 // Forward declarations
00012 class IRndmGen;
00013 class IRndmGenSvc;
00014 
00015 namespace Rndm   {
00016 
00017   template <class TYPE> class Generator;
00018 
00021   class Gauss : public IRndmGen::Param        {
00022   protected:
00024     friend class Generator<Gauss>;
00026     double m_mean;
00028     double m_sigma;
00029   public:
00031     Gauss(double m, double s) 
00032     : IRndmGen::Param(IID_IRndmGauss), m_mean(m), m_sigma(s)  { }
00034     virtual ~Gauss()                          {  }
00036     double mean()  const                      {   return m_mean; }
00038     double sigma()  const                     {   return m_sigma; }
00040     static const InterfaceID& typeID()        {   return IID_IRndmGauss; }
00042     virtual IRndmGen::Param* clone() const {
00043       return new Gauss(m_mean, m_sigma);
00044     }
00045   };
00046 
00049   class Exponential : public IRndmGen::Param  {
00050   protected:
00052     double m_mean;
00053   public:
00055     Exponential(double m)
00056     : IRndmGen::Param(IID_IRndmExponential), m_mean(m)  { }
00058     virtual ~Exponential()                 {  }
00060     double mean()  const                   { return m_mean; }
00062     static const InterfaceID& typeID()     { return IID_IRndmExponential; }
00064     virtual IRndmGen::Param* clone() const { return new Exponential(m_mean); }
00065   };
00066 
00069   class Chi2 : public IRndmGen::Param         {
00070     friend class Generator<Chi2>;
00071   protected:
00073     long m_nDOF;
00074   public:
00076     Chi2(long   n_dof) : IRndmGen::Param(IID_IRndmChi2), m_nDOF(n_dof) { }
00078     virtual ~Chi2()                           { }
00080     long nDOF()  const                        { return m_nDOF; }
00082     static const InterfaceID& typeID()        { return IID_IRndmChi2; }
00084     virtual IRndmGen::Param* clone()  const   { return new Chi2(m_nDOF); }
00085   };
00086 
00089   class BreitWigner : public IRndmGen::Param  {
00090     friend class Generator<BreitWigner>;
00091   protected:
00093     double m_mean, m_gamma;
00094   public:
00096     BreitWigner(double m, double g) 
00097     : IRndmGen::Param(IID_IRndmBreitWigner), m_mean(m), m_gamma(g) { }
00099     virtual ~BreitWigner()                    { }
00101     double mean()  const                      { return m_mean;                }
00103     double gamma()  const                     { return m_gamma;               }
00105     static const InterfaceID& typeID()        { return IID_IRndmBreitWigner;  }
00107     virtual IRndmGen::Param* clone()  const   {
00108       return new BreitWigner(m_mean, m_gamma);
00109     }
00110   };
00111 
00114   class Landau : public IRndmGen::Param       {
00115     friend class Generator<Landau>;
00116   protected:
00118     double m_mean, m_sigma;
00119   public:
00121     Landau(double m, double s) 
00122     : IRndmGen::Param(IID_IRndmLandau), m_mean(m), m_sigma(s) { }
00124     virtual ~Landau()                         { }
00126     double mean()  const                      { return m_mean;                }
00128     double sigma()  const                     { return m_sigma;               }
00130     static const InterfaceID& typeID()        { return IID_IRndmLandau;       }
00132     virtual IRndmGen::Param* clone() const    {
00133       return new Landau(m_mean, m_sigma);
00134     }
00135   };
00136 
00140   class BreitWignerCutOff : public IRndmGen::Param    {
00141     friend class Generator<BreitWignerCutOff>;
00142   protected:
00144     double m_mean, m_gamma, m_cut;
00145   public:
00147     BreitWignerCutOff(double m, double g, double c) 
00148     : IRndmGen::Param(IID_IRndmBreitWignerCutOff),
00149       m_mean(m),
00150       m_gamma(g),
00151       m_cut(c) {  }
00153     virtual ~BreitWignerCutOff()              { }
00155     double mean()  const                      { return m_mean; }
00157     double gamma()  const                     { return m_gamma; }
00159     double cutOff()  const                    { return m_cut; }
00161     static const InterfaceID& typeID()        { return IID_IRndmBreitWignerCutOff;}
00163     virtual IRndmGen::Param* clone() const {
00164       return new BreitWignerCutOff(m_mean, m_gamma, m_cut);
00165     }
00166   };
00167 
00170   class StudentT : public IRndmGen::Param     {
00171     friend class Generator<StudentT>;
00172   protected:
00174     double m_aValue;
00175   public:
00177     StudentT(double a) : IRndmGen::Param(IID_IRndmStudentT), m_aValue(a) { }
00179     virtual ~StudentT()                       { }
00181     double aValue()  const                    { return m_aValue;              }
00183     static const InterfaceID& typeID()        { return IID_IRndmStudentT;     }
00185     virtual IRndmGen::Param* clone()  const   { return new StudentT(m_aValue);}
00186   };
00187 
00190   class Gamma : public IRndmGen::Param        {
00191     friend class Generator<Gamma>;
00192   protected:
00194     double m_kValue;
00196     double m_lambda;
00197   public:
00199     Gamma(double k, double l)
00200     : IRndmGen::Param(IID_IRndmGamma), m_kValue(k), m_lambda(l) { }
00202     virtual ~Gamma()                          {  }
00204     double kValue()  const                    { return m_kValue;              }
00206     double lambda()  const                    { return m_lambda;              }
00208     static const InterfaceID& typeID()        { return IID_IRndmGamma;        }
00210     virtual IRndmGen::Param* clone()  const   {
00211       return new Gamma(m_kValue, m_lambda);
00212     }
00213   };
00214 
00218   class Poisson : public IRndmGen::Param      {
00219     friend class Generator<Poisson>;
00220   protected:
00222     double m_mean;
00223   public:
00225     Poisson(double m) : IRndmGen::Param(IID_IRndmPoisson), m_mean(m) { }
00227     virtual ~Poisson()                        {  }
00229     double mean()  const                      { return m_mean;                }
00231     static const InterfaceID& typeID()        { return IID_IRndmPoisson;      }
00233     virtual IRndmGen::Param* clone()  const   { return new Poisson(m_mean);   }
00234   };
00235 
00239   class Binomial : public IRndmGen::Param    {
00240   protected:
00242     long m_nEvent;
00244     double m_probability;
00245   public:
00247     Binomial(long n, double p) 
00248     : IRndmGen::Param(IID_IRndmBinomial), m_nEvent(n), m_probability(p) { }
00250     virtual ~Binomial()                       {  }
00252     long nEvent()  const                      { return m_nEvent;              }
00254     double probability()  const               { return m_probability;         }
00256     static const InterfaceID& typeID()        { return IID_IRndmBinomial;     }
00258     virtual IRndmGen::Param* clone()  const   {
00259       return new Binomial(m_nEvent, m_probability);
00260     }
00261   };
00262 
00266   class Flat : public IRndmGen::Param         {
00267   protected:
00269     double m_minimum;
00271     double m_maximum;
00272   public:
00274     Flat(double mi, double ma) 
00275     : IRndmGen::Param(IID_IRndmFlat), m_minimum(mi), m_maximum(ma) { }
00277     virtual ~Flat()                           {  }
00279     double minimum()  const                   { return m_minimum;             }
00281     double maximum()  const                   { return m_maximum;             }
00283     static const InterfaceID& typeID()        { return IID_IRndmFlat;         }
00285     virtual IRndmGen::Param* clone()  const   {
00286       return new Flat(m_minimum, m_maximum);
00287     }
00288   };
00289 
00292   class Bit : public IRndmGen::Param          {
00293   public:
00295     Bit() : IRndmGen::Param(IID_IRndmBit)     {  }
00297     virtual ~Bit()                            {  }
00299     static const InterfaceID& typeID()        { return IID_IRndmBit; }
00301     virtual IRndmGen::Param* clone()  const   { return new Bit(); }
00302   };
00303 
00320   class DefinedPdf : public IRndmGen::Param   {
00321   protected:
00323     std::vector<double> m_pdf;
00325     long m_interpolation;
00326   public:
00328     DefinedPdf(const std::vector<double>& pdf, long intpol) 
00329     : IRndmGen::Param(IID_IRndmDefinedPdf),
00330       m_pdf(pdf),
00331       m_interpolation(intpol)  {     }
00333     virtual ~DefinedPdf()                     {  }
00335     std::vector<double>& pdf()                { return m_pdf;                 }
00337     long interpolation()  const               { return m_interpolation;       }
00339     static const InterfaceID& typeID()        { return IID_IRndmDefinedPdf;   }
00341     virtual IRndmGen::Param* clone()  const   {
00342       return new DefinedPdf(m_pdf,m_interpolation);
00343     }
00344   };
00345 
00348   class GaussianTail : public IRndmGen::Param        {
00349   protected:
00351     double m_cut;
00353     double m_sigma;
00354   public:
00356     GaussianTail(double a, double s) 
00357       : IRndmGen::Param(IID_IRndmGaussianTail), m_cut(a), m_sigma(s)  { }
00359     virtual ~GaussianTail() { }
00361     double cut()  const { return m_cut; }
00363     double sigma()  const { return m_sigma; }
00365     static const InterfaceID& typeID() { return IID_IRndmGaussianTail; }
00367     virtual IRndmGen::Param* clone() const {
00368       return new GaussianTail(m_cut, m_sigma);
00369     }
00370   };
00371 
00372 
00388   class Numbers   {
00389   protected:
00391     IRndmGen*           m_generator;
00392   public:
00394     Numbers();
00396     Numbers(const Numbers& copy );
00398     Numbers(IRndmGenSvc* svc, const IRndmGen::Param& par);
00400     virtual ~Numbers();
00402     virtual StatusCode initialize(IRndmGenSvc* svc, const IRndmGen::Param& par);
00404     virtual StatusCode finalize();
00406     operator bool  ()  const  {
00407       return m_generator != 0;
00408     }
00410     double operator() ()   {
00411       return this->shoot();
00412     }
00414     double pop()    {
00415       return this->shoot();
00416     }
00418     double shoot()    {
00419       if ( 0 != m_generator )   {
00420         return m_generator->shoot();
00421       }
00422       return -1;
00423     }
00425     StatusCode shootArray(std::vector<double>& array, long num, long start=0)  {
00426       if ( 0 != m_generator )   {
00427         return m_generator->shootArray(array, num, start);
00428       }
00429       return StatusCode::FAILURE;
00430     }
00431   };
00432 }
00433 #endif    // GAUDIKERNEL_RNDMGENGENERATORS_H
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 19:56:58 2011 for GaudiKernel by doxygen 1.4.7