simplify the function to create particles

goal is to leave lots of room for student improvements
in class.

also, introduce missingness in the data
This commit is contained in:
2026-05-15 09:38:04 -05:00
parent 847305ae29
commit b75a427aad

View File

@@ -1,47 +1,46 @@
import random import random
import sys
from particlecloud.stuff import Particle import numpy as np
PARTICLE_FILE_COLUMN_NAMES = [ FILE_COLUMN_NAMES = [
"number", "mass", "vx", "vy", "vz", "px", "py", "pz", "n", "m", "v1", "v2", "v3", "p1", "p2", "p3",
] ]
def make_particles(n=10):
particles = [] def write_data_file(filename, n=20, missing_values=False):
for i in range(n): """Write a csv file with data
particles.append( """
Particle(
mass=random.gauss(mu=3., sigma=0.5), with open(filename, "w") as fp:
velocity=( fp.write(", ".join(FILE_COLUMN_NAMES) + ",\n")
random.gauss(mu=0., sigma=1.5), for i in range(n):
random.gauss(mu=0., sigma=1.5), vals = []
random.gauss(mu=0., sigma=1.5), vals.append(random.gauss(3., 0.5))
), vals.extend(
position=( (
random.gauss(mu=0., sigma=25), random.gauss(0., 25),
random.gauss(mu=0., sigma=25), random.gauss(0., 25),
random.gauss(mu=0., sigma=25), random.gauss(0., 25),
) )
) )
) vals.extend(
return particles (
random.gauss(0., 1.5),
random.gauss(0., 1.5),
def write_particles_file(filename, n=10): random.gauss(0., 1.5),
"""Write a csv file with particle data )
""" )
particles = make_particles(n=n) if missing_values:
with open(filename, "w") as fp: if random.randint(0,10) < 1:
fp.write(", ".join(PARTICLE_FILE_COLUMN_NAMES) + ",\n") idx = random.randint(1, len(vals))
for i, p in enumerate(particles): vals[idx] = np.nan
vals = []
vals.append(p.mass)
vals.extend(p.velocity)
vals.extend(p.position)
line = f"{i}, " + ", ".join(f"{v:7.5f}" for v in vals) + ",\n" line = f"{i}, " + ", ".join(f"{v:7.5f}" for v in vals) + ",\n"
fp.write(line) fp.write(line)
if __name__ == '__main__': if __name__ == '__main__':
write_particles_file("sample_data.csv") missing_values = sys.argv[-1] == '-m'
write_data_file("sample_data.csv", n=20, missing_values=True)