Changeset 3613 in Sophya
- Timestamp:
- Apr 30, 2009, 7:07:46 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/Samba/alm.cc
r3510 r3613 20 20 21 21 //alm.ReSize(nlmax); 22 this->ReSizeRow(nlmax+1); 23 RandomGenerator rg(1, false); 24 GenFromCl(clin, fwhm, rg); 22 this->ReSizeRow(nlmax+1); 23 GenFromCl(clin, fwhm, *(RandomGeneratorInterface::GetGlobalRandGenP()) ); 25 24 } 26 25 … … 29 28 */ 30 29 template <class T> 31 Alm<T>::Alm(const TVector<T>& clin, const r_8 fwhm, RandomGenerator & rg)30 Alm<T>::Alm(const TVector<T>& clin, const r_8 fwhm, RandomGeneratorInterface & rg) 32 31 { 33 32 int_4 nlmax= clin.NElts()-1; … … 41 40 42 41 template <class T> 43 void Alm<T>::GenFromCl(const TVector<T> & clin, const r_8 fwhm, RandomGenerator & rg)42 void Alm<T>::GenFromCl(const TVector<T> & clin, const r_8 fwhm, RandomGeneratorInterface & rg) 44 43 { 45 44 /*======================================================================= -
trunk/SophyaLib/Samba/alm.h
r3510 r3613 6 6 #define ALM_SEEN 7 7 8 #include " stsrand.h"8 #include "randinterf.h" 9 9 #include "nbmath.h" 10 10 #include "triangmtx.h" … … 26 26 Alm(const TVector<T> & clin, const r_8 fwhm) ; 27 27 //! Constructor, generates alm from a cl vector, using the specified random generator object 28 Alm(const TVector<T> & clin, const r_8 fwhm, RandomGenerator 28 Alm(const TVector<T> & clin, const r_8 fwhm, RandomGeneratorInterface& rg); 29 29 30 30 //! Resize with a new lmax … … 41 41 42 42 private: 43 void GenFromCl(const TVector<T> & clin, const r_8 fwhm, RandomGenerator & rg);43 void GenFromCl(const TVector<T> & clin, const r_8 fwhm, RandomGeneratorInterface& rg); 44 44 }; 45 45 -
trunk/SophyaLib/Samba/sphericaltransformserver.cc
r3572 r3613 6 6 #include "sphericaltransformserver.h" 7 7 #include "tvector.h" 8 #include "stsrand.h"9 8 #include "nbmath.h" 10 9 #include "timing.h" … … 156 155 template<class T> 157 156 SphericalTransformServer<T>::SphericalTransformServer() 158 : rg _(1, false)157 : rgp_(RandomGeneratorInterface::GetGlobalRandGenP()) 159 158 { 160 159 fftIntfPtr_=new FFTPackServer(true); // preserveinput = true … … 164 163 //! Constructor with the specification of a RandomGenerator object to be used by GenerateFromCl 165 164 template<class T> 166 SphericalTransformServer<T>::SphericalTransformServer(RandomGenerator const& rg)167 : rg _(rg)165 SphericalTransformServer<T>::SphericalTransformServer(RandomGeneratorInterface& rg) 166 : rgp_(&rg) 168 167 { 169 168 fftIntfPtr_=new FFTPackServer(true); // preserveinput = true … … 1312 1311 // Alm<T> a2lme = almFromCl(Cle, fwhm); 1313 1312 // Alm<T> a2lmb = almFromCl(Clb, fwhm); 1314 Alm<T> a2lme(Cle, fwhm, rg_);1315 Alm<T> a2lmb(Clb, fwhm, rg_);1313 Alm<T> a2lme(Cle, fwhm, *rgp_); 1314 Alm<T> a2lmb(Clb, fwhm, *rgp_); 1316 1315 1317 1316 GenerateFromAlm(sphq,sphu,pixelSizeIndex,a2lme,a2lmb); … … 1330 1329 { 1331 1330 1332 Alm<T> alm(Cl, fwhm, rg_);1331 Alm<T> alm(Cl, fwhm, *rgp_); 1333 1332 GenerateFromAlm(sph,pixelSizeIndex, alm ); 1334 1333 } -
trunk/SophyaLib/Samba/sphericaltransformserver.h
r3510 r3613 5 5 #include "fftservintf.h" 6 6 #include "fftpserver.h" 7 #include " stsrand.h"7 #include "randinterf.h" 8 8 #include "alm.h" 9 9 #include "lambdaBuilder.h" … … 19 19 public: 20 20 21 SphericalTransformServer();22 SphericalTransformServer(RandomGenerator const& rg);21 explicit SphericalTransformServer(); 22 explicit SphericalTransformServer(RandomGeneratorInterface& rg); 23 23 virtual ~SphericalTransformServer(); 24 24 void SetFFTServer(FFTServerInterface* srv=NULL); … … 107 107 108 108 FFTServerInterface* fftIntfPtr_; 109 mutable RandomGenerator rg_;109 mutable RandomGeneratorInterface* rgp_; 110 110 111 111 }; -
trunk/SophyaLib/TArray/utilarr.cc
r3572 r3613 5 5 #include "machdefs.h" 6 6 #include "utilarr.h" 7 #include " stsrand.h"7 #include "randr48.h" 8 8 9 9 // Classe utilitaires … … 20 20 */ 21 21 22 / /! Constructor23 /*! 24 \param typ : generat or type25 \param m : mean parameter of the generator (if needed)26 \param s : sigma parameter of the generator (if needed)22 /*! 23 \brief constructor using a global default random generator ( RandomGeneratorInterface::GetGlobalRandGenP() ) 24 \param typ : generated random numbers distribution type: C_RND_Flat,C_RND_Gaussian,C_RND_Poisson,C_RND_Exponential 25 \param mean : mean value of the distribution 26 \param sigma : standard deviation of the distribution 27 27 */ 28 static RandomGenerator* uarg_ = NULL; 29 RandomSequence::RandomSequence(int typ, double m, double s) 30 { 31 typ_ = (typ == Flat) ? Flat : Gaussian; 32 mean_ = m; 33 sig_ = s; 34 if (uarg_ == NULL) uarg_ = new RandomGenerator(1024, true); 35 } 28 RandomSequence::RandomSequence(int typ, double mean, double sigma) 29 { 30 typ_ = (typ == Flat) ? C_RND_Flat: C_RND_Gaussian ; 31 mean_ = mean; 32 sig_ = sigma; 33 rgp_ = RandomGeneratorInterface::GetGlobalRandGenP(); 34 } 35 36 37 /*! 38 \brief constructor with the specification of a RandomGenerator object to be used. 39 \param rgen : RandomGeneratorInterface object that should stay valid as long as the RandomSequence object exist. 40 \param typ : generated random numbers distribution type: C_RND_Flat,C_RND_Gaussian,C_RND_Poisson,C_RND_Exponential 41 \param mean : mean value of the distribution 42 \param sigma : standard deviation of the distribution 43 */ 44 RandomSequence::RandomSequence(RandomGeneratorInterface& rgen, RNDTypes rtyp, double mean, double sigma) 45 { 46 typ_ = rtyp; 47 mean_ = mean; 48 sig_ = sigma; 49 rgp_ = &rgen; 50 } 51 36 52 RandomSequence::~RandomSequence() 37 53 { 38 54 } 39 55 40 //! Return random sequence values. 41 /*! 42 \return If typ = Flat : return [-1,+1]*sig + mean 43 \return If typ = Gaussian : return gaussian distributed 44 with \b mean mean and sigma \b sig 45 */ 46 double RandomSequence::Rand() 47 { 48 if (typ_ == Flat) 49 return(uarg_->Flatpm1()*sig_ + mean_); 50 else return(uarg_->Gaussian(sig_, mean_)); 51 } 52 56 double RandomSequence::Next() const 57 { 58 switch (typ_) { 59 case C_RND_Flat : 60 return rgp_->Flatpm1()*sig_ + mean_; 61 break; 62 case C_RND_Gaussian : 63 return rgp_->Gaussian(sig_, mean_); 64 break; 65 case C_RND_Poisson : 66 return rgp_->Poisson(mean_); 67 break; 68 case C_RND_Exponential : 69 return rgp_->Exponential(); 70 break; 71 default : 72 return rgp_->Flat01(); 73 break; 74 75 } 76 } 77 78 //! \brief Return the next random number 53 79 MuTyV & RandomSequence::Value(sa_size_t k) const 54 80 { 55 if (typ_ == Flat) retv_ = uarg_->Flatpm1()*sig_ + mean_; 56 else retv_ = uarg_->Gaussian(sig_, mean_); 81 retv_ = Next(); 57 82 return retv_; 58 83 } -
trunk/SophyaLib/TArray/utilarr.h
r2917 r3613 8 8 #include "machdefs.h" 9 9 #include "mutyv.h" 10 #include "randinterf.h" 10 11 11 12 #include <stdlib.h> … … 56 57 57 58 explicit RandomSequence(int typ = RandomSequence::Gaussian, double m=0., double s=1.); 59 explicit RandomSequence(RandomGeneratorInterface& rgen, RNDTypes rtyp=C_RND_Gaussian, double mean=0., double sigma=1.); 58 60 virtual ~RandomSequence(); 59 61 virtual MuTyV & Value(sa_size_t k) const ; 60 double Rand();62 double Next() const ; 61 63 62 64 protected: 63 inttyp_; //!< random generation type65 RNDTypes typ_; //!< random generation type 64 66 double mean_, sig_; //!< generation parameters mean and sigma (if needed) 65 67 mutable MuTyV retv_; 68 mutable RandomGeneratorInterface* rgp_; 66 69 }; 67 70 -
trunk/SophyaProg/PrgMap/cl2map.cc
r3512 r3613 14 14 #include "fitsspherehealpix.h" 15 15 #include "fitstarray.h" 16 17 #include "randr48.h" 16 18 17 19 /*! … … 115 117 << "' msph= " << msph << ") beam=" << beam*minute2rad << " rad" << endl; 116 118 // on cree la carte 117 RandomGeneratorrg;119 ThSDR48RandGen rg; 118 120 if (fgair) { 119 121 cout << " Setting random number generator seed (using time) " << endl; -
trunk/SophyaProg/Tests/tmtrnd.cc
r3606 r3613 28 28 29 29 #include "srandgen.h" 30 #include "stsrand.h"31 30 #include "randr48.h" 32 31 33 32 34 // Choix du nom de la classe thread-safe a test s33 // Choix du nom de la classe thread-safe a tester 35 34 #define TC_RandomGenerator ThSDR48RandGen 36 35 -
trunk/SophyaProg/Tests/tmtrnd3.cc
r3390 r3613 17 17 #include "timing.h" 18 18 19 #include " stsrand.h"19 #include "randr48.h" 20 20 21 21 long Check_Redondances(TVector<r_8>& v); … … 55 55 cout<<"MTRndTest::run() - Nom= "<<nom_<<" vv.Size()= "<<vv_.Size() 56 56 <<" with threadsafe="<<thsafe_<<endl; 57 if(thsafe_) { // On appele RandomGeneratorThread-Safe58 RandomGeneratorrgen(nbuff_,true);57 if(thsafe_) { // On appele ThSDR48RandGen Thread-Safe 58 ThSDR48RandGen rgen(nbuff_,true); 59 59 for(sa_size_t k=0; k<vv_.Size(); k++) vv_(k) = rgen.Flat01(); 60 } else { // On appele RandomGeneratorNO Thread-Safe60 } else { // On appele ThSDR48RandGen NO Thread-Safe 61 61 // ATTENTION: le comportement est different selon qu'un thread 62 62 // se termine avant ou apres que le suivant commence: … … 65 65 // cela donne un comportement "tread_safe" APPARENT mais 66 66 // dans la realite drand48() N'EST PAS thread_safe !!!! 67 RandomGeneratorrgen(0,false);67 ThSDR48RandGen rgen(0,false); 68 68 for(sa_size_t k=0; k<vv_.Size(); k++) vv_(k) = rgen.Flat01(); 69 69 } … … 83 83 if(NTH<=0) NTH = 1; 84 84 cout<<"tmtrnd/arguments, VSZ= "<<VSZ<<" NTH= "<<NTH<<" NBUFF="<<NBUFF<<endl; 85 // Il ne faut pas que les buffers de RandomGeneratorsoient remplis85 // Il ne faut pas que les buffers de ThSDR48RandGen soient remplis 86 86 // au dela de ce qui est necessaire si on veut faire 87 87 // la comparaison avec le mono thread … … 100 100 //--- Init et set de l'aleatoire 101 101 //--- 102 RandomGeneratorrgen_nothsf(0,false);102 ThSDR48RandGen rgen_nothsf(0,false); 103 103 unsigned short seed_16v[3]; 104 104 { 105 105 cout<<"\n>>>>>>> Init de l'aleatoire"<<endl; 106 106 rgen_nothsf.AutoInit(5); 107 rgen_nothsf.GetSeed(seed_16v ,5);107 rgen_nothsf.GetSeed(seed_16v); 108 108 } 109 109 … … 116 116 { 117 117 cout<<"\n>>>>>>> Remplissage en mono-thread avec drand48()"<<endl; 118 rgen_nothsf. Init(seed_16v,5);118 rgen_nothsf.SetSeed(seed_16v); 119 119 for(int i=0;i<VSZ;i++) DATA0(i) = drand48(); 120 120 PrtTim(" "); … … 122 122 123 123 //--- 124 //--- Remplissage par threads avec RandomGeneratorthread safe124 //--- Remplissage par threads avec ThSDR48RandGen thread safe 125 125 //--- 126 126 TVector<r_8> DATA1(VSZ); 127 127 { 128 cout<<"\n>>>>>>> Remplissage par threads avec RandomGeneratorthread safe"<<endl;129 rgen_nothsf. Init(seed_16v,5);128 cout<<"\n>>>>>>> Remplissage par threads avec ThSDR48RandGen thread safe"<<endl; 129 rgen_nothsf.SetSeed(seed_16v); 130 130 vector<MTRndTest *> vth1; 131 131 cout<<"...tmtrnd/creating threads "<<endl; … … 147 147 148 148 //--- 149 //--- Remplissage par threads avec RandomGeneratorSANS thread safe149 //--- Remplissage par threads avec ThSDR48RandGen SANS thread safe 150 150 //--- 151 151 TVector<r_8> DATA2(VSZ); 152 152 { 153 cout<<"\n>>>>>>> Remplissage par threads avec RandomGeneratorSANS thread safe"<<endl;154 rgen_nothsf. Init(seed_16v,5);153 cout<<"\n>>>>>>> Remplissage par threads avec ThSDR48RandGen SANS thread safe"<<endl; 154 rgen_nothsf.SetSeed(seed_16v); 155 155 vector<MTRndTest *> vth2; 156 156 cout << "......tmtrnd/creating threads " << endl; … … 172 172 173 173 //--- 174 //--- remplissage en mono-thread avec RandomGenerator174 //--- remplissage en mono-thread avec ThSDR48RandGen 175 175 //--- 176 176 TVector<r_8> DATA0R(VSZ); 177 177 { 178 cout<<"\n>>>>>>> Remplissage en mono-thread avec RandomGenerator"<<endl;179 rgen_nothsf. Init(seed_16v,5);178 cout<<"\n>>>>>>> Remplissage en mono-thread avec ThSDR48RandGen"<<endl; 179 rgen_nothsf.SetSeed(seed_16v); 180 180 for(int i=0;i<VSZ;i++) DATA0R(i) = rgen_nothsf.Flat01(); 181 181 PrtTim(" ");
Note:
See TracChangeset
for help on using the changeset viewer.