class TestUBCalculationWithYouStrategy():
    """Testing the math only here.
    """

    def setUp(self):
        
        self.tempdir = tempfile.mkdtemp()

        geometry = SixCircle()  # pass through
        hardware = Mock()
        names = 'm', 'd', 'n', 'e', 'c', 'p'
        hardware.get_axes_names.return_value = names
        self.tmpdir = tempfile.mkdtemp()
        print self.tmpdir
        self.ubcalc = UBCalculation(hardware,
                                    geometry,
                                    UBCalculationJSONPersister(self.tmpdir),
                                    YouUbCalcStrategy())

    def testAgainstI16Results(self):
        self.ubcalc.start_new('cubcalc')
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', None)
        self.ubcalc.add_reflection(0, 0, 1, REF1b, EN1, '001', None)
        matrixeq_(self.ubcalc.UB, UB1)
        
    def test_save_and_restore_empty_ubcalc_with_one_already_started(self):
        NAME = 'test_save_and_restore_empty_ubcalc_with_one_already_started'
        self.ubcalc.start_new(NAME)
        self.ubcalc.start_new(NAME)
    
    
    def test_save_and_restore_empty_ubcalc(self):
        NAME = 'test_save_and_restore_empty_ubcalc'
        self.ubcalc.start_new(NAME)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        eq_(self.ubcalc.name, NAME)
        
    def test_save_and_restore_ubcalc_with_lattice(self):
        NAME = 'test_save_and_restore_ubcalc_with_lattice'
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        eq_(self.ubcalc._state.crystal.getLattice(), ('latt', 1, 1, 1, 90, 90, 90))
        
    def test_save_and_restore_ubcalc_with_reflections(self):
        NAME = 'test_save_and_restore_ubcalc_with_reflections'
        self.ubcalc.start_new(NAME)
        now = datetime.datetime.now()
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', now)
        self.ubcalc.add_reflection(0, 0, 1, REF1b, EN1, '001', now)
        self.ubcalc.add_reflection(0, 0, 1.5, REF1b, EN1, '001_5', now)
        ref1 = self.ubcalc.get_reflection(1)
        ref2 = self.ubcalc.get_reflection(2)
        ref3 = self.ubcalc.get_reflection(3)
        eq_(self.ubcalc.get_reflection(1), ref1)
        eq_(self.ubcalc.get_reflection(2), ref2)
        eq_(self.ubcalc.get_reflection(3), ref3)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        eq_(self.ubcalc.get_reflection(1), ref1)
        eq_(self.ubcalc.get_reflection(2), ref2)
        eq_(self.ubcalc.get_reflection(3), ref3)
        
    def test_save_and_restore_ubcalc_with_UB_from_two_ref(self):
        NAME = 'test_save_and_restore_ubcalc_with_UB_from_two_ref'
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', None)
        self.ubcalc.add_reflection(0, 0, 1, REF1b, EN1, '001', None)
        matrixeq_(self.ubcalc.UB, UB1)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        matrixeq_(self.ubcalc.UB, UB1)
        
    def test_save_and_restore_ubcalc_with_UB_from_one_ref(self):
        NAME = 'test_save_and_restore_ubcalc_with_UB_from_one_ref'
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', None)
        self.ubcalc.calculate_UB_from_primary_only()
        matrixeq_(self.ubcalc.UB, UB1,  places=2)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        matrixeq_(self.ubcalc.UB, UB1,  places=2)

    def test_save_and_restore_ubcalc_with_manual_ub(self):
        NAME = 'test_save_and_restore_ubcalc_with_manual_ub'
        UB = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_UB_manually(UB)
        matrixeq_(self.ubcalc.UB, UB)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        matrixeq_(self.ubcalc.UB, UB)

    def test_save_and_restore_ubcalc_with_manual_u(self):
        NAME = 'test_save_and_restore_ubcalc_with_manual_u'
        U = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.set_U_manually(U)
        matrixeq_(self.ubcalc.UB, U * 2 * pi)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        matrixeq_(self.ubcalc.UB, U * 2 * pi)
