def test_layer_calculation(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) graphite.density(2.0) mat = catima.Layers() mat.add(water) mat.add(graphite) res = catima.calculate_layers(p(1000), mat) self.assertEqual(len(res.results), 2) self.assertAlmostEqual(res.total_result.Eout, 926.3, 1) self.assertAlmostEqual(res.total_result.sigma_a, 0.00269, 1) self.assertAlmostEqual(res.Eout, 926.3, 1) self.assertAlmostEqual(res.sigma_a, 0.00269, 4) self.assertAlmostEqual(res.tof, 0.402, 2) self.assertAlmostEqual(res.Eloss, 884, 0) self.assertAlmostEqual(res[0].Eout, 932.24, 0) self.assertAlmostEqual(res[1].Eout, 926.3, 0) self.assertAlmostEqual(res[0].sigma_a, 0.0025, 3) self.assertAlmostEqual(res[1].sigma_a, 0.000774, 4) self.assertAlmostEqual(res[0].range, 107.1, 0) self.assertAlmostEqual(res[1].range, 111.3, 0)
def test_storage(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) et = catima.get_energy_table() self.assertEqual(len(data), 3) self.assertEqual(len(data[0]), len(et)) res = catima.calculate(p(et[10]), water) self.assertAlmostEqual(res.range, data[0][10], 6) self.assertAlmostEqual(catima.range(p, water), data[0][10], 6) #self.assertAlmostEqual(catima.domega2de(p,water),data[1][10],6) res = catima.calculate(p(et[100]), water) self.assertAlmostEqual(res.range, data[0][100], 6) self.assertAlmostEqual(catima.range(p, water), data[0][100], 6) #self.assertAlmostEqual(catima.domega2de(p,water),data[1][100],6) res = catima.calculate(p(et[200]), water) self.assertAlmostEqual(res.range, data[0][200], 6) self.assertAlmostEqual(catima.range(p, water), data[0][200], 6) #self.assertAlmostEqual(catima.domega2de(p,water),data[1][200],6) res = catima.calculate(p(et[401]), water) self.assertAlmostEqual(res.range, data[0][401], 6) self.assertAlmostEqual(catima.range(p, water), data[0][401], 6)
def test_layers(self): graphite = catima.get_material(6) graphite.thickness(0.5) p10 = catima.get_material(catima.material.P10) p10.thickness(0.01) n2 = catima.get_material(7) n2.thickness(0.02) mat = catima.Layers() self.assertEqual(mat.num(), 0) mat.add(graphite) self.assertEqual(mat.num(), 1) self.assertAlmostEqual(mat[0].molar_mass(), 12, 1) self.assertAlmostEqual(mat[0].thickness(), 0.5, 1) self.assertAlmostEqual(mat[0].density(), 2.0, 1) mat.add(p10) self.assertEqual(mat.num(), 2) graphite.thickness(1.0) graphite.density(1.8) mat.add(graphite) self.assertEqual(mat.num(), 3) self.assertAlmostEqual(mat[2].molar_mass(), 12, 1) self.assertAlmostEqual(mat[0].thickness(), 0.5, 1) self.assertAlmostEqual(mat[0].density(), 2.0, 1) self.assertAlmostEqual(mat[2].thickness(), 1.0, 1) self.assertAlmostEqual(mat[2].density(), 1.8, 1) a = mat[2] a.thickness(1.2) a.density(1.9) self.assertAlmostEqual(mat[2].thickness(), 1.2, 1) self.assertAlmostEqual(mat[2].density(), 1.9, 1) self.assertEqual(mat.num(), 3) with self.assertRaises(ValueError): mat[3] mat2 = catima.Layers() mat2.add(n2) self.assertEqual(mat2.num(), 1) mats = mat2 + mat self.assertEqual(mats.num(), 4) self.assertAlmostEqual(mats[0].molar_mass(), 14, 1) self.assertEqual(mats[0].thickness(), 0.02) self.assertAlmostEqual(mats[1].molar_mass(), 12, 1) self.assertAlmostEqual(mats[3].molar_mass(), 12, 1) n2.thickness(0.5) mats = mats + n2 self.assertEqual(mats.num(), 5) self.assertAlmostEqual(mats[0].molar_mass(), 14, 1) self.assertEqual(mats[0].thickness(), 0.02) self.assertAlmostEqual(mats[4].molar_mass(), 14, 1) self.assertEqual(mats[4].thickness(), 0.5)
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, 60) # assuming 60, this has to be changed manually r = catima.storage_info()
def test_default_material(self): m1 = catima.get_material(6) self.assertAlmostEqual(m1.molar_mass(), 12, 1) self.assertEqual(m1.ncomponents(), 1) self.assertAlmostEqual(m1.density(), 2.0, 1) m2 = catima.get_material(catima.material.Water) self.assertEqual(m2.ncomponents(), 2) self.assertAlmostEqual(m2.molar_mass(), 18, 1) self.assertAlmostEqual(m2.density(), 1.0, 1) m3 = catima.get_material(3001) self.assertEqual(m3.ncomponents(), 0) self.assertAlmostEqual(m3.molar_mass(), 0, 1) self.assertAlmostEqual(m3.density(), 0.0, 1)
def test_material_calculation(self): water = catima.get_material(catima.material.Water) p = catima.Projectile(1, 1) p(1000) res = catima.calculate(p, water) res2 = catima.dedx(p, water) self.assertAlmostEqual(res.dEdxi, 2.23, 1) self.assertAlmostEqual(res.dEdxi, res2, 3) res = catima.calculate(p(500), water) res2 = catima.dedx(p, water) self.assertAlmostEqual(res.dEdxi, 2.76, 1) self.assertAlmostEqual(res.dEdxi, res2, 3) res = catima.calculate(p(9), water) res2 = catima.dedx(p, water) self.assertAlmostEqual(res.dEdxi, 51.17, 1) self.assertAlmostEqual(res.dEdxi, res2, 3) res = catima.calculate(p(9), water) res = catima.calculate(p(9), water) self.assertAlmostEqual(res.dEdxi, 51.17, 1) p(900000) res = catima.calculate(p, water) res2 = catima.dedx_from_range(p, water) self.assertAlmostEqual(res.dEdxi, res2, 3)
def test_eout(self): graphite = catima.get_material(6) graphite.thickness(0.5) p = catima.Projectile(12, 6) res = catima.calculate(p(1000), graphite) res2 = catima.energy_out(p(1000), graphite) self.assertAlmostEqual(res.Eout, 997.077, 1) self.assertAlmostEqual(res.Eout, res2, 3)
def test_dedx_from_range_list(self): graphite = catima.get_material(6) graphite.thickness(0.5) p = catima.Projectile(12, 6) energies = [100, 500, 1000] res2 = catima.dedx_from_range(p, energies, graphite) self.assertEqual(len(res2), len(energies)) self.assertEqual(len(res2), 3) for i, e in enumerate(energies): r = catima.dedx_from_range(p(e), graphite) self.assertAlmostEqual(res2[i], r, 0.1)
def test_eout_list(self): graphite = catima.get_material(6) graphite.thickness(0.5) p = catima.Projectile(12, 6) energies = [100, 500, 1000] res = catima.calculate(p(1000), graphite) self.assertAlmostEqual(res.Eout, 997.077, 1) res2 = catima.energy_out(p, energies, graphite) self.assertEqual(len(res2), len(energies)) self.assertAlmostEqual(res2[2], 997.077, 1) self.assertAlmostEqual(res2[0], catima.calculate(p(energies[0]), graphite).Eout, 1) self.assertAlmostEqual(res2[1], catima.calculate(p(energies[1]), graphite).Eout, 1)
def test_config(self): water = catima.get_material(catima.material.Water) water.density(1.0) water.thickness(1.0) p = catima.Projectile(1, 1) conf = catima.Config() conf.calculation = catima.omega_types.bohr conf2 = catima.Config() conf2.calculation = catima.omega_types.atima self.assertEqual(conf.calculation, 1) self.assertEqual(conf2.calculation, 0) p(1000) res = catima.calculate(p, water, config=conf) res2 = catima.calculate(p, water, config=conf2) self.assertAlmostEqual(res.dEdxi, res2.dEdxi, delta=1e-6) self.assertNotAlmostEqual(res.sigma_E, res2.sigma_E, delta=1e-4) self.assertNotAlmostEqual(res.sigma_r, res2.sigma_r, delta=1e-4)