Changeset 2401 for trunk/GSASIIspc.py
- Timestamp:
- Jul 29, 2016 3:52:31 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIspc.py
r2367 r2401 93 93 SGData['SGCen'] = np.array(([0,0,0],[1./3.,2./3.,2./3.],[2./3.,1./3.,1./3.])) 94 94 SGData['SGOps'] = [] 95 SGData['SGGen'] = [] 96 SGData['SGSpin'] = [] 95 97 for i in range(SGInfo[5]): 96 98 Mat = np.array(SGInfo[6][i]) 97 99 Trns = np.array(SGInfo[7][i]) 98 100 SGData['SGOps'].append([Mat,Trns]) 101 SGData['SGGen'].append(int(SGInfo[8][i])) 102 SGData['SGSpin'].append('black') 99 103 if SGData['SGLaue'] in '-1': 100 104 SGData['SGSys'] = SysSym[0] … … 115 119 SGData['SGPolax'] = SGpolar(SGData) 116 120 SGData['SGPtGrp'],SGData['SSGKl'] = SGPtGroup(SGData) 117 return SGInfo[ 8],SGData121 return SGInfo[-1],SGData 118 122 119 123 def SGErrors(IErr): … … 417 421 for l in SGPrint(A): 418 422 print l 423 424 def GetGenSym(SGData): 425 ''' 426 Get the space group generator symbols 427 :param SGData: from :func:`SpcGroup` 428 LaueSym = ('-1','2/m','mmm','4/m','4/mmm','3R','3mR','3','3m1','31m','6/m','6/mmm','m3','m3m') 429 LattSym = ('P','A','B','C','I','F','R') 430 UniqSym = ('','','a','b','c','',) 431 432 ''' 433 if SGData['SGInv']: 434 if SGData['SGLaue'] in ['-1','2/m','mmm']: 435 Ibar = 7 436 elif SGData['SGLaue'] in ['4/m','4/mmm']: 437 Ibar = 1 438 elif SGData['SGLaue'] in ['3R','3mR','3','3m1','31m','6/m','6/mmm']: 439 Ibar = 15 #8+4+2+1 440 else: 441 Ibar = 4 442 Ibarx = Ibar&14 443 else: 444 Ibarx = 8 445 if SGData['SGLaue'] in ['-1','2/m','mmm','m3','m3m']: 446 Ibarx = 0 447 moregen = [] 448 for gen in SGData['SGGen']: 449 if SGData['SGLaue'] in ['m3','m3m']: 450 if gen in [1,2,4]: gen = 4 451 elif gen < 7: gen = 0 452 elif SGData['SGLaue'] in ['4/m','4/mmm','3R','3mR','3','3m1','31m','6/m','6/mmm']: 453 if gen == 2: gen = 4 454 elif gen in [3,5]: gen = 3 455 elif gen == 6: 456 if SGData['SGLaue'] in ['4/m','4/mmm']: gen = 128 457 else: gen = 16 458 elif not SGData['SGInv'] and gen == 12: gen = 8 459 elif not SGData['SGInv'] and SGData['SGLaue'] in ['3','3m1','31m','6/m','6/mmm'] and gen == 1 : gen = 24 460 if gen == 99: 461 if SGData['SGLaue'] in ['3m1','31m','6/m','6/mmm']: gen = 3 462 elif SGData['SGLaue'] == 'm3m': gen = 12 463 else: gen = 8 464 elif gen == 98: 465 if SGData['SGLaue'] in ['3m1','31m','6/m','6/mmm']: gen = 4 466 else: gen = 8 467 elif not SGData['SGInv'] and gen == 23 and SGData['SGLaue'] in ['m3','m3m']: gen = 24 468 elif gen >= 16 and gen != 128: 469 if not SGData['SGInv']: gen = 31 470 else: gen = gen^Ibarx 471 if SGData['SGInv']: 472 if gen < 128: 473 moregen.append(gen^Ibar) 474 else: 475 moregen.append(1) 476 SGData['SGGen'] += moregen 477 OprNames = [GetOprPtrName(str(irtx))[1] for irtx in PackRot(SGData['SGOps'])] 478 if SGData['SGInv']: 479 OprNames += [GetOprPtrName(str(-irtx))[1] for irtx in PackRot(SGData['SGOps'])] 480 Nsyms = len(SGData['SGOps']) 481 if SGData['SGInv']: Nsyms *= 2 482 UsymOp = [] 483 OprFlg = [] 484 if Nsyms in [1,3]: NunqOp = 0 #Triclinic acentric OR trigonal 3 485 elif Nsyms == 2: #Centric triclinic or acentric momoclinic 486 NunqOp = 1 487 UsymOp.append(OprNames[1]) 488 OprFlg.append(SGData['SGGen'][1]) 489 elif Nsyms == 4: #Point symmetry 2/m, 222, 22m, or 4 490 if '4z' in OprNames[1]: #Point symmetry 4 or -4 491 NunqOp = 1 492 UsymOp.append(OprNames[1]) 493 OprFlg.append(SGData['SGGen'][1]) 494 elif not SGData['SGInv']: #Acentric Orthorhombic 495 if 'm' in OprNames[1:4]: #22m, 2m2 or m22 496 NunqOp = 2 497 if '2' in OprNames[1]: #Acentric orthorhombic, 2mm 498 UsymOp.append(OprNames[2]) 499 OprFlg.append(SGData['SGGen'][2]) 500 UsymOp.append(OprNames[3]) 501 OprFlg.append(SGData['SGGen'][3]) 502 elif '2' in OprNames[2]: #Acentric orthorhombic, m2m 503 UsymOp.append(OprNames[1]) 504 OprFlg.append(SGData['SGGen'][1]) 505 UsymOp.append(OprNames[3]) 506 OprFlg.append(SGData['SGGen'][3]) 507 else: #Acentric orthorhombic, mm2 508 UsymOp.append(OprNames[1]) 509 OprFlg.append(SGData['SGGen'][1]) 510 UsymOp.append(OprNames[2]) 511 OprFlg.append(SGData['SGGen'][2]) 512 else: #Acentric orthorhombic, 222 513 NunqOp = -3 514 SGData['SGGen'][1:] = [4,2,1] 515 UsymOp.append(OprNames[1]) 516 OprFlg.append(SGData['SGGen'][1]) 517 UsymOp.append(OprNames[2]) 518 OprFlg.append(SGData['SGGen'][2]) 519 UsymOp.append(OprNames[3]) 520 OprFlg.append(SGData['SGGen'][3]) 521 else: #Centric Monoclinic 522 NunqOp = 2 523 UsymOp.append(OprNames[1]) 524 OprFlg.append(SGData['SGGen'][1]) 525 UsymOp.append(OprNames[3]) 526 OprFlg.append(SGData['SGGen'][3]) 527 elif Nsyms == 6: #Point symmetry 32, 3m or 6 528 NunqOp = 1 529 if '6' in OprNames[1]: #Hexagonal 6/m Laue symmetry 530 UsymOp.append(OprNames[1]) 531 OprFlg.append(SGData['SGGen'][1]) 532 else: #Trigonal 533 UsymOp.append(OprNames[4]) 534 OprFlg.append(SGData['SGGen'][3]) 535 if '2100' in OprNames[1]: UsymOp[-1] = ' 2100 ' 536 elif Nsyms == 8: #Point symmetry mmm, 4/m, or 422, etc 537 if '4' in OprNames[1]: #Tetragonal 538 NunqOp = 2 539 if SGData['SGInv']: #4/m 540 UsymOp.append(OprNames[1]) 541 OprFlg.append(SGData['SGGen'][1]) 542 UsymOp.append(OprNames[6]) 543 OprFlg.append(SGData['SGGen'][6]) 544 else: 545 if 'x' in OprNames[4]: #4mm type group 546 UsymOp.append(OprNames[4]) 547 OprFlg.append(5) 548 UsymOp.append(OprNames[7]) 549 OprFlg.append(7) 550 else: #-42m, -4m2, and 422 type groups 551 UsymOp.append(OprNames[5]) 552 OprFlg.append(7) 553 UsymOp.append(OprNames[6]) 554 OprFlg.append(18) 555 else: #Orthorhombic, mmm 556 NunqOp = 3 557 UsymOp.append(OprNames[1]) 558 OprFlg.append(SGData['SGGen'][1]) 559 UsymOp.append(OprNames[2]) 560 OprFlg.append(SGData['SGGen'][2]) 561 UsymOp.append(OprNames[7]) 562 OprFlg.append(SGData['SGGen'][7]) 563 elif Nsyms == 12 and '3' in OprNames[1]: #Trigonal 564 NunqOp = 2 565 UsymOp.append(OprNames[3]) 566 OprFlg.append(SGData['SGGen'][3]) 567 UsymOp.append(OprNames[9]) 568 OprFlg.append(SGData['SGGen'][9]) 569 elif Nsyms == 12 and '6' in OprNames[1]: #Hexagonal 570 NunqOp = 2 571 if 'mz' in OprNames[9]: #6/m 572 UsymOp.append(OprNames[1]) 573 OprFlg.append(SGData['SGGen'][1]) 574 UsymOp.append(OprNames[6]) 575 OprFlg.append(SGData['SGGen'][6]) 576 else: #6mm, -62m, -6m2 or 622 577 UsymOp.append(OprNames[6]) 578 OprFlg.append(17) 579 if 'm' in OprNames[1]: OprFlg[-1] = 20 580 UsymOp.append(OprNames[7]) 581 OprFlg.append(23) 582 elif Nsyms in [16,24]: 583 if '3' in OprNames[1]: 584 NunqOp = 1 585 UsymOp.append('') 586 OprFlg.append(SGData['SGGen'][3]) 587 for i in range(Nsyms): 588 if 'mx' in OprNames[i]: 589 UsymOp[-1] = OprNames[i] 590 elif 'm11' in OprNames[i]: 591 UsymOp[-1] = OprNames[i] 592 elif '211' in OprNames[i]: 593 UsymOp[-1] = OprNames[i] 594 OprFlg[-1] = 24 595 else: #4/mmm or 6/mmm 596 NunqOp = 3 597 UsymOp.append(' mz ') 598 OprFlg.append(1) 599 if '4' in OprNames[1]: #4/mmm 600 UsymOp.append(' mx ') 601 OprFlg.append(19) 602 UsymOp.append(' m110 ') 603 OprFlg.append(21) 604 else: #6/mmm 605 UsymOp.append(' m110 ') 606 OprFlg.append(3) 607 UsymOp.append(' m+-0 ') 608 OprFlg.append(7) 609 else: #System is cubic 610 if Nsyms == 48: 611 NunqOp = 2 612 UsymOp.append(' mx ') 613 OprFlg.append(3) 614 UsymOp.append(' m110 ') 615 OprFlg.append(23) 616 else: 617 NunqOp = 0 618 ncv = len(SGData['SGCen']) 619 if ncv > 1: 620 for icv in range(ncv): 621 if icv: 622 if SGData['SGCen'][icv][0] == 0.5: 623 if SGData['SGCen'][icv][1] == 0.5: 624 if SGData['SGCen'][icv][2] == 0.5: 625 UsymOp.append(' Icen ') 626 else: 627 UsymOp.append(' Ccen ') 628 else: 629 UsymOp.append(' Bcen ') 630 elif SGData['SGCen'][icv][1] == 0.5: 631 UsymOp.append(' Acen ') 632 else: 633 UsymOp.append(' Rcen ') 634 return UsymOp,OprFlg 635 636 def MagSGSym(SGData): 637 SGLaue = SGData['SGLaue'] 638 SpnFlp = SGData['SGSpin'] 639 if not len(SpnFlp): 640 return SGData['SpGrp'] 641 print SGData['SpGrp'],': ',SGData['SGGen'],SpnFlp 642 magSym = SGData['SpGrp'].split() 643 if len(SpnFlp) == 1: 644 if 'red' == SpnFlp[-1]: 645 magSym[1] += "'" 646 return ' '.join(magSym) 647 648 649 return ' '.join(magSym) 419 650 420 651 ################################################################################ … … 2023 2254 return result[0] 2024 2255 2256 def PackRot(SGOps): 2257 IRT = [] 2258 for ops in SGOps: 2259 M = ops[0] 2260 irt = 0 2261 for j in range(2,-1,-1): 2262 for k in range(2,-1,-1): 2263 irt *= 3 2264 irt += M[k][j] 2265 IRT.append(int(irt)) 2266 return IRT 2267 2025 2268 def SytSym(XYZ,SGData): 2026 2269 ''' … … 2035 2278 2036 2279 ''' 2037 def PackRot(SGOps):2038 IRT = []2039 for ops in SGOps:2040 M = ops[0]2041 irt = 02042 for j in range(2,-1,-1):2043 for k in range(2,-1,-1):2044 irt *= 32045 irt += M[k][j]2046 IRT.append(int(irt))2047 return IRT2048 2049 2280 SymName = '' 2050 2281 Mult = 1
Note: See TracChangeset
for help on using the changeset viewer.