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
00029
00030 #ifdef HAVE_CONFIG_H
00031 #include <config.h>
00032 #endif
00033
00034 #include <stdio.h>
00035 #include <math.h>
00036 #include <string.h>
00037 #include <cpl.h>
00038
00039 #include "vircam_utils.h"
00040 #include "vircam_mask.h"
00041 #include "vircam_pfits.h"
00042 #include "vircam_dfs.h"
00043 #include "vircam_mods.h"
00044 #include "vircam_fits.h"
00045 #include "vircam_tfits.h"
00046 #include "vircam_jmp_utils.h"
00047
00048
00049
00050 static int vircam_mesostep_analyse_create(cpl_plugin *);
00051 static int vircam_mesostep_analyse_exec(cpl_plugin *);
00052 static int vircam_mesostep_analyse_destroy(cpl_plugin *);
00053 static int vircam_mesostep_analyse(cpl_parameterlist *, cpl_frameset *);
00054 static cpl_propertylist *vircam_mesostep_analyse_dummyqc(int type);
00055
00056
00057 static char vircam_mesostep_analyse_description[] =
00058 "vircam_mesostep_analyse -- VIRCAM mesostep processing recipe.\n\n"
00059 "Process a complete mesostep sequence of vircam data. Remove instrumental\n"
00060 "signature and sky subtract if desired. Work out the illumination correction\n"
00061 "for all of the input frames and then smooth the result by fitting a 2d\n"
00062 "polynomial. Evaluate the polynomial at the grid points to form the final\n"
00063 "illumination correction data product\n"
00064 "The program accepts the following files in the SOF:\n\n"
00065 " Tag Description\n"
00066 " -----------------------------------------------------------------------\n"
00067 " %-21s A list of raw science images\n"
00068 " %-21s A master dark frame\n"
00069 " %-21s A master twilight flat frame\n"
00070 " %-21s A channel table\n"
00071 " %-21s A photometric calibration table\n"
00072 " %-21s A master confidence map or\n"
00073 " %-21s A master bad pixel mask\n"
00074 " %-21s A master standard star index\n"
00075 "All of the above are required\n"
00076 "\n";
00077
00155
00156
00157
00165
00166
00167 int cpl_plugin_get_info(cpl_pluginlist *list) {
00168 cpl_recipe *recipe = cpl_calloc(1,sizeof(*recipe));
00169 cpl_plugin *plugin = &recipe->interface;
00170 char alldesc[SZ_ALLDESC];
00171 (void)snprintf(alldesc,SZ_ALLDESC,vircam_mesostep_analyse_description,
00172 VIRCAM_ILLUM_RAW,VIRCAM_CAL_DARK,VIRCAM_CAL_TWILIGHT_FLAT,
00173 VIRCAM_CAL_CHANTAB,VIRCAM_CAL_PHOTTAB,VIRCAM_CAL_CONF,
00174 VIRCAM_CAL_BPM,VIRCAM_CAL_2MASS);
00175
00176 cpl_plugin_init(plugin,
00177 CPL_PLUGIN_API,
00178 VIRCAM_BINARY_VERSION,
00179 CPL_PLUGIN_TYPE_RECIPE,
00180 "vircam_mesostep_analyse",
00181 "VIRCAM mesostep analysis recipe",
00182 alldesc,
00183 "Jim Lewis",
00184 "jrl@ast.cam.ac.uk",
00185 vircam_get_license(),
00186 vircam_mesostep_analyse_create,
00187 vircam_mesostep_analyse_exec,
00188 vircam_mesostep_analyse_destroy);
00189
00190 cpl_pluginlist_append(list,plugin);
00191
00192 return(0);
00193 }
00194
00195
00204
00205
00206 static int vircam_mesostep_analyse_create(cpl_plugin *plugin) {
00207 cpl_recipe *recipe;
00208 cpl_parameter *p;
00209
00210
00211
00212 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
00213 recipe = (cpl_recipe *)plugin;
00214 else
00215 return(-1);
00216
00217
00218
00219 recipe->parameters = cpl_parameterlist_new();
00220
00221
00222
00223 p = cpl_parameter_new_value("vircam.vircam_mesostep_analyse.ipix",
00224 CPL_TYPE_INT,
00225 "Minimum pixel area for each detected object",
00226 "vircam.vircam_mesostep_analyse",5);
00227 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,"ipix");
00228 cpl_parameterlist_append(recipe->parameters,p);
00229
00230
00231
00232 p = cpl_parameter_new_value("vircam.vircam_mesostep_analyse.thresh",
00233 CPL_TYPE_DOUBLE,
00234 "Detection threshold in sigma above sky",
00235 "vircam.vircam_mesostep_analyse",2.0);
00236 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,"thr");
00237 cpl_parameterlist_append(recipe->parameters,p);
00238
00239
00240
00241 p = cpl_parameter_new_value("vircam.vircam_mesostep_analyse.icrowd",
00242 CPL_TYPE_BOOL,"Use deblending?",
00243 "vircam.vircam_mesostep_analyse",0);
00244 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,"icrowd");
00245 cpl_parameterlist_append(recipe->parameters,p);
00246
00247
00248
00249 p = cpl_parameter_new_value("vircam.vircam_mesostep_analyse.rcore",
00250 CPL_TYPE_DOUBLE,"Value of Rcore in pixels",
00251 "vircam.vircam_mesostep_analyse",4.0);
00252 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,"rcore");
00253 cpl_parameterlist_append(recipe->parameters,p);
00254
00255
00256
00257 p = cpl_parameter_new_value("vircam.vircam_mesostep_analyse.nbsize",
00258 CPL_TYPE_INT,"Background smoothing box size",
00259 "vircam.vircam_mesostep_analyse",64);
00260 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,"nb");
00261 cpl_parameterlist_append(recipe->parameters,p);
00262
00263
00264
00265 p = cpl_parameter_new_value("vircam.vircam_mesostep_analyse.destripe",
00266 CPL_TYPE_BOOL,"Destripe images?",
00267 "vircam.vircam_mesostep_analyse",1);
00268 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,"destripe");
00269 cpl_parameterlist_append(recipe->parameters,p);
00270
00271
00272
00273 p = cpl_parameter_new_value("vircam.vircam_mesostep_analyse.skycor",
00274 CPL_TYPE_BOOL,"Sky correct images?",
00275 "vircam.vircam_mesostep_analyse",1);
00276 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,"skycor");
00277 cpl_parameterlist_append(recipe->parameters,p);
00278
00279
00280
00281 p = cpl_parameter_new_value("vircam.vircam_mesostep_analyse.nord",
00282 CPL_TYPE_INT,
00283 "Polynomial order for surface fit",
00284 "vircam.vircam_mesostep_analyse",3);
00285 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,"nord");
00286 cpl_parameterlist_append(recipe->parameters,p);
00287
00288
00289
00290 p = cpl_parameter_new_range("vircam.vircam_mesostep_analyse.extenum",
00291 CPL_TYPE_INT,
00292 "Extension number to be done, 0 == all",
00293 "vircam.vircam_mesostep_analyse",
00294 1,0,16);
00295 cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,"ext");
00296 cpl_parameterlist_append(recipe->parameters,p);
00297
00298
00299
00300 return(0);
00301 }
00302
00303
00309
00310
00311 static int vircam_mesostep_analyse_exec(cpl_plugin *plugin) {
00312 cpl_recipe *recipe;
00313
00314
00315
00316 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
00317 recipe = (cpl_recipe *)plugin;
00318 else
00319 return(-1);
00320
00321 return(vircam_mesostep_analyse(recipe->parameters,recipe->frames));
00322 }
00323
00324
00330
00331
00332 static int vircam_mesostep_analyse_destroy(cpl_plugin *plugin) {
00333 cpl_recipe *recipe ;
00334
00335
00336
00337 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
00338 recipe = (cpl_recipe *)plugin;
00339 else
00340 return(-1);
00341
00342 cpl_parameterlist_delete(recipe->parameters);
00343 return(0);
00344 }
00345
00346
00353
00354
00355 static int vircam_mesostep_analyse(cpl_parameterlist *parlist,
00356 cpl_frameset *framelist) {
00357 const char *fctid="vircam_mesostep_analyse";
00358 cpl_parameter *p;
00359 cpl_polynomial *poly;
00360 int nlab,jst,jfn,status,isconf,j,i,live,nrows,n,ndit;
00361 float *x1,*x2,*y1,*y2,*ill,gaincor_fac;
00362 double *bv_x,*bv_y,*vdata,val;
00363 cpl_bivector *bv;
00364 cpl_vector *v;
00365 vir_fits *ff;
00366 cpl_table *ic;
00367 cpl_frame *catindex;
00368 cpl_propertylist *pp;
00369
00370
00371
00372 if (framelist == NULL || cpl_frameset_get_size(framelist) <= 0) {
00373 cpl_msg_error(fctid,"Input framelist NULL or has no input data\n");
00374 return(-1);
00375 }
00376
00377
00378
00379 vircam_jmp_init();
00380 (void)strncpy(vircam_recipename,fctid,VIRCAM_PATHSZ);
00381 (void)snprintf(vircam_recipepaf,VIRCAM_PATHSZ,"VIRCAM/%s",fctid);
00382 recflag = RECMES;
00383
00384
00385
00386 p = cpl_parameterlist_find(parlist,
00387 "vircam.vircam_mesostep_analyse.ipix");
00388 vircam_jmp_config.ipix = cpl_parameter_get_int(p);
00389 p = cpl_parameterlist_find(parlist,
00390 "vircam.vircam_mesostep_analyse.thresh");
00391 vircam_jmp_config.threshold = (float)cpl_parameter_get_double(p);
00392 p = cpl_parameterlist_find(parlist,
00393 "vircam.vircam_mesostep_analyse.icrowd");
00394 vircam_jmp_config.icrowd = cpl_parameter_get_bool(p);
00395 p = cpl_parameterlist_find(parlist,
00396 "vircam.vircam_mesostep_analyse.rcore");
00397 vircam_jmp_config.rcore = (float)cpl_parameter_get_double(p);
00398 p = cpl_parameterlist_find(parlist,
00399 "vircam.vircam_mesostep_analyse.nbsize");
00400 vircam_jmp_config.nbsize = cpl_parameter_get_int(p);
00401 p = cpl_parameterlist_find(parlist,
00402 "vircam.vircam_mesostep_analyse.destripe");
00403 vircam_jmp_config.destripe = cpl_parameter_get_bool(p);
00404 p = cpl_parameterlist_find(parlist,
00405 "vircam.vircam_mesostep_analyse.skycor");
00406 vircam_jmp_config.skycor = cpl_parameter_get_bool(p);
00407 p = cpl_parameterlist_find(parlist,
00408 "vircam.vircam_mesostep_analyse.nord");
00409 vircam_jmp_config.nord = cpl_parameter_get_int(p);
00410 p = cpl_parameterlist_find(parlist,
00411 "vircam.vircam_mesostep_analyse.extenum");
00412 vircam_jmp_config.extenum = cpl_parameter_get_int(p);
00413
00414
00415
00416 if (vircam_dfs_set_groups(framelist) != VIR_OK) {
00417 cpl_msg_error(fctid,"Cannot identify RAW and CALIB frames");
00418 vircam_jmp_tidy(0);
00419 return(-1);
00420 }
00421
00422
00423
00424 if ((ps.labels = cpl_frameset_labelise(framelist,vircam_compare_tags,
00425 &nlab)) == NULL) {
00426 cpl_msg_error(fctid,"Cannot labelise the input frames");
00427 vircam_jmp_tidy(0);
00428 return(-1);
00429 }
00430
00431
00432
00433 if ((ps.science_frames =
00434 vircam_frameset_subgroup(framelist,ps.labels,nlab,
00435 VIRCAM_ILLUM_RAW)) == NULL) {
00436 cpl_msg_error(fctid,"No science images to process!");
00437 vircam_jmp_tidy(0);
00438 return(-1);
00439 }
00440
00441
00442
00443 if ((ps.master_dark =
00444 vircam_frameset_subgroup_1(framelist,ps.labels,nlab,
00445 VIRCAM_CAL_DARK)) == NULL) {
00446 cpl_msg_error(fctid,"No master dark found");
00447 vircam_jmp_tidy(0);
00448 return(-1);
00449 }
00450
00451
00452
00453 if ((ps.master_twilight_flat =
00454 vircam_frameset_subgroup_1(framelist,ps.labels,nlab,
00455 VIRCAM_CAL_TWILIGHT_FLAT)) == NULL) {
00456 cpl_msg_error(fctid,"No master twilight flat found");
00457 vircam_jmp_tidy(0);
00458 return(-1);
00459 }
00460
00461
00462
00463 status = VIR_OK;
00464 if (vircam_gaincor_calc(ps.master_twilight_flat,&i,&(ps.gaincors),
00465 &status) != VIR_OK) {
00466 cpl_msg_error(fctid,"Error calculating gain corrections");
00467 vircam_jmp_tidy(0);
00468 return(-1);
00469 }
00470
00471
00472
00473
00474
00475 isconf = 1;
00476 if ((ps.master_conf =
00477 vircam_frameset_subgroup_1(framelist,ps.labels,nlab,
00478 VIRCAM_CAL_CONF)) == NULL) {
00479 isconf = 0;
00480 if ((ps.master_conf =
00481 vircam_frameset_subgroup_1(framelist,ps.labels,nlab,
00482 VIRCAM_CAL_BPM)) == NULL) {
00483 cpl_msg_error(fctid,"No master confidence map found");
00484 vircam_jmp_tidy(0);
00485 return(-1);
00486 }
00487 }
00488 ps.mask = vircam_mask_define(framelist,ps.labels,nlab);
00489
00490
00491
00492 if ((ps.chantab = vircam_frameset_subgroup_1(framelist,ps.labels,nlab,
00493 VIRCAM_CAL_CHANTAB)) == NULL) {
00494 cpl_msg_error(fctid,"No channel table found");
00495 vircam_jmp_tidy(0);
00496 return(-1);
00497 }
00498
00499
00500
00501 if ((ps.phottab = vircam_frameset_subgroup_1(framelist,ps.labels,nlab,
00502 VIRCAM_CAL_PHOTTAB)) == NULL) {
00503 cpl_msg_error(fctid,"No photometric table found");
00504 vircam_jmp_tidy(0);
00505 return(-1);
00506 }
00507 if ((ps.tphottab = cpl_table_load(cpl_frame_get_filename(ps.phottab),1,0)) == NULL) {
00508 cpl_msg_error(fctid,"Unable to load photometric table");
00509 vircam_jmp_tidy(0);
00510 return(-1);
00511 }
00512
00513
00514
00515 if ((catindex = vircam_frameset_subgroup_1(framelist,ps.labels,nlab,
00516 VIRCAM_CAL_2MASS)) == NULL) {
00517 cpl_msg_info(fctid,"No 2MASS index found -- cannot continue");
00518 vircam_jmp_tidy(0);
00519 return(-1);
00520 }
00521
00522
00523
00524 if (vircam_catpars(catindex,&(ps.catpath),&(ps.catname)) == VIR_FATAL) {
00525 vircam_jmp_tidy(0);
00526 cpl_frame_delete(catindex);
00527 return(-1);
00528 }
00529 cpl_frame_delete(catindex);
00530
00531
00532
00533 pp = cpl_propertylist_load(cpl_frame_get_filename(cpl_frameset_get_frame(ps.science_frames,0)),0);
00534 if (vircam_pfits_get_ndit(pp,&ndit) != VIR_OK) {
00535 cpl_msg_error(fctid,"No value for NDIT available");
00536 freepropertylist(pp);
00537 vircam_jmp_tidy(0);
00538 return(-1);
00539 }
00540 cpl_propertylist_delete(pp);
00541
00542
00543
00544
00545
00546 vircam_exten_range(vircam_jmp_config.extenum,
00547 (const cpl_frame *)cpl_frameset_get_frame(ps.science_frames,0),
00548 &jst,&jfn);
00549 if (jst == -1 || jfn == -1) {
00550 cpl_msg_error(fctid,"Unable to continue");
00551 vircam_jmp_tidy(0);
00552 return(-1);
00553 }
00554
00555
00556
00557 status = VIR_OK;
00558 for (j = jst; j <= jfn; j++) {
00559 isfirst = (j == jst);
00560 gaincor_fac = (ps.gaincors)[j-1];
00561
00562
00563
00564
00565 ps.fdark = vircam_fits_load(ps.master_dark,CPL_TYPE_FLOAT,j);
00566 if (ps.fdark == NULL) {
00567 cpl_msg_error(fctid,"Error loading master dark %s[%d]\n%s",
00568 cpl_frame_get_filename(ps.master_dark),j,
00569 cpl_error_get_message());
00570 vircam_jmp_tidy(0);
00571 return(-1);
00572 }
00573 ps.fflat = vircam_fits_load(ps.master_twilight_flat,CPL_TYPE_FLOAT,j);
00574 if (ps.fflat == NULL) {
00575 cpl_msg_error(fctid,"Error loading master flat %s[%d]\n%s",
00576 cpl_frame_get_filename(ps.master_twilight_flat),j,
00577 cpl_error_get_message());
00578 vircam_jmp_tidy(0);
00579 return(-1);
00580 }
00581 ps.fconf = vircam_fits_load(ps.master_conf,CPL_TYPE_INT,j);
00582 if (ps.fconf == NULL) {
00583 cpl_msg_error(fctid,"Error loading master conf %s[%d]\n%s",
00584 cpl_frame_get_filename(ps.master_conf),j,
00585 cpl_error_get_message());
00586 vircam_jmp_tidy(0);
00587 return(-1);
00588 }
00589 if (! isconf)
00590 vircam_jmp_bpm2conf();
00591 if (vircam_mask_load(ps.mask,j,
00592 cpl_image_get_size_x(vircam_fits_get_image(ps.fconf)),
00593 cpl_image_get_size_y(vircam_fits_get_image(ps.fconf))) != VIR_OK) {
00594 cpl_msg_error(fctid,"Error loading mask from master conf %s[%d]\n%s",
00595 cpl_frame_get_filename(ps.master_conf),j,
00596 cpl_error_get_message());
00597 vircam_jmp_tidy(0);
00598 return(-1);
00599 }
00600 ps.fchantab = vircam_tfits_load(ps.chantab,j);
00601 if (ps.fchantab == NULL) {
00602 cpl_msg_error(fctid,"Error loading channel table %s[%d]\n%s",
00603 cpl_frame_get_filename(ps.chantab),j,
00604 cpl_error_get_message());
00605 vircam_jmp_tidy(0);
00606 return(-1);
00607 }
00608
00609
00610
00611 ps.nscience = cpl_frameset_get_size(ps.science_frames);
00612 ps.sci_fits = vircam_fits_load_list(ps.science_frames,CPL_TYPE_FLOAT,j);
00613 if (ps.sci_fits == NULL) {
00614 cpl_msg_error(fctid,"Error loading science frames extension %d: %s",
00615 j,cpl_error_get_message());
00616 vircam_jmp_tidy(0);
00617 return(-1);
00618 }
00619
00620
00621
00622
00623 for (i = 0; i < ps.nscience; i++) {
00624 ff = ps.sci_fits[i];
00625 vircam_pfits_get_detlive(vircam_fits_get_ehu(ff),&live);
00626 if (! live)
00627 vircam_fits_set_error(ff,VIR_FATAL);
00628 }
00629
00630
00631
00632 cpl_msg_info(fctid,"Doing stage1 corrections on %s",
00633 vircam_fits_get_extname(ps.sci_fits[0]));
00634 for (i = 0; i < ps.nscience; i++) {
00635 ff = ps.sci_fits[i];
00636 if (vircam_fits_get_status(ff) == VIR_FATAL) {
00637 cpl_msg_info(fctid,"Detector is flagged dead in %s",
00638 vircam_fits_get_fullname(ff));
00639 continue;
00640 }
00641 status = VIR_OK;
00642 (void)vircam_darkcor(ff,ps.fdark,1.0,&status);
00643 (void)vircam_lincor(ff,ps.fchantab,1,ndit,&status);
00644 (void)vircam_flatcor(ff,ps.fflat,&status);
00645 (void)vircam_gaincor(ff,gaincor_fac,&status);
00646 if (vircam_jmp_config.destripe)
00647 (void)vircam_destripe(ff,ps.mask,&status);
00648 vircam_fits_set_error(ff,status);
00649 }
00650
00651
00652
00653 if (vircam_jmp_config.skycor) {
00654 cpl_msg_info(fctid,"Doing sky correction");
00655 vircam_jmp_skycor();
00656 }
00657
00658
00659
00660 cpl_msg_info(fctid,"Doing illumination correction");
00661 (void)strcpy(current_cat,ps.catname);
00662 (void)strcpy(current_catpath,ps.catpath);
00663 vircam_jmp_illum();
00664
00665
00666
00667 if (ps.illcor != NULL) {
00668 ic = vircam_tfits_get_table(ps.illcor);
00669 nrows = cpl_table_get_nrow(ic);
00670 x1 = cpl_table_get_data_float(ic,"xmin");
00671 x2 = cpl_table_get_data_float(ic,"xmax");
00672 y1 = cpl_table_get_data_float(ic,"ymin");
00673 y2 = cpl_table_get_data_float(ic,"ymax");
00674 ill = cpl_table_get_data_float(ic,"illcor");
00675 n = 0;
00676 for (i = 0; i < nrows; i++)
00677 if (ill[i] != -99.0)
00678 n++;
00679
00680
00681
00682
00683 if (n == 0) {
00684 cpl_msg_warning(fctid,"Illum correction table is all NULLs");
00685
00686 } else {
00687
00688
00689
00690
00691 bv = cpl_bivector_new(n);
00692 bv_x = cpl_bivector_get_x_data(bv);
00693 bv_y = cpl_bivector_get_y_data(bv);
00694 v = cpl_vector_new(n);
00695 vdata = cpl_vector_get_data(v);
00696 n = 0;
00697 for (i = 0; i < nrows; i++) {
00698 if (ill[i] == -99.0)
00699 continue;
00700 bv_x[n] = 0.5*(double)(x2[i] + x1[i]);
00701 bv_y[n] = 0.5*(double)(y2[i] + y1[i]);
00702 vdata[n++] = (double)ill[i];
00703 }
00704
00705
00706
00707 poly = cpl_polynomial_fit_2d_create(bv,v,vircam_jmp_config.nord,
00708 NULL);
00709 cpl_vector_delete(v);
00710
00711
00712
00713
00714
00715 v = cpl_vector_new(2);
00716 vdata = cpl_vector_get_data(v);
00717 for (i = 0; i < nrows; i++) {
00718 vdata[0] = 0.5*(double)(x2[i] + x1[i]);
00719 vdata[1] = 0.5*(double)(y2[i] + y1[i]);
00720 val = cpl_polynomial_eval(poly,v);
00721 ill[i] = val;
00722 }
00723 cpl_vector_delete(v);
00724 cpl_bivector_delete(bv);
00725 cpl_polynomial_delete(poly);
00726 }
00727 }
00728
00729
00730
00731 cpl_msg_info(fctid,"Saving illumination correction table");
00732 dummyqc = vircam_mesostep_analyse_dummyqc(3);
00733 vircam_jmp_save_illum(framelist,parlist);
00734 freepropertylist(dummyqc);
00735
00736
00737
00738 vircam_jmp_tidy(1);
00739 }
00740
00741
00742
00743 vircam_jmp_tidy(0);
00744 return(0);
00745 }
00746
00747 static cpl_propertylist *vircam_mesostep_analyse_dummyqc(int type) {
00748 cpl_propertylist *p;
00749
00750
00751
00752 p = cpl_propertylist_new();
00753
00754
00755
00756 switch (type) {
00757
00758
00759
00760 case 3:
00761 cpl_propertylist_update_float(p,"ESO QC ILLUMCOR_RMS",0.0);
00762 cpl_propertylist_set_comment(p,"ESO QC ILLUMCOR_RMS",
00763 "RMS of illumination correction map");
00764 break;
00765 default:
00766 break;
00767 }
00768
00769
00770
00771 return(p);
00772 }
00773
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838