Changeset 1309 for trunk/GSASIIpwdGUI.py
- Timestamp:
- Apr 30, 2014 2:05:57 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIpwdGUI.py
r1300 r1309 2685 2685 data['Particle']['Levels'].append({ 2686 2686 'Controls':{'FormFact':'Sphere','DistType':'LogNormal','Material':material, 2687 'FFargs':{},' NumPoints':50,'Cutoff':0.01,2687 'FFargs':{},'SFargs':{},'NumPoints':50,'Cutoff':0.01, 2688 2688 'SlitSmear':[0.0,False],'StrFact':'Dilute'}, #last 2 not used - future? 2689 2689 'LogNormal':{'Volume':[0.05,False],'Mean':[1000.,False],'StdDev':[0.5,False],'MinSize':[10.,False],}, … … 2999 2999 'Unified tube':{'Length':[100.,False],'Thickness':[10.,False]},} 3000 3000 3001 StructureFactors = {'Dilute':{},'Hard sphere':{'VolFr':[0.1,False],'Dist':[100.,False]}, 3002 'Sticky hard sphere':{'VolFr':[0.1,False],'Dist':[100.,False],'epis':[0.05,False],'Sticky':[0.2,False]}, 3003 'Square well':{'VolFr':[0.1,False],'Dist':[100.,False],'Depth':[0.1,False],'Width':[1.,False]}, 3004 'InterPrecipitate':{'VolFr':[0.1,False],'Dist':[100.,False]},} 3005 3001 3006 ffDistChoices = ['Sphere','Spheroid','Cylinder','Cylinder diam', 3002 3007 'Cylinder AR','Unified sphere','Unified rod','Unified rod AR', 3003 3008 'Unified disk','Unified tube',] 3004 3009 3005 ffMonoChoices = ['Sphere','Spheroid','Cylinder','Cylinder AR', 3006 ] 3010 ffMonoChoices = ['Sphere','Spheroid','Cylinder','Cylinder AR',] 3011 3012 sfChoices = ['Dilute','Hard sphere','Sticky hard sphere','Square well','InterPrecipitate',] 3013 3014 slMult = 1000. 3007 3015 3008 3016 def OnValue(event): 3009 3017 Obj = event.GetEventObject() 3010 item,key, id,sldrObj = Indx[Obj.GetId()]3018 item,key,sldrObj = Indx[Obj.GetId()] 3011 3019 try: 3012 3020 value = float(Obj.GetValue()) … … 3014 3022 raise ValueError 3015 3023 except ValueError: 3016 value = item[key][ id]3017 item[key][ id] = value3024 value = item[key][0] 3025 item[key][0] = value 3018 3026 Obj.SetValue('%.3g'%(value)) 3019 if key == 'P':3020 sldrObj.SetValue( 1000.*value)3027 if key in ['P','epis','Sticky','Depth','Width','VolFr','Dist']: 3028 sldrObj.SetValue(slMult*value) 3021 3029 else: 3022 sldrObj.SetRange(1000.*(np.log10(value)-2),1000.*(np.log10(value)+2)) 3023 sldrObj.SetValue(1000.*np.log10(value)) 3030 logv = np.log10(value) 3031 valMinMax = [logv-1,logv+1] 3032 sldrObj.SetRange(slMult*valMinMax[0],slMult*valMinMax[1]) 3033 sldrObj.SetValue(slMult*logv) 3024 3034 G2sasd.ModelFxn(Profile,ProfDict,Limits,Substances,Sample,data) 3025 3035 RefreshPlots() … … 3032 3042 if 'FormFact' in key : 3033 3043 item['FFargs'] = FormFactors[Obj.GetValue()] 3044 elif 'StrFact' in key: 3045 item['SFargs'] = StructureFactors[Obj.GetValue()] 3034 3046 wx.CallAfter(UpdateModelsGrid,G2frame,data) 3035 3047 G2sasd.ModelFxn(Profile,ProfDict,Limits,Substances,Sample,data) … … 3046 3058 def OnParmSlider(event): 3047 3059 Obj = event.GetEventObject() 3048 item,key, id,pvObj = Indx[Obj.GetId()]3060 item,key,pvObj = Indx[Obj.GetId()] 3049 3061 slide = Obj.GetValue() 3050 if key == 'P':3051 value = float(slide/ 1000.)3062 if key in ['P','epis','Sticky','Depth','Width','VolFr','Dist']: 3063 value = float(slide/slMult) 3052 3064 else: 3053 value = 10.**float(slide/ 1000.)3054 item[key][ id] = value3055 pvObj.SetValue('%.3g'%(item[key][ id]))3065 value = 10.**float(slide/slMult) 3066 item[key][0] = value 3067 pvObj.SetValue('%.3g'%(item[key][0])) 3056 3068 G2sasd.ModelFxn(Profile,ProfDict,Limits,Substances,Sample,data) 3057 3069 RefreshPlots() 3058 3059 def OnCenterSlider(event):3060 Obj = event.GetEventObject()3061 Obj.SetValue(False)3062 sldrObj,value = Indx[Obj.GetId()]3063 sldrObj.SetRange(1000*(value-1),1000*(value+1))3064 sldrObj.SetValue(1000*value)3065 3070 3066 3071 def SizeSizer(): … … 3072 3077 Indx[distChoice.GetId()] = [level['Controls'],'DistType'] 3073 3078 distChoice.Bind(wx.EVT_COMBOBOX,OnSelect) 3074 sizeSizer.Add(distChoice,0,WACV) 3079 sizeSizer.Add(distChoice,0,WACV) #put structure factor choices here 3075 3080 if level['Controls']['DistType'] not in ['Bragg','Unified','Porod',]: 3076 3081 sizeSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Form Factor: '),0,WACV) 3077 if 'Mono' notin level['Controls']['DistType']:3078 ffChoice = wx.ComboBox(G2frame.dataDisplay,value=level['Controls']['FormFact'],choices=ff DistChoices,3082 if 'Mono' in level['Controls']['DistType']: 3083 ffChoice = wx.ComboBox(G2frame.dataDisplay,value=level['Controls']['FormFact'],choices=ffMonoChoices, 3079 3084 style=wx.CB_READONLY|wx.CB_DROPDOWN) 3080 3085 else: 3081 ffChoice = wx.ComboBox(G2frame.dataDisplay,value=level['Controls']['FormFact'],choices=ff MonoChoices,3086 ffChoice = wx.ComboBox(G2frame.dataDisplay,value=level['Controls']['FormFact'],choices=ffDistChoices, 3082 3087 style=wx.CB_READONLY|wx.CB_DROPDOWN) 3083 3088 Indx[ffChoice.GetId()] = [level['Controls'],'FormFact'] 3084 3089 ffChoice.Bind(wx.EVT_COMBOBOX,OnSelect) 3085 3090 sizeSizer.Add(ffChoice,0,WACV) 3091 3086 3092 sizeSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Material: '),0,WACV) 3087 3093 matSel = wx.ComboBox(G2frame.dataDisplay,value=level['Controls']['Material'], … … 3094 3100 sizeSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Resonant X-ray contrast: '),0,WACV) 3095 3101 sizeSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' %.2f 10%scm%s'%(contrast,Pwr20,Pwrm4)),0,WACV) 3096 sizeSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Num. radii: '),0,WACV) 3097 radii = ['25','50','75','100','200'] 3098 nRadii = wx.ComboBox(G2frame.dataDisplay,value=str(level['Controls']['NumPoints']),choices=radii, 3099 style=wx.CB_READONLY|wx.CB_DROPDOWN) 3100 Indx[nRadii.GetId()] = [level['Controls'],'NumPoints'] 3101 nRadii.Bind(wx.EVT_COMBOBOX,OnSelect) 3102 sizeSizer.Add(nRadii,0,WACV) 3103 sizeSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' R dist. cutoff: '),0,WACV) 3104 rCutoff = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,level['Controls'],'Cutoff', 3105 min=0.001,max=0.1,typeHint=float) 3106 sizeSizer.Add(rCutoff,0,WACV) 3102 if 'Mono' not in level['Controls']['DistType']: 3103 sizeSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Num. radii: '),0,WACV) 3104 radii = ['25','50','75','100','200'] 3105 nRadii = wx.ComboBox(G2frame.dataDisplay,value=str(level['Controls']['NumPoints']),choices=radii, 3106 style=wx.CB_READONLY|wx.CB_DROPDOWN) 3107 Indx[nRadii.GetId()] = [level['Controls'],'NumPoints'] 3108 nRadii.Bind(wx.EVT_COMBOBOX,OnSelect) 3109 sizeSizer.Add(nRadii,0,WACV) 3110 sizeSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' R dist. cutoff: '),0,WACV) 3111 rCutoff = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,level['Controls'],'Cutoff', 3112 min=0.001,max=0.1,typeHint=float) 3113 sizeSizer.Add(rCutoff,0,WACV) 3107 3114 elif level['Controls']['DistType'] in ['Unified',]: 3108 3115 Parms = level['Unified'] … … 3110 3117 sizeSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Estimated Dist B: %12.4g'%(Best)),0,WACV) 3111 3118 return sizeSizer 3119 3120 def ParmSizer(): 3121 parmSizer = wx.FlexGridSizer(1,3,5,5) 3122 parmSizer.AddGrowableCol(2,1) 3123 parmSizer.SetFlexibleDirection(wx.HORIZONTAL) 3124 Parms = level[level['Controls']['DistType']] 3125 FFargs = level['Controls']['FFargs'] 3126 SFargs = level['Controls'].get('SFargs',{}) 3127 parmOrder = ['Volume','Radius','Mean','StdDev','MinSize','G','Rg','B','P','Cutoff', 3128 'PkInt','PkPos','PkSig','PkGam',] 3129 for parm in parmOrder: 3130 if parm in Parms: 3131 if parm == 'MinSize': 3132 parmSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Dist '+parm),0,wx.ALIGN_CENTER) 3133 else: 3134 parmVar = wx.CheckBox(G2frame.dataDisplay,label='Refine? Dist '+parm) 3135 parmVar.SetValue(Parms[parm][1]) 3136 parmVar.Bind(wx.EVT_CHECKBOX, OnSelect) 3137 parmSizer.Add(parmVar,0,WACV) 3138 Indx[parmVar.GetId()] = [Parms[parm],1] 3139 parmValue = wx.TextCtrl(G2frame.dataDisplay,value='%.3g'%(Parms[parm][0]), 3140 style=wx.TE_PROCESS_ENTER) 3141 parmValue.Bind(wx.EVT_TEXT_ENTER,OnValue) 3142 parmValue.Bind(wx.EVT_KILL_FOCUS,OnValue) 3143 parmSizer.Add(parmValue,0,WACV) 3144 if parm == 'P': 3145 value = Parms[parm][0] 3146 valMinMax = [0.1,4.2] 3147 else: 3148 value = np.log10(Parms[parm][0]) 3149 valMinMax = [value-1,value+1] 3150 parmSldr = wx.Slider(G2frame.dataDisplay,minValue=slMult*valMinMax[0], 3151 maxValue=slMult*valMinMax[1],value=slMult*value) 3152 Indx[parmValue.GetId()] = [Parms,parm,parmSldr] 3153 Indx[parmSldr.GetId()] = [Parms,parm,parmValue] 3154 parmSldr.Bind(wx.EVT_SLIDER,OnParmSlider) 3155 parmSizer.Add(parmSldr,1,wx.EXPAND) 3156 if level['Controls']['DistType'] not in ['Bragg']: 3157 parmOrder = ['Aspect ratio','Length','Diameter','Thickness','VolFr','Dist','epis','Sticky','Depth','Width'] 3158 fTypes = ['FF ','SF '] 3159 for iarg,Args in enumerate([FFargs,SFargs]): 3160 for parm in parmOrder: 3161 if parm in Args: 3162 parmVar = wx.CheckBox(G2frame.dataDisplay,label='Refine? '+fTypes[iarg]+parm) 3163 parmVar.SetValue(Args[parm][1]) 3164 Indx[parmVar.GetId()] = [Args[parm],1] 3165 parmVar.Bind(wx.EVT_CHECKBOX, OnSelect) 3166 parmSizer.Add(parmVar,0,WACV) 3167 parmValue = wx.TextCtrl(G2frame.dataDisplay,value='%.3g'%(Args[parm][0]), 3168 style=wx.TE_PROCESS_ENTER) 3169 parmValue.Bind(wx.EVT_TEXT_ENTER,OnValue) 3170 parmValue.Bind(wx.EVT_KILL_FOCUS,OnValue) 3171 parmSizer.Add(parmValue,0,WACV) 3172 value = Args[parm][0] 3173 if parm == 'epis': 3174 valMinMax = [0,.1] 3175 elif parm in ['Sticky','Width',]: 3176 valMinMax = [0,1.] 3177 elif parm == 'Depth': 3178 valMinMax = [-2.,2.] 3179 elif parm == 'Dist': 3180 valMinMax = [100.,1000.] 3181 elif parm == 'VolFr': 3182 valMinMax = [1.e-4,1.] 3183 else: 3184 value = np.log10(Args[parm][0]) 3185 valMinMax = [value-1,value+1] 3186 parmSldr = wx.Slider(G2frame.dataDisplay,minValue=slMult*valMinMax[0], 3187 maxValue=slMult*valMinMax[1],value=slMult*value) 3188 Indx[parmVar.GetId()] = [Args[parm],1] 3189 Indx[parmValue.GetId()] = [Args,parm,parmSldr] 3190 Indx[parmSldr.GetId()] = [Args,parm,parmValue] 3191 parmSldr.Bind(wx.EVT_SLIDER,OnParmSlider) 3192 parmSizer.Add(parmSldr,1,wx.EXPAND) 3193 return parmSizer 3112 3194 3113 3195 Indx = {} … … 3142 3224 partSizer.Add(topLevel,0) 3143 3225 partSizer.Add(SizeSizer()) 3144 3145 lvlSizer = wx.BoxSizer(wx.HORIZONTAL) 3146 parmSizer = wx.FlexGridSizer(1,4,5,5) 3147 parmSizer.AddGrowableCol(2,1) 3148 parmSizer.SetFlexibleDirection(wx.HORIZONTAL) 3149 Parms = level[level['Controls']['DistType']] 3150 FFargs = level['Controls']['FFargs'] 3151 parmOrder = ['Volume','Radius','Mean','StdDev','MinSize','G','Rg','B','P','Cutoff', 3152 'PkInt','PkPos','PkSig','PkGam',] 3153 for parm in parmOrder: 3154 if parm in Parms: 3155 if parm == 'MinSize': 3156 parmSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Dist '+parm),0,wx.ALIGN_CENTER) 3157 else: 3158 parmVar = wx.CheckBox(G2frame.dataDisplay,label='Refine? Dist '+parm) 3159 parmVar.SetValue(Parms[parm][1]) 3160 parmVar.Bind(wx.EVT_CHECKBOX, OnSelect) 3161 parmSizer.Add(parmVar,0,WACV) 3162 Indx[parmVar.GetId()] = [Parms[parm],1] 3163 parmValue = wx.TextCtrl(G2frame.dataDisplay,value='%.3g'%(Parms[parm][0]), 3164 style=wx.TE_PROCESS_ENTER) 3165 parmValue.Bind(wx.EVT_TEXT_ENTER,OnValue) 3166 parmValue.Bind(wx.EVT_KILL_FOCUS,OnValue) 3167 parmSizer.Add(parmValue,0,WACV) 3168 if parm == 'P': 3169 value = Parms[parm][0] 3170 valMinMax = [0.1,4.2] 3171 else: 3172 value = np.log10(Parms[parm][0]) 3173 valMinMax = [value-1,value+1] 3174 parmSldr = wx.Slider(G2frame.dataDisplay,minValue=1000.*valMinMax[0], 3175 maxValue=1000.*valMinMax[1],value=1000.*value) 3176 Indx[parmValue.GetId()] = [Parms,parm,0,parmSldr] 3177 Indx[parmSldr.GetId()] = [Parms,parm,0,parmValue] 3178 parmSldr.Bind(wx.EVT_SLIDER,OnParmSlider) 3179 parmSizer.Add(parmSldr,1,wx.EXPAND) 3180 if parm == 'P': 3181 parmSizer.Add((5,5),) 3182 else: 3183 center = wx.CheckBox(G2frame.dataDisplay,label='Center? ') 3184 Indx[center.GetId()] = [parmSldr,value] 3185 center.Bind(wx.EVT_CHECKBOX,OnCenterSlider) 3186 parmSizer.Add(center,0,WACV) 3187 if level['Controls']['DistType'] not in ['Bragg']: 3188 for parm in list(FFargs): 3189 parmVar = wx.CheckBox(G2frame.dataDisplay,label='Refine? FF '+parm) 3190 parmVar.SetValue(FFargs[parm][1]) 3191 Indx[parmVar.GetId()] = [FFargs[parm],1] 3192 parmVar.Bind(wx.EVT_CHECKBOX, OnSelect) 3193 parmSizer.Add(parmVar,0,WACV) 3194 parmValue = wx.TextCtrl(G2frame.dataDisplay,value='%.3g'%(FFargs[parm][0]), 3195 style=wx.TE_PROCESS_ENTER) 3196 parmValue.Bind(wx.EVT_TEXT_ENTER,OnValue) 3197 parmValue.Bind(wx.EVT_KILL_FOCUS,OnValue) 3198 parmSizer.Add(parmValue,0,WACV) 3199 value = np.log10(FFargs[parm][0]) 3200 valMinMax = [value-1,value+1] 3201 parmSldr = wx.Slider(G2frame.dataDisplay,minValue=1000.*valMinMax[0], 3202 maxValue=1000.*valMinMax[1],value=1000.*value) 3203 Indx[parmVar.GetId()] = [FFargs[parm],1] 3204 Indx[parmValue.GetId()] = [FFargs[parm],0,parmSldr] 3205 Indx[parmSldr.GetId()] = [FFargs,parm,0,parmValue] 3206 parmSldr.Bind(wx.EVT_SLIDER,OnParmSlider) 3207 parmSizer.Add(parmSldr,1,wx.EXPAND) 3208 center = wx.CheckBox(G2frame.dataDisplay,label='Center? ') 3209 Indx[center.GetId()] = [parmSldr,value] 3210 center.Bind(wx.EVT_CHECKBOX,OnCenterSlider) 3211 parmSizer.Add(center,0,WACV) 3212 lvlSizer.Add(parmSizer,1,wx.EXPAND) 3213 partSizer.Add(lvlSizer,1,wx.EXPAND) 3226 if level['Controls']['DistType'] not in ['Bragg','Unified','Porod',]: 3227 topLevel.Add(wx.StaticText(G2frame.dataDisplay,label=' Structure factor: '),0,WACV) 3228 strfctr = wx.ComboBox(G2frame.dataDisplay,value=level['Controls']['StrFact'], 3229 choices=sfChoices,style=wx.CB_READONLY|wx.CB_DROPDOWN) 3230 Indx[strfctr.GetId()] = [level['Controls'],'StrFact'] 3231 strfctr.Bind(wx.EVT_COMBOBOX,OnSelect) 3232 topLevel.Add(strfctr,0,WACV) 3233 partSizer.Add(ParmSizer(),1,wx.EXPAND) 3214 3234 return partSizer 3215 3235 … … 3319 3339 G2frame.dataDisplay.SetSize(Size) 3320 3340 G2frame.dataFrame.setSizePosLeft(Size) 3321 3322 3341 3323 3342 ################################################################################
Note: See TracChangeset
for help on using the changeset viewer.