lsst.ip.diffim g2959009a90+58e637096c
Loading...
Searching...
No Matches
BuildSpatialKernelVisitor.cc
Go to the documentation of this file.
1// -*- lsst-c++ -*-
12#include <memory>
13#include "boost/timer.hpp"
14
15#include "Eigen/Core"
16#include "Eigen/Cholesky"
17#include "Eigen/LU"
18#include "Eigen/QR"
19
20#include "lsst/afw/math.h"
21#include "lsst/geom.h"
22#include "lsst/log/Log.h"
25
29
30namespace afwMath = lsst::afw::math;
31namespace geom = lsst::afw::geom;
32namespace dafBase = lsst::daf::base;
34
35namespace lsst {
36namespace ip {
37namespace diffim {
38namespace detail {
72 template<typename PixelT>
74 lsst::afw::math::KernelList const& basisList,
75 lsst::geom::Box2I const& regionBBox,
77 ) :
78 afwMath::CandidateVisitor(),
79 _kernelSolution(),
80 _nCandidates(0)
81 {
82 int spatialKernelOrder = ps.getAsInt("spatialKernelOrder");
83 afwMath::Kernel::SpatialFunctionPtr spatialKernelFunction;
84
85 int fitForBackground = ps.getAsBool("fitForBackground");
86 int spatialBgOrder = fitForBackground ? ps.getAsInt("spatialBgOrder") : 0;
87 afwMath::Kernel::SpatialFunctionPtr background;
88
89 std::string spatialModelType = ps.getAsString("spatialModelType");
90 if (spatialModelType == "chebyshev1") {
91 spatialKernelFunction = afwMath::Kernel::SpatialFunctionPtr(
92 new afwMath::Chebyshev1Function2<double>(spatialKernelOrder, geom::Box2D(regionBBox))
93 );
94 background = afwMath::Kernel::SpatialFunctionPtr(
95 new afwMath::Chebyshev1Function2<double>(spatialBgOrder, geom::Box2D(regionBBox))
96 );
97
98 }
99 else if (spatialModelType == "polynomial") {
100 spatialKernelFunction = afwMath::Kernel::SpatialFunctionPtr(
101 new afwMath::PolynomialFunction2<double>(spatialKernelOrder)
102 );
103 background = afwMath::Kernel::SpatialFunctionPtr(
104 new afwMath::PolynomialFunction2<double>(spatialBgOrder)
105 );
106 }
107 else {
109 str(boost::format("Invalid type (%s) for spatial models") %
110 spatialModelType));
111 }
112
113 /* */
114
116 new SpatialKernelSolution(basisList, spatialKernelFunction, background, ps));
117 };
118
119
120 template<typename PixelT>
123 ) {
124 KernelCandidate<PixelT> *kCandidate = dynamic_cast<KernelCandidate<PixelT> *>(candidate);
125 if (kCandidate == NULL) {
127 "Failed to cast SpatialCellCandidate to KernelCandidate");
128 }
129 if (!(kCandidate->isInitialized())) {
130 kCandidate->setStatus(afwMath::SpatialCellCandidate::BAD);
131 LOGL_DEBUG("TRACE2.ip.diffim.BuildSpatialKernelVisitor.processCandidate",
132 "Cannot process candidate %d, continuing", kCandidate->getId());
133 return;
134 }
135
136 LOGL_DEBUG("TRACE5.ip.diffim.BuildSpatialKernelVisitor.processCandidate",
137 "Processing candidate %d", kCandidate->getId());
138 _nCandidates += 1;
139
140 /*
141 Build the spatial kernel from the most recent fit, e.g. if its Pca
142 you want to build a spatial model on the Pca basis, not original
143 basis
144 */
145 _kernelSolution->addConstraint(kCandidate->getXCenter(),
146 kCandidate->getYCenter(),
147 kCandidate->getKernelSolution(
149 )->getM(),
150 kCandidate->getKernelSolution(
152 )->getB());
153
154 }
155
156 template<typename PixelT>
158 _kernelSolution->solve();
159 }
160
161 template<typename PixelT>
162 std::pair<std::shared_ptr<afwMath::LinearCombinationKernel>, afwMath::Kernel::SpatialFunctionPtr>
164 return _kernelSolution->getSolutionPair();
165 }
166
167 typedef float PixelT;
169
170}}}} // end of namespace lsst::ip::diffim::detail
Declaration of BuildSpatialKernelVisitor.
#define LSST_EXCEPT(type,...)
Class used by SpatialModelCell for spatial Kernel fitting.
Declaration of classes to store the solution for convolution kernels.
#define LOGL_DEBUG(logger, message...)
std::string getAsString(std::string const &name) const
int getAsInt(std::string const &name) const
bool getAsBool(std::string const &name) const
Class stored in SpatialCells for spatial Kernel fitting.
std::shared_ptr< StaticKernelSolution< PixelT > > getKernelSolution(CandidateSwitch cand) const
Creates a spatial kernel and background from a list of candidates.
std::pair< std::shared_ptr< lsst::afw::math::LinearCombinationKernel >, lsst::afw::math::Kernel::SpatialFunctionPtr > getSolutionPair()
void processCandidate(lsst::afw::math::SpatialCellCandidate *candidate)
BuildSpatialKernelVisitor(lsst::afw::math::KernelList const &basisList, lsst::geom::Box2I const &regionBBox, lsst::daf::base::PropertySet const &ps)