From 663cc0ca6e5c83c6410a704e3dcb095d2cde9652 Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (o)" <j.wuttke@fz-juelich.de> Date: Tue, 24 May 2022 11:31:04 +0200 Subject: [PATCH] SpecularSimulation(scan, sample) --- Examples/anaklasis/ba_anaklasis.py | 5 +- Examples/bayesian/likelihood_sampling.py | 10 ++-- Examples/fit/specular/FitSpecularBasics.py | 8 +-- Examples/fit/specular/Honeycomb_fit.py | 6 +- Examples/fit/specular/Pt_layer_fit.py | 9 ++- .../specular/RealLifeReflectometryFitting.py | 9 ++- Examples/specular/AlternatingLayers1.py | 5 +- Examples/specular/AlternatingLayers2.py | 5 +- .../specular/BasicPolarizedReflectometry.py | 21 ++----- Examples/specular/BeamAngularDivergence.py | 6 +- Examples/specular/BeamFullDivergence.py | 4 +- Examples/specular/FootprintCorrection.py | 5 +- Examples/specular/PolarizedNoAnalyzer.py | 5 +- .../PolarizedNonperfectAnalyzerPolarizer.py | 5 +- Examples/specular/PolarizedSpinAsymmetry.py | 8 +-- Examples/specular/PolarizedSpinFlip.py | 26 +++------ Examples/specular/RoughnessModel.py | 6 +- .../SpecularSimulationWithRoughness.py | 5 +- Examples/specular/TOFRWithResolution.py | 6 +- .../specular/TimeOfFlightReflectometry.py | 5 +- Tests/Unit/Sim/SpecularSimulationTest.cpp | 47 ++++----------- Wrap/Python/std_simulations.py | 5 +- auto/Wrap/doxygenSim.i | 3 + auto/Wrap/libBornAgainSim.py | 1 + auto/Wrap/libBornAgainSim_wrap.cpp | 57 +++++++++++++++++-- 25 files changed, 117 insertions(+), 155 deletions(-) diff --git a/Examples/anaklasis/ba_anaklasis.py b/Examples/anaklasis/ba_anaklasis.py index 0257cb23710..0822d7671f7 100755 --- a/Examples/anaklasis/ba_anaklasis.py +++ b/Examples/anaklasis/ba_anaklasis.py @@ -449,7 +449,6 @@ def simulate(sample, if qmax: qzs = np.linspace(0., qmax[0]/angstrom, scan_size) - simulation = ba.SpecularSimulation() n_sig = 4.0 n_samples = 25 @@ -462,11 +461,9 @@ def simulate(sample, else: scan.setRelativeQResolution(distr, 0.5*resolution) - simulation.setScan(scan) - + simulation = ba.SpecularSimulation(scan, sample) simulation.setBackground(ba.ConstantBackground(background/scale)) - simulation.setSample(sample) result = simulation.simulate() return np.array(result.axis( diff --git a/Examples/bayesian/likelihood_sampling.py b/Examples/bayesian/likelihood_sampling.py index 760a909cb8c..be455ef29aa 100755 --- a/Examples/bayesian/likelihood_sampling.py +++ b/Examples/bayesian/likelihood_sampling.py @@ -76,15 +76,13 @@ def get_real_data(): # Define the simulation -def get_simulation(alpha): +def get_simulation(sample, alpha): """ Defines and returns a specular simulation. """ wavelength = 0.154 #nm scan = ba.AlphaScan(wavelength, alpha) - simulation = ba.SpecularSimulation() - simulation.setScan(scan) - return simulation + return ba.SpecularSimulation(scan, sample) # Run the simulation @@ -97,8 +95,8 @@ def run_simulation(alpha, ni_thickness, ti_thickness): :return: simulated reflected intensity """ sample = get_sample(ni_thickness, ti_thickness) - simulation = get_simulation(alpha) - simulation.setSample(sample) + simulation = get_simulation(sample, alpha) + result = simulation.simulate() return result.array() diff --git a/Examples/fit/specular/FitSpecularBasics.py b/Examples/fit/specular/FitSpecularBasics.py index b086df09c3c..022344a0440 100755 --- a/Examples/fit/specular/FitSpecularBasics.py +++ b/Examples/fit/specular/FitSpecularBasics.py @@ -92,12 +92,10 @@ def get_simulation(params): Create and return specular simulation with its instrument defined """ wavelength = 1.54*ba.angstrom # beam wavelength - - simulation = ba.SpecularSimulation() scan = ba.AlphaScan(wavelength, get_real_data_axis()) - simulation.setScan(scan) - simulation.setSample(get_sample(params)) - return simulation + sample = get_sample(params) + + return ba.SpecularSimulation(scan, sample) def run_fitting(): diff --git a/Examples/fit/specular/Honeycomb_fit.py b/Examples/fit/specular/Honeycomb_fit.py index 3f01274449a..f8755973fab 100755 --- a/Examples/fit/specular/Honeycomb_fit.py +++ b/Examples/fit/specular/Honeycomb_fit.py @@ -88,9 +88,6 @@ def get_simulation(q_axis, fitParams, sign, ms150=False): scan = ba.QzScan(q_axis) scan.setAbsoluteQResolution(q_distr, dq) - simulation = ba.SpecularSimulation() - simulation.setScan(scan) - simulation.beam().setIntensity(parameters["intensity"]) if ms150: sample = get_sample(parameters=parameters, @@ -99,7 +96,8 @@ def get_simulation(q_axis, fitParams, sign, ms150=False): else: sample = get_sample(parameters=parameters, sign=sign, ms150=1) - simulation.setSample(sample) + simulation = ba.SpecularSimulation(scan, sample) + simulation.beam().setIntensity(parameters["intensity"]) simulation.setBackground(ba.ConstantBackground(5e-7)) return simulation diff --git a/Examples/fit/specular/Pt_layer_fit.py b/Examples/fit/specular/Pt_layer_fit.py index cb0b31afb9f..55ee70c557e 100755 --- a/Examples/fit/specular/Pt_layer_fit.py +++ b/Examples/fit/specular/Pt_layer_fit.py @@ -56,6 +56,8 @@ def get_sample(params): def get_simulation(q_axis, parameters): + sample = get_sample(parameters) + scan = ba.QzScan(q_axis) scan.setOffset(parameters["q_offset"]) @@ -65,21 +67,18 @@ def get_simulation(q_axis, parameters): distr = ba.RangedDistributionGaussian(n_samples, n_sig) scan.setAbsoluteQResolution(distr, parameters["q_res/q"]) - simulation = ba.SpecularSimulation() + simulation = ba.SpecularSimulation(scan, sample) + simulation.beam().setIntensity(parameters["intensity"]) - simulation.setScan(scan) return simulation def run_simulation(q_axis, fitParams): parameters = dict(fitParams, **fixedParams) - sample = get_sample(parameters) simulation = get_simulation(q_axis, parameters) - simulation.setSample(sample) - return simulation.simulate() diff --git a/Examples/fit/specular/RealLifeReflectometryFitting.py b/Examples/fit/specular/RealLifeReflectometryFitting.py index 787d8123cd6..348d6aaa34a 100755 --- a/Examples/fit/specular/RealLifeReflectometryFitting.py +++ b/Examples/fit/specular/RealLifeReflectometryFitting.py @@ -88,7 +88,7 @@ def get_weights(start, end): return expdata[start:end, 2] -def create_simulation(arg_dict, bin_start, bin_end): +def create_simulation(sample, arg_dict, bin_start, bin_end): """ Creates and returns specular simulation """ @@ -100,8 +100,7 @@ def create_simulation(arg_dict, bin_start, bin_end): scan.setAbsoluteAngularResolution(alpha_distr, arg_dict["divergence"]) scan.setFootprintFactor(footprint) - simulation = ba.SpecularSimulation() - simulation.setScan(scan) + simulation = ba.SpecularSimulation(scan, sample) simulation.beam().setIntensity(arg_dict["intensity"]) return simulation @@ -139,8 +138,8 @@ def run_simulation(arg_dict, bin_start=0, bin_end=-1): Runs simulation and returns its result """ - simulation = create_simulation(arg_dict, bin_start, bin_end) - simulation.setSample(buildSample(arg_dict)) + sample = buildSample(arg_dict) + simulation = create_simulation(sample, arg_dict, bin_start, bin_end) return simulation.simulate() diff --git a/Examples/specular/AlternatingLayers1.py b/Examples/specular/AlternatingLayers1.py index 536e3fc7814..b25da0888d5 100755 --- a/Examples/specular/AlternatingLayers1.py +++ b/Examples/specular/AlternatingLayers1.py @@ -42,11 +42,8 @@ def get_simulation(sample): A standard specular simulation setup. """ n = bp.simargs['n'] - simulation = ba.SpecularSimulation() scan = ba.AlphaScan(1.54*angstrom, n, 0, 2*deg) - simulation.setScan(scan) - simulation.setSample(sample) - return simulation + return ba.SpecularSimulation(scan, sample) if __name__ == '__main__': diff --git a/Examples/specular/AlternatingLayers2.py b/Examples/specular/AlternatingLayers2.py index 47023a901a3..acac1dfc64d 100755 --- a/Examples/specular/AlternatingLayers2.py +++ b/Examples/specular/AlternatingLayers2.py @@ -18,11 +18,8 @@ def get_simulation(sample): A standard specular simulation setup. """ n = bp.simargs['n'] - simulation = ba.SpecularSimulation() scan = ba.AlphaScan(1.54*angstrom, n, 0, 2*deg) - simulation.setScan(scan) - simulation.setSample(sample) - return simulation + return ba.SpecularSimulation(scan, sample) if __name__ == '__main__': diff --git a/Examples/specular/BasicPolarizedReflectometry.py b/Examples/specular/BasicPolarizedReflectometry.py index a20d9685c81..af7248250a9 100755 --- a/Examples/specular/BasicPolarizedReflectometry.py +++ b/Examples/specular/BasicPolarizedReflectometry.py @@ -36,18 +36,10 @@ def get_sample(): return sample -def get_simulation(sample, scan_size=500): - """ - Defines and returns a specular simulation. - """ - - -def simulate(polarizer_dir, analyzer_dir, title): +def simulate(sample, polarizer_dir, analyzer_dir, title): n = bp.simargs['n'] - simulation = ba.SpecularSimulation() scan = ba.AlphaScan(1.54*angstrom, n, 0, 5*deg) - simulation.setScan(scan) - simulation.setSample(get_sample()) + simulation = ba.SpecularSimulation(scan, sample) simulation.setPolarization(polarizer_dir) simulation.setAnalyzer(analyzer_dir, 1, 0.5) @@ -57,16 +49,13 @@ def simulate(polarizer_dir, analyzer_dir, title): return result -def run_simulations(): - return ret - - if __name__ == '__main__': bp.parse_args(sim_n=500) + sample = get_sample() results = [ - simulate(ba.R3(0, +1, 0), ba.R3(0, +1, 0), "$++$"), - simulate(ba.R3(0, -1, 0), ba.R3(0, -1, 0), "$--$"), + simulate(sample, ba.R3(0, +1, 0), ba.R3(0, +1, 0), "$++$"), + simulate(sample, ba.R3(0, -1, 0), ba.R3(0, -1, 0), "$--$"), ] bp.plot_multicurve_specular(results) diff --git a/Examples/specular/BeamAngularDivergence.py b/Examples/specular/BeamAngularDivergence.py index b8e3f6a38a3..557fcc62be8 100755 --- a/Examples/specular/BeamAngularDivergence.py +++ b/Examples/specular/BeamAngularDivergence.py @@ -51,11 +51,7 @@ def get_simulation(sample, **kwargs): scan.setFootprintFactor(footprint) scan.setAbsoluteAngularResolution(alpha_distr, d_ang) - simulation = ba.SpecularSimulation() - simulation.setScan(scan) - simulation.setSample(sample) - - return simulation + return ba.SpecularSimulation(scan, sample) if __name__ == '__main__': diff --git a/Examples/specular/BeamFullDivergence.py b/Examples/specular/BeamFullDivergence.py index bb3a9b3f6ba..cd09f06fd02 100755 --- a/Examples/specular/BeamFullDivergence.py +++ b/Examples/specular/BeamFullDivergence.py @@ -35,9 +35,7 @@ def get_simulation(sample): scan.setAbsoluteAngularResolution(alpha_distr, d_ang) scan.setAbsoluteWavelengthResolution(wavelength_distr, d_wl) - simulation = ba.SpecularSimulation() - simulation.setScan(scan) - simulation.setSample(sample) + return ba.SpecularSimulation(scan, sample) return simulation diff --git a/Examples/specular/FootprintCorrection.py b/Examples/specular/FootprintCorrection.py index 793d5cdcfb2..c9889c4fda2 100755 --- a/Examples/specular/FootprintCorrection.py +++ b/Examples/specular/FootprintCorrection.py @@ -12,12 +12,11 @@ sample = std_samples.alternating_layers() def simulate(footprint, title): - simulation = ba.SpecularSimulation() n = bp.simargs['n'] scan = ba.AlphaScan(1.54*angstrom, n, 0, 0.6*deg) scan.setFootprintFactor(footprint) - simulation.setScan(scan) - simulation.setSample(sample) + simulation = ba.SpecularSimulation(scan, sample) + result = simulation.simulate() result.setTitle(title) return result diff --git a/Examples/specular/PolarizedNoAnalyzer.py b/Examples/specular/PolarizedNoAnalyzer.py index 78a46aa29f0..f2642fd5441 100755 --- a/Examples/specular/PolarizedNoAnalyzer.py +++ b/Examples/specular/PolarizedNoAnalyzer.py @@ -40,12 +40,9 @@ def get_simulation(sample): """ Defines and returns a specular simulation. """ - simulation = ba.SpecularSimulation() n = bp.simargs['n'] scan = ba.AlphaScan(1.54*angstrom, n, 0, 5*deg) - simulation.setScan(scan) - simulation.setSample(sample) - return simulation + return ba.SpecularSimulation(scan, sample) def run_simulation(polarizer_dir=R3(0, 1, 0), analyzer_dir=None): diff --git a/Examples/specular/PolarizedNonperfectAnalyzerPolarizer.py b/Examples/specular/PolarizedNonperfectAnalyzerPolarizer.py index 03e0f386754..b7e8f34b562 100755 --- a/Examples/specular/PolarizedNonperfectAnalyzerPolarizer.py +++ b/Examples/specular/PolarizedNonperfectAnalyzerPolarizer.py @@ -54,7 +54,6 @@ def get_simulation(sample, scan_size=1500): """ Defines and returns a specular simulation. """ - simulation = ba.SpecularSimulation() qzs = numpy.linspace(0.1, 1.5, scan_size) n_sig = 4.0 @@ -64,9 +63,7 @@ def get_simulation(sample, scan_size=1500): scan = ba.QzScan(qzs) scan.setAbsoluteQResolution(distr, 0.008) - simulation.setScan(scan) - simulation.setSample(sample) - return simulation + return ba.SpecularSimulation(scan, sample) def run_simulation(*, diff --git a/Examples/specular/PolarizedSpinAsymmetry.py b/Examples/specular/PolarizedSpinAsymmetry.py index b1c0fdaeac7..a6e2bdeb1b4 100755 --- a/Examples/specular/PolarizedSpinAsymmetry.py +++ b/Examples/specular/PolarizedSpinAsymmetry.py @@ -63,13 +63,12 @@ def get_sample(params): return multi_layer -def get_simulation(q_axis, parameters, polarizer_dir, analyzer_dir): +def get_simulation(sample, q_axis, parameters, polarizer_dir, analyzer_dir): """ Returns a simulation object. Polarization, analyzer and resolution are set from given parameters """ - simulation = ba.SpecularSimulation() q_axis = q_axis + parameters["q_offset"] scan = ba.QzScan(q_axis) @@ -80,10 +79,10 @@ def get_simulation(q_axis, parameters, polarizer_dir, analyzer_dir): distr = ba.RangedDistributionGaussian(n_samples, n_sig) scan.setAbsoluteQResolution(distr, parameters["q_res"]) + simulation = ba.SpecularSimulation(scan, sample) simulation.setPolarization(polarizer_dir) simulation.setAnalyzer(analyzer_dir, 1, 0.5) - simulation.setScan(scan) return simulation @@ -96,10 +95,9 @@ def run_simulation(q_axis, fitParams, *, polarizer_dir, analyzer_dir): parameters = dict(fitParams, **fixedParams) sample = get_sample(parameters) - simulation = get_simulation(q_axis, parameters, polarizer_dir, + simulation = get_simulation(sample, q_axis, parameters, polarizer_dir, analyzer_dir) - simulation.setSample(sample) return simulation.simulate() diff --git a/Examples/specular/PolarizedSpinFlip.py b/Examples/specular/PolarizedSpinFlip.py index 05dee45de5d..96cf227411f 100755 --- a/Examples/specular/PolarizedSpinFlip.py +++ b/Examples/specular/PolarizedSpinFlip.py @@ -36,25 +36,14 @@ def get_sample(): return sample -def get_simulation(sample, scan_size=500): - """ - Defines and returns a specular simulation. - """ - simulation = ba.SpecularSimulation() - scan = ba.AlphaScan(1.54*angstrom, scan_size, 0, 5*deg) - simulation.setScan(scan) - simulation.setSample(sample) - return simulation - - -def run_simulation(polarizer_dir=ba.R3(0, 1, 0), +def run_simulation(sample, polarizer_dir=ba.R3(0, 1, 0), analyzer_dir=ba.R3(0, 1, 0)): """ Runs simulation and returns its result. """ - sample = get_sample() - simulation = get_simulation(sample) + scan = ba.AlphaScan(1.54*angstrom, 500, 0, 5*deg) + simulation = ba.SpecularSimulation(scan, sample) simulation.setPolarization(polarizer_dir) simulation.setAnalyzer(analyzer_dir, 1, 0.5) @@ -81,11 +70,12 @@ def plot(data, labels): if __name__ == '__main__': bp.parse_args() - results_pp = run_simulation(ba.R3(0, 1, 0), ba.R3(0, 1, 0)) - results_mm = run_simulation(ba.R3(0, -1, 0), ba.R3(0, -1, 0)) + sample = get_sample() - results_pm = run_simulation(ba.R3(0, 1, 0), ba.R3(0, -1, 0)) - results_mp = run_simulation(ba.R3(0, -1, 0), ba.R3(0, 1, 0)) + results_pp = run_simulation(sample, ba.R3(0, 1, 0), ba.R3(0, 1, 0)) + results_mm = run_simulation(sample, ba.R3(0, -1, 0), ba.R3(0, -1, 0)) + results_pm = run_simulation(sample, ba.R3(0, 1, 0), ba.R3(0, -1, 0)) + results_mp = run_simulation(sample, ba.R3(0, -1, 0), ba.R3(0, 1, 0)) plot([results_pp, results_mm, results_pm, results_mp], ["$++$", "$--$", "$+-$", "$-+$"]) diff --git a/Examples/specular/RoughnessModel.py b/Examples/specular/RoughnessModel.py index 1a9a208a6a4..0291e12efe9 100755 --- a/Examples/specular/RoughnessModel.py +++ b/Examples/specular/RoughnessModel.py @@ -47,12 +47,10 @@ def get_simulation(sample): """ Defines and returns a specular simulation. """ - simulation = ba.SpecularSimulation() n = bp.simargs['n'] scan = ba.AlphaScan(1.54*angstrom, n, 0, 2*deg) - simulation.setScan(scan) - simulation.setSample(sample) - return simulation + + return ba.SpecularSimulation(scan, sample) def simulate(roughness_model, title): diff --git a/Examples/specular/SpecularSimulationWithRoughness.py b/Examples/specular/SpecularSimulationWithRoughness.py index 57cb74e83f6..304598c0e3d 100755 --- a/Examples/specular/SpecularSimulationWithRoughness.py +++ b/Examples/specular/SpecularSimulationWithRoughness.py @@ -35,12 +35,9 @@ def get_sample(): def get_simulation(sample): - simulation = ba.SpecularSimulation() n = bp.simargs['n'] scan = ba.AlphaScan(1.54*angstrom, n, 0, 2*deg) - simulation.setScan(scan) - simulation.setSample(sample) - return simulation + return ba.SpecularSimulation(scan, sample) if __name__ == '__main__': diff --git a/Examples/specular/TOFRWithResolution.py b/Examples/specular/TOFRWithResolution.py index 558cadeed1f..ddcb3687090 100755 --- a/Examples/specular/TOFRWithResolution.py +++ b/Examples/specular/TOFRWithResolution.py @@ -36,11 +36,7 @@ def get_simulation(sample): scan = ba.QzScan(qzs) scan.setAbsoluteQResolution(distr, dq) - simulation = ba.SpecularSimulation() - simulation.setScan(scan) - simulation.setSample(sample) - - return simulation + return ba.SpecularSimulation(scan, sample) if __name__ == '__main__': diff --git a/Examples/specular/TimeOfFlightReflectometry.py b/Examples/specular/TimeOfFlightReflectometry.py index 49260477651..f656a4dac7c 100755 --- a/Examples/specular/TimeOfFlightReflectometry.py +++ b/Examples/specular/TimeOfFlightReflectometry.py @@ -25,10 +25,7 @@ def get_simulation(sample): n = bp.simargs['n'] qzs = np.linspace(0.01, 1, n) # qz-values scan = ba.QzScan(qzs) - simulation = ba.SpecularSimulation() - simulation.setScan(scan) - simulation.setSample(sample) - return simulation + return ba.SpecularSimulation(scan, sample) if __name__ == '__main__': diff --git a/Tests/Unit/Sim/SpecularSimulationTest.cpp b/Tests/Unit/Sim/SpecularSimulationTest.cpp index 6f6e0822854..370f643de33 100644 --- a/Tests/Unit/Sim/SpecularSimulationTest.cpp +++ b/Tests/Unit/Sim/SpecularSimulationTest.cpp @@ -23,7 +23,7 @@ protected: std::unique_ptr<SpecularSimulation> defaultSimulation(); - MultiLayer multilayer; + MultiLayer sample; }; SpecularSimulationTest::SpecularSimulationTest() @@ -36,25 +36,22 @@ SpecularSimulationTest::SpecularSimulationTest() Layer layer1(mat1, 10 * Units::nm); Layer layer2(mat2); - multilayer.addLayer(layer0); - multilayer.addLayer(layer1); - multilayer.addLayer(layer2); + sample.addLayer(layer0); + sample.addLayer(layer1); + sample.addLayer(layer2); } std::unique_ptr<SpecularSimulation> SpecularSimulationTest::defaultSimulation() { - auto result = std::make_unique<SpecularSimulation>(); AlphaScan scan(1.0, FixedBinAxis("axis", 10, 0.0 * Units::deg, 2.0 * Units::deg)); - result->setScan(scan); - result->setSample(multilayer); - return result; + return std::make_unique<SpecularSimulation>(scan, sample); } TEST_F(SpecularSimulationTest, SetAngularScan) { - SpecularSimulation sim; AlphaScan scan(1.0, std::vector<double>{1.0 * Units::deg, 3.0 * Units::deg}); - sim.setScan(scan); + SpecularSimulation sim(scan, sample); + const auto& beam = sim.beam(); EXPECT_EQ(2u, sim.coordinateAxis()->size()); @@ -65,21 +62,8 @@ TEST_F(SpecularSimulationTest, SetAngularScan) EXPECT_EQ(0.0, beam.direction().alpha()); EXPECT_EQ(0.0, beam.direction().phi()); - SpecularSimulation sim2; AlphaScan scan2(1.0, 10, 1.0 * Units::deg, 10.0 * Units::deg); - sim2.setScan(scan2); - EXPECT_EQ(10u, sim2.coordinateAxis()->size()); - EXPECT_EQ(1.0 * Units::deg, sim2.coordinateAxis()->min()); - EXPECT_EQ(10.0 * Units::deg, sim2.coordinateAxis()->max()); - EXPECT_EQ(1.0, beam.wavelength()); - EXPECT_EQ(0.0, beam.direction().alpha()); - EXPECT_EQ(0.0, beam.direction().phi()); - - SpecularSimulation sim3; - AlphaScan scan3(1.0, 10, -1.0 * Units::deg, 2.0 * Units::deg); - EXPECT_FAILED_ASSERT(sim3.setScan(scan3)); - - EXPECT_FAILED_ASSERT(sim2.setScan(scan2)); + SpecularSimulation sim2(scan2, sample); EXPECT_EQ(10u, sim2.coordinateAxis()->size()); EXPECT_EQ(1.0 * Units::deg, sim2.coordinateAxis()->min()); EXPECT_EQ(10.0 * Units::deg, sim2.coordinateAxis()->max()); @@ -87,14 +71,12 @@ TEST_F(SpecularSimulationTest, SetAngularScan) EXPECT_EQ(0.0, beam.direction().alpha()); EXPECT_EQ(0.0, beam.direction().phi()); - SpecularSimulation sim4; AlphaScan scan4(1.0, 10, .0 * Units::deg, 2.0 * Units::deg); + SpecularSimulation sim4(scan4, sample); const auto polarizer_dir = R3({0., 0., 0.876}); const auto analyzer_dir = R3({0., 0., 1.}); sim4.setPolarization(polarizer_dir); sim4.setAnalyzer(analyzer_dir, 0.33, 0.22); - sim4.setScan(scan4); - EXPECT_FAILED_ASSERT(sim4.setScan(scan4)); EXPECT_EQ(.0 * Units::deg, sim4.coordinateAxis()->min()); EXPECT_EQ(2.0 * Units::deg, sim4.coordinateAxis()->max()); @@ -112,10 +94,8 @@ TEST_F(SpecularSimulationTest, SetAngularScan) TEST_F(SpecularSimulationTest, SetQScan) { - SpecularSimulation sim; - QzScan scan(std::vector<double>{1.0, 3.0}); - sim.setScan(scan); + SpecularSimulation sim(scan, sample); const auto& beam = sim.beam(); @@ -130,9 +110,8 @@ TEST_F(SpecularSimulationTest, SetQScan) sim.beam().setIntensity(2.0); EXPECT_EQ(2.0, beam.intensity()); - SpecularSimulation sim2; QzScan scan2(10, 1.0, 10.0); - sim2.setScan(scan2); + SpecularSimulation sim2(scan2, sample); EXPECT_EQ(10u, sim2.coordinateAxis()->size()); EXPECT_EQ(1.0, sim2.coordinateAxis()->min()); EXPECT_EQ(10.0, sim2.coordinateAxis()->max()); @@ -141,13 +120,11 @@ TEST_F(SpecularSimulationTest, SetQScan) EXPECT_EQ(0.0, beam.direction().alpha()); EXPECT_EQ(0.0, beam.direction().phi()); - SpecularSimulation sim3; - QzScan scan3(10, 1.0, 10.0); + SpecularSimulation sim3(scan2, sample); const auto polarizer_dir = R3({0., 0., 0.876}); const auto analyzer_dir = R3({0., 0., 1.}); sim3.setPolarization(polarizer_dir); sim3.setAnalyzer(analyzer_dir, 0.33, 0.22); - sim3.setScan(scan3); EXPECT_EQ(1.0, sim3.coordinateAxis()->min()); EXPECT_EQ(10.0, sim3.coordinateAxis()->max()); diff --git a/Wrap/Python/std_simulations.py b/Wrap/Python/std_simulations.py index 4d92918388a..425868ed269 100644 --- a/Wrap/Python/std_simulations.py +++ b/Wrap/Python/std_simulations.py @@ -9,11 +9,8 @@ def specular(sample, scan_size): """ Returns a standard specular simulation. """ - simulation = ba.SpecularSimulation() scan = ba.AlphaScan(1.54 * angstrom, scan_size, 0, 2 * deg) - simulation.setScan(scan) - simulation.setSample(sample) - return simulation + return ba.SpecularSimulation(scan, sample) def sas(sample, npix): diff --git a/auto/Wrap/doxygenSim.i b/auto/Wrap/doxygenSim.i index 0a233d2465e..b73c4c1c192 100644 --- a/auto/Wrap/doxygenSim.i +++ b/auto/Wrap/doxygenSim.i @@ -1894,6 +1894,9 @@ C++ includes: SpecularSimulation.h %feature("docstring") SpecularSimulation::SpecularSimulation "SpecularSimulation::SpecularSimulation() "; +%feature("docstring") SpecularSimulation::SpecularSimulation "SpecularSimulation::SpecularSimulation(const ISpecularScan &scan, const MultiLayer &sample) +"; + %feature("docstring") SpecularSimulation::~SpecularSimulation "SpecularSimulation::~SpecularSimulation() override "; diff --git a/auto/Wrap/libBornAgainSim.py b/auto/Wrap/libBornAgainSim.py index 8865dfa8f1a..1357e914972 100644 --- a/auto/Wrap/libBornAgainSim.py +++ b/auto/Wrap/libBornAgainSim.py @@ -3688,6 +3688,7 @@ class SpecularSimulation(ISimulation): def __init__(self, *args): r""" __init__(SpecularSimulation self) -> SpecularSimulation + __init__(SpecularSimulation self, ISpecularScan const & scan, MultiLayer const & sample) -> SpecularSimulation __init__(SpecularSimulation self, SpecularSimulation arg2) -> SpecularSimulation SpecularSimulation::SpecularSimulation(SpecularSimulation &&) diff --git a/auto/Wrap/libBornAgainSim_wrap.cpp b/auto/Wrap/libBornAgainSim_wrap.cpp index c0ca4016783..45a09be043c 100644 --- a/auto/Wrap/libBornAgainSim_wrap.cpp +++ b/auto/Wrap/libBornAgainSim_wrap.cpp @@ -38620,6 +38620,41 @@ fail: } +SWIGINTERN PyObject *_wrap_new_SpecularSimulation__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) { + PyObject *resultobj = 0; + ISpecularScan *arg1 = 0 ; + MultiLayer *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + SpecularSimulation *result = 0 ; + + if ((nobjs < 2) || (nobjs > 2)) SWIG_fail; + res1 = SWIG_ConvertPtr(swig_obj[0], &argp1, SWIGTYPE_p_ISpecularScan, 0 | 0); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_SpecularSimulation" "', argument " "1"" of type '" "ISpecularScan const &""'"); + } + if (!argp1) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_SpecularSimulation" "', argument " "1"" of type '" "ISpecularScan const &""'"); + } + arg1 = reinterpret_cast< ISpecularScan * >(argp1); + res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_MultiLayer, 0 | 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_SpecularSimulation" "', argument " "2"" of type '" "MultiLayer const &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_SpecularSimulation" "', argument " "2"" of type '" "MultiLayer const &""'"); + } + arg2 = reinterpret_cast< MultiLayer * >(argp2); + result = (SpecularSimulation *)new SpecularSimulation((ISpecularScan const &)*arg1,(MultiLayer const &)*arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SpecularSimulation, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_delete_SpecularSimulation(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; SpecularSimulation *arg1 = (SpecularSimulation *) 0 ; @@ -38642,7 +38677,7 @@ fail: } -SWIGINTERN PyObject *_wrap_new_SpecularSimulation__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) { +SWIGINTERN PyObject *_wrap_new_SpecularSimulation__SWIG_2(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) { PyObject *resultobj = 0; SpecularSimulation *arg1 = 0 ; void *argp1 = 0 ; @@ -38668,11 +38703,11 @@ fail: SWIGINTERN PyObject *_wrap_new_SpecularSimulation(PyObject *self, PyObject *args) { Py_ssize_t argc; - PyObject *argv[2] = { + PyObject *argv[3] = { 0 }; - if (!(argc = SWIG_Python_UnpackTuple(args, "new_SpecularSimulation", 0, 1, argv))) SWIG_fail; + if (!(argc = SWIG_Python_UnpackTuple(args, "new_SpecularSimulation", 0, 2, argv))) SWIG_fail; --argc; if (argc == 0) { return _wrap_new_SpecularSimulation__SWIG_0(self, argc, argv); @@ -38683,7 +38718,19 @@ SWIGINTERN PyObject *_wrap_new_SpecularSimulation(PyObject *self, PyObject *args int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_SpecularSimulation, SWIG_POINTER_NO_NULL); _v = SWIG_CheckState(res); if (_v) { - return _wrap_new_SpecularSimulation__SWIG_1(self, argc, argv); + return _wrap_new_SpecularSimulation__SWIG_2(self, argc, argv); + } + } + if (argc == 2) { + int _v; + int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_ISpecularScan, SWIG_POINTER_NO_NULL | 0); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_MultiLayer, SWIG_POINTER_NO_NULL | 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_SpecularSimulation__SWIG_1(self, argc, argv); + } } } @@ -38691,6 +38738,7 @@ fail: SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SpecularSimulation'.\n" " Possible C/C++ prototypes are:\n" " SpecularSimulation::SpecularSimulation()\n" + " SpecularSimulation::SpecularSimulation(ISpecularScan const &,MultiLayer const &)\n" " SpecularSimulation::SpecularSimulation(SpecularSimulation &&)\n"); return 0; } @@ -42102,6 +42150,7 @@ static PyMethodDef SwigMethods[] = { ""}, { "new_SpecularSimulation", _wrap_new_SpecularSimulation, METH_VARARGS, "\n" "SpecularSimulation()\n" + "SpecularSimulation(ISpecularScan const & scan, MultiLayer const & sample)\n" "new_SpecularSimulation(SpecularSimulation arg1) -> SpecularSimulation\n" "SpecularSimulation::SpecularSimulation(SpecularSimulation &&)\n" "\n" -- GitLab