Changeset 577 for trunk/GSASII.py
- Timestamp:
- Apr 27, 2012 9:45:26 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r570 r577 356 356 return 357 357 358 def _init_Import_Sfact(self,parent): 359 '''import all the G2importsfact*.py files that are found in the 360 path and configure the Import Structure Factor menus accordingly 361 ''' 362 363 path2GSAS2 = os.path.dirname(os.path.realpath(__file__)) # location of this file 364 pathlist = sys.path[:] 365 if path2GSAS2 not in pathlist: pathlist.append(path2GSAS2) 366 filelist = [] 367 for path in pathlist: 368 for filename in glob.iglob(os.path.join(path, "G2importsfact*.py")): 369 filelist.append(filename) 370 #print 'found',filename 371 filelist = sorted(list(set(filelist))) # remove duplicates 372 self.ImportSfactReaderlist = [] 373 for filename in filelist: 374 path,rootname = os.path.split(filename) 375 pkg = os.path.splitext(rootname)[0] 376 try: 377 fp = None 378 fp, fppath,desc = imp.find_module(pkg,[path,]) 379 pkg = imp.load_module(pkg,fp,fppath,desc) 380 for clss in inspect.getmembers(pkg): # find classes defined in package 381 if clss[0].startswith('_'): continue 382 if inspect.isclass(clss[1]): 383 # check if we have the required methods 384 for m in 'Reader','ExtensionValidator','ContentsValidator': 385 if not hasattr(clss[1],m): break 386 if not callable(getattr(clss[1],m)): break 387 else: 388 reader = clss[1]() # create a Structure Factor import instance 389 self.ImportSfactReaderlist.append(reader) 390 except AttributeError: 391 print 'Import_Sfact: Attribute Error',filename 392 pass 393 except ImportError: 394 print 'Import_Sfact: Error importing file',filename 395 pass 396 finally: 397 if fp: fp.close() 398 submenu = wx.Menu() 399 item = parent.AppendMenu(wx.ID_ANY, 'Import Structure Factor menu', 400 submenu, help='Import Structure Factor data') 401 self.SfactImportMenuId = {} 402 item = submenu.Append(wx.ID_ANY, 403 help='Import Structure Factor data based selected by extension', 404 kind=wx.ITEM_NORMAL,text='Import Structure Factor by extension') 405 self.Bind(wx.EVT_MENU, self.OnImportSfactGeneric, id=item.GetId()) 406 for reader in self.ImportSfactReaderlist: 407 item = submenu.Append(wx.ID_ANY, 408 help='Import specific format Structure Factor data', 409 kind=wx.ITEM_NORMAL,text='Import Structure Factor '+reader.formatName+'...') 410 self.SfactImportMenuId[item.GetId()] = reader 411 self.Bind(wx.EVT_MENU, self.OnImportSfactGeneric, id=item.GetId()) 412 413 def OnImportSfactGeneric(self,event): 414 # find out which format was requested 415 reader = self.SfactImportMenuId.get(event.GetId()) 416 if reader is None: 417 #print "use all formats" 418 readerlist = self.ImportSfactReaderlist 419 choices = "any file (*.*)|*.*" 420 extdict = {} 421 # compile a list of allowed extensions 422 for rd in readerlist: 423 fmt = rd.formatName 424 for extn in rd.extensionlist: 425 if not extdict.get(extn): extdict[extn] = [] 426 extdict[extn] += [fmt,] 427 for extn in sorted(extdict.keys(),cmp=lambda x,y: cmp(x.lower(), y.lower())): 428 fmt = '' 429 for f in extdict[extn]: 430 if fmt != "": fmt += ', ' 431 fmt += f 432 choices += "|" + fmt + " file (*" + extn + ")|*" + extn 433 else: 434 readerlist = [reader,] 435 # compile a list of allowed extensions 436 choices = reader.formatName + " file (" 437 w = "" 438 for extn in reader.extensionlist: 439 if w != "": w += ";" 440 w += "*" + extn 441 choices += w + ")|" + w 442 if not reader.strictExtension: 443 choices += "|any file (*.*)|*.*" 444 # get the file 445 dlg = wx.FileDialog( 446 self, message="Choose Structure Factor input file", 447 #defaultDir=os.getcwd(), 448 defaultFile="", 449 wildcard=choices, 450 style=wx.OPEN | wx.CHANGE_DIR 451 ) 452 try: 453 if dlg.ShowModal() == wx.ID_OK: 454 file = dlg.GetPath() 455 else: # cancel was pressed 456 return 457 finally: 458 dlg.Destroy() 459 # set what formats are compatible with this file 460 primaryReaders = [] 461 secondaryReaders = [] 462 for reader in readerlist: 463 flag = reader.ExtensionValidator(file) 464 if flag is None: 465 secondaryReaders.append(reader) 466 elif flag: 467 primaryReaders.append(reader) 468 if len(secondaryReaders) + len(primaryReaders) == 0: 469 self.ErrorDialog('No Format','No matching format for file '+file) 470 return 471 472 fp = None 473 try: 474 fp = open(file,'r') 475 # try the file first with Readers that specify the 476 # files extension and later with ones that allow it 477 for rd in primaryReaders+secondaryReaders: 478 if not rd.ContentsValidator(fp): 479 continue # rejected on cursory check 480 #flag = rd.Reader(file,fp,self) 481 try: 482 flag = rd.Reader(file,fp,self) 483 except: 484 import traceback 485 print traceback.format_exc() 486 self.ErrorDialog('Read Error', 487 'Error reading file '+file 488 +' with format '+ rd.formatName) 489 continue 490 if not flag: continue 491 # dlg = wx.TextEntryDialog( # allow editing of Structure Factor name 492 # self, 'Enter the name for the new Structure Factor', 493 # 'Edit Structure Factor name', rd.Phase['General']['Name'], 494 # style=wx.OK) 495 dlg.CenterOnParent() 496 # if dlg.ShowModal() == wx.ID_OK: 497 # rd.Phase['General']['Name'] = dlg.GetValue() 498 # dlg.Destroy() 499 # PhaseName = rd.Phase['General']['Name'] 500 # if not G2gd.GetPatternTreeItemId(self,self.root,'Phases'): 501 # sub = self.PatternTree.AppendItem(parent=self.root,text='Phases') 502 # else: 503 # sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases') 504 # psub = self.PatternTree.AppendItem(parent=sub,text=PhaseName) 505 # self.PatternTree.SetItemPyData(psub,rd.Phase) 506 # self.PatternTree.Expand(self.root) # make sure phases are seen 507 # self.PatternTree.Expand(sub) 508 # self.PatternTree.Expand(psub) 509 return # success 510 except: 511 import traceback 512 print traceback.format_exc() 513 self.ErrorDialog('Open Error', 514 'Error on open of file '+file) 515 finally: 516 if fp: fp.close() 517 518 return 358 519 359 520 def _init_coll_Import_Items(self,parent): … … 404 565 self._init_coll_Calculate_Items(self.Calculate) 405 566 self._init_Import_Phase(self.Import) 567 self._init_Import_Sfact(self.Import) 406 568 self._init_coll_Import_Items(self.Import) 407 569 self._init_coll_Export_Items(self.Export) … … 706 868 finally: 707 869 dlg.Destroy() 708 870 871 # this will be removed eventually 709 872 def OnSnglRead(self,event): 710 873 self.CheckNotebook() … … 744 907 745 908 def CheckNotebook(self): 909 '''Make sure the data tree has the minimally expected controls 910 (BHT) correct? 911 ''' 746 912 if not G2gd.GetPatternTreeItemId(self,self.root,'Notebook'): 747 913 sub = self.PatternTree.AppendItem(parent=self.root,text='Notebook')
Note: See TracChangeset
for help on using the changeset viewer.