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 #ifndef XSH_PARAMETERS_H
00028 #define XSH_PARAMETERS_H
00029
00030
00031
00032
00033
00034 #include <cpl.h>
00035 #include <xsh_data_instrument.h>
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 typedef struct {
00046
00047 double sigma ;
00048
00049 int niter ;
00050
00051 double frac ;
00052
00053 double diff ;
00054
00055 double res_max ;
00056 } xsh_clipping_param ;
00057
00058
00059
00060
00061 typedef struct {
00062
00063 int search_window_hsize;
00064
00065 double flux_thresh;
00066
00067 double min_sn;
00068
00069 int min_order_size_x;
00070
00071 int chunk_hsize;
00072
00073 double slitlet_low_factor;
00074 double slitlet_up_factor;
00075
00076 int fixed_slice;
00077
00078 const char* method;
00079
00080
00081
00082
00083
00084
00085
00086 int qc_mode;
00087 } xsh_detect_order_param;
00088
00089
00090
00091
00092 typedef struct {
00093
00094 double min_sn;
00095 }xsh_d2_detect_order_param;
00096
00097
00098 #define DETECT_CONTINUUM_POLYNOMIAL_DEGREE 5
00099
00100 typedef struct {
00101 int search_window ;
00102 int running_window ;
00103 int fit_window ;
00105 int poly_degree ;
00106 int poly_step ;
00107 double fit_threshold ;
00108 int fmtchk_window ;
00109 int fmtchk_step ;
00110 double fmtchk_search_sn ;
00111 double fmtchk_follow_sn ;
00112 int dist_order ;
00113 } xsh_detect_continuum_param ;
00114
00115
00116
00117
00118 typedef struct {
00119
00120 int sampley;
00121
00122 int radius_x;
00123
00124 int radius_y;
00125
00126 double max_frac_grid;
00127
00128 const char* method;
00129
00130 int smooth_x;
00131
00132 int smooth_y;
00133
00134 int debug;
00135 #if 1
00136 double min_frac_grid ;
00138 #endif
00139 } xsh_background_param;
00140
00141
00142
00143
00144 #define WAVECAL_RANGE_DEFAULT 6
00145 #define WAVECAL_MARGIN_DEFAULT 3
00146
00147 typedef struct {
00148 int range ;
00150 int margin ;
00152 xsh_clipping_param *tilt_clipping ;
00153 xsh_clipping_param *specres_clipping ;
00154 double s_n_min ;
00155 } xsh_follow_arclines_param ;
00156
00157
00158
00159
00160 #define DETECT_ARCLINES_POLYNOMIAL_DEGREE 5
00161
00162 typedef enum {
00163 XSH_GAUSSIAN_METHOD,
00164 XSH_BARYCENTER_METHOD
00165 } xsh_find_center_method;
00166
00167 typedef struct {
00168
00169 int fit_window_hsize;
00170
00171 int search_window_hsize;
00172
00173 int running_median_hsize;
00174
00175 int wavesol_deg_lambda;
00176
00177 int wavesol_deg_order;
00178
00179 int wavesol_deg_slit;
00180
00181 int ordertab_deg_y ;
00182
00183 double min_sn;
00184
00185 xsh_find_center_method find_center_method;
00186 int mode_iterative;
00187 } xsh_detect_arclines_param;
00188
00189
00190
00191
00192 typedef struct {
00193 double crh_frac_max ;
00194 double sigma_lim;
00195 double f_lim;
00196 int nb_iter ;
00197 } xsh_remove_crh_single_param ;
00198
00199
00200
00201
00202 #define RECTIFY_KERNEL_PRINT(method)\
00203 (method) == CPL_KERNEL_TANH ? "TANH" : \
00204 (method) == CPL_KERNEL_SINC ? "SINC" : \
00205 (method) == CPL_KERNEL_SINC2 ? "SINC2" : \
00206 (method) == CPL_KERNEL_LANCZOS ? "LANCZOS" : \
00207 (method) == CPL_KERNEL_HAMMING ? "HAMMING" : \
00208 (method) == CPL_KERNEL_HANN ? "HANN" :"????"
00209
00210 typedef struct {
00211 char rectif_kernel[16] ;
00220 cpl_kernel kernel_type ;
00221 double rectif_radius ;
00222 double rectif_bin_lambda ;
00223 double rectif_bin_space ;
00224 int rectify_full_slit ;
00226 int conserve_flux;
00227 double slit_offset ;
00231 } xsh_rectify_param ;
00232
00233
00234
00235
00236 enum localize_method {
00237 LOC_MANUAL_METHOD,
00238 LOC_MAXIMUM_METHOD,
00239 LOC_GAUSSIAN_METHOD
00240 };
00241 #define LOCALIZE_METHOD_PRINT(method)\
00242 (method) == LOC_MANUAL_METHOD ? "MANUAL" : \
00243 (method) == LOC_MAXIMUM_METHOD ? "MAXIMUM" : \
00244 (method) == LOC_GAUSSIAN_METHOD ? "GAUSSIAN" :"????"
00245
00246 typedef struct {
00247 int loc_chunk_nb ;
00248 double loc_thresh;
00249 int loc_deg_poly;
00250 double nod_step ;
00252 enum localize_method method;
00253 double slit_position;
00254 double slit_hheight;
00255 double kappa;
00256 int niter;
00258 int use_skymask;
00259 } xsh_localize_obj_param ;
00260
00261
00262
00263 enum extract_method {
00264 LOCALIZATION_METHOD,
00265 FULL_METHOD,
00266 NOD_METHOD
00267 };
00268 #define EXTRACT_METHOD_PRINT(method)\
00269 (method) == LOCALIZATION_METHOD ? "LOCALIZATION" : \
00270 (method) == FULL_METHOD ? "FULL" : \
00271 (method) == NOD_METHOD ? "NOD" : "????"
00272
00273 typedef struct {
00274 enum extract_method method;
00275 } xsh_extract_param;
00276
00277
00278 #define MERGE_METHOD_PRINT(method)\
00279 (method) == WEIGHTED_MERGE_METHOD ? "WEIGHT" : \
00280 (method) == FULL_METHOD ? "MEAN" : "????"
00281
00282
00283 enum merge_method {
00284 WEIGHTED_MERGE_METHOD,
00285 MEAN_MERGE_METHOD
00286 };
00287
00288 typedef struct {
00289 enum merge_method method;
00290 } xsh_merge_param;
00291
00292
00293
00294 #define SUBTRACT_SKY_SINGLE_NBKPTS 1000
00295
00296 enum sky_method {
00297 BSPLINE_METHOD,
00298 MEDIAN_METHOD
00299 };
00300
00301
00302 enum bspline_sampling {
00303 UNIFORM,
00304 FINE
00305 };
00306
00307
00308 #define SKY_METHOD_PRINT(method)\
00309 (method) == BSPLINE_METHOD ? "BSPLINE" : \
00310 (method) == MEDIAN_METHOD ? "MEDIAN" : "????"
00311
00312
00313 #define BSPLINE_SAMPLING_PRINT(method)\
00314 (method) == UNIFORM ? "UNIFORM" : \
00315 (method) == FINE ? "FINE" : "????"
00316
00317
00318 typedef struct {
00319 int nbkpts1;
00320
00321 int nbkpts2;
00322
00323 int bezier_spline_order;
00324 int niter;
00325 double kappa;
00326 double ron;
00327 double gain;
00328 enum sky_method method;
00329 enum bspline_sampling bspline_sampling;
00330 int median_hsize;
00331 double slit_edges_mask;
00332 double pos1;
00333 double hheight1;
00334 double pos2;
00335 double hheight2;
00336 } xsh_subtract_sky_single_param ;
00337
00338
00339
00340
00341
00342 typedef struct {
00343 int deg_x;
00344 int deg_y;
00345 } xsh_dispersol_param ;
00346
00347
00348 enum combine_method {
00349 COMBINE_MEDIAN_METHOD,
00350 COMBINE_MEAN_METHOD
00351 };
00352
00353 #define COMBINE_METHOD_PRINT(method)\
00354 (method) == COMBINE_MEDIAN_METHOD ? "MEDIAN" : \
00355 (method) == COMBINE_MEAN_METHOD ? "MEAN" : "????"
00356
00357
00358 typedef struct {
00359 int nod_min ;
00361 int nod_clip ;
00362 double nod_clip_sigma ;
00363 int nod_clip_niter ;
00364 double nod_clip_diff ;
00365 char* throwname;
00368 enum combine_method method;
00369
00370 } xsh_combine_nod_param ;
00371
00372 typedef struct {
00373 int sub_med ;
00375 double sub_hsigma ;
00376 int sub_niter ;
00377 double sub_diff ;
00378 } xsh_subtract_nod_param ;
00379
00380
00381
00382
00383
00384 enum optextract_method {
00385 GAUSS_METHOD,
00386 GENERAL_METHOD,
00387 };
00388 #define OPTEXTRACT_METHOD_PRINT(method)\
00389 (method) == GAUSS_METHOD ? "GAUSSIAN" : \
00390 (method) == GENERAL_METHOD ? "GENERAL" : "????"
00391
00392 typedef struct {
00393 int oversample;
00394 int box_hsize;
00395 int chunk_size;
00396 double lambda_step;
00397 double clip_kappa ;
00398 double clip_frac;
00399 int clip_niter;
00400 int niter;
00401 enum optextract_method method;
00402 } xsh_opt_extract_param;
00403
00404
00405 typedef struct {
00406 int hot_cold_pix_search;
00407 double cold_pix_kappa;
00408 int cold_pix_niter;
00409 double hot_pix_kappa;
00410 int hot_pix_niter;
00411 }xsh_hot_cold_pix_param;
00412
00413 typedef struct {
00414 int fpn_llx;
00415 int fpn_lly;
00416 int fpn_urx;
00417 int fpn_ury;
00418 int fpn_hsize;
00419 int fpn_nsamples;
00420 }xsh_fpn_param;
00421
00422
00423 typedef struct {
00424 const char* ron_method;
00425 int ron_random_sizex;
00426 int ron_random_nsamples;
00428 int ron_prescan_llx;
00429 int ron_prescan_lly;
00430 int ron_prescan_urx;
00431 int ron_prescan_ury;
00433 int ron_overscan_llx;
00434 int ron_overscan_lly;
00435 int ron_overscan_urx;
00436 int ron_overscan_ury;
00438 int ron_ref_llx;
00439 int ron_ref_lly;
00440 int ron_ref_urx;
00441 int ron_ref_ury;
00443 int stacking_ks_low;
00444 int stacking_ks_iter;
00445 }xsh_ron_param;
00446
00447
00448 typedef struct {
00449 int prescan_llx;
00450 int prescan_lly;
00451 int prescan_urx;
00452 int prescan_ury;
00454 }xsh_prescan_param;
00455
00456 typedef struct {
00457 int overscan_llx;
00458 int overscan_lly;
00459 int overscan_urx;
00460 int overscan_ury;
00462 }xsh_overscan_param;
00463
00464 typedef struct {
00465 int ref_llx;
00466 int ref_lly;
00467 int ref_urx;
00468 int ref_ury;
00470 }xsh_ref_param;
00471
00472 typedef struct {
00473 int ref_x;
00474 int ref_y;
00476 }xsh_struct_param;
00477
00478 typedef struct {
00479 int ron_llx;
00480 int ron_lly;
00481 int ron_urx;
00482 int ron_ury;
00483 int ron_hsize;
00484 int ron_nsamp;
00486 }xsh_ron_dark_param;
00487
00488
00489 typedef struct {
00490 double min_slit ;
00491 double max_slit ;
00492 int min_slit_idx ;
00493 int max_slit_idx ;
00494 } xsh_slit_limit_param ;
00495
00496
00497 typedef struct {
00498 double lambda_bin ;
00499 } xsh_compute_response_param ;
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512 cpl_parameter*
00513 xsh_parameters_find( cpl_parameterlist* list,
00514 const char* recipe_id, const char* name);
00515
00516
00517 void
00518 xsh_parameters_ron_dark_create(const char* recipe_id,cpl_parameterlist* list,
00519 xsh_ron_dark_param p);
00520
00521 void
00522 xsh_parameters_prescan_create(const char* recipe_id,cpl_parameterlist* list,
00523 xsh_prescan_param p);
00524 void
00525 xsh_parameters_overscan_create(const char* recipe_id,cpl_parameterlist* list,
00526 xsh_overscan_param p);
00527 void
00528 xsh_parameters_struct_create(const char* recipe_id,cpl_parameterlist* list,
00529 xsh_struct_param p);
00530 void
00531 xsh_parameters_ref1_create(const char* recipe_id,cpl_parameterlist* list,
00532 xsh_ref_param p);
00533 void
00534 xsh_parameters_ref2_create(const char* recipe_id,cpl_parameterlist* list,
00535 xsh_ref_param p);
00536 void
00537 xsh_parameters_ron_create(const char* recipe_id,cpl_parameterlist* list,
00538 xsh_ron_param p);
00539
00540 void
00541 xsh_parameters_fpn_create(const char* recipe_id,cpl_parameterlist* list,
00542 xsh_fpn_param p);
00543
00544 void
00545 xsh_parameters_hot_cold_pix_create(const char* recipe_id,
00546 cpl_parameterlist* list,
00547 xsh_hot_cold_pix_param p);
00548 void
00549 xsh_parameters_new_int( cpl_parameterlist* list,
00550 const char* recipe_id,
00551 const char* name,
00552 int value,
00553 const char* comment);
00554 void
00555 xsh_parameters_new_double( cpl_parameterlist* list,
00556 const char* recipe_id,
00557 const char* name,
00558 double value,
00559 const char* comment);
00560
00561
00562 void xsh_parameters_new_boolean( cpl_parameterlist* list,
00563 const char* recipe_id, const char* name,int value, const char* comment);
00564 int xsh_parameters_get_boolean( const cpl_parameterlist* list,
00565 const char* recipe_id, const char* name);
00566 int xsh_parameters_get_int( cpl_parameterlist* list,
00567 const char* recipe_id, const char* name);
00568 double xsh_parameters_get_double( cpl_parameterlist* list,
00569 const char* recipe_id, const char* name);
00570
00571 void xsh_parameters_generic( const char *recipe_id,
00572 cpl_parameterlist * plist ) ;
00573 void xsh_parameters_pre_overscan( const char *recipe_id,
00574 cpl_parameterlist * plist ) ;
00575 int xsh_parameters_get_temporary( const char* recipe_id,
00576 const cpl_parameterlist* list ) ;
00577 int xsh_parameters_debug_level_get( const char* recipe_id,
00578 const cpl_parameterlist* list ) ;
00579 char * xsh_parameters_test_mode_get( const char * recipe_id,
00580 const cpl_parameterlist * list ) ;
00581 int xsh_parameters_time_stamp_get( const char * recipe_id,
00582 const cpl_parameterlist * list ) ;
00583 XSH_ARM xsh_parameters_get_arm( const char * recipe_id,
00584 const cpl_parameterlist * list );
00585
00586 void xsh_parameters_use_model_create( const char * recipe_id,
00587 cpl_parameterlist * list ) ;
00588 int xsh_parameters_use_model_get( const char * recipe_id,
00589 const cpl_parameterlist * list ) ;
00590
00591
00592
00593 void xsh_parameters_clipping_noise_create(const char* recipe_id,
00594 cpl_parameterlist* list,
00595 xsh_clipping_param noise_clip_param);
00596 xsh_clipping_param* xsh_parameters_clipping_noise_get(const char* recipe_id,
00597 cpl_parameterlist* list);
00598
00599
00600 void xsh_parameters_clipping_dcn_create(const char* recipe_id,
00601 cpl_parameterlist* list);
00602 xsh_clipping_param* xsh_parameters_clipping_dcn_get( const char* recipe_id,
00603 cpl_parameterlist* list);
00604 void xsh_parameters_detect_continuum_create( const char* recipe_id,
00605 cpl_parameterlist* list,
00606 xsh_detect_continuum_param par ) ;
00607 xsh_detect_continuum_param *
00608 xsh_parameters_detect_continuum_get(
00609 const char* recipe_id,
00610 cpl_parameterlist* list) ;
00611
00612
00613 void xsh_parameters_clipping_crh_create(const char* recipe_id,
00614 cpl_parameterlist* list, xsh_clipping_param p);
00615 xsh_clipping_param* xsh_parameters_clipping_crh_get(const char* recipe_id,
00616 cpl_parameterlist* list);
00617
00618
00619 void xsh_parameters_detect_order_create(const char* recipe_id,
00620 cpl_parameterlist* list);
00621 xsh_detect_order_param* xsh_parameters_detect_order_get(const char* recipe_id,
00622 cpl_parameterlist* list);
00623 void xsh_parameters_d2_detect_order_create(const char* recipe_id,
00624 cpl_parameterlist* list);
00625 xsh_d2_detect_order_param* xsh_parameters_d2_detect_order_get(
00626 const char* recipe_id, cpl_parameterlist* list);
00627
00628
00629 void xsh_parameters_clipping_detect_arclines_create(const char* recipe_id,
00630 cpl_parameterlist* list, xsh_clipping_param p);
00631 xsh_clipping_param* xsh_parameters_clipping_detect_arclines_get(
00632 const char* recipe_id, cpl_parameterlist* list);
00633 void xsh_parameters_detect_arclines_create(const char* recipe_id,
00634 cpl_parameterlist* list, xsh_detect_arclines_param p);
00635 xsh_detect_arclines_param* xsh_parameters_detect_arclines_get(
00636 const char* recipe_id, cpl_parameterlist* list) ;
00637
00638
00639 void xsh_parameters_background_create(const char* recipe_id,
00640 cpl_parameterlist* list);
00641 xsh_background_param* xsh_parameters_background_get(
00642 const char* recipe_id, cpl_parameterlist* list);
00643
00644
00645 void xsh_parameters_clipping_tilt_create(const char* recipe_id,
00646 cpl_parameterlist* list) ;
00647 xsh_clipping_param* xsh_parameters_clipping_tilt_get(const char* recipe_id,
00648 cpl_parameterlist* list) ;
00649 void xsh_parameters_clipping_specres_create(const char* recipe_id,
00650 cpl_parameterlist* list) ;
00651 xsh_clipping_param* xsh_parameters_clipping_specres_get(const char* recipe_id,
00652 cpl_parameterlist* list) ;
00653
00654 void xsh_parameters_wavecal_range_create(const char* recipe_id,
00655 cpl_parameterlist* list) ;
00656 int xsh_parameters_wavecal_range_get( const char* recipe_id,
00657 cpl_parameterlist* list) ;
00658 int xsh_parameters_wavecal_margin_get( const char* recipe_id,
00659 cpl_parameterlist* list) ;
00660 void xsh_parameters_wavecal_margin_create(const char* recipe_id,
00661 cpl_parameterlist* list);
00662 void xsh_parameters_wavecal_s_n_create(const char* recipe_id,
00663 cpl_parameterlist* list) ;
00664 double xsh_parameters_wavecal_s_n_get( const char* recipe_id,
00665 cpl_parameterlist* list) ;
00666
00667 void xsh_parameters_remove_crh_single_create( const char * recipe_id,
00668 cpl_parameterlist * plist,
00669 xsh_remove_crh_single_param p );
00670 xsh_remove_crh_single_param * xsh_parameters_remove_crh_single_get(
00671 const char* recipe_id,
00672 cpl_parameterlist* list);
00673
00674 void xsh_parameters_rectify_create( const char * recipe_id,
00675 cpl_parameterlist * plist,
00676 xsh_rectify_param p ) ;
00677 xsh_rectify_param * xsh_parameters_rectify_get(
00678 const char* recipe_id,
00679 cpl_parameterlist* list);
00680 int xsh_parameters_rectify_fast_get( const char* recipe_id,
00681 cpl_parameterlist* list);
00682
00683
00684 void xsh_parameters_compute_response_create( const char * recipe_id,
00685 cpl_parameterlist * plist,
00686 xsh_compute_response_param p ) ;
00687 xsh_compute_response_param *
00688 xsh_parameters_compute_response_get( const char * recipe_id,
00689 cpl_parameterlist * list) ;
00690
00691
00692 void xsh_parameters_localize_obj_create( const char * recipe_id,
00693 cpl_parameterlist * plist, xsh_localize_obj_param p ) ;
00694 xsh_localize_obj_param * xsh_parameters_localize_obj_get(
00695 const char* recipe_id, cpl_parameterlist* list);
00696
00697
00698 void xsh_parameters_extract_create( const char * recipe_id,
00699 cpl_parameterlist * plist,
00700 xsh_extract_param p,
00701 enum extract_method method) ;
00702
00703 xsh_extract_param * xsh_parameters_extract_get(
00704 const char* recipe_id, cpl_parameterlist* list);
00705
00706
00707 void xsh_parameters_subtract_sky_single_create( const char * recipe_id,
00708 cpl_parameterlist * plist, xsh_subtract_sky_single_param p);
00709 xsh_subtract_sky_single_param* xsh_parameters_subtract_sky_single_get(
00710 const char* recipe_id, cpl_parameterlist* list);
00711
00712
00713 int xsh_parameters_subtract_sky_single_get_first( const char* recipe_id,
00714 cpl_parameterlist* list) ;
00715 int xsh_parameters_subtract_sky_single_get_second( const char* recipe_id,
00716 cpl_parameterlist* list) ;
00717
00718 int xsh_parameters_subtract_sky_single_get_niter( const char* recipe_id,
00719 cpl_parameterlist* list) ;
00720
00721
00722 double xsh_parameters_subtract_sky_single_get_kappa( const char* recipe_id,
00723 cpl_parameterlist* list) ;
00724
00725 double xsh_parameters_subtract_sky_single_get_ron( const char* recipe_id,
00726 cpl_parameterlist* list) ;
00727
00728 double xsh_parameters_subtract_sky_single_get_gain( const char* recipe_id,
00729 cpl_parameterlist* list) ;
00730
00731 int xsh_parameters_subtract_sky_single_get_true( const char* recipe_id,
00732 cpl_parameterlist* list) ;
00733
00734 void xsh_parameters_dosky_domap_get( const char *recipe_id,
00735 cpl_parameterlist *list,
00736 cpl_frame* wavemap_frame,
00737 cpl_frame* slitmap_frame,
00738 int* dosky, int* domap);
00739
00740
00741
00742 void xsh_parameters_merge_ord_create( const char * recipe_id,
00743 cpl_parameterlist * plist,
00744 int p ) ;
00745 xsh_merge_param * xsh_parameters_merge_ord_get( const char* recipe_id,
00746 cpl_parameterlist* list) ;
00747
00748
00749 void xsh_parameters_optimal_extract_create( const char * recipe_id,
00750 cpl_parameterlist * plist,
00751 int p ) ;
00752 double xsh_parameters_optimal_extract_get_kappa( const char* recipe_id,
00753 cpl_parameterlist* list) ;
00754 void xsh_parameters_dispersol_create(const char* recipe_id,
00755 cpl_parameterlist* list, xsh_dispersol_param p) ;
00756 xsh_dispersol_param* xsh_parameters_dispersol_get( const char* recipe_id,
00757 cpl_parameterlist* list) ;
00758
00759 void xsh_parameters_combine_nod_create( const char * recipe_id,
00760 cpl_parameterlist* list,
00761 xsh_combine_nod_param p) ;
00762 xsh_combine_nod_param * xsh_parameters_combine_nod_get( const char * recipe_id,
00763 cpl_parameterlist* list);
00764
00765 void xsh_parameters_opt_extract_create( const char* recipe_id,
00766 cpl_parameterlist* list, xsh_opt_extract_param opt_extract_par);
00767 xsh_opt_extract_param* xsh_parameters_opt_extract_get( const char* recipe_id,
00768 cpl_parameterlist* list);
00769
00770 #if 0
00771 void xsh_parameters_subtract_nod_create( const char* recipe_id,
00772 cpl_parameterlist* list,
00773 xsh_subtract_nod_param p) ;
00774 #endif
00775
00776 void xsh_parameters_slit_limit_create( const char* recipe_id,
00777 cpl_parameterlist* list,
00778 xsh_slit_limit_param p ) ;
00779 xsh_slit_limit_param * xsh_parameters_slit_limit_get( const char * recipe_id,
00780 cpl_parameterlist* list ) ;
00781
00782 void xsh_parameters_geom_ifu_mode_create( const char* recipe_id,
00783 cpl_parameterlist* list ) ;
00784 int xsh_parameters_geom_ifu_mode_get( const char * recipe_id,
00785 cpl_parameterlist* list) ;
00786 cpl_parameterlist*
00787 xsh_parameters_create_from_drs_table(const cpl_table* tab,
00788 const char* recipe_id);
00789
00790 #endif