Changeset 1891


Ignore:
Timestamp:
Jun 16, 2015 2:31:56 PM (8 years ago)
Author:
vondreele
Message:

modify Twin GUI - single refinement flag
all derivatives OK except TwinFr? & Flack for twin models

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIddataGUI.py

    r1887 r1891  
    781781        def OnAddTwin(event):
    782782            twinMat = np.array([[-1,0,0],[0,-1,0],[0,0,-1]])    #inversion by default
    783             twinVal = [0.0,False]
     783            twinVal = 0.0
    784784            UseList[G2frame.hist]['Twins'].append([twinMat,twinVal])
    785785            addtwin.SetValue(False)
     
    805805                    raise ValueError
    806806            except ValueError:
    807                 val = UseList[G2frame.hist]['Twins'][it][1][0]
    808             UseList[G2frame.hist]['Twins'][it][1][0] = val
     807                val = UseList[G2frame.hist]['Twins'][it][1]
     808            UseList[G2frame.hist]['Twins'][it][1] = val
    809809            sumTw = 0.
    810810            for it,twin in enumerate(UseList[G2frame.hist]['Twins']):
    811811                if it:
    812                     sumTw += twin[1][0]
     812                    sumTw += twin[1]
    813813            UseList[G2frame.hist]['Twins'][0][1][0] = 1.-sumTw
    814814            wx.CallLater(100,RepaintHistogramInfo)
     
    816816        def OnTwinRef(event):
    817817            Obj = event.GetEventObject()
    818             it = Indx[Obj.GetId()]
    819             UseList[G2frame.hist]['Twins'][it][1][1] = Obj.GetValue()
     818            UseList[G2frame.hist]['Twins'][0][1][1] = Obj.GetValue()
    820819                       
    821820        def OnTwinDel(event):
     
    826825            for it,twin in enumerate(UseList[G2frame.hist]['Twins']):
    827826                if it:
    828                     sumTw += twin[1][0]
     827                    sumTw += twin[1]
    829828            UseList[G2frame.hist]['Twins'][0][1][0] = 1.-sumTw
     829            if len(UseList[G2frame.hist]['Twins']) == 1:
     830                UseList[G2frame.hist]['Twins'][0][1][1] = False
    830831            wx.CallLater(100,RepaintHistogramInfo)           
    831832           
     
    838839        twinsizer.Add(topsizer)
    839840        Indx = {}
    840         for it,Twin in enumerate(UseList[G2frame.hist]['Twins']):
    841             twinMat,twinVal = Twin
    842             matSizer = wx.BoxSizer(wx.HORIZONTAL)
    843             matSizer.Add(wx.StaticText(DData,-1,' Twin Law: '),0,WACV)
    844             Style = wx.TE_READONLY
    845             if it:
    846                 Style = wx.TE_PROCESS_ENTER
    847             for im,Mat in enumerate(twinMat):
    848                 mat = wx.TextCtrl(DData,wx.ID_ANY,'%3d %3d %3d'%(Mat[0],Mat[1],Mat[2]),
    849                     style=Style)
     841        nTwin = len(UseList[G2frame.hist]['Twins'])
     842        if nTwin > 1:
     843            for it,Twin in enumerate(UseList[G2frame.hist]['Twins']):
     844                twinMat,twinVal = Twin
     845                matSizer = wx.BoxSizer(wx.HORIZONTAL)
     846                matSizer.Add(wx.StaticText(DData,-1,' Twin Law: '),0,WACV)
    850847                if it:
    851                     Indx[mat.GetId()] = [it,im]
    852                     mat.Bind(wx.EVT_TEXT_ENTER,OnMat)
    853                     mat.Bind(wx.EVT_KILL_FOCUS,OnMat)
     848                    Style = wx.TE_PROCESS_ENTER
     849                    TwVal = Twin[1]
    854850                else:
    855                     mat.SetBackgroundColour(VERY_LIGHT_GREY)
    856                 matSizer.Add(mat,0,WACV|wx.LEFT,5)
    857             twinsizer.Add(matSizer,0,WACV|wx.LEFT,5)
    858             valSizer = wx.BoxSizer(wx.HORIZONTAL)
    859             valSizer.Add(wx.StaticText(DData,-1,label=' Twin element fraction:'),0,WACV)
    860             twinval = wx.TextCtrl(DData,-1,'%.3f'%(Twin[1][0]),style=wx.TE_PROCESS_ENTER)
    861             Indx[twinval.GetId()] = it
    862             twinval.Bind(wx.EVT_TEXT_ENTER,OnTwinVal)
    863             twinval.Bind(wx.EVT_KILL_FOCUS,OnTwinVal)
    864             valSizer.Add(twinval,0,WACV)
    865             if it:
    866                 twinref = wx.CheckBox(DData,wx.ID_ANY,label=' Refine?')
    867                 Indx[twinref.GetId()] = it
    868                 twinref.SetValue(Twin[1][1])
    869                 twinref.Bind(wx.EVT_CHECKBOX, OnTwinRef)
    870                 valSizer.Add(twinref,0,WACV)
    871                 twindel = wx.CheckBox(DData,wx.ID_ANY,label=' Delete?')
    872                 Indx[twindel.GetId()] = it
    873                 twindel.Bind(wx.EVT_CHECKBOX, OnTwinDel)
    874                 valSizer.Add(twindel,0,WACV)
    875             twinsizer.Add(valSizer,0,WACV|wx.LEFT,5)
     851                    Style = wx.TE_READONLY
     852                    TwVal = Twin[1][0]
     853                for im,Mat in enumerate(twinMat):
     854                    mat = wx.TextCtrl(DData,wx.ID_ANY,'%3d %3d %3d'%(Mat[0],Mat[1],Mat[2]),
     855                        style=Style)
     856                    if it:
     857                        Indx[mat.GetId()] = [it,im]
     858                        mat.Bind(wx.EVT_TEXT_ENTER,OnMat)
     859                        mat.Bind(wx.EVT_KILL_FOCUS,OnMat)
     860                    else:
     861                        mat.SetBackgroundColour(VERY_LIGHT_GREY)
     862                    matSizer.Add(mat,0,WACV|wx.LEFT,5)
     863                twinsizer.Add(matSizer,0,WACV|wx.LEFT,5)
     864                valSizer = wx.BoxSizer(wx.HORIZONTAL)
     865                valSizer.Add(wx.StaticText(DData,-1,label=' Twin element fraction:'),0,WACV)
     866                twinval = wx.TextCtrl(DData,-1,'%.3f'%(TwVal),style=wx.TE_PROCESS_ENTER)
     867                Indx[twinval.GetId()] = it
     868                twinval.Bind(wx.EVT_TEXT_ENTER,OnTwinVal)
     869                twinval.Bind(wx.EVT_KILL_FOCUS,OnTwinVal)
     870                if not it:
     871                    twinval.SetBackgroundColour(VERY_LIGHT_GREY)
     872                valSizer.Add(twinval,0,WACV)
     873                if it:
     874                    twindel = wx.CheckBox(DData,wx.ID_ANY,label=' Delete?')
     875                    Indx[twindel.GetId()] = it
     876                    twindel.Bind(wx.EVT_CHECKBOX, OnTwinDel)
     877                    valSizer.Add(twindel,0,WACV)
     878                else:
     879                    twinref = wx.CheckBox(DData,wx.ID_ANY,label=' Refine?')
     880                    twinref.SetValue(Twin[1][1])
     881                    twinref.Bind(wx.EVT_CHECKBOX, OnTwinRef)
     882                    valSizer.Add(twinref,0,WACV)
     883                twinsizer.Add(valSizer,0,WACV|wx.LEFT,5)
    876884        return twinsizer
    877885       
  • trunk/GSASIIstrIO.py

    r1887 r1891  
    201201        print G2mv.VarRemapShow(varyList,True)
    202202    return errmsg, warnmsg
     203   
    203204def GetRestraints(GPXfile):
    204205    '''Read the restraints from the GPX file.
     
    19401941      * hapVary: list of refined variables
    19411942      * hapDict: dict with refined variables and their values
    1942       * controlDict: dict with computation controls (?)
     1943      * controlDict: dict with fixed parameters
    19431944    '''
    19441945   
     
    22472248                for it,twin in enumerate(Twins):
    22482249                    controlDict[pfx+'TwinLaw'].append(twin[0])
    2249                     hapDict[pfx+'TwinFr;'+str(it)] = twin[1][0]
    22502250                    if it:
    2251                         sumTwFr += twin[1][0]
    2252                     if twin[1][1]:
     2251                        hapDict[pfx+'TwinFr;'+str(it)] = twin[1]
     2252                        sumTwFr += twin[1]
     2253                    else:
     2254                        hapDict[pfx+'TwinFr;'+str(it)] = twin[1][0]
     2255                    if Twins[0][1][1] and it:
    22532256                        hapVary.append(pfx+'TwinFr;'+str(it))
     2257                #need to make constraint on TwinFr
    22542258                controlDict[pfx+'TwinLaw'] = np.array(controlDict[pfx+'TwinLaw'])
    22552259                if len(Twins) > 1:    #force sum to unity
     
    22712275                    if len(Twins) > 1:
    22722276                        for it,twin in enumerate(Twins):
    2273                             print >>pFile,' Twin law: %s'%(str(twin[0]).replace('\n',',')),' Twin fr.: %5.3f Refine? '%(hapDict[pfx+'TwinFr;'+str(it)]),twin[1][1]
     2277                            print >>pFile,' Twin law: %s'%(str(twin[0]).replace('\n',',')),' Twin fr.: %5.3f Refine? '%(hapDict[pfx+'TwinFr;'+str(it)]),Twins[0][1][1]
    22742278                       
    22752279                Histogram['Reflection Lists'] = phase       
     
    24332437        for it,item in enumerate(twinData):
    24342438            ptlbls += '     twin #%d'%(it)
    2435             ptstr += '%12.3f'%(item[1][0])
     2439            if it:
     2440                ptstr += '%12.3f'%(item[1])
     2441            else:
     2442                ptstr += '%12.3f'%(item[1][0])
    24362443            if pfx+'TwinFr;'+str(it) in TwinSig:
    24372444                sigstr += '%12.3f'%(TwinSig[pfx+'TwinFr;'+str(it)])
     
    25352542                        BabSig[pfx+item] = sigDict[pfx+item]
    25362543                if 'Twins' in hapData:
    2537                     it = 0
     2544                    it = 1
    25382545                    sumTwFr = 0.
    25392546                    while True:
    25402547                        try:
    2541                             hapData['Twins'][it][1][0] = parmDict[pfx+'TwinFr;'+str(it)]
     2548                            hapData['Twins'][it][1] = parmDict[pfx+'TwinFr;'+str(it)]
    25422549                            if pfx+'TwinFr;'+str(it) in sigDict:
    25432550                                TwinFrSig[pfx+'TwinFr;'+str(it)] = sigDict[pfx+'TwinFr;'+str(it)]
    25442551                            if it:
    2545                                 sumTwFr += hapData['Twins'][it][1][0]
     2552                                sumTwFr += hapData['Twins'][it][1]
    25462553                            it += 1
    25472554                        except KeyError:
  • trunk/GSASIIstrMath.py

    r1890 r1891  
    975975        fbx = np.array([fot*cosp,-fotp*sinp])
    976976        #sum below is over Uniq
    977         dfadfr = np.sum(fa/occ,axis=-2)        #Fdata != 0 ever avoids /0. problem
     977        dfadfr = np.sum(fa/occ,axis=-2)        #Fdata != 0 avoids /0. problem
    978978        dfadba = np.sum(-cosp*Tcorr[:,np.newaxis],axis=1)
    979979        dfadui = np.sum(-SQfactor*fa,axis=-2)
     
    985985            dfadua = np.sum(-Hij*np.swapaxes(fa,-2,-1)[:,:,:,np.newaxis],axis=-2)
    986986        if not SGData['SGInv']:
    987             dfbdfr = np.sum(fb/occ,axis=-2)        #Fdata != 0 ever avoids /0. problem
     987            dfbdfr = np.sum(fb/occ,axis=-2)        #Fdata != 0 avoids /0. problem
    988988            dfbdba = np.sum(-sinp*Tcorr[:,np.newaxis],axis=1)
    989989            dfadfl = np.sum(-FPP*Tcorr*sinp)
     
    10181018            SB = fbs[0]+fas[1]
    10191019            if nTwin > 1:
    1020                 dFdfr[iref] = [2.*SA[it]*(dfadfr[0][it]+dfbdfr[1][it])*Mdata/len(Uniq[it])+ \
    1021                     2.*SB[it]*(dfbdfr[0][it]+dfadfr[1][it])*Mdata/len(Uniq[it]) for it in range(nTwin)]
    1022                 dFdx[iref] = [2.*SA[it]*(dfadx[it][0]+dfbdx[it][1])+2.*SB[it]*(dfbdx[it][0]+dfadx[it][1]) for it in range(nTwin)]
    1023                 dFdui[iref] = [2.*SA[it]*(dfadui[0][it]+dfbdui[1][it])+2.*SB[it]*(dfbdui[0][it]+dfadui[1][it]) for it in range(nTwin)]
    1024                 dFdua[iref] = [2.*SA[it]*(dfadua[it][0]+dfbdua[it][1])+2.*SB[it]*(dfbdua[it][0]+dfadua[it][1]) for it in range(nTwin)]
     1020                dFdfr[iref] = [SA[it]*(dfadfr[0][it]+dfbdfr[1][it])*Mdata/len(Uniq[it])+ \
     1021                    SB[it]*(dfbdfr[0][it]+dfadfr[1][it])*Mdata/len(Uniq[it]) for it in range(nTwin)]
     1022                dFdx[iref] = [SA[it]*(dfadx[it][0]+dfbdx[it][1])+SB[it]*(dfbdx[it][0]+dfadx[it][1]) for it in range(nTwin)]
     1023                dFdui[iref] = [SA[it]*(dfadui[0][it]+dfbdui[1][it])+SB[it]*(dfbdui[0][it]+dfadui[1][it]) for it in range(nTwin)]
     1024                dFdua[iref] = [SA[it]*(dfadua[it][0]+dfbdua[it][1])+SB[it]*(dfbdua[it][0]+dfadua[it][1]) for it in range(nTwin)]
    10251025                dFdfl[iref] = -SA*dfadfl-SB*dfbdfl
    10261026                dFdtw[iref] = 2.*SA+2.*SB
     
    10371037        #loop over atoms - each dict entry is list of derivatives for all the reflections
    10381038    if nTwin > 1:
    1039         for i in range(len(Mdata)):
     1039        for i in range(len(Mdata)):     #these all OK?
    10401040            dFdvDict[pfx+'Afrac:'+str(i)] = np.sum(dFdfr.T[i]*TwinFr[:,np.newaxis],axis=0)
    1041             dFdvDict[pfx+'dAx:'+str(i)] = np.sum(dFdx.T[0][i]*TwinFr[:,np.newaxis],axis=0)
    1042             dFdvDict[pfx+'dAy:'+str(i)] = np.sum(dFdx.T[1][i]*TwinFr[:,np.newaxis],axis=0)
    1043             dFdvDict[pfx+'dAz:'+str(i)] = np.sum(dFdx.T[2][i]*TwinFr[:,np.newaxis],axis=0)
    1044             dFdvDict[pfx+'AUiso:'+str(i)] = np.sum(dFdui.T[i]*TwinFr[:,np.newaxis],axis=0)
    1045             dFdvDict[pfx+'AU11:'+str(i)] = np.sum(dFdua.T[0][i]*TwinFr[:,np.newaxis],axis=0)
    1046             dFdvDict[pfx+'AU22:'+str(i)] = np.sum(dFdua.T[1][i]*TwinFr[:,np.newaxis],axis=0)
    1047             dFdvDict[pfx+'AU33:'+str(i)] = np.sum(dFdua.T[2][i]*TwinFr[:,np.newaxis],axis=0)
    1048             dFdvDict[pfx+'AU12:'+str(i)] = np.sum(0.5*dFdua.T[3][i]*TwinFr[:,np.newaxis],axis=0)
    1049             dFdvDict[pfx+'AU13:'+str(i)] = np.sum(0.5*dFdua.T[4][i]*TwinFr[:,np.newaxis],axis=0)
    1050             dFdvDict[pfx+'AU23:'+str(i)] = np.sum(0.5*dFdua.T[5][i]*TwinFr[:,np.newaxis],axis=0)
    1051         dFdvDict[phfx+'Flack'] = 4.*np.sum(dFdfl.T*TwinFr[:,np.newaxis],axis=0)
     1041            dFdvDict[pfx+'dAx:'+str(i)] = np.sum(dFdx.T[0][i]*TwinFr[:,np.newaxis],axis=0)/2.
     1042            dFdvDict[pfx+'dAy:'+str(i)] = np.sum(dFdx.T[1][i]*TwinFr[:,np.newaxis],axis=0)/2.
     1043            dFdvDict[pfx+'dAz:'+str(i)] = np.sum(dFdx.T[2][i]*TwinFr[:,np.newaxis],axis=0)/2.
     1044            dFdvDict[pfx+'AUiso:'+str(i)] = np.sum(dFdui.T[i]*TwinFr[:,np.newaxis],axis=0)/2.
     1045            dFdvDict[pfx+'AU11:'+str(i)] = np.sum(dFdua.T[0][i]*TwinFr[:,np.newaxis],axis=0)/2.
     1046            dFdvDict[pfx+'AU22:'+str(i)] = np.sum(dFdua.T[1][i]*TwinFr[:,np.newaxis],axis=0)/2.
     1047            dFdvDict[pfx+'AU33:'+str(i)] = np.sum(dFdua.T[2][i]*TwinFr[:,np.newaxis],axis=0)/2.
     1048            dFdvDict[pfx+'AU12:'+str(i)] = np.sum(0.5*dFdua.T[3][i]*TwinFr[:,np.newaxis],axis=0)/2.
     1049            dFdvDict[pfx+'AU13:'+str(i)] = np.sum(0.5*dFdua.T[4][i]*TwinFr[:,np.newaxis],axis=0)/2.
     1050            dFdvDict[pfx+'AU23:'+str(i)] = np.sum(0.5*dFdua.T[5][i]*TwinFr[:,np.newaxis],axis=0)/2.
     1051        dFdvDict[phfx+'Flack'] = np.sum(dFdfl*TwinFr,axis=1)    #?
    10521052    else:
    10531053        for i in range(len(Mdata)):
Note: See TracChangeset for help on using the changeset viewer.