class TestUBCalculationWithYouStrategy():
    """Testing the math only here.
    """
    def setup_method(self):

        self.tempdir = tempfile.mkdtemp()

        geometry = SixCircle()  # pass through
        hardware = Mock()
        names = 'm', 'd', 'n', 'e', 'c', 'p'
        hardware.get_axes_names.return_value = names
        self.tmpdir = tempfile.mkdtemp()
        print self.tmpdir
        settings.hardware = hardware
        settings.geometry = geometry
        self.ubcalc = UBCalculation(
            UBCalculationJSONPersister(self.tmpdir, UBCalcStateEncoder),
            YouUbCalcStrategy())

    def testAgainstI16Results(self):
        self.ubcalc.start_new('cubcalc')
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', None)
        self.ubcalc.add_reflection(0, 0, 1, REF1b, EN1, '001', None)
        matrixeq_(self.ubcalc.UB, UB1)

    def test_save_and_restore_empty_ubcalc_with_one_already_started(self):
        NAME = 'test_save_and_restore_empty_ubcalc_with_one_already_started'
        self.ubcalc.start_new(NAME)
        self.ubcalc.start_new(NAME)

    def test_save_and_restore_empty_ubcalc(self):
        NAME = 'test_save_and_restore_empty_ubcalc'
        self.ubcalc.start_new(NAME)

        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)

        eq_(self.ubcalc.name, NAME)

    def test_save_and_restore_ubcalc_with_lattice(self):
        NAME = 'test_save_and_restore_ubcalc_with_lattice'
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)

        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)

        eq_(self.ubcalc._state.crystal.getLattice(),
            ('latt', 1, 1, 1, 90, 90, 90))

    def test_save_and_restore_ubcalc_with_reflections(self):
        NAME = 'test_save_and_restore_ubcalc_with_reflections'
        self.ubcalc.start_new(NAME)
        now = datetime.datetime.now()
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', now)
        self.ubcalc.add_reflection(0, 0, 1, REF1b, EN1, '001', now)
        self.ubcalc.add_reflection(0, 0, 1.5, REF1b, EN1, '001_5', now)
        ref1 = self.ubcalc.get_reflection(1)
        ref2 = self.ubcalc.get_reflection(2)
        ref3 = self.ubcalc.get_reflection(3)
        eq_(self.ubcalc.get_reflection(1), ref1)
        eq_(self.ubcalc.get_reflection(2), ref2)
        eq_(self.ubcalc.get_reflection(3), ref3)

        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)

        eq_(self.ubcalc.get_reflection(1), ref1)
        eq_(self.ubcalc.get_reflection(2), ref2)
        eq_(self.ubcalc.get_reflection(3), ref3)

    def test_save_and_restore_ubcalc_with_UB_from_two_ref(self):
        NAME = 'test_save_and_restore_ubcalc_with_UB_from_two_ref'
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', None)
        self.ubcalc.add_reflection(0, 0, 1, REF1b, EN1, '001', None)
        matrixeq_(self.ubcalc.UB, UB1)

        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)

        matrixeq_(self.ubcalc.UB, UB1)

    def test_save_and_restore_ubcalc_with_UB_from_one_ref(self):
        NAME = 'test_save_and_restore_ubcalc_with_UB_from_one_ref'
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', None)
        self.ubcalc.calculate_UB_from_primary_only()
        matrixeq_(self.ubcalc.UB, UB1, places=2)

        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)

        matrixeq_(self.ubcalc.UB, UB1, places=2)

    def test_save_and_restore_ubcalc_with_manual_ub(self):
        NAME = 'test_save_and_restore_ubcalc_with_manual_ub'
        UB = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_UB_manually(UB)
        matrixeq_(self.ubcalc.UB, UB)

        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)

        matrixeq_(self.ubcalc.UB, UB)

    def test_save_and_restore_ubcalc_with_manual_u(self):
        NAME = 'test_save_and_restore_ubcalc_with_manual_u'
        U = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.set_U_manually(U)
        matrixeq_(self.ubcalc.UB, U * 2 * pi)

        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)

        matrixeq_(self.ubcalc.UB, U * 2 * pi)

    def test_calc_hkl_offset(self):
        NAME = 'test_calc_hkl_offset'
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.set_U_manually(x_rotation(0))
        hkloff_110 = self.ubcalc.calc_hkl_offset(0, 0, sqrt(2), 90. * TORAD,
                                                 -45 * TORAD)
        hkloff_m101 = self.ubcalc.calc_hkl_offset(0, 0, sqrt(2), 45. * TORAD,
                                                  90 * TORAD)
        alpha = atan2(2, 1)
        hkloff_102 = self.ubcalc.calc_hkl_offset(sqrt(5), 0, 0, alpha,
                                                 90 * TORAD)
        matrixeq_(matrix('1 1 0'), matrix(hkloff_110))
        matrixeq_(matrix('-1 0 1'), matrix(hkloff_m101))
        matrixeq_(matrix('1 0 2'), matrix(hkloff_102))

    def test_calc_offset_for_hkl(self):
        NAME = 'test_calc_offset_for_hkl'
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.set_U_manually(x_rotation(0))
        for hklref, hkloff, pol_ref, az_ref, sc_ref in [
            ([0, 0, 1], [1, 1, 0], 90 * TORAD, -45 * TORAD, sqrt(2)),
            ([0, 0, 1], [-1, 0, 1], 45 * TORAD, 90 * TORAD, sqrt(2)),
            ([1, 0, 0], [1, 0, 2], atan2(2, 1), 90 * TORAD, sqrt(5)),
        ]:
            pol, az, sc = self.ubcalc.calc_offset_for_hkl(hkloff, hklref)
            matrixeq_(matrix([[pol_ref, az_ref, sc_ref]]),
                      matrix([[pol, az, sc]]))
