Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/clhep/src/NonRandomEngine.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/clhep/src/NonRandomEngine.cc (Version 11.3.0) and /externals/clhep/src/NonRandomEngine.cc (Version 9.4.p1)


  1 // -*- C++ -*-                                      1 
  2 //                                                
  3 // -------------------------------------------    
  4 //                           Hep Random           
  5 //                        --- NonRandomEngine     
  6 //                   class implementation file    
  7 // -------------------------------------------    
  8 // M. Fischler    - Created 9/30/99               
  9 //                                                
 10 // M. Fischler    - Modifications to capture s    
 11 //        are needed to retain sanity when put    
 12 // Mark Fischler  - Methods for distrib. insta    
 13 // M. Fischler    - Initialization of all stat    
 14 //                - at ctor time, to thwart a     
 15 // M. Fischler    - put/get for vectors of ulo    
 16 // M. Fischler    - State-saving using only in    
 17 //                                                
 18 //============================================    
 19                                                   
 20 #include "CLHEP/Random/NonRandomEngine.h"         
 21 #include "CLHEP/Random/engineIDulong.h"           
 22 #include "CLHEP/Random/DoubConv.h"                
 23 #include <cassert>                                
 24 #include <cstdlib>                                
 25 #include <iostream>                               
 26 #include <string>                                 
 27 #include <vector>                                 
 28                                                   
 29 namespace CLHEP {                                 
 30                                                   
 31 std::string NonRandomEngine::name() const {ret    
 32                                                   
 33 NonRandomEngine::NonRandomEngine() : nextHasBe    
 34              sequenceHasBeenSet(false),           
 35              intervalHasBeenSet(false) ,          
 36                                      nextRando    
 37              nInSeq(0),                           
 38              randomInterval(0.1) { }              
 39                                                   
 40 NonRandomEngine::~NonRandomEngine() { }           
 41                                                   
 42                                                   
 43 void NonRandomEngine::setNextRandom(double r)     
 44   nextRandom = r;                                 
 45   nextHasBeenSet=true;                            
 46   return;                                         
 47 }                                                 
 48                                                   
 49 void NonRandomEngine::setRandomSequence(double    
 50   sequence.clear();                               
 51   for (int i=0; i<n; i++) sequence.push_back(*    
 52   assert (sequence.size() == (unsigned int)n);    
 53   nInSeq = 0;                                     
 54   sequenceHasBeenSet=true;                        
 55   nextHasBeenSet=false;                           
 56   return;                                         
 57 }                                                 
 58                                                   
 59 void NonRandomEngine::setRandomInterval(double    
 60   randomInterval = x;                             
 61   intervalHasBeenSet=true;                        
 62   return;                                         
 63 }                                                 
 64                                                   
 65 double NonRandomEngine::flat() {                  
 66                                                   
 67   if (sequenceHasBeenSet) {                       
 68     double v = sequence[nInSeq++];                
 69     if (nInSeq >= sequence.size() ) sequenceHa    
 70     return v;                                     
 71   }                                               
 72                                                   
 73   if ( !nextHasBeenSet ) {                        
 74     std::cout                                     
 75   << "Attempt to use NonRandomEngine without s    
 76     exit(1);                                      
 77   }                                               
 78                                                   
 79   double a = nextRandom;                          
 80   nextHasBeenSet = false;                         
 81                                                   
 82   if (intervalHasBeenSet) {                       
 83     nextRandom += randomInterval;                 
 84     if ( nextRandom >= 1 ) nextRandom -= 1.0;     
 85     nextHasBeenSet = true;                        
 86   }                                               
 87                                                   
 88   return a;                                       
 89 }                                                 
 90                                                   
 91                                                   
 92 void NonRandomEngine::flatArray(const int size    
 93   for (int i = 0; i < size; ++i) {                
 94     vect[i] = flat();                             
 95   }                                               
 96 }                                                 
 97                                                   
 98 std::ostream & NonRandomEngine::put (std::ostr    
 99   std::string beginMarker = "NonRandomEngine-b    
100   os << beginMarker << "\nUvec\n";                
101   std::vector<unsigned long> v = put();           
102   for (unsigned int i=0; i<v.size(); ++i) {       
103      os <<  v[i] <<  "\n";                        
104   }                                               
105   return os;                                      
106 }                                                 
107                                                   
108 std::vector<unsigned long> NonRandomEngine::pu    
109   std::vector<unsigned long> v;                   
110   v.push_back (engineIDulong<NonRandomEngine>(    
111   std::vector<unsigned long> t;                   
112   v.push_back(static_cast<unsigned long>(nextH    
113   v.push_back(static_cast<unsigned long>(seque    
114   v.push_back(static_cast<unsigned long>(inter    
115   t = DoubConv::dto2longs(nextRandom);            
116   v.push_back(t[0]); v.push_back(t[1]);           
117   v.push_back(static_cast<unsigned long>(nInSe    
118   t = DoubConv::dto2longs(randomInterval);        
119   v.push_back(t[0]); v.push_back(t[1]);           
120   v.push_back(static_cast<unsigned long>(seque    
121   for (unsigned int i=0; i<sequence.size(); ++    
122     t = DoubConv::dto2longs(sequence[i]);         
123     v.push_back(t[0]); v.push_back(t[1]);         
124   }                                               
125   return v;                                       
126 }                                                 
127                                                   
128 std::istream & NonRandomEngine::get (std::istr    
129   std::string beginMarker = "NonRandomEngine-b    
130   is >> beginMarker;                              
131   if (beginMarker != "NonRandomEngine-begin")     
132     is.clear(std::ios::badbit | is.rdstate());    
133     std::cerr << "\nInput mispositioned or"       
134         << "\nNonRandomEngine state descriptio    
135         << "\nwrong engine type found.\n";        
136     return is;                                    
137   }                                               
138   return getState(is);                            
139 }                                                 
140                                                   
141 std::string NonRandomEngine::beginTag ( )  {      
142   return "NonRandomEngine-begin";                 
143 }                                                 
144                                                   
145 std::istream & NonRandomEngine::getState (std:    
146   if ( possibleKeywordInput ( is, "Uvec", next    
147     std::vector<unsigned long> v;                 
148     unsigned long uu = 99999;                     
149     unsigned long ssiz = 0;                       
150     for (unsigned int istart=0; istart < 10; +    
151       is >> uu;                                   
152       if (!is) {                                  
153   is.clear(std::ios::badbit | is.rdstate());      
154         std::cout << "istart = " << istart <<     
155   std::cerr                                       
156   << "\nNonRandomEngine state (vector) descrip    
157     << "\ngetState() has failed."                 
158          << "\nInput stream is probably mispos    
159         return is;                                
160       }                                           
161       v.push_back(uu);                            
162       if (istart==9) ssiz = uu;                   
163     }                                             
164     for (unsigned int ivec=0; ivec < 2*ssiz; +    
165       is >> uu;                                   
166       if (!is) {                                  
167         is.clear(std::ios::badbit | is.rdstate    
168         std::cerr << "\nNonRandomEngine state     
169     << "\ngetState() has failed."                 
170          << "\nInput stream is probably mispos    
171         return is;                                
172       }                                           
173       v.push_back(uu);                            
174     }                                             
175     getState(v);                                  
176     return (is);                                  
177   }                                               
178                                                   
179 //  is >> nextHasBeenSet;  Removed, encompasse    
180                                                   
181   std::string  endMarker  = "NonRandomEngine-e    
182   is >> sequenceHasBeenSet >> intervalHasBeenS    
183   is >> nextRandom >> nInSeq >> randomInterval    
184   unsigned int seqSize;                           
185   is >> seqSize;                                  
186   sequence.clear();                               
187   double x;                                       
188   for (unsigned int i = 0; i < seqSize; ++i) {    
189     is >> x;                                      
190     sequence.push_back(x);                        
191   }                                               
192   is >> endMarker;                                
193   if (endMarker != "NonRandomEngine-end") {       
194     is.clear(std::ios::badbit | is.rdstate());    
195     std::cerr << "\n NonRandomEngine state des    
196         << "\nInput stream is probably misposi    
197     return is;                                    
198   }                                               
199   return is;                                      
200 }                                                 
201                                                   
202 bool NonRandomEngine::get (const std::vector<u    
203   if ((v[0] & 0xffffffffUL) != engineIDulong<N    
204     std::cerr <<                                  
205       "\nNonRandomEngine get:state vector has     
206     return false;                                 
207   }                                               
208   return getState(v);                             
209 }                                                 
210                                                   
211 bool NonRandomEngine::getState (const std::vec    
212   unsigned long seqSize = v[9];                   
213   if (v.size() != 2*seqSize + 10 ) {              
214     std::cerr <<                                  
215    "\nNonRandomEngine get:state vector has wro    
216     std::cerr << "  (length = " << v.size()       
217               << "; expected " << 2*seqSize +     
218     return false;                                 
219   }                                               
220   std::vector<unsigned long> t(2);                
221   nextHasBeenSet     = (v[1]!=0);                 
222   sequenceHasBeenSet = (v[2]!=0);                 
223   intervalHasBeenSet = (v[3]!=0);                 
224   t[0] = v[4]; t[1] = v[5]; nextRandom = DoubC    
225   nInSeq = (unsigned int)v[6];                    
226   t[0] = v[7]; t[1] = v[8]; randomInterval = D    
227   sequence.clear();                               
228   for (unsigned long i=0; i<seqSize; ++i) {       
229     t[0] = v[2*i+10]; t[1] = v[2*i+11];           
230     sequence.push_back(DoubConv::longs2double(    
231   }                                               
232   return true;                                    
233 }                                                 
234                                                   
235                                                   
236 }  // namespace CLHEP                             
237                                                   
238