Changeset 3768


Ignore:
Timestamp:
Dec 19, 2018 12:50:45 PM (3 years ago)
Author:
vondreele
Message:

name fix for single crystal 1D plots
remove ZigZag? & Block from modulation derivatives - now done numerically
fix ZigZag? modulation function & proper limits for Tmin & Tmax in GUI

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIImath.py

    r3759 r3768  
    14141414def makeWavesDerv(ngl,waveTypes,FSSdata,XSSdata,USSdata,MSSdata,Mast):
    14151415    '''
     1416    Only for Fourier waves for fraction, position & adp (probably not used for magnetism)
    14161417    FSSdata: array 2 x atoms x waves    (sin,cos terms)
    14171418    XSSdata: array 2x3 x atoms X waves (sin,cos terms)
     
    14361437    for iatm in range(Ax.shape[0]):
    14371438        nx = 0
    1438         if 'ZigZag' in waveTypes[iatm]:
    1439             nx = 1
    1440             Tmm = Ax[iatm][0][:2]                       
    1441             XYZmax = np.array([Ax[iatm][0][2],Bx[iatm][0][0],Bx[iatm][0][1]])           
    1442             ZtauXt[iatm],ZtauXx[iatm] = posZigZagDerv(glTau,Tmm,XYZmax)
    1443         elif 'Block' in waveTypes[iatm]:
    1444             nx = 1
    1445             Tmm = Ax[iatm][0][:2]                       
    1446             XYZmax = np.array([Ax[iatm][0][2],Bx[iatm][0][0],Bx[iatm][0][1]])           
    1447             ZtauXt[iatm],ZtauXx[iatm] = posBlockDerv(glTau,Tmm,XYZmax)
     1439#        if 'ZigZag' in waveTypes[iatm]:
     1440#            nx = 1
     1441#            Tmm = Ax[iatm][0][:2]                       
     1442#            XYZmax = np.array([Ax[iatm][0][2],Bx[iatm][0][0],Bx[iatm][0][1]])           
     1443#            ZtauXt[iatm],ZtauXx[iatm] = posZigZagDerv(glTau,Tmm,XYZmax)
     1444#        elif 'Block' in waveTypes[iatm]:
     1445#            nx = 1
     1446#            Tmm = Ax[iatm][0][:2]                       
     1447#            XYZmax = np.array([Ax[iatm][0][2],Bx[iatm][0][0],Bx[iatm][0][1]])           
     1448#            ZtauXt[iatm],ZtauXx[iatm] = posBlockDerv(glTau,Tmm,XYZmax)
    14481449        tauX = np.arange(1.,nWaves[1]+1-nx)[:,nxs]*glTau  #Xwaves x ngl
    14491450        if nx:   
     
    14531454            StauX[iatm] = np.ones_like(Ax)[iatm,:,:,nxs]*np.sin(twopi*tauX)[nxs,:,nxs,:]   #atoms X waves X 3(xyz) X ngl
    14541455            CtauX[iatm] = np.ones_like(Bx)[iatm,:,:,nxs]*np.cos(twopi*tauX)[nxs,:,nxs,:]   #ditto
    1455 #    GSASIIpath.IPyBreak()
    14561456    if nWaves[0]:
    14571457        tauF = np.arange(1.,nWaves[0]+1)[:,nxs]*glTau  #Fwaves x ngl
     
    16091609    Su = 2.*Xmax/DT
    16101610    Sd = 2.*Xmax/(1.-DT)
    1611     A = np.array([np.where(Tmm[0] < t%1. <= Tmm[1],-Xmax+Su*((t-Tmm[0])%1.),Xmax-Sd*((t-Tmm[1])%1.)) for t in T])
     1611    A = np.array([np.where(  0.< (t-Tmm[0])%1. <= DT, -Xmax+Su*((t-Tmm[0])%1.), Xmax-Sd*((t-Tmm[1])%1.)) for t in T])
    16121612    return A
    16131613   
    1614 def posZigZagDerv(T,Tmm,Xmax):
    1615     DT = Tmm[1]-Tmm[0]
    1616     Su = 2.*Xmax/DT
    1617     Sd = 2.*Xmax/(1.-DT)
    1618     dAdT = np.zeros((2,3,len(T)))
    1619     dAdT[0] = np.array([np.where(Tmm[0] < t <= Tmm[1],Su*(t-Tmm[0]-1)/DT,-Sd*(t-Tmm[1])/(1.-DT)) for t in T]).T
    1620     dAdT[1] = np.array([np.where(Tmm[0] < t <= Tmm[1],-Su*(t-Tmm[0])/DT,Sd*(t-Tmm[1])/(1.-DT)) for t in T]).T
    1621     dAdX = np.ones(3)[:,nxs]*np.array([np.where(Tmm[0] < t%1. <= Tmm[1],-1.+2.*(t-Tmm[0])/DT,1.-2.*(t-Tmm[1])%1./DT) for t in T])
    1622     return dAdT,dAdX
     1614#def posZigZagDerv(T,Tmm,Xmax):
     1615#    DT = Tmm[1]-Tmm[0]
     1616#    Su = 2.*Xmax/DT
     1617#    Sd = 2.*Xmax/(1.-DT)
     1618#    dAdT = np.zeros((2,3,len(T)))
     1619#    dAdT[0] = np.array([np.where(Tmm[0] < t <= Tmm[1],Su*(t-Tmm[0]-1)/DT,-Sd*(t-Tmm[1])/(1.-DT)) for t in T]).T
     1620#    dAdT[1] = np.array([np.where(Tmm[0] < t <= Tmm[1],-Su*(t-Tmm[0])/DT,Sd*(t-Tmm[1])/(1.-DT)) for t in T]).T
     1621#    dAdX = np.ones(3)[:,nxs]*np.array([np.where(Tmm[0] < t%1. <= Tmm[1],-1.+2.*(t-Tmm[0])/DT,1.-2.*(t-Tmm[1])%1./DT) for t in T])
     1622#    return dAdT,dAdX
    16231623
    16241624def posBlock(T,Tmm,Xmax):
     
    16261626    return A
    16271627   
    1628 def posBlockDerv(T,Tmm,Xmax):
    1629     dAdT = np.zeros((2,3,len(T)))
    1630     ind = np.searchsorted(T,Tmm)
    1631     dAdT[0,:,ind[0]] = -Xmax/len(T)
    1632     dAdT[1,:,ind[1]] = Xmax/len(T)
    1633     dAdX = np.ones(3)[:,nxs]*np.array([np.where(Tmm[0] < t <= Tmm[1],-1.,1.) for t in T])  #OK
    1634     return dAdT,dAdX
     1628#def posBlockDerv(T,Tmm,Xmax):
     1629#    dAdT = np.zeros((2,3,len(T)))
     1630#    ind = np.searchsorted(T,Tmm)
     1631#    dAdT[0,:,ind[0]] = -Xmax/len(T)
     1632#    dAdT[1,:,ind[1]] = Xmax/len(T)
     1633#    dAdX = np.ones(3)[:,nxs]*np.array([np.where(Tmm[0] < t <= Tmm[1],-1.,1.) for t in T])  #OK
     1634#    return dAdT,dAdX
    16351635   
    16361636def fracCrenel(tau,Toff,Twid):
  • trunk/GSASIIphsGUI.py

    r3765 r3768  
    50215021                    del atm[-1]['SS1'][item][iwave+1]
    50225022                    if len(atm[-1]['SS1'][item]) == 1:
    5023                         atm[-1]['SS1'][item][0] = ''
     5023                        atm[-1]['SS1'][item][0] = 'Fourier'
    50245024                    wx.CallAfter(RepaintAtomInfo,G2frame.waveData.GetScrollPos(wx.VERTICAL))
    50255025                   
     
    50885088                            if np.any(CSI[0][ival]):
    50895089                                minmax = [-0.2,0.2]
    5090                                 if waveTyp in ['ZigZag','Block'] and ival < 2: minmax = [0.,2.]
     5090                                if waveTyp in ['ZigZag','Block'] and not iwave and ival < 2:
     5091                                    if not ival:
     5092                                        minmax = [0.,2.]
     5093                                    else:
     5094                                        minmax = [wave[0][0],1.0+wave[0][0]]
    50915095                                waveVal = G2G.ValidatedTxtCtrl(waveData,wave[0],ival,nDig=(10,5),min=minmax[0],max=minmax[1],OnLeave=OnWavePlot)
    50925096                            else:
  • trunk/GSASIIplot.py

    r3763 r3768  
    10781078    '''
    10791079    global xylim,X
     1080    Name = G2frame.GPXtree.GetItemText(G2frame.PatternId)
    10801081    def OnKeyPress(event):
    10811082        if event.key == 'q':
     
    11171118                G2frame.G2plotNB.status.SetStatusText('d =%9.3f F^2 =%9.3f'%(Xpos,ypos),1)                   
    11181119            except TypeError:
    1119                 G2frame.G2plotNB.status.SetStatusText('Select '+Title+' pattern first',1)
     1120                G2frame.G2plotNB.status.SetStatusText('Select '+Title+Name+' pattern first',1)
    11201121            Page.SetToolTipString(s)
    11211122               
     
    11721173            Page.canvas.draw()
    11731174
    1174     new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab(Title,'mpl')
     1175    new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab(Title+Name,'mpl')
    11751176    Page.Offset = [0,0]
    11761177    if not new:
     
    56795680            if waveType in ['ZigZag','Block'] and not i:
    56805681                Tminmax = spos[0][:2]
    5681                 XYZmax = np.array(spos[0][2:])
     5682                XYZmax = np.array(spos[0][2:5])
    56825683                if waveType == 'Block':
    56835684                    wave = G2mth.posBlock(tau,Tminmax,XYZmax).T
     
    56875688                scof.append(spos[0][:3])
    56885689                ccof.append(spos[0][3:])
    5689         wave += G2mth.posFourier(tau,np.array(scof),np.array(ccof))
     5690                wave += G2mth.posFourier(tau,np.array(scof),np.array(ccof))
    56905691    if mapData['Flip']:
    56915692        Title = 'Charge flip'
  • trunk/GSASIIspc.py

    r3765 r3768  
    25882588        slopeUp = 2.*XYZmax/DT
    25892589        slopeDn = 2.*XYZmax/(1.-DT)
    2590         A = np.array([np.where(Tmm[0] < t%1. <= Tmm[1],-XYZmax+slopeUp*((t-Tmm[0])%1.),XYZmax-slopeDn*((t-Tmm[1])%1.)) for t in tau])
     2590        A = np.array([np.where(0. < t-(Tmm[0])%1. <= DT,-XYZmax+slopeUp*((t-Tmm[0])%1.),XYZmax-slopeDn*((t-Tmm[1])%1.)) for t in tau])
    25912591        return A
    25922592
     
    26542654       
    26552655    def DoXYZ():
    2656         delt4 = np.ones(4)*0.001
    26572656        delt5 = np.ones(5)*0.001
    26582657        delt6 = np.eye(6)*0.001
Note: See TracChangeset for help on using the changeset viewer.