Example #1
0
 def test_ChunkFitter(self):
     peaknames = ['LaB6_110', 'LaB6_111', 'LaB6_200', 'LaB6_210', 
                  'LaB6_211', 'LaB6_220', 'LaB6_300', 'LaB6_310', 
                  'LaB6_311', 'LaB6_222', 'LaB6_320', 'LaB6_321', 
                  'LaB6_400', 'LaB6_410', 'LaB6_411', 'LaB6_331', 
                  'LaB6_420', 'LaB6_421']
     parnames = ['centre','width','area','eta','asymmetry','background']
     
     pks = from_unitcell(self.x,self.y,[4.15695,4.15695,4.15695,90,90,90],'pm-3m',2,7,name='LaB6')
     fitter = ChunkFitter(self.x,pks)
     fitter.refine(self.y)
     result = fitter.lastresult        
     yfit = fitter.lastfit
     
     saveplot(self.x,self.y,yfit,'chunkfitter.png')        
     
     self.assertListEqual(peaknames,[p.name for p in pks])
     self.assertItemsEqual(result['LaB6_110'].keys(),parnames)
     self.assertTupleEqual(yfit.shape,(4096,))
     cens = [p.centre.nominal_value for p in pks]
     self.assertEquals(len(cens),18)
     self.assertAlmostEquals(cens[0],2.1391,4)
     self.assertAlmostEquals(cens[2],3.0249,4)
     self.assertAlmostEquals(cens[4],3.7053,4)
     self.assertAlmostEquals(cens[8],5.0154,4)
     self.assertAlmostEquals(cens[12],6.0520,4)
     self.assertAlmostEquals(cens[16],6.7653,4)
Example #2
0
def fit(source,x,material,qmin,qmax,reestimate=True,**kwargs):
    counts,info = source.next() #build fitter on first go
    
    ymin_on_ymax = kwargs.pop('ymin_on_ymax',None)    
    
    if hasattr(material,'space_group'):
        peaks = from_unitcell(x.mean(axis=0),counts.mean(axis=0),material.unit_cell,
                            material.space_group,qmin,qmax,name=material.name,
                            ymin_on_ymax=ymin_on_ymax)
    else:
        peaks=[]
        for mat in material:
            peaks.extend(from_unitcell(x.mean(axis=0),counts.mean(axis=0),mat.unit_cell,
                            mat.space_group,qmin,qmax,name=mat.name,
                            ymin_on_ymax=ymin_on_ymax))
                            
    print 'fitting %i peaks'%len(peaks)
    print [p.name for p in peaks]
Example #3
0
    def test_PeakFitterAdd(self):

        peaknames = ['LaB6_110', 'LaB6_111', 'LaB6_200', 'LaB6_210', 'LaB6_211']        
        
        pks = from_unitcell(self.x,self.y,[4.15695,4.15695,4.15695,90,90,90],'pm-3m',2,4,name='LaB6')
        fitter = PeakFitter(self.x,[])   
        for p in pks:
            fitter.add(p)
        fitter.refine(self.y)
        
        self.assertListEqual(peaknames,[p.name for p in pks])
        cens = [p.centre.nominal_value for p in pks]
        self.assertEquals(len(cens),5)
        self.assertAlmostEquals(cens[0],2.1391,4)
        self.assertAlmostEquals(cens[1],2.6195,4)
        self.assertAlmostEquals(cens[2],3.0249,4)

        pks = from_unitcell(self.x,self.y,[4.15695,4.15695,4.15695,90,90,90],'pm-3m',2,4,name='LaB6')
        fitter = PeakFitter(self.x,[])   
        fitter.add_many(pks)
        fitter.refine(self.y)

        self.assertListEqual(peaknames,[p.name for p in pks])
        cens = [p.centre.nominal_value for p in pks]
        self.assertEquals(len(cens),5)
        self.assertAlmostEquals(cens[0],2.1391,4)
        self.assertAlmostEquals(cens[1],2.6195,4)
        self.assertAlmostEquals(cens[2],3.0249,4)

        pks = from_unitcell(self.x,self.y,[4.15695,4.15695,4.15695,90,90,90],'pm-3m',2,4,name='LaB6')
        fitter = PeakFitter(self.x,pks[0:2])   
        for p in pks[2:]:
            fitter.add(p)
        fitter.refine(self.y)

        self.assertListEqual(peaknames,[p.name for p in pks])
        cens = [p.centre.nominal_value for p in pks]
        self.assertEquals(len(cens),5)
        self.assertAlmostEquals(cens[0],2.1391,4)
        self.assertAlmostEquals(cens[1],2.6195,4)
        self.assertAlmostEquals(cens[2],3.0249,4)
