Changeset 2147 for trunk/GSASIIpwdGUI.py


Ignore:
Timestamp:
Feb 13, 2016 9:12:07 AM (7 years ago)
Author:
vondreele
Message:

handle TOF profile type=2 iparm files (e.g. for GEM)
implement multibank instprm files - add Save all profiles to Instrument parameters MenuBinding?
Do the Load profile to handle these - modifications to OnLoad?
add common transformation matrices to MergeDialog?
add bank no. to ReadPowderInstprm? call for matching it - in progress

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwdGUI.py

    r2137 r2147  
    11831183    '''
    11841184#patch
    1185     if 'Bank' not in data:
    1186         data['Bank'] = [1,1,0]
     1185    if 'Bank' not in data:  #get it from name
     1186        hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     1187        if 'Bank' in hst:
     1188            bank = int(hst.split('Bank')[1])
     1189            data['Bank'] = [bank,bank,0]
     1190        else:
     1191            data['Bank'] = [1,1,0]
    11871192#end patch   
    11881193    def keycheck(keys):
     
    12521257        '''Loads instrument parameters from a G2 .instprm file
    12531258        in response to the Instrument Parameters-Operations/Load Profile menu
     1259        If instprm file has multiple banks each with header #Bank n: ..., this
     1260        finds matching bank no. to load - rejects nonmatches.
    12541261       
    12551262        Note that similar code is found in ReadPowderInstprm (GSASII.py)
    12561263        '''
     1264        data = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,
     1265            G2frame.PatternId,'Instrument Parameters'))[0]
     1266        bank = data['Bank'][0]
    12571267        pth = G2G.GetImportPath(G2frame)
    12581268        if not pth: pth = '.'
     
    12661276                newItems = []
    12671277                newVals = []
     1278                Found = False
    12681279                while S:
    12691280                    if S[0] == '#':
    1270                         S = File.readline()
    1271                         continue
     1281                        if Found:
     1282                            break
     1283                        if 'Bank' in S:
     1284                            if bank == int(S.split(':')[0].split()[1]):
     1285                                S = File.readline()
     1286                                continue
     1287                            else:
     1288                                S = File.readline()
     1289                                while S and '#Bank' not in S:
     1290                                    S = File.readline()
     1291                                continue
     1292                        else:   #a non #Bank file
     1293                            S = File.readline()
     1294                            continue
     1295                    Found = True
    12721296                    [item,val] = S[:-1].split(':')
    12731297                    newItems.append(item)
     
    12781302                    S = File.readline()               
    12791303                File.close()
    1280                 Inst,Inst2 = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId,'Instrument Parameters'))
    1281                 if 'Bank' not in Inst:  #patch for old .instprm files - may cause faults for TOF data
    1282                     Inst['Bank'] = [1,1,0]
    1283                 data = G2IO.makeInstDict(newItems,newVals,len(newVals)*[False,])
    1284                 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId,'Instrument Parameters'),[data,Inst2])
    1285                 RefreshInstrumentGrid(event,doAnyway=True)          #to get peaks updated
     1304                if Found:
     1305                    Inst,Inst2 = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId,'Instrument Parameters'))
     1306                    if 'Bank' not in Inst:  #patch for old .instprm files - may cause faults for TOF data
     1307                        Inst['Bank'] = [1,1,0]
     1308                    data = G2IO.makeInstDict(newItems,newVals,len(newVals)*[False,])
     1309                    G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId,'Instrument Parameters'),[data,Inst2])
     1310                    RefreshInstrumentGrid(event,doAnyway=True)          #to get peaks updated
     1311                else:
     1312                    G2frame.ErrorDialog('No match','Bank %d not in %s'%(bank,filename),G2frame.dataFrame)
    12861313                UpdateInstrumentGrid(G2frame,data)
    12871314                G2plt.PlotPeakWidths(G2frame)
     
    12921319        '''Respond to the Instrument Parameters Operations/Save Profile menu
    12931320        item: writes current parameters to a .instprm file
     1321        It does not write Bank n: on # line & thus can be used any time w/o clash of bank nos.
    12941322        '''
    12951323        pth = G2G.GetExportPath(G2frame)
     
    13051333                for item in data:
    13061334                    File.write(item+':'+str(data[item][1])+'\n')
     1335                File.close()
     1336        finally:
     1337            dlg.Destroy()
     1338           
     1339    def OnSaveAll(event):
     1340        '''Respond to the Instrument Parameters Operations/Save all Profile menu & writes
     1341        selected inst parms. across multiple banks into a single file
     1342        Each block starts with #Bank n: GSAS-II instrument... where n is bank no.
     1343        item: writes parameters from selected PWDR entries to a .instprm file
     1344        '''
     1345        hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     1346        histList = GetHistsLikeSelected(G2frame)
     1347        histList.insert(0,hst)
     1348        saveList = []
     1349        dlg = G2G.G2MultiChoiceDialog(
     1350            G2frame.dataFrame,
     1351            'Save instrument parameters from',
     1352            'Save instrument parameters', histList)
     1353        try:
     1354            if dlg.ShowModal() == wx.ID_OK:
     1355                for i in dlg.GetSelections():
     1356                    saveList.append(histList[i])
     1357        finally:
     1358            dlg.Destroy()
     1359        pth = G2G.GetExportPath(G2frame)
     1360        dlg = wx.FileDialog(G2frame, 'Choose GSAS-II instrument parameters file', pth, '',
     1361            'instrument parameter files (*.instprm)|*.instprm',wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
     1362        try:
     1363            if dlg.ShowModal() == wx.ID_OK:
     1364                filename = dlg.GetPath()
     1365                # make sure extension is .instprm
     1366                filename = os.path.splitext(filename)[0]+'.instprm'
     1367                File = open(filename,'w')
     1368                for hist in saveList:
     1369                    Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,hist)
     1370                    inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'))[0]
     1371                    if 'Bank' not in inst:  #patch
     1372                        bank = 1
     1373                        if 'Bank' in hist:
     1374                            bank = int(hist.split('Bank')[1])
     1375                        inst['Bank'] = [bank,bank,0]
     1376                    bank = inst['Bank'][0]               
     1377                    File.write("#Bank %d: GSAS-II instrument parameter file; do not add/delete items!\n"%(bank))
     1378                    for item in inst:
     1379                        File.write(item+':'+str(inst[item][1])+'\n')                                   
    13071380                File.close()
    13081381        finally:
     
    17271800        G2frame.Bind(wx.EVT_MENU,OnLoad,id=G2gd.wxID_INSTLOAD)
    17281801        G2frame.Bind(wx.EVT_MENU,OnSave,id=G2gd.wxID_INSTSAVE)
     1802        G2frame.Bind(wx.EVT_MENU,OnSaveAll,id=G2gd.wxID_INSTSAVEALL)
    17291803        G2frame.Bind(wx.EVT_MENU,OnReset,id=G2gd.wxID_INSTPRMRESET)
    17301804        G2frame.Bind(wx.EVT_MENU,OnInstCopy,id=G2gd.wxID_INSTCOPY)
     
    17331807        G2frame.Bind(wx.EVT_MENU,OnCopy1Val,id=G2gd.wxID_INST1VAL)
    17341808    elif 'L' in insVal['Type']:                   #SASD data menu commands
    1735         G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.InstMenu)
     1809        G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.SASDInstMenu)
    17361810        if not G2frame.dataFrame.GetStatusBar():
    17371811            Status = G2frame.dataFrame.CreateStatusBar()
Note: See TracChangeset for help on using the changeset viewer.