G4DistributionGenerator Class Reference

#include <G4DistributionGenerator.hh>


Public Member Functions

 G4DistributionGenerator (std::vector< G4double > &x, std::vector< G4double > &values)
 G4DistributionGenerator ()
 ~G4DistributionGenerator ()
G4double Generate (G4double ranflat)


Detailed Description

Definition at line 41 of file G4DistributionGenerator.hh.


Constructor & Destructor Documentation

G4DistributionGenerator::G4DistributionGenerator ( std::vector< G4double > &  x,
std::vector< G4double > &  values 
)

Definition at line 42 of file G4DistributionGenerator.cc.

References G4cout, G4endl, and G4HadronicDeprecate.

00045 {
00046   G4HadronicDeprecate("G4DistributionGenerator");
00047   _x = x;
00048 
00049   // Check boundaries: must be size(x) = size(values) + 1
00050   if (x.size() != (values.size() + 1))
00051     { G4cout << " Inconsistent parameters in G4DistributionGenerator "
00052            << G4endl;
00053     }
00054   assert (x.size() == (values.size() + 1));
00055 
00056   G4double tot = 0.;
00057   unsigned int i;
00058   for (i=0; i<values.size(); i++) { tot += values[i]; }
00059   assert (tot > 0.);
00060   
00061   _cumProb.push_back(0.);    
00062   //  _cumProb.push_back(values[0] / tot);
00063   G4double sum = 0.;
00064   for (i=0; i<values.size(); i++) 
00065     { 
00066       sum += values[i];
00067       _cumProb.push_back(sum / tot); }
00068 
00069   // Debugging
00070   /*
00071   for (i=0; i<values.size(); i++)
00072     { G4cout << values[i] << "  " ; }
00073   G4cout << "  Integral = " << tot << G4endl;
00074   for (i=0; i<_cumProb.size(); i++)
00075     { 
00076       G4cout << "Variable " << _x[i]  
00077            << " --- cumProb = " << _cumProb[i] << G4endl;
00078     }
00079   */
00080   // End of debugging
00081 
00082 }

G4DistributionGenerator::G4DistributionGenerator (  ) 

G4DistributionGenerator::~G4DistributionGenerator (  ) 

Definition at line 86 of file G4DistributionGenerator.cc.

00087 {
00088 }


Member Function Documentation

G4double G4DistributionGenerator::Generate ( G4double  ranflat  ) 

Definition at line 91 of file G4DistributionGenerator.cc.

Referenced by G4PiMinusStopMaterial::P4Vector().

00092 {
00093   G4double xRandom = _x[0];
00094 
00095   G4int bin = _cumProb.size() - 1;
00096   unsigned int i;
00097   for (i=1; i<_cumProb.size(); i++)
00098     {
00099       if (ranflat >= _cumProb[i-1] && ranflat < _cumProb[i])
00100         {
00101           bin = i - 1;
00102         }
00103     }
00104 
00105   if (bin >= 0 && bin < static_cast<G4int>(_cumProb.size()-1) && bin < static_cast<G4int>(_x.size()-1)) 
00106     {
00107       G4double coeff = (ranflat - _cumProb[bin]) *  (_x[bin+1] - _x[bin]) / 
00108                    (_cumProb[bin+1] - _cumProb[bin]);
00109       xRandom = _x[bin] + coeff;
00110 
00111       // Deugging
00112       /*
00113       G4cout << "Random = " << ranflat << " Generated " << xRandom << G4endl;
00114       */
00115       // Endo of Debugging
00116 
00117     }
00118   else
00119     {   
00120       // Debugging
00121       /*
00122       G4cout << "Bin " << bin << " "
00123            << _cumProb.size() << " " 
00124            << _x.size()
00125            << G4endl;
00126       */
00127       // End of debugging
00128     }
00129 
00130   return xRandom;
00131 
00132 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:51:46 2013 for Geant4 by  doxygen 1.4.7