Пример #1
0
static void safe_window_defaults(void)
{
  int screen_w, screen_h;
  XPLMGetScreenSize(&screen_w, &screen_h);
  // Make sure the coords are on screen
  fit_interval(0, screen_w, &win_pos_x1, &win_pos_y1, 300);
  fit_interval(0, screen_h, &win_pos_y2, &win_pos_x2, 200);
}
Пример #2
0
// -------------------------------------------------------------------------- //
//
void Test_Specswap::testAccept()
{
    // Setup a specswap object with many different data sets.
    std::string path("./testfiles/testlibLarge");
    int sample = 12;
    Mlrnd rand;
    rand.set_seed(39);
    Specswap ss1(sample, rand, path);

    // Mean scalar.
    std::string scalarname("VP-Volume");
    double target = 0.5;
    double sigma = 1.0;
    ss1.add_scalar_mean(scalarname, target, sigma);
    sigma = 0.0012;
    ss1.add_scalar_mean(scalarname, target, sigma);

    // Value scalar.
    scalarname = "VP-Area";
    double value_low = 0.5;
    double value_high = 1.0;
    double fraction = 0.6;
    sigma = 0.0001;
    ss1.add_scalar_value(scalarname, value_low, value_high, fraction, sigma);
    fraction = 0.1;
    sigma = 0.0001;
    ss1.add_scalar_value(scalarname, value_low, value_high, fraction, sigma);
    value_low = 0.0;
    value_high = 1.3;
    fraction = 0.99;
    sigma = 0.01;
    ss1.add_scalar_value(scalarname, value_low, value_high, fraction, sigma);

    // Scalar distribution.
    scalarname = "VP-Volume";
    std::string filename("./testfiles/vvol_ref.data");
    sigma = 0.0002;
    ss1.add_scalar_distribution(scalarname, filename, sigma);
    sigma = 0.0099;
    ss1.add_scalar_distribution(scalarname, filename, sigma);

    // Curve.
    std::string curve_name("bas");
    filename = "./testfiles/exafs_ref.data";
    sigma = 0.0002;
    bool area_renorm = true;
    ss1.add_curve(sigma, area_renorm, curve_name, filename);
    area_renorm = false;
    ss1.add_curve(sigma, area_renorm, curve_name, filename);

    // Setup input for adding a pcf.
    double rmin = 0.0;
    double rmax = 5.0;
    double dr = 0.02;
    double numberdensity = 0.4;
    std::pair<double,double> fit_interval(1.3, 3.0);
    int nbins = 250;
    std::pair<int,int> partial(0,1);
    std::string ref_path("./testfiles/gr_ref.data");
    sigma = 0.01;
    ss1.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path);
    sigma = 0.0123;
    ss1.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path);

    // Setup.
    ss1.setup();
    // Move.
    ss1.move();

    // Check what slot and indices will be swapped.
    CPPUNIT_ASSERT_EQUAL( ss1.from_sample_, 583);
    CPPUNIT_ASSERT_EQUAL( ss1.from_basis_, 2354);
    CPPUNIT_ASSERT_EQUAL( ss1.slot_, 11);

    // Check that the sample set is correct.
    CPPUNIT_ASSERT_EQUAL( ss1.sampleset_.index_at(ss1.slot_), ss1.from_sample_);

    // Notify.
    ss1.notify();

    // Check the chi2 value.
    double diff = 7.2603029936e+08 - 6.5624713898e-04 - ss1.chi2_;
    CPPUNIT_ASSERT_DOUBLES_EQUAL( diff, 0.0, 1.0e-10 );

    // Check that the chi2_new value has been updated.
    diff = 7.4256423439e+08 + 1.9059181213e-03 - ss1.chi2_new_;
    CPPUNIT_ASSERT_DOUBLES_EQUAL( diff, 0.0, 1.0e-10 );

    // Call the accept and make sure Chi2 has been accepted.
    ss1.accept();
    CPPUNIT_ASSERT_DOUBLES_EQUAL( ss1.chi2_, ss1.chi2_new_, 1.0e-10 );

    // Check that the sample set is correct.
    CPPUNIT_ASSERT_EQUAL( ss1.sampleset_.index_at(ss1.slot_), ss1.from_basis_);
}
Пример #3
0
// -------------------------------------------------------------------------- //
//
void Test_Specswap::testNotify()
{
    // Setup a specswap object with many different data sets.
    std::string path("./testfiles/testlibLarge");
    int sample = 12;
    Mlrnd rand;
    rand.set_seed(39);
    Specswap ss1(sample, rand, path);

    // Mean scalar.
    std::string scalarname("VP-Volume");
    double target = 0.5;
    double sigma = 1.0;
    ss1.add_scalar_mean(scalarname, target, sigma);
    sigma = 0.0012;
    ss1.add_scalar_mean(scalarname, target, sigma);

    // Value scalar.
    scalarname = "VP-Area";
    double value_low = 0.5;
    double value_high = 1.0;
    double fraction = 0.6;
    sigma = 0.0001;
    ss1.add_scalar_value(scalarname, value_low, value_high, fraction, sigma);
    fraction = 0.1;
    sigma = 0.0001;
    ss1.add_scalar_value(scalarname, value_low, value_high, fraction, sigma);
    value_low = 0.0;
    value_high = 1.3;
    fraction = 0.99;
    sigma = 0.01;
    ss1.add_scalar_value(scalarname, value_low, value_high, fraction, sigma);

    // Scalar distribution.
    scalarname = "VP-Volume";
    std::string filename("./testfiles/vvol_ref.data");
    sigma = 0.0002;
    ss1.add_scalar_distribution(scalarname, filename, sigma);
    sigma = 0.0099;
    ss1.add_scalar_distribution(scalarname, filename, sigma);

    // Curve.
    std::string curve_name("bas");
    filename = "./testfiles/exafs_ref.data";
    sigma = 0.0002;
    bool area_renorm = true;
    ss1.add_curve(sigma, area_renorm, curve_name, filename);
    area_renorm = false;
    ss1.add_curve(sigma, area_renorm, curve_name, filename);

    // Setup input for adding a pcf.
    double rmin = 0.0;
    double rmax = 5.0;
    double dr = 0.02;
    double numberdensity = 0.4;
    std::pair<double,double> fit_interval(1.3, 3.0);
    int nbins = 250;
    std::pair<int,int> partial(0,1);
    std::string ref_path("./testfiles/gr_ref.data");
    sigma = 0.01;
    ss1.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path);
    sigma = 0.0123;
    ss1.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path);


    // Set the initial chi2_ value to some thing unreasonable.
    ss1.chi2_new_ = -1.123;
    // Call the setup function.
    ss1.from_sample_ = 0;
    ss1.from_basis_ = 12;
    ss1.setup();
    // Call notify.
    ss1.notify();

    // Check that the chi2 value has been updated.
    CPPUNIT_ASSERT_DOUBLES_EQUAL(735129583.538380026817, ss1.chi2_new_, 1.0e-8);
}
Пример #4
0
// -------------------------------------------------------------------------- //
//
void Test_Specswap::testAddPCF()
{
    // Setup a specswap object.
    int sample = 250;
    Mlrnd rand;
    std::string path("./testfiles/testlibLarge");
    Specswap ss(sample, rand, path);

    // Check that there are no pcf data added.
    CPPUNIT_ASSERT_EQUAL( static_cast<int>(ss.pcf_data_.size()), 0 );

    // Setup input for adding a pcf.
    double rmin = 0.0;
    double rmax = 5.0;
    double dr = 0.02;
    double sigma = 0.01;
    double numberdensity = 0.4;
    std::pair<double,double> fit_interval(1.3, 3.0);
    int nbins = 250;
    std::pair<int,int> partial(0,1);
    std::string ref_path("./testfiles/gr_ref.data");

    ss.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path);

    // Check that a pcf has been added.
    CPPUNIT_ASSERT_EQUAL( static_cast<int>(ss.pcf_data_.size()), 1 );

    // Add another one.
    ss.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path);

    // Check.
    CPPUNIT_ASSERT_EQUAL( static_cast<int>(ss.pcf_data_.size()), 2 );

    // Make sure we fail with wrong rmin rmax and dr.
    {
        double rmin = 2.3;
        double rmax = 4.0;
        double dr = 0.02;
        //ss.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path);
        CPPUNIT_ASSERT_THROW( ss.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path), IOException );
    }

    // Make sure we fail with wrong rmin rmax and dr.
    {
        std::pair<double, double> fit_interval(12.3,1.23);
        //ss.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path);
        CPPUNIT_ASSERT_THROW( ss.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path), IOException );
    }

    // Make sure we fail with a too large number of bins.
    {
        int nbins = 1000;
        double rmin = 0.0;
        double rmax = 10.0;
        double dr = 0.02;
        //ss.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path);
        CPPUNIT_ASSERT_THROW( ss.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path), IOException );
    }

    // Make sure we fail with wrong reference path.
    {
        std::string ref_path("./testfiles/NO_SUCH_FILE");
        //ss.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path);
        CPPUNIT_ASSERT_THROW( ss.add_pcf(rmin, rmax, dr, sigma, numberdensity, fit_interval, nbins, partial, ref_path), IOException );
    }
}