54 cpl_array* values=NULL;
57 cpl_binary ** pbinary = NULL;
66 cpl_image* result=NULL;
71 nimg=cpl_imagelist_get_size(iml);
73 img=cpl_imagelist_get(iml,0);
75 sx=cpl_image_get_size_x(img);
76 sy=cpl_image_get_size_y(img);
81 pdata = cpl_malloc (nimg *
sizeof (
float *));
82 assure (pdata != NULL, cpl_error_get_code (),
83 "Cant allocate memory for data pointers");
86 pbinary = cpl_malloc (nimg *
sizeof (cpl_binary *));
87 assure (pbinary != NULL, cpl_error_get_code (),
88 "Cant allocate memory for binary pointers");
91 for (k = 0; k < nimg; k++) {
92 check( pdata[k] = cpl_image_get_data_float(cpl_imagelist_get (iml, k)));
93 check( pbinary[k] = cpl_mask_get_data(cpl_image_get_bpm(
94 cpl_imagelist_get(iml, k))));
97 result=cpl_image_new(sx,sy,CPL_TYPE_FLOAT);
98 pima=cpl_image_get_data_float(result);
101 values=cpl_array_new(nimg,CPL_TYPE_FLOAT);
104 for (i = 0; i < sx_sy; i++){
107 for (count=0, k = 0; k < nimg; k++) {
108 if ( ( (pbinary[k])[i] == CPL_BINARY_0) ) {
109 cpl_array_set_float(values,k,(pdata[k])[i]);
112 cpl_array_set_invalid(values,k);
118 pima[i]=cpl_array_get_median(values);
120 pima[i]=(pdata[0])[i];
129 cpl_array_delete(values);
152 cpl_array* values=NULL;
154 float **pdata = NULL;
155 cpl_binary ** pbinary = NULL;
164 cpl_image* result=NULL;
169 nimg=cpl_imagelist_get_size(iml);
171 img=cpl_imagelist_get(iml,0);
173 sx=cpl_image_get_size_x(img);
174 sy=cpl_image_get_size_y(img);
179 pdata = cpl_malloc (nimg *
sizeof (
float *));
180 assure (pdata != NULL, cpl_error_get_code (),
181 "Cant allocate memory for data pointers");
184 pbinary = cpl_malloc (nimg *
sizeof (cpl_binary *));
185 assure (pbinary != NULL, cpl_error_get_code (),
186 "Cant allocate memory for binary pointers");
189 for (k = 0; k < nimg; k++) {
190 check( pdata[k] = cpl_image_get_data_float(cpl_imagelist_get (iml, k)));
191 check( pbinary[k] = cpl_mask_get_data(cpl_image_get_bpm(
192 cpl_imagelist_get(iml, k))));
195 result=cpl_image_new(sx,sy,CPL_TYPE_FLOAT);
196 pima=cpl_image_get_data_float(result);
199 values=cpl_array_new(nimg,CPL_TYPE_FLOAT);
202 for (i = 0; i < sx_sy; i++){
205 for (count=0, k = 0; k < nimg; k++) {
206 if ( ( (pbinary[k])[i] == CPL_BINARY_0) ) {
207 cpl_array_set_float(values,k,(pdata[k])[i]);
210 cpl_array_set_invalid(values,k);
215 mean=cpl_array_get_mean(values);
220 cpl_array_delete(values);
225 cpl_array_delete(values);
237 cpl_imagelist* org_errs_iml,
238 cpl_imagelist* org_qual_iml,
239 cpl_propertylist* phead)
256 check(naxis3=cpl_imagelist_get_size(org_data_iml));
261 wave_max = wave_min + cdelt3*naxis3;
262 cpl_ensure_code(wave_max > wave_cut, CPL_ERROR_ILLEGAL_INPUT);
263 zcut = (int) ( (wave_cut-wave_min) / cdelt3 + 0.5 );
264 cpl_ensure_code(zcut <= naxis3, CPL_ERROR_ILLEGAL_INPUT);
266 if (zcut == naxis3) {
267 return CPL_ERROR_NONE;
271 valid=cpl_vector_new(naxis3);
272 cpl_vector_add_scalar(valid,1.);
273 data=cpl_vector_get_data(valid);
274 for(k=zcut+1;k<naxis3;k++) {
279 cpl_imagelist_erase(org_data_iml,valid);
280 cpl_imagelist_erase(org_errs_iml,valid);
281 cpl_imagelist_erase(org_qual_iml,valid);
286 return cpl_error_get_code();
#define XSH_ASSURE_NOT_NULL_MSG(pointer, msg)
#define assure(CONDITION, ERROR_CODE,...)
double xsh_pfits_get_cdelt3(const cpl_propertylist *plist)
find out the cdelt3
double xsh_pfits_get_crval3(const cpl_propertylist *plist)
find out the crval3
void xsh_free_vector(cpl_vector **v)
Deallocate a vector and set the pointer to NULL.
#define XSH_UVB_DICHROIC_WAVE_CUT
cpl_image * xsh_imagelist_collapse_median_create(cpl_imagelist *iml)
Compute median on imagelist.
cpl_image * xsh_imagelist_collapse_mean_create(cpl_imagelist *iml)
Compute mean on imagelist.
cpl_error_code xsh_imagelist_cut_dichroic_uvb(cpl_imagelist *org_data_iml, cpl_imagelist *org_errs_iml, cpl_imagelist *org_qual_iml, cpl_propertylist *phead)