File: psf.h

package info (click to toggle)
psfex 3.17.1%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 3,560 kB
  • ctags: 2,192
  • sloc: ansic: 27,934; sh: 10,829; makefile: 86
file content (192 lines) | stat: -rw-r--r-- 7,759 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
/*
*				psf.h
*
* Include file for psf.c
*
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*
*	This file part of:	PSFEx
*
*	Copyright:		(C) 1997-2013 Emmanuel Bertin -- IAP/CNRS/UPMC
*
*	License:		GNU General Public License
*
*	PSFEx is free software: you can redistribute it and/or modify
*	it under the terms of the GNU General Public License as published by
*	the Free Software Foundation, either version 3 of the License, or
* 	(at your option) any later version.
*	PSFEx is distributed in the hope that it will be useful,
*	but WITHOUT ANY WARRANTY; without even the implied warranty of
*	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*	GNU General Public License for more details.
*	You should have received a copy of the GNU General Public License
*	along with PSFEx.  If not, see <http://www.gnu.org/licenses/>.
*
*	Last modified:		20/02/2013
*
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/

#ifndef _POLY_H_
#include "wcs/poly.h"
#endif

#ifndef _SAMPLE_H_
#include "sample.h"
#endif

#ifndef _PSF_H_
#define _PSF_H_

/*----------------------------- Internal constants --------------------------*/

#define	PSF_NODIAG	0	/* Don't do diagnostics */
#define	PSF_DIAG	1	/* Do diagnostics */
#define	PSF_FREEDFACTOR	1.1	/* Margin against overfitting (10%) */
#define	PSF_NMASKDIM	3	/* Number of dimensions for PSF data */
#define	PSF_MAXSHIFT	3.0	/* Max shift from initial guess (pixels)*/
#define	PSF_MINSHIFT	1e-4	/* Min shift from previous guess (pixels)*/
#define PSF_NITER	40	/* Maximum number of iterations in fit */
#define	PSF_NSNAPMAX	16	/* Maximum number of PSF snapshots/dimension */
#define	GAUSS_LAG_OSAMP	3	/* Gauss-Laguerre oversampling factor */
#define	PSF_AUTO_FWHM	3.0	/* FWHM theshold for PIXEL-AUTO mode */
#define	PSF_NORTHOSTEP	16	/* Number of PSF orthonor. snapshots/dimension*/

/*----------------------------- Type definitions --------------------------*/
typedef enum {BASIS_NONE, BASIS_PIXEL, BASIS_GAUSS_LAGUERRE, BASIS_FILE,
		BASIS_PIXEL_AUTO}
        basistypenum;
/*--------------------------- structure definitions -------------------------*/

typedef struct moffat
  {
  double	context[POLY_MAXDIM];	/* Context coordinates */
  float		amplitude;	/* Central amplitude */
  float		xc[2];		/* Center coordinates */
  float		fwhm_min;	/* FWHM along the minor axis */
  float		fwhm_max;	/* FWHM along the major axis */
  float		theta;		/* Position angle of the major axis / NAXIS1 */
  float		beta;		/* Moffat beta parameter */
  float		residuals;	/* Normalized residuals */
  float		symresiduals;	/* Normalized symmetry residuals */
  float		noiseqarea;	/* Noise equivalent area (pixels^2) */
  int		nsubpix;	/* Number of supersampled pixels */
  }	moffatstruct;

