Changeset 607
- Timestamp:
- May 9, 2012 8:55:25 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/G2importphase.py
r584 r607 27 27 # return True 28 28 29 def Reader(self,filename,filepointer, ParentFrame=None ):29 def Reader(self,filename,filepointer, ParentFrame=None, **unused): 30 30 try: 31 31 self.Phase = G2IO.ReadPDBPhase(filename) … … 54 54 return False 55 55 56 def Reader(self,filename,filepointer, ParentFrame=None ):56 def Reader(self,filename,filepointer, ParentFrame=None, **unused): 57 57 try: 58 58 self.Phase = G2IO.ReadEXPPhase(ParentFrame, filename) -
trunk/G2importphase_CIF.py
r584 r607 41 41 return False # found something else 42 42 return True 43 def Reader(self,filename,filepointer, ParentFrame=None ):43 def Reader(self,filename,filepointer, ParentFrame=None, **unused): 44 44 returnstat = False 45 45 cellitems = ( -
trunk/G2importphase_GPX.py
r584 r607 27 27 return False 28 28 return True 29 def Reader(self,filename,filepointer, ParentFrame=None ):29 def Reader(self,filename,filepointer, ParentFrame=None, **unused): 30 30 try: 31 31 phasenames = G2str.GetPhaseNames(filename) -
trunk/G2importsfact.py
r584 r607 38 38 return True 39 39 40 def Reader(self,filename,filepointer, ParentFrame=None ):40 def Reader(self,filename,filepointer, ParentFrame=None, **unused): 41 41 try: 42 42 for S in filepointer: -
trunk/G2importsfact_CIF.py
r584 r607 11 11 import sys 12 12 import numpy as np 13 import os.path 13 14 import GSASIIIO as G2IO 14 15 import CifFile as cif # PyCifRW from James Hester … … 42 43 return False # found something else 43 44 return True 44 def Reader(self,filename,filepointer, ParentFrame=None ):45 def Reader(self,filename,filepointer, ParentFrame=None, **kwarg): 45 46 hklitems = ('_refln_index_h','_refln_index_k','_refln_index_l') 46 47 cellitems = ( … … 52 53 '_chemical_formula_sum' 53 54 ) 55 rdbuffer = kwarg.get('buffer') 56 cf = None 54 57 try: 55 self.ShowBusy() # this can take a while 56 ciffile = 'file:'+urllib.pathname2url(filename) 57 cf = cif.ReadCif(ciffile) 58 self.DoneBusy() 58 if self.repeat and rdbuffer is not None: 59 cf = rdbuffer.get('lastcif') 60 print 'no-parse' 61 if cf is None: 62 print 'parse' 63 self.ShowBusy() # this can take a while 64 ciffile = 'file:'+urllib.pathname2url(filename) 65 cf = cif.ReadCif(ciffile) 66 self.DoneBusy() 59 67 # scan blocks for reflections 60 68 blklist = [] … … 104 112 sg = cf[blknm].get("_symmetry_space_group_name_H-M") 105 113 if sg: choice[-1] += ', (' + sg.strip() + ')' 106 selblk = self.BlockSelector( 107 choice, 108 ParentFrame=ParentFrame, 109 title='Select a dataset from one the CIF data_ blocks below', 110 size=(600,100), 111 header='Dataset Selector') 114 choice.append('Import all of the above') 115 if self.repeat: # we were called to repeat the read 116 selblk = self.repeatcount 117 self.repeatcount += 1 118 if self.repeatcount >= len(blklist): self.repeat = False 119 else: 120 selblk = self.BlockSelector( 121 choice, 122 ParentFrame=ParentFrame, 123 title='Select a dataset from one the CIF data_ blocks below', 124 size=(600,100), 125 header='Dataset Selector') 112 126 if selblk is None: 113 127 return False # no block selected or available 114 else: 115 blknm = blklist[selblk] 116 blk = cf[blklist[selblk]] 117 # read in reflections 118 refloop = blk.GetLoop('_refln_index_h') 119 itemkeys = {} 120 # prepare an index to the CIF reflection loop 121 for i,key in enumerate(refloop.keys()): 122 itemkeys[key.lower()] = i 123 if '_refln_f_squared_calc' in itemkeys: 124 FcalcPresent = True 125 elif '_refln_f_calc' in itemkeys: 126 FcalcPresent = True 127 else: 128 FcalcPresent = False 129 for item in refloop: 130 HKL = [] 131 for i in hklitems: # ('_refln_index_h','_refln_index_k','_refln_index_l') 132 num = itemkeys.get(i) 128 if selblk >= len(blklist): # all blocks selected 129 selblk = 0 130 self.repeat = True 131 if rdbuffer is not None: 132 rdbuffer['lastcif'] = cf # save the parsed cif for the next loop 133 self.repeatcount = 1 134 blknm = blklist[selblk] 135 blk = cf[blklist[selblk]] 136 self.objname = os.path.basename(filename)+':'+str(blknm) 137 # read in reflections 138 refloop = blk.GetLoop('_refln_index_h') 139 itemkeys = {} 140 # prepare an index to the CIF reflection loop 141 for i,key in enumerate(refloop.keys()): 142 itemkeys[key.lower()] = i 143 if '_refln_f_squared_calc' in itemkeys: 144 FcalcPresent = True 145 elif '_refln_f_calc' in itemkeys: 146 FcalcPresent = True 147 else: 148 FcalcPresent = False 149 for item in refloop: 150 HKL = [] 151 for i in hklitems: # ('_refln_index_h','_refln_index_k','_refln_index_l') 152 num = itemkeys.get(i) 153 try: 154 HKL.append(int(item[num])) 155 except: 156 HKL.append('.') 157 ref = [HKL,0.,0.,0,0,0,0] # HKL. Fo**2, sig(Fo**2), Fc, Fcp, Fcpp & phase 158 # get F or F**2 and sigma 159 if '_refln_f_squared_meas' in itemkeys: 160 try: 161 ref[1] = float(item[itemkeys['_refln_f_squared_meas']]) 162 except: 163 pass 164 if '_refln_f_squared_sigma' in itemkeys: 133 165 try: 134 HKL.append(int(item[num]))166 ref[2] = float(item[itemkeys['_refln_f_squared_sigma']]) 135 167 except: 136 HKL.append('.') 137 ref = [HKL,0.,0.,0,0,0,0] # HKL. Fo**2, sig(Fo**2), Fc, Fcp, Fcpp & phase 138 # get F or F**2 and sigma 139 if '_refln_f_squared_meas' in itemkeys: 168 pass 169 elif '_refln_f_meas' in itemkeys: 170 try: 171 ref[1] = float(item[itemkeys['_refln_f_meas']])**2 172 except: 173 pass 174 if '_refln_f_sigma' in itemkeys: 140 175 try: 141 ref[1] = float(item[itemkeys['_refln_f_squared_meas']]) 142 except: 143 pass 144 if '_refln_f_squared_sigma' in itemkeys: 145 try: 146 ref[2] = float(item[itemkeys['_refln_f_squared_sigma']]) 147 except: 148 pass 149 elif '_refln_f_meas' in itemkeys: 150 try: 151 ref[1] = float(item[itemkeys['_refln_f_meas']])**2 176 ref[2] = 2.*sqrt(ref[1])*float(item[itemkeys['_refln_f_sigma']]) 152 177 except: 153 178 pass 154 if '_refln_f_sigma' in itemkeys: 155 try: 156 ref[2] = 2.*sqrt(ref[1])*float(item[itemkeys['_refln_f_sigma']]) 157 except: 158 pass 159 if '_refln_f_squared_calc' in itemkeys: 160 try: 161 ref[3] = float(item[itemkeys['_refln_f_squared_calc']]) 162 except: 163 pass 164 elif '_refln_f_calc' in itemkeys: 165 try: 166 ref[3] = float(item[itemkeys['_refln_f_calc']])**2 167 except: 168 pass 169 if '_refln_phase_calc' in itemkeys: 170 try: 171 ref[6] = float(item[itemkeys['_refln_phase_calc']]) 172 except: 173 pass 174 175 self.RefList.append(ref) 176 self.UpdateControls(Type='Fosq',FcalcPresent=FcalcPresent) # set Fobs type & if Fcalc values are loaded 177 if blk.get('_diffrn_radiation_probe'): 178 if blk['_diffrn_radiation_probe'] == 'neutron': 179 type = 'SNC' 180 else: 181 type = 'SXC' 182 if blk.get('_diffrn_radiation_wavelength'): 183 wave = blk['_diffrn_radiation_wavelength'] 184 else: 185 wave = None 186 self.UpdateParameters(Type=type,Wave=wave) # histogram type 187 return True 179 if '_refln_f_squared_calc' in itemkeys: 180 try: 181 ref[3] = float(item[itemkeys['_refln_f_squared_calc']]) 182 except: 183 pass 184 elif '_refln_f_calc' in itemkeys: 185 try: 186 ref[3] = float(item[itemkeys['_refln_f_calc']])**2 187 except: 188 pass 189 if '_refln_phase_calc' in itemkeys: 190 try: 191 ref[6] = float(item[itemkeys['_refln_phase_calc']]) 192 except: 193 pass 194 195 self.RefList.append(ref) 196 self.UpdateControls(Type='Fosq',FcalcPresent=FcalcPresent) # set Fobs type & if Fcalc values are loaded 197 if blk.get('_diffrn_radiation_probe'): 198 if blk['_diffrn_radiation_probe'] == 'neutron': 199 type = 'SNC' 200 else: 201 type = 'SXC' 202 if blk.get('_diffrn_radiation_wavelength'): 203 wave = blk['_diffrn_radiation_wavelength'] 204 else: 205 wave = None 206 self.UpdateParameters(Type=type,Wave=wave) # histogram type 207 return True 188 208 except Exception as detail: 189 209 print self.formatName+' read error:'+str(detail) # for testing -
trunk/GSASII.py
r600 r607 14 14 import sys 15 15 import math 16 import copy 16 17 #import cPickle 17 18 import time … … 126 127 parent.Append(menu=self.Import, title='Import') 127 128 parent.Append(menu=self.Export, title='Export') 128 parent.Append(menu=G2gd.MyHelp(self,helpType='Tutorials'),title='&Tutorials' ) 129 parent.Append(menu=G2gd.MyHelp(self,helpType='Data tree'),title='&Help' ) 130 129 self.HelpMenu=G2gd.MyHelp(self, 130 helpType='Data tree', 131 morehelpitems=[('&Tutorials','Tutorials')] 132 ) 133 parent.Append(menu=self.HelpMenu,title='&Help') 134 131 135 def _init_coll_File_Items(self, parent): 132 136 parent.Append(help='Open a gsasii project file (*.gpx)', id=wxID_FILEOPEN, … … 234 238 if fp: fp.close() 235 239 236 def OnImportGeneric(self,reader,readerlist,label ):240 def OnImportGeneric(self,reader,readerlist,label,multiple=False): 237 241 '''Call the requested import reader or all of the appropriate 238 242 import readers in response to a menu item … … 240 244 self.lastimport = '' 241 245 if reader is None: 246 multiple = False 242 247 #print "use all formats" 243 248 choices = "any file (*.*)|*.*" … … 267 272 choices += "|any file (*.*)|*.*" 268 273 # get the file 274 if multiple: 275 mode = style=wx.OPEN | wx.CHANGE_DIR | wx.MULTIPLE 276 else: 277 mode = style=wx.OPEN | wx.CHANGE_DIR 269 278 dlg = wx.FileDialog( 270 279 self, message="Choose "+label+" input file", 271 280 #defaultDir=os.getcwd(), 272 281 defaultFile="", 273 wildcard=choices, 274 style=wx.OPEN | wx.CHANGE_DIR 282 wildcard=choices, style=mode 275 283 ) 276 284 try: 277 285 if dlg.ShowModal() == wx.ID_OK: 278 file = dlg.GetPath() 286 if multiple: 287 filelist = dlg.GetPaths() 288 if len(filelist) == 0: return [] 289 else: 290 filename = dlg.GetPath() 291 filelist = [filename,] 279 292 else: # cancel was pressed 280 return None293 return [] 281 294 finally: 282 295 dlg.Destroy() 296 rd_list = [] 297 for filename in filelist: 283 298 # set what formats are compatible with this file 284 primaryReaders = [] 285 secondaryReaders = [] 286 for reader in readerlist: 287 flag = reader.ExtensionValidator(file) 288 if flag is None: 289 secondaryReaders.append(reader) 290 elif flag: 291 primaryReaders.append(reader) 292 if len(secondaryReaders) + len(primaryReaders) == 0: 293 self.ErrorDialog('No Format','No matching format for file '+file) 294 return None 295 296 fp = None 297 try: 298 fp = open(file,'r') 299 self.lastimport = file 300 # try the file first with Readers that specify the 301 # files extension and later with ones that allow it 302 for rd in primaryReaders+secondaryReaders: 303 fp.seek(0) # rewind 304 if not rd.ContentsValidator(fp): 305 continue # rejected on cursory check 306 try: 307 fp.seek(0) # rewind 308 flag = rd.Reader(file,fp,self) 309 except: 310 import traceback 311 print traceback.format_exc() 312 self.ErrorDialog('Read Error', 313 'Error reading file '+file 314 +' with format '+ rd.formatName) 315 continue 316 if not flag: continue 317 return rd 318 except: 319 import traceback 320 print traceback.format_exc() 321 self.ErrorDialog('Open Error','Error on open of file '+file) 322 finally: 323 if fp: fp.close() 324 return None 299 primaryReaders = [] 300 secondaryReaders = [] 301 for reader in readerlist: 302 flag = reader.ExtensionValidator(filename) 303 if flag is None: 304 secondaryReaders.append(reader) 305 elif flag: 306 primaryReaders.append(reader) 307 if len(secondaryReaders) + len(primaryReaders) == 0: 308 self.ErrorDialog('No Format','No matching format for file '+filename) 309 return [] 310 311 fp = None 312 msg = '' 313 try: 314 fp = open(filename,'r') 315 self.lastimport = filename 316 # try the file first with Readers that specify the 317 # files extension and later with ones that allow it 318 flag = False 319 for rd in primaryReaders+secondaryReaders: 320 try: 321 fp.seek(0) # rewind 322 if not rd.ContentsValidator(fp): continue # rejected on cursory check 323 repeat = True 324 rdbuffer = {} # create temporary storage for file reader 325 block = 0 326 while repeat: 327 block += 1 328 repeat = False 329 fp.seek(0) # rewind 330 rd.objname = ospath.basename(filename) 331 flag = rd.Reader(filename,fp,self, 332 buffer=rdbuffer, 333 blocknum=block) 334 if flag: 335 rd_list.append(copy.deepcopy(rd)) # success 336 if rd.repeat: repeat = True 337 except: 338 import traceback 339 print traceback.format_exc() 340 msg += '\nError reading file '+filename+' with format '+ rd.formatName 341 #self.ErrorDialog('Read Error', 342 # 'Error reading file '+filename 343 # +' with format '+ rd.formatName) 344 continue 345 if flag: break # success reading 346 else: 347 self.ErrorDialog('Read Error','No reader is able to read from file '+filename+msg) 348 except: 349 import traceback 350 print traceback.format_exc() 351 self.ErrorDialog('Open Error','Error on open of file '+filename) 352 finally: 353 if fp: fp.close() 354 return rd_list 325 355 326 356 def _init_Import_Phase(self,parent): … … 348 378 def OnImportPhase(self,event): 349 379 # look up which format was requested 350 re ader = self.ImportMenuId.get(event.GetId())351 rd = self.OnImportGeneric(reader,380 reqrdr = self.ImportMenuId.get(event.GetId()) 381 rdlist = self.OnImportGeneric(reqrdr, 352 382 self.ImportPhaseReaderlist, 353 383 'phase') 354 if rd is None: return 355 dlg = wx.TextEntryDialog( # allow editing of phase name 356 self, 'Enter the name for the new phase', 357 'Edit phase name', rd.Phase['General']['Name'], 358 style=wx.OK) 359 dlg.CenterOnParent() 360 if dlg.ShowModal() == wx.ID_OK: 361 rd.Phase['General']['Name'] = dlg.GetValue() 362 dlg.Destroy() 363 PhaseName = rd.Phase['General']['Name'] 364 print 'Read phase '+str(PhaseName)+' from file '+str(self.lastimport) 384 if len(rdlist) == 0: return 385 # for now rdlist is only expected to have one element 386 # but this will allow multiple phases to be imported 365 387 self.CheckNotebook() 366 if not G2gd.GetPatternTreeItemId(self,self.root,'Phases'): 367 sub = self.PatternTree.AppendItem(parent=self.root,text='Phases') 368 else: 369 sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases') 370 psub = self.PatternTree.AppendItem(parent=sub,text=PhaseName) 371 self.PatternTree.SetItemPyData(psub,rd.Phase) 372 self.PatternTree.Expand(self.root) # make sure phases are seen 373 self.PatternTree.Expand(sub) 374 self.PatternTree.Expand(psub) 388 for rd in rdlist: 389 dlg = wx.TextEntryDialog( # allow editing of phase name 390 self, 'Enter the name for the new phase', 391 'Edit phase name', rd.Phase['General']['Name'], 392 style=wx.OK) 393 dlg.CenterOnParent() 394 if dlg.ShowModal() == wx.ID_OK: 395 rd.Phase['General']['Name'] = dlg.GetValue() 396 dlg.Destroy() 397 PhaseName = rd.Phase['General']['Name'] 398 print 'Read phase '+str(PhaseName)+' from file '+str(self.lastimport) 399 if not G2gd.GetPatternTreeItemId(self,self.root,'Phases'): 400 sub = self.PatternTree.AppendItem(parent=self.root,text='Phases') 401 else: 402 sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases') 403 psub = self.PatternTree.AppendItem(parent=sub,text=PhaseName) 404 self.PatternTree.SetItemPyData(psub,rd.Phase) 405 self.PatternTree.Expand(self.root) # make sure phases are seen 406 self.PatternTree.Expand(sub) 407 self.PatternTree.Expand(psub) 375 408 return # success 376 409 … … 387 420 submenu, help='Import Structure Factor data') 388 421 item = submenu.Append(wx.ID_ANY, 389 help='Import Structure Factor data based selected by extension',390 kind=wx.ITEM_NORMAL,text='Import Structure Factor by extension')422 help='Import Structure Factor (determine format from file extension)', 423 kind=wx.ITEM_NORMAL,text='Import Structure Factor (fmt from extension)') 391 424 self.Bind(wx.EVT_MENU, self.OnImportSfact, id=item.GetId()) 392 425 for reader in self.ImportSfactReaderlist: … … 399 432 def OnImportSfact(self,event): 400 433 # look up which format was requested 401 re ader = self.ImportMenuId.get(event.GetId())402 rd = self.OnImportGeneric(reader,434 reqrdr = self.ImportMenuId.get(event.GetId()) 435 rdlist = self.OnImportGeneric(reqrdr, 403 436 self.ImportSfactReaderlist, 404 437 'Structure Factor') 405 if rd is None: return 406 HistName = ospath.basename(self.lastimport) 407 dlg = wx.TextEntryDialog( # allow editing of Structure Factor name 408 self, 'Enter the name for the new Structure Factor', 409 'Edit Structure Factor name', HistName, 410 style=wx.OK) 411 dlg.CenterOnParent() 412 if dlg.ShowModal() == wx.ID_OK: 413 HistName = dlg.GetValue() 414 dlg.Destroy() 415 print 'Read structure factor table '+str(HistName)+' from file '+str(self.lastimport) 438 if len(rdlist) == 0: return 416 439 self.CheckNotebook() 417 Id = self.PatternTree.AppendItem(parent=self.root, 418 text='HKLF '+HistName) 419 self.PatternTree.SetItemPyData(Id,rd.RefList) 420 Sub = self.PatternTree.AppendItem(Id,text='Instrument Parameters') 421 self.PatternTree.SetItemPyData(Sub,rd.Parameters) 422 self.PatternTree.SetItemPyData( 423 self.PatternTree.AppendItem(Id,text='HKL Plot Controls'), 424 rd.Controls) 440 for rd in rdlist: 441 HistName = rd.objname 442 if len(rdlist) <= 2: 443 dlg = wx.TextEntryDialog( # allow editing of Structure Factor name 444 self, 'Enter the name for the new Structure Factor', 445 'Edit Structure Factor name', HistName, 446 style=wx.OK) 447 dlg.CenterOnParent() 448 if dlg.ShowModal() == wx.ID_OK: 449 HistName = dlg.GetValue() 450 dlg.Destroy() 451 print 'Read structure factor table '+str(HistName)+' from file '+str(self.lastimport) 452 Id = self.PatternTree.AppendItem(parent=self.root, 453 text='HKLF '+HistName) 454 self.PatternTree.SetItemPyData(Id,rd.RefList) 455 Sub = self.PatternTree.AppendItem(Id,text='Instrument Parameters') 456 self.PatternTree.SetItemPyData(Sub,rd.Parameters) 457 self.PatternTree.SetItemPyData( 458 self.PatternTree.AppendItem(Id,text='HKL Plot Controls'), 459 rd.Controls) 460 self.PatternTree.SelectItem(Id) 461 self.PatternTree.Expand(Id) 462 self.Sngl = Id 463 return # success 464 465 def _init_Import_powder(self,parent): 466 '''import all the G2importpwd*.py files that are found in the 467 path and configure the Import Powder Data menus accordingly 468 ''' 469 self.ImportPowderReaderlist = [] 470 self._init_Import_routines(parent,'pwd', 471 self.ImportPowderReaderlist, 472 'Powder_Data') 473 submenu = wx.Menu() 474 item = parent.AppendMenu(wx.ID_ANY, 'Import Powder Data menu', 475 submenu, help='Import Powder data') 476 item = submenu.Append(wx.ID_ANY, 477 help='Import powder data (determine format from file extension)', 478 kind=wx.ITEM_NORMAL,text='Import powder data (fmt from extension)') 479 self.Bind(wx.EVT_MENU, self.OnImportPowder, id=item.GetId()) 480 for reader in self.ImportPowderReaderlist: 481 item = submenu.Append(wx.ID_ANY, 482 help='Import specific format powder data', 483 kind=wx.ITEM_NORMAL,text='Import powder data from '+reader.formatName+' file ...') 484 self.ImportMenuId[item.GetId()] = reader 485 self.Bind(wx.EVT_MENU, self.OnImportPowder, id=item.GetId()) 486 487 def GetPowderIparm(self,rd, prevIparm): 488 '''Open and read an instrument parameter file for a data file 489 for now, just set defaults 490 ''' 491 dlg = wx.MessageDialog(self, 492 '''Is this laboratory Cu Ka1/Ka2 data? 493 (No = 0.6A wavelength synchrotron data) 494 Change wavelength in Instrument Parameters if needed''', 495 'Data type?', 496 wx.YES_NO | wx.ICON_QUESTION) 497 try: 498 result = dlg.ShowModal() 499 finally: 500 dlg.Destroy() 501 if result == wx.ID_YES: 502 return rd.Iparm_CuKa12 503 else: 504 return rd.Iparm_Sync06 505 506 def SetPowderInstParms(self, Iparm): 507 '''extracts values from instrument parameter file and creates 508 the contents of the instrument parameter tree entry 509 ''' 510 DataType = Iparm['INS HTYPE '].strip()[0:3] # take 1st 3 chars 511 data = [DataType,] 512 if 'C' in DataType: 513 s = Iparm['INS 1 ICONS'] 514 v = (G2IO.sfloat(s[:10]),G2IO.sfloat(s[10:20]),G2IO.sfloat(s[20:30]),G2IO.sfloat(s[55:65]),G2IO.sfloat(s[40:50])) #get lam1, lam2, zero, pola & ratio 515 if not v[1]: 516 names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y','SH/L','Azimuth'] 517 v = (v[0],v[2],v[4]) 518 codes = [0,0,0,0] 519 else: 520 names = ['Type','Lam1','Lam2','Zero','I(L2)/I(L1)','Polariz.','U','V','W','X','Y','SH/L','Azimuth'] 521 codes = [0,0,0,0,0,0] 522 data.extend(v) 523 v1 = Iparm['INS 1PRCF1 '].split() 524 v = Iparm['INS 1PRCF11'].split() 525 data.extend([float(v[0]),float(v[1]),float(v[2])]) #get GU, GV & GW - always here 526 azm = Iparm.get('INS 1DETAZM') 527 if azm is None: #not in this Iparm file 528 azm = 0.0 529 else: 530 azm = float(azm) 531 v = Iparm['INS 1PRCF12'].split() 532 if v1[0] == 3: 533 data.extend([float(v[0]),float(v[1]),float(v[2])+float(v[3],azm)]) #get LX, LY, S+H/L & azimuth 534 else: 535 data.extend([0.0,0.0,0.002,azm]) #OK defaults if fxn #3 not 1st in iprm file 536 codes.extend([0,0,0,0,0,0,0]) 537 return [tuple(data),data,codes,names] 538 539 def OnImportPowder(self,event): 540 reqrdr = self.ImportMenuId.get(event.GetId()) # look up which format was requested 541 rdlist = self.OnImportGeneric(reqrdr, 542 self.ImportPowderReaderlist, 543 'Powder Data',multiple=True) 544 if len(rdlist) == 0: return 545 self.CheckNotebook() 546 Iparm = None 547 for rd in rdlist: 548 Iparm = self.GetPowderIparm(rd, Iparm) 549 print 'Read powder data '+str( 550 rd.idstring)+' from file '+str( 551 self.lastimport) 552 Id = self.PatternTree.AppendItem( 553 parent=self.root, 554 text='PWDR '+rd.idstring) 555 self.PatternTree.SetItemPyData(Id,[rd.powderentry,rd.powderdata]) 556 self.PatternTree.SetItemPyData( 557 self.PatternTree.AppendItem(Id,text='Comments'), 558 rd.comments) 559 Tmin = min(rd.powderdata[0]) 560 Tmax = max(rd.powderdata[0]) 561 self.PatternTree.SetItemPyData( 562 self.PatternTree.AppendItem(Id,text='Limits'), 563 [(Tmin,Tmax),[Tmin,Tmax]]) 564 self.PatternId = G2gd.GetPatternTreeItemId(self,Id,'Limits') 565 self.PatternTree.SetItemPyData( 566 self.PatternTree.AppendItem(Id,text='Background'), 567 [['chebyschev',True,3,1.0,0.0,0.0], 568 {'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]}]) 569 self.PatternTree.SetItemPyData( 570 self.PatternTree.AppendItem(Id,text='Instrument Parameters'), 571 self.SetPowderInstParms(Iparm)) 572 self.PatternTree.SetItemPyData( 573 self.PatternTree.AppendItem(Id,text='Sample Parameters'), 574 rd.Sample) 575 self.PatternTree.SetItemPyData( 576 self.PatternTree.AppendItem(Id,text='Peak List') 577 ,[]) 578 self.PatternTree.SetItemPyData( 579 self.PatternTree.AppendItem(Id,text='Index Peak List'), 580 []) 581 self.PatternTree.SetItemPyData( 582 self.PatternTree.AppendItem(Id,text='Unit Cells List'), 583 []) 584 self.PatternTree.SetItemPyData( 585 self.PatternTree.AppendItem(Id,text='Reflection Lists'), 586 {}) 587 self.PatternTree.Expand(Id) 425 588 self.PatternTree.SelectItem(Id) 426 self.PatternTree.Expand(Id)427 self.Sngl = Id428 589 return # success 429 590 … … 476 637 self.ImportMenuId = {} 477 638 self._init_Import_Phase(self.Import) 639 self._init_Import_powder(self.Import) 478 640 self._init_Import_Sfact(self.Import) 479 641 self._init_coll_Import_Items(self.Import) -
trunk/GSASIIIO.py
r584 r607 1291 1291 self.warnings = '' 1292 1292 self.errors = '' 1293 # used for readers that will use multiple passes to read 1294 # more than one data block 1295 self.repeat = False 1296 self.repeatcount = 0 1293 1297 #print 'created',self.__class__ 1294 1298 … … 1319 1323 wx.EndBusyCursor() 1320 1324 1321 # def Reader(self, filename, filepointer, ParentFrame=None ):1325 # def Reader(self, filename, filepointer, ParentFrame=None, **unused): 1322 1326 # '''This method must be supplied in the child class 1323 1327 # it will read the file … … 1457 1461 print "Unsupported Stract Fact type in ImportStructFactor.UpdateControls" 1458 1462 raise Exception,"Unsupported Stract Fact type in ImportStructFactor.UpdateControls" 1463 1464 ###################################################################### 1465 class ImportPowderData(ImportBaseclass): 1466 '''Defines a base class for the reading of files with powder data 1467 ''' 1468 # define some default instrument parameter files 1469 # just like GSAS, sigh 1470 Iparm_CuKa12 = { # Default Inst. parms for CuKa lab data 1471 'INS HTYPE ':'PXC ', 1472 'INS 1 ICONS':' 1.540500 1.544300 0.0 0 0.7 0 0.5 ', 1473 'INS 1PRCF1 ':' 3 8 0.01 ', 1474 'INS 1PRCF11':' 2.000000E+00 -2.000000E+00 5.000000E+00 0.000000E+00 ', 1475 'INS 1PRCF12':' 0.000000E+00 0.000000E+00 0.150000E-01 0.150000E-01 ', 1476 } 1477 Iparm_Sync06 = { # Default Inst. parms for 0.6A synchrotron data 1478 'INS HTYPE ':'PXC ', 1479 'INS 1 ICONS':' 0.600000 0.000000 0.0 0 0.99 0 0.5 ', 1480 'INS 1PRCF1 ':' 3 8 0.01 ', 1481 'INS 1PRCF11':' 1.000000E+00 -1.000000E+00 0.300000E+00 0.000000E+00 ', 1482 'INS 1PRCF12':' 0.000000E+00 0.000000E+00 0.100000E-01 0.100000E-01 ', 1483 } 1484 def __init__(self, 1485 formatName, 1486 longFormatName=None, 1487 extensionlist=[], 1488 strictExtension=False, 1489 ): 1490 ImportBaseclass.__init__(self,formatName, 1491 longFormatName, 1492 extensionlist, 1493 strictExtension) 1494 self.powderentry = ['',None,None] # (filename,Pos,Bank) 1495 self.powderdata = [] # Powder dataset 1496 '''A powder data set is a list with items [x,y,w,yc,yb,yd]: 1497 np.array(x), # x-axis values 1498 np.array(y), # powder pattern intensities 1499 np.array(w), # 1/sig(intensity)^2 values (weights) 1500 np.array(yc), # calc. intensities (zero) 1501 np.array(yb), # calc. background (zero) 1502 np.array(yd), # obs-calc profiles 1503 ''' 1504 self.comments = [] 1505 self.idstring = '' 1506 self.Sample = G2pdG.SetDefaultSample() -
trunk/GSASIIgrid.py
r600 r607 135 135 it correctly. BHT 136 136 ''' 137 def __init__(self,frame,title='',helpType=None ):137 def __init__(self,frame,title='',helpType=None,morehelpitems=[]): 138 138 wx.Menu.__init__(self,title) 139 self. helpType = helpType139 self.HelpById = {} 140 140 self.frame = frame 141 141 # add a help item only when helpType is specified … … 143 143 helpobj = self.Append(text='Help on '+helpType, 144 144 id=wx.ID_ANY, kind=wx.ITEM_NORMAL) 145 frame.Bind(wx.EVT_MENU, self.OnHelp, helpobj) 145 frame.Bind(wx.EVT_MENU, self.OnHelpById, helpobj) 146 self.HelpById[helpobj.GetId()] = helpType 146 147 self.Append(help='', id=wx.ID_ABOUT, kind=wx.ITEM_NORMAL, 147 148 text='&About GSAS-II') 148 149 frame.Bind(wx.EVT_MENU, self.OnHelpAbout, id=wx.ID_ABOUT) 149 150 def OnHelp(self,event): 150 for lbl,indx in morehelpitems: 151 helpobj = self.Append(text=lbl, 152 id=wx.ID_ANY, kind=wx.ITEM_NORMAL) 153 frame.Bind(wx.EVT_MENU, self.OnHelpById, helpobj) 154 self.HelpById[helpobj.GetId()] = indx 155 156 def OnHelpById(self,event): 151 157 '''Called when Help on... is pressed in a menu. Brings up 152 158 a web page for documentation. 153 159 ''' 154 ShowHelp(self.helpType,self.frame) 160 helpType = self.HelpById.get(event.GetId()) 161 if helpType is None: 162 print 'Error: help lookup failed!',event.GetEventObject() 163 print 'id=',event.GetId() 164 else: 165 ShowHelp(helpType,self.frame) 155 166 156 167 def OnHelpAbout(self, event):
Note: See TracChangeset
for help on using the changeset viewer.