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::CatalogT< RecordT > Class Template Reference

A custom container class for records, based on std::vector. More...

#include <Catalog.h>

Inheritance diagram for lsst::afw::table::CatalogT< RecordT >:
lsst::afw::table::SortedCatalogT< SimpleRecord > lsst::afw::table::SortedCatalogT< const SimpleRecord > lsst::afw::table::SortedCatalogT< SourceRecord > lsst::afw::table::SortedCatalogT< const SourceRecord > lsst::afw::table::SortedCatalogT< RecordT > lsst::afw::table::ExposureCatalogT< ExposureRecord > lsst::afw::table::ExposureCatalogT< const ExposureRecord > lsst::afw::table::ExposureCatalogT< RecordT >

Public Types

using Record = RecordT
 
using Table = typename Record::Table
 
using ColumnView = typename Record::ColumnView
 
using reference = RecordT &
 
using pointer = std::shared_ptr<RecordT>
 
using size_type = typename Internal::size_type
 
using difference_type = typename Internal::difference_type
 
using iterator = CatalogIterator<typename Internal::iterator>
 
using const_iterator = CatalogIterator<typename Internal::const_iterator>
 

Public Member Functions

std::shared_ptr< TablegetTable () const
 Return the table associated with the catalog.
 
Schema getSchema () const
 Return the schema associated with the catalog's table.
 
 CatalogT (std::shared_ptr< Table > const &table=std::shared_ptr< Table >())
 Construct a catalog from a table (or nothing).
 
 CatalogT (Schema const &schema)
 Construct a catalog from a schema, creating a table with Table::make(schema).
 
template<typename InputIterator>
 CatalogT (std::shared_ptr< Table > const &table, InputIterator first, InputIterator last, bool deep=false)
 Construct a catalog from a table and an iterator range.
 
 CatalogT (CatalogT const &other)=default
 Shallow copy and constructors.
 
 CatalogT (CatalogT &&other) noexcept=default
 
 ~CatalogT ()=default
 
template<typename OtherRecordT>
 CatalogT (CatalogT< OtherRecordT > const &other)
 Shallow copy constructor from a container containing a related record type.
 
CatalogToperator= (CatalogT const &other)
 Shallow assigment.
 
CatalogToperator= (CatalogT &&other)
 
CatalogT subset (ndarray::Array< bool const, 1 > const &mask) const
 Return the subset of a catalog corresponding to the True values of the given mask array.
 
CatalogT subset (std::ptrdiff_t startd, std::ptrdiff_t stopd, std::ptrdiff_t step) const
 Returns a shallow copy of a subset of this Catalog.
 
void writeFits (std::string const &filename, std::string const &mode="w", int flags=0) const
 Write a FITS binary table to a regular file.
 
void writeFits (fits::MemFileManager &manager, std::string const &mode="w", int flags=0) const
 Write a FITS binary table to a RAM file.
 
void writeFits (fits::Fits &fitsfile, int flags=0) const
 Write a FITS binary table to an open file object.
 
ColumnView getColumnView () const
 Return a ColumnView of this catalog's records.
 
bool isContiguous () const
 Return true if all records are contiguous.
 
iterator begin ()
 Iterator access.
 
iterator end ()
 
const_iterator begin () const
 
const_iterator end () const
 
const_iterator cbegin () const
 
const_iterator cend () const
 
bool empty () const
 Return true if the catalog has no records.
 
size_type size () const
 Return the number of elements in the catalog.
 
size_type max_size () const
 Return the maximum number of elements allowed in a catalog.
 
size_type capacity () const
 Return the capacity of the catalog.
 
void reserve (size_type n)
 Increase the capacity of the catalog to the given size.
 
void resize (size_type n)
 Change the size of the catalog, removing or adding empty records as needed.
 
reference operator[] (size_type i) const
 Return the record at index i.
 
reference at (size_type i) const
 Return the record at index i (throws std::out_of_range).
 
reference front () const
 Return the first record.
 
reference back () const
 Return the last record.
 
std::shared_ptr< RecordT > const get (size_type i) const
 Return a pointer to the record at index i.
 
void set (size_type i, std::shared_ptr< RecordT > const &p)
 Set the record at index i to a pointer.
 
template<typename InputIterator>
void assign (InputIterator first, InputIterator last, bool deep=false)
 Replace the contents of the table with an iterator range.
 
void push_back (Record const &r)
 Add a copy of the given record to the end of the catalog.
 
void push_back (std::shared_ptr< RecordT > const &p)
 Add the given record to the end of the catalog without copying.
 
std::shared_ptr< RecordT > addNew ()
 Create a new record, add it to the end of the catalog, and return a pointer to it.
 
void pop_back ()
 Remove the last record in the catalog.
 
CatalogT copy () const
 Deep-copy the catalog using a cloned table.
 
template<typename InputIterator>
void insert (iterator pos, InputIterator first, InputIterator last, bool deep=false)
 Insert an iterator range into the table.
 
template<typename InputIterator>
void insert (SchemaMapper const &mapper, iterator pos, InputIterator first, InputIterator last)
 Insert a range of records into the catalog by copying them with a SchemaMapper.
 
iterator insert (iterator pos, Record const &r)
 Insert a copy of the given record at the given position.
 
iterator insert (iterator pos, std::shared_ptr< RecordT > const &p)
 Insert the given record at the given position without copying.
 
iterator erase (iterator pos)
 Erase the record pointed to by pos, and return an iterator the next record.
 
iterator erase (iterator first, iterator last)
 Erase the records in the range [first, last).
 
void swap (CatalogT &other) noexcept
 Shallow swap of two catalogs.
 
void clear ()
 Remove all records from the catalog.
 
