67#define MODULE_ID "XSH_RECTIFY"
88 {
"slit-n",required_argument, 0,
NSLIT_OPT},
89 {
"debug", required_argument, 0,
DEBUG_OPT},
96 puts(
"Unitary test of xsh_rectify" ) ;
97 puts(
"Usage: test_rectify [options] <input_files>" ) ;
99 puts(
" --kernel=<name> : TANH, SINC, SINC2, LANCZOS, HAMMING, HANN [TANH]");
100 puts(
" --radius=<nn> : Radius [4]" ) ;
101 puts(
" --bin-lambda=<n> : Bin in Lambda [0.1]" ) ;
102 puts(
" --bin-space=<n> : Bin in Slit [0.1]" ) ;
103 puts(
" --order-min=<n> : Minimum abs order" );
104 puts(
" --order-max=<n> : Maximum abs order" );
105 puts(
" --slit-min=<n> : Minimum slit to rectify" );
106 puts(
" --slit-n=<n> : Number of pixels in slit rectified frame" );
107 puts(
" --debug=<n> : Level of debug NONE | LOW | MEDIUM | HIGH [MEDIUM]" );
108 puts(
" --help : What you see" ) ;
109 puts(
"\nInput Files" ) ;
110 puts(
"The input files argument MUST be in this order:" ) ;
111 puts(
" 1. Science frame in PRE format" ) ;
112 puts(
" 2. SOF\n" ) ;
113 puts(
" 3. [OPTIONAL] Shift slit tab\n" ) ;
119 double *slit_min,
int *nslit)
122 int option_index = 0;
124 while (( opt = getopt_long (argc, argv,
Options,
151 xsh_msg(
"Invalid kernel option %s", optarg);
166 sscanf( optarg,
"%64d", order_min);
169 sscanf( optarg,
"%64d", order_max);
172 sscanf( optarg,
"%64lf", slit_min) ;
175 sscanf( optarg,
"%64d", nslit);
178 if ( strcmp( optarg,
"LOW")==0){
181 else if ( strcmp( optarg,
"HIGH")==0){
184 else if ( strcmp( optarg,
"NONE")==0){
188 default:
Help() ; exit( 0 ) ;
200int main(
int argc,
char **argv)
207 const char *sof_name = NULL;
208 cpl_frameset *set = NULL;
209 const char * sci_name = NULL ;
211 cpl_frameset *wavesol_frameset = NULL;
212 cpl_frameset *result_frameset = NULL;
213 cpl_frameset *merge_frameset = NULL;
214 cpl_frame *sci_frame = NULL;
215 cpl_frame *orderlist_frame = NULL;
216 cpl_frame *slitmap_frame = NULL;
217 cpl_frame *wavesol_frame = NULL;
218 cpl_frame *model_frame = NULL;
219 cpl_frame *spectralformat_frame = NULL;
220 cpl_frame *recorder_frame = NULL ;
221 cpl_frame *recordereso_frame = NULL ;
222 cpl_frame *recordertab_frame = NULL ;
223 int order_min = -1, order_max = -1;
224 int rec_min_index=-1, rec_max_index=-1;
227 int nslit_c=20, nslit=-100;
228 double slit_min_c=0, slit_min=-100;
231 cpl_frame *spectrum_frame = NULL;
232 cpl_frame *slit_shifttab_frame = NULL;
233 const char *slit_shifttab_name = NULL;
234 cpl_frameset *slit_shifttab_frameset = NULL;
235 const int decode_bp=2147483647;
239 cpl_msg_set_level(CPL_MSG_DEBUG);
251 HandleOptions( argc, argv, &rectify_par, &order_min, &order_max,
254 if ( (argc - optind) >=2 ) {
255 sci_name = argv[optind];
256 sof_name = argv[optind+1];
257 if ( (argc - optind) >=3 ) {
258 slit_shifttab_name = argv[optind+2];
277 if ( slit_shifttab_name != NULL){
283 slit_shifttab_frameset = cpl_frameset_new();
284 for( i=0; i< 3; i++){
286 cpl_frameset_insert( slit_shifttab_frameset, slit_shifttab_frame);
291 cpl_frame_get_filename( sci_frame));
293 cpl_frame_get_filename( orderlist_frame));
295 cpl_frame_get_filename( spectralformat_frame));
296 if ( slitmap_frame != NULL){
298 cpl_frame_get_filename( slitmap_frame));
300 if ( slit_shifttab_frame != NULL){
302 cpl_frame_get_filename( slit_shifttab_frame));
308 if ( wavesol_frame == NULL){
312 if ( wavesol_frame != NULL){
314 cpl_frame_get_filename( wavesol_frame));
318 cpl_frame_get_filename( model_frame));
324 if ( wavesol_frameset == NULL){
327 cpl_frame_get_filename( model_frame));
333 size = cpl_frameset_get_size( wavesol_frameset);
334 for(iframe=0; iframe <
size; iframe++){
335 cpl_frame *frame = cpl_frameset_get_frame(wavesol_frameset, iframe);
337 cpl_frame_get_filename( frame));
351 if ( order_min != -1) {
354 xsh_msg(
"Order min %d => index %d", order_min, rec_min_index);
360 if ( order_max != -1) {
363 xsh_msg(
"Order max %d => index %d", order_max, rec_max_index);
366 rec_max_index = order_list->
size;
372 &slit_min_c, &nslit_c,
mode));
374 if (slit_min == -100){
375 slit_min = slit_min_c;
384 wavesol_frame, model_frame,
instrument, &rectify_par,
385 spectralformat_frame, NULL,
"RECTIFIED.fits", tag, &recordereso_frame,
386 &recordertab_frame,rec_min_index, rec_max_index, slit_min, nslit, 0,
387 slit_shifttab_frame));
394 wavesol_frameset, slit_shifttab_frameset, model_frame,
instrument, &rectify_par,
395 spectralformat_frame, slitmap_frame,NULL,NULL,rec_min_index,
396 rec_max_index,
"test"));
402 if (cpl_error_get_code() != CPL_ERROR_NONE) {
int main()
Unit test of xsh_bspline_interpol.
static const char * Options
static void HandleOptions(int argc, char **argv, xsh_rectify_param *rectify_par, int *order_min, int *order_max, double *slit_min, int *nslit)
static struct option long_options[]
static xsh_instrument * instrument
cpl_frameset * sof_to_frameset(const char *sof_name)
int xsh_order_list_get_index_by_absorder(xsh_order_list *list, double absorder)
xsh_order_list * xsh_order_list_load(cpl_frame *frame, xsh_instrument *instr)
load an order list from a frame
void xsh_order_list_free(xsh_order_list **list)
free memory associated to an order_list
#define xsh_error_dump(level)
XSH_MODE xsh_instrument_get_mode(xsh_instrument *i)
Get a mode on instrument structure.
void xsh_instrument_free(xsh_instrument **instrument)
free an instrument structure
void xsh_instrument_set_decode_bp(xsh_instrument *i, const int decode_bp)
Set bad pixel code.
cpl_frameset * xsh_merge_ord_ifu(cpl_frameset *rec_frameset, xsh_instrument *instrument, int merge_par, const char *rec_prefix)
Merge orders of the rectified frame using merge parameters.
cpl_frame * xsh_merge_ord(cpl_frame *sci_frame, xsh_instrument *instrument, int merge, const char *rec_prefix)
Merge orders of the rectified frame using merge parameters.
#define xsh_msg(...)
Print a message on info level.
cpl_frameset * xsh_rectify_orders_ifu(cpl_frame *sci_frame, xsh_order_list *orderlist, cpl_frameset *wavesol_frameset, cpl_frameset *shift_frameset, cpl_frame *model_frame, xsh_instrument *instrument, xsh_rectify_param *rectify_par, cpl_frame *spectralformat_frame, cpl_frame *slitmap_frame, cpl_frameset **rec_frameset_ext, cpl_frameset **rec_frameset_tab, int min_index, int max_index, const char *rec_prefix)
cpl_frame * xsh_rectify_orders(cpl_frame *sci_frame, xsh_order_list *orderlist_frame, cpl_frame *wavesol_frame, cpl_frame *model_frame, xsh_instrument *instrument, xsh_rectify_param *rectify_par, cpl_frame *spectralformat_frame, cpl_frame *disp_tab_frame, const char *res_name, const char *tag, cpl_frame **res_frame_ext, cpl_frame **res_frame_tab, int min_index, int max_index, double slit_min, int nslit, double slit_shift, cpl_frame *slitshift_tab)
Create a grid in wavelength with the step in lambda and slit. Steps are defined in the parameters....
void xsh_rec_slit_size(xsh_rectify_param *rectify_par, double *slit_min, int *nslit, XSH_MODE mode)
rectify frame
void xsh_free_frame(cpl_frame **f)
Deallocate a frame and set the pointer to NULL.
void xsh_free_frameset(cpl_frameset **f)
Deallocate a frame set and set the pointer to NULL.
int xsh_debug_level_set(int level)
set debug level
#define TESTS_XSH_FRAME_CREATE(frame, tag, name)
#define TESTS_INIT(DRL_ID)
cpl_frame * xsh_find_spectral_format(cpl_frameset *frames, xsh_instrument *instr)
Find spectral format frame.
cpl_frame * xsh_find_order_tab_edges(cpl_frameset *frames, xsh_instrument *instr)
Find an order tab EDGES.
cpl_frame * xsh_find_wave_tab_2d(cpl_frameset *frames, xsh_instrument *instr)
Find a wave tab 2D.
cpl_frameset * xsh_find_wave_tab_ifu(cpl_frameset *frames, xsh_instrument *instrument)
Find wave tab ARC (for IFU 3 frames)
cpl_frame * xsh_find_slitmap(cpl_frameset *frames, xsh_instrument *instr)
Find a slit map.
xsh_instrument * xsh_dfs_set_groups(cpl_frameset *set)
Set the group as RAW or CALIB in a frameset and return the instrument detected.
cpl_frame * xsh_find_model_config_tab(cpl_frameset *frames, xsh_instrument *instr)
Find a model configuration table frame.
#define XSH_GET_TAG_FROM_ARM(TAG, instr)
#define RECTIFY_KERNEL_PRINT(method)