Changeset 1223


Ignore:
Timestamp:
Feb 18, 2014 9:48:38 PM (8 years ago)
Author:
toby
Message:

move small angle readers; improve reinitialization

Location:
trunk
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIIO.py

    r1219 r1223  
    14301430
    14311431    def ReInitialize(self):
    1432         'Reinitialize the Reader to initital settings'
     1432        'Reinitialize the Reader to initial settings'
    14331433        self.errors = ''
    14341434        self.warnings = ''
     
    16371637        '''
    16381638    def ReInitialize(self):
    1639         'Reinitialize the Reader to initital settings'
     1639        'Reinitialize the Reader to initial settings'
    16401640        ImportBaseclass.ReInitialize(self)
    16411641        self.InitParameters()
     
    17761776                                            extensionlist,
    17771777                                            strictExtension)
     1778        self.ReInitialize()
     1779       
     1780    def ReInitialize(self):
     1781        'Reinitialize the Reader to initial settings'
     1782        ImportBaseclass.ReInitialize(self)
    17781783        self.powderentry = ['',None,None] #  (filename,Pos,Bank)
    17791784        self.powderdata = [] # Powder dataset
     
    18111816        ImportBaseclass.__init__(self,formatName,longFormatName,extensionlist,
    18121817            strictExtension)
     1818        self.ReInitialize()
     1819       
     1820    def ReInitialize(self):
     1821        'Reinitialize the Reader to initial settings'
     1822        ImportBaseclass.ReInitialize(self)
    18131823        self.smallangleentry = ['',None,None] #  (filename,Pos,Bank)
    18141824        self.smallangledata = [] # SASD dataset
  • trunk/imports/G2pwd_xye.py

    r1199 r1223  
    2121import GSASIIpath
    2222GSASIIpath.SetVersionNumber("$Revision$")
    23 npasind = lambda x: 180.*np.arcsin(x)/np.pi
    24 
    2523class xye_ReaderClass(G2IO.ImportPowderData):
    2624    'Routines to import powder data from a .xye file'
     
    136134            return False
    137135
    138 class qxye_ReaderClass(G2IO.ImportPowderData):
    139     'Routines to import q data from a .xye file'
    140     def __init__(self):
    141         super(self.__class__,self).__init__( # fancy way to self-reference
    142             extensionlist=('.xye','.txt','.dat'),
    143             strictExtension=False,
    144             formatName = 'q step xye',
    145             longFormatName = 'q stepped data file'
    146             )
    147 
    148     # Validate the contents -- make sure we only have valid lines
    149     def ContentsValidator(self, filepointer):
    150         'Look through the file for expected types of lines in a valid q-step file'
    151         gotCcomment = False
    152         begin = True
    153         for i,S in enumerate(filepointer):
    154             if i > 1000: break
    155             if begin:
    156                 if gotCcomment and S.find('*/') > -1:
    157                     begin = False
    158                     continue
    159                 if S.strip().startswith('/*'):
    160                     gotCcomment = True
    161                     continue   
    162                 if S[0] == '#':
    163                     continue       #ignore comments, if any
    164                 elif len(S) == 1:
    165                     continue        #ignore blank lines
    166                 else:
    167                     begin = False
    168                 # valid line to read?
    169             vals = S.split()
    170             if len(vals) == 2 or len(vals) == 3:
    171                 continue
    172             else:
    173                 self.errors = 'Unexpected information in line: '+str(i+1)
    174                 self.errors += '  '+str(S)
    175                 return False
    176         return True # no errors encountered
    177 
    178     def Reader(self,filename,filepointer, ParentFrame=None, **unused):
    179         'Read a q-step file'
    180         x = []
    181         y = []
    182         w = []
    183         try:
    184             wave = 1.5428   #Cuka default
    185             Temperature = 300
    186             for S in self.comments:
    187                 if 'Wave' in S.split('=')[0]:
    188                     try:
    189                         wave = float(S.split('=')[1])
    190                     except:
    191                         pass
    192                 elif 'Temp' in S.split('=')[0]:
    193                     try:
    194                         Temperature = float(S.split('=')[1])
    195                     except:
    196                         pass
    197             self.instdict['wave'] = wave
    198             gotCcomment = False
    199             begin = True
    200             for i,S in enumerate(filepointer):
    201                 self.errors = 'Error reading line: '+str(i+1)
    202                 # or a block of comments delimited by /* and */
    203                 # or (GSAS style) each line can begin with '#'
    204                 if begin:
    205                     if gotCcomment and S.find('*/') > -1:
    206                         self.comments.append(S[:-1])
    207                         begin = False
    208                         continue
    209                     if S.strip().startswith('/*'):
    210                         self.comments.append(S[:-1])
    211                         gotCcomment = True
    212                         continue   
    213                     if S[0] == '#':
    214                         self.comments.append(S[:-1])
    215                         continue       #ignore comments, if any
    216                     elif len(S) == 1:      #blank line only CR/LF
    217                         continue
    218                     else:
    219                         begin = False
    220                 # valid line to read
    221                 vals = S.split()
    222                 try:
    223                     x.append(2.*npasind(wave*float(vals[0])/(4.*np.pi)))
    224                     f = float(vals[1])
    225                     if f <= 0.0:
    226                         y.append(0.0)
    227                         w.append(1.0)
    228                     elif len(vals) == 3:
    229                         y.append(float(vals[1]))
    230                         w.append(1.0/float(vals[2])**2)
    231                     else:
    232                         y.append(float(vals[1]))
    233                         w.append(1.0/float(vals[1]))
    234                 except ValueError:
    235                     msg = 'Error in line '+str(i+1)
    236                     print msg
    237                     break
    238             N = len(x)
    239             self.powderdata = [
    240                 np.array(x), # x-axis values
    241                 np.array(y), # powder pattern intensities
    242                 np.array(w), # 1/sig(intensity)^2 values (weights)
    243                 np.zeros(N), # calc. intensities (zero)
    244                 np.zeros(N), # calc. background (zero)
    245                 np.zeros(N), # obs-calc profiles
    246                 ]
    247             self.powderentry[0] = filename
    248             #self.powderentry[1] = pos # bank offset (N/A here)
    249             self.powderentry[2] = 1 # xye file only has one bank
    250             self.idstring = ospath.basename(filename)
    251             # scan comments for temperature
    252             self.Sample['Temperature'] = Temperature
    253 
    254             return True
    255         except Exception as detail:
    256             self.errors += '\n  '+str(detail)
    257             print self.formatName+' read error:'+str(detail) # for testing
    258             import traceback
    259             traceback.print_exc(file=sys.stdout)
    260             return False
Note: See TracChangeset for help on using the changeset viewer.