예제 #1
0
    def setUp(self):
        unittest.TestCase.setUp(self)

        iterator_class = Heinrich1972Iterator
        convergor_class = CompositionConvergor
        calculator_class = SimpleCalculator
        worker_class = Worker

        options = Options('PAP')
        options.beam.energy_eV = 20000
        options.limits.add(ShowersLimit(100))

        detector = PhotonIntensityDetector((radians(50), radians(55)),
                                           (0.0, radians(360.0)))

        self.m = Measurement(options, options.geometry.body, detector)
        self.m.add_kratio(Ka(29), 0.2470)
        self.m.add_rule(ElementByDifferenceRule(79))

        self.outputdir = tempfile.mkdtemp()

        self.runner = Runner(worker_class,
                             iterator_class,
                             convergor_class,
                             calculator_class,
                             self.outputdir,
                             limit=0.1)
예제 #2
0
    def setUp(self):
        TestCase.setUp(self)

        options = Options('PAP')
        options.beam.energy_eV = 20000

        detector = PhotonIntensityDetector((radians(50.0), radians(55)),
                                           (0.0, radians(360.0)))

        self.m = Measurement(options, options.geometry.body, detector)

        self.m.add_kratio(Ka(29), 0.2470, 0.004)
        self.m.add_rule(ElementByDifferenceRule(79))
예제 #3
0
class TestRunner(unittest.TestCase):
    def setUp(self):
        unittest.TestCase.setUp(self)

        iterator_class = Heinrich1972Iterator
        convergor_class = CompositionConvergor
        calculator_class = SimpleCalculator
        worker_class = Worker

        options = Options('PAP')
        options.beam.energy_eV = 20000
        options.limits.add(ShowersLimit(100))

        detector = PhotonIntensityDetector((radians(50), radians(55)),
                                           (0.0, radians(360.0)))

        self.m = Measurement(options, options.geometry.body, detector)
        self.m.add_kratio(Ka(29), 0.2470)
        self.m.add_rule(ElementByDifferenceRule(79))

        self.outputdir = tempfile.mkdtemp()

        self.runner = Runner(worker_class,
                             iterator_class,
                             convergor_class,
                             calculator_class,
                             self.outputdir,
                             limit=0.1)

    def tearDown(self):
        unittest.TestCase.tearDown(self)

        shutil.rmtree(self.outputdir, ignore_errors=True)

    def testskeleton(self):
        self.assertTrue(True)

    @attr('slow')
    def testrun(self):
        self.runner.start()
        self.runner.put(self.m)
        self.runner.join()

        filepath = os.path.join(self.outputdir, 'PAP.zip')
        results = Results.load(filepath)

        composition = results.compositions[-1]
        self.assertAlmostEqual(0.21069, composition[29], 4)
        self.assertAlmostEqual(0.78931, composition[79], 4)

        self.assertEqual(results.iterations, len(results.compositions))
예제 #4
0
class TestRunner(unittest.TestCase):

    def setUp(self):
        unittest.TestCase.setUp(self)

        iterator_class = Heinrich1972Iterator
        convergor_class = CompositionConvergor
        calculator_class = SimpleCalculator
        worker_class = Worker

        options = Options('PAP')
        options.beam.energy_eV = 20000
        options.limits.add(ShowersLimit(100))

        detector = PhotonIntensityDetector((radians(50), radians(55)),
                                          (0.0, radians(360.0)))

        self.m = Measurement(options, options.geometry.body, detector)
        self.m.add_kratio(Ka(29), 0.2470)
        self.m.add_rule(ElementByDifferenceRule(79))

        self.outputdir = tempfile.mkdtemp()

        self.runner = Runner(worker_class, iterator_class, convergor_class,
                             calculator_class, self.outputdir, limit=0.1)

    def tearDown(self):
        unittest.TestCase.tearDown(self)

        shutil.rmtree(self.outputdir, ignore_errors=True)

    def testskeleton(self):
        self.assertTrue(True)

    @attr('slow')
    def testrun(self):
        self.runner.start()
        self.runner.put(self.m)
        self.runner.join()

        filepath = os.path.join(self.outputdir, 'PAP.zip')
        results = Results.load(filepath)

        composition = results.compositions[-1]
        self.assertAlmostEqual(0.21069, composition[29], 4)
        self.assertAlmostEqual(0.78931, composition[79], 4)

        self.assertEqual(results.iterations, len(results.compositions))
예제 #5
0
def load_measurements(filepaths, measurements=[]):
    for filepath in filepaths:
        if os.path.isdir(filepath):
            load_measurements(glob.glob(os.path.join(filepath, '*.xml')), measurements)
            measurements.sort()
            return

        measurements.append(Measurement.load(filepath))