template<typename T>
bool isSorted (Key< T > const &key) const
 Return true if the catalog is in ascending order according to the given key.
 
template<typename Compare>
bool isSorted (Compare cmp) const
 Return true if the catalog is in ascending order according to the given predicate.
 
template<typename T>
void sort (Key< T > const &key)
 Sort the catalog in-place by the field with the given key.
 
template<typename Compare>
void sort (Compare cmp)
 Sort the catalog in-place by the field with the given predicate.
 
template<typename T>
iterator find (typename Field< T >::Value const &value, Key< T > const &key)
 Return an iterator to the record with the given value.
 
template<typename T>
const_iterator find (typename Field< T >::Value const &value, Key< T > const &key) const
 
template<typename T>
iterator lower_bound (typename Field< T >::Value const &value, Key< T > const &key)
 Performed binary searches on sorted fields.
 
template<typename T>
const_iterator lower_bound (typename Field< T >::Value const &value, Key< T > const &key) const
 
template<typename T>
iterator upper_bound (typename Field< T >::Value const &value, Key< T > const &key)
 
template<typename T>
const_iterator upper_bound (typename Field< T >::Value const &value, Key< T > const &key) const
 
template<typename T>
std::pair< iterator, iteratorequal_range (typename Field< T >::Value const &value, Key< T > const &key)
 
template<typename T>
std::pair< const_iterator, const_iteratorequal_range (typename Field< T >::Value const &value, Key< T > const &key) const
 
InternalgetInternal ()
 Return a reference to the internal vector-of-shared_ptr.
 
Internal const & getInternal () const
 
template<typename T>
std::pair< typename CatalogT< RecordT >::iterator, typename CatalogT< RecordT >::iteratorequal_range (typename Field< T >::Value const &value, Key< T > const &key)
 
template<typename T>
std::pair< typename CatalogT< RecordT >::const_iterator, typename CatalogT< RecordT >::const_iteratorequal_range (typename Field< T >::Value const &value, Key< T > const &key) const
 

Static Public Member Functions

static CatalogT readFits (std::string const &filename, int hdu=fits::DEFAULT_HDU, int flags=0)
 Read a FITS binary table from a regular file.
 
static CatalogT readFits (fits::MemFileManager &manager, int hdu=fits::DEFAULT_HDU, int flags=0)
 Read a FITS binary table from a RAM file.
 
static CatalogT readFits (fits::Fits &fitsfile, int flags=0)
 Read a FITS binary table from a file object already at the correct extension.
 

Detailed Description

template<typename RecordT>
class lsst::afw::table::CatalogT< RecordT >

A custom container class for records, based on std::vector.

CatalogT wraps a std::vector<std::shared_ptr<RecordT>> in an interface that looks more like a std::vector<RecordT>; its iterators and accessors return references or const references, rather than pointers, making them easier to use. It also holds a table, which is used to allocate new records and determine the schema, but no checking is done to ensure that records added to the catalog use the same table or indeed have the same schema.

Because a CatalogT is holds shared_ptrs internally, many of its operations can be either shallow or deep, with new deep copies allocated by the catalog's table object. New records can be also be inserted by pointer (shallow) or by value (deep).

The constness of records is determined by the constness of the first template parameter to CatalogT; a container instance is always either const or non-const in that respect (like smart pointers). Also like smart pointers, const member functions (and by extension, const_iterators) do not allow the underlying pointers to be changed, while non-const member functions and iterators do.

CatalogT does not permit empty (null) pointers as elements. As a result, CatalogT has no resize member function.

CatalogT has a very different interface in Python; it mimics Python's list instead of C++'s std::vector. It is also considerably simpler, because it doesn't need to deal with iterator ranges or the distinction between references and shared_ptrs to records. See the Python docstring for more information.

Definition at line 98 of file Catalog.h.

Member Typedef Documentation

◆ ColumnView

template<typename RecordT>
using lsst::afw::table::CatalogT< RecordT >::ColumnView = typename Record::ColumnView

Definition at line 104 of file Catalog.h.

◆ const_iterator

template<typename RecordT>
using lsst::afw::table::CatalogT< RecordT >::const_iterator = CatalogIterator<typename Internal::const_iterator>

Definition at line 111 of file Catalog.h.

◆ difference_type

template<typename RecordT>
using lsst::afw::table::CatalogT< RecordT >::difference_type = typename Internal::difference_type

Definition at line 109 of file Catalog.h.

◆ iterator

template<typename RecordT>
using lsst::afw::table::CatalogT< RecordT >::iterator = CatalogIterator<typename Internal::iterator>

Definition at line 110 of file Catalog.h.

◆ pointer

template<typename RecordT>
using lsst::afw::table::CatalogT< RecordT >::pointer = std::shared_ptr<RecordT>

Definition at line 107 of file Catalog.h.

◆ Record

template<typename RecordT>
using lsst::afw::table::CatalogT< RecordT >::Record = RecordT

Definition at line 102 of file Catalog.h.

◆ reference

template<typename RecordT>
using lsst::afw::table::CatalogT< RecordT >::reference = RecordT &

Definition at line 106 of file Catalog.h.

◆ size_type

template<typename RecordT>
using lsst::afw::table::CatalogT< RecordT >::size_type = typename Internal::size_type

Definition at line 108 of file Catalog.h.

◆ Table

template<typename RecordT>
using lsst::afw::table::CatalogT< RecordT >::Table = typename Record::Table

Definition at line 103 of file Catalog.h.

Constructor & Destructor Documentation

◆ CatalogT() [1/6]

template<typename RecordT>
lsst::afw::table::CatalogT< RecordT >::CatalogT ( std::shared_ptr< Table > const & table = std::shared_ptr<Table>())
inlineexplicit

