00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifdef HAVE_CONFIG_H
00029 #include <config.h>
00030 #endif
00031
00032
00040
00043
00044
00045
00046
00047
00048
00049
00050
00051 #include <xsh_error.h>
00052
00053 #include <xsh_utils.h>
00054 #include <xsh_msg.h>
00055 #include <xsh_model_utils.h>
00056 #include <xsh_utils_scired_slit.h>
00057 #include <xsh_data_instrument.h>
00058 #include <xsh_data_spectrum1D.h>
00059
00060 #include <xsh_dfs.h>
00061 #include <xsh_pfits.h>
00062
00063 #include <xsh_drl.h>
00064 #include <xsh_drl_check.h>
00065 #include <xsh_model_arm_constants.h>
00066
00067
00068 #include <cpl.h>
00069
00070
00071
00072
00073
00074
00075 #define RECIPE_ID "xsh_scired_slit_nod"
00076 #define RECIPE_AUTHOR "P.Goldoni, L.Guglielmi, R. Haigron, F. Royer, D. Bramich A. Modigliani"
00077 #define RECIPE_CONTACT "amodigli@eso.org"
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 static int xsh_scired_slit_nod_create(cpl_plugin *);
00088 static int xsh_scired_slit_nod_exec(cpl_plugin *);
00089 static int xsh_scired_slit_nod_destroy(cpl_plugin *);
00090
00091
00092 static void xsh_scired_slit_nod(cpl_parameterlist *, cpl_frameset *);
00093
00094
00095
00096
00097 static char xsh_scired_slit_nod_description_short[] =
00098 "Reduce science frames in SLIT configuration and nod mode";
00099
00100 static char xsh_scired_slit_nod_description[] =
00101 "This recipe reduces science exposure in SLIT configuration and NOD mode\n\
00102 Input Frames : \n\
00103 - A set of n Science frames ( n even ), \
00104 Tag = OBJECT_SLIT_NOD_arm\n\
00105 - Spectral format table (Tag = SPECTRAL_FORMAT_TAB_arm)\n\
00106 - [UVB,VIS] A master bias frame (Tag = MASTER_BIAS_arm)\n\
00107 - A master flat frame (Tag = MASTER_FLAT_SLIT_arm)\n\
00108 - An order table frame(Tag = ORDER_TABLE_EDGES_SLIT_arm)\n\
00109 - [poly mode] A wave solution frame(Tag = WAVE_TAB_2D_arm)\n\
00110 - [poly mode] A wave map frame(Tag = WAVE_MAP_arm)\n\
00111 - [poly mode] A disp table frame(Tag = DISP_TAB_arm)\n\
00112 - [physical model mode]A model cfg table (Format = TABLE, Tag = XSH_MOD_CFG_TAB_arm)\n\
00113 - [OPTIONAL] A non-linear badpixel map (Tag = BP_MAP_NL_arm)\n\
00114 - [OPTIONAL] A reference badpixel map (Tag = BP_MAP_RP_arm)\n\
00115 - [OPTIONAL] The instrument response table (Tag = RESPONSE_MERGE1D_SLIT_arm)\n\
00116 - [OPTIONAL] An atmospheric extinction table (Tag = ATMOS_EXT_arm)\n\
00117 - [OPTIONAL] A telluric mask (Tag = TELL_MASK_arm)\n\
00118 Products : \n\
00119 - PREFIX_ORDER2D_arm (2 dimension)\n\
00120 - PREFIX_ORDER1D_arm (1 dimension)\n\
00121 - PREFIX_MERGE2D_arm (2 dimension)\n\
00122 - PREFIX_MERGE1D_arm (1 dimension)\n\
00123 - PREFIX_WAVE_MAP_arm, wave map image\n\
00124 - PREFIX_SLIT_MAP_arm, slit map image\n\
00125 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_ORDER2D_arm (2 dimension)\n\
00126 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_ORDER1D_arm (1 dimension)\n\
00127 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_MERGE2D_arm (2 dimension)\n\
00128 - [OPTIONAL, if response and atm ext are provided] PREFIX_FLUX_MERGE1D_arm (1 dimension)\n\
00129 - where PREFIX is SCI, FLUX, TELL if input raw DPR.TYPE contains OBJECT or FLUX or TELLURIC";
00130
00131
00132
00133
00142
00143
00144 int cpl_plugin_get_info(cpl_pluginlist *list) {
00145 cpl_recipe *recipe = NULL;
00146 cpl_plugin *plugin = NULL;
00147
00148 recipe = cpl_calloc(1, sizeof(*recipe));
00149 if ( recipe == NULL ){
00150 return -1;
00151 }
00152
00153 plugin = &recipe->interface ;
00154
00155 cpl_plugin_init(plugin,
00156 CPL_PLUGIN_API,
00157 XSH_BINARY_VERSION,
00158 CPL_PLUGIN_TYPE_RECIPE,
00159 RECIPE_ID,
00160 xsh_scired_slit_nod_description_short,
00161 xsh_scired_slit_nod_description,
00162 RECIPE_AUTHOR,
00163 RECIPE_CONTACT,
00164 xsh_get_license(),
00165 xsh_scired_slit_nod_create,
00166 xsh_scired_slit_nod_exec,
00167 xsh_scired_slit_nod_destroy);
00168
00169 cpl_pluginlist_append(list, plugin);
00170
00171 return (cpl_error_get_code() != CPL_ERROR_NONE);
00172 }
00173
00174
00175
00176
00177
00187
00188
00189 static int xsh_scired_slit_nod_create(cpl_plugin *plugin){
00190
00191 cpl_recipe *recipe = NULL;
00192 xsh_remove_crh_single_param crh_single = { 0.1, 20.0, 2.0, 4} ;
00193 xsh_rectify_param rectify = { "tanh",
00194 CPL_KERNEL_DEFAULT,
00195 2,
00196 -1.0,
00197 -1.0,
00198 1,
00199 0,0. };
00200 xsh_localize_obj_param loc_obj =
00201 {10, 0.1, 0, 0, LOC_GAUSSIAN_METHOD, 0, 0.5,3,3, FALSE};
00202 xsh_extract_param extract_par =
00203 { NOD_METHOD};
00204 xsh_combine_nod_param nod_param = { 5, TRUE, 5, 2, 0.1, "throwlist.asc", COMBINE_MEAN_METHOD} ;
00205 xsh_slit_limit_param slit_limit_param = { MIN_SLIT, MAX_SLIT, 0, 0 } ;
00206
00207 xsh_stack_param stack_param = {"median",5.,5.};
00208 xsh_interpolate_bp_param ipol_par = {30 };
00209
00210 xsh_init();
00211
00212
00213 nod_param.nod_min = 5;
00214 nod_param.nod_clip = TRUE;
00215 nod_param.nod_clip_sigma = 5.;
00216 nod_param.nod_clip_niter = 2;
00217 nod_param.nod_clip_diff = 0.1;
00218 nod_param.throwname = "throwlist.asc";
00219
00220
00221 assure( plugin != NULL, CPL_ERROR_NULL_INPUT, "Null plugin");
00222
00223
00224 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
00225 CPL_ERROR_TYPE_MISMATCH,
00226 "Plugin is not a recipe");
00227
00228 recipe = (cpl_recipe *)plugin;
00229
00230
00231 recipe->parameters = cpl_parameterlist_new();
00232 assure( recipe->parameters != NULL,
00233 CPL_ERROR_ILLEGAL_OUTPUT,
00234 "Memory allocation failed!");
00235
00236
00237 check( xsh_parameters_generic( RECIPE_ID, recipe->parameters ) ) ;
00238 xsh_parameters_decode_bp(RECIPE_ID,recipe->parameters,-1);
00239 check( xsh_parameters_pre_overscan( RECIPE_ID, recipe->parameters ) ) ;
00240 check(xsh_parameters_stack_create(RECIPE_ID,recipe->parameters,stack_param));
00241
00242
00243 check( xsh_parameters_remove_crh_single_create( RECIPE_ID,
00244 recipe->parameters, crh_single));
00245
00246
00247 check(xsh_parameters_rectify_create(RECIPE_ID,recipe->parameters,
00248 rectify )) ;
00249 check( xsh_parameters_new_boolean( recipe->parameters, RECIPE_ID,
00250 "rectify-fast", TRUE,
00251 "Fast if TRUE (Rect[B-A] = -Rect[A-B]), in that case only entire pixel shifts are applied. "));
00252
00253
00254
00255 check(xsh_parameters_localize_obj_create(RECIPE_ID,recipe->parameters,
00256 loc_obj )) ;
00257
00258 check( xsh_parameters_new_double( recipe->parameters, RECIPE_ID,
00259 "localize-nod-throw", loc_obj.nod_step,
00260 "Step (arcsec) between A and B images in nodding mode."));
00261
00262
00263
00264 check(xsh_parameters_extract_create(RECIPE_ID,
00265 recipe->parameters,
00266 extract_par,NOD_METHOD )) ;
00267
00268 check(xsh_parameters_interpolate_bp_create(RECIPE_ID,
00269 recipe->parameters,ipol_par)) ;
00270
00271 check(xsh_parameters_combine_nod_create(RECIPE_ID,
00272 recipe->parameters,
00273 nod_param )) ;
00274
00275 check(xsh_parameters_slit_limit_create(RECIPE_ID,
00276 recipe->parameters,
00277 slit_limit_param )) ;
00278 check( xsh_parameters_new_boolean( recipe->parameters, RECIPE_ID,
00279 "correct-sky-by-median", TRUE,
00280 "TRUE if the resampled spectrum at each wavelength is median subtracted to remove sky lines"));
00281
00282
00283
00284
00285
00286
00287 cleanup:
00288 if ( cpl_error_get_code() != CPL_ERROR_NONE ){
00289 xsh_error_dump(CPL_MSG_ERROR);
00290 return 1;
00291 }
00292 else {
00293 return 0;
00294 }
00295 }
00296
00297
00303
00304
00305 static int xsh_scired_slit_nod_exec(cpl_plugin *plugin) {
00306 cpl_recipe *recipe = NULL;
00307
00308
00309
00310 assure( plugin != NULL, CPL_ERROR_NULL_INPUT, "Null plugin" );
00311
00312
00313 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
00314 CPL_ERROR_TYPE_MISMATCH, "Plugin is not a recipe");
00315
00316 recipe = (cpl_recipe *)plugin;
00317
00318
00319 xsh_scired_slit_nod(recipe->parameters, recipe->frames);
00320
00321 cleanup:
00322 if ( cpl_error_get_code() != CPL_ERROR_NONE ) {
00323 xsh_error_dump(CPL_MSG_ERROR);
00324 xsh_error_reset();
00325 return 1;
00326 }
00327 else {
00328 return 0;
00329 }
00330 }
00331
00332
00338
00339 static int xsh_scired_slit_nod_destroy(cpl_plugin *plugin)
00340 {
00341 cpl_recipe *recipe = NULL;
00342
00343
00344 xsh_error_reset();
00345
00346 assure( plugin != NULL, CPL_ERROR_NULL_INPUT, "Null plugin" );
00347
00348
00349 assure( cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE,
00350 CPL_ERROR_TYPE_MISMATCH, "Plugin is not a recipe");
00351
00352 recipe = (cpl_recipe *)plugin;
00353
00354 xsh_free_parameterlist(&recipe->parameters);
00355
00356 cleanup:
00357 if (cpl_error_get_code() != CPL_ERROR_NONE)
00358 {
00359 return 1;
00360 }
00361 else
00362 {
00363 return 0;
00364 }
00365 }
00366 #if 0
00367 static void change_file_name( cpl_frame * frame, const char * name )
00368 {
00369 const char * old_name ;
00370 char * cmd ;
00371
00372 old_name = cpl_frame_get_filename( frame ) ;
00373 cmd = xsh_stringcat_any( "mv ", old_name, " ", name, NULL ) ;
00374 cpl_frame_set_filename( frame, name ) ;
00375
00376 system( cmd ) ;
00377 XSH_FREE( cmd ) ;
00378 }
00379 #endif
00380
00381
00389 static void
00390 xsh_get_binning(cpl_frameset* raws,int* binx, int* biny)
00391 {
00392 cpl_frame* frame=NULL;
00393 const char* name=NULL;
00394 cpl_propertylist* plist=NULL;
00395 int nraw=0;
00396
00397 XSH_ASSURE_NOT_NULL_MSG(raws,"Null pointer for input raw frameset");
00398 nraw=cpl_frameset_get_size(raws);
00399
00400 XSH_ASSURE_NOT_ILLEGAL_MSG(nraw > 0,"nraw = 0 Provide at least a raw frame");
00401
00402 check(frame=cpl_frameset_get_first(raws));
00403 check(name=cpl_frame_get_filename(frame));
00404 check(plist=cpl_propertylist_load(name,0));
00405 check(*binx=xsh_pfits_get_binx(plist));
00406 check(*biny=xsh_pfits_get_biny(plist));
00407
00408 cleanup:
00409 xsh_free_propertylist(&plist);
00410
00411 return;
00412 }
00413
00414
00415
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00471
00472 static void xsh_scired_slit_nod( cpl_parameterlist* parameters,
00473 cpl_frameset* frameset)
00474 {
00475 const char* recipe_tags[3] = {XSH_OBJECT_SLIT_NOD,XSH_STD_TELL_SLIT_NOD,XSH_STD_FLUX_SLIT_NOD};
00476 int recipe_tags_size = 3;
00477
00478
00479 cpl_frameset *raws = NULL;
00480 cpl_frameset *raws_ord_set = NULL;
00481 cpl_frameset *calib = NULL;
00482
00483
00484 cpl_frame* bpmap = NULL;
00485 cpl_frame *master_bias = NULL;
00486 cpl_frame* master_flat = NULL;
00487 cpl_frame* order_tab_edges = NULL;
00488 cpl_frame * wave_tab = NULL ;
00489 cpl_frame * model_config_frame = NULL;
00490 cpl_frame * wavemap = NULL;
00491 cpl_frame * spectral_format = NULL;
00492 cpl_frame *tellmask_frame = NULL;
00493
00494
00495 int rectify_fast = 0 ;
00496 xsh_instrument* instrument = NULL;
00497 xsh_remove_crh_single_param * crh_single_par = NULL;
00498 xsh_rectify_param * rectify_par = NULL;
00499 xsh_localize_obj_param * loc_obj_par = NULL;
00500 int merge_par = 0;
00501 xsh_extract_param * extract_par = NULL;
00502 xsh_combine_nod_param * combine_nod_par = NULL;
00503 xsh_slit_limit_param * slit_limit_par = NULL;
00504 xsh_stack_param* stack_par=NULL;
00505
00506 char comb_tag[256];
00507 int binx=0;
00508 int biny=0;
00509
00510 int nb_raw_frames;
00511
00512
00513
00514
00515
00516
00517 cpl_frameset* raws_avg=NULL;
00518 cpl_frame* disp_tab_frame=NULL;
00519 cpl_frame* slitmap=NULL;
00520 cpl_frame *skymask_frame = NULL;
00521
00522 int do_computemap=1;
00523 int do_flatfield = CPL_TRUE;
00524
00525 char *rec_prefix = NULL;
00526
00527 cpl_frameset *nod_set = NULL;
00528 cpl_frameset *comb_set = NULL;
00529 cpl_frameset *comb_eff_set = NULL;
00530 cpl_frame *comb_frame = NULL;
00531 cpl_frame *combeso_frame = NULL;
00532 cpl_frame *res2D_frame = NULL;
00533 cpl_frame *loc_table_frame = NULL;
00534 cpl_frame *res1D_frame = NULL;
00535 cpl_frame *res1Deso_frame = NULL;
00536 cpl_frame *s1D_frame = NULL;
00537 cpl_frame* response_ord_frame=NULL;
00538 cpl_frame * fluxcal_1D_frame = NULL ;
00539 cpl_frame * fluxcal_2D_frame = NULL ;
00540 cpl_frame * fluxcal_rect_1D_frame = NULL ;
00541 cpl_frame * fluxcal_rect_2D_frame = NULL ;
00542
00543 cpl_frame* frm_atmext=NULL;
00544 int pre_overscan_corr=0;
00545 xsh_interpolate_bp_param *ipol_bp=NULL;
00546 int corr_sky=0;
00547
00548
00549
00550
00551 check( xsh_begin( frameset, parameters, &instrument, &raws, &calib,
00552 recipe_tags, recipe_tags_size, RECIPE_ID,
00553 XSH_BINARY_VERSION,
00554 xsh_scired_slit_nod_description_short));
00555
00556
00557 assure( instrument->mode == XSH_MODE_SLIT, CPL_ERROR_ILLEGAL_INPUT,
00558 "Instrument NOT in Slit Mode");
00559
00560 check(xsh_ensure_raws_number_is_even(raws));
00561 xsh_recipe_params_check(parameters,instrument,RECIPE_ID);
00562 if(instrument->arm == XSH_ARM_NIR) {
00563 xsh_instrument_nir_corr_if_JH(raws,instrument);
00564 }
00565
00566
00567
00568 check( rec_prefix = xsh_set_recipe_file_prefix(raws,"xsh_scired_slit_nod"));
00569
00570
00571 check( nb_raw_frames = cpl_frameset_get_size( raws));
00572 check( raws_ord_set = xsh_order_frameset_by_date( raws));
00573
00574 xsh_msg_dbg_low( "Nb of Raw frames: %d", nb_raw_frames);
00575
00576
00577
00578
00579 check( stack_par = xsh_stack_frames_get( RECIPE_ID, parameters));
00580
00581
00582
00583
00584
00585 if ( xsh_instrument_get_arm(instrument) != XSH_ARM_NIR){
00586 xsh_get_binning(raws, &binx, &biny);
00587 } else {
00588 binx=1;
00589 biny=1;
00590 }
00591
00592 check( xsh_scired_nod_get_parameters( parameters,instrument,
00593 &crh_single_par, &rectify_par,
00594 &extract_par,
00595 &combine_nod_par,
00596 &slit_limit_par, &loc_obj_par,
00597 &rectify_fast, &pre_overscan_corr,
00598 RECIPE_ID));
00599 check(ipol_bp = xsh_parameters_interpolate_bp_get(RECIPE_ID,parameters));
00600 check( corr_sky = xsh_parameters_get_boolean( parameters, RECIPE_ID,
00601 "correct-sky-by-median"));
00602
00603 check( xsh_scired_slit_nod_get_calibs(raws,calib,instrument,
00604 &bpmap,&master_bias,&master_flat,
00605 &order_tab_edges,&wave_tab,
00606 &model_config_frame,&wavemap,&slitmap,
00607 &disp_tab_frame,
00608 &spectral_format,
00609 &skymask_frame,
00610 &response_ord_frame,
00611 &frm_atmext,
00612 do_computemap,
00613 loc_obj_par->use_skymask,
00614 pre_overscan_corr,
00615 rec_prefix,RECIPE_ID));
00616
00617 tellmask_frame = xsh_find_frame_with_tag(calib,XSH_TELL_MASK, instrument);
00618
00619 if ( rectify_fast == CPL_FALSE && loc_obj_par->method == LOC_MANUAL_METHOD){
00620 xsh_error_msg( "Mode accurate can not be use with localize-method MANUAL");
00621 }
00622
00623
00624
00625
00626 rectify_par->conserve_flux=FALSE;
00627 check( xsh_prepare( raws_ord_set, bpmap, master_bias, XSH_OBJECT_SLIT_NOD,
00628 instrument,pre_overscan_corr,CPL_TRUE));
00629
00630
00631 check(xsh_frameset_check_uniform_exptime(raws_ord_set,instrument));
00632
00633 cpl_frameset* crh_clean=NULL;
00634 check(crh_clean = xsh_frameset_crh_single(raws_ord_set,crh_single_par,instrument, rec_prefix,"NOD"));
00635
00636
00637 check( raws_avg = xsh_nod_group_by_reloff( crh_clean,instrument,stack_par));
00638 xsh_free_frameset(&crh_clean);
00639
00640 check( nod_set = xsh_subtract_sky_nod( raws_avg, instrument, rectify_fast));
00641
00642
00643 if ( rectify_fast ){
00644
00645 check(comb_set=xsh_scired_slit_nod_fast(
00646 nod_set,
00647 spectral_format,
00648 master_flat,
00649 order_tab_edges,
00650 wave_tab,
00651 model_config_frame,
00652 disp_tab_frame,
00653 wavemap,
00654 instrument,
00655 crh_single_par,
00656 rectify_par,
00657 do_flatfield,corr_sky,1,
00658 rec_prefix,
00659 &comb_eff_set));
00660
00661 }
00662 else {
00663 check( comb_set = xsh_scired_slit_nod_accurate(
00664 nod_set,
00665 spectral_format,
00666 master_flat,
00667 order_tab_edges,
00668 wave_tab,
00669 model_config_frame,
00670 disp_tab_frame,
00671 wavemap,
00672 skymask_frame,
00673 instrument,
00674 crh_single_par,
00675 rectify_par,
00676 loc_obj_par,
00677 combine_nod_par->throwname,
00678 do_flatfield,
00679 rec_prefix
00680 ));
00681
00682
00683 }
00684
00685
00686
00687
00688 sprintf( comb_tag,"%s_%s",
00689 rec_prefix, XSH_GET_TAG_FROM_ARM( XSH_ORDER2D, instrument));
00690 check( comb_frame = xsh_combine_nod( comb_set, combine_nod_par,
00691 comb_tag, instrument,&combeso_frame));
00692
00693
00694 check( res2D_frame = xsh_merge_ord( comb_frame, instrument,
00695 merge_par,rec_prefix));
00696
00697
00698 if ( extract_par->method == LOCALIZATION_METHOD ||
00699 extract_par->method == CLEAN_METHOD ) {
00700 xsh_msg( "Re-Localize before extraction" ) ;
00701 check( loc_table_frame = xsh_localize_obj( comb_frame, skymask_frame,instrument,
00702 loc_obj_par, slit_limit_par, "LOCALIZE.fits"));
00703 }
00704
00705 xsh_msg( "Extract 1D order-by-order spectrum" ) ;
00706 check( res1D_frame = xsh_extract_clean( comb_frame, loc_table_frame,
00707 instrument, extract_par, ipol_bp, &res1Deso_frame, rec_prefix));
00708 xsh_msg( "Merge orders with 1D frame" ) ;
00709 check( s1D_frame = xsh_merge_ord( res1D_frame, instrument,
00710 merge_par,rec_prefix));
00711 check( xsh_mark_tell( s1D_frame, tellmask_frame));
00712
00713
00714
00715 if(response_ord_frame != NULL && frm_atmext != NULL) {
00716 check(xsh_flux_calibrate(combeso_frame,res1Deso_frame,frm_atmext,
00717 response_ord_frame,merge_par,instrument,rec_prefix,
00718 &fluxcal_rect_2D_frame,&fluxcal_rect_1D_frame,
00719 &fluxcal_2D_frame,&fluxcal_1D_frame));
00720 }
00721
00722
00723
00724 if(model_config_frame!=NULL && wavemap != NULL&& slitmap != NULL) {
00725
00726 check(xsh_compute_resampling_accuracy(wavemap,slitmap,order_tab_edges,model_config_frame,res2D_frame,instrument));
00727
00728 check(xsh_compute_resampling_accuracy(wavemap,slitmap,order_tab_edges,model_config_frame,combeso_frame,instrument));
00729
00730 check(xsh_compute_wavelength_resampling_accuracy(wavemap,order_tab_edges,model_config_frame,res1Deso_frame,instrument));
00731
00732 check(xsh_compute_wavelength_resampling_accuracy(wavemap,order_tab_edges,model_config_frame,s1D_frame,instrument));
00733
00734 xsh_add_afc_info(model_config_frame,wavemap);
00735 xsh_add_afc_info(model_config_frame,slitmap);
00736
00737 if(fluxcal_rect_2D_frame != NULL) {
00738
00739 check(xsh_compute_resampling_accuracy(wavemap,slitmap,order_tab_edges,model_config_frame,fluxcal_rect_2D_frame,instrument));
00740 check(xsh_compute_resampling_accuracy(wavemap,slitmap,order_tab_edges,model_config_frame,fluxcal_2D_frame,instrument));
00741
00742 check(xsh_compute_wavelength_resampling_accuracy(wavemap,order_tab_edges,model_config_frame,fluxcal_rect_1D_frame,instrument));
00743 check(xsh_compute_wavelength_resampling_accuracy(wavemap,order_tab_edges,model_config_frame,fluxcal_1D_frame,instrument));
00744
00745 }
00746
00747 }
00748
00749
00750 check( xsh_add_product_image( combeso_frame, frameset,
00751 parameters, RECIPE_ID, instrument,NULL));
00752
00753 check( xsh_add_product_image( res1Deso_frame, frameset, parameters,
00754 RECIPE_ID, instrument,NULL));
00755
00756 check( xsh_add_product_pre( res2D_frame, frameset, parameters,
00757 RECIPE_ID, instrument));
00758 check(xsh_monitor_spectrum1D_flux(s1D_frame,instrument));
00759
00760 check( xsh_add_product_spectrum( s1D_frame, frameset, parameters,
00761 RECIPE_ID, instrument));
00762
00763 if ( do_computemap){
00764
00765 check( xsh_add_product_image( wavemap, frameset,
00766 parameters, RECIPE_ID, instrument,NULL));
00767
00768
00769 check( xsh_add_product_image( slitmap, frameset,
00770 parameters, RECIPE_ID, instrument,NULL));
00771 }
00772
00773 if(fluxcal_2D_frame != NULL) {
00774 check( xsh_add_product_image(fluxcal_rect_2D_frame,frameset,parameters,
00775 RECIPE_ID, instrument,NULL));
00776 check( xsh_add_product_image(fluxcal_rect_1D_frame,frameset,parameters,
00777 RECIPE_ID, instrument,NULL));
00778
00779 check( xsh_add_product_spectrum( fluxcal_2D_frame, frameset, parameters,
00780 RECIPE_ID, instrument));
00781 check( xsh_add_product_spectrum( fluxcal_1D_frame, frameset, parameters,
00782 RECIPE_ID, instrument));
00783 }
00784
00785
00786 cleanup:
00787
00788 xsh_end( RECIPE_ID, frameset, parameters);
00789 xsh_instrument_free( &instrument);
00790 xsh_free_frameset( &raws);
00791 xsh_free_frameset( &calib);
00792 XSH_FREE( rec_prefix);
00793 XSH_FREE(ipol_bp);
00794 xsh_free_frameset( &raws_ord_set);
00795 xsh_free_frameset( &raws_avg);
00796 xsh_free_frame( &wavemap);
00797 xsh_free_frame( &slitmap);
00798
00799
00800 XSH_FREE( stack_par);
00801 XSH_FREE( rectify_par);
00802 XSH_FREE( crh_single_par);
00803 XSH_FREE( loc_obj_par);
00804 XSH_FREE( slit_limit_par);
00805 XSH_FREE( combine_nod_par);
00806 XSH_FREE( extract_par);
00807
00808
00809 xsh_free_frameset( &nod_set);
00810 xsh_free_frameset( &comb_set);
00811 xsh_free_frameset( &comb_eff_set);
00812 xsh_free_frame( &comb_frame);
00813 xsh_free_frame( &combeso_frame);
00814 xsh_free_frame( &res2D_frame);
00815 xsh_free_frame( &loc_table_frame);
00816 xsh_free_frame( &res1D_frame);
00817
00818 xsh_free_frame( &res1Deso_frame);
00819 xsh_free_frame( &s1D_frame);
00820 xsh_free_frame(&fluxcal_1D_frame) ;
00821 xsh_free_frame(&fluxcal_2D_frame) ;
00822 xsh_free_frame(&fluxcal_rect_1D_frame) ;
00823 xsh_free_frame(&fluxcal_rect_2D_frame) ;
00824
00825 return;
00826 }
00827