39 LOG_LOGGER _log =
LOG_GET(
"jointcal.SimpleAstrometryModel");
47 bool initFromWcs,
unsigned nNotFit,
unsigned order)
48 : _skyToTangentPlane(projectionHandler)
53 for (
auto i = ccdImageList.
cbegin(); i != ccdImageList.
cend(); ++i, ++count) {
55 if (count < nNotFit) {
73 while (
unsigned(pol.
getNpar()) > 2 * nObj) {
74 LOGLS_WARN(_log,
"Reducing polynomial order from " 75 << pol.
getOrder() <<
", due to too few sources (" << nObj
76 <<
" vs. " << pol.
getNpar() <<
" parameters)");
92 pol = pol * shiftAndNormalize.
inverted();
101 return findMapping(ccdImage);
105 if (whatToFit.
find(
"Distortions") == std::string::npos) {
106 LOGLS_ERROR(_log,
"AssignIndices was called and Distortions is *not* in whatToFit.");
109 unsigned index = firstIndex;
110 for (
auto i = _myMap.begin(); i != _myMap.end(); ++i) {
120 for (
auto &i : _myMap) {
121 auto mapping = i.second.get();
122 mapping->offsetParams(delta.segment(mapping->getIndex(), mapping->getNpar()));
127 for (
auto &i : _myMap) i.second->freezeErrorTransform();
132 for (
auto &i : _myMap) {
133 total += i.second->getNpar();
152 afw::geom::Point2D(0, 0),
153 afw::geom::SpherePoint(tangentPoint.x, tangentPoint.y, afw::geom::degrees),
155 auto iwcToSkyMap = iwcToSkyWcs->getFrameDict()->getMapping(
"PIXELS",
"SKY");
156 auto skyFrame = iwcToSkyWcs->getFrameDict()->getFrame(
"SKY");
159 frameDict.
addFrame(
"IWC", *iwcToSkyMap, *skyFrame);
160 return std::make_shared<afw::geom::SkyWcs>(frameDict);
165 if (i == _myMap.end())
167 "SimpleAstrometryModel cannot find CcdImage " + ccdImage.
getName());
168 return i->second.get();
AstrometryTransform const & getTransform(CcdImage const &ccdImage) const
Access to mappings.
SimpleAstrometryModel(CcdImageList const &ccdImageList, const std::shared_ptr< ProjectionHandler const > projectionHandler, bool initFromWCS, unsigned nNotFit=0, unsigned order=3)
Sky2TP is just a name, it can be anything.
const AstrometryMapping * getMapping(CcdImage const &) const override
Mapping associated to a given CcdImage.
void offsetParams(Eigen::VectorXd const &delta) override
Offset the parameters by the provided amounts (by -delta).
std::shared_ptr< AstrometryTransform > const getPixelToTangentPlane() const
std::string getName() const
Return the _name that identifies this ccdImage.
Mapping implementation for a polynomial transformation.
unsigned getNpar() const
Number of parameters in total.
const std::shared_ptr< AstrometryTransform const > getSkyToTangentPlane(CcdImage const &ccdImage) const override
the mapping of sky coordinates (i.e.
std::shared_ptr< afw::geom::SkyWcs > makeSkyWcs(CcdImage const &ccdImage) const override
Make a SkyWcs that contains this model.
void setIndex(unsigned i)
void addFrame(int iframe, Mapping const &map, Frame const &frame) override
rectangle with sides parallel to axes.
AstrometryTransformLinear normalizeCoordinatesTransform(const Frame &frame)
Returns the transformation that maps the input frame along both axes to [-1,1].
Class for a simple mapping implementing a generic AstrometryTransform.
int getTotalParameters() const override
Return the total number of parameters in this model.
This one is the Tangent Plane (called gnomonic) projection (from celestial sphere to tangent plane) ...
T dynamic_pointer_cast(T... args)
#define LSST_EXCEPT(type,...)
MeasuredStarList const & getCatalogForFit() const
Gets the catalog to be used for fitting, which may have been cleaned-up.
std::shared_ptr< SkyWcs > makeSkyWcs(daf::base::PropertySet &metadata, bool strip=false)
Eigen::Matrix2d makeCdMatrix(lsst::geom::Angle const &scale, lsst::geom::Angle const &orientation=0 *lsst::geom::degrees, bool flipX=false)
virtual class needed in the abstraction of the distortion model
CcdImageKey getHashKey() const
Handler of an actual image from a single CCD.
unsigned assignIndices(std::string const &whatToFit, unsigned firstIndex) override
Positions the various parameter sets into the parameter vector, starting at firstIndex.
void freezeErrorTransform() override
Frame const & getImageFrame() const
Frame in pixels.
#define LOGLS_ERROR(logger, message)
#define LOGLS_WARN(logger, message)