Changeset 289


Ignore:
Timestamp:
May 10, 2011 5:02:50 PM (10 years ago)
Author:
vondreele
Message:
 
Location:
trunk
Files:
1 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r281 r289  
    918918                dlg.Destroy()
    919919       
    920     def GetFileList(fileType,skip=None):        #potentially useful?
     920    def GetFileList(self,fileType,skip=None):        #potentially useful?
    921921        fileList = []
    922922        Source = ''
  • trunk/GSASIIgrid.py

    r273 r289  
    455455                self.data[row][col] = value
    456456        innerSetValue(row, col, value)
    457        
     457               
    458458def UpdateNotebook(self,data):       
    459459    if data:
  • trunk/GSASIIplot.py

    r282 r289  
    990990    Plot.set_xlim(xlim)
    991991    Page.canvas.draw()
     992    Page.toolbar.push_current()
    992993
    993994def PlotPeakWidths(self):
  • trunk/GSASIIpwd.py

    r275 r289  
    1515import numpy.linalg as nl
    1616import scipy.interpolate as si
     17import scipy.stats as st
    1718import GSASIIpath
    1819import pypowder as pyp              #assumes path has been amended to include correctr bin directory
     
    3536npasind = lambda x: 180.*np.arcsin(x)/math.pi
    3637npcosd = lambda x: np.cos(x*math.pi/180.)
     38npacosd = lambda x: 180.*np.arccos(x)/math.pi
    3739nptand = lambda x: np.tan(x*math.pi/180.)
    3840npatand = lambda x: 180.*np.arctan(x)/np.pi
     
    4042npT2stl = lambda tth, wave: 2.0*npsind(tth/2.0)/wave
    4143npT2q = lambda tth,wave: 2.0*np.pi*npT2stl(tth,wave)
    42 
     44   
     45np.seterr(divide='ignore')      #this is for the FCJ functions
     46
     47#Peak shape definitions
     48# Finger-Cox_Jephcoat D(2phi,2th) function for S/L = H/L
     49
     50class fcjde_gen(st.rv_continuous):
     51   
     52    """
     53    Finger-Cox-Jephcoat D(2phi,2th) function for S/L = H/L
     54    Ref: J. Appl. Cryst. (1994) 27, 892-900.
     55    Parameters
     56    -----------------------------------------
     57    x: array like 2-theta positions
     58    t: 2-theta position of peak
     59    s: sum(S/L,H/L); S: sample height, H: detector opening,
     60        L: sample to detector opening distance
     61    Result for fcj.pdf
     62    -----------------------------------------
     63    if x < t & s = S/L+H/L:
     64        fcj.pdf = [1/sqrt({cos(x)**2/cos(t)**2}-1) - 1/s]/cos(x)   
     65    if x >= t:
     66        fcj.pdf = 0   
     67    """
     68    def _pdf(self,x,t,s):
     69        ax = npcosd(x)**2
     70        bx = npcosd(t)**2
     71        bx = np.where(ax>bx,bx,ax)
     72        fx = np.where(ax>bx,(1./np.sqrt((ax/bx)-1.)-1./s)/npcosd(x),0.0)
     73        return np.where(((x < t) & (fx > 0)),fx,0.0)
     74#    def _cdf(self, x):
     75#    def _ppf(self, q):
     76#    def _sf(self, x):
     77#    def _isf(self, q):
     78#    def _stats(self):
     79#    def _entropy(self):
     80       
     81fcjde = fcjde_gen(name='fcjde')
     82               
     83       
     84# Finger-Cox_Jephcoat D(2phi,2th) function for S/L != H/L
     85
     86class fcjd_gen(st.rv_continuous):
     87    """
     88    Finger-Cox-Jephcoat D(2phi,2th) function for S/L != H/L
     89    Ref: J. Appl. Cryst. (1994) 27, 892-900.
     90    Parameters
     91    -----------------------------------------
     92    x: array like 2-theta positions
     93    t: 2-theta position of peak
     94    h: detector opening height/sample to detector opening distance
     95    s: sample height/sample to detector opening distance
     96    Result for fcj2.pdf
     97    -----------------------------------------
     98    infl = acos(cos(t)*sqrt((h-s)**2+1))
     99    if x < infl:   
     100        fcj.pdf = [1/sqrt({cos(x)**2/cos(t)**2}-1) - 1/shl]/cos(2phi)
     101   
     102    for 2phi < 2tth & shl = S/L+H/L
     103   
     104    fcj.pdf(x,tth,shl) = 0
     105   
     106    for 2phi >= 2th
     107    """
     108    def _pdf(self,x,t,h,s):
     109        a = npcosd(t)*(np.sqrt((h-s)**2+1.))
     110        infl = np.where((a <= 1.),npacosd(a),t)
     111        ax = npcosd(x)**2
     112        bx = npcosd(t)**2
     113        bx = np.where(ax>bx,bx,ax)
     114        H = np.where(ax>bx,np.sqrt((ax/bx)-1.),0.0)
     115        W1 = h+s-H
     116        W2 = np.where ((h > s),2.*s,2.*h)
     117        fx = 2.*h*np.sqrt((ax/bx)-1.)*npcosd(x)
     118        fx = np.where(fx>0.0,1./fx,0.0)
     119        fx = np.where((x < infl),fx*W1,fx*W2)
     120        return np.where((fx > 0.),fx,0.0)
     121#    def _cdf(self, x):
     122#    def _ppf(self, q):
     123#    def _sf(self, x):
     124#    def _isf(self, q):
     125#    def _stats(self):
     126#    def _entropy(self):
     127       
     128fcjd = fcjd_gen(name='fcjd')
     129               
     130# Finger-Cox_Jephcoat D(2phi,2th) function for S/L != H/L using sum & difference
     131
     132class fcjdsd_gen(st.rv_continuous):
     133    """
     134    Finger-Cox-Jephcoat D(2phi,2th) function for S/L != H/L using sum & difference
     135   
     136    fcj.pdf(x,tth,shl) = [1/sqrt({cos(2phi)**2/cos(2th)**2}-1) - 1/shl]/cos(2phi)
     137   
     138    for 2phi < 2tth & shl = S/L+H/L
     139   
     140    fcj.pdf(x,tth,shl) = 0
     141   
     142    for 2phi >= 2th
     143    """
     144    def _argcheck(self,t,s,d):
     145        return (t > 0)&(s > 0)&(abs(d) < s)
     146    def _pdf(self,x,t,s,d):
     147        a = npcosd(t)*np.sqrt(d**2+1.)
     148        infl = np.where((a < 1.),npacosd(a),t)
     149        ax = npcosd(x)**2
     150        bx = npcosd(t)**2
     151        bx = np.where(ax>bx,bx,ax)
     152        H = np.where(ax>bx,np.sqrt((ax/bx)-1.),0.0)
     153        W1 = s-H
     154        W2 = np.where ((d > 0),s-d,s+d)
     155        fx = np.where(ax>bx,1./((s+d)*np.sqrt((ax/bx)-1.)*npcosd(x)),0.0)
     156        fx = np.where((x < infl),fx*W1,fx*W2)
     157        return np.where((fx > 0.),fx,0.0)
     158#    def _cdf(self, x):
     159#    def _ppf(self, q):
     160#    def _sf(self, x):
     161#    def _isf(self, q):
     162#    def _stats(self):
     163#    def _entropy(self):
     164       
     165fcjdsd = fcjdsd_gen(name='fcjdsd')
     166               
    43167def factorize(num):
    44168    ''' Provide prime number factors for integer num
  • trunk/GSASIIpwdGUI.py

    r281 r289  
    136136
    137137    def RefreshPeakGrid(event):
     138        r,c =  event.GetRow(),event.GetCol()
     139       
    138140        event.StopPropagation()
    139141        data = self.PeakTable.GetData()
     
    161163        if r < 0 and self.dataDisplay.GetColLabelValue(c) == 'refine':
    162164            self.dataDisplay.SelectCol(c,False)
     165           
     166    def OnRefine(event):
     167        r,c =  event.GetRow(),event.GetCol()
     168        if self.dataDisplay.GetColLabelValue(c) == 'refine':
     169            if self.PeakTable.GetValue(r,c):
     170                data[r][c] = False
     171            else:
     172                data[r][c] = True
     173            print r,c,data[r][c]
    163174       
    164175                       
     
    271282    self.dataDisplay.Bind(wg.EVT_GRID_LABEL_LEFT_CLICK, RowSelect)                 
    272283    self.dataDisplay.Bind(wg.EVT_GRID_LABEL_LEFT_DCLICK, RefineSelect)
     284    self.dataDisplay.Bind(wg.EVT_GRID_CELL_RIGHT_CLICK,OnRefine)
    273285    self.dataDisplay.SetMargins(0,0)
    274286    self.dataDisplay.AutoSizeColumns(False)
     
    379391                        peak[4] = ins[4]*tand(peak[0]/2.0)**2+ins[5]*tand(peak[0]/2.0)+ins[6]
    380392                        peak[6] = ins[7]/cosd(peak[0]/2.0)+ins[8]*tand(peak[0]/2.0)
    381                        
     393                                               
    382394    def OnReset(event):
    383395        if Ka2:
     
    563575   
    564576    def RefreshIndexPeaksGrid(event):
     577        r,c =  event.GetRow(),event.GetCol()
    565578        data = self.IndexPeaksTable.GetData()
    566         self.PatternTree.SetItemPyData(IndexId,data)
    567        
     579        if c == 2:
     580            if data[r][c]:
     581                data[r][c] = False
     582            else:
     583                data[r][c] = True
     584            self.IndexPeaksTable.SetData(data)
     585            self.PatternTree.SetItemPyData(IndexId,data)
     586            self.dataDisplay.ForceRefresh()
     587           
    568588    def OnReload(event):
    569589        data = []
     
    597617    if self.dataDisplay:
    598618        self.dataFrame.Clear()
    599     self.dataFrame.SetMenuBar(self.dataFrame.IndPeaksMenu)
    600619    if not self.dataFrame.GetStatusBar():
    601620        Status = self.dataFrame.CreateStatusBar()
    602     self.Bind(wx.EVT_MENU, OnReload, id=G2gd.wxID_INDXRELOAD)
     621    if 'PWD' in self.PatternTree.GetItemText(self.PatternId):
     622        self.dataFrame.SetMenuBar(self.dataFrame.IndPeaksMenu)
     623        self.Bind(wx.EVT_MENU, OnReload, id=G2gd.wxID_INDXRELOAD)
    603624    inst = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters'))[1]
    604625    self.dataFrame.IndexPeaks.Enable(False)
     
    630651    self.dataDisplay = G2gd.GSGrid(parent=self.dataFrame)               
    631652    self.dataDisplay.SetTable(self.IndexPeaksTable, True)
    632     self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshIndexPeaksGrid)
     653    for r in range(self.dataDisplay.GetNumberRows()):
     654        for c in range(self.dataDisplay.GetNumberCols()):
     655            if c == 2:
     656                self.dataDisplay.SetReadOnly(r,c,isReadOnly=False)
     657            else:
     658                self.dataDisplay.SetReadOnly(r,c,isReadOnly=True)
     659    self.dataDisplay.Bind(wg.EVT_GRID_CELL_LEFT_CLICK, RefreshIndexPeaksGrid)
    633660    self.dataDisplay.Bind(wx.EVT_KEY_DOWN, KeyEditPickGrid)                 
    634661    self.dataDisplay.SetMargins(0,0)
     
    893920                    UnitCellsTable.SetValue(i,c,False)
    894921                UnitCellsTable.SetValue(r,c,True)
     922                gridDisplay.ForceRefresh()
    895923                cells[r][-1] = True
    896924                ibrav = cells[r][2]
     
    10641092        gridDisplay.SetTable(UnitCellsTable, True)
    10651093        self.dataFrame.CopyCell.Enable(True)
    1066         gridDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshUnitCellsGrid)
     1094#        gridDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshUnitCellsGrid)
     1095        gridDisplay.Bind(wg.EVT_GRID_CELL_LEFT_CLICK,RefreshUnitCellsGrid)
    10671096        gridDisplay.SetMargins(0,0)
    10681097        gridDisplay.SetRowLabelSize(0)
Note: See TracChangeset for help on using the changeset viewer.