summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorStan Seibert <stan@mtrr.org>2011-09-26 16:52:26 -0400
committerStan Seibert <stan@mtrr.org>2011-09-26 16:52:26 -0400
commita01bcf3748af2e473d27770d153d3bee4a81af08 (patch)
treec5b5803b35811f4d7ccaadb3f2d28081ff187c06 /bin
parent0736d51bf19aead11332e31bc1172d7de4d3d9f3 (diff)
downloadchroma-a01bcf3748af2e473d27770d153d3bee4a81af08.tar.gz
chroma-a01bcf3748af2e473d27770d153d3bee4a81af08.tar.bz2
chroma-a01bcf3748af2e473d27770d153d3bee4a81af08.zip
Fix indentation in chroma-sim and allow detector name to have multiple dots.
Diffstat (limited to 'bin')
-rwxr-xr-xbin/chroma-sim165
1 files changed, 82 insertions, 83 deletions
diff --git a/bin/chroma-sim b/bin/chroma-sim
index fa106a2..9b4a536 100755
--- a/bin/chroma-sim
+++ b/bin/chroma-sim
@@ -2,86 +2,85 @@
#--*-python-*-
if __name__ == '__main__':
- import optparse
- import sys
- import imp
- import os
- import inspect
- import numpy as np
-
- from chroma import event
- from chroma import itertoolset
- from chroma import Simulation
- from chroma import root
-
- parser = optparse.OptionParser('%prog <detector>')
- parser.add_option('-o', dest='output_filename',
- help='output filename', default='out.root')
- parser.add_option('-j', type='int', dest='device',
- help='CUDA device number', default=None)
- parser.add_option('-s', type='int', dest='seed',
- help='random number generator seed')
- parser.add_option('-g', type='int', dest='ngenerators',
- help='number of GEANT4 processes', default=4)
- parser.add_option('-n', '--nevents', type='int', dest='nevents',
- default=100)
- parser.add_option('-p', '--particle', dest='particle',
- help='particle name', default='e-')
- parser.add_option('-k', '--ke', type='float', dest='ke',
- help='kinetic energy (MeV)', default=100.0)
- parser.add_option('--pos', dest='pos',
- help='particle vertex origin', default='0,0,0')
- parser.add_option('--dir', dest='dir',
- help='particle vertex direction', default='1,0,0')
- parser.add_option('--save-photons-beg', action='store_true',
- dest='save_photons_beg',
- help='save initial photons to disk', default=False)
- parser.add_option('--save-photons-end', action='store_true',
- dest='save_photons_end',
- help='save final photons to disk', default=False)
-
- options, args = parser.parse_args()
-
- if len(args) < 1:
- sys.exit(parser.format_help())
-
- name, attr = args[0].split('.')
-
- try:
- file, path, description = imp.find_module(name)
- except ImportError:
- raise
-
- module = imp.load_module(name, file, path, description)
-
- detector = getattr(module, attr)
-
- if inspect.isfunction(detector):
- detector = detector()
-
- pos = np.array([float(s) for s in options.pos.split(',')], dtype=float)
- dir = np.array([float(s) for s in options.dir.split(',')], dtype=float)
-
- vertex = event.Vertex(options.particle, pos, dir, options.ke)
-
- sim = Simulation(detector, seed=options.seed, cuda_device=options.device,
- geant4_processes=options.ngenerators)
-
- print 'RNG seed: %i' % sim.seed
-
- writer = root.RootWriter(options.output_filename)
-
- for i, ev in \
- enumerate(sim.simulate(itertoolset.repeatcopy(vertex,
- options.nevents),
- keep_photons_beg=options.save_photons_beg,
- keep_photons_end=options.save_photons_end)):
- print '\rEvent: %i' % (i+1),
- sys.stdout.flush()
-
- assert ev.nphotons > 0, 'Geant4 generated event with no photons!'
-
- writer.write_event(ev)
- print
-
- writer.close()
+ import optparse
+ import sys
+ import imp
+ import os
+ import inspect
+ import numpy as np
+
+ from chroma import event
+ from chroma import itertoolset
+ from chroma import Simulation
+ from chroma import root
+
+ parser = optparse.OptionParser('%prog <detector>')
+ parser.add_option('-o', dest='output_filename',
+ help='output filename', default='out.root')
+ parser.add_option('-j', type='int', dest='device',
+ help='CUDA device number', default=None)
+ parser.add_option('-s', type='int', dest='seed',
+ help='random number generator seed')
+ parser.add_option('-g', type='int', dest='ngenerators',
+ help='number of GEANT4 processes', default=4)
+ parser.add_option('-n', '--nevents', type='int', dest='nevents',
+ default=100)
+ parser.add_option('-p', '--particle', dest='particle',
+ help='particle name', default='e-')
+ parser.add_option('-k', '--ke', type='float', dest='ke',
+ help='kinetic energy (MeV)', default=100.0)
+ parser.add_option('--pos', dest='pos',
+ help='particle vertex origin', default='0,0,0')
+ parser.add_option('--dir', dest='dir',
+ help='particle vertex direction', default='1,0,0')
+ parser.add_option('--save-photons-beg', action='store_true',
+ dest='save_photons_beg',
+ help='save initial photons to disk', default=False)
+ parser.add_option('--save-photons-end', action='store_true',
+ dest='save_photons_end',
+ help='save final photons to disk', default=False)
+
+ options, args = parser.parse_args()
+
+ if len(args) < 1:
+ sys.exit(parser.format_help())
+
+ module_name, function_name = args[0].rsplit('.', 1)
+
+ try:
+ module = __import__(module_name, fromlist=[function_name])
+ except ImportError:
+ raise
+
+ detector = getattr(module, function_name)
+
+ if inspect.isfunction(detector):
+ detector = detector()
+
+ pos = np.array([float(s) for s in options.pos.split(',')], dtype=float)
+ dir = np.array([float(s) for s in options.dir.split(',')], dtype=float)
+
+ vertex = event.Vertex(options.particle, pos, dir, options.ke)
+
+ sim = Simulation(detector, seed=options.seed, cuda_device=options.device,
+ geant4_processes=options.ngenerators)
+
+ print 'RNG seed: %i' % sim.seed
+
+ writer = root.RootWriter(options.output_filename)
+
+ for i, ev in \
+ enumerate(sim.simulate(itertoolset.repeatcopy(vertex,
+ options.nevents),
+ keep_photons_beg=options.save_photons_beg,
+ keep_photons_end=options.save_photons_end)):
+ print '\rEvent: %i' % (i+1),
+ sys.stdout.flush()
+
+ assert ev.nphotons > 0, 'Geant4 generated event with no photons!'
+
+ writer.write_event(ev)
+ print
+
+ writer.close()
+