- Timestamp:
- Dec 6, 2012, 6:32:19 PM (14 years ago)
- Location:
- branches/czw_branch/20120906/Ohana
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
src/relphot/src/StarOps.c (modified) (26 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/czw_branch/20120906/Ohana
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20120905/Ohana (added) merged: 34423-34428,34468,34490,34494-34495,34508,34517-34526,34529,34562-34563,34569,34572-34573,34575,34616-34619
- Property svn:mergeinfo changed
-
branches/czw_branch/20120906/Ohana/src/relphot/src/StarOps.c
r34267 r34772 11 11 int Nmos; 12 12 int Ngrid; 13 double *list; 14 double *dlist; 15 double *wlist; 16 double *aplist; 17 double *kronlist; 18 double *dkronlist; 13 14 // NOTE: the following arrays are (possibly) pre-allocated and carried down to each 15 // thread. The first 3 (list, dlist, wlist) are used in all relphot analyses; the 16 // others are only used on the final output steps. 17 18 double *list; // list of measure.mag values for a given star 19 double *dlist; // mag errors for a star 20 double *wlist; // weights to use for mean mags 21 double *aplist; // ap mags for a star 22 double *kronlist; // kron mags for a star 23 double *dkronlist; // kron mag errors 24 25 double *psfqf_list; // psfqf for all filters 26 double *psfqfperf_list; // psfqfperf for all filters 27 double *stargal_list; // stargal for all filters 19 28 } SetMrelInfo; 20 29 … … 168 177 ALLOCATE (results.dkronlist, double, Nmax); 169 178 179 ALLOCATE (results.psfqf_list, double, Nmax); 180 ALLOCATE (results.psfqfperf_list, double, Nmax); 181 ALLOCATE (results.stargal_list, double, Nmax); 182 170 183 for (i = 0; i < Ncatalog; i++) { 171 184 setMrel_catalog (catalog, i, pass, flatcorr, &results, Nsecfilt); // XXX add arguments as needed for options … … 178 191 free (results.kronlist); 179 192 free (results.dkronlist); 193 194 free (results.psfqf_list); 195 free (results.psfqfperf_list); 196 free (results.stargal_list); 180 197 return (TRUE); 181 198 } … … 315 332 liststats_setmode (&kronstats, STATMODE); 316 333 334 // StatType psfstats; 335 // liststats_setmode (&psfstats, "MEAN"); 336 317 337 double *list = results->list; 318 338 double *dlist = results->dlist; … … 322 342 double *dkronlist = results->dkronlist; 323 343 344 double *psfqf_list = results->psfqf_list; 345 double *psfqfperf_list = results->psfqfperf_list; 346 double *stargal_list = results->stargal_list; 347 324 348 SetMrelInfoInit (results, FALSE); // do not allocate list,dlist,wlist arrays 325 349 … … 327 351 328 352 char *primaryCell = NULL; 329 ALLOCATE (primaryCell, char, DVO_MAX_PATH); 353 if (isSetMrelFinal) { 354 ALLOCATE (primaryCell, char, DVO_MAX_PATH); 355 } 330 356 331 357 for (j = 0; j < catalog[Nc].Naverage; j++) { 332 // XXX accumulate all secfilt values in a single pass?333 334 358 // option for a test print 335 359 if (FALSE && (catalog[Nc].average[j].objID == 0x7146) && (catalog[Nc].average[j].catID == 0x49d8)) { … … 338 362 } 339 363 340 BoundaryTreePrimaryCell(primaryCell, catalog[Nc].average[j].R, catalog[Nc].average[j].D); 364 if (isSetMrelFinal) { 365 BoundaryTreePrimaryCell(primaryCell, catalog[Nc].average[j].R, catalog[Nc].average[j].D); 366 } 341 367 342 368 int GoodPS1 = FALSE; … … 346 372 int NextPS1 = 0; 347 373 int NpsfPS1 = 0; 374 375 int Nmeas = 0; // number of meas used for psfqf, psfqfperf, and stargal 376 377 int NstackGood = 0; 378 int NstackSuspect = 0; 379 380 int haveStackObject = FALSE; 348 381 349 382 int Ns; … … 365 398 int haveSynth = FALSE; 366 399 int haveStack = FALSE; 400 int havePS1 = FALSE; 367 401 368 402 // need to find the measurement closest to the center of its skycell, as well as the … … 370 404 371 405 float stackCenterOffsetMin = 1e9; 372 int stackCenterIDmin = -1;373 406 off_t stackCenterMeasureMin = -1; 374 407 375 408 float stackPrimaryOffsetMin = 1e9; 376 int stackPrimaryIDmin = -1;377 409 off_t stackPrimaryMeasureMin = -1; 378 410 … … 384 416 int minUbercalDist = 1000; 385 417 418 int isBad = FALSE; 419 int isSuspect = FALSE; 420 386 421 N = 0; 387 422 m = catalog[Nc].averageT[j].measureOffset; … … 393 428 if (code->equiv != thisCode) { continue; } 394 429 Ncode ++; 430 431 catalog[Nc].measure[m].dbFlags &= ~ID_MEAS_STACK_PRIMARY; 395 432 396 433 if (catalog[Nc].measureT[m].dbFlags & MEAS_BAD) SKIP_THIS_MEAS(Nbad); … … 414 451 if (isnan(Msys)) SKIP_THIS_MEAS(Nsys); 415 452 416 list[N] = Msys - Mcal - Mmos - Mgrid;417 418 453 int myUbercalDist = getUbercalDist(m,Nc); 419 454 minUbercalDist = MIN(minUbercalDist, myUbercalDist); 420 455 421 456 if (isSetMrelFinal) { 422 float Map = PhotAper (&catalog[Nc].measure[m]);423 aplist[N] = Map - Mcal - Mmos - Mgrid;424 425 float Mkron = PhotKron (&catalog[Nc].measure[m]);426 kronlist[N] = Mkron - Mcal - Mmos - Mgrid;427 dkronlist[N] = catalog[Nc].measure[m].dMkron;428 429 457 // special options for PS1 data 430 458 if ((catalog[Nc].measure[m].photcode >= 10000) && (catalog[Nc].measure[m].photcode <= 10500)) { 431 459 // count the extended detections 432 460 if (!isnan(catalog[Nc].measure[m].Map)) { 433 if (catalog[Nc].measure[m].M - catalog[Nc].measure[m].Map > 0.5) { 461 float dMagAp = catalog[Nc].measure[m].M - catalog[Nc].measure[m].Map; 462 float SigmaAp = hypot(0.1, 2.5*catalog[Nc].measure[m].dM); 463 // XXX this is still quite ad hoc, but at least it: 464 // (a) converges to 0.1 mag offset at the bright end 465 // (b) converges to 0.5 mag offset at the faint end (dM = 0.2) 466 if (dMagAp > SigmaAp) { 434 467 Next ++; 435 468 NextPS1 ++; … … 438 471 } 439 472 } 473 havePS1 = TRUE; 440 474 } 475 441 476 // gpc1 stack data 442 477 if ((catalog[Nc].measure[m].photcode >= 11000) && (catalog[Nc].measure[m].photcode <= 11400)) { 443 // if (pass < 2) continue;444 478 haveStack = TRUE; 479 haveStackObject = TRUE; 445 480 446 481 unsigned int stackImageID; … … 452 487 if (stackPrimaryOffset < stackPrimaryOffsetMin) { 453 488 stackPrimaryOffsetMin = stackPrimaryOffset; 454 stackPrimaryIDmin = stackImageID;489 // stackPrimaryIDmin = stackImageID; 455 490 stackPrimaryMeasureMin = m; 456 491 } … … 461 496 if (stackCenterOffset < stackCenterOffsetMin) { 462 497 stackCenterOffsetMin = stackCenterOffset; 463 stackCenterIDmin = stackImageID;498 // stackCenterIDmin = stackImageID; 464 499 stackCenterMeasureMin = m; 465 500 } 501 502 // data quality assessment 503 isBad |= (catalog[Nc].measure[m].photFlags & code->photomBadMask); 504 isBad |= (catalog[Nc].measure[m].psfQF < 0.85); 505 isBad |= isnan(catalog[Nc].measure[m].psfQF); 506 isBad |= catalog[Nc].measure[m].dM > 0.2; // S/N < 5.0 507 508 isSuspect |= (catalog[Nc].measure[m].photFlags & code->photomPoorMask); 509 isSuspect |= (catalog[Nc].measure[m].psfQFperf < 0.85); 510 511 // mean psfQF, psfQFperf, and stargal values are calculated per object (all filters, stacks and exposures) 512 psfqf_list[Nmeas] = catalog[Nc].measure[m].psfQF; 513 psfqfperf_list[Nmeas] = catalog[Nc].measure[m].psfQFperf; 514 stargal_list[Nmeas] = catalog[Nc].measure[m].extNsigma; 515 Nmeas++; 516 517 continue; // do not include stack measurements in the per-exposure statistics 466 518 } 467 519 … … 478 530 // detections without one of these bits should only be used in PASS_1 479 531 SKIP_THIS_MEAS(Nbad); 480 continue;481 532 } 482 533 } … … 512 563 if (pass < 4) { 513 564 SKIP_THIS_MEAS(Nbad); 514 continue;515 565 } 516 566 haveSynth = TRUE; 517 567 } 518 568 } 569 570 // Map (aplist) and Mkron (kronlist,dkronlist) are used to calculate mean mags per filter 571 float Map = PhotAper (&catalog[Nc].measure[m]); 572 aplist[N] = Map - Mcal - Mmos - Mgrid; 573 574 float Mkron = PhotKron (&catalog[Nc].measure[m]); 575 kronlist[N] = Mkron - Mcal - Mmos - Mgrid; 576 dkronlist[N] = catalog[Nc].measure[m].dMkron; 577 578 // mean psfQF, psfQFperf, and stargal values are calculated per object (all filters, stacks and exposures) 579 psfqf_list[Nmeas] = catalog[Nc].measure[m].psfQF; 580 psfqfperf_list[Nmeas] = catalog[Nc].measure[m].psfQFperf; 581 stargal_list[Nmeas] = catalog[Nc].measure[m].extNsigma; 582 Nmeas++; 519 583 } 520 584 … … 527 591 dlist[N] = MAX (hypot(catalog[Nc].measureT[m].dM, code->photomErrSys), MIN_ERROR); 528 592 wlist[N] = 1.0; 593 list[N] = Msys - Mcal - Mmos - Mgrid; 529 594 530 595 // up-weight the ubercal values (or convergence can take a long time...) … … 549 614 if (haveStack && (N > 1)) { 550 615 // fprintf (stderr, "multiple stack values for %10.6f %10.6f\n", catalog[Nc].averageT[j].R, catalog[Nc].averageT[j].D); 616 } 617 618 if (haveStack) { 619 if (!isSuspect && !isBad) { 620 NstackGood ++; 621 } 622 if (isSuspect && !isBad) { 623 NstackSuspect ++; 624 } 551 625 } 552 626 … … 604 678 if (haveStack) { 605 679 m = (stackPrimaryMeasureMin >= 0) ? stackPrimaryMeasureMin : stackCenterMeasureMin; 606 ID = (stackPrimaryMeasureMin >= 0) ? stackPrimaryIDmin : stackCenterIDmin; 680 681 // we are now populating stackDetectID not stack Image ID in secfilt 682 // ID = (stackPrimaryMeasureMin >= 0) ? stackPrimaryIDmin : stackCenterIDmin; 683 ID = catalog[Nc].measure[m].extID; // for the stack, this is the stackDetectID 607 684 608 685 // get the zero point for the selected image 609 float zp = Mcal + Mmos + Mgrid + PhotZeroPoint (&catalog[Nc].measure[m], &catalog[Nc].average[j], &catalog[Nc].secfilt[j*Nsecfilt]);686 float zp = PhotZeroPoint (&catalog[Nc].measure[m], &catalog[Nc].average[j], &catalog[Nc].secfilt[j*Nsecfilt]) - (Mcal + Mmos + Mgrid); 610 687 611 688 // flux_cgs : erg sec^1 cm^-2 Hz^-1 … … 647 724 catalog[Nc].secfilt[Nsecfilt*j+Nsec].dFluxKron = zpFactor * catalog[Nc].measure[m].dFluxKron; 648 725 649 catalog[Nc].secfilt[Nsecfilt*j+Nsec].stackID = ID; 726 catalog[Nc].secfilt[Nsecfilt*j+Nsec].stackDetectID = ID; 727 728 catalog[Nc].measure[m].dbFlags |= ID_MEAS_STACK_PHOT_SRC; 729 if (stackPrimaryMeasureMin >= 0) { 730 catalog[Nc].measure[m].dbFlags |= ID_MEAS_STACK_PRIMARY; 731 } 650 732 } 651 733 … … 658 740 case 0: 659 741 catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_PHOTOM_PASS_0; 660 GoodPS1 = TRUE;742 if (havePS1) GoodPS1 = TRUE; 661 743 break; 662 744 case 1: 663 745 catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_PHOTOM_PASS_1; 664 GoodPS1 = TRUE;746 if (havePS1) GoodPS1 = TRUE; 665 747 break; 666 748 case 2: 667 749 catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_PHOTOM_PASS_2; 668 GoodPS1 = TRUE;750 if (havePS1) GoodPS1 = TRUE; 669 751 break; 670 752 case 3: … … 678 760 catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_SECF_USE_SYNTH; 679 761 } 762 if (haveStack) { 763 catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_SECF_HAS_STACK; 764 } 765 if (havePS1) { 766 catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_SECF_HAS_PS1; 767 } 680 768 if (haveUbercal) { 681 769 catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_SECF_USE_UBERCAL; … … 685 773 686 774 if (isSetMrelFinal) { 687 DVOAverageFlags flagBits = ID_OBJ_EXT | ID_OBJ_EXT_ALT | ID_OBJ_GOOD | ID_OBJ_GOOD_ALT; 688 689 // we attempt to set a few flags here; reset those bits before trying: 690 catalog[Nc].average[j].flags &= ~flagBits; 775 if (pass == 0) { 776 DVOAverageFlags flagBits = ID_OBJ_EXT | ID_OBJ_EXT_ALT | ID_OBJ_GOOD | ID_OBJ_GOOD_ALT; 777 // we attempt to set a few flags here; reset those bits before trying: 778 catalog[Nc].average[j].flags &= ~flagBits; 779 } 691 780 692 781 if (NextPS1 && (NextPS1 > NpsfPS1)) { … … 701 790 if (Good2MASS) { 702 791 catalog[Nc].average[j].flags |= ID_OBJ_GOOD_ALT; 792 } 793 794 if (NstackGood >= 2) { 795 catalog[Nc].average[j].flags |= ID_OBJ_GOOD_STACK; 796 } else if (NstackGood + NstackSuspect >= 2) { 797 catalog[Nc].average[j].flags |= ID_OBJ_SUSPECT_STACK; 798 } else if (haveStackObject) { 799 catalog[Nc].average[j].flags |= ID_OBJ_BAD_STACK; 800 } 801 802 // use NAN values for catalog[Nc].average[j].psfQF as signal 803 if (!isfinite(catalog[Nc].average[j].psfQF)) { 804 // do something here 805 float psfQFmax = 0.0; 806 float psfQFperfmax = 0.0; 807 float stargalmax = 0.0; 808 int seq; 809 for (seq = 0; seq < Nmeas; seq++) { 810 if (isfinite(psfqf_list[seq])) { 811 psfQFmax = MAX (psfqf_list[seq], psfQFmax); 812 } 813 if (isfinite(psfqfperf_list[seq])) { 814 psfQFperfmax = MAX (psfqfperf_list[seq], psfQFperfmax); 815 } 816 if (isfinite(stargal_list[seq])) { 817 stargalmax = MAX (stargal_list[seq], stargalmax); 818 } 819 } 820 821 catalog[Nc].average[j].psfQF = psfQFmax; 822 catalog[Nc].average[j].psfQFperf = psfQFperfmax; 823 catalog[Nc].average[j].stargal = stargalmax; 703 824 } 704 825 }
Note:
See TracChangeset
for help on using the changeset viewer.
