Changeset 303 for trunk/GSASIIphsGUI.py


Ignore:
Timestamp:
Jun 20, 2011 2:37:07 PM (11 years ago)
Author:
vondreele
Message:

Allow reading of xye (Topas style) files
Begin implementation of spherical harmonics texture
Refactor indexing; replace cell refinement from peak positions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r264 r303  
    17341734            FindBonds()
    17351735            G2plt.PlotStructure(self,data)
    1736            
    1737        
    1738 
    17391736
    17401737        dataDisplay = wx.Panel(drawOptions)
     
    18501847        else:
    18511848            self.dataFrame.DataMenu.Enable(G2gd.wxID_DATADELETE,False)           
    1852         generalData = data['General']
     1849        generalData = data['General']       
    18531850        SGData = generalData['SGData']
     1851        try:
     1852            textureData = generalData['SH Texture']
     1853        except KeyError:            #fix old files!
     1854            textureData = generalData['SH Texture'] = {'Order':0,'Model':'cylindrical',
     1855                'Sample omega':[False,0.0],'Sample chi':[False,0.0],'Sample phi':[False,0.0],
     1856                'SH Coeff':[False,{}],'SHShow':False,'PFhkl':[0,0,1]}
     1857        shModels = ['cylindrical','none','shear - 2/m','rolling - mmm']
     1858        SamSym = dict(zip(shModels,['0','-1','2/m','mmm']))
     1859       
     1860        shAngles = ['omega','chi','phi']
    18541861        keyList = UseList.keys()
    18551862        keyList.sort()
    18561863        Indx = {}
     1864       
     1865        def SetSHCoef():
     1866            cofNames = G2lat.GenSHCoeff(SGData['SGLaue'],SamSym[textureData['Model']],textureData['Order'])
     1867            newSHCoef = dict(zip(cofNames,np.zeros(len(cofNames))))
     1868            SHCoeff = textureData['SH Coeff'][1]
     1869            for cofName in SHCoeff:
     1870                if cofName in  cofNames:
     1871                    newSHCoef[cofName] = SHCoeff[cofName]
     1872            return newSHCoef
    18571873       
    18581874        def OnShowData(event):
     
    18611877            UseList[hist]['Show'] = Obj.GetValue()
    18621878            UpdateDData()
     1879           
     1880        def OnShOrder(event):
     1881            textureData['Order'] = int(shOrder.GetValue())
     1882            textureData['SH Coeff'][1] = SetSHCoef()
     1883            UpdateDData()
     1884                       
     1885        def OnShModel(event):
     1886            textureData['Model'] = shModel.GetValue()
     1887            textureData['SH Coeff'][1] = SetSHCoef()
     1888            UpdateDData()
     1889           
     1890        def OnSHRefine(event):
     1891            textureData['SH Coeff'][0] = shRef.GetValue()
     1892           
     1893        def OnSHShow(event):
     1894            textureData['SHShow'] = shShow.GetValue()
     1895            UpdateDData()
     1896           
     1897        def OnAngRef(event):
     1898            Obj = event.GetEventObject()
     1899            textureData[angIndx[Obj.GetId()]][0] = Obj.GetValue()
     1900           
     1901        def OnAngValue(event):
     1902            Obj = event.GetEventObject()
     1903            try:
     1904                value =  float(Obj.GetValue())
     1905            except ValueError:
     1906                value = textureData[valIndx[Obj.GetId()]][1]
     1907            Obj.SetValue('%8.2f'%(value))
     1908            textureData[valIndx[Obj.GetId()]][1] = value
     1909           
     1910        def OnODFValue(event):
     1911            Obj = event.GetEventObject()
     1912            try:
     1913                value =  float(Obj.GetValue())
     1914            except ValueError:
     1915                value = textureData['SH Coeff'][1][ODFIndx[Obj.GetId()]]
     1916            Obj.SetValue('%8.3f'%(value))
     1917            textureData['SH Coeff'][1][ODFIndx[Obj.GetId()]] = value
     1918           
     1919        def OnPFValue(event):
     1920            Obj = event.GetEventObject()
     1921            try:
     1922                value =  int(Obj.GetValue())
     1923            except ValueError:
     1924                value = textureData['PFhkl'][pfIndx[Obj.GetId()]]
     1925            Obj.SetValue('%3d'%(value))
     1926            textureData['PFhkl'][pfIndx[Obj.GetId()]] = value
     1927            G2plt.PlotSphHarmTexture(self,generalData)           
    18631928       
    18641929        def OnScaleRef(event):
     
    18761941            Obj.SetValue("%.4f"%(UseList[Indx[Obj.GetId()]]['Scale'][0]))          #reset in case of error
    18771942           
    1878         def OnCutoffVal(event):
    1879             Obj = event.GetEventObject()
    1880             try:
    1881                 cutoff = float(Obj.GetValue())
    1882                 if cutoff > 0:
    1883                     UseList[Indx[Obj.GetId()]]['Cutoff'] = cutoff
    1884             except ValueError:
    1885                 pass
    1886             Obj.SetValue("%.3f"%(UseList[Indx[Obj.GetId()]]['Cutoff']))          #reset in case of error
    1887 
    18881943        def OnSizeType(event):
    18891944            Obj = event.GetEventObject()
     
    19291984            hist = Indx[Obj.GetId()]
    19301985            UseList[hist]['Mustrain'][0] = Obj.GetValue()
     1986            UpdateDData()
    19311987            G2plt.PlotStrain(self,data)
    1932             UpdateDData()
    19331988           
    19341989        def OnStrainRef(event):
     
    20312086        dataDisplay = wx.Panel(DData)
    20322087        mainSizer = wx.BoxSizer(wx.VERTICAL)
     2088        mainSizer.Add(wx.StaticText(dataDisplay,-1,'Spherical harmonics texture data for '+PhaseName+':'),0,wx.ALIGN_CENTER_VERTICAL)
     2089        mainSizer.Add((0,5),0)
     2090        shSizer = wx.BoxSizer(wx.HORIZONTAL)
     2091        shSizer.Add(wx.StaticText(dataDisplay,-1,'Texture model: '),0,wx.ALIGN_CENTER_VERTICAL)
     2092        shModel = wx.ComboBox(dataDisplay,-1,value=textureData['Model'],choices=shModels,
     2093            style=wx.CB_READONLY|wx.CB_DROPDOWN)
     2094        shModel.Bind(wx.EVT_COMBOBOX,OnShModel)
     2095        shSizer.Add(shModel,0,wx.ALIGN_CENTER_VERTICAL)
     2096        shSizer.Add(wx.StaticText(dataDisplay,-1,'  Harmonic order: '),0,wx.ALIGN_CENTER_VERTICAL)
     2097        shOrder = wx.ComboBox(dataDisplay,-1,value=str(textureData['Order']),choices=[str(2*i) for i in range(18)],
     2098            style=wx.CB_READONLY|wx.CB_DROPDOWN)
     2099        shOrder.Bind(wx.EVT_COMBOBOX,OnShOrder)
     2100        shSizer.Add(shOrder,0,wx.ALIGN_CENTER_VERTICAL)
     2101        shSizer.Add((5,0),0)
     2102        shRef = wx.CheckBox(dataDisplay,label=' Refine texture?')
     2103        shRef.SetValue(textureData['SH Coeff'][0])
     2104        shRef.Bind(wx.EVT_CHECKBOX, OnSHRefine)
     2105        shSizer.Add(shRef,0,wx.ALIGN_CENTER_VERTICAL)
     2106        shShow = wx.CheckBox(dataDisplay,label=' Show coeff.?')
     2107        shShow.SetValue(textureData['SHShow'])
     2108        shShow.Bind(wx.EVT_CHECKBOX, OnSHShow)
     2109        shSizer.Add(shShow,0,wx.ALIGN_CENTER_VERTICAL)
     2110        mainSizer.Add(shSizer,0,0)
     2111        mainSizer.Add((0,5),0)
     2112        if textureData['SHShow']:
     2113            mainSizer.Add(wx.StaticText(dataDisplay,-1,'Spherical harmonic coefficients: '),0,wx.ALIGN_CENTER_VERTICAL)
     2114            mainSizer.Add((0,5),0)
     2115            ODFSizer = wx.FlexGridSizer(2,8,2,2)
     2116            ODFIndx = {}
     2117            ODFkeys = textureData['SH Coeff'][1].keys()
     2118            ODFkeys.sort()
     2119            for item in ODFkeys:
     2120                ODFSizer.Add(wx.StaticText(dataDisplay,-1,item),0,wx.ALIGN_CENTER_VERTICAL)
     2121                ODFval = wx.TextCtrl(dataDisplay,wx.ID_ANY,'%8.3f'%(textureData['SH Coeff'][1][item]),style=wx.TE_PROCESS_ENTER)
     2122                ODFIndx[ODFval.GetId()] = item
     2123                ODFval.Bind(wx.EVT_TEXT_ENTER,OnODFValue)
     2124                ODFval.Bind(wx.EVT_KILL_FOCUS,OnODFValue)
     2125                ODFSizer.Add(ODFval,0,wx.ALIGN_CENTER_VERTICAL)
     2126            mainSizer.Add(ODFSizer,0,wx.ALIGN_CENTER_VERTICAL)
     2127            mainSizer.Add((0,5),0)
     2128        PFSizer = wx.BoxSizer(wx.HORIZONTAL)
     2129        PFSizer.Add(wx.StaticText(dataDisplay,-1,'Display pole figure for HKL: '),0,wx.ALIGN_CENTER_VERTICAL)
     2130        pfIndx = {}
     2131        for i in range(3):
     2132            pfVal = wx.TextCtrl(dataDisplay,wx.ID_ANY,'%3d'%(textureData['PFhkl'][i]),size=(40,20),style=wx.TE_PROCESS_ENTER)
     2133            pfIndx[pfVal.GetId()] = i
     2134            pfVal.Bind(wx.EVT_TEXT_ENTER,OnPFValue)
     2135            pfVal.Bind(wx.EVT_KILL_FOCUS,OnPFValue)
     2136            PFSizer.Add(pfVal,0,wx.ALIGN_CENTER_VERTICAL)           
     2137        mainSizer.Add(PFSizer,0,wx.ALIGN_CENTER_VERTICAL)
     2138        mainSizer.Add((0,5),0)
     2139        mainSizer.Add(wx.StaticText(dataDisplay,-1,'Sample orientation angles: '),0,wx.ALIGN_CENTER_VERTICAL)
     2140        mainSizer.Add((0,5),0)
     2141        angSizer = wx.BoxSizer(wx.HORIZONTAL)
     2142        angIndx = {}
     2143        valIndx = {}
     2144        for item in ['Sample omega','Sample chi','Sample phi']:
     2145            angRef = wx.CheckBox(dataDisplay,label=item+': ')
     2146            angRef.SetValue(textureData[item][0])
     2147            angIndx[angRef.GetId()] = item
     2148            angRef.Bind(wx.EVT_CHECKBOX, OnAngRef)
     2149            angSizer.Add(angRef,0,wx.ALIGN_CENTER_VERTICAL)
     2150            angVal = wx.TextCtrl(dataDisplay,wx.ID_ANY,'%8.2f'%(textureData[item][1]),style=wx.TE_PROCESS_ENTER)
     2151            valIndx[angVal.GetId()] = item
     2152            angVal.Bind(wx.EVT_TEXT_ENTER,OnAngValue)
     2153            angVal.Bind(wx.EVT_KILL_FOCUS,OnAngValue)
     2154            angSizer.Add(angVal,0,wx.ALIGN_CENTER_VERTICAL)
     2155            angSizer.Add((5,0),0)
     2156        mainSizer.Add(angSizer,0,wx.ALIGN_CENTER_VERTICAL)
    20332157        mainSizer.Add(wx.StaticText(dataDisplay,-1,'Histogram data for '+PhaseName+':'),0,wx.ALIGN_CENTER_VERTICAL)
    20342158        for item in keyList:
    20352159            histData = UseList[item]
    2036             mainSizer.Add(wx.StaticText(dataDisplay,-1,50*'_'))               
    20372160            mainSizer.Add((5,5),0)
    20382161            showData = wx.CheckBox(dataDisplay,label=' Show '+item)
     
    20592182               
    20602183            if item[:4] == 'PWDR' and UseList[item]['Show']:
    2061                 cutoffSizer = wx.BoxSizer(wx.HORIZONTAL)
    2062                 cutoffSizer.Add(wx.StaticText(dataDisplay,label=' Peak cutoff ratio: '),0,wx.ALIGN_CENTER_VERTICAL)
    2063                 cutoffVal = wx.TextCtrl(dataDisplay,wx.ID_ANY,'%.3f'%(UseList[item]['Cutoff']),
    2064                     style=wx.TE_PROCESS_ENTER)               
    2065                 Indx[cutoffVal.GetId()] = item
    2066                 cutoffVal.Bind(wx.EVT_TEXT_ENTER,OnCutoffVal)
    2067                 cutoffVal.Bind(wx.EVT_KILL_FOCUS,OnCutoffVal)
    2068                 cutoffSizer.Add(cutoffVal,0,wx.ALIGN_CENTER_VERTICAL)
    2069                 mainSizer.Add(cutoffSizer)
    20702184                mainSizer.Add((0,5),0)
    20712185                sizeSizer = wx.BoxSizer(wx.HORIZONTAL)
     
    22342348
    22352349        dataDisplay.SetSizer(mainSizer)
     2350        mainSizer.FitInside(self.dataFrame)
    22362351        Size = mainSizer.Fit(self.dataFrame)
    22372352        Size[0] = max(Size[0],300)+20
    2238         Size[1] += 30                           #compensate for status bar
     2353        Size[1] += 30                        #compensate for status bar
    22392354        DData.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-10)
    22402355        dataDisplay.SetSize(Size)
     
    22902405                            'Mustrain':['isotropic',[1.0,0.0],[False,False],[0,0,1],
    22912406                                NShkl*[0.01,],NShkl*[False,]],                           
    2292                             'Extinction':[0.0,False],'Cutoff':0.01}
     2407                            'Extinction':[0.0,False]}
    22932408                    data['Histograms'] = UseList
    22942409                    UpdateDData()
Note: See TracChangeset for help on using the changeset viewer.