Changeset 746


Ignore:
Timestamp:
Aug 31, 2012 1:56:07 PM (10 years ago)
Author:
vondreele
Message:

enter Pawley weight for negatives - penalty fxn.
remove delete Pawley refl - unnecessary
implement weighted Pawley penalty fxn - seems to work

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r740 r746  
    20362036        Histograms,Phases = self.GetUsedHistogramsAndPhasesfromTree()
    20372037        print Histograms.keys()
    2038         Natoms,atomIndx,phaseVary,phaseDict,pawleyLookup,FFtable,BLtable = G2str.GetPhaseData(Phases,RestDict=None,Print=False)       
     2038        Natoms,atomIndx,phaseVary,phaseDict,pawleyLookup,FFtable,BLtable = G2str.GetPhaseData(Phases,RestraintDict=None,Print=False)       
    20392039        hapVary,hapDict,controlDict = G2str.GetHistogramPhaseData(Phases,Histograms,Print=False)
    20402040        histVary,histDict,controlDict = G2str.GetHistogramData(Histograms,Print=False)
  • trunk/GSASIIgrid.py

    r740 r746  
    610610        self.PawleyEdit.Append(id=wxID_PAWLEYUPDATE, kind=wx.ITEM_NORMAL,text='Pawley update',
    611611            help='Update Pawley intensities with abs(Fobs) from reflection list')
    612         self.PawleyEdit.Append(id=wxID_PAWLEYDELETE, kind=wx.ITEM_NORMAL,text='Pawley delete',
    613             help='Delete Pawley reflection list')
     612#        self.PawleyEdit.Append(id=wxID_PAWLEYDELETE, kind=wx.ITEM_NORMAL,text='Pawley delete',
     613#            help='Delete selected Pawley reflection')
    614614           
    615615# Phase / Map peaks tab
  • trunk/GSASIIphsGUI.py

    r744 r746  
    406406        if 'Pawley dmin' not in generalData:
    407407            generalData['Pawley dmin'] = 1.0
     408        if 'Pawley neg wt' not in generalData:
     409            generalData['Pawley neg wt'] = 0.0
    408410           
    409411#        if 'SH Texture' not in generalData:
     
    463465            'AtomPtrs':[]
    464466            'Histogram list':['',]
    465             'Pawley dmin':1.0}
     467            'Pawley dmin':1.0,
     468            'Pawley neg wt':0.0}
    466469        'Atoms':[]
    467470        'Drawing':{}
     
    756759                pawlVal.SetValue("%.3f"%(generalData['Pawley dmin']))          #reset in case of error               
    757760           
     761            def OnPawleyNegWt(event):
     762                try:
     763                    wt = float(pawlNegWt.GetValue())
     764                    if 0. <= wt <= 1.:
     765                        generalData['Pawley neg wt'] = wt
     766                except ValueError:
     767                    pass
     768                pawlNegWt.SetValue("%.3g"%(generalData['Pawley neg wt']))          #reset in case of error               
     769
    758770            pawleySizer = wx.BoxSizer(wx.HORIZONTAL)
    759771            pawleySizer.Add(wx.StaticText(dataDisplay,label=' Pawley controls: '),0,wx.ALIGN_CENTER_VERTICAL)
     
    767779            pawlVal.Bind(wx.EVT_KILL_FOCUS,OnPawleyVal)
    768780            pawleySizer.Add(pawlVal,0,wx.ALIGN_CENTER_VERTICAL)
     781            pawleySizer.Add(wx.StaticText(dataDisplay,label=' Pawley neg. wt.: '),0,wx.ALIGN_CENTER_VERTICAL)
     782            pawlNegWt = wx.TextCtrl(dataDisplay,value='%.3g'%(generalData['Pawley neg wt']),style=wx.TE_PROCESS_ENTER)
     783            pawlNegWt.Bind(wx.EVT_TEXT_ENTER,OnPawleyNegWt)       
     784            pawlNegWt.Bind(wx.EVT_KILL_FOCUS,OnPawleyNegWt)
     785            pawleySizer.Add(pawlNegWt,0,wx.ALIGN_CENTER_VERTICAL)
    769786            return pawleySizer
    770787           
     
    789806                try:
    790807                    res = float(cutOff.GetValue())
    791                     if 1.0 <= res <= 100.:
     808                    if 10.0 <= res <= 100.:
    792809                        Map['cutOff'] = res
    793810                except ValueError:
     
    38753892        FillPawleyReflectionsGrid()
    38763893                           
    3877     def OnPawleyDelete(event):
    3878         dlg = wx.MessageDialog(G2frame,'Do you really want to delete Pawley reflections?','Delete',
     3894    def OnPawleyDelete(event):          #doesn't work
     3895        dlg = wx.MessageDialog(G2frame,'Do you really want to delete selected Pawley reflections?','Delete',
    38793896            wx.YES_NO | wx.ICON_QUESTION)
    38803897        try:
    38813898            result = dlg.ShowModal()
     3899            if result == wx.ID_YES:
     3900                Refs = data['Pawley ref']
     3901                Ind = G2frame.PawleyRefl.GetSelectedRows()
     3902                Ind.sort()
     3903                Ind.reverse()
     3904                for ind in Ind:
     3905                    Refs = np.delete(Refs,ind,0)
     3906                data['Pawley ref'] = Refs
     3907                FillPawleyReflectionsGrid()
    38823908        finally:
    38833909            dlg.Destroy()
    3884         if result == wx.ID_YES:
    3885             data['Pawley ref'] = []
    3886             FillPawleyReflectionsGrid()
    38873910
    38883911################################################################################
  • trunk/GSASIIstruct.py

    r744 r746  
    18931893################################################################################
    18941894
    1895 def penaltyFxn(parmDict,varyList):
    1896     pFxn = np.zeros(len(varyList))
     1895def penaltyFxn(Phases,parmDict,varyList):
     1896    pNames = []
     1897    pVals = []
     1898    negWt = {}
     1899    for phase in Phases:
     1900        negWt[Phases[phase]['pId']] = Phases[phase]['General']['Pawley neg wt']
     1901    for item in varyList:
     1902        if 'PWLref' in item and parmDict[item] < 0.:
     1903            pId = int(item.split(':')[0])
     1904            pNames.append(item)
     1905            pVals.append(-negWt[pId]*parmDict[item]**2)
     1906    pVals = np.array(pVals)
     1907    return pNames,pVals
     1908   
     1909def penaltyDeriv(pNames,pVal,Phases,parmDict,varyList):
     1910    pDerv = np.zeros((len(varyList),len(pVal)))
    18971911    for i,item in enumerate(varyList):
    1898         if 'PWLref' in item and parmDict[item] < 0.:
    1899             pFxn[i] = -parmDict[item]**2        #checked OK
    1900     return pFxn/1000.
    1901    
    1902 def penaltyDeriv(parmDict,varyList):
    1903     pDerv = np.zeros(len(varyList))
    1904     for i,item in enumerate(varyList):
    1905         if 'PWLref' in item and parmDict[item] < 0.:
    1906             pDerv[i] += 2.*parmDict[item]
    1907     return pDerv/1000.
     1912        if item in pNames:           
     1913            pDerv[i][pNames.index(item)] -= 2.*parmDict[item]
     1914    return pDerv
    19081915
    19091916################################################################################
     
    26522659                    try:
    26532660                        pInd =pfx+'PWLref:%d'%(pawleyLookup[pfx+'%d,%d,%d'%(h,k,l)])
    2654                         parmDict[pInd] = max(parmDict[pInd]/2.,parmDict[pInd])       
     2661#                        parmDict[pInd] = max(parmDict[pInd]/2.,parmDict[pInd])       
    26552662                        refl[9] = parmDict[pInd]
    26562663                    except KeyError:
     
    28042811#                        refl[9] = parmDict[pIdx]
    28052812                        dMdpw[iBeg:iFin] = dervDict['int']/refl[9]
    2806                         if parmDict[pIdx] < 0.:
    2807                             dMdpw[iBeg:iFin] = 2.*dervDict['int']/refl[9]
     2813#                        if parmDict[pIdx] < 0.:
     2814#                            dMdpw[iBeg:iFin] = 2.*dervDict['int']/refl[9]
    28082815                        if Ka2:
    28092816                            dMdpw[iBeg2:iFin2] += dervDict2['int']/refl[9]
    2810                             if parmDict[pIdx] < 0.:
    2811                                 dMdpw[iBeg2:iFin2] += 2.*dervDict['int']/refl[9]
     2817#                            if parmDict[pIdx] < 0.:
     2818#                                dMdpw[iBeg2:iFin2] += 2.*dervDict['int']/refl[9]
    28122819                        dMdv[idx] = dMdpw
    28132820                    except: # ValueError:
     
    29862993            dMdv = dMdvh
    29872994           
    2988 #    dpdv = penaltyDeriv(parmdict,varylist)
    2989 #    if np.any(dpdv):
    2990 #        dMdv = np.concatenate((dMdv.T,np.outer(dpdv,dpdv))).T
     2995    pNames,pVals = penaltyFxn(Phases,parmdict,varylist)
     2996    if np.sum(pVals):
     2997        dpdv = penaltyDeriv(pNames,pVals,Phases,parmdict,varylist)
     2998        dMdv = np.concatenate((dMdv.T,dpdv.T)).T
    29912999    return dMdv
    29923000
     
    30153023            Wt = np.sqrt(W[xB:xF])[np.newaxis,:]
    30163024            Dy = dy[xB:xF][np.newaxis,:]
    3017             print 'Jacobian size: ',dMdvh.shape
    30183025            dMdvh *= Wt
    30193026            if dlg:
     
    30753082        else:
    30763083            continue        #skip non-histogram entries
    3077 #    dpdv = penaltyDeriv(parmdict,varylist)
    3078 #    if np.any(dpdv):
    3079 #        pVec = dpdv*penaltyFxn(parmdict,varylist)
    3080 #        Vec += pVec
    3081 #        pHess = np.zeros((len(varylist),len(varylist)))
    3082 #        for i,val in enumerate(dpdv):
    3083 #            pHess[i][i] = dpdv[i]**2
    3084 #        Hess += pHess
     3084    pNames,pVals = penaltyFxn(Phases,parmdict,varylist)
     3085    if np.sum(pVals):
     3086        dpdv = penaltyDeriv(pNames,pVals,Phases,parmdict,varylist)
     3087        Vec += np.sum(dpdv,axis=1)
     3088        Hess += np.inner(dpdv,dpdv)
    30853089    return Vec,Hess
    30863090
     
    31913195        if not GoOn:
    31923196            parmdict['saved values'] = values
     3197            dlg.Destroy()
    31933198            raise Exception         #Abort!!
    3194 #    pFunc = penaltyFxn(parmdict,varylist)
    3195 #    if np.any(pFunc):
    3196 #        M = np.concatenate((M,pFunc))
     3199    pDict,pVals = penaltyFxn(Phases,parmdict,varylist)
     3200    if np.sum(pVals):
     3201        print 'Penalty function :',np.sum(pVals)
     3202        M = np.concatenate((M,pVals))
    31973203    return M
    31983204                       
Note: See TracChangeset for help on using the changeset viewer.