38 #include <casu_utils.h>
39 #include <casu_mods.h>
40 #include <casu_stats.h>
41 #include "vircam_mods.h"
93 extern int vircam_genbpm(casu_fits **flatlist,
int nflatlist,
float lthr,
94 float hthr, cpl_array **bpm_array,
int *nbad,
95 float *badfrac,
int *status) {
96 cpl_image *master_img,*im;
97 unsigned char *rejmask,*rejplus;
98 cpl_propertylist *drs;
99 int npi,i,status2,*bpm,k,nbmax;
100 float *idata,med,sig,low,high;
101 const char *fctid =
"vircam_genbpm";
108 if (*status != CASU_OK)
115 &master_img,NULL,&rejmask,&rejplus,&drs,&status2);
118 freepropertylist(drs);
119 if (status2 != CASU_OK) {
120 cpl_msg_error(fctid,
"Flat combination failed");
121 *status = CASU_FATAL;
127 idata = cpl_image_get_data_float(master_img);
130 cpl_image_divide_scalar(master_img,(
double)med);
131 for (i = 0; i < npi; i++)
137 *bpm_array = cpl_array_new((cpl_size)npi,CPL_TYPE_INT);
138 bpm = cpl_array_get_data_int(*bpm_array);
139 for (i = 0; i < npi; i++)
144 for (i = 0; i < nflatlist; i++) {
146 cpl_image_divide(im,master_img);
147 idata = cpl_image_get_data_float(im);
153 cpl_image_divide_scalar(im,med);
157 low = 1.0 - lthr*sig/med;
158 high = 1.0 + hthr*sig/med;
162 for (k = 0; k < npi; k++)
163 if (idata[k] < low || idata[k] > high)
165 cpl_image_delete(im);
167 cpl_image_delete(master_img);
172 nbmax = max(2,nflatlist/4);
173 for (i = 0; i < npi; i++) {
174 if (bpm[i] >= nbmax) {
180 *badfrac = (float)(*nbad)/(float)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.
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.
int vircam_genbpm(casu_fits **flatlist, int nflatlist, float lthr, float hthr, cpl_array **bpm_array, int *nbad, float *badfrac, int *status)
Generate a bad pixel mask from a list of dome flats.