def test_constraints_single_spectrum(self):
        from mantid.fitfunctions import Gaussian, LinearBackground
        from mantid.simpleapi import FunctionFactory

        cf = CrystalFieldMultiSite(Ions=['Ce'], Symmetries=['C2v'], Temperatures=[50], FWHM=[0.9],
                                   B20=0.37737, B22=3.9770, B40=-0.031787, B42=-0.11611, B44=-0.12544,
                                   Background=LinearBackground(A0=1.0), BackgroundPeak=Gaussian(Height=10, Sigma=0.3))

        cf.ties(B40='B20/2')
        cf.constraints('IntensityScaling > 0', 'B22 < 4')
        cf.constraints('pk0.FWHM < 2.2', 'pk1.FWHM >= 0.1')
        cf.ties({'pk2.FWHM': '2*pk1.FWHM', 'pk3.FWHM': '2*pk2.FWHM'})
        cf.background.peak.ties(Height=10.1)
        cf.background.peak.constraints('Sigma > 0')
        cf.background.background.ties(A0=0.1)
        cf.background.background.constraints('A1 > 0')

        s = cf.makeSpectrumFunction()
        self.assertTrue('0<IntensityScaling' in s)
        self.assertTrue('B22<4' in s)
        self.assertTrue('0<bg.f0.Sigma' in s)
        self.assertTrue('0<bg.f1.A1' in s)
        self.assertTrue('Height=10.1' in s)
        self.assertTrue('A0=0.1' in s)
        self.assertTrue('pk0.FWHM<2.2' in s)
        self.assertTrue('0.1<pk1.FWHM' in s)
        self.assertTrue('pk2.FWHM=2*pk1.FWHM' in s)
        self.assertTrue('pk3.FWHM=2*pk2.FWHM' in s)

        # Test that ties and constraints are correctly defined
        fun = FunctionFactory.createInitialized(s)
        self.assertTrue(fun is not None)
Exemple #2
0
    def test_constraints_single_spectrum(self):
        from mantid.simpleapi import Gaussian, LinearBackground, FunctionFactory

        cf = CrystalFieldMultiSite(Ions=['Ce'], Symmetries=['C2v'], Temperatures=[50], FWHM=[0.9],
                                   B20=0.37737, B22=3.9770, B40=-0.031787, B42=-0.11611, B44=-0.12544,
                                   Background=LinearBackground(A0=1.0), BackgroundPeak=Gaussian(Height=10, Sigma=0.3))

        cf.ties(B40='B20/2')
        cf.constraints('IntensityScaling > 0', 'B22 < 4')
        cf.constraints('pk0.FWHM < 2.2', 'pk1.FWHM >= 0.1')
        cf.ties({'pk2.FWHM': '2*pk1.FWHM', 'pk3.FWHM': '2*pk2.FWHM'})
        cf.background.peak.ties(Height=10.1)
        cf.background.peak.constraints('Sigma > 0')
        cf.background.background.ties(A0=0.1)
        cf.background.background.constraints('A1 > 0')

        s = cf.makeSpectrumFunction()
        self.assertTrue('0<IntensityScaling' in s)
        self.assertTrue('B22<4' in s)
        self.assertTrue('0<bg.f0.Sigma' in s)
        self.assertTrue('0<bg.f1.A1' in s)
        self.assertTrue('Height=10.1' in s)
        self.assertTrue('A0=0.1' in s)
        self.assertTrue('pk0.FWHM<2.2' in s)
        self.assertTrue('0.1<pk1.FWHM' in s)
        self.assertTrue('pk2.FWHM=2*pk1.FWHM' in s)
        self.assertTrue('pk3.FWHM=2*pk2.FWHM' in s)

        # Test that ties and constraints are correctly defined
        fun = FunctionFactory.createInitialized(s)
        self.assertTrue(fun is not None)
    def test_constraints_multi_spectrum_and_ion(self):
        from mantid.fitfunctions import FlatBackground, Gaussian

        cf = CrystalFieldMultiSite(Ions=['Ce','Pr'], Symmetries=['C2v', 'C2v'], Temperatures=[44, 50], FWHM=[1.1, 0.9],
                                   Background=FlatBackground(), BackgroundPeak=Gaussian(Height=10, Sigma=0.3),
                                   parameters={'ion0.B20': 0.37737, 'ion0.B22': 3.9770, 'ion1.B40':-0.031787,
                                               'ion1.B42':-0.11611, 'ion1.B44':-0.12544})

        cf.constraints('sp0.IntensityScaling > 0', '0 < sp1.IntensityScaling < 2', 'ion0.B22 < 4')

        cf.ties({'sp0.bg.f0.Height': 10.1})
        cf.constraints('sp0.bg.f0.Sigma > 0.1')
        cf.ties({'sp1.bg.f0.Height': 20.2})
        cf.constraints('sp1.bg.f0.Sigma > 0.2')

        cf.ties({'ion0.sp1.pk2.FWHM': '2*ion0.sp1.pk1.FWHM', 'ion1.sp1.pk3.FWHM': '2*ion1.sp1.pk2.FWHM'})
        cf.constraints('ion0.sp0.pk1.FWHM < 2.2')
        cf.constraints('ion0.sp1.pk1.FWHM > 1.1', '1 < ion0.sp1.pk4.FWHM < 2.2')

        s = str(cf.function)
        self.assertTrue('0<sp0.IntensityScaling' in s)
        self.assertTrue('sp1.IntensityScaling<2' in s)
        self.assertTrue('sp0.bg.f0.Height=10.1' in s)
        self.assertTrue('sp1.bg.f0.Height=20.2' in s)
        self.assertTrue('0.1<sp0.bg.f0.Sigma' in s)
        self.assertTrue('0.2<sp1.bg.f0.Sigma' in s)
        self.assertTrue('ion0.sp0.pk1.FWHM<2.2' in s)
        self.assertTrue('1.1<ion0.sp1.pk1.FWHM' in s)
        self.assertTrue('1<ion0.sp1.pk4.FWHM<2.2' in s)
        self.assertTrue('ion0.sp1.pk2.FWHM=2*ion0.sp1.pk1.FWHM' in s)
        self.assertTrue('ion1.sp1.pk3.FWHM=2*ion1.sp1.pk2.FWHM' in s)
