A small bugfix release to add support for scipy 1.14.
Also contains a small new feature regarding exit code handling in Tool
.
- Replace deprecated usage of scipy sparse matrices, adds support for scipy 1.14. [#2569]
Add
SystemExit
handling at thectapipe.core.Tool
levelIf a
SystemExit
with a custom error code is generated during the tool execution, the tool will be terminated gracefully and the error code will be preserved and propagated.The
Activity
statuses have been updated to["running", "success", "interrupted", "error"]
. The"running"
status is assigned at init. [#2566]
- made plugin detection less verbose in logs: DEBUG level used instead of INFO [#2560]
This is a small bug fix and maintenance release for 0.21.0.
Fix
SoftwareTrigger
not correctly handling different telescope types that have the same string representation, e.g. the four LSTs in prod6 files.Telescopes that have the same string representation now always are treated as one group in
SoftwareTrigger
. [#2552]
- A number of simple code cleanups in the ImPACT reconstructor code. [#2551]
reference_location
is now a required argument forSubarrayDescription
[#2402]CameraGeometry.position_to_pix_index
will now return the minimum integer value for invalid pixel coordinates instead of -1 due to the danger of using -1 as an index in python accessing the last element of a data array for invalid pixels. The function will now also no longer raise an error if the arguments are empty arrays and instead just return an empty index array. The function will also no longer log a warning in case of coordinates that do not match a camera pixel. The function is very low-level and if not finding a pixel at the tested position warrants a warning or is expected will depend on the calling code. [#2397]Change the definition of the
leakage_pixels_width_{1,2}
image features to give the ratio of pixels at the border to the pixels after cleaning instead of to the total number of pixels of the camera. [#2432]Change how the
DataWriter
writes pointing information. Before, each unique pointing position was written in a table with the event time as index column intodl1/monitoring/telescope/pointing
.This has two issues: For observed data, each pointing will be unique in horizontal coordinates due to tracking a fixed ICRS coordinate. Resulting in a pointing position written for each event, although the resolution of the monitoring is much lower. For simulated events, the event time is the timestamp of the simulation and pointing is fixed in
AltAz
.ctapipe
was using the closest point in time for simulated events when reading data back in, however, this is problematic in case of many simulation runs processed in parallel.We now store the first received pointing information in the
configuration/telescope/pointing
table per obs id, only for simulation events. [#2438]Replace
n_signal
andn_background
options inctapipe-train-particle-classifier
withn_events
andsignal_fraction
, wheresignal_fraction
= n_signal / (n_signal + n_background). [#2465]Move the
TableLoader
options from being traitlets to eachread_...
method allowing to load different data with the same TableLoader-Instance.In addition the default values for the options have changed. [#2482]
Adding monitoring: MonitoringCameraContainer as keyword argument to the
ImageCleaner
API so cleaning algorithms can now access relevant information for methods that e.g. require monitoring information. [#2511]Unified the options for DataWriter and the data level names:
Old
New
write_raw_waveforms
write_r0_waveforms
write_waveforms
write_r1_waveforms
write_images
write_dl1_images
write_parameters
write_dl1_parameters
write_showers
write_dl2
This changes requires that existing configuration files are updated if they use these parameters [#2520]
Ensure that
SubarrayDescription.reference_location
is always generated by`SimTelEventSource
, even if the metadata is missing. In that case, construct a dummy location with the correct observatory height and latitude and longitude equal to zero ("Null Island").Fixed the definition of
h_max
, which was both inconsistent between ~ctapipe.reco.HillasReconstructor and ~ctapipe.reco.HillasIntersection implementations, and was also incorrect since it was measured from the observatory elevation rather than from sea level.The value of
h_max
is now defined as the height above sea level of the shower-max point (in meters), not the distance to that point. Therefore it is not corrected for the zenith angle of the shower. This is consistent with the options currently used for CORSIKA, where the SLANT option is set to false, meaning heights are actual heights not distances from the impact point, andx_max
is a depth, not a slant depth. Note that this definition may be inconsistent with other observatories where slant-depths are used, and also note that the slant depth or distance to shower max are the more useful quantities for shower physics. [#2403]Add the example config for ctapipe-train-disp-reconstructor to the list of configs generated by ctapipe-quickstart. [#2414]
Do not use a hidden attribute of
SKLearnReconstructor
inctapipe-apply-models
. [#2418]Add docstring for
ctapipe-train-disp-reconstructor
. [#2420]Remove warnings about missing R1 or DL0 data when using the CameraCalibrator. These were previously emitted directly as python warnings and did not use the component logging system, which they now do. As we do not actually expect R1 to be present it was also moved down to debug level. [#2421]
Check that the array pointing is given in horizontal coordinates before training a
DispReconstructor
. [#2431]Fix additional, unwanted columns being written into disp prediction output. [#2440]
Properly transform pixel coordinates between
CameraFrame
andTelescopeFrame
inMuonIntensityFitter
taking. Before,MuonIntensityFitter
always used the equivalent focal length for transformations, now it is using the focal length attached to theCameraGeometry
, thus respecting thefocal_length_choice
options of the event sources. [#2464]Fix colored logging in case of custom log levels being defined. [#2505]
Fix a possible out-of-bounds array access in the FlashCamExtractor. [#2544]
Remove redundant
is_valid
field inDispContainer
and rename the remaining field. Use the same prefix for both containers filled byDispReconstructor
.Fix default name of
DispReconstructor
target column.Let
HDF5EventSource
loadDispContainer
. [#2443]Change R1- and DL0-waveforms datamodel shape from (n_pixels, n_samples) to be always (n_channels, n_pixels, n_samples).
HDF5EventSource
was adjusted accordingly to support also older datamodel versions.Re-introduce also the possibility of running
ImageExtractor
s on data consisting of multiple gain channels. [#2529]
Large updates to the Image Pixel-wise fit for Atmospheric Cherenkov Telescopes reconstruction method (https://doi.org/10.48550/arXiv.1403.2993)
- ImPACT - General code clean up and optimisation. Now updated to work similarly to other reconstructors using the standardised interface, such that it can be used ctapipe-process. Significant improvements to tests too
- ImPACT_utilities - Created new file to hold general usage functions, numba used in some areas for speedup
- template_network_interpolator - Now works with templates with different zenith and azimuth angles
- unstructured_interpolator - Significant speed improvements
- pixel_likelihood - Constants added back to neg_log_likelihood_approx, these are quite important to obtaining a well normalised goodness of fit.
- hillas_intersection - Fixed bug in core position being incorrectly calculated, fixed tests too [#2305]
Allow passing the matplotlib axes to the
SubarrayDescription.peek
function, fix warnings in case of layout engine being already defined. [#2369]Add support for interpolating a monitoring pointing table in
TableLoader
. The corresponding table is not yet written byctapipe
, but can be written by external tools. This is to enable analysis of real observations, where the pointing changes over time in alt/az. [#2409]Implement the overburden-to height a.s.l. transformation function in the atmosphere module and test that round-trip returns original value. [#2422]
In case no configuration is found for a telescope in
TelescopeParameter
, it is now checked whether the telescope exists at all to provide a better error message. [#2429]Allow setting n_jobs on the command line for the train_* and apply_models tools using a new
n_jobs
flag. This temporarily overwrites any settings in the (model) config(s). [#2430]Add support for using
str
andPath
objects as input toctapipe.io.get_hdf5_datalevels
. [#2451]The recommended citation for ctapipe has been updated to the ICRC 2023 proceeding, please update. [#2470]
Support astropy 6.0. [#2475]
The
DispReconstructor
now computes a score for how certain the prediction of the disp sign is. [#2479]Also load the new fixed pointing information in
TableLoader
.Add option
keep_order
toctapipe.io.astropy_helpers.join_allow_empty
that will keep the original order of rows when performing left or right joins. [#2481]Add an
AstroQuantity
trait which can hold anyastropy.units.Quantity
. [#2524]Add function
ctapipe.coordinates.get_point_on_shower_axis
that computes a point on the shower axis in alt/az as seen from a telescope. [#2537]Update bokeh dependency to version 3.x. [#2549]
The CI system now reports to the CTA SonarQube instance for code quality tracking [#2214]
Updated some numpy calls to not use deprecated functions. [#2406]
The
ctapipe
source code repository now uses thesrc/
-based layout. This fixes the editable installation of ctapipe. [#2459]Fix headings in docs. Change occurrences of
API Reference
toReference/API
for consistency. Change capitalization of some headings for consistency. [#2474]The
from_name
methods of instrument description classes now raise a warning that it is better to access instrument information via aSubarrayDescription
.Also improve documentation in instrument module to explain when not to use the various
from_name()
methods. These are provided for the case when no event data is available, e.g. for unit testing or demos, but do not guarantee that the returned instrument information corresponds to a particular set of event data. [#2485]Support and test on python 3.12. [#2486]
Drop support for python 3.9. [#2526]
- Load data and apply event and column selection in chunks in
ctapipe-train-*
before merging afterwards. This reduces memory usage. [#2423] - Make default ML config files more readable and add comments. [#2455]
- Update and add missing docstrings related to the ML functionalities. [#2456]
- Add
true_impact_distance
to the output ofCrossValidator
. [#2468] - Add
cache=True
to some numba-compiled functions which were missing it. [#2477] - Write cross validation results for each model out immediately after validation to free up memory earlier. [#2483]
- Compute deconvolution parameters in FlashCamExtractor only as needed. [#2545]
- The
ctapipe-dump-triggers
tool was removed, since it wrote a custom data format not compatible with e.g. the output of theDataWriter
andctapipe-process
. If you only want to store trigger and simulation information from simulated / DL0 input files into the ctapipe format HDF5 files, you can now usectapipe-process -i <input> -o <output> --no-write-parameters
. [#2375] - Change the fill value for invalid telescope ids in
SubarrayDescription.tel_index_array
from-1
tonp.iinfo(int).minval
to prevent-1
being used as an index resulting in the last element being used for invalid telescope ids. [#2376] - Remove
EventSource.from_config
, simply useEventSource(config=config)
orEventSource(parent=parent)
. [#2384]
Added missing fields defined in the CTAO R1 and DL0 data models to the corresponding containers. [#2338]
Remove the
injection_height
field from theSimulationConfigContainer
, this field was always empty and is never filled bysim_telarray
.Add the corresponding
starting_grammage
field to theSimulatedShowerContainer
, where it is actually available. [#2343]Added new fields to the
MuonEfficiencyContainer
-is_valid
to check if fit converged successfully,parameters_at_limit
to check if parameters were fitted close to a bound andlikelihood_value
which represents cost function value atthe minimum. These fields were added to the output of theMuonIntensityFitter
. [#2381]
- Remove writing the full provenance information to the log and instead simply refer the reader to the actual provenance file. [#2328]
- Add support for including r1 and r0 waveforms in the
ctapipe-merge
tool. [#2386]
- The
`HillasIntersection`
method used to fail when individual events were reconstructed to originate from a FoV offset of more than 90 degrees. This is now fixed by returning an INVALID container for a reconstructed offset of larger than 45 degrees. [#2265] - Fixed a bug in the calculation of the full numeric pixel likelihood and the corresponding tests. [#2388]
- Drop support for python 3.8 in accordance with the NEP 29 schedule. [#2342]
- Switched to
PyData
theme for docs - Updated
Sphinx
to version 6.2.1 - Updated front page of docs [#2373]
- Switched to
This is a bugfix release fixing a number of bugs, mainly one preventing the processing of divergent pointing
prod6 data due to a bug in SoftwareTrigger
, see below for details.
- Fix peak time units of FlashCamExtractor (See #2336) [#2337]
- Fix shape of mask returned by
NullDataVolumeReducer
. [#2340] - Fix definition of the
--dl2-subarray
flag ofctapipe-merge
. [#2341] - Fix
ctapipe-train-disp-reconstructor --help
raising an exception. [#2352] - Correctly fill
reference_location
forSubarrayDescription.tel_coords
. [#2354] - Fix
SoftwareTrigger
not removing all parts of a removed telescope event from the array event leading to invalid files produced byDataWriter
. [#2357] - Fix that the pixel picker of the matplotlib
CameraDisplay
triggers also for clicks on otherCameraDisplay
instances in the same figure. [#2358]
- Add support for Hillas parameters in
TelescopeFrame
toCameraDisplay.overlay_moments
and make sure that the label text does not overlap with the ellipse. [#2347] - Add support for using
ctapipe.image.toymodel
features inTelescopeFrame
. [#2349]
- Improve docstring and validation of parameters of
CameraGeometry
. [#2361]
This release contains a critical bugfix for the FlashCamExtractor
that resulted
in non-sensical peak time values in DL1, see below.
This release is a small bugfix release for v0.19.0, that also includes a new feature enabling computing different telescope multiplicities in the machine learning feature generation.
Thanks to the release of numba 0.57 and some minor fixes, ctapipe is now also compatible with Python 3.11.
- Fix
ApplyModels.overwrite
. [#2311] - Fix for config files not being included as inputs in provenance log. [#2312]
- Fix calculation of the neighbor matrix of
CameraGeometry
for empty and single-pixel geometries. [#2317] - Fix HDF5Writer not working on windows due to using pathlib for hdf5 dataset names. [#2319]
- Fix StereoTrigger assuming the wrong data type for
tels_with_trigger
, resulting in it not working for actual events read from an EventSource. [#2320] - Allow disabling the cross validation (by setting
CrossValidator.n_cross_validations = 0
) for the train tools. [#2310]
Add
SubarrayDescription.multiplicity
method that can compute telescope multiplicity for a given telescope boolean mask, either for all telescope or a given telescope type.Enable adding additional keyword arguments to
FeatureGenerator
.Pass the
SubarrayDescription
toFeatureGenerator
in sklearn classes. [#2308]
- Add support for python 3.11. [#2107]
- Renamed
GeometryReconstructor
toHillasGeometryReconstructor
[#2293]
- Add signal extraction algorithm for the FlashCam. [#2188]
- The
examples/
subdirectory was removed as most scripts there were out of date. Useful information in those examples was moved to example notebooks in docs/examples [#2266] - The tools to train ml models now provide better error messages in case the input files did not contain any events for specific telescope types. [#2295]
- Ensure the correct activity metadata is written into output files. [#2261]
- Fix
--overwrite
option not taking effect forctapipe-apply-models
. [#2287] - Fix
TableLoader.read_subarray_events
raising an exception whenload_observation_info=True
. [#2288]
- ctapipe now uses entry points for plugin discovery.
EventSource
implementations now need to advertise actapipe_io
entry point, to be discovered by ctapipe. Additionally, ctapipe now includes preliminary support for discoveringReconstructor
implementations via thectapipe_reco
entry_point. [#2101] - Migrate muon analysis into the
ctapipe-process
tool:- The former
muon_reconstruction
tool is dropped and all functionalities are transferred into thectapipe-process
tool. - The
process
tool now has awrite_muon_parameters
flag which defaults tofalse
. Muons are only analyzed and written if the flag is set. Analyzing muons requires DL1 image parameters, so they are computed in case they are not available from the input even if the user did not explicitly ask for the computation of image parameters. - Two instances of
QualityQuery
,MuonProcessor.ImageParameterQuery
andMuonProcessor.RingQuery
are added to the muon analysis to either preselect images according to image parameters and to select images according to the initial, geometrical ring fit for further processing. Deselected events or those where the muon analysis fails are being returned and written filled with invalid value markers instead of being ignored. Base configure options for the muon analysis were added to thebase_config.yaml
. - The
DataWriter
now writes the results of a muon analysis into/dl1/event/telescope/muon/tel_id
, givenwrite_moun_parameters
is set totrue
. - Muon nodes were added to the
HDF5EventSource
, theTableLoader
and thectapipe-merge
tool. [#2168]
- The former
- Change default behaviour of
run_rool
:- The default value of
raises
is nowTrue
. That means, when usingrun_tool
, the Exceptions raised by a Tool will be re-raised. The raised exceptions can be tested for their type and content. If the Tool must fail and only the non-zero error case is important to test, setraises=False
(as it was before). - If the
cwd
parameter isNone
(as per default), now a temporary directory is used instead of the directory, whererun_tool
is called (typically via pytest). This way, log-files and other output files don't clutter your working space. [#2175]
- The default value of
- Remove
-f
flag as alias for--overwrite
and fail early if output exists, but overwrite is not set [#2213] - The
_chunked
methods of theTableLoader
now return an Iterator over namedtuples with start, stop, data. [#2241] - Remove debug-logging and early-exits in
hdf5eventsource
so broken files raise errors. [#2244]
Implement Components and Tools to perform training and application of machine learning models based on scikit-learn.
Four new tools are implemented: -
ctapipe-train-energy-regressor
-ctapipe-train-particle-classifier
-ctapipe-train-disp-reconstructor
-ctapipe-apply-models
The first two tools are used to train energy regression and particle classification respectively. The third tool trains two models for geometrical reconstruction using the disp method and the fourth tool can apply those models in bulk to input files.
ctapipe-process
can now also apply these trained models directly in the event loop.The intended workflow is to process training files to a combined dl1 / dl2 level using
ctapipe-process
, merging those to large training files usingctapipe-merge
and then train the models. [#1767, #2121, #2133, #2138, #2217, #2229, #2140]Tool
now comes with anExitStack
that enables proper handling of context-manager members insideTool.run
. Things that require a cleanup step should be implemented as context managers and be added to the tool like this:self.foo = self.enter_context(Foo())
This will ensure that
Foo.__exit__
is called when theTool
terminates, for whatever reason. [#1926]Implement atmospheric profiles for conversions from h_max to X_max. The new module
ctapipe.atmosphere
has classes for the most common cases of a simpleExponentialAtmosphereDensityProfile
, aTableAtmosphereDensityProfile
and CORSIKA'sFiveLayerAtmosphereDensityProfile
. [#2000]TableLoader
can now also load observation and scheduling block configuration. [#2096]The
ctapipe-info
tool now supports printing information about the availableEventSource
andReconstructor
implementations as well as io and reco plugins. [#2101]Allow lookup of
TelescopeParameter
values by telescope type. [#2120]Implement a
SoftwareTrigger
component to handle the effect of selecting sub-arrays from larger arrays in the simulations. The component can remove events where the stereo trigger would not have decided to record an event and also remove single telescopes from events for cases like the CTA LSTs, that have their own hardware stereo trigger that requires at least two LSTs taking part in an event. [#2136]It's now possible to transform between
GroundFrame
coordinates andastropy.coordinates.EarthLocation
, enabling the conversion between relative array coordinates (used in the simulation) and absolute real-world coordinates. [#2167]The
ctapipe-display-dl1
tool now has aQualityQuery
instance which can be used to select which images should be displayed. [#2172]Add a new
ctapipe.io.HDF5Merger
component that can selectively merge HDF5 files produced with ctapipe. The new component is now used in thectapipe-merge
tool but can also be used on its own. This component is also used byctapipe-apply-models
to selectively copy data from the input file to the output file. Through using this new component,ctapipe-merge
gained support for fine-grained control which information should be included in the output file and for appending to existing output files. [#2179]CameraDisplay.overlay_coordinate
can now be used to plot coordinates into the camera display, e.g. to show the source position or the position of stars in the FoV. [#2203]
- Fix for Hillas lines in
ArrayDisplay
being wrong in the newEastingNorthingFrame
. [#2134] - Replace usage of
$HOME
withPath.home()
for cross-platform compatibility. [#2155] - Fix for
TableLoader
having the wrong data types forobs_id
,event_id
andtel_id
. [#2163] - Fix
Tool
printing a large traceback in case of certain configuration errors. [#2171] - The string representation of
Field
now sets numpy print options to prevent large arrays in the docstrings ofContainer
classes. [#2173] - Fix missing comma in eventio version requirement in setup.cfg (#2185). [#2187]
- Move reading of stereo data before skipping empty events in HDF5EventSource,
this fixes a bug where the stereo data and simulation data get out of sync
with the other event data when using
allowed_tels
. [#2189] - Fix mixture of quantity and unit-less values passed to
np.histogram
inctapipe.image.muon.ring_completeness
, which raises an error with astropy 5.2.1. [#2197]
Use towncrier for the generation of change logs [#2144]
Replace usage of deprecated astropy matrix function. [#2166]
Use
weakref.proxy(parent)
inComponent.__init__
.Due to the configuration systems, children need to reference their parent(s). When parents get out of scope, their children still hold the reference to them. That means that python cannot garbage-collect the parents (which are Tools, most of the time).
This change uses weak-references (which do not increase the reference count), which means parent-Tools can get garbage collected by python.
This decreases the memory consumption of the tests by roughly 50%. [#2223]
- Speed-up table loader by using
hstack
instead ofjoin
where possible. [#2126]
For changelogs for these releases, please visit the github releases page
- Fix broken build (#743) @kosack
- Add example script for a simple event writer (#746) @jjlk
- Fix camera axis alignment in HillasReconstructor (#741) @mackaiver
- Lst reader (#749) @FrancaCassol
- replace deprecated astropy broadcast (#754) @mackaiver
- A few more example notebooks (#757) @kosack
- Add MC xmax info (#759) @mackaiver
- Use Astropy Coordinate Transofmations For Reconstruction (#758) @mackaiver
- Trigger pixel reader (#745) @thomasarmstrong
- Change requested in #742: init Hillas skewness and kurtosis to NaN (#744) @STSpencer
- Fix call to np.linalg.leastsq (#760) @kosack
- Fix/muon bugs (#762) @kosack
- Implement hillas features usen eigh (#748) @MaxNoe
- Use HillasParametersContainer only (#763) @MaxNoe
- Regression features in
RegressorClassifierBase
(#764) @vuillaut - Adding an example notebook no how to convert hex geometry to square and back (#767) @vuillaut
- Wrong angle in ArrayDisplay. changed phi to psi. (#771) @thomasgas
- Unstructured interpolator (#770) @ParsonsRD
- Lst reader (#776) @FrancaCassol
- Fixing core reconstruction (#777) @kpfrang
- Leakage (#783) @MaxNoe
- Revert "Fixing core reconstruction" (#789) @kosack
- Fixing the toy image generator (#790) @MaxNoe
- Fix bad builds by changing channel name (missing pyqt package) (#793) @kosack
- Implement concentration image features (#791) @MaxNoe
- updated main documentation page (#792) @kosack
- Impact intersection (#778) @mackaiver
- add test for sliced geometries for hillas calculation (#781) @mackaiver
- Simple HESS adaptations (#794) @ParsonsRD
- added a config file for github release-drafter plugin (#795) @kosack
- Array plotting (#784) @thomasgas
- Minor changes: mostly deprecationwarning fixes (#787) @mireianievas
- Codacy code style improvements (#796) @dneise
- Add unit to h_max in HillasReconstructor (#797) @jjlk
- speed up unit tests that use test_event fixture (#798) @kosack
- Update Timing Parameters (#799) @LukasNickel
This is an interim release, after some major refactoring, and before we add the automatic gain selection and refactored container classes. It's not intended yet for production.
Some Major changes since last release:
- new
EventSource
class hierarchy for reading event data, which now supports simulation and testbench data from multiple camera prototypes (notably CHEC, SST-1M, NectarCam) - new
EventSeeker
class for (inefficient) random event access. - a much improved
Factory
class - re-organized event data structure (still evolving) - all scripts not in ctapipe must be changed to work with the new data items that were re-named (a migration guide will be given in the 0.7 release)
- better HDF5 table output, supporting merging multiple
Containers
into a single output table - improvements to Muon analysis, and the muon example script
- improvements to the calibration classes
- big improvements to the Instrument classes
- lots of cleanups and bug fixes
- much more...
- Major speed improvements to calibration code, particularly
NeighborPeakIntegrator
(Jason Watson, #490), which now uses some compiled c-code for speed.
GeometryConverter
now works for all cameras (Tino Michael, #)- Plotting improvements when overlays are used (MaxNoe, #489)
- Fixes to coordinate
PlanarRepresentation
(MaxNoe, #506) - HDF5 output for charge resolution calculation (Jason Watons, #488)
- Stastical errors added to sensitivity calculation (Tino Michel, #508)
- Error estimator for direction and h_max fits in
HillasReconstructor
(Tino Michael, #509, #510)
- improvements to
core.Container
(MaxNoe) TableWriter
correctly handles units and metadatactapipe.instrument
now has much more rich functionality (SubarrayDescription, TelescopeDescription, OpticsDescription classes added)- no more need to construct
CameraGeometry
manually, they are created in thehessio_event_source
, all new code should useevent.inst.subarray
. The old inst.tel_pos, inst.optics_foclen, etc, will be phased out in the next point release (but still exist in this release) (K. Kosack) ctapipe-dump-instrument
script added- improvements to
Regressor
and Classifier code (Tino Michael) - provenance system includes actor roles
- fixes to likelihood tests (Dan Parsons)
- TQDM and iminuit are now accepted dependencies
- Implementation of ImPACT reconstruction and
TableInterpolator
class (Dan Parsons) - improved handling of atmosphere profiles
- Implementation of Muon detection and reconstruction algorithms (Alison Mitchell)
- unified camera and telescope names
- better dataset handling (
ctapipe.utils.datasets
), and now automatically find datasets and tables inctapipe-extra
or in any directory listed in the user-defined$CTAPIPE_SVC_PATH
path. - TableWriter class (HDF5TableWriter) for writing out any
core.Container
to an HDF5 table viapytables
(Karl Kosack) - Improvements to
flow
framework (Jean Jacquemier) - Travis CI now builds automatically for multiply python versions and uploads latest documentation
- use Lanscape.io for code quality
- code for calculating sensitivity curves using event-weighting method (Tino Michael)