Changeset 615


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

add powder CIF importer, minor other updates to readers

Location:
trunk
Files:
1 added
4 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'),
  • trunk/GSASIIIO.py

    r614 r615  
    12701270    return Phase
    12711271
     1272class MultipleChoicesDialog(wx.Dialog):
     1273    '''A dialog that offers a series of choices, each with a title and a wx.Choice
     1274    widget. Intended to be used Modally.
     1275    typical input:
     1276          choicelist=[ ('a','b','c'), ('test1','test2'),('no choice',)]
     1277          headinglist = [ 'select a, b or c', 'select 1 of 2', 'No option here']
     1278    selections are placed in self.chosen when OK is pressed
     1279    '''
     1280    def __init__(self,choicelist,headinglist,
     1281                 head='Select options',
     1282                 title='Please select from options below',
     1283                 parent=None):
     1284        self.chosen = []
     1285        wx.Dialog.__init__(
     1286            self,parent,wx.ID_ANY,head,
     1287            pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE)
     1288        panel = wx.Panel(self)
     1289        mainSizer = wx.BoxSizer(wx.VERTICAL)
     1290        mainSizer.Add((10,10),1)
     1291        topLabl = wx.StaticText(panel,wx.ID_ANY,title)
     1292        mainSizer.Add(topLabl,0,wx.ALIGN_CENTER_VERTICAL|wx.CENTER,10)
     1293        self.ChItems = []
     1294        for choice,lbl in zip(choicelist,headinglist):
     1295            mainSizer.Add((10,10),1)
     1296            self.chosen.append(0)
     1297            topLabl = wx.StaticText(panel,wx.ID_ANY,' '+lbl)
     1298            mainSizer.Add(topLabl,0,wx.ALIGN_LEFT,10)
     1299            self.ChItems.append(wx.Choice(self, wx.ID_ANY, (100, 50), choices = choice))
     1300            mainSizer.Add(self.ChItems[-1],0,wx.ALIGN_CENTER,10)
     1301
     1302        OkBtn = wx.Button(panel,-1,"Ok")
     1303        OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)
     1304        cancelBtn = wx.Button(panel,-1,"Cancel")
     1305        cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel)
     1306        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
     1307        btnSizer.Add((20,20),1)
     1308        btnSizer.Add(OkBtn)
     1309        btnSizer.Add((20,20),1)
     1310        btnSizer.Add(cancelBtn)
     1311        btnSizer.Add((20,20),1)
     1312        mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)
     1313        panel.SetSizer(mainSizer)
     1314        panel.Fit()
     1315        self.Fit()
     1316       
     1317    def OnOk(self,event):
     1318        parent = self.GetParent()
     1319        if parent is not None: parent.Raise()
     1320        # save the results from the choice widgets
     1321        self.chosen = []
     1322        for w in self.ChItems:
     1323            self.chosen.append(w.GetSelection())
     1324        self.EndModal(wx.ID_OK)             
     1325           
     1326    def OnCancel(self,event):
     1327        parent = self.GetParent()
     1328        if parent is not None: parent.Raise()
     1329        self.chosen = []
     1330        self.EndModal(wx.ID_CANCEL)             
     1331           
    12721332######################################################################
    12731333# base classes for reading various types of data files
     
    13521412            return sel
    13531413        return selected
     1414
     1415    def MultipleChoicesDialog(self, choicelist, headinglist, ParentFrame=None, **kwargs):
     1416        '''A modal dialog that offers a series of choices, each with a title and a wx.Choice
     1417        widget.
     1418        typical input:
     1419           choicelist=[ ('a','b','c'), ('test1','test2'),('no choice',)]
     1420           headinglist = [ 'select a, b or c', 'select 1 of 2', 'No option here']
     1421        optional keyword parameters are: head (window title) and title
     1422        returns a list of selected indicies for each choice (or None)
     1423        '''
     1424        result = None
     1425        dlg = MultipleChoicesDialog(choicelist,headinglist,
     1426                                    parent=ParentFrame, **kwargs)         
     1427        if dlg.ShowModal() == wx.ID_OK:
     1428            result = dlg.chosen
     1429        dlg.Destroy()
     1430        return result
    13541431
    13551432    def ShowBusy(self):
     
    15471624                           # where instrument parameters are from
    15481625        self.numbanks = 1
     1626        self.instdict = {} # place items here that will be transferred to the instrument parameters
     1627
     1628if __name__ == '__main__':
     1629    app = wx.PySimpleApp()
     1630    frm = wx.Frame(None) # create a frame
     1631    choicelist=[ ('a','b','c'),
     1632                 ('test1','test2'),('no choice',)]
     1633    titles = [ 'a, b or c', 'tests', 'No option here']
     1634    dlg = MultipleChoicesDialog(
     1635        choicelist,titles,
     1636        parent=frm)
     1637    if dlg.ShowModal() == wx.ID_OK:
     1638        print 'Got OK'
  • trunk/imports/G2pwd_fxye.py

    r614 r615  
    5252        title = ''
    5353        comments = None
     54        selections = None
    5455
    5556        # reload previously saved values
  • trunk/imports/G2sfact_CIF.py

    r614 r615  
    106106                        val = cf[blknm].get(key)
    107107                        if val is None: break
    108                         s += fmt % cif.get_number_with_esd(
    109                             )[0]
     108                        s += fmt % cif.get_number_with_esd(val)[0]
    110109                    if s: choice[-1] += ', cell: ' + s
    111110                    sg = cf[blknm].get("_symmetry_space_group_name_H-M")
Note: See TracChangeset for help on using the changeset viewer.