1
0
Fork 0
mirror of https://github.com/Findus23/collision-analyisis-and-interpolation.git synced 2024-09-19 15:13:50 +02:00
collision-analyisis-and-int.../simulation_list.py

82 lines
2.3 KiB
Python
Raw Normal View History

2019-02-12 18:56:05 +01:00
import json
2019-09-11 11:32:18 +02:00
import os
2019-02-12 18:56:05 +01:00
import pickle
2019-02-13 12:53:17 +01:00
from typing import List
2019-02-12 18:56:05 +01:00
2019-03-04 19:33:16 +01:00
import numpy as np
2019-08-21 12:54:27 +02:00
from config import water_fraction
2019-02-12 18:56:05 +01:00
from simulation import Simulation
class SimulationList:
2019-02-13 12:53:17 +01:00
simlist: List[Simulation]
2019-02-12 18:56:05 +01:00
def __init__(self, simlist: list = None):
if simlist is None:
self.simlist = []
else:
self.simlist = simlist
def append(self, value: Simulation):
self.simlist.append(value)
2019-09-11 11:32:18 +02:00
def save_path(self, extension):
script_dir = os.path.dirname(__file__)
rel_path = "save" + extension
return os.path.join(script_dir, rel_path)
def pickle_save(self):
with open(self.save_path(".pickle"), 'wb') as file:
2019-02-12 18:56:05 +01:00
pickle.dump(self.simlist, file)
@classmethod
2019-09-11 11:32:18 +02:00
def pickle_load(cls):
tmp = cls()
with open(cls.save_path(tmp, ".pickle"), 'rb') as file:
2019-02-12 18:56:05 +01:00
return cls(pickle.load(file))
2019-09-11 11:32:18 +02:00
def jsonlines_save(self):
with open(self.save_path(".jsonl"), 'w') as file:
2019-02-12 18:56:05 +01:00
for sim in self.simlist:
file.write(json.dumps(vars(sim)) + "\n")
@classmethod
2019-09-11 11:32:18 +02:00
def jsonlines_load(cls):
2019-02-12 18:56:05 +01:00
simlist = cls()
2019-09-11 11:32:18 +02:00
with open(cls.save_path(simlist, ".jsonl"), 'r') as file:
2019-02-12 18:56:05 +01:00
for line in file:
sim = Simulation.from_dict(json.loads(line))
simlist.append(sim)
return simlist
2019-03-04 19:33:16 +01:00
@property
def as_matrix(self):
entrylist = []
for sim in self.simlist:
2019-08-01 13:06:46 +02:00
if not sim.testcase:
2019-07-06 15:50:16 +02:00
entrylist.append(
2019-08-01 13:06:46 +02:00
[sim.alpha, sim.v, sim.projectile_mass, sim.gamma, sim.target_water_fraction,
sim.projectile_water_fraction, sim.water_retention_both]
2019-07-06 15:50:16 +02:00
)
2019-03-04 19:33:16 +01:00
return np.asarray(entrylist)
2019-05-02 15:30:17 +02:00
@property
def X(self):
return np.array([
2019-07-06 15:50:16 +02:00
[s.alpha, s.v, s.projectile_mass, s.gamma, s.target_water_fraction, s.projectile_water_fraction]
2019-07-29 14:23:22 +02:00
for s in self.simlist if not s.testcase
2019-05-02 15:30:17 +02:00
])
@property
def Y(self):
2019-08-21 12:54:27 +02:00
return self.Y_water if water_fraction else self.Y_mass
@property
def Y_mass(self):
return np.array([s.mass_retention_both for s in self.simlist if not s.testcase])
@property
def Y_water(self):
2019-07-29 14:23:22 +02:00
return np.array([s.water_retention_both for s in self.simlist if not s.testcase])