Lattice Builder Manual
Software Package for Constructing Rank-1 Lattices
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Modules Pages
Other Examples

Examining the Distribution of Merit Values

In this example, we examine the quantiles of the distribution of normalized weighted \(\mathcal P_{2\alpha}\) merit values. The pipeline is setup as in the previous examples, but without using the low-pass filter. Next, we use the Boost Accumulators library to configure a quantile accumulator:

using namespace boost::accumulators;
accumulator_set<Real, features<tag::count, tag::min, tag::max, tag::mean, tag::tail_quantile<left>>>
acc(tag::tail<left>::cache_size = numSamples);
auto meritSeq = latSeqOverCBC.meritSeq(latSeq);
for (const auto& val : meritSeq)
acc(val);

Then, we output the results with:

unsigned int numBins = 20;
printTableRow("# mean:", mean(acc));
printTableRow("prob", "quantile");
printTableRow(0.0, min(acc));
for (unsigned int i = 1; i < numBins; i++) {
double p = double(i) / numBins;
Real q = quantile(acc, quantile_probability = p);
printTableRow(p, q);
}
printTableRow(1.0, max(acc));

The complete code can be found in quantiles.cc and, when launched with the following arguments:

quantiles 256 3 0.7

it outputs:

# mean: 3.46885028e-01
prob    quantile
0.000   1.60698706e-02
0.050   1.64301703e-02
0.100   1.85088223e-02
0.150   1.91739909e-02
0.200   2.17884732e-02
0.250   2.26753647e-02
0.300   2.30818567e-02
0.350   2.70081994e-02
0.400   3.03617579e-02
0.450   3.53505227e-02
0.500   3.89350427e-02
0.550   4.54389138e-02
0.600   4.82196883e-02
0.650   6.27055832e-02
0.700   7.08631375e-02
0.750   9.24164492e-02
0.800   1.12953531e-01
0.850   1.79950795e-01
0.900   2.89334083e-01
0.950   8.67254772e-01
1.000   1.37803954e+01