Age | Commit message (Collapse) | Author |
|
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
|
|
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>.
|
|
|
|
|
|
pressing the m key.
|
|
now thrown randomly across each triangle instead of only at the center of each triangle. all of the rendering kernels have been rewritten so that they operate additively; for example, you may now throw photons from the light source onto the scene, render from the camera to the scene, then throw more photons and render again.
|
|
to integers in alpha blending until the last step.
|
|
|
|
the hybrid monte carlo ray tracer in a separate thread. the camera object is initialized by passing a pycuda.driver.Context object and a threading.Lock object; you can then run kernels and copy arrays to and from the device in the same context as that used by the camera by acquiring the lock, calling context.push(), executing the kernel and/or copying arrays, calling context.pop(), and then releasing the lock. fixed mistakes in both build_rgb_lookup() and render() where I had accidently switched the green and blue photons. updated the lbne geometry with the latest specifications. added profiles for the sno pmt and concentrator.
|
|
tracer and photon simulation can be run in the same context. added the ability to add alpha channel to triangle color so that triangles can be made transparent. added __noinline__ modifier to certain device functions to speed up kernel compilation.
|
|
you to copy photon information within a thread but still keep a single random number generator throughout the thread.
|
|
of each triangle. reduced the number of runs to average when propagating photons from each pixel in render.py from 5 to 1; the speed improvement outweighs any small improvement in the quality of the rendered image.
|
|
a boundary
|
|
src/photon.h so that photon propagation by propagate() in kernel.cu and the hybrid monte carlo ray tracing use the same code. instead of a single state, photons now carry the history of the processes they've undergone. this history is stored as a bitmask; see src/photon.h. start_node and first_node of the mesh are now stored as global variables in mesh.h instead of being passed to kernel functions.
|
|
on a profile of the PMT model (see build_pmt() in solids/pmts.py). triangle intersection now allows one of the two coefficients multiplying the vectors which span the triangle to float slightly negative (up to -EPSILON; EPSILON is defined in src/intersect.h) in order to eliminate rays passing through the line between two triangles. cleaned up a lot of unused code. pulled duplicate code in view() and render() into functions in view.py. in order to allow view.py and render.py to search pre-defined geometries, solids, meshes, etc. without requiring them to be pre-built, pre-defined geometries, solids, meshes, etc. should be returned by a function tagged by the decorator @buildable(identifier) defined in view.py, where identifier is a string used to identify the object as an argument to either view.py or render.py. optical materials and surfaces are now defined in optics.py. added an image directory to save cool screenshots.
|
|
|
|
used. GPUThread objects now shallow copy the geometry so that threads are not writing to the same memory when the geometry is loaded onto the gpu. the model number for the 12" Hamamatsu PMT is R11708, not r7081 (which is the model for the 10" PMT); all references to the 12" PMT were changed accordingly. only allocate space for 20 materials and 20 surfaces on the gpu instead of 100 to save some space. started to modify track.py to build its own photons and module since the GPUThread object only copies photon hit times back from the gpu (not track information), but I am waiting to find out if pycuda GPUArrays can be used with vector types.
|
|
with only one child.
|
|
improvement.
|
|
|
|
|
|
|
|
This avoids the texture size limitation.
|
|
channel, which is presumed to trigger that channel. Major speed up in conversion of detection times to time PDFs.
|
|
on the GPU. you can now take a screenshot of an image rendered with view.py() by pressing the f12 key.
|
|
sketchup.
|
|
initializes ALL of the states.
|
|
the 12" hamamatsu and sno pmts. ratdb.py is able to parse ratdb files. chromaticity.py provides a function to map wavelength -> rgb color. lbne detector model now includes an outer black cylinder and pmts with a glass layer and photocathode/reflective surfaces.
|