| 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.