LSST Applications  21.0.0+04719a4bac,21.0.0-1-ga51b5d4+f5e6047307,21.0.0-11-g2b59f77+a9c1acf22d,21.0.0-11-ga42c5b2+86977b0b17,21.0.0-12-gf4ce030+76814010d2,21.0.0-13-g1721dae+760e7a6536,21.0.0-13-g3a573fe+768d78a30a,21.0.0-15-g5a7caf0+f21cbc5713,21.0.0-16-g0fb55c1+b60e2d390c,21.0.0-19-g4cded4ca+71a93a33c0,21.0.0-2-g103fe59+bb20972958,21.0.0-2-g45278ab+04719a4bac,21.0.0-2-g5242d73+3ad5d60fb1,21.0.0-2-g7f82c8f+8babb168e8,21.0.0-2-g8f08a60+06509c8b61,21.0.0-2-g8faa9b5+616205b9df,21.0.0-2-ga326454+8babb168e8,21.0.0-2-gde069b7+5e4aea9c2f,21.0.0-2-gecfae73+1d3a86e577,21.0.0-2-gfc62afb+3ad5d60fb1,21.0.0-25-g1d57be3cd+e73869a214,21.0.0-3-g357aad2+ed88757d29,21.0.0-3-g4a4ce7f+3ad5d60fb1,21.0.0-3-g4be5c26+3ad5d60fb1,21.0.0-3-g65f322c+e0b24896a3,21.0.0-3-g7d9da8d+616205b9df,21.0.0-3-ge02ed75+a9c1acf22d,21.0.0-4-g591bb35+a9c1acf22d,21.0.0-4-g65b4814+b60e2d390c,21.0.0-4-gccdca77+0de219a2bc,21.0.0-4-ge8a399c+6c55c39e83,21.0.0-5-gd00fb1e+05fce91b99,21.0.0-6-gc675373+3ad5d60fb1,21.0.0-64-g1122c245+4fb2b8f86e,21.0.0-7-g04766d7+cd19d05db2,21.0.0-7-gdf92d54+04719a4bac,21.0.0-8-g5674e7b+d1bd76f71f,master-gac4afde19b+a9c1acf22d,w.2021.13
LSST Data Management Base Package
DecoratedImage.cc
Go to the documentation of this file.
1 /*
2  * LSST Data Management System
3  * Copyright 2008, 2009, 2010 LSST Corporation.
4  *
5  * This product includes software developed by the
6  * LSST Project (http://www.lsst.org/).
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the LSST License Statement and
19  * the GNU General Public License along with this program. If not,
20  * see <http://www.lsstcorp.org/LegalNotices/>.
21  */
22 
23 /*
24  * An Image with associated metadata
25  */
26 #include <cstdint>
27 #include <iostream>
28 
29 #include "boost/format.hpp"
30 #include "boost/mpl/vector.hpp"
31 
32 #include "boost/version.hpp"
33 #if BOOST_VERSION < 106900
34 #include "boost/gil/gil_all.hpp"
35 #else
36 #include "boost/gil.hpp"
37 #endif
38 
39 #include "lsst/pex/exceptions.h"
40 #include "lsst/afw/fits.h"
41 #include "lsst/afw/image/Image.h"
42 
43 namespace lsst {
44 namespace afw {
45 namespace image {
46 
47 template <typename PixelT>
48 void DecoratedImage<PixelT>::init() {
49  // safer to initialize a smart pointer as a named variable
50  std::shared_ptr<daf::base::PropertySet> metadata(new daf::base::PropertyList);
51  setMetadata(metadata);
52  _gain = 0;
53 }
54 
55 template <typename PixelT>
57  : _image(new Image<PixelT>(dimensions)) {
58  init();
59 }
60 template <typename PixelT>
62  init();
63 }
64 template <typename PixelT>
66  init();
67 }
68 template <typename PixelT>
70  : _image(new Image<PixelT>(*src._image, deep)), _gain(src._gain) {
71  setMetadata(src.getMetadata());
72 }
73 template <typename PixelT>
75  DecoratedImage tmp(src);
76  swap(tmp); // See Meyers, Effective C++, Item 11
77 
78  return *this;
79 }
80 
81 template <typename PixelT>
83  using std::swap; // See Meyers, Effective C++, Item 25
84 
85  swap(_image, rhs._image); // just swapping the pointers
86  swap(_gain, rhs._gain);
87 }
88 
89 template <typename PixelT>
91  a.swap(b);
92 }
93 
94 //
95 // FITS code
96 //
97 template <typename PixelT>
98 DecoratedImage<PixelT>::DecoratedImage(const std::string& fileName, const int hdu,
99  lsst::geom::Box2I const& bbox, ImageOrigin const origin,
100  bool allowUnsafe) {
101  init();
103  new Image<PixelT>(fileName, hdu, getMetadata(), bbox, origin, allowUnsafe));
104 }
105 
106 template <typename PixelT>
109  std::string const& mode) const {
110  fits::ImageWriteOptions const options;
111  writeFits(fileName, options, metadata, mode);
112 }
113 
114 template <typename PixelT>
117  std::string const& mode) const {
119 
120  if (metadata_i) {
121  metadata = getMetadata()->deepCopy();
122  metadata->combine(metadata_i);
123  } else {
124  metadata = getMetadata();
125  }
126 
127  getImage()->writeFits(fileName, options, mode, metadata);
128 }
129 
130 //
131 // Explicit instantiations
132 //
133 template class DecoratedImage<std::uint16_t>;
134 template class DecoratedImage<int>;
135 template class DecoratedImage<float>;
136 template class DecoratedImage<double>;
137 template class DecoratedImage<std::uint64_t>;
138 } // namespace image
139 } // namespace afw
140 } // namespace lsst
AmpInfoBoxKey bbox
Definition: Amplifier.cc:117
afw::table::PointKey< int > dimensions
Definition: GaussianPsf.cc:49
std::shared_ptr< RecordT > src
Definition: Match.cc:48
table::Key< int > b
table::Key< int > a
A container for an Image and its associated metadata.
Definition: Image.h:404
void writeFits(std::string const &fileName, std::shared_ptr< lsst::daf::base::PropertySet const > metadata=std::shared_ptr< lsst::daf::base::PropertySet const >(), std::string const &mode="w") const
Write a FITS file.
DecoratedImage(const lsst::geom::Extent2I &dimensions=lsst::geom::Extent2I())
Create an image of the specified size.
DecoratedImage & operator=(const DecoratedImage &image)
Assignment operator.
void swap(DecoratedImage &rhs)
void setMetadata(std::shared_ptr< lsst::daf::base::PropertySet > metadata)
Definition: Image.h:460
A class to represent a 2-dimensional array of pixels.
Definition: Image.h:58
An integer coordinate rectangle.
Definition: Box.h:55
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
void swap(Image< PixelT > &a, Image< PixelT > &b)
Definition: Image.cc:456
def writeFits(filename, stamp_ims, metadata, type_name, write_mask, write_variance)
Definition: stamps.py:40
def init()
Definition: tests.py:59
A base class for image defects.
Options for writing an image to FITS.
Definition: fits.h:219
T swap(T... args)