예제 #6
0
    def setUp(self):
        TestCase.setUp(self)

        options = Options('PAP')
        options.beam.energy_eV = 20000

        detector = PhotonIntensityDetector((radians(50.0), radians(55)),
                                           (0.0, radians(360.0)))

        self.m = Measurement(options, options.geometry.body, detector)

        self.m.add_kratio(Ka(29), 0.2470, 0.004)
        self.m.add_rule(ElementByDifferenceRule(79))
예제 #7
0
    def testfrom_xml(self):
        element = self.m.to_xml()
        m = Measurement.from_xml(element)

        self.assertAlmostEqual(20000, m.options.beam.energy_eV, 4)
        self.assertEqual(m.unknown_body, m.options.geometry.body)
        self.assertAlmostEqual(0.434867, m.detector.solidangle_sr, 4)

        transitions = m.get_transitions()
        self.assertEqual(1, len(transitions))
        self.assertIn(Ka(29), transitions)

        kratios = m.get_kratios()
        self.assertEqual(1, len(kratios))
        self.assertAlmostEqual(0.247, kratios[29][0], 4)
        self.assertAlmostEqual(0.004, kratios[29][1], 4)

        standards = m.get_standards()
        self.assertEqual(1, len(standards))
        self.assertEqual('Copper', standards[29].material.name)

        rules = m.get_rules()
        self.assertEqual(1, len(rules))
예제 #8
0
    def testfrom_xml(self):
        element = self.m.to_xml()
        m = Measurement.from_xml(element)

        self.assertAlmostEqual(20000, m.options.beam.energy_eV, 4)
        self.assertEqual(m.unknown_body, m.options.geometry.body)
        self.assertAlmostEqual(0.434867, m.detector.solidangle_sr, 4)

        transitions = m.get_transitions()
        self.assertEqual(1, len(transitions))
        self.assertIn(Ka(29), transitions)

        kratios = m.get_kratios()
        self.assertEqual(1, len(kratios))
        self.assertAlmostEqual(0.247, kratios[29][0], 4)
        self.assertAlmostEqual(0.004, kratios[29][1], 4)

        standards = m.get_standards()
        self.assertEqual(1, len(standards))
        self.assertEqual('Copper', standards[29].material.name)

        rules = m.get_rules()
        self.assertEqual(1, len(rules))
예제 #9
0
    def setUp(self):
        unittest.TestCase.setUp(self)

        iterator_class = Heinrich1972Iterator
        convergor_class = CompositionConvergor
        calculator_class = SimpleCalculator
        worker_class = Worker

        options = Options('PAP')
        options.beam.energy_eV = 20000
        options.limits.add(ShowersLimit(100))

        detector = PhotonIntensityDetector((radians(50), radians(55)),
                                          (0.0, radians(360.0)))

        self.m = Measurement(options, options.geometry.body, detector)
        self.m.add_kratio(Ka(29), 0.2470)
        self.m.add_rule(ElementByDifferenceRule(79))

        self.outputdir = tempfile.mkdtemp()

        self.runner = Runner(worker_class, iterator_class, convergor_class,
                             calculator_class, self.outputdir, limit=0.1)
