20#include "hdrl_cat_seeing.h"
22#include "hdrl_cat_utils_sort.h"
58 ap_t *ap, cpl_size nrows,
double *ellipt,
double *pkht,
59 double **areal,
double *work,
double *fwhm)
61 double log5t = log(0.5 / ap->thresh);
62 double log2 = log(2.);
66 for (cpl_size i = 0; i < nrows; i++) {
67 if (ellipt[i] < 0.2 && pkht[i] < 30000. && pkht[i] > 10. * ap->thresh) {
69 double aper = (log5t + log(pkht[i])) / log2 + 1.;
70 cpl_size iaper = (cpl_size)aper;
72 double delaper = aper - iaper;
74 if (iaper > 0 && iaper < NAREAL && areal[1][i] > 0.) {
76 double area = (1. - delaper) * areal[iaper - 1][i] + delaper * areal[iaper][i];
78 work[ii++] = CPL_MATH_2_SQRTPI * sqrt(area);
86 sort_array(work, ii,
sizeof(*work), HDRL_SORT_DOUBLE, CPL_SORT_ASCENDING);
88 *fwhm = work[ii / 3 - 1];
91 double arg = 0.25 * CPL_MATH_PI * pow(*fwhm, 2.) - 1;
93 *fwhm = 2. * sqrt(CPL_MAX(0., arg / CPL_MATH_PI));
100 return CPL_ERROR_NONE;
cpl_error_code hdrl_seeing(ap_t *ap, cpl_size nrows, double *ellipt, double *pkht, double **areal, double *work, double *fwhm)
Work out the median seeing.
cpl_error_code sort_array(void *a, cpl_size nE, cpl_size sE, hdrl_sort_type type, cpl_sort_direction dir)
sort_array hdrl function for order arrays with know types. Using the type parameter for select the co...