Changeset 4659 for trunk/GSASIIElem.py
- Timestamp:
- Nov 21, 2020 2:15:49 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIElem.py
r4629 r4659 543 543 return (FP, FPP, Mu) 544 544 545 545 mapDefault = {'MapType':'','RefList':'','GridStep':0.25,'Show bonds':True, 546 'rho':[],'rhoMax':0.,'mapSize':10.0,'cutOff':50.,'Flip':False} 547 548 def SetupGeneral(data, dirname): 549 '''Initialize the General sections of the Phase tree contents 550 Called by SetupGeneral in GSASIIphsGUI and in GSASIIscriptable.SetupGeneral 551 ''' 552 generalData = data['General'] 553 atomData = data['Atoms'] 554 generalData['AtomTypes'] = [] 555 generalData['Isotopes'] = {} 556 # various patches 557 if 'Isotope' not in generalData: 558 generalData['Isotope'] = {} 559 if 'Data plot type' not in generalData: 560 generalData['Data plot type'] = 'Mustrain' 561 if 'POhkl' not in generalData: 562 generalData['POhkl'] = [0,0,1] 563 if 'Map' not in generalData: 564 generalData['Map'] = mapDefault.copy() 565 if 'Flip' not in generalData: 566 generalData['Flip'] = {'RefList':'','GridStep':0.25,'Norm element':'None', 567 'k-factor':0.1,'k-Max':20.,} 568 if 'testHKL' not in generalData['Flip']: 569 generalData['Flip']['testHKL'] = [[0,0,2],[2,0,0],[1,1,1],[0,2,0],[1,2,3]] 570 if 'doPawley' not in generalData: 571 generalData['doPawley'] = False #ToDo: change to '' 572 if 'Pawley dmin' not in generalData: 573 generalData['Pawley dmin'] = 1.0 574 if 'Pawley dmax' not in generalData: 575 generalData['Pawley dmax'] = 100.0 576 if 'Pawley neg wt' not in generalData: 577 generalData['Pawley neg wt'] = 0.0 578 if '3Dproj' not in generalData: 579 generalData['3Dproj'] = '' 580 if 'doDysnomia' not in generalData: 581 generalData['doDysnomia'] = False 582 if 'Algolrithm' in generalData.get('MCSA controls',{}) or \ 583 'MCSA controls' not in generalData: 584 generalData['MCSA controls'] = {'Data source':'','Annealing':[0.7,0.1,250], 585 'dmin':2.8,'Algorithm':'log','fast parms':[0.8,0.6],'log slope':0.9, 586 'Cycles':1,'Results':[],'newDmin':True} 587 if 'AtomPtrs' not in generalData: 588 generalData['AtomPtrs'] = [3,1,7,9] 589 if generalData['Type'] == 'macromolecular': 590 generalData['AtomPtrs'] = [6,4,10,12] 591 elif generalData['Type'] == 'magnetic': 592 generalData['AtomPtrs'] = [3,1,10,12] 593 if generalData['Modulated']: 594 if 'Super' not in generalData: 595 generalData['Super'] = 1 596 generalData['SuperVec'] = [[0.,0.,0.],False,1] 597 generalData['SSGData'] = {} 598 if '4DmapData' not in generalData: 599 generalData['4DmapData'] = mapDefault.copy() 600 generalData['4DmapData'].update({'MapType':'Fobs'}) 601 atomData = data['Atoms'] 602 for atom in atomData: 603 # if 'SS1' not in atom: 604 # atom += [[],[],{'SS1':{'waveType':'Fourier','Sfrac':[],'Spos':[],'Sadp':[],'Smag':[]}}] 605 if isinstance(atom[-1],dict) and 'waveType' in atom[-1]['SS1']: 606 waveType = atom[-1]['SS1']['waveType'] 607 for parm in ['Sfrac','Spos','Sadp','Smag']: 608 if len(atom[-1]['SS1'][parm]): 609 wType = 'Fourier' 610 if parm == 'Sfrac': 611 if 'Crenel' in waveType: 612 wType = 'Crenel' 613 elif parm == 'Spos': 614 if not 'Crenel' in waveType: 615 wType = waveType 616 atom[-1]['SS1'][parm] = [wType,]+list(atom[-1]['SS1'][parm]) 617 del atom[-1]['SS1']['waveType'] 618 else: 619 generalData['Super'] = 0 620 if 'Modulated' not in generalData: 621 generalData['Modulated'] = False 622 if 'HydIds' not in generalData: 623 generalData['HydIds'] = {} 624 if generalData['Type'] == 'magnetic': 625 if 'SGGray' not in generalData['SGData']: 626 generalData['SGData']['SGGray'] = False 627 if 'Resolution' in generalData['Map']: 628 generalData['Map']['GridStep'] = generalData['Map']['Resolution']/2. 629 generalData['Flip']['GridStep'] = generalData['Flip']['Resolution']/2. 630 del generalData['Map']['Resolution'] 631 del generalData['Flip']['Resolution'] 632 if 'Compare' not in generalData: 633 generalData['Compare'] = {'Oatoms':'','Tatoms':'', 634 'Tilts':{'Otilts':[],'Ttilts':[]}, 635 'Bonds':{'Obonds':[],'Tbonds':[]},'Vects':{'Ovec':[],'Tvec':[]}, 636 'dVects':{'Ovec':[],'Tvec':[]},'Sampling':1.0} 637 if 'Sampling' not in generalData['Compare']: 638 generalData['Compare']['Sampling'] = 1.0 639 640 # end of patches 641 cx,ct,cs,cia = generalData['AtomPtrs'] 642 generalData['NoAtoms'] = {} 643 generalData['BondRadii'] = [] 644 generalData['AngleRadii'] = [] 645 generalData['vdWRadii'] = [] 646 generalData['AtomMass'] = [] 647 generalData['Color'] = [] 648 if generalData['Type'] == 'magnetic': 649 generalData['MagDmin'] = generalData.get('MagDmin',1.0) 650 landeg = generalData.get('Lande g',[]) 651 generalData['Mydir'] = dirname 652 badList = {} 653 for iat,atom in enumerate(atomData): 654 atom[ct] = atom[ct].lower().capitalize() #force to standard form 655 if generalData['AtomTypes'].count(atom[ct]): 656 generalData['NoAtoms'][atom[ct]] += atom[cx+3]*float(atom[cs+1]) 657 elif atom[ct] != 'UNK': 658 Info = GetAtomInfo(atom[ct]) 659 if not Info: 660 if atom[ct] not in badList: 661 badList[atom[ct]] = 0 662 badList[atom[ct]] += 1 663 atom[ct] = 'UNK' 664 continue 665 atom[ct] = Info['Symbol'] # N.B. symbol might be changed by GetAtomInfo 666 generalData['AtomTypes'].append(atom[ct]) 667 generalData['Z'] = Info['Z'] 668 generalData['Isotopes'][atom[ct]] = Info['Isotopes'] 669 generalData['BondRadii'].append(Info['Drad']) 670 generalData['AngleRadii'].append(Info['Arad']) 671 generalData['vdWRadii'].append(Info['Vdrad']) 672 if atom[ct] in generalData['Isotope']: 673 if generalData['Isotope'][atom[ct]] not in generalData['Isotopes'][atom[ct]]: 674 isotope = list(generalData['Isotopes'][atom[ct]].keys())[-1] 675 generalData['Isotope'][atom[ct]] = isotope 676 generalData['AtomMass'].append(Info['Isotopes'][generalData['Isotope'][atom[ct]]]['Mass']) 677 else: 678 generalData['Isotope'][atom[ct]] = 'Nat. Abund.' 679 if 'Nat. Abund.' not in generalData['Isotopes'][atom[ct]]: 680 isotope = list(generalData['Isotopes'][atom[ct]].keys())[-1] 681 generalData['Isotope'][atom[ct]] = isotope 682 generalData['AtomMass'].append(Info['Mass']) 683 generalData['NoAtoms'][atom[ct]] = atom[cx+3]*float(atom[cs+1]) 684 generalData['Color'].append(Info['Color']) 685 if generalData['Type'] == 'magnetic': 686 if len(landeg) < len(generalData['AtomTypes']): 687 landeg.append(2.0) 688 if generalData['Type'] == 'magnetic': 689 generalData['Lande g'] = landeg[:len(generalData['AtomTypes'])] 690 691 F000X = 0. 692 F000N = 0. 693 for i,elem in enumerate(generalData['AtomTypes']): 694 F000X += generalData['NoAtoms'][elem]*generalData['Z'] 695 isotope = generalData['Isotope'][elem] 696 F000N += generalData['NoAtoms'][elem]*generalData['Isotopes'][elem][isotope]['SL'][0] 697 generalData['F000X'] = F000X 698 generalData['F000N'] = F000N 699 generalData['Mass'] = G2mth.getMass(generalData) 700 701 if badList: 702 msg = 'Warning: element symbol(s) not found:' 703 for key in badList: 704 msg += '\n\t' + key 705 if badList[key] > 1: 706 msg += ' (' + str(badList[key]) + ' times)' 707 #wx.MessageBox(msg,caption='Element symbol error') 708 raise ValueError("Phase error:\n" + msg)
Note: See TracChangeset
for help on using the changeset viewer.