psf.h 4.76 KB
Newer Older
Emmanuel Bertin's avatar
Emmanuel Bertin committed
1
2
3
4
5
6
7
8
9
10
11
12
 /*
 				psf.h

*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*
*	Part of:	SExtractor
*
*	Authors:	E.BERTIN (IAP)
*			P.DELORME (LAOG)
*
*	Contents:	Include file for psffit.c.
*
13
*	Last modify:	18/05/2010
Emmanuel Bertin's avatar
Emmanuel Bertin committed
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
*
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/

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

#define	PSF_MAXSHIFT	20.0	/* Max shift from initial guess (pixels)*/
#define	PSF_MINSHIFT	1e-3	/* Min shift from previous guess (pixels)*/
#define PSF_NITER	20	/* Maximum number of iterations in fit */
#define PSF_NA		3	/* Number of fitted parameters per component */
#define PSF_NTOT	(PSF_NA*PSF_NPSFMAX)	/* Number of fitted parameters*/
#define PSF_DOUBLETOT   ((PSF_NA+1)*PSF_NPSFMAX)/* Nb of fitted parameters */
#define	PC_NITER	1	/* Maximum number of iterations in PC fit */

/* NOTES:
One must have:	PSF_MAXSHIFT > 0.0
		PSF_NPSF >= 1
		PSF_NITER >= 1
*/

/*--------------------------- structure definitions -------------------------*/

typedef struct code
  {
  float		*pc;
  float		**param;
  int		*parammod;
  int		ncode;
  int		nparam;
  }		codestruct;

typedef struct pc
  {
  char		name[MAXCHAR];	/* PC filename */
  int		npc;		/* Number of Principal Components */
  int		maskdim;	/* Dimensionality of the tabulated data */
  int		*masksize;	/* PC mask dimensions */
  int		masknpix;	/* Total number of involved PC pixels */
  float		*maskcomp; 	/* Convolved pix data (principal components) */
  int		omaskdim;	/* Dimensionality of the tabulated data */
  int		*omasksize;	/* PC mask dimensions */
  int		omasknpix;	/* Total number of involved PC pixels */
  float		*omaskcomp; 	/* Original pix data (principal components) */
57
58
59
60
  float		*maskcurr;	/* Current model */
  float		*mx2,*my2,*mxy;	/* 2nd order moments for each component */
  float		*flux;		/* Flux of each component */
  float		*bt;		/* B/T for each component */
Emmanuel Bertin's avatar
Emmanuel Bertin committed
61
62
63
  codestruct	*code;
  }	pcstruct;

Emmanuel Bertin's avatar
Emmanuel Bertin committed
64
typedef struct psf
Emmanuel Bertin's avatar
Emmanuel Bertin committed
65
66
67
68
69
70
  {
  char		name[MAXCHAR];	/* Name of the file containing the PSF data */
  int		maskdim;	/* Dimensionality of the tabulated data */
  int		*masksize;	/* PSF mask dimensions */
  int		masknpix;	/* Total number of involved PSF pixels */
  float		*maskcomp;      /* Complete pix. data (PSF components) */
71
  float		*maskloc;	/* Local PSF */
Emmanuel Bertin's avatar
Emmanuel Bertin committed
72
73
74
75
76
77
78
79
80
  double	**context;	/* Contexts */
  t_type	*contexttyp;	/* Context types */
  char		**contextname;	/* Array of context key-names */
  double	*contextoffset;	/* Offset to apply to context data */
  double	*contextscale;	/* Scaling to apply to context data */
  struct poly	*poly;		/* Polynom describing the PSF variations */
  pcstruct	*pc;		/* PC components */
  double	fwhm;		/* Typical PSF FWHM */
  float		pixstep;	/* PSF sampling step */
81
  int		build_flag;	/* Set if the current PSF has been computed */
Emmanuel Bertin's avatar
Emmanuel Bertin committed
82
83
84
85
86
87
  }	psfstruct;

typedef struct
  {
  int		niter;		/* Number of iterations required */
  int		npsf;		/* Number of fitted stars for this detection */
88
  double	*x,*y;		/* Position derived from the PSF-fitting */
Emmanuel Bertin's avatar
Emmanuel Bertin committed
89
  float		*flux;		/* Flux derived from the PSF-fitting */
90
  float		*fluxerr;	/* Flux error estimated from the PSF-fitting */
Emmanuel Bertin's avatar
Emmanuel Bertin committed
91
92
93
94
95
96
97
98
99
100
101
102
103
104
  }	psfitstruct;

/*----------------------------- Global variables ----------------------------*/
psfstruct	*psf,*ppsf,*thepsf;
psfitstruct	*thepsfit,*ppsfit,*psfit;
PIXTYPE		*checkmask;

/*-------------------------------- functions --------------------------------*/
extern void	compute_pos(int *pnpsf,int *pconvflag,int *pnpsfflag,
			double radmin2, double radmax2,double r2, double *sol,
			double *flux , double *deltax,double *deltay,
			double *pdx,double *pdy),
		compute_pos_phot(int *pnpsf,double *sol,double *flux),
		compute_poserr(int j,double *var,double *sol,obj2struct *obj2,
105
			double *x2, double *y2,double *xy, int npsf),
Emmanuel Bertin's avatar
Emmanuel Bertin committed
106
107
108
		psf_build(psfstruct *psf),
		psf_end(psfstruct *psf, psfitstruct *psfit),
		psf_init(psfstruct *psf),
109
		svdfit(double *a, float *b, int m, int n, double *sol,
Emmanuel Bertin's avatar
Emmanuel Bertin committed
110
111
112
			double *vmat, double *wmat),
		svdvar(double *vmat, double *wmat, int n, double *covmat);

113
114
extern double	*compute_gradient (float *weight,int width, int height,
			float *masks, float *maskx, float *masky,
Emmanuel Bertin's avatar
Emmanuel Bertin committed
115
			double *mat),
116
		*compute_gradient_phot(float *weight,int width, int height,
117
118
			float *masks, double *pm),
		psf_fwhm(psfstruct *psf);
Emmanuel Bertin's avatar
Emmanuel Bertin committed
119
120
121
122

extern psfstruct	*psf_load(char *filename);

extern void	pc_end(pcstruct *pc),
123
124
		pc_fit(psfstruct *psf, float *data, float *weight,
		int width, int height, int ix, int iy, float dx, float dy,
Emmanuel Bertin's avatar
Emmanuel Bertin committed
125
126
127
128
129
130
131
132
133
		int npc, float backrms),
		double_psf_fit(psfstruct *psf, picstruct *field,
			picstruct *wfield, objstruct *obj,
			psfstruct *dpsf, picstruct *dfield, picstruct *dwfield),
		psf_fit(psfstruct *psf, picstruct *field, picstruct *wfield,
		objstruct *obj),
		psf_readcontext(psfstruct *psf, picstruct *field);

extern pcstruct	*pc_load(catstruct *cat);
134