1 | # -*- coding: utf-8 -*- |
---|
2 | ########### SVN repository information ################### |
---|
3 | # $Date: 2015-04-27 13:22:06 -0500 (Mon, 27 Apr 2015) $ |
---|
4 | # $Author: vondreele $ |
---|
5 | # $Revision: 1812 $ |
---|
6 | # $URL: https://subversion.xray.aps.anl.gov/pyGSAS/trunk/imports/G2phase_GPX.py $ |
---|
7 | # $Id: G2phase_GPX.py 1812 2015-04-27 18:22:06Z vondreele $ |
---|
8 | ########### SVN repository information ################### |
---|
9 | ''' |
---|
10 | *Module G2phase_rmc6f: Import phase from RMCProfile rmc6f file* |
---|
11 | -------------------------------------------------------- |
---|
12 | |
---|
13 | Copies a phase from SHELX ins file into the |
---|
14 | current project. |
---|
15 | |
---|
16 | ''' |
---|
17 | from __future__ import division, print_function |
---|
18 | import sys |
---|
19 | import numpy as np |
---|
20 | import random as ran |
---|
21 | import GSASIIobj as G2obj |
---|
22 | import GSASIIspc as G2spc |
---|
23 | import GSASIIlattice as G2lat |
---|
24 | import GSASIIpath |
---|
25 | GSASIIpath.SetVersionNumber("$Revision: 1812 $") |
---|
26 | |
---|
27 | class PhaseReaderClass(G2obj.ImportPhase): |
---|
28 | 'Opens a .rmc6f file and pulls out the phase' |
---|
29 | def __init__(self): |
---|
30 | super(self.__class__,self).__init__( # fancy way to say ImportPhase.__init__ |
---|
31 | extensionlist=('.rmc6f',), |
---|
32 | strictExtension=True, |
---|
33 | formatName = 'RMCProfile .rmc6f', |
---|
34 | longFormatName = 'RMCProfile structure (*.rmc6f) file import' |
---|
35 | ) |
---|
36 | |
---|
37 | def ContentsValidator(self, filename): |
---|
38 | "Test if the rmc6f file has a CELL record" |
---|
39 | fp = open(filename,'r') |
---|
40 | if fp.readline()[:-1] != '(Version 6f format configuration file)': |
---|
41 | self.errors = 'This is not a valid .rmc6f file.' |
---|
42 | fp.close() |
---|
43 | return False |
---|
44 | fp.close() |
---|
45 | return True |
---|
46 | |
---|
47 | def Reader(self,filename,filepointer, ParentFrame=None, **unused): |
---|
48 | 'Read a rmc6f file using :meth:`ReadINSPhase`' |
---|
49 | self.Phase = self.Readrmc6fPhase(filename, ParentFrame) |
---|
50 | return True |
---|
51 | |
---|
52 | def Readrmc6fPhase(self,filename,parent=None): |
---|
53 | '''Read a phase from a rmc6f file. |
---|
54 | ''' |
---|
55 | self.errors = 'Error opening file' |
---|
56 | fp = open(filename, 'Ur') |
---|
57 | Phase = {} |
---|
58 | Title = 'RMCProfile box' |
---|
59 | Atoms = [] |
---|
60 | S = fp.readline() |
---|
61 | line = 1 |
---|
62 | SGData = None |
---|
63 | cell = None |
---|
64 | IA = 'I' |
---|
65 | Uiso = 0.01 |
---|
66 | Uij = [0. for i in range(6)] |
---|
67 | while S: |
---|
68 | self.errors = 'Error reading at line '+str(line) |
---|
69 | Atom = [] |
---|
70 | if 'Cell' in S[:4]: |
---|
71 | cellRec = S.split(':')[1].split() |
---|
72 | abc = cellRec[:3] |
---|
73 | angles = cellRec[3:] |
---|
74 | cell=[float(abc[0]),float(abc[1]),float(abc[2]), |
---|
75 | float(angles[0]),float(angles[1]),float(angles[2])] |
---|
76 | Volume = G2lat.calc_V(G2lat.cell2A(cell)) |
---|
77 | AA,AB = G2lat.cell2AB(cell) |
---|
78 | SGData = G2obj.P1SGData # P 1 |
---|
79 | elif 'Atoms' in S[:5]: |
---|
80 | S = fp.readline()[:-1] |
---|
81 | AtRec = S.split() |
---|
82 | for ix,s in enumerate(AtRec): |
---|
83 | if '.' in s: |
---|
84 | break #is points at x |
---|
85 | while S: |
---|
86 | AtRec = S.split() |
---|
87 | Atype = AtRec[1] |
---|
88 | Aname = Atype+AtRec[0] |
---|
89 | Afrac = 1.0 |
---|
90 | x,y,z = AtRec[ix:ix+3] |
---|
91 | XYZ = np.array([float(x),float(y),float(z)]) |
---|
92 | SytSym,Mult = '1',1 |
---|
93 | Atom = [Aname,Atype,'',XYZ[0],XYZ[1],XYZ[2],Afrac,SytSym,Mult,IA,Uiso] |
---|
94 | Atom += Uij |
---|
95 | Atom.append(ran.randint(0,sys.maxsize)) |
---|
96 | Atoms.append(Atom) |
---|
97 | S = fp.readline()[:-1] |
---|
98 | S = fp.readline() |
---|
99 | line += 1 |
---|
100 | fp.close() |
---|
101 | self.errors = 'Error after read complete' |
---|
102 | Phase = G2obj.SetNewPhase(Name='RMCProfile phase',SGData=SGData,cell=cell+[Volume,]) |
---|
103 | Phase['General']['Name'] = Title |
---|
104 | Phase['General']['Type'] = 'nuclear' |
---|
105 | Phase['General']['AtomPtrs'] = [3,1,7,9] |
---|
106 | Phase['Atoms'] = Atoms |
---|
107 | return Phase |
---|