source: trunk/imports/G2sfact.py @ 1106

Last change on this file since 1106 was 1106, checked in by vondreele, 8 years ago

modify reflection array to be a dictionary with 4 items: RefList?, Uniq, Phi & FF. Each is list. Use patches to convert old format to new in various places.
Fix bug in simulate PWDR code.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Author Revision URL Id
File size: 4.5 KB
Line 
1# -*- coding: utf-8 -*-
2########### SVN repository information ###################
3# $Date: 2013-10-15 17:25:24 +0000 (Tue, 15 Oct 2013) $
4# $Author: vondreele $
5# $Revision: 1106 $
6# $URL: trunk/imports/G2sfact.py $
7# $Id: G2sfact.py 1106 2013-10-15 17:25:24Z vondreele $
8########### SVN repository information ###################
9# short routines to read in structure factors from simple file formats
10#
11import sys
12import numpy as np
13import GSASIIIO as G2IO
14import GSASIIpath
15GSASIIpath.SetVersionNumber("$Revision: 1106 $")
16
17class HKLF_ReaderClass(G2IO.ImportStructFactor):
18    'Routines to import F, sig(F) reflections from a HKLF file'
19    def __init__(self):
20        super(self.__class__,self).__init__( # fancy way to self-reference
21            extensionlist=('.hkl','.HKL'),
22            strictExtension=False,
23            formatName = 'F HKL',
24            longFormatName = 'Simple (hkl Fo sig(Fo)) Structure factor text file'
25            )
26    # Validate the contents
27    def ContentsValidator(self, filepointer):
28        S = filepointer.readline() 
29        while '#' in S[0]:        #get past comments, if any
30            S = filepointer.readline()       
31        for i in range(3): # scan a few lines
32            S = S.split()
33            if len(S) != 5: return False
34            for v in S:
35                try:
36                    float(v)
37                except ValueError:
38                    return False           
39            S = filepointer.readline()
40        return True
41
42    def Reader(self,filename,filepointer, ParentFrame=None, **unused):
43        try:
44            for S in filepointer:
45                if S[0] == '#': continue       #ignore comments, if any
46                h,k,l,Fo,sigFo = S.split()
47                h,k,l = [int(h),int(k),int(l)]
48                if not any([h,k,l]):
49                    break
50                Fo = float(Fo)
51                sigFo = float(sigFo)
52                # h,k,l,m,dsp,Fo2,sig,Fc2,Fot2,Fct2,phase,...
53                self.RefDict['RefList'].append([h,k,l,0,0,Fo**2,2.*Fo*sigFo,0,Fo**2,0,0,0])
54                self.RefDict['Uniq'].append([])
55                self.RefDict['Phi'].append([])
56                self.RefDict['FF'].append({})
57            self.UpdateControls(Type='Fosq',FcalcPresent=False) # set Fobs type & if Fcalc values are loaded
58            self.UpdateParameters(Type='SXC',Wave=None) # histogram type
59            return True
60        except Exception as detail:
61            print self.formatName+' read error:'+str(detail) # for testing
62            import traceback
63            traceback.print_exc(file=sys.stdout)
64            return False
65
66class HKLF2_ReaderClass(G2IO.ImportStructFactor):
67    'Routines to import F**2, sig(F**2) reflections from a HKLF file'
68    def __init__(self):
69        super(self.__class__,self).__init__( # fancy way to self-reference
70            extensionlist=('.hkl','.HKL'),
71            strictExtension=False,
72            formatName = 'F**2 HKL',
73            longFormatName = 'Simple (hkl Fo**2 sig(Fo**2)) Structure factor text file'
74            )
75    # Validate the contents
76    def ContentsValidator(self, filepointer):
77        S = filepointer.readline() 
78        while '#' in S[0]:        #get past comments, if any
79            S = filepointer.readline()       
80        for i in range(3): # scan a few lines
81            S = S.split()
82            if len(S) != 5: return False
83            for v in S:
84                try:
85                    float(v)
86                except ValueError:
87                    return False           
88            S = filepointer.readline()
89        return True
90
91    def Reader(self,filename,filepointer, ParentFrame=None, **unused):
92        try:
93            for S in filepointer:
94                if S[0] == '#': continue       #ignore comments, if any
95                h,k,l,Fo,sigFo = S.split()
96                h,k,l = [int(h),int(k),int(l)]
97                if not any([h,k,l]):
98                    break
99                Fo = float(Fo)
100                sigFo = float(sigFo)
101                # h,k,l,m,dsp,Fo2,sig,Fc2,Fot2,Fct2,phase,...
102                self.RefDict['RefList'].append([h,k,l,0,0,Fo,sigFo,0,Fo,0,0,0])
103                self.RefDict['Uniq'].append([])
104                self.RefDict['Phi'].append([])
105                self.RefDict['FF'].append({})
106            self.UpdateControls(Type='Fosq',FcalcPresent=False) # set Fobs type & if Fcalc values are loaded
107            self.UpdateParameters(Type='SXC',Wave=None) # histogram type
108            return True
109        except Exception as detail:
110            print self.formatName+' read error:'+str(detail) # for testing
111            import traceback
112            traceback.print_exc(file=sys.stdout)
113            return False
Note: See TracBrowser for help on using the repository browser.