Construct a catalog from a table (or nothing).

A table is always initialized with a minimal schema.

Definition at line 124 of file Catalog.h.

125 : _table(table), _internal() {
126 if(!_table) {
128 _table=Table::make(schema);
129 }
130 }
A custom container class for records, based on std::vector.
Definition Catalog.h:98

◆ CatalogT() [2/6]

template<typename RecordT>
lsst::afw::table::CatalogT< RecordT >::CatalogT ( Schema const & schema)
inlineexplicit

Construct a catalog from a schema, creating a table with Table::make(schema).

Definition at line 133 of file Catalog.h.

133: _table(Table::make(schema)), _internal() {}

◆ CatalogT() [3/6]

template<typename RecordT>
template<typename InputIterator>
lsst::afw::table::CatalogT< RecordT >::CatalogT ( std::shared_ptr< Table > const & table,
InputIterator first,
InputIterator last,
bool deep = false )
inline

Construct a catalog from a table and an iterator range.

If deep is true, new records will be created using table->copyRecord before being inserted. If deep is false, records will be not be copied, but they must already be associated with the given table. The table itself is never deep-copied.

The iterator must dereference to a record reference or const reference rather than a pointer, but should be implicitly convertible to a record pointer as well (see CatalogIterator).

Definition at line 146 of file Catalog.h.

147 : _table(table), _internal() {
148 insert(end(), first, last, deep);
149 }
void insert(iterator pos, InputIterator first, InputIterator last, bool deep=false)
Insert an iterator range into the table.
Definition Catalog.h:518

◆ CatalogT() [4/6]

template<typename RecordT>
lsst::afw::table::CatalogT< RecordT >::CatalogT ( CatalogT< RecordT > const & other)
default

Shallow copy and constructors.

◆ CatalogT() [5/6]

template<typename RecordT>
lsst::afw::table::CatalogT< RecordT >::CatalogT ( CatalogT< RecordT > && other)
defaultnoexcept

◆ ~CatalogT()

template<typename RecordT>
lsst::afw::table::CatalogT< RecordT >::~CatalogT ( )
default

◆ CatalogT() [6/6]

template<typename RecordT>
template<typename OtherRecordT>
lsst::afw::table::CatalogT< RecordT >::CatalogT ( CatalogT< OtherRecordT > const & other)
inline

Shallow copy constructor from a container containing a related record type.

This conversion only succeeds if OtherRecordT is convertible to RecordT and OtherTable is convertible to Table.

Definition at line 166 of file Catalog.h.

167 : _table(other.getTable()), _internal(other.begin().base(), other.end().base()) {}
iterator begin()
Iterator access.
Definition Catalog.h:401
std::shared_ptr< Table > getTable() const
Return the table associated with the catalog.
Definition Catalog.h:114

Member Function Documentation

◆ addNew()

template<typename RecordT>
std::shared_ptr< RecordT > lsst::afw::table::CatalogT< RecordT >::addNew ( )
inline

Create a new record, add it to the end of the catalog, and return a pointer to it.

Definition at line 490 of file Catalog.h.

490 {
491 std::shared_ptr<RecordT> r = _table->makeRecord();
492 _internal.push_back(r);
493 return r;
494 }
void push_back(Record const &r)
Add a copy of the given record to the end of the catalog.
Definition Catalog.h:481

◆ assign()

template<typename RecordT>
template<typename InputIterator>
void lsst::afw::table::CatalogT< RecordT >::assign ( InputIterator first,
InputIterator last,
bool deep = false )
inline

Replace the contents of the table with an iterator range.

Delegates to insert(); look there for more information.

Definition at line 475 of file Catalog.h.

475 {
476 clear();
477 insert(end(), first, last, deep);
478 }
void clear()
Remove all records from the catalog.
Definition Catalog.h:579

◆ at()

template<typename RecordT>
reference lsst::afw::table::CatalogT< RecordT >::at ( size_type i) const
inline

Return the record at index i (throws std::out_of_range).

Definition at line 455 of file Catalog.h.

455{ return *_internal.at(i); }

◆ back()

template<typename RecordT>
reference lsst::afw::table::CatalogT< RecordT >::back ( ) const
inline

Return the last record.

Definition at line 461 of file Catalog.h.

461{ return *_internal.back(); }

◆ begin() [1/2]

template<typename RecordT>
iterator lsst::afw::table::CatalogT< RecordT >::begin ( )
inline

Iterator access.

See also
CatalogIterator

Definition at line 401 of file Catalog.h.

401{ return iterator(_internal.begin()); }
CatalogIterator< typename Internal::iterator > iterator
Definition Catalog.h:110

◆ begin() [2/2]

template<typename RecordT>
const_iterator lsst::afw::table::CatalogT< RecordT >::begin ( ) const
inline

Definition at line 403 of file Catalog.h.

403{ return const_iterator(_internal.begin()); }
CatalogIterator< typename Internal::const_iterator > const_iterator
Definition Catalog.h:111

◆ capacity()

template<typename RecordT>
size_type lsst::afw::table::CatalogT< RecordT >::capacity ( ) const
inline

Return the capacity of the catalog.

This is computed as the sum of the current size and the unallocated space in the table. It does not reflect the size of the internal vector, and hence cannot be used to judge when iterators may be invalidated.

Definition at line 425 of file Catalog.h.

425{ return _internal.size() + _table->getBufferSize(); }

◆ cbegin()

template<typename RecordT>
const_iterator lsst::afw::table::CatalogT< RecordT >::cbegin ( ) const
inline

Definition at line 405 of file Catalog.h.

405{ return begin(); }

◆ cend()

