lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
include
lsst
afw
table
io
FitsWriter.h
Go to the documentation of this file.
1
// -*- lsst-c++ -*-
2
#ifndef AFW_TABLE_IO_FitsWriter_h_INCLUDED
3
#define AFW_TABLE_IO_FitsWriter_h_INCLUDED
4
5
#include <set>
6
7
#include "
lsst/base.h
"
8
#include "
lsst/pex/exceptions.h
"
9
#include "
lsst/afw/table/BaseTable.h
"
10
#include "
lsst/afw/fits.h
"
11
12
namespace
lsst
{
13
namespace
afw
{
14
namespace
table
{
15
namespace
io
{
16
25
class
FitsWriter
{
26
public
:
27
using
Fits
=
afw::fits::Fits
;
28
36
template
<
typename
OutputT,
typename
ContainerT>
37
static
void
apply
(OutputT& output,
std::string
const
& mode, ContainerT
const
& container,
int
flags) {
38
Fits
fits
(output, mode,
Fits::AUTO_CLOSE
|
Fits::AUTO_CHECK
);
39
apply
(
fits
, container, flags);
40
}
41
43
template
<
typename
ContainerT>
44
static
void
apply
(
Fits
&
fits
, ContainerT
const
& container,
int
flags) {
45
std::shared_ptr<FitsWriter>
writer =
46
std::static_pointer_cast<BaseTable const>
(container.getTable())->makeFitsWriter(&
fits
, flags);
47
writer->write(container);
48
}
49
57
template
<
typename
ContainerT>
58
void
write
(ContainerT
const
& container) {
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
) !=
65
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
}
76
78
explicit
FitsWriter
(
Fits
*
fits
,
int
flags) :
_fits
(
fits
),
_flags
(flags) {}
79
80
FitsWriter
(
FitsWriter
const
&) =
default
;
81
FitsWriter
(
FitsWriter
&&) =
default
;
82
FitsWriter
&
operator=
(
FitsWriter
const
&) =
default
;
83
FitsWriter
&
operator=
(
FitsWriter
&&) =
default
;
84
virtual
~FitsWriter
() =
default
;
85
86
protected
:
88
virtual
void
_writeTable
(
std::shared_ptr<BaseTable const>
const
&
table
,
std::size_t
nRows);
89
91
virtual
void
_writeRecord
(
BaseRecord
const
& source);
92
94
virtual
void
_finish
() {}
95
96
Fits
*
_fits
;
// wrapped cfitsio pointer
97
int
_flags
;
// subclass-defined flags to control writing
98
std::size_t
_row
;
// which row we're currently processing
99
100
private
:
101
struct
ProcessRecords
;
102
103
std::shared_ptr<ProcessRecords>
_processor;
// a private Schema::forEach functor that write records
104
};
105
}
// namespace io
106
}
// namespace table
107
}
// namespace afw
108
}
// namespace lsst
109
110
#endif
// !AFW_TABLE_IO_FitsWriter_h_INCLUDED
BaseTable.h
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
base.h
std::string
lsst::afw::fits::Fits
A simple struct that combines the two arguments that must be passed to most cfitsio routines and cont...
Definition
fits.h:242
lsst::afw::fits::Fits::AUTO_CHECK
@ AUTO_CHECK
Definition
fits.h:253
lsst::afw::fits::Fits::AUTO_CLOSE
@ AUTO_CLOSE
Definition
fits.h:252
lsst::afw::table::BaseRecord
Base class for all records.
Definition
BaseRecord.h:31
lsst::afw::table::Schema::IDENTICAL
@ IDENTICAL
Everything is the same.
Definition
Schema.h:72
lsst::afw::table::io::FitsWriter::FitsWriter
FitsWriter(Fits *fits, int flags)
Construct from a wrapped cfitsio pointer.
Definition
FitsWriter.h:78
lsst::afw::table::io::FitsWriter::Fits
afw::fits::Fits Fits
Definition
FitsWriter.h:27
lsst::afw::table::io::FitsWriter::_writeRecord
virtual void _writeRecord(BaseRecord const &source)
Write an individual record.
Definition
FitsWriter.cc:188
lsst::afw::table::io::FitsWriter::operator=
FitsWriter & operator=(FitsWriter &&)=default
lsst::afw::table::io::FitsWriter::apply
static void apply(OutputT &output, std::string const &mode, ContainerT const &container, int flags)
Driver for writing FITS files.
Definition
FitsWriter.h:37
lsst::afw::table::io::FitsWriter::operator=
FitsWriter & operator=(FitsWriter const &)=default
lsst::afw::table::io::FitsWriter::write
void write(ContainerT const &container)
Write records in a container to disk.
Definition
FitsWriter.h:58
lsst::afw::table::io::FitsWriter::FitsWriter
FitsWriter(FitsWriter const &)=default
lsst::afw::table::io::FitsWriter::~FitsWriter
virtual ~FitsWriter()=default
lsst::afw::table::io::FitsWriter::FitsWriter
FitsWriter(FitsWriter &&)=default
lsst::afw::table::io::FitsWriter::_fits
Fits * _fits
Definition
FitsWriter.h:96
lsst::afw::table::io::FitsWriter::_writeTable
virtual void _writeTable(std::shared_ptr< BaseTable const > const &table, std::size_t nRows)
Write a table and its schema.
Definition
FitsWriter.cc:102
lsst::afw::table::io::FitsWriter::apply
static void apply(Fits &fits, ContainerT const &container, int flags)
Low-level driver for writing FITS files, operating on an open FITS file.
Definition
FitsWriter.h:44
lsst::afw::table::io::FitsWriter::_flags
int _flags
Definition
FitsWriter.h:97
lsst::afw::table::io::FitsWriter::_finish
virtual void _finish()
Finish writing a catalog.
Definition
FitsWriter.h:94
lsst::afw::table::io::FitsWriter::_row
std::size_t _row
Definition
FitsWriter.h:98
lsst::pex::exceptions::LogicError
exceptions.h
fits.h
std::set::insert
T insert(T... args)
lsst::afw::fits
Definition
fits.h:32
lsst::afw::table::io
Definition
tablePersistence.dox:3
lsst::afw::table
Definition
table.dox:3
lsst::afw
Definition
imageAlgorithm.dox:1
lsst
std::static_pointer_cast
T static_pointer_cast(T... args)
std::set
std::shared_ptr
std::size_t
lsst::afw::table::io::FitsWriter::ProcessRecords
Definition
FitsWriter.cc:135
Generated on
for lsst.afw by
1.17.0