91extern void imcore_phopt(ap_t *ap,
float parm[IMNUM][NPAR],
int nbit,
92 int naper,
float apertures[],
float cflux[],
93 float badpix[],
int nrcore,
float avconf[]) {
94 double aa[IMNUM+1][IMNUM+1],bb[IMNUM+1];
95 float d,arg,*map,rcirc,ff;
96 float cn,parrad,xmin,xmax,xi,yi,ymin,ymax;
97 float t,xj,yj,cnsq,tj,xk,yk,tk;
98 int i,ii,j,kk,ix1,ix2,iy1,iy2,nx,ny,k,iaper;
99 unsigned char *mflag,mf;
112 for (iaper = 0; iaper < naper; iaper++) {
113 rcirc = apertures[iaper];
114 parrad = rcirc + 0.5;
115 cn = 1.0/(CPL_MATH_PI*rcirc*rcirc);
120 for(i = 0; i < nbit; i++) {
125 for(j = i+1; j < nbit; j++) {
126 d = sqrtf((xi-parm[j][1])*(xi-parm[j][1])
127 + (yi-parm[j][2])*(yi-parm[j][2]));
133 aa[j][i] = cnsq*2.0*rcirc*rcirc*
134 (acosf(arg)-arg*(sqrtf(1.0-arg*arg)));
143 for(i = 0; i < nbit; i++)
152 for(i = 0; i < nbit; i++) {
155 xmin = MIN(xmin, xi);
156 xmax = MAX(xmax, xi);
157 ymin = MIN(ymin, yi);
158 ymax = MAX(ymax, yi);
160 ix1 = MAX(0,(
int)(xmin-parrad)-1);
161 ix2 = MIN(nx-1,(
int)(xmax+parrad));
162 iy1 = MAX(0,(
int)(ymin-parrad)-1);
163 iy2 = MIN(ny-1,(
int)(ymax+parrad));
167 for(ii = iy1; ii <= iy2; ii++) {
169 for(i = ix1; i <= ix2; i++) {
171 if (mf == MF_ZEROCONF || mf == MF_STUPID_VALUE) {
172 for (j = 0; j < nbit; j++) {
173 xj = i - parm[j][1] + 1.0;
174 yj = ii - parm[j][2] + 1.0;
175 tj = fraction(xj,yj,rcirc);
176 aa[j][j] -= tj*tj*cnsq;
177 for (k = j + 1; k < nbit; k++) {
178 xk = i - parm[k][1] + 1.0;
179 yk = ii - parm[k][2] + 1.0;
180 tk = fraction(xk,yk,rcirc);
181 aa[k][j] -= tk*tj*cnsq;
187 }
else if (mf == MF_CLEANPIX || mf == MF_OBJPIX ||
188 mf == MF_SATURATED) {
190 for(j = 0; j < nbit; j++) {
191 xj = i - parm[j][1] + 1.0;
192 yj = ii - parm[j][2] + 1.0;
193 ff = fraction(xj,yj,rcirc);
196 avconf[j] += ff*(float)conf[kk+i];
205 cflux[iaper] = bb[0];
210 for (i = 0; i < nbit; i++)
211 aa[i][i] = MAX(aa[i][i],cnsq);
213 for(i = 0; i < nbit; i++)
214 cflux[i*naper+iaper] = cn*bb[i];
283 float r,t,x_a,x_b,frac,tanao2,cosa,tanp2a,sqrt2o2;
void imcore_phopt(ap_t *ap, float parm[IMNUM][NPAR], int nbit, int naper, float apertures[], float cflux[], float badpix[], int nrcore, float avconf[])
Do multiple profile fitting.