template<typename RecordT>
const_iterator lsst::afw::table::CatalogT< RecordT >::cend ( ) const
inline

Definition at line 406 of file Catalog.h.

406{ return end(); }

◆ clear()

template<typename RecordT>
void lsst::afw::table::CatalogT< RecordT >::clear ( )
inline

Remove all records from the catalog.

Definition at line 579 of file Catalog.h.

579{ _internal.clear(); }

◆ copy()

template<typename RecordT>
CatalogT lsst::afw::table::CatalogT< RecordT >::copy ( ) const
inline

Deep-copy the catalog using a cloned table.

Definition at line 500 of file Catalog.h.

500{ return CatalogT(getTable()->clone(), begin(), end(), true); }
CatalogT(std::shared_ptr< Table > const &table=std::shared_ptr< Table >())
Construct a catalog from a table (or nothing).
Definition Catalog.h:124

◆ empty()

template<typename RecordT>
bool lsst::afw::table::CatalogT< RecordT >::empty ( ) const
inline

Return true if the catalog has no records.

Definition at line 410 of file Catalog.h.

410{ return _internal.empty(); }

◆ end() [1/2]

template<typename RecordT>
iterator lsst::afw::table::CatalogT< RecordT >::end ( )
inline

Definition at line 402 of file Catalog.h.

402{ return iterator(_internal.end()); }

◆ end() [2/2]

template<typename RecordT>
const_iterator lsst::afw::table::CatalogT< RecordT >::end ( ) const
inline

Definition at line 404 of file Catalog.h.

404{ return const_iterator(_internal.end()); }

◆ equal_range() [1/4]

template<typename RecordT>
template<typename T>
std::pair< iterator, iterator > lsst::afw::table::CatalogT< RecordT >::equal_range ( typename Field< T >::Value const & value,
Key< T > const & key )

◆ equal_range() [2/4]

template<typename RecordT>
template<typename T>
std::pair< typename CatalogT< RecordT >::iterator, typename CatalogT< RecordT >::iterator > lsst::afw::table::CatalogT< RecordT >::equal_range ( typename Field< T >::Value const & value,
Key< T > const & key )

Definition at line 850 of file Catalog.h.

850 {
852 // Iterator adaptor that makes a CatalogT iterator work like an iterator over field values.
856 return std::make_pair(i.first.base(), i.second.base());
857}
T equal_range(T... args)
T make_pair(T... args)

◆ equal_range() [3/4]

template<typename RecordT>
template<typename T>
std::pair< const_iterator, const_iterator > lsst::afw::table::CatalogT< RecordT >::equal_range ( typename Field< T >::Value const & value,
Key< T > const & key ) const

◆ equal_range() [4/4]

template<typename RecordT>
template<typename T>
std::pair< typename CatalogT< RecordT >::const_iterator, typename CatalogT< RecordT >::const_iterator > lsst::afw::table::CatalogT< RecordT >::equal_range ( typename Field< T >::Value const & value,
Key< T > const & key ) const

Definition at line 862 of file Catalog.h.

862 {
864 // Iterator adaptor that makes a CatalogT iterator work like an iterator over field values.
868 return std::make_pair(i.first.base(), i.second.base());
869}

◆ erase() [1/2]

template<typename RecordT>
iterator lsst::afw::table::CatalogT< RecordT >::erase ( iterator first,
iterator last )
inline

Erase the records in the range [first, last).

Definition at line 568 of file Catalog.h.

568 {
569 return iterator(_internal.erase(first.base(), last.base()));
570 }

◆ erase() [2/2]

template<typename RecordT>
iterator lsst::afw::table::CatalogT< RecordT >::erase ( iterator pos)
inline

Erase the record pointed to by pos, and return an iterator the next record.

Definition at line 565 of file Catalog.h.

565{ return iterator(_internal.erase(pos.base())); }

◆ find() [1/2]

template<typename RecordT>
template<typename T>
CatalogT< RecordT >::iterator lsst::afw::table::CatalogT< RecordT >::find ( typename Field< T >::Value const & value,
Key< T > const & key )

Return an iterator to the record with the given value.

When the field being searched is not unique, which matching record will be returned is not defined. In these cases, lower_bound, upper_bound, or equal_range should be used instead.

In Python, this method returns a Record, not an iterator.

Note
The catalog must be sorted in ascending order according to the given key before calling find (i.e. isSorted(key) must be true) for maximal efficiency. If the value searched for is not found, it assumes that the catalog is unsorted and performs a brute-force search instead of failing immediately.

Returns end() if the Record cannot be found.

Definition at line 763 of file Catalog.h.

764 {
766 // Iterator adaptor that makes a CatalogT iterator work like an iterator over field values.
768 /* Try binary search for log n search assuming the table is sorted.
769 * If the search is unsuccessful, try a brute-force search before quitting.
770 */
772 if (i.base() == end() || *i != value) {
774 if (i.base() == end()) {
775 return end();
776 }
777 LOGL_DEBUG("lsst.afw.table.Catalog", "Catalog is not sorted by the key. Finding a record may be slow.");
778 }
779 return i.base();
780}
#define LOGL_DEBUG(logger, message...)
Log a debug-level message using a varargs/printf style interface.
Definition Log.h:515
T find(T... args)
T lower_bound(T... args)

◆ find() [2/2]

template<typename RecordT>
template<typename T>
CatalogT< RecordT >::const_iterator lsst::afw::table::CatalogT< RecordT >::find ( typename Field< T >::Value const & value,
Key< T > const & key ) const

Definition at line 784 of file Catalog.h.

