Пример #1
0
void move_particles(Particle particles[]) {
    int i;

    for (i = 0; i < NUM_PARTICLES; i++) {
        particles[i].position += gaussian_sample(TRAVEL_DISTANCE, MOTION_NOISE);
        if (particles[i].position > 360)
            particles[i].position -= 360;
    }
}
Пример #2
0
static void tst_tweak_n(CuTest* tc, int run, int GX, int GY) {
    double origxy[GX*GY*2];
    double xy[GX*GY*2];
    double noisyxy[GX*GY*2];
    double radec[GX*GY*2];
    double gridx[GX];
    double gridy[GY];
    sip_t thesip;
    sip_t* sip = &thesip;
    tan_t* tan = &(sip->wcstan);
    int i,j;
    sip_t* outsip;

    printf("\ntest_tweak_%i\n\n", run);

    log_init(LOG_VERB);

    memset(sip, 0, sizeof(sip_t));

    tan->imagew = 2000;
    tan->imageh = 2000;
    tan->crval[0] = 150;
    tan->crval[1] = -30;
    tan->crpix[0] = 1000.5;
    tan->crpix[1] = 1000.5;
    tan->cd[0][0] = 1./1000.;
    tan->cd[0][1] = 0;
    tan->cd[1][1] = 1./1000.;
    tan->cd[1][0] = 0;

    sip->a_order = sip->b_order = 2;
    sip->a[2][0] = 10.*1e-6;
    sip->b[0][2] = -10.*1e-6;
    sip->ap_order = sip->bp_order = 4;

    sip_compute_inverse_polynomials(sip, 0, 0, 0, 0, 0, 0);

    set_grid(GX, GY, tan, sip, origxy, radec, xy, gridx, gridy);

    // add noise to observed xy positions.
    srand(42);
    for (i=0; i<(GX*GY*2); i++) {
        noisyxy[i] = xy[i] + gaussian_sample(0.0, 1.0);
    }

    fprintf(stderr, "from numpy import array\n");
    fprintf(stderr, "x0,y0 = %g,%g\n", tan->crpix[0], tan->crpix[1]);
    fprintf(stderr, "gridx_%i=array([", run);
    for (i=0; i<GX; i++)
        fprintf(stderr, "%g, ", gridx[i]);
    fprintf(stderr, "])\n");
    fprintf(stderr, "gridy_%i=array([", run);
    for (i=0; i<GY; i++)
        fprintf(stderr, "%g, ", gridy[i]);
    fprintf(stderr, "])\n");
    fprintf(stderr, "origxy_%i = array([", run);
    for (i=0; i<(GX*GY); i++)
        fprintf(stderr, "[%g,%g],", origxy[2*i+0], origxy[2*i+1]);
    fprintf(stderr, "])\n");
    fprintf(stderr, "xy_%i = array([", run);
    for (i=0; i<(GX*GY); i++)
        fprintf(stderr, "[%g,%g],", xy[2*i+0], xy[2*i+1]);
    fprintf(stderr, "])\n");

    fprintf(stderr, "noisyxy_%i = array([", run);
    for (i=0; i<(GX*GY); i++)
        fprintf(stderr, "[%g,%g],", noisyxy[2*i+0], noisyxy[2*i+1]);
    fprintf(stderr, "])\n");

    fprintf(stderr, "truesip_a_%i = array([", run);
    for (i=0; i<=sip->a_order; i++)
        for (j=0; j<=sip->a_order; j++)
            if (sip->a[i][j] != 0)
                fprintf(stderr, "[%i,%i,%g],", i, j, sip->a[i][j]);
    fprintf(stderr, "])\n");

    fprintf(stderr, "truesip_b_%i = array([", run);
    for (i=0; i<=sip->a_order; i++)
        for (j=0; j<=sip->a_order; j++)
            if (sip->b[i][j] != 0)
                fprintf(stderr, "[%i,%i,%g],", i, j, sip->b[i][j]);
    fprintf(stderr, "])\n");

    fprintf(stderr, "sip_a_%i = {}\n", run);
    fprintf(stderr, "sip_b_%i = {}\n", run);

    int o;
    for (o=2; o<6; o++) {
        sip->a_order = o;
        outsip = run_test(tc, sip, GX*GY, noisyxy, radec);

        fprintf(stderr, "sip_a_%i[%i] = array([", run, o);
        for (i=0; i<=outsip->a_order; i++)
            for (j=0; j<=outsip->a_order; j++)
                if (outsip->a[i][j] != 0)
                    fprintf(stderr, "[%i,%i,%g],", i, j, outsip->a[i][j]);
        fprintf(stderr, "])\n");

        fprintf(stderr, "sip_b_%i[%i] = array([", run, o);
        for (i=0; i<=outsip->a_order; i++)
            for (j=0; j<=outsip->a_order; j++)
                if (outsip->b[i][j] != 0)
                    fprintf(stderr, "[%i,%i,%g],", i, j, outsip->b[i][j]);
        fprintf(stderr, "])\n");
    }

    sip->a_order = 2;
    outsip = run_test(tc, sip, GX*GY, noisyxy, radec);

    CuAssertDblEquals(tc, tan->crval[0], outsip->wcstan.crval[0], 1e-3);
    CuAssertDblEquals(tc, tan->crval[1], outsip->wcstan.crval[1], 1e-3);

    CuAssertDblEquals(tc, tan->cd[0][0], outsip->wcstan.cd[0][0], 1e-6);
    CuAssertDblEquals(tc, tan->cd[0][1], outsip->wcstan.cd[0][1], 1e-6);
    CuAssertDblEquals(tc, tan->cd[1][0], outsip->wcstan.cd[1][0], 1e-6);
    CuAssertDblEquals(tc, tan->cd[1][1], outsip->wcstan.cd[1][1], 1e-6);

    if (run == 2) {
        double *d1, *d2;
        d1 = (double*)outsip->a;
        d2 = (double*)&(sip->a);
        for (i=0; i<(SIP_MAXORDER * SIP_MAXORDER); i++)
            // rather large error, no?
            CuAssertDblEquals(tc, d2[i], d1[i], 6e-7);
        d1 = (double*)outsip->b;
        d2 = (double*)&(sip->b);
        for (i=0; i<(SIP_MAXORDER * SIP_MAXORDER); i++) {
            printf("test_tweak_2, run 2: Expecting %.18g, got %.18g\n", d2[i], d1[i]);
            fflush(NULL);
            CuAssertDblEquals(tc, d2[i], d1[i], 3e-7);
        }
        d1 = (double*)outsip->ap;
        d2 = (double*)&(sip->ap);
        for (i=0; i<(SIP_MAXORDER * SIP_MAXORDER); i++)
            CuAssertDblEquals(tc, d2[i], d1[i], 1e-6);
        d1 = (double*)outsip->bp;
        d2 = (double*)&(sip->bp);
        for (i=0; i<(SIP_MAXORDER * SIP_MAXORDER); i++)
            CuAssertDblEquals(tc, d2[i], d1[i], 1e-6);
        CuAssertIntEquals(tc, sip->a_order, outsip->a_order);
        CuAssertIntEquals(tc, sip->b_order, outsip->b_order);
        CuAssertIntEquals(tc, sip->ap_order, outsip->ap_order);
        CuAssertIntEquals(tc, sip->bp_order, outsip->bp_order);
    } else if (run == 3) {
        double *d1, *d2;
        d1 = (double*)outsip->a;
        d2 = (double*)&(sip->a);
        for (i=0; i<(SIP_MAXORDER * SIP_MAXORDER); i++) {
            // rather large error, no?
            printf("test_tweak_2, run 3: Expecting %.18g, got %.18g\n", d2[i], d1[i]);
            fflush(NULL);
            CuAssertDblEquals(tc, d2[i], d1[i], 7e-7);
        }
        d1 = (double*)outsip->b;
        d2 = (double*)&(sip->b);
        for (i=0; i<(SIP_MAXORDER * SIP_MAXORDER); i++) {
            printf("test_tweak_2, run 3b: Expecting %.18g, got %.18g\n", d2[i], d1[i]);
            fflush(NULL);
            CuAssertDblEquals(tc, d2[i], d1[i], 2e-6);
        }
        d1 = (double*)outsip->ap;
        d2 = (double*)&(sip->ap);
        for (i=0; i<(SIP_MAXORDER * SIP_MAXORDER); i++)
            CuAssertDblEquals(tc, d2[i], d1[i], 1e-6);
        d1 = (double*)outsip->bp;
        d2 = (double*)&(sip->bp);
        for (i=0; i<(SIP_MAXORDER * SIP_MAXORDER); i++) {
            printf("test_tweak_2, run 3c: Expecting %.18g, got %.18g\n", d2[i], d1[i]);
            fflush(NULL);
            CuAssertDblEquals(tc, d2[i], d1[i], 2e-6);
        }
        CuAssertIntEquals(tc, sip->a_order, outsip->a_order);
        CuAssertIntEquals(tc, sip->b_order, outsip->b_order);
        CuAssertIntEquals(tc, sip->ap_order, outsip->ap_order);
        CuAssertIntEquals(tc, sip->bp_order, outsip->bp_order);
    }
}
Пример #3
0
void initGaussian(GaussianData *data, float spread, float freq)
{
    data->location = 0;
    data->set = 0;
    gaussian_sample(sample, size, spread, freq);
}