Exemple #4
0
    def test_constraints_multi_spectrum_and_ion(self):
        from mantid.simpleapi import FlatBackground, Gaussian

        cf = CrystalFieldMultiSite(Ions=['Ce','Pr'], Symmetries=['C2v', 'C2v'], Temperatures=[44, 50], FWHM=[1.1, 0.9],
                                   Background=FlatBackground(), BackgroundPeak=Gaussian(Height=10, Sigma=0.3),
                                   parameters={'ion0.B20': 0.37737, 'ion0.B22': 3.9770, 'ion1.B40':-0.031787,
                                               'ion1.B42':-0.11611, 'ion1.B44':-0.12544})

        cf.constraints('sp0.IntensityScaling > 0', '0 < sp1.IntensityScaling < 2', 'ion0.B22 < 4')

        cf.ties({'sp0.bg.f0.Height': 10.1})
        cf.constraints('sp0.bg.f0.Sigma > 0.1')
        cf.ties({'sp1.bg.f0.Height': 20.2})
        cf.constraints('sp1.bg.f0.Sigma > 0.2')

        cf.ties({'ion0.sp1.pk2.FWHM': '2*ion0.sp1.pk1.FWHM', 'ion1.sp1.pk3.FWHM': '2*ion1.sp1.pk2.FWHM'})
        cf.constraints('ion0.sp0.pk1.FWHM < 2.2')
        cf.constraints('ion0.sp1.pk1.FWHM > 1.1', '1 < ion0.sp1.pk4.FWHM < 2.2')

        s = str(cf.function)
        self.assertTrue('0<sp0.IntensityScaling' in s)
        self.assertTrue('sp1.IntensityScaling<2' in s)
        self.assertTrue('sp0.bg.f0.Height=10.1' in s)
        self.assertTrue('sp1.bg.f0.Height=20.2' in s)
        self.assertTrue('0.1<sp0.bg.f0.Sigma' in s)
        self.assertTrue('0.2<sp1.bg.f0.Sigma' in s)
        self.assertTrue('ion0.sp0.pk1.FWHM<2.2' in s)
        self.assertTrue('1.1<ion0.sp1.pk1.FWHM' in s)
        self.assertTrue('1<ion0.sp1.pk4.FWHM<2.2' in s)
        self.assertTrue('ion0.sp1.pk2.FWHM=2*ion0.sp1.pk1.FWHM' in s)
        self.assertTrue('ion1.sp1.pk3.FWHM=2*ion1.sp1.pk2.FWHM' in s)
    def test_constraints_multi_spectrum(self):
        from mantid.simpleapi import FlatBackground, Gaussian

        cf = CrystalFieldMultiSite(Ions=['Ce'], Symmetries=['C2v'], Temperatures=[44, 50], FWHM=[1.1, 0.9],
                                   Background=FlatBackground(), BackgroundPeak=Gaussian(Height=10, Sigma=0.3),
                                   B20=0.37737, B22=3.9770, B40=-0.031787, B42=-0.11611, B44=-0.12544)

        cf.constraints('sp0.IntensityScaling > 0', '0 < sp1.IntensityScaling < 2', 'B22 < 4')

        cf.ties({'sp0.bg.f0.Height': 10.1})
        cf.constraints('sp0.bg.f0.Sigma > 0.1')
        cf.ties({'sp1.bg.f0.Height': 20.2})
        cf.constraints('sp1.bg.f0.Sigma > 0.2')

        cf.ties({'sp1.pk2.FWHM': '2*sp1.pk1.FWHM', 'sp1.pk3.FWHM': '2*sp1.pk2.FWHM'})
        cf.constraints('sp0.pk1.FWHM < 2.2')
        cf.constraints('sp1.pk1.FWHM > 1.1', '1 < sp1.pk4.FWHM < 2.2')

        s = str(cf.function)
        self.assertTrue('0<sp0.IntensityScaling' in s)
        self.assertTrue('sp1.IntensityScaling<2' in s)
        self.assertTrue('sp0.bg.f0.Height=10.1' in s)
        self.assertTrue('sp1.bg.f0.Height=20.2' in s)
        self.assertTrue('0.1<sp0.bg.f0.Sigma' in s)
        self.assertTrue('0.2<sp1.bg.f0.Sigma' in s)
        self.assertTrue('sp0.pk1.FWHM<2.2' in s)
        self.assertTrue('1.1<sp1.pk1.FWHM' in s)
        self.assertTrue('1<sp1.pk4.FWHM<2.2' in s)
        self.assertTrue('sp1.pk2.FWHM=2*sp1.pk1.FWHM' in s)
        self.assertTrue('sp1.pk3.FWHM=2*sp1.pk2.FWHM' in s)
