37 #include "vircam_utils.h"
38 #include "vircam_dfs.h"
39 #include "vircam_mods.h"
40 #include "vircam_fits.h"
41 #include "../vircam/catalogue/imcore.h"
45 static int vircam_imcore_create(cpl_plugin *) ;
46 static int vircam_imcore_exec(cpl_plugin *) ;
47 static int vircam_imcore_destroy(cpl_plugin *) ;
48 static int vircam_imcore_test(cpl_parameterlist *, cpl_frameset *) ;
49 static int vircam_imcore_save(cpl_frameset *framelist,
50 cpl_parameterlist *parlist);
51 static void vircam_imcore_init(
void);
52 static void vircam_imcore_tidy(
void);
74 } vircam_imcore_config ;
86 static cpl_frame *product_frame = NULL;
88 #define BUZZ_OFF {vircam_imcore_tidy(); return(-1);}
90 static char vircam_imcore_description[] =
91 "vircam_imcore -- VIRCAM catalogue generation recipe.\n\n"
92 "Extract objects from an image and write the catalogue to a FITS table.\n\n"
93 "If more than one file of each type is specified in the SOF only the \n"
94 "first will be used and the rest will be ingored\n"
95 "The program requires the following files in the SOF:\n\n"
97 " -----------------------------------------------------------------------\n"
98 " %-21s An input image\n"
99 " %-21s A master confidence maps\n"
166 int cpl_plugin_get_info(cpl_pluginlist *list) {
167 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
168 cpl_plugin *plugin = &recipe->interface;
169 char alldesc[SZ_ALLDESC];
170 (void)snprintf(alldesc,SZ_ALLDESC,vircam_imcore_description,
171 VIRCAM_TEST_SCIENCE_RAW,VIRCAM_CAL_CONF);
174 cpl_plugin_init(plugin,
176 VIRCAM_BINARY_VERSION,
177 CPL_PLUGIN_TYPE_RECIPE,
179 "VIRCAM recipe to extract objects from a frame [test]",
184 vircam_imcore_create,
186 vircam_imcore_destroy);
188 cpl_pluginlist_append(list,plugin);
205 static int vircam_imcore_create(cpl_plugin *plugin) {
211 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
212 recipe = (cpl_recipe *)plugin;
218 recipe->parameters = cpl_parameterlist_new();
222 p = cpl_parameter_new_value(
"vircam.vircam_imcore.ipix",
224 "Minimum pixel area for each detected object",
225 "vircam.vircam_imcore",5);
226 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ipix");
227 cpl_parameterlist_append(recipe->parameters,p);
231 p = cpl_parameter_new_value(
"vircam.vircam_imcore.thresh",
233 "Detection threshold in sigma above sky",
234 "vircam.vircam_imcore",2.0);
235 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"thr");
236 cpl_parameterlist_append(recipe->parameters,p);
240 p = cpl_parameter_new_value(
"vircam.vircam_imcore.icrowd",
241 CPL_TYPE_BOOL,
"Use deblending?",
242 "vircam.vircam_imcore",0);
243 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"icrowd");
244 cpl_parameterlist_append(recipe->parameters,p);
248 p = cpl_parameter_new_value(
"vircam.vircam_imcore.rcore",
249 CPL_TYPE_DOUBLE,
"Value of Rcore in pixels",
250 "vircam.vircam_imcore",4.0);
251 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"rcore");
252 cpl_parameterlist_append(recipe->parameters,p);
256 p = cpl_parameter_new_value(
"vircam.vircam_imcore.nbsize",
257 CPL_TYPE_INT,
"Background smoothing box size",
258 "vircam.vircam_imcore",64);
259 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"nb");
260 cpl_parameterlist_append(recipe->parameters,p);
264 p = cpl_parameter_new_value(
"vircam.vircam_imcore.filtfwhm",
266 "FWHM of smoothing kernel in pixels",
267 "vircam.vircam_imcore",2.0);
268 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"filtfwhm");
269 cpl_parameterlist_append(recipe->parameters,p);
273 p = cpl_parameter_new_enum(
"vircam.vircam_imcore.cattype",
274 CPL_TYPE_INT,
"Catalogue type",
275 "vircam.vircam_imcore",2,5,1,2,3,4,6);
276 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"cattype");
277 cpl_parameterlist_append(recipe->parameters,p);
281 p = cpl_parameter_new_range(
"vircam.vircam_imcore.extenum",
283 "Extension number to be done, 0 == all",
284 "vircam.vircam_imcore",
286 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
287 cpl_parameterlist_append(recipe->parameters,p);
302 static int vircam_imcore_destroy(cpl_plugin *plugin) {
307 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
308 recipe = (cpl_recipe *)plugin;
312 cpl_parameterlist_delete(recipe->parameters);
324 static int vircam_imcore_exec(cpl_plugin *plugin) {
329 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
330 recipe = (cpl_recipe *)plugin;
334 return(vircam_imcore_test(recipe->parameters,recipe->frames));
346 static int vircam_imcore_test(cpl_parameterlist *parlist,
347 cpl_frameset *framelist) {
348 const char *fctid=
"vircam_imcore";
350 int j,jst,jfn,retval,ipix,icrowd,nbsize,mcattype,status;
352 float thresh,rcore,filtfwhm;
356 vircam_imcore_init();
360 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imcore.ipix");
361 vircam_imcore_config.ipix = cpl_parameter_get_int(p);
362 ipix = vircam_imcore_config.ipix;
363 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imcore.thresh");
364 vircam_imcore_config.threshold = (float)cpl_parameter_get_double(p);
365 thresh = vircam_imcore_config.threshold;
366 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imcore.icrowd");
367 vircam_imcore_config.icrowd = cpl_parameter_get_bool(p);
368 icrowd = vircam_imcore_config.icrowd;
369 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imcore.rcore");
370 vircam_imcore_config.rcore = (float)cpl_parameter_get_double(p);
371 rcore = vircam_imcore_config.rcore;
372 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imcore.filtfwhm");
373 vircam_imcore_config.filtfwhm = (float)cpl_parameter_get_double(p);
374 filtfwhm = vircam_imcore_config.filtfwhm;
375 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imcore.nbsize");
376 vircam_imcore_config.nbsize = cpl_parameter_get_int(p);
377 nbsize = vircam_imcore_config.nbsize;
378 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imcore.cattype");
379 vircam_imcore_config.cattype = cpl_parameter_get_int(p);
380 mcattype = vircam_imcore_config.cattype;
381 p = cpl_parameterlist_find(parlist,
"vircam.vircam_imcore.extenum");
382 vircam_imcore_config.extenum = cpl_parameter_get_int(p);
387 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
388 vircam_imcore_tidy();
396 cpl_msg_error(fctid,
"Cannot labelise the input frameset");
400 VIRCAM_TEST_SCIENCE_RAW)) == NULL) {
401 cpl_msg_error(fctid,
"Cannot find any image frames in input frameset");
405 VIRCAM_CAL_CONF)) == NULL) {
406 cpl_msg_info(fctid,
"No confidence map specified. Proceding without one");
414 if (jst == -1 || jfn == -1) {
415 cpl_msg_error(fctid,
"Unable to continue");
416 vircam_imcore_tidy();
419 for (j = jst; j <= jfn; j++) {
420 cpl_msg_info(fctid,
"Processing extension %" CPL_SIZE_FORMAT,
423 isfirst = (j == jst);
428 if (ps.imgf == NULL) {
429 vircam_imcore_tidy();
437 (void)
vircam_imcore(ps.imgf,ps.conff,ipix,thresh,icrowd,rcore,
438 nbsize,mcattype,filtfwhm,&(ps.outcat),&status);
439 if (status != VIR_OK) {
440 cpl_msg_error(fctid,
"Error extracting objects in extension %" CPL_SIZE_FORMAT,
451 retval = vircam_imcore_save(framelist,parlist);
453 cpl_msg_error(fctid,
"Error saving products in extension %" CPL_SIZE_FORMAT,
460 freetfits(ps.outcat);
464 vircam_imcore_tidy();
477 static int vircam_imcore_save(cpl_frameset *framelist,
478 cpl_parameterlist *parlist) {
479 const char *recipeid =
"vircam_imcore";
480 const char *fctid =
"vircam_imcore_save";
481 const char *outfile =
"imcoretab.fits";
482 cpl_propertylist *elist,*plist;
490 product_frame = cpl_frame_new();
491 cpl_frame_set_filename(product_frame,outfile);
492 cpl_frame_set_tag(product_frame,VIRCAM_PRO_OBJCAT_TEST);
493 cpl_frame_set_type(product_frame,CPL_FRAME_TYPE_TABLE);
494 cpl_frame_set_group(product_frame,CPL_FRAME_GROUP_PRODUCT);
495 cpl_frame_set_level(product_frame,CPL_FRAME_LEVEL_FINAL);
501 parlist,(
char *)recipeid,
502 "?Dictionary?",NULL,0);
508 parlist,(
char *)recipeid,
509 "?Dictionary?",NULL);
514 outfile,CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
515 cpl_msg_error(fctid,
"Cannot save product table");
516 cpl_frame_delete(product_frame);
519 cpl_frameset_insert(framelist,product_frame);
529 parlist,(
char *)recipeid,
530 "?Dictionary?",NULL);
535 outfile,CPL_IO_EXTEND) != CPL_ERROR_NONE) {
536 cpl_msg_error(fctid,
"Cannot save product table");
550 static void vircam_imcore_init(
void) {
565 static void vircam_imcore_tidy(
void) {
566 freespace(ps.labels);
571 freetfits(ps.outcat);
const char * vircam_get_license(void)
cpl_table * vircam_tfits_get_table(vir_tfits *p)
int vircam_compare_tags(const cpl_frame *frame1, const cpl_frame *frame2)
cpl_frame * vircam_frameset_subgroup_1(cpl_frameset *frameset, cpl_size *labels, cpl_size nlab, const char *tag)
cpl_propertylist * vircam_tfits_get_ehu(vir_tfits *p)
vir_tfits * vircam_tfits_wrap(cpl_table *tab, vir_tfits *model, cpl_propertylist *phu, cpl_propertylist *ehu)
void vircam_dfs_set_product_exten_header(cpl_propertylist *plist, cpl_frame *frame, cpl_frameset *frameset, cpl_parameterlist *parlist, char *recipeid, const char *dict, cpl_frame *inherit)
void vircam_dfs_set_product_primary_header(cpl_propertylist *plist, cpl_frame *frame, cpl_frameset *frameset, cpl_parameterlist *parlist, char *recipeid, const char *dict, cpl_frame *inherit, int synch)
cpl_table * vircam_dummy_catalogue(int type)
cpl_propertylist * vircam_fits_get_phu(vir_fits *p)
vir_fits * vircam_fits_load(cpl_frame *frame, cpl_type type, int nexten)
cpl_propertylist * vircam_fits_get_ehu(vir_fits *p)
cpl_propertylist * vircam_tfits_get_phu(vir_tfits *p)
int vircam_imcore(vir_fits *infile, vir_fits *conf, int ipix, float threshold, int icrowd, float rcore, int nbsize, int cattyp, float filtfwhm, vir_tfits **outtab, int *status)
Generate object catalogues from input images.
void vircam_exten_range(int inexten, const cpl_frame *fr, int *out1, int *out2)
int vircam_dfs_set_groups(cpl_frameset *set)