Changeset 633


Ignore:
Timestamp:
May 26, 2012 9:57:51 AM (9 years ago)
Author:
vondreele
Message:

fix atom equivs for xxx positions, etc.
continue HKLF implementation

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r630 r633  
    779779        data['shift factor'] = 1.
    780780        data['max cyc'] = 3       
     781        data['F**2'] = True
     782        data['minF/sig'] = 0
    781783    if 'shift factor' not in data:
    782784        data['shift factor'] = 1.
    783785    if 'max cyc' not in data:
    784         data['max cyc'] = 3       
     786        data['max cyc'] = 3
     787    if 'F**2' not in data:
     788        data['F**2'] = True
     789        data['minF/sig'] = 0
    785790    #end patch
    786791    def SeqSizer():
     
    848853            data['shift factor'] = value
    849854            Factr.SetValue('%.5f'%(value))
    850        
    851         LSSizer = wx.FlexGridSizer(cols=6,vgap=5,hgap=5)
     855           
     856        def OnFsqRef(event):
     857            data['F**2'] = fsqRef.GetValue()
     858       
     859        def OnMinSig(event):
     860            try:
     861                value = min(max(float(minSig.GetValue()),0.),5.)
     862            except ValueError:
     863                value = 1.0
     864            data['minF/sig'] = value
     865            Factr.SetValue('%.2f'%(value))
     866
     867        LSSizer = wx.FlexGridSizer(cols=4,vgap=5,hgap=5)
    852868        LSSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Refinement derivatives: '),0,wx.ALIGN_CENTER_VERTICAL)
    853869        Choice=['analytic Jacobian','numeric','analytic Hessian']
     
    877893            Factr.Bind(wx.EVT_KILL_FOCUS,OnFactor)
    878894            LSSizer.Add(Factr,0,wx.ALIGN_CENTER_VERTICAL)
     895        if G2frame.Sngl:
     896            LSSizer.Add((1,0),)
     897            LSSizer.Add((1,0),)
     898            fsqRef = wx.CheckBox(G2frame.dataDisplay,-1,label='Refine HKLF as F^2? ')
     899            fsqRef.SetValue(data['F**2'])
     900            fsqRef.Bind(wx.EVT_CHECKBOX,OnFsqRef)
     901            LSSizer.Add(fsqRef,0,wx.ALIGN_CENTER_VERTICAL)
     902            LSSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,label='Min obs/sig (0-5): '),0,wx.ALIGN_CENTER_VERTICAL)
     903            minSig = wx.TextCtrl(G2frame.dataDisplay,-1,value='%.2f'%(data['minF/sig']),style=wx.TE_PROCESS_ENTER)
     904            minSig.Bind(wx.EVT_TEXT_ENTER,OnMinSig)
     905            minSig.Bind(wx.EVT_KILL_FOCUS,OnMinSig)
     906            LSSizer.Add(minSig,0,wx.ALIGN_CENTER_VERTICAL)
    879907        return LSSizer
    880908       
     
    11321160        if page[1] == 'phs':
    11331161            atchoice = [item+' for '+phaseAtNames[item] for item in varList]
    1134             dlg = wx.MultiChoiceDialog(G2frame,
    1135                                        'Select more variables:'+legend,
    1136                                        'Constrain '+FrstVarb+' and...',
    1137                                        atchoice)
     1162            dlg = wx.MultiChoiceDialog(G2frame,'Select more variables:'+legend,
     1163                'Constrain '+FrstVarb+' and...',atchoice)
    11381164        else:
    1139             dlg = wx.MultiChoiceDialog(G2frame,
    1140                                        'Select more variables:'+legend,
    1141                                        'Constrain '+FrstVarb+' and...',
    1142                                        varList)
     1165            dlg = wx.MultiChoiceDialog(G2frame,'Select more variables:'+legend,
     1166                'Constrain '+FrstVarb+' and...',varList)
    11431167        varbs = [FrstVarb,]
    11441168        if dlg.ShowModal() == wx.ID_OK:
     
    11801204        if errmsg:
    11811205            res = G2frame.ErrorDialog('Constraint Error',
    1182                                 'Error with newly added constraint:\n'+errmsg+
    1183                                 '\n\nDiscard newly added constraint?',
    1184                                 parent=G2frame.dataFrame,
    1185                                 wtype=wx.YES_NO)
     1206                'Error with newly added constraint:\n'+errmsg+
     1207                '\n\nDiscard newly added constraint?',parent=G2frame.dataFrame,
     1208                wtype=wx.YES_NO)
    11861209            return res != wx.ID_YES
    11871210        elif warnmsg:
     
    12061229        if errmsg:
    12071230            res = G2frame.ErrorDialog('Constraint Error',
    1208                                 'Error after editing constraint:\n'+errmsg+
    1209                                 '\n\nDiscard last constraint edit?',
    1210                                 parent=G2frame.dataFrame,
    1211                                 wtype=wx.YES_NO)
     1231                'Error after editing constraint:\n'+errmsg+
     1232                '\n\nDiscard last constraint edit?',parent=G2frame.dataFrame,
     1233                wtype=wx.YES_NO)
    12121234            return res != wx.ID_YES
    12131235        elif warnmsg:
     
    15371559    errmsg, warnmsg = G2mv.CheckConstraints('',constDictList,fixedList)
    15381560    if errmsg:
    1539         G2frame.ErrorDialog('Constraint Error',
    1540                             'Error in constraints:\n'+errmsg,
    1541                             parent=G2frame.dataFrame)
    1542                            
     1561        G2frame.ErrorDialog('Constraint Error','Error in constraints:\n'+errmsg,
     1562            parent=G2frame.dataFrame)
    15431563    elif warnmsg:
    15441564        print 'Unexpected contraint warning:\n',warnmsg
  • trunk/GSASIIstruct.py

    r632 r633  
    684684                    if 'X' in at[2]:
    685685                        xId,xCoef = G2spc.GetCSxinel(at[7])
    686                         delnames = [pfx+'dAx:'+str(i),pfx+'dAy:'+str(i),pfx+'dAz:'+str(i)]
     686                        names = [pfx+'dAx:'+str(i),pfx+'dAy:'+str(i),pfx+'dAz:'+str(i)]
     687                        equivs = [[],[],[]]
    687688                        for j in range(3):
    688689                            if xId[j] > 0:                               
    689                                 phaseVary.append(delnames[j])
    690                                 for k in range(j):
    691                                     if xId[j] == xId[k]:
    692                                         G2mv.StoreEquivalence(delnames[k],((delnames[j],xCoef[j]),))
     690                                phaseVary.append(names[j])
     691                                equivs[xId[j]-1].append([names[j],xCoef[j]])
     692                        for equiv in equivs:
     693                            if len(equiv) > 1:
     694                                name = equiv[0][0]
     695                                for eqv in equiv[1:]:
     696                                    G2mv.StoreEquivalence(name,(eqv,))
    693697                    if 'U' in at[2]:
    694698                        if at[9] == 'I':
     
    698702                            names = [pfx+'AU11:'+str(i),pfx+'AU22:'+str(i),pfx+'AU33:'+str(i),
    699703                                pfx+'AU12:'+str(i),pfx+'AU13:'+str(i),pfx+'AU23:'+str(i)]
     704                            equivs = [[],[],[],[],[],[]]
    700705                            for j in range(6):
    701706                                if uId[j] > 0:                               
    702707                                    phaseVary.append(names[j])
    703                                     for k in range(j):
    704                                         if uId[j] == uId[k]:
    705                                             G2mv.StoreEquivalence(names[k],((names[j],uCoef[j]),))
     708                                    equivs[uId[j]-1].append([names[j],uCoef[j]])
     709                            for equiv in equivs:
     710                                if len(equiv) > 1:
     711                                    name = equiv[0][0]
     712                                    for eqv in equiv[1:]:
     713                                        G2mv.StoreEquivalence(name,(eqv,))
    706714#            elif General['Type'] == 'magnetic':
    707715#            elif General['Type'] == 'macromolecular':
     
    14571465            elif 'HKLF' in histogram:
    14581466                pfx = str(pId)+':'+str(hId)+':'
     1467                ScalExtSig = {}
     1468                for item in ['Scale','Ep','Eg','Es']:
     1469                    if parmDict.get(pfx+item):
     1470                        hapData[item][0] = parmDict[pfx+item]
     1471                        if pfx+item in sigDict:
     1472                            ScalExtSig[item] = sigDict[pfx+item]
     1473                if Print:
     1474                    if 'Scale' in ScalExtSig:
     1475                        print ' Scale factor : %10.4f, sig %10.4f'%(hapData['Scale'][0],ScalExtSig['Scale'])
    14591476# fix after it runs!               
    1460 #                hapDict[pfx+'Scale'] = hapData['Scale'][0]
    1461 #                if hapData['Scale'][1]:
    1462 #                    hapVary.append(pfx+'Scale')
    1463 #                extApprox,extType,extParms = hapData['Extinction']
    1464 #                controlDict[pfx+'EType'] = extType
    1465 #                controlDict[pfx+'EApprox'] = extApprox
    1466 #                if 'Primary' in extType:
    1467 #                    Ekey = ['Ep',]
    1468 #                elif 'Secondary Type II' == extType:
    1469 #                    Ekey = ['Es',]
    1470 #                elif 'Secondary Type I' == extType:
    1471 #                    Ekey = ['Eg',]
    1472 #                else:
    1473 #                    Ekey = ['Eg','Es']
    1474 #                for eKey in Ekey:
    1475 #                    hapDict[pfx+eKey] = extParms[eKey][0]
    1476 #                    if extParms[eKey][1]:
    1477 #                        hapVary.append(pfx+eKey)
    1478 #                if Print:
    14791477#                    print '\n Phase: ',phase,' in histogram: ',histogram
    14801478#                    print 135*'-'
     
    28942892        elif 'HKLF' in histogram[:4]:
    28952893            Histogram = Histograms[histogram]
     2894            phase = Histogram['Reflection Lists']
     2895            Phase = Phases[phase]
    28962896            hId = Histogram['hId']
    28972897            hfx = ':%d:'%(hId)
     2898            pfx = '%d::'%(Phase['pId'])
     2899            phfx = '%d:%d:'%(Phase['pId'],hId)
     2900            SGData = Phase['General']['SGData']
     2901            A = [parmdict[pfx+'A%d'%(i)] for i in range(6)]
     2902            G,g = G2lat.A2Gmat(A)       #recip & real metric tensors
     2903            refList = Histogram['Data']
     2904            Histogram['Nobs'] = len(refList)
     2905            dFdvDict = StructureFactorDerv(refList,G,hfx,pfx,SGData,calcControls,parmdict)
     2906            df = np.empty(len(refList))
     2907            for i,ref in enumerate(refList):
     2908                if ref[6] > 0:
     2909                    Nobs += 1
     2910                    ref[7] = parmdict[phfx+'Scale']*ref[9]
     2911                    ref[8] = ref[5]/parmdict[phfx+'Scale']
     2912                    df[i] = (ref[5]-ref[7])/ref[6]
     2913                    sumwYo += ref[5]/ref[6]**2
     2914            M = np.concatenate((M,df))
    28982915
    28992916#    dpdv = penaltyDeriv(parmdict,varylist)
     
    29512968            refList = Histogram['Data']
    29522969            Histogram['Nobs'] = len(refList)
    2953             Nobs += Histogram['Nobs']
    2954             StructureFactor(refList,G,hfx,pfx,SGData,calcControls,parmdict)
     2970            refList = StructureFactor(refList,G,hfx,pfx,SGData,calcControls,parmdict)
    29552971            df = np.empty(len(refList))
    29562972            for i,ref in enumerate(refList):
    2957                 ref[7] = parmdict[phfx+'Scale']*ref[9]
    2958                 ref[8] = ref[5]/parmdict[phfx+'Scale']
    2959                 df[i] = ((ref[5]-ref[7])/ref[6])**2
     2973                if ref[6] > 0 and ref[5] > 0:
     2974                    ref[7] = parmdict[phfx+'Scale']*ref[9]
     2975                    ref[8] = ref[5]/parmdict[phfx+'Scale']
     2976                    if calcControls['F**2']:
     2977                        if ref[5]/ref[6] >= calcControls['minF/sig']:
     2978                            Nobs += 1
     2979                            df[i] = -(ref[5]-ref[7])/ref[6]
     2980                            sumwYo += ref[5]/ref[6]**2
     2981                    else:
     2982                        Fo = np.sqrt(ref[5])
     2983                        Fc = np.sqrt(ref[7])
     2984                        sig = ref[6]/(2.0*Fo)
     2985                        if Fo/sig >= calcControls['minF/sig']:
     2986                            Nobs += 1
     2987                            df[i] = (Fo-Fc)/sig
     2988                            sumwYo += Fo/sig**2
    29602989            M = np.concatenate((M,df))
    29612990
     
    29642993    Histograms['Nobs'] = Nobs
    29652994    Rwp = min(100.,np.sqrt(np.sum(M**2)/sumwYo)*100.)
     2995    print 'Rwp',sumwYo,np.sum(M**2),np.sqrt(np.sum(M**2)),Rwp,Nobs
    29662996    if dlg:
    29672997        GoOn = dlg.Update(Rwp,newmsg='%s%8.3f%s'%('Powder profile Rwp =',Rwp,'%'))[0]
Note: See TracChangeset for help on using the changeset viewer.