39 #include "irplib_utils.h"
40 #include <sinfo_utils_wrappers.h>
41 #include <sinfo_msg.h>
43 #include "sinfo_raw_types.h"
44 #include "sinfo_pro_types.h"
45 #include "sinfo_tpl_utils.h"
46 #include "sinfo_tpl_dfs.h"
47 #include "sinfo_globals.h"
53 static int sinfo_utl_line_oh_select_create(cpl_plugin *) ;
54 static int sinfo_utl_line_oh_select_exec(cpl_plugin *) ;
55 static int sinfo_utl_line_oh_select_destroy(cpl_plugin *) ;
56 static int sinfo_utl_line_oh_select(cpl_parameterlist *, cpl_frameset *) ;
62 static char sinfo_utl_line_oh_select_description[] =
63 "sinfo_utl_line_oh_select -- SINFONI OH LINE table creation.\n"
64 "The files listed in the Set Of Frames (sof-file) must be tagged:\n"
65 "raw-file.fits REF_LINE_OH \n" ;
82 cpl_recipe * recipe = cpl_calloc(1,
sizeof(*recipe)) ;
83 cpl_plugin * plugin = &recipe->interface ;
85 cpl_plugin_init(plugin,
87 SINFONI_BINARY_VERSION,
88 CPL_PLUGIN_TYPE_RECIPE,
89 "sinfo_utl_line_oh_select",
90 "OH line table creation",
91 sinfo_utl_line_oh_select_description,
95 sinfo_utl_line_oh_select_create,
96 sinfo_utl_line_oh_select_exec,
97 sinfo_utl_line_oh_select_destroy) ;
99 cpl_pluginlist_append(list, plugin) ;
114 static int sinfo_utl_line_oh_select_create(cpl_plugin * plugin)
116 cpl_recipe * recipe ;
117 cpl_parameter* p=NULL;
120 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
121 recipe = (cpl_recipe *)plugin ;
125 recipe->parameters = cpl_parameterlist_new() ;
128 p = cpl_parameter_new_range(
"sinfoni.sinfo_utl_line_oh_select.wmin",
129 CPL_TYPE_DOUBLE,
"wmin",
130 "sinfoni.sinfo_utl_line_oh_select",
132 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"wmin") ;
133 cpl_parameterlist_append(recipe->parameters, p) ;
136 p = cpl_parameter_new_range(
"sinfoni.sinfo_utl_line_oh_select.wmax",
137 CPL_TYPE_DOUBLE,
"wmax",
138 "sinfoni.sinfo_utl_line_oh_select",
140 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"wmax") ;
141 cpl_parameterlist_append(recipe->parameters, p) ;
143 p = cpl_parameter_new_value(
"sinfoni.sinfo_utl_line_oh_select.intnorm",
144 CPL_TYPE_DOUBLE,
"intnorm",
145 "sinfoni.sinfo_utl_line_oh_select",
147 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"intnorm") ;
148 cpl_parameterlist_append(recipe->parameters, p) ;
150 p = cpl_parameter_new_value(
"sinfoni.sinfo_utl_line_oh_select.intlimit",
151 CPL_TYPE_DOUBLE,
"intlimit",
152 "sinfoni.sinfo_utl_line_oh_select",
154 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"intlimit") ;
155 cpl_parameterlist_append(recipe->parameters, p) ;
171 static int sinfo_utl_line_oh_select_exec(cpl_plugin * plugin)
173 cpl_recipe * recipe ;
176 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
177 recipe = (cpl_recipe *)plugin ;
180 return sinfo_utl_line_oh_select(recipe->parameters, recipe->frames) ;
190 static int sinfo_utl_line_oh_select_destroy(cpl_plugin * plugin)
192 cpl_recipe * recipe ;
195 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
196 recipe = (cpl_recipe *)plugin ;
199 cpl_parameterlist_delete(recipe->parameters) ;
211 static int sinfo_utl_line_oh_select(
212 cpl_parameterlist * parlist,
213 cpl_frameset * framelist)
215 cpl_parameter* p=NULL;
216 cpl_frame* frame=NULL;
218 cpl_frameset * rawframes ;
220 cpl_propertylist* phead=NULL;
234 if (sinfo_dfs_set_groups(framelist)) {
235 cpl_msg_error(__func__,
"Cannot identify RAW and CALIB frames") ;
240 if ((rawframes = sinfo_extract_frameset(framelist,
241 "REF_LINE_OH")) == NULL) {
242 cpl_msg_error(__func__,
"Cannot find raw frames in the input list") ;
246 p=cpl_parameterlist_find(parlist,
"sinfoni.sinfo_utl_line_oh_select.wmin");
247 wmin = cpl_parameter_get_double(p);
249 p=cpl_parameterlist_find(parlist,
"sinfoni.sinfo_utl_line_oh_select.wmax");
250 wmax = cpl_parameter_get_double(p);
252 p=cpl_parameterlist_find(parlist,
"sinfoni.sinfo_utl_line_oh_select.intnorm");
253 intnorm = cpl_parameter_get_double(p);
254 p=cpl_parameterlist_find(parlist,
"sinfoni.sinfo_utl_line_oh_select.intlimit");
255 intlimit = cpl_parameter_get_double(p);
257 nframes = cpl_frameset_get_size(rawframes) ;
261 frame=cpl_frameset_get_frame(rawframes,0);
263 tab_in=cpl_table_load(cpl_frame_get_filename(frame),1,0);
264 nrow=cpl_table_get_nrow(tab_in);
266 cpl_table_divide_scalar(tab_in,
"wave",nm2AA);
267 cpl_table_divide_scalar(tab_in,
"int",intnorm);
268 sinfo_msg(
"wmin=%g wmax=%g",wmin,wmax);
269 sinfo_msg(
"nrow=%d",nrow);
270 cpl_table_dump(tab_in,1,2,stdout);
271 cpl_table_dump(tab_in,nrow-10,2,stdout);
272 next=cpl_table_and_selected_double(tab_in,
"wave",CPL_GREATER_THAN,wmin);
273 sinfo_msg(
"next=%d",next);
274 next=cpl_table_and_selected_double(tab_in,
"wave",CPL_LESS_THAN,wmax);
275 sinfo_msg(
"next=%d",next);
276 next=cpl_table_and_selected_double(tab_in,
"int",CPL_GREATER_THAN,intlimit);
277 sinfo_msg(
"next=%d",next);
278 tab_ou=cpl_table_extract_selected(tab_in);
280 cpl_table_save(tab_ou,phead,NULL,
"oh_selected.fits",CPL_IO_DEFAULT);
283 sinfo_free_table(&tab_in);
284 sinfo_free_table(&tab_ou);
285 sinfo_free_propertylist(&phead);