1
0
Fork 0
mirror of https://github.com/gwm17/catima.git synced 2024-11-26 20:18:51 -05:00

minor changes for server

This commit is contained in:
hrocho 2017-10-19 01:36:54 +02:00
parent bd28a60d74
commit 876961ff53
5 changed files with 42 additions and 8 deletions

View File

@ -406,7 +406,9 @@ def get_data(Projectile projectile, Material material, Config config = default_c
data = catimac.get_data(projectile.cbase, material.cbase, config.cbase) data = catimac.get_data(projectile.cbase, material.cbase, config.cbase)
return [data.range,data.range_straggling,data.angular_variance] return [data.range,data.range_straggling,data.angular_variance]
# constants
max_datapoints = catimac.max_datapoints max_datapoints = catimac.max_datapoints
max_storage_data = catimac.max_storage_data
def energy_table(unsigned int i): def energy_table(unsigned int i):
if(i<catimac.energy_table.num): if(i<catimac.energy_table.num):
@ -417,3 +419,15 @@ def energy_table(unsigned int i):
def get_energy_table(): def get_energy_table():
r = [catimac.energy_table(x) for x in range(catimac.energy_table.num)] r = [catimac.energy_table(x) for x in range(catimac.energy_table.num)]
return r return r
def print_storage():
res = []
for i in range(catimac.max_storage_data):
data = catimac._storage.Get(i)
if(data.p.A>0 and data.p.Z>0 and data.m.ncomponents()>0):
matter = []
for j in range(data.m.ncomponents()):
e = data.m.get_element(j)
matter.append([e.first.A,e.first.Z,e.second])
res.append({"projectile":[data.p.A,data.p.Z],"matter":matter})
return res

View File

@ -87,6 +87,7 @@ cdef extern from "catima/calculations.h" namespace "catima":
cdef extern from "catima/constants.h" namespace "catima": cdef extern from "catima/constants.h" namespace "catima":
int max_datapoints "catima::max_datapoints" int max_datapoints "catima::max_datapoints"
int max_storage_data "catima::max_storage_data"
int logEmin "catima::logEmin" int logEmin "catima::logEmin"
int logEmax "catima::logEmax" int logEmax "catima::logEmax"
@ -97,14 +98,23 @@ cdef extern from "catima/storage.h" namespace "catima":
double derivative(double) double derivative(double)
cdef cppclass DataPoint: cdef cppclass DataPoint:
Projectile p
Material m
Config config
vector[double] range vector[double] range
vector[double] range_straggling vector[double] range_straggling
vector[double] angular_variance vector[double] angular_variance
cdef cppclass Data:
Data() except +
DataPoint& Get(unsigned int i)
int GetN()
cdef cppclass EnergyTableType "catima::EnergyTable[max_datapoints]": cdef cppclass EnergyTableType "catima::EnergyTable[max_datapoints]":
size_t num; size_t num;
double operator()(int i) double operator()(int i)
cdef EnergyTableType energy_table; cdef EnergyTableType energy_table;
cdef Data _storage;
cdef DataPoint& get_data(const Projectile &p, const Material &t, Config c); cdef DataPoint& get_data(const Projectile &p, const Material &t, Config c);

View File

@ -19,7 +19,7 @@ namespace catima {
} }
Data::Data(){ Data::Data(){
//storage.reserve(max_storage_data); //storage.reserve(max_storage_data); // disabled because of "circular" storage
storage.resize(max_storage_data); storage.resize(max_storage_data);
index = storage.begin(); index = storage.begin();
} }

View File

@ -124,6 +124,7 @@ namespace catima{
int GetN() const {return storage.size();}; int GetN() const {return storage.size();};
void Reset(){storage.clear();storage.resize(max_storage_data);index=storage.begin();}; void Reset(){storage.clear();storage.resize(max_storage_data);index=storage.begin();};
DataPoint& Get(const Projectile &p, const Material &t, Config c=default_config); DataPoint& Get(const Projectile &p, const Material &t, Config c=default_config);
DataPoint& Get(unsigned int i){return storage[i];};
int get_index() {return std::distance(storage.begin(),index);} int get_index() {return std::distance(storage.begin(),index);}
private: private:
std::vector<DataPoint> storage; std::vector<DataPoint> storage;

View File

@ -214,7 +214,6 @@ class TestStructures(unittest.TestCase):
graphite.thickness(1.0) graphite.thickness(1.0)
data = catima.get_data(p, water) data = catima.get_data(p, water)
print(data[1])
et = catima.get_energy_table() et = catima.get_energy_table()
self.assertEqual(len(data),3) self.assertEqual(len(data),3)
@ -223,24 +222,34 @@ class TestStructures(unittest.TestCase):
res = catima.calculate(p(et[10]),water) res = catima.calculate(p(et[10]),water)
self.assertAlmostEqual(res.range,data[0][10],6) self.assertAlmostEqual(res.range,data[0][10],6)
self.assertAlmostEqual(catima.projectile_range(p,water),data[0][10],6) self.assertAlmostEqual(catima.projectile_range(p,water),data[0][10],6)
self.assertAlmostEqual(catima.domega2de(p,water),data[1][10],6) #self.assertAlmostEqual(catima.domega2de(p,water),data[1][10],6)
res = catima.calculate(p(et[100]),water) res = catima.calculate(p(et[100]),water)
self.assertAlmostEqual(res.range,data[0][100],6) self.assertAlmostEqual(res.range,data[0][100],6)
self.assertAlmostEqual(catima.projectile_range(p,water),data[0][100],6) self.assertAlmostEqual(catima.projectile_range(p,water),data[0][100],6)
self.assertAlmostEqual(catima.domega2de(p,water),data[1][100],6) #self.assertAlmostEqual(catima.domega2de(p,water),data[1][100],6)
res = catima.calculate(p(et[200]),water) res = catima.calculate(p(et[200]),water)
self.assertAlmostEqual(res.range,data[0][200],6) self.assertAlmostEqual(res.range,data[0][200],6)
self.assertAlmostEqual(catima.projectile_range(p,water),data[0][200],6) self.assertAlmostEqual(catima.projectile_range(p,water),data[0][200],6)
self.assertAlmostEqual(catima.domega2de(p,water),data[1][200],6) #self.assertAlmostEqual(catima.domega2de(p,water),data[1][200],6)
res = catima.calculate(p(et[401]),water) res = catima.calculate(p(et[401]),water)
self.assertAlmostEqual(res.range,data[0][401],6) self.assertAlmostEqual(res.range,data[0][401],6)
self.assertAlmostEqual(catima.projectile_range(p,water),data[0][401],6) self.assertAlmostEqual(catima.projectile_range(p,water),data[0][401],6)
self.assertAlmostEqual(catima.domega2de(p,water),data[1][401],6) #self.assertAlmostEqual(catima.domega2de(p,water),data[1][401],6)
def test_python_storage_access(self):
p = catima.Projectile(12,6)
water = catima.get_material(catima.material.WATER)
water.thickness(10.0)
graphite = catima.get_material(6)
graphite.thickness(1.0)
data = catima.get_data(p, water)
self.assertEqual(catima.max_storage_data,50) # assuming 50, this has to be changed manually
r = catima.print_storage()
print(r)
#self.assertAlmostEqual(catima.da2de(p,water,et[100]),data[2][100],6) #self.assertAlmostEqual(catima.da2de(p,water,et[100]),data[2][100],6)
#self.assertAlmostEqual(catima.da2de(p,water,et[400]),data[2][400],6) #self.assertAlmostEqual(catima.da2de(p,water,et[400]),data[2][400],6)