68#define MODULE_ID "XSH_GEOM_IFU"
89 {
"slit-n",required_argument, 0,
NSLIT_OPT},
98 puts(
"Unitary test of xsh_geom_ifu" ) ;
99 puts(
"Usage: test_xsh_geom_ifu [options] <input_files>" ) ;
101 puts(
" --kernel=<name> : TANH, SINC, SINC2, LANCZOS, HAMMING, HANN [TANH]");
102 puts(
" --radius=<nn> : Radius [4]" ) ;
103 puts(
" --bin-lambda=<n> : Bin in Lambda [0.1]" ) ;
104 puts(
" --bin-space=<n> : Bin in Slit [0.1]" ) ;
105 puts(
" --order-min=<n> : Minimum abs order" );
106 puts(
" --order-max=<n> : Maximum abs order" );
107 puts(
" --slit-min=<n> : Minimum slit to rectify" );
108 puts(
" --slit-n=<n> : Number of pixels in slit rectified frame" );
109 puts(
" --lambda-ref=<n> : Lambda reference for creating SLICE OFFSET");
110 puts(
" --help : What you see" ) ;
111 puts(
"\nInput Files" ) ;
112 puts(
"The input files argument MUST be in this order:" ) ;
113 puts(
" 1. Science frame in PRE format" ) ;
114 puts(
" 2. SOF\n" ) ;
120 int *order_min,
int *order_max,
121 double *slit_min,
int *nslit,
double *lambda_ref)
124 int option_index = 0;
126 while (( opt = getopt_long (argc, argv,
Options,
153 xsh_msg(
"Invalid kernel option %s", optarg);
168 sscanf( optarg,
"%64d", order_min);
171 sscanf( optarg,
"%64d", order_max);
174 sscanf( optarg,
"%64lf", slit_min) ;
177 sscanf( optarg,
"%64lf", lambda_ref);
180 sscanf( optarg,
"%64d", nslit);
182 default:
Help() ; exit( 0 ) ;
194int main(
int argc,
char **argv)
201 const char *sof_name = NULL;
202 cpl_frameset *set = NULL;
203 const char * sci_name = NULL ;
206 cpl_frameset *wavesol_frameset = NULL;
207 cpl_frameset *rect_frameset = NULL;
208 cpl_frameset *loc_frameset = NULL;
209 cpl_frame *sci_frame = NULL;
210 cpl_frame *orderlist_frame = NULL;
211 cpl_frame *slitmap_frame = NULL;
212 cpl_frame *model_frame = NULL;
213 cpl_frame *spectralformat_frame = NULL;
214 cpl_frame *recorder_frame = NULL ;
215 cpl_frame *recordereso_frame = NULL ;
216 cpl_frame *recordertab_frame = NULL ;
217 cpl_frame *cube = NULL;
218 int order_min = -1, order_max = -1;
219 int rec_min_index=-1, rec_max_index=-1;
220 double lambda_ref = -1;
223 int nslit_c, nslit=-100;
224 double slit_min_c, slit_min=-100;
226 const int decode_bp=2147483647;
229 cpl_msg_set_level(CPL_MSG_DEBUG);
242 HandleOptions( argc, argv, &rectify_par, &loc_obj_par, &order_min, &order_max,
243 &slit_min, &nslit, &lambda_ref);
245 if ( (argc - optind) >=2 ) {
246 sci_name = argv[optind];
247 sof_name = argv[optind+1];
267 cpl_frame_get_filename( sci_frame));
269 cpl_frame_get_filename( orderlist_frame));
271 cpl_frame_get_filename( spectralformat_frame));
272 if ( slitmap_frame != NULL){
274 cpl_frame_get_filename( slitmap_frame));
279 if ( wavesol_frameset == NULL){
282 cpl_frame_get_filename( model_frame));
288 size = cpl_frameset_get_size( wavesol_frameset);
289 for(iframe=0; iframe <
size; iframe++){
290 cpl_frame *frame = cpl_frameset_get_frame(wavesol_frameset, iframe);
292 cpl_frame_get_filename( frame));
305 if ( order_min != -1) {
308 xsh_msg(
"Order min %d => index %d", order_min, rec_min_index);
314 if ( order_max != -1) {
317 xsh_msg(
"Order max %d => index %d", order_max, rec_max_index);
320 rec_max_index = order_list->
size;
327 &slit_min_c, &nslit_c,
mode));
329 if (slit_min == -100){
330 slit_min = slit_min_c;
336 xsh_msg(
"SLIT min = %f and has size %d", slit_min, nslit);
337 xsh_msg(
"Lambda ref %f", lambda_ref);
338 if (lambda_ref < 0.0){
340 wavesol_frameset, NULL, model_frame,
instrument, &rectify_par,
341 spectralformat_frame, slitmap_frame,NULL,NULL,rec_min_index,
342 rec_max_index,
"test"));
345 double lambda_ref_min;
346 double lambda_ref_max;
347 const char * tablename = NULL;
348 cpl_table *table = NULL;
349 cpl_frame *spectralformat2_frame = NULL;
351 cpl_vector* orders = NULL;
352 int size, absorder, iorder;
357 xsh_msg(
"Do cube for reference %f ==> %f", lambda_ref_min, lambda_ref_max);
361 size = cpl_vector_get_size( orders);
363 tablename = cpl_frame_get_filename( spectralformat_frame);
366 for( iorder=0; iorder <
size; iorder++){
367 absorder = cpl_vector_get( orders, iorder);
368 xsh_msg(
"In Order %d", absorder);
373 cpl_table_save( table, NULL,NULL,
"LAMBDA_REF_FORMAT.fits",CPL_IO_DEFAULT);
377 wavesol_frameset, NULL, model_frame,
instrument, &rectify_par,
378 spectralformat2_frame, slitmap_frame,NULL,NULL, 0,
382 xsh_msg(
"---Localize the objects for IFU");
387 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, xsh_localize_obj_param *locobj_par, int *order_min, int *order_max, double *slit_min, int *nslit, double *lambda_ref)
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_localize_obj_ifu(cpl_frameset *sci_frame, cpl_frame *skymask_frame, xsh_instrument *instrument, xsh_localize_obj_param *loc_obj_par, xsh_slit_limit_param *slit_limit_param)
#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)
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_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 RECTIFY_KERNEL_PRINT(method)
#define XSH_TABLE_LOAD(TABLE, NAME)