Changeset 3276
- Timestamp:
- Feb 12, 2018 1:50:40 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIphsGUI.py
r3273 r3276 4758 4758 waveSizer.Add(wx.StaticText(waveData,label=' %s parameters: %s'%(waveName,str(names).rstrip(']').lstrip('[').replace("'",''))),0,WACV) 4759 4759 for ival,val in enumerate(wave[0]): 4760 if np.any(CSI[ Stype][0][ival]):4760 if np.any(CSI[0][ival]): 4761 4761 waveVal = wx.TextCtrl(waveData,value='%.5f'%(val),style=wx.TE_PROCESS_ENTER) 4762 4762 waveVal.Bind(wx.EVT_TEXT_ENTER,OnWaveVal) -
trunk/GSASIIspc.py
r3266 r3276 2196 2196 2197 2197 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.]] 2203 2204 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)] 2212 2208 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 2222 2249 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,dFTP2228 else:2229 for i in range(2):2230 if np.allclose(dF[i,:],dFT[i,:],atol=1.e-6):2231 fsc[i] = 12232 else:2233 fsc[i] = 02234 FSC &= fsc2235 if debug: print (SSMT2text(ssop).replace(' ',''),sdet,ssdet,epsinv,fsc)2236 n = -12237 for i,F in enumerate(FSC):2238 if F:2239 n += 12240 CSI[0][i] = n+12241 CSI[1][i] = 1.02242 2243 2250 return CSI,dF,dFTP 2244 2251 2245 2252 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 2271 2262 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))] 2273 2266 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) 2283 2337 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 2334 2347 2335 2348 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 2432 2456 2433 2457 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 & cos2437 '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.]]],}2443 2458 xyz = np.array(XYZ)%1. 2444 2459 SGOps = copy.deepcopy(SGData['SGOps']) … … 2446 2461 siteSym = SytSym(XYZ,SGData)[0].strip() 2447 2462 if debug: print ('siteSym: '+siteSym) 2448 if siteSym == '1': #"1" site symmetry2449 if debug:2450 return CSI,None,None,None,None2451 else:2452 return CSI2453 elif siteSym == '-1': #"-1" site symmetry2454 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,None2460 else:2461 return CSI2462 2463 SSGOps = copy.deepcopy(SSGData['SSGOps']) 2463 2464 #expand ops to include inversions if any … … 2485 2486 #make modulation arrays - one parameter at a time 2486 2487 if Stype == 'Sfrac': 2487 CSI ['Sfrac'],dF,dFTP = DoFrac()2488 CSI,dF,dFTP = DoFrac() 2488 2489 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]) 2491 2492 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 2494 2498 if debug: 2495 return CSI, tau,[dF,dFTP],[dX,dXTP],[dU,dUTP]2499 return CSI,dF,dFTP 2496 2500 else: 2497 2501 return CSI -
trunk/imports/G2phase_CIF.py
r3266 r3276 499 499 else: 500 500 Sfrac = [] 501 nim = -1 501 502 if displFdict: 502 503 for i,item in enumerate(displFdict['_atom_site_displace_fourier_atom_site_label']): … … 515 516 else: 516 517 Spos = [] 518 nim = -1 517 519 if UijFdict: 518 520 nim = -1 … … 531 533 else: 532 534 Sadp = [] 535 nim = -1 533 536 if MagFdict: 534 537 nim = -1
Note: See TracChangeset
for help on using the changeset viewer.