LSST Applications g00274db5b6+edbf708997,g00d0e8bbd7+edbf708997,g199a45376c+5137f08352,g1fd858c14a+1d4b6db739,g262e1987ae+f4d9505c4f,g29ae962dfc+7156fb1a53,g2cef7863aa+73c82f25e4,g35bb328faa+edbf708997,g3e17d7035e+5b3adc59f5,g3fd5ace14f+852fa6fbcb,g47891489e3+6dc8069a4c,g53246c7159+edbf708997,g64539dfbff+9f17e571f4,g67b6fd64d1+6dc8069a4c,g74acd417e5+ae494d68d9,g786e29fd12+af89c03590,g7ae74a0b1c+a25e60b391,g7aefaa3e3d+536efcc10a,g7cc15d900a+d121454f8d,g87389fa792+a4172ec7da,g89139ef638+6dc8069a4c,g8d7436a09f+28c28d8d6d,g8ea07a8fe4+db21c37724,g92c671f44c+9f17e571f4,g98df359435+b2e6376b13,g99af87f6a8+b0f4ad7b8d,gac66b60396+966efe6077,gb88ae4c679+7dec8f19df,gbaa8f7a6c5+38b34f4976,gbf99507273+edbf708997,gc24b5d6ed1+9f17e571f4,gca7fc764a6+6dc8069a4c,gcc769fe2a4+97d0256649,gd7ef33dd92+6dc8069a4c,gdab6d2f7ff+ae494d68d9,gdbb4c4dda9+9f17e571f4,ge410e46f29+6dc8069a4c,geaed405ab2+e194be0d2b,w.2025.47
LSST Data Management Base Package
Loading...
Searching...
No Matches
lsst::afw::table::io::FitsWriter Class Reference

Writer object for FITS binary tables. More...

#include <FitsWriter.h>

Classes

struct  ProcessRecords
 

Public Types

using Fits = afw::fits::Fits
 

Public Member Functions

template<typename ContainerT>
void write (ContainerT const &container)
 Write records in a container to disk.
 
 FitsWriter (Fits *fits, int flags)
 Construct from a wrapped cfitsio pointer.
 
 FitsWriter (FitsWriter const &)=default
 
 FitsWriter (FitsWriter &&)=default
 
FitsWriteroperator= (FitsWriter const &)=default
 
FitsWriteroperator= (FitsWriter &&)=default
 
virtual ~FitsWriter ()=default
 

Static Public Member Functions

template<typename OutputT, typename ContainerT>
static void apply (OutputT &output, std::string const &mode, ContainerT const &container, int flags)
 Driver for writing FITS files.
 
template<typename ContainerT>
static void apply (Fits &fits, ContainerT const &container, int flags)
 Low-level driver for writing FITS files, operating on an open FITS file.
 

Protected Member Functions

virtual void _writeTable (std::shared_ptr< BaseTable const > const &table, std::size_t nRows)
 Write a table and its schema.
 
virtual void _writeRecord (BaseRecord const &source)
 Write an individual record.
 
virtual void _finish ()
 Finish writing a catalog.
 

Protected Attributes

Fits_fits
 
int _flags
 
std::size_t _row
 

Detailed Description

Writer object for FITS binary tables.

FitsWriter itself provides support for writing FITS binary tables from base containers. Derived record/base pairs should derive their own writer from FitsWriter and reimplement BaseTable::makeFitsWriter to return it. Subclasses will usually delegate most of the work back to FitsWriter.

Definition at line 25 of file FitsWriter.h.

Member Typedef Documentation

◆ Fits

Constructor & Destructor Documentation

◆ FitsWriter() [1/3]

lsst::afw::table::io::FitsWriter::FitsWriter ( Fits * fits,
int flags )
inlineexplicit

Construct from a wrapped cfitsio pointer.

Definition at line 78 of file FitsWriter.h.

◆ FitsWriter() [2/3]

lsst::afw::table::io::FitsWriter::FitsWriter ( FitsWriter const & )
default

◆ FitsWriter() [3/3]

lsst::afw::table::io::FitsWriter::FitsWriter ( FitsWriter && )
default

◆ ~FitsWriter()

virtual lsst::afw::table::io::FitsWriter::~FitsWriter ( )
virtualdefault

Member Function Documentation

◆ _finish()

virtual void lsst::afw::table::io::FitsWriter::_finish ( )
inlineprotectedvirtual

Finish writing a catalog.

Definition at line 94 of file FitsWriter.h.

94{}

◆ _writeRecord()

void lsst::afw::table::io::FitsWriter::_writeRecord ( BaseRecord const & source)
protectedvirtual

Write an individual record.

Definition at line 188 of file FitsWriter.cc.

188 {
189 ++_row;
190 _processor->apply(&record);
191}

◆ _writeTable()

void lsst::afw::table::io::FitsWriter::_writeTable ( std::shared_ptr< BaseTable const > const & table,
std::size_t nRows )
protectedvirtual

Write a table and its schema.

Definition at line 102 of file FitsWriter.cc.