785 {
787 // Iterator adaptor that makes a CatalogT iterator work like an iterator over field values.
789 /* Try binary search for log n search assuming the table is sorted.
790 * If the search is unsuccessful, try a brute-force search before quitting.
791 */
793 if (i.base() == end() || *i != value) {
795 if (i.base() == end()) {
796 return end();
797 }
798 LOGL_DEBUG("lsst.afw.table.Catalog", "Catalog is not sorted by the key. Finding a record may be slow.");
799 }
800 return i.base();
801}

◆ front()

template<typename RecordT>
reference lsst::afw::table::CatalogT< RecordT >::front ( ) const
inline

Return the first record.

Definition at line 458 of file Catalog.h.

458{ return *_internal.front(); }

◆ get()

template<typename RecordT>
std::shared_ptr< RecordT > const lsst::afw::table::CatalogT< RecordT >::get ( size_type i) const
inline

Return a pointer to the record at index i.

Definition at line 464 of file Catalog.h.

464{ return _internal[i]; }

◆ getColumnView()

template<typename RecordT>
ColumnView lsst::afw::table::CatalogT< RecordT >::getColumnView ( ) const
inline

Return a ColumnView of this catalog's records.

Will throw RuntimeError if records are not contiguous.

Definition at line 382 of file Catalog.h.

382 {
384 throw LSST_EXCEPT(
386 "Cannot get a column view from a CatalogT<RecordT const> (as column views are always "
387 "non-const views).");
388 }
389 return ColumnView::make(_table, begin(), end());
390 }
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48

◆ getInternal() [1/2]

template<typename RecordT>
Internal & lsst::afw::table::CatalogT< RecordT >::getInternal ( )
inline

Return a reference to the internal vector-of-shared_ptr.

While in most cases it is more convenient to use the Catalog's iterators, which dereference directly to Record objects (and hence allow iter->method() rather than (**iter).method()), direct access to the underlying vector-of-shared_ptr is provided here to allow complete use of the C++ STL. In particular, in order to use a mutating STL algorithm on a Catalog in such a way that Records are shallow-copied (i.e. shared_ptr::operator= is invoked instead of Record::operator=), those algorithms should be called on the iterators of these internal containers. When an algorithm should be called in such a way that records are deep-copied, the regular Catalog iterators should be used.

Definition at line 676 of file Catalog.h.

676{ return _internal; }

◆ getInternal() [2/2]

template<typename RecordT>
Internal const & lsst::afw::table::CatalogT< RecordT >::getInternal ( ) const
inline

Definition at line 677 of file Catalog.h.

677{ return _internal; }

◆ getSchema()

template<typename RecordT>
Schema lsst::afw::table::CatalogT< RecordT >::getSchema ( ) const
inline

Return the schema associated with the catalog's table.

Definition at line 117 of file Catalog.h.

117{ return _table->getSchema(); }

◆ getTable()

template<typename RecordT>
std::shared_ptr< Table > lsst::afw::table::CatalogT< RecordT >::getTable ( ) const
inline

Return the table associated with the catalog.

Definition at line 114 of file Catalog.h.

114{ return _table; }

◆ insert() [1/4]

template<typename RecordT>
template<typename InputIterator>
void lsst::afw::table::CatalogT< RecordT >::insert ( iterator pos,
InputIterator first,
InputIterator last,
bool deep = false )
inline

Insert an iterator range into the table.

InputIterator must dereference to a record reference that is convertible to the record type held by the catalog, and must be implicitly convertible to a shared_ptr to a record.

If deep is true, new records will be created by calling copyRecord on the catalog's table. If deep is false, the new records will not be copied, but they must have been created with the catalog's table (note that a table may be shared by multiple catalogs).

If InputIterator models RandomAccessIterator (according to std::iterator_traits) and deep is true, table->preallocate will be used to ensure that the resulting records are contiguous in memory and can be used with ColumnView. To ensure this is the case for other iterator types, the user must preallocate the table manually.

Definition at line 518 of file Catalog.h.

