lsst.ip.diffim  13.0-22-g3839dbb+2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
KernelSolution.h
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
12 #ifndef LSST_IP_DIFFIM_KERNELSOLUTION_H
13 #define LSST_IP_DIFFIM_KERNELSOLUTION_H
14 
15 #include <memory>
16 #include "Eigen/Core"
17 
18 #include "lsst/afw/math.h"
19 #include "lsst/afw/geom.h"
20 #include "lsst/afw/image.h"
21 
22 namespace lsst {
23 namespace ip {
24 namespace diffim {
25 
26  /*
27  * @brief Method used to solve for M and B
28  */
29 
31  public:
32  typedef std::shared_ptr<KernelSolution> Ptr;
33  typedef lsst::afw::math::Kernel::Pixel PixelT;
34  typedef lsst::afw::image::Image<lsst::afw::math::Kernel::Pixel> ImageT;
35 
37  NONE = 0,
40  LU = 3,
42  };
43 
46  SVD = 1
47  };
48 
49  explicit KernelSolution(Eigen::MatrixXd mMat,
50  Eigen::VectorXd bVec,
51  bool fitForBackground);
52  explicit KernelSolution(bool fitForBackground);
53  explicit KernelSolution();
54 
55  virtual ~KernelSolution() {};
56  virtual void solve();
57  virtual void solve(Eigen::MatrixXd const& mMat,
58  Eigen::VectorXd const& bVec);
60  virtual double getConditionNumber(ConditionNumberType conditionType);
61  virtual double getConditionNumber(Eigen::MatrixXd const& mMat, ConditionNumberType conditionType);
62 
63  inline Eigen::MatrixXd const& getM() {return _mMat;}
64  inline Eigen::VectorXd const& getB() {return _bVec;}
65  void printM() {std::cout << _mMat << std::endl;}
66  void printB() {std::cout << _bVec << std::endl;}
67  void printA() {std::cout << _aVec << std::endl;}
68  inline int getId() const { return _id; }
69 
70  protected:
71  int _id;
72  Eigen::MatrixXd _mMat;
73  Eigen::VectorXd _bVec;
74  Eigen::VectorXd _aVec;
77  static int _SolutionId;
78 
79  };
80 
81  template <typename InputT>
83  public:
84  typedef std::shared_ptr<StaticKernelSolution<InputT> > Ptr;
85 
86  StaticKernelSolution(lsst::afw::math::KernelList const& basisList,
87  bool fitForBackground);
88  virtual ~StaticKernelSolution() {};
89 
90  /* Overrides KernelSolution */
91  void solve();
92 
93  /* Used by RegularizedKernelSolution */
94  virtual void build(lsst::afw::image::Image<InputT> const &templateImage,
95  lsst::afw::image::Image<InputT> const &scienceImage,
96  lsst::afw::image::Image<lsst::afw::image::VariancePixel> const &varianceEstimate);
97  virtual std::shared_ptr<lsst::afw::math::Kernel> getKernel();
98  virtual std::shared_ptr<lsst::afw::image::Image<lsst::afw::math::Kernel::Pixel>> makeKernelImage();
99  virtual double getBackground();
100  virtual double getKsum();
101  virtual std::pair<std::shared_ptr<lsst::afw::math::Kernel>, double> getSolutionPair();
102 
103  protected:
104  Eigen::MatrixXd _cMat;
105  Eigen::VectorXd _iVec;
106  Eigen::VectorXd _ivVec;
107 
108  std::shared_ptr<lsst::afw::math::Kernel> _kernel;
109  double _background;
110  double _kSum;
111 
112  void _setKernel();
113  void _setKernelUncertainty();
114  };
115 
116 
117  template <typename InputT>
119  public:
120  typedef std::shared_ptr<MaskedKernelSolution<InputT> > Ptr;
121 
122  MaskedKernelSolution(lsst::afw::math::KernelList const& basisList,
123  bool fitForBackground);
124  virtual ~MaskedKernelSolution() {};
125  virtual void buildOrig(lsst::afw::image::Image<InputT> const &templateImage,
126  lsst::afw::image::Image<InputT> const &scienceImage,
127  lsst::afw::image::Image<lsst::afw::image::VariancePixel>
128  const &varianceEstimate,
129  lsst::afw::image::Mask<lsst::afw::image::MaskPixel> pixelMask);
130 
131  virtual void buildWithMask(lsst::afw::image::Image<InputT> const &templateImage,
132  lsst::afw::image::Image<InputT> const &scienceImage,
133  lsst::afw::image::Image<lsst::afw::image::VariancePixel>
134  const &varianceEstimate,
135  lsst::afw::image::Mask<lsst::afw::image::MaskPixel> const &pixelMask);
136 
137  virtual void buildSingleMaskOrig(lsst::afw::image::Image<InputT> const &templateImage,
138  lsst::afw::image::Image<InputT> const &scienceImage,
139  lsst::afw::image::Image<lsst::afw::image::VariancePixel>
140  const &varianceEstimate,
141  lsst::afw::geom::Box2I maskBox);
142  };
143 
144 
145 
146  template <typename InputT>
148  public:
149  typedef std::shared_ptr<RegularizedKernelSolution<InputT> > Ptr;
150 
151  RegularizedKernelSolution(lsst::afw::math::KernelList const& basisList,
152  bool fitForBackground,
153  Eigen::MatrixXd const& hMat,
154  lsst::pex::policy::Policy policy
155  );
157  void solve();
158  double getLambda() {return _lambda;}
159  double estimateRisk(double maxCond);
160 
161  /* Include additive term (_lambda * _hMat) in M matrix? */
162  Eigen::MatrixXd getM(bool includeHmat = true);
163 
164  private:
165  Eigen::MatrixXd const _hMat;
166  double _lambda;
167  lsst::pex::policy::Policy _policy;
168 
169  std::vector<double> _createLambdaSteps();
170  };
171 
172 
174  public:
175  typedef std::shared_ptr<SpatialKernelSolution> Ptr;
176 
177  /* Creates a polynomial SpatialFunction */
178  SpatialKernelSolution(lsst::afw::math::KernelList const& basisList,
179  lsst::afw::math::Kernel::SpatialFunctionPtr spatialKernelFunction,
180  lsst::afw::math::Kernel::SpatialFunctionPtr background,
181  lsst::pex::policy::Policy policy
182  );
183 
185 
186  void addConstraint(float xCenter, float yCenter,
187  Eigen::MatrixXd const& qMat,
188  Eigen::VectorXd const& wVec);
189 
190  void solve();
191  std::shared_ptr<lsst::afw::image::Image<lsst::afw::math::Kernel::Pixel>> makeKernelImage(lsst::afw::geom::Point2D const& pos);
192  std::pair<std::shared_ptr<lsst::afw::math::LinearCombinationKernel>,
193  lsst::afw::math::Kernel::SpatialFunctionPtr> getSolutionPair();
194 
195  private:
196  lsst::afw::math::Kernel::SpatialFunctionPtr _spatialKernelFunction;
198 
199  std::shared_ptr<lsst::afw::math::LinearCombinationKernel> _kernel;
200  lsst::afw::math::Kernel::SpatialFunctionPtr _background;
201  double _kSum;
202 
203  lsst::pex::policy::Policy _policy;
204  int _nbases;
205  int _nkt;
206  int _nbt;
207  int _nt;
208 
209  void _setKernel();
210  void _setKernelUncertainty();
211  };
212 
213 }}} // end of namespace lsst::ip::diffim
214 
215 #endif
void _setKernel()
Set kernel after solution.
std::shared_ptr< SpatialKernelSolution > Ptr
std::shared_ptr< RegularizedKernelSolution< InputT > > Ptr
virtual std::pair< std::shared_ptr< lsst::afw::math::Kernel >, double > getSolutionPair()
Eigen::VectorXd _bVec
Derived least squares B vector.
SpatialKernelSolution(lsst::afw::math::KernelList const &basisList, lsst::afw::math::Kernel::SpatialFunctionPtr spatialKernelFunction, lsst::afw::math::Kernel::SpatialFunctionPtr background, lsst::pex::policy::Policy policy)
virtual std::shared_ptr< lsst::afw::image::Image< lsst::afw::math::Kernel::Pixel > > makeKernelImage()
KernelSolvedBy _solvedBy
Type of algorithm used to make solution.
StaticKernelSolution(lsst::afw::math::KernelList const &basisList, bool fitForBackground)
double _background
Derived differential background estimate.
Eigen::VectorXd _iVec
Vectorized I.
lsst::afw::math::Kernel::Pixel PixelT
Eigen::VectorXd _ivVec
Inverse variance.
std::pair< std::shared_ptr< lsst::afw::math::LinearCombinationKernel >, lsst::afw::math::Kernel::SpatialFunctionPtr > getSolutionPair()
Eigen::VectorXd const & getB()
RegularizedKernelSolution(lsst::afw::math::KernelList const &basisList, bool fitForBackground, Eigen::MatrixXd const &hMat, lsst::pex::policy::Policy policy)
virtual void build(lsst::afw::image::Image< InputT > const &templateImage, lsst::afw::image::Image< InputT > const &scienceImage, lsst::afw::image::Image< lsst::afw::image::VariancePixel > const &varianceEstimate)
std::shared_ptr< StaticKernelSolution< InputT > > Ptr
void _setKernel()
Set kernel after solution.
virtual std::shared_ptr< lsst::afw::math::Kernel > getKernel()
double _kSum
Derived kernel sum.
static int _SolutionId
Unique identifier for solution.
void _setKernelUncertainty()
Not implemented.
bool _fitForBackground
Background terms included in fit.
lsst::afw::image::Image< lsst::afw::math::Kernel::Pixel > ImageT
virtual double getConditionNumber(ConditionNumberType conditionType)
int _id
Unique ID for object.
std::shared_ptr< KernelSolution > Ptr
virtual void buildOrig(lsst::afw::image::Image< InputT > const &templateImage, lsst::afw::image::Image< InputT > const &scienceImage, lsst::afw::image::Image< lsst::afw::image::VariancePixel > const &varianceEstimate, lsst::afw::image::Mask< lsst::afw::image::MaskPixel > pixelMask)
lsst::afw::math::Kernel::SpatialFunctionPtr _spatialKernelFunction
Spatial function for Kernel.
Eigen::MatrixXd const _hMat
Regularization weights.
std::shared_ptr< lsst::afw::image::Image< lsst::afw::math::Kernel::Pixel > > makeKernelImage(lsst::afw::geom::Point2D const &pos)
int _nbt
Number of background terms.
Eigen::MatrixXd _mMat
Derived least squares M matrix.
bool _constantFirstTerm
Is the first term constant.
lsst::pex::policy::Policy _policy
Policy to control processing.
double _kSum
Derived kernel sum.
MaskedKernelSolution(lsst::afw::math::KernelList const &basisList, bool fitForBackground)
lsst::afw::math::Kernel::SpatialFunctionPtr _background
Spatial background model.
void addConstraint(float xCenter, float yCenter, Eigen::MatrixXd const &qMat, Eigen::VectorXd const &wVec)
int _nkt
Number of kernel terms.
std::shared_ptr< lsst::afw::math::LinearCombinationKernel > _kernel
Spatial convolution kernel.
int _nbases
Number of basis functions.
virtual void buildSingleMaskOrig(lsst::afw::image::Image< InputT > const &templateImage, lsst::afw::image::Image< InputT > const &scienceImage, lsst::afw::image::Image< lsst::afw::image::VariancePixel > const &varianceEstimate, lsst::afw::geom::Box2I maskBox)
virtual void buildWithMask(lsst::afw::image::Image< InputT > const &templateImage, lsst::afw::image::Image< InputT > const &scienceImage, lsst::afw::image::Image< lsst::afw::image::VariancePixel > const &varianceEstimate, lsst::afw::image::Mask< lsst::afw::image::MaskPixel > const &pixelMask)
Eigen::MatrixXd const & getM()
Eigen::VectorXd _aVec
Derived least squares solution matrix.
double _lambda
Overall regularization strength.
std::shared_ptr< lsst::afw::math::Kernel > _kernel
Derived single-object convolution kernel.
std::shared_ptr< MaskedKernelSolution< InputT > > Ptr
void _setKernelUncertainty()
Not implemented.