IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 28386


Ignore:
Timestamp:
Jun 17, 2010, 8:27:02 AM (16 years ago)
Author:
Paul Price
Message:

Remove 'CDi_jX' WCS keywords

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/astrom/pmAstrometryWCS.c

    r27862 r28386  
    378378    // XXX make it optional to write out CDi_j terms, or other versions
    379379    // apply CDELT1,2 (degrees / pixel) to yield PCi,j terms of order unity
    380     if (!wcs->wcsCDkeys) { 
     380    if (!wcs->wcsCDkeys) {
    381381
    382382      double cdelt1 = wcs->cdelt1;
     
    384384      psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT1", PS_META_REPLACE, "", cdelt1);
    385385      psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT2", PS_META_REPLACE, "", cdelt2);
    386      
     386
    387387      // test the PC00i00j varient:
    388388      psMetadataAddF64 (header, PS_LIST_TAIL, "PC001001", PS_META_REPLACE, "", wcs->trans->x->coeff[1][0] / cdelt1); // == PC1_1
     
    390390      psMetadataAddF64 (header, PS_LIST_TAIL, "PC002001", PS_META_REPLACE, "", wcs->trans->y->coeff[1][0] / cdelt1); // == PC2_1
    391391      psMetadataAddF64 (header, PS_LIST_TAIL, "PC002002", PS_META_REPLACE, "", wcs->trans->y->coeff[0][1] / cdelt2); // == PC2_2
    392      
     392
    393393      // Elixir-style polynomial terms
    394394      // XXX currently, Elixir/DVO cannot accept mixed orders
     
    398398      if (fitOrder > 1) {
    399399        for (int i = 0; i <= fitOrder; i++) {
    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           }
     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          }
    410410        }
    411411        psMetadataAddS32 (header, PS_LIST_TAIL, "NPLYTERM", PS_META_REPLACE, "", fitOrder);
    412412      }
    413      
     413
    414414      // remove any existing 'CDi_j style' wcs keywords
    415415      if (psMetadataLookup(header, "CD1_1")) {
     
    419419        psMetadataRemoveKey(header, "CD2_2");
    420420      }
     421
     422      // Remove 'CDi_jX' WCS keywords
     423      psString cd11 = psStringCopy("CD1_1 ");
     424      psString cd12 = psStringCopy("CD1_2 ");
     425      psString cd21 = psStringCopy("CD2_1 ");
     426      psString cd22 = psStringCopy("CD2_2 ");
     427      for (char extra = 'A'; extra <= 'Z'; extra++) {
     428          cd11[strlen(cd11)-1] = extra;
     429          if (psMetadataLookup(header, cd11)) {
     430              cd12[strlen(cd12)-1] = extra;
     431              cd21[strlen(cd21)-1] = extra;
     432              cd22[strlen(cd22)-1] = extra;
     433              psMetadataRemoveKey(header, cd11);
     434              psMetadataRemoveKey(header, cd12);
     435              psMetadataRemoveKey(header, cd21);
     436              psMetadataRemoveKey(header, cd22);
     437          }
     438      }
     439      psFree(cd11);
     440      psFree(cd12);
     441      psFree(cd21);
     442      psFree(cd22);
     443
     444
    421445    } else {
    422446
     
    427451
    428452      if (psMetadataLookup(header, "PC001001")) {
    429         psMetadataRemoveKey(header, "PC001001");
    430         psMetadataRemoveKey(header, "PC001002");
    431         psMetadataRemoveKey(header, "PC002001");
    432         psMetadataRemoveKey(header, "PC002002");
     453        psMetadataRemoveKey(header, "PC001001");
     454        psMetadataRemoveKey(header, "PC001002");
     455        psMetadataRemoveKey(header, "PC002001");
     456        psMetadataRemoveKey(header, "PC002002");
    433457      }
    434458    }
     
    685709    }
    686710
    687     // generate transform with the original orientation (does this rotate about 'center'?) 
     711    // generate transform with the original orientation (does this rotate about 'center'?)
    688712    psPlaneTransform *tpa2 = psPlaneTransformRotate (NULL, tpa1, -1.0*angle);
    689713
     
    967991
    968992    // outFPA projection must be defined as the goal
    969    
     993
    970994    // the output transformations are:
    971995    // chip -> FPA : standard linear trans with needed rotation, etc
     
    9901014        for (int i =  0; i < nSamples; i++) {
    9911015
    992             psSphere srcSky;
    993             psPlane *srcChip = psPlaneAlloc();
    994             psPlane *dstTP = psPlaneAlloc();
     1016            psSphere srcSky;
     1017            psPlane *srcChip = psPlaneAlloc();
     1018            psPlane *dstTP = psPlaneAlloc();
    9951019
    9961020            srcChip->x = bounds->x0 + (i * deltaX / nSamples);
    9971021            srcChip->y = y;
    9981022
    999             psPlaneTransformApply (&srcFP, inChip->toFPA, srcChip);
    1000             psPlaneTransformApply (&srcTP, inFPA->toTPA, &srcFP);
    1001             psDeproject (&srcSky, &srcTP, inFPA->toSky);
    1002            
    1003             // fprintf (stderr, "%f %f | %f %f | %f %f | %f %f\n", srcChip->x, srcChip->y, srcFP.x, srcFP.y, srcTP.x, srcTP.y, srcSky.r*PS_DEG_RAD, srcSky.d*PS_DEG_RAD);
    1004 
    1005             psProject (dstTP, &srcSky, outFPA->toSky);
     1023            psPlaneTransformApply (&srcFP, inChip->toFPA, srcChip);
     1024            psPlaneTransformApply (&srcTP, inFPA->toTPA, &srcFP);
     1025            psDeproject (&srcSky, &srcTP, inFPA->toSky);
     1026
     1027            // fprintf (stderr, "%f %f | %f %f | %f %f | %f %f\n", srcChip->x, srcChip->y, srcFP.x, srcFP.y, srcTP.x, srcTP.y, srcSky.r*PS_DEG_RAD, srcSky.d*PS_DEG_RAD);
     1028
     1029            psProject (dstTP, &srcSky, outFPA->toSky);
    10061030
    10071031            srcChip->x -= bounds->x0;
    10081032            srcChip->y -= bounds->y0;
    1009             psArrayAdd (src, 100, srcChip);
    1010             psArrayAdd (dst, 100, dstTP);
     1033            psArrayAdd (src, 100, srcChip);
     1034            psArrayAdd (dst, 100, dstTP);
    10111035
    10121036            psFree(srcChip);  // drop our refs to s and d
     
    10211045    if (!psPlaneTransformFit(newToFPA, src, dst, 0, 0)) {
    10221046        psError(PS_ERR_UNKNOWN, false, "linear fit to transform failed");
    1023         psFree(src);
    1024         psFree(dst);
     1047        psFree(src);
     1048        psFree(dst);
    10251049        return NULL;
    10261050    }
    1027    
     1051
    10281052# if (0)
    10291053    for (int i = 0; i < src->n; i++) {
    1030        
    1031         psSphere srcSky, dstSky;
    1032         psPlane *srcChip = src->data[i];
    1033         psPlane *dstTP   = dst->data[i];
    1034 
    1035         psPlaneTransformApply (&srcFP, newToFPA, srcChip);
    1036         psDeproject (&srcSky, &srcFP, outFPA->toSky);
    1037         psDeproject (&dstSky, dstTP, outFPA->toSky);
    1038 
    1039         double dX = (srcSky.r*PS_DEG_RAD - dstSky.r*PS_DEG_RAD)*3600.0;
    1040         double dY = (srcSky.d*PS_DEG_RAD - dstSky.d*PS_DEG_RAD)*3600.0;
    1041         fprintf (stderr, "%f %f | %f %f | %f %f | %f %f | %f %f | %f %f\n", dX, dY, srcChip->x, srcChip->y, srcFP.x, srcFP.y, dstTP->x, dstTP->y, srcSky.r*PS_DEG_RAD, srcSky.d*PS_DEG_RAD, dstSky.r*PS_DEG_RAD, dstSky.d*PS_DEG_RAD);
     1054
     1055        psSphere srcSky, dstSky;
     1056        psPlane *srcChip = src->data[i];
     1057        psPlane *dstTP   = dst->data[i];
     1058
     1059        psPlaneTransformApply (&srcFP, newToFPA, srcChip);
     1060        psDeproject (&srcSky, &srcFP, outFPA->toSky);
     1061        psDeproject (&dstSky, dstTP, outFPA->toSky);
     1062
     1063        double dX = (srcSky.r*PS_DEG_RAD - dstSky.r*PS_DEG_RAD)*3600.0;
     1064        double dY = (srcSky.d*PS_DEG_RAD - dstSky.d*PS_DEG_RAD)*3600.0;
     1065        fprintf (stderr, "%f %f | %f %f | %f %f | %f %f | %f %f | %f %f\n", dX, dY, srcChip->x, srcChip->y, srcFP.x, srcFP.y, dstTP->x, dstTP->y, srcSky.r*PS_DEG_RAD, srcSky.d*PS_DEG_RAD, dstSky.r*PS_DEG_RAD, dstSky.d*PS_DEG_RAD);
    10421066
    10431067    }
Note: See TracChangeset for help on using the changeset viewer.