36 #include "detmon_utils.h"
37 #include "irplib_utils.h"
59 const char * detmon_get_license(
void)
61 const char * detmon_license =
62 "This file is part of the DETMON Instrument Pipeline\n"
63 "Copyright (C) 2002,2003 European Southern Observatory\n"
65 "This program is free software; you can redistribute it and/or modify\n"
66 "it under the terms of the GNU General Public License as published by\n"
67 "the Free Software Foundation; either version 2 of the License, or\n"
68 "(at your option) any later version.\n"
70 "This program is distributed in the hope that it will be useful,\n"
71 "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
72 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
73 "GNU General Public License for more details.\n"
75 "You should have received a copy of the GNU General Public License\n"
76 "along with this program; if not, write to the Free Software\n"
77 "Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, \n"
79 return detmon_license ;
90 static void expand_region(
const cpl_image * ref,
101 *urx = cpl_image_get_size_x(ref);
103 *ury = cpl_image_get_size_y(ref);
129 detmon_load_frameset_window(
const cpl_frameset * fset, cpl_type type,
130 cpl_size pnum, cpl_size xtnum,
131 cpl_size llx, cpl_size lly,
132 cpl_size urx, cpl_size ury,
133 cpl_size nx, cpl_size ny)
135 cpl_imagelist * list = cpl_imagelist_new();
136 const size_t n = cpl_frameset_get_size(fset);
138 if (nx >= 0 && ny >= 0) {
139 error_if(urx - llx + 1 > nx || ury - lly + 1 > ny ,
140 CPL_ERROR_ILLEGAL_INPUT,
141 "window size [%d:%d,%d:%d] larger than output size [%d, %d]",
142 (
int)llx, (
int)urx, (
int)lly, (
int)ury, (
int)nx, (
int)ny);
145 for (
size_t i = 0; i < n; i++) {
146 const cpl_frame * frm = cpl_frameset_get_position_const(fset, i);
147 const char * fn = cpl_frame_get_filename(frm);
149 cpl_size next = cpl_frame_get_nextensions(frm);
150 for (
size_t e = 0; e < next; e++) {
151 cpl_image * image = cpl_image_load_window(fn, type, pnum, e,
153 skip_if(image == NULL);
154 if(nx < 0 || ny < 0 ) {
155 cpl_imagelist_set(list, image, cpl_imagelist_get_size(list));
157 cpl_image * full = cpl_image_new(nx, ny, type);
158 cpl_image_copy(full, image, llx, lly);
159 cpl_image_delete(image);
160 cpl_imagelist_set(list, full, cpl_imagelist_get_size(list));
166 cpl_image * image = cpl_image_load_window(fn, type, pnum, xtnum,
168 skip_if(image == NULL);
169 if(nx < 0 || ny < 0 ) {
170 cpl_imagelist_set(list, image, cpl_imagelist_get_size(list));
172 cpl_image * full = cpl_image_new(nx, ny, type);
173 cpl_image_copy(full, image, llx, lly);
174 cpl_image_delete(image);
175 cpl_imagelist_set(list, full, cpl_imagelist_get_size(list));
182 if (cpl_error_get_code()) {
183 cpl_imagelist_delete(list);
201 cpl_image * detmon_subtract_create_window(
const cpl_image * a,
208 cpl_image * na = cpl_image_extract(a, llx, lly, urx, ury);
209 cpl_image * nb = cpl_image_extract(b, llx, lly, urx, ury);
210 cpl_image_subtract(na, nb);
211 cpl_image_delete(nb);
230 cpl_image * detmon_subtracted_avg(
const cpl_image * on1,
231 const cpl_image * off1,
232 const cpl_image * on2,
233 const cpl_image * off2,
234 cpl_size llx, cpl_size lly,
235 cpl_size urx, cpl_size ury)
237 expand_region(on1, &llx, &lly, &urx, &ury);
238 cpl_image * dif1 = cpl_image_extract(on1, llx, lly, urx, ury);
239 cpl_image * dif2 = cpl_image_extract(on2, llx, lly, urx, ury);
240 cpl_image * b = cpl_image_extract(off1, llx, lly, urx, ury);
243 cpl_image_subtract(dif1, b);
246 b = cpl_image_extract(off2, llx, lly, urx, ury);
247 cpl_image_subtract(dif1, b);
250 cpl_image_subtract(dif2, b);
254 dif_avg = cpl_image_average_create(dif1, dif2);
255 cpl_image_abs(dif_avg);
257 cpl_image_delete(dif1);
258 cpl_image_delete(dif2);