LSST Applications g0f08755f38+82efc23009,g12f32b3c4e+e7bdf1200e,g1653933729+a8ce1bb630,g1a0ca8cf93+50eff2b06f,g28da252d5a+52db39f6a5,g2bbee38e9b+37c5a29d61,g2bc492864f+37c5a29d61,g2cdde0e794+c05ff076ad,g3156d2b45e+41e33cbcdc,g347aa1857d+37c5a29d61,g35bb328faa+a8ce1bb630,g3a166c0a6a+37c5a29d61,g3e281a1b8c+fb992f5633,g414038480c+7f03dfc1b0,g41af890bb2+11b950c980,g5fbc88fb19+17cd334064,g6b1c1869cb+12dd639c9a,g781aacb6e4+a8ce1bb630,g80478fca09+72e9651da0,g82479be7b0+04c31367b4,g858d7b2824+82efc23009,g9125e01d80+a8ce1bb630,g9726552aa6+8047e3811d,ga5288a1d22+e532dc0a0b,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+37c5a29d61,gcf0d15dbbd+2acd6d4d48,gd7358e8bfb+778a810b6e,gda3e153d99+82efc23009,gda6a2b7d83+2acd6d4d48,gdaeeff99f8+1711a396fd,ge2409df99d+6b12de1076,ge79ae78c31+37c5a29d61,gf0baf85859+d0a5978c5a,gf3967379c6+4954f8c433,gfb92a5be7c+82efc23009,gfec2e1e490+2aaed99252,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
SkyWcs.h
Go to the documentation of this file.
1// -*- lsst-c++ -*-
2/*
3 * LSST Data Management System
4 * Copyright 2017 AURA/LSST.
5 *
6 * This product includes software developed by the
7 * LSST Project (http://www.lsst.org/).
8 *
9 * This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation, either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the LSST License Statement and
20 * the GNU General Public License along with this program. If not,
21 * see <http://www.lsstcorp.org/LegalNotices/>.
22 */
23
24#ifndef LSST_AFW_GEOM_SKYWCS_H
25#define LSST_AFW_GEOM_SKYWCS_H
26
27#include <memory>
28#include <utility>
29#include <vector>
30
31#include "Eigen/Core"
32#include "astshim.h"
33#include "ndarray.h"
34
37#include "lsst/geom/Angle.h"
38#include "lsst/geom/Point.h"
43
44namespace lsst {
45namespace afw {
46namespace geom {
47
61Eigen::Matrix2d makeCdMatrix(lsst::geom::Angle const &scale,
62 lsst::geom::Angle const &orientation = 0 * lsst::geom::degrees,
63 bool flipX = false);
64
117class SkyWcs final : public table::io::PersistableFacade<SkyWcs>, public typehandling::Storable {
118public:
119 SkyWcs(SkyWcs const &) = default;
120 SkyWcs(SkyWcs &&) = default;
121 SkyWcs &operator=(SkyWcs const &) = delete;
122 SkyWcs &operator=(SkyWcs &&) = delete;
123 ~SkyWcs() override = default;
124
135 bool operator==(SkyWcs const &other) const;
136 bool operator!=(SkyWcs const &other) const { return !(*this == other); }
137
149 explicit SkyWcs(daf::base::PropertySet &metadata, bool strip = false);
150
163 explicit SkyWcs(ast::FrameDict const &frameDict);
164
173
191
200
208 lsst::geom::Angle getPixelScale() const { return _pixelScaleAtOrigin; };
209
215 lsst::geom::Point2D getPixelOrigin() const { return _pixelOrigin; };
216
223
229 Eigen::Matrix2d getCdMatrix(lsst::geom::Point2D const &pixel) const;
230
236 Eigen::Matrix2d getCdMatrix() const;
237
242
252
258
266 bool isFlipped() const;
267
268 bool isPersistable() const noexcept override { return true; }
269
283 lsst::geom::AngleUnit const &skyUnit) const;
284
298 lsst::geom::AngleUnit const &skyUnit) const;
299
313 lsst::geom::AngleUnit const &skyUnit) const;
314
328 lsst::geom::AngleUnit const &skyUnit) const;
329
335 return _transform->applyForward(pixel);
336 }
337 lsst::geom::SpherePoint pixelToSky(double x, double y) const {
339 }
341 return _transform->applyForward(pixels);
342 }
344
350 return _transform->applyInverse(sky);
351 }
353 return _transform->applyInverse(sky);
354 }
356
358
364 bool hasFitsApproximation() const { return false; }
365
371 bool isFits() const;
372
379
382
400 void writeStream(std::ostream &os) const;
401
403 std::string writeString() const;
404
405 // Override methods required by afw::typehandling::Storable
406
409
420 std::string toString() const override;
421
427 bool equals(typehandling::Storable const &other) const noexcept override;
428
429protected:
430 // Override methods required by afw::table::io::Persistable
431 std::string getPersistenceName() const override;
432 std::string getPythonModule() const override;
433 void write(OutputArchiveHandle &handle) const override;
434
435private:
436 /*
437 * Construct a SkyWcs from a shared pointer to an ast::FrameDict
438 *
439 * The frameDict may be modified.
440 */
441 explicit SkyWcs(std::shared_ptr<ast::FrameDict> frameDict);
442
443 /*
444 * Check a FrameDict to see if it can safely be used for a SkyWcs
445 * Return a copy so that it can be used as an argument to the SkyWcs(shared_ptr<FrameDict>) constructor
446 */
447 std::shared_ptr<ast::FrameDict> _checkFrameDict(ast::FrameDict const &frameDict) const;
448
449 // the full FrameDict, for operations that need intermediate frames
451 // cached transform from _frameDict, for fast computation of pixels<->sky
453 lsst::geom::Point2D _pixelOrigin; // cached pixel origin
454 lsst::geom::Angle _pixelScaleAtOrigin; // cached pixel scale at pixel origin
455
456 /*
457 * Implementation for the overloaded public linearizePixelToSky methods, requiring both a pixel coordinate
458 * and the corresponding sky coordinate.
459 */
460 lsst::geom::AffineTransform _linearizePixelToSky(lsst::geom::Point2D const &pix,
461 lsst::geom::SpherePoint const &coord,
462 lsst::geom::AngleUnit const &skyUnit) const;
463
464 /*
465 * Implementation for the overloaded public linearizeSkyToPixel methods, requiring both a pixel coordinate
466 * and the corresponding sky coordinate.
467 */
468 lsst::geom::AffineTransform _linearizeSkyToPixel(lsst::geom::Point2D const &pix,
469 lsst::geom::SpherePoint const &coord,
470 lsst::geom::AngleUnit const &skyUnit) const;
471
473 void _computeCache() {
474 _transform = std::make_shared<TransformPoint2ToSpherePoint>(*_frameDict->getMapping(), true);
475 _pixelOrigin = skyToPixel(getSkyOrigin());
476 _pixelScaleAtOrigin = getPixelScale(_pixelOrigin);
477 }
478};
479
488std::shared_ptr<SkyWcs> makeFlippedWcs(SkyWcs const &wcs, bool flipLR, bool flipTB,
489 lsst::geom::Point2D const &center);
490
517std::shared_ptr<SkyWcs> makeModifiedWcs(TransformPoint2ToPoint2 const &pixelTransform, SkyWcs const &wcs,
518 bool modifyActualPixels);
519
536
548 Eigen::Matrix2d const &cdMatrix, std::string const &projection = "TAN");
549
566std::shared_ptr<SkyWcs> makeSkyWcs(TransformPoint2ToPoint2 const &pixelsToFieldAngle,
567 lsst::geom::Angle const &orientation, bool flipX,
568 lsst::geom::SpherePoint const &boresight,
569 std::string const &projection = "TAN");
570
583 Eigen::Matrix2d const &cdMatrix, Eigen::MatrixXd const &sipA,
584 Eigen::MatrixXd const &sipB);
585
600 Eigen::Matrix2d const &cdMatrix, Eigen::MatrixXd const &sipA,
601 Eigen::MatrixXd const &sipB, Eigen::MatrixXd const &sipAp,
602 Eigen::MatrixXd const &sipBp);
615
620 bool simplify = true);
621
628 bool simplify = true);
629
633std::ostream &operator<<(std::ostream &os, SkyWcs const &wcs);
634
635} // namespace geom
636} // namespace afw
637} // namespace lsst
638
639#endif
std::shared_ptr< RecordT > src
Definition Match.cc:48
table::PointKey< double > crpix
Definition OldWcs.cc:129
table::PointKey< double > crval
Definition OldWcs.cc:128
int y
Definition SpanSet.cc:48
A FrameSet whose frames can be referenced by domain name.
Definition FrameDict.h:67
A 2-dimensional celestial WCS that transform pixels to ICRS RA/Dec, using the LSST standard for pixel...
Definition SkyWcs.h:117
Eigen::Matrix2d getCdMatrix() const
Get the 2x2 CD matrix at the pixel origin.
Definition SkyWcs.cc:199
std::string writeString() const
Serialize this SkyWcs to a string, using the same format as writeStream.
Definition SkyWcs.cc:342
SkyWcs & operator=(SkyWcs const &)=delete
lsst::geom::SpherePoint pixelToSky(lsst::geom::Point2D const &pixel) const
Compute sky position(s) from pixel position(s)
Definition SkyWcs.h:334
std::shared_ptr< SkyWcs > copyAtShiftedPixelOrigin(lsst::geom::Extent2D const &shift) const
Return a copy of this SkyWcs with the pixel origin shifted by the specified amount.
Definition SkyWcs.cc:208
static std::shared_ptr< SkyWcs > readStream(std::istream &is)
Deserialize a SkyWcs from an input stream.
Definition SkyWcs.cc:304
std::shared_ptr< SkyWcs > getTanWcs(lsst::geom::Point2D const &pixel) const
Get a local TAN WCS approximation to this WCS at the specified pixel position.
Definition SkyWcs.cc:201
lsst::geom::Angle getPixelScale() const
Get the pixel scale at the pixel origin.
Definition SkyWcs.h:208
bool isPersistable() const noexcept override
Return true if this particular object can be persisted using afw::table::io.
Definition SkyWcs.h:268
static std::shared_ptr< SkyWcs > readString(std::string &str)
Deserialize a SkyWcs from a string, using the same format as readStream.
Definition SkyWcs.cc:332
lsst::geom::SpherePoint getSkyOrigin() const
Get the sky origin, the celestial fiducial point.
Definition SkyWcs.cc:182
std::string toString() const override
Create a string representation of this object.
Definition SkyWcs.cc:352
lsst::geom::Point2D getPixelOrigin() const
Get the pixel origin, in pixels, using the LSST convention.
Definition SkyWcs.h:215
lsst::geom::AffineTransform linearizePixelToSky(lsst::geom::SpherePoint const &coord, lsst::geom::AngleUnit const &skyUnit) const
Return the local linear approximation to pixelToSky at a point given in sky coordinates.
Definition SkyWcs.cc:275
bool operator==(SkyWcs const &other) const
Equality is based on the string representations being equal.
Definition SkyWcs.cc:156
lsst::geom::AffineTransform linearizeSkyToPixel(lsst::geom::SpherePoint const &coord, lsst::geom::AngleUnit const &skyUnit) const
Return the local linear approximation to skyToPixel at a point given in sky coordinates.
Definition SkyWcs.cc:284
SkyWcs(SkyWcs const &)=default
std::shared_ptr< const TransformPoint2ToSpherePoint > getTransform() const
Get a TransformPoint2ToSpherePoint that transforms pixels to sky in the forward direction and sky to ...
Definition SkyWcs.h:257
bool operator!=(SkyWcs const &other) const
Definition SkyWcs.h:136
lsst::geom::Point2D skyToPixel(lsst::geom::SpherePoint const &sky) const
Compute pixel position(s) from sky position(s)
Definition SkyWcs.h:349
lsst::geom::SpherePoint pixelToSky(double x, double y) const
Definition SkyWcs.h:337
std::string getPythonModule() const override
Return the fully-qualified Python module that should be imported to guarantee that its factory is reg...
Definition SkyWcs.cc:379
bool isFlipped() const
Does the WCS follow the convention of North=Up, East=Left?
Definition SkyWcs.cc:296
std::shared_ptr< daf::base::PropertyList > getFitsMetadata(bool precise=false) const
Return the WCS as FITS WCS metadata.
Definition SkyWcs.cc:213
std::string getPersistenceName() const override
Return the unique name used to persist this object and look up its factory.
Definition SkyWcs.cc:377
bool hasFitsApproximation() const
Does this SkyWcs have an approximate SkyWcs that can be represented as standard FITS WCS?
Definition SkyWcs.h:364
void write(OutputArchiveHandle &handle) const override
Write the object to one or more catalogs.
Definition SkyWcs.cc:381
SkyWcs & operator=(SkyWcs &&)=delete
SkyWcs(SkyWcs &&)=default
bool equals(typehandling::Storable const &other) const noexcept override
Compare this object to another Storable.
Definition SkyWcs.cc:373
~SkyWcs() override=default
void writeStream(std::ostream &os) const
Serialize this SkyWcs to an output stream.
Definition SkyWcs.cc:337
std::shared_ptr< typehandling::Storable > cloneStorable() const override
Create a new SkyWcs that is a copy of this one.
Definition SkyWcs.cc:348
static std::string getShortClassName()
Definition SkyWcs.cc:294
std::shared_ptr< const ast::FrameDict > getFrameDict() const
Get the contained FrameDict.
Definition SkyWcs.cc:262
bool isFits() const
Return true getFitsMetadata(true) will succeed, false if not.
Definition SkyWcs.cc:264
std::vector< lsst::geom::SpherePoint > pixelToSky(std::vector< lsst::geom::Point2D > const &pixels) const
Definition SkyWcs.h:340
std::vector< lsst::geom::Point2D > skyToPixel(std::vector< lsst::geom::SpherePoint > const &sky) const
Definition SkyWcs.h:352
A CRTP facade class for subclasses of Persistable.
io::OutputArchiveHandle OutputArchiveHandle
Interface supporting iteration over heterogenous containers.
Definition Storable.h:58
Class for storing generic metadata.
Definition PropertySet.h:66
An affine coordinate transformation consisting of a linear transformation and an offset.
A class representing an angle.
Definition Angle.h:128
A class used to convert scalar POD types such as double to Angle.
Definition Angle.h:71
Point in an unspecified spherical coordinate system.
Definition SpherePoint.h:57
bool strip
Definition fits.cc:930
std::shared_ptr< SkyWcs > makeSkyWcs(daf::base::PropertySet &metadata, bool strip=false)
Construct a SkyWcs from FITS keywords.
Definition SkyWcs.cc:521
std::shared_ptr< TransformPoint2ToPoint2 > getPixelToIntermediateWorldCoords(SkyWcs const &wcs, bool simplify=true)
Return a transform from pixel coordinates to intermediate world coordinates.
Definition SkyWcs.cc:559
std::shared_ptr< SkyWcs > makeTanSipWcs(lsst::geom::Point2D const &crpix, lsst::geom::SpherePoint const &crval, Eigen::Matrix2d const &cdMatrix, Eigen::MatrixXd const &sipA, Eigen::MatrixXd const &sipB)
Construct a TAN-SIP SkyWcs with forward SIP distortion terms and an iterative inverse.
Definition SkyWcs.cc:538
std::ostream & operator<<(std::ostream &os, GenericEndpoint const &endpoint)
Print "GenericEndpoint(_n_)" to the ostream where _n_ is the number of axes, e.g. "GenericAxes(4)".
Definition Endpoint.cc:239
Eigen::Matrix2d makeCdMatrix(lsst::geom::Angle const &scale, lsst::geom::Angle const &orientation=0 *lsst::geom::degrees, bool flipX=false)
Make a WCS CD matrix.
Definition SkyWcs.cc:133
std::shared_ptr< TransformPoint2ToSpherePoint > getIntermediateWorldCoordsToSky(SkyWcs const &wcs, bool simplify=true)
Return a transform from intermediate world coordinates to sky.
Definition SkyWcs.cc:553
std::shared_ptr< SkyWcs > makeModifiedWcs(TransformPoint2ToPoint2 const &pixelTransform, SkyWcs const &wcs, bool modifyActualPixels)
Create a new SkyWcs whose pixels are transformed by pixelTransform, as described below.
Definition SkyWcs.cc:486
std::shared_ptr< TransformPoint2ToPoint2 > makeWcsPairTransform(SkyWcs const &src, SkyWcs const &dst)
A Transform obtained by putting two SkyWcs objects "back to back".
Definition SkyWcs.cc:146
std::shared_ptr< SkyWcs > makeFlippedWcs(SkyWcs const &wcs, bool flipLR, bool flipTB, lsst::geom::Point2D const &center)
Return a copy of a FITS-WCS with pixel positions flipped around a specified center.
Definition SkyWcs.cc:467
AngleUnit constexpr degrees
constant with units of degrees
Definition Angle.h:110