LSSTApplications  18.1.0
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  : daf::base::Citizen(typeid(this)), _image(new Image<PixelT>(dimensions)) {
58  init();
59 }
60 template <typename PixelT>
62  : daf::base::Citizen(typeid(this)), _image(new Image<PixelT>(bbox)) {
63  init();
64 }
65 template <typename PixelT>
67  : daf::base::Citizen(typeid(this)), _image(rhs) {
68  init();
69 }
70 template <typename PixelT>
72  : daf::base::Citizen(typeid(this)), _image(new Image<PixelT>(*src._image, deep)), _gain(src._gain) {
73  setMetadata(src.getMetadata());
74 }
75 template <typename PixelT>
77  DecoratedImage tmp(src);
78  swap(tmp); // See Meyers, Effective C++, Item 11
79 
80  return *this;
81 }
82 
83 template <typename PixelT>
85  using std::swap; // See Meyers, Effective C++, Item 25
86 
87  swap(_image, rhs._image); // just swapping the pointers
88  swap(_gain, rhs._gain);
89 }
90 
91 template <typename PixelT>
93  a.swap(b);
94 }
95 
96 //
97 // FITS code
98 //
99 template <typename PixelT>
101  lsst::geom::Box2I const& bbox, ImageOrigin const origin,
102  bool allowUnsafe)
103  : daf::base::Citizen(typeid(this)) {
104  init();
105  _image = std::shared_ptr<Image<PixelT>>(new Image<PixelT>(fileName, hdu, getMetadata(), bbox, origin,
106  allowUnsafe));
107 }
108 
109 template <typename PixelT>
112  std::string const& mode) const {
114  writeFits(fileName, options, metadata, mode);
115 }
116 
117 template <typename PixelT>
120  std::string const& mode) const {
122 
123  if (metadata_i) {
124  metadata = getMetadata()->deepCopy();
125  metadata->combine(metadata_i);
126  } else {
127  metadata = getMetadata();
128  }
129 
130  getImage()->writeFits(fileName, options, mode, metadata);
131 }
132 
133 //
134 // Explicit instantiations
135 //
136 template class DecoratedImage<std::uint16_t>;
137 template class DecoratedImage<int>;
138 template class DecoratedImage<float>;
139 template class DecoratedImage<double>;
140 template class DecoratedImage<std::uint64_t>;
141 } // namespace image
142 } // namespace afw
143 } // namespace lsst
std::shared_ptr< Image< PixelT > > getImage()
Return a shared_ptr to the DecoratedImage&#39;s Image.
Definition: Image.h:506
afw::table::PointKey< int > dimensions
Definition: GaussianPsf.cc:49
std::shared_ptr< lsst::daf::base::PropertySet > getMetadata() const
Definition: Image.h:462
T swap(T... args)
table::Key< int > b
Options for writing an image to FITS.
Definition: fits.h:219
table::Key< int > a
tuple options
Definition: lsstimport.py:47
void swap(DecoratedImage &rhs)
void setMetadata(std::shared_ptr< lsst::daf::base::PropertySet > metadata)
Definition: Image.h:463
STL class.
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.
table::Box2IKey bbox
Definition: Detector.cc:169
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.
Citizen(const std::type_info &)
Definition: Citizen.cc:163
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects...
An integer coordinate rectangle.
Definition: Box.h:54
A class to represent a 2-dimensional array of pixels.
Definition: Image.h:59
A container for an Image and its associated metadata.
Definition: Image.h:407