IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 38462


Ignore:
Timestamp:
Jun 12, 2015, 10:26:20 PM (11 years ago)
Author:
eugene
Message:

merge changes from EAM branch ipp-20150419

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

Legend:

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

    r38441 r38462  
    7272} DVO_INT_NAN;
    7373
     74// init all data, or just catalog data
     75typedef enum {
     76  SECFILT_RESET_CHIP  = 0x01,
     77  SECFILT_RESET_WARP  = 0x02,
     78  SECFILT_RESET_STACK = 0x04,
     79  SECFILT_RESET_ALL   = 0x07,
     80} SecFiltInitMode;
     81 
    7482// max path length
    7583# define DVO_MAX_PATH 1024
     
    126134  ID_MEAS_ICRF_QSO       = 0x00040000,  // this measurement is an ICRF reference position
    127135  ID_MEAS_IMAGE_EPOCH    = 0x00080000,  // this measurement is registered to the image epoch (not tied to ref catalog epoch)
     136  ID_MEAS_PHOTOM_PSF     = 0x00100000,  // this measurement is used for the mean psf mag
     137  ID_MEAS_PHOTOM_APER    = 0x00200000,  // this measurement is used for the mean ap mag
     138  ID_MEAS_PHOTOM_KRON    = 0x00400000,  // this measurement is used for the mean kron mag
    128139} DVOMeasureFlags;
    129140
     
    188199  ID_SECF_HAS_PS1       = 0x00000010, // PS1 photometry used in average measurement
    189200  ID_SECF_HAS_STACK     = 0x00000020, // PS1 stack photometry exists
    190   ID_PHOTOM_PASS_0      = 0x00000100, // average magnitude calculated in 0th pass
    191   ID_PHOTOM_PASS_1      = 0x00000200, // average magnitude calculated in 1th pass
    192   ID_PHOTOM_PASS_2      = 0x00000400, // average magnitude calculated in 2th pass
    193   ID_PHOTOM_PASS_3      = 0x00000800, // average magnitude calculated in 3th pass
    194   ID_PHOTOM_PASS_4      = 0x00001000, // average magnitude calculated in 4th pass
    195   ID_PSPS_OBJ_EXT       = 0x00002000, // In PSPS ID_SECF_OBJ_EXT is moved here so it fits within 16 bits
     201  ID_SECF_HAS_TYCHO     = 0x00000040, // Tycho photometry used for synth mags
     202  ID_SECF_FIX_SYNTH     = 0x00000080, // synth mags repaired with zpt map
     203  ID_SECF_RANK_0        = 0x00000100, // average magnitude uses rank 0 values
     204  ID_SECF_RANK_1        = 0x00000200, // average magnitude uses rank 1 values
     205  ID_SECF_RANK_2        = 0x00000400, // average magnitude uses rank 2 values
     206  ID_SECF_RANK_3        = 0x00000800, // average magnitude uses rank 3 values
     207  ID_SECF_RANK_4        = 0x00001000, // average magnitude uses rank 4 values
     208  ID_SECF_OBJ_EXT_PSPS  = 0x00002000, // In PSPS ID_SECF_OBJ_EXT is moved here so it fits within 16 bits
    196209  ID_SECF_STACK_PRIMARY = 0x00004000, // PS1 stack photometry comes from primary skycell
    197210  ID_SECF_OBJ_EXT       = 0x01000000, // extended in this band
     211
     212  ID_SECF_CHIP_FLAGS    = 0x01003f1f, // all chip-related bits (used to reset the correct bits only)
     213  ID_SECF_STACK_FLAGS   = 0x00004020, // all stack-related bits (
    198214} DVOSecfiltFlags;
    199215
     
    800816  off_t *found_t;
    801817  off_t *foundWarp_t;
     818
     819  char *measureRank;
    802820//  off_t *image_t;
    803821//  off_t *mosaic_t;
     
    11231141void dvo_average_init (Average *average);
    11241142void dvo_averageT_init (AverageTiny *average);
    1125 void dvo_secfilt_init (SecFilt *secfilt);
     1143void dvo_secfilt_init (SecFilt *secfilt, SecFiltInitMode mode);
    11261144void dvo_measure_init (Measure *measure);
    11271145void dvo_measureT_init (MeasureTiny *measure);
  • trunk/Ohana/src/libdvo/include/libdvo_astro.h

    r37807 r38462  
    2626  PROJ_GLS, // pseudocyl
    2727  PROJ_PAR, // pseudocyl
     28  PROJ_ZPN, // zenithal
    2829} OhanaProjection;
    2930
  • trunk/Ohana/src/libdvo/src/coordops.c

    r37807 r38462  
    11# include <dvo.h>
     2# define UKIRT_ONLY 1
    23
    34/* note that Coords.ctype carries the DEC (ctype2) value */
     
    8182
    8283  /** extra polynomial terms **/
    83   if (coords[0].Npolyterms > 1) {
     84  if ((coords[0].Npolyterms > 1) && (proj != PROJ_ZPN)) {
    8485    X2 = X*X;
    8586    Y2 = Y*Y;
     
    171172        stht = cos (RAD_DEG * R);
    172173        break;
     174
     175      case PROJ_ZPN:
     176        // R = 90 - theta (degrees)
     177        // this is wrong because we are ignoring the distortion
     178        // XXX For now, just solve for terms up to n = 3
     179
     180        // Ro = (pi/180)(90 - theta)
     181        // R = (180/pi)sum (P_i R^i)
     182
     183        if (UKIRT_ONLY) {
     184          double Ro = RAD_DEG * R;
     185          double P1 = coords[0].polyterms[0][1];
     186          double P3 = coords[0].polyterms[0][3];
     187
     188          // find the roots of f(gamma) = P1 gamma + P3 gamma^3 - Ro
     189          // starting guess for gamma is Ro / P1
     190          double gamma = Ro / P1;
     191
     192          int i;
     193          for (i = 0; i < 5; i++) {
     194            double F = P1*gamma + P3*gamma*gamma*gamma - Ro;
     195            double dFdgamma = P1 + 3.0*P3*gamma*gamma;
     196
     197            double gamma_new = gamma - F / dFdgamma;
     198            gamma = gamma_new;
     199          }
     200         
     201          double theta = 90.0 - gamma * DEG_RAD ;
     202          ctht = cos (RAD_DEG * theta);
     203          stht = sin (RAD_DEG * theta);
     204          break;
     205        }
     206
    173207      case PROJ_ZEA:
    174208      case PROJ_ZPL:
     
    238272int RD_to_LM (double *L, double *M, double ra, double dec, Coords *coords) {
    239273
     274  int i;
    240275  double phi, theta;
    241276  double sphi, cphi, stht, ctht;
     
    303338        *M = -DEG_RAD * cphi;
    304339        return (stht > 0);
     340
    305341      case PROJ_ARC:
    306342        // R = 90 - theta
     
    311347        *M = (ctht == 0.0) ? 0.0 : -Rc * cphi / ctht ;
    312348        return (TRUE);
     349
     350      case PROJ_ZPN:
     351        // Ro = (pi/180)(90 - theta)
     352        // R = (180/pi)sum (P_i R^i)
     353        ctht = hypot(sphi, cphi);
     354        theta = atan2 (stht, ctht);
     355
     356        double Rc;
     357        if (UKIRT_ONLY) {
     358          double P1 = coords[0].polyterms[0][1];
     359          double P3 = coords[0].polyterms[0][3];
     360          double gamma = RAD_DEG * (90 - DEG_RAD * theta);
     361          Rc = P1*gamma + P3*gamma*gamma*gamma;
     362        } else {
     363          double Ro = RAD_DEG * (90 - DEG_RAD * theta);
     364
     365          // i = 0 .. Npolyterms - 1 (1 <= Npolyterms <= 21)
     366          i = coords[0].Npolyterms - 1;
     367          Rc = 0.0;
     368          while (i > 0) {
     369            if (i < 7) {
     370              Rc = (Rc + coords[0].polyterms[0][i])*Ro;
     371            } else {
     372              Rc = (Rc + coords[0].polyterms[1][i-7])*Ro;
     373            }
     374            i --;
     375          }
     376          Rc += coords[0].polyterms[0][i];
     377        }
     378        Rc = DEG_RAD * Rc;
     379
     380        *L = (ctht == 0.0) ? 0.0 : +Rc * sphi / ctht ;
     381        *M = (ctht == 0.0) ? 0.0 : -Rc * cphi / ctht ;
     382        return (TRUE);
     383
    313384      case PROJ_ZEA:
    314385      case PROJ_ZPL:
     
    386457
    387458  /** extra polynomial terms **/
    388   if (coords[0].Npolyterms > 1) {
     459  // polyterm values are only valid for some projections.  for PROJ_ZPN, they are applied to R, not X,Y
     460  if ((coords[0].Npolyterms > 1) && (proj != PROJ_ZPN)) {
    389461    for (i = 0; i < 10; i++) {
    390462      // find derivatives at Xo, Yo
     
    531603int GetCoords (Coords *coords, Header *header) {
    532604 
    533   int status, status1, status2, itmp, Polynomial, Polyterm;
     605  int i, status, status1, status2, itmp, Polynomial, Polyterm;
    534606  double Lambda, rotate, rotate1, rotate2, scale;
    535607  double equinox;
     
    663735      coords[0].pc2_1 /= scale;
    664736      coords[0].pc2_2 /= scale;
     737
     738      if (!strcmp (&coords[0].ctype[4], "-ZPN")) {
     739        int found;
     740        for (i = 0; i < 14; i++) {
     741          char name[64];
     742          sprintf (name, "PV2_%d", i);
     743          if (i < 7) {
     744            found = gfits_scan (header, name, "%f", 1, &coords[0].polyterms[0][i]);
     745          } else {
     746            found = gfits_scan (header, name, "%f", 1, &coords[0].polyterms[1][i-7]);
     747          }
     748          if ((i == 0) && !found) {
     749            coords[0].polyterms[0][0] = 0.0;
     750            continue;
     751          }
     752          if ((i == 1) && !found) {
     753            coords[0].polyterms[0][1] = 1.0;
     754            continue;
     755          }
     756          if (!found) {
     757            coords[0].Npolyterms = i;
     758            break;
     759          }
     760        }
     761      }
    665762      break;
    666763
     
    895992  if (!strcmp(&ctype[4], "-ZEA")) return PROJ_ZEA;
    896993  if (!strcmp(&ctype[4], "-ZPL")) return PROJ_ZPL;
     994  if (!strcmp(&ctype[4], "-ZPN")) return PROJ_ZPN;
    897995  if (!strcmp(&ctype[4], "-ARC")) return PROJ_ARC;
    898996  if (!strcmp(&ctype[4], "-STG")) return PROJ_STG;
     
    9161014    case PROJ_ZEA: strcpy(&ctype[4], "-ZEA"); return TRUE;
    9171015    case PROJ_ZPL: strcpy(&ctype[4], "-ZPL"); return TRUE;
     1016    case PROJ_ZPN: strcpy(&ctype[4], "-ZPN"); return TRUE;
    9181017    case PROJ_ARC: strcpy(&ctype[4], "-ARC"); return TRUE;
    9191018    case PROJ_STG: strcpy(&ctype[4], "-STG"); return TRUE;
     
    9371036    case PROJ_ZEA:
    9381037    case PROJ_ZPL:
     1038    case PROJ_ZPN:
    9391039    case PROJ_ARC:
    9401040    case PROJ_STG:
  • trunk/Ohana/src/libdvo/src/dvo_catalog.c

    r38441 r38462  
    215215}
    216216
    217 // init all data, or just catalog data
    218 void dvo_secfilt_init (SecFilt *secfilt) {
    219   secfilt->M           = NAN;
    220   secfilt->dM          = NAN;
    221   secfilt->Map         = NAN;
    222   secfilt->dMap        = NAN;
    223   secfilt->sMap        = NAN;
    224   secfilt->Mkron       = NAN;
    225   secfilt->dMkron      = NAN;
    226   secfilt->sMkron      = NAN;
    227 
    228   secfilt->psfQfMax     = NAN;
    229   secfilt->psfQfPerfMax = NAN;
    230 
    231   secfilt->Mstdev      = NAN;
    232   secfilt->Mmin        = NAN;
    233   secfilt->Mmax        = NAN;
    234   secfilt->Mchisq      = NAN;
    235 
    236   secfilt->Ncode       = 0;
    237   secfilt->Nused       = 0;
    238   secfilt->NusedKron   = 0;
    239   secfilt->NusedAp     = 0;
    240 
    241   secfilt->flags       = 0;
    242 
    243   secfilt->MpsfStk     = NAN;
    244   secfilt->FpsfStk     = NAN;
    245   secfilt->dFpsfStk    = NAN;
    246 
    247   secfilt->MkronStk    = NAN;
    248   secfilt->FkronStk    = NAN;
    249   secfilt->dFkronStk   = NAN;
    250 
    251   secfilt->MapStk      = NAN;
    252   secfilt->FapStk      = NAN;
    253   secfilt->dFapStk     = NAN;
    254 
    255   secfilt->Nstack      = 0;
    256   secfilt->NstackDet   = 0;
    257 
    258   secfilt->stackPrmryOff = -1;
    259   secfilt->stackBestOff  = -1;
    260 
    261   secfilt->MpsfWrp     = NAN;
    262   secfilt->FpsfWrp     = NAN;
    263   secfilt->dFpsfWrp    = NAN;
    264   secfilt->sFpsfWrp    = NAN;
    265 
    266   secfilt->MkronWrp    = NAN;
    267   secfilt->FkronWrp    = NAN;
    268   secfilt->dFkronWrp   = NAN;
    269   secfilt->sFkronWrp   = NAN;
    270 
    271   secfilt->MapWrp      = NAN;
    272   secfilt->FapWrp      = NAN;
    273   secfilt->dFapWrp     = NAN;
    274   secfilt->sFapWrp     = NAN;
    275 
    276   secfilt->NusedWrp     = 0;
    277   secfilt->NusedKronWrp = 0;
    278   secfilt->NusedApWrp   = 0;
    279 
    280   secfilt->Nwarp        = 0;
    281   secfilt->NwarpGood    = 0;
    282 
    283   secfilt->ubercalDist = 1000;
     217void dvo_secfilt_init (SecFilt *secfilt, SecFiltInitMode mode) {
     218
     219  myAssert (mode & SECFILT_RESET_ALL, "at least one of the CHIP,WARP,STACK bits must be set");
     220
     221  if ((mode & SECFILT_RESET_ALL) == SECFILT_RESET_ALL) {
     222    secfilt->flags       = 0;
     223  }
     224
     225  if (mode & SECFILT_RESET_CHIP) {
     226    secfilt->M           = NAN;
     227    secfilt->dM          = NAN;
     228    secfilt->Map         = NAN;
     229    secfilt->dMap        = NAN;
     230    secfilt->sMap        = NAN;
     231    secfilt->Mkron       = NAN;
     232    secfilt->dMkron      = NAN;
     233    secfilt->sMkron      = NAN;
     234
     235    secfilt->psfQfMax     = NAN;
     236    secfilt->psfQfPerfMax = NAN;
     237
     238    secfilt->Mstdev      = NAN;
     239    secfilt->Mmin        = NAN;
     240    secfilt->Mmax        = NAN;
     241    secfilt->Mchisq      = NAN;
     242
     243    secfilt->Ncode       = 0;
     244    secfilt->Nused       = 0;
     245    secfilt->NusedKron   = 0;
     246    secfilt->NusedAp     = 0;
     247    secfilt->ubercalDist = 1000;
     248    secfilt->flags      &= ~ID_SECF_CHIP_FLAGS;
     249  }
     250
     251  if (mode & SECFILT_RESET_STACK) {
     252    secfilt->MpsfStk     = NAN;
     253    secfilt->FpsfStk     = NAN;
     254    secfilt->dFpsfStk    = NAN;
     255
     256    secfilt->MkronStk    = NAN;
     257    secfilt->FkronStk    = NAN;
     258    secfilt->dFkronStk   = NAN;
     259
     260    secfilt->MapStk      = NAN;
     261    secfilt->FapStk      = NAN;
     262    secfilt->dFapStk     = NAN;
     263
     264    secfilt->Nstack      = 0;
     265    secfilt->NstackDet   = 0;
     266
     267    secfilt->stackPrmryOff = -1;
     268    secfilt->stackBestOff  = -1;
     269    secfilt->flags      &= ~ID_SECF_STACK_FLAGS;
     270  }
     271
     272  if (mode & SECFILT_RESET_WARP) {
     273    secfilt->MpsfWrp     = NAN;
     274    secfilt->FpsfWrp     = NAN;
     275    secfilt->dFpsfWrp    = NAN;
     276    secfilt->sFpsfWrp    = NAN;
     277
     278    secfilt->MkronWrp    = NAN;
     279    secfilt->FkronWrp    = NAN;
     280    secfilt->dFkronWrp   = NAN;
     281    secfilt->sFkronWrp   = NAN;
     282
     283    secfilt->MapWrp      = NAN;
     284    secfilt->FapWrp      = NAN;
     285    secfilt->dFapWrp     = NAN;
     286    secfilt->sFapWrp     = NAN;
     287
     288    secfilt->NusedWrp     = 0;
     289    secfilt->NusedKronWrp = 0;
     290    secfilt->NusedApWrp   = 0;
     291
     292    secfilt->Nwarp        = 0;
     293    secfilt->NwarpGood    = 0;
     294  }
    284295}
    285296
  • trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c

    r37807 r38462  
    178178
    179179  for (i = 0; i < Nvalues; i++) {
    180     dvo_secfilt_init (&out[i]);
     180    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    181181
    182182    out[i].M     = in[i].M;     
  • trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c

    r38441 r38462  
    173173
    174174  for (i = 0; i < Nvalues; i++) {
    175     dvo_secfilt_init (&out[i]);
     175    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    176176
    177177    out[i].M     = in[i].M;     
  • trunk/Ohana/src/libdvo/src/dvo_convert_PS1_REF.c

    r37807 r38462  
    110110
    111111  for (i = 0; i < Nvalues; i++) {
    112     dvo_secfilt_init (&out[i]);
     112    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    113113
    114114    out[i].M     = in[i].M;     
  • trunk/Ohana/src/libdvo/src/dvo_convert_PS1_SIM.c

    r37807 r38462  
    195195
    196196  for (i = 0; i < Nvalues; i++) {
    197     dvo_secfilt_init (&out[i]);
     197    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    198198
    199199    out[i].M             = in[i].M;     
  • trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c

    r38441 r38462  
    193193
    194194  for (i = 0; i < Nvalues; i++) {
    195     dvo_secfilt_init (&out[i]);
     195    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    196196
    197197    out[i].M     = in[i].M;     
  • trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c

    r38441 r38462  
    202202
    203203  for (i = 0; i < Nvalues; i++) {
    204     dvo_secfilt_init (&out[i]);
     204    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    205205
    206206    out[i].M     = in[i].M;     
  • trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c

    r38441 r38462  
    206206
    207207  for (i = 0; i < Nvalues; i++) {
    208     dvo_secfilt_init (&out[i]);
     208    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    209209
    210210    out[i].M           = in[i].M;     
  • trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c

    r38441 r38462  
    230230
    231231  for (i = 0; i < Nvalues; i++) {
    232     dvo_secfilt_init (&out[i]);
     232    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    233233
    234234    out[i].M             = in[i].M;     
  • trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V5.c

    r38441 r38462  
    299299
    300300  for (i = 0; i < Nvalues; i++) {
    301     dvo_secfilt_init (&out[i]);
     301    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    302302
    303303    out[i].M             = in[i].M;     
     
    14231423
    14241424  for (i = 0; i < Nvalues; i++) {
    1425     dvo_secfilt_init (&out[i]);
     1425    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    14261426
    14271427    out[i].M             = in[i].M;     
  • trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c

    r37807 r38462  
    103103  for (i = 0; i < Nvalues; i++) {
    104104    dvo_average_init (&out[i]);
    105     dvo_secfilt_init (&primary[0][i]);
     105    dvo_secfilt_init (&primary[0][i], SECFILT_RESET_ALL);
    106106
    107107    out[i].R             = in[i].R;     
     
    167167
    168168  for (i = 0; i < Nvalues; i++) {
    169     dvo_secfilt_init (&out[i]);
     169    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    170170
    171171    out[i].Mchisq = pow (10.0, 0.01*in[i].Xm);     
  • trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c

    r37807 r38462  
    8383  for (i = 0; i < Nvalues; i++) {
    8484    dvo_average_init (&out[i]);
    85     dvo_secfilt_init (&primary[0][i]);
     85    dvo_secfilt_init (&primary[0][i], SECFILT_RESET_ALL);
    8686
    8787    out[i].R             = in[i].R;     
     
    147147
    148148  for (i = 0; i < Nvalues; i++) {
    149     dvo_secfilt_init (&out[i]);
     149    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    150150
    151151    out[i].Mchisq= pow (10.0, 0.01*in[i].Xm);     
  • trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_0.c

    r37807 r38462  
    184184
    185185  for (i = 0; i < Nvalues; i++) {
    186     dvo_secfilt_init (&out[i]);
     186    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    187187
    188188    out[i].M     = in[i].M;     
  • trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_1.c

    r37807 r38462  
    184184
    185185  for (i = 0; i < Nvalues; i++) {
    186     dvo_secfilt_init (&out[i]);
     186    dvo_secfilt_init (&out[i], SECFILT_RESET_ALL);
    187187
    188188    out[i].M     = in[i].M;     
Note: See TracChangeset for help on using the changeset viewer.