43 const size_t rdet_nbinsx(40), rdet_nbinsy(30);
44 const double rdet_width(20.0), rdet_height(18.0), rdet_distance(1000.0);
137 std::vector<std::vector<double>> points = {{0.0 *
deg, 1.0 *
deg},
362 simulation->getOptions().setIncludeSpecular(
true);
368 const double wavelength = 1.54 *
angstrom;
369 const int number_of_bins = 2000;
370 const double min_angle = 0 *
deg;
371 const double max_angle = 5 *
deg;
375 result->setScan(scan);
376 result->getOptions().setUseAvgMaterials(
true);
382 std::vector<double> qs;
384 const double wavelength_0 = 1.54 *
angstrom;
385 const int number_of_bins = 2000;
386 const double min_angle = 0 *
deg;
387 const double max_angle = 5 *
deg;
388 FixedBinAxis angle_axis(
"axis", number_of_bins, min_angle, max_angle);
391 qs.resize(angle_axis.
size(), 0.0);
392 for (
size_t i = 0, size = qs.size(); i < size; ++i)
393 qs[i] = 4.0 *
M_PI * std::sin(angles[i]) / wavelength_0;
399 result->getOptions().setUseAvgMaterials(
true);
405 const double wavelength = 1.54 *
angstrom;
406 const int number_of_bins = 2000;
407 const double min_angle = 0 *
deg;
408 const double max_angle = 5 *
deg;
409 auto gaussian_ff = std::make_unique<FootprintGauss>(1.0);
420 const double wavelength = 1.54 *
angstrom;
421 const int number_of_bins = 2000;
422 const double min_angle = 0 *
deg;
423 const double max_angle = 5 *
deg;
424 auto square_ff = std::make_unique<FootprintSquare>(1.0);
435 const double wavelength = 1.54 *
angstrom;
436 const int number_of_bins = 20;
437 const size_t n_integration_points = 10;
438 const double min_angle = 0 *
deg;
439 const double max_angle = 5 *
deg;
440 const double wl_stddev = 0.1 *
angstrom;
441 const double ang_stddev = 0.1 *
deg;
445 std::unique_ptr<ScanResolution> wl_res(
449 std::unique_ptr<ScanResolution> ang_res(
468 result->getOptions().setUseAvgMaterials(
true);
477 std::vector<double> resolutions;
478 resolutions.reserve(qs.
size());
480 std::for_each(qs_vector.begin(), qs_vector.end(),
481 [&resolutions](
double q_val) { resolutions.push_back(0.03 * q_val); });
486 result->getOptions().setUseAvgMaterials(
true);
494 simulation->beam().setPolarization({0.0, 1.0, 0.0});
495 simulation->detector().setAnalyzerProperties({0.0, 1.0, 0.0}, 1.0, 0.5);
502 simulation->beam().setPolarization({0.0, 1.0, 0.0});
503 simulation->detector().setAnalyzerProperties({0.0, -1.0, 0.0}, 1.0, 0.5);
510 simulation->beam().setPolarization({0.0, -1.0, 0.0});
511 simulation->detector().setAnalyzerProperties({0.0, 1.0, 0.0}, 1.0, 0.5);
518 simulation->beam().setPolarization({0.0, -1.0, 0.0});
519 simulation->detector().setAnalyzerProperties({0.0, -1.0, 0.0}, 1.0, 0.5);
526 simulation->beam().setPolarization({0.0, 1.0, 0.0});
527 simulation->detector().setAnalyzerProperties({0.0, 1.0, 0.0}, 1.0, 0.5);
534 simulation->beam().setPolarization({0.0, -1.0, 0.0});
535 simulation->detector().setAnalyzerProperties({0.0, -1.0, 0.0}, 1.0, 0.5);
542 simulation->beam().setPolarization({0.0, 1.0, 0.0});
543 simulation->detector().setAnalyzerProperties({0.0, -1.0, 0.0}, 1.0, 0.5);
550 simulation->beam().setPolarization({0.0, -1.0, 0.0});
551 simulation->detector().setAnalyzerProperties({0.0, 1.0, 0.0}, 1.0, 0.5);
562 const int n_alpha(19);
563 const double alpha_min(0 *
deg);
564 const double alpha_max(4 *
deg);
566 const double phi_min(-0.1 *
deg);
567 const double phi_max(0.1 *
deg);
569 result->setDetectorParameters(n_phi, phi_min, phi_max, n_alpha, alpha_min, alpha_max);
571 const int n_scan_points(n_alpha);
572 const double alpha_i_min(alpha_min);
573 const double alpha_i_max(alpha_max);
575 FixedBinAxis alpha_i_axis(
"alpha_i", n_scan_points, alpha_i_min, alpha_i_max);
576 result->setBeamParameters(5 *
angstrom, alpha_i_axis, 0.0);
578 result->beam().setIntensity(1e9);
579 result->getOptions().setIncludeSpecular(
true);
588 const double wavelength = 10 *
angstrom;
589 const size_t n_alpha = 20;
590 const double alpha_min = 0 *
deg;
591 const double alpha_max = 1 *
deg;
592 const size_t n_z = n_alpha;
596 result->setBeamParameters(wavelength, n_alpha, alpha_min, alpha_max);
597 result->setZSpan(n_z, z_min, z_max);
609 result->beam().setIntensity(1e6);
Declares AngularSpecScan class.
Defines class ConstantBackground.
Defines class DepthProbeSimulation.
Defines classes representing one-dimensional distributions.
Defines class GISASSimulation.
Defines class IsGISAXSDetector.
Defines class OffSpecularSimulation.
Defines class ParameterPattern.
Declares QSpecScan class.
Defines classes representing ranged one-dimensional distributions.
Defines class RealParameter.
Defines class RectangularDetector.
Defines class ResolutionFunction2DGaussian.
Defines class SampleBuilderFactory.
Defines scan resolution class.
Defines class SpecularSimulation.
Defines namespace and functions for standard simulations.
Defines some unit conversion factors and other constants in namespace Units.
BasicVector3D< double > kvector_t
Scan type with inclination angles as coordinate values and a unique wavelength.
void setAngleResolution(const ScanResolution &resolution)
Sets angle resolution values via ScanResolution object.
void setFootprintFactor(const IFootprintFactor *f_factor)
Sets footprint correction factor.
void setWavelengthResolution(const ScanResolution &resolution)
Sets wavelength resolution values via ScanResolution object.
An incident neutron or x-ray beam.
void setPolarization(const kvector_t bloch_vector)
Sets the polarization density matrix according to the given Bloch vector.
Class representing a constant background signal.
A direction in three-dimensional space.
Uniform distribution function with half width hwhm.
Gaussian distribution with standard deviation std_dev.
An ellipse, for use in detector masks.
Axis with fixed bin size.
std::vector< double > binCenters() const
size_t size() const
retrieve the number of bins
Main class to run a Grazing-Incidence Small-Angle Scattering simulation.
void setBeamParameters(double wavelength, double alpha_i, double phi_i)
Sets beam parameters from here (forwarded to Instrument)
An infinite horizontal line.
void setAnalyzerProperties(const kvector_t direction, double efficiency, double total_transmission)
Sets the polarization analyzer characteristics of the detector.
void setDetectorParameters(size_t n_phi, double phi_min, double phi_max, size_t n_alpha, double alpha_min, double alpha_max)
Sets spherical detector parameters using angle ranges.
void setRegionOfInterest(double xlow, double ylow, double xup, double yup)
Sets rectangular region of interest with lower left and upper right corners defined.
void maskAll()
Put the mask for all detector channels (i.e. exclude whole detector from the analysis)
void addMask(const IShape2D &shape, bool mask_value=true)
Adds mask of given shape to the stack of detector masks.
void setDetectorResolutionFunction(const IResolutionFunction2D &resolution_function)
void addParameterDistribution(const std::string ¶m_name, const IDistribution1D &distribution, size_t nbr_samples, double sigma_factor=0.0, const RealLimits &limits=RealLimits())
const SimulationOptions & getOptions() const
void setBackground(const IBackground &bg)
A spherical detector used for validation with IsGISAXS results.
Main class to run an off-specular simulation.
Helper class for constructing parameter patterns.
ParameterPattern & beginsWith(std::string start_type)
std::string toStdString() const
ParameterPattern & add(std::string object_type)
A polygon, for use in detector masks.
Scan type with z-components of scattering vector as coordinate values.
void setAbsoluteQResolution(const IRangedDistribution &distr, double std_dev)
void setRelativeQResolution(const IRangedDistribution &distr, double rel_dev)
Gaussian distribution with standard deviation std_dev.
A rectangle, for use in detector masks.
A flat rectangular detector with axes and resolution function.
void setDirectBeamPosition(double u0, double v0)
void setPerpendicularToSampleX(double distance, double u0, double v0)
void setPerpendicularToDirectBeam(double distance, double u0, double v0)
void setPerpendicularToReflectedBeam(double distance, double u0=0.0, double v0=0.0)
void setPosition(const kvector_t normal_to_detector, double u0, double v0, const kvector_t direction=kvector_t(0.0, -1.0, 0.0))
Simple gaussian two-dimensional resolution function.
static ScanResolution * scanAbsoluteResolution(const IRangedDistribution &distr, double stddev)
void setIncludeSpecular(bool include_specular)
void setMonteCarloIntegration(bool flag=true, size_t mc_points=50)
Enables/disables MonetCarlo integration.
Main class to run a specular simulation.
void setScan(const ISpecularScan &scan)
Sets chosen specular scan to the simulation.
A detector with coordinate axes along angles phi and alpha.
An infinite vertical line.
SpecularSimulation * BasicSpecularQPP()
GISASSimulation * RectDetectorPerpToReflectedBeam()
GISAS simulation with the rectangular detector perpendicular to the reflected beam.
GISASSimulation * BasicGISAS00()
Basic GISAS for polarization studies.
GISASSimulation * RectDetectorPerpToDirectBeam()
GISAS simulation with the rectangular detector perpendicular to the direct beam.
SpecularSimulation * BasicSpecularMP()
GISASSimulation * BasicGISAS()
Basic GISAS simulation with the detector phi[0,2], theta[0,2].
GISASSimulation * MiniGISASBeamDivergence()
GISAS simulation with beam divergence applied.
SpecularSimulation * SpecularWithSquareBeam()
GISASSimulation * GISASWithMasks()
GISAS simulation with multiple masks on the detector plane.
GISASSimulation * MiniGISAS()
GISAS simulation with small detector and phi[-2,2], theta[0,2].
SpecularSimulation * BasicSpecularPM()
GISASSimulation * IsGISAXSSimulation1()
Typical IsGISAXS simulation with the detector phi[-1,1], theta[0,2].
GISASSimulation * ExtraLongWavelengthGISAS()
GISAS simulation with an extra long wavelength.
OffSpecularSimulation * MiniOffSpecular()
GISASSimulation * RectDetectorPerpToSample()
GISAS simulation with the rectangular detector perpendicular to the sample.
GISASSimulation * SphericalDetWithRoi()
GISAS simulation with spherical detector, region of interest and mask.
GISASSimulation * MiniGISASPolarizationPM()
SpecularSimulation * TOFRWithRelativeResolution()
GISASSimulation * MiniGISASDetectorResolution()
GISAS simulation with detector resolution.
SpecularSimulation * BasicSpecularQMP()
GISASSimulation * MiniGISASMonteCarlo()
GISAS simulation with Monte-Carlo integration switched ON.
SpecularSimulation * SpecularWithGaussianBeam()
GISASSimulation * MiniGISASPolarizationMM()
GISASSimulation * MiniGISASPolarizationMP()
DepthProbeSimulation * BasicDepthProbe()
GISASSimulation * IsGISAXSSimulation2()
Typical IsGISAXS simulation with the detector phi[0,2], theta[0,2].
GISASSimulation * ConstantBackgroundGISAS()
SpecularSimulation * BasicSpecularQPM()
GISASSimulation * RectDetectorGeneric()
GISAS simulation with generic rectangular detector.
SpecularSimulation * BasicSpecularMM()
GISASSimulation * MiniGISASPolarizationPP()
SpecularSimulation * BasicSpecularPP()
SpecularSimulation * BasicSpecularQ()
GISASSimulation * MaxiGISAS()
GISAS simulation with large detector to test performance.
GISASSimulation * MiniGISAS_v2()
GISAS simulation with small detector and phi[-1,1], theta[0,1].
GISASSimulation * RectDetectorPerpToReflectedBeamDpos()
GISAS simulation with the rectangular detector perpendicular to the reflected beam when the coordinat...
SpecularSimulation * TOFRWithPointwiseResolution()
GISASSimulation * MiniGISASSpecularPeak()
GISAS simulation with small detector and including specular peak.
GISASSimulation * RectDetWithRoi()
GISAS simulation with rectangular detector, region of interest and mask.
GISASSimulation * MiniGISASFit()
ISimulation with fitting.
GISASSimulation * BasicPolarizedGISAS()
Basic GISAS simulation for spin flip channel.
SpecularSimulation * SpecularDivergentBeam()
SpecularSimulation * BasicSpecularQMM()
GISASSimulation * MaxiGISAS00()
Basic GISAS for polarization studies.
SpecularSimulation * BasicSpecular()
static constexpr double deg
static constexpr double nm
static constexpr double angstrom