38#include "irplib_ksigma_clip.h"
39#include "irplib_hist.h"
40#include "irplib_utils.h"
62#define pdist(x1,y1,x2,y2) (((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)))
64#define cpl_drand() ((double)rand()/(double)RAND_MAX)
97detmon_rm_bpixs(cpl_image **,
116detmon_fill_parlist(cpl_parameterlist * parlist,
117 const char *recipe_name,
118 const char *pipeline_name,
126 int pars_counter = 0;
128 group_name = cpl_sprintf(
"%s.%s", pipeline_name, recipe_name);
129 assert(group_name != NULL);
131#define insert_par(PARNAME, PARDESC, PARVALUE, PARTYPE) \
133 char * par_name = cpl_sprintf("%s.%s", group_name, PARNAME); \
135 assert(par_name != NULL); \
136 p = cpl_parameter_new_value(par_name, PARTYPE, \
137 PARDESC, group_name, PARVALUE); \
138 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, PARNAME); \
139 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); \
140 cpl_parameterlist_append(parlist, p); \
141 cpl_free(par_name); \
147 while(pars_counter < npars) {
148 char *name = va_arg(ap,
char *);
149 char *desc = va_arg(ap,
char *);
150 char *type = va_arg(ap,
char *);
152 if(!strcmp(type,
"CPL_TYPE_INT")) {
153 int v1 = va_arg(ap,
int);
155 insert_par(name, desc, v1, CPL_TYPE_INT);
156 }
else if(!strcmp(type,
"CPL_TYPE_BOOL")) {
157 char *v2 = va_arg(ap,
char *);
159 if(!strcmp(v2,
"CPL_FALSE"))
160 insert_par(name, desc, CPL_FALSE, CPL_TYPE_BOOL);
161 if(!strcmp(v2,
"CPL_TRUE"))
162 insert_par(name, desc, CPL_TRUE, CPL_TYPE_BOOL);
163 }
else if(!strcmp(type,
"CPL_TYPE_STRING")) {
164 char *v2 = va_arg(ap,
char *);
166 insert_par(name, desc, v2, CPL_TYPE_STRING);
167 }
else if(!strcmp(type,
"CPL_TYPE_DOUBLE")) {
168 double v3 = va_arg(ap,
double);
169 insert_par(name, desc, v3, CPL_TYPE_DOUBLE);
177 cpl_free(group_name);
195detmon_retrieve_par_int(
const char *parn,
196 const char *pipeline_name,
197 const char *recipe_name,
198 const cpl_parameterlist * parlist)
201 const cpl_parameter *par;
204 par_name = cpl_sprintf(
"%s.%s.%s", pipeline_name, recipe_name, parn);
205 assert(par_name != NULL);
206 par = cpl_parameterlist_find_const(parlist, par_name);
207 value = cpl_parameter_get_int(par);
225detmon_retrieve_par_double(
const char *parn,
226 const char *pipeline_name,
227 const char *recipe_name,
228 const cpl_parameterlist * parlist)
231 const cpl_parameter *par;
234 par_name = cpl_sprintf(
"%s.%s.%s", pipeline_name, recipe_name, parn);
235 assert(par_name != NULL);
236 par = cpl_parameterlist_find_const(parlist, par_name);
237 value = cpl_parameter_get_double(par);
255irplib_pfits_get_exptime(
const cpl_propertylist * plist)
259 exptime = cpl_propertylist_get_double(plist,
"EXPTIME");
275detmon_fill_prolist(
const char * procatg,
276 const char * protype,
277 const char * protech,
278 cpl_boolean proscience)
280 cpl_propertylist * prolist = cpl_propertylist_new();
282 cpl_propertylist_append_string(prolist, CPL_DFS_PRO_CATG, procatg);
283 cpl_propertylist_append_bool(prolist, CPL_DFS_PRO_SCIENCE, proscience);
285 cpl_propertylist_append_string(prolist, CPL_DFS_PRO_TYPE, protype);
288 cpl_propertylist_append_string(prolist, CPL_DFS_PRO_TECH, protech);
309detmon_rm_bpixs(cpl_image ** image,
310 const double kappa,
int nffts,
int nsamples)
314 float *data = cpl_image_get_data_float(*image);
316 for(i = 0; i < nffts; i++) {
317 for(j = 0; j < nsamples; j++) {
318 float neighbours = 0;
328 neighbours += *(data + (i - 1) * nsamples + j);
332 neighbours += *(data + (i + 1) * nsamples + j);
336 neighbours += *(data + i * nsamples + (j - 1));
339 if(j < nsamples - 1) {
340 neighbours += *(data + i * nsamples + (j + 1));
343 average = neighbours / nneighs;
345 if(*(data + i * nsamples + j) < average * (-1 * kappa) ||
346 *(data + i * nsamples + j) > average * (kappa)) {
348 *(data + i * nsamples + j) = average;
352 if(*(data + i * nsamples + j) > average * (-1 * kappa) ||
353 *(data + i * nsamples + j) < average * (kappa)) {
355 *(data + i * nsamples + j) = average;
363 return cpl_error_get_code();
368detmon_print_rec_status(
void) {
369 if(cpl_error_get_code() != CPL_ERROR_NONE) {
371 cpl_msg_error(cpl_func,
"%s",(
const char*) cpl_error_get_message());
372 cpl_msg_error(cpl_func,
"%s",(
const char*) cpl_error_get_where());