41 std::function<std::string(
double)> printValueFunc)
43 std::ostringstream result;
44 result << std::setprecision(12);
47 std::vector<double> xpos, ypos;
48 shape->getPoints(xpos, ypos);
49 result <<
indent <<
"points = [";
50 for (
size_t i = 0; i < xpos.size(); ++i) {
51 result <<
"[" << printValueFunc(xpos[i]) <<
", " << printValueFunc(ypos[i]) <<
"]";
52 if (i != xpos.size() - 1)
56 result <<
indent <<
"simulation.addMask("
60 result <<
indent <<
"simulation.maskAll()\n";
62 }
else if (
const Ellipse* shape =
dynamic_cast<const Ellipse*
>(ishape)) {
63 result <<
indent <<
"simulation.addMask(";
64 result <<
"ba.Ellipse(" << printValueFunc(shape->getCenterX()) <<
", "
65 << printValueFunc(shape->getCenterY()) <<
", " << printValueFunc(shape->getRadiusX())
66 <<
", " << printValueFunc(shape->getRadiusY());
67 if (shape->getTheta() != 0.0)
73 result <<
indent <<
"simulation.addMask(";
74 result <<
"ba.Rectangle(" << printValueFunc(shape->getXlow()) <<
", "
75 << printValueFunc(shape->getYlow()) <<
", " << printValueFunc(shape->getXup())
76 <<
", " << printValueFunc(shape->getYup()) <<
"), " <<
pyfmt::printBool(mask_value)
81 result <<
indent <<
"simulation.addMask(";
82 result <<
"ba.VerticalLine(" << printValueFunc(shape->getXpos()) <<
"), "
87 result <<
indent <<
"simulation.addMask(";
88 result <<
"ba.HorizontalLine(" << printValueFunc(shape->getYpos()) <<
"), "
92 throw std::runtime_error(
"representShape2D(const IShape2D*) -> Error. Unknown shape");
108 std::vector<std::string> args;
117 std::ostringstream result;
118 if (
const auto* a =
dynamic_cast<const FixedBinAxis*
>(axis); a)
122 else if (
const auto* a =
dynamic_cast<const PointwiseAxis*
>(axis); a) {
123 result <<
"numpy.asarray([";
124 const std::vector<double>& points = a->binCenters();
125 for (
auto iter = points.begin(); iter != points.end() - 1; ++iter) {
130 throw std::runtime_error(
"printAxis not implemented for current axis type");
139 std::unique_ptr<IDistribution1D> distr(par_distr.
clone());
140 distr->setUnits(units);
142 std::ostringstream result;
143 result <<
"ba." << distr->getName() <<
"(" <<
argumentList(distr.get()) <<
")";
148 const std::string& distVarName,
const std::string& units)
150 std::ostringstream result;
152 result <<
"ba.ParameterDistribution("
154 <<
", " << distVarName <<
", " << par_distr.
getNbrSamples() <<
", "
163 std::ostringstream result;
165 result << distr.
name();
Defines and implements namespace algo with some algorithms.
Defines a few helper functions.
Defines M_PI and some more mathematical constants.
Defines classes representing one-dimensional distributions.
Defines class FixedBinAxis.
Defines class InfinitePlane.
Defines class ParameterDistribution.
Defines class ParameterPool.
Defines class PointwiseAxis.
Defines namespace pyfmt2.
Defines functions in namespace pyfmt.
Defines functions in namespace pyfmt.
Defines classes representing ranged one-dimensional distributions.
Defines class RealParameter.
Defines some unit conversion factors and other constants in namespace Units.
An ellipse, for use in detector masks.
Axis with fixed bin size.
An infinite horizontal line.
Interface for one-dimensional axes.
Interface for one-dimensional distributions.
virtual IDistribution1D * clone() const =0
Manages a local parameter pool, and a tree of child pools.
ParameterPool * parameterPool() const
Returns pointer to the parameter pool.
Interface for one-dimensional ranged distributions.
double sigmaFactor() const
Returns sigma factor to use during sampling.
virtual std::string name() const =0
Returns distribution name for python-formatted text.
RealLimits limits() const
Returns current limits of the distribution.
size_t nSamples() const
Returns number of samples to generate.
Basic class for all shapes in 2D.
The infinite plane is used for masking the entire detector.
A parametric distribution function, for use with any model parameter.
size_t getNbrSamples() const
get number of samples for this distribution
double getSigmaFactor() const
get the sigma factor
RealLimits getLimits() const
std::string getMainParameterName() const
get the main parameter's name
const std::vector< RealParameter * > parameters() const
Returns full vector of parameters.
Axis containing arbitrary (non-equidistant) coordinate values.
A polygon, for use in detector masks.
Wraps a parameter of type double.
double value() const
Returns value of wrapped parameter.
A rectangle, for use in detector masks.
An infinite vertical line.
std::string join(const std::vector< std::string > &joinable, const std::string &joint)
Returns string obtain by joining vector elements.
Utility functions for writing Python code snippets.
std::string printParameterDistribution(const ParameterDistribution &par_distr, const std::string &distVarName, const std::string &units)
std::string printAxis(const IAxis *axis, const std::string &unit)
Prints an axis.
std::string printDistribution(const IDistribution1D &par_distr, const std::string &units)
Prints distribution with constructor parameters in given units.
std::string valueTimesUnit(const RealParameter *par)
Returns parameter value, followed by its unit multiplicator (like "* nm").
std::string argumentList(const IParametricComponent *ip)
Returns comma-separated list of parameter values, including unit multiplicator (like "* nm").
std::string representShape2D(const std::string &indent, const IShape2D *ishape, bool mask_value, std::function< std::string(double)> printValueFunc)
Returns fixed Python code snippet that defines the function "runSimulation".
std::string printRangedDistribution(const IRangedDistribution &distr)
std::string printDegrees(double input)
std::string printDouble(double input)
std::string printBool(double value)
std::string printString(const std::string &value)
std::string indent(size_t width)
Returns a string of blanks with given width.
std::string printRealLimitsArg(const RealLimits &limits, const std::string &units)
Prints RealLimits in the form of argument (in the context of ParameterDistribution and similar).
std::string printValue(double value, const std::string &units)