@@ -23,7 +23,7 @@ class Distribution {
2323public:
2424 virtual ~Distribution () = default ;
2525 virtual double sample (uint64_t * seed) const = 0;
26-
26+ virtual double get_pdf ( double x) const = 0;
2727 // ! Return integral of distribution
2828 // ! \return Integral of distribution
2929 virtual double integral () const { return 1.0 ; };
@@ -84,6 +84,10 @@ class Discrete : public Distribution {
8484 // ! \param seed Pseudorandom number seed pointer
8585 // ! \return Sampled value
8686 double sample (uint64_t * seed) const override ;
87+ // ! Calculate the probability density function (PDF) at a given value
88+ // ! \param x The value at which to evaluate the PDF
89+ // ! \return The value of the PDF at the given point
90+ double get_pdf (double x) const ;
8791
8892 double integral () const override { return di_.integral (); };
8993
@@ -111,6 +115,7 @@ class Uniform : public Distribution {
111115 // ! \param seed Pseudorandom number seed pointer
112116 // ! \return Sampled value
113117 double sample (uint64_t * seed) const override ;
118+ double get_pdf (double x) const ;
114119
115120 double a () const { return a_; }
116121 double b () const { return b_; }
@@ -135,6 +140,7 @@ class PowerLaw : public Distribution {
135140 // ! \param seed Pseudorandom number seed pointer
136141 // ! \return Sampled value
137142 double sample (uint64_t * seed) const override ;
143+ double get_pdf (double x) const ;
138144
139145 double a () const { return std::pow (offset_, ninv_); }
140146 double b () const { return std::pow (offset_ + span_, ninv_); }
@@ -160,6 +166,7 @@ class Maxwell : public Distribution {
160166 // ! \param seed Pseudorandom number seed pointer
161167 // ! \return Sampled value
162168 double sample (uint64_t * seed) const override ;
169+ double get_pdf (double x) const ;
163170
164171 double theta () const { return theta_; }
165172
@@ -180,6 +187,7 @@ class Watt : public Distribution {
180187 // ! \param seed Pseudorandom number seed pointer
181188 // ! \return Sampled value
182189 double sample (uint64_t * seed) const override ;
190+ double get_pdf (double x) const ;
183191
184192 double a () const { return a_; }
185193 double b () const { return b_; }
@@ -204,6 +212,7 @@ class Normal : public Distribution {
204212 // ! \param seed Pseudorandom number seed pointer
205213 // ! \return Sampled value
206214 double sample (uint64_t * seed) const override ;
215+ double get_pdf (double x) const ;
207216
208217 double mean_value () const { return mean_value_; }
209218 double std_dev () const { return std_dev_; }
@@ -227,8 +236,10 @@ class Tabular : public Distribution {
227236 // ! \param seed Pseudorandom number seed pointer
228237 // ! \return Sampled value
229238 double sample (uint64_t * seed) const override ;
239+ double get_pdf (double x) const ;
230240
231- // properties
241+ // double get_pdf_value(double x,uint64_t* seed) const;
242+ // properties
232243 vector<double >& x () { return x_; }
233244 const vector<double >& x () const { return x_; }
234245 const vector<double >& p () const { return p_; }
@@ -263,6 +274,7 @@ class Equiprobable : public Distribution {
263274 // ! \param seed Pseudorandom number seed pointer
264275 // ! \return Sampled value
265276 double sample (uint64_t * seed) const override ;
277+ double get_pdf (double x) const ;
266278
267279 const vector<double >& x () const { return x_; }
268280
@@ -282,6 +294,7 @@ class Mixture : public Distribution {
282294 // ! \param seed Pseudorandom number seed pointer
283295 // ! \return Sampled value
284296 double sample (uint64_t * seed) const override ;
297+ double get_pdf (double x) const ;
285298
286299 double integral () const override { return integral_; }
287300
0 commit comments