1 // $Id: RandGaussT.cc,v 1.5 2010/06/16 17:24:53 garren Exp $
2 // -*- C++ -*-
3 //
4 // -----------------------------------------------------------------------
5 // HEP Random
6 // --- RandGaussT ---
7 // class implementation file
8 // -----------------------------------------------------------------------
9
10 // =======================================================================
11 // M Fischler - Created 04 Feb 2000
12 // M Fischler - put and get to/from streams 12/13/04
13 // M Fischler - operator() modified to use localEngine 12/13/04
14 // =======================================================================
15
16 #include "CLHEP/Random/defs.h"
17 #include "CLHEP/Random/RandGaussT.h"
18 #include <iostream>
19
20 namespace CLHEP {
21
name() const22 std::string RandGaussT::name() const {return "RandGaussT";}
engine()23 HepRandomEngine & RandGaussT::engine() {return RandGauss::engine();}
24
~RandGaussT()25 RandGaussT::~RandGaussT() {
26 }
27
operator ()()28 double RandGaussT::operator()() {
29 return HepStat::flatToGaussian(localEngine->flat()) * defaultStdDev
30 + defaultMean;
31 }
32
operator ()(double mean,double stdDev)33 double RandGaussT::operator()( double mean, double stdDev ) {
34 return HepStat::flatToGaussian(localEngine->flat()) * stdDev + mean;
35 }
36
shootArray(const int size,double * vect,double mean,double stdDev)37 void RandGaussT::shootArray( const int size, double* vect,
38 double mean, double stdDev )
39 {
40 for( double* v = vect; v != vect + size; ++v )
41 *v = shoot(mean,stdDev);
42 }
43
shootArray(HepRandomEngine * anEngine,const int size,double * vect,double mean,double stdDev)44 void RandGaussT::shootArray( HepRandomEngine* anEngine,
45 const int size, double* vect,
46 double mean, double stdDev )
47 {
48 for( double* v = vect; v != vect + size; ++v )
49 *v = shoot(anEngine,mean,stdDev);
50 }
51
fireArray(const int size,double * vect)52 void RandGaussT::fireArray( const int size, double* vect)
53 {
54 for( double* v = vect; v != vect + size; ++v )
55 *v = fire( defaultMean, defaultStdDev );
56 }
57
fireArray(const int size,double * vect,double mean,double stdDev)58 void RandGaussT::fireArray( const int size, double* vect,
59 double mean, double stdDev )
60 {
61 for( double* v = vect; v != vect + size; ++v )
62 *v = fire( mean, stdDev );
63 }
64
put(std::ostream & os) const65 std::ostream & RandGaussT::put ( std::ostream & os ) const {
66 int pr=os.precision(20);
67 os << " " << name() << "\n";
68 RandGauss::put(os);
69 os.precision(pr);
70 return os;
71 }
72
get(std::istream & is)73 std::istream & RandGaussT::get ( std::istream & is ) {
74 std::string inName;
75 is >> inName;
76 if (inName != name()) {
77 is.clear(std::ios::badbit | is.rdstate());
78 std::cerr << "Mismatch when expecting to read state of a "
79 << name() << " distribution\n"
80 << "Name found was " << inName
81 << "\nistream is left in the badbit state\n";
82 return is;
83 }
84 RandGauss::get(is);
85 return is;
86 }
87
88 } // namespace CLHEP
89
90