68#define MODULE_ID "XSH_DATA_CUBE"
89 {
"slit-n",required_argument, 0,
NSLIT_OPT},
98 puts(
"Unitary test of xsh_data_cube" ) ;
99 puts(
"Usage: test_xsh_data_cube [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(
" --merge-method : WEIGHT or MEAN [MEAN]");
110 puts(
" --lambda-ref=<n> : Lambda reference for SLICE OFFSET");
111 puts(
" --help : What you see" ) ;
112 puts(
"\nInput Files" ) ;
113 puts(
"The input files argument MUST be in this order:" ) ;
114 puts(
" 1. Science frame in PRE format" ) ;
115 puts(
" 2. SOF\n" ) ;
121 int *order_min,
int *order_max,
122 double *slit_min,
int *nslit,
double *lambda_ref)
125 int option_index = 0;
127 while (( opt = getopt_long (argc, argv,
Options,
154 xsh_msg(
"Invalid kernel option %s", optarg);
169 sscanf( optarg,
"%64d", order_min);
172 sscanf( optarg,
"%64d", order_max);
175 sscanf( optarg,
"%64lf", slit_min) ;
178 sscanf( optarg,
"%64lf", lambda_ref);
181 sscanf( optarg,
"%64d", nslit);
191 xsh_msg(
"WRONG method %s", optarg);
195 default:
Help() ; exit( 0 ) ;
207int main(
int argc,
char **argv)
214 const char *sof_name = NULL;
215 cpl_frameset *set = NULL;
217 const char * sci_name = NULL ;
220 cpl_frameset *wavesol_frameset = NULL;
221 cpl_frameset *rect_frameset = NULL;
222 cpl_frameset *res_2D_frameset = NULL;
223 cpl_frame *sci_frame = NULL;
224 cpl_frame *orderlist_frame = NULL;
225 cpl_frame *slitmap_frame = NULL;
226 cpl_frame *model_frame = NULL;
227 cpl_frame *spectralformat_frame = NULL;
228 cpl_frame *recorder_frame = NULL ;
229 cpl_frame *recordereso_frame = NULL ;
230 cpl_frame *recordertab_frame = NULL ;
231 cpl_frame *cube = NULL;
232 int order_min = -1, order_max = -1;
233 int rec_min_index=-1, rec_max_index=-1;
234 double lambda_ref = -1;
237 int nslit_c, nslit=-100;
238 double slit_min_c, slit_min=-100;
240 const int decode_bp=2147483647;
244 cpl_msg_set_level(CPL_MSG_DEBUG);
255 HandleOptions( argc, argv, &rectify_par, &merge_par, &order_min, &order_max,
256 &slit_min, &nslit, &lambda_ref);
258 if ( (argc - optind) >=2 ) {
259 sci_name = argv[optind];
260 sof_name = argv[optind+1];
279 cpl_frame_get_filename( sci_frame));
281 cpl_frame_get_filename( orderlist_frame));
283 cpl_frame_get_filename( spectralformat_frame));
284 if ( slitmap_frame != NULL){
286 cpl_frame_get_filename( slitmap_frame));
291 if ( wavesol_frameset == NULL){
294 cpl_frame_get_filename( model_frame));
300 size = cpl_frameset_get_size( wavesol_frameset);
301 for(iframe=0; iframe <
size; iframe++){
302 cpl_frame *frame = cpl_frameset_get_frame(wavesol_frameset, iframe);
304 cpl_frame_get_filename( frame));
317 if ( order_min != -1) {
320 xsh_msg(
"Order min %d => index %d", order_min, rec_min_index);
326 if ( order_max != -1) {
329 xsh_msg(
"Order max %d => index %d", order_max, rec_max_index);
332 rec_max_index = order_list->
size;
339 &slit_min_c, &nslit_c,
mode));
341 if (slit_min == -100){
342 slit_min = slit_min_c;
348 xsh_msg(
"SLIT min = %f and has size %d", slit_min, nslit);
349 xsh_msg(
"Lambda ref %f", lambda_ref);
350 if (lambda_ref < 0.0){
352 wavesol_frameset, NULL, model_frame,
instrument, &rectify_par,
353 spectralformat_frame, slitmap_frame,NULL,NULL,rec_min_index,
354 rec_max_index,
"test"));
357 double lambda_ref_min;
358 double lambda_ref_max;
359 const char * tablename = NULL;
360 cpl_table *table = NULL;
361 cpl_frame *spectralformat2_frame = NULL;
363 cpl_vector* orders = NULL;
364 int size, absorder, iorder;
369 xsh_msg(
"Do cube for reference %f ==> %f", lambda_ref_min, lambda_ref_max);
373 size = cpl_vector_get_size( orders);
375 tablename = cpl_frame_get_filename( spectralformat_frame);
378 for( iorder=0; iorder <
size; iorder++){
379 absorder = cpl_vector_get( orders, iorder);
380 xsh_msg(
"In Order %d", absorder);
385 cpl_table_save( table, NULL,NULL,
"LAMBDA_REF_FORMAT.fits",CPL_IO_DEFAULT);
389 wavesol_frameset, NULL, model_frame,
instrument, &rectify_par,
390 spectralformat2_frame, slitmap_frame,NULL,NULL, 0,
394 merge_param,
"test"));
400 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_merge_param *merge_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_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.
#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 MERGE_METHOD_PRINT(merge_method)
#define RECTIFY_KERNEL_PRINT(method)
#define XSH_TABLE_LOAD(TABLE, NAME)