Version History¶
Version 1.10.0¶
New Features
Added a cut in the
EventKernelto skip the simulation of events with observation angles larger than a given value away from the Cherenkov angle.Added a cut in the
EventKernelto 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
volumeandsolid_angleproperties to generator objects.Earth model moved into
earth, an instance of the newPREMclass.Added the
CoreMantleCrustModelclass to replicate the Earth model used in AraSim.Added
pyrex.custom.ara.stationswhich implements the layouts of the deployed ARA stations inDetectorsubclasses.New HDF5 file version 1.1 which changes how string data is handled due to changes in the
h5pypackage.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
FunctionSignaltimes.Changed the default times array of the
EventKernelto be symmetric about zero.Implemented extrapolation of attenuation data in
ArasimIceto match the implementation in AraSim.All physical constants now pulled from
scipy.constantsrather than hard-coded.Removed the previously deprecated classes:
IceModel,ShadowGenerator, andNumpyFileGenerator.Renamed
ARVZAskaryanSignaltoARZAskaryanSignalto 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
ThermalNoiserms value based on a proper antenna system connected to ground.
Performance Improvements
FunctionSignalvalues 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
ThermalNoiseclass now uses a faster FFT-based calculation. The old behavior was moved to theFullThermalNoiseclass.HDF5 file reader improved to read data in chunks rather than line-by-line.
Version 1.9.0¶
New Features
Added a
GreenlandIceice model based on measurements at Summit Station.Added the
AVZAskaryanSignalAskaryan model from J. Alvarez-Muniz et al (2000) for comparison across simulation packages.Added
UniformIceice model with a constant index of refraction, along with the corresponding ray tracing withUniformRayTracerandUniformRayTracePath.Added
pyrex.custom.layered_icefor 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
IceModelhas been deprecated in favor of theiceobject, an object of the preferred ice model class (currentlyAntarcticIce).Removed the
NewcombIceice model.Handling of s-polarized and p-polarized signals by the
RayTracerhave 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
CylindricalShadowGeneratorandRectangularShadowGeneratorclasses have been moved into theCylindricalGeneratorandRectangularGeneratorclasses, respectively, when theshadowargument 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
VpolAntennaobjects and had an unexplored effect onHpolAntennaobjects.Fixed an off-by-one error in the final event count given by
ListGeneratorobjects.Fixed a bug in the Earth shadowing effect produced by
CylindricalGeneratorandRectangularGeneratorclasses.
Version 1.8.2¶
New Features
Added
CylindricalGenerator,RectangularGenerator,CylindricalShadowGenerator, andRectangularShadowGeneratorclasses to provide options for generation volumes and how to account for shadowing by the Earth.RectangularShadowGeneratorhas the same behavior as the existingShadowGenerator, soShadowGeneratoris being deprecated.Added ability to add
Detector(andAntennaorAntennaSystem) objects into aCombinedDetectorfor ease of use.Added ability to multiply (and divide)
Signalobjects by numeric types.Added support for total events thrown in simulation, accessed by the
File.total_events_thrownattribute of file readers.
Changes
Separated
Particle.weightintoParticle.survival_weightandParticle.interaction_weight. NowParticle.weightserves as a convenience attribute which gives the product of the two weights.Changed
FileGeneratorto 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
countattribute for keeping track of the total number of events thrown.
Bug Fixes
Fixed error in
ARAAntennasignal amplitudes introduced in version 1.8.1.Fixed minor bugs in
Fileinterfaces.
Performance Improvements
Changed
AskaryanSignalcharge 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
Fileobjects.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.
EventKernelnow acceptsevent_writerandtriggersarguments for writing simulation data to output files.
Changes
ThermalNoisenow 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
ARIANNAAntennaSystemto 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_mcandAntennaSystem.is_hit_mcwhich test noise-only triggers to determine whether a triggered antenna as truly triggered by signal or not.Added
require_mc_truthargument 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_timewhich allows front-end systems time to equilibrate before waveforms are recorded.
Changes
Antenna.waveformsandAntenna.all_waveformsnow 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.aramodule into main PyREx package instead of being a plug-in.All docstrings now follow numpy docstring style.
Added particle types and interaction information to
Particleclass.Added
InteractionclassesGQRSInteractionandCTWInteractionfor 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
Eventclass for holding a tree ofParticleobjects.Eventobjects are now returned by generators and theEventKernel.Added
ZHSAskaryanSignalclass for the Zas, Halzen, Stanev parameterization of Askaryan pulses. Mostly for comparison purposes.
Changes
ShadowGenerator.create_particle()changed toShadowGenerator.create_event()and now returns anEventobject.Generator classes moved to
pyrex.generationmodule.Signal.ValueTypeschanged toSignal.Typeto matchParticle.TypeandInteraction.Type.FastAskaryanSignalchanged toARVZAskaryanSignal. This class is still the preferred parameterization aliased toAskaryanSignal.Arguments of
AskaryanSignalchanged to take aParticleobject rather than taking its parameters individually.Removed unused
SlowAskaryanSignal.Now that
AskaryanSignalcan handle different particle and shower types, secondary particle generation was added to determine shower fractions:NeutrinoInteraction.em_fracandNeutrinoInteraction.had_frac.Changed IREX envelope antennas to be an envelope front-end on top of an ARA antenna. Results in
IREXAntennaSystembecomingEnvelopeHpolandEnvelopeVpol.
Version 1.6.0¶
New Features
EventKernelcan 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
ShadowGeneratorenergy_generatorargument changed toenergyand can now take a function or a scalar value, in which case all particles will have that scalar value for their energy.EventKernelnow usespyrex.IceModelas its ice model by default.Antenna.receive()method (andreceive()method of all inheriting antennas) now usesdirectionargument instead oforiginargument to calculate directional gain.Antenna.clear()andDetector.clear()functions can now optionally reset the noise calculation by using thereset_noiseargument.Antennaclasses can now set theunique_noise_waveformsargument to specify the expected number of unique noise waveforms needed.ArasimIce.attenuation_length()changed to more closely match AraSim.IceModelreverted toAntarcticIcewith 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
Antennaunique_noise_waveformsargument 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
BasicRayTracerandBasicRayTracePath.
Version 1.5.0¶
Changes
Changed structure of
Detectorclass so a detector can be built up from strings to stations to the full detector.Detector.antennasattribute changed toDetector.subsets, which contains the pieces which make up the detector (e.g. antennas on a string, strings in a station).Iterating the
Detectorclass 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
ListGeneratorandFileGeneratordesigned to pull pre-generatedParticleobjects.
Bug Fixes
Preserve
value_typeofSignalobjects passed toIREXAntennaSystem.front_end().
Version 1.4.2¶
Performance Improvements
Improved performance of
FastAskaryanSignalby 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
SpecializedRayTracerandSpecializedRayTracePathclasses asRayTracerandRayTracePath.Added ray tracer into
EventKernelto replacePathFindercompletely.
Version 1.3.1¶
New Features
Added diode bridge rectifier envelope circuit analytic model to
irex.frontendsand made it the default analytic envelope model inIREXAntennaSystem.Added
allow_reflectionattribute toEventKernelclass to determine whetherReflectedPathFindersolutions should be allowed.
Changes
Changed neutrino interaction model to include all neutrino and anti-neutrino interactions rather than only charged-current neutrino (relevant for
ShadowGeneratorclass).
Version 1.3.0¶
New Features
Added and implemented
ReflectedPathFinderclass for rays which undergo total internal reflection and subsequently reach an antenna.
Changes
Change
AskaryanSignalangle 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_axisandx_axisattributes 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
custommodule to a package containingirexmodule.custompackage 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-customdirectory.
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
ValueTypesinsideSignalclass. Now access asSignal.ValueTypes.voltage, etc.Changed signal envelope calculation in custom
IREXAntennafrom 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.Antennanow has orientation defined byz_axisandx_axis.antenna_factorandefficiencyattributes added toAntennafor more flexibility.
Added
value_typeattribute toSignalclass and derived classes.Current value types are
ValueTypes.undefined,ValueTypes.voltage,ValueTypes.field, andValueTypes.power.Signalobjects now must have the samevalue_typeto be added (though those withValueTypes.undefinedcan be coerced).
Changes
Made units consistent across PyREx.
Added ability to define
Antennanoise by RMS voltage rather than temperature and resistance if desired.Allow
DipoleAntennato guess ateffective_heightif 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
custommodule 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
IceModelmethods.IceModel.gradient()must still be calculated at individual depths.
Added ability to specify RMS voltage of
ThermalNoisewithout providing temperature and resistance.Removed (deprecated)
Antenna.isHit().
Performance Improvements
Allowing for
IceModelto 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
Antennato not require a temperature and frequency range if no noise is produced.
Bug Fixes
Fixed bugs in
AskaryanSignalthat 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
Antennaclass toDipoleAntennato allowAntennato be a base class.Changed
Antenna.isHit()method toAntenna.is_hitproperty.Introduced
IceModelalias forAntarcticIce(or any future preferred ice model).Moved
AntarcticIce.attenuationLengthMN()to its ownNewcombIceclass inheriting fromAntarcticIce.Added
PathFinder.propagate()to propagate aSignalobject in a customizable way.Changed naming conventions to be more consistent, verbose, and “pythonic”:
AntarcticIce.attenuationLength()becomesAntarcticIce.attenuation_length().In
pyrex.earth_model,REbecomesEARTH_RADIUS.In
pyrex.particle,neutrino_interactionbecomesNeutrinoInteraction.In
pyrex.particle,NAbecomesAVOGADRO_NUMBER.Particle.vtxbecomesParticle.vertex.Particle.dirbecomesParticle.direction.Particle.EbecomesParticle.energy.In
pyrex.particle,next_direction()becomesrandom_direction().shadow_generatorbecomesShadowGenerator.PathFinder.exists()method becomesPathFinder.existsproperty.PathFinder.getEmittedRay()method becomesPathFinder.emitted_rayproperty.PathFinder.getPathLength()method becomesPathFinder.path_lengthproperty.PathFinder.propagateRay()split intoPathFinder.time_of_flight()(with correspondingPathFinder.tofproperty) andPathFinder.attenuation().
Version 0.0.0¶
Original PyREx python notebook written by Kael Hanson:
https://gist.github.com/physkael/898a64e6fbf5f0917584c6d31edf7940
