38 #include "vircam_mods.h"
39 #include "vircam_utils.h"
40 #include "vircam_stats.h"
92 extern int vircam_genbpm(vir_fits **flatlist,
int nflatlist,
float lthr,
93 float hthr, cpl_array **bpm_array,
int *nbad,
94 float *badfrac,
int *status) {
95 cpl_image *master_img,*im;
96 unsigned char *rejmask,*rejplus;
97 cpl_propertylist *drs;
98 int npi,i,status2,*bpm,k,nbmax;
99 float *idata,med,sig,low,high;
100 const char *fctid =
"vircam_genbpm";
107 if (*status != VIR_OK)
114 &rejplus,&drs,&status2);
117 freepropertylist(drs);
118 if (status2 != VIR_OK) {
119 cpl_msg_error(fctid,
"Flat combination failed");
126 idata = cpl_image_get_data_float(master_img);
129 cpl_image_divide_scalar(master_img,(
double)med);
130 for (i = 0; i < npi; i++)
136 *bpm_array = cpl_array_new((cpl_size)npi,CPL_TYPE_INT);
137 bpm = cpl_array_get_data_int(*bpm_array);
138 for (i = 0; i < npi; i++)
143 for (i = 0; i < nflatlist; i++) {
145 cpl_image_divide(im,master_img);
146 idata = cpl_image_get_data_float(im);
152 cpl_image_divide_scalar(im,med);
156 low = 1.0 - lthr*sig/med;
157 high = 1.0 + hthr*sig/med;
161 for (k = 0; k < npi; k++)
162 if (idata[k] < low || idata[k] > high)
164 cpl_image_delete(im);
166 cpl_image_delete(master_img);
171 nbmax = max(2,nflatlist/4);
172 for (i = 0; i < npi; i++) {
173 if (bpm[i] >= nbmax) {
179 *badfrac = (float)(*nbad)/(float)npi;