Source code for mcramp.geom.banana
from .gprim import GPrim #pylint: disable=E0401
import numpy as np
import pyopencl as cl
import pyopencl.array as clarr
import os
import re
[docs]class GBanana(GPrim):
"""
Geometry kernel for 'banana' geometry. Intersects with the interior of the
banana, i.e. first intersection must be at negative time for scattering to
occur.
...
Parameters
----------
radius : float
The radius of the banana
height : float
The height of the banana
mintheta : float
The minimum valid intersection angle with the banana
maxtheta : float
The maximum valid intersection angle with the banana
Notes
-----
Intersection 1 :
Negative time intersection with the portion of the banana behind the\
neutron trajectory.
Intersection 2 :
Positive time intersection with the portion of the banana ahead of the\
neutron trajectory.
Methods
-------
None
"""
def __init__(self, radius=0, height=0, mintheta=0, maxtheta=0, idx=0, ctx=None):
self.radius = np.float32(radius)
self.height = np.float32(height)
self.mintheta = np.float32(mintheta)
self.maxtheta = np.float32(maxtheta)
self.idx = idx
with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'banana.cl'), mode='r') as f:
self.prg = cl.Program(ctx, f.read()).build(options=r'-I "{}/include"'.format(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
def intersect_prg(self, queue, N, neutron_buf, intersection_buf, iidx_buf):
self.prg.intersect_banana(queue, (N, ),
None,
neutron_buf,
intersection_buf,
iidx_buf,
np.uint32(self.idx),
self.radius,
self.height,
self.mintheta,
self.maxtheta)