LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
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. More...
 
 FitsWriter (Fits *fits, int flags)
 Construct from a wrapped cfitsio pointer. More...
 
 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. More...
 
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. More...
 

Protected Member Functions

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

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

Definition at line 27 of file FitsWriter.h.

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 189 of file FitsWriter.cc.

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

◆ _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 103 of file FitsWriter.cc.

103  {
104  Schema schema = table->getSchema();
105  _fits->createTable();
106  LSST_FITS_CHECK_STATUS(*_fits, "creating table");
107  std::size_t nFlags = schema.getFlagFieldCount();
108  if (nFlags > 0) {
109  int n = _fits->addColumn<bool>("flags", nFlags, "bits for all Flag fields; see also TFLAGn");
110  _fits->writeKey("FLAGCOL", n + 1, "Column number for the bitflags.");
111  }
112  ProcessSchema::apply(*_fits, schema);
113  writeAliasMap(*_fits, *schema.getAliasMap());
114  // write the version number to the fits header, plus any other metadata
115  std::shared_ptr<daf::base::PropertyList> metadata = table->getMetadata();
116  if (!metadata) {
117  metadata = std::make_shared<daf::base::PropertyList>();
118  }
119  metadata->set<int>("AFW_TABLE_VERSION", Schema::VERSION);
120  _fits->writeMetadata(*metadata);
121  // In case the metadata was attached to the table, clean it up.
122  metadata->remove("AFW_TABLE_VERSION");
123  _row = -1;
124  _fits->addRows(nRows);
125  _processor = std::make_shared<ProcessRecords>(_fits, schema, nFlags, _row);
126 }
int nFlags
Definition: FitsWriter.cc:91
table::Schema schema
Definition: python.h:134
void writeKey(std::string const &key, T const &value, std::string const &comment)
Add a FITS header key to the bottom of the header.
Definition: fits.cc:667
void createTable()
Create a new binary table extension.
Definition: fits.cc:1117
int addColumn(std::string const &ttype, int size, std::string const &comment)
Add a column to a table.
Definition: fits.cc:1140
void writeMetadata(daf::base::PropertySet const &metadata)
Read a FITS header into a PropertySet or PropertyList.
Definition: fits.cc:1095
std::size_t addRows(std::size_t nRows)
Append rows to a table, and return the index of the first new row.
Definition: fits.cc:1149
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:111

◆ 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  {
46  std::static_pointer_cast<BaseTable const>(container.getTable())->makeFitsWriter(&fits, flags);
47  writer->write(container);
48  }

◆ 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  {
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.
Definition: FitsWriter.cc:189
virtual void _writeTable(std::shared_ptr< BaseTable const > const &table, std::size_t nRows)
Write a table and its schema.
Definition: FitsWriter.cc:103
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: