IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 15, 2009, 4:03:13 PM (17 years ago)
Author:
eugene
Message:

updates from trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20090715/psModules/src/astrom/pmAstrometryWCS.c

    r24052 r25407  
    289289    // test the CDELTi varient
    290290    if (pcKeys) {
     291        wcs->wcsCDkeys = 0;
    291292        wcs->cdelt1 = psMetadataLookupF64 (&status, header, "CDELT1");
    292293        wcs->cdelt2 = psMetadataLookupF64 (&status, header, "CDELT2");
     
    334335    // test the CDi_j varient
    335336    if (cdKeys) {
     337        wcs->wcsCDkeys = 1;
     338
    336339        wcs->trans->x->coeff[1][0] = psMetadataLookupF64 (&status, header, "CD1_1"); // == PC1_1
    337340        wcs->trans->x->coeff[0][1] = psMetadataLookupF64 (&status, header, "CD1_2"); // == PC1_2
     
    375378    // XXX make it optional to write out CDi_j terms, or other versions
    376379    // apply CDELT1,2 (degrees / pixel) to yield PCi,j terms of order unity
    377     double cdelt1 = wcs->cdelt1;
    378     double cdelt2 = wcs->cdelt2;
    379     psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT1", PS_META_REPLACE, "", cdelt1);
    380     psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT2", PS_META_REPLACE, "", cdelt2);
    381 
    382     // test the PC00i00j varient:
    383     psMetadataAddF64 (header, PS_LIST_TAIL, "PC001001", PS_META_REPLACE, "", wcs->trans->x->coeff[1][0] / cdelt1); // == PC1_1
    384     psMetadataAddF64 (header, PS_LIST_TAIL, "PC001002", PS_META_REPLACE, "", wcs->trans->x->coeff[0][1] / cdelt2); // == PC1_2
    385     psMetadataAddF64 (header, PS_LIST_TAIL, "PC002001", PS_META_REPLACE, "", wcs->trans->y->coeff[1][0] / cdelt1); // == PC2_1
    386     psMetadataAddF64 (header, PS_LIST_TAIL, "PC002002", PS_META_REPLACE, "", wcs->trans->y->coeff[0][1] / cdelt2); // == PC2_2
    387 
    388     // Elixir-style polynomial terms
    389     // XXX currently, Elixir/DVO cannot accept mixed orders
    390     // XXX need to respect the masks
    391     // XXX is wcs->cdelt1,2 always consistent?
    392     int fitOrder = wcs->trans->x->nX;
    393     if (fitOrder > 1) {
     380    if (!(wcs->wcsCDkeys)) {
     381
     382      double cdelt1 = wcs->cdelt1;
     383      double cdelt2 = wcs->cdelt2;
     384      psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT1", PS_META_REPLACE, "", cdelt1);
     385      psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT2", PS_META_REPLACE, "", cdelt2);
     386     
     387      // test the PC00i00j varient:
     388      psMetadataAddF64 (header, PS_LIST_TAIL, "PC001001", PS_META_REPLACE, "", wcs->trans->x->coeff[1][0] / cdelt1); // == PC1_1
     389      psMetadataAddF64 (header, PS_LIST_TAIL, "PC001002", PS_META_REPLACE, "", wcs->trans->x->coeff[0][1] / cdelt2); // == PC1_2
     390      psMetadataAddF64 (header, PS_LIST_TAIL, "PC002001", PS_META_REPLACE, "", wcs->trans->y->coeff[1][0] / cdelt1); // == PC2_1
     391      psMetadataAddF64 (header, PS_LIST_TAIL, "PC002002", PS_META_REPLACE, "", wcs->trans->y->coeff[0][1] / cdelt2); // == PC2_2
     392     
     393      // Elixir-style polynomial terms
     394      // XXX currently, Elixir/DVO cannot accept mixed orders
     395      // XXX need to respect the masks
     396      // XXX is wcs->cdelt1,2 always consistent?
     397      int fitOrder = wcs->trans->x->nX;
     398      if (fitOrder > 1) {
    394399        for (int i = 0; i <= fitOrder; i++) {
    395             for (int j = 0; j <= fitOrder; j++) {
    396                 if (i + j < 2)
    397                     continue;
    398                 if (i + j > fitOrder)
    399                     continue;
    400                 sprintf (name, "PCA1X%1dY%1d", i, j);
    401                 psMetadataAddF64 (header, PS_LIST_TAIL, name, PS_META_REPLACE, "", wcs->trans->x->coeff[i][j] / pow(cdelt1, i) / pow(cdelt2, j));
    402                 sprintf (name, "PCA2X%1dY%1d", i, j);
    403                 psMetadataAddF64 (header, PS_LIST_TAIL, name, PS_META_REPLACE, "", wcs->trans->y->coeff[i][j] / pow(cdelt1, i) / pow(cdelt2, j));
    404             }
     400          for (int j = 0; j <= fitOrder; j++) {
     401            if (i + j < 2)
     402              continue;
     403            if (i + j > fitOrder)
     404              continue;
     405            sprintf (name, "PCA1X%1dY%1d", i, j);
     406            psMetadataAddF64 (header, PS_LIST_TAIL, name, PS_META_REPLACE, "", wcs->trans->x->coeff[i][j] / pow(cdelt1, i) / pow(cdelt2, j));
     407            sprintf (name, "PCA2X%1dY%1d", i, j);
     408            psMetadataAddF64 (header, PS_LIST_TAIL, name, PS_META_REPLACE, "", wcs->trans->y->coeff[i][j] / pow(cdelt1, i) / pow(cdelt2, j));
     409          }
    405410        }
    406411        psMetadataAddS32 (header, PS_LIST_TAIL, "NPLYTERM", PS_META_REPLACE, "", fitOrder);
    407     }
    408 
    409     // remove any existing 'CDi_j style' wcs keywords
    410     if (psMetadataLookup(header, "CD1_1")) {
     412      }
     413     
     414      // remove any existing 'CDi_j style' wcs keywords
     415      if (psMetadataLookup(header, "CD1_1")) {
    411416        psMetadataRemoveKey(header, "CD1_1");
    412417        psMetadataRemoveKey(header, "CD1_2");
    413418        psMetadataRemoveKey(header, "CD2_1");
    414419        psMetadataRemoveKey(header, "CD2_2");
     420      }
     421    }
     422    if (wcs->wcsCDkeys) {
     423
     424      psMetadataAddF64 (header, PS_LIST_TAIL, "CD1_1", PS_META_REPLACE, "", wcs->trans->x->coeff[1][0]);
     425      psMetadataAddF64 (header, PS_LIST_TAIL, "CD1_2", PS_META_REPLACE, "", wcs->trans->x->coeff[0][1]);
     426      psMetadataAddF64 (header, PS_LIST_TAIL, "CD2_1", PS_META_REPLACE, "", wcs->trans->y->coeff[1][0]);
     427      psMetadataAddF64 (header, PS_LIST_TAIL, "CD2_2", PS_META_REPLACE, "", wcs->trans->y->coeff[0][1]);
     428
     429      if (psMetadataLookup(header, "PC001001")) {
     430        psMetadataRemoveKey(header, "PC001001");
     431        psMetadataRemoveKey(header, "PC001002");
     432        psMetadataRemoveKey(header, "PC002001");
     433        psMetadataRemoveKey(header, "PC002002");
     434      }
    415435    }
    416436
     
    535555        fpa->toSky->R -= 2.0*M_PI;
    536556
     557    fpa->wcsCDkeys = wcs->wcsCDkeys;
     558
    537559    psTrace ("psastro", 5, "toFPA: %f %f  (%f,%f),(%f,%f)\n",
    538560             chip->toFPA->x->coeff[0][0], chip->toFPA->y->coeff[0][0],
     
    682704    wcs->cdelt2 = hypot (wcs->trans->y->coeff[1][0], wcs->trans->y->coeff[0][1]);
    683705
     706    wcs->wcsCDkeys = fpa->wcsCDkeys;
    684707    psFree (toTPA);
    685708
     
    922945    wcs->trans = psPlaneTransformAlloc (nXorder, nYorder);
    923946    wcs->toSky = NULL;
     947    wcs->wcsCDkeys = 0;
    924948
    925949    memset (wcs->ctype1, 0, PM_ASTROM_WCS_TYPE_SIZE);
Note: See TracChangeset for help on using the changeset viewer.