518 {
519 _maybeReserve(pos, first, last, deep,
521 if (deep) {
522 while (first != last) {
523 pos = insert(pos, *first);
524 ++pos;
525 ++first;
526 }
527 } else {
528 while (first != last) {
529 pos = insert(pos, first);
530 assert(pos != end());
531 ++pos;
532 ++first;
533 }
534 }
535 }

◆ insert() [2/4]

template<typename RecordT>
iterator lsst::afw::table::CatalogT< RecordT >::insert ( iterator pos,
Record const & r )
inline

Insert a copy of the given record at the given position.

Definition at line 554 of file Catalog.h.

554 {
555 std::shared_ptr<RecordT> p = _table->copyRecord(r);
556 return iterator(_internal.insert(pos.base(), p));
557 }

◆ insert() [3/4]

template<typename RecordT>
iterator lsst::afw::table::CatalogT< RecordT >::insert ( iterator pos,
std::shared_ptr< RecordT > const & p )
inline

Insert the given record at the given position without copying.

Definition at line 560 of file Catalog.h.

560 {
561 return iterator(_internal.insert(pos.base(), p));
562 }

◆ insert() [4/4]

template<typename RecordT>
template<typename InputIterator>
void lsst::afw::table::CatalogT< RecordT >::insert ( SchemaMapper const & mapper,
iterator pos,
InputIterator first,
InputIterator last )
inline

Insert a range of records into the catalog by copying them with a SchemaMapper.

Definition at line 539 of file Catalog.h.

539 {
540 if (!_table->getSchema().contains(mapper.getOutputSchema())) {
542 "SchemaMapper's output schema does not match catalog's schema");
543 }
544 _maybeReserve(pos, first, last, true,
546 while (first != last) {
547 pos = insert(pos, _table->copyRecord(*first, mapper));
548 ++pos;
549 ++first;
550 }
551 }

◆ isContiguous()

template<typename RecordT>
bool lsst::afw::table::CatalogT< RecordT >::isContiguous ( ) const
inline

Return true if all records are contiguous.

Definition at line 393 of file Catalog.h.

393{ return ColumnView::isRangeContiguous(_table, begin(), end()); }

◆ isSorted() [1/2]

template<typename RecordT>
template<typename Compare>
bool lsst::afw::table::CatalogT< RecordT >::isSorted ( Compare cmp) const

Return true if the catalog is in ascending order according to the given predicate.

cmp(a, b) should return true if record a is less than record b, and false otherwise.

TODO: C++11 has an is_sorted function we should use when available.

Definition at line 726 of file Catalog.h.

726 {
729 if (empty()) return true;
730 const_iterator last = this->begin();
732 ++i;
733 for (; i != this->end(); ++i) {
734 if (f(i, last)) return false;
735 last = i;
736 }
737 return true;
738}
bool empty() const
Return true if the catalog has no records.
Definition Catalog.h:410

◆ isSorted() [2/2]

template<typename RecordT>
template<typename T>
bool lsst::afw::table::CatalogT< RecordT >::isSorted ( Key< T > const & key) const

Return true if the catalog is in ascending order according to the given key.

Definition at line 749 of file Catalog.h.

749 {
751 return isSorted(f);
752}
bool isSorted(Key< T > const &key) const
Return true if the catalog is in ascending order according to the given key.
Definition Catalog.h:749

◆ lower_bound() [1/2]

template<typename RecordT>
template<typename T>
CatalogT< RecordT >::iterator lsst::afw::table::CatalogT< RecordT >::lower_bound ( typename Field< T >::Value const & value,
Key< T > const & key )

Performed binary searches on sorted fields.

These methods perform binary searches analogous to the STL algorithms of the same name; they simply create a comparison functor using the given value and Key.

In Python, the lower_bound and upper_bound methods return the position of the result record in the catalog, and equal_range returns a Python slice object that defines the range.

Note
The catalog must be sorted in ascending order according to the given key before calling any of the search methods (i.e. isSorted(key) must be true).

Definition at line 805 of file Catalog.h.

806 {
808 // Iterator adaptor that makes a CatalogT iterator work like an iterator over field values.
811 return i.base();
812}

◆ lower_bound() [2/2]

template<typename RecordT>
template<typename T>
CatalogT< RecordT >::const_iterator lsst::afw::table::CatalogT< RecordT >::lower_bound ( typename Field< T >::Value const & value,
Key< T > const & key ) const

Definition at line 816 of file Catalog.h.

817 {
819 // Iterator adaptor that makes a CatalogT iterator work like an iterator over field values.
822 return i.base();
823}

◆ max_size()

template<typename RecordT>
size_type lsst::afw::table::CatalogT< RecordT >::max_size ( ) const
inline

Return the maximum number of elements allowed in a catalog.

Definition at line 416 of file Catalog.h.

416{ return _internal.max_size(); }

◆ operator=() [1/2]

template<typename RecordT>
CatalogT & lsst::afw::table::CatalogT< RecordT >::operator= ( CatalogT< RecordT > && other)
inline

Definition at line 178 of file Catalog.h.

178{ return *this = other; }

◆ operator=() [2/2]

template<typename RecordT>
CatalogT & lsst::afw::table::CatalogT< RecordT >::operator= ( CatalogT< RecordT > const & other)
inline

Shallow assigment.

Definition at line 170 of file Catalog.h.

170 {
171 if (&other != this) {
172 _table = other._table;
173 _internal = other._internal;
174 }
175 return *this;
176 }

◆ operator[]()

template<typename RecordT>
reference lsst::afw::table::CatalogT< RecordT >::operator[] ( size_type i) const
inline

Return the record at index i.

Definition at line 452 of file Catalog.h.

452{ return *_internal[i]; }

◆ pop_back()

template<typename RecordT>
void lsst::afw::table::CatalogT< RecordT >::pop_back ( )
inline

Remove the last record in the catalog.

Definition at line 497 of file Catalog.h.

497{ _internal.pop_back(); }

◆ push_back() [1/2]

template<typename RecordT>
void lsst::afw::table::CatalogT< RecordT >::push_back ( Record const & r)
inline

Add a copy of the given record to the end of the catalog.

Definition at line 481 of file Catalog.h.

481 {
482 std::shared_ptr<RecordT> p = _table->copyRecord(r);
483 _internal.push_back(p);
484 }

◆ push_back() [2/2]

template<typename RecordT>
void lsst::afw::table::CatalogT< RecordT >::push_back ( std::shared_ptr< RecordT > const & p)
inline

Add the given record to the end of the catalog without copying.

Definition at line 487 of file Catalog.h.

487{ _internal.push_back(p); }

◆ readFits() [1/3]

template<typename RecordT>
static CatalogT lsst::afw::table::CatalogT< RecordT >::readFits ( fits::Fits & fitsfile,
int flags = 0 )
inlinestatic

Read a FITS binary table from a file object already at the correct extension.

Parameters
[in]fitsfileFits file object to read from.
[in]flagsTable-subclass-dependent bitflags that control the details of how to read the catalog. See e.g. SourceFitsFlags.

Definition at line 373 of file Catalog.h.

373 {
375 }
static ContainerT apply(afw::fits::Fits &fits, int ioFlags, std::shared_ptr< InputArchive > archive=std::shared_ptr< InputArchive >())
Create a new Catalog by reading a FITS binary table.
Definition FitsReader.h:71

◆ readFits() [2/3]

template<typename RecordT>
static CatalogT lsst::afw::table::CatalogT< RecordT >::readFits ( fits::MemFileManager & manager,
int hdu = fits::DEFAULT_HDU,
int flags = 0 )
inlinestatic

Read a FITS binary table from a RAM file.

Parameters
[in]managerObject that manages the memory to be read.
[in]hduNumber of the "header-data unit" to read (where 0 is the Primary HDU). The default value of afw::fits::DEFAULT_HDU is interpreted as "the first HDU with NAXIS != 0".
[in]flagsTable-subclass-dependent bitflags that control the details of how to read the catalog. See e.g. SourceFitsFlags.

Definition at line 362 of file Catalog.h.

362 {
364 }

◆ readFits() [3/3]

template<typename RecordT>
static CatalogT lsst::afw::table::CatalogT< RecordT >::readFits ( std::string const & filename,
int hdu = fits::DEFAULT_HDU,
int flags = 0 )
inlinestatic

Read a FITS binary table from a regular file.

Parameters
[in]filenameName of the file to read.
[in]hduNumber of the "header-data unit" to read (where 0 is the Primary HDU). The default value of afw::fits::DEFAULT_HDU is interpreted as "the first HDU with NAXIS != 0".
[in]flagsTable-subclass-dependent bitflags that control the details of how to read the catalog. See e.g. SourceFitsFlags.

Definition at line 348 of file Catalog.h.

348 {
350 }

◆ reserve()

template<typename RecordT>
void lsst::afw::table::CatalogT< RecordT >::reserve ( size_type n)
inline

Increase the capacity of the catalog to the given size.

This can be used to guarantee that the catalog will be contiguous, but it only affects records constructed after reserve().

Definition at line 433 of file Catalog.h.

433 {
434 if (n <= _internal.size()) return;
435 _table->preallocate(n - _internal.size());
436 _internal.reserve(n);
437 }
size_type size() const
Return the number of elements in the catalog.
Definition Catalog.h:413

◆ resize()

template<typename RecordT>
void lsst::afw::table::CatalogT< RecordT >::resize ( size_type n)
inline

Change the size of the catalog, removing or adding empty records as needed.

Definition at line 440 of file Catalog.h.

440 {
441 size_type old = size();
442 _internal.resize(n);
443 if (old < n) {
444 _table->preallocate(n - old);
445 for (size_type i = old; i != n; ++i) {
446 _internal[i] = _table->makeRecord();
447 }
448 }
449 }
typename Internal::size_type size_type
Definition Catalog.h:108

◆ set()

template<typename RecordT>
void lsst::afw::table::CatalogT< RecordT >::set ( size_type i,
std::shared_ptr< RecordT > const & p )
inline

Set the record at index i to a pointer.

Definition at line 467 of file Catalog.h.

467{ _internal[i] = p; }

◆ size()

template<typename RecordT>
size_type lsst::afw::table::CatalogT< RecordT >::size ( ) const
inline

Return the number of elements in the catalog.

Definition at line 413 of file Catalog.h.

413{ return _internal.size(); }

◆ sort() [1/2]

template<typename RecordT>
template<typename Compare>
void lsst::afw::table::CatalogT< RecordT >::sort ( Compare cmp)

Sort the catalog in-place by the field with the given predicate.

cmp(a, b) should return true if record a is less than record b, and false otherwise.

Definition at line 742 of file Catalog.h.

742 {
744 std::stable_sort(_internal.begin(), _internal.end(), f);
745}
T stable_sort(T... args)

◆ sort() [2/2]

template<typename RecordT>
template<typename T>
void lsst::afw::table::CatalogT< RecordT >::sort ( Key< T > const & key)

Sort the catalog in-place by the field with the given key.

Definition at line 756 of file Catalog.h.

756 {
758 return sort(f);
759}
void sort(Key< T > const &key)
Sort the catalog in-place by the field with the given key.
Definition Catalog.h:756

◆ subset() [1/2]

template<typename RecordT>
CatalogT lsst::afw::table::CatalogT< RecordT >::subset ( ndarray::Array< bool const, 1 > const & mask) const
inline

Return the subset of a catalog corresponding to the True values of the given mask array.

The returned array's records are shallow copies, and hence will not in general be contiguous.

Definition at line 185 of file Catalog.h.

185 {
186 if (size_type(mask.size()) != size()) {
187 throw LSST_EXCEPT(
189 (boost::format("Mask array with %d elements applied to catalog with %d elements") %
190 mask.size() % size())
191 .str());
192 }
196 for (; maskIter != mask.end(); ++maskIter, ++catIter) {
198 }
199 return result;
200 }

◆ subset() [2/2]

template<typename RecordT>
CatalogT lsst::afw::table::CatalogT< RecordT >::subset ( std::ptrdiff_t startd,
std::ptrdiff_t stopd,
std::ptrdiff_t step ) const
inline

Returns a shallow copy of a subset of this Catalog.

The arguments correspond to python's slice() syntax.

Definition at line 206 of file Catalog.h.

206 {
207 /* Python's slicing syntax is weird and wonderful.
208
209 Both the "start" and "stop" indices can be negative, which means the
210 abs() of the index less than the size; [-1] means the last item.
211 Moreover, it's possible to have a negative index less than -len(); it
212 will get clipped. That is in fact one way to slice *backward* through
213 the array *and* include element 0;
214
215 >>> range(10)[5:-20:-1]
216 [5, 4, 3, 2, 1, 0]
217
218 The clipping tests in this function look more complicated than they
219 need to be, but that is partly because there are some weird edge cases.
220
221 Also, ptrdiff_t vs size_t introduces some annoying complexity. Note
222 that the args are "startd"/"stopd" (not "start"/"stop").
223
224 There is a fairly complete set of tests in tests/ticket2026.py; if you
225 try to simplify this function, be sure they continue to pass.
226 */
227 size_type S = size();
228 size_type start, stop = 0;
229 // Python doesn't allow step == 0
230 if (step == 0) {
231 throw LSST_EXCEPT(pex::exceptions::InvalidParameterError, "Step cannot be zero");
232 }
233 // Basic negative indexing rule: first add size
234 if (startd < 0) {
235 startd += S;
236 }
237 if (stopd < 0) {
238 stopd += S;
239 }
240 // Start gets clipped to zero; stop does not (yet).
241 if (startd < 0) {
242 startd = 0;
243 }
244 // Now start is non-negative, so can cast to size_t.
246 if (start > S) {
247 start = S;
248 }
249 if (step > 0) {
250 // When stepping forward, stop gets clipped at zero,
251 // so is non-negative and can get cast to size_t.
252 if (stopd < 0) {
253 stopd = 0;
254 }
256 if (stop > S) {
257 stop = S;
258 }
259 } else if (step < 0) {
260 // When stepping backward, stop gets clipped at -1 so that slices
261 // including 0 are possible.
262 if (stopd < 0) {
263 stopd = -1;
264 }
265 }
266
267 if (((step > 0) && (start >= stop)) || ((step < 0) && ((std::ptrdiff_t)start <= stopd))) {
268 // Empty range
269 return CatalogT<RecordT>(getTable(), begin(), begin());
270 }
271
272 if (step == 1) {
273 // Use the iterator-based constructor for this simple case
274 assert(start >= 0);
275 assert(stop > 0);
276 assert(start < S);
277 assert(stop <= S);
278 return CatalogT<RecordT>(getTable(), begin() + start, begin() + stop);
279 }
280
281 // Build a new CatalogT and copy records into it.
283 size_type N = 0;
284 if (step >= 0) {
285 N = (stop - start) / step + (((stop - start) % step) ? 1 : 0);
286 } else {
288 (((stopd - (std::ptrdiff_t)start) % step) ? 1 : 0));
289 }
290 cat.reserve(N);
291 if (step >= 0) {
292 for (size_type i = start; i < stop; i += step) {
293 cat.push_back(get(i));
294 }
295 } else {
296 for (std::ptrdiff_t i = (std::ptrdiff_t)start; i > stopd; i += step) {
297 cat.push_back(get(i));
298 }
299 }
300 return cat;
301 }
std::shared_ptr< RecordT > const get(size_type i) const
Return a pointer to the record at index i.
Definition Catalog.h:464
void reserve(size_type n)
Increase the capacity of the catalog to the given size.
Definition Catalog.h:433

