Try out surface_probability measurement
This commit is contained in:
+37
-1
@@ -2,11 +2,13 @@
|
||||
#![feature(generic_const_exprs)]
|
||||
#![feature(let_chains)]
|
||||
|
||||
use std::ops::Deref;
|
||||
use clap::Parser;
|
||||
use rand::prelude::*;
|
||||
use crate::cli::{drive_system};
|
||||
use crate::cli::cli::{StickProbabilityCli, InitialCli, BallsCli, PCM, ModelCli};
|
||||
use crate::cli::cli::{StickProbabilityCli, InitialCli, BallsCli, PCM, ModelCli, SurfaceProbabilityMeasureCli};
|
||||
use crate::cli::output::write;
|
||||
use crate::surface_probability_measure::{LoggerSticker, ReadOnlyVectorStorage};
|
||||
use crate::system::model::DLASystem;
|
||||
use crate::system::spaces::continuous::{ContinuousSticker, ContinuousStorage, ContinuousWalker};
|
||||
use crate::system::spaces::hexagonal::HexPosition;
|
||||
@@ -95,5 +97,39 @@ fn main() {
|
||||
drive_system(&mut sys, cli.max_frames, cli.notify_every);
|
||||
write(&sys, cli.format, &cli.output);
|
||||
}
|
||||
|
||||
PCM::SurfaceProbabilityMeasure(SurfaceProbabilityMeasureCli { grid_size, stick_probability, particles, initial_data }) => {
|
||||
let logger_sticker = LoggerSticker::new(stick_probability);
|
||||
|
||||
let mut sys = DLASystem::new(
|
||||
SmallRng::seed_from_u64(cli.seed),
|
||||
ReadOnlyVectorStorage::new(&initial_data, grid_size),
|
||||
LocalRandomWalker,
|
||||
UniformSpawner,
|
||||
&logger_sticker,
|
||||
cli.max_particles,
|
||||
);
|
||||
|
||||
let particles = particles as usize;
|
||||
|
||||
while sys.running && logger_sticker.stick_positions.borrow().len() < particles {
|
||||
sys.update();
|
||||
}
|
||||
|
||||
let mut writer = csv::Writer::from_path(cli.output)
|
||||
.expect("Failed to open output path");
|
||||
|
||||
let stick_positions = logger_sticker.stick_positions.borrow();
|
||||
|
||||
stick_positions
|
||||
.iter()
|
||||
.for_each(|pos|
|
||||
writer.serialize(pos)
|
||||
.expect("Failed to write position")
|
||||
);
|
||||
|
||||
writer.flush()
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user