from __future__ import absolute_import, division, print_function
solution_types = {1: 'direct',
2: 'refracted',
3: 'reflected'}
solution_types_revert = {v:k for k, v in solution_types.items()}
available_modules = ['analytic',
'radiopropa',
'direct_ray']
reflection_case = {1: 'upwards launch vector',
2: 'downward launch vector'}
[docs]def get_propagation_module(name=None):
"""
wrapper around all propagation modules
The function returns the python class of the
respective propagation module
Parameters
----------
name: string
Which ray tracing module to use. Options are:
* "analytic" : analytic ray tracer. Requires that the index of refraction
is of an exponential form.
* "radiopropa" : the RadioPropa numerical ray tracer. Supports an arbitrary
index of refraction, but requires that RadioPropa is installed.
* "direct_ray" : a dummy ray tracer that draws straight lines and
ignores refraction. Useful for debugging.
"""
if name is None:
from NuRadioMC.SignalProp.propagation_base_class import ray_tracing_base
return ray_tracing_base
elif(name==available_modules[0]):
from NuRadioMC.SignalProp.analyticraytracing import ray_tracing
return ray_tracing
elif(name==available_modules[2]):
from NuRadioMC.SignalProp.directRayTracing import direct_ray_tracing
return direct_ray_tracing
elif(name==available_modules[1]):
from NuRadioMC.SignalProp.radioproparaytracing import radiopropa_ray_tracing
return radiopropa_ray_tracing
else:
msg = "Module \'{}\' not implemented. Available modules: {}".format(
name, str(available_modules))
raise NotImplementedError(msg)