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
00027
00028 #ifdef HAVE_CONFIG_H
00029 #include <config.h>
00030 #endif
00031
00032
00033
00034
00035 #include <string.h>
00036 #include <math.h>
00037
00038
00039 #include <cpl.h>
00040
00041 #include <xsh_dfs.h>
00042 #include <xsh_data_pre.h>
00043 #include <xsh_parameters.h>
00044 #include <xsh_drl.h>
00045 #include <xsh_msg.h>
00046 #include <xsh_pfits.h>
00047 #include <xsh_pfits_qc.h>
00048 #include <xsh_error.h>
00049 #include <xsh_utils_image.h>
00050
00051
00052
00053
00054
00055
00056 #define XSH_UTL_RONBIAS_RECIPE_ID "xsh_util_ronbias"
00057 #define XSH_UTL_RONBIAS_RECIPE_AUTHOR "A.Modigliani"
00058 #define XSH_UTL_RONBIAS_RECIPE_CONTACT "Andrea.Modigliani@eso.org"
00059 #define PRO_IMA "PRO_IMA_UVB"
00060 #define KEY_VALUE_HPRO_DID "PRO-1.15"
00061
00062
00063
00064
00065 static int xsh_util_ronbias_create(cpl_plugin *) ;
00066 static int xsh_util_ronbias_exec(cpl_plugin *) ;
00067 static int xsh_util_ronbias_destroy(cpl_plugin *) ;
00068 static int xsh_util_ronbias(cpl_parameterlist *, cpl_frameset *) ;
00069
00070
00071
00072
00073
00074 static char
00075 xsh_util_ronbias_description_short[] = "Rebin images";
00076 static char xsh_util_ronbias_description[] =
00077 "This recipe performs ron computation on a bias pair.\n"
00078 "The input files should be tagged as BIAS_arm)\n"
00079 "The output is a bias frame difference with RON computed as follows:\n"
00080 "The input biase difference is computed. Then a median on nsampl (100) \n"
00081 "random boxes of size xsize*ysize (20x20) is computed \n"
00082 "then the rms of the obtained values is determined and divided by sqrt(2)\n"
00083 "This gives the RON in [ADU]\n"
00084 "Information on relevant parameters can be found with\n"
00085 "esorex --params xsh_util_ronbias\n"
00086 "esorex --help xsh_util_ronbias\n"
00087 "\n";
00088
00089
00090
00091
00092
00097
00098
00100
00108
00109 int cpl_plugin_get_info(cpl_pluginlist * list)
00110 {
00111 cpl_recipe * recipe = cpl_calloc(1, sizeof *recipe ) ;
00112 cpl_plugin * plugin = &recipe->interface ;
00113
00114 cpl_plugin_init(plugin,
00115 CPL_PLUGIN_API,
00116 XSH_BINARY_VERSION,
00117 CPL_PLUGIN_TYPE_RECIPE,
00118 XSH_UTL_RONBIAS_RECIPE_ID,
00119 xsh_util_ronbias_description_short,
00120 xsh_util_ronbias_description,
00121 XSH_UTL_RONBIAS_RECIPE_AUTHOR,
00122 XSH_UTL_RONBIAS_RECIPE_CONTACT,
00123 xsh_get_license(),
00124 xsh_util_ronbias_create,
00125 xsh_util_ronbias_exec,
00126 xsh_util_ronbias_destroy) ;
00127
00128 cpl_pluginlist_append(list, plugin) ;
00129
00130 return 0;
00131 }
00132
00133
00142
00143 static int xsh_util_ronbias_create(cpl_plugin * plugin)
00144 {
00145 cpl_recipe * recipe ;
00146 cpl_parameter * p ;
00147
00148
00149 xsh_init();
00150
00151
00152 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
00153 recipe = (cpl_recipe *)plugin ;
00154 else return -1 ;
00155 cpl_error_reset();
00156
00157
00158
00159 recipe->parameters = cpl_parameterlist_new() ;
00160
00161
00162
00163 check( xsh_parameters_generic(XSH_UTL_RONBIAS_RECIPE_ID,
00164 recipe->parameters ) ) ;
00165
00166
00167 p = cpl_parameter_new_value("xsh.xsh_util_ronbias.nsampl",
00168 CPL_TYPE_INT,
00169 "Number of sampling values",
00170 "xsh.xsh_util_ronbias",100);
00171 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "nsampl") ;
00172 cpl_parameterlist_append(recipe->parameters, p) ;
00173
00174
00175
00176 p = cpl_parameter_new_value("xsh.xsh_util_ronbias.hsize",
00177 CPL_TYPE_INT,
00178 "Random square boxes size",
00179 "xsh.xsh_util_ronbias",10);
00180 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "hsize") ;
00181 cpl_parameterlist_append(recipe->parameters, p) ;
00182
00183
00184 p = cpl_parameter_new_value("xsh.xsh_util_ronbias.llx",
00185 CPL_TYPE_INT,
00186 "Lower left X of sampling region",
00187 "xsh.xsh_util_ronbias",-1);
00188 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "llx") ;
00189 cpl_parameterlist_append(recipe->parameters, p) ;
00190
00191
00192 p = cpl_parameter_new_value("xsh.xsh_util_ronbias.lly",
00193 CPL_TYPE_INT,
00194 "Lower left Y of sampling region",
00195 "xsh.xsh_util_ronbias",-1);
00196 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "lly") ;
00197 cpl_parameterlist_append(recipe->parameters, p) ;
00198
00199
00200
00201 p = cpl_parameter_new_value("xsh.xsh_util_ronbias.urx",
00202 CPL_TYPE_INT,
00203 "Upper right X of sampling region",
00204 "xsh.xsh_util_ronbias",-1);
00205 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "urx") ;
00206 cpl_parameterlist_append(recipe->parameters, p) ;
00207
00208
00209 p = cpl_parameter_new_value("xsh.xsh_util_ronbias.ury",
00210 CPL_TYPE_INT,
00211 "Upper right Y of sampling region",
00212 "xsh.xsh_util_ronbias",-1);
00213 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "ury") ;
00214 cpl_parameterlist_append(recipe->parameters, p) ;
00215
00216
00217
00218
00219
00220 cleanup:
00221
00222
00223 return 0;
00224 }
00225
00226
00232
00233 static int xsh_util_ronbias_exec(cpl_plugin * plugin)
00234 {
00235 cpl_recipe * recipe ;
00236 int code=0;
00237 cpl_errorstate initial_errorstate = cpl_errorstate_get();
00238
00239
00240 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
00241 recipe = (cpl_recipe *)plugin ;
00242 else return -1 ;
00243 cpl_error_reset();
00244
00245 code = xsh_util_ronbias(recipe->parameters, recipe->frames) ;
00246
00247
00248 if (!cpl_errorstate_is_equal(initial_errorstate)) {
00249
00250
00251 cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
00252 }
00253
00254 return code ;
00255 }
00256
00257
00263
00264 static int xsh_util_ronbias_destroy(cpl_plugin * plugin)
00265 {
00266 cpl_recipe * recipe ;
00267
00268
00269 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
00270 recipe = (cpl_recipe *)plugin ;
00271 else return -1 ;
00272
00273 cpl_parameterlist_delete(recipe->parameters) ;
00274 return 0 ;
00275 }
00276
00277
00278
00279
00286
00287 static int
00288 xsh_util_ronbias( cpl_parameterlist * parlist,
00289 cpl_frameset * frames)
00290 {
00291 cpl_parameter * param= NULL ;
00292
00293 int hsize=1;
00294 int nsampl=0;
00295 int llx=1;
00296 int lly=1;
00297 int urx=1;
00298 int ury=1;
00299
00300 double ron;
00301 double ron_err;
00302
00303
00304 xsh_msg("Welcome to XSHOOTER Pipeline release %d.%d.%d",
00305 XSH_MAJOR_VERSION,XSH_MINOR_VERSION,XSH_MICRO_VERSION);
00306
00307
00308
00309 check(param=cpl_parameterlist_find(parlist,"xsh.xsh_util_ronbias.nsampl"));
00310 check(nsampl=cpl_parameter_get_int(param));
00311
00312 check(param=cpl_parameterlist_find(parlist,"xsh.xsh_util_ronbias.hsize"));
00313 check(hsize=cpl_parameter_get_int(param));
00314
00315
00316 check(param=cpl_parameterlist_find(parlist, "xsh.xsh_util_ronbias.llx"));
00317 check(llx=cpl_parameter_get_int(param));
00318
00319 check(param=cpl_parameterlist_find(parlist, "xsh.xsh_util_ronbias.lly"));
00320 check(lly=cpl_parameter_get_int(param));
00321
00322 check(param=cpl_parameterlist_find(parlist, "xsh.xsh_util_ronbias.urx"));
00323 check(urx=cpl_parameter_get_int(param));
00324
00325 check(param=cpl_parameterlist_find(parlist, "xsh.xsh_util_ronbias.ury"));
00326 check(ury=cpl_parameter_get_int(param));
00327
00328 check(xsh_compute_ron(frames,llx,lly,urx,ury,nsampl,hsize,1,&ron,&ron_err));
00329
00330 xsh_msg("ron=%g ron_err=%g",ron,ron_err);
00331
00332 cleanup:
00333
00334 if (cpl_error_get_code()) {
00335 return -1 ;
00336 } else {
00337 return 0 ;
00338 }
00339
00340 }