Changeset 39670
- Timestamp:
- Sep 4, 2016, 10:38:02 AM (10 years ago)
- Location:
- trunk/Ohana/src/libdvo
- Files:
-
- 3 edited
-
include/dvo.h (modified) (1 diff)
-
src/dbExtractMeasures.c (modified) (1 diff)
-
src/dvo_photcode_ops.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/libdvo/include/dvo.h
r39637 r39670 921 921 float PhotFluxCatErr (Measure *measure, dvoMagClassType class); 922 922 float PhotFluxAveErr (PhotCode *code, Average *average, SecFilt *secfilt, dvoMagClassType class, dvoMagSourceType source); 923 float PhotFluxSysErr (Measure *measure, Average *average, SecFilt *secfilt, dvoMagClassType class); 924 float PhotFluxRelErr (Measure *measure, Average *average, SecFilt *secfilt, dvoMagClassType class); 923 925 924 926 float PhotXm (PhotCode *code, Average *average, SecFilt *secfilt); -
trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
r39633 r39670 228 228 break; 229 229 case MAG_LEVEL_SYS: 230 value.Flt = PhotFluxSysErr (measure, average, secfilt, field->magClass); 231 break; 230 232 case MAG_LEVEL_REL: 233 value.Flt = PhotFluxRelErr (measure, average, secfilt, field->magClass); 234 break; 231 235 case MAG_LEVEL_CAL: 232 // value.Flt = PhotFluxErr (measure, field->magClass);236 // XXX not defined 233 237 break; 234 238 case MAG_LEVEL_AVE: 239 value.Flt = PhotFluxAveErr (equiv, average, secfilt, field->magClass, field->magSource); 240 break; 235 241 case MAG_LEVEL_REF: 236 // value.Flt = PhotFluxAveErr (equiv, average, secfilt, field->magClass, field->magSource);242 // XXX not defined 237 243 break; 238 244 case MAG_LEVEL_NONE: -
trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c
r39633 r39670 1507 1507 } 1508 1508 return (dFcat); 1509 } 1510 1511 float PhotFluxSysErr (Measure *measure, Average *average, SecFilt *secfilt, dvoMagClassType class) { 1512 1513 int Np = photcodes[0].hashcode[measure[0].photcode]; 1514 if (Np == -1) return (NAN); 1515 PhotCode *code = &photcodes[0].code[Np]; 1516 1517 // measure.M has the static ZERO_POINT (25.0) applied, but not measure.Flux 1518 float Mcal = code[0].K*(measure[0].airmass - 1.000) + SCALE*code[0].C; 1519 float Moff = Mcal - ZERO_POINT + 8.9; 1520 float Foff = 3630.8 * MagToFlux(Mcal); 1521 1522 // use dFlux if we can, but use dMag if we must: 1523 // dFlux = Flux * dMag 1524 1525 float dFcat = NAN; 1526 switch (class) { 1527 case MAG_CLASS_PSF: 1528 if (isnan (measure[0].dFluxPSF)) { 1529 float Finst = MagToFlux(measure[0].M + Moff); 1530 dFcat = measure[0].dM * Finst; 1531 } else { 1532 dFcat = measure[0].dFluxPSF * Foff; 1533 } 1534 break; 1535 case MAG_CLASS_KRON: 1536 if (isnan (measure[0].dFluxKron)) { 1537 float Finst = MagToFlux(measure[0].Mkron + Moff); 1538 dFcat = measure[0].dMkron * Finst; 1539 } else { 1540 dFcat = measure[0].dFluxKron * Foff; 1541 } 1542 break; 1543 case MAG_CLASS_APER: 1544 if (isnan (measure[0].dFluxAp)) { 1545 float Finst = MagToFlux(measure[0].Map + Moff); 1546 dFcat = measure[0].dMap * Finst; 1547 } else { 1548 dFcat = measure[0].dFluxAp * Foff; 1549 } 1550 break; 1551 default: 1552 break; 1553 } 1554 1555 /* color correction */ 1556 float mc = PhotColorForCode (average, secfilt, NULL, code); 1557 if (isnan(mc)) return (dFcat); 1558 mc -= SCALE*code[0].dX; 1559 1560 double Mc = mc; 1561 float Mcol = 0; 1562 int i = 0; 1563 for (i = 0; i < code[0].Nc; i++) { 1564 Mcol += code[0].X[i]*Mc; 1565 Mc *= mc; 1566 } 1567 float Fcol = MagToFlux (Mcol); 1568 1569 float dFsys = dFcat * Fcol; 1570 1571 return (dFsys); 1572 } 1573 1574 float PhotFluxRelErr (Measure *measure, Average *average, SecFilt *secfilt, dvoMagClassType class) { 1575 1576 int Np = photcodes[0].hashcode[measure[0].photcode]; 1577 if (Np == -1) return (NAN); 1578 PhotCode *code = &photcodes[0].code[Np]; 1579 1580 // measure.M has the static ZERO_POINT (25.0) applied, but not measure.Flux 1581 float Mflat = isfinite(measure[0].Mflat) ? measure[0].Mflat : 0.0; 1582 float Mcal = code[0].K*(measure[0].airmass - 1.000) + SCALE*code[0].C - measure[0].Mcal - Mflat; 1583 float Moff = Mcal - ZERO_POINT + 8.9; 1584 float Foff = 3630.8 * MagToFlux(Mcal); 1585 1586 // use dFlux if we can, but use dMag if we must: 1587 // dFlux = Flux * dMag 1588 1589 float dFcat = NAN; 1590 switch (class) { 1591 case MAG_CLASS_PSF: 1592 if (isnan (measure[0].dFluxPSF)) { 1593 float Finst = MagToFlux(measure[0].M + Moff); 1594 dFcat = measure[0].dM * Finst; 1595 } else { 1596 dFcat = measure[0].dFluxPSF * Foff; 1597 } 1598 break; 1599 case MAG_CLASS_KRON: 1600 if (isnan (measure[0].dFluxKron)) { 1601 float Finst = MagToFlux(measure[0].Mkron + Moff); 1602 dFcat = measure[0].dMkron * Finst; 1603 } else { 1604 dFcat = measure[0].dFluxKron * Foff; 1605 } 1606 break; 1607 case MAG_CLASS_APER: 1608 if (isnan (measure[0].dFluxAp)) { 1609 float Finst = MagToFlux(measure[0].Map + Moff); 1610 dFcat = measure[0].dMap * Finst; 1611 } else { 1612 dFcat = measure[0].dFluxAp * Foff; 1613 } 1614 break; 1615 default: 1616 break; 1617 } 1618 1619 /* color correction */ 1620 float mc = PhotColorForCode (average, secfilt, NULL, code); 1621 if (isnan(mc)) return (dFcat); 1622 mc -= SCALE*code[0].dX; 1623 1624 double Mc = mc; 1625 float Mcol = 0; 1626 int i = 0; 1627 for (i = 0; i < code[0].Nc; i++) { 1628 Mcol += code[0].X[i]*Mc; 1629 Mc *= mc; 1630 } 1631 float Fcol = MagToFlux (Mcol); 1632 1633 float dFrel = dFcat * Fcol; 1634 1635 return (dFrel); 1509 1636 } 1510 1637
Note:
See TracChangeset
for help on using the changeset viewer.
