Changeset 3276


Ignore:
Timestamp:
Feb 12, 2018 1:50:40 PM (4 years ago)
Author:
vondreele
Message:

fixes to WaveSizer? for individual wavetypes.
fixes to GetSSfxuinel to do each waveType individually.
fixes to G2phase_cif importer to avoid creating empty waves

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r3273 r3276  
    47584758                        waveSizer.Add(wx.StaticText(waveData,label=' %s  parameters: %s'%(waveName,str(names).rstrip(']').lstrip('[').replace("'",''))),0,WACV)
    47594759                        for ival,val in enumerate(wave[0]):
    4760                             if np.any(CSI[Stype][0][ival]):
     4760                            if np.any(CSI[0][ival]):
    47614761                                waveVal = wx.TextCtrl(waveData,value='%.5f'%(val),style=wx.TE_PROCESS_ENTER)
    47624762                                waveVal.Bind(wx.EVT_TEXT_ENTER,OnWaveVal)
  • trunk/GSASIIspc.py

    r3266 r3276  
    21962196       
    21972197    def DoFrac():
    2198         delt2 = np.eye(2)*0.001
    2199         FSC = np.ones(2,dtype='i')
    2200         CSI = [np.zeros((2),dtype='i'),np.zeros(2)]
    2201         if 'Crenel' in waveType:
    2202             dF = np.zeros_like(tau)
     2198        dF = None
     2199        dFTP = None
     2200        if siteSym == '1':
     2201            CSI = [[1,0],[2,0]],[2*[1.,0.]]
     2202        elif siteSym == '-1':
     2203            CSI = [[1,0],[0,0]],[2*[1.,0.]]
    22032204        else:
    2204             dF = fracFourier(tau,nH,delt2[:1],delt2[1:]).squeeze()
    2205         dFT = np.zeros_like(dF)
    2206         dFTP = []
    2207         for i in SdIndx:
    2208             sop = Sop[i]
    2209             ssop = SSop[i]           
    2210             sdet,ssdet,dtau,dT,tauT = getTauT(tau,sop,ssop,XYZ)
    2211             fsc = np.ones(2,dtype='i')
     2205            delt2 = np.eye(2)*0.001
     2206            FSC = np.ones(2,dtype='i')
     2207            CSI = [np.zeros((2),dtype='i'),np.zeros(2)]
    22122208            if 'Crenel' in waveType:
    2213                 dFT = np.zeros_like(tau)
    2214                 fsc = [1,1]
    2215             else:   #Fourier
    2216                 dFT = fracFourier(tauT,nH,delt2[:1],delt2[1:]).squeeze()
    2217                 dFT = nl.det(sop[0])*dFT
    2218                 dFT = dFT[:,np.argsort(tauT)]
    2219                 dFT[0] *= ssdet
    2220                 dFT[1] *= sdet
    2221                 dFTP.append(dFT)
     2209                dF = np.zeros_like(tau)
     2210            else:
     2211                dF = fracFourier(tau,nH,delt2[:1],delt2[1:]).squeeze()
     2212            dFT = np.zeros_like(dF)
     2213            dFTP = []
     2214            for i in SdIndx:
     2215                sop = Sop[i]
     2216                ssop = SSop[i]           
     2217                sdet,ssdet,dtau,dT,tauT = getTauT(tau,sop,ssop,XYZ)
     2218                fsc = np.ones(2,dtype='i')
     2219                if 'Crenel' in waveType:
     2220                    dFT = np.zeros_like(tau)
     2221                    fsc = [1,1]
     2222                else:   #Fourier
     2223                    dFT = fracFourier(tauT,nH,delt2[:1],delt2[1:]).squeeze()
     2224                    dFT = nl.det(sop[0])*dFT
     2225                    dFT = dFT[:,np.argsort(tauT)]
     2226                    dFT[0] *= ssdet
     2227                    dFT[1] *= sdet
     2228                    dFTP.append(dFT)
     2229               
     2230                    if np.any(dtau%.5) and ('1/2' in SSGData['modSymb'] or '1' in SSGData['modSymb']):
     2231                        fsc = [1,1]
     2232                        CSI = [[[1,0],[1,0]],[[1.,0.],[1/dT,0.]]]
     2233                        FSC = np.zeros(2,dtype='i')
     2234                        return CSI,dF,dFTP
     2235                    else:
     2236                        for i in range(2):
     2237                            if np.allclose(dF[i,:],dFT[i,:],atol=1.e-6):
     2238                                fsc[i] = 1
     2239                            else:
     2240                                fsc[i] = 0
     2241                        FSC &= fsc
     2242                        if debug: print (SSMT2text(ssop).replace(' ',''),sdet,ssdet,epsinv,fsc)
     2243            n = -1
     2244            for i,F in enumerate(FSC):
     2245                if F:
     2246                    n += 1
     2247                    CSI[0][i] = n+1
     2248                    CSI[1][i] = 1.0
    22222249           
    2223                 if np.any(dtau%.5) and ('1/2' in SSGData['modSymb'] or '1' in SSGData['modSymb']):
    2224                     fsc = [1,1]
    2225                     CSI = [[[1,0],[1,0]],[[1.,0.],[1/dT,0.]]]
    2226                     FSC = np.zeros(2,dtype='i')
    2227                     return CSI,dF,dFTP
    2228                 else:
    2229                     for i in range(2):
    2230                         if np.allclose(dF[i,:],dFT[i,:],atol=1.e-6):
    2231                             fsc[i] = 1
    2232                         else:
    2233                             fsc[i] = 0
    2234                     FSC &= fsc
    2235                     if debug: print (SSMT2text(ssop).replace(' ',''),sdet,ssdet,epsinv,fsc)
    2236         n = -1
    2237         for i,F in enumerate(FSC):
    2238             if F:
    2239                 n += 1
    2240                 CSI[0][i] = n+1
    2241                 CSI[1][i] = 1.0
    2242        
    22432250        return CSI,dF,dFTP
    22442251       
    22452252    def DoXYZ():
    2246         delt4 = np.ones(4)*0.001
    2247         delt5 = np.ones(5)*0.001
    2248         delt6 = np.eye(6)*0.001
    2249         if 'Fourier' in waveType:
    2250             dX = posFourier(tau,nH,delt6[:3],delt6[3:]) #+np.array(XYZ)[:,np.newaxis,np.newaxis]
    2251               #3x6x12 modulated position array (X,Spos,tau)& force positive
    2252             CSI = [np.zeros((6,3),dtype='i'),np.zeros((6,3))]
    2253         elif waveType == 'Sawtooth':
    2254             dX = posSawtooth(tau,delt4[0],delt4[1:])
    2255             CSI = [np.array([[1,0,0],[2,0,0],[3,0,0],[4,0,0]]),
    2256                 np.array([[1.0,.0,.0],[1.0,.0,.0],[1.0,.0,.0],[1.0,.0,.0]])]
    2257         elif waveType in ['ZigZag','Block']:
    2258             if waveType == 'ZigZag':
    2259                 dX = posZigZag(tau,delt5[:2],delt5[2:])
    2260             else:
    2261                 dX = posBlock(tau,delt5[:2],delt5[2:])
    2262             CSI = [np.array([[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0]]),
    2263                 np.array([[1.0,.0,.0],[1.0,.0,.0],[1.0,.0,.0],[1.0,.0,.0],[1.0,.0,.0]])]
    2264         XSC = np.ones(6,dtype='i')
    2265         dXTP = []
    2266         for i in SdIndx:
    2267             sop = Sop[i]
    2268             ssop = SSop[i]
    2269             sdet,ssdet,dtau,dT,tauT = getTauT(tau,sop,ssop,XYZ)
    2270             xsc = np.ones(6,dtype='i')
     2253        dX,dXTP = None,None
     2254        if siteSym == '1':
     2255            CSI = [[1,0,0],[2,0,0],[3,0,0], [4,0,0],[5,0,0],[6,0,0]],[6*[1.,0.,0.]]
     2256        elif siteSym == '-1':
     2257            CSI = [[1,0,0],[2,0,0],[3,0,0], [0,0,0],[0,0,0],[0,0,0]],[3*[1.,0.,0.],3*[0.,0.,0.]]
     2258        else:
     2259            delt4 = np.ones(4)*0.001
     2260            delt5 = np.ones(5)*0.001
     2261            delt6 = np.eye(6)*0.001
    22712262            if 'Fourier' in waveType:
    2272                 dXT = posFourier(np.sort(tauT),nH,delt6[:3],delt6[3:])   #+np.array(XYZ)[:,np.newaxis,np.newaxis]
     2263                dX = posFourier(tau,nH,delt6[:3],delt6[3:]) #+np.array(XYZ)[:,np.newaxis,np.newaxis]
     2264                  #3x6x12 modulated position array (X,Spos,tau)& force positive
     2265                CSI = [np.zeros((6,3),dtype='i'),np.zeros((6,3))]
    22732266            elif waveType == 'Sawtooth':
    2274                 dXT = posSawtooth(tauT,delt4[0],delt4[1:])+np.array(XYZ)[:,np.newaxis,np.newaxis]
    2275             elif waveType == 'ZigZag':
    2276                 dXT = posZigZag(tauT,delt5[:2],delt5[2:])+np.array(XYZ)[:,np.newaxis,np.newaxis]
    2277             elif waveType == 'Block':
    2278                 dXT = posBlock(tauT,delt5[:2],delt5[2:])+np.array(XYZ)[:,np.newaxis,np.newaxis]
    2279             dXT = np.inner(sop[0],dXT.T)    # X modulations array(3x6x49) -> array(3x49x6)
    2280             dXT = np.swapaxes(dXT,1,2)      # back to array(3x6x49)
    2281             dXT[:,:3,:] *= (ssdet*sdet)            # modify the sin component
    2282             dXTP.append(dXT)
     2267                dX = posSawtooth(tau,delt4[0],delt4[1:])
     2268                CSI = [np.array([[1,0,0],[2,0,0],[3,0,0],[4,0,0]]),
     2269                    np.array([[1.0,.0,.0],[1.0,.0,.0],[1.0,.0,.0],[1.0,.0,.0]])]
     2270            elif waveType in ['ZigZag','Block']:
     2271                if waveType == 'ZigZag':
     2272                    dX = posZigZag(tau,delt5[:2],delt5[2:])
     2273                else:
     2274                    dX = posBlock(tau,delt5[:2],delt5[2:])
     2275                CSI = [np.array([[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0]]),
     2276                    np.array([[1.0,.0,.0],[1.0,.0,.0],[1.0,.0,.0],[1.0,.0,.0],[1.0,.0,.0]])]
     2277            XSC = np.ones(6,dtype='i')
     2278            dXTP = []
     2279            for i in SdIndx:
     2280                sop = Sop[i]
     2281                ssop = SSop[i]
     2282                sdet,ssdet,dtau,dT,tauT = getTauT(tau,sop,ssop,XYZ)
     2283                xsc = np.ones(6,dtype='i')
     2284                if 'Fourier' in waveType:
     2285                    dXT = posFourier(np.sort(tauT),nH,delt6[:3],delt6[3:])   #+np.array(XYZ)[:,np.newaxis,np.newaxis]
     2286                elif waveType == 'Sawtooth':
     2287                    dXT = posSawtooth(tauT,delt4[0],delt4[1:])+np.array(XYZ)[:,np.newaxis,np.newaxis]
     2288                elif waveType == 'ZigZag':
     2289                    dXT = posZigZag(tauT,delt5[:2],delt5[2:])+np.array(XYZ)[:,np.newaxis,np.newaxis]
     2290                elif waveType == 'Block':
     2291                    dXT = posBlock(tauT,delt5[:2],delt5[2:])+np.array(XYZ)[:,np.newaxis,np.newaxis]
     2292                dXT = np.inner(sop[0],dXT.T)    # X modulations array(3x6x49) -> array(3x49x6)
     2293                dXT = np.swapaxes(dXT,1,2)      # back to array(3x6x49)
     2294                dXT[:,:3,:] *= (ssdet*sdet)            # modify the sin component
     2295                dXTP.append(dXT)
     2296                if waveType == 'Fourier':
     2297                    for i in range(3):
     2298                        if not np.allclose(dX[i,i,:],dXT[i,i,:]):
     2299                            xsc[i] = 0
     2300                        if not np.allclose(dX[i,i+3,:],dXT[i,i+3,:]):
     2301                            xsc[i+3] = 0
     2302                    if np.any(dtau%.5) and ('1/2' in SSGData['modSymb'] or '1' in SSGData['modSymb']):
     2303                        xsc[3:6] = 0
     2304                        CSI = [[[1,0,0],[2,0,0],[3,0,0], [1,0,0],[2,0,0],[3,0,0]],
     2305                            [[1.,0.,0.],[1.,0.,0.],[1.,0.,0.], [1.,0.,0.],[1.,0.,0.],[1.,0.,0.]]]                   
     2306                        if '(x)' in siteSym:
     2307                            CSI[1][3:] = [1./dT,0.,0.],[-dT,0.,0.],[-dT,0.,0.]
     2308                            if 'm' in siteSym and len(SdIndx) == 1:
     2309                                CSI[1][3:] = [-dT,0.,0.],[1./dT,0.,0.],[1./dT,0.,0.]
     2310                        elif '(y)' in siteSym:
     2311                            CSI[1][3:] = [-dT,0.,0.],[1./dT,0.,0.],[-dT,0.,0.]
     2312                            if 'm' in siteSym and len(SdIndx) == 1:
     2313                                CSI[1][3:] = [1./dT,0.,0.],[-dT,0.,0.],[1./dT,0.,0.]
     2314                        elif '(z)' in siteSym:
     2315                            CSI[1][3:] = [-dT,0.,0.],[-dT,0.,0.],[1./dT,0.,0.]
     2316                            if 'm' in siteSym and len(SdIndx) == 1:
     2317                                CSI[1][3:] = [1./dT,0.,0.],[1./dT,0.,0.],[-dT,0.,0.]
     2318                    if '4/mmm' in laue:
     2319                        if np.any(dtau%.5) and '1/2' in SSGData['modSymb']:
     2320                            if '(xy)' in siteSym:
     2321                                CSI[0] = [[1,0,0],[1,0,0],[2,0,0], [1,0,0],[1,0,0],[2,0,0]]
     2322                                CSI[1][3:] = [[1./dT,0.,0.],[1./dT,0.,0.],[-dT,0.,0.]]
     2323                        if '(xy)' in siteSym or '(+-0)' in siteSym:
     2324                            mul = 1
     2325                            if '(+-0)' in siteSym:
     2326                                mul = -1
     2327                            if np.allclose(dX[0,0,:],dXT[1,0,:]):
     2328                                CSI[0][3:5] = [[11,0,0],[11,0,0]]
     2329                                CSI[1][3:5] = [[1.,0,0],[mul,0,0]]
     2330                                xsc[3:5] = 0
     2331                            if np.allclose(dX[0,3,:],dXT[0,4,:]):
     2332                                CSI[0][:2] = [[12,0,0],[12,0,0]]
     2333                                CSI[1][:2] = [[1.,0,0],[mul,0,0]]
     2334                                xsc[:2] = 0
     2335                XSC &= xsc
     2336                if debug: print (SSMT2text(ssop).replace(' ',''),sdet,ssdet,epsinv,xsc)
    22832337            if waveType == 'Fourier':
    2284                 for i in range(3):
    2285                     if not np.allclose(dX[i,i,:],dXT[i,i,:]):
    2286                         xsc[i] = 0
    2287                     if not np.allclose(dX[i,i+3,:],dXT[i,i+3,:]):
    2288                         xsc[i+3] = 0
    2289                 if np.any(dtau%.5) and ('1/2' in SSGData['modSymb'] or '1' in SSGData['modSymb']):
    2290                     xsc[3:6] = 0
    2291                     CSI = [[[1,0,0],[2,0,0],[3,0,0], [1,0,0],[2,0,0],[3,0,0]],
    2292                         [[1.,0.,0.],[1.,0.,0.],[1.,0.,0.], [1.,0.,0.],[1.,0.,0.],[1.,0.,0.]]]                   
    2293                     if '(x)' in siteSym:
    2294                         CSI[1][3:] = [1./dT,0.,0.],[-dT,0.,0.],[-dT,0.,0.]
    2295                         if 'm' in siteSym and len(SdIndx) == 1:
    2296                             CSI[1][3:] = [-dT,0.,0.],[1./dT,0.,0.],[1./dT,0.,0.]
    2297                     elif '(y)' in siteSym:
    2298                         CSI[1][3:] = [-dT,0.,0.],[1./dT,0.,0.],[-dT,0.,0.]
    2299                         if 'm' in siteSym and len(SdIndx) == 1:
    2300                             CSI[1][3:] = [1./dT,0.,0.],[-dT,0.,0.],[1./dT,0.,0.]
    2301                     elif '(z)' in siteSym:
    2302                         CSI[1][3:] = [-dT,0.,0.],[-dT,0.,0.],[1./dT,0.,0.]
    2303                         if 'm' in siteSym and len(SdIndx) == 1:
    2304                             CSI[1][3:] = [1./dT,0.,0.],[1./dT,0.,0.],[-dT,0.,0.]
    2305                 if '4/mmm' in laue:
    2306                     if np.any(dtau%.5) and '1/2' in SSGData['modSymb']:
    2307                         if '(xy)' in siteSym:
    2308                             CSI[0] = [[1,0,0],[1,0,0],[2,0,0], [1,0,0],[1,0,0],[2,0,0]]
    2309                             CSI[1][3:] = [[1./dT,0.,0.],[1./dT,0.,0.],[-dT,0.,0.]]
    2310                     if '(xy)' in siteSym or '(+-0)' in siteSym:
    2311                         mul = 1
    2312                         if '(+-0)' in siteSym:
    2313                             mul = -1
    2314                         if np.allclose(dX[0,0,:],dXT[1,0,:]):
    2315                             CSI[0][3:5] = [[11,0,0],[11,0,0]]
    2316                             CSI[1][3:5] = [[1.,0,0],[mul,0,0]]
    2317                             xsc[3:5] = 0
    2318                         if np.allclose(dX[0,3,:],dXT[0,4,:]):
    2319                             CSI[0][:2] = [[12,0,0],[12,0,0]]
    2320                             CSI[1][:2] = [[1.,0,0],[mul,0,0]]
    2321                             xsc[:2] = 0
    2322             XSC &= xsc
    2323             if debug: print (SSMT2text(ssop).replace(' ',''),sdet,ssdet,epsinv,xsc)
    2324         if waveType == 'Fourier':
    2325             n = -1
    2326             if debug: print (XSC)
    2327             for i,X in enumerate(XSC):
    2328                 if X:
    2329                     n += 1
    2330                     CSI[0][i][0] = n+1
    2331                     CSI[1][i][0] = 1.0
    2332        
    2333         return CSI,dX,dXTP
     2338                n = -1
     2339                if debug: print (XSC)
     2340                for i,X in enumerate(XSC):
     2341                    if X:
     2342                        n += 1
     2343                        CSI[0][i][0] = n+1
     2344                        CSI[1][i][0] = 1.0
     2345           
     2346        return list(CSI),dX,dXTP
    23342347       
    23352348    def DoUij():
    2336         tau = np.linspace(0,1,49,True)
    2337         delt12 = np.eye(12)*0.0001
    2338         dU = posFourier(tau,nH,delt12[:6],delt12[6:])                  #Uij modulations - 6x12x12 array
    2339         CSI = [np.zeros((12,3),dtype='i'),np.zeros((12,3))]
    2340         USC = np.ones(12,dtype='i')
    2341         dUTP = []
    2342         for i in SdIndx:
    2343             sop = Sop[i]
    2344             ssop = SSop[i]
    2345             sdet,ssdet,dtau,dT,tauT = getTauT(tau,sop,ssop,XYZ)
    2346             usc = np.ones(12,dtype='i')
    2347             dUT = posFourier(tauT,nH,delt12[:6],delt12[6:])                  #Uij modulations - 6x12x49 array
    2348             dUijT = np.rollaxis(np.rollaxis(np.array(Uij2U(dUT)),3),3)    #convert dUT to 12x49x3x3
    2349             dUijT = np.rollaxis(np.inner(np.inner(sop[0],dUijT),sop[0].T),3) #transform by sop - 3x3x12x49
    2350             dUT = np.array(U2Uij(dUijT))    #convert to 6x12x49
    2351             dUT = dUT[:,:,np.argsort(tauT)]
    2352             dUT[:,:6,:] *=(ssdet*sdet)
    2353             dUTP.append(dUT)
    2354             if np.any(dtau%.5) and ('1/2' in SSGData['modSymb'] or '1' in SSGData['modSymb']):
    2355                 CSI = [[[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0],
    2356                 [1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0]],
    2357                 [[1.,0.,0.],[1.,0.,0.],[1.,0.,0.], [1.,0.,0.],[1.,0.,0.],[1.,0.,0.],
    2358                 [1./dT,0.,0.],[1./dT,0.,0.],[1./dT,0.,0.], [1.,0.,0.],[1.,0.,0.],[1.,0.,0.]]]
    2359                 if 'mm2(x)' in siteSym:
    2360                     CSI[1][9:] = [0.,0.,0.],[-dT,0.,0.],[0.,0.,0.]
    2361                     USC = [1,1,1,0,1,0,1,1,1,0,1,0]
    2362                 elif '(xy)' in siteSym:
    2363                     CSI[0] = [[1,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[4,0,0],
    2364                         [1,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[4,0,0]]
    2365                     CSI[1][9:] = [[1./dT,0.,0.],[-dT,0.,0.],[-dT,0.,0.]]
    2366                     USC = [1,1,1,1,1,1,1,1,1,1,1,1]                             
    2367                 elif '(x)' in siteSym:
    2368                     CSI[1][9:] = [-dT,0.,0.],[-dT,0.,0.],[1./dT,0.,0.]
    2369                 elif '(y)' in siteSym:
    2370                     CSI[1][9:] = [-dT,0.,0.],[1./dT,0.,0.],[-dT,0.,0.]
    2371                 elif '(z)' in siteSym:
    2372                     CSI[1][9:] = [1./dT,0.,0.],[-dT,0.,0.],[-dT,0.,0.]
    2373                 for i in range(6):
    2374                     if not USC[i]:
    2375                         CSI[0][i] = [0,0,0]
    2376                         CSI[1][i] = [0.,0.,0.]
    2377                         CSI[0][i+6] = [0,0,0]
    2378                         CSI[1][i+6] = [0.,0.,0.]
    2379             else:                       
    2380                 for i in range(6):
    2381                     if not np.allclose(dU[i,i,:],dUT[i,i,:]):  #sin part
    2382                         usc[i] = 0
    2383                     if not np.allclose(dU[i,i+6,:],dUT[i,i+6,:]):   #cos part
    2384                         usc[i+6] = 0
    2385                 if np.any(dUT[1,0,:]):
    2386                     if '4/m' in siteSym:
    2387                         CSI[0][6:8] = [[12,0,0],[12,0,0]]
    2388                         if ssop[1][3]:
    2389                             CSI[1][6:8] = [[1.,0.,0.],[-1.,0.,0.]]
    2390                             usc[9] = 1
    2391                         else:
    2392                             CSI[1][6:8] = [[1.,0.,0.],[1.,0.,0.]]
    2393                             usc[9] = 0
    2394                     elif '4' in siteSym:
    2395                         CSI[0][6:8] = [[12,0,0],[12,0,0]]
    2396                         CSI[0][:2] = [[11,0,0],[11,0,0]]
    2397                         if ssop[1][3]:
    2398                             CSI[1][:2] = [[1.,0.,0.],[-1.,0.,0.]]
    2399                             CSI[1][6:8] = [[1.,0.,0.],[-1.,0.,0.]]
    2400                             usc[2] = 0
    2401                             usc[8] = 0
    2402                             usc[3] = 1
    2403                             usc[9] = 1
    2404                         else:
    2405                             CSI[1][:2] = [[1.,0.,0.],[1.,0.,0.]]
    2406                             CSI[1][6:8] = [[1.,0.,0.],[1.,0.,0.]]
    2407                             usc[2] = 1
    2408                             usc[8] = 1
    2409                             usc[3] = 0               
    2410                             usc[9] = 0
    2411                     elif 'xy' in siteSym or '+-0' in siteSym:
    2412                         if np.allclose(dU[0,0,:],dUT[0,1,:]*sdet):
    2413                             CSI[0][4:6] = [[12,0,0],[12,0,0]]
    2414                             CSI[0][6:8] = [[11,0,0],[11,0,0]]
    2415                             CSI[1][4:6] = [[1.,0.,0.],[sdet,0.,0.]]
    2416                             CSI[1][6:8] = [[1.,0.,0.],[sdet,0.,0.]]
    2417                             usc[4:6] = 0
    2418                             usc[6:8] = 0
    2419                        
    2420                 if debug: print (SSMT2text(ssop).replace(' ',''),sdet,ssdet,epsinv,usc)
    2421             USC &= usc
    2422         if debug: print (USC)
    2423         if not np.any(dtau%.5):
    2424             n = -1
    2425             for i,U in enumerate(USC):
    2426                 if U:
    2427                     n += 1
    2428                     CSI[0][i][0] = n+1
    2429                     CSI[1][i][0] = 1.0
    2430 
    2431         return CSI,dU,dUTP
     2349        dU,dUTP = None,None
     2350        if siteSym == '1':
     2351            CSI = [[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0],
     2352                [7,0,0],[8,0,0],[9,0,0],[10,0,0],[11,0,0],[12,0,0]],[12*[1.,0.,0.]]
     2353        elif siteSym == '-1':
     2354            CSI = [6*[0,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0]],[6*[0.,0.,0.],6*[1.,0.,0.]]
     2355        else:
     2356            tau = np.linspace(0,1,49,True)
     2357            delt12 = np.eye(12)*0.0001
     2358            dU = posFourier(tau,nH,delt12[:6],delt12[6:])                  #Uij modulations - 6x12x12 array
     2359            CSI = [np.zeros((12,3),dtype='i'),np.zeros((12,3))]
     2360            USC = np.ones(12,dtype='i')
     2361            dUTP = []
     2362            for i in SdIndx:
     2363                sop = Sop[i]
     2364                ssop = SSop[i]
     2365                sdet,ssdet,dtau,dT,tauT = getTauT(tau,sop,ssop,XYZ)
     2366                usc = np.ones(12,dtype='i')
     2367                dUT = posFourier(tauT,nH,delt12[:6],delt12[6:])                  #Uij modulations - 6x12x49 array
     2368                dUijT = np.rollaxis(np.rollaxis(np.array(Uij2U(dUT)),3),3)    #convert dUT to 12x49x3x3
     2369                dUijT = np.rollaxis(np.inner(np.inner(sop[0],dUijT),sop[0].T),3) #transform by sop - 3x3x12x49
     2370                dUT = np.array(U2Uij(dUijT))    #convert to 6x12x49
     2371                dUT = dUT[:,:,np.argsort(tauT)]
     2372                dUT[:,:6,:] *=(ssdet*sdet)
     2373                dUTP.append(dUT)
     2374                if np.any(dtau%.5) and ('1/2' in SSGData['modSymb'] or '1' in SSGData['modSymb']):
     2375                    CSI = [[[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0],
     2376                    [1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0]],
     2377                    [[1.,0.,0.],[1.,0.,0.],[1.,0.,0.], [1.,0.,0.],[1.,0.,0.],[1.,0.,0.],
     2378                    [1./dT,0.,0.],[1./dT,0.,0.],[1./dT,0.,0.], [1.,0.,0.],[1.,0.,0.],[1.,0.,0.]]]
     2379                    if 'mm2(x)' in siteSym:
     2380                        CSI[1][9:] = [0.,0.,0.],[-dT,0.,0.],[0.,0.,0.]
     2381                        USC = [1,1,1,0,1,0,1,1,1,0,1,0]
     2382                    elif '(xy)' in siteSym:
     2383                        CSI[0] = [[1,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[4,0,0],
     2384                            [1,0,0],[1,0,0],[2,0,0],[3,0,0],[4,0,0],[4,0,0]]
     2385                        CSI[1][9:] = [[1./dT,0.,0.],[-dT,0.,0.],[-dT,0.,0.]]
     2386                        USC = [1,1,1,1,1,1,1,1,1,1,1,1]                             
     2387                    elif '(x)' in siteSym:
     2388                        CSI[1][9:] = [-dT,0.,0.],[-dT,0.,0.],[1./dT,0.,0.]
     2389                    elif '(y)' in siteSym:
     2390                        CSI[1][9:] = [-dT,0.,0.],[1./dT,0.,0.],[-dT,0.,0.]
     2391                    elif '(z)' in siteSym:
     2392                        CSI[1][9:] = [1./dT,0.,0.],[-dT,0.,0.],[-dT,0.,0.]
     2393                    for i in range(6):
     2394                        if not USC[i]:
     2395                            CSI[0][i] = [0,0,0]
     2396                            CSI[1][i] = [0.,0.,0.]
     2397                            CSI[0][i+6] = [0,0,0]
     2398                            CSI[1][i+6] = [0.,0.,0.]
     2399                else:                       
     2400                    for i in range(6):
     2401                        if not np.allclose(dU[i,i,:],dUT[i,i,:]):  #sin part
     2402                            usc[i] = 0
     2403                        if not np.allclose(dU[i,i+6,:],dUT[i,i+6,:]):   #cos part
     2404                            usc[i+6] = 0
     2405                    if np.any(dUT[1,0,:]):
     2406                        if '4/m' in siteSym:
     2407                            CSI[0][6:8] = [[12,0,0],[12,0,0]]
     2408                            if ssop[1][3]:
     2409                                CSI[1][6:8] = [[1.,0.,0.],[-1.,0.,0.]]
     2410                                usc[9] = 1
     2411                            else:
     2412                                CSI[1][6:8] = [[1.,0.,0.],[1.,0.,0.]]
     2413                                usc[9] = 0
     2414                        elif '4' in siteSym:
     2415                            CSI[0][6:8] = [[12,0,0],[12,0,0]]
     2416                            CSI[0][:2] = [[11,0,0],[11,0,0]]
     2417                            if ssop[1][3]:
     2418                                CSI[1][:2] = [[1.,0.,0.],[-1.,0.,0.]]
     2419                                CSI[1][6:8] = [[1.,0.,0.],[-1.,0.,0.]]
     2420                                usc[2] = 0
     2421                                usc[8] = 0
     2422                                usc[3] = 1
     2423                                usc[9] = 1
     2424                            else:
     2425                                CSI[1][:2] = [[1.,0.,0.],[1.,0.,0.]]
     2426                                CSI[1][6:8] = [[1.,0.,0.],[1.,0.,0.]]
     2427                                usc[2] = 1
     2428                                usc[8] = 1
     2429                                usc[3] = 0               
     2430                                usc[9] = 0
     2431                        elif 'xy' in siteSym or '+-0' in siteSym:
     2432                            if np.allclose(dU[0,0,:],dUT[0,1,:]*sdet):
     2433                                CSI[0][4:6] = [[12,0,0],[12,0,0]]
     2434                                CSI[0][6:8] = [[11,0,0],[11,0,0]]
     2435                                CSI[1][4:6] = [[1.,0.,0.],[sdet,0.,0.]]
     2436                                CSI[1][6:8] = [[1.,0.,0.],[sdet,0.,0.]]
     2437                                usc[4:6] = 0
     2438                                usc[6:8] = 0
     2439                           
     2440                    if debug: print (SSMT2text(ssop).replace(' ',''),sdet,ssdet,epsinv,usc)
     2441                USC &= usc
     2442            if debug: print (USC)
     2443            if not np.any(dtau%.5):
     2444                n = -1
     2445                for i,U in enumerate(USC):
     2446                    if U:
     2447                        n += 1
     2448                        CSI[0][i][0] = n+1
     2449                        CSI[1][i][0] = 1.0
     2450   
     2451        return list(CSI),dU,dUTP
     2452   
     2453    def DoMag():
     2454        CSI = [[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0]]
     2455        return CSI,None,None
    24322456       
    24332457    if debug: print ('super space group: '+SSGData['SSpGrp'])
    2434     CSI = {'Sfrac':[[[1,0],[2,0]],[[1.,0.],[1.,0.]]],
    2435         'Spos':[[[1,0,0],[2,0,0],[3,0,0], [4,0,0],[5,0,0],[6,0,0]],
    2436             [[1.,0.,0.],[1.,0.,0.],[1.,0.,0.], [1.,0.,0.],[1.,0.,0.],[1.,0.,0.]]],    #sin & cos
    2437         'Sadp':[[[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0],
    2438             [7,0,0],[8,0,0],[9,0,0],[10,0,0],[11,0,0],[12,0,0]],
    2439             [[1.,0.,0.],[1.,0.,0.],[1.,0.,0.], [1.,0.,0.],[1.,0.,0.],[1.,0.,0.],
    2440             [1.,0.,0.],[1.,0.,0.],[1.,0.,0.], [1.,0.,0.],[1.,0.,0.],[1.,0.,0.]]],
    2441         'Smag':[[[1,0,0],[2,0,0],[3,0,0], [4,0,0],[5,0,0],[6,0,0]],
    2442             [[1.,0.,0.],[1.,0.,0.],[1.,0.,0.], [1.,0.,0.],[1.,0.,0.],[1.,0.,0.]]],}
    24432458    xyz = np.array(XYZ)%1.
    24442459    SGOps = copy.deepcopy(SGData['SGOps'])
     
    24462461    siteSym = SytSym(XYZ,SGData)[0].strip()
    24472462    if debug: print ('siteSym: '+siteSym)
    2448     if siteSym == '1':   #"1" site symmetry
    2449         if debug:
    2450             return CSI,None,None,None,None
    2451         else:
    2452             return CSI
    2453     elif siteSym == '-1':   #"-1" site symmetry
    2454         CSI['Sfrac'][0] = [[1,0],[0,0]]
    2455         CSI['Spos'][0] = [[1,0,0],[2,0,0],[3,0,0], [0,0,0],[0,0,0],[0,0,0]]
    2456         CSI['Sadp'][0] = [[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],
    2457         [1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0]]
    2458         if debug:
    2459             return CSI,None,None,None,None
    2460         else:
    2461             return CSI
    24622463    SSGOps = copy.deepcopy(SSGData['SSGOps'])
    24632464    #expand ops to include inversions if any
     
    24852486    #make modulation arrays - one parameter at a time
    24862487    if Stype == 'Sfrac':
    2487         CSI['Sfrac'],dF,dFTP = DoFrac()
     2488        CSI,dF,dFTP = DoFrac()
    24882489    elif Stype == 'Spos':
    2489         CSI['Spos'],dX,dXTP = DoXYZ()       
    2490         CSI['Spos'][0] = orderParms(CSI['Spos'][0])
     2490        CSI,dF,dFTP = DoXYZ()
     2491        CSI[0] = orderParms(CSI[0])
    24912492    elif Stype == 'Sadp':
    2492         CSI['Sadp'],dU,dUTP = DoUij()
    2493         CSI['Sadp'][0] = orderParms(CSI['Sadp'][0])           
     2493        CSI,dF,dFTP = DoUij()
     2494        CSI[0] = orderParms(CSI[0])
     2495    elif Stype == 'Smag':
     2496        CSI,dF,dFTP = DoMag()
     2497       
    24942498    if debug:
    2495         return CSI,tau,[dF,dFTP],[dX,dXTP],[dU,dUTP]
     2499        return CSI,dF,dFTP
    24962500    else:
    24972501        return CSI
  • trunk/imports/G2phase_CIF.py

    r3266 r3276  
    499499                    else:
    500500                        Sfrac = []
     501                    nim = -1
    501502                    if displFdict:
    502503                        for i,item in enumerate(displFdict['_atom_site_displace_fourier_atom_site_label']):
     
    515516                    else:
    516517                        Spos = []
     518                    nim = -1
    517519                    if UijFdict:
    518520                        nim = -1
     
    531533                    else:
    532534                        Sadp = []
     535                    nim = -1
    533536                    if MagFdict:
    534537                        nim = -1
Note: See TracChangeset for help on using the changeset viewer.