From 01d5527db39520ca548518ed1194f8b863a4f077 Mon Sep 17 00:00:00 2001 From: Stan Seibert Date: Wed, 10 Aug 2011 11:25:39 -0400 Subject: Rename chroma.io to chroma.fileio to avoid collision with Python package named io --- sim.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sim.py') diff --git a/sim.py b/sim.py index 34477f9..7644266 100755 --- a/sim.py +++ b/sim.py @@ -8,7 +8,7 @@ import detectors import optics import gpu import g4gen -from io import root +from fileio import root import numpy as np import math import ROOT -- cgit From 142e790aeae55d405f7921527cd8e869d36c5671 Mon Sep 17 00:00:00 2001 From: Stan Seibert Date: Wed, 10 Aug 2011 19:22:06 -0400 Subject: Use WCSim properties for water with the lbne detector --- sim.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'sim.py') diff --git a/sim.py b/sim.py index 7644266..9f89cd1 100755 --- a/sim.py +++ b/sim.py @@ -120,14 +120,14 @@ def main(): detector.build(bits=options.nbits) print >>sys.stderr, 'Creating generator...' - detector_material = optics.water + detector_material = optics.water_wcsim generator_thread = GeneratorProcess(particle=options.particle, energy=options.energy, position=position, direction=direction, nevents=options.nevents, material=detector_material) - print >>sys.stderr, 'WARNING: ASSUMING DETECTOR IS WATER!!' + print >>sys.stderr, 'WARNING: ASSUMING DETECTOR IS WCSIM WATER!!' # Do this now so we can get ahead of the photon propagation print >>sys.stderr, 'Starting GEANT4 generator...' -- cgit From 56afb978b2416ee9a14ecacdf41ab996d1747b66 Mon Sep 17 00:00:00 2001 From: Stan Seibert Date: Wed, 10 Aug 2011 20:56:14 -0400 Subject: Set the GEANT4 and CUDA RNG seeds using current time and process ID if not set on command line. --- sim.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'sim.py') diff --git a/sim.py b/sim.py index 9f89cd1..26a6b68 100755 --- a/sim.py +++ b/sim.py @@ -2,6 +2,7 @@ import sys import optparse import time +import os import multiprocessing import detectors @@ -13,6 +14,11 @@ import numpy as np import math import ROOT +def pick_seed(): + '''Returns a seed for a random number generator selected using + a mixture of the current time and the current process ID.''' + return int(time.time()) ^ (os.getpid() << 16) + def info(type, value, tb): if hasattr(sys, 'ps1') or not sys.stderr.isatty(): # we are in interactive mode or we don't have a tty-like @@ -26,10 +32,8 @@ def info(type, value, tb): # ...then start the debugger in post-mortem mode. pdb.pm() -sys.excepthook = info - class GeneratorProcess(multiprocessing.Process): - def __init__(self, particle, energy, position, direction, nevents, material): + def __init__(self, particle, energy, position, direction, nevents, material, seed=None): multiprocessing.Process.__init__(self) self.particle = particle @@ -38,11 +42,12 @@ class GeneratorProcess(multiprocessing.Process): self.direction = direction self.nevents = nevents self.material = material + self.seed = seed self.queue = multiprocessing.Queue() def run(self): print >>sys.stderr, 'Starting generator thread...' - generator = g4gen.G4Generator(self.material) + generator = g4gen.G4Generator(self.material, seed=self.seed) for i in xrange(self.nevents): photons = generator.generate_photons(particle_name=self.particle, @@ -87,7 +92,8 @@ def main(): parser.add_option('-b', type='int', dest='nbits', default=10) parser.add_option('-j', type='int', dest='device', default=None) parser.add_option('-n', type='int', dest='nblocks', default=64) - + parser.add_option('-s', type='int', dest='seed', default=None, + help='Set random number generator seed') parser.add_option('--detector', type='string', dest='detector', default='microlbne') parser.add_option('--nevents', type='int', dest='nevents', default=100) parser.add_option('--particle', type='string', dest='particle', default='e-') @@ -115,6 +121,10 @@ def main(): position = np.array(eval(options.pos), dtype=float) direction = np.array(eval(options.dir), dtype=float) detector = detectors.find(options.detector) + if options.seed is None: + options.seed = pick_seed() + + print >>sys.stderr, 'RNG seed:', options.seed print >>sys.stderr, 'Creating BVH for detector "%s" with %d bits...' % (options.detector, options.nbits) detector.build(bits=options.nbits) @@ -126,7 +136,8 @@ def main(): position=position, direction=direction, nevents=options.nevents, - material=detector_material) + material=detector_material, + seed=options.seed) print >>sys.stderr, 'WARNING: ASSUMING DETECTOR IS WCSIM WATER!!' # Do this now so we can get ahead of the photon propagation @@ -140,7 +151,7 @@ def main(): gpu_worker.load_geometry(detector) print >>sys.stderr, 'Initializing random numbers generators...' - gpu_worker.setup_propagate() + gpu_worker.setup_propagate(seed=options.seed) gpu_worker.setup_daq(max(detector.pmtids)) # Create output file @@ -191,4 +202,5 @@ def main(): print >>sys.stderr, 'Done. %1.1f events/sec, %1.0f photons/sec.' % (options.nevents/(end_sim - start_sim), nphotons/(end_sim - start_sim)) if __name__ == '__main__': + sys.excepthook = info main() -- cgit