typedef struct psf
  {
  int		dim;		/* Dimensionality of the tabulated data */
  int		*size;		/* PSF dimensions */
  int		npix;		/* Total number of involved PSF pixels */
  float		*comp; 		/* Complete pix. data (PSF components) */
  float		*loc;		/* Local PSF */
  float		*resi;		/* Map of residuals */
  char		**contextname;	/* Array of context key-names */
  double	*contextoffset;	/* Offset to apply to context data */
  double	*contextscale;	/* Scaling to apply to context data */
  int		cx,cy;		/* Indices of X and Y mapping contexts */
  struct poly	*poly;		/* Polynom describing the PSF variations */
  float		pixstep;	/* Mask oversampling (pixel). */
  float		pixsize[2];	/* Effective pixel size on each axis (pixel) */
  int		samples_loaded;	/* Number of detections loaded */
  int		samples_accepted;/* Number of detections accepted */
  double	chi2;		/* chi2/d.o.f. */
  float		fwhm;		/* Initial guess of the FWHM */
  int		*pixmask;	/* Pixel mask for local bases */
  float		*basis;		/* Basis vectors */
  float		*basiscoeff;	/* Basis vector coefficients */
  int		nbasis;		/* Number of basis vectors */
  int		ndata;		/* Size of the design matrix along data axis */
  int		nsnap;		/* Total number of snapshots */
  int		nmed;		/* Median position amongst snapshots */
  int		nsubpix;	/* Number of intrapixel samples per axis */
  moffatstruct	*moffat;	/* Array of Moffat fits to PSF */
  moffatstruct	*pfmoffat;	/* Array of pixel-free Moffat fits to PSF */
  float		moffat_fwhm_min;
  float		moffat_fwhm;	/* Central Moffat FWHM */
  float		moffat_fwhm_max;
  float		moffat_fwhm_wcs_min;
  float		moffat_fwhm_wcs;	/* Average Moffat FWHM in arcsec*/
  float		moffat_fwhm_wcs_max;
  float		moffat_ellipticity_min;
  float		moffat_ellipticity;	/* Central Moffat ellipticity */
  float		moffat_ellipticity_max;
  float		moffat_ellipticity1_min;
  float		moffat_ellipticity1;	/* Central Moffat e1 */
  float		moffat_ellipticity1_max;
  float		moffat_ellipticity2_min;
  float		moffat_ellipticity2;	/* Central Moffat e2 */
  float		moffat_ellipticity2_max;
  float		moffat_beta_min;
  float		moffat_beta;	/* Central Moffat beta */
  float		moffat_beta_max;
  float		moffat_residuals_min;
  float		moffat_residuals;/* Central Moffat residuals */
  float		moffat_residuals_max;
  float		moffat_score_min;
  float		moffat_score;	/* Central pixel-free Moffat score */
  float		moffat_score_max;
  float		pfmoffat_fwhm_min;
  float		pfmoffat_fwhm;	/* Central pixel-free Moffat FWHM */
  float		pfmoffat_fwhm_max;
  float		pfmoffat_fwhm_wcs_min;
  float		pfmoffat_fwhm_wcs; /* Average pixel-free Moffat FWHM in arcsec*/
  float		pfmoffat_fwhm_wcs_max;
  float		pfmoffat_ellipticity_min;
  float		pfmoffat_ellipticity;	/* Central pix-free Moffat ellipticity*/
  float		pfmoffat_ellipticity_max;
  float		pfmoffat_ellipticity1_min;
  float		pfmoffat_ellipticity1;	/* Central pix-free Moffat e1 */
  float		pfmoffat_ellipticity1_max;
  float		pfmoffat_ellipticity2_min;
  float		pfmoffat_ellipticity2;	/* Central pix-free Moffat e2 */
  float		pfmoffat_ellipticity2_max;
  float		pfmoffat_beta_min;
  float		pfmoffat_beta;	/* Central pixel-free Moffat beta */
  float		pfmoffat_beta_max;
  float		pfmoffat_residuals_min;
  float		pfmoffat_residuals;/* Central pixel-free Moffat residuals */
  float		pfmoffat_residuals_max;
  float		sym_residuals_min;
  float		sym_residuals;/* Symmetry residuals */
  float		sym_residuals_max;
  float		noiseqarea_min;
  float		noiseqarea;	/* Noise equivalent area */
  float		noiseqarea_max;
  float		pixscale_wcs_min;
  float		pixscale_wcs;	/* Average pixel scale in arcsec */
  float		pixscale_wcs_max;
  float		*homo_kernel;		/* PSF homogenization kernel */
  double	homopsf_params[2];	/* Idealised Moffat PSF params*/
  int		homobasis_number;	/* nb of supersampled pixels */
  }	psfstruct;


/*---------------------------------- protos --------------------------------*/
extern void	psf_build(psfstruct *psf, double *pos),
		psf_clip(psfstruct *psf),
		psf_end(psfstruct *psf),
		psf_make(psfstruct *psf, setstruct *set, double prof_accuracy),
		psf_makebasis(psfstruct *psf, setstruct *set,
			basistypenum basis_type,  int nvec),
		psf_makeresi(psfstruct *psf, setstruct *set, int centflag,
			double prof_accuracy),
		psf_makemask(psfstruct *psf, setstruct *set, double chithresh),
		psf_orthopoly(psfstruct *psf, setstruct *set),
		psf_save(psfstruct *psf,  char *filename, int ext, int next);

extern int	psf_pshapelet(float **shape, int w, int h, int nmax,
			double beta),
		psf_readbasis(psfstruct *psf, char *filename, int ext),
		psf_refine(psfstruct *psf, setstruct *set);

extern double	psf_chi2(psfstruct *psf, setstruct *set),
		psf_clean(psfstruct *psf, setstruct *set, double prof_accuracy);

extern psfstruct	*psf_copy(psfstruct *psf),
			*psf_inherit(contextstruct *context, psfstruct *psf),
			*psf_init(contextstruct *context, int *size,
				float psfstep, float *pixsize, int nsample),
			*psf_load(char *filename);

#endif