.. _program_listing_file_src_pdfs_PDFSegmentDelta.hpp: Program Listing for File PDFSegmentDelta.hpp ============================================ |exhale_lsh| :ref:`Return to documentation for file ` (``src/pdfs/PDFSegmentDelta.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef PDFSEGMENTDELTA_HPP #define PDFSEGMENTDELTA_HPP #include "PDFCommons.hpp" #include "PDFSegment.hpp" #include #include #include namespace pdfs { class PDFSegmentDelta : public PDFSegment { public: // Constructor and destructor PDFSegmentDelta(double sValue) : PDFSegment(sValue, sValue) {} PDFSegmentDelta(std::ifstream& file, FileFormats fmt, double &sMin, double &sMax, double &wgt); PDFSegmentDelta(toml::node_view node, FileFormats fmt, double &sMin, double &sMax, double &wgt); PDFSegmentDelta(const PDFSegmentDelta&) = default; auto operator=(const PDFSegmentDelta&) -> PDFSegmentDelta& = default; PDFSegmentDelta(PDFSegmentDelta&&) = default; auto operator=(PDFSegmentDelta&&) -> PDFSegmentDelta& = default; ~PDFSegmentDelta() override = default; // Evaluation functions [[nodiscard]] auto operator()(double x) const -> double override { (void)x; throw std::runtime_error("PDFSegmentDelta: a delta function cannot be evaluated at a point."); } [[nodiscard]] auto expectationValue(const double a, const double b) const -> double override { if (a > b || a > sMax_ || b < sMin_) { return 0.0; // Invalid range for expectation value calculation } return sMin_; // The expectation value of a delta function is just the value at which it is centered } [[nodiscard]] auto expectationValue() const -> double override { return sMin_; // The expectation value of a delta function is just the value at which it is centered } [[nodiscard]] auto integral(const double a, const double b) const -> double override { if (a <= sMin_ && b >= sMin_) { return 1.0; // The integral of a delta function over a range that includes its center is 1 } return 0.0; // The integral of a delta function over a range that does not include its center is 0 } // Drawing functions [[nodiscard]] auto draw(const double a, const double b) const -> double override { if (a >= b || a > sMax_ || b < sMin_) { return 0.0; // Invalid range for expectation value calculation } return sMin_; // Sampling from a delta function always returns the same value } [[nodiscard]] auto draw() const -> double override { return sMin_; // Sampling from a delta function always returns the same value } // Serialization void toToml(toml::table& tbl) const override; }; } // namespace pdfs #endif // PDFSEGMENTDELTA_HPP