Changeset 1263
- Timestamp:
- Mar 26, 2014 2:15:16 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIgrid.py
r1262 r1263 135 135 ] = [wx.NewId() for item in range(1)] 136 136 137 [ wxID_MODELCOPY,wxID_MODELFIT,wxID_ ELEMENTADD,wxID_ELEMENTDELETE,wxID_ADDSUBSTANCE,138 wxID_ LOADSUBSTANCE,wxID_DELETESUBSTANCE,wxID_COPYSUBSTANCE,139 ] = [wx.NewId() for item in range( 8)]137 [ wxID_MODELCOPY,wxID_MODELFIT,wxID_MODELADD,wxID_ELEMENTADD,wxID_ELEMENTDELETE, 138 wxID_ADDSUBSTANCE,wxID_LOADSUBSTANCE,wxID_DELETESUBSTANCE,wxID_COPYSUBSTANCE, 139 ] = [wx.NewId() for item in range(9)] 140 140 141 141 [ wxID_SELECTPHASE, … … 304 304 # When the mouse is moved away or the widget loses focus, 305 305 # display the last saved value, if an expression 306 self.Bind(wx.EVT_LEAVE_WINDOW, self._onLeaveWindow) 306 # self.Bind(wx.EVT_LEAVE_WINDOW, self._onLeaveWindow) #leads to weird behavior 307 307 self.Bind(wx.EVT_TEXT_ENTER, self._onLoseFocus) 308 308 self.Bind(wx.EVT_KILL_FOCUS, self._onLoseFocus) … … 2604 2604 self.ModelEdit = wx.Menu(title='') 2605 2605 self.ModelMenu.Append(menu=self.ModelEdit, title='Models') 2606 self.ModelEdit.Append(id=wxID_MODELADD,kind=wx.ITEM_NORMAL,text='Add', 2607 help='Add new term to model') 2606 2608 self.ModelEdit.Append(id=wxID_MODELFIT, kind=wx.ITEM_NORMAL,text='Fit', 2607 2609 help='Fit model parameters to data') -
trunk/GSASIIpwdGUI.py
r1260 r1263 43 43 VERY_LIGHT_GREY = wx.Colour(235,235,235) 44 44 WACV = wx.ALIGN_CENTER_VERTICAL 45 Pwr10 = unichr(0x0b9)+unichr(0x0b0) 46 Pwr20 = unichr(0x0b2)+unichr(0x0b0) 47 Pwrm1 = unichr(0x207b)+unichr(0x0b9) 48 Pwrm2 = unichr(0x207b)+unichr(0x0b2) 49 Pwrm4 = unichr(0x207b)+unichr(0x2074) #really -d but looks like -4 as a superscript 45 50 # trig functions in degrees 46 51 sind = lambda x: math.sin(x*math.pi/180.) … … 88 93 'IPG':{'Niter':100,'Approach':0.8,'Power':-1},'Reg':{},}, 89 94 'Unified':{'Levels':[],}, 90 'Particle':{' Levels':[],},95 'Particle':{'Matrix':{'Name':'vacuum','VolFrac':[0.0,False]},'Levels':[],}, 91 96 'Current':'Size dist.', 92 97 } … … 2380 2385 2381 2386 Indx = {} 2382 Pwr10 = unichr(0x0b9)+unichr(0x0b0)2383 Pwrm2 = unichr(0x207b)+unichr(0x0b2)2384 Pwrm1 = unichr(0x207b)+unichr(0x0b9)2385 2387 substSizer = wx.BoxSizer(wx.VERTICAL) 2386 2388 substSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Substance list: wavelength: %.5fA'%(wave)), … … 2397 2399 Substance = data['Substances'][name] 2398 2400 Elems = Substance['Elements'] 2399 for El in Elems: 2401 for El in Elems: #do elements as pull downs for isotopes for neutrons 2400 2402 elSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' '+El+': '), 2401 2403 0,WACV) … … 2425 2427 label=' Scattering density : %.2f *10%scm%s'%(Substance['Scatt density'],Pwr10,Pwrm2)), 2426 2428 0,WACV) 2427 substSizer.Add(wx.StaticText(G2frame.dataDisplay, 2429 substSizer.Add(wx.StaticText(G2frame.dataDisplay, #allow neutrons here into NAnom density & NAbsorption 2428 2430 label=' Anomalous density : %.2f *10%scm%s'%(Substance['XAnom density'],Pwr10,Pwrm2)), 2429 2431 0,WACV) … … 2480 2482 if 'Power' not in data['Size']['IPG']: 2481 2483 data['Size']['IPG']['Power'] = -1 2484 if 'Matrix' not in data['Particle']: 2485 data['Particle']['Matrix'] = {'Name':'vacuum','VolFrac':[0.0,False]} 2482 2486 #end patches 2483 2487 … … 2485 2489 print 'copy model' 2486 2490 print data 2491 2492 def OnAddModel(event): 2493 if data['Current'] == 'Particle fit': 2494 data['Particle']['Levels'].append({'Selected':'Volume', 2495 'Controls':{'FormFact':'Sphere','DistType':'LogNormal','Material':'vacuum','FFargs':{}}, 2496 'LogNormal':{'Volume':[0.05,False],'MinSize':[10.,False],'Mean':[100.,False],'StdDev':[10.,False]}, 2497 'Gaussian':{'Volume':[0.05,False],'Mean':[100.,False],'StdDev':[10.,False],}, 2498 'LSW':{'Volume':[0.05,False],'Position':[100.0,False],}, 2499 'Schulz-Zimm':{'Volume':[0.05,False],'Mean':[100.,False],'StdDev':[10.,False],} 2500 }) 2501 2502 elif data['Current'] == 'Unified fit': 2503 data['Unified']['Levels'].append({'Type':'Guinier','GuinScale':[100,False],'RadGyr':[100,False], 2504 'PorodScale':[0.01,False],'PorodPwr':[4.,False],}) 2505 wx.CallAfter(UpdateModelsGrid,G2frame,data) 2487 2506 2488 2507 def OnFitModel(event): … … 2497 2516 G2plt.PlotPatterns(G2frame,plotType='SASD',newPlot=True) 2498 2517 G2plt.PlotSASDSizeDist(G2frame) 2499 2518 2519 elif data['Current'] == 'Unified fit': 2520 G2sasd.UnifiedFit(Profile,ProfDict,Limits,Substances,Sample,data) 2521 G2plt.PlotPatterns(G2frame,plotType='SASD',newPlot=True) 2522 2523 elif data['Current'] == 'Particle fit': 2524 G2sasd.ModelFit(Profile,ProfDict,Limits,Substances,Sample,data) 2525 G2plt.PlotPatterns(G2frame,plotType='SASD',newPlot=True) 2526 2500 2527 def OnSelectFit(event): 2501 2528 data['Current'] = fitSel.GetValue() … … 2564 2591 mindiam = wx.ComboBox(G2frame.dataDisplay,value=str(data['Size']['MinDiam']),choices=minDias, 2565 2592 style=wx.CB_DROPDOWN) 2593 mindiam.Bind(wx.EVT_LEAVE_WINDOW,OnIntVal) 2566 2594 mindiam.Bind(wx.EVT_TEXT_ENTER,OnIntVal) 2567 2595 mindiam.Bind(wx.EVT_KILL_FOCUS,OnIntVal) … … 2572 2600 maxdiam = wx.ComboBox(G2frame.dataDisplay,value=str(data['Size']['MaxDiam']),choices=maxDias, 2573 2601 style=wx.CB_DROPDOWN) 2602 maxdiam.Bind(wx.EVT_LEAVE_WINDOW,OnIntVal) 2574 2603 maxdiam.Bind(wx.EVT_TEXT_ENTER,OnIntVal) 2575 2604 maxdiam.Bind(wx.EVT_KILL_FOCUS,OnIntVal) … … 2637 2666 2638 2667 def PartSizer(): 2639 for item in data['Particle']: print item,data['Particle'][item] 2668 2669 ffChoices = {'Sphere':{},'Spheroid':{'Aspect ratio':[1.0,False]}, 2670 'Cylinder':{'Length':[100.,False]},'CylinderD':{'Diameter':[100.,False]}, 2671 'CylinderAR':{'Aspect ratio':[1.0,False]},'UniSphere':{}, 2672 'UniRod':{'Length':[100.,False]},'UniRodAR':{'Aspect ratio':[1.0,False]}, 2673 'UniDisk':{'Thickness':[100.,False]}, 2674 'UniTube':{'Length':[100.,False],'Thickness':[10.,False]},} 2675 2676 def OnValue(event): 2677 Obj = event.GetEventObject() 2678 item,parm,selected,sldrObj = Indx[Obj.GetId()] 2679 try: 2680 value = float(Obj.GetValue()) 2681 if value <= 0.: 2682 raise ValueError 2683 except ValueError: 2684 value = item[0] 2685 item[0] = value 2686 Obj.SetValue('%.3g'%(value)) 2687 if parm == selected: 2688 sldrObj.SetRange(1000.*(np.log10(value)-2),1000.*(np.log10(value)+2)) 2689 sldrObj.SetValue(1000.*np.log10(value)) 2690 2691 def AfterChange(invalid,value,tc): 2692 if invalid: 2693 return 2694 parm,selected,sldrObj = Indx[tc.GetId()] 2695 print 'Change',parm,value 2696 if parm == selected: 2697 sldrObj.SetRange(1000.*(np.log10(value)-2),1000.*(np.log10(value)+2)) 2698 sldrObj.SetValue(1000.*np.log10(value)) 2699 #want to update function & plot it here 2700 2701 def OnSelect(event): 2702 Obj = event.GetEventObject() 2703 item,key = Indx[Obj.GetId()] 2704 item[key] = Obj.GetValue() 2705 if 'Refine' not in Obj.GetLabel(): 2706 if 'FormFact' in key: 2707 item['FFargs'] = ffChoices[Obj.GetValue()] 2708 wx.CallAfter(UpdateModelsGrid,G2frame,data) 2709 2710 def OnDelLevel(event): 2711 Obj = event.GetEventObject() 2712 item = Indx[Obj.GetId()] 2713 del data['Particle']['Levels'][item] 2714 wx.CallAfter(UpdateModelsGrid,G2frame,data) 2715 2716 def OnRadio(event): 2717 Obj = event.GetEventObject() 2718 parm,item,key,sldrObj,parmObj = Indx[Obj.GetId()] 2719 Indx[sldrObj.GetId()][2] = parmObj 2720 item[key] = Obj.GetLabel() 2721 value = parm[0] 2722 sldrObj.SetRange(1000.*(np.log10(value)-2),1000.*(np.log10(value)+2)) 2723 sldrObj.SetValue(1000.*np.log10(value)) 2724 2725 def OnSlider(event): 2726 Obj = event.GetEventObject() 2727 item,key,pvObj = Indx[Obj.GetId()] 2728 item[key] = 10.**float(Obj.GetValue()/1000.) 2729 pvObj.SetValue('%.3g'%(item[key])) 2730 2731 Indx = {} 2640 2732 partSizer = wx.BoxSizer(wx.VERTICAL) 2641 partSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Particle fit parameters: '),0,WACV) 2733 topSizer = wx.BoxSizer(wx.HORIZONTAL) 2734 topSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Particle fit parameters: '),0,WACV) 2735 topSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Matrix: '),0,WACV) 2736 matsel = wx.ComboBox(G2frame.dataDisplay,value=data['Particle']['Matrix']['Name'], 2737 choices=Substances['Substances'].keys(),style=wx.CB_READONLY|wx.CB_DROPDOWN) 2738 Indx[matsel.GetId()] = [data['Particle']['Matrix'],'Name'] 2739 matsel.Bind(wx.EVT_COMBOBOX,OnSelect) #Do neutron test here? 2740 rhoMat = Substances['Substances'][data['Particle']['Matrix']['Name']].get('XAnom density',0.0) 2741 topSizer.Add(matsel,0,WACV) 2742 topSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Volume fraction: '),0,WACV) 2743 volfrac = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,data['Particle']['Matrix']['VolFrac'],0, 2744 typeHint=float,OnLeave=AfterChange) 2745 topSizer.Add(volfrac,0,WACV) 2746 volVar = wx.CheckBox(G2frame.dataDisplay,label=' Refine?') 2747 volVar.SetValue(data['Particle']['Matrix']['VolFrac'][1]) 2748 Indx[volVar.GetId()] = [data['Particle']['Matrix']['VolFrac'],1] 2749 volVar.Bind(wx.EVT_CHECKBOX, OnSelect) 2750 topSizer.Add(volVar,0,WACV) 2751 partSizer.Add(topSizer,0,) 2752 for ilev,level in enumerate(data['Particle']['Levels']): 2753 G2gd.HorizontalLine(partSizer,G2frame.dataDisplay) 2754 topLevel = wx.BoxSizer(wx.HORIZONTAL) 2755 topLevel.Add(wx.StaticText(G2frame.dataDisplay,label=' Model level %d: '%(ilev)),0,WACV) 2756 delBtn = wx.Button(G2frame.dataDisplay,label=' Delete?') 2757 Indx[delBtn.GetId()] = ilev 2758 delBtn.Bind(wx.EVT_BUTTON,OnDelLevel) 2759 topLevel.Add(delBtn,0,WACV) 2760 partSizer.Add(topLevel,0) 2761 ctrlSizer = wx.FlexGridSizer(0,4,5,5) 2762 ctrlSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Form Factor: '),0,WACV) 2763 ffChoice = wx.ComboBox(G2frame.dataDisplay,value=level['Controls']['FormFact'],choices=ffChoices.keys(), 2764 style=wx.CB_READONLY|wx.CB_DROPDOWN) 2765 Indx[ffChoice.GetId()] = [level['Controls'],'FormFact'] 2766 ffChoice.Bind(wx.EVT_COMBOBOX,OnSelect) 2767 ctrlSizer.Add(ffChoice,0,WACV) 2768 ctrlSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Distribution: '),0,WACV) 2769 Distchoice = ['LogNormal','Gaussian','LSW','Schulz-Zimm'] 2770 distChoice = wx.ComboBox(G2frame.dataDisplay,value=level['Controls']['DistType'],choices=Distchoice, 2771 style=wx.CB_READONLY|wx.CB_DROPDOWN) 2772 Indx[distChoice.GetId()] = [level['Controls'],'DistType'] 2773 distChoice.Bind(wx.EVT_COMBOBOX,OnSelect) 2774 ctrlSizer.Add(distChoice,0,WACV) 2775 ctrlSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Material: '),0,WACV) 2776 matSel = wx.ComboBox(G2frame.dataDisplay,value=level['Controls']['Material'], 2777 choices=Substances['Substances'].keys(),style=wx.CB_READONLY|wx.CB_DROPDOWN) 2778 Indx[matSel.GetId()] = [level['Controls'],'Material'] 2779 matSel.Bind(wx.EVT_COMBOBOX,OnSelect) 2780 ctrlSizer.Add(matSel,0,WACV) #do neutron test here? 2781 rho = Substances['Substances'][level['Controls']['Material']].get('XAnom density',0.0) 2782 contrast = rho**2-rhoMat**2 2783 ctrlSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Resonant X-ray contrast: '),0,WACV) 2784 ctrlSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' %.2f 10%scm%s'%(contrast,Pwr20,Pwrm4)),0,WACV) 2785 2786 partSizer.Add(ctrlSizer,0) 2787 lvlSizer = wx.BoxSizer(wx.HORIZONTAL) 2788 parmSizer = wx.FlexGridSizer(0,3,5,5) 2789 Parms = level[level['Controls']['DistType']] 2790 FFargs = level['Controls']['FFargs'] 2791 parm = level['Selected'] 2792 value = np.log10(Parms[parm][0]) 2793 valMinMax = [value-2,value+2] 2794 valueSldr = wx.Slider(parent=G2frame.dataDisplay,minValue=1000.*valMinMax[0], 2795 maxValue=1000.*valMinMax[1],style=wx.SL_VERTICAL|wx.SL_INVERSE,value=1000.*value) 2796 sldrId = valueSldr.GetId() 2797 for iparm,parm in enumerate(list(Parms)): 2798 if not iparm: 2799 radio = wx.RadioButton(G2frame.dataDisplay,label=parm,style=wx.RB_GROUP) 2800 else: 2801 radio = wx.RadioButton(G2frame.dataDisplay,label=parm) 2802 Indx[radio.GetId()] = [Parms[parm],level,'Selected',valueSldr] 2803 radio.Bind(wx.EVT_RADIOBUTTON,OnRadio) 2804 parmSizer.Add(radio,0,WACV) 2805 parmValue = wx.TextCtrl(G2frame.dataDisplay,value='%.3g'%(Parms[parm][0]), 2806 style=wx.TE_PROCESS_ENTER) 2807 parmValue.Bind(wx.EVT_TEXT_ENTER,OnValue) 2808 parmValue.Bind(wx.EVT_KILL_FOCUS,OnValue) 2809 # parmValue = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,Parms[parm],0, 2810 # typeHint=float,OnLeave=AfterChange) 2811 Indx[parmValue.GetId()] = [Parms[parm],parm,level['Selected'],valueSldr] 2812 Indx[radio.GetId()].append(parmValue) 2813 if parm == level['Selected']: 2814 radio.SetValue(True) 2815 pvObj = parmValue 2816 parmSizer.Add(parmValue,0,WACV) 2817 parmVar = wx.CheckBox(G2frame.dataDisplay,label='Refine?') 2818 parmVar.SetValue(Parms[parm][1]) 2819 Indx[parmVar.GetId()] = [Parms[parm],1] 2820 parmVar.Bind(wx.EVT_CHECKBOX, OnSelect) 2821 parmSizer.Add(parmVar,0,WACV) 2822 for parm in list(FFargs): 2823 radio = wx.RadioButton(G2frame.dataDisplay,label=parm) 2824 Indx[radio.GetId()] = [FFargs[parm],level,'Selected',valueSldr] 2825 radio.Bind(wx.EVT_RADIOBUTTON,OnRadio) 2826 parmSizer.Add(radio,0,WACV) 2827 parmValue = wx.TextCtrl(G2frame.dataDisplay,value='%.3g'%(FFargs[parm][0]), 2828 style=wx.TE_PROCESS_ENTER) 2829 parmValue.Bind(wx.EVT_TEXT_ENTER,OnValue) 2830 parmValue.Bind(wx.EVT_KILL_FOCUS,OnValue) 2831 # parmValue = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,FFargs[parm],0, 2832 # typeHint=float,OnLeave=AfterChange) 2833 Indx[parmValue.GetId()] = [FFargs[parm],parm,level['Selected'],valueSldr] 2834 Indx[radio.GetId()].append(parmValue) 2835 if parm == level['Selected']: 2836 radio.SetValue(True) 2837 pvObj = parmValue 2838 parmSizer.Add(parmValue,0,WACV) 2839 parmVar = wx.CheckBox(G2frame.dataDisplay,label='Refine?') 2840 parmVar.SetValue(FFargs[parm][1]) 2841 Indx[parmVar.GetId()] = [FFargs[parm],1] 2842 parmVar.Bind(wx.EVT_CHECKBOX, OnSelect) 2843 parmSizer.Add(parmVar,0,WACV) 2844 lvlSizer.Add(parmSizer,0,) 2845 Indx[sldrId] = [Parms[level['Selected']],0,pvObj] 2846 valueSldr.Bind(wx.EVT_SCROLL,OnSlider) 2847 lvlSizer.Add(valueSldr,1,wx.EXPAND) 2848 partSizer.Add(lvlSizer,0,) 2642 2849 return partSizer 2643 2850 2644 2851 def UnifSizer(): 2645 for item in data['Unified']: print item,data['Unified'][item]2852 print data['Unified'] 2646 2853 unifSizer = wx.BoxSizer(wx.VERTICAL) 2647 2854 unifSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Unified fit parameters: '),0,WACV) … … 2674 2881 G2frame.dataFrame.Bind(wx.EVT_MENU, OnCopyModel, id=G2gd.wxID_MODELCOPY) 2675 2882 G2frame.dataFrame.Bind(wx.EVT_MENU, OnFitModel, id=G2gd.wxID_MODELFIT) 2883 G2frame.dataFrame.Bind(wx.EVT_MENU, OnAddModel, id=G2gd.wxID_MODELADD) 2676 2884 Indx = {} 2677 2885 mainSizer = wx.BoxSizer(wx.VERTICAL) -
trunk/GSASIIsasd.py
r1260 r1263 783 783 data['Size']['Distribution'] = [Bins,Dbins,BinMag/(2.*Dbins)] 784 784 785 ################################################################################ 786 #### Unified fit 787 ################################################################################ 788 789 def UnifiedFit(Profile,ProfDict,Limits,Substances,Sample,data): 790 print 'do unified fit' 791 792 def UnifiedFxn(Q,G,Rg,B,Rgcf,P,SQfxn,args=[]): 793 termA = G*np.exp(-((Q*Rg)**2)/3.) 794 termB = B*np.exp(-((Q*Rgcf)**2)/3.) 795 termC = (scsp.erf(Q*Rg/np.sqrt(6))**3/Q)**P 796 return SQfxn(Q,args)*termA+(termB*termC) 797 798 799 800 ################################################################################ 801 #### Modelling 802 ################################################################################ 803 804 def ModelFit(Profile,ProfDict,Limits,Substances,Sample,data): 805 print 'do model fit' 806 785 807 786 808 ################################################################################ -
trunk/imports/G2sad_xye.py
r1230 r1263 8 8 ########### SVN repository information ################### 9 9 ''' 10 *Module G2sad_xye: small angle q step . xyedata*10 *Module G2sad_xye: small angle q step .sad data* 11 11 ------------------------------------ 12 12 … … 23 23 npasind = lambda x: 180.*np.arcsin(x)/np.pi 24 24 25 class txt_ ReaderClass(G2IO.ImportSmallAngleData):26 'Routines to import q SAXD data from a .txt or .dat file'25 class txt_XRayReaderClass(G2IO.ImportSmallAngleData): 26 'Routines to import X-ray q SAXD data from a .xsad or .xdat file' 27 27 def __init__(self): 28 28 super(self.__class__,self).__init__( # fancy way to self-reference 29 extensionlist=('. txt','.dat'),29 extensionlist=('.xsad','.xdat'), 30 30 strictExtension=False, 31 formatName = 'q step QIE data',32 longFormatName = 'q stepped text data file in Q,I,E order; E optional'31 formatName = 'q step X-ray QIE data', 32 longFormatName = 'q stepped X-ray text data file in Q,I,E order; E optional' 33 33 ) 34 34 … … 121 121 traceback.print_exc(file=sys.stdout) 122 122 return False 123 124 class txt_CWNeutronReaderClass(G2IO.ImportSmallAngleData): 125 'Routines to import neutron CW q SAXD data from a .nsad or .ndat file' 126 def __init__(self): 127 super(self.__class__,self).__init__( # fancy way to self-reference 128 extensionlist=('.nsad','.ndat'), 129 strictExtension=False, 130 formatName = 'q step neutron CW QIE data', 131 longFormatName = 'q stepped neutron CW text data file in Q,I,E order; E optional' 132 ) 133 134 # Validate the contents -- make sure we only have valid lines 135 def ContentsValidator(self, filepointer): 136 'Look through the file for expected types of lines in a valid q-step file' 137 Ndata = 0 138 for i,S in enumerate(filepointer): 139 vals = S.split() 140 if len(vals) >= 2: 141 try: 142 data = [float(val) for val in vals] 143 Ndata += 1 144 except ValueError: 145 pass 146 if not Ndata: 147 self.errors = 'No 2 or more column numeric data found' 148 return False 149 return True # no errors encountered 150 151 def Reader(self,filename,filepointer, ParentFrame=None, **unused): 152 print 'Read a q-step text file' 153 x = [] 154 y = [] 155 w = [] 156 try: 157 wave = 1.5428 #Cuka default 158 Temperature = 300 159 Ndata = 0 160 for i,S in enumerate(filepointer): 161 if len(S) == 1: #skip blank line 162 continue 163 if '=' in S: 164 self.comments.append(S[:-1]) 165 if 'wave' in S.split('=')[0].lower(): 166 try: 167 wave = float(S.split('=')[1]) 168 except: 169 pass 170 continue 171 vals = S.split() 172 if len(vals) >= 2: 173 try: 174 data = [float(val) for val in vals] 175 x.append(float(data[0])) 176 f = float(data[1]) 177 if f <= 0.0: 178 y.append(0.0) 179 w.append(1.0) 180 elif len(vals) > 2: 181 y.append(float(data[1])) 182 w.append(1.0/float(data[2])**2) 183 else: 184 y.append(float(data[1])) 185 w.append(1.0/float(data[1])) 186 except ValueError: 187 msg = 'Error in line '+str(i+1) 188 print msg 189 continue 190 N = len(x) 191 for S in self.comments: 192 if 'Temp' in S.split('=')[0]: 193 try: 194 Temperature = float(S.split('=')[1]) 195 except: 196 pass 197 self.instdict['wave'] = wave 198 self.instdict['type'] = 'LNC' 199 x = np.array(x) 200 if np.any(x > 2.): #q must be nm-1 201 x /= 10. 202 self.smallangledata = [ 203 x, # x-axis values q 204 np.array(y), # small angle pattern intensities 205 np.array(w), # 1/sig(intensity)^2 values (weights) 206 np.zeros(N), # calc. intensities (zero) 207 np.zeros(N), # obs-calc profiles 208 ] 209 self.smallangleentry[0] = filename 210 self.smallangleentry[2] = 1 # xye file only has one bank 211 self.idstring = ospath.basename(filename) 212 # scan comments for temperature 213 self.Sample['Temperature'] = Temperature 214 215 return True 216 except Exception as detail: 217 self.errors += '\n '+str(detail) 218 print self.formatName+' read error:'+str(detail) # for testing 219 import traceback 220 traceback.print_exc(file=sys.stdout) 221 return False
Note: See TracChangeset
for help on using the changeset viewer.