|
KMOS Pipeline Reference Manual
1.0.8
|
00001 /* $Id: kmo_dev_setup.c,v 1.7 2013/01/09 13:51:03 aagudo Exp $ 00002 * 00003 * This file is part of the KMOS Pipeline 00004 * Copyright (C) 2002,2003 European Southern Observatory 00005 * 00006 * This program is free software; you can redistribute it and/or modify 00007 * it under the terms of the GNU General Public License as published by 00008 * the Free Software Foundation; either version 2 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this program; if not, write to the Free Software 00018 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 */ 00020 00021 /* 00022 * $Author: aagudo $ 00023 * $Date: 2013/01/09 13:51:03 $ 00024 * $Revision: 1.7 $ 00025 * $Name: kmosp_v1_0_8__20130220 $ 00026 */ 00027 00028 #ifdef HAVE_CONFIG_H 00029 #include <config.h> 00030 #endif 00031 00032 /*----------------------------------------------------------------------------- 00033 * Includes 00034 *----------------------------------------------------------------------------*/ 00035 00036 00037 #include <math.h> 00038 #include <string.h> 00039 00040 #include <cpl.h> 00041 #include "kmclipm_math.h" 00042 00043 #include "kmo_priv_reconstruct.h" 00044 #include "kmo_priv_functions.h" 00045 #include "kmo_priv_fits_stack.h" 00046 #include "kmo_cpl_extensions.h" 00047 #include "kmo_dfs.h" 00048 #include "kmo_error.h" 00049 #include "kmo_constants.h" 00050 #include "kmo_debug.h" 00051 00052 /*----------------------------------------------------------------------------- 00053 * Functions prototypes 00054 *----------------------------------------------------------------------------*/ 00055 00056 static int kmo_dev_setup_create(cpl_plugin *); 00057 static int kmo_dev_setup_exec(cpl_plugin *); 00058 static int kmo_dev_setup_destroy(cpl_plugin *); 00059 static int kmo_dev_setup(cpl_parameterlist *, cpl_frameset *); 00060 00061 /*----------------------------------------------------------------------------- 00062 * Static variables 00063 *----------------------------------------------------------------------------*/ 00064 00065 static char kmo_dev_setup_description[] = 00066 " #############################################\n" 00067 " ### INTENDED FOR PIPELINE DEVELOPERS ONLY ###\n" 00068 " #############################################\n" 00069 "\n" 00070 "This recipe is intended to create KMOS conform files in a semi-automatic manner.\n" 00071 "It is sufficient to provide a single FITS file and a few parameters to create\n" 00072 "KMOS conform FITS files suited for different recipes. Internally it calls repea-\n" 00073 "tedly the recipe kmo_fits_stack. There are also parameters that allow to prepare\n" 00074 "the frames, i.e. early test out of the lab, in a way they can be processed.\n" 00075 "\n" 00076 "One extension from the input frame is taken, some noise is added automatically\n" 00077 "in order to create similar frames for the other extensions.\n" 00078 "\n" 00079 "BASIC PARAMETERS:\n" 00080 "-----------------\n" 00081 "--type\n" 00082 "Defines for which recipe the files should be created ('DARK', \n" 00083 "'FLAT_ON', 'FLAT_OFF', 'ARC_ON', 'ARC_OFF', 'STD', 'SKY').\n" 00084 "\n" 00085 "--extension\n" 00086 "Defines which extension is used to craete frames\n" 00087 "\n" 00088 "--xshift\n" 00089 "--yshift\n" 00090 "Shift frames in x and y\n" 00091 "\n" 00092 "--rotangle\n" 00093 "Sets the ESO OCS ROT NAANGLE keyword in the primary header.\n" 00094 "\n" 00095 "--topcrop\n" 00096 "--bottomcrop\n" 00097 "--leftcrop\n" 00098 "--rightcrop\n" 00099 "These are cropping the image (filled with 0).\n" 00100 "\n" 00101 "--mainkey\n" 00102 "--subkey\n" 00103 "Add individual keywords to primary- or sub-header\n" 00104 "\n" 00105 "--valid\n" 00106 "Defines if IFUs are active or inactive\n" 00107 "\n" 00108 "--objects\n" 00109 "Defines if IFUs contain object or sky.\n" 00110 "\n" 00111 "--date\n" 00112 "Sets the DATE-OBS keword in the primary header.\n" 00113 "\n" 00114 "--filter\n" 00115 "Sets the filter type for all extensions.\n" 00116 "\n" 00117 "--grating\n" 00118 "Sets the grating type for all extensions.\n" 00119 "\n" 00120 "-------------------------------------------------------------------------------\n" 00121 " Input files:\n" 00122 "\n" 00123 " DO KMOS \n" 00124 " category Type Explanation Required #Frames\n" 00125 " -------- ----- ----------- -------- -------\n" 00126 " DARK or RAW Frame to create Master dark or Y 1 \n" 00127 " FLAT_ON or Flat-on or \n" 00128 " FLAT_OFF or Flat-off or \n" 00129 " ARC_ON or Arc-on or \n" 00130 " ARC_OFF or Arc-off or \n" 00131 " SKY or Sky or \n" 00132 " STD or Std star or \n" 00133 " GENERIC any other generic KMOS frame \n" 00134 "\n" 00135 " Output files:\n" 00136 "\n" 00137 " DO KMOS\n" 00138 " category Type Explanation\n" 00139 " -------- ----- -----------\n" 00140 " <see comment> RAW Named depending on --type parameter\n" 00141 "-------------------------------------------------------------------------------\n" 00142 "\n"; 00143 00144 /*----------------------------------------------------------------------------- 00145 * Functions code 00146 *----------------------------------------------------------------------------*/ 00147 00164 int cpl_plugin_get_info(cpl_pluginlist *list) 00165 { 00166 cpl_recipe *recipe = cpl_calloc(1, sizeof *recipe); 00167 cpl_plugin *plugin = &recipe->interface; 00168 00169 cpl_plugin_init(plugin, 00170 CPL_PLUGIN_API, 00171 KMOS_BINARY_VERSION, 00172 CPL_PLUGIN_TYPE_RECIPE, 00173 "kmo_dev_setup", 00174 "Create aligned KMOS files out of test frames", 00175 kmo_dev_setup_description, 00176 "Alex Agudo Berbel", 00177 "agudo@mpe.mpg.de", 00178 kmos_get_license(), 00179 kmo_dev_setup_create, 00180 kmo_dev_setup_exec, 00181 kmo_dev_setup_destroy); 00182 00183 cpl_pluginlist_append(list, plugin); 00184 00185 return 0; 00186 } 00187 00195 static int kmo_dev_setup_create(cpl_plugin *plugin) 00196 { 00197 cpl_recipe *recipe; 00198 cpl_parameter *p; 00199 00200 /* Check that the plugin is part of a valid recipe */ 00201 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 00202 recipe = (cpl_recipe *)plugin; 00203 else 00204 return -1; 00205 00206 /* Create the parameters list in the cpl_recipe object */ 00207 recipe->parameters = cpl_parameterlist_new(); 00208 00209 /* Fill the parameters list */ 00210 /* --type */ 00211 p = cpl_parameter_new_value("kmos.kmo_dev_setup.type", 00212 CPL_TYPE_STRING, 00213 "FITS type to create (DARK, FLAT_ON, " 00214 "FLAT_OFF, ARC_ON, ARC_OFF, SKY, GENERIC, STD)", 00215 "kmos.kmo_dev_setup", 00216 ""); 00217 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "type"); 00218 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00219 cpl_parameterlist_append(recipe->parameters, p); 00220 00221 /* --extension */ 00222 p = cpl_parameter_new_value("kmos.kmo_dev_setup.extension", 00223 CPL_TYPE_INT, 00224 "FITS extension to process (0: primary, 1, 2,...)", 00225 "kmos.kmo_dev_setup", 00226 0); 00227 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "extension"); 00228 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00229 cpl_parameterlist_append(recipe->parameters, p); 00230 00231 /* --xshift */ 00232 p = cpl_parameter_new_value("kmos.kmo_dev_setup.xshift", 00233 CPL_TYPE_INT, 00234 "integer shift in x (to the right -> pos)", 00235 "kmos.kmo_dev_setup", 00236 0); 00237 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "xshift"); 00238 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00239 cpl_parameterlist_append(recipe->parameters, p); 00240 00241 /* --yshift */ 00242 p = cpl_parameter_new_value("kmos.kmo_dev_setup.yshift", 00243 CPL_TYPE_INT, 00244 "integer shift in y (to the top -> pos)", 00245 "kmos.kmo_dev_setup", 00246 0); 00247 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "yshift"); 00248 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00249 cpl_parameterlist_append(recipe->parameters, p); 00250 00251 // /* --rotation */ 00252 // p = cpl_parameter_new_value("kmos.kmo_dev_setup.rotation", 00253 // CPL_TYPE_DOUBLE, 00254 // "rotation in degrees (CCW)", 00255 // "kmos.kmo_dev_setup", 00256 // 0.0); 00257 // cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "rotation"); 00258 // cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00259 // cpl_parameterlist_append(recipe->parameters, p); 00260 00261 /* --rotangle */ 00262 p = cpl_parameter_new_value("kmos.kmo_dev_setup.rotangle", 00263 CPL_TYPE_DOUBLE, 00264 "Rotator offset angle in degrees (CCW)", 00265 "kmos.kmo_dev_setup", 00266 -1.0); 00267 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "rotangle"); 00268 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00269 cpl_parameterlist_append(recipe->parameters, p); 00270 00271 /* --topcrop */ 00272 p = cpl_parameter_new_value("kmos.kmo_dev_setup.topcrop", 00273 CPL_TYPE_INT, 00274 "number of rows to crop at top", 00275 "kmos.kmo_dev_setup", 00276 0); 00277 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "topcrop"); 00278 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00279 cpl_parameterlist_append(recipe->parameters, p); 00280 00281 /* --bottomcrop */ 00282 p = cpl_parameter_new_value("kmos.kmo_dev_setup.bottomcrop", 00283 CPL_TYPE_INT, 00284 "number of rows to crop at bottom", 00285 "kmos.kmo_dev_setup", 00286 0); 00287 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "bottomcrop"); 00288 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00289 cpl_parameterlist_append(recipe->parameters, p); 00290 00291 /* --leftcrop */ 00292 p = cpl_parameter_new_value("kmos.kmo_dev_setup.leftcrop", 00293 CPL_TYPE_INT, 00294 "number of columns to crop at left", 00295 "kmos.kmo_dev_setup", 00296 0); 00297 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "leftcrop"); 00298 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00299 cpl_parameterlist_append(recipe->parameters, p); 00300 00301 /* --rightcrop */ 00302 p = cpl_parameter_new_value("kmos.kmo_dev_setup.rightcrop", 00303 CPL_TYPE_INT, 00304 "number of columns to crop at right", 00305 "kmos.kmo_dev_setup", 00306 0); 00307 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "rightcrop"); 00308 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00309 cpl_parameterlist_append(recipe->parameters, p); 00310 00311 /* --mainkey */ 00312 p = cpl_parameter_new_value("kmos.kmo_dev_setup.mainkey", 00313 CPL_TYPE_STRING, 00314 "Optional: Additional keywords for primary header", 00315 "kmos.kmo_dev_setup", 00316 ""); 00317 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "mainkey"); 00318 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00319 cpl_parameterlist_append(recipe->parameters, p); 00320 00321 /* --subkey */ 00322 p = cpl_parameter_new_value("kmos.kmo_dev_setup.subkey", 00323 CPL_TYPE_STRING, 00324 "Optional: Additional keywords for sub headers", 00325 "kmos.kmo_dev_setup", 00326 ""); 00327 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "subkey"); 00328 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00329 cpl_parameterlist_append(recipe->parameters, p); 00330 00331 /* --valid */ 00332 p = cpl_parameter_new_value("kmos.kmo_dev_setup.valid", 00333 CPL_TYPE_STRING, 00334 "Optional: Specify which IFUs are active. " 00335 "Either empty string or string with 8 elements" 00336 " (ones or zeros) e.g: [1;0;1;0;0;...;1]", 00337 "kmos.kmo_dev_setup", 00338 ""); 00339 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "valid"); 00340 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00341 cpl_parameterlist_append(recipe->parameters, p); 00342 00343 /* --objects */ 00344 p = cpl_parameter_new_value("kmos.kmo_dev_setup.objects", 00345 CPL_TYPE_STRING, 00346 "Optional (STD only): Specify which IFUs contain" 00347 " objects. Either empty string or string with 8" 00348 " elements (ones or zeros) " 00349 "e.g: [1;0;1;0;0;...;1]", 00350 "kmos.kmo_dev_setup", 00351 ""); 00352 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "objects"); 00353 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00354 cpl_parameterlist_append(recipe->parameters, p); 00355 00356 /* --date */ 00357 p = cpl_parameter_new_value("kmos.kmo_dev_setup.date", 00358 CPL_TYPE_STRING, 00359 "Optional (STD only): Specify the date to save " 00360 "into DATE-OBS " 00361 "e.g: [2010-01-31T11:53:15.9789]", 00362 "kmos.kmo_dev_setup", 00363 ""); 00364 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "date"); 00365 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00366 cpl_parameterlist_append(recipe->parameters, p); 00367 00368 /* --filter */ 00369 p = cpl_parameter_new_value("kmos.kmo_dev_setup.filter", 00370 CPL_TYPE_STRING, 00371 "filter type (K, H, HK, etc.)", 00372 "kmos.kmo_dev_setup", 00373 ""); 00374 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "filter"); 00375 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00376 cpl_parameterlist_append(recipe->parameters, p); 00377 00378 /* --grating */ 00379 p = cpl_parameter_new_value("kmos.kmo_dev_setup.grating", 00380 CPL_TYPE_STRING, 00381 "grating type (K, H, HK, etc.)", 00382 "kmos.kmo_dev_setup", 00383 ""); 00384 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "grating"); 00385 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 00386 cpl_parameterlist_append(recipe->parameters, p); 00387 00388 return 0; 00389 } 00390 00396 static int kmo_dev_setup_exec(cpl_plugin *plugin) 00397 { 00398 cpl_recipe *recipe; 00399 00400 /* Get the recipe out of the plugin */ 00401 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 00402 recipe = (cpl_recipe *)plugin; 00403 else return -1; 00404 00405 return kmo_dev_setup(recipe->parameters, recipe->frames); 00406 } 00407 00413 static int kmo_dev_setup_destroy(cpl_plugin *plugin) 00414 { 00415 cpl_recipe *recipe; 00416 00417 /* Get the recipe out of the plugin */ 00418 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 00419 recipe = (cpl_recipe *)plugin; 00420 else return -1 ; 00421 00422 cpl_parameterlist_delete(recipe->parameters); 00423 return 0 ; 00424 } 00425 00426 cpl_frameset* dev_frameset(const char *p1, const char *p2, const char *p3) { 00427 cpl_frameset *frset = NULL; 00428 cpl_frame *fr = NULL; 00429 00430 KMO_TRY 00431 { 00432 00433 KMO_TRY_EXIT_IF_NULL( 00434 frset = cpl_frameset_new()); 00435 00436 KMO_TRY_EXIT_IF_NULL( 00437 fr = cpl_frame_new()); 00438 KMO_TRY_EXIT_IF_ERROR( 00439 cpl_frame_set_filename(fr, p1)); 00440 KMO_TRY_EXIT_IF_ERROR( 00441 cpl_frame_set_tag(fr, FS_DATA)); 00442 KMO_TRY_EXIT_IF_ERROR( 00443 cpl_frame_set_type(fr, CPL_FRAME_TYPE_NONE)); 00444 KMO_TRY_EXIT_IF_ERROR( 00445 cpl_frame_set_group(fr, CPL_FRAME_GROUP_NONE)); 00446 KMO_TRY_EXIT_IF_ERROR( 00447 cpl_frame_set_level(fr, CPL_FRAME_LEVEL_NONE)); 00448 KMO_TRY_EXIT_IF_ERROR( 00449 cpl_frameset_insert(frset, fr)); 00450 00451 KMO_TRY_EXIT_IF_NULL( 00452 fr = cpl_frame_new()); 00453 KMO_TRY_EXIT_IF_ERROR( 00454 cpl_frame_set_filename(fr, p2)); 00455 KMO_TRY_EXIT_IF_ERROR( 00456 cpl_frame_set_tag(fr, FS_DATA)); 00457 KMO_TRY_EXIT_IF_ERROR( 00458 cpl_frame_set_type(fr, CPL_FRAME_TYPE_NONE)); 00459 KMO_TRY_EXIT_IF_ERROR( 00460 cpl_frame_set_group(fr, CPL_FRAME_GROUP_NONE)); 00461 KMO_TRY_EXIT_IF_ERROR( 00462 cpl_frame_set_level(fr, CPL_FRAME_LEVEL_NONE)); 00463 KMO_TRY_EXIT_IF_ERROR( 00464 cpl_frameset_insert(frset, fr)); 00465 00466 KMO_TRY_EXIT_IF_NULL( 00467 fr = cpl_frame_new()); 00468 KMO_TRY_EXIT_IF_ERROR( 00469 cpl_frame_set_filename(fr, p3)); 00470 KMO_TRY_EXIT_IF_ERROR( 00471 cpl_frame_set_tag(fr, FS_DATA)); 00472 KMO_TRY_EXIT_IF_ERROR( 00473 cpl_frame_set_type(fr, CPL_FRAME_TYPE_NONE)); 00474 KMO_TRY_EXIT_IF_ERROR( 00475 cpl_frame_set_group(fr, CPL_FRAME_GROUP_NONE)); 00476 KMO_TRY_EXIT_IF_ERROR( 00477 cpl_frame_set_level(fr, CPL_FRAME_LEVEL_NONE)); 00478 KMO_TRY_EXIT_IF_ERROR( 00479 cpl_frameset_insert(frset, fr)); 00480 } 00481 KMO_CATCH 00482 { 00483 cpl_frameset_delete(frset); frset = NULL; 00484 } 00485 return frset; 00486 } 00487 00488 cpl_frameset* dev_frameset_master(const char *p1) { 00489 cpl_frameset *frset = NULL; 00490 00491 cpl_frame *fr = NULL; 00492 00493 KMO_TRY 00494 { 00495 00496 KMO_TRY_EXIT_IF_NULL( 00497 frset = cpl_frameset_new()); 00498 for (int i = 0; i < 3; i++) { 00499 KMO_TRY_EXIT_IF_NULL( 00500 fr = cpl_frame_new()); 00501 KMO_TRY_EXIT_IF_ERROR( 00502 cpl_frame_set_filename(fr, p1)); 00503 KMO_TRY_EXIT_IF_ERROR( 00504 cpl_frame_set_tag(fr, FS_DATA)); 00505 KMO_TRY_EXIT_IF_ERROR( 00506 cpl_frame_set_type(fr, CPL_FRAME_TYPE_NONE)); 00507 KMO_TRY_EXIT_IF_ERROR( 00508 cpl_frame_set_group(fr, CPL_FRAME_GROUP_NONE)); 00509 KMO_TRY_EXIT_IF_ERROR( 00510 cpl_frame_set_level(fr, CPL_FRAME_LEVEL_NONE)); 00511 KMO_TRY_EXIT_IF_ERROR( 00512 cpl_frameset_insert(frset, fr)); 00513 00514 KMO_TRY_EXIT_IF_NULL( 00515 fr = cpl_frame_new()); 00516 KMO_TRY_EXIT_IF_ERROR( 00517 cpl_frame_set_filename(fr, p1)); 00518 KMO_TRY_EXIT_IF_ERROR( 00519 cpl_frame_set_tag(fr, FS_NOISE)); 00520 KMO_TRY_EXIT_IF_ERROR( 00521 cpl_frame_set_type(fr, CPL_FRAME_TYPE_NONE)); 00522 KMO_TRY_EXIT_IF_ERROR( 00523 cpl_frame_set_group(fr, CPL_FRAME_GROUP_NONE)); 00524 KMO_TRY_EXIT_IF_ERROR( 00525 cpl_frame_set_level(fr, CPL_FRAME_LEVEL_NONE)); 00526 KMO_TRY_EXIT_IF_ERROR( 00527 cpl_frameset_insert(frset, fr)); 00528 } 00529 } 00530 KMO_CATCH 00531 { 00532 cpl_frameset_delete(frset); frset = NULL; 00533 } 00534 return frset; 00535 } 00536 00551 static int kmo_dev_setup(cpl_parameterlist *parlist, cpl_frameset *frameset) 00552 { 00553 int ret_val = 0, 00554 ext = 0, 00555 xshift = 0, 00556 yshift = 0, 00557 topcrop = 0, 00558 bottomcrop = 0, 00559 leftcrop = 0, 00560 rightcrop = 0, 00561 x = 0, 00562 y = 0, 00563 nx = 0, 00564 ny = 0; 00565 00566 // double rotation = 0.0; 00567 double rotangle = 0.0; 00568 00569 float *pimg1 = NULL, 00570 *ptmp_img = NULL; 00571 00572 const char *type = NULL, 00573 *mainkey = NULL, 00574 *subkey = NULL, 00575 *valid = NULL, 00576 *objects_txt= NULL, 00577 *date = NULL, 00578 *filter = NULL, 00579 *grating = NULL; 00580 00581 char pmainkey[2048], 00582 psubkey[2048], 00583 pvalid[2048], 00584 pfilename[2048], 00585 tmp_str[256]; 00586 00587 const char *obsid = "-2147483648", 00588 *exptime_min = "2.47624", 00589 *exptime_long = "600"; 00590 00591 00592 cpl_frame *frame = NULL; 00593 00594 cpl_image *img1 = NULL, 00595 *img_copy = NULL, 00596 *noise = NULL, 00597 *noise_copy = NULL, 00598 *img_noise1 = NULL, 00599 *img_noise2 = NULL, 00600 *img_noise3 = NULL, 00601 *tmp_img = NULL; 00602 00603 cpl_vector *objects = NULL; 00604 00605 cpl_frameset *frset = NULL; 00606 00607 // cpl_frame *fr = NULL; 00608 00609 cpl_parameterlist *plist = NULL; 00610 00611 cpl_parameter *p = NULL; 00612 00613 KMO_TRY 00614 { 00615 strcpy(pmainkey, ""); 00616 strcpy(psubkey, ""); 00617 strcpy(pvalid, ""); 00618 strcpy(pfilename, ""); 00619 strcpy(tmp_str, ""); 00620 00621 /* --- check input --- */ 00622 KMO_TRY_ASSURE((parlist != NULL) && 00623 (frameset != NULL), 00624 CPL_ERROR_NULL_INPUT, 00625 "Not all input data is provided!"); 00626 00627 /* --- get parameters --- */ 00628 cpl_msg_info("", "--- Parameter setup for kmo_dev_setup -----"); 00629 00630 KMO_TRY_EXIT_IF_NULL( 00631 type = kmo_dfs_get_parameter_string(parlist, 00632 "kmos.kmo_dev_setup.type")); 00633 KMO_TRY_EXIT_IF_ERROR( 00634 kmo_dfs_print_parameter_help(parlist, 00635 "kmos.kmo_dev_setup.type")); 00636 00637 ext = kmo_dfs_get_parameter_int(parlist, 00638 "kmos.kmo_dev_setup.extension"); 00639 KMO_TRY_CHECK_ERROR_STATE(); 00640 KMO_TRY_ASSURE(ext >= 0, 00641 CPL_ERROR_ILLEGAL_INPUT, 00642 "ext >= 0!"); 00643 KMO_TRY_EXIT_IF_ERROR( 00644 kmo_dfs_print_parameter_help(parlist, 00645 "kmos.kmo_dev_setup.extension")); 00646 00647 xshift = kmo_dfs_get_parameter_int(parlist, 00648 "kmos.kmo_dev_setup.xshift"); 00649 KMO_TRY_CHECK_ERROR_STATE(); 00650 KMO_TRY_EXIT_IF_ERROR( 00651 kmo_dfs_print_parameter_help(parlist, 00652 "kmos.kmo_dev_setup.xshift")); 00653 00654 yshift = kmo_dfs_get_parameter_int(parlist, 00655 "kmos.kmo_dev_setup.yshift"); 00656 KMO_TRY_CHECK_ERROR_STATE(); 00657 KMO_TRY_EXIT_IF_ERROR( 00658 kmo_dfs_print_parameter_help(parlist, 00659 "kmos.kmo_dev_setup.yshift")); 00660 00661 // rotation = kmo_dfs_get_parameter_double(parlist, 00662 // "kmos.kmo_dev_setup.rotation"); 00663 // KMO_TRY_CHECK_ERROR_STATE(); 00664 // KMO_TRY_EXIT_IF_ERROR( 00665 // kmo_dfs_print_parameter_help(parlist, 00666 // "kmos.kmo_dev_setup.rotation")); 00667 00668 topcrop = kmo_dfs_get_parameter_int(parlist, 00669 "kmos.kmo_dev_setup.topcrop"); 00670 KMO_TRY_CHECK_ERROR_STATE(); 00671 KMO_TRY_EXIT_IF_ERROR( 00672 kmo_dfs_print_parameter_help(parlist, 00673 "kmos.kmo_dev_setup.topcrop")); 00674 00675 bottomcrop = kmo_dfs_get_parameter_int(parlist, 00676 "kmos.kmo_dev_setup.bottomcrop"); 00677 KMO_TRY_CHECK_ERROR_STATE(); 00678 KMO_TRY_EXIT_IF_ERROR( 00679 kmo_dfs_print_parameter_help(parlist, 00680 "kmos.kmo_dev_setup.bottomcrop")); 00681 00682 leftcrop = kmo_dfs_get_parameter_int(parlist, 00683 "kmos.kmo_dev_setup.leftcrop"); 00684 KMO_TRY_CHECK_ERROR_STATE(); 00685 KMO_TRY_EXIT_IF_ERROR( 00686 kmo_dfs_print_parameter_help(parlist, 00687 "kmos.kmo_dev_setup.leftcrop")); 00688 00689 rightcrop = kmo_dfs_get_parameter_int(parlist, 00690 "kmos.kmo_dev_setup.rightcrop"); 00691 KMO_TRY_CHECK_ERROR_STATE(); 00692 KMO_TRY_EXIT_IF_ERROR( 00693 kmo_dfs_print_parameter_help(parlist, 00694 "kmos.kmo_dev_setup.rightcrop")); 00695 00696 KMO_TRY_EXIT_IF_NULL( 00697 mainkey = kmo_dfs_get_parameter_string(parlist, 00698 "kmos.kmo_dev_setup.mainkey")); 00699 KMO_TRY_EXIT_IF_ERROR( 00700 kmo_dfs_print_parameter_help(parlist, 00701 "kmos.kmo_dev_setup.mainkey")); 00702 00703 KMO_TRY_EXIT_IF_NULL( 00704 subkey = kmo_dfs_get_parameter_string(parlist, 00705 "kmos.kmo_dev_setup.subkey")); 00706 KMO_TRY_EXIT_IF_ERROR( 00707 kmo_dfs_print_parameter_help(parlist, 00708 "kmos.kmo_dev_setup.subkey")); 00709 00710 KMO_TRY_EXIT_IF_NULL( 00711 valid = kmo_dfs_get_parameter_string(parlist, 00712 "kmos.kmo_dev_setup.valid")); 00713 KMO_TRY_EXIT_IF_ERROR( 00714 kmo_dfs_print_parameter_help(parlist, 00715 "kmos.kmo_dev_setup.valid")); 00716 00717 KMO_TRY_EXIT_IF_NULL( 00718 objects_txt = kmo_dfs_get_parameter_string(parlist, 00719 "kmos.kmo_dev_setup.objects")); 00720 KMO_TRY_EXIT_IF_ERROR( 00721 kmo_dfs_print_parameter_help(parlist, 00722 "kmos.kmo_dev_setup.objects")); 00723 00724 KMO_TRY_EXIT_IF_NULL( 00725 date = kmo_dfs_get_parameter_string(parlist, 00726 "kmos.kmo_dev_setup.date")); 00727 KMO_TRY_EXIT_IF_ERROR( 00728 kmo_dfs_print_parameter_help(parlist, 00729 "kmos.kmo_dev_setup.date")); 00730 00731 KMO_TRY_EXIT_IF_NULL( 00732 filter = kmo_dfs_get_parameter_string(parlist, 00733 "kmos.kmo_dev_setup.filter")); 00734 KMO_TRY_EXIT_IF_ERROR( 00735 kmo_dfs_print_parameter_help(parlist, 00736 "kmos.kmo_dev_setup.filter")); 00737 00738 KMO_TRY_EXIT_IF_NULL( 00739 grating = kmo_dfs_get_parameter_string(parlist, 00740 "kmos.kmo_dev_setup.grating")); 00741 KMO_TRY_EXIT_IF_ERROR( 00742 kmo_dfs_print_parameter_help(parlist, 00743 "kmos.kmo_dev_setup.grating")); 00744 00745 cpl_msg_info("", "-------------------------------------------"); 00746 00747 KMO_TRY_ASSURE((strcmp(type, "DARK") == 0) || 00748 (strcmp(type, "FLAT_ON") == 0) || 00749 (strcmp(type, "FLAT_OFF") == 0) || 00750 (strcmp(type, "ARC_ON") == 0) || 00751 (strcmp(type, "ARC_OFF") == 0) || 00752 (strcmp(type, "SKY") == 0) || 00753 (strcmp(type, "STD") == 0) || 00754 (strcmp(type, "MASTER_FLAT") == 0) || 00755 (strcmp(type, "GENERIC") == 0), 00756 CPL_ERROR_ILLEGAL_INPUT, 00757 "Wrong type!"); 00758 00759 // get frame 00760 KMO_TRY_EXIT_IF_NULL( 00761 frame = kmo_dfs_get_frame(frameset, "0")); 00762 00763 // load data 00764 KMO_TRY_EXIT_IF_NULL( 00765 img1 = kmclipm_image_load(cpl_frame_get_filename(frame), 00766 CPL_TYPE_FLOAT, 00767 0, 00768 ext)); 00769 00770 // 00771 // SHIFT 00772 // 00773 if ((xshift != 0) || (yshift != 0)) { 00774 cpl_msg_info(cpl_func, "shift: x=%d, y=%d", xshift, yshift); 00775 KMO_TRY_EXIT_IF_ERROR( 00776 cpl_image_shift(img1, xshift, yshift)); 00777 } else { 00778 cpl_msg_info(cpl_func, "no shift applied."); 00779 } 00780 //cpl_image_save(img1, "dev_shift.fits", CPL_BPP_IEEE_FLOAT, NULL, CPL_IO_CREATE); 00781 00782 // // 00783 // // ROTATION 00784 // // 00785 // if (fabs(rotation) >= 0.0001) { 00786 // cpl_msg_info(cpl_func, "rotation: r=%g CCW", rotation); 00787 // KMO_TRY_EXIT_IF_NULL( 00788 // img2 = kmo_dev_rotate(img1, rotation, 00789 // 1, "BCS", NONE_NANS)); 00790 // } else { 00791 // cpl_msg_info(cpl_func, "no rotation applied."); 00792 // img2 = img1; 00793 // } 00794 //cpl_image_save(img2, "dev_rotation.fits", CPL_BPP_IEEE_FLOAT, NULL, CPL_IO_CREATE); 00795 00796 nx = cpl_image_get_size_x(img1); 00797 ny = cpl_image_get_size_y(img1); 00798 00799 // 00800 // CROP 00801 // 00802 if ((topcrop != 0) || (bottomcrop != 0) || 00803 (leftcrop != 0) || (rightcrop != 0)) { 00804 cpl_msg_info(cpl_func, "crop: top=%d, bottom=%d, left=%d, right=%d", 00805 topcrop, bottomcrop, leftcrop, rightcrop); 00806 00807 KMO_TRY_EXIT_IF_NULL( 00808 pimg1 = cpl_image_get_data_float(img1)); 00809 00810 // bottomcrop 00811 for (y = 0; y < bottomcrop; y++) { 00812 for (x = 0; x < nx; x++) { 00813 pimg1[x+y*nx] = 0.0; 00814 } 00815 } 00816 00817 // topcrop 00818 for (y = nx-topcrop; y < nx; y++) { 00819 for (x = 0; x < nx; x++) { 00820 pimg1[x+y*nx] = 0.0; 00821 } 00822 } 00823 00824 // leftcrop 00825 for (y = 0; y < ny; y++) { 00826 for (x = 0; x < leftcrop; x++) { 00827 pimg1[x+y*nx] = 0.0; 00828 } 00829 } 00830 00831 // rightcrop 00832 for (y = 0; y < ny; y++) { 00833 for (x = nx-rightcrop; x < nx; x++) { 00834 pimg1[x+y*nx] = 0.0; 00835 } 00836 } 00837 } else { 00838 cpl_msg_info(cpl_func, "no crop applied."); 00839 } 00840 //cpl_image_save(img1, "dev_crop.fits", CPL_BPP_IEEE_FLOAT, NULL, CPL_IO_CREATE); 00841 00842 // 00843 // NOISIFY 00844 // 00845 KMO_TRY_EXIT_IF_NULL( 00846 noise = cpl_image_new(nx, ny, CPL_TYPE_FLOAT)); 00847 KMO_TRY_EXIT_IF_ERROR( 00848 cpl_image_fill_noise_uniform(noise, -1.0, 1.0)); 00849 00850 // calculate level 00851 float level = 0.0; 00852 if ((strcmp(type, "DARK") == 0) || 00853 (strcmp(type, "SKY") == 0)) 00854 { 00855 KMO_TRY_EXIT_IF_NULL( 00856 tmp_img = cpl_image_duplicate(img1)); 00857 KMO_TRY_EXIT_IF_NULL( 00858 ptmp_img = cpl_image_get_data(tmp_img)); 00859 for (int i = 0; i < nx*ny; i++) { 00860 if (kmclipm_is_nan_or_inf(ptmp_img[i])) { 00861 ptmp_img[i] = 0; 00862 } 00863 } 00864 KMO_TRY_CHECK_ERROR_STATE(); 00865 level = cpl_image_get_stdev(tmp_img); 00866 KMO_TRY_CHECK_ERROR_STATE(); 00867 cpl_image_delete(tmp_img); tmp_img = NULL; 00868 00869 KMO_TRY_EXIT_IF_ERROR( 00870 cpl_image_multiply_scalar(noise, level)); 00871 00872 // img_noise1: 00873 img_noise1 = img1; 00874 00875 // img_noise2: just add noise 00876 KMO_TRY_EXIT_IF_NULL( 00877 img_noise2 = cpl_image_add_create(img1, noise)); 00878 00879 // img_noise3: add noise flipped horizontally 00880 cpl_image_flip(noise, 0); 00881 KMO_TRY_EXIT_IF_NULL( 00882 img_noise3 = cpl_image_add_create(img1, noise)); 00883 } else { 00884 KMO_TRY_EXIT_IF_NULL( 00885 img_copy = cpl_image_duplicate(img1)); 00886 00887 KMO_TRY_EXIT_IF_NULL( 00888 noise_copy = cpl_image_duplicate(noise)); 00889 00890 // img_noise1: 00891 img_noise1 = img1; 00892 00893 // img_noise2: add noise level 1 00894 KMO_TRY_EXIT_IF_ERROR( 00895 cpl_image_multiply_scalar(noise, 10)); 00896 KMO_TRY_EXIT_IF_NULL( 00897 img_noise2 = cpl_image_add_create(img1, noise)); 00898 00899 // img_noise3: add noise level 2 00900 KMO_TRY_EXIT_IF_ERROR( 00901 cpl_image_multiply_scalar(noise_copy, 15)); 00902 KMO_TRY_EXIT_IF_NULL( 00903 img_noise3 = cpl_image_add_create(img_copy, noise_copy)); 00904 00905 cpl_image_delete(img_copy); img_copy = NULL; 00906 cpl_image_delete(noise_copy); noise_copy = NULL; 00907 } 00908 cpl_image_delete(noise); noise = NULL; 00909 00910 // these have to be stored! 00911 kmclipm_image_save(img_noise1, "tmp_delete1.fits", CPL_BPP_IEEE_FLOAT, 00912 NULL, CPL_IO_CREATE, 0); 00913 kmclipm_image_save(img_noise2, "tmp_delete2.fits", CPL_BPP_IEEE_FLOAT, 00914 NULL, CPL_IO_CREATE, 0); 00915 kmclipm_image_save(img_noise3, "tmp_delete3.fits", CPL_BPP_IEEE_FLOAT, 00916 NULL, CPL_IO_CREATE, 0); 00917 cpl_image_delete(img_noise2); img_noise2 = NULL; 00918 cpl_image_delete(img_noise3); img_noise3 = NULL; 00919 00920 // 00921 // STACK 00922 // 00923 00924 // setup parameterlist 00925 00926 // all types 00927 /* --mainkey */ 00928 00929 if (strcmp(mainkey, "") != 0) { 00930 strcpy(pmainkey, mainkey); 00931 strcat(pmainkey, ";"); 00932 strcat(pmainkey,"ESO OBS ID;int;");strcat(pmainkey, obsid); 00933 } else { 00934 strcpy(pmainkey,"ESO OBS ID;int;");strcat(pmainkey, obsid); 00935 } 00936 // strcat(pmainkey, ";"); 00937 if (rotangle != -1) { 00938 char *nr = NULL; 00939 KMO_TRY_EXIT_IF_NULL( 00940 nr = cpl_sprintf("%g", rotangle)); 00941 strcat(pmainkey,";ESO OCS ROT NAANGLE;double;");strcat(pmainkey, nr); 00942 cpl_free(nr); nr = NULL; 00943 } 00944 00945 if (strcmp(filter, "") != 0) { 00946 strcat(pmainkey, ";ESO INS FILT1 ID;string;");strcat(pmainkey, filter); 00947 strcat(pmainkey,";ESO INS FILT2 ID;string;");strcat(pmainkey, filter); 00948 strcat(pmainkey,";ESO INS FILT3 ID;string;");strcat(pmainkey, filter); 00949 } 00950 00951 if (strcmp(grating, "") != 0) { 00952 strcat(pmainkey,";ESO INS GRAT1 ID;string;");strcat(pmainkey, grating); 00953 strcat(pmainkey,";ESO INS GRAT2 ID;string;");strcat(pmainkey, grating); 00954 strcat(pmainkey,";ESO INS GRAT3 ID;string;");strcat(pmainkey, grating); 00955 } 00956 KMO_TRY_CHECK_ERROR_STATE(); 00957 00958 /* --subkey */ 00959 if (strcmp(subkey, "") != 0) { 00960 strcpy(psubkey, subkey); 00961 } 00962 KMO_TRY_CHECK_ERROR_STATE(); 00963 00964 // if (strcmp(type, "DARK") == 0) { 00965 /* --mainkey */ 00966 strcat(pmainkey, ";ESO DET SEQ1 MINDIT;double;");strcat(pmainkey, exptime_min); 00967 strcat(pmainkey, ";ESO DET NDIT;int;1"); 00968 strcat(pmainkey, ";EXPTIME;double;");strcat(pmainkey, exptime_long); 00969 strcat(pmainkey, ";ESO DET READ CURNAME;string;Double"); 00970 00971 /* --subkey */ 00972 if (strcmp(subkey, "") != 0) strcat(psubkey, ";"); 00973 strcat(psubkey, "EXPTIME;double;");strcat(psubkey, exptime_long); 00974 // } 00975 00976 if (strcmp(type, "FLAT_ON") == 0) { 00977 /* --mainkey */ 00978 strcat(pmainkey,";ESO INS LAMP3 ST;bool;1"); 00979 // strcat(pmainkey, "EXPTIME;double;");strcat(pmainkey, exptime_long); 00980 00981 /* --subkey */ 00982 // if (strcmp(subkey, "") != 0) strcat(psubkey, ";"); 00983 // strcat(psubkey, "EXPTIME;double;");strcat(psubkey, exptime_long); 00984 } 00985 KMO_TRY_CHECK_ERROR_STATE(); 00986 00987 if (strcmp(type, "ARC_ON") == 0) 00988 { 00989 strcat(pmainkey,";ESO INS LAMP1 ST;bool;1"); 00990 // strcat(pmainkey, "EXPTIME;double;");strcat(pmainkey, exptime_long); 00991 00992 /* --subkey */ 00993 if (strcmp(subkey, "") != 0) strcat(psubkey, ";"); 00994 // strcat(psubkey, "EXPTIME;double;");strcat(psubkey, exptime_long); 00995 } 00996 KMO_TRY_CHECK_ERROR_STATE(); 00997 00998 if ((strcmp(type, "FLAT_OFF") == 0) || 00999 (strcmp(type, "ARC_OFF") == 0)) { 01000 /* --mainkey */ 01001 // strcat(pmainkey, "EXPTIME;double;");strcat(pmainkey, exptime_long); 01002 01003 /* --subkey */ 01004 if (strcmp(subkey, "") != 0) strcat(psubkey, ";"); 01005 // strcat(psubkey, "EXPTIME;double;");strcat(psubkey, exptime_long); 01006 } 01007 KMO_TRY_CHECK_ERROR_STATE(); 01008 01009 if ((strcmp(type, "SKY") == 0) || 01010 (strcmp(type, "MASTER_FLAT") == 0) || 01011 (strcmp(type, "STD") == 0) || 01012 (strcmp(type, "GENERIC") == 0)) 01013 { 01014 /* --mainkey */ 01015 if (strcmp(type, "STD") == 0) { 01016 // add DATE-OBS keyword 01017 // strcat(pmainkey,";"); 01018 strcat(pmainkey,";DATE-OBS;string;");strcat(pmainkey, date); 01019 // strcat(pmainkey, ";EXPTIME;double;");strcat(pmainkey, exptime_long); 01020 01021 // add ESO OCS ARMi TYPE keywords 01022 objects = kmo_identify_values(objects_txt); 01023 KMO_TRY_ASSURE(cpl_vector_get_size(objects) == KMOS_IFUS_PER_DETECTOR, 01024 CPL_ERROR_ILLEGAL_INPUT, 01025 "valid parameter must have 8 elements!"); 01026 01027 for (int i = 0; i < cpl_vector_get_size(objects)*3; i++) { 01028 strcat(pmainkey,";"); 01029 strcat(pmainkey,"ESO OCS ARM"); 01030 sprintf(tmp_str, "%d ", i+1); 01031 strcat(pmainkey,tmp_str); 01032 strcat(pmainkey,"TYPE;string;"); 01033 01034 if (fabs(cpl_vector_get(objects, i%KMOS_IFUS_PER_DETECTOR)-1) > 0.01 ) { 01035 // sky 01036 strcat(pmainkey,"S"); 01037 } else { 01038 //object 01039 strcat(pmainkey,"O"); 01040 } 01041 } 01042 cpl_vector_delete(objects); objects = NULL; 01043 } 01044 //printf("----------\n"); 01045 //printf("%s\n", pmainkey); 01046 //printf("----------\n"); 01047 // /* --subkey */ 01048 // if (strcmp(subkey, "") != 0) { 01049 // strcat(psubkey, ";"); 01050 // } 01051 // strcat(psubkey, ";EXPTIME;double;"); 01052 // strcat(psubkey, exptime_long); 01053 } 01054 KMO_TRY_CHECK_ERROR_STATE(); 01055 01056 // SETUP PARAMETERLIST 01057 plist = cpl_parameterlist_new(); 01058 01059 /* --valid */ 01060 strcpy(pvalid, valid); 01061 strcat(pvalid, ";"); 01062 strcat(pvalid, valid); 01063 strcat(pvalid, ";"); 01064 strcat(pvalid, valid); 01065 01066 p = cpl_parameter_new_value("kmos.kmo_fits_stack.valid", 01067 CPL_TYPE_STRING, 01068 "Optional: Specify which IFUs are active. " 01069 "Either empty string or string with 24 elements" 01070 " (ones or zeros) e.g: [1;0;1;0;0;...;1]", 01071 "kmos.kmo_fits_stack", 01072 pvalid); 01073 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "valid"); 01074 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 01075 cpl_parameterlist_append(plist, p); 01076 01077 if (strcmp(type, "MASTER_FLAT") != 0) { 01078 // all types except MASTER_FLAT 01079 01080 /* --type (RAW, F1D, F2D, F1I, F2I, F3I) */ 01081 p = cpl_parameter_new_value("kmos.kmo_fits_stack.type", 01082 CPL_TYPE_STRING, 01083 "The KMOS data format type (either \"RAW\", " 01084 "\"F1D\", \"F2D\", \"F1I\", \"F2I\", \"F3I\", " 01085 "\"F1S\", \"F1L\", \"F2L\")", 01086 "kmos.kmo_fits_stack", 01087 RAW); 01088 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "type"); 01089 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 01090 cpl_parameterlist_append(plist, p); 01091 KMO_TRY_CHECK_ERROR_STATE(); 01092 01093 /* --mainkey */ 01094 p = cpl_parameter_new_value("kmos.kmo_fits_stack.mainkey", 01095 CPL_TYPE_STRING, 01096 "Optional: Additional keywords for primary header", 01097 "kmos.kmo_fits_stack", 01098 pmainkey); 01099 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "mainkey"); 01100 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 01101 cpl_parameterlist_append(plist, p); 01102 01103 /* --subkey */ 01104 p = cpl_parameter_new_value("kmos.kmo_fits_stack.subkey", 01105 CPL_TYPE_STRING, 01106 "Optional: Additional keywords for sub headers", 01107 "kmos.kmo_fits_stack", 01108 psubkey); 01109 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "subkey"); 01110 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 01111 cpl_parameterlist_append(plist, p); 01112 KMO_TRY_CHECK_ERROR_STATE(); 01113 01114 // stack 1st 01115 KMO_TRY_EXIT_IF_NULL( 01116 frset = dev_frameset("tmp_delete1.fits", "tmp_delete2.fits", "tmp_delete3.fits")); 01117 KMO_TRY_CHECK_ERROR_STATE(); 01118 01119 /* --filename */ 01120 strcpy(pfilename, type); 01121 strcat(pfilename, "_123"); 01122 p = cpl_parameter_new_value("kmos.kmo_fits_stack.filename", 01123 CPL_TYPE_STRING, 01124 "Optional: The output filename (.fits will be " 01125 "added as postfix)", 01126 "kmos.kmo_fits_stack", 01127 pfilename); 01128 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "filename"); 01129 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 01130 cpl_parameterlist_append(plist, p); 01131 01132 kmo_priv_fits_stack(plist, frset); 01133 KMO_TRY_CHECK_ERROR_STATE(); 01134 cpl_frameset_delete(frset); frset = NULL; 01135 01136 if ((strcmp(type, "DARK") == 0) || 01137 (strcmp(type, "FLAT_ON") == 0) || 01138 (strcmp(type, "FLAT_OFF") == 0) || 01139 (strcmp(type, "SKY") == 0)) 01140 { 01141 // stack 2nd 01142 KMO_TRY_EXIT_IF_NULL( 01143 frset = dev_frameset("tmp_delete2.fits", "tmp_delete3.fits", "tmp_delete1.fits")); 01144 strcpy(pfilename, type); 01145 strcat(pfilename, "_231"); 01146 KMO_TRY_EXIT_IF_NULL( 01147 p = cpl_parameterlist_find(plist, "kmos.kmo_fits_stack.filename")); 01148 KMO_TRY_EXIT_IF_ERROR( 01149 cpl_parameter_set_string(p, pfilename)); 01150 01151 kmo_priv_fits_stack(plist, frset); 01152 KMO_TRY_CHECK_ERROR_STATE(); 01153 cpl_frameset_delete(frset); frset = NULL; 01154 01155 // stack 3rd 01156 KMO_TRY_EXIT_IF_NULL( 01157 frset = dev_frameset("tmp_delete3.fits", "tmp_delete1.fits", "tmp_delete2.fits")); 01158 strcpy(pfilename, type); 01159 strcat(pfilename, "_312"); 01160 KMO_TRY_EXIT_IF_NULL( 01161 p = cpl_parameterlist_find(plist, "kmos.kmo_fits_stack.filename")); 01162 KMO_TRY_EXIT_IF_ERROR( 01163 cpl_parameter_set_string(p, pfilename)); 01164 01165 kmo_priv_fits_stack(plist, frset); 01166 KMO_TRY_CHECK_ERROR_STATE(); 01167 cpl_frameset_delete(frset); frset = NULL; 01168 } 01169 } else{ 01170 /* --type (RAW, F1D, F2D, F1I, F2I, F3I) */ 01171 p = cpl_parameter_new_value("kmos.kmo_fits_stack.type", 01172 CPL_TYPE_STRING, 01173 "The KMOS data format type (either \"RAW\", " 01174 "\"F1D\", \"F2D\", \"F1I\", \"F2I\", \"F3I\", " 01175 "\"F1S\", \"F1L\", \"F2L\")", 01176 "kmos.kmo_fits_stack", 01177 F2D); 01178 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "type"); 01179 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 01180 cpl_parameterlist_append(plist, p); 01181 KMO_TRY_CHECK_ERROR_STATE(); 01182 01183 /* --mainkey */ 01184 p = cpl_parameter_new_value("kmos.kmo_fits_stack.mainkey", 01185 CPL_TYPE_STRING, 01186 "Optional: Additional keywords for primary header", 01187 "kmos.kmo_fits_stack", 01188 pmainkey); 01189 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "mainkey"); 01190 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 01191 cpl_parameterlist_append(plist, p); 01192 01193 /* --subkey */ 01194 p = cpl_parameter_new_value("kmos.kmo_fits_stack.subkey", 01195 CPL_TYPE_STRING, 01196 "Optional: Additional keywords for sub headers", 01197 "kmos.kmo_fits_stack", 01198 psubkey); 01199 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "subkey"); 01200 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 01201 cpl_parameterlist_append(plist, p); 01202 KMO_TRY_CHECK_ERROR_STATE(); 01203 01204 /* --filename */ 01205 strcpy(pfilename, "master_flat_ones"); 01206 p = cpl_parameter_new_value("kmos.kmo_fits_stack.filename", 01207 CPL_TYPE_STRING, 01208 "Optional: The output filename (.fits will be " 01209 "added as postfix)", 01210 "kmos.kmo_fits_stack", 01211 pfilename); 01212 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "filename"); 01213 cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV); 01214 cpl_parameterlist_append(plist, p); 01215 01216 KMO_TRY_EXIT_IF_NULL( 01217 frset = dev_frameset_master(cpl_frame_get_filename(frame))); 01218 KMO_TRY_CHECK_ERROR_STATE(); 01219 01220 kmo_priv_fits_stack(plist, frset); 01221 KMO_TRY_CHECK_ERROR_STATE(); 01222 cpl_frameset_delete(frset); frset = NULL; 01223 } 01224 01225 KMO_TRY_CHECK_ERROR_STATE(); 01226 cpl_msg_info("", "*******************************************"); 01227 cpl_msg_info("", "Saved a set of KMOS frames for recipe %s.", type ); 01228 cpl_msg_info("", "*******************************************"); 01229 } 01230 KMO_CATCH 01231 { 01232 KMO_CATCH_MSG(); 01233 ret_val = -1; 01234 } 01235 01236 cpl_image_delete(img1); img1 = NULL; 01237 cpl_parameterlist_delete(plist); plist = NULL; 01238 01239 return ret_val; 01240 } 01241
1.7.6.1