Changeset 2009


Ignore:
Timestamp:
Oct 16, 2015 11:12:39 AM (6 years ago)
Author:
vondreele
Message:

remove 4Dfourier menu from Wave Data page (best done from General page)
remove numeric derivative calcs from ModulationDerv? - not effective (way too slow!)
show residuals in 3D HKL plot status line

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r1998 r2009  
    5757    wxID_CHARGEFLIP, wxID_PEAKSUNIQUE, wxID_PEAKSDELETE, wxID_PEAKSDA,
    5858    wxID_PEAKSDISTVP, wxID_PEAKSVIEWPT, wxID_FINDEQVPEAKS,wxID_SHOWBONDS,wxID_MULTIMCSA,
    59     wxID_SINGLEMCSA, wxID_4DMAPCOMPUTE,wxID_4DCHARGEFLIP,
    60 ] = [wx.NewId() for item in range(17)]
     59    wxID_SINGLEMCSA,wxID_4DCHARGEFLIP,
     60] = [wx.NewId() for item in range(16)]
    6161
    6262[ wxID_PWDRADD, wxID_HKLFADD, wxID_PWDANALYSIS, wxID_PWDCOPY, wxID_PLOTCTRLCOPY,
     
    13021302        self.WavesData.Append(menu=wx.Menu(title=''),title='Select tab')
    13031303        self.WavesDataCompute = wx.Menu(title='')
    1304         self.WavesData.Append(menu=self.WavesDataCompute,title='Compute')
    1305         self.WavesDataCompute.Append(id=wxID_4DMAPCOMPUTE, kind=wx.ITEM_NORMAL,text='Compute 4D map',
    1306             help='Compute 4-dimensional map')
    13071304        self.PostfillDataMenu()
    13081305                 
  • trunk/GSASIImath.py

    r2006 r2009  
    995995   
    996996    nxs = np.newaxis
    997     numeric = False   
     997    numeric = True   
    998998    cosHA,sinHA = Modulation(waveTypes,np.array([H,]),np.array([Phi,]),FSSdata,XSSdata,USSdata,Mast)
    999999    Mf = [H.shape[0],]+list(FSSdata.T.shape)    #ops x atoms x waves x 2 (sin+cos frac mods)
     
    10061006    dGdMuC = np.zeros(Mu)
    10071007    dGdMuS = np.zeros(Mu)
    1008     if numeric:        #numeric derivatives - slow!! works for pos waves
    1009         deltx = 0.00001
    1010         deltf = 0.0001
    1011         deltu = 0.00001
    1012         for i in range(Mx[1]):  #atoms
    1013             for j in range(Mx[2]):  #waves
    1014                 for k in range(Mx[3]):  #coeff
    1015                     XSSdata[k,j,i] += deltx
    1016                     Cap,Sap = np.squeeze(Modulation(waveTypes,np.array([H,]),FSSdata,XSSdata,USSdata,Mast))
    1017                     XSSdata[k,j,i] -= 2*deltx
    1018                     Cam,Sam = np.squeeze(Modulation(waveTypes,np.array([H,]),FSSdata,XSSdata,USSdata,Mast))
    1019                     XSSdata[k,j,i] += deltx
    1020                     dGdMxC[:,:,j,k] += (Cap-Cam)/(2*deltx)
    1021                     dGdMxS[:,:,j,k] += (Sap-Sam)/(2*deltx)
    1022         Ca0,Sa0 = np.squeeze(Modulation(waveTypes,np.array([H,]),FSSdata,XSSdata,USSdata,Mast))
    1023         for i in range(Mu[1]):  #atoms
    1024             for j in range(Mu[2]):  #waves
    1025                 for k in range(Mu[3]):  #coeff
    1026                     USSdata[k,j,i] += deltu
    1027                     Cap,Sap = np.squeeze(Modulation(waveTypes,np.array([H,]),FSSdata,XSSdata,USSdata,Mast))
    1028                     USSdata[k,j,i] -= deltu
    1029                     dGdMuC[:,:,j,k] += (Cap-Ca0)/deltu
    1030                     dGdMuS[:,:,j,k] += (Sap-Sa0)/deltu
    1031 #        GSASIIpath.IPyBreak()
    1032     else:   #analytic derivatives                 
    1033         glTau,glWt = pwd.pygauleg(0.,1.,32)         #get Gauss-Legendre intervals & weights
    1034         Af = np.array(FSSdata[0]).T    #sin frac mods x waves x atoms
    1035         Bf = np.array(FSSdata[1]).T    #cos frac mods...
    1036         Ax = np.array(XSSdata[:3]).T   #...cos pos mods
    1037         Bx = np.array(XSSdata[3:]).T   #...cos pos mods
    1038         Au = Mast*np.array(G2lat.U6toUij(USSdata[:6])).T   #atoms x waves x sin Uij mods
    1039         Bu = Mast*np.array(G2lat.U6toUij(USSdata[6:])).T   #...cos Uij mods
     1008    glTau,glWt = pwd.pygauleg(0.,1.,32)         #get Gauss-Legendre intervals & weights
     1009    Af = np.array(FSSdata[0]).T    #sin frac mods x waves x atoms
     1010    Bf = np.array(FSSdata[1]).T    #cos frac mods...
     1011    Ax = np.array(XSSdata[:3]).T   #...cos pos mods
     1012    Bx = np.array(XSSdata[3:]).T   #...cos pos mods
     1013    Au = Mast*np.array(G2lat.U6toUij(USSdata[:6])).T   #atoms x waves x sin Uij mods
     1014    Bu = Mast*np.array(G2lat.U6toUij(USSdata[6:])).T   #...cos Uij mods
     1015   
     1016    if 'Fourier' in waveTypes:
     1017        nf = 0
     1018        nx = 0
     1019        XmodZ = np.zeros((Ax.shape[0],Ax.shape[1],3,32))
     1020        FmodZ = np.zeros((Af.shape[0],Af.shape[1],32))
     1021        if 'Crenel' in waveTypes:
     1022            nC = np.where('Crenel' in waveTypes)
     1023            nf = 1
     1024            #FmodZ = 0   replace
     1025    else:
     1026        nx = 1
     1027        if 'Sawtooth' in waveTypes:
     1028            nS = np.where('Sawtooth' in waveTypes)
     1029            #XmodZ = 0   replace
     1030    tauX = np.arange(1.,Ax.shape[1]+1-nx)[:,nxs]*glTau  #Xwaves x 32
     1031    StauX = np.ones_like(Ax)[:,nx:,:,nxs]*np.sin(twopi*tauX)[nxs,:,nxs,:]   #atoms X waves X pos X 32
     1032    CtauX = np.ones_like(Bx)[:,nx:,:,nxs]*np.cos(twopi*tauX)[nxs,:,nxs,:]   #ditto
     1033    XmodA = Ax[:,nx:,:,nxs]*StauX #atoms X waves X pos X 32
     1034    XmodB = Bx[:,nx:,:,nxs]*CtauX #ditto
     1035    Xmod = np.sum(XmodA+XmodB+XmodZ,axis=1)                #atoms X pos X 32; sum waves
     1036    Tau = np.reshape(np.tile(glTau,Xmod.shape[0]),(Xmod.shape[0],-1))   #atoms x 32
     1037    XmodT = np.swapaxes(np.concatenate((Xmod,Tau[:,nxs,:]),axis=1),1,2)      # atoms x 32 x 4 (x,y,z,t)
     1038    D = H[:,3][:,nxs]*glTau[nxs,:]              #m*tau; ops X 32
     1039#    HdotX = np.inner(H[:,:3],np.swapaxes(Xmod,1,2))+D[:,nxs,:]     #ops x atoms X 32
     1040    HdotX = np.inner(H,XmodT)     #refBlk X ops x atoms X 32
     1041    if Af.shape[1]:
     1042        tauF = np.arange(1.,Af.shape[1]+1-nf)[:,nxs]*glTau  #Fwaves x 32
     1043        StauF = np.ones_like(Af)[:,nf:,nxs]*np.sin(twopi*tauF)[nxs,:,:] #also dFmod/dAf
     1044        CtauF = np.ones_like(Bf)[:,nf:,nxs]*np.cos(twopi*tauF)[nxs,:,:] #also dFmod/dBf
     1045        FmodA = Af[:,nf:,nxs]*StauF   #atoms X Fwaves X 32
     1046        FmodB = Bf[:,nf:,nxs]*CtauF
     1047        Fmod = np.sum(FmodA+FmodB+FmodC,axis=1)             #atoms X 32; sum waves
     1048    else:
     1049        Fmod = np.ones_like(HdotX)           
     1050    if Au.shape[1]:
     1051        tauU = np.arange(1.,Au.shape[1]+1)[:,nxs]*glTau     #Uwaves x 32
     1052        StauU = np.ones_like(Au)[:,:,:,:,nxs]*np.sin(twopi*tauU)[nxs,:,nxs,nxs,:]   #also dUmod/dAu
     1053        CtauU = np.ones_like(Bu)[:,:,:,:,nxs]*np.cos(twopi*tauU)[nxs,:,nxs,nxs,:]   #also dUmod/dBu
     1054        UmodA = Au[:,:,:,:,nxs]*StauU #atoms x waves x 3x3 x 32
     1055        UmodB = Bu[:,:,:,:,nxs]*CtauU #ditto
     1056        Umod = np.swapaxes(np.sum(UmodA+UmodB,axis=1),1,3)      #atoms x 3x3 x 32; sum waves
     1057        HbH = np.exp(-np.sum(H[:,nxs,nxs,:3]*np.inner(H[:,:3],Umod),axis=-1)) # ops x atoms x 32 add Overhauser corr.?
    10401058       
    1041         if 'Fourier' in waveTypes:
    1042             nf = 0
    1043             nx = 0
    1044             XmodZ = np.zeros((Ax.shape[0],Ax.shape[1],3,32))
    1045             FmodZ = np.zeros((Af.shape[0],Af.shape[1],32))
    1046             if 'Crenel' in waveTypes:
    1047                 nC = np.where('Crenel' in waveTypes)
    1048                 nf = 1
    1049                 #FmodZ = 0   replace
    1050         else:
    1051             nx = 1
    1052             if 'Sawtooth' in waveTypes:
    1053                 nS = np.where('Sawtooth' in waveTypes)
    1054                 #XmodZ = 0   replace
    1055         tauX = np.arange(1.,Ax.shape[1]+1-nx)[:,nxs]*glTau  #Xwaves x 32
    1056         StauX = np.ones_like(Ax)[:,nx:,:,nxs]*np.sin(twopi*tauX)[nxs,:,nxs,:]   #atoms X waves X pos X 32
    1057         CtauX = np.ones_like(Bx)[:,nx:,:,nxs]*np.cos(twopi*tauX)[nxs,:,nxs,:]   #ditto
    1058         XmodA = Ax[:,nx:,:,nxs]*StauX #atoms X waves X pos X 32
    1059         XmodB = Bx[:,nx:,:,nxs]*CtauX #ditto
    1060         Xmod = np.sum(XmodA+XmodB+XmodZ,axis=1)                #atoms X pos X 32; sum waves
    1061         D = H[:,3][:,nxs]*glTau[nxs,:]              #m*tau; ops X 32
    1062         HdotX = np.inner(H[:,:3],np.swapaxes(Xmod,1,2))+D[:,nxs,:]     #ops x atoms X 32
    1063         if Af.shape[1]:
    1064             tauF = np.arange(1.,Af.shape[1]+1-nf)[:,nxs]*glTau  #Fwaves x 32
    1065             StauF = np.ones_like(Af)[:,nf:,nxs]*np.sin(twopi*tauF)[nxs,:,:] #also dFmod/dAf
    1066             CtauF = np.ones_like(Bf)[:,nf:,nxs]*np.cos(twopi*tauF)[nxs,:,:] #also dFmod/dBf
    1067             FmodA = Af[:,nf:,nxs]*StauF   #atoms X Fwaves X 32
    1068             FmodB = Bf[:,nf:,nxs]*CtauF
    1069             Fmod = np.sum(FmodA+FmodB+FmodC,axis=1)             #atoms X 32; sum waves
    1070         else:
    1071             Fmod = np.ones_like(HdotX)           
    1072         if Au.shape[1]:
    1073             tauU = np.arange(1.,Au.shape[1]+1)[:,nxs]*glTau     #Uwaves x 32
    1074             StauU = np.ones_like(Au)[:,:,:,:,nxs]*np.sin(twopi*tauU)[nxs,:,nxs,nxs,:]   #also dUmod/dAu
    1075             CtauU = np.ones_like(Bu)[:,:,:,:,nxs]*np.cos(twopi*tauU)[nxs,:,nxs,nxs,:]   #also dUmod/dBu
    1076             UmodA = Au[:,:,:,:,nxs]*StauU #atoms x waves x 3x3 x 32
    1077             UmodB = Bu[:,:,:,:,nxs]*CtauU #ditto
    1078             Umod = np.swapaxes(np.sum(UmodA+UmodB,axis=1),1,3)      #atoms x 3x3 x 32; sum waves
    1079             HbH = np.exp(-np.sum(H[:,nxs,nxs,:3]*np.inner(H[:,:3],Umod),axis=-1)) # ops x atoms x 32 add Overhauser corr.?
    1080            
    1081         else:
    1082             HbH = np.ones_like(HdotX)
    1083         HdotXA = H[:,nxs,nxs,nxs,:3]*np.swapaxes(XmodA,-1,-2)[nxs,:,:,:,:]+D[:,nxs,nxs,:,nxs]  #ops x atoms x waves x 32 x xyz
    1084         HdotXB = H[:,nxs,nxs,nxs,:3]*np.swapaxes(XmodB,-1,-2)[nxs,:,:,:,:]+D[:,nxs,nxs,:,nxs]
    1085         dHdXA = H[:,nxs,nxs,nxs,:3]*np.swapaxes(StauX,-1,-2)[nxs,:,:,:,:]    #ops x atoms x waves x 32 x xyz
    1086         dHdXB = H[:,nxs,nxs,nxs,:3]*np.swapaxes(CtauX,-1,-2)[nxs,:,:,:,:]              #ditto
    1087         dGdMxCa = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(-twopi*dHdXA*np.sin(twopi*HdotXA))*glWt[nxs,nxs,nxs,:,nxs],axis=-2)
    1088         dGdMxCb = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(-twopi*dHdXB*np.sin(twopi*HdotXB))*glWt[nxs,nxs,nxs,:,nxs],axis=-2)
    1089         dGdMxC = np.concatenate((dGdMxCa,dGdMxCb),axis=-1)
     1059    else:
     1060        HbH = np.ones_like(HdotX)
     1061    HdotXA = H[:,nxs,nxs,nxs,:3]*np.swapaxes(XmodA,-1,-2)[nxs,:,:,:,:]+D[:,nxs,nxs,:,nxs]  #ops x atoms x waves x 32 x xyz
     1062    HdotXB = H[:,nxs,nxs,nxs,:3]*np.swapaxes(XmodB,-1,-2)[nxs,:,:,:,:]+D[:,nxs,nxs,:,nxs]
     1063    dHdXA = H[:,nxs,nxs,nxs,:3]*np.swapaxes(StauX,-1,-2)[nxs,:,:,:,:]    #ops x atoms x waves x 32 x xyz
     1064    dHdXB = H[:,nxs,nxs,nxs,:3]*np.swapaxes(CtauX,-1,-2)[nxs,:,:,:,:]              #ditto
     1065    dGdMxCa = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(-twopi*dHdXA*np.sin(twopi*HdotXA))*glWt[nxs,nxs,nxs,:,nxs],axis=-2)
     1066    dGdMxCb = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(-twopi*dHdXB*np.sin(twopi*HdotXB))*glWt[nxs,nxs,nxs,:,nxs],axis=-2)
     1067    dGdMxC = np.concatenate((dGdMxCa,dGdMxCb),axis=-1)
    10901068# ops x atoms x waves x xyz - real part
    1091         dGdMxSa = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(twopi*dHdXA*np.cos(twopi*HdotXA))*glWt[nxs,nxs,nxs,:,nxs],axis=-2)   
    1092         dGdMxSb = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(twopi*dHdXB*np.cos(twopi*HdotXB))*glWt[nxs,nxs,nxs,:,nxs],axis=-2)   
    1093         dGdMxS = np.concatenate((dGdMxSa,dGdMxSb),axis=-1)
     1069    dGdMxSa = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(twopi*dHdXA*np.cos(twopi*HdotXA))*glWt[nxs,nxs,nxs,:,nxs],axis=-2)   
     1070    dGdMxSb = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(twopi*dHdXB*np.cos(twopi*HdotXB))*glWt[nxs,nxs,nxs,:,nxs],axis=-2)   
     1071    dGdMxS = np.concatenate((dGdMxSa,dGdMxSb),axis=-1)
    10941072# ops x atoms x waves x xyz - imaginary part
    10951073    return np.array([cosHA,sinHA]),[dGdMfC,dGdMfS],[dGdMxC,dGdMxS],[dGdMuC,dGdMuS]
  • trunk/GSASIIphsGUI.py

    r2005 r2009  
    23622362            axchoice = ['x','y','z']
    23632363            if len(D4Map['rho']):
    2364                 atomSizer.Add(wx.StaticText(waveData,label=' Show contour map for axis:'),0,WACV)
     2364                atomSizer.Add(wx.StaticText(waveData,label=' Show contour map for axis: '),0,WACV)
    23652365                mapSel = wx.ComboBox(waveData,value=' ',choices=axchoice,
    23662366                    style=wx.CB_READONLY|wx.CB_DROPDOWN)
     
    24672467            return waveSizer
    24682468           
    2469         def MapSizer():
    2470 
    2471             def OnRefList(event):
    2472                 dlg = G2G.G2MultiChoiceDialog(G2frame, 'Select reflection sets to use',
    2473                     'Use data',refsList)
    2474                 try:
    2475                     if dlg.ShowModal() == wx.ID_OK:
    2476                         Map['RefList'] = [refsList[i] for i in dlg.GetSelections()]
    2477                     else:
    2478                         return
    2479                 finally:
    2480                     dlg.Destroy()
    2481                 UpdateWavesData()
    2482                
    2483             def OnMapType(event):
    2484                 Map['MapType'] = mapType.GetValue()
    2485                
    2486             Map['Resolution'] = 0.5
    2487             refsList = data['Histograms'].keys()
    2488             mapSizer = wx.BoxSizer(wx.HORIZONTAL)
    2489            
    2490             mapSizer.Add(wx.StaticText(waveData,label=' 4D map data: Reflection set from: '),0,WACV)
    2491             if 'list' not in str(type(Map['RefList'])):     #patch
    2492                 Map['RefList'] = [Map['RefList'],]
    2493             mapSizer.Add(wx.ComboBox(waveData,value=Map['RefList'][0],choices=Map['RefList'],
    2494                 style=wx.CB_DROPDOWN|wx.CB_READONLY),0,WACV)
    2495             refList = wx.Button(waveData,label='Select reflection sets')
    2496             refList.Bind(wx.EVT_BUTTON,OnRefList)
    2497             mapSizer.Add(refList,0,WACV)
    2498            
    2499             mapTypes = ['Fobs','Fcalc','delt-F']
    2500             mapSizer.Add(wx.StaticText(waveData,label=' Map type: '),0,WACV)
    2501             mapType = wx.ComboBox(waveData,-1,value=Map['MapType'],choices=mapTypes,
    2502                 style=wx.CB_READONLY|wx.CB_DROPDOWN)
    2503             mapType.Bind(wx.EVT_COMBOBOX,OnMapType)
    2504             mapSizer.Add(mapType,0,WACV)
    2505             return mapSizer
    2506            
    25072469        Indx = {}
    25082470        waveData = G2frame.waveData
     
    25292491        mainSizer.Add(wx.StaticText(waveData,label=' Incommensurate propagation wave data:'),0,WACV)
    25302492        if generalData['Type'] in ['modulated','magnetic']:
    2531             mainSizer.Add(MapSizer(),0,WACV)           
    25322493            for iatm,atom in enumerate(atomData):
    25332494                xyz = atom[cx:cx+3]
     
    64066367        if data['General']['Type'] in ['modulated','magnetic']:
    64076368            FillSelectPageMenu(TabSelectionIdDict, G2frame.dataFrame.WavesData)
    6408             G2frame.dataFrame.Bind(wx.EVT_MENU, On4DMapCompute, id=G2gd.wxID_4DMAPCOMPUTE)
    64096369        # Draw Options
    64106370        FillSelectPageMenu(TabSelectionIdDict, G2frame.dataFrame.DataDrawOptions)
  • trunk/GSASIIplot.py

    r2008 r2009  
    520520    Plot.set_ylabel(ylabel[izone],fontsize=12)
    521521    if sumFo and sumDF:
    522         G2frame.G2plotNB.status.SetStatusText('layer R = %6.2f%s'%(100.*sumDF/sumFo,'%'),1)
     522        G2frame.G2plotNB.status.SetStatusText(xlabel[izone].split(',')[1]+str(Data['Layer'])+   \
     523            ' layer R = %6.2f%s'%(100.*sumDF/sumFo,'%'),1)
    523524    else:
    524525        G2frame.G2plotNB.status.SetStatusText('Use K-box to set plot controls',1)
  • trunk/GSASIIpwd.py

    r1911 r2009  
    873873                    if G2spc.checkSSextc(HKLM,SSGData):
    874874                        HKLs.append([h,k,l,dH,d,G2lat.Dsp2pos(Inst,d),-1])   
     875#    GSASIIpath.IPyBreak()
    875876    return G2lat.sortHKLd(HKLs,True,True,True)
    876877
Note: See TracChangeset for help on using the changeset viewer.