32 #include "floatmath.h"
38 #define COL_FLUXTOTAL 3
45 #define COL_PEAKHEIGHT 10
54 #define COL_APFLUX2 19
55 #define COL_APFLUX3 20
56 #define COL_APFLUX4 21
57 #define COL_APFLUX5 22
62 #define COL_APFLUX6 27
73 static float rmults[] = {0.5,1.0,CPL_MATH_SQRT2,2.0,2.0*CPL_MATH_SQRT2,4.0};
74 static int nrcore = 1;
75 static float apertures[NRADS];
79 static const char *ttype[NCOLS]={
"No.",
"Isophotal_flux",
"Total_flux",
"Core_flux",
80 "X_coordinate",
"Y_coordinate",
"Gaussian_sigma",
81 "Ellipticity",
"Position_angle",
"Peak_height",
82 "Areal_1_profile",
"Areal_2_profile",
"Areal_3_profile",
83 "Areal_4_profile",
"Areal_5_profile",
"Areal_6_profile",
84 "Areal_7_profile",
"Areal_8_profile",
"Core1_flux",
85 "Core2_flux",
"Core3_flux",
"Core4_flux",
86 "RA",
"DEC",
"Classification",
"Statistic",
87 "Core5_flux",
"Skylev",
88 "Skyrms",
"Blank_30",
"Blank_31",
"Blank_32"};
89 static const char *tunit[NCOLS]={
" ",
"Counts",
"Counts",
"Counts",
"Pixels",
"Pixels",
90 "Pixels",
" ",
"Degrees",
"Counts",
"Pixels",
"Pixels",
91 "Pixels",
"Pixels",
"Pixels",
"Pixels",
"Pixels",
"Pixels",
92 "Counts",
"Counts",
"Counts",
"Counts",
93 "Degrees",
"Degrees",
"Flag",
"N-sigma",
94 "Counts",
"Counts",
"Counts",
"Blank_30",
95 "Blank_31",
"Blank_32"};
96 static cpl_type tform[NCOLS]={CPL_TYPE_INT,CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,
97 CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,
98 CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,
99 CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,
100 CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,
101 CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,
102 CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,
103 CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,
104 CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,
105 CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,CPL_TYPE_FLOAT,
106 CPL_TYPE_FLOAT,CPL_TYPE_FLOAT};
108 static int areal_cols[NAREAL] = {COL_AREAL1,COL_AREAL2,COL_AREAL3,COL_AREAL4,
109 COL_AREAL5,COL_AREAL6,COL_AREAL7,COL_AREAL8};
177 char *areal_colnames[NAREAL];
181 for (i = 0; i < NAREAL; i++)
182 areal_colnames[i] = (
char *)ttype[areal_cols[i]-1];
186 retval =
do_seeing_gen(ap,ttype[COL_ELLIPT-1],ttype[COL_PEAKHEIGHT-1],
224 float momresults[8],ttotal,parmall[IMNUM][NPAR],ratio,cflux[NRADS*IMNUM];
225 float sxx,syy,srr,sxy,ecc,temp,xx,theta,radeg,ell,iso_flux,total_flux;
226 float apflux1,apflux2,apflux3,apflux4,apflux5,yy,sigma,peak,areal1,apflux6;
227 float areal2,areal3,areal4,areal5,areal6,areal7,areal8;
228 float skylev,skyrms,badpix[IMNUM];
229 int iareal[NAREAL],nbit,i,k,nr,mbit,j;
235 if (momresults[0] < 0)
242 if (iareal[0] < ap->ipnop || momresults[3] < ap->xintmin)
247 extend(ap,momresults[3],momresults[1],momresults[2],
248 momresults[4],momresults[5],momresults[6],
249 (
float)iareal[0],momresults[7],&ttotal);
250 ratio = MAX(ttotal,momresults[3])/momresults[3];
254 if (iareal[0] >= ap->mulpix && ap->icrowd)
255 overlp(ap,parmall,&nbit,momresults[1],momresults[2],
256 momresults[3],iareal[0],momresults[7]);
260 parmall[0][0] = momresults[3];
261 parmall[0][1] = momresults[1];
262 parmall[0][2] = momresults[2];
263 parmall[0][3] = ap->thresh;
264 for (i = 4; i < 8; i++)
265 parmall[0][i] = momresults[i];
266 for (i = 0; i < NAREAL; i++)
267 parmall[0][i+8] = (
float)iareal[i];
270 for (i = 0; i < nbit; i++) {
271 if (parmall[i][1] > 1.0 && parmall[i][1] < ap->lsiz &&
272 parmall[i][2] > 1.0 && parmall[i][2] < ap->csiz) {
273 for (j = 0; j < NPAR; j++)
274 parmall[mbit][j] = parmall[i][j];
283 for (i = 0; i < NRADS; i++)
284 apertures[i] = rmults[i]*(ap->rcore);
288 for (i = 0; i < nbit; i++)
293 phopt(ap,parmall,nbit,NRADS,apertures,cflux,badpix,nrcore);
297 radeg = 180.0/CPL_MATH_PI;
298 for (k = 0; k < nbit; k++) {
303 sxy = MAX(1.0e-4,MIN(sxy,sqrtf(sxx*syy)));
305 sxy = MIN(-1.0e-4,MAX(sxy,-sqrtf(sxx*syy)));
307 srr = MAX(0.5,sxx+syy);
308 ecc = sqrtf((syy-sxx)*(syy-sxx)+4.0*sxy*sxy)/srr;
309 temp = MAX((1.0-ecc)/(1.0+ecc),0.0);
310 ell = 1.0 - sqrtf(temp);
311 ell = MIN(0.99,MAX(0.0,ell));
312 xx = 0.5*(1.0+ecc)*srr-sxx;
316 theta = 90.0-radeg*atanf(sxy/xx);
320 nrows = cpl_table_get_nrow(tab);
322 if (nobjects > nrows)
323 (void)cpl_table_set_size(tab,nrows+INITROWS);
325 iso_flux = parmall[k][0];
326 total_flux = ratio*parmall[k][0];
327 apflux1 = cflux[k*NRADS + 0];
328 apflux2 = cflux[k*NRADS + 1];
329 apflux3 = cflux[k*NRADS + 2];
330 apflux4 = cflux[k*NRADS + 3];
331 apflux5 = cflux[k*NRADS + 4];
332 apflux6 = cflux[k*NRADS + 5];
336 peak = parmall[k][7];
337 areal1 = parmall[k][8];
338 areal2 = parmall[k][9];
339 areal3 = parmall[k][10];
340 areal4 = parmall[k][11];
341 areal5 = parmall[k][12];
342 areal6 = parmall[k][13];
343 areal7 = parmall[k][14];
344 if (nbit > 1 && k == 0)
347 areal8 = parmall[k][15];
352 cpl_table_set_int(tab,ttype[COL_NUMBER-1],nr,nobjects);
353 cpl_table_set_float(tab,ttype[COL_FLUXISO-1],nr,iso_flux);
354 cpl_table_set_float(tab,ttype[COL_FLUXTOTAL-1],nr,total_flux);
355 cpl_table_set_float(tab,ttype[COL_APFLUX1-1],nr,apflux2);
356 cpl_table_set_float(tab,ttype[COL_X-1],nr,xx);
357 cpl_table_set_float(tab,ttype[COL_Y-1],nr,yy);
358 cpl_table_set_float(tab,ttype[COL_SIGMA-1],nr,sigma);
359 cpl_table_set_float(tab,ttype[COL_ELLIPT-1],nr,ell);
360 cpl_table_set_float(tab,ttype[COL_PA-1],nr,theta);
361 cpl_table_set_float(tab,ttype[COL_PEAKHEIGHT-1],nr,peak);
362 cpl_table_set_float(tab,ttype[COL_AREAL1-1],nr,areal1);
363 cpl_table_set_float(tab,ttype[COL_AREAL2-1],nr,areal2);
364 cpl_table_set_float(tab,ttype[COL_AREAL3-1],nr,areal3);
365 cpl_table_set_float(tab,ttype[COL_AREAL4-1],nr,areal4);
366 cpl_table_set_float(tab,ttype[COL_AREAL5-1],nr,areal5);
367 cpl_table_set_float(tab,ttype[COL_AREAL6-1],nr,areal6);
368 cpl_table_set_float(tab,ttype[COL_AREAL7-1],nr,areal7);
369 cpl_table_set_float(tab,ttype[COL_AREAL8-1],nr,areal8);
370 cpl_table_set_float(tab,ttype[COL_APFLUX2-1],nr,apflux1);
371 cpl_table_set_float(tab,ttype[COL_APFLUX3-1],nr,apflux3);
372 cpl_table_set_float(tab,ttype[COL_APFLUX4-1],nr,apflux4);
373 cpl_table_set_float(tab,ttype[COL_APFLUX5-1],nr,apflux5);
374 cpl_table_set_float(tab,ttype[COL_APFLUX6-1],nr,apflux6);
375 cpl_table_set_float(tab,ttype[COL_SKYLEV-1],nr,skylev);
376 cpl_table_set_float(tab,ttype[COL_SKYRMS-1],nr,skyrms);