示例#3
0
class TestUBCalculationWithYouStrategy():
    """Testing the math only here.
    """

    def setup_method(self):
        
        self.tempdir = tempfile.mkdtemp()

        geometry = SixCircle()  # pass through
        hardware = Mock()
        names = 'm', 'd', 'n', 'e', 'c', 'p'
        hardware.get_axes_names.return_value = names
        self.tmpdir = tempfile.mkdtemp()
        print self.tmpdir
        self.ubcalc = UBCalculation(hardware,
                                    geometry,
                                    UBCalculationJSONPersister(self.tmpdir),
                                    YouUbCalcStrategy())

    def testAgainstI16Results(self):
        self.ubcalc.start_new('cubcalc')
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', None)
        self.ubcalc.add_reflection(0, 0, 1, REF1b, EN1, '001', None)
        matrixeq_(self.ubcalc.UB, UB1)
        
    def test_save_and_restore_empty_ubcalc_with_one_already_started(self):
        NAME = 'test_save_and_restore_empty_ubcalc_with_one_already_started'
        self.ubcalc.start_new(NAME)
        self.ubcalc.start_new(NAME)
    
    
    def test_save_and_restore_empty_ubcalc(self):
        NAME = 'test_save_and_restore_empty_ubcalc'
        self.ubcalc.start_new(NAME)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        eq_(self.ubcalc.name, NAME)
        
    def test_save_and_restore_ubcalc_with_lattice(self):
        NAME = 'test_save_and_restore_ubcalc_with_lattice'
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        eq_(self.ubcalc._state.crystal.getLattice(), ('latt', 1, 1, 1, 90, 90, 90))
        
    def test_save_and_restore_ubcalc_with_reflections(self):
        NAME = 'test_save_and_restore_ubcalc_with_reflections'
        self.ubcalc.start_new(NAME)
        now = datetime.datetime.now()
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', now)
        self.ubcalc.add_reflection(0, 0, 1, REF1b, EN1, '001', now)
        self.ubcalc.add_reflection(0, 0, 1.5, REF1b, EN1, '001_5', now)
        ref1 = self.ubcalc.get_reflection(1)
        ref2 = self.ubcalc.get_reflection(2)
        ref3 = self.ubcalc.get_reflection(3)
        eq_(self.ubcalc.get_reflection(1), ref1)
        eq_(self.ubcalc.get_reflection(2), ref2)
        eq_(self.ubcalc.get_reflection(3), ref3)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        eq_(self.ubcalc.get_reflection(1), ref1)
        eq_(self.ubcalc.get_reflection(2), ref2)
        eq_(self.ubcalc.get_reflection(3), ref3)
        
    def test_save_and_restore_ubcalc_with_UB_from_two_ref(self):
        NAME = 'test_save_and_restore_ubcalc_with_UB_from_two_ref'
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', None)
        self.ubcalc.add_reflection(0, 0, 1, REF1b, EN1, '001', None)
        matrixeq_(self.ubcalc.UB, UB1)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        matrixeq_(self.ubcalc.UB, UB1)
        
    def test_save_and_restore_ubcalc_with_UB_from_one_ref(self):
        NAME = 'test_save_and_restore_ubcalc_with_UB_from_one_ref'
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.add_reflection(1, 0, 0, REF1a, EN1, '100', None)
        self.ubcalc.calculate_UB_from_primary_only()
        matrixeq_(self.ubcalc.UB, UB1,  places=2)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        matrixeq_(self.ubcalc.UB, UB1,  places=2)

    def test_save_and_restore_ubcalc_with_manual_ub(self):
        NAME = 'test_save_and_restore_ubcalc_with_manual_ub'
        UB = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_UB_manually(UB)
        matrixeq_(self.ubcalc.UB, UB)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        matrixeq_(self.ubcalc.UB, UB)

    def test_save_and_restore_ubcalc_with_manual_u(self):
        NAME = 'test_save_and_restore_ubcalc_with_manual_u'
        U = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        self.ubcalc.start_new(NAME)
        self.ubcalc.set_lattice('latt', 1, 1, 1, 90, 90, 90)
        self.ubcalc.set_U_manually(U)
        matrixeq_(self.ubcalc.UB, U * 2 * pi)
        
        self.ubcalc.start_new(NAME + '2')
        self.ubcalc.load(NAME)
        
        matrixeq_(self.ubcalc.UB, U * 2 * pi)