예제 #10
0
class TestMeasurement(TestCase):
    def setUp(self):
        TestCase.setUp(self)

        options = Options('PAP')
        options.beam.energy_eV = 20000

        detector = PhotonIntensityDetector((radians(50.0), radians(55)),
                                           (0.0, radians(360.0)))

        self.m = Measurement(options, options.geometry.body, detector)

        self.m.add_kratio(Ka(29), 0.2470, 0.004)
        self.m.add_rule(ElementByDifferenceRule(79))

    def tearDown(self):
        TestCase.tearDown(self)

    def testskeleton(self):
        self.assertTrue(True)

    def testoptions(self):
        self.assertAlmostEqual(20000, self.m.options.beam.energy_eV, 4)

    def testunknown_body(self):
        self.assertEqual(self.m.unknown_body, self.m.options.geometry.body)

    def testdetector(self):
        self.assertAlmostEqual(0.434867, self.m.detector.solidangle_sr, 4)

    def testadd_kratio(self):
        standard = Sphere(Material('U90', {92: 0.9, 49: 0.1}), 1e-6)
        self.m.add_kratio(La(92), 0.5, standard=standard)

        self.assertTrue(self.m.has_kratio(92))
        self.assertEqual('U90', self.m.get_standards()[92].material.name)
        self.assertAlmostEqual(0.5, self.m.get_kratios()[92][0], 4)
        self.assertAlmostEqual(0.0, self.m.get_kratios()[92][1], 4)
        self.assertIn(La(92), self.m.get_transitions())

        self.m.add_kratio(Ka(13), 0.2, unc=0.125)

        self.assertTrue(self.m.has_kratio(13))
        self.assertEqual('Aluminium', self.m.get_standards()[13].material.name)
        self.assertAlmostEqual(0.2, self.m.get_kratios()[13][0], 4)
        self.assertAlmostEqual(0.125, self.m.get_kratios()[13][1], 4)
        self.assertIn(Ka(13), self.m.get_transitions())

        self.assertRaises(ValueError, self.m.add_kratio, Ka(92), 0.1)
        self.assertRaises(ValueError, self.m.add_kratio, Ka(79), 0.1)
        self.assertRaises(ValueError, self.m.add_kratio, Ka(14), -0.1)

    def testremove_kratio(self):
        self.m.remove_kratio(29)
        self.assertFalse(self.m.has_kratio(29))
        self.assertEqual(0, len(self.m.get_standards()))
        self.assertEqual(0, len(self.m.get_kratios()))
        self.assertEqual(0, len(self.m.get_transitions()))

    def testhas_kratio(self):
        self.assertTrue(self.m.has_kratio(29))
        self.assertFalse(self.m.has_kratio(79))

    def testadd_rule(self):
        self.m.add_rule(FixedElementRule(14, 0.5))

        self.assertTrue(self.m.has_rule(14))
        self.assertEqual(2, len(self.m.get_rules()))

        self.assertRaises(ValueError, self.m.add_rule,
                          ElementByDifferenceRule(92))
        self.assertRaises(ValueError, self.m.add_rule,
                          FixedElementRule(14, 0.1))
        self.assertRaises(ValueError, self.m.add_rule,
                          FixedElementRule(29, 0.1))

    def testremove_rule(self):
        self.m.remove_rule(79)
        self.assertFalse(self.m.has_rule(79))
        self.assertEqual(0, len(self.m.get_rules()))

    def testhas_rule(self):
        self.assertTrue(self.m.has_rule(79))
        self.assertFalse(self.m.has_rule(29))

    def testget_transitions(self):
        transitions = self.m.get_transitions()

        self.assertEqual(1, len(transitions))
        self.assertIn(Ka(29), transitions)

    def testget_kratios(self):
        kratios = self.m.get_kratios()

        self.assertEqual(1, len(kratios))
        self.assertAlmostEqual(0.247, kratios[29][0], 4)
        self.assertAlmostEqual(0.004, kratios[29][1], 4)

    def testget_standards(self):
        standards = self.m.get_standards()

        self.assertEqual(1, len(standards))
        self.assertEqual('Copper', standards[29].material.name)

    def testget_rules(self):
        rules = self.m.get_rules()

        self.assertEqual(1, len(rules))

    def testfrom_xml(self):
        element = self.m.to_xml()
        m = Measurement.from_xml(element)

        self.assertAlmostEqual(20000, m.options.beam.energy_eV, 4)
        self.assertEqual(m.unknown_body, m.options.geometry.body)
        self.assertAlmostEqual(0.434867, m.detector.solidangle_sr, 4)

        transitions = m.get_transitions()
        self.assertEqual(1, len(transitions))
        self.assertIn(Ka(29), transitions)

        kratios = m.get_kratios()
        self.assertEqual(1, len(kratios))
        self.assertAlmostEqual(0.247, kratios[29][0], 4)
        self.assertAlmostEqual(0.004, kratios[29][1], 4)

        standards = m.get_standards()
        self.assertEqual(1, len(standards))
        self.assertEqual('Copper', standards[29].material.name)

        rules = m.get_rules()
        self.assertEqual(1, len(rules))

    def testto_xml(self):
        element = self.m.to_xml()

        children = list(element.find('kratios'))
        self.assertEqual(1, len(children))

        children = list(element.find('rules'))
        self.assertEqual(1, len(children))
