39#include "catalogue/casu_utils.h"
40#include "casu_stats.h"
97extern int casu_genbpm(casu_fits **flatlist,
int nflatlist, cpl_image *master,
98 float lthr,
float hthr,
const char *expkey,
99 cpl_array **bpm_array,
int *nbad,
float *badfrac,
101 cpl_image *master_img,*im;
102 unsigned char *rejmask,*rejplus;
103 cpl_propertylist *drs;
104 int npi,i,status2,*bpm,k,nbmax;
105 float *idata,med,sig,low,high;
106 const char *fctid =
"casu_genbpm";
113 if (*status != CASU_OK)
118 if (master == NULL) {
121 &master_img,NULL,&rejmask,&rejplus,&drs,&status2);
124 freepropertylist(drs);
125 if (status2 != CASU_OK) {
126 cpl_msg_error(fctid,
"Flat combination failed");
127 *status = CASU_FATAL;
131 master_img = cpl_image_duplicate(master);
136 idata = cpl_image_get_data_float(master_img);
139 cpl_image_divide_scalar(master_img,(
double)med);
140 for (i = 0; i < npi; i++)
146 bpm = cpl_calloc(npi,
sizeof(
int));
150 for (i = 0; i < nflatlist; i++) {
152 cpl_image_divide(im,master_img);
153 idata = cpl_image_get_data_float(im);
159 cpl_image_divide_scalar(im,med);
163 low = 1.0 - lthr*sig/med;
164 high = 1.0 + hthr*sig/med;
168 for (k = 0; k < npi; k++)
169 if (idata[k] < low || idata[k] > high)
171 cpl_image_delete(im);
173 cpl_image_delete(master_img);
178 nbmax = max(2,nflatlist/4);
179 for (i = 0; i < npi; i++) {
180 if (bpm[i] >= nbmax) {
186 *badfrac = (float)(*nbad)/(float)npi;
187 *bpm_array = cpl_array_wrap_int(bpm,npi);
cpl_image * casu_fits_get_image(casu_fits *p)
int casu_imcombine(casu_fits **fset, casu_fits **fsetv, int nfits, int combtype, int scaletype, int xrej, float thresh, const char *expkey, cpl_image **outimage, cpl_image **outvimage, unsigned char **rejmask, unsigned char **rejplus, cpl_propertylist **drs, int *status)
Stack images into a mean or median image with rejection.
int casu_genbpm(casu_fits **flatlist, int nflatlist, cpl_image *master, float lthr, float hthr, const char *expkey, cpl_array **bpm_array, int *nbad, float *badfrac, int *status)
Generate a bad pixel mask from a list of dome flats.
void casu_medmad(float *data, unsigned char *bpm, long np, float *med, float *mad)
void casu_medsig(float *data, unsigned char *bpm, long np, float *med, float *sig)
long casu_getnpts(cpl_image *in)
Get the number of pixels in a 2d image.