TerrainGen coverage


terraingen/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
864 / 864
100.0%
Branches:
471 / 471
100.0%
Functions:
57 / 57
100.0%

config/fields/albedo.h
Line Branch Exec Source
1 /// @file
2 /// @brief The JSON fields of the albedo, its sources and its crater layers.
3 #pragma once
4
5 #include "terraingen/config/config.h"
6 #include "terraingen/config/fields/common.h"
7
8 #include <string_view>
9
10 namespace terraingen::config {
11
12 template <> struct SpecName<SyntheticAlbedoSpec> {
13 static constexpr std::string_view kName = "synthetic";
14 static constexpr std::string_view kDescription =
15 "A base colour in hue, saturation and value, each varied by noise: an albedo for terrain "
16 "without data.";
17 };
18 82 template <typename IO> void Fields(IO& io, SyntheticAlbedoSpec& spec) {
19
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 47 times.
82 io("rgb", spec.rgb,
20 "Gives three bands, red, green and blue, from the colour; off gives one band of the value "
21 "alone, ignoring hue and saturation.");
22
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 47 times.
82 io("hue", spec.hue, "Hue of the base colour in degrees, wrapping around; used with rgb only.",
23 "deg");
24
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 47 times.
82 io("saturation", spec.saturation,
25 "Saturation of the base colour, from 0 for grey to 1; used with rgb only.", "",
26 82 UnitInterval());
27
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 47 times.
82 io("value", spec.value,
28 "Reflectance of the brightest band, from 0 to 1; the one band's value without rgb. "
29 "Higher values give a brighter surface.",
30 82 "", UnitInterval());
31
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 47 times.
82 io("hue_noise", spec.hueNoise,
32 "Noise layers, 0 to 8, whose sum in degrees is added to the hue; used with rgb only.");
33
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 47 times.
82 io("saturation_noise", spec.saturationNoise,
34 "Noise layers, 0 to 8, added to the saturation, which is then clamped to [0, 1]; used "
35 "with rgb only.");
36
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SyntheticAlbedoSpec&):
✓ Branch 4 taken 47 times.
82 io("value_noise", spec.valueNoise,
37 "Noise layers, 0 to 8: the value is multiplied by 1 plus their sum and clamped to [0, 1], "
38 "so their amplitude sets the relative contrast.");
39 82 }
40
41 38 template <typename IO> void Fields(IO& io, AlbedoDetail& detail) {
42
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 27 times.
38 io("enabled", detail.enabled,
43 "Adds fractal detail below the map's resolution; off leaves the interpolated map as it "
44 "is.");
45
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 27 times.
38 io("seed", detail.seed,
46 "Seed of the detail noise; changing it gives a different pattern of the same roughness.");
47
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 27 times.
38 io("octaves", detail.octaves,
48 "Octaves of detail, 1 to 16, from half the map's cell size down, each half the wavelength "
49 "of the one before.",
50 38 "", Between(1.0, 16.0));
51
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 27 times.
38 io("scale", detail.scale,
52 "Factor on the RMS of every octave, not negative; 0 adds no detail, higher values give a "
53 "more mottled albedo.",
54 38 "", AtLeast(0.0));
55
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 27 times.
38 io("hurst", detail.hurst,
56 "Hurst exponent, in [0, 1], used instead of the one measured from the map; lower values "
57 "keep more contrast at fine scales. Unset uses the measured one.",
58 38 "", UnitInterval());
59
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::AlbedoDetail&):
✓ Branch 4 taken 27 times.
38 io("fade", detail.fade, "How octaves of detail too fine for the sample spacing fade out.");
60 38 }
61
62 template <> struct SpecName<RasterAlbedoSpec> {
63 static constexpr std::string_view kName = "raster";
64 static constexpr std::string_view kDescription =
65 "Albedo read from one or three bands of a GeoTIFF in the terrain's projection, such as an "
66 "orbital albedo map.";
67 };
68 29 template <typename IO> void Fields(IO& io, RasterAlbedoSpec& spec) {
69
6/6
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RasterAlbedoSpec&):
✓ Branch 2 taken 9 times.
✓ Branch 7 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RasterAlbedoSpec&):
✓ Branch 2 taken 2 times.
✓ Branch 7 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RasterAlbedoSpec&):
✓ Branch 2 taken 18 times.
✓ Branch 7 taken 18 times.
58 io("path", spec.path,
70 29 InputPathHelp("GeoTIFF albedo map in the terrain's projected coordinates"));
71
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 18 times.
29 io("bands", spec.bands,
72 "Bands of the file to read, counting from 0: one for a single albedo band, or three for "
73 "red, green and blue.");
74
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 18 times.
29 io("scale", spec.scale,
75 "Factor each sample is multiplied by, replacing the band's scale from the file's GDAL "
76 "metadata, as for maps stored as integers. Unset keeps the file's.");
77
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 18 times.
29 io("offset", spec.offset,
78 "Added to each scaled sample, replacing the band's offset from the file's GDAL metadata. "
79 "Unset keeps the file's.");
80
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 18 times.
29 io("resampling", spec.options.method,
81 "Interpolation used to sample the map at the terrain's points.");
82
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RasterAlbedoSpec&):
✓ Branch 4 taken 18 times.
29 io("detail", spec.options.detail,
83 "Fractal detail below the map's resolution, continuing the map's own measured roughness "
84 "to finer scales.");
85 29 }
86
87 65 template <typename IO> void Fields(IO& io, ObliqueImpacts& oblique) {
88
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 49 times.
65 io("enabled", oblique.enabled,
89 "Draws an impact angle and direction per crater that shape its rays; off treats every "
90 "impact as vertical.");
91
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 49 times.
65 io("heading", oblique.heading,
92 "Downrange direction of every impact, in radians counter-clockwise from east; unset draws "
93 "a random heading per crater.",
94 "rad");
95
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 49 times.
65 io("asymmetric_degrees", oblique.asymmetricDegrees,
96 "Impact angle from the horizontal, in degrees, below which ejecta leave faster downrange, "
97 "lengthening rays there and shortening them uprange.",
98 65 "deg", Between(0.0, 90.0));
99
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 49 times.
65 io("forbidden_degrees", oblique.forbiddenDegrees,
100 "Impact angle in degrees below which rays within the zone half width of uprange are "
101 "dropped; at most the asymmetric angle.",
102 65 "deg", Between(0.0, 90.0));
103
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 49 times.
65 io("butterfly_degrees", oblique.butterflyDegrees,
104 "Impact angle in degrees below which rays within the zone half width of downrange are "
105 "dropped too, a butterfly pattern; at most the forbidden angle.",
106 65 "deg", Between(0.0, 90.0));
107
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 49 times.
65 io("downrange_speed_ratio", oblique.downrangeSpeedRatio,
108 "Downrange over uprange ejection speed below the asymmetric angle, drawn per crater; at "
109 "least 1, higher values stretch downrange rays more.");
110
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ObliqueImpacts&):
✓ Branch 4 taken 49 times.
65 io("zone_half_width_degrees", oblique.zoneHalfWidthDegrees,
111 "Half width in degrees, 0 to 180, of the ray-free zones uprange and downrange; "
112 "illustrative, as the sources do not measure it.",
113 65 "deg", Between(0.0, 180.0));
114 65 }
115
116 61 template <typename IO> void Fields(IO& io, CraterRays& rays) {
117
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterRays&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterRays&):
✓ Branch 4 taken 40 times.
61 io("enabled", rays.enabled,
118 "Gives craters rays of bright material; off leaves only their interiors and ejecta "
119 "bright.");
120
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterRays&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterRays&):
✓ Branch 4 taken 40 times.
61 io("count", rays.count,
121 "Number of rays of a crater, drawn per crater and rounded; from 0 to 64.");
122
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterRays&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterRays&):
✓ Branch 4 taken 40 times.
61 io("length_coefficient", rays.lengthCoefficient,
123 "Coefficient of the median ray length, coefficient R^exponent km for crater radius R in "
124 "km; higher values give longer rays.",
125 61 "", Above(0.0));
126
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterRays&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterRays&):
✓ Branch 4 taken 40 times.
61 io("length_exponent", rays.lengthExponent,
127 "Exponent of the crater radius in the median ray length, positive; higher values make "
128 "large craters' rays relatively longer.",
129 61 "", Above(0.0));
130
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterRays&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterRays&):
✓ Branch 4 taken 40 times.
61 io("length_spread", rays.lengthSpread,
131 "Natural logarithm of a ray's length over the median, drawn per ray; a wider "
132 "distribution gives more varied lengths.");
133
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterRays&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterRays&):
✓ Branch 4 taken 40 times.
61 io("width_degrees", rays.widthDegrees,
134 "Angle in degrees a ray spans 2 radii from the centre, drawn per ray, within (0, 180); "
135 "beyond 2 radii a ray keeps the width it has there.");
136
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterRays&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterRays&):
✓ Branch 4 taken 40 times.
61 io("excess", rays.excess,
137 "Optical maturity above the background along a ray at the rim, falling linearly to 0 at "
138 "its end; not negative, higher values give brighter rays.",
139 61 "", AtLeast(0.0));
140
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterRays&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterRays&):
✓ Branch 4 taken 40 times.
61 io("patchiness", rays.patchiness,
141 "Share of a ray's strength, from 0 to 1, that noise along it can take away, breaking it "
142 "into patches; 0 gives unbroken rays.",
143 61 "", UnitInterval());
144
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterRays&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterRays&):
✓ Branch 4 taken 40 times.
61 io("patch_radii", rays.patchRadii,
145 "Wavelength of the noise along a ray, in crater radii; positive, smaller values give "
146 "shorter patches.",
147 61 "", Above(0.0));
148
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterRays&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterRays&):
✓ Branch 4 taken 40 times.
61 io("oblique", rays.oblique,
149 "How oblique impacts lengthen rays downrange and clear them uprange.");
150
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterRays&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterRays&):
✓ Branch 4 taken 40 times.
61 io("layout", rays.layout,
151 "Takes the rays' number, directions and widths from this layout in place of count and "
152 "width_degrees, so they lie over a secondaries layer with the same layout; unset draws them "
153 "per crater.");
154 61 }
155
156 56 template <typename IO> void Fields(IO& io, RayRetention& retention) {
157
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RayRetention&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RayRetention&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RayRetention&):
✓ Branch 4 taken 40 times.
56 io("small_diameter", retention.smallDiameter,
158 "Diameter in metres at or below which craters keep their bright material for the small "
159 "time.",
160 56 "m", Above(0.0));
161
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RayRetention&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RayRetention&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RayRetention&):
✓ Branch 4 taken 40 times.
56 io("small_myr", retention.smallMyr,
162 "Time in Myr craters up to the small diameter keep their bright material.", "Myr",
163 56 Above(0.0));
164
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RayRetention&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RayRetention&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RayRetention&):
✓ Branch 4 taken 40 times.
56 io("mid_diameter", retention.midDiameter,
165 "Diameter in metres from which craters keep their bright material for the mid time; "
166 "between the small and mid diameters the time follows a power law of diameter.",
167 56 "m", Above(0.0));
168
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RayRetention&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RayRetention&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RayRetention&):
✓ Branch 4 taken 40 times.
56 io("mid_myr", retention.midMyr,
169 "Time in Myr craters from the mid to the large diameter keep their bright material.", "Myr",
170 56 Above(0.0));
171
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RayRetention&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RayRetention&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RayRetention&):
✓ Branch 4 taken 40 times.
56 io("large_diameter", retention.largeDiameter,
172 "Diameter in metres above which craters keep their bright material for the large time.", "m",
173 56 Above(0.0));
174
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RayRetention&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RayRetention&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RayRetention&):
✓ Branch 4 taken 40 times.
56 io("large_myr", retention.largeMyr,
175 "Time in Myr craters above the large diameter keep their bright material.", "Myr",
176 56 Above(0.0));
177
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RayRetention&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RayRetention&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RayRetention&):
✓ Branch 4 taken 40 times.
56 io("scale", retention.scale,
178 "Factor every retention time is multiplied by, positive; higher values keep craters "
179 "bright for longer.",
180 56 "", Above(0.0));
181 56 }
182
183 57 template <typename IO> void Fields(IO& io, CraterAlbedoTexture& texture) {
184
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 40 times.
57 io("streaks", texture.streaks,
185 "Share of the excess radial streaks take away between filaments, from 0 to 1, breaking "
186 "ejecta, rays and interiors into fine streaks; 0 leaves them smooth.",
187 57 "", UnitInterval());
188
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 40 times.
57 io("streak_width_degrees", texture.streakWidthDegrees,
189 57 "Typical width of a filament around the crater, in degrees.", "deg", Above(0.0));
190
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 40 times.
57 io("streak_length_radii", texture.streakLengthRadii,
191 57 "Typical length of a filament outward from the crater, in crater radii.", "", Above(0.0));
192
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 40 times.
57 io("continuous_radii", texture.continuousRadii,
193 "How far beyond the rim the ejecta stay continuous before breaking into filaments, in "
194 "crater radii; 0 streaks them from the rim.",
195 57 "", AtLeast(0.0));
196
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 40 times.
57 io("lobes", texture.lobes,
197 "How far the ejecta's edge wanders in and out, as a share of its reach from 0 to 0.9; 0 "
198 "keeps it circular.",
199 57 "", Between(0.0, 0.9));
200
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 40 times.
57 io("lobe_count", texture.lobeCount, "Typical number of lobes around a crater, 1 to 64.", "",
201 57 Between(1.0, 64.0));
202
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 40 times.
57 io("floor_share", texture.floorShare,
203 "Interior excess on the floor over that at the rim, from 0 to 1; 1 keeps the interior "
204 "even, lower values brighten the walls over the floor.",
205 57 "", UnitInterval());
206
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoTexture&):
✓ Branch 4 taken 40 times.
57 io("seed", texture.seed, "Varies every crater's texture.");
207 57 }
208
209 229 template <typename IO> void Fields(IO& io, ReflectanceZone& zone) {
210
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ReflectanceZone&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ReflectanceZone&):
✓ Branch 5 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ReflectanceZone&):
✓ Branch 5 taken 196 times.
229 io("share", zone.share, "Share of craters, from 0 to 1, with the zone.", "", UnitInterval());
211
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 196 times.
229 io("change", zone.change,
212 "Reflectance change relative to the pre-impact surface, drawn per crater; above -1, "
213 "negative values darken.");
214
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 196 times.
229 io("coefficient", zone.coefficient,
215 "Coefficient of the zone's reach from the crater's centre, coefficient D^exponent metres "
216 "for diameter D in metres; positive.",
217 229 "m", Above(0.0));
218
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 196 times.
229 io("exponent", zone.exponent, "Exponent of the diameter in the zone's reach; positive.", "",
219 229 Above(0.0));
220
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 196 times.
229 io("scale", zone.scale,
221 "Factor on the reach, drawn per crater; positive and bounded, a wider distribution gives "
222 "more varied zones.");
223
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 196 times.
229 io("raggedness", zone.raggedness,
224 "Share of the reach, from 0 up to 1, that fingers of the edge pull in by; 0 keeps the "
225 "zone round, higher values make it ray-like.",
226 229 "", FromBelow(0.0, 1.0));
227
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 196 times.
229 io("finger_width_degrees", zone.fingerWidthDegrees,
228 229 "Typical width of the edge's fingers around the crater, in degrees.", "deg", Above(0.0));
229
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 196 times.
229 io("feather", zone.feather,
230 "Share of the reach, from 0 to 1 excluding 0, over which the zone fades out at its edge.",
231 229 "", AboveUpTo(0.0, 1.0));
232
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ReflectanceZone&):
✓ Branch 4 taken 196 times.
229 io("retention_myr", zone.retentionMyr,
233 "How long the zone lasts, in Myr, fading like the bright material; unset lasts as long as "
234 "the bright material.",
235 229 "Myr", Above(0.0));
236 229 }
237
238 65 template <typename IO> void Fields(IO& io, ZoneShadows& shadows) {
239
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ZoneShadows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ZoneShadows&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ZoneShadows&):
✓ Branch 4 taken 49 times.
65 io("enabled", shadows.enabled,
240 "Gives the distal zones shadows behind rises such as crater rims, read from the terrain's "
241 "heights; off by default.");
242
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ZoneShadows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ZoneShadows&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ZoneShadows&):
✓ Branch 4 taken 49 times.
65 io("jet_angle_degrees", shadows.jetAngleDegrees,
243 "Steepest angle in degrees, between 0 and 90 excluded, at which the jet forming the distal "
244 "zones can drop behind a rise; lower values give longer shadows. Illustrative.",
245 65 "deg", Inside(0.0, 90.0));
246
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ZoneShadows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ZoneShadows&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ZoneShadows&):
✓ Branch 4 taken 49 times.
65 io("depth", shadows.depth,
247 "Depth in metres of the ground below the jet at which the shadow is full; positive. "
248 "Illustrative.",
249 65 "m", Above(0.0));
250
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ZoneShadows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ZoneShadows&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ZoneShadows&):
✓ Branch 4 taken 49 times.
65 io("azimuths", shadows.azimuths, "Rays around a crater the ground is sampled on, 8 to 8192.",
251 65 "", Between(8.0, 8192.0));
252
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ZoneShadows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ZoneShadows&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ZoneShadows&):
✓ Branch 4 taken 49 times.
65 io("radial_samples", shadows.radialSamples,
253 "Samples along each ray out to the distal zones' reach, 8 to 8192.", "",
254 65 Between(8.0, 8192.0));
255 65 }
256
257 56 template <typename IO> void Fields(IO& io, CraterReflectanceZones& zones) {
258
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 40 times.
56 io("enabled", zones.enabled,
259 "Gives new small craters the reflectance zones of LROC temporal pairs; off by default.");
260
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 40 times.
56 io("max_diameter", zones.maxDiameter,
261 "Largest crater diameter, in metres, with zones; the published fits stop near 43 m.", "m",
262 56 Above(0.0));
263
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 40 times.
56 io("mature_depth", zones.matureDepth,
264 "Depth in metres of mature regolith; only craters excavating deeper get the proximal "
265 "high reflectance zone.",
266 56 "m", AtLeast(0.0));
267
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 40 times.
56 io("excavation_ratio", zones.excavationRatio,
268 56 "Excavation depth over crater diameter; positive.", "", Above(0.0));
269
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 40 times.
56 io("proximal_high", zones.proximalHigh,
270 "Proximal high reflectance zone: immature ejecta, +12% to a median 1.5 D.");
271
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 40 times.
56 io("proximal_low", zones.proximalLow,
272 "Proximal low reflectance zone: -9% to a median 2.9 D, around nearly every crater.");
273
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 40 times.
56 io("distal_high", zones.distalHigh,
274 "Distal high reflectance zone: +1% to +4% to 0.52 D^2.5 m, around 24% of craters.");
275
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 40 times.
56 io("distal_low", zones.distalLow,
276 "Distal low reflectance zone: -2% to -6%, ray-like, to 5.03 D^2 m, around 84% of "
277 "craters.");
278
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 40 times.
56 io("shadows", zones.shadows, "Shadows of rises in the distal zones; off by default.");
279
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterReflectanceZones&):
✓ Branch 4 taken 40 times.
56 io("seed", zones.seed, "Varies every crater's zones.");
280 56 }
281
282 54 template <typename IO> void Fields(IO& io, CraterAlbedoOptions& options) {
283
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("seed", options.seed,
284 "Seed of which craters get bright material, their rays and their impacts; changing it "
285 "gives a different pattern of the same statistics.");
286 54 CraterSelection& selection = options.selection;
287
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("min_diameter", selection.minDiameter,
288 54 "Smallest diameter, in metres, of craters given bright material.", "m", AtLeast(0.0));
289
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 5 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 5 taken 31 times.
54 OptionalBound(io, "max_diameter", selection.maxDiameter,
290 "Largest diameter, in metres, of craters given bright material; unset has no "
291 "upper limit.",
292 54 "m", std::numeric_limits<double>::infinity(), AtLeast(0.0));
293
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("min_age_gyr", selection.minAgeGyr,
294 54 "Youngest age, in Gyr, of craters given bright material.", "Gyr", AtLeast(0.0));
295
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 5 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 5 taken 31 times.
54 OptionalBound(io, "max_age_gyr", selection.maxAgeGyr,
296 "Oldest age, in Gyr, of craters given bright material; unset has no upper limit.",
297 54 "Gyr", std::numeric_limits<double>::infinity(), AtLeast(0.0));
298
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("manual", selection.manual,
299 "Gives manual craters bright material too; otherwise only generated craters have it.");
300
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("share", options.share, "Share of eligible craters, from 0 to 1, given bright material.", "",
301 54 UnitInterval());
302
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("background_maturity", options.backgroundMaturity,
303 "Optical maturity (OMAT) of the ground around the craters, positive; the excesses are "
304 "added to it and the albedo is brightened from it.",
305 54 "", Above(0.0));
306
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("max_maturity", options.maxMaturity,
307 "Cap on the optical maturity where craters' excesses add up, at least the background; it "
308 "limits how bright overlapping craters get.");
309
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("interior_excess", options.interiorExcess,
310 "Optical maturity above the background inside a fresh crater's rim, not negative; higher "
311 "values give brighter interiors.",
312 54 "", AtLeast(0.0));
313
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("texture", options.texture,
314 "Filaments, lobed ejecta edges and walls brighter than floors; off unless streaks, lobes "
315 "or a floor share below 1 are set.");
316
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("zones", options.zones,
317 "Bright and dark reflectance zones around new small craters, after Robinson et al. "
318 "(2015) and Speyerer et al. (2016); off by default.");
319
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("ejecta_excess", options.ejectaExcess,
320 "Optical maturity above the background on a fresh crater's continuous ejecta at the rim, "
321 "not negative, falling with distance.",
322 54 "", AtLeast(0.0));
323
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("ejecta_exponent", options.ejectaExponent,
324 "Exponent of the ejecta's fall with distance r, as (r / R)^-exponent for crater radius R; "
325 "positive, higher values keep the bright ejecta nearer the rim.",
326 54 "", Above(0.0));
327
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("ejecta_reach_radii", options.ejectaReachRadii,
328 "Distance from the centre, in crater radii and over 1, at which the ejecta's excess "
329 "reaches 0.",
330 54 "", Above(1.0));
331
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
54 io("rays", options.rays, "Rays of bright material running out from the craters.");
332
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
53 io("retention", options.retention,
333 "How long craters of each diameter keep their bright material.");
334
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
53 io("fade_exponent", options.fadeExponent,
335 "Exponent of the fade with age t, max(0, 1 - t / T)^exponent for retention time T; "
336 "positive, 1 is a straight fade and higher values fade sooner.",
337 53 "", Above(0.0));
338
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
53 io("origin_reflectance", options.originReflectance,
339 "Reflectance of the optical maturity origin, the hypermature end-member, from which "
340 "reflectance scales with maturity at fixed iron content.");
341
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoOptions&):
✓ Branch 4 taken 31 times.
53 io("fade", options.fade,
342 "How bright material of craters too small to resolve at the sample spacing fades out.");
343 53 }
344
345 template <> struct SpecName<CraterAlbedoSpec> {
346 static constexpr std::string_view kName = "craters";
347 static constexpr std::string_view kDescription =
348 "Bright ejecta, interiors and rays of the craters of a crater layer, fading with crater "
349 "age.";
350 };
351 54 template <typename IO> void Fields(IO& io, CraterAlbedoSpec& spec) {
352
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterAlbedoSpec&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterAlbedoSpec&):
✓ Branch 4 taken 31 times.
54 io("crater_layer", spec.craterLayer,
353 "Which top-level crater layer's craters to brighten, counting from 0; unset uses every "
354 "top-level crater layer.");
355 54 Fields(io, spec.options);
356 53 }
357
358 41 template <typename IO> void Fields(IO& io, SplotchSwarms& swarms) {
359
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("enabled", swarms.enabled,
360 "Gives new craters swarms of splotches, their ejecta's secondaries (Robinson et al. "
361 "2015); off by default.");
362
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("crater_rate", swarms.craterRate,
363 "New craters at least 10 m across per km^2 per year; 4.84e-6 from Speyerer et al. (2016).",
364 41 "", Above(0.0));
365
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("crater_slope", swarms.craterSlope,
366 "Cumulative size slope of the new craters; the Neukum production function has 2.97 to "
367 "3.15.",
368 41 "", Above(0.0));
369
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("min_crater_diameter", swarms.minCraterDiameter,
370 "Smallest crater with a swarm, in metres; smaller craters throw few splotches.", "m",
371 41 Above(0.0));
372
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("max_crater_diameter", swarms.maxCraterDiameter, "Largest crater with a swarm, in metres.",
373 41 "m", Above(0.0));
374
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("reference_diameter", swarms.referenceDiameter,
375 "Diameter in metres of the crater whose swarm was counted: 18.8 m, Robinson et al.", "m",
376 41 Above(0.0));
377
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("reference_count", swarms.referenceCount,
378 41 "Splotches of the reference crater: 248 within 30 km, Robinson et al.", "", Above(0.0));
379
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("mu", swarms.mu,
380 "Velocity exponent of the target, between 0 and 1; 0.41 for sand (Housen and Holsapple "
381 "2011). Counts grow as D^(3 + 1.5 mu) and landing distances fall as r^(-1.5 mu).",
382 41 "", Inside(0.0, 1.0));
383
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("min_range", swarms.minRange,
384 "Nearest landing distance in metres, setting Robinson et al.'s median of 8.7 km.", "m",
385 41 Above(0.0));
386
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 5 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 5 taken 28 times.
41 io("max_range", swarms.maxRange, "Farthest landing distance in metres.", "m", Above(0.0));
387
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("splotch_diameter", swarms.splotchDiameter,
388 "Diameter of a swarm splotch in metres, drawn per splotch: 2 to 22 m, median 6 m.");
389
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("dark_share", swarms.darkShare, "Share of swarm splotches darker than the ground.", "",
390 41 UnitInterval());
391
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("bright_share", swarms.brightShare, "Share brighter than the ground; the rest are mixed.",
392 41 "", UnitInterval());
393
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("dark_change", swarms.darkChange, "Reflectance change of a dark swarm splotch.");
394
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("bright_change", swarms.brightChange, "Reflectance change of a bright swarm splotch.");
395
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("wedge_share", swarms.wedgeShare,
396 "Share of swarm splotches shaped as wedges pointing back to their crater. Illustrative.", "",
397 41 UnitInterval());
398
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("wedge_elongation", swarms.wedgeElongation,
399 41 "Long over short axis of a wedge, at least 1. Illustrative.", "", AtLeast(1.0));
400
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchSwarms&):
✓ Branch 4 taken 28 times.
41 io("craters", swarms.craters,
401 "New craters given by hand, such as an observed impact, each throwing a swarm.");
402 41 }
403
404 template <> struct SpecName<SplotchAlbedoSpec> {
405 static constexpr std::string_view kName = "splotches";
406 static constexpr std::string_view kDescription =
407 "Dark and bright splotches that secondary impacts of loose regolith leave over the whole "
408 "surface, after Speyerer et al. (2016).";
409 };
410 32 template <typename IO> void Fields(IO& io, SplotchAlbedoSpec& spec) {
411 32 SplotchOptions& options = spec.options;
412
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("seed", options.seed, "Seed of where splotches fall and what they are.");
413
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("rate_coefficient", options.rateCoefficient,
414 "Coefficient a of the cumulative formation rate a d^-b per km^2 per year, d the diameter "
415 "in km; positive, higher values give more splotches.",
416 32 "", Above(0.0));
417
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("rate_exponent", options.rateExponent,
418 "Slope b of the cumulative formation rate; positive, higher values give relatively more "
419 "small splotches.",
420 32 "", Above(0.0));
421
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("lifetime_myr", options.lifetimeMyr,
422 "How long a splotch lasts in Myr, fading linearly; positive, the default is the time "
423 "splotches take to churn the top centimetres.",
424 32 "Myr", Above(0.0));
425
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("min_diameter", options.minDiameter,
426 "Smallest splotch diameter in metres; the published fit is extrapolated below 10 m.", "m",
427 32 Above(0.0));
428
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("max_diameter", options.maxDiameter,
429 32 "Largest splotch diameter in metres, above the smallest.", "m", Above(0.0));
430
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("dark_share", options.darkShare, "Share of splotches, from 0 to 1, darker than the ground.",
431 32 "", UnitInterval());
432
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("bright_share", options.brightShare,
433 "Share of splotches, from 0 to 1, brighter than the ground; the rest are mixed, dark on "
434 "one side and bright on the other.",
435 32 "", UnitInterval());
436
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("dark_change", options.darkChange,
437 "Reflectance change of a dark splotch relative to the ground before it, drawn per "
438 "splotch; above -1.");
439
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("bright_change", options.brightChange,
440 "Reflectance change of a bright splotch, drawn per splotch; above -1.");
441
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("steep_bright_share", options.steepBrightShare,
442 "Share of splotches on slopes steeper than the steep slope that are bright, from 0 to 1, "
443 "read from the terrain's heights; unset keeps the bright share. Bright splotches are "
444 "found mostly on such slopes, but the source gives no share.",
445 32 "", UnitInterval());
446
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("steep_slope_degrees", options.steepSlopeDegrees,
447 "Slope in degrees, between 0 and 90 excluded, from which ground is steep.", "deg",
448 32 Inside(0.0, 90.0));
449
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("softness", options.softness,
450 "Share of a splotch's radius, from 0 to 1 excluding 0, over which its edge fades.", "",
451 32 AboveUpTo(0.0, 1.0));
452
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("raggedness", options.raggedness,
453 "Share of a splotch's radius, from 0 up to 1, that lobes of its edge pull in by; 0 keeps "
454 "it round.",
455 32 "", FromBelow(0.0, 1.0));
456
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("fade", options.fade, "How splotches too small to resolve at the sample spacing fade out.");
457
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SplotchAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("swarms", options.swarms, "Swarms of splotches around new craters; off by default.");
458 32 }
459
460 23 template <typename IO> void Fields(IO& io, BlastZone& zone) {
461
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("x", zone.x, "Surface x of the lander.");
462
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("y", zone.y, "Surface y of the lander.");
463
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("area", zone.area,
464 "Area of the blast zone in m^2; measured: Apollo 18,725 to 53,872 (mean 28,785), Luna 987 "
465 "to 3355 (mean 2100), Surveyor 131 to 279 (mean 215), Chang'e-3 2530.",
466 23 "m^2", Above(0.0));
467
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("elongation", zone.elongation,
468 "Long over short axis of the zone, at least 1; Apollo about 1.14, Chang'e-3 about 1.74.", "",
469 23 AtLeast(1.0));
470
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("heading_degrees", zone.headingDegrees,
471 "Direction of the long axis, degrees counter-clockwise from east, such as along the "
472 "final approach.",
473 "deg");
474
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("change", zone.change,
475 "Mean reflectance change over the zone relative to undisturbed ground at 30 degrees phase, "
476 "above -1; measured +3.4% to +13.2%, Apollo mean +10.9%.",
477 23 "", Above(-1.0));
478
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("halo_change", zone.haloChange,
479 "Reflectance change of the fainter halo beyond the zone, above -1; +4% at Chang'e-3.", "",
480 23 Above(-1.0));
481
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("halo_reach", zone.haloReach,
482 "How far the halo reaches over the zone's own reach, at least 1; 1 for no halo.", "",
483 23 AtLeast(1.0));
484
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("core_radius", zone.coreRadius,
485 "Radius in metres of the darker core beneath the engine and around the crew's tracks; 0 "
486 "for none, a few metres at the Apollo sites.",
487 23 "m", AtLeast(0.0));
488
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("core_change", zone.coreChange,
489 "Reflectance change of the dark core, above -1; -15% to -30% at the Apollo sites.", "",
490 23 Above(-1.0));
491
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("raggedness", zone.raggedness,
492 "Share of the zone's radius, from 0 up to 1, that lobes of its edge pull in by.", "",
493 23 FromBelow(0.0, 1.0));
494
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZone&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZone&):
✓ Branch 4 taken 3 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZone&):
✓ Branch 4 taken 11 times.
23 io("seed", zone.seed, "Varies the edge's lobes.");
495 23 }
496
497 template <> struct SpecName<BlastZoneAlbedoSpec> {
498 static constexpr std::string_view kName = "blast_zones";
499 static constexpr std::string_view kDescription =
500 "Brighter zones of regolith around landers scoured by their descent engines, after Clegg "
501 "et al. (2014) and Clegg-Watkins et al. (2016).";
502 };
503 32 template <typename IO> void Fields(IO& io, BlastZoneAlbedoSpec& spec) {
504
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BlastZoneAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BlastZoneAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BlastZoneAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("zones", spec.zones, "One blast zone per lander.");
505 32 }
506
507 template <> struct SpecName<RockAlbedoSpec> {
508 static constexpr std::string_view kName = "rocks";
509 static constexpr std::string_view kDescription =
510 "Rock brighter than the regolith: the boulders of boulder layers where resolved, and a "
511 "speckle of the share of each sample covered by those too small to resolve.";
512 };
513 32 template <typename IO> void Fields(IO& io, RockAlbedoSpec& spec) {
514
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("boulder_layer", spec.boulderLayer,
515 "Which top-level boulder layer's rock to brighten, counting from 0; unset uses every "
516 "top-level boulder layer.");
517
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("seed", spec.options.seed, "Seed of the per-sample draws of rock too small to resolve.");
518
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("reflectance_ratio", spec.options.reflectanceRatio,
519 "Rock reflectance over the regolith's; 2.5 after Marshal et al. (2023), within Holt's "
520 "(1981) Apollo 16 rocks at 18 to 51% against soils of 14 to 15%; earlier models used 1.5.",
521 32 "", Above(0.0));
522
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RockAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("unresolved", spec.options.unresolved,
523 "Brightens each sample by the share of it covered by boulders too small to resolve, drawn "
524 "about the expected share with the scatter of randomly placed rocks: bright speckle.");
525 32 }
526
527 template <> struct SpecName<SlopeAlbedoSpec> {
528 static constexpr std::string_view kName = "slopes";
529 static constexpr std::string_view kDescription =
530 "Steep ground kept immature and bright by regolith moving downslope, after Ikeda et al. "
531 "(2022) and Lucey et al. (2014).";
532 };
533 32 template <typename IO> void Fields(IO& io, SlopeAlbedoSpec& spec) {
534 32 SlopeMaturityOptions& options = spec.options;
535
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("onset_degrees", options.onsetDegrees,
536 "Slope in degrees from which ground freshens; 20, where Lucey et al. (2014) and Ikeda et "
537 "al. (2022) find brightening begin.",
538 32 "deg", FromBelow(0.0, 90.0));
539
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("maturity_per_degree", options.maturityPerDegree,
540 "Optical maturity (OMAT) gained per degree beyond the onset; about 0.0065 on the crater "
541 "walls of Ikeda et al. (2022).",
542 32 "", AtLeast(0.0));
543
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("background_maturity", options.backgroundMaturity,
544 "OMAT of gentler ground; about 0.10 at 20 degrees in Laue (Ikeda et al. 2022).", "",
545 32 Above(0.0));
546
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("max_maturity", options.maxMaturity, "Cap on OMAT, at least the background's.", "",
547 32 Above(0.0));
548
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("baseline", options.baseline,
549 "Metres slopes are measured over, the spacing of the lattice they are read on; 10, the "
550 "DTM Ikeda et al. (2022) measured slopes on.",
551 32 "m", Above(0.0));
552
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SlopeAlbedoSpec&):
✓ Branch 4 taken 19 times.
32 io("origin_reflectance", options.originReflectance,
553 "Reflectance of the optical maturity origin, from which reflectance scales with maturity "
554 "at fixed iron content.");
555 32 }
556
557 61 template <typename IO> void Fields(IO& io, AlbedoSpec& spec) {
558
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::AlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::AlbedoSpec&):
✓ Branch 4 taken 29 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::AlbedoSpec&):
✓ Branch 4 taken 22 times.
61 io("source", spec.source,
559 "Base albedo of the terrain, before its layers: a synthetic colour or a raster map.");
560
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::AlbedoSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::AlbedoSpec&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::AlbedoSpec&):
✓ Branch 4 taken 22 times.
60 io("layers", spec.layers,
561 "Layers applied to the source's albedo in order, such as bright crater ejecta and rays.");
562 59 }
563
564 } // namespace terraingen::config
565