Age | Commit message (Collapse) | Author |
|
|
|
millimeters/nanoseconds/MeV in order to match GEANT4, and also avoid
huge discrepancies in magnitude caused by values like 10e-9 sec.
Along the way, cleaned up a few things:
* Switch the PI and SPEED_OF_LIGHT constants from double to single
precision. This avoid some unnecessary double precision calculations
in the GPU code.
* Fixed a silly problem in the definition of the spherical spiral. Now
the demo detector looks totally awesome. Also wrapped it in a
black surface. Demo detector now has 10055 PMTs.
* Updated the test_ray_intersection data file to reflect the new units.
* Fix a missing import in chroma.gpu.tools
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
speed from 3.3M -> 3.45!.
|
|
|
|
|
|
|
|
|
|
the GPU, and run the DAQ multiple times on the same photons in a
likelihood calculation.
Propagating the same photons in a warp speeds up propagation by a
factor of 3 (and we could do this even better if we wanted), and this
improves the statistics in a likelihood evaluation quite a bit.
Running the DAQ multiple times is also an inexpensive way to improve
the quality of the PDF estimates.
|
|
|
|
|
|
it assumed the array was meant to be in descending order; it now assumes ascending order and this assumption is documented.
|
|
|
|
style for cuda code is now compliant with python PEP 7 -- Style Guide for C Code.
|
|
|
|
The sample_cdf() device function will draw random numbers from an arbitrary
disribution given a cumulative distribution function in the form of
a list of x,y points, beginning with y=0 and ending with y=1. For an
example of how to convert a ROOT histogram to this form, see the unit
test in test_sample_cdf.py
|
|
independent classes.
|
|
the object in the center of the screen.
|
|
|
|
coloring is now calculated using the new searching/sorting algorithms.
|
|
|
|
to [number of bins] * [number of PMTs]. Instead we accumulate information
as the Monte Carlo runs in order to evaluate the PDFs only at the points
required for the likelihood calculation.
This new interface has been propagated all the way up from the GPU class
through the Simulation class to the Likelihood class. We have preserved
the full binned histogram implementation in case we need it in the future.
|
|
|
|
angular distribution is slightly different, and now fits with the
distribution given in the GEANT4 physics reference manual.
Unit test is now included to verify the correctness of the scattering.
|
|
at exactly normal incidence.
The plane of incidence was undefined in that case, but should have
been the plane normal to polarization vector.
|
|
|
|
number of rotational steps to extrude instead of the angle step size. updated documention in make.py.
|
|
|
|
|
|
[0.0,1.0]
|
|
to make it 100x faster. Instead of having each CUDA thread loop over
the full triangle list, we give each thread a single triangle and ask
it to look up the hit status and color for that triangle. The hit
array and color array are small enough (approx 30,000 entries) to fit
into the cache, so this goes much faster.
Now the event viewer is quite snappy!
|
|
photon into NaN on the GPU. Now we abort these photons rather than
let them lock up the intersect_mesh() method. There is a new history
bit (#31) that indicates when a NAN_ABORT has occurred, and this bit
is checked for by GPU.propagate(). If set for any of the photons, a
warning message is printed.
While not as good as preventing the NaN problem in the first place,
this at least ensures we are aware of the problem.
|
|
|
|
is further than a triangle the ray/photon has already intersected
|
|
photons that didn't die during propagation into the beginning of the
list. This speeds up propagation by reducing the number of partially
filled CUDA warps on the next propagation step.
2.2 million photons/sec on LBNE!
|
|
|
|
boost!
|
|
hierarchy. cached files are stored in $HOME/.chroma. fixed the timeit() decorator so that the decorated function is still able to pass back a return value.
|
|
|
|
and length; this reduces a bit of arithmetic when traversing the bounding volume hierarchy and makes the code in Geometry.build() more concise. add an untested cuda kernel to interleave the bits in three uint64 arrays.
|
|
|
|
same channel, their history bits are OR'ed together.
|
|
offsets to load. Now events with more photons than RNG states
can be propagated through multiple kernel calls.
Also lays the groundwork for consolidating photons between steps
to reduce the amount of propagation work required.
|
|
<detector_name> -i <name_of_io_file>.
|