photonics-service C++ API Reference¶
-
struct Amasim_Level2_Table_type¶
- #include <I3PhotonicsL2Reader.h>
-
struct Amasim_Table_Type¶
- #include <I3PhotonicsL1Reader.h>
-
struct Data_type¶
- #include <I3PhotonicsL1Reader.h>
-
struct Edge_type¶
- #include <I3PhotonicsReader.h>
-
template<typename Table, typename Float>
struct evaluators¶ - #include <I3PhotoSplineService.h>
Evaluate spline tables at the given precision.
Public Members
-
struct Geo_type¶
- #include <I3PhotonicsReader.h>
Overall geometry.
Public Members
-
bool buffer[3][2]¶
Indicator whether active geometry extends beyond recordable region
-
Region_type *dim[3]¶
Dimensional regions
-
double d[VARS]¶
Dimensional steps
-
double *bracket[3]¶
Arrays used for fast binary search of location
-
double *middle[3]¶
Array used for fast interpolation lookup
-
double *timing¶
Time binning array
-
double *timing_middle¶
Centers of timing bins for fast interpolation lookup some arrays handy for optimizations
-
bool buffer[3][2]¶
-
struct Header_type¶
- #include <I3PhotonicsReader.h>
Header/setup information.
Public Members
-
MetaHead_type MetaHead¶
-
char dummy_padding[16]¶
not used
-
float sphere_frac¶
fraction of all scatters that will be with cos=0
-
float impsampl_Lf¶
Importance sampling factor for exp() steps length
-
float impsampl_Tf¶
Importance sampling factor for HG scattering
-
float dummy_l2padd¶
not used [in level1, gauss factor in level2]
-
float ref_np¶
phase refractive index used for true <—> residual calc
-
float ref_ng¶
phase refractive index used for true <—> residual calc
-
bool record_errors¶
Statistical errors are tracked
-
source_type source¶
Emission source type
-
bool extended_source¶
Simulaton of extended shower sources
-
float step¶
Step for photon tracking (m)
-
float e¶
Shower energy for shower sources in (GeV)
-
float volume¶
Radial size for volume source (m)
-
float angle¶
Source axis zenith angle
-
float source_rz[2]¶
Source location wrt active volume center
-
float limits[VARS][2]¶
Recordable limits for each dimension
-
float maxes[VARS][2]¶
Active limits for each dimension
-
float depth¶
depth of active volume center wrt ice table
-
scale_type d_scale¶
distance scaling parameter
-
scale_type t_scale¶
time scaling parameter
-
float lambda¶
light wavelength, or negative; spectral “index”
-
MetaHead_type MetaHead¶
-
class I3DummyPhotonicsService : public I3PhotonicsService¶
- #include <I3DummyPhotonicsService.h>
Dummy version of I3PhotonicsService (does not use photonics)
Uses some simple eyeball parametrisations based on looking at a few event displays. Light yield falls off exponentially with some suitable distance measure with some additional suppression behind the source. The time distribution rises linearly and then decays exponentially in a way which depends on distance. This is not meant for any serious use; please read the code if you want to know the details anyway.
Public Functions
-
I3DummyPhotonicsService()¶
Constructor.
-
inline ~I3DummyPhotonicsService()¶
Destructor.
-
virtual void SelectSource(double &meanPEs, double &emissionPointDistance, double &geoTime, PhotonicsSource const &source)¶
Select source Select source, return light yield, and set time distribution parameters for later calls to timing methods.
- Parameters:
meanPEs – Mean number of PEs
emissionPointDistance – Distance from nominal point of cherenkov point to OM
geoTime – “Geometric time”
source – Source parameters
-
virtual void SelectSource(double &meanPEs, double &emissionPointDistance, double &geoTime, PhotonicsSource const &source, double &rho_radial_dist)¶
-
virtual void UpdateInternalParams(PhotonicsSource const &source, double saved_meanamp)¶
-
virtual void GetTimeDelay(double random, double &timeDelay)¶
Get residual time for hit (w.r.t direct propagation from nominal emission point)
- Parameters:
random – [in] Uniform random number
timeDelay – [out] Residual time
-
virtual void GetProbabilityDensity(double &density, double timeDelay)¶
Get probability density for previously selected OM/source combination.
- Parameters:
density – [out] Probability density (ns^-1)for given residual time
timeDelay – [in] Residual time
-
double GetIntegratedProbability(double timeDelay)¶
-
virtual bool GetProbabilityQuantiles(double*, double, double*, size_t)¶
Fill an array with probability quantiles for a previously selected OM/source combination.
- Parameters:
time_edges – [in] Array giving the edges of the time bins
t_0 – [in] Direct time (time at which unscattered photons from the source would reach the DOM)
amplitudes – [out] Array to fill with mean PE counts
n_bins – [in] Size of the amplitude array. There are n_bins + 1 time edges.
-
bool GetMeanAmplitudeGradient(double*)¶
-
bool GetMeanAmplitudeHessian(double*, double (*)[6])¶
-
bool GetProbabilityQuantileGradients(double*, double, double (*)[6], size_t)¶
-
bool GetProbabilityQuantileHessians(double*, double, double*, double (*)[6], double (*)[6][6], size_t)¶
-
virtual bool GetProbabilityDensityGradient(double gradient[6], double timeDelay)¶
-
virtual bool GetProbabilityDensityGradnHessian(double density_grad[6], double density_hessian[6][6], double timeDelay)¶
-
virtual void GetCDF(double &cdf, double const timeDelay)¶
-
virtual bool GetCDFGradient(double gradient[6], double timeDelay)¶
-
virtual bool GetCDFGradnHessian(double density_grad[6], double density_hessian[6][6], double timeDelay)¶
-
virtual void GetKnotVector(double *knots, int dim)¶
-
virtual void GetTimeExtent(double *ext)¶
Protected Functions
- SET_LOGGER ("I3DummyPhotonicsService")
-
I3DummyPhotonicsService()¶
-
class I3IceLayerTilt¶
- #include <I3IceLayerTilt.h>
-
class I3PhotonicsL1Reader¶
- #include <I3PhotonicsL1Reader.h>
Class for Reading Photonics Level1 files for use with photonics-service.
This class is created from various photonics header files. Photonics relied on global variables. All global variables are now member variables in this class. Functions nescessary for reading level1 files which don’t use the globals were added as private static member functions.
Public Functions
-
I3PhotonicsL1Reader()¶
Constructor initilized formarly global variables which photonics uses.
-
~I3PhotonicsL1Reader()¶
Destructor frees memory used by photonics.
-
void free_tablesets_level1()¶
-
void set_level1_angular_interval(float alow, float ahigh)¶
-
void set_level1_depth_interval(float zlow, float zhigh)¶
-
int load_tables(const char*)¶
Routine that reads in all tables specified in driver file.
-
double get_photon_density(float, float, int, float, float, float, int, int*, int*, int*, int*) const¶
Returns mean photon density for specified source depth, angle, and type.
- Returns:
-1 for no table found (z_source/angle out of bounds)
-
double get_photon_delay(double, int, int, int, int) const¶
Returns time delay based on input random number for selected table and bin.
-
int get_photon_delays(double (*uniform_random)(const void *r, double a, double b), void (*multinomial_random)(const void *r, size_t k, unsigned int N, const double p[], unsigned int n[]), const void *r, int N, double *delays, int id, int z_bin, int rho_bin, int phi_bin) const¶
-
double get_delay_prob(double, int, int, int, int) const¶
Returns probability of given time delay based for selected table and bin.
-
double get_level1_lmax() const¶
Private Functions
-
int init_tableset_level1()¶
-
int swap_tableset_level1(int index)¶
-
inline int find_l1z_table(float z_source, int *idA, int *idB, double *wA, double *wB) const¶
find the index to the tables [upper and lower] for a requested source depth.
-
inline int find_l1theta_table(float a_source, int *TidA, int *TidB, double *wA, double *wB) const¶
Find the angle number [upper and lower] for a requsted angle.
The returned indecis are offsets from the lowest angle. Add the index from find_z_table to acces the right table.
-
void close_input(FILE*)¶
-
bool read_header(photonics::Header_type *h, FILE *fh) const¶
Returns a pointer to header of currently opened input file, or NULL if none available.
-
float *read_current_chunk(FILE *fh)¶
Read chunk from current stream position.
-
FILE *test_input(const Opt_type *opt)¶
Verify that it’s possible to read data and setup variables for input.
-
photonics::Header_type *get_header(void) const¶
Returns a pointer to header of currently opened input file, or NULL if none available.
-
bool mmap_file(const Opt_type *opt, Data_type *data, bool errs) const¶
Entire photon array is readout out.
-
bool read_file_without_errors(const Opt_type*, Data_type*)¶
Entire photon table file is readout but without errors.
-
bool read_table(float*, FILE*)¶
Entire photon array is readout out.
Private Members
-
FILE *in¶
-
float *data_chunk¶
-
float *err_chunk¶
-
Amasim_Table_Type *table¶
-
int *n_tables¶
-
Tableset_level1_container_type mytablesets_level1¶
-
pref_level1_t pref_level1¶
Private Static Functions
-
static int level1_table_comp(const void *a, const void *b)¶
Table comparator for sorting of data tables.
-
static bool open_binary_input(const char *file, FILE **fh)¶
-
static void byteswap32_l1header(photonics::Header_type *h)¶
performs byte swapping on relevant members of level1 headers for Power-PC etc.
-
static double next_boundary_lin(const double base, const double step)¶
Functions calculating next boundry value based in scaling used.
-
static bool evaluate_slices(const photonics::Header_type *h, photonics::Geo_type *geo)¶
Set up azimuthal regions based on user input NB: Values kept as cosines for faster computation down the line.
-
static bool cylindrical_geometry(const photonics::Header_type *h, photonics::Geo_type *geo)¶
Set up cylindrical active volume based on user input.
-
static bool cylindrical_areas(const photonics::Header_type *h, photonics::Geo_type *geo)¶
Evaluate area of each surface edge.
-
static bool spherical_geometry(const photonics::Header_type *h, photonics::Geo_type *geo)¶
Set up spherical active volume based on user input.
-
static bool spherical_areas(const photonics::Header_type *h, photonics::Geo_type *geo)¶
Evaluate area of each surface edge.
-
static bool cubic_geometry(const photonics::Header_type *h, photonics::Geo_type *geo)¶
Set up cubic active volume based on user input.
-
static bool cubic_areas(const photonics::Header_type *h, photonics::Geo_type *geo)¶
Evaluate area of each surface edge.
-
static bool timing_geometry(const photonics::Header_type *h, photonics::Geo_type *geo)¶
Calculates timing bin coordinates based on user input.
-
static bool set_up_geometry(const photonics::Header_type*, photonics::Geo_type*)¶
set up requested geometry
-
static bool get_coord(const photonics::Header_type*, const photonics::Geo_type*, Read_type*)¶
Coordinates to bins conversions with lookup of interpolation variables.
-
static bool interpolate(const Read_type*, Interp_type*)¶
Full interpolation routine for table entry.
Input: Structure with bin info
Output: Interpolation factors and bins to use as a structure, and status as a return value.
Intepolation logic: This is full multidimensional bilinear interpolation. The simpification is that dimensions are treated as linear grids. Cross-bins are taken care off automatically. Find the weight for the current and an adjecent bin. Always weight current bin higher, and select the adjecent bin closer to the actual value. Edge bins are not interpolared towards the outside.
-
static bool data_alloc(Data_type *data, const photonics::Header_type *h)¶
Allocate memory for our main data array.
-
static unsigned long data_allocated(Data_type *data, const photonics::Header_type *h)¶
Determine the size of memory that WAS allocated by identical call to data_alloc.
-
I3PhotonicsL1Reader()¶
-
class I3PhotonicsL2Reader¶
- #include <I3PhotonicsL2Reader.h>
Class for Reading Photonics Level2 files for use with photonics-service.
This class is a modified version of photonics_cppio which was a class provided by photonics for accessing level2 photonics tables. It used weird a preprocessor directive scheme to recycle straight c files into the class. I think this was created so that the globals in the original c file would now be class members.
All the preprocessor stuff was removed so it is now a straightforward c++ class. Necessary functions from level2/level2_reader.c were also included as private static member functions.
Public Types
Public Functions
-
I3PhotonicsL2Reader()¶
-
~I3PhotonicsL2Reader()¶
-
void free_tablesets_level2()¶
Free all memory used by level2 table sets.
-
int init_tableset_level2()¶
Initialize a new tableset.
This will allocate memory for a new tableset, table info and tables.
Note
That actual table content is allocated in routines called by I3PhotonicsL2Reader::load_level2_tables and not here. Because of this don’t call free_tablesets_level2::free_tablesets_level2 before I3PhotonicsL2Reader::load_level2_tables unless you want a runtime error.
Note
Also note that tables allways will get the size MAX_TABLES. This is to make the code backwardscompatible, it is possible to implement this dynamic but then more changes to existing photonics routines.
- Returns:
index of newly initialized tableset
-
int swap_tableset_level2(int index)¶
Swap active tableset.
This will change the current tableset index I3PhotonicsL2Reader::mytablesets_level2 and set the pointers I3PhotonicsL2Reader::table and I3PhotonicsL2Reader::geo and I3PhotonicsL2Reader::n_tables to the corresponding data in mytablesets_level2.tableset[mytablesets_level2.current]
- Returns:
If index is larger then the number of tablesets -1 will be returned, otherwise index will be returned.
-
int load_level2_tables(const char *driver_file)¶
Routine that reads in all tables specified in driver file.
- Returns:
1 on success 0 or -1 on error.
-
double get_level2_general_photon_density(float angle_track, float rho, float phi, float l_start, float l_stop, float z_start, float z_stop, int interp_mask, int *tableset_id, int *table_id_A, int *table_id_B, int *l_bin_A, int *l_bin_B, int *rho_bin_A, int *rho_bin_B, int *phi_bin_A, int *phi_bin_B)¶
Table lookup for finite line-like sources such as muons.
The user specifies any finite (starting and or stopping) track The routine figures out how to best fulfill the requrest, given the already loaded tables, and returns the amplitude and handles for time/prob querries.
We follow the photonics convention to have coordinates as floats. Amplitudes, times, probabilities etc as doubles.
The output ids and bins are used with:
Note
This function must only be used with tables for line like sources. (The user must know that) For point like tables (such as LEDs and pointlike cascades) you should instead use get_level2_general_pointlike_photon_density()
- Parameters:
angle_track – track theta [degrees]
rho – track rho
phi – track phi [radians]
l_start – start
l_stop –
z_start – track start depth
z_stop – track stop depth
interp_mask – photonics interpolation mask
tableset_id – ‘A’ bins refer to the table with higher amp
table_id_A – contains depth/theta information
table_id_B –
l_bin_A –
l_bin_B –
rho_bin_A –
rho_bin_B –
phi_bin_A –
phi_bin_B –
-
double get_level2_general_delay(double r, int tableset_id, int table_id_A, int table_id_B, int l_bin_A, int l_bin_B, int rho_bin_A, int rho_bin_B, int phi_bin_A, int phi_bin_B)¶
This is a general funtion for level2 delay queries.
Works with the handles given by get_level2_general_photon_density(). This function is identical in form to double get_level2_general_delay_prob().
This function is a wrapper for
Note
this assumes that -1 is not a valid respons. This is currently fine.
- Parameters:
r – the random number
tableset_id –
table_id_A –
table_id_B –
l_bin_A –
l_bin_B –
rho_bin_A –
rho_bin_B –
phi_bin_A –
phi_bin_B –
- Returns:
The function itself returns delay -1 if question not relevant (no amp)
-
double get_level2_general_delay_prob(double delay, int tableset_id, int table_id_A, int table_id_B, int l_bin_A, int l_bin_B, int rho_bin_A, int rho_bin_B, int phi_bin_A, int phi_bin_B)¶
This is a general funtion for level2 delay queries.
Works with the handles given by get_level2_general_photon_density(). This function is identical in form to double get_level2_general_delay().
- Parameters:
delay – the time delay
tableset_id –
table_id_A –
table_id_B –
l_bin_A –
l_bin_B –
rho_bin_A –
rho_bin_B –
phi_bin_A –
phi_bin_B –
-
int get_level2_photorec(float angle_track, float rho, float phi, float l_start, float z_start, float delay, double *amp, double *prob, int interp_mask, double energy) const¶
Reader for the ‘photorec’ reconstruction pdf framework.
Supports multi linear interpolation in all dimentions, of both abs and prob.
This function is used for reconstruction with tables of point like sources (like showers), or degenerate (only one l-bin) muons.
For finite line sources, use get_level2_photorec_finite()
Most of the new code is implemented elsewhere in this file, while this function is a selector and wrapper to the new functionallity.
When the number of l-bins of the table is 1, the functionallity previously implemented in get_level2_photorec_degenerate is provided.
See also
- Parameters:
angle_track – track theta [degrees]
rho – track rho
phi –
l_start – start
z_start – track start depth
delay – residual time
amp – amplitude (poisson mean)
prob – differential prob: dp/dt integrates to 1
interp_mask – photonics interpolation mask
energy – vertex energy (GeV). 0 means no scaling. the particle type is read from the table
- Returns:
true on success
-
int get_level2_photorec_finite(float angle_track, float rho, float phi, float l_start, float l_stop, float z_start, float z_stop, float delay, double *amp, double *prob, int interp_mask, double energy)¶
Reader for the ‘photorec’ reconstruction pdf framework.
Supports multi linear interpolation in all dimentions, of both abs and prob.
The intention is to provide an interface to table reading with full interpolation of abs and pdf for any line like (muonic) request
This is to support reconstruction where the track start and stop positions are parameters to be fitted.
Most of the new code is implemented elsewhere in this file, while this function is a selector and wrapper to the new functionallity.
See also
- Parameters:
angle_track – track theta [degrees]
rho – track rho
phi – track phi [radians]
l_start – start
l_stop –
z_start – track start depth
z_stop – track stop depth
delay – residual time
amp – amplitude (poisson mean)
prob – differential prob: dp/dt unit: [1/ns]
interp_mask – photonics interpolation mask
energy – vertex energy (GeV). 0 means no scaling the particle type is read from the table
- Returns:
true on success
-
void set_level2_angular_interval(float alow, float ahigh)¶
Block of functions used to set preferences and query tables status:
-
void get_level2_angular_interval(float *alow, float *ahigh) const¶
-
void set_level2_depth_interval(float zlow, float zhigh)¶
-
void get_level2_depth_interval(float *zlow, float *zhigh) const¶
-
void get_level2_memory_usage(unsigned long *mem) const¶
Return the amount of memory (bytes) used for tableset in photonics level2.
-
void get_level2_angular_memory_requirement(float alow, float ahigh, unsigned long *mem) const¶
returns estimate of number of bytes needed to load an interval of given size, assuming equidistant theta binning.
The results should be exact as long as the first possible angle given by the driver file is zero, or a multiple of angular bin size
-
bool get_level2_sourcetype(int *sourcetype, int *time_reference) const¶
-
double get_level2_lmax() const¶
-
double get_level2_photon_density(float, float, float, float, float, int, int*, int*, int*, int*) const¶
Returns mean photon density for specified source depth, angle, and type.
Private Functions
-
inline int find_z_table(float z_source, int *TidA, int *TidB, double *wA, double *wB) const¶
Returns mean photon density for specified source depth, angle, and type.
This function is responsible for finding the table bins and amplitudes for point like sources. It can be called directly for point like sources (such as LEDs and pointlike cascades). But it should not be called directly for line like sources such as finite or infinite muons. Use the apropriate muon-specific function instead.
- Returns:
-1 for no table found (z_source/angle out of bounds)
-
inline int find_theta_table(float theta_source, int *idA, int *idB, double *wA, double *wB) const¶
Find the angle number [upper and lower] for a requsted angle.
The returned indecis are offsets from the lowest angle. Add the index from find_z_table to acces the right table.
-
double get_level2_photon_delay(double, int, int, int, int) const¶
Returns a (random) time delay based on input (random) cumulative probability distribution number for selected table and spatial bin.
-
double get_level2_photon_delay_prob(double, int, int, int, int) const¶
Reads the time distribution directly for a selected time bin.
Note
this differentiates the content (even if you loaded a differential table!) This function is used to obtain the differential time distribution with simulation tables.
-
double get_finite_level2_photon_delay(double, int, int, int, int, int, int, int, int) const¶
Returns time delay based on input random number for selected table and bin of starting and stopping point.
Contribution of source light beyond the stopping point is removed from timing array before calculating the delay.
-
double get_finite_level2_photon_delay_prob(double, int, int, int, int, int, int, int, int) const¶
Returns probability of given time delay based on input random number for selected table and bin of starting and stopping point. Finite muons.
As get_level2_photon_delay_prob() but for finate muons.
-
void get_level2_angle_status(int*, float*) const¶
gives the number of angles loaded and the angle bin size
-
tableset_type swap_tableset_pair_level2(tableset_type type)¶
Switch to paired tableset of desired type.
Harmless if current tableset is of ‘type’ already, otherwise a swap to pair_id will be done.
- Returns:
the type we managed to select.
Private Members
-
const char *infstop_mark¶
-
const char *startinf_mark¶
-
const char *photorec_mark¶
-
struct Amasim_Level2_Table_type *table¶
-
int *n_tables¶
-
struct Level2_geo_type *geo¶
-
struct pref_level2_t pref_level2¶
-
struct Tableset_level2_container_type mytablesets_level2¶
Private Static Functions
-
static double light(int, double)¶
Number of cerenkov photons emitted by muon per meter of pathlength.
With correction for low energy loss effects. See CHW thesis, section 7.2 & Number of cerenkov photons emitted by a shower of energy E. See CHW thesis, section 7.1
-
static double light_for_source(int sourcetype, double e)¶
light scaling for any type of source.
-
static int level2_geometry(const Level2_header_type*, Level2_geo_type*)¶
Precalculates level2 table binnings for fast lookup.
-
static bool get_level2_coord(const Level2_geo_type*, Level2_read_type*)¶
Coordinates to bins conversions with remainders.
Copied and simplified from reader.c
-
static bool level2_interpolate(const Level2_read_type*, Level2_interp_type*)¶
Full interpolation routine for table entry.
Input: Structure with bin info Output: Interpolation factors and bins to use as a structure, and status as a return value. Intepolation logic: Find the weight for the current and an adjecent bin. Always weight current bin higher, and select the adjecent bin closer to the actual value. Edge bins are not interpolared towards the outside. Copied from reader.c, with minor changes.
-
static int read_level2_file(const char *file, Level2_header_type *h, Level2_data_type *data, unsigned long *memused)¶
Routine that reads single level2 file.
-
static int level2_table_comp(const void *a, const void *b)¶
Table comparator for sorting of data tables.
-
static void byteswap32_l2header(Level2_header_type *h)¶
performs byte swapping on relevant members of level2 headers for Power-PC etc.
-
I3PhotonicsL2Reader()¶
-
class I3PhotonicsService¶
- #include <I3PhotonicsService.h>
Service interfacing to the photonics table access functions.
Subclassed by I3DummyPhotonicsService, I3PhotonicsServiceCollection, I3PhotonicsTableService, I3PhotoSplineService
Public Functions
-
I3PhotonicsService()¶
-
virtual ~I3PhotonicsService()¶
-
virtual void SelectModuleCoordinates(double xOM, double yOM, double zOM)¶
Select OM coordinates.
- Parameters:
xOM, yOM, zOM – Coordinates in metres
-
virtual void SelectModule(const I3OMGeo &geo)¶
Select OM coordinates By default, this calls SelectModuleCoordinates. Subclasses that know about more dimensions should override this function.
- Parameters:
geo – Module coordinates, orientation, etc
-
virtual void SetEfficiencies(double domEfficiency, double unshadowedFraction = 0.94)¶
Set the DOMEfficiency and UnshadowedFraction This sets global efficiencies to be applied on the light-scale calculation.
- Parameters:
domEfficiency – Set the DOMEfficiency relative to the unshadowed detector
unshadowedFraction – Sets fraction of the OM that on average is not shadowed by the cable
-
virtual void SelectSource(double &meanPEs, double &emissionPointDistance, double &geoTime, PhotonicsSource const &source) = 0¶
Select light source Set source properties, calculate geometrical quantities based on OM previously selected by SelectModuleCoordinates(), call photonics, and return result.
- Parameters:
meanPEs – Mean number of PEs
emissionPointDistance – Distance between nominal cherenkov emission point and OM
geoTime – Nominal arrival time for cherenkov light relative to time of track starting point
source – Source parameters
-
virtual void SelectSource(double &meanPEs, double gradients[6], double &emissionPointDistance, double &geoTime, PhotonicsSource const &source, bool getAmp = true)¶
-
virtual void SelectSource(double &meanPEs, double &emissionPointDistance, double &geoTime, PhotonicsSource const &source, double &rho_radial_dist) = 0¶
-
virtual void SelectSource(double &meanPEs, double gradients[6], double &emissionPointDistance, double &geoTime, PhotonicsSource const &source, double &rho_radial_dist, bool getAmp = true)¶
-
void SelectSource(double &meanPEs, double &emissionPointDistance, double &geoTime, double x, double y, double z, double zenith, double azimuth, double length, double Energy, int type) __attribute__((__deprecated__))¶
-
virtual void UpdateInternalParams(PhotonicsSource const &source, double saved_meanamp)¶
-
virtual void GetTimeDelay(double random, double &timeDelay) = 0¶
Get photon arrival time Draws a photon arrival time (in ns) using table pointers set up by previous call to SelectSource.
- Parameters:
random – [in] Random number (0-1)
timeDelay – [out] Photon arrival time relative to direct light time
-
virtual void GetTimeDelays(I3RandomServicePtr random, double *timeDelays, int n)¶
-
virtual void GetProbabilityDensity(double &density, double timeDelay) = 0¶
Get photon probability density in time.
Get time probability density for single photon arrival time (in ns^-1), based on the table pointers set up in latest call to SelectSource().
- Parameters:
density – [out] Probability density (ns^-1)
timeDelay – [in] Time offset from direct light arrival time
-
virtual bool GetProbabilityQuantiles(double *time_edges, double t_0, double *amplitudes, size_t n_bins) = 0¶
Fill an array with probability quantiles for a previously selected OM/source combination.
- Parameters:
time_edges – [in] Array giving the edges of the time bins
t_0 – [in] Direct time (time at which unscattered photons from the source would reach the DOM)
amplitudes – [out] Array to fill with mean PE counts
n_bins – [in] Size of the amplitude array. There are n_bins + 1 time edges.
-
virtual bool GetProbabilityQuantiles(double *time_edges, double t_0, double *amplitudes, double gradients[][6], size_t n_bins)¶
-
virtual bool GetMeanAmplitudeGradient(double gradient[6]) = 0¶
Get the gradient of the number of photoelectrons expected at the OM coordinates specified by a previous call to SelectModuleCoordinates.
- Parameters:
gradient – (out) Store the gradient in this array. The gradient is given with respect to the source position (d/dx, d/dy, d/dz in PE/meter), direction of source origin (d/dtheta and d/dphi in PE/radian) and source energy (in PE/GeV).
-
virtual bool GetMeanAmplitudeHessian(double gradient[6], double hessian[6][6]) = 0¶
-
virtual bool GetProbabilityQuantileGradients(double *time_edges, double t_0, double gradients[][6], size_t n_bins) = 0¶
Get the gradient of photon detection probability at the OM coordinates specified by a previous call to SelectOMCoordinates in each of the time bins specified by time_edges.
- Parameters:
time_edges – (in) Array giving the edges of the time bins.
t_0 – (in) Direct time (time at which unscattered photons from the source would reach the DOM)
gradients – (out) Store the gradients for each time bin in this array. Gradients are given with respect to source position (d/dx, d/dy, d/dz in meter^-1), event time (d/dt in ns^-1), and direction of source origin (d/dtheta, d/dphi in radian^-1).
n_bins – (in) Size of the leading dimension of gradients. There are n_bins+1 elements in time_edges.
-
virtual bool GetProbabilityQuantileHessians(double *time_edges, double t_0, double values[], double gradients[][6], double hessians[][6][6], size_t n_bins) = 0¶
-
virtual bool GetProbabilityDensityGradient(double gradient[6], double timeDelay) = 0¶
-
virtual bool GetProbabilityDensityGradnHessian(double density_grad[6], double density_hessian[6][6], double timeDelay) = 0¶
-
virtual void GetCDF(double &cdf, double timeDelay) = 0¶
-
virtual bool GetCDFGradient(double gradient[6], double timeDelay) = 0¶
-
virtual bool GetCDFGradnHessian(double cdf_grad[6], double cdf_hessian[6][6], double timeDelay) = 0¶
-
virtual void GetKnotVector(double *knots, int dim) = 0¶
-
virtual void GetTimeExtent(double *ext) = 0¶
-
virtual bool GetPhotorecInfo(double &yield, double &probDensity, double delay, PhotonicsSource const &source)¶
Get photorec information.
Gets photorec information based on OM coordinates specified by previous call to SelectOMCoordinates, delay time, and photonics source information in PhotonicsSource struct.
- Parameters:
yield – [out] Light yield as given by table. For level 2 cascade line sources this is usually normalised to an energy loss of 1 GeV/m
probDensity – [out] Probability density in time (ns^-1)
delay – [in] Delay time
source – [in] Photonics source
- Returns:
Success or failure of photonics table access
-
virtual bool GetPhotorecDensities(double &yield, std::vector<double> &probDensities, std::vector<double> delays, PhotonicsSource const &source)¶
-
bool GetPhotorecInfo(double &yield, double &probdensity, double delay, double x, double y, double z, double zenith, double azimuth, double length, double Energy, int type) __attribute__((__deprecated__))¶
-
inline virtual bool SetAngularSelection(int level, float low, float high)¶
Set angular selection for loading of photonics tables. This is advisory only, and does nothing by default.
- Parameters:
level – Photonics level affected
low – Minimum zenith angle (degrees)
high – Maximum zenith angle (degrees)
-
inline virtual double GetAngularSelectionLow()¶
-
inline virtual double GetAngularSelectionHigh()¶
-
inline virtual bool SetDepthSelection(int level, float low, float high)¶
Set depth selection for loading of photonics tables. This is advisory only, and does nothing by default.
- Parameters:
level – Photonics level affected
low – Minimum depth (m)
high – Maximum depth (m)
-
inline virtual double GetDepthSelectionLow()¶
-
inline virtual double GetDepthSelectionHigh()¶
-
inline virtual double GetLmaxLevel1()¶
Get maximum l in level 1 photonics tables.
- Returns:
maximum l
-
inline virtual double GetLmaxLevel2()¶
Get maximum l in level 2 photonics tables.
- Returns:
maximum l
-
void GetPhotonicsInput(double &zenith, double &rho, double &phiOM, double &l, double &z, double &eOffset, double &eDistance)¶
return photonics geometry parameters (+ emission point parameters) as doubles
-
bool CalculatePhotonicsInput(bool CheckLmax, double xOM, double yOM, double zOM, const PhotonicsSource &source)¶
Calculate photonics input variables (floats) and check if outside table range in l coordinate.
- Parameters:
CheckLmax – [in] Bool to enable checking lmax
xOM, yOM, zOM – [in] OM coordinates
source – [in] Source information
- Returns:
False if OM is outside table range for given source, true otherwise.
-
inline parity_type GetParity() const¶
-
inline double GetNGroup() const¶
Public Static Functions
-
static PhotonicsSource FillPhotonicsSource(double x, double y, double z, double zenith, double azimuth, double length, double Energy, int type) __attribute__((__deprecated__))¶
Fill a PhotonicsSource struct from basic quantities.
NB: DEPRECATED IN FAVOR OF PHOTONICSSOURCE METHODS
- Parameters:
x, y, z – Source coordinates (metres)
zenith, azimuth – Direction which source points from (degrees)
Energy – Energy (GeV)
length – Source length (zero for point source) (metres)
type – Source type (0=muon, 1=EM cascade)
Protected Functions
- SET_LOGGER ("I3PhotonicsService")
Protected Attributes
-
double b_¶
-
double nPhase_¶
-
double nGroup_¶
-
double cVacuum_¶
-
double tanCh_¶
-
double sinCh_¶
-
parity_type parity_¶
-
bool mirror_azimuth_¶
-
double coordPxC_[5]¶
-
double zStopPxC_¶
-
double lStopPxC_¶
-
double l_¶
-
double rho_¶
-
double cosAzi_¶
-
double cosAziMin_¶
-
double cosAziMax_¶
-
double r_¶
-
double cosZenith_¶
-
double emissionPointOffset_¶
-
double emissionPointDistance_¶
-
double xOM_¶
-
double yOM_¶
-
double zOM_¶
-
double efficiency_¶
-
I3PhotonicsService()¶
-
class I3PhotonicsServiceCollection : public I3PhotonicsService¶
- #include <I3PhotonicsServiceCollection.h>
Public Functions
-
virtual ~I3PhotonicsServiceCollection()¶
-
virtual void SelectModule(const I3OMGeo&)¶
Select OM coordinates By default, this calls SelectModuleCoordinates. Subclasses that know about more dimensions should override this function.
- Parameters:
geo – Module coordinates, orientation, etc
-
virtual void SelectSource(double &meanPEs, double &emissionPointDistance, double &geoTime, PhotonicsSource const &source)¶
Select light source Set source properties, calculate geometrical quantities based on OM previously selected by SelectModuleCoordinates(), call photonics, and return result.
- Parameters:
meanPEs – Mean number of PEs
emissionPointDistance – Distance between nominal cherenkov emission point and OM
geoTime – Nominal arrival time for cherenkov light relative to time of track starting point
source – Source parameters
-
virtual void SelectSource(double &meanPEs, double gradients[6], double &emissionPointDistance, double &geoTime, PhotonicsSource const &source, bool getAmp = true)¶
-
virtual void SelectSource(double &meanPEs, double &emissionPointDistance, double &geoTime, PhotonicsSource const &source, double &rho_radial_dist)¶
-
virtual void SelectSource(double &meanPEs, double gradients[6], double &emissionPointDistance, double &geoTime, PhotonicsSource const &source, double &rho_radial_dist, bool getAmp = true)¶
-
virtual void GetTimeDelay(double random, double &timeDelay)¶
Get photon arrival time Draws a photon arrival time (in ns) using table pointers set up by previous call to SelectSource.
- Parameters:
random – [in] Random number (0-1)
timeDelay – [out] Photon arrival time relative to direct light time
-
virtual void GetTimeDelays(I3RandomServicePtr random, double *timeDelays, int n)¶
-
virtual void GetProbabilityDensity(double &density, double timeDelay)¶
Get photon probability density in time.
Get time probability density for single photon arrival time (in ns^-1), based on the table pointers set up in latest call to SelectSource().
- Parameters:
density – [out] Probability density (ns^-1)
timeDelay – [in] Time offset from direct light arrival time
-
virtual bool GetProbabilityDensityGradient(double gradient[6], double timeDelay)¶
-
virtual bool GetProbabilityDensityGradnHessian(double density_grad[6], double density_hessian[6][6], double timeDelay)¶
-
virtual void GetCDF(double &cdf, double timeDelay)¶
-
virtual bool GetCDFGradient(double gradient[6], double timeDelay)¶
-
virtual bool GetCDFGradnHessian(double cdf_grad[6], double cdf_hessian[6][6], double timeDelay)¶
-
virtual void GetKnotVector(double *knots, int dim)¶
-
virtual void GetTimeExtent(double *ext)¶
-
virtual bool GetProbabilityQuantiles(double *time_edges, double t_0, double *amplitudes, size_t n_bins)¶
Fill an array with probability quantiles for a previously selected OM/source combination.
- Parameters:
time_edges – [in] Array giving the edges of the time bins
t_0 – [in] Direct time (time at which unscattered photons from the source would reach the DOM)
amplitudes – [out] Array to fill with mean PE counts
n_bins – [in] Size of the amplitude array. There are n_bins + 1 time edges.
-
virtual bool GetProbabilityQuantiles(double *time_edges, double t_0, double *amplitudes, double gradients[][6], size_t n_bins)¶
-
virtual bool GetMeanAmplitudeGradient(double gradient[6])¶
Get the gradient of the number of photoelectrons expected at the OM coordinates specified by a previous call to SelectModuleCoordinates.
- Parameters:
gradient – (out) Store the gradient in this array. The gradient is given with respect to the source position (d/dx, d/dy, d/dz in PE/meter), direction of source origin (d/dtheta and d/dphi in PE/radian) and source energy (in PE/GeV).
-
virtual bool GetMeanAmplitudeHessian(double gradient[6], double hessian[6][6])¶
-
virtual bool GetProbabilityQuantileGradients(double *time_edges, double t_0, double gradients[][6], size_t n_bins)¶
Get the gradient of photon detection probability at the OM coordinates specified by a previous call to SelectOMCoordinates in each of the time bins specified by time_edges.
- Parameters:
time_edges – (in) Array giving the edges of the time bins.
t_0 – (in) Direct time (time at which unscattered photons from the source would reach the DOM)
gradients – (out) Store the gradients for each time bin in this array. Gradients are given with respect to source position (d/dx, d/dy, d/dz in meter^-1), event time (d/dt in ns^-1), and direction of source origin (d/dtheta, d/dphi in radian^-1).
n_bins – (in) Size of the leading dimension of gradients. There are n_bins+1 elements in time_edges.
-
virtual bool GetProbabilityQuantileHessians(double *time_edges, double t_0, double values[], double gradients[][6], double hessians[][6][6], size_t n_bins)¶
-
virtual ~I3PhotonicsServiceCollection()¶
-
class I3PhotonicsServiceFactory : public I3ServiceFactory¶
- #include <I3PhotonicsServiceFactory.h>
Initialise an I3PhotonicsService and add it to the tray.
Public Functions
-
I3PhotonicsServiceFactory(I3Context const &context)¶
Constructor.
- Parameters:
context – IceTray context
-
virtual ~I3PhotonicsServiceFactory()¶
Destructor.
-
virtual bool InstallService(I3Context &services)¶
Initialise photonics service and add it to the tray.
- Parameters:
services – Reference to service context
-
void Configure()¶
Get parameters from IceTray.
Private Functions
- SET_LOGGER ("I3PhotonicsServiceFactory")
-
I3PhotonicsServiceFactory()¶
default constructor declared private and unimplemented
-
I3PhotonicsServiceFactory(I3PhotonicsServiceFactory const &rhs)¶
copy constructor declared private and unimplemented
-
I3PhotonicsServiceFactory operator=(I3PhotonicsServiceFactory const &rhs)¶
assignment operator declared private and unimplemented
Private Members
-
int interpolMode_¶
Interpolation mode (bit mask)
-
int verbosity_¶
Verbosity
-
double angularSelectLow_¶
Minimum zenith angle to load tables for
-
double angularSelectHigh_¶
Maximum zenith angle to load tables for
-
double zSelectLow_¶
Minimum z to load tables for
-
double zSelectHigh_¶
Maximum z to load tables for
-
int photonicsTableSelection_¶
Specifies wanted table format (level 1, level 2 or both (0))
-
bool useDummyService_¶
Flags dummy photonics service to be used
-
double domEfficiency_¶
-
double unshadowedFraction_¶
-
I3PhotonicsServicePtr pxs_¶
pointer to PhotonicsService instance
-
std::string photonicsTopLevelDirectory_¶
Directory holding “tables” subdirectory with photonics tables
-
bool isPhotorecTable_¶
Whether the table to load is a photorec table
-
I3PhotonicsServiceFactory(I3Context const &context)¶
-
class I3PhotonicsTableService : public I3PhotonicsService¶
- #include <I3PhotonicsTableService.h>
Service interfacing to the photonics table access functions.
Public Functions
-
I3PhotonicsTableService()¶
Constructor - initialise data members and create photonics level2 object.
-
I3PhotonicsTableService(const std::string &tablesDirectory, const std::string &driverFileDirectory, const std::string &level1DriverFile, const std::string &level2DriverFile, int interpolMode, int verbosity, double angularSelectLow, double angularSelectHigh, double zSelectLow, double zSelectHigh, int photonicsTableSelection, bool isPhotorecTable)¶
-
virtual ~I3PhotonicsTableService()¶
Destructor - unloads photonics tables and deletes photonics object
-
void SetInterpolationMode(int mode)¶
Select photonics interpolation mode.
A bit mask where each bit corresponds to interpolation in one of the dimensions of the tables: 1 l 2 rho 4 phi 8 nothing (time, always on) 16 depth 32 zenith 128 choose tables to select those giving the best desription of closest approach
- Parameters:
mode – Interpolation mode
-
virtual bool SetPhotonicsVerbosity(int level, int verbosity)¶
Set photonics verbosity (deprecated)
- Parameters:
level – Photonics level affected
verbosity – Degree of verbosity
-
virtual bool SetAngularSelection(int level, float low, float high)¶
Set angular selection for loading of photonics tables.
- Parameters:
level – Photonics level affected
low – Minimum zenith angle (degrees)
high – Maximum zenith angle (degrees)
-
inline virtual double GetAngularSelectionLow()¶
Get lower limit of angular selection used for loading of photonics tables.
- Returns:
Minimum zenith angle (degrees)
-
inline virtual double GetAngularSelectionHigh()¶
Get upper limit of angular selection used for loading of photonics tables.
- Returns:
Maximum zenith angle (degrees)
-
virtual bool SetDepthSelection(int level, float low, float high)¶
Set depth selection for loading of photonics tables.
- Parameters:
level – Photonics level affected
low – Minimum depth (m)
high – Maximum depth (m)
-
inline virtual double GetDepthSelectionLow()¶
Get lower limit of z selection used for loading of photonics tables.
- Returns:
Minimum zenith angle (degrees)
-
inline virtual double GetDepthSelectionHigh()¶
Get upper limit of z selection used for loading of photonics tables.
- Returns:
Minimum zenith angle (degrees)
-
bool LoadTables(int level, std::string driverFile, std::string topLevel)¶
Load photonics tables for specified level.
Tables must reside below “tables” subdirectory (or link) in cwd. I3PhotonicsServiceFactory changes working directory to achieve this before calling LoadTables.
- Parameters:
level – Photonics level
driverFile – Name of driver file
topLevel – Name of top level table directory (containing “tables” subdirectory)
-
void ClearTables(int level)¶
Clears the photonics table memory. Not needed for normal operation.
- Parameters:
level – photonics level for tables to be cleared
-
virtual void SelectModuleCoordinates(double xOM, double yOM, double zOM)¶
Select OM coordinates.
- Parameters:
xOM, yOM, zOM – Coordinates in metres
-
virtual void SelectModule(const I3OMGeo &omgeo)¶
Select OM coordinates.
- Parameters:
omgeo – I3OMGeo object from the I3Geometry
-
virtual void SelectSource(double &meanPEs, double &emissionPointDistance, double &geoTime, PhotonicsSource const &source)¶
Select light source Set source properties, calculate geometrical quantities based on OM previously selected by SelectModuleCoordinates(), call photonics, and return result.
- Parameters:
meanPEs – Mean number of PEs
emissionPointDistance – Distance between nominal cherenkov emission point and OM
geoTime – Nominal arrival time for cherenkov light relative to time of track starting point
source – Source parameters (type PhotonicsSource)
-
virtual void SelectSource(double &meanPEs, double &emissionPointDistance, double &geoTime, PhotonicsSource const &source, double &rho_radial_dist)¶
-
virtual void UpdateInternalParams(PhotonicsSource const &source, double saved_meanamp)¶
-
virtual void GetTimeDelay(double random, double &timeDelay)¶
Get photon arrival time Draws a photon arrival time (in ns) using table pointers set up by previous call to SelectSource.
- Parameters:
random – [in] Random number
timeDelay – [out] Photon arrival time relative to direct light time
-
virtual void GetTimeDelays(I3RandomServicePtr random, double *timeDelays, int n)¶
Get residual times for hit (w.r.t direct propagation from nominal emission point)
- Parameters:
random – [in] Random number generator
timeDelays – [out] Residual time
n – [in] Number of time delays to sample
-
virtual void GetProbabilityDensity(double &density, double timeDelay)¶
Get photon probability density in time.
Get time probability density for single photon arrival time (in ns^-1), based on the table pointers set up in latest call to SelectSource().
- Parameters:
density – [out] Probability density (ns^-1)
timeDelay – [in] Time offset from direct light arrival time
-
virtual bool GetProbabilityQuantiles(double *time_edges, double t_0, double *amplitudes, size_t n_bins)¶
Fill an array with probability quantiles for a previously selected OM/source combination, optionally convoluted with a Gaussian.
- Parameters:
time_edges – [in] Array giving the edges of the time bins
t_0 – [in] Direct time (time at which unscattered photons from the source would reach the DOM)
amplitudes – [out] Array to fill with mean PE counts
n_bins – [in] Size of the amplitude array. There are n_bins + 1 time edges.
-
virtual bool GetMeanAmplitudeGradient(double gradient[6])¶
Get the gradient of the number of photoelectrons expected at the OM coordinates specified by a previous call to SelectOMCoordinates.
- Parameters:
gradient – (out) Store the gradient in this array. The gradient is given with respect to the source position (d/dx, d/dy, d/dz in PE/meter), direction of source origin (d/dtheta and d/dphi in PE/radian) and source energy (in PE/GeV).
-
virtual bool GetMeanAmplitudeHessian(double gradient[6], double hessian[6][6])¶
-
virtual bool GetProbabilityQuantileGradients(double *time_edges, double t_0, double gradients[][6], size_t n_bins)¶
Get the gradient of photon detection probability at the OM coordinates specified by a previous call to SelectOMCoordinates in each of the time bins specified by time_edges.
- Parameters:
time_edges – (in) Array giving the edges of the time bins.
t_0 – (in) Direct time (time at which unscattered photons from the source would reach the DOM)
gradients – (out) Store the gradients for each time bin in this array. Gradients are given with respect to source position (d/dx, d/dy, d/dz in meter^-1), event time (d/dt in ns^-1), and direction of source origin (d/dtheta, d/dphi in radian^-1).
n_bins – (in) Size of the leading dimension of gradients. There are n_bins+1 elements in time_edges.
-
virtual bool GetProbabilityQuantileHessians(double *time_edges, double t_0, double values[], double gradients[][6], double hessians[][6][6], size_t n_bins)¶
-
virtual bool GetProbabilityDensityGradient(double gradient[6], double timeDelay)¶
-
virtual bool GetProbabilityDensityGradnHessian(double density_grad[6], double density_hessian[6][6], double timeDelay)¶
-
virtual void GetCDF(double &cdf, double timeDelay)¶
-
virtual bool GetCDFGradient(double gradient[6], double timeDelay)¶
-
virtual bool GetCDFGradnHessian(double cdf_grad[6], double cdf_hessian[6][6], double timeDelay)¶
-
virtual void GetKnotVector(double *knots, int dim)¶
-
virtual void GetTimeExtent(double *ext)¶
-
virtual bool GetPhotorecInfo(double &yield, double &probDensity, double delay, PhotonicsSource const &source)¶
Get photorec information.
Gets photorec information based on OM coordinates specified by previous call to SelectOMCoordinates, delay time, and photonics source information in PhotonicsSource struct.
- Parameters:
yield – [out] Light yield as given by table. For level 2 cascade line sources this is usually normalised to an energy loss of 1 GeV/m
probDensity – [out] Probability density in time (ns^-1)
delay – [in] Delay time
source – [in] Photonics source
- Returns:
Success or failure of photonics table access
-
virtual bool GetPhotorecDensities(double &yield, std::vector<double> &probDensities, std::vector<double> delays, PhotonicsSource const &source)¶
Get several photorec probability densities.
Gets mean number of PEs and the probability density for a specified set of times. Uses OM coordinates specified by previous, call to SelectOMCoordinates and photonics source information in PhotonicsSource struct.
- Parameters:
yield – [out] Light yield as given by table. For level 2 cascade line sources this is usually normalised to an energy loss of 1 GeV/m
probDensities – [out] Vector with probability densities (in ns^-1)
delays – [in] Vector of delay times to give densities for
source – [in] Photonics source
- Returns:
Success or failure of photonics table access
-
virtual double GetLmaxLevel1()¶
Get maximum l in level 1 photonics tables.
- Returns:
maximum l
-
virtual double GetLmaxLevel2()¶
Get maximum l in level 2 photonics tables.
- Returns:
maximum l
Private Functions
-
float EmissionEnergy(double E, double length)¶
Find energy at nominal point of cherenkov emission Adjust a in dE/dx=-a-bE such that E=0 for x=length and return energy at nominal point for cherenkov emission or zero if point beyond track end.
- Parameters:
E – Energy at start of track
length – Track length
-
bool LoadLevel1Tables()¶
Load level 1 photonics tables Paths must be set by LoadTables() before call to this function.
-
bool LoadLevel2Tables()¶
Load level 2 photonics tables Paths must be set by LoadTables() before call to this function.
Private Members
-
I3PhotonicsL1Reader *l1_photonics_¶
Pointer to photonics object for level 1 tables.
-
I3PhotonicsL2Reader *l2_photonics_¶
Pointer to photonics object for level 2 tables.
-
int interpolationMode_¶
-
bool level1TablesLoaded_¶
-
bool level2TablesLoaded_¶
-
double lmaxLevel1_¶
-
double lmaxLevel2_¶
-
float rawYield_¶
-
int level_¶
-
int type_¶
-
int tableSetId_¶
-
int tableId_¶
-
int stopTableId_¶
-
int lBin_¶
-
int lBinStop_¶
-
int rhoBin_¶
-
int rhoBinStop_¶
-
int phiBin_¶
-
int phiBinStop_¶
-
double angularSelectLow_¶
-
double angularSelectHigh_¶
-
double depthSelectLow_¶
-
double depthSelectHigh_¶
-
bool isPhotorecTable_¶
-
I3PhotonicsTableService()¶
-
class I3PhotoSplineService : public I3PhotonicsService, public I3ServiceBase¶
- #include <I3PhotoSplineService.h>
Access to spline-interpolated photonics tables.
Access and evaluate spline-interpolated photonics tables. The spline tables can be shared between different processes on the same computing node.
Public Types
Public Functions
-
I3PhotoSplineService(const std::string &litudeTable, const std::string &timingTable, const std::string &tiltTableDir = "", const std::string &effectiveDistanceTable = "", double timingSigma = 0, double maxRadius = std::numeric_limits<double>::infinity(), std::pair<double, double> cosAziRange = std::make_pair(-1., 1.), double quantileEpsilon = 0, const std::string &effectiveDistanceTableProb = "", const std::string &effectiveDistanceTableTmod = "")¶
Create a new I3PhotoSplineService instance.
- Parameters:
amplitudeTable – Path to the amplitude spline table
timingTable – Path to the timing spline table
effectiveDistanceTable – Path to the effective distance spline table
tiltTableDir – Path to the ice layer tilt table files
timingSigma – Smear the arrival time distribution with a B-spline of order 1 and this standard deviation.
maxRadius – Maximum expected distance for detected light from emitter
cosAziRange – Range of table azimuth to clamp (avoiding singularities in the coordinate transformation)
quantileEpsilon – Switch to double precision evaluation when timing quantile differs from 1 by less than this amount
effectiveDistanceTableProb – Path to the effective distance spline table for timing
effectiveDistanceTableTmod – Path to the effective distance spline table for timing modification
-
I3PhotoSplineService()¶
-
virtual ~I3PhotoSplineService()¶
-
void Configure()¶
-
virtual void SelectModuleCoordinates(double OMx, double OMy, double OMz)¶
Select OM.
- Parameters:
OMx, OMy, OMz – [in] Coordinates of OM
-
virtual void SelectSource(double &meanPEs, double &emissionPointDistance, double &geoTime, const PhotonicsSource &source)¶
Select source.
Select a source, set the time distribution parameters for later calls to the timing methods, and return the mean number of expected photoelectrons at the previously selected OM.
- Parameters:
meanPEs – [out] Mean number of expected photoelectrons
emissionPointDistance – [out] Distance from nominal light emission point to OM
geoTime – [out] Geometric photon arrival time
source – [in] Source parameters
-
virtual void SelectSource(double &meanPEs, double gradients[6], double &emissionPointDistance, double &geoTime, const PhotonicsSource &source, bool getAmp = true)¶
Select source.
Select a source, set the time distribution parameters for later calls to the timing methods, and return both the mean number of expected photoelectrons and the gradient at the previously selected OM.
- Parameters:
meanPEs – [out] Mean number of expected photoelectrons
gradients – [out] Gradient along source position (x, y, z), direction (theta, phi), and energy
emissionPointDistance – [out] Distance from nominal light emission point to OM
geoTime – [out] Geometric photon arrival time
source – [in] Source parameters
getAmp – [in] If false, set both
meanPEs
andgradients
to zero.
-
virtual void GetTimeDelay(double random, double &timeDelay)¶
Time residual.
Get the residual time of a hit with respect to direct propagation from the nominal light emission point.
Warning
This derived method is not implemented, because an implementation makes no sense here, and raises an exception.
- Parameters:
random – [in] Uniformly distributed random number
timeDelay – [out] Residual time
-
virtual void SelectSource(double &meanPEs, double &emissionPointDistance, double &geoTime, PhotonicsSource const &source, double &rho_radial_dist)¶
-
virtual void SelectSource(double &meanPEs, double gradients[6], double &emissionPointDistance, double &geoTime, PhotonicsSource const &source, double &rho_radial_dist, bool getAmp = true)¶
-
virtual void UpdateInternalParams(PhotonicsSource const &source, double saved_meanamp)¶
-
virtual void GetTimeDelays(I3RandomServicePtr random, double timeDelays[], int numSamples)¶
Time residuals.
Sample residual times of hits with respect to direct propagation from the nominal light emission point.
- Parameters:
random – [in] Random number generator
timeDelays – [out] Sequence of residual times of size
n
numSamples – [in] Number of residual times to sample
-
virtual void GetProbabilityDensity(double &density, double timeDelay)¶
Photon detection probability density.
Get the photon detection probability density for a previously selected OM/source combination.
- Parameters:
density – [out] Photon detection probability density for the given residual time
timeDelay – [in] Residual time
-
virtual bool GetProbabilityQuantiles(double timeEdges[], double timeDirect, double timeProbs[], size_t numBins)¶
Photon detection probability.
Get the photon detection probability for a previously selected OM/source combination.
- Parameters:
timeEdges – [in] Sequence of bin edges along time; size of
numBins
+ 1timeDirect – [in] Direct time: time at which not-scattered photons from the source would reach the DOM.
timeProbs – [out] Sequence of photon detection probabilities; size of
numBins
numBins – [in] Number of bins along time
- Returns:
A boolean specifying if the calculation was successful.
-
virtual bool GetProbabilityQuantiles(double timeEdges[], double timeDirect, double timeProbs[], double gradients[][6], size_t numBins)¶
Photon detection probability.
Get the photon detection probability and gradients for a previously selected OM/source combination.
- Parameters:
timeEdges – [in] Sequence of bin edges along time; size of
numBins
+ 1timeDirect – [in] Direct time: time at which not-scattered photons from the source would reach the DOM.
timeProbs – [out] Sequence of photon detection probabilities; size of
numBins
gradients – [out] Gradient along source position (x, y, z), event time, and source direction (theta, phi) for each bin along time; size of
numBins
along first dimensionnumBins – [in] Number of bins along time
- Returns:
A boolean specifying if the calculation was successful.
-
virtual bool GetMeanAmplitudeGradient(double gradient[6])¶
Mean amplitude gradient.
Get the gradient of the number of expected photoelectrons for the previously selected OM/source combination.
- Parameters:
gradient – [out] Gradient along source position (x, y, z), direction (theta, phi), and energy.
- Returns:
A boolean specifying if the calculation was successful.
-
virtual bool GetMeanAmplitudeHessian(double gradient[6], double hessian[6][6])¶
Mean amplitude Hesse matrix.
Get both the gradient and the Hesse matrix of the number of expected photoelectrons for the previously selected OM/source combination.
- Parameters:
gradient, hessian – [out] Gradient and Hesse matrix along source position (x, y, z), direction (theta, phi), and energy
-
virtual bool GetProbabilityQuantileGradients(double timeEdges[], double timeDirect, double gradients[][6], size_t numBins)¶
Photon detection probability gradient.
Get the gradient of the photon detection probability for the previously selected OM/source combination.
- Parameters:
timeEdges – [in] Sequence of bin edges along time; size of
numBins
+ 1timeDirect – [in] Direct time: time at which not-scattered photons from the source would reach the DOM.
gradients – [out] Gradient along source position (x, y, z), event time, and source direction (theta, phi) for each bin along time; size of
numBins
along first dimensionnumBins – [in] Number of bins along time
-
virtual bool GetProbabilityQuantileHessians(double timeEdges[], double timeDirect, double timeProbs[], double gradients[][6], double hessians[][6][6], size_t numBins)¶
Photon detection probability Hesse matrix.
Get both the gradient and the Hesse matrix of the photon detection probability for the previously selected OM/source combination.
- Parameters:
timeEdges – [in] Sequence of bin edges along time; size of
numBins
+ 1timeDirect – [in] Direct time: time at which not-scattered photons from the source would reach the DOM.
timeProbs – [out] Sequence of photon detection probabilities; size of
numBins
gradients, hessians – [out] Gradient and Hesse matrix along source position (x, y, z), event time, and source direction (theta, phi) for each bin along time; size of
numBins
along first dimensionnumBins – [in] Number of bins along time
-
int TableCDFEval(double *coordinates, double *result)¶
-
int TableCDFEvalHessian(double *coordinates, double result[6][6])¶
-
int TableCDFEvalGradients(double *coordinates, double *results)¶
-
void BasicDensityGrad(double tablecoordinates[6], int centers[6], double *gradient)¶
-
void BasicDensityHessian(double tablecoordinates[6], int centers[6], double result[6][6])¶
-
void BasicCDFGrad(double tablecoordinates[6], int centers[6], double *gradient)¶
-
void BasicCDFHessian(double tablecoordinates[6], int centers[6], double result[6][6])¶
-
virtual void GetCDF(double &cdf, double timeDelay)¶
-
virtual bool GetCDFGradient(double gradient[6], double timeDelay)¶
-
virtual bool GetCDFGradnHessian(double cdf_grad[6], double cdf_hessian[6][6], double timeDelay)¶
-
virtual bool GetProbabilityDensityGradient(double gradient[6], double timeDelay)¶
-
virtual bool GetProbabilityDensityGradnHessian(double density_grad[6], double density_hessian[6][6], double timeDelay)¶
-
int TableEval(double *coordinates, double *result)¶
-
int TableEvalHessian(double *coordinates, double result[6][6])¶
-
int TableEvalGradients(double *coordinates, double *results)¶
-
int TableDensityEval(double *coordinates, double *result)¶
-
int TableDensityEvalHessian(double *coordinates, double result[6][6])¶
-
int TableDensityEvalGradients(double *coordinates, double *results)¶
-
virtual void GetKnotVector(double *knots, int dim)¶
-
virtual void GetTimeExtent(double *ext)¶
-
void GetTimeExtent(double &tmin, double &tmax)¶
-
bool CheckSupport(double tableCoords[6]) const¶
Check if the table coordinates are supported.
Check if the given table coordinates are within the tables’ extents.
- Parameters:
tableCoords – [in] Table coordinates
- Returns:
A boolean specifying if the given table coordinates are supported.
Protected Types
-
using privateSplinetable = photospline::splinetable<>¶
-
using evaluator = typename Table::evaluator¶
Protected Functions
-
template<typename TableData>
void InitTableProperties(TableData &tables, const std::string &FileName)¶
- SET_LOGGER ("I3PhotoSplineService")
Protected Attributes
Whether to use table data stored in shared memory. If true, sharedTables_ is populated (using sharedTableStorage_) and privateTables_ is ignored; if false only privateTables_ is populated. This is controlled by setting the environment variable I3PHOTOSPLINESERVICE_SHARE_MEMORY to a non-empty value.
-
tableData<privateSplinetable> privateTables_¶
All spline tables, if not sharing memory.
Source of shared memory storage for shared tables.
All spline tables, if sharing memory.
Whether to omit reference counting of shared table data. This is dangerous, and should be used only only with significant care, as it requires external action to ensure that the data is cleaned up. This is controlled by setting the environment variable I3PHOTOSPLINESERVICE_NO_REF_COUNT to a non-empty value.
Private Functions
-
virtual bool LoadSplineTables(const std::string &FileName, const std::string &timeFileName, const std::string &effdFileName, const std::string &effdProbFileName, const std::string &effdTmodFileName, double timingSigma = 0.)¶
Load spline-interpolated photonics tables.
Load spline-interpolated photonics tables stored in FITS files either from disk or from shared memory.
- Parameters:
ampFileName – [in] Path to amplitude spline table
timeFileName – [in] Path to timing spline table
timingSigma – [in] Smear the arrival time distribution with a B-spline of order 1 and this standard deviation.
effdFileName – [in] Path to an effective distance spline table that accounts for small corrections due to the ice anisotropy
effdProbFileName – [in] Path to an effective distance spline table that applies small corrections in r to approximate effects of the ice anisotropy on the time PDF
effdTmodFileName – [in] Path to an effective distance spline table that applies small corrections in t to approximate effects of the ice anisotropy on the time PDF.”);
- Returns:
A boolean specifying if the loading was successful
-
bool LoadSplineTablesPrivate(const std::string &FileName, const std::string &timeFileName, const std::string &effdFileName, const std::string &effdProbFileName, const std::string &effdTmodFileName, double timingSigma = 0.)¶
-
template<typename TableData>
void FillTableCoordinates(const TableData &tables, double tableCoords[6], const PhotonicsSource &source, bool timing)¶ Fill table coordinates.
Fill an array of table coordinates, given a previously selected OM/source combination, for evaluating the spline tables.
- Parameters:
tableCoords – [out] Table coordinates
source – [in] Source parameters
timing – [in] Add time as a dimension to the table coordinates; the index is taken from the
timeAxis_
member.
-
template<typename TableData>
bool GetProbabilityQuantiles(const TableData &tables, double timeEdges[], double timeDirect, double timeProbs[], double gradients[][6], size_t numBins)¶ Internal implementation of photon detection probability.
Get the photon detection probability and gradients for a previously selected OM/source combination.
- Parameters:
tables – [in] Set of tables which is currently active, to use for calculation
timeEdges – [in] Sequence of bin edges along time; size of
numBins
+ 1timeDirect – [in] Direct time: time at which not-scattered photons from the source would reach the DOM.
timeProbs – [out] Sequence of photon detection probabilities; size of
numBins
gradients – [out] Gradient along source position (x, y, z), event time, and source direction (theta, phi) for each bin along time; size of
numBins
along first dimensionnumBins – [in] Number of bins along time
- Returns:
A boolean specifying if the calculation was successful.
-
template<typename TableData>
void BasicDensityGrad(const TableData &tables, double tablecoordinates[6], int centers[6], double *gradient)¶
-
template<typename TableData>
void BasicDensityHessian(const TableData &tables, double tablecoordinates[6], int centers[6], double result[6][6])¶
-
template<typename TableData>
void BasicCDFGrad(const TableData &tables, double tablecoordinates[6], int centers[6], double *gradient)¶
-
template<typename TableData>
void BasicCDFHessian(const TableData &tables, double tablecoordinates[6], int centers[6], double result[6][6])¶
-
template<typename TableData>
bool GetProbabilityQuantileHessians(const TableData &tables, double timeEdges[], double timeDirect, double timeProbs[], double gradients[][6], double hessians[][6][6], size_t numBins)¶
-
void ConvertMeanAmplitudeGradient(double rawGradient[6], double gradient[6], const PhotonicsSource &source)¶
Conversion of mean amplitude gradient.
Convert the gradient obtained from the evaluation of the amplitude spline table from table to source coordinates.
- Parameters:
rawGradient – [in] Gradient along table coordinates
gradient – [out] Gradient along source position (x, y, z), direction (theta, phi) and energy
source – [in] Source parameters
-
void ScaleMeanAmplitudeGradient(double gradient[6], const double &rawYield, const double &meanPEs, const PhotonicsSource &source)¶
Scaling of mean amplitude gradient.
Scale the gradient obtained from the evaluation of the amplitude spline table, converted to source coordinates, with the mean number of expected photoelectrons.
- Parameters:
gradient – [inout] Gradient along source position (x, y, z), direction (theta, phi), and energy
rawYield – [in] Light yield obtained from the evaluation of the amplitude spline table; needed for the scaling of the gradient component along energy.
meanPEs – [in] Mean number of expected photoelectrons
source – [in] Source parameters
-
template<typename TableData>
void FillJacobian(const TableData &tables, double jac[6][6], const PhotonicsSource &source, bool timing)¶
-
bool ApplyEffectiveDistance(bool timing)¶
-
void SampleTimeDelays(double timeDelays[], int numSamples, I3RandomServicePtr random)¶
Time residuals.
Sample residual times from the timing spline table by using the Pandel distribution as a proposal distribution.
- Parameters:
timeDelays – [out] Sequence of residual times of size
samples
numSamples – [in] Number of residual times to sample
random – [in] Random number generator
Private Members
-
int geotype_¶
Geometric type of spline tables: point source or infinite muon.
-
unsigned timeAxis_¶
Time axis corresponding to the geometry type; the time dimension is along the 3rd or 2nd for a point source or a infinite muon track, respectively.
-
double maxRadius_¶
Maximum expected distance for detected light from emitter.
-
double cosAziMin_¶
Range of table azimuth angles to clamp.
-
double cosAziMax_¶
-
I3IceLayerTilt tilt_¶
Optional: correct z-coordinates for the tilt in the ice layers.
-
double quantileEpsilon_¶
Optional: switch to double precision when quantiles are within this epsilon of 1. If 0, all evaluations use single precision. If > 0, densities, gradients, and hessians of the time distribution use double precision.
-
double meanPEs_¶
Cached mean number of expected photoelectrons.
-
PhotonicsSource lastSource_¶
Cache the last requested source.
-
double effectivedistancecoordinates_[4]¶
Effective distance coordinates for possible ice anisotropy and tilt correction.
-
double rawYield_¶
Cached unscaled number of photoelectrons.
-
double geoTime_¶
Cached geometric time.
-
double photonicsCoords_[4]¶
Cached photonics input parameters.
-
I3PhotoSplineService(const std::string &litudeTable, const std::string &timingTable, const std::string &tiltTableDir = "", const std::string &effectiveDistanceTable = "", double timingSigma = 0, double maxRadius = std::numeric_limits<double>::infinity(), std::pair<double, double> cosAziRange = std::make_pair(-1., 1.), double quantileEpsilon = 0, const std::string &effectiveDistanceTableProb = "", const std::string &effectiveDistanceTableTmod = "")¶
-
struct Interp_type¶
- #include <I3PhotonicsL1Reader.h>
-
struct Io_type¶
- #include <I3PhotonicsL1Reader.h>
Structure for storing offsets need for data retreival.
-
struct Level2_data_type¶
- #include <I3PhotonicsL2Reader.h>
-
struct Level2_geo_type¶
- #include <I3PhotonicsL2Reader.h>
this is not written to disk, format therefore changable
-
struct Level2_header_type¶
- #include <I3PhotonicsL2Reader.h>
Public Members
-
photonics::MetaHead_type MetaHead¶
-
char dummy_padding[28]¶
not used
-
float gausconv¶
convolved with gausian of this width
-
float ref_np¶
phase refractive index used for true <—> residual calc
-
float ref_ng¶
phase refractive index used for true <—> residual calc
-
bool dummy_a¶
NOT USED
-
photonics::source_type source¶
Emission source type
-
bool dummy_b¶
NOT USED
-
float dummy_c1¶
Step for photon tracking (m)
-
float e¶
Shower energy for shower sources in (GeV)
-
float dummy_c2¶
NOT USED
-
float theta¶
Source axis zenith angle
-
float dummy_c3[2]¶
NOT USED
-
float range[L2VARS][2]¶
Recordable limits for each dimension
-
float dummy_range[VARS - L2VARS][2]¶
NOT USED
-
float dummy_e[VARS][2]¶
NOT USED
-
float z0¶
depth of active volume center wrt ice table
-
photonics::scale_type d_scale¶
distance scaling parameter
-
photonics::scale_type t_scale¶
time scaling parameter
-
float lambda¶
light wavelength, or spectral “index”
-
photonics_l2_table_flavor type¶
Table type
-
photonics::scale_type l_scale¶
lengthwize scaling parameter
-
photonics::time_ref_type tref¶
Timing reference
-
photonics::MetaHead_type MetaHead¶
-
struct Level2_interp_type¶
- #include <I3PhotonicsL2Reader.h>
-
struct Level2_read_type¶
- #include <I3PhotonicsL2Reader.h>
Public Members
-
float val[L2VARS]¶
Physical coords of interest
-
int bin[L2VARS]¶
Corresponding bin for physical coord
-
int n[L2VARS]¶
Number of bins in each dimesnion
-
unsigned short interp_mask¶
Bin interpolation mask
-
float lowEdge[L2VARS]¶
Physical value of lower edge of a bin
-
float binSize[L2VARS]¶
Physical size of a bin
-
float val[L2VARS]¶
-
struct MetaHead_type¶
- #include <I3PhotonicsReader.h>
-
struct Mid_type¶
- #include <I3PhotonicsReader.h>
-
struct Opt_type¶
- #include <I3PhotonicsL1Reader.h>
Structure for runtime configuration data.
Public Members
-
bool long_run¶
-
char in_file_name[MAXLINE]¶
-
char out_file_name[MAXLINE]¶
-
char ice_file_name[MAXLINE]¶
-
char eff_file_name[MAXLINE]¶
-
char tmp_out_file_name[MAXLINE]¶
-
double flasher_theta[12]¶
holds configuration for flasher board source
-
double flasher_phi[12]¶
-
bool hole_ice¶
hole ice cylinder around source is either on or off
-
double hole_ice_r¶
radius of hole ice cylinder
-
double hole_scattering¶
scattering length for the hole ice
-
bool long_run¶
-
struct PhotonicsSource¶
- #include <I3PhotonicsService.h>
A type for passing the light source parameters.
Public Functions
-
PhotonicsSource()¶
-
PhotonicsSource(const I3Particle&)¶
Fill a PhotonicsSource struct from an I3Particle.
-
PhotonicsSource(double x, double y, double z, double zenith, double azimuth, double speed, double length, double Energy, int type)¶
Fill a PhotonicsSource struct from basic quantities.
- Parameters:
x, y, z – Source coordinates (metres)
zenith, azimuth – Direction which source points from (degrees)
speed – Particle speed (fraction of c)
Energy – Energy (GeV)
length – Source length (zero for point source) (metres)
type – Source type (0=muon, 1=EM cascade)
Public Members
-
double x¶
Coordinates of source.
-
double y¶
-
double z¶
-
double dirx¶
Direction source is pointing.
-
double diry¶
-
double dirz¶
-
double perpx¶
Perpendicular vector.
Unit vector perpendicular to source direction and pointing a close to vertically upwards as possible.
-
double perpy¶
-
double perpz¶
-
double sintheta¶
Decomposition of source direction.
-
double costheta¶
-
double sinphi¶
-
double cosphi¶
-
double zenith¶
Zenith angle angle source is pointing away from (zero if pointing vertically down)
-
double E¶
Energy (or energy per metre) of source particle.
The energy is used to re-scale the light output appropriately. For cascade tables the re-scaling is linear in the cascade energy. For level 2 lineshower tables (“light-sabres”), with cascades uniformly distributed along the track, this implies that the re-scaling gives the light output for a deposited energy E per metre. This is not true for level 2 muon tables, since for such tables the re-scaling is based on the muon energy, and includes the effects of the continuous energy loss.
-
double length¶
Length of source.
-
double speed¶
Speed of source, as a fraction of c.
-
int type¶
Photonics type (0=muon,1=EM cascade).
This refers to the photonics definitions (in photoamasim.h and light.c): MUON=0, EMS=1, HADS=2 photonics-service knows about these three types and uses the photonics light() function to calculate the light output.
Note, however, that as of December 2008 there are no hadronic tables, and the EM tables are used also for hadronic cascades, but with corrections applied externally by photonics-service.
For types outside the range 0,1,2 no conversion from table content to light output is made. In addition, for such types level1 EM tablesi are generally assumed. For certain “known types” different from 0 and 1, however, photon tables can be generated, and in this case the “known type” will be passed to photonics. These “known types” are currently 9,10,11,12 and have been used for monopole tables.
Photonics also defines the following source_type enumeration: ISOTROPIC = 1,CHERENKOV = 2,BEAMED = 3,COSTHETA = 4, EM_SHOWER = 5, HAD_SHOWER= 6, FLASHER_LED=7, FLASHER_BOARD=8. but these are not used here.
-
PhotonicsSource()¶
-
struct pref_level1_t¶
- #include <I3PhotonicsL1Reader.h>
behaviour control
-
struct pref_level2_t¶
- #include <I3PhotonicsL2Reader.h>
behaviour control
-
struct Read_type¶
- #include <I3PhotonicsL1Reader.h>
-
struct Region_type¶
- #include <I3PhotonicsReader.h>
-
template<typename Table>
struct tableData¶ - #include <I3PhotoSplineService.h>
Public Members
-
evaluators<Table, float> floatEvaluators_¶
-
evaluators<Table, double> doubleEvaluators_¶
-
evaluators<Table, float> floatEvaluators_¶
-
struct Tableset_level1_container_type¶
- #include <I3PhotonicsL1Reader.h>
A level1 tableset container contains several level1 table sets.
mytablesets_levbel2 is a static global which is intended to handle any number of tablesets.
The struct members are:
current : index of current tableset
n_tablesets : total number of tablesets initialized
tableset : an array of tablesets [0,…,n_tablesets-1]
-
struct Tableset_level1_type¶
- #include <I3PhotonicsL1Reader.h>
Public Members
-
Amasim_Table_Type *table¶
-
photonics::Header_type *header¶
-
unsigned long memused¶
-
unsigned long memforset¶
-
int photorec_mode¶
option for the photorec functionallity
-
int *n_tables¶
-
double z_src_max¶
highest valid z_src
-
double z_src_min¶
highest valid z_src
-
double a_src_max¶
-
double a_src_min¶
-
int n_z_layers¶
number of z layers in this tableset
-
int dummy_A¶
not used
-
int *z_layer_index¶
indeces to first table of each z layer
-
int *z_layer_n_thetas¶
number of angles in each z layer
-
double *z_layer_centers¶
central z value in each z layer
-
Amasim_Table_Type *table¶
-
struct Tableset_level2_container_type¶
- #include <I3PhotonicsL2Reader.h>
A level2 tableset container contains several level2 table sets.
mytablesets_levbel2 is a static global which is intended to handle any number of tablesets.
The struct members are:
current : index of current tableset
n_tablesets : total number of tablesets initialized
tableset : an array of tablesets [0,…,n_tablesets-1]
-
struct Tableset_level2_type¶
- #include <I3PhotonicsL2Reader.h>
Public Members
-
Amasim_Level2_Table_type *table¶
-
Level2_geo_type *geo¶
-
Level2_header_type *header¶
-
tableset_type type¶
-
unsigned long memused¶
-
unsigned long memforset¶
-
double last_probcalc¶
-
double delay_probcalc¶
time used by probcalc, must be in internal format
-
int photorec_mode¶
option for the photorec functionallity
-
int pair_id¶
-
int *n_tables¶
-
double z_src_max¶
highest valid z_src
-
double z_src_min¶
highest valid z_src
-
double a_src_max¶
highest valid a_src
-
double a_src_min¶
highest valid a_src
-
double ref_dist¶
reference distance, distance of influence in l
-
double ref_dist_fraction¶
tiny fraction of ref_dist
-
int n_z_layers¶
number of z layers in this tableset
-
double inv_sin_ch¶
inverted sin cherenkov angle
-
int *z_layer_index¶
indeces to first table of each z layer
-
int *z_layer_n_thetas¶
number of angles in each z layer
-
double *z_layer_centers¶
central z value in each z layer
-
Amasim_Level2_Table_type *table¶
-
namespace [anonymous]
-
namespace [anonymous]
-
namespace [anonymous]¶
-
namespace [anonymous]
-
namespace [anonymous]
-
namespace I3DummyPhotonics¶
A few parameters to describe response. Only very roughly tuned to give results which are not entirely unreasonable.
-
namespace I3MPConst¶
Functions
- const double ALPHA_2_PI (2.*I3Constants::pi/137.)
The fine structure constant times 2 pi
- const double LAMBA_0 (300.*I3Units::nanometer)
The lower and upper integration limits of the Cherenkov spectrum. This needs to match the simulation range used in photonics.
- const double LAMBA_1 (600.*I3Units::nanometer)
Variables
-
const double G = 68.5¶
Monopole Charge. Units of e. The charge is 2*pi*h_bar*c/e
-
const double Z_SQUARED = pow(G * I3Constants::n_ice_phase, 2)¶
The charge number of the particle. Note that phase index needed
-
const double MP_FACTOR = ALPHA_2_PI * Z_SQUARED * (1. / LAMBA_0 - 1. / LAMBA_1)¶
This is the constant factor in the Cherenkov radiation formula including the integration over wavelength. The product of this times the speed dependent factor gives the number of photons emitted per unit length.
-
const double BETA_TYPE9 = 1.0¶
Photonics track type boundaries
-
const double BETA_TYPE10 = 0.9¶
-
const double BETA_TYPE11 = 0.8¶
-
const double BETA_TYPE12 = 0.76¶
-
const double BETA_TYPE13 = 0.02¶
-
namespace I3PhotonicsCommons¶
Functions
-
double scaleLightYield(const PhotonicsSource &s, double rawYield, double energy = -1, unsigned derivative = 0)¶
Light yield parametrization from ChW. Copied from photonics code.
-
void fillJacobian(const double &xOM, const double &yOM, const double &zOM, const double &r, const double &rho, const double &cosAzi, const double &l, const PhotonicsSource &source, double jac[6][6], const geo_type geometry = CYLINDRICAL, const parity_type parity = EVEN, const double n_group = nGroup)¶
-
void fillJacobianInfiniteMuon(const double &xOM, const double &yOM, const double &zOM, const double &r, const double &rho, const double &cosAzi, const double &l, const PhotonicsSource &source, double jac[6][6], const geo_type geometry, const parity_type parity, const double n_group)¶
-
void transformJacobianEffectiveDistance(const double &xOM, const double &yOM, const double &zOM, const PhotonicsSource &source, double jac[6][6], double transgradient[5], const geo_type geometry = SPHERICAL, double tmodgradient[5] = nullptr)¶
-
void fillHessian(const double &xOM, const double &yOM, const double &zOM, const double &r, const double &rho, const double &cosAzi, const double &l, const PhotonicsSource &source, double jac[6][6], double hess[6][6][6], const geo_type geometry = CYLINDRICAL, const parity_type parity = EVEN, const double n_group = nGroup)¶
-
void fillHessianInfiniteMuon(const double &xOM, const double &yOM, const double &zOM, const double &r, const double &rho, const double &cosAzi, const double &l, const PhotonicsSource &source, double jac[6][6], double hess[6][6][6], const geo_type geometry, const parity_type parity, const double n_group)¶
-
double scaleLightYield(const PhotonicsSource &s, double rawYield, double energy = -1, unsigned derivative = 0)¶
-
namespace photonics¶
Namespace for putting functions used by both the L1 and L2 photonics readers.
Typedefs
-
typedef int8_t ph_tiny¶
-
typedef int16_t ph_short¶
-
typedef int32_t ph_int¶
-
typedef int32_t ph_size_t¶
-
typedef long long ph_long¶
Enums
-
enum source_type¶
Values:
-
enumerator ISOTROPIC¶
-
enumerator CHERENKOV¶
-
enumerator BEAMED¶
-
enumerator COSTHETA¶
-
enumerator EM_SHOWER¶
-
enumerator HAD_SHOWER¶
-
enumerator FLASHER_LED¶
-
enumerator FLASHER_BOARD¶
-
enumerator FLASHER_BOARD_WITH_HOLE_ICE¶
-
enumerator STANDARD_CANDLE_WITH_HOLE_ICE¶
-
enumerator STANDARD_CANDLE_DOWNWARDS_WITH_HOLE_ICE¶
-
enumerator ISOTROPIC¶
Functions
-
double next_boundary_sqr(const double base, const double step)¶
-
void copy_header(const Header_type*, Header_type*)¶
Copies header info.
-
bool checkMetaHeadLittle(MetaHead_type *MetaHead)¶
true if the examined meta head is little endian
-
bool checkMetaHead32bit(MetaHead_type *MetaHead)¶
true if the examined meta head is written on 32 bit machine
-
bool checkMetaHead_back(MetaHead_type *MetaHead, int verbose)¶
-
bool checkMetaHead(MetaHead_type *MetaHead)¶
true if the examined meta head is written on 32 bit machine
-
double residual_convert(double ind_old, double ind_new, double time_old, double rho, double l, double rev_sin_ang, time_ref_type REFTYPE)¶
Convert a residual time from one group index of refraction to another.
- Parameters:
ind_old – refractive index for input timedelay
ind_new – refractive index to convert timedelay into
time_old – residual time in ind_old sens
rho – perpendicular distance track origin—OM
l – longitudinal distance track origin—OM
rev_sin_ang – 1/(sin(cherenkov_angle))
REFTYPE – type of residual calculation
- Returns:
residual time, as if it would have been calculated with group refractive ind_new.
-
int binary(const float*, int, double)¶
Binary search of an integrated probability distribution.
-
int find(const double*, int, double, int)¶
Modified hunt routine from NR, for seeded binary search.
IMPORTANT: If array is sorted from low to high, bins are defined as [low_edge,high_edge). If sorted from high to low, then bins are (low_edge,high_edge]. E.g. array={-1,0,1} find with key=0 returns 1, i.e. 0 is in [0,1) array={1,0,-1} find with key=0 returns 0, i.e. 0 is in (-1,0]
Note
n is the highest allowed index. that is, (nbins-1) this function does not work when n=0;
-
bool isLittleEndian(void)¶
Functions for determination of supported environment.
-
int memlength()¶
-
int ph_long_length()¶
-
bool is32bitMemory()¶
-
bool is64bitMemory()¶
-
bool isSupportedEnvironment()¶
-
void px_swap32(void *p_swapit_)¶
32 bit byte swapping. bytes ABCD -> DCBA.
Operates directly on p_swapit_
-
void px_swap64(void *p_swapit_)¶
64 bit byte swapping. bytes ABCD EFGH -> DCBA HGFE
Because the type is actually ‘long long’ Operates directly on p_swapit_
-
typedef int8_t ph_tiny¶
-
namespace std
STL namespace.
- file geo_type.h
Defines
-
PHOTONICS_PHOTONICS_H_ENUM_PARITY_TYPE_ENUM_DEFINED¶
-
PHOTONICS_PHOTONICS_H_ENUM_PARITY_TYPE_ENUM_DEFINED¶
- file I3DummyPhotonicsService.cxx
- #include <iostream>#include <ostream>#include <cmath>#include “photonics-service/I3DummyPhotonicsService.h”
Implementation of class I3DummyPhotonicsService.
- Author
Klas Hultqvist
- Version
$Id$
- Date
$Date$ (c) the IceCube Collaboration
Defines
-
BACKWARD¶
- file I3DummyPhotonicsService.h
- #include “photonics-service/I3PhotonicsService.h”
I3DummyPhotonicsService A class which re-implements methods from I3PhotonicsService with dummy ones which do not use photonics tables.
- Author
Klas Hultqvist
- Version
$Id$
- Date
$Date$ (c) the IceCube Collaboration *
Functions
-
I3_POINTER_TYPEDEFS(I3DummyPhotonicsService)¶
Definitions of shared pointers.
- file I3IceLayerTilt.cxx
- #include <cmath>#include <fstream>#include <iostream>#include <vector>#include <boost/algorithm/clamp.hpp>#include “icetray/I3Logging.h”#include <photonics-service/I3IceLayerTilt.h>
- file I3IceLayerTilt.h
- #include <string>
I3IceLayerTilt A class for calculating ice layer tilt.
- Author
Dmitry Chirkin (c) the IceCube Collaboration
- file I3MPConstants.h
- #include “dataclasses/I3Constants.h”
- file I3PhotonicsHitMaker.cxx
- #include <photonics-service/I3PhotonicsService.h>#include <phys-services/I3RandomService.h>#include <dataclasses/physics/I3Particle.h>#include <simclasses/I3MCPE.h>#include <dataclasses/physics/I3MCTree.h>#include <dataclasses/geometry/I3Geometry.h>#include <dataclasses/calibration/I3Calibration.h>#include <dataclasses/status/I3DetectorStatus.h>#include “sim-services/I3SimConstants.h”#include <icetray/I3Module.h>#include <boost/foreach.hpp>
Functions
-
I3_MODULE(I3PhotonicsHitMaker)¶
-
I3_MODULE(I3PhotonicsHitMaker)¶
- file I3PhotonicsL1Reader.cxx
- #include <cmath>#include <cstdio>#include <cerrno>#include <cstring>#include <cassert>#include <sys/types.h>#include <sys/user.h>#include <sys/mman.h>#include “icetray/I3Logging.h”#include “dataclasses/I3Constants.h”#include “photonics-service/I3PhotonicsL1Reader.h”
This file for code for reading level1 photonics tables.
The following is a list of files from photonic which I copied verbatium to create this file:
photonics-1.73/amasim/photoamasim.h
photonics-1.73/lib/reader.h
photonics-1.73/lib/reader.c
photonics-1.73/lib/io.c
photonics-1.73/amasim/table_io.c
- Author
Kevin Meagher
- Author
Johan Lundberg
- Author
P. Miocinovic
- Author
RCB
- Author
KWW
- Version
$Id$
- Date
$Date$
For documentation of photonics files see http://photonics.sourceforge.net/index.php
- Copyright
Copyright (c) The IceCube Collaboration
- file I3PhotonicsL1Reader.h
- #include <photonics-service/I3PhotonicsReader.h>
This header file contains a class for reading photonics level1 tables.
The following is a list of file from photonic-1.73 which I copied verbatium to create this header file:
photonics-1.73/lib/photonics.h
photonics-1.73/lib/reader.h
photonics-1.73/amasim/table_io.c
photonics-1.73/amasim/photoamasim.h
- Author
Kevin Meagher
- Author
Johan Lundberg
- Author
P. Miocinovic
- Author
RCB
- Author
KWW
- Version
$Id$
- Date
$Date$
- Copyright
Copyright (c) The IceCube Collaboration
- file I3PhotonicsL2Reader.cxx
- #include <cmath>#include <cstdio>#include <cerrno>#include <cstring>#include “icetray/I3Logging.h”#include “dataclasses/I3Constants.h”#include “photonics-service/I3PhotonicsL2Reader.h”
Class for Reading Photonics Level2 files for use with photonics-service.
This file contains a cleaned up version of:
photonics-1.73/level2/level2_photonics.h:
photonics-1.73/level2/level2_reader.h
photonics-1.73/level2/light.c
photonics-1.73/level2/photonicsCPPio.cxx
photonics-1.73/level2/level2_table_io.c
photonics-1.73/level2/level2_reader.c
- Author
Kevin Meagher
- Author
Johan Lundberg
- Author
P. Miocinovic
- Version
$Id$
- Date
$Date$
For documentation of photonics files see http://photonics.sourceforge.net/index.php
- Copyright
Copyright (c) The IceCube Collaboration
Defines
-
L2_EXT_LISTMARKSTOP¶
-
L2_EXT_LISTMARKSTART¶
-
L2_EXT_LISTMARKPHOTOREC¶
-
L2_INTERP_NONE¶
-
L2_INTERP_PRIMARY¶
l
-
L2_INTERP_SECONDARY¶
rho
-
L2_INTERP_TERTIARY¶
phi
-
L2_INTERP_TIME¶
time:
-
L2_INTERP_DEPTH¶
depth: 16
-
L2_INTERP_ANGLE¶
theta: 32
-
MUON
-
EMS
-
HADS
-
photons¶
Cerenkov photons per meter in 300 - 600 nm range
-
ERROR_MARGIN¶
Allowable numerical error for temp array
- file I3PhotonicsL2Reader.h
- #include <photonics-service/I3PhotonicsReader.h>
Class for Reading Photonics Level2 files for use with photonics-service.
This file contains a cleaned up version of:
photonics-1.73/level2/level2_table_io.h
photonics-1.73/level2/photonicsCPPio.h
photonics-1.73/level2/level2.h
- Author
Kevin Meagher
- Author
Johan Lundberg
- Author
P. Miocinovic
- Version
$Id$
- Date
$Date$
For documentation of photonics files see http://photonics.sourceforge.net/index.php
- Copyright
Copyright (c) The IceCube Collaboration
- file I3PhotonicsReader.cxx
- #include <cmath>#include <cstring>#include <stdint.h>#include <sys/mman.h>#include “dataclasses/I3Constants.h”#include “icetray/I3Logging.h”#include “photonics-service/I3PhotonicsReader.h”
This file for code for reading both L1 and L2 photonics tables.
The following is a list of files from photonic which I copied verbatium to create this file:
photonics-1.73/lib/photonics.h
photonics-1.73/lib/geometry.c
photonics-1.73/lib/io.c
photonics-1.73/lib/misc.c
- Author
Kevin Meagher
- Author
Johan Lundberg
- Author
P. Miocinovic
- Author
RCB
- Author
KWW
- Version
$Id$
- Date
$Date$
For documentation of photonics files see http://photonics.sourceforge.net/index.php
- Copyright
Copyright (c) The IceCube Collaboration
- file I3PhotonicsReader.h
- #include <photonics-service/geo_type.h>
This header file contains definitions needed for reading both L1 and L2 photonics tables.
The following is a list of file from photonic-1.73 which I copied verbatium to create this header file:
photonics-1.73/lib/photonics.h
- Author
Kevin Meagher
- Author
Johan Lundberg
- Author
P. Miocinovic
- Author
RCB
- Author
KWW
- Version
$Id$
- Date
$Date$
- Copyright
Copyright (c) The IceCube Collaboration
- file I3PhotonicsService.cxx
- #include <icetray/I3Units.h>#include <photonics-service/I3PhotonicsService.h>#include <dataclasses/geometry/I3OMGeo.h>#include “I3MPConstants.h”
Implementation of class I3PhotonicsService.
- Author
Klas Hultqvist
- Version
$Id$
- Date
$Date$ (c) the IceCube Collaboration
- file I3PhotonicsService.h
- #include <icetray/I3Logging.h>#include <icetray/I3PointerTypedefs.h>#include <dataclasses/physics/I3Particle.h>#include <phys-services/I3RandomService.h>#include “photonics-service/geo_type.h”#include <string>#include <cfloat>#include <cmath>#include <vector>
I3PhotonicsService A class for accessing photonics tables.
Heavily modelled on PSInterface by Thomas Burgess, but with reduced generality (photonics only), error checking, and execution time. Methods using photonics are declared as virtual to enable re-implementation in derived dummy class.
- Author
Klas Hultqvist
- Version
$Id$
- Date
$Date$ (c) the IceCube Collaboration
Functions
-
inline bool operator==(const PhotonicsSource &A, const PhotonicsSource &B)¶
-
I3_POINTER_TYPEDEFS(I3PhotonicsService)¶
-
I3_DEFAULT_NAME(I3PhotonicsService)¶
- file I3PhotonicsServiceCollection.cxx
- file I3PhotonicsServiceCollection.h
- #include “photonics-service/I3PhotonicsService.h”#include “dataclasses/geometry/I3OMGeo.h”#include <icetray/I3ServiceBase.h>
I3PhotonicsServiceCollection A collection of I3PhotonicsService instances, dispatched to by OMType.
- Author
Jakob van Santen (c) the IceCube Collaboration
Functions
-
I3_POINTER_TYPEDEFS(I3PhotonicsServiceCollection)¶
- file I3PhotonicsServiceCommons.cxx
-
#include “photonics-service/I3MPConstants.h”#include <string>#include <cmath>#include <float.h>#include “icetray/I3Units.h”#include “dataclasses/I3Constants.h”
implementations of I3PhotonicsServiceCommons.h
- Author
Eike Middell (c) the IceCube Collaboration
- file I3PhotonicsServiceCommons.h
- #include “icetray/IcetrayFwd.h”#include “photonics-service/I3PhotonicsService.h”
static methods that are common to several classes
- Author
Eike Middell (c) the IceCube Collaboration
- file I3PhotonicsServiceFactory.cxx
- #include “photonics-service/I3DummyPhotonicsService.h”#include “photonics-service/I3PhotonicsTableService.h”#include “icetray/I3Units.h”#include “boost/make_shared.hpp”#include “boost/filesystem/path.hpp”#include “boost/filesystem/operations.hpp”
Implementation of class I3PhotonicsServiceFactory.
- Author
Klas Hultqvist
- Version
$Id$
- Date
$Date$ (c) the IceCube Collaboration
Functions
-
I3_SERVICE_FACTORY(I3PhotonicsServiceFactory)¶
- file I3PhotonicsServiceFactory.h
- #include “icetray/I3ServiceFactory.h”#include <boost/shared_ptr.hpp>#include “photonics-service/I3PhotonicsService.h”#include “photonics-service/I3DummyPhotonicsService.h”#include <string>
I3PhotonicsServiceFactory A class for creating an I3PhotonicsService object and making it available for use.
- Author
Klas Hultqvist
- Version
$Id$
- Date
$Date$ (c) the IceCube Collaboration
- file I3PhotonicsTableService.cxx
- #include <sys/param.h>#include <iostream>#include <ostream>#include <cmath>#include <gsl/gsl_randist.h>#include <gsl/gsl_rng.h>#include “icetray/I3Units.h”#include “dataclasses/geometry/I3OMGeo.h”#include “photonics-service/I3PhotonicsTableService.h”#include “boost/filesystem.hpp”
Implementation of class I3PhotonicsTableService.
- Author
Klas Hultqvist
- Version
$Id$
- Date
$Date$ (c) the IceCube Collaboration
Functions
-
path SwitchDir(const path newDir)¶
- file I3PhotonicsTableService.h
- #include <string>#include <cmath>#include <vector>#include <photonics-service/I3PhotonicsService.h>#include <photonics-service/I3PhotonicsL1Reader.h>#include <photonics-service/I3PhotonicsL2Reader.h>
I3PhotonicsTableService A class for accessing photonics tables.
Heavily modelled on PSInterface by Thomas Burgess, but with reduced generality (photonics only), error checking, and execution time. Methods using photonics are declared as virtual to enable re-implementation in derived dummy class.
- Author
Klas Hultqvist
- Version
$Id$
- Date
$Date$ (c) the IceCube Collaboration
Defines
-
BIGNUMBER¶
Functions
-
I3_POINTER_TYPEDEFS(I3PhotonicsTableService)¶
- file I3PhotoSplineSampling.cxx
- #include “photonics-service/I3PhotoSplineService.h”#include <algorithm>#include <array>#include <cmath>#include <limits>#include <random>#include <vector>#include <icetray/I3Logging.h>#include <phys-services/I3RandomService.h>
Implementation of photo-spline service: residual time sampling
(c) 2017 the IceCube Collaboration $Id$
- Date
$Date$
- Author
Jakob van Santen
- file I3PhotoSplineService.cxx
- #include “photonics-service/I3PhotoSplineService.h”#include <algorithm>#include <cmath>#include <chrono>#include <limits>#include <memory>#include <string>#include <thread>#include <vector>#include <boost/interprocess/managed_shared_memory.hpp>#include <boost/interprocess/allocators/allocator.hpp>#include <boost/interprocess/containers/string.hpp>#include <boost/filesystem.hpp>#include <gsl/gsl_randist.h>#include <photospline/splinetable.h>#include <unistd.h>#include <icetray/I3Context.h>#include <icetray/I3Logging.h>#include <icetray/I3ServiceBase.h>#include <icetray/I3SingleServiceFactory.h>#include <icetray/I3Units.h>#include <dataclasses/I3Constants.h>#include <phys-services/I3RandomService.h>#include “photonics-service/I3PhotonicsService.h”
Typedefs
-
using I3PhotoSplineServiceFactory = I3SingleServiceFactory<I3PhotoSplineService, I3PhotonicsService>¶
Functions
-
I3_SERVICE_FACTORY(I3PhotoSplineServiceFactory)¶
-
using I3PhotoSplineServiceFactory = I3SingleServiceFactory<I3PhotoSplineService, I3PhotonicsService>¶
- file I3PhotoSplineService.h
- #include <limits>#include <memory>#include <string>#include <boost/interprocess/allocators/allocator.hpp>#include <boost/interprocess/managed_shared_memory.hpp>#include <photospline/splinetable.h>#include <icetray/I3Context.h>#include <icetray/I3Logging.h>#include <icetray/I3PointerTypedefs.h>#include <icetray/I3ServiceBase.h>#include <phys-services/I3RandomService.h>#include “photonics-service/I3PhotonicsService.h”#include “photonics-service/I3IceLayerTilt.h”
Implementation of photo-spline service
(c) 2009 the IceCube Collaboration $Id$
Definition of photo-spline service
- Date
$Date$
- Author
Eike Middell
(c) 2009 the IceCube Collaboration $Id$
- Date
$Date$
- Author
Eike Middell
Functions
-
I3_POINTER_TYPEDEFS(I3PhotoSplineService)¶
- file I3PhotoSplineServiceGradients.cxx
- #include “photonics-service/I3PhotoSplineService.h”#include <algorithm>#include <cmath>#include <cstring>#include <vector>#include <icetray/I3Logging.h>
Implementation of photo-spline service: gradient methods
(c) 2011 the IceCube Collaboration $Id$
- Date
$Date$
- Author
Jakob van Santen
Defines
-
WARN_UNLESS_SELECTABLE_PRECISION¶
- file index.dox
- dir icetray
- dir photonics-service
- dir photonics-service
- dir photonics-service
- dir private
- dir public
- page index
- Author
Klas Hultqvist
Description¶
This is the automatic documentation of the
photonics-service
project. Photonics-service provides the interface to access the photonics i/o functions from IceTray.For specific information on classes or files, click the appropriate tab at the top of the page.
For wiki documentation, see http://wiki.icecube.wisc.edu/index.php/Photonics-service
Photonics is described in the paper: Light tracking through ice and water — Scattering and absorption in heterogeneous media with PHOTONICS J. Lundberg a, P. Miocinovic, K. Woschnagg, T. Burgess , J. Adams, S. Hundertmark, P. Desiati, P. Niessen, Nucl. Instr. and Meth. A, Volume 581, Issue 3, 1 November 2007, Pages 619-631 http://dx.doi.org/10.1016/j.nima.2007.07.143 free mirror: astro-ph/0702108
For more information on photonics, see http://photonics.sourceforge.net/index.php