Version History¶
Version 1.10.0¶
New Features
Added a cut in the
EventKernel
to skip the simulation of events with observation angles larger than a given value away from the Cherenkov angle.Added a cut in the
EventKernel
to skip the simulation of events with weight(s) below a given value.Added an option to interpolate attenuation calculations to speed up ray tracing steps.
Added a toggle in event generators to opt in/out of using the secondary interaction approximations.
Added the ability to toggle generators between the expected neutrino ratios from astrophysical or cosmogenic origins.
Added
volume
andsolid_angle
properties to generator objects.Earth model moved into
earth
, an instance of the newPREM
class.Added the
CoreMantleCrustModel
class to replicate the Earth model used in AraSim.Added
pyrex.custom.ara.stations
which implements the layouts of the deployed ARA stations inDetector
subclasses.New HDF5 file version 1.1 which changes how string data is handled due to changes in the
h5py
package.Added the
File.get_data()
method to read arbitrary datasets from files.
Changes
Minimum versions of dependencies increased (
numpy
>=1.17,scipy
>=1.4,h5py
>=3.0).Added support for Askaryan signals observed directly at the Cherenkov angle.
Implemented alternative form factor for hadronic interactions in Askaryan model.
Askaryan models now inherit from
FunctionSignal
, improving the accuracy of their values after the application of multiple filters.Added optional buffers to the start and end of
FunctionSignal
times.Changed the default times array of the
EventKernel
to be symmetric about zero.Implemented extrapolation of attenuation data in
ArasimIce
to match the implementation in AraSim.All physical constants now pulled from
scipy.constants
rather than hard-coded.Removed the previously deprecated classes:
IceModel
,ShadowGenerator
, andNumpyFileGenerator
.Renamed
ARVZAskaryanSignal
toARZAskaryanSignal
to properly match the paper authors.
Bug Fixes
Fixed the relative timing of Askaryan pulses inside vs outside of the Cherenkov cone.
Fixed a numerical error in the attenuation calculation in deep ice with slowly changing index of refraction.
Fixed an error in the indirect ray launch angle minimization in deep ice.
Improved the slant depth calculation in the Earth models to use the proper endpoint in the ice rather than (0, 0).
Fixed the calculation of the
ThermalNoise
rms value based on a proper antenna system connected to ground.
Performance Improvements
FunctionSignal
values are now lazily evaluated, including delayed application of filters.Improved performance of Askaryan signal calculation by shifting the relevant portion of the convolution rather than calculating and truncating a larger convolution.
Default
ThermalNoise
class now uses a faster FFT-based calculation. The old behavior was moved to theFullThermalNoise
class.HDF5 file reader improved to read data in chunks rather than line-by-line.
Version 1.9.0¶
New Features
Added a
GreenlandIce
ice model based on measurements at Summit Station.Added the
AVZAskaryanSignal
Askaryan model from J. Alvarez-Muniz et al (2000) for comparison across simulation packages.Added
UniformIce
ice model with a constant index of refraction, along with the corresponding ray tracing withUniformRayTracer
andUniformRayTracePath
.Added
pyrex.custom.layered_ice
for ice models with indices of refraction defined in stratified layers in the z-direction and the corresponding ray tracing.Added
complex_interp()
andcomplex_bilinear_interp()
functions for interpolating arrays of complex values using Cartesian or Euler methods.
Changes
IceModel
has been deprecated in favor of theice
object, an object of the preferred ice model class (currentlyAntarcticIce
).Removed the
NewcombIce
ice model.Handling of s-polarized and p-polarized signals by the
RayTracer
have now been split. This resulted in different behavior for theRayTracePath.propagate()
andAntenna.receive()
methods, as well as a new methodAntenna.apply_response()
.Renamed
Antenna.response()
method toAntenna.frequency_response()
.ARA antennas have been updated to use the latest XFDTD simulations from the Chiba group.
The behavior of the
CylindricalShadowGenerator
andRectangularShadowGenerator
classes have been moved into theCylindricalGenerator
andRectangularGenerator
classes, respectively, when theshadow
argument is set toTrue
.
Bug Fixes
The handling of phase shifts between s-polarized and p-polarized signals during total internal reflection is now properly implemented.
Fixed a bug in the antenna response of ARA antennas which resulted in an extra factor of sin(theta) for
VpolAntenna
objects and had an unexplored effect onHpolAntenna
objects.Fixed an off-by-one error in the final event count given by
ListGenerator
objects.Fixed a bug in the Earth shadowing effect produced by
CylindricalGenerator
andRectangularGenerator
classes.
Version 1.8.2¶
New Features
Added
CylindricalGenerator
,RectangularGenerator
,CylindricalShadowGenerator
, andRectangularShadowGenerator
classes to provide options for generation volumes and how to account for shadowing by the Earth.RectangularShadowGenerator
has the same behavior as the existingShadowGenerator
, soShadowGenerator
is being deprecated.Added ability to add
Detector
(andAntenna
orAntennaSystem
) objects into aCombinedDetector
for ease of use.Added ability to multiply (and divide)
Signal
objects by numeric types.Added support for total events thrown in simulation, accessed by the
File.total_events_thrown
attribute of file readers.
Changes
Separated
Particle.weight
intoParticle.survival_weight
andParticle.interaction_weight
. NowParticle.weight
serves as a convenience attribute which gives the product of the two weights.Changed
FileGenerator
to read from simulation output files rather than numpy files. For the time being numpy files can be read withNumpyFileGenerator
.All generator classes now have a
count
attribute for keeping track of the total number of events thrown.
Bug Fixes
Fixed error in
ARAAntenna
signal amplitudes introduced in version 1.8.1.Fixed minor bugs in
File
interfaces.
Performance Improvements
Changed
AskaryanSignal
charge profile and RAC calculations to accept numpy arrays. Should result in marginal improvements in signal calculation speed.
Version 1.8.1¶
New Features
Added ability to write (and subsequently read) simulation data files using
File
objects.File I/O supports HDF5 files, but should be considered to be in a public-beta state until the release of version 1.9.0.
EventKernel
now acceptsevent_writer
andtriggers
arguments for writing simulation data to output files.
Changes
ThermalNoise
now uses Rayleigh-distributed amplitudes in frequency space by default.Handling of signal polarizations has been more closely integrated with the ray tracer;
RayTracer.propagate()
now propagating the polarization vector as well as the signal.3 dB splitter effect moved from
ARAAntenna.response()
toARAAntennaSystem.front_end()
for a more logical separation of antenna and front-end.Adjusted default noise rms of
ARIANNAAntennaSystem
to the expected value in ARIANNA.
Bug Fixes
Corrected signal polarization calculation.
Fixed calculation of fresnel factors in surface reflection.
Fixed bug in antenna gains of asymmetric antennas for theta angles near 180 degrees.
Corrected effective height of antennas modeled by WIPL-D (i.e.
LPDA
).
Version 1.8.0¶
New Features
Added model of the ARIANNA LPDA based primarily on the implementation in NuRadioReco.
Added
Antenna.is_hit_mc
andAntennaSystem.is_hit_mc
which test noise-only triggers to determine whether a triggered antenna as truly triggered by signal or not.Added
require_mc_truth
argument toDetector.triggered()
to toggle whether a true Monte Carlo signal trigger (described above withAntenna.is_hit_mc
) is required for a detector trigger.Added
AntennaSystem.lead_in_time
which allows front-end systems time to equilibrate before waveforms are recorded.
Changes
Antenna.waveforms
andAntenna.all_waveforms
now include all relevant signals in the waveform during that time, similar toAntenna.full_waveform()
.ARAAntenna.interpolate_filter()
moved toARAAntennaSystem.interpolate_filter()
, since this better matches the logical location of the front-end electronics.
Bug Fixes
Fixed error in calculation of ARA Hpol polarization gain.
Corrected amplification of
ARAAntennaSystem
(previously was silently ignored).Corrected tunnel diode and other triggers to use standard deviation from mean rather than rms.
Fixed accidental duplication of antennas when
Detector.build_antennas()
is called more than once.Fixed numerical issue when checking that antenna axes are perpendicular.
Version 1.7.0¶
New Features
Moved
pyrex.custom.ara
module into main PyREx package instead of being a plug-in.All docstrings now follow numpy docstring style.
Added particle types and interaction information to
Particle
class.Added
Interaction
classesGQRSInteraction
andCTWInteraction
for defining different neutrino interaction models. Preferred model (CTWInteraction
) aliased toNeutrinoInteraction
.Added
ShadowGenerator.get_vertex()
,ShadowGenerator.get_direction()
,ShadowGenerator.get_particle_type()
,ShadowGenerator.get_exit_points()
, andShadowGenerator.get_weight()
methods for generating neutrinos more modularly.Added
Event
class for holding a tree ofParticle
objects.Event
objects are now returned by generators and theEventKernel
.Added
ZHSAskaryanSignal
class for the Zas, Halzen, Stanev parameterization of Askaryan pulses. Mostly for comparison purposes.
Changes
ShadowGenerator.create_particle()
changed toShadowGenerator.create_event()
and now returns anEvent
object.Generator classes moved to
pyrex.generation
module.Signal.ValueTypes
changed toSignal.Type
to matchParticle.Type
andInteraction.Type
.FastAskaryanSignal
changed toARVZAskaryanSignal
. This class is still the preferred parameterization aliased toAskaryanSignal
.Arguments of
AskaryanSignal
changed to take aParticle
object rather than taking its parameters individually.Removed unused
SlowAskaryanSignal
.Now that
AskaryanSignal
can handle different particle and shower types, secondary particle generation was added to determine shower fractions:NeutrinoInteraction.em_frac
andNeutrinoInteraction.had_frac
.Changed IREX envelope antennas to be an envelope front-end on top of an ARA antenna. Results in
IREXAntennaSystem
becomingEnvelopeHpol
andEnvelopeVpol
.
Version 1.6.0¶
New Features
EventKernel
can now take arguments to specify the ray tracer to be used and the times array to be used in signal generation.Added shell scripts to more easily work with git branching model.
Changes
ShadowGenerator
energy_generator
argument changed toenergy
and can now take a function or a scalar value, in which case all particles will have that scalar value for their energy.EventKernel
now usespyrex.IceModel
as its ice model by default.Antenna.receive()
method (andreceive()
method of all inheriting antennas) now usesdirection
argument instead oforigin
argument to calculate directional gain.Antenna.clear()
andDetector.clear()
functions can now optionally reset the noise calculation by using thereset_noise
argument.Antenna
classes can now set theunique_noise_waveforms
argument to specify the expected number of unique noise waveforms needed.ArasimIce.attenuation_length()
changed to more closely match AraSim.IceModel
reverted toAntarcticIce
with new index of refraction coefficients matching those ofArasimIce
.prem_density()
can now be calculated for an array of radii.
Performance Improvements
Improved performance of
slant_depth()
calculation.Improved performance of
IceModel.attenuation_length()
calculation.Using the
Antenna
unique_noise_waveforms
argument can improve noise waveform calculation speed (previously assumed 100 unique waveforms were necessary).
Bug Fixes
Fixed received direction bug in
EventKernel
, which had still been assuming a straight-ray path.Lists in function keyword arguments were changed to tuples to prevent unexpected mutability issues.
Fixed potential errors in
BasicRayTracer
andBasicRayTracePath
.
Version 1.5.0¶
Changes
Changed structure of
Detector
class so a detector can be built up from strings to stations to the full detector.Detector.antennas
attribute changed toDetector.subsets
, which contains the pieces which make up the detector (e.g. antennas on a string, strings in a station).Iterating the
Detector
class directly retains its effect of iterating each antenna in the detector directly.
New Features
Added :meth`Detector.triggered` and
Detector.clear()
methods.Added two new neutrino generators
ListGenerator
andFileGenerator
designed to pull pre-generatedParticle
objects.
Bug Fixes
Preserve
value_type
ofSignal
objects passed toIREXAntennaSystem.front_end()
.
Version 1.4.2¶
Performance Improvements
Improved performance of
FastAskaryanSignal
by reducing the size of the convolution.
Changes
Adjusted time step of signals generated by kernel slightly (2000 steps instead of 2048).
Version 1.4.1¶
Changes
Improved ray tracing and defaulted to the almost completely analytical
SpecializedRayTracer
andSpecializedRayTracePath
classes asRayTracer
andRayTracePath
.Added ray tracer into
EventKernel
to replacePathFinder
completely.
Version 1.3.1¶
New Features
Added diode bridge rectifier envelope circuit analytic model to
irex.frontends
and made it the default analytic envelope model inIREXAntennaSystem
.Added
allow_reflection
attribute toEventKernel
class to determine whetherReflectedPathFinder
solutions should be allowed.
Changes
Changed neutrino interaction model to include all neutrino and anti-neutrino interactions rather than only charged-current neutrino (relevant for
ShadowGenerator
class).
Version 1.3.0¶
New Features
Added and implemented
ReflectedPathFinder
class for rays which undergo total internal reflection and subsequently reach an antenna.
Changes
Change
AskaryanSignal
angle to always be positive and remove < 90 degree restriction (Alvarez-Muniz, Romero-Wolf, & Zas paper suggests the algorithm should work for all angles).
Performance Improvements
Improve performance of ice index calculated at many depths.
Version 1.2.1¶
New Features
Added
Antenna.set_orientation()
method for setting thez_axis
andx_axis
attributes appropriately.
Bug Fixes
Fixed bug where
Antenna._convert_to_antenna_coordinates()
function was returning coordinates relative to (0,0,0) rather than the antenna’s position.
Version 1.2.0¶
Changes
Changed
custom
module to a package containingirex
module.custom
package leverages “Implicit Namespace Package” structure to allow plug-in style additions to the package in either the user’s~/.pyrex-custom/
directory or the./pyrex-custom
directory.
Version 1.1.2¶
New Features
Added
Signal.with_times()
method for interpolation/extrapolation of signals to different times.Added
Antenna.full_waveform()
andAntenna.is_hit_during()
methods for calculation of waveform over arbitrary time array and whether said waveform triggers the antenna, respectively.Added
IREXAntenna.front_end_processing()
method for processing envelope, amplifying signal, and downsampling result (downsampling currently inactive).
Changes
Change
Antenna.make_noise()
to use a single master noise object and useThermalNoise.with_times()
to calculate noise at different times.To ensure noise is not obviously periodic (for <100 signals), uses 100 times the recommended number of frequencies, which results in longer computation time for noise waveforms.
Version 1.1.1¶
Changes
Moved
ValueTypes
insideSignal
class. Now access asSignal.ValueTypes.voltage
, etc.Changed signal envelope calculation in custom
IREXAntenna
from hilbert transform to a basic model. Spice model also available, but slower.
Version 1.1.0¶
New Features
Added
Antenna.directional_gain()
andAntenna.polarization_gain()
methods to baseAntenna
.Antenna.receive()
method should no longer be overwritten in most cases.Antenna
now has orientation defined byz_axis
andx_axis
.antenna_factor
andefficiency
attributes added toAntenna
for more flexibility.
Added
value_type
attribute toSignal
class and derived classes.Current value types are
ValueTypes.undefined
,ValueTypes.voltage
,ValueTypes.field
, andValueTypes.power
.Signal
objects now must have the samevalue_type
to be added (though those withValueTypes.undefined
can be coerced).
Changes
Made units consistent across PyREx.
Added ability to define
Antenna
noise by RMS voltage rather than temperature and resistance if desired.Allow
DipoleAntenna
to guess ateffective_height
if not specified.
Performance Improvements
Increase speed of
IceModel.__atten_coeffs()
method, resulting in increased speed of attenuation length calculations.
Version 1.0.3¶
New Features
Added
custom
module to contain classes and functions specific to the IREX project.
Version 1.0.2¶
New Features
Added
Antenna.make_noise()
method so custom antennas can use their own noise functions.
Changes
Allow passing of numpy arrays of depths and frequencies into most
IceModel
methods.IceModel.gradient()
must still be calculated at individual depths.
Added ability to specify RMS voltage of
ThermalNoise
without providing temperature and resistance.Removed (deprecated)
Antenna.isHit()
.
Performance Improvements
Allowing for
IceModel
to calculate many attenuation lengths at once improves speed ofPathFinder.propagate()
.Improved speed of
PathFinder.time_of_flight()
andPathFinder.attenuation()
(and improved accuracy to boot).
Version 1.0.1¶
Changes
Changed
Antenna
to not require a temperature and frequency range if no noise is produced.
Bug Fixes
Fixed bugs in
AskaryanSignal
that caused the convolution to fail.Fixed bugs resulting from converting
IceModel.temperature()
from Celsius to Kelvin.
Version 1.0.0¶
Created PyREx package based on original notebook.
Added all signal classes to produce full-waveform Askaryan pulses and thermal noise.
Changed
Antenna
class toDipoleAntenna
to allowAntenna
to be a base class.Changed
Antenna.isHit()
method toAntenna.is_hit
property.Introduced
IceModel
alias forAntarcticIce
(or any future preferred ice model).Moved
AntarcticIce.attenuationLengthMN()
to its ownNewcombIce
class inheriting fromAntarcticIce
.Added
PathFinder.propagate()
to propagate aSignal
object in a customizable way.Changed naming conventions to be more consistent, verbose, and “pythonic”:
AntarcticIce.attenuationLength()
becomesAntarcticIce.attenuation_length()
.In
pyrex.earth_model
,RE
becomesEARTH_RADIUS
.In
pyrex.particle
,neutrino_interaction
becomesNeutrinoInteraction
.In
pyrex.particle
,NA
becomesAVOGADRO_NUMBER
.Particle.vtx
becomesParticle.vertex
.Particle.dir
becomesParticle.direction
.Particle.E
becomesParticle.energy
.In
pyrex.particle
,next_direction()
becomesrandom_direction()
.shadow_generator
becomesShadowGenerator
.PathFinder.exists()
method becomesPathFinder.exists
property.PathFinder.getEmittedRay()
method becomesPathFinder.emitted_ray
property.PathFinder.getPathLength()
method becomesPathFinder.path_length
property.PathFinder.propagateRay()
split intoPathFinder.time_of_flight()
(with correspondingPathFinder.tof
property) andPathFinder.attenuation()
.
Version 0.0.0¶
Original PyREx python notebook written by Kael Hanson:
https://gist.github.com/physkael/898a64e6fbf5f0917584c6d31edf7940