IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Dec 12, 2006, 6:44:46 PM (19 years ago)
Author:
magnier
Message:

added DVO-based tests for WCS to pmFPA hierarchy

Location:
trunk/psModules/test/astrom
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/test/astrom

    • Property svn:ignore
      •  

        old new  
        77tst_pmAstrometry01
        88tap_pmAstrometryWCS
         9tap_pmAstrometryWCS_DVO2
  • trunk/psModules/test/astrom/.cvsignore

    r10606 r10688  
    77tst_pmAstrometry01
    88tap_pmAstrometryWCS
     9tap_pmAstrometryWCS_DVO2
  • trunk/psModules/test/astrom/tap_pmAstrometryWCS_DVO2.c

    r10645 r10688  
    1717void test2(); // small rotation
    1818void test3(); // 2nd order term
     19void test1x(); // basic TAN projection with central offset
     20void test2x(); // small rotation with central offset
     21void test3x(); // 2nd order term with central offset
    1922
    2023int main (void)
    2124{
    22     plan_tests(240);
     25    plan_tests(984);
    2326
    2427    diag("pmAstromReadWCS tests compared with DVO coords routines");
    2528
    2629    test1();
    27     // test2();
    28     // test3();
     30    test2();
     31    test3();
     32    test1x();
     33    test2x();
     34    test3x();
    2935    return exit_status();
     36}
     37
     38void test3x()
     39{
     40    diag("test pmAstromReadWCS");
     41    psMemId id = psMemGetId();
     42
     43    // build a DVO-style coordinate system
     44    Coords coords;
     45    strcpy (coords.ctype, "RA---TAN");
     46    coords.crval1 = 0.0;
     47    coords.crval2 = 0.0;
     48    coords.crpix1 = +50.0;
     49    coords.crpix2 = -20.0;
     50    coords.cdelt1 = 1.0/3600;
     51    coords.cdelt2 = 1.0/3600;
     52    coords.pc1_1  = 1.0;
     53    coords.pc1_2  = 0.0;
     54    coords.pc2_1  = 0.0;
     55    coords.pc2_2  = 1.0;
     56    coords.Npolyterms = 2;
     57    for (int i = 0; i < 7; i++) {
     58        coords.polyterms[i][0] = 0.0;
     59        coords.polyterms[i][1] = 0.0;
     60    }
     61    coords.polyterms[0][0] = 0.01; // L vs X^2
     62    coords.polyterms[2][1] = 0.01; // M vs Y^2
     63
     64
     65    psMetadata *header = WriteCoordsToHeader (&coords);
     66    pmFPA *fpa = pmFPAAlloc (NULL);
     67    pmChip *chip = pmChipAlloc (fpa, NULL);
     68
     69    bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false);
     70    ok (status, "converted WCS keywords to WCS astrometry");
     71    skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests");
     72
     73    psPlane *onChip = psPlaneAlloc();
     74    psPlane *onFPA = psPlaneAlloc();
     75    psPlane *onTPA = psPlaneAlloc();
     76    psSphere *onSky = psSphereAlloc();
     77
     78    double rDVO, dDVO;
     79    for (double x = -2000; x <= +2000; x+= 500.0) {
     80        for (double y = -2000; y <= +2000; y+= 500.0) {
     81            XY_to_RD (&rDVO, &dDVO, x, y, &coords);
     82
     83            onChip->x = x;
     84            onChip->y = y;
     85
     86            psPlaneTransformApply (onFPA, chip->toFPA, onChip);
     87            psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0);
     88            psDeproject (onSky, onTPA, fpa->toSky);
     89
     90            while (onSky->r > 2*M_PI)
     91                onSky->r -= 2*M_PI;
     92            while (onSky->r <      0)
     93                onSky->r += 2*M_PI;
     94
     95            ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD);
     96            ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD);
     97        }
     98    }
     99    psFree (onSky);
     100    psFree (onTPA);
     101    psFree (onFPA);
     102    psFree (onChip);
     103
     104    skip_end();
     105    psFree (fpa);
     106    psFree (chip);
     107    psFree (header);
     108
     109    ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks");
     110}
     111
     112void test2x()
     113{
     114    diag("test pmAstromReadWCS");
     115    psMemId id = psMemGetId();
     116
     117    // build a DVO-style coordinate system
     118    Coords coords;
     119    strcpy (coords.ctype, "RA---TAN");
     120    coords.crval1 = 0.0;
     121    coords.crval2 = 0.0;
     122    coords.crpix1 = +50.0;
     123    coords.crpix2 = -20.0;
     124    coords.cdelt1 = 1.0/3600;
     125    coords.cdelt2 = 1.0/3600;
     126    coords.pc1_1  = 0.9;
     127    coords.pc1_2  = 0.1;
     128    coords.pc2_1  =-0.1;
     129    coords.pc2_2  = 0.9;
     130    coords.Npolyterms = 0;
     131    for (int i = 0; i < 7; i++) {
     132        coords.polyterms[i][0] = 0.0;
     133        coords.polyterms[i][1] = 0.0;
     134    }
     135
     136    psMetadata *header = WriteCoordsToHeader (&coords);
     137    pmFPA *fpa = pmFPAAlloc (NULL);
     138    pmChip *chip = pmChipAlloc (fpa, NULL);
     139
     140    bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false);
     141    ok (status, "converted WCS keywords to WCS astrometry");
     142    skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests");
     143
     144    psPlane *onChip = psPlaneAlloc();
     145    psPlane *onFPA = psPlaneAlloc();
     146    psPlane *onTPA = psPlaneAlloc();
     147    psSphere *onSky = psSphereAlloc();
     148
     149    double rDVO, dDVO;
     150    for (double x = -2000; x <= +2000; x+= 500.0) {
     151        for (double y = -2000; y <= +2000; y+= 500.0) {
     152            XY_to_RD (&rDVO, &dDVO, x, y, &coords);
     153
     154            onChip->x = x;
     155            onChip->y = y;
     156
     157            psPlaneTransformApply (onFPA, chip->toFPA, onChip);
     158            psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0);
     159            psDeproject (onSky, onTPA, fpa->toSky);
     160
     161            while (onSky->r > 2*M_PI)
     162                onSky->r -= 2*M_PI;
     163            while (onSky->r <      0)
     164                onSky->r += 2*M_PI;
     165
     166            ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD);
     167            ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD);
     168        }
     169    }
     170    psFree (onSky);
     171    psFree (onTPA);
     172    psFree (onFPA);
     173    psFree (onChip);
     174
     175    skip_end();
     176    psFree (fpa);
     177    psFree (chip);
     178    psFree (header);
     179
     180    ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks");
     181}
     182
     183void test1x()
     184{
     185    diag("test pmAstromReadWCS");
     186    psMemId id = psMemGetId();
     187
     188    // build a DVO-style coordinate system
     189    Coords coords;
     190    strcpy (coords.ctype, "RA---TAN");
     191    coords.crval1 = 0.0;
     192    coords.crval2 = 0.0;
     193    coords.crpix1 = +50.0;
     194    coords.crpix2 = -20.0;
     195    coords.cdelt1 = 1.0/3600;
     196    coords.cdelt2 = 1.0/3600;
     197    coords.pc1_1  = 1.0;
     198    coords.pc1_2  = 0.0;
     199    coords.pc2_1  = 0.0;
     200    coords.pc2_2  = 1.0;
     201    coords.Npolyterms = 0;
     202    for (int i = 0; i < 7; i++) {
     203        coords.polyterms[i][0] = 0.0;
     204        coords.polyterms[i][1] = 0.0;
     205    }
     206
     207    psMetadata *header = WriteCoordsToHeader (&coords);
     208    pmFPA *fpa = pmFPAAlloc (NULL);
     209    pmChip *chip = pmChipAlloc (fpa, NULL);
     210
     211    bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false);
     212    ok (status, "converted WCS keywords to WCS astrometry");
     213    skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests");
     214
     215    psPlane *onChip = psPlaneAlloc();
     216    psPlane *onFPA = psPlaneAlloc();
     217    psPlane *onTPA = psPlaneAlloc();
     218    psSphere *onSky = psSphereAlloc();
     219
     220    double rDVO, dDVO;
     221    for (double x = -2000; x <= +2000; x+= 500.0) {
     222        for (double y = -2000; y <= +2000; y+= 500.0) {
     223            XY_to_RD (&rDVO, &dDVO, x, y, &coords);
     224
     225            onChip->x = x;
     226            onChip->y = y;
     227
     228            psPlaneTransformApply (onFPA, chip->toFPA, onChip);
     229            psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0);
     230            psDeproject (onSky, onTPA, fpa->toSky);
     231
     232            while (onSky->r > 2*M_PI)
     233                onSky->r -= 2*M_PI;
     234            while (onSky->r <      0)
     235                onSky->r += 2*M_PI;
     236
     237            ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD);
     238            ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD);
     239        }
     240    }
     241    psFree (onSky);
     242    psFree (onTPA);
     243    psFree (onFPA);
     244    psFree (onChip);
     245
     246    skip_end();
     247    psFree (fpa);
     248    psFree (chip);
     249    psFree (header);
     250
     251    ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks");
     252}
     253
     254void test3()
     255{
     256    diag("test pmAstromReadWCS");
     257    psMemId id = psMemGetId();
     258
     259    // build a DVO-style coordinate system
     260    Coords coords;
     261    strcpy (coords.ctype, "RA---TAN");
     262    coords.crval1 = 0.0;
     263    coords.crval2 = 0.0;
     264    coords.crpix1 = 0.0;
     265    coords.crpix2 = 0.0;
     266    coords.cdelt1 = 1.0/3600;
     267    coords.cdelt2 = 1.0/3600;
     268    coords.pc1_1  = 1.0;
     269    coords.pc1_2  = 0.0;
     270    coords.pc2_1  = 0.0;
     271    coords.pc2_2  = 1.0;
     272    coords.Npolyterms = 2;
     273    for (int i = 0; i < 7; i++) {
     274        coords.polyterms[i][0] = 0.0;
     275        coords.polyterms[i][1] = 0.0;
     276    }
     277    coords.polyterms[0][0] = 0.01; // L vs X^2
     278    coords.polyterms[2][1] = 0.01; // M vs Y^2
     279
     280
     281    psMetadata *header = WriteCoordsToHeader (&coords);
     282    pmFPA *fpa = pmFPAAlloc (NULL);
     283    pmChip *chip = pmChipAlloc (fpa, NULL);
     284
     285    bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false);
     286    ok (status, "converted WCS keywords to WCS astrometry");
     287    skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests");
     288
     289    psPlane *onChip = psPlaneAlloc();
     290    psPlane *onFPA = psPlaneAlloc();
     291    psPlane *onTPA = psPlaneAlloc();
     292    psSphere *onSky = psSphereAlloc();
     293
     294    double rDVO, dDVO;
     295    for (double x = -2000; x <= +2000; x+= 500.0) {
     296        for (double y = -2000; y <= +2000; y+= 500.0) {
     297            XY_to_RD (&rDVO, &dDVO, x, y, &coords);
     298
     299            onChip->x = x;
     300            onChip->y = y;
     301
     302            psPlaneTransformApply (onFPA, chip->toFPA, onChip);
     303            psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0);
     304            psDeproject (onSky, onTPA, fpa->toSky);
     305
     306            while (onSky->r > 2*M_PI)
     307                onSky->r -= 2*M_PI;
     308            while (onSky->r <      0)
     309                onSky->r += 2*M_PI;
     310
     311            ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD);
     312            ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD);
     313        }
     314    }
     315    psFree (onSky);
     316    psFree (onTPA);
     317    psFree (onFPA);
     318    psFree (onChip);
     319
     320    skip_end();
     321    psFree (fpa);
     322    psFree (chip);
     323    psFree (header);
     324
     325    ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks");
     326}
     327
     328void test2()
     329{
     330    diag("test pmAstromReadWCS");
     331    psMemId id = psMemGetId();
     332
     333    // build a DVO-style coordinate system
     334    Coords coords;
     335    strcpy (coords.ctype, "RA---TAN");
     336    coords.crval1 = 0.0;
     337    coords.crval2 = 0.0;
     338    coords.crpix1 = 0.0;
     339    coords.crpix2 = 0.0;
     340    coords.cdelt1 = 1.0/3600;
     341    coords.cdelt2 = 1.0/3600;
     342    coords.pc1_1  = 0.9;
     343    coords.pc1_2  = 0.1;
     344    coords.pc2_1  =-0.1;
     345    coords.pc2_2  = 0.9;
     346    coords.Npolyterms = 0;
     347    for (int i = 0; i < 7; i++) {
     348        coords.polyterms[i][0] = 0.0;
     349        coords.polyterms[i][1] = 0.0;
     350    }
     351
     352    psMetadata *header = WriteCoordsToHeader (&coords);
     353    pmFPA *fpa = pmFPAAlloc (NULL);
     354    pmChip *chip = pmChipAlloc (fpa, NULL);
     355
     356    bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false);
     357    ok (status, "converted WCS keywords to WCS astrometry");
     358    skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests");
     359
     360    psPlane *onChip = psPlaneAlloc();
     361    psPlane *onFPA = psPlaneAlloc();
     362    psPlane *onTPA = psPlaneAlloc();
     363    psSphere *onSky = psSphereAlloc();
     364
     365    double rDVO, dDVO;
     366    for (double x = -2000; x <= +2000; x+= 500.0) {
     367        for (double y = -2000; y <= +2000; y+= 500.0) {
     368            XY_to_RD (&rDVO, &dDVO, x, y, &coords);
     369
     370            onChip->x = x;
     371            onChip->y = y;
     372
     373            psPlaneTransformApply (onFPA, chip->toFPA, onChip);
     374            psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0);
     375            psDeproject (onSky, onTPA, fpa->toSky);
     376
     377            while (onSky->r > 2*M_PI)
     378                onSky->r -= 2*M_PI;
     379            while (onSky->r <      0)
     380                onSky->r += 2*M_PI;
     381
     382            ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD);
     383            ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD);
     384        }
     385    }
     386    psFree (onSky);
     387    psFree (onTPA);
     388    psFree (onFPA);
     389    psFree (onChip);
     390
     391    skip_end();
     392    psFree (fpa);
     393    psFree (chip);
     394    psFree (header);
     395
     396    ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks");
    30397}
    31398
     
    56423    psMetadata *header = WriteCoordsToHeader (&coords);
    57424    pmFPA *fpa = pmFPAAlloc (NULL);
    58     pmChip *chip = pmFPAAlloc (fpa, NULL);
    59 
    60     bool status = pmAstromReadWCS (fpa, chip, header, PS_RAD_DEG*10.0/3600.0, false);
     425    pmChip *chip = pmChipAlloc (fpa, NULL);
     426
     427    bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false);
    61428    ok (status, "converted WCS keywords to WCS astrometry");
    62429    skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests");
     
    77444            psPlaneTransformApply (onFPA, chip->toFPA, onChip);
    78445            psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0);
    79             psDeproject (onTPA, onSky, fpa->toSky);
     446            psDeproject (onSky, onTPA, fpa->toSky);
    80447
    81448            while (onSky->r > 2*M_PI)
     
    94461
    95462    skip_end();
    96     psFree (wcs);
     463    psFree (fpa);
     464    psFree (chip);
    97465    psFree (header);
    98466
Note: See TracChangeset for help on using the changeset viewer.