326 float momresults[8],ttotal,parmall[IMNUM][NPAR],cflux[NRADS*IMNUM];
327 float sxx,syy,srr,sxy,ecc,temp,xx,theta,radeg,ell,iso_flux;
328 float apflux1,apflux2,apflux3,apflux4,apflux5,yy,sigma,peak,areal1,apflux6;
329 float apflux7,apflux8,apflux9,apflux10,apflux11,apflux12,apflux13,zero;
330 float areal2,areal3,areal4,areal5,areal6,areal7,areal8;
331 float skylev,skyrms,exp_rad[IMNUM],exp_flux[IMNUM],kron_flux[IMNUM];
332 float petr_flux[IMNUM],kron_rad[IMNUM],petr_rad[IMNUM],badpix[IMNUM];
333 float theta_ra,skyvar[IMNUM],cc,dd,sigsq,xxe,yye,peake,kron_fluxe;
334 float apflux1e,apflux2e,apflux3e,apflux4e,apflux5e,apflux6e,apflux7e;
335 float apflux8e,apflux9e,apflux10e,apflux11e,apflux12e,apflux13e,exp_fluxe;
336 float petr_fluxe,avconf[IMNUM];
337 int iareal[NAREAL],nbit,i,k,nr,mbit,j;
343 if (momresults[0] < 0)
350 if (iareal[0] < ap->ipnop || momresults[3] < ap->xintmin)
356 momresults[4],momresults[5],momresults[6],
357 (
float)iareal[0],momresults[7],&ttotal);
361 if (iareal[0] >= ap->mulpix && ap->icrowd)
363 momresults[3],iareal[0],momresults[7]);
367 parmall[0][0] = momresults[3];
368 parmall[0][1] = momresults[1];
369 parmall[0][2] = momresults[2];
370 parmall[0][3] = ap->thresh;
371 for (i = 4; i < 8; i++)
372 parmall[0][i] = momresults[i];
373 for (i = 0; i < NAREAL; i++)
374 parmall[0][i+8] = (
float)iareal[i];
377 for (i = 0; i < nbit; i++) {
378 if (parmall[i][1] > 1.0 && parmall[i][1] < ap->lsiz &&
379 parmall[i][2] > 1.0 && parmall[i][2] < ap->csiz) {
380 for (j = 0; j < NPAR; j++)
381 parmall[mbit][j] = parmall[i][j];
392 for (i = 0; i < NRADS; i++) {
393 apertures[i] = rmults[i]*(ap->rcore);
394 skyvar[i] = CPL_MATH_PI*apertures[i]*apertures[i];
399 for (i = 0; i < nbit; i++) {
406 imcore_phopt(ap,parmall,nbit,NRADS,apertures,cflux,badpix,nrcore,avconf);
410 for (k = 0; k < nbit; k++) {
411 peak = parmall[k][7];
412 areal1 = parmall[k][8];
413 exp_rad[k] =
imcore_exprad(parmall[k][3],peak,areal1,apertures,NRADS);
415 imcore_flux(ap,parmall,nbit,exp_rad,exp_flux,NRADS,apertures,cflux);
419 for (k = 0; k < nbit; k++) {
420 areal1 = parmall[k][8];
421 kron_rad[k] =
imcore_kronrad(areal1,apertures,cflux+k*NRADS,NRADS);
423 imcore_flux(ap,parmall,nbit,kron_rad,kron_flux,NRADS,apertures,cflux);
427 for (k = 0; k < nbit; k++) {
428 areal1 = parmall[k][8];
429 petr_rad[k] =
imcore_petrad(areal1,apertures,cflux+k*NRADS,NRADS);
431 imcore_flux(ap,parmall,nbit,petr_rad,petr_flux,NRADS,apertures,cflux);
435 sigsq = powf(ap->sigma,2.0);
436 radeg = 180.0/CPL_MATH_PI;
437 for (k = 0; k < nbit; k++) {
442 sxy = MAX(1.0e-4,MIN(sxy,sqrtf(sxx*syy)));
444 sxy = MIN(-1.0e-4,MAX(sxy,-sqrtf(sxx*syy)));
445 srr = MAX(0.5,sxx+syy);
446 ecc = sqrtf((syy-sxx)*(syy-sxx)+4.0*sxy*sxy)/srr;
447 temp = MAX((1.0-ecc)/(1.0+ecc),0.0);
448 ell = 1.0 - sqrtf(temp);
449 ell = MIN(0.99,MAX(0.0,ell));
450 xx = 0.5*(1.0+ecc)*srr-sxx;
454 theta = 90.0 - radeg*atanf(sxy/xx);
455 theta_ra = theta/radeg;
456 cc = (1.0 + ecc)*pow(cos(theta_ra),2.0) + (1.0 - ecc)*pow(sin(theta_ra),2.0);
457 dd = (1.0 + ecc)*pow(sin(theta_ra),2.0) + (1.0 - ecc)*pow(cos(theta_ra),2.0);
461 nrows = cpl_table_get_nrow(tab);
463 if (*nobjects > nrows)
464 (void)cpl_table_set_size(tab,nrows+INITROWS);
466 iso_flux = parmall[k][0];
467 apflux1 = cflux[k*NRADS + 0];
468 apflux2 = cflux[k*NRADS + 1];
469 apflux3 = cflux[k*NRADS + 2];
470 apflux4 = cflux[k*NRADS + 3];
471 apflux5 = cflux[k*NRADS + 4];
472 apflux6 = cflux[k*NRADS + 5];
473 apflux7 = cflux[k*NRADS + 6];
474 apflux8 = cflux[k*NRADS + 7];
475 apflux9 = cflux[k*NRADS + 8];
476 apflux10 = cflux[k*NRADS + 9];
477 apflux11 = cflux[k*NRADS + 10];
478 apflux12 = cflux[k*NRADS + 11];
479 apflux13 = cflux[k*NRADS + 12];
480 peak = parmall[k][7];
482 xxe = sqrtf((2.0*sigsq/(CPL_MATH_PI*peak*peak)) + cc/(2.0*CPL_MATH_PI*gain*peak) +
485 yye = sqrtf((2.0*sigsq/(CPL_MATH_PI*peak*peak)) + dd/(2.0*CPL_MATH_PI*gain*peak) +
488 areal1 = parmall[k][8];
489 areal2 = parmall[k][9];
490 areal3 = parmall[k][10];
491 areal4 = parmall[k][11];
492 areal5 = parmall[k][12];
493 areal6 = parmall[k][13];
494 areal7 = parmall[k][14];
495 if (nbit > 1 && k == 0)
498 areal8 = parmall[k][15];
500 peake = sqrtf(peak/gain + sigsq + skyrms*skyrms);
501 kron_fluxe = sqrt(kron_flux[k]/gain +
502 (sigsq + skyrms*skyrms)*CPL_MATH_PI*powf(kron_rad[k],2.0));
503 exp_fluxe = sqrt(exp_flux[k]/gain +
504 (sigsq + skyrms*skyrms)*CPL_MATH_PI*powf(exp_rad[k],2.0));
505 petr_fluxe = sqrt(petr_flux[k]/gain +
506 (sigsq + skyrms*skyrms)*CPL_MATH_PI*powf(petr_rad[k],2.0));
507 apflux1e = sqrt(MAX(0.0,apflux1/gain) + skyvar[0]*(sigsq + skyrms*skyrms));
508 apflux2e = sqrt(MAX(0.0,apflux2/gain) + skyvar[1]*(sigsq + skyrms*skyrms));
509 apflux3e = sqrt(MAX(0.0,apflux3/gain) + skyvar[2]*(sigsq + skyrms*skyrms));
510 apflux4e = sqrt(MAX(0.0,apflux4/gain) + skyvar[3]*(sigsq + skyrms*skyrms));
511 apflux5e = sqrt(MAX(0.0,apflux5/gain) + skyvar[4]*(sigsq + skyrms*skyrms));
512 apflux6e = sqrt(MAX(0.0,apflux6/gain) + skyvar[5]*(sigsq + skyrms*skyrms));
513 apflux7e = sqrt(MAX(0.0,apflux7/gain) + skyvar[6]*(sigsq + skyrms*skyrms));
514 apflux8e = sqrt(MAX(0.0,apflux8/gain) + skyvar[7]*(sigsq + skyrms*skyrms));
515 apflux9e = sqrt(MAX(0.0,apflux9/gain) + skyvar[8]*(sigsq + skyrms*skyrms));
516 apflux10e = sqrt(MAX(0.0,apflux10/gain) + skyvar[9]*(sigsq + skyrms*skyrms));
517 apflux11e = sqrt(MAX(0.0,apflux11/gain) + skyvar[10]*(sigsq + skyrms*skyrms));
518 apflux12e = sqrt(MAX(0.0,apflux12/gain) + skyvar[11]*(sigsq + skyrms*skyrms));
519 apflux13e = sqrt(MAX(0.0,apflux13/gain) + skyvar[12]*(sigsq + skyrms*skyrms));
524 cpl_table_set_int(tab,ttype[COL_NUMBER-1],nr,*nobjects);
525 cpl_table_set_float(tab,ttype[COL_FLUXISO-1],nr,iso_flux);
526 cpl_table_set_float(tab,ttype[COL_X-1],nr,xx);
527 cpl_table_set_float(tab,ttype[COL_XERR-1],nr,xxe);
528 cpl_table_set_float(tab,ttype[COL_Y-1],nr,yy);
529 cpl_table_set_float(tab,ttype[COL_YERR-1],nr,yye);
530 cpl_table_set_float(tab,ttype[COL_SIGMA-1],nr,sigma);
531 cpl_table_set_float(tab,ttype[COL_ELLIPT-1],nr,ell);
532 cpl_table_set_float(tab,ttype[COL_PA-1],nr,theta);
533 cpl_table_set_float(tab,ttype[COL_AREAL1-1],nr,areal1);
534 cpl_table_set_float(tab,ttype[COL_AREAL2-1],nr,areal2);
535 cpl_table_set_float(tab,ttype[COL_AREAL3-1],nr,areal3);
536 cpl_table_set_float(tab,ttype[COL_AREAL4-1],nr,areal4);
537 cpl_table_set_float(tab,ttype[COL_AREAL5-1],nr,areal5);
538 cpl_table_set_float(tab,ttype[COL_AREAL6-1],nr,areal6);
539 cpl_table_set_float(tab,ttype[COL_AREAL7-1],nr,areal7);
540 cpl_table_set_float(tab,ttype[COL_AREAL8-1],nr,areal8);
541 cpl_table_set_float(tab,ttype[COL_PEAKHEIGHT-1],nr,peak);
542 cpl_table_set_float(tab,ttype[COL_PKHTERR-1],nr,peake);
543 cpl_table_set_float(tab,ttype[COL_APFLUX1-1],nr,apflux1);
544 cpl_table_set_float(tab,ttype[COL_APFLUX1ERR-1],nr,apflux1e);
545 cpl_table_set_float(tab,ttype[COL_APFLUX2-1],nr,apflux2);
546 cpl_table_set_float(tab,ttype[COL_APFLUX2ERR-1],nr,apflux2e);
547 cpl_table_set_float(tab,ttype[COL_APFLUX3-1],nr,apflux3);
548 cpl_table_set_float(tab,ttype[COL_APFLUX3ERR-1],nr,apflux3e);
549 cpl_table_set_float(tab,ttype[COL_APFLUX4-1],nr,apflux4);
550 cpl_table_set_float(tab,ttype[COL_APFLUX4ERR-1],nr,apflux4e);
551 cpl_table_set_float(tab,ttype[COL_APFLUX5-1],nr,apflux5);
552 cpl_table_set_float(tab,ttype[COL_APFLUX5ERR-1],nr,apflux5e);
553 cpl_table_set_float(tab,ttype[COL_APFLUX6-1],nr,apflux6);
554 cpl_table_set_float(tab,ttype[COL_APFLUX6ERR-1],nr,apflux6e);
555 cpl_table_set_float(tab,ttype[COL_APFLUX7-1],nr,apflux7);
556 cpl_table_set_float(tab,ttype[COL_APFLUX7ERR-1],nr,apflux7e);
557 cpl_table_set_float(tab,ttype[COL_APFLUX8-1],nr,apflux8);
558 cpl_table_set_float(tab,ttype[COL_APFLUX8ERR-1],nr,apflux8e);
559 cpl_table_set_float(tab,ttype[COL_APFLUX9-1],nr,apflux9);
560 cpl_table_set_float(tab,ttype[COL_APFLUX9ERR-1],nr,apflux9e);
561 cpl_table_set_float(tab,ttype[COL_APFLUX10-1],nr,apflux10);
562 cpl_table_set_float(tab,ttype[COL_APFLUX10ERR-1],nr,apflux10e);
563 cpl_table_set_float(tab,ttype[COL_APFLUX11-1],nr,apflux11);
564 cpl_table_set_float(tab,ttype[COL_APFLUX11ERR-1],nr,apflux11e);
565 cpl_table_set_float(tab,ttype[COL_APFLUX12-1],nr,apflux12);
566 cpl_table_set_float(tab,ttype[COL_APFLUX12ERR-1],nr,apflux12e);
567 cpl_table_set_float(tab,ttype[COL_APFLUX13-1],nr,apflux13);
568 cpl_table_set_float(tab,ttype[COL_APFLUX13ERR-1],nr,apflux13e);
569 cpl_table_set_float(tab,ttype[COL_PETRAD-1],nr,0.5*petr_rad[k]);
570 cpl_table_set_float(tab,ttype[COL_KRONRAD-1],nr,0.5*kron_rad[k]);
571 cpl_table_set_float(tab,ttype[COL_HALLRAD-1],nr,exp_rad[k]);
572 cpl_table_set_float(tab,ttype[COL_PETFLUX-1],nr,petr_flux[k]);
573 cpl_table_set_float(tab,ttype[COL_PETFLUXERR-1],nr,petr_fluxe);
574 cpl_table_set_float(tab,ttype[COL_KRONFLUX-1],nr,kron_flux[k]);
575 cpl_table_set_float(tab,ttype[COL_KRONFLUXERR-1],nr,kron_fluxe);
576 cpl_table_set_float(tab,ttype[COL_HALLFLUX-1],nr,exp_flux[k]);
577 cpl_table_set_float(tab,ttype[COL_HALLFLUXERR-1],nr,exp_fluxe);
578 cpl_table_set_float(tab,ttype[COL_ERRFLAG-1],nr,badpix[k]);
579 cpl_table_set_float(tab,ttype[COL_SKYLEVEL-1],nr,skylev);
580 cpl_table_set_float(tab,ttype[COL_SKYSIGMA-1],nr,skyrms);
581 cpl_table_set_float(tab,ttype[COL_CHLDPARENT-1],nr,zero);
585 cpl_table_set_float(tab,ttype[COL_RA-1],nr,zero);
586 cpl_table_set_float(tab,ttype[COL_DEC-1],nr,zero);
587 cpl_table_set_float(tab,ttype[COL_CLASS-1],nr,100.0);
588 cpl_table_set_float(tab,ttype[COL_STAT-1],nr,zero);