328 float momresults[8],ttotal,parmall[IMNUM][NPAR],cflux[NRADS*IMNUM];
329 float sxx,syy,srr,sxy,ecc,temp,xx,theta,radeg,ell,iso_flux;
330 float apflux1,apflux2,apflux3,apflux4,apflux5,yy,sigma,peak,areal1,apflux6;
331 float apflux7,apflux8,apflux9,apflux10,apflux11,apflux12,apflux13,zero;
332 float areal2,areal3,areal4,areal5,areal6,areal7,areal8;
333 float skylev,skyrms,half_rad[IMNUM],half_flux[IMNUM],kron_flux[IMNUM];
334 float petr_flux[IMNUM],kron_rad[IMNUM],petr_rad[IMNUM],badpix[IMNUM];
335 float theta_ra,skyvar[IMNUM],cc,dd,sigsq,xxe,yye,peake,kron_fluxe;
336 float apflux1e,apflux2e,apflux3e,apflux4e,apflux5e,apflux6e,apflux7e;
337 float apflux8e,apflux9e,apflux10e,apflux11e,apflux12e,apflux13e,half_fluxe;
338 float petr_fluxe,avconf[IMNUM],rcore_area;
339 int iareal[NAREAL],nbit,i,k,nr,mbit,j;
345 if (momresults[0] < 0)
352 if (iareal[0] < ap->ipnop || momresults[3] < ap->xintmin)
358 momresults[4],momresults[5],momresults[6],
359 (
float)iareal[0],momresults[7],&ttotal);
363 if (iareal[0] >= ap->mulpix && ap->icrowd)
365 momresults[3],iareal[0],momresults[7]);
369 parmall[0][0] = momresults[3];
370 parmall[0][1] = momresults[1];
371 parmall[0][2] = momresults[2];
372 parmall[0][3] = ap->thresh;
373 for (i = 4; i < 8; i++)
374 parmall[0][i] = momresults[i];
375 for (i = 0; i < NAREAL; i++)
376 parmall[0][i+8] = (
float)iareal[i];
379 for (i = 0; i < nbit; i++) {
380 if (parmall[i][1] > 1.0 && parmall[i][1] < ap->lsiz &&
381 parmall[i][2] > 1.0 && parmall[i][2] < ap->csiz) {
382 for (j = 0; j < NPAR; j++)
383 parmall[mbit][j] = parmall[i][j];
394 for (i = 0; i < NRADS; i++) {
395 apertures[i] = rmults[i]*(ap->rcore);
396 skyvar[i] = CPL_MATH_PI*apertures[i]*apertures[i];
398 rcore_area = CPL_MATH_PI*pow(ap->rcore,2.0);
402 for (i = 0; i < nbit; i++) {
409 imcore_phopt(ap,parmall,nbit,NRADS,apertures,cflux,badpix,nrcore,avconf);
410 for (i = 0; i < nbit; i++)
411 avconf[i] /= rcore_area;
415 for (k = 0; k < nbit; k++) {
416 half_flux[k] = 0.5*(MAX(parmall[k][0],cflux[k*NRADS+n2rcore]));
418 parmall[k][7],NRADS);
423 for (k = 0; k < nbit; k++) {
424 areal1 = parmall[k][8];
425 kron_rad[k] =
imcore_kronrad(areal1,apertures,cflux+k*NRADS,NRADS);
427 imcore_flux(ap,parmall,nbit,kron_rad,kron_flux,NRADS,apertures,cflux);
431 for (k = 0; k < nbit; k++) {
432 areal1 = parmall[k][8];
433 petr_rad[k] =
imcore_petrad(areal1,apertures,cflux+k*NRADS,NRADS);
435 imcore_flux(ap,parmall,nbit,petr_rad,petr_flux,NRADS,apertures,cflux);
439 sigsq = powf(ap->sigma,2.0);
440 radeg = 180.0/CPL_MATH_PI;
441 for (k = 0; k < nbit; k++) {
446 sxy = MAX(1.0e-4,MIN(sxy,sqrtf(sxx*syy)));
448 sxy = MIN(-1.0e-4,MAX(sxy,-sqrtf(sxx*syy)));
449 srr = MAX(0.5,sxx+syy);
450 ecc = sqrtf((syy-sxx)*(syy-sxx)+4.0*sxy*sxy)/srr;
451 temp = MAX((1.0-ecc)/(1.0+ecc),0.0);
452 ell = 1.0 - sqrtf(temp);
453 ell = MIN(0.99,MAX(0.0,ell));
454 xx = 0.5*(1.0+ecc)*srr-sxx;
458 theta = 90.0 - radeg*atanf(sxy/xx);
459 theta_ra = theta/radeg;
460 cc = (1.0 + ecc)*pow(cos(theta_ra),2.0) + (1.0 - ecc)*pow(sin(theta_ra),2.0);
461 dd = (1.0 + ecc)*pow(sin(theta_ra),2.0) + (1.0 - ecc)*pow(cos(theta_ra),2.0);
465 nrows = cpl_table_get_nrow(tab);
467 if (*nobjects > nrows)
468 (void)cpl_table_set_size(tab,nrows+INITROWS);
470 iso_flux = parmall[k][0];
471 apflux1 = cflux[k*NRADS + 0];
472 apflux2 = cflux[k*NRADS + 1];
473 apflux3 = cflux[k*NRADS + 2];
474 apflux4 = cflux[k*NRADS + 3];
475 apflux5 = cflux[k*NRADS + 4];
476 apflux6 = cflux[k*NRADS + 5];
477 apflux7 = cflux[k*NRADS + 6];
478 apflux8 = cflux[k*NRADS + 7];
479 apflux9 = cflux[k*NRADS + 8];
480 apflux10 = cflux[k*NRADS + 9];
481 apflux11 = cflux[k*NRADS + 10];
482 apflux12 = cflux[k*NRADS + 11];
483 apflux13 = cflux[k*NRADS + 12];
484 peak = parmall[k][7];
486 xxe = sqrtf((2.0*sigsq/(CPL_MATH_PI*peak*peak)) + cc/(2.0*CPL_MATH_PI*gain*peak) +
489 yye = sqrtf((2.0*sigsq/(CPL_MATH_PI*peak*peak)) + dd/(2.0*CPL_MATH_PI*gain*peak) +
492 areal1 = parmall[k][8];
493 areal2 = parmall[k][9];
494 areal3 = parmall[k][10];
495 areal4 = parmall[k][11];
496 areal5 = parmall[k][12];
497 areal6 = parmall[k][13];
498 areal7 = parmall[k][14];
499 if (nbit > 1 && k == 0)
502 areal8 = parmall[k][15];
504 peake = sqrtf(peak/gain + sigsq + skyrms*skyrms);
505 kron_fluxe = sqrt(kron_flux[k]/gain +
506 (sigsq + skyrms*skyrms)*CPL_MATH_PI*powf(kron_rad[k],2.0));
507 half_fluxe = sqrt(MAX(half_flux[k],0.0)/gain +
508 (sigsq + skyrms*skyrms)*CPL_MATH_PI*powf(half_rad[k],2.0));
509 petr_fluxe = sqrt(petr_flux[k]/gain +
510 (sigsq + skyrms*skyrms)*CPL_MATH_PI*powf(petr_rad[k],2.0));
511 apflux1e = sqrt(MAX(0.0,apflux1/gain) + skyvar[0]*(sigsq + skyrms*skyrms));
512 apflux2e = sqrt(MAX(0.0,apflux2/gain) + skyvar[1]*(sigsq + skyrms*skyrms));
513 apflux3e = sqrt(MAX(0.0,apflux3/gain) + skyvar[2]*(sigsq + skyrms*skyrms));
514 apflux4e = sqrt(MAX(0.0,apflux4/gain) + skyvar[3]*(sigsq + skyrms*skyrms));
515 apflux5e = sqrt(MAX(0.0,apflux5/gain) + skyvar[4]*(sigsq + skyrms*skyrms));
516 apflux6e = sqrt(MAX(0.0,apflux6/gain) + skyvar[5]*(sigsq + skyrms*skyrms));
517 apflux7e = sqrt(MAX(0.0,apflux7/gain) + skyvar[6]*(sigsq + skyrms*skyrms));
518 apflux8e = sqrt(MAX(0.0,apflux8/gain) + skyvar[7]*(sigsq + skyrms*skyrms));
519 apflux9e = sqrt(MAX(0.0,apflux9/gain) + skyvar[8]*(sigsq + skyrms*skyrms));
520 apflux10e = sqrt(MAX(0.0,apflux10/gain) + skyvar[9]*(sigsq + skyrms*skyrms));
521 apflux11e = sqrt(MAX(0.0,apflux11/gain) + skyvar[10]*(sigsq + skyrms*skyrms));
522 apflux12e = sqrt(MAX(0.0,apflux12/gain) + skyvar[11]*(sigsq + skyrms*skyrms));
523 apflux13e = sqrt(MAX(0.0,apflux13/gain) + skyvar[12]*(sigsq + skyrms*skyrms));
528 cpl_table_set_int(tab,ttype[COL_NUMBER-1],nr,*nobjects);
529 cpl_table_set_float(tab,ttype[COL_FLUXISO-1],nr,iso_flux);
530 cpl_table_set_float(tab,ttype[COL_X-1],nr,xx);
531 cpl_table_set_float(tab,ttype[COL_XERR-1],nr,xxe);
532 cpl_table_set_float(tab,ttype[COL_Y-1],nr,yy);
533 cpl_table_set_float(tab,ttype[COL_YERR-1],nr,yye);
534 cpl_table_set_float(tab,ttype[COL_SIGMA-1],nr,sigma);
535 cpl_table_set_float(tab,ttype[COL_ELLIPT-1],nr,ell);
536 cpl_table_set_float(tab,ttype[COL_PA-1],nr,theta);
537 cpl_table_set_float(tab,ttype[COL_AREAL1-1],nr,areal1);
538 cpl_table_set_float(tab,ttype[COL_AREAL2-1],nr,areal2);
539 cpl_table_set_float(tab,ttype[COL_AREAL3-1],nr,areal3);
540 cpl_table_set_float(tab,ttype[COL_AREAL4-1],nr,areal4);
541 cpl_table_set_float(tab,ttype[COL_AREAL5-1],nr,areal5);
542 cpl_table_set_float(tab,ttype[COL_AREAL6-1],nr,areal6);
543 cpl_table_set_float(tab,ttype[COL_AREAL7-1],nr,areal7);
544 cpl_table_set_float(tab,ttype[COL_AREAL8-1],nr,areal8);
545 cpl_table_set_float(tab,ttype[COL_PEAKHEIGHT-1],nr,peak);
546 cpl_table_set_float(tab,ttype[COL_PKHTERR-1],nr,peake);
547 cpl_table_set_float(tab,ttype[COL_APFLUX1-1],nr,apflux1);
548 cpl_table_set_float(tab,ttype[COL_APFLUX1ERR-1],nr,apflux1e);
549 cpl_table_set_float(tab,ttype[COL_APFLUX2-1],nr,apflux2);
550 cpl_table_set_float(tab,ttype[COL_APFLUX2ERR-1],nr,apflux2e);
551 cpl_table_set_float(tab,ttype[COL_APFLUX3-1],nr,apflux3);
552 cpl_table_set_float(tab,ttype[COL_APFLUX3ERR-1],nr,apflux3e);
553 cpl_table_set_float(tab,ttype[COL_APFLUX4-1],nr,apflux4);
554 cpl_table_set_float(tab,ttype[COL_APFLUX4ERR-1],nr,apflux4e);
555 cpl_table_set_float(tab,ttype[COL_APFLUX5-1],nr,apflux5);
556 cpl_table_set_float(tab,ttype[COL_APFLUX5ERR-1],nr,apflux5e);
557 cpl_table_set_float(tab,ttype[COL_APFLUX6-1],nr,apflux6);
558 cpl_table_set_float(tab,ttype[COL_APFLUX6ERR-1],nr,apflux6e);
559 cpl_table_set_float(tab,ttype[COL_APFLUX7-1],nr,apflux7);
560 cpl_table_set_float(tab,ttype[COL_APFLUX7ERR-1],nr,apflux7e);
561 cpl_table_set_float(tab,ttype[COL_APFLUX8-1],nr,apflux8);
562 cpl_table_set_float(tab,ttype[COL_APFLUX8ERR-1],nr,apflux8e);
563 cpl_table_set_float(tab,ttype[COL_APFLUX9-1],nr,apflux9);
564 cpl_table_set_float(tab,ttype[COL_APFLUX9ERR-1],nr,apflux9e);
565 cpl_table_set_float(tab,ttype[COL_APFLUX10-1],nr,apflux10);
566 cpl_table_set_float(tab,ttype[COL_APFLUX10ERR-1],nr,apflux10e);
567 cpl_table_set_float(tab,ttype[COL_APFLUX11-1],nr,apflux11);
568 cpl_table_set_float(tab,ttype[COL_APFLUX11ERR-1],nr,apflux11e);
569 cpl_table_set_float(tab,ttype[COL_APFLUX12-1],nr,apflux12);
570 cpl_table_set_float(tab,ttype[COL_APFLUX12ERR-1],nr,apflux12e);
571 cpl_table_set_float(tab,ttype[COL_APFLUX13-1],nr,apflux13);
572 cpl_table_set_float(tab,ttype[COL_APFLUX13ERR-1],nr,apflux13e);
573 cpl_table_set_float(tab,ttype[COL_PETRAD-1],nr,0.5*petr_rad[k]);
574 cpl_table_set_float(tab,ttype[COL_KRONRAD-1],nr,0.5*kron_rad[k]);
575 cpl_table_set_float(tab,ttype[COL_HALFRAD-1],nr,half_rad[k]);
576 cpl_table_set_float(tab,ttype[COL_PETFLUX-1],nr,petr_flux[k]);
577 cpl_table_set_float(tab,ttype[COL_PETFLUXERR-1],nr,petr_fluxe);
578 cpl_table_set_float(tab,ttype[COL_KRONFLUX-1],nr,kron_flux[k]);
579 cpl_table_set_float(tab,ttype[COL_KRONFLUXERR-1],nr,kron_fluxe);
580 cpl_table_set_float(tab,ttype[COL_HALFFLUX-1],nr,half_flux[k]);
581 cpl_table_set_float(tab,ttype[COL_HALFFLUXERR-1],nr,half_fluxe);
582 cpl_table_set_float(tab,ttype[COL_ERRFLAG-1],nr,badpix[k]);
583 cpl_table_set_float(tab,ttype[COL_SKYLEVEL-1],nr,skylev);
584 cpl_table_set_float(tab,ttype[COL_SKYSIGMA-1],nr,skyrms);
585 cpl_table_set_float(tab,ttype[COL_AVCONF-1],nr,avconf[k]);
589 cpl_table_set_float(tab,ttype[COL_RA-1],nr,zero);
590 cpl_table_set_float(tab,ttype[COL_DEC-1],nr,zero);
591 cpl_table_set_float(tab,ttype[COL_CLASS-1],nr,100.0);
592 cpl_table_set_float(tab,ttype[COL_STAT-1],nr,zero);