summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Seibert <stan@mtrr.org>2011-08-22 17:01:15 -0400
committerStan Seibert <stan@mtrr.org>2011-08-22 17:01:15 -0400
commit39f00b31990130b32edbc988708886ce6bda7165 (patch)
treeb6fd5334ea301865b0453037d89891f590f0c84f
parentd7945856a7187d597232011e914a71843095e5bc (diff)
downloadchroma-39f00b31990130b32edbc988708886ce6bda7165.tar.gz
chroma-39f00b31990130b32edbc988708886ce6bda7165.tar.bz2
chroma-39f00b31990130b32edbc988708886ce6bda7165.zip
Expose interface to PDF creation on the GPU in the Simulation class.
-rwxr-xr-xsim.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/sim.py b/sim.py
index 3909ec4..a056c50 100755
--- a/sim.py
+++ b/sim.py
@@ -55,6 +55,7 @@ class Simulation(object):
print >>sys.stderr, 'Initializing random numbers generators...'
self.gpu_worker.setup_propagate(seed=self.seed)
self.gpu_worker.setup_daq(max(self.detector.pmtids))
+ self.pdf_config = None
def simulate(self, nevents, vertex_generator, keep_photon_start=False, keep_photon_stop=False,
run_daq=True, nreps=1):
@@ -91,6 +92,33 @@ class Simulation(object):
self.gpu_worker.propagate(max_steps=max_steps)
return self.gpu_worker.get_photons()
+ def create_pdf(self, nevents, vertex_generator, tbins, trange,
+ qbins, qrange, nreps=1):
+ photon_gen = repeating_iterator(self.photon_generator.generate_events(nevents, vertex_generator),
+ nreps)
+ return self.create_pdf_from_photons(nevents*nreps, photon_gen,
+ tbins, trange, qbins, qrange)
+
+ def create_pdf_from_photons(self, nevents, photon_generator,
+ tbins, trange, qbins, qrange):
+ '''Returns tuple: 1D array of channel hit counts, 3D array of (channel, time, charge) pdfs'''
+ pdf_config = (tbins, trange, qbins, qrange)
+ if pdf_config != self.pdf_config:
+ self.pdf_config = pdf_config
+ self.gpu_worker.setup_pdf(max(self.detector.pmtids), tbins, trange,
+ qbins, qrange)
+ else:
+ self.gpu_worker.clear_pdf()
+
+ for ev in itertools.islice(photon_generator, nevents):
+ self.gpu_worker.load_photons(ev.photon_start)
+ self.gpu_worker.propagate()
+ self.gpu_worker.run_daq()
+ self.gpu_worker.add_hits_to_pdf()
+
+ return self.gpu_worker.get_pdfs()
+
+
@profile_if_possible
def main():
import optparse