예제 #11
0
class TestMeasurement(TestCase):

    def setUp(self):
        TestCase.setUp(self)

        options = Options('PAP')
        options.beam.energy_eV = 20000

        detector = PhotonIntensityDetector((radians(50.0), radians(55)),
                                           (0.0, radians(360.0)))

        self.m = Measurement(options, options.geometry.body, detector)

        self.m.add_kratio(Ka(29), 0.2470, 0.004)
        self.m.add_rule(ElementByDifferenceRule(79))

    def tearDown(self):
        TestCase.tearDown(self)

    def testskeleton(self):
        self.assertTrue(True)

    def testoptions(self):
        self.assertAlmostEqual(20000, self.m.options.beam.energy_eV, 4)

    def testunknown_body(self):
        self.assertEqual(self.m.unknown_body, self.m.options.geometry.body)

    def testdetector(self):
        self.assertAlmostEqual(0.434867, self.m.detector.solidangle_sr, 4)

    def testadd_kratio(self):
        standard = Sphere(Material('U90', {92: 0.9, 49: 0.1}), 1e-6)
        self.m.add_kratio(La(92), 0.5, standard=standard)

        self.assertTrue(self.m.has_kratio(92))
        self.assertEqual('U90', self.m.get_standards()[92].material.name)
        self.assertAlmostEqual(0.5, self.m.get_kratios()[92][0], 4)
        self.assertAlmostEqual(0.0, self.m.get_kratios()[92][1], 4)
        self.assertIn(La(92), self.m.get_transitions())

        self.m.add_kratio(Ka(13), 0.2, unc=0.125)

        self.assertTrue(self.m.has_kratio(13))
        self.assertEqual('Aluminium', self.m.get_standards()[13].material.name)
        self.assertAlmostEqual(0.2, self.m.get_kratios()[13][0], 4)
        self.assertAlmostEqual(0.125, self.m.get_kratios()[13][1], 4)
        self.assertIn(Ka(13), self.m.get_transitions())

        self.assertRaises(ValueError, self.m.add_kratio, Ka(92), 0.1)
        self.assertRaises(ValueError, self.m.add_kratio, Ka(79), 0.1)
        self.assertRaises(ValueError, self.m.add_kratio, Ka(14), -0.1)

    def testremove_kratio(self):
        self.m.remove_kratio(29)
        self.assertFalse(self.m.has_kratio(29))
        self.assertEqual(0, len(self.m.get_standards()))
        self.assertEqual(0, len(self.m.get_kratios()))
        self.assertEqual(0, len(self.m.get_transitions()))

    def testhas_kratio(self):
        self.assertTrue(self.m.has_kratio(29))
        self.assertFalse(self.m.has_kratio(79))

    def testadd_rule(self):
        self.m.add_rule(FixedElementRule(14, 0.5))

        self.assertTrue(self.m.has_rule(14))
        self.assertEqual(2, len(self.m.get_rules()))

        self.assertRaises(ValueError, self.m.add_rule, ElementByDifferenceRule(92))
        self.assertRaises(ValueError, self.m.add_rule, FixedElementRule(14, 0.1))
        self.assertRaises(ValueError, self.m.add_rule, FixedElementRule(29, 0.1))

    def testremove_rule(self):
        self.m.remove_rule(79)
        self.assertFalse(self.m.has_rule(79))
        self.assertEqual(0, len(self.m.get_rules()))

    def testhas_rule(self):
        self.assertTrue(self.m.has_rule(79))
        self.assertFalse(self.m.has_rule(29))

    def testget_transitions(self):
        transitions = self.m.get_transitions()

        self.assertEqual(1, len(transitions))
        self.assertIn(Ka(29), transitions)

    def testget_kratios(self):
        kratios = self.m.get_kratios()

        self.assertEqual(1, len(kratios))
        self.assertAlmostEqual(0.247, kratios[29][0], 4)
        self.assertAlmostEqual(0.004, kratios[29][1], 4)

    def testget_standards(self):
        standards = self.m.get_standards()

        self.assertEqual(1, len(standards))
        self.assertEqual('Copper', standards[29].material.name)

    def testget_rules(self):
        rules = self.m.get_rules()

        self.assertEqual(1, len(rules))

    def testfrom_xml(self):
        element = self.m.to_xml()
        m = Measurement.from_xml(element)

        self.assertAlmostEqual(20000, m.options.beam.energy_eV, 4)
        self.assertEqual(m.unknown_body, m.options.geometry.body)
        self.assertAlmostEqual(0.434867, m.detector.solidangle_sr, 4)

        transitions = m.get_transitions()
        self.assertEqual(1, len(transitions))
        self.assertIn(Ka(29), transitions)

        kratios = m.get_kratios()
        self.assertEqual(1, len(kratios))
        self.assertAlmostEqual(0.247, kratios[29][0], 4)
        self.assertAlmostEqual(0.004, kratios[29][1], 4)

        standards = m.get_standards()
        self.assertEqual(1, len(standards))
        self.assertEqual('Copper', standards[29].material.name)

        rules = m.get_rules()
        self.assertEqual(1, len(rules))

    def testto_xml(self):
        element = self.m.to_xml()

        children = list(element.find('kratios'))
        self.assertEqual(1, len(children))

        children = list(element.find('rules'))
        self.assertEqual(1, len(children))