51 moo_raw_ext *raw_ext = cpl_calloc(1,
sizeof(moo_raw_ext));
56moo_raw_ext_delete(moo_raw_ext *self)
59 if (self->header != NULL) {
60 cpl_propertylist_delete(self->header);
62 if (self->data != NULL) {
63 cpl_image_delete(self->data);
70moo_raw_ext_create(
const char *filename,
const char *extname, cpl_type type)
72 moo_raw_ext *res = NULL;
74 cpl_size qnum = cpl_fits_find_extension(filename, extname);
77 res = moo_raw_ext_new();
78 res->header = cpl_propertylist_load(filename, qnum);
81 res->data = cpl_image_load(filename, type, 0, qnum);
100 moo_raw *raw = cpl_calloc(1,
sizeof(moo_raw));
118 for (i = 0; i < 2; i++) {
119 moo_raw_ext_delete(self->ri[i]);
120 moo_raw_ext_delete(self->yj[i]);
121 moo_raw_ext_delete(self->h[i]);
123 if (self->primary_header != NULL) {
124 cpl_propertylist_delete(self->primary_header);
131moo_raw_ext_avg(moo_raw_ext *a, moo_raw_ext *b)
133 cpl_ensure_code(a != NULL, CPL_ERROR_NULL_INPUT);
134 cpl_ensure_code(b != NULL, CPL_ERROR_NULL_INPUT);
136 if (a->data != NULL && b->data != NULL) {
137 cpl_image_add(a->data, b->data);
138 cpl_image_divide_scalar(a->data, 2.0);
140 return cpl_error_get_code();
144moo_raw_ext_save(moo_raw_ext *self,
const char *filename, cpl_type type)
146 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
147 cpl_ensure_code(filename != NULL, CPL_ERROR_NULL_INPUT);
149 if (self->data != NULL) {
150 cpl_image_save(self->data, filename, type, self->header, CPL_IO_EXTEND);
153 cpl_propertylist_save(self->header, filename, CPL_IO_EXTEND);
155 return cpl_error_get_code();
172 cpl_ensure(rawframe != NULL, CPL_ERROR_NULL_INPUT, NULL);
174 const char *filename = cpl_frame_get_filename(rawframe);
175 const char *tag = cpl_frame_get_tag(rawframe);
176 cpl_frame_group group = cpl_frame_get_group(rawframe);
179 cpl_ensure(filename != NULL, CPL_ERROR_NULL_INPUT, NULL);
180 cpl_ensure(tag != NULL, CPL_ERROR_NULL_INPUT, NULL);
181 cpl_ensure(group == CPL_FRAME_GROUP_RAW, CPL_ERROR_ILLEGAL_INPUT, NULL);
186 res->primary_header = cpl_propertylist_load(filename, 0);
188 res->ri[0] = moo_raw_ext_create(filename,
"RI_1", CPL_TYPE_FLOAT);
189 res->ri[1] = moo_raw_ext_create(filename,
"RI_2", CPL_TYPE_FLOAT);
191 res->yj[0] = moo_raw_ext_create(filename,
"YJ_1", CPL_TYPE_DOUBLE);
192 res->yj[1] = moo_raw_ext_create(filename,
"YJ_2", CPL_TYPE_DOUBLE);
194 res->h[0] = moo_raw_ext_create(filename,
"H_1", CPL_TYPE_DOUBLE);
195 res->h[1] = moo_raw_ext_create(filename,
"H_2", CPL_TYPE_DOUBLE);
215 cpl_ensure_code(a != NULL, CPL_ERROR_NULL_INPUT);
216 cpl_ensure_code(b != NULL, CPL_ERROR_NULL_INPUT);
219 for (i = 0; i < 2; i++) {
220 if (a->ri[i] != NULL && b->ri[i] != NULL) {
221 moo_try_check(moo_raw_ext_avg(a->ri[i], b->ri[i]),
222 "Error adding extension RI %d", i);
224 if (a->yj[i] != NULL && b->yj[i] != NULL) {
225 moo_try_check(moo_raw_ext_avg(a->yj[i], b->yj[i]),
226 "Error adding extension YJ %d", i);
228 if (a->h[i] != NULL && b->h[i] != NULL) {
229 moo_try_check(moo_raw_ext_avg(a->h[i], b->h[i]),
230 "Error adding extension H %d", i);
234 return cpl_error_get_code();
256 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
257 cpl_ensure_code(filename != NULL, CPL_ERROR_NULL_INPUT);
258 cpl_ensure_code(self->primary_header != NULL, CPL_ERROR_NULL_INPUT);
260 cpl_propertylist_save(self->primary_header, filename, CPL_IO_CREATE);
263 for (i = 0; i < 2; i++) {
264 if (self->ri[i] != NULL) {
265 moo_try_check(moo_raw_ext_save(self->ri[i], filename,
267 "Can't save RI %d", i);
269 if (self->yj[i] != NULL) {
270 moo_try_check(moo_raw_ext_save(self->yj[i], filename,
272 "Can't save YJ %d", i);
274 if (self->h[i] != NULL) {
275 moo_try_check(moo_raw_ext_save(self->h[i], filename,
277 "Can't save H %d", i);
281 return cpl_error_get_code();
int moo_pfits_get_naxis(const cpl_propertylist *plist)
find out the NAXIS value
moo_raw * moo_raw_new(void)
Create a new moo_raw
cpl_error_code moo_raw_save(moo_raw *self, const char *filename)
Save a moo_raw to a FITS file.
void moo_raw_delete(moo_raw *self)
Delete a moo_raw.
moo_raw * moo_raw_create(const cpl_frame *rawframe)
prepare moons raw frames
cpl_error_code moo_raw_avg(moo_raw *a, moo_raw *b)
Add to RAW frames (result in a)