69#define MODULE_ID "XSH_BUILD_CUBE"
81 {
"debug", required_argument, 0,
DEBUG_OPT},
88 puts(
"Unitary test of xsh_build_cube");
89 puts(
"Usage: test_xsh_build_cube [options] <sof>");
92 puts(
" --slit-bin=<n> : Binning on slit");
93 puts(
" --center-ifu=<n> : If n=1 center cube at 0 arcsec");
94 puts(
" --debug=<n> : Level of debug LOW | MEDIUM | HIGH [MEDIUM]" );
95 puts(
" --help : What you see" ) ;
96 puts(
"\nInput Files" ) ;
97 puts(
" 1. SOF [ORDER_TAB_EDGES_IFU_arm, OFFSET_TAB_DOWN_IFU_arm, OFFSET_TAB_CEN_IFU_arm, OFFSET_TAB_UP_IFU_arm]");
102static void HandleOptions(
int argc,
char **argv,
double *slit_bin,
int *ifu_center)
105 int option_index = 0;
106 while (( opt = getopt_long (argc, argv,
"debug:help",
111 *slit_bin = atof(optarg);
114 *ifu_center = atoi(optarg);
117 if ( strcmp( optarg,
"LOW")==0){
120 else if ( strcmp( optarg,
"HIGH")==0){
135 double slit_bin,
double height,
double sigma,
double offset,
const char* filename,
136 cpl_vector **x_vect, cpl_vector **y_vect)
144 *x_vect = cpl_vector_new( nslit);
145 *y_vect = cpl_vector_new( nslit);
148 for(i=0; i<nslit; i++){
150 s = slitmin+i*slit_bin;
152 val = height*exp(-(z*z))+offset;
153 cpl_vector_set( *x_vect, i,
s);
154 cpl_vector_set( *y_vect, i, val);
157 file = fopen( filename,
"w+");
158 fprintf( file,
"#i j x y\n");
160 for( i=0; i<nslit; i++){
163 x = cpl_vector_get( *x_vect, i);
164 y = cpl_vector_get( *y_vect, i);
165 fprintf( file,
"%d %d %f %f\n", i,nslit-1-i,
x,
y);
170 if (cpl_error_get_code() != CPL_ERROR_NONE){
183int main(
int argc,
char **argv)
190 const char *sof_name = NULL;
191 cpl_frameset *set = NULL;
192 cpl_frame *slitmap_frame = NULL;
193 cpl_frameset *offsettab_frameset = NULL;
195 double sdown=0, sup=0, sldown=0, slup=0;
196 double slit_bin = 0.15;
197 double slitmin_tab[3];
199 double slitcen_tab[3];
200 double sigma = 1, height = 1, offset=0;
201 cpl_vector *downx_vect = NULL;
202 cpl_vector *downy_vect = NULL;
203 cpl_vector *cenx_vect = NULL;
204 cpl_vector *ceny_vect = NULL;
205 cpl_vector *upx_vect = NULL;
206 cpl_vector *upy_vect = NULL;
207 cpl_vector *yvect_tab[3];
208 double lmin=100, lmax=105, lstep=1;
210 double smin, smax, sstep;
212 int s,l, k, sizes, sizel;
213 cpl_frameset *merge2d_frameset = NULL;
214 cpl_frame *cube_frame = NULL;
219 cpl_msg_set_level(CPL_MSG_DEBUG);
224 if ( (argc - optind) >=1 ) {
225 sof_name = argv[optind];
239 size = cpl_frameset_get_size( offsettab_frameset);
241 xsh_msg(
"Slit binning : %f", slit_bin);
242 xsh_msg(
"Ifu center : %d", ifu_center);
243 xsh_msg(
"Slit map : %s" , cpl_frame_get_filename( slitmap_frame));
244 for( i=0; i<
size; i++){
245 cpl_frame *offsettab_frame = NULL;
247 offsettab_frame = cpl_frameset_get_frame( offsettab_frameset, i);
248 xsh_msg(
"Offset tab %s %s", cpl_frame_get_filename( offsettab_frame),
249 cpl_frame_get_tag( offsettab_frame));
254 xsh_msg(
"Estimate by FLAT slitlets");
255 xsh_msg(
"DOWN %f --> %f", sdown, sldown);
256 xsh_msg(
"CEN %f --> %f", sldown, slup);
257 xsh_msg(
"UP %f --> %f", slup, sup);
260 sldown, slup, sup, slit_bin, slitmin_tab, nslit_tab, slitcen_tab);
262 sigma = (nslit_tab[0]/10)*slit_bin;
267 slit_bin, height,
sigma, offset,
"gauss_down.dat", &downx_vect,
269 yvect_tab[0] = downy_vect;
271 slit_bin, height,
sigma, offset,
"gauss_cen.dat", &cenx_vect,
273 yvect_tab[1] = ceny_vect;
275 slit_bin, height,
sigma, offset,
"gauss_up.dat", &upx_vect,
277 yvect_tab[2] = upy_vect;
280 merge2d_frameset = cpl_frameset_new();
284 cpl_frame *frame = NULL;
286 smin = slitmin_tab[k];
288 smax = slitmin_tab[k]+(nslit_tab[k]-1)*slit_bin;
295 for(
s=0;
s< sizes;
s++){
296 for( l=0; l<sizel; l++){
297 flux[l+
s*sizel] = cpl_vector_get( yvect_tab[k],
s);
300 sprintf( mergename,
"merge2d_%d.fits", k);
302 check( cpl_propertylist_update_double( spectrum->
flux_header,
"ESO DET OUT1 RON", 10));
303 check( cpl_propertylist_update_double( spectrum->
flux_header,
"ESO DET OUT1 CONAD", 10));
304 check( cpl_propertylist_update_double( spectrum->
flux_header,
"ESO DET OUT1 GAIN", 10));
305 check( cpl_propertylist_update_double( spectrum->
flux_header,
"ESO DET CHIP1 PSZX", 10));
306 check( cpl_propertylist_update_double( spectrum->
flux_header,
"ESO DET CHIP1 PSZY", 10));
308 check( cpl_propertylist_update_double( spectrum->
flux_header,
"ESO PRO RECT LAMBDA MIN", lmin));
309 check( cpl_propertylist_update_double( spectrum->
flux_header,
"ESO PRO RECT LAMBDA MAX", lmax));
310 check( cpl_propertylist_update_double( spectrum->
flux_header,
"ESO PRO RECT BIN LAMBDA", lstep));
315 cpl_frame_set_tag( frame,
"MERGE_2D");
317 cpl_frameset_insert( merge2d_frameset, frame);
324 if (cpl_error_get_code() != CPL_ERROR_NONE) {
int main()
Unit test of xsh_bspline_interpol.
static void HandleOptions(int argc, char **argv, double *slit_bin, int *ifu_center)
static struct option long_options[]
static void create_gaussian_profile(int nslit, double slitmin, double slitcen, double slit_bin, double height, double sigma, double offset, const char *filename, cpl_vector **x_vect, cpl_vector **y_vect)
static xsh_instrument * instrument
cpl_frameset * sof_to_frameset(const char *sof_name)
int xsh_spectrum_get_size_lambda(xsh_spectrum *s)
Get lambda axis size of spectrum.
cpl_frame * xsh_spectrum_save(xsh_spectrum *s, const char *filename, const char *tag)
save a spectrum
double * xsh_spectrum_get_flux(xsh_spectrum *s)
Get flux of spectrum.
xsh_spectrum * xsh_spectrum_2D_create(double lambda_min, double lambda_max, double lambda_step, double slit_min, double slit_max, double slit_step)
Create a 2D spectrum structure.
void xsh_spectrum_free(xsh_spectrum **s)
free memory associated to an 1D spectrum
int xsh_spectrum_get_size_slit(xsh_spectrum *s)
Get slit axis ize of spectrum.
#define xsh_error_dump(level)
#define XSH_ASSURE_NOT_NULL(pointer)
void xsh_instrument_free(xsh_instrument **instrument)
free an instrument structure
#define xsh_msg(...)
Print a message on info level.
void xsh_compute_slitlet_limits(cpl_frameset *shift_set, double sdown, double sldown, double slup, double sup, double slit_bin, double *slitmin_tab, int *nslit_tab, double *slitcen_tab)
void xsh_get_slit_edges(cpl_frame *slitmap_frame, double *sdown, double *sup, double *sldown, double *slup, xsh_instrument *instrument)
Trace slit edges in a master flat.
void xsh_free_vector(cpl_vector **v)
Deallocate a vector and set the pointer to NULL.
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
cpl_propertylist * flux_header
#define TESTS_INIT(DRL_ID)
cpl_frameset * xsh_find_offset_tab_ifu(cpl_frameset *frames, xsh_instrument *instr)
Find offset tab (One for each slitlet)
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.