@@ -75,13 +75,7 @@ namespace
7575 density_descriptors_.push_back ( descriptor );
7676 }
7777
78- void add_target_statistics (
79- const geode::TargetStatisticConfig& statistic_descriptor )
80- {
81- targeted_statistics_descriptors_.push_back ( statistic_descriptor );
82- }
83-
84- geode::SimulationContext< geode::Point2D > build () const
78+ [[nodiscard]] geode::SimulationContext< geode::Point2D > build () const
8579 {
8680 geode::SimulationContext< geode::Point2D > context;
8781
@@ -92,7 +86,6 @@ namespace
9286 context.mh_sampler =
9387 std::make_unique< geode::MetropolisHastings< geode::Point2D > >(
9488 *context.model , std::move ( proposal_kernel ) );
95- create_target_statistics ( context );
9689 return context;
9790 }
9891
@@ -131,22 +124,10 @@ namespace
131124 config, *context.object_sets , *context.domain ) );
132125 }
133126
134- void create_target_statistics (
135- geode::SimulationContext< geode::Point2D >& context ) const
136- {
137- context.target_statistics .emplace ( *context.model );
138- for ( const auto & target_stat : targeted_statistics_descriptors_ )
139- {
140- context.target_statistics ->set_target ( target_stat );
141- }
142- }
143-
144127 private:
145128 geode::SpatialDomainConfig< 2 > domain_config_;
146129 std::vector< SetDescription > set_descriptors_;
147130 std::vector< PoissonDensityDescription > density_descriptors_;
148- std::vector< geode::TargetStatisticConfig >
149- targeted_statistics_descriptors_;
150131 };
151132
152133 void test_single_type_poisson ()
@@ -155,14 +136,17 @@ namespace
155136
156137 geode::RandomEngine engine;
157138 engine.set_seed ( " @mh-test-single-POISSON@" );
139+
140+ // NOLINTBEGIN(*-magic-numbers)
158141 std::array< double , 4 > birth_ratio{ 0.1 , 0.5 , 2 ., 4 . };
159142 std::array< double , 4 > change_ratio{ 0 ., 1 ., 1 ., 0 . };
160143
161144 for ( const auto config : geode::Range{ birth_ratio.size () } )
162145 {
163146 PoissonConfig poisson_config;
147+ std::vector< geode::TargetStatisticConfig >
148+ targeted_statistics_descriptors;
164149
165- // NOLINTBEGIN(*-magic-numbers)
166150 poisson_config.add_domain_config ( geode::Point2D{ { 0.0 , 0.0 } },
167151 geode::Point2D{ { 10.0 , 10.0 } }, 0 . );
168152 // --- Set description
@@ -180,10 +164,10 @@ namespace
180164 density_a.object_feature = geode::ObjectInDomainFeatureConfig{};
181165
182166 geode::TargetStatisticConfig stat_a{ " density" , 30.0 , 0.15 };
167+ targeted_statistics_descriptors.push_back ( stat_a );
183168
184169 poisson_config.add_set_descriptor ( set_a );
185170 poisson_config.add_density_descriptor ( density_a );
186- poisson_config.add_target_statistics ( stat_a );
187171
188172 auto context = poisson_config.build ();
189173
@@ -203,8 +187,9 @@ namespace
203187 sim_config.printer = printer_config;
204188
205189 auto statistic_tracker = runner.run ( engine, sim_config );
206- geode::statistics::validate (
207- statistic_tracker, runner.target_statistics () );
190+ geode::TargetStatistics target_stats{ runner.model (),
191+ targeted_statistics_descriptors };
192+ geode::statistics::validate ( statistic_tracker, target_stats );
208193 }
209194 // NOLINTEND(*-magic-numbers)
210195
@@ -218,7 +203,8 @@ namespace
218203 geode::RandomEngine engine;
219204 engine.set_seed ( " @mh-test-POISSON-multi@" );
220205 PoissonConfig poisson_config;
221-
206+ std::vector< geode::TargetStatisticConfig >
207+ targeted_statistics_descriptors;
222208 // NOLINTBEGIN(*-magic-numbers)
223209 poisson_config.add_domain_config ( geode::Point2D{ { 0.0 , 0.0 } },
224210 geode::Point2D{ { 10.0 , 10.0 } }, 0 . );
@@ -236,6 +222,7 @@ namespace
236222 density01.object_feature = geode::ObjectInDomainFeatureConfig{};
237223
238224 geode::TargetStatisticConfig stat01{ " density01" , 10.0 , 0.15 };
225+ targeted_statistics_descriptors.push_back ( stat01 );
239226
240227 PoissonDensityDescription density02;
241228 density02.term_name = " density02" ;
@@ -244,6 +231,7 @@ namespace
244231 density02.object_feature = geode::ObjectInDomainFeatureConfig{};
245232
246233 geode::TargetStatisticConfig stat02{ " density02" , 40.0 , 0.15 };
234+ targeted_statistics_descriptors.push_back ( stat02 );
247235
248236 PoissonDensityDescription density03;
249237 density03.term_name = " density03" ;
@@ -252,6 +240,7 @@ namespace
252240 density03.object_feature = geode::ObjectInDomainFeatureConfig{};
253241
254242 geode::TargetStatisticConfig stat03{ " density03" , 30.0 , 0.15 };
243+ targeted_statistics_descriptors.push_back ( stat03 );
255244
256245 poisson_config.add_set_descriptor ( set01 );
257246 poisson_config.add_set_descriptor ( set02 );
@@ -261,10 +250,6 @@ namespace
261250 poisson_config.add_density_descriptor ( density02 );
262251 poisson_config.add_density_descriptor ( density03 );
263252
264- poisson_config.add_target_statistics ( stat01 );
265- poisson_config.add_target_statistics ( stat02 );
266- poisson_config.add_target_statistics ( stat03 );
267-
268253 geode::SimulationRunner< geode::Point2D > runner (
269254 poisson_config.build () );
270255 // run simulation
@@ -280,8 +265,9 @@ namespace
280265 // NOLINTEND(*-magic-numbers)
281266
282267 auto statistic_tracker = runner.run ( engine, sim_config );
283- geode::statistics::validate (
284- statistic_tracker, runner.target_statistics () );
268+ geode::TargetStatistics target_stats{ runner.model (),
269+ targeted_statistics_descriptors };
270+ geode::statistics::validate ( statistic_tracker, target_stats );
285271
286272 geode::Logger::info ( " --> SUCCESS!" );
287273 }
0 commit comments