Commit in SimDist/packages/clhep on MAIN
DRand48Engine.cc+351added 1.1
Makefile.in+13-101.5 -> 1.6
+364-10
1 added + 1 modified, total 2 files
add workaround patch for cygwin compile issue

SimDist/packages/clhep
DRand48Engine.cc added at 1.1
diff -N DRand48Engine.cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ DRand48Engine.cc	23 Jul 2010 20:10:33 -0000	1.1
@@ -0,0 +1,351 @@
+// -*- C++ -*-
+// $Id: DRand48Engine.cc,v 1.1 2010/07/23 20:10:33 jeremy Exp $
+// -----------------------------------------------------------------------
+//                             HEP Random
+//                        --- DRand48Engine ---
+//                      class implementation file
+// -----------------------------------------------------------------------
+// This file is part of Geant4 (simulation toolkit for HEP).
+
+// =======================================================================
+// G.Cosmo        - Created: 5th September 1995
+//                - Minor corrections: 31st October 1996
+//                - Added methods for engine status: 19th November 1996
+//                - Added srand48(), seed48(), drand48() implementations
+//                  for Windows/NT: 6th March 1997
+//                - Fixed bug in setSeeds(): 15th September 1997
+//                - Private copy constructor and operator=: 26th Feb 1998
+// J.Marraffino   - Added stream operators and related constructor.
+//                  Added automatic seed selection from seed table and
+//                  engine counter: 16th Feb 1998
+// J.Marraffino   - Remove dependence on hepString class  13 May 1999
+// E.Tcherniaev   - More accurate code for drand48() on NT base on
+//                  a code extracted from GNU C Library 2.1.3: 8th Nov 2000
+// M. Fischler    - In restore, checkFile for file not found    03 Dec 2004
+// M. Fischler    - Methods for distrib. instacne save/restore  12/8/04    
+// M. Fischler    - split get() into tag validation and 
+//                  getState() for anonymous restores           12/27/04    
+// M. Fischler    - put/get for vectors of ulongs		3/8/05
+// M. Fischler    - State-saving using only ints, for portability 4/12/05
+//
+// =======================================================================
+
+#include "CLHEP/Random/defs.h"
+#include "CLHEP/Random/Random.h"
+#include "CLHEP/Random/DRand48Engine.h"
+#include "CLHEP/Random/RandomFunc.h"
+#include "CLHEP/Random/engineIDulong.h"
+#include <string.h>
+#include <stdlib.h>
+
+//#define TRACE_IO
+
+namespace CLHEP {
+
+static const int MarkerLen = 64; // Enough room to hold a begin or end marker. 
+// Number of instances with automatic seed selection
+int DRand48Engine::numEngines = 0;
+
+std::string DRand48Engine::name() const {return "DRand48Engine";}
+
+// Maximum index into the seed table
+int DRand48Engine::maxIndex = 215;
+
+DRand48Engine::DRand48Engine(long seed)
+{
+   setSeed(seed,0);
+   setSeeds(&theSeed,0);
+}
+
+DRand48Engine::DRand48Engine()
+{
+   long seeds[2];
+   long seed;
+   int cycle,curIndex;
+
+   cycle = abs(int(numEngines/maxIndex));
+   curIndex = abs(int(numEngines%maxIndex));
+   numEngines += 1;
+   long mask = ((cycle & 0x007fffff) << 8);
+   HepRandom::getTheTableSeeds( seeds, curIndex );
+   seed = seeds[0]^mask;
+   setSeed(seed,0);
+   setSeeds(&theSeed,0);
+}
+
+DRand48Engine::DRand48Engine(int rowIndex, int colIndex)
+{
+   long seed;
+   long seeds[2];
+
+   int cycle = abs(int(rowIndex/maxIndex));
+   int row = abs(int(rowIndex%maxIndex));
+   int col = abs(int(colIndex%2));
+   long mask = ((cycle & 0x000007ff) << 20);
+   HepRandom::getTheTableSeeds( seeds, row );
+   seed = (seeds[col])^mask;
+   setSeed(seed,0);
+   setSeeds(&theSeed,0);
+}
+
+DRand48Engine::DRand48Engine(std::istream& is)
+{
+   is >> *this;
+}
+
+DRand48Engine::~DRand48Engine() {}
+
+void DRand48Engine::setSeed(long seed, int)
+{
+   srand48( seed );
+   theSeed = seed;
+}
+
+void DRand48Engine::setSeeds(const long* seeds, int)
+{
+  setSeed(seeds ? *seeds : 19780503L, 0);
+  theSeeds = seeds;
+}
+
+void DRand48Engine::saveStatus( const char filename[] ) const
+{
+   std::ofstream outFile( filename, std::ios::out ) ;
+
+   if (!outFile.bad()) {
+    outFile << "Uvec\n";
+    std::vector<unsigned long> v = put();
+		     #ifdef TRACE_IO
+			 std::cout << "Result of v = put() is:\n"; 
+		     #endif
+    for (unsigned int i=0; i<v.size(); ++i) {
+      outFile << v[i] << "\n";
+		     #ifdef TRACE_IO
+			   std::cout << v[i] << " ";
+			   if (i%6==0) std::cout << "\n";
+		     #endif
+    }
+		     #ifdef TRACE_IO
+			 std::cout << "\n";
+		     #endif
+  }
+
+#ifdef REMOVED
+   unsigned short dummy[] = { 0, 0, 0 };
+   unsigned short* cseed = seed48(dummy);
+   if (!outFile.bad()) {
+     outFile << theSeed << std::endl;
+     for (int i=0; i<3; ++i) {
+       outFile << cseed[i] << std::endl;
+       dummy[i] = cseed[i];
+     }
+     seed48(dummy);
+   }
+#endif
+}
+
+void DRand48Engine::restoreStatus( const char filename[] )
+{
+   std::ifstream inFile( filename, std::ios::in);
+   unsigned short cseed[3];
+
+   if (!checkFile ( inFile, filename, engineName(), "restoreStatus" )) {
+     std::cerr << "  -- Engine state remains unchanged\n";
+     return;
+   }
+  if ( possibleKeywordInput ( inFile, "Uvec", theSeed ) ) {
+    std::vector<unsigned long> v;
+    unsigned long xin;
+    for (unsigned int ivec=0; ivec < VECTOR_STATE_SIZE; ++ivec) {
+      inFile >> xin;
+	       #ifdef TRACE_IO
+	       std::cout << "ivec = " << ivec << "  xin = " << xin << "    ";
+	       if (ivec%3 == 0) std::cout << "\n"; 
+	       #endif
+      if (!inFile) {
+        inFile.clear(std::ios::badbit | inFile.rdstate());
+        std::cerr << "\nDRand48Engine state (vector) description improper."
+	       << "\nrestoreStatus has failed."
+	       << "\nInput stream is probably mispositioned now." << std::endl;
+        return;
+      }
+      v.push_back(xin);
+    }
+    getState(v);
+    return;
+  }
+
+   if (!inFile.bad() && !inFile.eof()) {
+     inFile >> theSeed;
+     for (int i=0; i<3; ++i)
+//     inFile >> theSeed;  removed -- encompased by possibleKeywordInput
+     seed48(cseed);
+   }
+}
+
+void DRand48Engine::showStatus() const
+{
+   unsigned short dummy[] = { 0, 0, 0 };
+   unsigned short* cseed = seed48(dummy);
+   std::cout << std::endl;
+   std::cout << "-------- DRand48 engine status ---------" << std::endl;
+   std::cout << " Initial seed  = " << theSeed << std::endl;
+   std::cout << " Current seeds = " << cseed[0] << ", ";
+   std::cout                        << cseed[1] << ", ";
+   std::cout                        << cseed[2] << std::endl;
+   std::cout << "----------------------------------------" << std::endl;
+   for (int i=0; i<3; ++i)
+     dummy[i] = cseed[i];
+   seed48(dummy);
+}
+
+double DRand48Engine::flat()
+{
+   double num = 0.;
+
+   while (num == 0.)
+     num = drand48();
+   return num;
+}
+
+void DRand48Engine::flatArray(const int size, double* vect)
+{
+   int i;
+
+   for (i=0; i<size; ++i)
+     vect[i]=flat();
+}
+
+std::ostream & DRand48Engine::put ( std::ostream& os ) const
+{
+   char beginMarker[] = "DRand48Engine-begin";
+   os << beginMarker << "\nUvec\n";
+   std::vector<unsigned long> v = put();
+   for (unsigned int i=0; i<v.size(); ++i) {
+     os <<  v[i] <<  "\n";
+   }
+  return os;  
+
+#ifdef REMOVED
+   unsigned short dummy[] = { 0, 0, 0 };
+   unsigned short* cseed = seed48(dummy);
+   char endMarker[] = "DRand48Engine-end";
+   os << " " << beginMarker << " ";
+   os << theSeed << " ";
+   for (int i=0; i<3; ++i) {
+     dummy[i] = cseed[i];
+     os << cseed[i] << " ";
+   }
+   os << endMarker << " ";
+   seed48(dummy);
+   return os;
+#endif
+}
+
+std::vector<unsigned long> DRand48Engine::put () const {
+  std::vector<unsigned long> v;
+  v.push_back (engineIDulong<DRand48Engine>());
+  unsigned short dummy[] = { 0, 0, 0 };
+  unsigned short* cseed = seed48(dummy);
+  for (int i=0; i<3; ++i) {
+    dummy[i] = cseed[i];
+    v.push_back (static_cast<unsigned long>(cseed[i]));
+  }
+  seed48(dummy);   
+  return v;
+}
+
+std::istream & DRand48Engine::get ( std::istream& is )
+{
+  char beginMarker [MarkerLen];
+  is >> std::ws;
+  is.width(MarkerLen);  // causes the next read to the char* to be <=
+			// that many bytes, INCLUDING A TERMINATION \0 
+			// (Stroustrup, section 21.3.2)
+  is >> beginMarker;
+  if (strcmp(beginMarker,"DRand48Engine-begin")) {
+     is.clear(std::ios::badbit | is.rdstate());
+     std::cerr << "\nInput stream mispositioned or"
+	       << "\nDRand48Engine state description missing or"
+	       << "\nwrong engine type found." << std::endl;
+     return is;
+  }
+  return getState(is);
+}
+
+std::string DRand48Engine::beginTag ( )  { 
+  return "DRand48Engine-begin"; 
+}
+
+std::istream & DRand48Engine::getState ( std::istream& is )  
+{
+  unsigned short cseed[3];
+  if ( possibleKeywordInput ( is, "Uvec", cseed[0] ) ) {
+    std::vector<unsigned long> v;
+    unsigned long uu;
+    #ifdef TRACE_IO
+    std::cout << "DRand48Engine::getState detected Uvec keyword\n";
+    uu = 999999;
+    #endif
+    for (unsigned int ivec=0; ivec < VECTOR_STATE_SIZE; ++ivec) {
+      uu = 999999;
+      is >> uu;
+      #ifdef TRACE_IO
+      std::cout << "ivec = " << ivec << " uu = " << uu << "\n";
+      #endif
+      if (!is) {
+        is.clear(std::ios::badbit | is.rdstate());
+        std::cerr << "\nDRand48Engine state (vector) description improper."
+		<< "\ngetState() has failed."
+	       << "\nInput stream is probably mispositioned now." << std::endl;
+        return is;
+      }
+      v.push_back(uu);
+    }
+    getState(v);
+    return (is);
+  }
+
+//  is >> cseed[0] was removed from loop, encompassed by possibleKeywordInput()
+
+  char endMarker   [MarkerLen];
+  is >> theSeed;
+  for (int i=1; i<3; ++i) {
+    is >> cseed[i];
+  }
+  is >> std::ws;
+  is.width(MarkerLen);
+  is >> endMarker;
+  if (strcmp(endMarker,"DRand48Engine-end")) {
+     is.clear(std::ios::badbit | is.rdstate());
+     std::cerr << "\nDRand48Engine state description incomplete."
+	       << "\nInput stream is probably mispositioned now." << std::endl;
+     return is;
+   }
+   seed48(cseed);
+   return is;
+}
+
+bool DRand48Engine::get (const std::vector<unsigned long> & v) {
+  if ((v[0] & 0xffffffffUL) != engineIDulong<DRand48Engine>()) {
+    std::cerr << 
+    	"\nDRand48Engine get:state vector has wrong ID word - state unchanged\n";
+    return false;
+  }
+  return getState(v);
+}
+
+bool DRand48Engine::getState (const std::vector<unsigned long> & v) {
+  if (v.size() != VECTOR_STATE_SIZE ) {
+    std::cerr << 
+   "\nDRand48Engine getState:state vector has wrong length - state unchanged\n";
+    return false;
+  }
+  unsigned short cseed[3];
+  for (int i=0; i<3; ++i) {
+    cseed[i] = static_cast<unsigned short>(v[i+1]);
+  }
+  seed48(cseed);
+  return true;
+}
+
+}  // namespace CLHEP

