39 #include <casu_utils.h>
40 #include <casu_mods.h>
41 #include <casu_mask.h>
43 #include "vircam_utils.h"
44 #include "vircam_pfits.h"
45 #include "vircam_dfs.h"
46 #include "vircam_mods.h"
47 #include "vircam_jmp_utils.h"
48 #include "vircam_paf.h"
52 static int vircam_standard_process_create(cpl_plugin *);
53 static int vircam_standard_process_exec(cpl_plugin *);
54 static int vircam_standard_process_destroy(cpl_plugin *);
55 static int vircam_standard_process(cpl_parameterlist *,cpl_frameset *);
56 static cpl_propertylist *vircam_standard_process_dummyqc(
int type);
59 static char vircam_standard_process_description[] =
60 "vircam_standard_process -- VIRCAM standard field processing recipe.\n\n"
61 "Process a complete pawprint for standard fields in VIRCAM data.\n"
62 "Remove instrumental signature, interleave microstep sequences (if done),\n"
63 "combine jitters, photometrically and astrometrically calibrate the pawprint\n"
64 "image. Photometric calibration can be done with 2mass and 1 other source\n\n"
65 "The program accepts the following files in the SOF:\n\n"
67 " -----------------------------------------------------------------------\n"
68 " %-21s A list of raw science images\n"
69 " %-21s A master dark frame\n"
70 " %-21s A master twilight flat frame\n"
71 " %-21s A channel table\n"
72 " %-21s A photometric calibration table\n"
73 " %-21s A readnoise/gain file\n"
74 " %-21s A master confidence map or\n"
75 " %-21s A master bad pixel mask\n"
76 " %-21s A master 2mass catalogue index\n"
77 " %-21s A second reference catalogue index\n"
78 "All of the above are required\n"
236 int cpl_plugin_get_info(cpl_pluginlist *list) {
237 cpl_recipe *recipe = cpl_calloc(1,
sizeof(*recipe));
238 cpl_plugin *plugin = &recipe->interface;
239 char alldesc[SZ_ALLDESC];
240 (void)snprintf(alldesc,SZ_ALLDESC,vircam_standard_process_description,
241 VIRCAM_STD_OBJECT_RAW,VIRCAM_CAL_DARK,
242 VIRCAM_CAL_TWILIGHT_FLAT,VIRCAM_CAL_CHANTAB,
243 VIRCAM_CAL_PHOTTAB,VIRCAM_CAL_READGAINFILE,VIRCAM_CAL_CONF,
244 VIRCAM_CAL_BPM,VIRCAM_CAL_2MASS,VIRCAM_CAL_REFCAT);
246 cpl_plugin_init(plugin,
248 VIRCAM_BINARY_VERSION,
249 CPL_PLUGIN_TYPE_RECIPE,
250 "vircam_standard_process",
251 "VIRCAM standard field processing recipe",
256 vircam_standard_process_create,
257 vircam_standard_process_exec,
258 vircam_standard_process_destroy);
260 cpl_pluginlist_append(list,plugin);
276 static int vircam_standard_process_create(cpl_plugin *plugin) {
282 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
283 recipe = (cpl_recipe *)plugin;
289 recipe->parameters = cpl_parameterlist_new();
293 p = cpl_parameter_new_value(
"vircam.vircam_standard_process.ipix",
295 "Minimum pixel area for each detected object",
296 "vircam.vircam_standard_process",5);
297 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ipix");
298 cpl_parameterlist_append(recipe->parameters,p);
302 p = cpl_parameter_new_value(
"vircam.vircam_standard_process.thresh",
304 "Detection threshold in sigma above sky",
305 "vircam.vircam_standard_process",2.0);
306 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"thr");
307 cpl_parameterlist_append(recipe->parameters,p);
311 p = cpl_parameter_new_value(
"vircam.vircam_standard_process.icrowd",
312 CPL_TYPE_BOOL,
"Use deblending?",
313 "vircam.vircam_standard_process",1);
314 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"icrowd");
315 cpl_parameterlist_append(recipe->parameters,p);
319 p = cpl_parameter_new_value(
"vircam.vircam_standard_process.rcore",
320 CPL_TYPE_DOUBLE,
"Value of Rcore in pixels",
321 "vircam.vircam_standard_process",3.0);
322 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"rcore");
323 cpl_parameterlist_append(recipe->parameters,p);
327 p = cpl_parameter_new_value(
"vircam.vircam_standard_process.nbsize",
328 CPL_TYPE_INT,
"Background smoothing box size",
329 "vircam.vircam_standard_process",64);
330 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"nb");
331 cpl_parameterlist_append(recipe->parameters,p);
335 p = cpl_parameter_new_value(
"vircam.vircam_standard_process.savecat",
336 CPL_TYPE_BOOL,
"Save catalogue?",
337 "vircam.vircam_standard_process",1);
338 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"savecat");
339 cpl_parameterlist_append(recipe->parameters,p);
344 p = cpl_parameter_new_value(
"vircam.vircam_standard_process.destripe",
345 CPL_TYPE_BOOL,
"Destripe images?",
346 "vircam.vircam_standard_process",1);
347 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"destripe");
348 cpl_parameterlist_append(recipe->parameters,p);
352 p = cpl_parameter_new_value(
"vircam.vircam_standard_process.skycor",
353 CPL_TYPE_BOOL,
"Do sky correction?",
354 "vircam.vircam_standard_process",1);
355 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"skycor");
356 cpl_parameterlist_append(recipe->parameters,p);
360 p = cpl_parameter_new_value(
"vircam.vircam_standard_process.savesimple",
361 CPL_TYPE_BOOL,
"Save simple images?",
362 "vircam.vircam_standard_process",0);
363 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"savesimple");
364 cpl_parameterlist_append(recipe->parameters,p);
368 p = cpl_parameter_new_range(
"vircam.vircam_standard_process.extenum",
370 "Extension number to be done, 0 == all",
371 "vircam.vircam_standard_process",
373 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
"ext");
374 cpl_parameterlist_append(recipe->parameters,p);
390 static int vircam_standard_process_exec(cpl_plugin *plugin) {
395 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
396 recipe = (cpl_recipe *)plugin;
400 return(vircam_standard_process(recipe->parameters,recipe->frames));
411 static int vircam_standard_process_destroy(cpl_plugin *plugin) {
416 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
417 recipe = (cpl_recipe *)plugin;
421 cpl_parameterlist_delete(recipe->parameters);
434 static int vircam_standard_process(cpl_parameterlist *parlist,
435 cpl_frameset *framelist) {
436 const char *fctid=
"vircam_standard_process";
438 int jst,jfn,status,j,i,retval,nusteps,isconf,live,ndit;
440 float readnoise,gain,gaincor_fac;
442 cpl_propertylist *ehu,*pp;
447 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
448 cpl_msg_error(fctid,
"Input framelist NULL or has no input data");
455 vircam_set_recipename(fctid,RECSTD);
464 p = cpl_parameterlist_find(parlist,
465 "vircam.vircam_standard_process.ipix");
466 vircam_jmp_set_config_ipix ( cpl_parameter_get_int(p) );
467 p = cpl_parameterlist_find(parlist,
468 "vircam.vircam_standard_process.thresh");
469 vircam_jmp_set_config_threshold ( (
float)cpl_parameter_get_double(p) );
470 p = cpl_parameterlist_find(parlist,
471 "vircam.vircam_standard_process.icrowd");
472 vircam_jmp_set_config_icrowd ( cpl_parameter_get_bool(p) );
473 p = cpl_parameterlist_find(parlist,
474 "vircam.vircam_standard_process.rcore");
475 vircam_jmp_set_config_rcore ( (
float)cpl_parameter_get_double(p) );
476 p = cpl_parameterlist_find(parlist,
477 "vircam.vircam_standard_process.nbsize");
478 vircam_jmp_set_config_nbsize ( cpl_parameter_get_int(p) );
479 p = cpl_parameterlist_find(parlist,
480 "vircam.vircam_standard_process.savecat");
481 vircam_jmp_set_config_savecat ( cpl_parameter_get_bool(p) );
482 p = cpl_parameterlist_find(parlist,
483 "vircam.vircam_standard_process.destripe");
484 vircam_jmp_set_config_destripe ( cpl_parameter_get_bool(p) );
485 p = cpl_parameterlist_find(parlist,
486 "vircam.vircam_standard_process.skycor");
487 vircam_jmp_set_config_skycor ( cpl_parameter_get_bool(p) );
488 p = cpl_parameterlist_find(parlist,
489 "vircam.vircam_standard_process.savesimple");
490 vircam_jmp_set_config_savesimple ( cpl_parameter_get_bool(p) );
491 p = cpl_parameterlist_find(parlist,
492 "vircam.vircam_standard_process.extenum");
493 vircam_jmp_set_config_extenum ( cpl_parameter_get_int(p) );
498 cpl_msg_error(fctid,
"Cannot identify RAW and CALIB frames");
507 cpl_msg_error(fctid,
"Cannot labelise the input frames");
514 if ((ps.science_frames =
516 VIRCAM_STD_OBJECT_RAW)) == NULL) {
517 cpl_msg_error(fctid,
"No science images to process!");
524 if ((ps.master_dark =
526 VIRCAM_CAL_DARK)) == NULL) {
527 cpl_msg_error(fctid,
"No master dark found");
534 if ((ps.master_twilight_flat =
536 VIRCAM_CAL_TWILIGHT_FLAT)) == NULL) {
537 cpl_msg_error(fctid,
"No master twilight flat found");
546 &status) != CASU_OK) {
547 cpl_msg_error(fctid,
"Error calculating gain corrections");
554 if ((ps.readgain_file =
556 VIRCAM_CAL_READGAINFILE)) == NULL) {
557 cpl_msg_error(fctid,
"No master readnoise/gain file found");
567 if ((ps.master_conf =
569 VIRCAM_CAL_CONF)) == NULL) {
571 if ((ps.master_conf =
573 VIRCAM_CAL_BPM)) == NULL) {
574 cpl_msg_error(fctid,
"No master confidence map found");
585 VIRCAM_CAL_CHANTAB)) == NULL) {
586 cpl_msg_error(fctid,
"No channel table found");
594 VIRCAM_CAL_PHOTTAB)) == NULL) {
595 cpl_msg_error(fctid,
"No photometric table found");
599 if ((ps.tphottab = cpl_table_load(cpl_frame_get_filename(ps.phottab),1,0)) == NULL) {
600 cpl_msg_error(fctid,
"Unable to load photometric table");
608 VIRCAM_CAL_2MASS)) == NULL) {
609 cpl_msg_info(fctid,
"No 2MASS index found -- cannot continue");
616 if (
casu_catpars(catindex,&(ps.catpath),&(ps.catname)) == CASU_FATAL) {
618 cpl_frame_delete(catindex);
621 cpl_frame_delete(catindex);
626 VIRCAM_CAL_REFCAT)) != NULL) {
630 if (
casu_catpars(catindex,&(ps.catpath2),&(ps.catname2)) == CASU_FATAL) {
632 cpl_frame_delete(catindex);
635 cpl_frame_delete(catindex);
640 pp = cpl_propertylist_load(cpl_frame_get_filename(cpl_frameset_get_position(ps.science_frames,0)),0);
642 cpl_msg_error(fctid,
"No value for NDIT available");
643 freepropertylist(pp);
647 cpl_propertylist_delete(pp);
654 (
const cpl_frame *)cpl_frameset_get_position(ps.science_frames,0),
656 if (jst == -1 || jfn == -1) {
657 cpl_msg_error(fctid,
"Unable to continue");
665 for (j = jst; j <= jfn; j++) {
666 vircam_jmp_set_isfirst (j == jst);
667 gaincor_fac = (ps.gaincors)[j-1];
673 if (ps.fdark == NULL) {
675 "Error loading master dark %s[%" CPL_SIZE_FORMAT
"]\n%s",
676 cpl_frame_get_filename(ps.master_dark),(cpl_size)j,
677 cpl_error_get_message());
681 ps.fflat =
casu_fits_load(ps.master_twilight_flat,CPL_TYPE_FLOAT,j);
682 if (ps.fflat == NULL) {
684 "Error loading master flat %s[%" CPL_SIZE_FORMAT
"]\n%s",
685 cpl_frame_get_filename(ps.master_twilight_flat),
686 (cpl_size)j,cpl_error_get_message());
691 if (ps.fconf == NULL) {
693 "Error loading master conf %s[%" CPL_SIZE_FORMAT
"]\n%s",
694 cpl_frame_get_filename(ps.master_conf),(cpl_size)j,
695 cpl_error_get_message());
705 "Error loading mask from master conf %s[%" CPL_SIZE_FORMAT
"]\n%s",
706 cpl_frame_get_filename(ps.master_conf),(cpl_size)j,
707 cpl_error_get_message());
712 if (ps.fchantab == NULL) {
714 "Error loading channel table %s[%" CPL_SIZE_FORMAT
"]\n%s",
715 cpl_frame_get_filename(ps.chantab),(cpl_size)j,
716 cpl_error_get_message());
723 ps.nscience = cpl_frameset_get_size(ps.science_frames);
725 if (ps.sci_fits == NULL) {
727 "Error loading science frames extension %" CPL_SIZE_FORMAT
": %s",
728 (cpl_size)j,cpl_error_get_message());
736 if (!ps.phupaf) freepropertylist(ps.phupaf);
742 for (i = 0; i < ps.nscience; i++) {
749 cpl_msg_error(fctid,
"Unable to correct CRVAL in %s",
762 cpl_msg_info(fctid,
"Doing stage1 corrections on %s",
764 for (i = 0; i < ps.nscience; i++) {
769 "[e-] Readnoise used in processing");
772 "[e-/adu] Gain used in processing");
774 cpl_msg_info(fctid,
"Detector is flagged dead in %s",
789 if (vircam_jmp_get_config_skycor()) {
790 cpl_msg_info(fctid,
"Doing sky correction");
793 for (i = 0; i < ps.nscience; i++) {
795 cpl_propertylist_update_string(pp,
"ESO DRS SKYCOR",
"none");
796 cpl_propertylist_set_comment(pp,
"ESO DRS SKYCOR",
797 "Sky correction method");
803 if (vircam_jmp_get_config_destripe()) {
804 cpl_msg_info(fctid,
"Doing destripe");
805 for (i = 0; i < ps.nscience; i++) {
814 cpl_msg_info(fctid,
"Doing illumination correction");
815 (void)strcpy(current_cat,ps.catname);
816 (void)strcpy(current_catpath,ps.catpath);
821 if (vircam_jmp_get_config_savesimple()) {
822 cpl_msg_info(fctid,
"Saving simple images");
832 cpl_msg_info(fctid,
"Saving illumination correction table");
833 dummyqc = vircam_standard_process_dummyqc(3);
836 freepropertylist(dummyqc);
839 freepropertylist(dummyqc);
847 if (retval != CASU_OK) {
848 cpl_msg_warning(fctid,
"Unable to get nusteps from header.\nAssuming no microstepping");
858 cpl_msg_info(fctid,
"No interleaving will be done");
860 cpl_msg_warning(fctid,
861 "Illegal number of microsteps: %" CPL_SIZE_FORMAT
"\nNo interleaving will be done",
863 ps.dith_input = cpl_malloc(ps.nscience*
sizeof(casu_fits *));
864 ps.dithc_input = cpl_malloc(
sizeof(casu_fits *));
865 for (i = 0; i < ps.nscience; i++) {
867 ps.dith_input[ps.ndith++] = ps.sci_fits[i];
869 ps.dithc_input[0] = ps.fconf;
878 cpl_msg_info(fctid,
"Interleaving");
880 cpl_msg_info(fctid,
"Saving superframe images");
890 cpl_msg_info(fctid,
"Working out jitter offsets");
892 cpl_msg_info(fctid,
"Stacking jittered frame");
897 cpl_msg_info(fctid,
"Doing object extraction");
902 cpl_msg_info(fctid,
"Matching objects with 2mass standards");
907 cpl_msg_info(fctid,
"Fitting a WCS");
912 cpl_msg_info(fctid,
"Doing 2mass photometric zeropoint calculation");
916 cpl_propertylist_update_float(ehu,
"ESO QC ZPT_2MASS",
917 cpl_propertylist_get_float(ehu,
"ESO QC MAGZPT"));
918 cpl_propertylist_set_comment(ehu,
"ESO QC ZPT_2MASS",
919 cpl_propertylist_get_comment(ehu,
"ESO QC MAGZPT"));
925 if (ps.catpath2 != NULL) {
926 freetable(ps.matchstds);
927 (void)strcpy(current_cat,ps.catname2);
928 (void)strcpy(current_catpath,ps.catpath2);
929 cpl_msg_info(fctid,
"Matching objects with %s standards",
932 cpl_msg_info(fctid,
"Doing %s photometric zeropoint calculation",
937 cpl_propertylist_update_float(ehu,
"ESO QC ZPT_STDS",
938 cpl_propertylist_get_float(ehu,
"ESO QC MAGZPT"));
939 cpl_propertylist_set_comment(ehu,
"ESO QC ZPT_STDS",
940 cpl_propertylist_get_comment(ehu,
"ESO QC MAGZPT"));
941 cpl_propertylist_update_string(ehu,
"ESO QC ZPT_STDS_CAT",
943 cpl_propertylist_set_comment(ehu,
"ESO QC ZPT_STDS_CAT",
944 "Catalogue used in zeropoint calc");
949 cpl_propertylist_update_float(ehu,
"ESO QC ZPT_STDS",0.0);
950 cpl_propertylist_set_comment(ehu,
"ESO QC ZPT_STDS",
951 "No secondary standard calib");
952 cpl_propertylist_update_string(ehu,
"ESO QC ZPT_STDS_CAT",
"");
953 cpl_propertylist_set_comment(ehu,
"ESO QC ZPT_STDS_CAT",
954 "No secondary standard catalogue");
960 cpl_msg_info(fctid,
"Saving stacked images");
961 dummyqc = vircam_standard_process_dummyqc(1);
964 freepropertylist(dummyqc);
967 freepropertylist(dummyqc);
968 if (vircam_jmp_get_config_savecat()) {
969 cpl_msg_info(fctid,
"Saving stacked image catalogues");
970 dummyqc = vircam_standard_process_dummyqc(2);
973 freepropertylist(dummyqc);
976 freepropertylist(dummyqc);
990 static cpl_propertylist *vircam_standard_process_dummyqc(
int type) {
995 p = cpl_propertylist_new();
1004 cpl_propertylist_update_double(p,
"ESO QC WCS_DCRVAL1",0.0);
1005 cpl_propertylist_set_comment(p,
"ESO QC WCS_DCRVAL1",
1006 "[deg] change in crval1");
1007 cpl_propertylist_update_double(p,
"ESO QC WCS_DCRVAL2",0.0);
1008 cpl_propertylist_set_comment(p,
"ESO QC WCS_DCRVAL2",
1009 "[deg] change in crval2");
1010 cpl_propertylist_update_double(p,
"ESO QC WCS_DTHETA",0.0);
1011 cpl_propertylist_set_comment(p,
"ESO QC WCS_DTHETA",
1012 "[deg] change in rotation");
1013 cpl_propertylist_update_double(p,
"ESO QC WCS_SCALE",0.0);
1014 cpl_propertylist_set_comment(p,
"ESO QC WCS_SCALE",
1015 "[arcsec] mean plate scale");
1016 cpl_propertylist_update_double(p,
"ESO QC WCS_SHEAR",0.0);
1017 cpl_propertylist_set_comment(p,
"ESO QC WCS_SHEAR",
1018 "[deg] abs(xrot) - abs(yrot)");
1019 cpl_propertylist_update_double(p,
"ESO QC WCS_RMS",0.0);
1020 cpl_propertylist_set_comment(p,
"ESO QC WCS_RMS",
1021 "[arcsec] Average error in WCS fit");
1022 cpl_propertylist_update_float(p,
"ESO QC MAGZPT",0.0);
1023 cpl_propertylist_set_comment(p,
"ESO QC MAGZPT",
1024 "[mag] photometric zeropoint");
1025 cpl_propertylist_update_float(p,
"ESO QC MAGZERR",0.0);
1026 cpl_propertylist_set_comment(p,
"ESO QC MAGZERR",
1027 "[mag] photometric zeropoint error");
1028 cpl_propertylist_update_int(p,
"ESO QC MAGNZPT",0);
1029 cpl_propertylist_set_comment(p,
"ESO QC MAGNZPT",
1030 "number of stars in magzpt calc");
1031 cpl_propertylist_update_int(p,
"ESO QC MAGNCUT",0);
1032 cpl_propertylist_set_comment(p,
"ESO QC MAGNCUT",
1033 "number of cut from magzpt calc");
1034 cpl_propertylist_update_float(p,
"ESO QC LIMITING_MAG",0.0);
1035 cpl_propertylist_set_comment(p,
"ESO QC LIMITING_MAG",
1036 "[mag] 5 sigma limiting mag");
1037 cpl_propertylist_update_float(p,
"ESO QC ZPT_2MASS",0.0);
1038 cpl_propertylist_set_comment(p,
"ESO QC ZPT_2MASS",
1039 "[mag] photometric zeropoint");
1040 cpl_propertylist_update_float(p,
"ESO QC ZPT_STDS",0.0);
1041 cpl_propertylist_set_comment(p,
"ESO QC ZPT_STDS",
1042 "[mag] photometric zeropoint");
1043 cpl_propertylist_update_string(p,
"ESO QC ZPT_STDS_CAT",
"");
1044 cpl_propertylist_set_comment(p,
"ESO QC ZPT_STDS_CAT",
1045 "Catalogue used in zeropoint calc");
1051 cpl_propertylist_update_float(p,
"ESO QC SATURATION",0.0);
1052 cpl_propertylist_set_comment(p,
"ESO QC SATURATION",
1053 "[adu] Saturation level");
1054 cpl_propertylist_update_float(p,
"ESO QC MEAN_SKY",0.0);
1055 cpl_propertylist_set_comment(p,
"ESO QC MEAN_SKY",
1056 "[adu] Median sky brightness");
1057 cpl_propertylist_update_float(p,
"ESO QC SKY_NOISE",0.0);
1058 cpl_propertylist_set_comment(p,
"ESO QC SKY_NOISE",
1059 "[adu] Pixel noise at sky level");
1060 cpl_propertylist_update_float(p,
"ESO QC IMAGE_SIZE",0.0);
1061 cpl_propertylist_set_comment(p,
"ESO QC IMAGE_SIZE",
1062 "[pixels] Average FWHM of stellar objects");
1063 cpl_propertylist_update_float(p,
"ESO QC ELLIPTICITY",0.0);
1064 cpl_propertylist_set_comment(p,
"ESO QC ELLIPTICITY",
1065 "Average stellar ellipticity (1-b/a)");
1066 cpl_propertylist_update_float(p,
"ESO QC APERTURE_CORR",0.0);
1067 cpl_propertylist_set_comment(p,
"ESO QC APERTURE_CORR",
1068 "Stellar ap-corr 1x core flux");
1069 cpl_propertylist_update_int(p,
"ESO QC NOISE_OBJ",0);
1070 cpl_propertylist_set_comment(p,
"ESO QC NOISE_OBJ",
1071 "Number of noise objects");
1077 cpl_propertylist_update_float(p,
"ESO QC ILLUMCOR_RMS",0.0);
1078 cpl_propertylist_set_comment(p,
"ESO QC ILLUMCOR_RMS",
1079 "RMS of illumination correction map");
char * casu_fits_get_extname(casu_fits *p)
int casu_fits_get_status(casu_fits *p)
cpl_image * casu_fits_get_image(casu_fits *p)
casu_fits * casu_fits_load(cpl_frame *frame, cpl_type type, int nexten)
casu_fits ** casu_fits_load_list(cpl_frameset *f, cpl_type type, int exten)
char * casu_fits_get_fullname(casu_fits *p)
int casu_fits_set_error(casu_fits *p, int status)
cpl_propertylist * casu_fits_get_phu(casu_fits *p)
cpl_propertylist * casu_fits_get_ehu(casu_fits *p)
int casu_mask_load(casu_mask *m, int nexten, int nx, int ny)
casu_mask * casu_mask_define(cpl_frameset *framelist, cpl_size *labels, cpl_size nlab, const char *conftag, const char *bpmtag)
void casu_mask_clear(casu_mask *m)
int casu_flatcor(casu_fits *infile, casu_fits *flatsrc, int *status)
Correct input data for flat field response.
int casu_nditcor(casu_fits *infile, int ndit, const char *expkey, int *status)
Correct input data for number of dits.
int casu_darkcor(casu_fits *infile, casu_fits *darksrc, float darkscl, int *status)
Correct input data for dark current.
int casu_gaincor(casu_fits *infile, float gainscl, int *status)
Gain correct input data frame.
casu_tfits * casu_tfits_load(cpl_frame *table, int nexten)
cpl_frame * casu_frameset_subgroup_1(cpl_frameset *frameset, cpl_size *labels, cpl_size nlab, const char *tag)
Extract a frame of a given label from a frameset.
int casu_compare_tags(const cpl_frame *frame1, const cpl_frame *frame2)
Compare input tags.
int casu_catpars(cpl_frame *indx, char **catpath, char **catname)
Find the name of the standard catalogue and its location.
cpl_frameset * casu_frameset_subgroup(cpl_frameset *frameset, cpl_size *labels, cpl_size nlab, const char *tag)
Extract a frameset from another frameset.
int casu_gaincor_calc(cpl_frame *frame, int *n, float **cors, int *status)
Work out gain corrections.
int vircam_destripe(casu_fits *in, casu_mask *inbpm, int *status)
Remove stripes from the background of an image.
int vircam_lincor(casu_fits *infile, casu_tfits *lchantab, int kconst, int ndit, int *status)
Apply linearity curves to data.
int vircam_dfs_set_groups(cpl_frameset *set)
void vircam_jmp_dither_images(struct psStruct *ps)
void vircam_jmp_init(struct psStruct *ps)
void vircam_jmp_get_readnoise_gain(struct psStruct *ps, int jext, float *readnoise, float *gain)
void vircam_jmp_matched_stds(struct psStruct *ps, char *cata, char *catapath)
int vircam_jmp_save_super(struct psStruct *ps, cpl_frameset *framelist, cpl_parameterlist *parlist)
void vircam_jmp_bpm2conf(struct psStruct *ps)
int vircam_jmp_save_catalogue(struct psStruct *ps, cpl_frameset *framelist, cpl_parameterlist *parlist, cpl_propertylist *dummyqcprops)
void vircam_jmp_wcsfit(struct psStruct *ps)
void vircam_jmp_photcal(struct psStruct *ps)
int vircam_jmp_save_stack(struct psStruct *ps, cpl_frameset *framelist, cpl_parameterlist *parlist, cpl_propertylist *dummyqcprops)
void vircam_jmp_illum(struct psStruct *ps, char *cat, char *catpath)
void vircam_jmp_dither_offsets(struct psStruct *ps, int inter_lv)
void vircam_jmp_tidy(struct psStruct *ps, int level)
int vircam_jmp_save_illum(struct psStruct *ps, cpl_frameset *framelist, cpl_parameterlist *parlist, cpl_propertylist *dummyqcprops)
int vircam_jmp_save_simple(struct psStruct *ps, cpl_frameset *framelist, cpl_parameterlist *parlist)
void vircam_jmp_skycor(struct psStruct *ps)
void vircam_jmp_interleave(struct psStruct *ps)
void vircam_jmp_catalogue(struct psStruct *ps, int inter_lv)
int vircam_pfits_get_ndit(const cpl_propertylist *plist, int *ndit)
Get the value of NDIT.
int vircam_pfits_get_detlive(const cpl_propertylist *plist, int *detlive)
Get the value of DET_LIVE.
int vircam_pfits_get_nusteps(const cpl_propertylist *plist, int *nusteps)
Get the value of the number of microsteps in a sequence.
int vircam_check_crval(cpl_propertylist *phu, cpl_propertylist *ehu)
const char * vircam_get_license(void)
void vircam_exten_range(int inexten, const cpl_frame *fr, int *out1, int *out2)