102 {
103 Schema schema = table->getSchema();
104 _fits->createTable();
105 LSST_FITS_CHECK_STATUS(*_fits, "creating table");
106 std::size_t nFlags = schema.getFlagFieldCount();
107 if (nFlags > 0) {
108 int n = _fits->addColumn<bool>("flags", nFlags, "bits for all Flag fields; see also TFLAGn");
109 _fits->writeKey("FLAGCOL", n + 1, "Column number for the bitflags.");
110 }
111 ProcessSchema::apply(*_fits, schema);
112 writeAliasMap(*_fits, *schema.getAliasMap());
113 // write the version number to the fits header, plus any other metadata
114 std::shared_ptr<daf::base::PropertyList> metadata = table->getMetadata();
115 if (!metadata) {
117 }
118 metadata->set<int>("AFW_TABLE_VERSION", Schema::VERSION);
119 _fits->writeMetadata(*metadata);
120 // In case the metadata was attached to the table, clean it up.
121 metadata->remove("AFW_TABLE_VERSION");
122 _row = -1;
123 _fits->addRows(nRows);
124 _processor = std::make_shared<ProcessRecords>(_fits, schema, nFlags, _row);
125}
static int const VERSION
Definition Schema.h:57
#define LSST_FITS_CHECK_STATUS(fitsObj,...)
Throw a FitsError exception if the status of the given Fits object is nonzero.
Definition fits.h:112
T make_shared(T... args)
decltype(sizeof(void *)) size_t
Definition doctest.h:524

◆ apply() [1/2]

template<typename ContainerT>
static void lsst::afw::table::io::FitsWriter::apply ( Fits & fits,
ContainerT const & container,
int flags )
inlinestatic

Low-level driver for writing FITS files, operating on an open FITS file.

Definition at line 44 of file FitsWriter.h.

44 {
45 std::shared_ptr<FitsWriter> writer =
46 std::static_pointer_cast<BaseTable const>(container.getTable())->makeFitsWriter(&fits, flags);
47 writer->write(container);
48 }
T static_pointer_cast(T... args)

◆ apply() [2/2]

template<typename OutputT, typename ContainerT>
static void lsst::afw::table::io::FitsWriter::apply ( OutputT & output,
std::string const & mode,
ContainerT const & container,
int flags )
inlinestatic

Driver for writing FITS files.

A container class will usually provide a member function that calls this driver, which opens the FITS file, calls makeFitsWriter on the container's table, and then calls Writer::write on it.

Definition at line 37 of file FitsWriter.h.

37 {
38 Fits fits(output, mode, Fits::AUTO_CLOSE | Fits::AUTO_CHECK);
39 apply(fits, container, flags);
40 }
static void apply(OutputT &output, std::string const &mode, ContainerT const &container, int flags)
Driver for writing FITS files.
Definition FitsWriter.h:37

◆ operator=() [1/2]

FitsWriter & lsst::afw::table::io::FitsWriter::operator= ( FitsWriter && )
default

◆ operator=() [2/2]

FitsWriter & lsst::afw::table::io::FitsWriter::operator= ( FitsWriter const & )
default

◆ write()

template<typename ContainerT>
void lsst::afw::table::io::FitsWriter::write ( ContainerT const & container)
inline

Write records in a container to disk.

The given container must have a getTable() member function that returns a shared_ptr to a table, and the iterators returned by begin() and end() must dereference to a type convertible to BaseRecord const &.

Definition at line 58 of file FitsWriter.h.

58 {
59 std::set<std::shared_ptr<BaseTable const>> tables;
60 for (typename ContainerT::const_iterator i = container.begin(); i != container.end(); ++i) {
61 if (i->getTable() != container.getTable()) tables.insert(i->getTable());
62 }
63 for (auto const &table : tables) {
64 if ((*table).getSchema().compare(container.getTable()->getSchema(), Schema::IDENTICAL) !=
66 throw LSST_EXCEPT(pex::exceptions::LogicError,
67 "Cannot save Catalog with heterogenous schemas");
68 }
69 }
70 _writeTable(container.getTable(), container.size());
71 for (typename ContainerT::const_iterator i = container.begin(); i != container.end(); ++i) {
72 _writeRecord(*i);
73 }
74 _finish();
75 }
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
@ IDENTICAL
Everything is the same.
Definition Schema.h:72
virtual void _writeRecord(BaseRecord const &source)
Write an individual record.
virtual void _writeTable(std::shared_ptr< BaseTable const > const &table, std::size_t nRows)
Write a table and its schema.
virtual void _finish()
Finish writing a catalog.
Definition FitsWriter.h:94
T insert(T... args)

Member Data Documentation

◆ _fits

Fits* lsst::afw::table::io::FitsWriter::_fits
protected

Definition at line 96 of file FitsWriter.h.

◆ _flags

int lsst::afw::table::io::FitsWriter::_flags
protected

Definition at line 97 of file FitsWriter.h.

◆ _row

std::size_t lsst::afw::table::io::FitsWriter::_row
protected

Definition at line 98 of file FitsWriter.h.


The documentation for this class was generated from the following files: