Changeset 1199
- Timestamp:
- Jan 16, 2014 3:55:36 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r1191 r1199 216 216 self.ImportPowderReaderlist = [] 217 217 self._init_Import_routines('pwd',self.ImportPowderReaderlist,'Powder_Data') 218 self.ImportSmallAngleReaderlist = [] 219 self._init_Import_routines('sad',self.ImportSmallAngleReaderlist,'SmallAngle_Data') 218 220 self.ImportMenuId = {} 219 221 … … 256 258 readerlist.append(reader) 257 259 except AttributeError: 258 print 'Import_'+errprefix+': Attribute Error '+str(filename)260 print 'Import_'+errprefix+': Attribute Error '+str(filename) 259 261 pass 260 262 except ImportError: 261 print 'Import_'+errprefix+': Error importing file '+str(filename)263 print 'Import_'+errprefix+': Error importing file '+str(filename) 262 264 pass 263 265 if fp: fp.close() … … 1455 1457 return # success 1456 1458 1459 def _Add_ImportMenu_smallangle(self,parent): 1460 '''configure the Small Angle Data menus accord to the readers found in _init_Imports 1461 ''' 1462 submenu = wx.Menu() 1463 item = parent.AppendMenu(wx.ID_ANY, 'Small Angle Data', 1464 submenu, help='Import small angle data') 1465 for reader in self.ImportSmallAngleReaderlist: 1466 item = submenu.Append(wx.ID_ANY,help=reader.longFormatName, 1467 kind=wx.ITEM_NORMAL,text='from '+reader.formatName+' file') 1468 self.ImportMenuId[item.GetId()] = reader 1469 self.Bind(wx.EVT_MENU, self.OnImportSmallAngle, id=item.GetId()) 1470 item = submenu.Append(wx.ID_ANY, 1471 help='Import small angle data, use file to try to determine format', 1472 kind=wx.ITEM_NORMAL,text='guess format from file') 1473 self.Bind(wx.EVT_MENU, self.OnImportSmallAngle, id=item.GetId()) 1474 1475 1476 def OnImportSmallAngle(self,event): 1477 '''Called in response to an Import/Small Angle Data/... menu item 1478 to read a small angle diffraction data set. 1479 dict self.ImportMenuId is used to look up the specific 1480 reader item associated with the menu item, which will be 1481 None for the last menu item, which is the "guess" option 1482 where all appropriate formats will be tried. 1483 1484 ''' 1485 1486 def GetSASDIparm(reader): 1487 parm = reader.instdict 1488 Iparm = {'Type':[parm['type'],parm['type'],0],'Lam':[parm['wave'], 1489 parm['wave'],0],'Azimuth':[0.,0.,0]} 1490 return Iparm,{} 1491 1492 # get a list of existing histograms 1493 SASDlist = [] 1494 if self.PatternTree.GetCount(): 1495 item, cookie = self.PatternTree.GetFirstChild(self.root) 1496 while item: 1497 name = self.PatternTree.GetItemText(item) 1498 if name.startswith('SASD ') and name not in SASDlist: 1499 SASDlist.append(name) 1500 item, cookie = self.PatternTree.GetNextChild(self.root, cookie) 1501 # look up which format was requested 1502 reqrdr = self.ImportMenuId.get(event.GetId()) 1503 rdlist = self.OnImportGeneric( 1504 reqrdr,self.ImportSmallAngleReaderlist,'Small Angle Data',multiple=True) 1505 if len(rdlist) == 0: return 1506 self.CheckNotebook() 1507 Iparm = None 1508 lastdatafile = '' 1509 newHistList = [] 1510 for rd in rdlist: 1511 lastdatafile = rd.smallangleentry[0] 1512 HistName = rd.idstring 1513 HistName = 'SASD '+HistName 1514 # make new histogram names unique 1515 HistName = G2obj.MakeUniqueLabel(HistName,SASDlist) 1516 print 'Read small angle data '+str(HistName)+ \ 1517 ' from file '+str(self.lastimport) 1518 # data are read, now store them in the tree 1519 Id = self.PatternTree.AppendItem(parent=self.root,text=HistName) 1520 Iparm1,Iparm2 = GetSASDIparm(rd) 1521 # if 'T' in Iparm1['Type'][0]: 1522 # if not rd.clockWd and rd.GSAS: 1523 # rd.powderdata[0] *= 100. #put back the CW centideg correction 1524 # cw = np.diff(rd.powderdata[0]) 1525 # rd.powderdata[0] = rd.powderdata[0][:-1]+cw/2. 1526 # rd.powderdata[1] = rd.powderdata[1][:-1]/cw 1527 # rd.powderdata[2] = rd.powderdata[2][:-1]*cw**2 #1/var=w at this point 1528 # if 'Itype' in Iparm2: 1529 # Ibeg = np.searchsorted(rd.powderdata[0],Iparm2['Tminmax'][0]) 1530 # Ifin = np.searchsorted(rd.powderdata[0],Iparm2['Tminmax'][1]) 1531 # rd.powderdata[0] = rd.powderdata[0][Ibeg:Ifin] 1532 # YI,WYI = G2pwd.calcIncident(Iparm2,rd.powderdata[0]) 1533 # rd.powderdata[1] = rd.powderdata[1][Ibeg:Ifin]/YI 1534 # var = 1./rd.powderdata[2][Ibeg:Ifin] 1535 # var += WYI*rd.powderdata[1]**2 1536 # var /= YI**2 1537 # rd.powderdata[2] = 1./var 1538 # rd.powderdata[3] = np.zeros_like(rd.powderdata[0]) 1539 # rd.powderdata[4] = np.zeros_like(rd.powderdata[0]) 1540 # rd.powderdata[5] = np.zeros_like(rd.powderdata[0]) 1541 Tmin = min(rd.smallangledata[0]) 1542 Tmax = max(rd.smallangledata[0]) 1543 valuesdict = { 1544 'wtFactor':1.0, 1545 'Dummy':False, 1546 'ranId':ran.randint(0,sys.maxint), 1547 } 1548 rd.Sample['ranId'] = valuesdict['ranId'] # this should be removed someday 1549 self.PatternTree.SetItemPyData(Id,[valuesdict,rd.smallangledata]) 1550 self.PatternTree.SetItemPyData( 1551 self.PatternTree.AppendItem(Id,text='Comments'), 1552 rd.comments) 1553 self.PatternTree.SetItemPyData( 1554 self.PatternTree.AppendItem(Id,text='Limits'), 1555 [(Tmin,Tmax),[Tmin,Tmax]]) 1556 self.PatternId = G2gd.GetPatternTreeItemId(self,Id,'Limits') 1557 self.PatternTree.SetItemPyData( 1558 self.PatternTree.AppendItem(Id,text='Instrument Parameters'), 1559 [Iparm1,Iparm2]) 1560 self.PatternTree.SetItemPyData( 1561 self.PatternTree.AppendItem(Id,text='Sample Parameters'), 1562 rd.Sample) 1563 self.PatternTree.Expand(Id) 1564 self.PatternTree.SelectItem(Id) 1565 newHistList.append(HistName) 1566 1567 if not newHistList: return # somehow, no new histograms 1568 return # success 1569 1457 1570 def _init_Exports(self,menu): 1458 1571 '''Find exporter routines and add them into menus … … 1624 1737 self._Add_ImportMenu_powder(Import) 1625 1738 self._Add_ImportMenu_Sfact(Import) 1739 self._Add_ImportMenu_smallangle(Import) 1626 1740 #====================================================================== 1627 1741 # Code to help develop/debug an importer, much is hard-coded below … … 2402 2516 DelItemList = [] 2403 2517 ifPWDR = False 2518 ifSASD = False 2404 2519 ifIMG = False 2405 2520 ifHKLF = False … … 2412 2527 'Restraints','Phases','Rigid bodies']: 2413 2528 if 'PWDR' in name: ifPWDR = True 2529 if 'SASD' in name: ifSASD = True 2414 2530 if 'IMG' in name: ifIMG = True 2415 2531 if 'HKLF' in name: ifHKLF = True … … 2418 2534 item, cookie = self.PatternTree.GetNextChild(self.root, cookie) 2419 2535 if ifPWDR: TextList.insert(1,'All PWDR') 2536 if ifSASD: TextList.insert(1,'All SASD') 2420 2537 if ifIMG: TextList.insert(1,'All IMG') 2421 2538 if ifHKLF: TextList.insert(1,'All HKLF') … … 2430 2547 elif 'All PWDR' in DelList: 2431 2548 DelList = [item for item in TextList if item[:4] == 'PWDR'] 2549 elif 'All SASD' in DelList: 2550 DelList = [item for item in TextList if item[:4] == 'SASD'] 2432 2551 elif 'All IMG' in DelList: 2433 2552 DelList = [item for item in TextList if item[:3] == 'IMG'] -
trunk/GSASIIIO.py
r1198 r1199 835 835 Id = G2frame.PatternTree.GetItemParent(PickId) 836 836 name = G2frame.PatternTree.GetItemText(Id) 837 name = name.replace('IMG ', 'PWDR')837 name = name.replace('IMG ',data['type']+' ') 838 838 Comments = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Comments')) 839 names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y','SH/L','Azimuth'] 840 codes = [0 for i in range(12)] 839 if 'PWDR' in name: 840 names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y','SH/L','Azimuth'] 841 codes = [0 for i in range(11)] 842 elif 'SASD' in name: 843 names = ['Type','Lam','Zero','Azimuth'] 844 codes = [0 for i in range(4)] 841 845 LRazm = data['LRazimuth'] 842 846 Azms = [] … … 854 858 Id = item 855 859 item, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie) 856 parms = ['PXC',data['wavelength'],0.0,0.99,1.0,-0.10,0.4,0.30,1.0,0.0001,Azms[i]] #set polarization for synchrotron radiation! 860 if 'PWDR' in name: 861 parms = ['PXC',data['wavelength'],0.0,0.99,1.0,-0.10,0.4,0.30,1.0,0.0001,Azms[i]] #set polarization for synchrotron radiation! 862 elif 'SASD' in name: 863 parms = ['LXC',data['wavelength'],0.0,Azms[i]] 857 864 Y = G2frame.Integrate[0][i] 858 865 W = 1./Y #probably not true … … 865 872 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Comments'),Comments) 866 873 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Limits'),[tuple(Xminmax),Xminmax]) 867 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Background'),[['chebyschev',1,3,1.0,0.0,0.0], 868 {'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]}]) 874 if 'PWDR' in name: 875 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Background'),[['chebyschev',1,3,1.0,0.0,0.0], 876 {'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]}]) 869 877 inst = [dict(zip(names,zip(parms,parms,codes))),{}] 870 878 for item in inst[0]: 871 879 inst[0][item] = list(inst[0][item]) 872 880 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'),inst) 873 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Peak List'),[]) 874 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Index Peak List'),[]) 875 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Unit Cells List'),[]) 876 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Reflection Lists'),{}) 881 if 'PWDR' in name: 882 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Peak List'),[]) 883 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Index Peak List'),[]) 884 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Unit Cells List'),[]) 885 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Reflection Lists'),{}) 877 886 else: 878 887 Id = G2frame.PatternTree.AppendItem(parent=G2frame.root,text=name+" Azm= %.2f"%(Azms[i])) 879 888 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Comments'),Comments) 880 889 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Limits'),[tuple(Xminmax),Xminmax]) 881 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Background'),[['chebyschev',1,3,1.0,0.0,0.0], 882 {'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]}]) 890 if 'PWDR' in name: 891 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Background'),[['chebyschev',1,3,1.0,0.0,0.0], 892 {'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]}]) 883 893 inst = [dict(zip(names,zip(parms,parms,codes))),{}] 884 894 for item in inst[0]: … … 886 896 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Instrument Parameters'),inst) 887 897 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Sample Parameters'),Sample) 888 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Peak List'),[]) 889 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Index Peak List'),[]) 890 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Unit Cells List'),[]) 891 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Reflection Lists'),{}) 898 if 'PWDR' in name: 899 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Peak List'),[]) 900 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Index Peak List'),[]) 901 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Unit Cells List'),[]) 902 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Reflection Lists'),{}) 892 903 valuesdict = { 893 904 'wtFactor':1.0, … … 1666 1677 self.instdict = {} # place items here that will be transferred to the instrument parameters 1667 1678 ###################################################################### 1679 class ImportSmallAngleData(ImportBaseclass): 1680 '''Defines a base class for the reading of files with small angle data. 1681 See :ref:`Writing a Import Routine<Import_Routines>` 1682 for an explanation on how to use this class. 1683 ''' 1684 def __init__(self,formatName,longFormatName=None,extensionlist=[], 1685 strictExtension=False,): 1686 1687 ImportBaseclass.__init__(self,formatName,longFormatName,extensionlist, 1688 strictExtension) 1689 self.smallangleentry = ['',None,None] # (filename,Pos,Bank) 1690 self.smallangledata = [] # SASD dataset 1691 '''A small angle data set is a list with items [x,y,w,yc,yd]: 1692 np.array(x), # x-axis values 1693 np.array(y), # powder pattern intensities 1694 np.array(w), # 1/sig(intensity)^2 values (weights) 1695 np.array(yc), # calc. intensities (zero) 1696 np.array(yd), # obs-calc profiles 1697 ''' 1698 self.comments = [] 1699 self.idstring = '' 1700 self.Sample = G2pdG.SetDefaultSample() 1701 self.GSAS = None # used in TOF 1702 self.clockWd = None # used in TOF 1703 self.numbanks = 1 1704 self.instdict = {} # place items here that will be transferred to the instrument parameters 1705 ###################################################################### 1668 1706 class ExportBaseclass(object): 1669 1707 '''Defines a base class for the exporting of GSAS-II results -
trunk/GSASIIgrid.py
r1195 r1199 3473 3473 G2frame.PatternTree.SetItemPyData(item,data) 3474 3474 if kind == 'PWDR': 3475 G2plt.PlotPatterns(G2frame,newPlot=True) 3475 G2plt.PlotPatterns(G2frame,plotType=kind,newPlot=True) 3476 elif kind == 'SASD': 3477 G2plt.PlotPatterns(G2frame,plotType=kind,newPlot=True) 3476 3478 elif kind == 'HKLF': 3477 3479 G2plt.PlotSngl(G2frame,newPlot=True) … … 3699 3701 for i in G2frame.ExportPattern: i.Enable(True) 3700 3702 UpdatePWHKPlot(G2frame,'PWDR',item) 3703 elif 'SASD' in G2frame.PatternTree.GetItemText(item): 3704 for i in G2frame.ExportPattern: i.Enable(True) 3705 UpdatePWHKPlot(G2frame,'SASD',item) 3701 3706 elif 'HKLF' in G2frame.PatternTree.GetItemText(item): 3702 3707 G2frame.Sngl = item … … 3800 3805 data = G2frame.PatternTree.GetItemPyData(item)[0] 3801 3806 G2pdG.UpdateInstrumentGrid(G2frame,data) 3802 G2plt.PlotPeakWidths(G2frame) 3807 if 'P' in data['Type'][0]: #powder data only 3808 G2plt.PlotPeakWidths(G2frame) 3803 3809 elif G2frame.PatternTree.GetItemText(item) == 'Sample Parameters': 3804 3810 G2frame.PatternId = G2frame.PatternTree.GetItemParent(item) -
trunk/GSASIIimage.py
r1193 r1199 771 771 tabs = np.ones_like(taz) 772 772 tam = ma.mask_or(tam.flatten(),ma.getmask(taz)) 773 tax = ma.compressed(ma.array(tax.flatten(),mask=tam)) 774 tay = ma.compressed(ma.array(tay.flatten(),mask=tam)) 775 taz = ma.compressed(ma.array(taz.flatten(),mask=tam)) 776 tad = ma.compressed(ma.array(tad.flatten(),mask=tam)) 777 tabs = ma.compressed(ma.array(tabs.flatten(),mask=tam)) 773 tax = ma.compressed(ma.array(tax.flatten(),mask=tam)) #azimuth 774 tay = ma.compressed(ma.array(tay.flatten(),mask=tam)) #2-theta 775 taz = ma.compressed(ma.array(taz.flatten(),mask=tam)) #intensity 776 tad = ma.compressed(ma.array(tad.flatten(),mask=tam)) #dist**2/d0**2 777 tabs = ma.compressed(ma.array(tabs.flatten(),mask=tam)) #ones - later used for absorption corr. 778 778 return tax,tay,taz,tad,tabs 779 779 780 780 def ImageIntegrate(image,data,masks,blkSize=128,dlg=None): 781 'Needs a doc string' 781 'Needs a doc string' #for q, log(q) bins need data['binType'] 782 782 import histogram2d as h2d 783 783 print 'Begin image integration' 784 LUtth = data['IOtth']784 LUtth = np.array(data['IOtth']) 785 785 LRazm = np.array(data['LRazimuth'],dtype=np.float64) 786 786 numAzms = data['outAzimuths'] 787 787 numChans = data['outChannels'] 788 Dtth = (LUtth[1]-LUtth[0])/numChans789 788 Dazm = (LRazm[1]-LRazm[0])/numAzms 790 if data['centerAzm']: 791 LRazm += Dazm/2. 789 LRazm += Dazm/2. 790 if 'log(q)' in data['binType']: 791 lutth = np.log(4.*np.pi*npsind(LUtth/2.)/data['wavelength']) 792 elif 'q' == data['binType']: 793 lutth = 4.*np.pi*npsind(LUtth/2.)/data['wavelength'] 794 elif '2-theta' in data['binType']: 795 lutth = LUtth 796 dtth = (lutth[1]-lutth[0])/numChans 797 muT = data['SampleAbs'][0] 798 if 'SASD' in data['type']: 799 muT = np.log(muT) 792 800 NST = np.zeros(shape=(numAzms,numChans),order='F',dtype=np.float32) 793 801 H0 = np.zeros(shape=(numAzms,numChans),order='F',dtype=np.float32) … … 820 828 tax = np.where(tax < LRazm[0],tax+360.,tax) 821 829 if data['SampleAbs'][1]: 822 muR = data['SampleAbs'][0]*(1.+npsind(tax)**2/2.)/(npcosd(tay)) 823 tabs = G2pwd.Absorb(data['SampleShape'],muR,tay) 830 if 'PWDR' in data['type']: 831 muR = muT*(1.+npsind(tax)**2/2.)/(npcosd(tay)) 832 tabs = G2pwd.Absorb(data['SampleShape'],muR,tay) 833 elif 'SASD' in data['type']: #assumes flat plate sample normal to beam 834 tabs = G2pwd.Absorb('Fixed',muT,tay) 835 if 'log(q)' in data['binType']: 836 tay = np.log(4.*np.pi*npsind(tay/2.)/data['wavelength']) 837 elif 'q' == data['binType']: 838 tay = 4.*np.pi*npsind(tay/2.)/data['wavelength'] 839 #change 2-theta (tay) to q or log(q) here? then LUtth & Dtth need to be changed also 824 840 if any([tax.shape[0],tay.shape[0],taz.shape[0]]): 825 NST,H0 = h2d.histogram2d(len(tax),tax,tay,taz*tad*tabs,numAzms,numChans,LRazm, LUtth,Dazm,Dtth,NST,H0)841 NST,H0 = h2d.histogram2d(len(tax),tax,tay,taz*tad*tabs,numAzms,numChans,LRazm,lutth,Dazm,dtth,NST,H0) 826 842 Nup += 1 827 843 if dlg: … … 831 847 H0 = np.nan_to_num(H0) 832 848 del NST 833 if Dtth: 834 H2 = np.array([tth for tth in np.linspace(LUtth[0],LUtth[1],numChans+1)]) 835 else: 836 H2 = np.array(LUtth) 849 H2 = np.array([tth for tth in np.linspace(lutth[0],lutth[1],numChans+1)]) 850 if 'log(q)' in data['binType']: 851 H2 = 2.*npasind(np.exp(H2)*data['wavelength']/(4.*np.pi)) 852 elif 'q' == data['binType']: 853 H2 = 2.*npasind(H2*data['wavelength']/(4.*np.pi)) 837 854 if Dazm: 838 855 H1 = np.array([azm for azm in np.linspace(LRazm[0],LRazm[1],numAzms+1)]) -
trunk/GSASIIimgGUI.py
r1195 r1199 56 56 data['SampleShape'] = 'Cylinder' 57 57 data['SampleAbs'] = [0.0,False] 58 if 'binType' not in data: 59 data['binType'] = '2-theta' 58 60 #end patch 59 61 … … 94 96 backImage = G2IO.GetImageData(G2frame,imagefile,True)*backScale 95 97 sumImage = G2frame.ImageZ+backImage 96 sumMin = np.min(sumImage)97 sumMax = np.max(sumImage)98 maskCopy['Thresholds'] = [(sumMin,sumMax),[sumMin,sumMax]]99 98 G2frame.Integrate = G2img.ImageIntegrate(sumImage,data,maskCopy,blkSize,dlg) 100 99 else: … … 278 277 def OnDataType(event): 279 278 data['type'] = typeSel.GetValue()[:4] 279 if 'SASD' in data['type'] and not data['SampleAbs'][0]: 280 data['SampleAbs'][0] = 1.0 #switch from muT to trans! 280 281 wx.CallAfter(UpdateImageControls,G2frame,data,masks) 281 282 … … 444 445 rotSel.SetBackgroundColour(VERY_LIGHT_GREY) 445 446 calibSizer.Add(rotSel,0,wx.ALIGN_CENTER_VERTICAL) 446 penSel = wx.CheckBox(parent=G2frame.dataDisplay,label='Penetration?') 447 calibSizer.Add(penSel,0,wx.ALIGN_CENTER_VERTICAL) 448 penSel.Bind(wx.EVT_CHECKBOX, OnDetDepthRef) 449 penSel.SetValue(data['DetDepthRef']) 450 penVal = wx.TextCtrl(parent=G2frame.dataDisplay,value=("%6.5f" % (data['DetDepth'])), 451 style=wx.TE_PROCESS_ENTER) 452 penVal.Bind(wx.EVT_TEXT_ENTER,OnDetDepth) 453 penVal.Bind(wx.EVT_KILL_FOCUS,OnDetDepth) 454 calibSizer.Add(penVal,0,wx.ALIGN_CENTER_VERTICAL) 447 if 'PWDR' in data['type']: 448 penSel = wx.CheckBox(parent=G2frame.dataDisplay,label='Penetration?') 449 calibSizer.Add(penSel,0,wx.ALIGN_CENTER_VERTICAL) 450 penSel.Bind(wx.EVT_CHECKBOX, OnDetDepthRef) 451 penSel.SetValue(data['DetDepthRef']) 452 penVal = wx.TextCtrl(parent=G2frame.dataDisplay,value=("%6.5f" % (data['DetDepth'])), 453 style=wx.TE_PROCESS_ENTER) 454 penVal.Bind(wx.EVT_TEXT_ENTER,OnDetDepth) 455 penVal.Bind(wx.EVT_KILL_FOCUS,OnDetDepth) 456 calibSizer.Add(penVal,0,wx.ALIGN_CENTER_VERTICAL) 455 457 456 458 return calibSizer 457 459 458 460 def IntegrateSizer(): 461 462 def OnNewBinType(event): 463 data['binType'] = binSel.GetValue() 459 464 460 465 def OnIOtth(event): … … 483 488 try: 484 489 numChans = int(outChan.GetValue()) 485 if numChans < 1 :490 if numChans < 10: 486 491 raise ValueError 487 492 data['outChannels'] = numChans … … 527 532 try: 528 533 value = float(samabsVal.GetValue()) 529 if 0.00 <= value <= 2.00: 534 minmax = [0.,2.] 535 if 'SASD' in data['type']: 536 minmax = [.05,1.0] 537 if minmax[0] <= value <= minmax[1]: 530 538 data['SampleAbs'][0] = value 531 539 else: … … 590 598 wx.ALIGN_CENTER_VERTICAL) 591 599 dataSizer.Add((5,0),0) 600 binChoice = ['2-theta','q','log(q)'] 601 dataSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Bin style: Constant'),0, 602 wx.ALIGN_CENTER_VERTICAL) 603 binSel = wx.ComboBox(parent=G2frame.dataDisplay,value=data['binType'],choices=binChoice, 604 style=wx.CB_READONLY|wx.CB_DROPDOWN|wx.CB_SORT) 605 binSel.Bind(wx.EVT_COMBOBOX, OnNewBinType) 606 dataSizer.Add(binSel,0,wx.ALIGN_CENTER_VERTICAL) 592 607 dataSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Inner/Outer 2-theta'),0, 593 wx.ALIGN_CENTER_VERTICAL) 594 608 wx.ALIGN_CENTER_VERTICAL) 595 609 IOtth = data['IOtth'] 596 610 littleSizer = wx.BoxSizer(wx.HORIZONTAL) … … 642 656 samabs.Bind(wx.EVT_CHECKBOX, OnSamAbs) 643 657 samabs.SetValue(data['SampleAbs'][1]) 644 littleSizer.Add(wx.StaticText(G2frame.dataDisplay,label='mu/R (0.00-2.0) '),0, 645 wx.ALIGN_CENTER_VERTICAL) 646 samabsVal = wx.TextCtrl(parent=G2frame.dataDisplay,value='%.3f'%(data['SampleAbs'][0]),style=wx.TE_PROCESS_ENTER) 658 if 'PWDR' in data['type']: 659 littleSizer.Add(wx.StaticText(G2frame.dataDisplay,label='mu/R (0.00-2.0) '),0, 660 wx.ALIGN_CENTER_VERTICAL) 661 elif 'SASD' in data['type']: 662 littleSizer.Add(wx.StaticText(G2frame.dataDisplay,label='transmission '),0, 663 wx.ALIGN_CENTER_VERTICAL) 664 samabsVal = wx.TextCtrl(parent=G2frame.dataDisplay,value='%.3f'%(data['SampleAbs'][0]),style=wx.TE_PROCESS_ENTER) 647 665 samabsVal.Bind(wx.EVT_TEXT_ENTER,OnSamAbsVal) 648 666 samabsVal.Bind(wx.EVT_KILL_FOCUS,OnSamAbsVal) 649 667 littleSizer.Add(samabsVal,0,wx.ALIGN_CENTER_VERTICAL) 650 668 dataSizer.Add(littleSizer,0,) 651 littleSizer = wx.BoxSizer(wx.HORIZONTAL) 652 oblique = wx.CheckBox(parent=G2frame.dataDisplay,label='Apply detector absorption?') 653 dataSizer.Add(oblique,0,wx.ALIGN_CENTER_VERTICAL) 654 oblique.Bind(wx.EVT_CHECKBOX, OnOblique) 655 oblique.SetValue(data['Oblique'][1]) 656 littleSizer.Add(wx.StaticText(G2frame.dataDisplay,label='Value (0.01-0.99) '),0, 657 wx.ALIGN_CENTER_VERTICAL) 658 obliqVal = wx.TextCtrl(parent=G2frame.dataDisplay,value='%.3f'%(data['Oblique'][0]),style=wx.TE_PROCESS_ENTER) 659 obliqVal.Bind(wx.EVT_TEXT_ENTER,OnObliqVal) 660 obliqVal.Bind(wx.EVT_KILL_FOCUS,OnObliqVal) 661 littleSizer.Add(obliqVal,0,wx.ALIGN_CENTER_VERTICAL) 662 dataSizer.Add(littleSizer,0,) 669 if 'PWDR' in data['type']: 670 littleSizer = wx.BoxSizer(wx.HORIZONTAL) 671 oblique = wx.CheckBox(parent=G2frame.dataDisplay,label='Apply detector absorption?') 672 dataSizer.Add(oblique,0,wx.ALIGN_CENTER_VERTICAL) 673 oblique.Bind(wx.EVT_CHECKBOX, OnOblique) 674 oblique.SetValue(data['Oblique'][1]) 675 littleSizer.Add(wx.StaticText(G2frame.dataDisplay,label='Value (0.01-0.99) '),0, 676 wx.ALIGN_CENTER_VERTICAL) 677 obliqVal = wx.TextCtrl(parent=G2frame.dataDisplay,value='%.3f'%(data['Oblique'][0]),style=wx.TE_PROCESS_ENTER) 678 obliqVal.Bind(wx.EVT_TEXT_ENTER,OnObliqVal) 679 obliqVal.Bind(wx.EVT_KILL_FOCUS,OnObliqVal) 680 littleSizer.Add(obliqVal,0,wx.ALIGN_CENTER_VERTICAL) 681 dataSizer.Add(littleSizer,0,) 663 682 if 'SASD' in data['type']: 664 683 littleSizer = wx.BoxSizer(wx.HORIZONTAL) -
trunk/GSASIIplot.py
r1190 r1199 390 390 ################################################################################ 391 391 392 def PlotPatterns(G2frame,newPlot=False ):392 def PlotPatterns(G2frame,newPlot=False,plotType='PWDR'): 393 393 '''Powder pattern plotting package - displays single or multiple powder patterns as intensity vs 394 394 2-theta, q or TOF. Can display multiple patterns as "waterfall plots" or contour plots. Log I … … 397 397 global HKL 398 398 global exclLines 399 plottype = plotType 399 400 def OnPlotKeyPress(event): 400 401 newPlot = False … … 488 489 dlg.Destroy() 489 490 490 PlotPatterns(G2frame,newPlot=newPlot )491 PlotPatterns(G2frame,newPlot=newPlot,plotType=plottype) 491 492 492 493 def OnMotion(event): … … 536 537 537 538 except TypeError: 538 G2frame.G2plotNB.status.SetStatusText('Select PWDRpowder pattern first',1)539 G2frame.G2plotNB.status.SetStatusText('Select '+plotType+' powder pattern first',1) 539 540 540 541 def OnPick(event): … … 565 566 data.append(XY) 566 567 G2pdG.UpdatePeakGrid(G2frame,data) 567 PlotPatterns(G2frame )568 PlotPatterns(G2frame,plotType=plottype) 568 569 else: #picked a peak list line 569 570 G2frame.itemPicked = pick … … 588 589 G2frame.PatternTree.SetItemPyData(LimitId,data) 589 590 G2pdG.UpdateLimitsGrid(G2frame,data) 590 wx.CallAfter(PlotPatterns,G2frame )591 wx.CallAfter(PlotPatterns,G2frame,plotType=plottype) 591 592 else: #picked a limit line 592 593 G2frame.itemPicked = pick … … 650 651 else: #1st row of refl ticks 651 652 G2frame.refOffset = event.ydata 652 PlotPatterns(G2frame )653 PlotPatterns(G2frame,plotType=plottype) 653 654 G2frame.itemPicked = None 654 655 … … 706 707 item, cookie = G2frame.PatternTree.GetFirstChild(G2frame.root) 707 708 while item: 708 if 'PWDR'in G2frame.PatternTree.GetItemText(item):709 if plotType in G2frame.PatternTree.GetItemText(item): 709 710 Pattern = G2frame.PatternTree.GetItemPyData(item) 710 711 if len(Pattern) < 3: # put name on end if needed … … 770 771 if Pattern[1] is None: continue # skip over uncomputed simulations 771 772 xye = ma.array(ma.getdata(Pattern[1])) 773 Zero = Parms.get('Zero',[0.,0.])[1] 772 774 if PickId: 773 775 ifpicked = Pattern[2] == G2frame.PatternTree.GetItemText(PatternId) … … 780 782 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root, Pattern[2]) 781 783 if 'C' in Parms['Type'][0]: 782 X = 4*np.pi*npsind((xye[0]- Parms['Zero'][1])/2.0)/wave784 X = 4*np.pi*npsind((xye[0]-Zero)/2.0)/wave 783 785 else: 784 X = 2*np.pi*Parms['difC'][1]/(xye[0]- Parms['Zero'][1])786 X = 2*np.pi*Parms['difC'][1]/(xye[0]-Zero) 785 787 else: 786 X = xye[0]- Parms['Zero'][1]788 X = xye[0]-Zero 787 789 if not lenX: 788 790 lenX = len(X) … … 814 816 if ifpicked: 815 817 Z = xye[3]+offset*N 816 W = xye[4]+offset*N 817 D = xye[5]-Ymax*G2frame.delOffset 818 if 'PWDR' in plotType: #powder background 819 W = xye[4]+offset*N 820 D = xye[5]-Ymax*G2frame.delOffset 821 elif 'SASD' in plotType: 822 D = xye[4]-Ymax*G2frame.delOffset 818 823 if G2frame.logPlot: 819 Plot.semilogy(X,Y,colors[N%6]+'+',picker=3.,clip_on=False,nonposy='mask') 820 Plot.semilogy(X,Z,colors[(N+1)%6],picker=False,nonposy='mask') 821 Plot.semilogy(X,W,colors[(N+2)%6],picker=False,nonposy='mask') 824 if 'PWDR' in plotType: 825 Plot.semilogy(X,Y,colors[N%6]+'+',picker=3.,clip_on=False,nonposy='mask') 826 Plot.semilogy(X,Z,colors[(N+1)%6],picker=False,nonposy='mask') 827 Plot.semilogy(X,W,colors[(N+2)%6],picker=False,nonposy='mask') 828 elif 'SASD' in plotType: 829 Plot.loglog(X,Y,colors[N%6]+'+',picker=3.,clip_on=False,nonposy='mask') 830 Plot.loglog(X,Z,colors[(N+1)%6],picker=False,nonposy='mask') 822 831 elif G2frame.Weight: 823 832 DY = xye[1]*np.sqrt(xye[2]) … … 830 839 Plot.axhline(0.,color=wx.BLACK) 831 840 else: 832 if G2frame.SubBack :841 if G2frame.SubBack and 'PWDR' in plotType: 833 842 Plot.plot(Xum,Y-W,colors[N%6]+'+',picker=3.,clip_on=False) 834 843 Plot.plot(X,Z-W,colors[(N+1)%6],picker=False) … … 836 845 Plot.plot(Xum,Y,colors[N%6]+'+',picker=3.,clip_on=False) 837 846 Plot.plot(X,Z,colors[(N+1)%6],picker=False) 838 Plot.plot(X,W,colors[(N+2)%6],picker=False) 847 if 'PWDR' in plotType: 848 Plot.plot(X,W,colors[(N+2)%6],picker=False) 839 849 Plot.plot(X,D,colors[(N+3)%6],picker=False) 840 850 Plot.axhline(0.,color=wx.BLACK) … … 858 868 else: 859 869 if G2frame.logPlot: 860 Plot.semilogy(X,Y,colors[N%6],picker=False,nonposy='clip') 870 if 'PWDR' in plotType: 871 Plot.semilogy(X,Y,colors[N%6],picker=False,nonposy='mask') 872 elif 'SASD' in plotType: 873 Plot.loglog(X,Y,colors[N%6],picker=False,nonposy='mask') 861 874 else: 862 875 Plot.plot(X,Y,colors[N%6],picker=False) 876 if G2frame.logPlot: 877 Plot.set_ylim(bottom=np.min(np.trim_zeros(Y))/2.) 863 878 if PickId and not G2frame.Contour: 864 879 Parms,Parms2 = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters')) -
trunk/GSASIIpwdGUI.py
r1177 r1199 67 67 'Scale':[1.0,True],'Type':'Debye-Scherrer','Absorption':[0.0,False], 68 68 'DisplaceX':[0.0,False],'DisplaceY':[0.0,False],'Diffuse':[], 69 'Temperature':300.,'Pressure': 1.0,69 'Temperature':300.,'Pressure':0.1, 70 70 'FreePrm1':0.,'FreePrm2':0.,'FreePrm3':0., 71 71 'Gonio. radius':200.0, … … 693 693 694 694 def UpdateInstrumentGrid(G2frame,data): 695 '''respond to selection of PWDR Instrument Parameters695 '''respond to selection of PWDR/SASD Instrument Parameters 696 696 data tree item. 697 697 ''' … … 714 714 del(insVal['Polariz.']) 715 715 del(insRef['Polariz.']) 716 else: #single crystal data 716 elif 'S' in data['Type'][0]: #single crystal data 717 insVal = dict(zip(keys,[data[key][1] for key in keys])) 718 insDef = dict(zip(keys,[data[key][0] for key in keys])) 719 insRef = {} 720 elif 'L' in data['Type'][0]: #low angle data 717 721 insVal = dict(zip(keys,[data[key][1] for key in keys])) 718 722 insDef = dict(zip(keys,[data[key][0] for key in keys])) … … 1065 1069 instSizer.Add(itemRef,0,wx.ALIGN_CENTER_VERTICAL) 1066 1070 1067 el se: #single crystal data1071 elif 'S' in insVal['Type']: #single crystal data 1068 1072 if 'C' in insVal['Type']: #constant wavelength 1069 1073 instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,u' Lam (\xc5): (%10.6f)'%(insDef['Lam'])), … … 1073 1077 waveVal.Bind(wx.EVT_KILL_FOCUS,OnWaveValue) 1074 1078 instSizer.Add(waveVal,0,wx.ALIGN_CENTER_VERTICAL) 1079 else: #time of flight (neutrons) 1080 pass #for now 1081 elif 'L' in insVal['Type']: 1082 if 'C' in insVal['Type']: 1083 instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,u' Lam (\xc5): (%10.6f)'%(insDef['Lam'])), 1084 0,wx.ALIGN_CENTER_VERTICAL) 1085 waveVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,'%10.6f'%(insVal['Lam']),style=wx.TE_PROCESS_ENTER) 1086 waveVal.Bind(wx.EVT_TEXT_ENTER,OnWaveValue) 1087 waveVal.Bind(wx.EVT_KILL_FOCUS,OnWaveValue) 1088 instSizer.Add(waveVal,0,wx.ALIGN_CENTER_VERTICAL) 1089 instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' Azimuth: %7.2f'%(insVal['Azimuth'])),0,wx.ALIGN_CENTER_VERTICAL) 1075 1090 else: #time of flight (neutrons) 1076 1091 pass #for now … … 1088 1103 1089 1104 def UpdateSampleGrid(G2frame,data): 1090 '''respond to selection of PWDR Sample Parameters1105 '''respond to selection of PWDR/SASD Sample Parameters 1091 1106 data tree item. 1092 1107 ''' … … 1095 1110 dataType = data['Type'] 1096 1111 histType = 'HKLF' 1097 if 'PWDR' in histName: #else HKLF - only Scale1112 if 'PWDR' in histName: 1098 1113 histType = 'PWDR' 1099 1114 if 'Debye' in dataType: … … 1101 1116 else: #Bragg-Brentano 1102 1117 copyNames += ['Shift','Transparency','SurfRoughA','SurfRoughB'] 1118 elif 'SASD' in histName: 1119 histType = 'SASD' 1103 1120 if len(addNames): 1104 1121 copyNames += addNames … … 1156 1173 1157 1174 def OnSampleCopy(event): 1158 histName = G2frame.PatternTree.GetItemText(G2frame.PatternId) 1159 histType,copyNames = SetCopyNames( 1160 histName, 1175 histType,copyNames = SetCopyNames(histName, 1161 1176 addNames=['Omega','Chi','Phi','Gonio. radius','InstrName']) 1162 1177 copyDict = {} … … 1210 1225 1211 1226 def OnSampleFlagCopy(event): 1212 histName = G2frame.PatternTree.GetItemText(G2frame.PatternId)1213 1227 histType,copyNames = SetCopyNames(histName) 1214 1228 flagDict = {} … … 1277 1291 #reload(G2gd) 1278 1292 ###################################################################### 1293 histName = G2frame.PatternTree.GetItemText(G2frame.PatternId) 1279 1294 if G2frame.dataDisplay: 1280 1295 G2frame.dataFrame.Clear() … … 1311 1326 if 'FreePrm3' not in data: 1312 1327 data['FreePrm3'] = 0. 1313 if 'SurfRoughA' not in data :1328 if 'SurfRoughA' not in data and 'PWDR' in histName: 1314 1329 data['SurfRoughA'] = [0.,False] 1315 1330 data['SurfRoughB'] = [0.,False] … … 1319 1334 parms.append(['Scale','Histogram scale factor: ',[10,4]]) 1320 1335 parms.append(['Gonio. radius','Goniometer radius (mm): ',[10,3]]) 1321 if data['Type'] == 'Debye-Scherrer': 1322 parms += [['DisplaceX',u'Sample X displ. perp. to beam (\xb5m): ',[10,3]], 1323 ['DisplaceY',u'Sample Y displ. || to beam (\xb5m): ',[10,3]], 1324 ['Absorption',u'Sample absorption (\xb5\xb7r): ',[10,4]],] 1325 elif data['Type'] == 'Bragg-Brentano': 1326 parms += [['Shift',u'Sample displacement(\xb5m): ',[10,4]], 1327 ['Transparency',u'Sample transparency(1/\xb5eff, cm): ',[10,3]], 1328 ['SurfRoughA','Surface roughness A: ',[10,4]], 1329 ['SurfRoughB','Surface roughness B: ',[10,4]]] 1336 if 'PWDR' in histName: 1337 if data['Type'] == 'Debye-Scherrer': 1338 parms += [['DisplaceX',u'Sample X displ. perp. to beam (\xb5m): ',[10,3]], 1339 ['DisplaceY',u'Sample Y displ. || to beam (\xb5m): ',[10,3]], 1340 ['Absorption',u'Sample absorption (\xb5\xb7r): ',[10,4]],] 1341 elif data['Type'] == 'Bragg-Brentano': 1342 parms += [['Shift',u'Sample displacement(\xb5m): ',[10,4]], 1343 ['Transparency',u'Sample transparency(1/\xb5eff, cm): ',[10,3]], 1344 ['SurfRoughA','Surface roughness A: ',[10,4]], 1345 ['SurfRoughB','Surface roughness B: ',[10,4]]] 1330 1346 parms.append(['Omega','Goniometer omega:',[10,3]]) 1331 1347 parms.append(['Chi','Goniometer chi:',[10,3]]) … … 1351 1367 mainSizer.Add((5,5),0) 1352 1368 1353 nameSizer = wx.BoxSizer(wx.HORIZONTAL) 1354 nameSizer.Add(wx.StaticText(G2frame.dataDisplay,wx.ID_ANY,' Diffractometer type: '), 1355 0,wx.ALIGN_CENTER_VERTICAL) 1356 choices = ['Debye-Scherrer','Bragg-Brentano',] 1357 histoType = wx.ComboBox(G2frame.dataDisplay,wx.ID_ANY,value=data['Type'],choices=choices, 1358 style=wx.CB_READONLY|wx.CB_DROPDOWN) 1359 histoType.Bind(wx.EVT_COMBOBOX, OnHistoType) 1360 nameSizer.Add(histoType) 1361 mainSizer.Add(nameSizer,0,wx.EXPAND,1) 1362 mainSizer.Add((5,5),0) 1369 if 'PWDR' in histName: 1370 nameSizer = wx.BoxSizer(wx.HORIZONTAL) 1371 nameSizer.Add(wx.StaticText(G2frame.dataDisplay,wx.ID_ANY,' Diffractometer type: '), 1372 0,wx.ALIGN_CENTER_VERTICAL) 1373 choices = ['Debye-Scherrer','Bragg-Brentano',] 1374 histoType = wx.ComboBox(G2frame.dataDisplay,wx.ID_ANY,value=data['Type'],choices=choices, 1375 style=wx.CB_READONLY|wx.CB_DROPDOWN) 1376 histoType.Bind(wx.EVT_COMBOBOX, OnHistoType) 1377 nameSizer.Add(histoType) 1378 mainSizer.Add(nameSizer,0,wx.EXPAND,1) 1379 mainSizer.Add((5,5),0) 1363 1380 1364 1381 parmSizer = wx.FlexGridSizer(10,2,5,0) -
trunk/imports/G2pwd_xye.py
r1168 r1199 21 21 import GSASIIpath 22 22 GSASIIpath.SetVersionNumber("$Revision$") 23 npasind = lambda x: 180.*np.arcsin(x)/np.pi 23 24 24 25 class xye_ReaderClass(G2IO.ImportPowderData): … … 134 135 traceback.print_exc(file=sys.stdout) 135 136 return False 137 138 class qxye_ReaderClass(G2IO.ImportPowderData): 139 'Routines to import q data from a .xye file' 140 def __init__(self): 141 super(self.__class__,self).__init__( # fancy way to self-reference 142 extensionlist=('.xye','.txt','.dat'), 143 strictExtension=False, 144 formatName = 'q step xye', 145 longFormatName = 'q stepped data file' 146 ) 147 148 # Validate the contents -- make sure we only have valid lines 149 def ContentsValidator(self, filepointer): 150 'Look through the file for expected types of lines in a valid q-step file' 151 gotCcomment = False 152 begin = True 153 for i,S in enumerate(filepointer): 154 if i > 1000: break 155 if begin: 156 if gotCcomment and S.find('*/') > -1: 157 begin = False 158 continue 159 if S.strip().startswith('/*'): 160 gotCcomment = True 161 continue 162 if S[0] == '#': 163 continue #ignore comments, if any 164 elif len(S) == 1: 165 continue #ignore blank lines 166 else: 167 begin = False 168 # valid line to read? 169 vals = S.split() 170 if len(vals) == 2 or len(vals) == 3: 171 continue 172 else: 173 self.errors = 'Unexpected information in line: '+str(i+1) 174 self.errors += ' '+str(S) 175 return False 176 return True # no errors encountered 177 178 def Reader(self,filename,filepointer, ParentFrame=None, **unused): 179 'Read a q-step file' 180 x = [] 181 y = [] 182 w = [] 183 try: 184 wave = 1.5428 #Cuka default 185 Temperature = 300 186 for S in self.comments: 187 if 'Wave' in S.split('=')[0]: 188 try: 189 wave = float(S.split('=')[1]) 190 except: 191 pass 192 elif 'Temp' in S.split('=')[0]: 193 try: 194 Temperature = float(S.split('=')[1]) 195 except: 196 pass 197 self.instdict['wave'] = wave 198 gotCcomment = False 199 begin = True 200 for i,S in enumerate(filepointer): 201 self.errors = 'Error reading line: '+str(i+1) 202 # or a block of comments delimited by /* and */ 203 # or (GSAS style) each line can begin with '#' 204 if begin: 205 if gotCcomment and S.find('*/') > -1: 206 self.comments.append(S[:-1]) 207 begin = False 208 continue 209 if S.strip().startswith('/*'): 210 self.comments.append(S[:-1]) 211 gotCcomment = True 212 continue 213 if S[0] == '#': 214 self.comments.append(S[:-1]) 215 continue #ignore comments, if any 216 elif len(S) == 1: #blank line only CR/LF 217 continue 218 else: 219 begin = False 220 # valid line to read 221 vals = S.split() 222 try: 223 x.append(2.*npasind(wave*float(vals[0])/(4.*np.pi))) 224 f = float(vals[1]) 225 if f <= 0.0: 226 y.append(0.0) 227 w.append(1.0) 228 elif len(vals) == 3: 229 y.append(float(vals[1])) 230 w.append(1.0/float(vals[2])**2) 231 else: 232 y.append(float(vals[1])) 233 w.append(1.0/float(vals[1])) 234 except ValueError: 235 msg = 'Error in line '+str(i+1) 236 print msg 237 break 238 N = len(x) 239 self.powderdata = [ 240 np.array(x), # x-axis values 241 np.array(y), # powder pattern intensities 242 np.array(w), # 1/sig(intensity)^2 values (weights) 243 np.zeros(N), # calc. intensities (zero) 244 np.zeros(N), # calc. background (zero) 245 np.zeros(N), # obs-calc profiles 246 ] 247 self.powderentry[0] = filename 248 #self.powderentry[1] = pos # bank offset (N/A here) 249 self.powderentry[2] = 1 # xye file only has one bank 250 self.idstring = ospath.basename(filename) 251 # scan comments for temperature 252 self.Sample['Temperature'] = Temperature 253 254 return True 255 except Exception as detail: 256 self.errors += '\n '+str(detail) 257 print self.formatName+' read error:'+str(detail) # for testing 258 import traceback 259 traceback.print_exc(file=sys.stdout) 260 return False
Note: See TracChangeset
for help on using the changeset viewer.