IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 39670


Ignore:
Timestamp:
Sep 4, 2016, 10:38:02 AM (10 years ago)
Author:
eugene
Message:

add accessors for flux:sys:err and flux:rel:err

Location:
trunk/Ohana/src/libdvo
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/libdvo/include/dvo.h

    r39637 r39670  
    921921float PhotFluxCatErr (Measure *measure, dvoMagClassType class);
    922922float PhotFluxAveErr (PhotCode *code, Average *average, SecFilt *secfilt, dvoMagClassType class, dvoMagSourceType source);
     923float PhotFluxSysErr (Measure *measure, Average *average, SecFilt *secfilt, dvoMagClassType class);
     924float PhotFluxRelErr (Measure *measure, Average *average, SecFilt *secfilt, dvoMagClassType class);
    923925
    924926float PhotXm (PhotCode *code, Average *average, SecFilt *secfilt);
  • trunk/Ohana/src/libdvo/src/dbExtractMeasures.c

    r39633 r39670  
    228228              break;
    229229            case MAG_LEVEL_SYS:
     230              value.Flt = PhotFluxSysErr (measure, average, secfilt, field->magClass);
     231              break;
    230232            case MAG_LEVEL_REL:
     233              value.Flt = PhotFluxRelErr (measure, average, secfilt, field->magClass);
     234              break;
    231235            case MAG_LEVEL_CAL:
    232               // value.Flt = PhotFluxErr (measure, field->magClass); 
     236              // XXX not defined
    233237              break;
    234238            case MAG_LEVEL_AVE:
     239              value.Flt = PhotFluxAveErr (equiv, average, secfilt, field->magClass, field->magSource); 
     240              break;
    235241            case MAG_LEVEL_REF:
    236               // value.Flt = PhotFluxAveErr (equiv, average, secfilt, field->magClass, field->magSource); 
     242              // XXX not defined
    237243              break;
    238244            case MAG_LEVEL_NONE:
  • trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c

    r39633 r39670  
    15071507  }
    15081508  return (dFcat);
     1509}
     1510
     1511float 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
     1574float 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);
    15091636}
    15101637
Note: See TracChangeset for help on using the changeset viewer.