LSSTApplications
20.0.0
LSSTDataManagementBasePackage
|
Go to the documentation of this file.
42 static double sq(
double x) {
return x *
x; }
50 double det = vxx * vyy - vxy * vxy;
63 stream <<
" number of elements " << starMatchList.
size() <<
std::endl;
70 unsigned s = starMatchList.size();
73 for (
auto const &it : starMatchList) res[count++] = it.computeChi2(
transform);
77 static unsigned chi2_cleanup(StarMatchList &starMatchList,
const double chi2Cut,
79 unsigned erased = starMatchList.removeAmbiguities(
transform);
80 for (
auto smi = starMatchList.begin(); smi != starMatchList.end();) {
81 if (smi->chi2 > chi2Cut) {
82 smi = starMatchList.erase(smi);
104 _chi2 = _transform->fit(*
this);
114 if (_chi2 <= 0)
return;
115 unsigned npair = int(
size());
116 if (npair == 0)
break;
121 for (
auto &starMatch : *
this)
122 chi2_array[
count++] = starMatch.chi2 = starMatch.computeChi2(*_transform);
124 std::sort(chi2_array.get(), chi2_array.get() + npair);
125 double median = (npair & 1) ? chi2_array[npair / 2]
126 : (chi2_array[npair / 2 - 1] + chi2_array[npair / 2]) * 0.5;
129 cut = sq(nSigmas) * median;
130 nremoved = chi2_cleanup(*
this, cut, *_transform);
137 int deno = (2. *
size() - _transform->getNpar());
138 return (deno > 0) ?
sqrt(_dist2 / deno) : -1;
142 for (
auto &smi : *
this) smi.setDistance(
transform);
146 if (!which)
return 0;
148 int initial_count =
size();
157 return (initial_count -
size());
162 setTransform(std::make_shared<AstrometryTransformLinearShift>());
164 setTransform(std::make_shared<AstrometryTransformLinear>());
175 if (!_transform)
return nullptr;
177 auto old_transform = _transform->clone();
178 double old_chi2 = _chi2;
183 auto inverted_transform = _transform->clone();
188 return inverted_transform;
200 for (
auto &starMatch : *
this) {
208 for (
auto const &starMatch : *
this) {
209 if (starMatch.computeDistance(identity) < mindist) n++;
221 for (
auto const &starMatch : *
this) {
231 stream <<
" ================================================================" <<
std::endl
236 <<
" ================================================================" <<
std::endl;
241 for (
auto const &starMatch : starMatchList)
242 dist2 +=
transform.apply(starMatch.point1).computeDist2(starMatch.point2);
247 unsigned s = starMatchList.
size();
250 for (
unsigned k = 0; k < s; ++k) chi2 += chi2s[k];
unsigned removeAmbiguities(const AstrometryTransform &transform, int which=3)
cleans up the std::list of pairs for pairs that share one of their stars, keeping the closest one.
double computeChi2(const StarMatchList &L, const AstrometryTransform &transform)
the actual chi2
int recoveredNumber(double mindist) const
count the number of elements for which distance is < mindist
void printTransform(std::ostream &stream=std::cout) const
print the matching transformation quality (transform, chi2, residual)
double computeChi2(const AstrometryTransform &transform) const
returns the chi2 (using errors in the FatPoint's)
double computeResidual() const
returns the average 1d Residual (last call to refineTransform)
void cutTail(int nKeep)
deletes the tail of the match std::list
void swap()
swaps elements 1 and 2 of each starmatch in std::list.
bool compareStar2(const StarMatch &one, const StarMatch &two)
void setDistance(const AstrometryTransform &transform)
Sets the distance (residual) field of all std::list elements. Mandatory before sorting on distances.
void applyTransform(StarMatchList &transformed, const AstrometryTransform *priorTransform, const AstrometryTransform *posteriorTransform=nullptr) const
enables to get a transformed StarMatchList.
void setTransform(const AstrometryTransform *transform)
sets a transform between the 2 std::lists and deletes the previous or default one....
std::ostream & operator<<(std::ostream &stream, AstrometryMapping const &mapping)
StarMatch erase(StarMatch ... args)
void setTransformOrder(int order)
set transform according to the given order.
A Point with uncertainties.
A base class for image defects.
bool compareStar1(const StarMatch &one, const StarMatch &two)
int getTransformOrder() const
returns the order of the used transform
bool sameStar2(const StarMatch &one, const StarMatch &two)
StarMatch unique(StarMatch ... args)
void refineTransform(double nSigmas)
removes pairs beyond nSigmas in distance (where the sigma scale is set by the fit) and iterates until...
double getChi2() const
access to the chi2 of the last call to refineTransform.
std::unique_ptr< AstrometryTransform > inverseTransform()
returns the inverse transform (swap, fit(refineTransform) , and swap).
double computeDist2(const StarMatchList &S, const AstrometryTransform &transform)
sum of distance squared
bool sameStar1(const StarMatch &one, const StarMatch &two)
A hanger for star associations.