예제 #1
0
    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)
예제 #2
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)
예제 #3
0
    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)
예제 #4
0
    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()
예제 #5
0
    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)
예제 #6
0
    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)
예제 #7
0
 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)
예제 #8
0
 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)
예제 #9
0
 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)
예제 #10
0
 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)