Changeset 614
- Timestamp:
- May 11, 2012 12:03:59 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 8 added
- 6 deleted
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r612 r614 11 11 12 12 import os 13 import os.path as ospath13 #import os.path as ospath 14 14 import sys 15 15 import math … … 36 36 try: 37 37 print "trying a system-wide PyOpenGl install" 38 easy_install.main(['-f',os path.split(__file__)[0],package])38 easy_install.main(['-f',os.path.split(__file__)[0],package]) 39 39 return 40 40 except: … … 42 42 try: 43 43 print "trying a user level PyOpenGl install" 44 easy_install.main(['-f',os path.split(__file__)[0],'--user',package])44 easy_install.main(['-f',os.path.split(__file__)[0],'--user',package]) 45 45 return 46 46 except: … … 202 202 '''import all the import readers matching the prefix 203 203 ''' 204 path2GSAS2 = os.path.dirname(os.path.realpath(__file__)) # location of this file 204 #path2GSAS2 = os.path.dirname(os.path.realpath(__file__)) # location of this file 205 #pathlist = sys.path[:] 206 #if path2GSAS2 not in pathlist: pathlist.append(path2GSAS2) 207 path2GSAS2 = os.path.join( 208 os.path.dirname(os.path.realpath(__file__)), # location of this file 209 'imports') 205 210 pathlist = sys.path[:] 206 211 if path2GSAS2 not in pathlist: pathlist.append(path2GSAS2) 212 207 213 filelist = [] 208 214 for path in pathlist: 209 215 for filename in glob.iglob(os.path.join( 210 216 path, 211 "G2 import"+prefix+"*.py")):217 "G2"+prefix+"*.py")): 212 218 filelist.append(filename) 213 #print 'found',filename219 print 'debug: found',filename 214 220 filelist = sorted(list(set(filelist))) # remove duplicates 215 221 for filename in filelist: … … 313 319 msg = '' 314 320 try: 315 fp = open(filename,' r')321 fp = open(filename,'Ur') 316 322 self.lastimport = filename 317 323 # try the file first with Readers that specify the … … 329 335 repeat = False 330 336 fp.seek(0) # rewind 331 rd.objname = os path.basename(filename)337 rd.objname = os.path.basename(filename) 332 338 flag = rd.Reader(filename,fp,self, 333 339 buffer=rdbuffer, … … 486 492 self.Bind(wx.EVT_MENU, self.OnImportPowder, id=item.GetId()) 487 493 488 def GetPowderIparm(self,rd, prevIparm): 494 def ReadPowderIparm(self,instfile,bank,databanks,rd): 495 '''Read a GSAS (old) instrument parameter file''' 496 if not os.path.exists(instfile): # no such file 497 return {} 498 try: 499 fp = open(instfile,'Ur') 500 Iparm = {} 501 for S in fp: 502 Iparm[S[:12]] = S[12:-1] 503 except IOError: 504 print('Error reading file:'+str(instfile)) 505 finally: 506 fp.close() 507 508 try: 509 ibanks = int(Iparm.get('INS BANK ').strip()) 510 except: 511 ibanks = 1 512 if ibanks == 1: # there is only one bank here, return it 513 rd.instbank = 1 514 return Iparm 515 if ibanks != databanks: 516 # number of banks in data and prm file not not agree, need a 517 # choice from a human here 518 choices = [] 519 for i in range(1,1+len(ibanks)): 520 choices.append('Bank '+str(i)) 521 bank = rd.BlockSelector( 522 choices, self, 523 title='Select an instrument parameter block for '+ 524 rd.powderentry[0]+' block '+str(bank)+ 525 '\nCancel: Use default settings', 526 header='Block Selector') 527 if bank is None: return {} 528 # pull out requested bank # bank from the data, and change the bank to 1 529 IparmS = {} 530 for key in Iparm: 531 if key[4:6] == " ": 532 IparmS[key] = Iparm[key] 533 elif int(key[4:6].strip()) == bank: 534 IparmS[key[:4]+' 1'+key[6:]] = Iparm[key] 535 rd.instbank = bank 536 return IparmS 537 538 def GetPowderIparm(self,rd, prevIparm, lastIparmfile, lastdatafile): 489 539 '''Open and read an instrument parameter file for a data file 490 for now, just set defaults 540 for now, just use old GSAS type files, but someday allow other options. 541 Then update SetPowderInstParms to work with that input 491 542 ''' 543 # stuff we might need from the reader 544 filename = rd.powderentry[0] 545 bank = rd.powderentry[2] 546 numbanks = rd.numbanks 547 # is there an instrument parameter file defined for the current data set? 548 if rd.instparm or lastdatafile == filename: 549 if rd.instparm: 550 instfile = os.path.join(os.path.split(filename)[0], 551 rd.instparm) 552 else: 553 # for multiple reads of one data file, reuse the inst parm file 554 instfile = lastIparmfile 555 if os.path.exists(instfile): 556 print 'debug: try read',instfile 557 Iparm = self.ReadPowderIparm(instfile,bank,numbanks,rd) 558 if Iparm: 559 print 'debug: success' 560 rd.instfile = instfile 561 rd.instmsg = instfile + ' bank ' + str(rd.instbank) 562 return Iparm 563 else: 564 self.ErrorDialog('Open Error', 565 'Error opening file '+str(instfile) 566 +' requested by file '+ filename) 567 # is there an instrument parameter file matching the current file 568 # with extension .inst or .prm? If so read it 569 basename = os.path.splitext(filename)[0] 570 for ext in '.inst','.prm': 571 instfile = basename + ext 572 Iparm = self.ReadPowderIparm(instfile,bank,numbanks,rd) 573 if Iparm: 574 print 'debug: success' 575 rd.instfile = instfile 576 rd.instmsg = instfile + ' bank ' + str(rd.instbank) 577 return Iparm 578 else: 579 print 'debug open/read failed',instfile 580 pass # fail silently 581 582 while True: # loop until we get a file that works or we get a cancel 583 instfile = '' 584 dlg = wx.FileDialog(self, 585 'Choose an instrument file or press Cancel to select a default setting', 586 '.', '', 587 'GSAS iparm file (*.prm)|*.prm|All files(*.*)|*.*', 588 wx.OPEN|wx.CHANGE_DIR) 589 if os.path.exists(lastIparmfile): 590 dlg.SetFilename(lastIparmfile) 591 if dlg.ShowModal() == wx.ID_OK: 592 instfile = dlg.GetPath() 593 dlg.Destroy() 594 if not instfile: break 595 Iparm = self.ReadPowderIparm(instfile,bank,numbanks,rd) 596 if Iparm: 597 print 'debug: success with',instfile 598 rd.instfile = instfile 599 rd.instmsg = instfile + ' bank ' + str(rd.instbank) 600 return Iparm 601 else: 602 self.ErrorDialog('Read Error', 603 'Error opening/reading file '+str(instfile)) 604 605 # still no success: offer the user a last choice 492 606 dlg = wx.MessageDialog(self, 493 607 '''Is this laboratory Cu Ka1/Ka2 data? … … 501 615 dlg.Destroy() 502 616 if result == wx.ID_YES: 617 rd.instfile = '' 618 rd.instmsg = 'default: CuKa12' 503 619 return rd.Iparm_CuKa12 504 620 else: 621 rd.instfile = '' 622 rd.instmsg = 'default: 0.6A synchrotron' 505 623 return rd.Iparm_Sync06 506 624 … … 539 657 540 658 def OnImportPowder(self,event): 659 '''reads powder data using a variety of formats 660 reads an instrument parameter file for each dataset 661 ''' 541 662 reqrdr = self.ImportMenuId.get(event.GetId()) # look up which format was requested 542 663 rdlist = self.OnImportGeneric(reqrdr, … … 546 667 self.CheckNotebook() 547 668 Iparm = None 669 lastIparmfile = '' 670 lastdatafile = '' 548 671 for rd in rdlist: 549 Iparm = self.GetPowderIparm(rd, Iparm) 672 # get instrument parameters for each dataset 673 Iparm = self.GetPowderIparm(rd, Iparm, lastIparmfile, lastdatafile) 674 lastIparmfile = rd.instfile 675 lastdatafile = rd.powderentry[0] 550 676 print 'Read powder data '+str( 551 677 rd.idstring)+' from file '+str( 552 self.lastimport) 678 self.lastimport) + ' with parameters from '+str( 679 rd.instmsg) 680 # data are read, now store them in the tree 553 681 Id = self.PatternTree.AppendItem( 554 682 parent=self.root, … … 683 811 self.oldFocus = None 684 812 self.GSASprojectfile = '' 685 self.dirname = os path.expanduser('~') #start in the users home directory by default; may be meaningless813 self.dirname = os.path.expanduser('~') #start in the users home directory by default; may be meaningless 686 814 self.undofile = '' 687 815 self.TreeItemDelete = False … … 691 819 self.refDelt = .01 692 820 self.Weight = False 693 self.IparmName = '' 821 self.IparmName = '' # to be removed when SelectPowderData & GetInstrumentFile is 694 822 self.IfPlot = False 695 823 self.PatternId = 0 … … 723 851 if len(arg) > 1: 724 852 self.GSASprojectfile = arg[1] 725 self.dirname = os path.dirname(arg[1])853 self.dirname = os.path.dirname(arg[1]) 726 854 if self.dirname: os.chdir(self.dirname) 727 855 G2IO.ProjFileOpen(self) … … 792 920 for Item in Data: 793 921 vals = Item[2].split() #split up the BANK record 794 Id = self.PatternTree.AppendItem(parent=self.root,text='PWDR '+os path.basename(Item[0])+': '+vals[0]+vals[1])922 Id = self.PatternTree.AppendItem(parent=self.root,text='PWDR '+os.path.basename(Item[0])+': '+vals[0]+vals[1]) 795 923 data = G2IO.GetPowderData(filename,Item[1],Item[2],DataType) 796 924 self.PatternTree.SetItemPyData(Id,[Item,data]) … … 862 990 self.powderfile = dlg.GetPath() 863 991 comments,peaks = G2IO.GetPowderPeaks(self.powderfile) 864 Id = self.PatternTree.AppendItem(parent=self.root,text='PKS '+os path.basename(self.powderfile))992 Id = self.PatternTree.AppendItem(parent=self.root,text='PKS '+os.path.basename(self.powderfile)) 865 993 data = ['PKS',Cuka,0.0] 866 994 names = ['Type','Lam','Zero'] … … 894 1022 Comments,Data,Npix,Image = G2IO.GetImageData(self,imagefile) 895 1023 if Comments: 896 Id = self.PatternTree.AppendItem(parent=self.root,text='IMG '+os path.basename(imagefile))1024 Id = self.PatternTree.AppendItem(parent=self.root,text='IMG '+os.path.basename(imagefile)) 897 1025 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),Comments) 898 1026 Imax = np.amax(Image) … … 960 1088 names = ['Type','Lam'] 961 1089 HKLref,HKLmin,HKLmax,FoMax,ifFc = G2IO.GetHKLData(filename) 962 Id = self.PatternTree.AppendItem(parent=self.root,text='HKLF '+os path.basename(filename))1090 Id = self.PatternTree.AppendItem(parent=self.root,text='HKLF '+os.path.basename(filename)) 963 1091 self.PatternTree.SetItemPyData(Id,HKLref) 964 1092 Sub = self.PatternTree.AppendItem(Id,text='Instrument Parameters') -
trunk/GSASIIIO.py
r609 r614 44 44 return file 45 45 46 # to be removed 46 47 def SelectPowderData(G2frame, filename): 47 48 """Selects banks of data from a filename of any GSAS powder data format … … 150 151 return FoundData,Iparm,Comments,Temperature 151 152 153 # to be removed 152 154 def GetInstrumentFile(G2frame,filename): 153 155 import os.path as op … … 166 168 return filename 167 169 170 # to be removed 168 171 def GetInstrumentData(IparmName): 169 172 file = open(IparmName, 'Ur') … … 305 308 return HKLref,HKLmin,HKLmax,FoMax,ifFc 306 309 310 # to be removed 307 311 def GetPowderData(filename,Pos,Bank,DataType): 308 312 '''Reads one BANK of data from GSAS raw powder data file … … 336 340 return [] 337 341 342 # to be removed 338 343 def GetFXYEdata(filename,Pos,Bank,DataType): 339 344 File = open(filename,'Ur') … … 361 366 return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)] 362 367 368 # to be removed 363 369 def GetXYEdata(filename,Pos,Bank,DataType): 364 370 File = open(filename,'Ur') … … 387 393 388 394 395 # to be removed 389 396 def GetFXYdata(filename,Pos,Bank,DataType): 390 397 File = open(filename,'Ur') … … 412 419 return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)] 413 420 421 # to be removed 414 422 def GetESDdata(filename,Pos,Bank,DataType): 415 423 File = open(filename,'Ur') … … 445 453 return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)] 446 454 455 # to be removed 447 456 def GetSTDdata(filename,Pos,Bank,DataType): 448 457 File = open(filename,'Ur') … … 1317 1326 return None 1318 1327 1328 def MultipleBlockSelector(self, ChoiceList, ParentFrame=None, 1329 title='Select a block', 1330 size=None, header='Block Selector'): 1331 ''' Provide a wx dialog to select a block of data if the file contains more 1332 than one set of data and one must be selected. 1333 Returns a list of the selected blocks 1334 ''' 1335 dlg = wx.MultiChoiceDialog( 1336 ParentFrame, 1337 title, header, 1338 ChoiceList+['Select all'], 1339 wx.CHOICEDLG_STYLE 1340 ) 1341 if size: dlg.SetSize(size) 1342 if dlg.ShowModal() == wx.ID_OK: 1343 sel = dlg.GetSelections() 1344 dlg.Destroy() 1345 else: 1346 dlg.Destroy() 1347 return [] 1348 selected = [] 1349 if len(ChoiceList) in sel: 1350 return range(len(ChoiceList)) 1351 else: 1352 return sel 1353 return selected 1354 1319 1355 def ShowBusy(self): 1320 1356 wx.BeginBusyCursor() … … 1505 1541 self.idstring = '' 1506 1542 self.Sample = G2pdG.SetDefaultSample() 1543 self.instparm = None # name hint 1544 self.instfile = '' # full path name to instrument parameter file 1545 self.instbank = '' # inst parm bank number 1546 self.instmsg = '' # a label that gets printed to show 1547 # where instrument parameters are from 1548 self.numbanks = 1
Note: See TracChangeset
for help on using the changeset viewer.