Changeset 1787


Ignore:
Timestamp:
Apr 13, 2015 12:59:34 PM (7 years ago)
Author:
vondreele
Message:

remove user reject HKL selection from Reflection List
implement rule bases user reject for HKLF reflections in Controls
user rejection changes mul to -mul; reflection list shows this in red
implement tool tip on 3Dhkl plots showing hkl indices on each point encountered

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r1784 r1787  
    144144] = [wx.NewId() for item in range(12)]
    145145
    146 [ wxID_SELECTPHASE,wxID_PWDHKLPLOT,wxID_PWD3DHKLPLOT,wxID_REJECTHKL,wxID_CLEARREJECT,
    147 ] = [wx.NewId() for item in range(5)]
     146[ wxID_SELECTPHASE,wxID_PWDHKLPLOT,wxID_PWD3DHKLPLOT,
     147] = [wx.NewId() for item in range(3)]
    148148
    149149[ wxID_PDFCOPYCONTROLS, wxID_PDFSAVECONTROLS, wxID_PDFLOADCONTROLS,
     
    14851485        self.ReflEdit.Append(id=wxID_PWD3DHKLPLOT,kind=wx.ITEM_NORMAL,text='Plot 3D HKLs',
    14861486            help='Plot HKLs from powder pattern in 3D')
    1487         self.RejectHKL = self.ReflEdit.Append(id=wxID_REJECTHKL,kind=wx.ITEM_NORMAL,text='Reject HKL toggle',
    1488             help='Reject selected HKL toggle; make mul *= -1')
    1489         self.ClearReject = self.ReflEdit.Append(id=wxID_CLEARREJECT,kind=wx.ITEM_NORMAL,text='Clear rejects',
    1490             help='Clear all rejected HKLs')
    14911487        self.PostfillDataMenu()
    14921488       
     
    22552251        data['max cyc'] = 3       
    22562252        data['F**2'] = False
    2257         data['minF/sig'] = 0
    22582253    if 'shift factor' not in data:
    22592254        data['shift factor'] = 1.
     
    22622257    if 'F**2' not in data:
    22632258        data['F**2'] = False
    2264         data['minF/sig'] = 0
    22652259    if 'Author' not in data:
    22662260        data['Author'] = 'no name'
     
    22742268        data['Copy2Next'] = False
    22752269    if 'Reverse Seq' not in data:
    2276         data['Reverse Seq'] = False   
     2270        data['Reverse Seq'] = False
     2271    if 'UsrReject' not in data:
     2272        data['UsrReject'] = {'minF/sig':0,'MinExt':0.01,'MaxDF/F':20.,'MaxD':500.,'MinD':0.05}
    22772273     
    22782274   
     
    23662362            data['F**2'] = fsqRef.GetValue()
    23672363       
    2368         def OnMinSig(event):
     2364        def OnUsrRej(event):
     2365            Obj = event.GetEventObject()
     2366            item,limits = Indx[Obj]
    23692367            try:
    2370                 value = min(max(float(minSig.GetValue()),0.),5.)
     2368                value = min(max(float(Obj.GetValue()),limits[0]),limits[1])
    23712369            except ValueError:
    2372                 value = 1.0
    2373             data['minF/sig'] = value
    2374             minSig.SetValue('%.2f'%(value))
     2370                value = data['UsrReject'][item]
     2371            data['UsrReject'][item] = value
     2372            Obj.SetValue('%.2f'%(value))
    23752373
    23762374        LSSizer = wx.FlexGridSizer(cols=4,vgap=5,hgap=5)
     
    23882386        Cnvrg.Bind(wx.EVT_KILL_FOCUS,OnConvergence)
    23892387        LSSizer.Add(Cnvrg,0,WACV)
     2388        Indx = {}
    23902389        if 'Hessian' in data['deriv type']:
    23912390            LSSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Max cycles: '),0,WACV)
     
    24032402            LSSizer.Add(Factr,0,WACV)
    24042403        if G2frame.Sngl:
    2405             LSSizer.Add((1,0),)
    2406             LSSizer.Add((1,0),)
     2404            userReject = data['UsrReject']
     2405            usrRej = {'minF/sig':[' Min obs/sig (0-5): ',[0,5], ],'MinExt':[' Min extinct. (0-.9): ',[0,.9],],
     2406                'MaxDF/F':[' Max delt-F/sig (3-20): ',[3.,20.],],'MaxD':[' Max d-spacing (3-500): ',[3,500],],
     2407                'MinD':[' Min d-spacing (0.1-1.0): ',[0.1,1.0],]}
     2408
    24072409            fsqRef = wx.CheckBox(G2frame.dataDisplay,-1,label='Refine HKLF as F^2? ')
    24082410            fsqRef.SetValue(data['F**2'])
    24092411            fsqRef.Bind(wx.EVT_CHECKBOX,OnFsqRef)
    24102412            LSSizer.Add(fsqRef,0,WACV)
    2411             LSSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,label='Min obs/sig (0-5): '),0,WACV)
    2412             minSig = wx.TextCtrl(G2frame.dataDisplay,-1,value='%.2f'%(data['minF/sig']),style=wx.TE_PROCESS_ENTER)
    2413             minSig.Bind(wx.EVT_TEXT_ENTER,OnMinSig)
    2414             minSig.Bind(wx.EVT_KILL_FOCUS,OnMinSig)
    2415             LSSizer.Add(minSig,0,WACV)
     2413            LSSizer.Add((1,0),)
     2414            for item in usrRej:
     2415                LSSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,label=usrRej[item][0]),0,WACV)
     2416                usrrej = wx.TextCtrl(G2frame.dataDisplay,-1,value='%.2f'%(userReject[item]),style=wx.TE_PROCESS_ENTER)
     2417                Indx[usrrej] = [item,usrRej[item][1]]
     2418                usrrej.Bind(wx.EVT_TEXT_ENTER,OnUsrRej)
     2419                usrrej.Bind(wx.EVT_KILL_FOCUS,OnUsrRej)
     2420                LSSizer.Add(usrrej,0,WACV)
    24162421        return LSSizer
    24172422       
  • trunk/GSASIIplot.py

    r1786 r1787  
    703703        Model = glGetDoublev(GL_MODELVIEW_MATRIX)
    704704        Zmax = 1.
     705        xy = [int(xy[0]),int(View[3]-xy[1])]
    705706        for i,ref in enumerate(hklRef):
    706             h,k,l = ref[1:4]
     707            h,k,l = ref[:3]
    707708            X,Y,Z = gluProject(h,k,l,Model,Proj,View)
    708709            XY = [int(X),int(Y)]
    709             print xy,XY
    710             if np.allclose(xy,XY,atol=10):
     710            if np.allclose(xy,XY,atol=10) and Z < Zmax:
    711711                Zmax = Z
    712                 return [h,k,l]
     712                return [int(h),int(k),int(l)]
    713713                       
    714714    def SetTranslation(newxy):
     
    795795                Q = drawingData['Quaternion']
    796796            Draw('move')
    797 #        else:
    798 #            hkl = GetTruePosition(newxy)
     797        else:
     798            hkl = GetTruePosition(newxy)
     799            if hkl:
     800                h,k,l = hkl
     801                Page.canvas.SetToolTipString('%d %d %d'%(h,k,l))
     802                G2frame.G2plotNB.status.SetStatusText('hkl = %d %d %d'%(h,k,l),1)
    799803       
    800804    def OnMouseWheel(event):
  • trunk/GSASIIpwdGUI.py

    r1785 r1787  
    29472947        G2plt.Plot3DSngl(G2frame,newPlot=True,Data=controls,hklRef=refList,Title=phaseName)
    29482948       
    2949     def OnRejectHKL(event):
    2950         phaseName = G2frame.RefList
    2951         pId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Phases')
    2952         phaseId =  G2gd.GetPatternTreeItemId(G2frame,pId,phaseName)
    2953         General = G2frame.PatternTree.GetItemPyData(phaseId)['General']
    2954         im = General.get('Super',0)
    2955         rowList = G2frame.refTable[phaseName].GetSelectedRows()
    2956         for row in rowList:
    2957             data[1]['RefList'][row][3+im] *= -1 #toggles mul & -mul
    2958             if data[1]['RefList'][row][3+im] < 0:
    2959                 G2frame.refTable[phaseName].SetCellBackgroundColour(row,3+im,wx.RED)
    2960             else:
    2961                 G2frame.refTable[phaseName].SetCellBackgroundColour(row,3+im,wx.WHITE)
    2962         G2frame.refTable[phaseName].ClearSelection()
    2963         ShowReflTable(phaseName)
    2964        
    2965     def OnClearReject(event):
    2966         phaseName = G2frame.RefList
    2967         pId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Phases')
    2968         phaseId =  G2gd.GetPatternTreeItemId(G2frame,pId,phaseName)
    2969         General = G2frame.PatternTree.GetItemPyData(phaseId)['General']
    2970         im = General.get('Super',0)
    2971         for row in range(G2frame.refTable[phaseName].GetNumberRows()):
    2972             if data[1]['RefList'][row][3+im] < 0:
    2973                 data[1]['RefList'][row][3+im] *= -1 #toggles mul & -mul
    2974                 G2frame.refTable[phaseName].SetCellBackgroundColour(row,3+im,wx.WHITE)
    2975         UpdateReflectionGrid(G2frame,data,True,Name)
    2976                    
    29772949    def MakeReflectionTable(phaseName):
    29782950        '''Returns a wx.grid table (G2gd.Table) containing a list of all reflections
     
    31263098        G2frame.Bind(wx.EVT_MENU, OnPlotHKL, id=G2gd.wxID_PWDHKLPLOT)
    31273099        G2frame.Bind(wx.EVT_MENU, OnPlot3DHKL, id=G2gd.wxID_PWD3DHKLPLOT)
    3128         G2frame.Bind(wx.EVT_MENU,OnRejectHKL, id=G2gd.wxID_REJECTHKL)
    3129         G2frame.Bind(wx.EVT_MENU,OnClearReject, id=G2gd.wxID_CLEARREJECT)
    31303100        G2frame.dataFrame.SelectPhase.Enable(False)
    31313101    else:
     
    31363106        G2frame.Bind(wx.EVT_MENU, OnPlotHKL, id=G2gd.wxID_PWDHKLPLOT)
    31373107        G2frame.Bind(wx.EVT_MENU, OnPlot3DHKL, id=G2gd.wxID_PWD3DHKLPLOT)
    3138         G2frame.dataFrame.RejectHKL.Enable(False)
    3139         G2frame.dataFrame.ClearReject.Enable(False)
    31403108        G2frame.dataFrame.SelectPhase.Enable(False)
    31413109           
  • trunk/GSASIIstrMath.py

    r1786 r1787  
    23882388    return dMdv
    23892389   
     2390def UserRejectHKL(ref,im,userReject):
     2391    if ref[5+im]/ref[6+im] < userReject['minF/sig']:
     2392        return False
     2393    elif userReject['MaxD'] < ref[4+im] > userReject['MinD']:
     2394        return False
     2395    elif ref[11+im] < userReject['MinExt']:
     2396        return False
     2397    elif abs(ref[5+im]-ref[7+im])/ref[6+im] > userReject['MaxDF/F']:
     2398        return False
     2399    return True
     2400   
     2401   
     2402   
    23902403def dervHKLF(Histogram,Phase,calcControls,varylist,parmDict,rigidbodyDict):
    23912404    '''Loop over reflections in a HKLF histogram and compute derivatives of the fitting
     
    24062419        SSGMT = np.array([ops[0].T for ops in SSGData['SSGOps']])
    24072420        im = 1  #offset in SS reflection list
    2408         #??
    24092421    A = [parmDict[pfx+'A%d'%(i)] for i in range(6)]
    24102422    G,g = G2lat.A2Gmat(A)       #recip & real metric tensors
     
    24262438                dervDict = SCExtinction(ref,im,phfx,hfx,pfx,calcControls,parmDict,varylist+dependentVars)[1]
    24272439                w = 1.0/ref[6+im]
    2428                 if w*ref[5+im] >= calcControls['minF/sig'] and ref[3+im] > 0:
     2440                if ref[3+im] > 0:
    24292441                    wdf[iref] = w*(ref[5+im]-ref[7+im])
    24302442                    for j,var in enumerate(varylist):
     
    24552467                Fc = np.sqrt(ref[7+im])
    24562468                w = 1.0/ref[6+im]
    2457                 if ref[5+im]/ref[6+im] >= calcControls['minF/sig'] and ref[3+im] > 0:
     2469                if ref[3+im] > 0:
    24582470                    wdf[iref] = 2.0*Fo*w*(Fo-Fc)
    24592471                    for j,var in enumerate(varylist):
     
    26832695                SSGMT = np.array([ops[0].T for ops in SSGData['SSGOps']])
    26842696                im = 1  #offset in SS reflection list
    2685                 #??
    26862697            A = [parmDict[pfx+'A%d'%(i)] for i in range(6)]
    26872698            G,g = G2lat.A2Gmat(A)       #recip & real metric tensors
     
    27082719                        ref[7+im] = parmDict[phfx+'Scale']*ref[9+im]*ref[11+im]  #correct Fc^2 for extinction
    27092720                        ref[8+im] = ref[5+im]/(parmDict[phfx+'Scale']*ref[11+im])
    2710                         if w*ref[5+im] >= calcControls['minF/sig'] and ref[3+im] > 0:  #min cutoff & user rejection
     2721                        if UserRejectHKL(ref,im,calcControls['UsrReject']):
     2722                            ref[3+im] = abs(ref[3+im])      #mark as allowed
    27112723                            Fo = np.sqrt(ref[5+im])
    27122724                            sumFo += Fo
     
    27182730                            sumwYo += (w*ref[5+im])**2      #w*Fo^2
    27192731                        else:
     2732                            ref[3+im] = -abs(ref[3+im])      #mark as rejected
    27202733                            nrej += 1
    27212734            else:
     
    27282741                        Fc = np.sqrt(ref[7+im])
    27292742                        w = 2.0*(Fo/ref[6+im])**2    # 1/sig(F)?
    2730                         if ref[5+im]/ref[6+im] >= calcControls['minF/sig'] and ref[3+im] > 0:  #min cutoff & user rejection
     2743                        if UserRejectHKL(ref,im,calcControls['UsrReject']):
     2744                            ref[3+im] = abs(ref[3+im])      #mark as allowed
    27312745                            sumFo += Fo
    27322746                            sumFo2 += ref[5+im]
     
    27372751                            sumwYo += (w*Fo)**2
    27382752                        else:
     2753                            ref[3+im] = -abs(ref[3+im])      #mark as rejected
    27392754                            nrej += 1
    27402755            Histogram['Residuals']['Nobs'] = nobs
Note: See TracChangeset for help on using the changeset viewer.