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 #ifdef HAVE_CONFIG_H
00027 # include <config.h>
00028 #endif
00029
00030
00036
00039
00040
00041
00042
00043
00044 #include <xsh_data_pre.h>
00045 #include <xsh_error.h>
00046 #include <xsh_msg.h>
00047 #include <xsh_data_instrument.h>
00048 #include <xsh_parameters.h>
00049 #include <xsh_dfs.h>
00050 #include <xsh_pfits.h>
00051 #include <tests.h>
00052 #include <cpl.h>
00053 #include <math.h>
00054 #include <getopt.h>
00055 #include <string.h>
00056
00057
00058
00059
00060 #define MODULE_ID "XSH_CREATE_MAP"
00061
00062 enum {
00063 DEBUG_OPT, HELP_OPT
00064 };
00065
00066 static struct option LongOptions[] = {
00067 {"debug", required_argument, 0, DEBUG_OPT},
00068 {"help", 0, 0, HELP_OPT},
00069 {NULL, 0, 0, 0}
00070 };
00071
00072 static void Help( void )
00073 {
00074 puts ("Unitary test : Create a slitmap and a wavemap from a set of files (SOF)");
00075 puts( "Usage : ./the_xsh_data_wave_tab_2d [options] <SOF>");
00076
00077 puts( "Options" ) ;
00078 puts( " --debug=<n> : Level of debug LOW | MEDIUM | HIGH [MEDIUM]" );
00079 puts( " --help : What you see" ) ;
00080
00081 puts( "The input files argument MUST be in this order:" );
00082 puts( " 1. PRE frame");
00083 puts( " 2. SOF a) MODEL : [XSH_MOD_CFG_TAB_UVB]");
00084 puts( " b) POLYNOMIAL: [DISP_TAB, ORDER_TAB_EDGES]");
00085
00086 TEST_END();
00087 exit(0);
00088 }
00089
00090 static void HandleOptions( int argc, char ** argv)
00091 {
00092 int opt ;
00093 int option_index = 0;
00094
00095 while( (opt = getopt_long( argc, argv, "debug:help",
00096 LongOptions, &option_index )) != EOF){
00097 switch( opt ) {
00098 case DEBUG_OPT:
00099 if ( strcmp( optarg, "LOW")==0){
00100 xsh_debug_level_set( XSH_DEBUG_LEVEL_LOW);
00101 }
00102 else if ( strcmp( optarg, "HIGH")==0){
00103 xsh_debug_level_set( XSH_DEBUG_LEVEL_HIGH);
00104 }
00105 break;
00106 case HELP_OPT:
00107 Help();
00108 break;
00109 default:
00110 break;
00111 }
00112 }
00113 }
00114
00115
00116
00117
00118
00125
00126
00127 int main( int argc, char** argv)
00128 {
00129 xsh_instrument * instrument = NULL ;
00130 cpl_frameset* set = NULL;
00131 char *sof_name = NULL;
00132 char *pre_name = NULL;
00133 cpl_frame *pre_frame = NULL;
00134 cpl_propertylist *pre_header = NULL;
00135 cpl_frame *model_frame = NULL;
00136 cpl_frame *disptab_frame = NULL;
00137 cpl_frame *ordertab_frame = NULL;
00138 cpl_frame *wavemap_frame = NULL;
00139 cpl_frame *slitmap_frame = NULL;
00140 bool use_model;
00141 int binx=1;
00142 int biny=1;
00143 int ret =0;
00144 char wavemap_name[256];
00145 char slitmap_name[256];
00146
00147
00148 TESTS_INIT( MODULE_ID);
00149 cpl_msg_set_level( CPL_MSG_DEBUG);
00150 xsh_debug_level_set( XSH_DEBUG_LEVEL_MEDIUM) ;
00151
00152 HandleOptions( argc, argv);
00153
00154
00155 if ( (argc-optind) >= 2) {
00156 pre_name = argv[optind];
00157 sof_name = argv[optind+1];
00158
00159 check( set = sof_to_frameset( sof_name));
00160
00161
00162 check( instrument = xsh_dfs_set_groups( set));
00163 check( pre_header = cpl_propertylist_load( pre_name, 0));
00164 if ( xsh_instrument_get_arm( instrument) != XSH_ARM_NIR){
00165 check( binx = xsh_pfits_get_binx( pre_header));
00166 check( biny = xsh_pfits_get_biny( pre_header));
00167 }
00168 instrument->binx = binx;
00169 instrument->biny = biny;
00170 TESTS_XSH_FRAME_CREATE( pre_frame, "PRE", pre_name);
00171
00172
00173 if((model_frame = xsh_find_frame_with_tag( set,
00174 XSH_MOD_CFG_OPT_2D,
00175 instrument)) == NULL) {
00176
00177 xsh_error_reset();
00178
00179 if ((model_frame = xsh_find_frame_with_tag( set,XSH_MOD_CFG_TAB,
00180 instrument)) == NULL) {
00181 xsh_error_reset();
00182 }
00183
00184 }
00185 xsh_error_reset();
00186
00187 cpl_error_reset();
00188 if ( model_frame == NULL){
00189 xsh_msg("Using polynomial solution to produce map");
00190 check( disptab_frame = xsh_find_disp_tab( set, instrument));
00191 check( ordertab_frame = xsh_find_order_tab_edges( set, instrument));
00192 use_model = FALSE;
00193 }
00194 else{
00195 xsh_msg("Using model to produce map");
00196 use_model = TRUE;
00197 }
00198 }
00199 else{
00200 Help();
00201 }
00202 xsh_msg("PRE binning %dx%d : %s", binx, biny, cpl_frame_get_filename( pre_frame));
00203
00204 if (use_model){
00205 bool found_temp=true;
00206
00207 sprintf( wavemap_name, "model_%dx%d_WAVE_MAP", binx, biny);
00208 sprintf( slitmap_name, "model_%dx%d_SLIT_MAP", binx, biny);
00209 xsh_msg("MODEL : %s", cpl_frame_get_filename( model_frame));
00210 check( xsh_model_temperature_update_frame(&model_frame, pre_frame,
00211 instrument,&found_temp));
00212 check( xsh_create_model_map( model_frame, instrument,
00213 wavemap_name, slitmap_name, &wavemap_frame, &slitmap_frame));
00214 }
00215 else{
00216 xsh_msg("DISPERSION TAB : %s", cpl_frame_get_filename( disptab_frame));
00217 xsh_msg("ORDER TAB : %s", cpl_frame_get_filename( ordertab_frame));
00218
00219 sprintf( wavemap_name, "poly_%dx%d", binx, biny);
00220
00221 check( xsh_create_map( disptab_frame, ordertab_frame, pre_frame,
00222 instrument, &wavemap_frame, &slitmap_frame, wavemap_name));
00223 }
00224
00225 xsh_msg( "Created SLITMAP: %s", cpl_frame_get_filename( slitmap_frame));
00226 xsh_msg( "Created WAVEMAP: %s", cpl_frame_get_filename( wavemap_frame));
00227 cleanup:
00228 xsh_instrument_free( &instrument);
00229 xsh_free_frameset( &set);
00230 xsh_free_frame( &pre_frame);
00231 xsh_free_propertylist( &pre_header);
00232 xsh_free_frame( &wavemap_frame);
00233 xsh_free_frame( &slitmap_frame);
00234
00235 if (cpl_error_get_code() != CPL_ERROR_NONE) {
00236 xsh_error_dump( CPL_MSG_ERROR);
00237 ret = 1;
00238 }
00239 TEST_END();
00240 return ret;
00241 }
00242