CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/FastSimulation/Utilities/interface/GammaNumericalGenerator.h

Go to the documentation of this file.
00001 #ifndef GammaNumericalGenerator_H
00002 #define GammaNumericalGenerator_H
00003 #include "FastSimulation/Utilities/interface/BaseNumericalRandomGenerator.h"
00004 
00005 #include <cmath>
00010 class RandomEngine;
00011 
00012 class GammaNumericalGenerator : public BaseNumericalRandomGenerator
00013 {
00014  public:
00015 
00017    GammaNumericalGenerator(const RandomEngine* engine, 
00018                            double a=0,double b=0,double x1=0,double x2=0) : 
00019      BaseNumericalRandomGenerator(engine,x1,x2,1000),
00020      a_(a),b_(b),valid(false) {
00021 
00022     if(a>0&&b>0) 
00023       {
00024         valid=true;
00025         initialize();
00026       }
00027   }
00028 
00030   virtual ~GammaNumericalGenerator() {}
00031 
00033   double gamma() const { return generate(); }
00034   
00035   double gamma_exp() const {return generateExp();}
00036 
00037   double gamma_lin() const {return generateLin();}
00038 
00040   virtual double function(double x) { return ersatzt(x); }
00041 
00042   inline bool isValid() const {return valid;}
00043 
00044  private:
00045 
00047   double ersatzt(double x) { 
00048     double bt=b_*x;
00049     return  b_*pow(bt,a_-1)*exp(-bt);
00050   }
00051   
00052   // gamma distribution parameters 
00053   double a_,b_;
00054   bool valid;
00055 };
00056 
00057 #endif