SimDist/packages/clhep
Makefile.in 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- Makefile.in	24 Sep 2007 22:01:22 -0000	1.5
+++ Makefile.in	23 Jul 2010 20:10:33 -0000	1.6
@@ -1,16 +1,19 @@
-# $Header: /cvs/lcd/SimDist/packages/clhep/Makefile.in,v 1.5 2007/09/24 22:01:22 jeremy Exp $
+# $Header: /cvs/lcd/SimDist/packages/clhep/Makefile.in,v 1.6 2010/07/23 20:10:33 jeremy Exp $
 
 # generic package targets
 include ../../build/package.gmk
 
-# default rule
-all: packageinfo download config compile install liblink
+patch:
+	cp ./DRand48Engine.cc $(PACKAGE_BASEDIR)/CLHEP/Random/src
 
 # Make a symlink to the library, i.e. when using an older CLHEP version.
-liblink:
-	@lib=$(PACKAGE_BASEDIR)/lib/libCLHEP-g++*.*; \
-	if test -e $$lib; then \
-	if ! test -e libCLHEP.a; then \
-	cd $(PACKAGE_BASEDIR)/lib && ln -s $$lib libCLHEP.a; \
-	fi; \
-	fi
\ No newline at end of file
+#liblink:
+#	@lib=$(PACKAGE_BASEDIR)/lib/libCLHEP-g++*.*; \
+#	if test -e $$lib; then \
+#	if ! test -e libCLHEP.a; then \
+#	cd $(PACKAGE_BASEDIR)/lib && ln -s $$lib libCLHEP.a; \
+#	fi; \
+#	fi
+
+# default rule
+all: packageinfo download patch config compile install
CVSspam 0.2.8