Example #4
0
 def test_PeakFitterUncertainties(self):
     
     y = unumpy.uarray((self.y,np.sqrt(self.y)))        
     peaknames = ['LaB6_110', 'LaB6_111', 'LaB6_200', 'LaB6_210', 'LaB6_211']        
     
     pks = from_unitcell(self.x,y,[4.15695,4.15695,4.15695,90,90,90],'pm-3m',2,4,name='LaB6')
     fitter = PeakFitter(self.x,pks)   
     fitter.refine(y)  
     
     saveplot(self.x,unumpy.nominal_values(y),fitter.lastfit,'peakfitter_uncertainties.png')
     
     self.assertListEqual(peaknames,[p.name for p in pks])
     cens = [p.centre.nominal_value for p in pks]
     self.assertEquals(len(cens),5)
     self.assertAlmostEquals(cens[0],2.1391,4)
     self.assertAlmostEquals(cens[1],2.6195,4)
     self.assertAlmostEquals(cens[2],3.0249,4)
Example #5
0
 def test_PeakFitter(self):
     peaknames = ['LaB6_110', 'LaB6_111', 'LaB6_200', 'LaB6_210', 'LaB6_211']
     
     pks = from_unitcell(self.x,self.y,[4.15695,4.15695,4.15695,90,90,90],'pm-3m',2,4,name='LaB6')
     fitter = PeakFitter(self.x,pks)   
     fitter.refine(self.y)
     
     result = fitter.lastresult
     saveplot(self.x,self.y,fitter.lastfit,'peakfitter.png')        
     
     cens = [v['centre'].nominal_value for v in result.itervalues()]
     censu = [v['centre'].std_dev() for v in result.itervalues()]
     
     self.assertListEqual([p.centre.nominal_value for p in pks],cens)
     self.assertListEqual([p.centre.std_dev() for p in pks],censu)
     self.assertListEqual(peaknames,[p.name for p in pks])
     self.assertEquals(len(cens),5)
     self.assertAlmostEquals(cens[0],2.1391,4)
     self.assertAlmostEquals(cens[1],2.6195,4)
     self.assertAlmostEquals(cens[2],3.0249,4)
Example #6
0
def makepeaks(x,y):
    return from_unitcell(x,y,[4.15695,4.15695,4.15695,90,90,90],'pm-3m',2,5,name='LaB6')
Example #7
0
        for line in ax.xaxis.get_ticklines()+ax.yaxis.get_ticklines():
            line.set_markeredgewidth(1)
        ax.minorticks_off()

    f.savefig('wavelet_peaksearch.png',dpi=100)
    
if 1:
    from edxrd.test import get_test_data
    edxdata = get_test_data.getedxdata()
    x,y = edxdata['LaB6']   
    x=np.poly1d([1e-9, 0.001942,0.005])(x)         
    unit_cell = [4.15695,4.15695,4.15695,90,90,90]
    space_group = 'pm-3m'      
    
    from edxrd.peaksearch import from_unitcell
    pks = from_unitcell(x,y,unit_cell,space_group,2,4.4,
                                            name='LaB6',shape='g')
    print pks[0].centre
    yfit = np.zeros_like(x)
    for pk in pks:
        yfit+=pk.profile(x)
        
    f,ax = plt.subplots(1,1,figsize=(7,4))
    f.subplots_adjust(bottom=0.15)
    ax.plot(x,y,'b-')
    ax.plot(x,yfit,'r-',lw=1)
    ax.set_yticks([])
    ax.set_xbound(0.8,6)
    ax.set_xlabel('$\mathrm{Q} (\AA^{-1})$')
    
    f.savefig('unitcell_peaksearch.png',dpi=100)
#plt.show()