67 moo_psf *res = cpl_calloc(1,
sizeof(moo_psf));
84 cpl_ensure(filename != NULL, CPL_ERROR_NULL_INPUT, NULL);
85 cpl_errorstate prev_state = cpl_errorstate_get();
87 res->filename = cpl_strdup(filename);
88 res->primary_header = cpl_propertylist_new();
91 if (!cpl_errorstate_is_equal(prev_state)) {
92 cpl_msg_info(
"moo_psf",
"psf load %d", cpl_error_get_code());
93 cpl_errorstate_set(prev_state);
111 cpl_ensure(psfframe != NULL, CPL_ERROR_NULL_INPUT, NULL);
113 const char *filename = cpl_frame_get_filename(psfframe);
114 cpl_ensure(filename != NULL, CPL_ERROR_NULL_INPUT, NULL);
115 cpl_errorstate prev_state = cpl_errorstate_get();
117 res->filename = cpl_strdup(filename);
118 res->primary_header = cpl_propertylist_load(filename, 0);
119 for (
int i = 1; i <= 2; i++) {
130 if (!cpl_errorstate_is_equal(prev_state)) {
131 cpl_msg_info(
"moo_psf",
"psf load %d", cpl_error_get_code());
132 cpl_errorstate_set(prev_state);
153 cpl_ensure(self != NULL, CPL_ERROR_NULL_INPUT, NULL);
157 return self->ri[ntas - 1];
160 return self->yj[ntas - 1];
163 return self->h[ntas - 1];
186 moo_psf_single *single)
188 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
189 cpl_ensure_code(single != NULL, CPL_ERROR_NULL_INPUT);
191 cpl_error_code status = CPL_ERROR_NONE;
192 cpl_errorstate prev_state = cpl_errorstate_get();
196 self->ri[ntas - 1] = single;
199 self->yj[ntas - 1] = single;
202 self->h[ntas - 1] = single;
205 if (!cpl_errorstate_is_equal(prev_state)) {
206 cpl_msg_error(
"moo_psf",
"Error for adding ext to %s (%d)",
207 self->filename, cpl_error_get_code());
208 status = cpl_error_get_code();
209 cpl_errorstate_set(prev_state);
229 moo_psf_single *single,
233 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
234 cpl_ensure_code(self->filename != NULL, CPL_ERROR_NULL_INPUT);
235 cpl_ensure_code(single != NULL, CPL_ERROR_NULL_INPUT);
237 cpl_error_code status = CPL_ERROR_NONE;
238 cpl_errorstate prev_state = cpl_errorstate_get();
243 if (!cpl_errorstate_is_equal(prev_state)) {
244 cpl_msg_error(
"moo_psf",
"Error for adding single to %s (%d)",
245 self->filename, cpl_error_get_code());
246 status = cpl_error_get_code();
247 cpl_errorstate_set(prev_state);
268 if (self->filename != NULL) {
269 cpl_free(self->filename);
271 if (self->primary_header != NULL) {
272 cpl_propertylist_delete(self->primary_header);
274 for (i = 0; i < 2; i++) {
275 if (self->ri[i] != NULL) {
278 if (self->yj[i] != NULL) {
281 if (self->h[i] != NULL) {
303 cpl_propertylist_save(self->primary_header, filename, CPL_IO_CREATE);
306 for (i = 0; i < 2; i++) {
307 if (self->ri[i] != NULL) {
310 if (self->yj[i] != NULL) {
313 if (self->h[i] != NULL) {
335 cpl_ensure_code(self != NULL, CPL_ERROR_NULL_INPUT);
336 cpl_ensure_code(stream != NULL, CPL_ERROR_NULL_INPUT);
338 fprintf(stream,
"---MOO_PSF\n");
339 fprintf(stream,
"filename %s\n", self->filename);
341 return CPL_ERROR_NONE;
const char * moo_detector_get_extname(moo_detector_type type, int ntas)
Get the extension name of a detector.
enum _moo_detector_type_ moo_detector_type
The type code type.
cpl_error_code moo_fits_create(const char *filename)
Create a new fits file with empty propertylist.
void moo_psf_single_delete(moo_psf_single *self)
Delete a moo_psf_single.
void moo_psf_single_save(const moo_psf_single *self, const char *filename)
Save a moo_psf_single to a FITS file.
moo_psf_single * moo_psf_single_create(const char *filename, const char *extname)
Create a new moo_psf_single from the given PSF filename.
moo_psf_single * moo_psf_get_single(moo_psf *self, moo_detector_type type, int ntas)
Get a PSF single from PSF.
moo_psf * moo_psf_new(void)
Create a new moo_psf
void moo_psf_save(moo_psf *self, const char *filename)
Save a moo_psf to a FITS file.
void moo_psf_delete(moo_psf *self)
Delete a moo_psf.
cpl_error_code moo_psf_set_single(moo_psf *self, moo_detector_type type, int ntas, moo_psf_single *single)
assign moo_psf_single structure in moo_psf structure
cpl_error_code moo_psf_add_single(moo_psf *self, moo_psf_single *single, moo_detector_type type, int ntas)
Add PSF_SINGLE extension to PSF filename and update moo_psf structure.
moo_psf * moo_psf_create(const char *filename)
Create a new empty PSF filename.
moo_psf * moo_psf_load(const cpl_frame *psfframe)
Load a PSF frame and create a moo_psf.
cpl_error_code moo_psf_dump(const moo_psf *self, FILE *stream)
Dump structural information of PSF.