Changeset 5099


Ignore:
Timestamp:
Nov 23, 2021 11:06:45 PM (2 years ago)
Author:
toby
Message:

fix: seq hist template now saved; delay file open

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIIO.py

    r5065 r5099  
    17161716
    17171717    # Tools for file writing.
    1718     def OpenFile(self,fil=None,mode='w'):
     1718    def OpenFile(self,fil=None,mode='w',delayOpen=False):
    17191719        '''Open the output file
    17201720
     
    17371737            fil = os.path.join(self.dirname,self.filename)
    17381738        self.fullpath = os.path.abspath(fil)
     1739        self.DelayOpen = False
     1740        if delayOpen:
     1741            self.DelayOpen = True
     1742            self.fp = None
     1743            return
     1744        self.fp = open(self.fullpath,mode)
     1745        return self.fp
     1746
     1747    def openDelayed(self,mode='w'):
     1748        self.DelayOpen = False
    17391749        self.fp = open(self.fullpath,mode)
    17401750        return self.fp
     
    17551765          file object self.fp is closed.
    17561766        '''
     1767        if self.fp is None and self.DelayOpen:
     1768            if GSASIIpath.GetConfigValue('debug'):
     1769                print('Delayed open: close before file not created')
     1770            return
    17571771        if self.fp is None:
    17581772            raise Exception('Attempt to CloseFile without use of OpenFile')
     
    19601974    #import imp
    19611975    #imp.reload(G2export_CIF)   #TODO for debug
     1976    #print('reload G2export_CIF')
    19621977    obj = G2export_CIF.ExportProjectCIF(G2frame)
    19631978    obj.Exporter(None,seqData=seqData,Controls=Controls)
  • trunk/exports/G2export_CIF.py

    r5086 r5099  
    17481748            WriteCIFitem(self.fp, '_refine.ls_wR_factor_obs',R)
    17491749
    1750         def writeCIFtemplate(G2dict,tmplate,defaultname=''):
     1750        def writeCIFtemplate(G2dict,tmplate,defaultname='',
     1751                                 cifKey="CIF_template"):
    17511752            '''Write out the selected or edited CIF template
    17521753            An unedited CIF template file is copied, comments intact; an edited
     
    17541755            In all cases the initial data_ header is stripped (there should only be one!)
    17551756            '''
    1756             CIFobj = G2dict.get("CIF_template")
     1757            CIFobj = G2dict.get(cifKey)
    17571758            if defaultname:
    17581759                defaultname = G2obj.StripUnicode(defaultname)
     
    35943595                    histblk = self.Histograms[hist]
    35953596                    title = 'All Powder datasets'
    3596                     self.seqSmplParms = {}
    35973597                    cbox.Add(
    35983598                        CIFtemplateSelect(self.cifdefs,
    3599                                       cpnl,'powder',self.seqSmplParms,
     3599                                      cpnl,'powder',self.OverallParms['Controls'],
    36003600                                      EditCIFDefaults,
    36013601                                      title,
    3602                                       histblk["Sample Parameters"]['InstrName']),
     3602                                      histblk["Sample Parameters"]['InstrName'],
     3603                                      cifKey="seqCIF_template"),
    36033604                        0,wx.EXPAND|wx.ALIGN_LEFT|wx.ALL)
    36043605                    break
     
    39153916            print('No name supplied')
    39163917            return
    3917         self.OpenFile()
     3918        self.OpenFile(delayOpen=True)
    39183919       
    39193920        #if self.ExportSelect('default'): return
     
    40484049        #======================================================================
    40494050        print('Writing CIF output to file '+self.filename+"...")
     4051        self.openDelayed()
    40504052        if self.currentExportType == 'single' or self.currentExportType == 'powder':
    40514053            #======================================================================
     
    41424144                hist = seqHistList[0]
    41434145                instnam = self.Histograms[hist]["Sample Parameters"]['InstrName']
    4144                 writeCIFtemplate(self.seqSmplParms,'powder',instnam) # powder template
     4146                writeCIFtemplate(self.OverallParms['Controls'],'powder',instnam,
     4147                                     cifKey="seqCIF_template") # powder template for all histograms
    41454148                instnam = instnam.replace(' ','')
    41464149                #============================================================
     
    42944297               
    42954298                    WritePowderData(hist,seq=True) # write background, data & reflections, some instrument & sample terms
     4299                    writeCIFtemplate(self.OverallParms['Controls'],'powder',
     4300                                         self.Histograms[hist]["Sample Parameters"]['InstrName'],
     4301                                         cifKey="seqCIF_template") # powder template for all histograms
    42964302                    WriteCIFitem(self.fp, '\n# PHASE INFO FOR HISTOGRAM '+hist)
    42974303                    # loop over phases, add a block header if there is more than one phase
     
    48874893        vbox = wx.BoxSizer(wx.VERTICAL)
    48884894        cpnl = EditCIFpanel(self,cifblk,loopstructure,CIFdic,OKbuttons,size=(300,300))
    4889         vbox.Add(cpnl, 1, wx.ALIGN_LEFT|wx.ALL|wx.EXPAND, 0)
     4895        vbox.Add(cpnl, 1, wx.ALIGN_LEFT|wx.ALL|wx.EXPAND, 1)
    48904896        G2G.HorizontalLine(vbox,self)
    48914897        vbox.Add(self.helptxt, 0, wx.EXPAND|wx.ALL, 5)
     
    51495155      the type of template
    51505156    :param dict G2dict: GSAS-II dict where CIF should be placed. The key
    5151       "CIF_template" will be used to store either a list or a string.
     5157      specified in cifKey (defaults to "CIF_template") will be used to
     5158      store either a list or a string.
    51525159      If a list, it will contain a dict and a list defining loops. If
    51535160      an str, it will contain a file name.
     
    51575164    :param str defaultname: specifies the default file name to be used for
    51585165      saving the CIF.
     5166    :param str cifKey: key to be used for saving the CIF information in
     5167      G2dict. Defaults to "CIF_template"
    51595168    '''
    5160     def __init__(self,frame,panel,tmplate,G2dict, repaint, title, defaultname=''):
     5169    def __init__(self,frame,panel,tmplate,G2dict, repaint, title,
     5170                     defaultname='', cifKey="CIF_template"):
    51615171        def _onResetTemplate(event):
    51625172            self.CIF = None
    5163             self.dict["CIF_template"] = resetTemplate
     5173            self.dict[self.cifKey] = resetTemplate
    51645174            wx.CallAfter(self.repaint)
    51655175        wx.BoxSizer.__init__(self,wx.VERTICAL)
     
    51675177        self.dict = G2dict
    51685178        self.repaint = repaint
     5179        self.cifKey = cifKey
    51695180        self.G2frame = frame.G2frame
    51705181        templateDefName = 'template_'+tmplate+'.cif'
     
    52025213                break
    52035214
    5204         if G2dict.get("CIF_template") == localTemplate and localTemplate:
     5215        if G2dict.get(self.cifKey) == localTemplate and localTemplate:
    52055216            self.CIF = localTemplate
    52065217            CIFtxt = "Customized template: "+os.path.split(self.CIF)[1]
    5207         elif G2dict.get("CIF_template") == resetTemplate and resetTemplate:
     5218        elif G2dict.get(self.cifKey) == resetTemplate and resetTemplate:
    52085219            self.CIF = resetTemplate
    52095220            CIFtxt = "Default template: "+os.path.split(self.CIF)[1]
    5210         elif not G2dict.get("CIF_template"): # empty or None
     5221        elif not G2dict.get(self.cifKey): # empty or None
    52115222            if localTemplate:
    5212                 G2dict["CIF_template"] = self.CIF = localTemplate
     5223                G2dict[self.cifKey] = self.CIF = localTemplate
    52135224                CIFtxt = "Customized template: "+os.path.split(self.CIF)[1]
    52145225            elif resetTemplate:
    5215                 G2dict["CIF_template"] = self.CIF = resetTemplate
     5226                G2dict[self.cifKey] = self.CIF = resetTemplate
    52165227                CIFtxt = "Default template: "+os.path.split(self.CIF)[1]
    52175228            else:
    5218                 G2dict["CIF_template"] = self.CIF = None
     5229                G2dict[self.cifKey] = self.CIF = None
    52195230                CIFtxt = "none (Template not found!)"
    5220         elif type(G2dict["CIF_template"]) is not list and type(
    5221                 G2dict["CIF_template"]) is not tuple:
    5222             if not os.path.exists(G2dict["CIF_template"]):
     5231        elif type(G2dict[self.cifKey]) is not list and type(
     5232                G2dict[self.cifKey]) is not tuple:
     5233            if not os.path.exists(G2dict[self.cifKey]):
    52235234                print("Warning: saved template file,",
    5224                           os.path.abspath(G2dict["CIF_template"]),
     5235                          os.path.abspath(G2dict[self.cifKey]),
    52255236                          ' not found!\nWas this file moved or deleted?')
    52265237                self.CIF = None
    52275238                CIFtxt = "none! (file not found)"
    52285239                if resetTemplate:
    5229                     G2dict["CIF_template"] = None
     5240                    G2dict[self.cifKey] = None
    52305241                    wx.CallLater(100,self.repaint)
    52315242                    return
    52325243            else:
    5233                 CIFtxt = "Edited template: "+os.path.split(G2dict["CIF_template"])[1]
     5244                CIFtxt = "Edited template: "+os.path.split(G2dict[self.cifKey])[1]
    52345245                if GSASIIpath.GetConfigValue('debug'):
    5235                     print('Template file found',os.path.abspath(G2dict["CIF_template"]))
     5246                    print('Template file found',os.path.abspath(G2dict[self.cifKey]))
    52365247        else:
    5237             self.CIF = G2dict["CIF_template"]
     5248            self.CIF = G2dict[self.cifKey]
    52385249            CIFtxt = "Customized template is reloaded"
    52395250        # show template source
     
    52725283            if len(cf.keys()) != 1:
    52735284                raise Exception('Error, CIF Template has more than one block: '+fil)
    5274             self.dict["CIF_template"] = fil
     5285            self.dict[self.cifKey] = fil
    52755286            wx.CallAfter(self.repaint)
    52765287
     
    52865297        if val:
    52875298            if dlg.newfile: # results saved in file
    5288                 self.dict["CIF_template"] = dlg.newfile
     5299                self.dict[self.cifKey] = dlg.newfile
    52895300            else:
    5290                 self.dict["CIF_template"] = [dlg.cifblk,dlg.loopstructure]
     5301                self.dict[self.cifKey] = [dlg.cifblk,dlg.loopstructure]
    52915302            wx.CallAfter(self.repaint) #EditCIFDefaults() # note that this does a dlg.Destroy()
    52925303        else:
Note: See TracChangeset for help on using the changeset viewer.