CLHEP VERSION Reference Documentation
CLHEP Home Page CLHEP Documentation CLHEP Bug Reports |
00001 // $Id: RandGaussT.cc,v 1.5 2010/06/16 17:24:53 garren Exp $ 00002 // -*- C++ -*- 00003 // 00004 // ----------------------------------------------------------------------- 00005 // HEP Random 00006 // --- RandGaussT --- 00007 // class implementation file 00008 // ----------------------------------------------------------------------- 00009 00010 // ======================================================================= 00011 // M Fischler - Created 04 Feb 2000 00012 // M Fischler - put and get to/from streams 12/13/04 00013 // M Fischler - operator() modified to use localEngine 12/13/04 00014 // ======================================================================= 00015 00016 #include "CLHEP/Random/defs.h" 00017 #include "CLHEP/Random/RandGaussT.h" 00018 #include <iostream> 00019 00020 namespace CLHEP { 00021 00022 std::string RandGaussT::name() const {return "RandGaussT";} 00023 HepRandomEngine & RandGaussT::engine() {return RandGauss::engine();} 00024 00025 RandGaussT::~RandGaussT() { 00026 } 00027 00028 double RandGaussT::operator()() { 00029 return HepStat::flatToGaussian(localEngine->flat()) * defaultStdDev 00030 + defaultMean; 00031 } 00032 00033 double RandGaussT::operator()( double mean, double stdDev ) { 00034 return HepStat::flatToGaussian(localEngine->flat()) * stdDev + mean; 00035 } 00036 00037 void RandGaussT::shootArray( const int size, double* vect, 00038 double mean, double stdDev ) 00039 { 00040 for( double* v = vect; v != vect + size; ++v ) 00041 *v = shoot(mean,stdDev); 00042 } 00043 00044 void RandGaussT::shootArray( HepRandomEngine* anEngine, 00045 const int size, double* vect, 00046 double mean, double stdDev ) 00047 { 00048 for( double* v = vect; v != vect + size; ++v ) 00049 *v = shoot(anEngine,mean,stdDev); 00050 } 00051 00052 void RandGaussT::fireArray( const int size, double* vect) 00053 { 00054 for( double* v = vect; v != vect + size; ++v ) 00055 *v = fire( defaultMean, defaultStdDev ); 00056 } 00057 00058 void RandGaussT::fireArray( const int size, double* vect, 00059 double mean, double stdDev ) 00060 { 00061 for( double* v = vect; v != vect + size; ++v ) 00062 *v = fire( mean, stdDev ); 00063 } 00064 00065 std::ostream & RandGaussT::put ( std::ostream & os ) const { 00066 int pr=os.precision(20); 00067 os << " " << name() << "\n"; 00068 RandGauss::put(os); 00069 os.precision(pr); 00070 return os; 00071 } 00072 00073 std::istream & RandGaussT::get ( std::istream & is ) { 00074 std::string inName; 00075 is >> inName; 00076 if (inName != name()) { 00077 is.clear(std::ios::badbit | is.rdstate()); 00078 std::cerr << "Mismatch when expecting to read state of a " 00079 << name() << " distribution\n" 00080 << "Name found was " << inName 00081 << "\nistream is left in the badbit state\n"; 00082 return is; 00083 } 00084 RandGauss::get(is); 00085 return is; 00086 } 00087 00088 } // namespace CLHEP 00089