Exemple #6
0
    def test_constraints_multi_spectrum(self):
        from mantid.simpleapi import FlatBackground, Gaussian

        cf = CrystalFieldMultiSite(Ions=['Ce'],
                                   Symmetries=['C2v'],
                                   Temperatures=[44, 50],
                                   FWHM=[1.1, 0.9],
                                   Background=FlatBackground(),
                                   BackgroundPeak=Gaussian(Height=10,
                                                           Sigma=0.3),
                                   B20=0.37737,
                                   B22=3.9770,
                                   B40=-0.031787,
                                   B42=-0.11611,
                                   B44=-0.12544)

        cf.constraints('sp0.IntensityScaling > 0',
                       '0 < sp1.IntensityScaling < 2', 'B22 < 4')

        cf.ties({'sp0.bg.f0.Height': 10.1})
        cf.constraints('sp0.bg.f0.Sigma > 0.1')
        cf.ties({'sp1.bg.f0.Height': 20.2})
        cf.constraints('sp1.bg.f0.Sigma > 0.2')

        cf.ties({
            'sp1.pk2.FWHM': '2*sp1.pk1.FWHM',
            'sp1.pk3.FWHM': '2*sp1.pk2.FWHM'
        })
        cf.constraints('sp0.pk1.FWHM < 2.2')
        cf.constraints('sp1.pk1.FWHM > 1.1', '1 < sp1.pk4.FWHM < 2.2')

        s = str(cf.function)
        ties = ','.join(re.findall(r'ties=\((.*?)\)', s))
        constraints = ','.join(re.findall(r'constraints=\((.*?)\)', s))
        self.assertTrue('0<sp0.IntensityScaling' in constraints)
        self.assertTrue('sp1.IntensityScaling<2' in constraints)
        self.assertTrue('sp0.bg.f0.Height=10.1' in ties)
        self.assertTrue('sp1.bg.f0.Height=20.2' in ties)
        self.assertTrue('0.1<sp0.bg.f0.Sigma' in constraints)
        self.assertTrue('0.2<sp1.bg.f0.Sigma' in constraints)
        self.assertTrue('sp0.pk1.FWHM<2.2' in constraints)
        self.assertTrue('1.1<sp1.pk1.FWHM' in constraints)
        self.assertTrue('1<sp1.pk4.FWHM<2.2' in constraints)
        self.assertTrue('sp1.pk2.FWHM=2*sp1.pk1.FWHM' in ties)
        self.assertTrue('sp1.pk3.FWHM=2*sp1.pk2.FWHM' in ties)