Isis 3 Programmer Reference
ZeroBufferFit.h
1#ifndef ZeroBufferFit_h
2#define ZeroBufferFit_h
3
10/* SPDX-License-Identifier: CC0-1.0 */
11
12#include <string>
13#include <vector>
14
15#include "HiCalTypes.h"
16#include "HiCalUtil.h"
17#include "HiCalConf.h"
18#include "NonLinearLSQ.h"
19#include "Module.h"
20#include "IException.h"
21
22namespace Isis {
23
42 class ZeroBufferFit : public NonLinearLSQ, public Module {
43
44 public:
45 ZeroBufferFit(const HiCalConf &conf);
47 virtual ~ZeroBufferFit() { }
48
54 void setBin(int bin) { _timet.setBin(bin); }
55
61 void setLineTime(double ltime) { _timet.setLineTime(ltime); }
62
71 inline int size() const { return (_data.dim()); }
72
84 int nSize() const { return (_b2.dim()); }
85
94 int nParms() const { return (4); }
95
97 void setabsErr(double absError) { _absErr = absError; }
99 void setrelErr(double relError) { _relErr = relError; }
101 double absErr() const { return (_absErr); }
103 double relErr() const { return (_relErr); }
104
105 HiVector Solve(const HiVector &d);
106 NLVector guess();
107 int checkIteration(const int Iter, const NLVector &fitcoefs,
108 const NLVector &uncerts, double cplxconj,
109 int Istatus);
110
111 NLVector f_x(const NLVector &a);
112 NLMatrix df_x(const NLVector &a);
113
115 double Chisq() const { return (_chisq); }
117 int DoF() const { return (nSize() - nParms()); }
118
119 HiVector Yfit() const;
120 HiVector Normalize(const HiVector &v);
121
122 private:
123 HiLineTimeEqn _timet; // This is the X data set
124 HiVector _data; // Typically will be the HiRISE buffer data
125 HiVector _b2; // Data buffer used in fitting
126 double _absErr; // Absolute error convergence test
127 double _relErr; // Relative error convergence test
128 double _maxLog; // Maximum log value to constrain
129 int _badLines; // Exclude lines at end of buffer
130 int _sWidth; // Width of guestimate filter
131 int _sIters; // Filter interations
132 bool _skipFit; // Skip fitting and pass input through
133 bool _useLinFit; // Use linear fit on failure of LM, else Zf
134 int _minLines; // Minimum number of lines to fit (Default: 100)
135 HiVector _cc; // Parameter of 2-D fit
136 HiVector _guess; // Initial guestimate of solutions
137 HiVector _coefs; // Coefficients of solution
138 HiVector _uncert; // Uncertanties
139 double _chisq; // ChiSq of NonLinear equation
140
141 HiVector poly_fit(const HiVector &d, const double line0 = 0.0) const;
142 virtual void printOn(std::ostream &o) const;
144 int goodLines(const HiVector &d) const { return (d.dim() - _badLines); }
146 bool gotGoodLines(const HiVector &d) const {
147 return (goodLines(d) >= _minLines);
148 }
149 };
150
151} // namespace Isis
152#endif
Compute HiRISE line times.
Definition HiCalUtil.h:361
Module manages HiRISE calibration vectors from various sources.
Definition Module.h:39
NonLinearLSQ Computes a fit using a Levenberg-Marquardt algorithm.
Computes non-linear lsq fit of HiRISE Drift (Zd module)
virtual void printOn(std::ostream &o) const
Provides virtualized dump of data from this module.
int nParms() const
Number of parameter to be fitted.
bool gotGoodLines(const HiVector &d) const
Determines if the vector contains any valid lines.
HiVector Yfit() const
Computes the solution vector using current coefficents.
HiVector Normalize(const HiVector &v)
Compute normalized solution vector from result.
int size() const
Returns the size of the data buffer.
void setrelErr(double relError)
Sets the relative error parameter
double relErr() const
Returns the current value of the relative error.
int DoF() const
Returns the Degrees of Freedom.
NLMatrix df_x(const NLVector &a)
Computes the first derivative of the function at the current iteration.
void setabsErr(double absError)
Sets the absolute error parameter.
int checkIteration(const int Iter, const NLVector &fitcoefs, const NLVector &uncerts, double cplxconj, int Istatus)
Computes the interation check for convergence.
void setBin(int bin)
Set binning/summing mode.
NLVector guess()
Compute the initial guess of the fit.
double absErr() const
Returns the current value of the absolute error.
HiVector Solve(const HiVector &d)
Compute non-linear fit to (typically) ZeroBufferSmooth module.
double Chisq() const
Returns the Chi-Square value of the fit solution.
HiVector poly_fit(const HiVector &d, const double line0=0.0) const
Compute a polyonomial fit using multivariate statistics.
void setLineTime(double ltime)
Set scan line time.
int nSize() const
Returns the size of the fitted buffer.
NLVector f_x(const NLVector &a)
Computes the function value at the current iteration.
int goodLines(const HiVector &d) const
Returns the number of good lines in the image.
virtual ~ZeroBufferFit()
Destructor.
ZeroBufferFit(const HiCalConf &conf)
Compute second level drift correction (Zf module)
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
TNT::Array1D< double > HiVector
1-D Buffer
Definition HiCalTypes.h:27