source: trunk/imports/G2phase.py @ 2473

Last change on this file since 2473 was 2473, checked in by vondreele, 5 years ago

work on magnetic structures - import from EXP, plotting, LS refine I/O, mag. form factors, etc.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Author Revision URL Id
File size: 25.0 KB
Line 
1# -*- coding: utf-8 -*-
2########### SVN repository information ###################
3# $Date: 2016-09-20 18:58:10 +0000 (Tue, 20 Sep 2016) $
4# $Author: vondreele $
5# $Revision: 2473 $
6# $URL: trunk/imports/G2phase.py $
7# $Id: G2phase.py 2473 2016-09-20 18:58:10Z vondreele $
8########### SVN repository information ###################
9#
10'''
11*Module G2phase: PDB, .EXP & JANA m40,m50*
12-------------------------------------------
13
14A set of short routines to read in phases using routines that were
15previously implemented in GSAS-II: PDB, GSAS .EXP and JANA m40-m50 file formats
16
17'''
18
19import sys
20import os.path
21import math
22import random as ran
23import traceback
24import numpy as np
25import wx
26import GSASIIIO as G2IO
27import GSASIIspc as G2spc
28import GSASIIlattice as G2lat
29import GSASIIpath
30GSASIIpath.SetVersionNumber("$Revision: 2473 $")
31R2pisq = 1./(2.*np.pi**2)
32
33class PDB_ReaderClass(G2IO.ImportPhase):
34    'Routine to import Phase information from a PDB file'
35    def __init__(self):
36        super(self.__class__,self).__init__( # fancy way to say ImportPhase.__init__
37            extensionlist=('.pdb','.ent','.PDB','.ENT'),
38            strictExtension=True,
39            formatName = 'PDB',
40            longFormatName = 'Original Protein Data Bank (.pdb file) import'
41            )
42    def ContentsValidator(self, filepointer):
43        '''Taking a stab a validating a PDB file
44        (look for cell & at least one atom)
45        '''
46        for i,l in enumerate(filepointer):
47            if l.startswith('CRYST1'):
48                break
49        else:
50            self.errors = 'no CRYST1 record found'
51            return False
52        for i,l in enumerate(filepointer):
53            if l.startswith('ATOM'):
54                return True
55        self.errors = 'no ATOM records found after CRYST1 record'
56        return False
57
58    def Reader(self,filename,filepointer, ParentFrame=None, **unused):
59        'Read a PDF file using :meth:`ReadPDBPhase`'
60        try:
61            self.Phase = self.ReadPDBPhase(filename, ParentFrame)
62            return True
63        except Exception as detail:
64            self.errors += '\n  '+str(detail)
65            print 'PDB read error:',detail # for testing
66            traceback.print_exc(file=sys.stdout)
67            return False
68       
69    def ReadPDBPhase(self,filename,parent=None):
70        '''Read a phase from a PDB file.
71        '''
72        EightPiSq = 8.*math.pi**2
73        self.errors = 'Error opening file'
74        file = open(filename, 'Ur')
75        Phase = {}
76        Title = ''
77        Compnd = ''
78        Atoms = []
79        A = np.zeros(shape=(3,3))
80        S = file.readline()
81        line = 1
82        SGData = None
83        cell = None
84        while S:
85            self.errors = 'Error reading at line '+str(line)
86            Atom = []
87            if 'TITLE' in S[:5]:
88                Title = S[10:72].strip()
89            elif 'COMPND    ' in S[:10]:
90                Compnd = S[10:72].strip()
91            elif 'CRYST' in S[:5]:
92                abc = S[7:34].split()
93                angles = S[34:55].split()
94                cell=[float(abc[0]),float(abc[1]),float(abc[2]),
95                    float(angles[0]),float(angles[1]),float(angles[2])]
96                Volume = G2lat.calc_V(G2lat.cell2A(cell))
97                AA,AB = G2lat.cell2AB(cell)
98                SpGrp = S[55:65]
99                E,SGData = G2spc.SpcGroup(SpGrp)
100                # space group processing failed, try to look up name in table
101                if E:
102                    SpGrpNorm = G2spc.StandardizeSpcName(SpGrp)
103                    if SpGrpNorm:
104                        E,SGData = G2spc.SpcGroup(SpGrpNorm)
105                while E:
106                    print G2spc.SGErrors(E)
107                    dlg = wx.TextEntryDialog(parent,
108                        SpGrp[:-1]+' is invalid \nN.B.: make sure spaces separate axial fields in symbol',
109                        'ERROR in space group symbol','',style=wx.OK)
110                    if dlg.ShowModal() == wx.ID_OK:
111                        SpGrp = dlg.GetValue()
112                        E,SGData = G2spc.SpcGroup(SpGrp)
113                    else:
114                        SGData = G2IO.SGData # P 1
115                        self.warnings += '\nThe space group was not interpreted and has been set to "P 1".'
116                        self.warnings += "Change this in phase's General tab."           
117                    dlg.Destroy()
118                SGlines = G2spc.SGPrint(SGData)
119                for l in SGlines: print l
120            elif 'SCALE' in S[:5]:
121                V = S[10:41].split()
122                A[int(S[5])-1] = [float(V[0]),float(V[1]),float(V[2])]
123            elif 'ATOM' in S[:4] or 'HETATM' in S[:6]:
124                if not SGData:
125                    self.warnings += '\nThe space group was not read before atoms and has been set to "P 1". '
126                    self.warnings += "Change this in phase's General tab."
127                    SGData = G2IO.SGData # P 1
128                XYZ = [float(S[31:39]),float(S[39:47]),float(S[47:55])]
129                XYZ = np.inner(AB,XYZ)
130                XYZ = np.where(abs(XYZ)<0.00001,0,XYZ)
131                SytSym,Mult = G2spc.SytSym(XYZ,SGData)[:2]
132                Uiso = float(S[61:67])/EightPiSq
133                Type = S[12:14].lower()
134                if Type[0] in '123456789':
135                    Type = Type[1:]
136                Atom = [S[22:27].strip(),S[17:20].upper(),S[20:22],
137                    S[12:17].strip(),Type.strip().capitalize(),'',XYZ[0],XYZ[1],XYZ[2],
138                    float(S[55:61]),SytSym,Mult,'I',Uiso,0,0,0,0,0,0]
139                S = file.readline()
140                line += 1
141                if 'ANISOU' in S[:6]:
142                    Uij = S[30:72].split()
143                    Uij = [float(Uij[0])/10000.,float(Uij[1])/10000.,float(Uij[2])/10000.,
144                        float(Uij[3])/10000.,float(Uij[4])/10000.,float(Uij[5])/10000.]
145                    Atom = Atom[:14]+Uij
146                    Atom[12] = 'A'
147                Atom.append(ran.randint(0,sys.maxint))
148                Atoms.append(Atom)
149            S = file.readline()
150            line += 1
151        file.close()
152        self.errors = 'Error after read complete'
153        if Title:
154            PhaseName = Title
155        elif Compnd:
156            PhaseName = Compnd
157        else:
158            PhaseName = 'None'
159        if not SGData:
160            raise self.ImportException("No space group (CRYST entry) found")
161        if not cell:
162            raise self.ImportException("No cell (CRYST entry) found")
163        Phase = G2IO.SetNewPhase(Name=PhaseName,SGData=SGData,cell=cell+[Volume,])
164        Phase['General']['Type'] = 'macromolecular'
165        Phase['General']['AtomPtrs'] = [6,4,10,12]
166        Phase['Atoms'] = Atoms
167        return Phase
168
169class EXP_ReaderClass(G2IO.ImportPhase):
170    'Routine to import Phase information from GSAS .EXP files'
171    def __init__(self):
172        super(self.__class__,self).__init__( # fancy way to say ImportPhase.__init__
173            extensionlist=('.EXP','.exp'),
174            strictExtension=True,
175            formatName = 'GSAS .EXP',
176            longFormatName = 'GSAS Experiment (.EXP file) import'
177            )
178       
179    def ContentsValidator(self, filepointer):
180        'Look for a VERSION tag in 1st line' 
181        if filepointer.read(13) == '     VERSION ':
182            return True
183        self.errors = 'File does not begin with VERSION tag'
184        return False
185
186    def Reader(self,filename,filepointer, ParentFrame=None, **unused):
187        'Read a phase from a GSAS .EXP file using :meth:`ReadEXPPhase`'
188        try:
189            self.Phase = self.ReadEXPPhase(ParentFrame, filepointer)
190            return True
191        except Exception as detail:
192            self.errors += '\n  '+str(detail)
193            print 'GSAS .EXP read error:',detail # for testing
194            traceback.print_exc(file=sys.stdout)
195            return False
196
197    def ReadEXPPhase(self, G2frame,filepointer):
198        '''Read a phase from a GSAS .EXP file.
199        '''
200        shModels = ['cylindrical','none','shear - 2/m','rolling - mmm']
201        textureData = {'Order':0,'Model':'cylindrical','Sample omega':[False,0.0],
202            'Sample chi':[False,0.0],'Sample phi':[False,0.0],'SH Coeff':[False,{}],
203            'SHShow':False,'PFhkl':[0,0,1],'PFxyz':[0,0,1],'PlotType':'Pole figure'}
204        shNcof = 0
205        S = 1
206        NPhas = []
207        Expr = [{},{},{},{},{},{},{},{},{}] # GSAS can have at most 9 phases
208        for line,S in enumerate(filepointer):
209            self.errors = 'Error reading at line '+str(line+1)
210            if 'EXPR NPHAS' in S[:12]:
211                Num = S[12:-1].count('0')
212                NPhas = S[12:-1].split()
213            if 'CRS' in S[:3]:
214                N = int(S[3:4])-1
215                Expr[N][S[:12]] = S[12:-1]
216        PNames = []
217        if not NPhas:
218            raise self.ImportException("No EXPR NPHAS record found")
219        self.errors = 'Error interpreting file'
220        for n,N in enumerate(NPhas):
221            if N != '0':
222                result = n
223                key = 'CRS'+str(n+1)+'    PNAM'
224                PNames.append(Expr[n][key])
225        if len(PNames) == 0:
226            raise self.ImportException("No phases found")           
227        elif len(PNames) > 1:
228            dlg = wx.SingleChoiceDialog(G2frame, 'Which phase to read?', 'Read phase data', PNames, wx.CHOICEDLG_STYLE)
229            try:
230                if dlg.ShowModal() == wx.ID_OK:
231                    result = dlg.GetSelection() # I think this breaks is there are skipped phases. Cant this happen?
232            finally:
233                dlg.Destroy()       
234        EXPphase = Expr[result]
235        keyList = EXPphase.keys()
236        keyList.sort()
237        SGData = {}
238        if NPhas[result] == '1':
239            Ptype = 'nuclear'
240        elif NPhas[result] in ['2','3']:
241            Ptype = 'magnetic'
242            MagDmin = 1.0
243        elif NPhas[result] == '4':
244            Ptype = 'macromolecular'
245        elif NPhas[result] == '10':
246            Ptype = 'Pawley'
247        else:
248            raise self.ImportException("Phase type not recognized")           
249        for key in keyList:
250            if 'PNAM' in key:
251               PhaseName = EXPphase[key].strip()
252            elif 'ABC   ' in key:
253                abc = [float(EXPphase[key][:10]),float(EXPphase[key][10:20]),float(EXPphase[key][20:30])]                       
254            elif 'ANGLES' in key:
255                angles = [float(EXPphase[key][:10]),float(EXPphase[key][10:20]),float(EXPphase[key][20:30])]                                               
256            elif 'SG SYM' in key:
257                SpGrp = EXPphase[key][:15].strip()
258                E,SGData = G2spc.SpcGroup(SpGrp)
259                if E:
260                    SGData = G2IO.SGData # P 1 -- unlikely to need this!
261                    self.warnings += '\nThe GSAS space group was not interpreted(!) and has been set to "P 1".'
262                    self.warnings += "Change this in phase's General tab."                       
263            elif 'SPNFLP' in key:
264                SpnFlp = [int(s) for s in EXPphase[key].split()] 
265                if SGData['SpGrp'][0] in ['A','B','C','I','R','F']:
266                    SpnFlp += [1,1,1,1]
267            elif 'MXDSTR' in key:
268                MagDmin = float(EXPphase[key][:10])               
269            elif 'OD    ' in key:
270                SHdata = EXPphase[key].split() # may not have all 9 values
271                SHvals = 9*[0]
272                for i in range(9):
273                    try:
274                        float(SHdata[i])
275                        SHvals[i] = SHdata[i]
276                    except:
277                        pass
278                textureData['Order'] = int(SHvals[0])
279                textureData['Model'] = shModels[int(SHvals[2])]
280                textureData['Sample omega'] = [False,float(SHvals[6])]
281                textureData['Sample chi'] = [False,float(SHvals[7])]
282                textureData['Sample phi'] = [False,float(SHvals[8])]
283                shNcof = int(SHvals[1])
284        Atoms = []
285        if Ptype in ['nuclear','magnetic',]:
286            for key in keyList:
287                if 'AT' in key:
288                    if key[11:] == 'A':
289                        S = EXPphase[key]
290                    elif key[11:] == 'B':
291                        S += EXPphase[key]
292                        Atom = [S[50:58].strip(),S[:10].strip().capitalize(),'',
293                            float(S[10:20]),float(S[20:30]),float(S[30:40]),
294                            float(S[40:50]),'',int(S[60:62]),S[130:131]]
295                        if Atom[9] == 'I':
296                            Atom += [float(S[68:78]),0.,0.,0.,0.,0.,0.]
297                        elif Atom[9] == 'A':
298                            Atom += [0.0,float(S[68:78]),float(S[78:88]),
299                                float(S[88:98]),float(S[98:108]),
300                                float(S[108:118]),float(S[118:128])]
301                        XYZ = Atom[3:6]
302                        Atom[7],Atom[8] = G2spc.SytSym(XYZ,SGData)[:2]
303                        if Ptype == 'magnetic':
304                            Atom = Atom[:7]+[0.,0.,0.]+Atom[7:]
305                        Atom.append(ran.randint(0,sys.maxint))
306                        Atoms.append(Atom)
307                    elif key[11:] == 'M' and key[6:8] == 'AT':
308                        S = EXPphase[key]
309                        Atoms[-1][7:10] = [float(S[:10]),float(S[10:20]),float(S[20:30])]
310        elif Ptype == 'macromolecular':
311            for key in keyList:
312                if 'AT' in key[6:8]:
313                    S = EXPphase[key]
314                    Atom = [S[56:60],S[50:54].strip().upper(),S[54:56],
315                        S[46:51].strip(),S[:8].strip().capitalize(),'',
316                        float(S[16:24]),float(S[24:32]),float(S[32:40]),
317                        float(S[8:16]),'1',1,'I',float(S[40:46]),0,0,0,0,0,0]
318                    XYZ = Atom[6:9]
319                    Atom[10],Atom[11] = G2spc.SytSym(XYZ,SGData)[:2]
320                    Atom.append(ran.randint(0,sys.maxint))
321                    Atoms.append(Atom)
322        Volume = G2lat.calc_V(G2lat.cell2A(abc+angles))
323        if shNcof:
324            shCoef = {}
325            nRec = [i+1 for i in range((shNcof-1)/6+1)]
326            for irec in nRec:
327                ODkey = keyList[0][:6]+'OD'+'%3dA'%(irec)
328                indx = EXPphase[ODkey].split()
329                ODkey = ODkey[:-1]+'B'
330                vals = EXPphase[ODkey].split()
331                for i,val in enumerate(vals):
332                    key = 'C(%s,%s,%s)'%(indx[3*i],indx[3*i+1],indx[3*i+2])
333                    shCoef[key] = float(val)
334            textureData['SH Coeff'] = [False,shCoef]
335        if not SGData:
336            raise self.ImportException("No space group found in phase")
337        if not abc:
338            raise self.ImportException("No cell lengths found in phase")
339        if not angles:
340            raise self.ImportException("No cell angles found in phase")
341        if not Atoms:
342            raise self.ImportException("No atoms found in phase")
343        Phase = G2IO.SetNewPhase(Name=PhaseName,SGData=SGData,cell=abc+angles+[Volume,])
344        general = Phase['General']
345        general['Type'] = Ptype
346        if general['Type'] =='macromolecular':
347            general['AtomPtrs'] = [6,4,10,12]
348        elif general['Type'] =='magnetic':
349            general['AtomPtrs'] = [3,1,10,12]
350            general['SGData']['SGSpin'] = SpnFlp
351            general['MagDmin'] = MagDmin   
352        else:   #nuclear
353            general['AtomPtrs'] = [3,1,7,9]   
354        general['SH Texture'] = textureData
355        Phase['Atoms'] = Atoms
356        return Phase
357
358class JANA_ReaderClass(G2IO.ImportPhase):
359    'Routine to import Phase information from a JANA2006 file'
360    def __init__(self):
361        super(self.__class__,self).__init__( # fancy way to say ImportPhase.__init__
362            extensionlist=('.m50','.M50'),
363            strictExtension=True,
364            formatName = 'JANA m50',
365            longFormatName = 'JANA2006 phase import'
366            )
367    def ContentsValidator(self, filepointer):
368        '''Taking a stab a validating a .m50 file
369        (look for cell & at least one atom)
370        '''
371        for i,l in enumerate(filepointer):
372            if l.startswith('cell'):
373                break
374        else:
375            self.errors = 'no cell record found'
376            return False
377        for i,l in enumerate(filepointer):
378            if l.startswith('spgroup'):
379                return True
380        self.errors = 'no spgroup record found after cell record'
381        return False
382       
383    def Reader(self,filename,filepointer, ParentFrame=None, **unused):
384        'Read a m50 file using :meth:`ReadJANAPhase`'
385        try:
386            self.Phase = self.ReadJANAPhase(filename, ParentFrame)
387            return True
388        except Exception as detail:
389            self.errors += '\n  '+str(detail)
390            print 'JANA read error:',detail # for testing
391            traceback.print_exc(file=sys.stdout)
392            return False
393       
394    def ReadJANAPhase(self,filename,parent=None):
395        '''Read a phase from a JANA2006 m50 & m40 files.
396        '''
397        self.errors = 'Error opening file'
398        file = open(filename, 'Ur') #contains only cell & spcgroup
399        Phase = {}
400        Title = os.path.basename(filename)
401        Compnd = ''
402        Type = 'nuclear'
403        Atoms = []
404        Atypes = []
405        SuperVec = [[0,0,.1],False,4]
406        S = file.readline()
407        line = 1
408        SGData = None
409        SuperSg = ''
410        cell = None
411        nqi = 0
412        version = '2000'
413        while S:
414            self.errors = 'Error reading at line '+str(line)
415            if 'title' in S and S != 'title\n':
416                Title = S.split()[1]
417            elif 'Jana2006' in S:
418                self.warnings += '\nJana2006 file detected'
419                version = '2006'
420            elif 'cell' in S[:4]:
421                cell = S[5:].split()
422                cell=[float(cell[0]),float(cell[1]),float(cell[2]),
423                    float(cell[3]),float(cell[4]),float(cell[5])]
424                Volume = G2lat.calc_V(G2lat.cell2A(cell))
425                G,g = G2lat.cell2Gmat(cell)
426                ast = np.sqrt(np.diag(G))
427                Mast = np.multiply.outer(ast,ast)   
428               
429            elif 'spgroup' in S:
430                if 'X' in S:
431                    raise self.ImportException("Ad hoc Supersymmetry centering "+S+" not allowed in GSAS-II")           
432                SpGrp = S.split()[1]
433                SuperSg = ''
434                if '(' in SpGrp:    #supercell symmetry - split in 2
435                    SuperStr = SpGrp.split('(')
436                    SpGrp = SuperStr[0]
437                    SuperSg = '('+SuperStr[1]
438                SpGrpNorm = G2spc.StandardizeSpcName(SpGrp)
439                E,SGData = G2spc.SpcGroup(SpGrpNorm)
440                # space group processing failed, try to look up name in table
441                while E:
442                    print G2spc.SGErrors(E)
443                    dlg = wx.TextEntryDialog(parent,
444                        SpGrp[:-1]+' is invalid \nN.B.: make sure spaces separate axial fields in symbol',
445                        'ERROR in space group symbol','',style=wx.OK)
446                    if dlg.ShowModal() == wx.ID_OK:
447                        SpGrp = dlg.GetValue()
448                        E,SGData = G2spc.SpcGroup(SpGrp)
449                    else:
450                        SGData = G2IO.SGData # P 1
451                        self.warnings += '\nThe space group was not interpreted and has been set to "P 1".'
452                        self.warnings += "Change this in phase's General tab."           
453                    dlg.Destroy()
454                SGlines = G2spc.SGPrint(SGData)
455            elif 'qi' in S[:2]:
456                if nqi:
457                    raise self.ImportException("Supersymmetry too high; GSAS-II limited to (3+1) supersymmetry")           
458                vec = S.split()[1:]
459                SuperVec = [[float(vec[i]) for i in range(3)],False,4]
460                nqi += 1
461            elif 'atom' in S[:4]:
462                Atypes.append(S.split()[1])
463            S = file.readline()
464            line += 1
465        file.close()
466        #read atoms from m40 file
467        if not SGData:
468            self.warnings += '\nThe space group was not read before atoms and has been set to "P 1". '
469            self.warnings += "Change this in phase's General tab."
470            SGData = G2IO.SGData # P 1
471        waveTypes = ['Fourier','Sawtooth','ZigZag',]
472        filename2 = os.path.splitext(filename)[0]+'.m40'
473        file2 = open(filename2,'Ur')
474        S = file2.readline()
475        line = 1
476        self.errors = 'Error reading at line '+str(line)
477        nAtoms = int(S.split()[0])
478        for i in range(4):
479            S = file2.readline()           
480        for i in range(nAtoms):
481            S1 = file2.readline()
482            S1N = S1.split()[-3:]   # no. occ, no. pos waves, no. ADP waves
483            S1N = [int(i) for i in S1N]
484            S1T = list(S1[60:63])
485            waveType = waveTypes[int(S1T[1])]
486            Spos = []
487            Sadp = []
488            Sfrac = []
489            Smag = []
490            XYZ = [float(S1[27:36]),float(S1[36:45]),float(S1[45:54])]
491            SytSym,Mult = G2spc.SytSym(XYZ,SGData)[:2]
492            aType = Atypes[int(S1[9:11])-1]
493            Name = S1[:8].strip()
494            if S1[11:15].strip() == '1':
495                S2 = file2.readline()
496                Uiso = S2[:9]
497                if version == '2000':
498                    Uiso = R2pisq*float(Uiso)/4.      #Biso -> Uiso
499                Uij = [0,0,0,0,0,0]
500                IA = 'I'
501            elif S1[11:15].strip() == '2':
502                S2 = file2.readline()
503                IA = 'A'
504                Uiso = 0.
505                Uij = [float(S2[:9]),float(S2[9:18]),float(S2[18:27]),
506                    float(S2[27:36]),float(S2[36:45]),float(S2[45:54])] #Uij in Jana2006!
507                if version == '2000':
508                    Uij = R2pisq*G2lat.UijtoU6(G2lat.U6toUij(Uij)/Mast) #these things are betaij in Jana2000! need to convert to Uij
509            for i in range(S1N[0]):
510                if not i:
511                    FS = file2.readline()
512                    Sfrac.append(FS[:9])    #'O' or 'delta' = 'length' for crenel
513                    if int(S1T[0]):  #"", "Legendre" or "Xharm" in 18:27 for "crenel"!
514                        waveType = 'Crenel/Fourier' #all waves 'Fourier' no other choice
515                Sfrac.append(file2.readline()[:18]) #if not crenel = Osin & Ocos
516                # else Osin & Ocos except last one is X40 = 'Center'
517            for i in range(S1N[1]): 
518                Spos.append(file2.readline()[:54])
519            for i in range(S1N[2]):
520                Sadp.append(file2.readline()[:54]+file2.readline())
521            if sum(S1N):    #if any waves: skip mystery line?
522                file2.readline()
523            for i,it in enumerate(Sfrac):
524                print i,it
525                if not i:
526                    if 'Crenel' in waveType:
527                        vals = [float(it),float(Sfrac[-1][:9])]
528                    else:
529                        vals = [float(it),]
530                else:
531                    vals = [float(it[:9]),float(it[9:18])]
532                if 'Crenel' in waveType and i == len(Sfrac)-1:
533                    del Sfrac[-1]
534                    break               
535                Sfrac[i] = [vals,False]
536                print Sfrac[i]
537            for i,it in enumerate(Spos):
538                if waveType in ['Sawtooth',] and not i:
539                    vals = [float(it[:9]),float(it[9:18]),float(it[18:27]),float(it[27:36])]
540                else:
541                    vals = [float(it[:9]),float(it[9:18]),float(it[18:27]),float(it[27:36]),float(it[36:45]),float(it[45:54])]
542                Spos[i] = [vals,False]
543            for i,it in enumerate(Sadp):
544                vals = [float(it[:9]),float(it[9:18]),float(it[18:27]),float(it[27:36]),float(it[36:45]),float(it[45:54]),
545                    float(it[54:63]),float(it[63:72]),float(it[72:81]),float(it[81:90]),float(it[90:99]),float(it[99:108])]
546                #these are betaij modulations in Jana2000! need to convert to Uij modulations
547                if version == '2000':               
548                    vals[:6] = R2pisq*G2lat.UijtoU6(G2lat.U6toUij(vals[:6])/Mast)    #convert sin bij to Uij
549                    vals[6:] = R2pisq*G2lat.UijtoU6(G2lat.U6toUij(vals[6:])/Mast)    #convert cos bij to Uij
550                Sadp[i] = [vals,False]
551            Atom = [Name,aType,'',XYZ[0],XYZ[1],XYZ[2],1.0,SytSym,Mult,IA,Uiso]
552            Atom += Uij
553            Atom.append(ran.randint(0,sys.maxint))
554            Atom.append([])
555            Atom.append([])
556            Atom.append({'SS1':{'waveType':waveType,'Sfrac':Sfrac,'Spos':Spos,'Sadp':Sadp,'Smag':Smag}})    #SS2 is for (3+2), etc.
557            Atoms.append(Atom)
558        file2.close()
559        self.errors = 'Error after read complete'
560        if not SGData:
561            raise self.ImportException("No space group (spcgroup entry) found")
562        if not cell:
563            raise self.ImportException("No cell found")
564        Phase = G2IO.SetNewPhase(Name=Title,SGData=SGData,cell=cell+[Volume,])
565        Phase['General']['Type'] = Type
566        Phase['General']['Modulated'] = True
567        Phase['General']['Super'] = nqi
568        Phase['General']['SuperVec'] = SuperVec
569        Phase['General']['SuperSg'] = SuperSg
570        if SuperSg:
571            Phase['General']['SSGData'] = G2spc.SSpcGroup(SGData,SuperSg)[1]
572        Phase['General']['AtomPtrs'] = [3,1,7,9]
573        Phase['Atoms'] = Atoms
574        return Phase
Note: See TracBrowser for help on using the repository browser.