◆ swap()

template<typename RecordT>
void lsst::afw::table::CatalogT< RecordT >::swap ( CatalogT< RecordT > & other)
inlinenoexcept

Shallow swap of two catalogs.

Definition at line 573 of file Catalog.h.

573 {
574 _table.swap(other._table);
575 _internal.swap(other._internal);
576 }

◆ upper_bound() [1/2]

template<typename RecordT>
template<typename T>
CatalogT< RecordT >::iterator lsst::afw::table::CatalogT< RecordT >::upper_bound ( typename Field< T >::Value const & value,
Key< T > const & key )

Definition at line 827 of file Catalog.h.

828 {
830 // Iterator adaptor that makes a CatalogT iterator work like an iterator over field values.
833 return i.base();
834}
T upper_bound(T... args)

◆ upper_bound() [2/2]

template<typename RecordT>
template<typename T>
CatalogT< RecordT >::const_iterator lsst::afw::table::CatalogT< RecordT >::upper_bound ( typename Field< T >::Value const & value,
Key< T > const & key ) const

Definition at line 838 of file Catalog.h.

839 {
841 // Iterator adaptor that makes a CatalogT iterator work like an iterator over field values.
844 return i.base();
845}

◆ writeFits() [1/3]

template<typename RecordT>
void lsst::afw::table::CatalogT< RecordT >::writeFits ( fits::Fits & fitsfile,
int flags = 0 ) const
inline

