Changeset 688
- Timestamp:
- Jul 13, 2012 4:19:26 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r687 r688 532 532 self.Bind(wx.EVT_MENU, self.OnImportPowder, id=item.GetId()) 533 533 534 def ReadPowderInstprm(self,instfile): 535 '''Read a GSAS-II (new) instrument parameter file''' 536 if os.path.splitext(instfile)[1].lower() != '.instprm': # invalid file 537 return None 538 if not os.path.exists(instfile): # no such file 539 return None 540 File = open(instfile,'r') 541 S = File.readline() 542 if not S.startswith('#GSAS-II'): # not a valid file 543 File.close() 544 return None 545 newItems = [] 546 newVals = [] 547 while S: 548 if S[0] == '#': 549 S = File.readline() 550 continue 551 [item,val] = S[:-1].split(':') 552 newItems.append(item) 553 try: 554 newVals.append(float(val)) 555 except ValueError: 556 newVals.append(val) 557 S = File.readline() 558 File.close() 559 return [tuple(newVals),newVals,len(newVals)*[False,],newItems] 560 534 561 def ReadPowderIparm(self,instfile,bank,databanks,rd): 535 562 '''Read a GSAS (old) instrument parameter file''' … … 557 584 # choice from a human here 558 585 choices = [] 559 for i in range(1,1+ len(ibanks)):586 for i in range(1,1+ibanks): 560 587 choices.append('Bank '+str(i)) 561 588 bank = rd.BlockSelector( 562 589 choices, self, 563 590 title='Select an instrument parameter block for '+ 564 rd.powderentry[0]+' block '+str(bank)+565 '\n Cancel: Use default settings',591 os.path.split(rd.powderentry[0])[1]+' block '+str(bank)+ 592 '\nOr use Cancel to select from the default parameter sets', 566 593 header='Block Selector') 567 594 if bank is None: return {} … … 578 605 def GetPowderIparm(self,rd, prevIparm, lastIparmfile, lastdatafile): 579 606 '''Open and read an instrument parameter file for a data file 580 for now, just use old GSAS type files, but someday allow other options. 581 Then update SetPowderInstParms to work with that input 607 Returns the list of parameters used in the data tree 582 608 ''' 609 def SetPowderInstParms(Iparm, rd): 610 '''extracts values from instrument parameters in rd.instdict 611 or in array Iparm. 612 Create and return the contents of the instrument parameter tree entry. 613 ''' 614 DataType = Iparm['INS HTYPE '].strip()[0:3] # take 1st 3 chars 615 # override inst values with values read from data file 616 if rd.instdict.get('type'): 617 DataType = rd.instdict.get('type') 618 wave1 = None 619 wave2 = 0.0 620 if rd.instdict.get('wave'): 621 wl = rd.instdict.get('wave') 622 wave1 = wl[0] 623 if len(wl) > 1: wave2 = wl[1] 624 data = [DataType,] 625 if 'C' in DataType: 626 s = Iparm['INS 1 ICONS'] 627 if not wave1: 628 wave1 = G2IO.sfloat(s[:10]) 629 wave2 = G2IO.sfloat(s[10:20]) 630 v = (wave1,wave2, 631 G2IO.sfloat(s[20:30]),G2IO.sfloat(s[55:65]),G2IO.sfloat(s[40:50])) #get lam1, lam2, zero, pola & ratio 632 if not v[1]: 633 names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y','SH/L','Azimuth'] 634 v = (v[0],v[2],v[4]) 635 codes = [0,0,0,0] 636 else: 637 names = ['Type','Lam1','Lam2','Zero','I(L2)/I(L1)','Polariz.','U','V','W','X','Y','SH/L','Azimuth'] 638 codes = [0,0,0,0,0,0] 639 data.extend(v) 640 v1 = Iparm['INS 1PRCF1 '].split() 641 v = Iparm['INS 1PRCF11'].split() 642 data.extend([float(v[0]),float(v[1]),float(v[2])]) #get GU, GV & GW - always here 643 azm = Iparm.get('INS 1DETAZM') 644 if azm is None: #not in this Iparm file 645 azm = 0.0 646 else: 647 azm = float(azm) 648 v = Iparm['INS 1PRCF12'].split() 649 if v1[0] == 3: 650 data.extend([float(v[0]),float(v[1]),float(v[2])+float(v[3],azm)]) #get LX, LY, S+H/L & azimuth 651 else: 652 data.extend([0.0,0.0,0.002,azm]) #OK defaults if fxn #3 not 1st in iprm file 653 codes.extend([0,0,0,0,0,0,0]) 654 return [tuple(data),data,codes,names] 655 583 656 # stuff we might need from the reader 584 657 filename = rd.powderentry[0] … … 595 668 if os.path.exists(instfile): 596 669 #print 'debug: try read',instfile 670 instParmList = self.ReadPowderInstprm(instfile) 671 if instParmList is not None: 672 rd.instfile = instfile 673 rd.instmsg = 'GSAS-II file '+instfile 674 return instParmList 597 675 Iparm = self.ReadPowderIparm(instfile,bank,numbanks,rd) 598 676 if Iparm: … … 600 678 rd.instfile = instfile 601 679 rd.instmsg = instfile + ' bank ' + str(rd.instbank) 602 return Iparm680 return SetPowderInstParms(Iparm,rd) 603 681 else: 604 682 self.ErrorDialog('Open Error', … … 609 687 # with extension .inst or .prm? If so read it 610 688 basename = os.path.splitext(filename)[0] 611 for ext in '.inst ','.prm':689 for ext in '.instprm','.prm','.inst','.ins': 612 690 instfile = basename + ext 691 instParmList = self.ReadPowderInstprm(instfile) 692 if instParmList is not None: 693 rd.instfile = instfile 694 rd.instmsg = 'GSAS-II file '+instfile 695 return instParmList 613 696 Iparm = self.ReadPowderIparm(instfile,bank,numbanks,rd) 614 697 if Iparm: … … 616 699 rd.instfile = instfile 617 700 rd.instmsg = instfile + ' bank ' + str(rd.instbank) 618 return Iparm701 return SetPowderInstParms(Iparm,rd) 619 702 else: 620 #print 'debug: open/read failed',instfile703 #print 'debug: open/read failed',instfile 621 704 pass # fail silently 622 705 … … 624 707 # instrument parameter file 625 708 if self.zipfile: 626 for ext in '.inst ','.prm':709 for ext in '.instprm','.prm','.inst','.ins': 627 710 instfile = G2IO.ExtractFileFromZip( 628 711 self.zipfile, … … 631 714 if instfile is not None and instfile != self.zipfile: 632 715 print 'debug:',instfile,'created from ',self.zipfile 716 instParmList = self.ReadPowderInstprm(instfile) 717 if instParmList is not None: 718 rd.instfile = instfile 719 rd.instmsg = 'GSAS-II file '+instfile 720 return instParmList 633 721 Iparm = self.ReadPowderIparm(instfile,bank,numbanks,rd) 634 722 if Iparm: 635 723 rd.instfile = instfile 636 724 rd.instmsg = instfile + ' bank ' + str(rd.instbank) 637 return Iparm725 return SetPowderInstParms(Iparm,rd) 638 726 else: 639 print 'debug: open/read for',instfile,'from',self.zipfile,'failed'727 #print 'debug: open/read for',instfile,'from',self.zipfile,'failed' 640 728 pass # fail silently 641 729 642 730 while True: # loop until we get a file that works or we get a cancel 643 731 instfile = '' 644 dlg = wx.FileDialog(self, 645 'Choose inst parm file for "' 646 +rd.idstring 647 +'" (Cancel for defaults)', 648 '.', '', 649 'GSAS iparm file (*.prm)|*.prm|All files(*.*)|*.*', 650 wx.OPEN|wx.CHANGE_DIR) 732 dlg = wx.FileDialog( 733 self, 734 'Choose inst. param file for "' 735 +rd.idstring 736 +'" (or Cancel for default)', 737 '.', '', 738 'GSAS-II iparm file (*.instprm)|*.instprm|' 739 'GSAS iparm file (*.prm)|*.prm|' 740 'GSAS iparm file (*.inst)|*.inst|' 741 'GSAS iparm file (*.ins)|*.ins|' 742 'All files (*.*)|*.*', 743 wx.OPEN|wx.CHANGE_DIR) 651 744 if os.path.exists(lastIparmfile): 652 745 dlg.SetFilename(lastIparmfile) … … 655 748 dlg.Destroy() 656 749 if not instfile: break 750 instParmList = self.ReadPowderInstprm(instfile) 751 if instParmList is not None: 752 rd.instfile = instfile 753 rd.instmsg = 'GSAS-II file '+instfile 754 return instParmList 657 755 Iparm = self.ReadPowderIparm(instfile,bank,numbanks,rd) 658 756 if Iparm: … … 660 758 rd.instfile = instfile 661 759 rd.instmsg = instfile + ' bank ' + str(rd.instbank) 662 return Iparm760 return SetPowderInstParms(Iparm,rd) 663 761 else: 664 762 self.ErrorDialog('Read Error', … … 680 778 rd.instfile = '' 681 779 rd.instmsg = 'default: '+rd.defaultIparm_lbl[res] 682 return rd.defaultIparms[res] 683 684 def SetPowderInstParms(self, Iparm, rd): 685 '''extracts values from instrument parameter file and creates 686 the contents of the instrument parameter tree entry 687 ''' 688 DataType = Iparm['INS HTYPE '].strip()[0:3] # take 1st 3 chars 689 # override inst values with values read from data file 690 if rd.instdict.get('type'): 691 DataType = rd.instdict.get('type') 692 wave1 = None 693 wave2 = 0.0 694 if rd.instdict.get('wave'): 695 wl = rd.instdict.get('wave') 696 wave1 = wl[0] 697 if len(wl) > 1: wave2 = wl[1] 698 data = [DataType,] 699 if 'C' in DataType: 700 s = Iparm['INS 1 ICONS'] 701 if not wave1: 702 wave1 = G2IO.sfloat(s[:10]) 703 wave2 = G2IO.sfloat(s[10:20]) 704 v = (wave1,wave2, 705 G2IO.sfloat(s[20:30]),G2IO.sfloat(s[55:65]),G2IO.sfloat(s[40:50])) #get lam1, lam2, zero, pola & ratio 706 if not v[1]: 707 names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y','SH/L','Azimuth'] 708 v = (v[0],v[2],v[4]) 709 codes = [0,0,0,0] 710 else: 711 names = ['Type','Lam1','Lam2','Zero','I(L2)/I(L1)','Polariz.','U','V','W','X','Y','SH/L','Azimuth'] 712 codes = [0,0,0,0,0,0] 713 data.extend(v) 714 v1 = Iparm['INS 1PRCF1 '].split() 715 v = Iparm['INS 1PRCF11'].split() 716 data.extend([float(v[0]),float(v[1]),float(v[2])]) #get GU, GV & GW - always here 717 azm = Iparm.get('INS 1DETAZM') 718 if azm is None: #not in this Iparm file 719 azm = 0.0 720 else: 721 azm = float(azm) 722 v = Iparm['INS 1PRCF12'].split() 723 if v1[0] == 3: 724 data.extend([float(v[0]),float(v[1]),float(v[2])+float(v[3],azm)]) #get LX, LY, S+H/L & azimuth 725 else: 726 data.extend([0.0,0.0,0.002,azm]) #OK defaults if fxn #3 not 1st in iprm file 727 codes.extend([0,0,0,0,0,0,0]) 728 return [tuple(data),data,codes,names] 780 return SetPowderInstParms(rd.defaultIparms[res],rd) 729 781 730 782 def OnImportPowder(self,event): … … 743 795 for rd in rdlist: 744 796 # get instrument parameters for each dataset 745 Iparm= self.GetPowderIparm(rd, Iparm, lastIparmfile, lastdatafile)797 instParmList = self.GetPowderIparm(rd, Iparm, lastIparmfile, lastdatafile) 746 798 lastIparmfile = rd.instfile 747 799 lastdatafile = rd.powderentry[0] … … 771 823 self.PatternTree.SetItemPyData( 772 824 self.PatternTree.AppendItem(Id,text='Instrument Parameters'), 773 self.SetPowderInstParms(Iparm,rd))825 instParmList) 774 826 self.PatternTree.SetItemPyData( 775 827 self.PatternTree.AppendItem(Id,text='Sample Parameters'), -
trunk/GSASIIIO.py
r683 r688 1087 1087 #print 'created',self.__class__ 1088 1088 1089 def BlockSelector(self, ChoiceList, ParentFrame=None,itle='Select a block', 1090 size=None, header='Block Selector'): 1089 def BlockSelector(self, ChoiceList, ParentFrame=None, 1090 title='Select a block', 1091 size=None, header='Block Selector'): 1091 1092 ''' Provide a wx dialog to select a block if the file contains more 1092 1093 than one set of data and one must be selected -
trunk/GSASIIpwdGUI.py
r687 r688 8 8 # $Id$ 9 9 ########### SVN repository information ################### 10 import os.path 10 11 import wx 11 12 import wx.grid as wg … … 647 648 648 649 def OnLoad(event): 650 '''Loads instrument parameters from a G2 .instprm file 651 in response to the Instrument Parameters-Operations/Load Profile menu 652 653 Note that similar code is found in ReadPowderInstprm (GSASII.py) 654 ''' 649 655 dlg = wx.FileDialog(G2frame, 'Choose GSAS-II instrument parameters file', '.', '', 650 656 'instrument parameter files (*.instprm)|*.instprm',wx.OPEN|wx.CHANGE_DIR) … … 676 682 677 683 def OnSave(event): 684 '''Respond to the Instrument Parameters Operations/Save Profile menu 685 item: writes current parameters to a .instprm file 686 ''' 678 687 dlg = wx.FileDialog(G2frame, 'Choose GSAS-II instrument parameters file', '.', '', 679 688 'instrument parameter files (*.instprm)|*.instprm',wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT|wx.CHANGE_DIR) … … 681 690 if dlg.ShowModal() == wx.ID_OK: 682 691 filename = dlg.GetPath() 692 # make sure extension is .instprm 693 filename = os.path.splitext(filename)[0]+'.instprm' 683 694 File = open(filename,'w') 684 695 File.write("#GSAS-II instrument parameter file; do not add/delete or change order of items!\n") … … 1400 1411 if ObjId < 3: 1401 1412 Obj.SetValue("%.5f"%(controls[6+ObjId])) 1413 1402 1414 else: 1403 1415 Obj.SetValue("%.3f"%(controls[6+ObjId]))
Note: See TracChangeset
for help on using the changeset viewer.