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); }
// -------------------------------------------------------------------------- // // 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_); }
// -------------------------------------------------------------------------- // // 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); }
// -------------------------------------------------------------------------- // // 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 ); } }