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; } }
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); } }
void initGaussian(GaussianData *data, float spread, float freq) { data->location = 0; data->set = 0; gaussian_sample(sample, size, spread, freq); }