- Namespace
Euclidremoved - Rely on Linx for data classes and low level tools, in namespace
Linx- Functions written in
snake_case - Member variables
Dimrenamed asDimension Regionreplaced withBoxVecRasterreplaced withRasterthanks to default parameter compatible withboolFileMemRegionsremoved in favor of Linx' patches
- Functions written in
Columnconstructors refactored and madeexplicitVecColumnreplaced withColumn, analogously toRaster- Deprecated functions removed
- Indices are of type (alias)
Linx::Indexinstead oflong
BintableColumns::insert_null()was ill-formed
parseAll()threw when parsing long string user-defined keywords- Row count-based
Columnconstructors acceptintin 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
Linxin version 6 are unchanged
- Renamed
Seqsuffix asn(e.g.parseSeq()is nowparse_n()) following standard library convention - Renamed
BintableColumns::rename()asupdate_name()to emphasize the write operation
MefFilesupports 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,CompressionActionandAction - Action
ValidateChecksumsautomatically validates and possibly updates checksums - Action
CiteEleFitsadds 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
CompressandCompressAuto - Implemented compression benchmark
- Program
EleFitsReadStructureprints the compression type (algorithm and losslessness) - New program
EleFitsCompresscompresses FITS files according to the desired strategy
- Added compression data classes
- Previously deprecated
MefFilemembers were removed
- Make EleFits header only
- Rely on the Linx library for data classes (e.g. replace
Fits::RasterwithLinx::Raster) - Refactor
HduCategoryandKeywordCategoryfor cleaner API and better performance - Remove
Euclidnamespace
- 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()ofImageHduandImageRasterwas 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 variablerepeatCountbecomes 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,ColumnandPositioninheritDataContainer(see below)PtrRaster,VecRaster,PtrColumnandVecColumnare now mere aliases- Methods which took a
Raster&orColumn&as parameter now accept any type which fullfillsRasterorColumnrequirements - All
DataContainers fulfill the standardContiguousContainerrequirements (e.g are iterable) - All
DataContainers have vector space arithmetic (e.g. support+,-,*,/) DataContainer::apply()andDataContainer::generate()enable arbitrary element-wise transforms, including with otherDataContainers as argumentsColumnInfohas a membershapein lieu ofrepeatCountto support multidimensional entriesColumn::entry()returns a view as aPtrRasterfor multidimensional columnsColumn::elementCount()is deprecated and replaced with standardsize()MefFilemethod 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)NamedandIndexedare 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::Writeadded to edit an existing file or create a new one- Added
BintableColumns::readSeq()overloads for homogeneous sequences (returnsstd::vector<VecColumn<T>>) RecordandDataContainers 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
ColumnKeyandTypedKey) - 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->EleCfitsioWrapperEL_FitsUtils->EleFitsUtilsEL_FitsData->EleFitsDataEL_FitsFile->EleFitsEL_FitsIO_Examples->EleFitsExamplesEL_FitsIO_Validation->EleFitsValidation
- Programs:
- According to module renaming, with additional underscores removed
- Namespace:
FitsIO->Fits
- Macros:
EL_FITSIOprefix ->ELEFITS
SifFile::header()returns aHeaderinstead of anHduRaster.shapeandColumn.infobecomeRaster.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,ImageHduandBintableHduwhich were moved toHeader,ImageRasterandBintableColumns
- Column unit is written when appending a new column
RecordHduis renamed asHdu- New handlers
Header,ImageRasterandBintableColumnsare responsible for reading and writing header and data units - Introduction of classes
VariantValueto prepare migration fromboost::anytoboost::variantvariant FileModereplacesFitsFile::Permission,SifFile::PermissionandMefFile::Permission- Class
HduCategoryreplaces enumHduType RecordVectoris renamed asRecordVecFitsIOErroris renamed asFitsError
- HDU access
- Named HDU access methods support
EXTVERkeyword 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.Primaryvs.Ext,Datavs.Metadata) than withHduType
- Named HDU access methods support
- All HDUs
RecordModecontrols the behavior of record writing methods- HDU checksums can be computed and verified
RecordSeqis a shortcut forRecordVec<VariantValue>
- Image HDUs
- Image regions can be read and written, classes
RegionandFileMemRegionsare introduced - Image data can be read in place
Positionhas arithmetics operatorsmakeRasterallows bypassing template parameters to buildRasters
- Image regions can be read and written, classes
- Binary table HDUs
- Binary table column segments can be read and written, classes
SegmentandFileMemSegmentsare introduced - Rows can be appended in Binary table HDUs
- Vectors of
Columns 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
RecordHduis a deprecated alias toHdu- Methods of
Hdu,ImageHduandBintableHduto read and write records, rasters and columns are deprecated: They should be replaced with analogous methods ofHeader,ImageRasterandBintableColumns - Explicit use of
boost::any: should be replaced withVariantValue FitsFile::Permissionis a deprecated alias toFileModeHduTypeis a deprecated alias toHduCategoryVecRefRasterandVecRefColumnRecordVectoris a deprecated alias toRecordVecFitsIOErroris a deprecated alias toFitsError
Rasteris refactored, and the value type can be const-qualified for read-only dataPositionis a proper class, instead of a compile-time conditional aliasKeywordCategoryis merged intoStandardKeyword(namedKeywordCategoryanalogously toHduCategory)- Nested
Cfitsionamespaces 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
Columnvalues can be accessed directly withoperator()RasterandColumnvalues can be accessed with backward (negative) indices throughatmethods- Classes
NamedandIndexedimprove readability and safety to read records and columns RasterandColumndefine aValuetype,Rasterdefine aDimconstant- 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
anyare 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_PrintStructurelists HDU characteristics and keywords - File
FindEL_FitsIO.cmakeadded to link against the library outside of EDEN - Class
FitsIOErroris 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_PrintSupportedTypesprints supported types for each data class! HDUNAMEkeyword 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 longrecords larger than the greatestlongcannot be read (CFITSIO bug), although they can be written- Boolean columns are not supported
- Records with comments of the form
[foo] barare 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
anycan be read and written - New helper method
Record<T>::cast<U>()whereTandUcan beany - Vectors of homogeneous records can be read and written
- New helper class
RecordVectorto 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 longrecords larger than the greatestlongcannot 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
longs instead size_t`s
- Records can be created from
const char*values in addition string`
- Test CFITSIO bug in reading
unsigned longrecords (see known bugs) - Explicitly cast every conversion
- Doc review
unsigned longrecords larger than the greatestlongcannot 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;stringshould 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