- Namespace
Euclid
removed - Rely on Linx for data classes and low level tools, in namespace
Linx
- Functions written in
snake_case
- Member variables
Dim
renamed asDimension
Region
replaced withBox
VecRaster
replaced withRaster
thanks to default parameter compatible withbool
FileMemRegions
removed in favor of Linx' patches
- Functions written in
Column
constructors refactored and madeexplicit
VecColumn
replaced withColumn
, analogously toRaster
- Deprecated functions removed
- Indices are of type (alias)
Linx::Index
instead oflong
BintableColumns::insert_null()
was ill-formed
parseAll()
threw when parsing long string user-defined keywords- Row count-based
Column
constructors acceptint
in addition tolong
- Typo:
Position::emtpy()
renamed asPosition::empty()
Column::entry()
deprecated and renamed asfield()
(name was wrong wrt. the FITS standard)- Snake-cased functions names for better integration with the standard library and
Linx
- Pascal-cased names are kept but deprecated
- Data classes due to be replaced with
Linx
in version 6 are unchanged
- Renamed
Seq
suffix asn
(e.g.parseSeq()
is nowparse_n()
) following standard library convention - Renamed
BintableColumns::rename()
asupdate_name()
to emphasize the write operation
MefFile
supports backward indexing (e.g.const auto& hdu = f[-2]
)- HDUs, including the Primary, can be removed with
MefFile::remove()
- Strategies enable and automatically perform predefined or user-defined actions, like compression or checksum validation
- Added methods
MefFile::strategy()
and classesStrategy
,CompressionAction
andAction
- Action
ValidateChecksums
automatically validates and possibly updates checksums - Action
CiteEleFits
adds a citation in the Primary (enabled by default) - Compression actions specify image HDU compression
- Added methods
- Image HDU compression
- Added compression data classes
Quantization
,Gzip
,Rice
... - Added compression actions
Compress
andCompressAuto
- Implemented compression benchmark
- Program
EleFitsReadStructure
prints the compression type (algorithm and losslessness) - New program
EleFitsCompress
compresses FITS files according to the desired strategy
- Added compression data classes
- Previously deprecated
MefFile
members were removed
- Make EleFits header only
- Rely on the Linx library for data classes (e.g. replace
Fits::Raster
withLinx::Raster
) - Refactor
HduCategory
andKeywordCategory
for cleaner API and better performance - Remove
Euclid
namespace
- Updated to Elements 6.2.1 and C++17
- Structured bindings are supported
BintableColumns::initSeq()
was ill-formed for non-tuple sequences- Fixed
BintableColumns::readSegmentSeq()
with unresolved bound (-1) - Calling
BintableColumns::init()
while having accessed another HDU edited the wrong HDU
- Updated to Elements 6.1.1
- Function
shape_size()
was wrong forN = 0
- Method
readSize()
ofImageHdu
andImageRaster
was wrong forN != 2
- Updated to Elements 6.0.1
Raster<T, N>
becomesRaster<T, N, TContainer>
to work with any contiguous container (withPtrRaster<T, N> = Raster<T, N, T*>
andVecRaster<T, N> = Raster<T, N, vector<T>>
)ColumnInfo<T>
becomesColumnInfo<T, N>
and variablerepeatCount
becomes methodrepeatCount()
to support multidimensional entriesColumn<T>
becomesColumn<T, N, TContainer>
to support multidimensional entries and to work with any contiguous container (withPtrColumn<T, N> = Column<T, N, T*>
andVecColumn<T, N> = Column<T, N, vector<T>>
)PtrColumn(info, elementCount, data)
becomesPtrColumn(info, rowCount, data)
for homogeneity withVecColumn
Raster
,Column
andPosition
inheritDataContainer
(see below)PtrRaster
,VecRaster
,PtrColumn
andVecColumn
are now mere aliases- Methods which took a
Raster&
orColumn&
as parameter now accept any type which fullfillsRaster
orColumn
requirements - All
DataContainer
s fulfill the standardContiguousContainer
requirements (e.g are iterable) - All
DataContainer
s have vector space arithmetic (e.g. support+
,-
,*
,/
) DataContainer::apply()
andDataContainer::generate()
enable arbitrary element-wise transforms, including with otherDataContainer
s as argumentsColumnInfo
has a membershape
in lieu ofrepeatCount
to support multidimensional entriesColumn::entry()
returns a view as aPtrRaster
for multidimensional columnsColumn::elementCount()
is deprecated and replaced with standardsize()
MefFile
method names have been standardized (old names are kept for backward compatibility but deprecated)VecRaster::vector()
andVecColumn::vector()
are deprecated (usecontainer()
instead, which performs no copy)Named
andIndexed
are deprecated (use maker functionas()
)
- Header units and data units can be accessed directly from a
MefFile
(e.g.access<ImageRaster>(1)
is a shortcut foraccess<ImageHdu>(1).raster()
) - Multi-dimensional columns are supported
- Empty binary table HDUs can be created
FileMode::Write
added to edit an existing file or create a new one- Added
BintableColumns::readSeq()
overloads for homogeneous sequences (returnsstd::vector<VecColumn<T>>
) Record
andDataContainer
s supportoperator<<()
- New method
FitsFile::handoverToCfitsio()
returns the CFITSIO'sfitsfile*
- New "Game of Life" example demonstrates the use of slicing
- Access to raster and column elements is notably faster
- Many similar code blocks have been merged (e.g. through mixins)
- Several overloads have been merged (e.g. with
ColumnKey
andTypedKey
) - Legal notices have been reviewed
- Formatting has been reviewed
- This change log was added to Doxygen pages
- Update to Elements 5.14.0
- Project
EL_FitsIO
->EleFits
- Modules:
EL_CfitsioWrapper
->EleCfitsioWrapper
EL_FitsUtils
->EleFitsUtils
EL_FitsData
->EleFitsData
EL_FitsFile
->EleFits
EL_FitsIO_Examples
->EleFitsExamples
EL_FitsIO_Validation
->EleFitsValidation
- Programs:
- According to module renaming, with additional underscores removed
- Namespace:
FitsIO
->Fits
- Macros:
EL_FITSIO
prefix ->ELEFITS
SifFile::header()
returns aHeader
instead of anHdu
Raster.shape
andColumn.info
becomeRaster.shape()
andColumn.info()
Raster.data()
,Column.data()
andColumn.elementCount()
are not virtual anymore: they call private virtualdataImpl()
andColumn.elementCountImpl()
according to the NVI idiom- Deprecated items are removed, most notably methods of
Hdu
,ImageHdu
andBintableHdu
which were moved toHeader
,ImageRaster
andBintableColumns
- Column unit is written when appending a new column
RecordHdu
is renamed asHdu
- New handlers
Header
,ImageRaster
andBintableColumns
are responsible for reading and writing header and data units - Introduction of classes
VariantValue
to prepare migration fromboost::any
toboost::variant
variant FileMode
replacesFitsFile::Permission
,SifFile::Permission
andMefFile::Permission
- Class
HduCategory
replaces enumHduType
RecordVector
is renamed asRecordVec
FitsIOError
is renamed asFitsError
- HDU access
- Named HDU access methods support
EXTVER
keyword and use HDU type to disambiguate name-version couples - Iterators, filters and selectors are provided to iterate over selected HDUs (e.g. with range loops)
- HDUs are categorized more precisely with
HduCategory
(e.g.Primary
vs.Ext
,Data
vs.Metadata
) than withHduType
- Named HDU access methods support
- All HDUs
RecordMode
controls the behavior of record writing methods- HDU checksums can be computed and verified
RecordSeq
is a shortcut forRecordVec<VariantValue>
- Image HDUs
- Image regions can be read and written, classes
Region
andFileMemRegions
are introduced - Image data can be read in place
Position
has arithmetics operatorsmakeRaster
allows bypassing template parameters to buildRaster
s
- Image regions can be read and written, classes
- Binary table HDUs
- Binary table column segments can be read and written, classes
Segment
andFileMemSegments
are introduced - Rows can be appended in Binary table HDUs
- Vectors of
Column
s can be read and written, in addition to tuples - Binary table data can be read in place
- Binary table column segments can be read and written, classes
RecordHdu
is a deprecated alias toHdu
- Methods of
Hdu
,ImageHdu
andBintableHdu
to read and write records, rasters and columns are deprecated: They should be replaced with analogous methods ofHeader
,ImageRaster
andBintableColumns
- Explicit use of
boost::any
: should be replaced withVariantValue
FitsFile::Permission
is a deprecated alias toFileMode
HduType
is a deprecated alias toHduCategory
VecRefRaster
andVecRefColumn
RecordVector
is a deprecated alias toRecordVec
FitsIOError
is a deprecated alias toFitsError
Raster
is refactored, and the value type can be const-qualified for read-only dataPosition
is a proper class, instead of a compile-time conditional aliasKeywordCategory
is merged intoStandardKeyword
(namedKeywordCategory
analogously toHduCategory
)- Nested
Cfitsio
namespaces are renamed to disambiguate documentation - Benchmark output is clearer
- Fuctions
seqForeach()
andseqTransform()
loop transparently over various sequences (vector
,tuple
,array
...), which simplifies top-level signatures
- String columns are correctly read when reading multiple columns
- Bitpix of compressed images is correctly parsed by
EL_FitsIO_ReadStructure
- New method
MefFile::access(string)
checks that extactly one HDU with given name exists - Binary table columns can be read by index
- Binary table column names can be read and updated
Column
values can be accessed directly withoperator()
Raster
andColumn
values can be accessed with backward (negative) indices throughat
methods- Classes
Named
andIndexed
improve readability and safety to read records and columns Raster
andColumn
define aValue
type,Raster
define aDim
constant- Method
RecordHdu.as()
casts to another HDU handler - Exceptions thrown all derive from
FitsIOError
- Keywords can be filtered in
RecordHdu::readKeywords()
using new enumKeywordCategory
FitsFile::open()
is protected again,FitsFile::reopen()
is more robust- HDU handlers cannot be created on their own
- Error messages contain more informations
- Benchmark is made more complete, extensible and more automated
- Major documentation update
- HDU indices are 0-based
- Update to Elements 5.12.0 and C++14
- Records of
any
are properly cast to records ofcomplex
(when valid)
- Rasters with variable dimension (
n = -1
) can be read and written - Reaccessing an HDU doesn't prevent anymore using previous references to it
- Program
EL_FitsIO_PrintStructure
lists HDU characteristics and keywords - File
FindEL_FitsIO.cmake
added to link against the library outside of EDEN - Class
FitsIOError
is used to throw all exceptions - Function
version()
returns the version of EL_FitsIO
- Internal optimizations
- Naming homogeneization:
ColumnInfo::repeat()
->ColumnInfo::repeatCount()
- Column units are correctly read
- No more memory error when columns of different sizes are written
- Check whether a record has a long keyword (> 8 characters) or a long string value (> 68 characters)
- Get the type of an HDU
- Read the full header as a string
- Check whether a record or column exists
- Provide a fallback value when a record is not found
- Read binary table or image dimensions
- Write a COMMENT or HISTORY record
- Check whether a SifFile or MefFile is open
- Program
EL_FitsIO_PrintSupportedTypes
prints supported types for each data class! HDUNAME
keyword support for extension name
FitsFile::open()
throws an error if already open- Fixture classes better organized
- Comprehensive testing of the supported types
- Reviewed documentation
- Cleaned variadic template patterns
- Cleaned boost::any patterns
unsigned long
records larger than the greatestlong
cannot be read (CFITSIO bug), although they can be written- Boolean columns are not supported
- Records with comments of the form
[foo] bar
are correctly written.
- pascalCase functions and methods
- Reading and writing operations are made explicit in method naming:
ImageHdu::resize()
->ImageHdu::updateShape()
MefFile::hduNames()
->MefFile::readHduNames()
RecordHdu::keywords()
->RecordHdu::readKeywords()
RecordHdu::name()
->RecordHdu::readName()
RecordHdu::rename()
->RecordHdu::updateName()
- Naming homogeneization:
Column::nelements()
->Column::elementCount()
Column::rows()
->Column::rowCount()
- Records can be written as tuples in addition to parameter packs
- Records of
any
can be read and written - New helper method
Record<T>::cast<U>()
whereT
andU
can beany
- Vectors of homogeneous records can be read and written
- New helper class
RecordVector
to find homogeneous records by keyword - Method
RecordHdu::parseAllRecords()
parses a whole header unit - Minor additions:
ImageHdu::readShape()
- Format with clang-format
- Inline definitions in dedicated source files
unsigned long
records larger than the greatestlong
cannot be read (CFITSIO bug), although they can be written- Boolean columns are not supported
- Columns are assumed to have consistent sizes
- Indices and lengths as
long
s instead size_t`s
- Records can be created from
const char*
values in addition string`
- Test CFITSIO bug in reading
unsigned long
records (see known bugs) - Explicitly cast every conversion
- Doc review
unsigned long
records larger than the greatestlong
cannot be read (CFITSIO bug), although they can be written- Boolean columns are not supported
- Columns are assumed to have consistent sizes
- Fix row-wise reading and writing of string columns
- Fix memory issue with multiple closing of a FitsFile
- Better manage memory
- Nullify file pointer at closing
- Remove useless template specialization
- Better test type management
- Precompilation of main template functions to make user code compile faster
- Rely on stack where possible
- Fix CFITSIO include
- Overall code quality review
- Boolean columns are not supported
- Columns are assumed to have consistent sizes
const char*
is not supported;string
should be used instead
- Record units are correctly handled
- signed char and unsigned int's are correctly handled
- Empty string records can be read
- Appending extensions in pre-existing MEF works
File handlers:
- Get the number of HDUs in a MEF file (fixes flawed behavior of CFITSIO)
- List HDU names
- Get the file name
Records:
- List record keywords
- Store records directly in user-defined structure when parsing
- Write brace-initialized records
Binary tables:
- Row-wise binary table reading and writing (huge performance improvement, not available in CFITSIO)
- Append new columns in a binary table
- Boolean columns are not working
- Opening, creation, closing of MEF and SIF files
- Access to HDUs, creation of binary table and image extensions
- Reading and writing of records
- Reading and writing of binary table data
- Reading and writing of image data
- Binary tables cannot be modified (e.g. add or remove columns or rows)
- Binary tables cannot be preprocessed (sorted or filtered)
- HDUs cannot be removed
- Images cannot be (de)compressed
- Tables cannot be read by rows
- Images and tables cannot be copied
- Iterators are not supported
- Row selection is not supported
- Boolean columns are not working (requires discussions with CFITSIO devs)
- Units are not consistently handled in records