Changeset 615 for trunk/GSASII.py


Ignore:
Timestamp:
May 15, 2012 10:54:23 PM (10 years ago)
Author:
toby
Message:

add powder CIF importer, minor other updates to readers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r614 r615  
    217217                "G2"+prefix+"*.py")):
    218218                filelist.append(filename)   
    219                 print 'debug: found',filename
     219                #print 'debug: found',filename
    220220        filelist = sorted(list(set(filelist))) # remove duplicates
    221221        for filename in filelist:
     
    278278            if not reader.strictExtension:
    279279                choices += "|any file (*.*)|*.*"
    280         # get the file
     280        # get the file(s)
    281281        if multiple:
    282282            mode = style=wx.OPEN | wx.CHANGE_DIR | wx.MULTIPLE
     
    320320            try:
    321321                fp = open(filename,'Ur')
     322                if len(filelist) == 1:
     323                    # confirm we have the right file
     324                    rdmsg = 'File '+str(filename)+' begins:\n\n'
     325                    for i in range(3):
     326                        rdmsg += fp.readline()
     327                    rdmsg += '...'
     328                    result = wx.ID_NO
     329                    # it would be better to use something that
     330                    # would resize better, but this will do for now
     331                    dlg = wx.MessageDialog(
     332                        self, rdmsg,
     333                        'Is this the file you want?',
     334                        wx.YES_NO | wx.ICON_QUESTION,
     335                        )
     336                    dlg.SetSize((700,300)) # does not resize on Mac
     337                    try:
     338                        result = dlg.ShowModal()
     339                    finally:
     340                        dlg.Destroy()
     341                    if result == wx.ID_NO: return []
     342
    322343                self.lastimport = filename
    323344                # try the file first with Readers that specify the
     
    546567        numbanks = rd.numbanks
    547568        # is there an instrument parameter file defined for the current data set?
    548         if rd.instparm or lastdatafile == filename:
     569        if rd.instparm or (lastdatafile == filename and lastIparmfile):
    549570            if rd.instparm:
    550571                instfile = os.path.join(os.path.split(filename)[0],
     
    554575                instfile = lastIparmfile
    555576            if os.path.exists(instfile):
    556                 print 'debug: try read',instfile
     577                #print 'debug: try read',instfile
    557578                Iparm = self.ReadPowderIparm(instfile,bank,numbanks,rd)
    558579                if Iparm:
    559                     print 'debug: success'
     580                    #print 'debug: success'
    560581                    rd.instfile = instfile
    561582                    rd.instmsg = instfile + ' bank ' + str(rd.instbank)
     
    563584            else:
    564585                self.ErrorDialog('Open Error',
    565                                  'Error opening file '+str(instfile)
     586                                 'Error opening instrument parameter file '
     587                                 +str(instfile)
    566588                                 +' requested by file '+ filename)
    567589        # is there an instrument parameter file matching the current file
     
    572594            Iparm = self.ReadPowderIparm(instfile,bank,numbanks,rd)
    573595            if Iparm:
    574                 print 'debug: success'
     596                #print 'debug: success'
    575597                rd.instfile = instfile
    576598                rd.instmsg = instfile + ' bank ' + str(rd.instbank)
    577599                return Iparm
    578600            else:
    579                 print 'debug open/read failed',instfile
     601                print 'debug: open/read failed',instfile
    580602                pass # fail silently
    581603       
     
    583605            instfile = ''
    584606            dlg = wx.FileDialog(self,
    585                                 'Choose an instrument file or press Cancel to select a default setting',
     607                                'Choose an instrument file for '
     608                                +rd.idstring
     609                                +' or press Cancel to select a default setting',
    586610                                '.', '',
    587611                                'GSAS iparm file (*.prm)|*.prm|All files(*.*)|*.*',
     
    595619            Iparm = self.ReadPowderIparm(instfile,bank,numbanks,rd)
    596620            if Iparm:
    597                 print 'debug: success with',instfile
     621                #print 'debug: success with',instfile
    598622                rd.instfile = instfile
    599623                rd.instmsg = instfile + ' bank ' + str(rd.instbank)
     
    604628       
    605629        # still no success: offer the user a last choice
    606         dlg = wx.MessageDialog(self,
    607 '''Is this laboratory Cu Ka1/Ka2 data?
     630        msg = 'Are the data from '  + rd.idstring
     631        msg += ''' laboratory Cu Ka1/Ka2 data?
    608632(No = 0.6A wavelength synchrotron data)
    609 Change wavelength in Instrument Parameters if needed''',
    610                               'Data type?',
     633Change wavelength in Instrument Parameters if needed'''
     634        dlg = wx.MessageDialog(self, msg, 'Data type?',
    611635                               wx.YES_NO | wx.ICON_QUESTION)
    612636        try:
     
    623647            return rd.Iparm_Sync06
    624648
    625     def SetPowderInstParms(self, Iparm):
     649    def SetPowderInstParms(self, Iparm, rd):
    626650        '''extracts values from instrument parameter file and creates
    627651        the contents of the instrument parameter tree entry
    628652        '''
    629653        DataType = Iparm['INS   HTYPE '].strip()[0:3]  # take 1st 3 chars
     654        # override inst values with values read from data file
     655        if rd.instdict.get('type'):
     656            DataType = rd.instdict.get('type')
     657        wave1 = None
     658        wave2 = 0.0
     659        if rd.instdict.get('wave'):
     660            wl = rd.instdict.get('wave')
     661            wave1 = wl[0]
     662            if len(wl) > 1: wave2 = wl[1]
    630663        data = [DataType,]
    631664        if 'C' in DataType:
    632665            s = Iparm['INS  1 ICONS']
    633             v = (G2IO.sfloat(s[:10]),G2IO.sfloat(s[10:20]),G2IO.sfloat(s[20:30]),G2IO.sfloat(s[55:65]),G2IO.sfloat(s[40:50])) #get lam1, lam2, zero, pola & ratio
     666            if not wave1:
     667                wave1 = G2IO.sfloat(s[:10])
     668                wave2 = G2IO.sfloat(s[10:20])
     669            v = (wave1,wave2,
     670                 G2IO.sfloat(s[20:30]),G2IO.sfloat(s[55:65]),G2IO.sfloat(s[40:50])) #get lam1, lam2, zero, pola & ratio
    634671            if not v[1]:
    635672                names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y','SH/L','Azimuth']
     
    698735            self.PatternTree.SetItemPyData(
    699736                self.PatternTree.AppendItem(Id,text='Instrument Parameters'),
    700                 self.SetPowderInstParms(Iparm))
     737                self.SetPowderInstParms(Iparm,rd))
    701738            self.PatternTree.SetItemPyData(
    702739                self.PatternTree.AppendItem(Id,text='Sample Parameters'),
Note: See TracChangeset for help on using the changeset viewer.