Write a FITS binary table to an open file object.

Parameters
[in,out]fitsfileFits file object to write to.
[in]flagsTable-subclass-dependent bitflags that control the details of how to read the catalogs. See e.g. SourceFitsFlags.

Definition at line 334 of file Catalog.h.

334 {
336 }
static void apply(OutputT &output, std::string const &mode, ContainerT const &container, int flags)
Driver for writing FITS files.
Definition FitsWriter.h:37

◆ writeFits() [2/3]

template<typename RecordT>
void lsst::afw::table::CatalogT< RecordT >::writeFits ( fits::MemFileManager & manager,
std::string const & mode = "w",
int flags = 0 ) const
inline

Write a FITS binary table to a RAM file.

Parameters
[in,out]managerObject that manages the memory to write to.
[in]mode"a" to append a new HDU, "w" to overwrite any existing file.
[in]flagsTable-subclass-dependent bitflags that control the details of how to read the catalogs. See e.g. SourceFitsFlags.

Definition at line 323 of file Catalog.h.

323 {
325 }

◆ writeFits() [3/3]

template<typename RecordT>
void lsst::afw::table::CatalogT< RecordT >::writeFits ( std::string const & filename,
std::string const & mode = "w",
int flags = 0 ) const
inline

Write a FITS binary table to a regular file.

Parameters
[in]filenameName of the file to write.
[in]mode"a" to append a new HDU, "w" to overwrite any existing file.
[in]flagsTable-subclass-dependent bitflags that control the details of how to read the catalogs. See e.g. SourceFitsFlags.

Definition at line 311 of file Catalog.h.

311 {
313 }

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