LSSTApplications  18.0.0+106,18.0.0+50,19.0.0,19.0.0+1,19.0.0+10,19.0.0+11,19.0.0+13,19.0.0+17,19.0.0+2,19.0.0-1-g20d9b18+6,19.0.0-1-g425ff20,19.0.0-1-g5549ca4,19.0.0-1-g580fafe+6,19.0.0-1-g6fe20d0+1,19.0.0-1-g7011481+9,19.0.0-1-g8c57eb9+6,19.0.0-1-gb5175dc+11,19.0.0-1-gdc0e4a7+9,19.0.0-1-ge272bc4+6,19.0.0-1-ge3aa853,19.0.0-10-g448f008b,19.0.0-12-g6990b2c,19.0.0-2-g0d9f9cd+11,19.0.0-2-g3d9e4fb2+11,19.0.0-2-g5037de4,19.0.0-2-gb96a1c4+3,19.0.0-2-gd955cfd+15,19.0.0-3-g2d13df8,19.0.0-3-g6f3c7dc,19.0.0-4-g725f80e+11,19.0.0-4-ga671dab3b+1,19.0.0-4-gad373c5+3,19.0.0-5-ga2acb9c+2,19.0.0-5-gfe96e6c+2,w.2020.01
LSSTDataManagementBasePackage
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
std::shared_ptr< Image< PixelT > > getImage()
Return a shared_ptr to the DecoratedImage&#39;s Image.
Definition: Image.h:503
std::shared_ptr< lsst::daf::base::PropertySet > getMetadata() const
Definition: Image.h:459
T swap(T... args)
table::Key< int > b
Options for writing an image to FITS.
Definition: fits.h:219
table::Key< int > a
void swap(DecoratedImage &rhs)
void setMetadata(std::shared_ptr< lsst::daf::base::PropertySet > metadata)
Definition: Image.h:460
STL class.
afw::table::PointKey< int > dimensions
Definition: GaussianPsf.cc:49
DecoratedImage & operator=(const DecoratedImage &image)
Assignment operator.
A base class for image defects.
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.
std::shared_ptr< RecordT > src
Definition: Match.cc:48
DecoratedImage(const lsst::geom::Extent2I &dimensions=lsst::geom::Extent2I())
Create an image of the specified size.
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects...
An integer coordinate rectangle.
Definition: Box.h:55
A class to represent a 2-dimensional array of pixels.
Definition: Image.h:58
A container for an Image and its associated metadata.
Definition: Image.h:404