Changeset 1208
- Timestamp:
- Jan 30, 2014 4:27:17 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r1207 r1208 1563 1563 self.PatternTree.SetItemPyData( 1564 1564 self.PatternTree.AppendItem(Id,text='Contrast'), 1565 {}) #Fill in defaults here 1565 {'Substances':{'vacuum':{'Elements':{},'Volume':1.0,'Density':0.0,'Scatt density':0.0}}, 1566 'Contrast':0.0}) 1566 1567 self.PatternTree.SetItemPyData( 1567 1568 self.PatternTree.AppendItem(Id,text='Models'), -
trunk/GSASIIElemGUI.py
r1046 r1208 80 80 self.EndModal(wx.ID_OK) 81 81 82 class PickElements(wx.Dialog): 83 """Makes periodic table widget for picking elements - caller maintains element list""" 84 Elem = [] 85 def _init_ctrls(self, prnt,list): 86 wx.Dialog.__init__(self, id=-1, name='PickElements', 87 parent=prnt, pos=wx.DefaultPosition, size=wx.Size(580, 360), 88 style=wx.DEFAULT_DIALOG_STYLE, title='Pick Elements') 89 panel = wx.Panel(self) 90 91 REcolor = wx.Colour(128, 128, 255) 92 Metcolor = wx.Colour(192, 192, 192) 93 Noblecolor = wx.Colour(255, 128, 255) 94 Alkcolor = wx.Colour(255, 255, 128) 95 AlkEcolor = wx.Colour(255, 128, 0) 96 SemMetcolor = wx.Colour(128, 255, 0) 97 NonMetcolor = wx.Colour(0, 255, 255) 98 White = wx.Colour(255, 255, 255) 99 self.Elem = [] 100 for El in list: 101 self.Elem.append(El.lower().capitalize()) 102 103 self.ElTable = [ 104 ("H", 0,0, "Hydrogen", White, 0.0000), 105 ("He", 17,0, "Helium", Noblecolor, 0.0000), 106 ("Li", 0,1, "Lithium", Alkcolor, 0.0004), 107 ("Be", 1,1, "Beryllium", AlkEcolor, 0.0006), 108 ("B", 12,1, "Boron", NonMetcolor, 0.0012), 109 ("C", 13,1, "Carbon", NonMetcolor, 0.0018), 110 ("N", 14,1, "Nitrogen", NonMetcolor, 0.0030), 111 ("O", 15,1, "Oxygen", NonMetcolor, 0.0042), 112 ("F", 16,1, "Fluorine", NonMetcolor, 0.0054), 113 ("Ne", 17,1, "Neon", Noblecolor, 0.0066), 114 ("Na", 0,2, "Sodium", Alkcolor, 0.0084), 115 ("Mg", 1,2, "Magnesium", AlkEcolor, 0.0110), 116 ("Al", 12,2, "Aluminum", SemMetcolor, 0.0125), 117 ("Si", 13,2, "Silicon", NonMetcolor, 0.0158), 118 ("P", 14,2, "Phosphorus", NonMetcolor, 0.0180), 119 ("S", 15,2, "Sulphur", NonMetcolor, 0.0210), 120 ("Cl", 16,2, "Chlorine", NonMetcolor, 0.0250), 121 ("Ar", 17,2, "Argon", Noblecolor, 0.0285), 122 ("K", 0,3, "Potassium", Alkcolor, 0.0320), 123 ("Ca", 1,3, "Calcium", AlkEcolor, 0.0362), 124 ("Sc", 2,3, "Scandium", Metcolor, 0.0410), 125 ("Ti", 3,3, "Titanium", Metcolor, 0.0460), 126 ("V", 4,3, "Vanadium", Metcolor, 0.0510), 127 ("Cr", 5,3, "Chromium", Metcolor, 0.0560), 128 ("Mn", 6,3, "Manganese", Metcolor, 0.0616), 129 ("Fe", 7,3, "Iron", Metcolor, 0.0680), 130 ("Co", 8,3, "Cobalt", Metcolor, 0.0740), 131 ("Ni", 9,3, "Nickel", Metcolor, 0.0815), 132 ("Cu", 10,3, "Copper", Metcolor, 0.0878), 133 ("Zn", 11,3, "Zinc", Metcolor, 0.0960), 134 ("Ga", 12,3, "Gallium", SemMetcolor, 0.104), 135 ("Ge", 13,3, "Germanium", SemMetcolor, 0.114), 136 ("As", 14,3, "Arsenic", NonMetcolor, 0.120), 137 ("Se", 15,3, "Selenium", NonMetcolor, 0.132), 138 ("Br", 16,3, "Bromine", NonMetcolor, 0.141), 139 ("Kr", 17,3, "Krypton", Noblecolor, 0.150), 140 ("Rb", 0,4, "Rubidium", Alkcolor, 0.159), 141 ("Sr", 1,4, "Strontium", AlkEcolor, 0.171), 142 ("Y", 2,4, "Yittrium", Metcolor, 0.180), 143 ("Zr", 3,4, "Zirconium", Metcolor, 0.192), 144 ("Nb", 4,4, "Niobium", Metcolor, 0.204), 145 ("Mo", 5,4, "Molybdenium", Metcolor, 0.216), 146 ("Tc", 6,4, "Technetium", Metcolor, 0.228), 147 ("Ru", 7,4, "Ruthenium", Metcolor, 0.246), 148 ("Rh", 8,4, "Rhodium", Metcolor, 0.258), 149 ("Pd", 9,4, "Palladium", Metcolor, 0.270), 150 ("Ag", 10,4, "Silver", Metcolor, 0.285), 151 ("Cd", 11,4, "Cadmium", Metcolor, 0.300), 152 ("In", 12,4, "Indium", SemMetcolor, 0.318), 153 ("Sn", 13,4, "Tin", SemMetcolor, 0.330), 154 ("Sb", 14,4, "Antimony", SemMetcolor, 0.348), 155 ("Te", 15,4, "Tellurium", NonMetcolor, 0.363), 156 ("I", 16,4, "Iodine", NonMetcolor, 0.384), 157 ("Xe", 17,4, "Xenon", Noblecolor, 0.396), 158 ("Cs", 0,5, "Caesium", Alkcolor, 0.414), 159 ("Ba", 1,5, "Barium", AlkEcolor, 0.438), 160 ("La", 2,5, "Lanthanium", Metcolor, 0.456), 161 ("Ce", 3.5,6.5, "Cerium", REcolor, 0.474), 162 ("Pr", 4.5,6.5, "Praseodymium",REcolor, 0.492), 163 ("Nd", 5.5,6.5, "Neodymium", REcolor, 0.516), 164 ("Pm", 6.5,6.5, "Promethium", REcolor, 0.534), 165 ("Sm", 7.5,6.5, "Samarium", REcolor, 0.558), 166 ("Eu", 8.5,6.5, "Europium", REcolor, 0.582), 167 ("Gd", 9.5,6.5, "Gadolinium", REcolor, 0.610), 168 ("Tb", 10.5,6.5, "Terbium", REcolor, 0.624), 169 ("Dy", 11.5,6.5, "Dysprosium", REcolor, 0.648), 170 ("Ho", 12.5,6.5, "Holmium", REcolor, 0.672), 171 ("Er", 13.5,6.5, "Erbium", REcolor, 0.696), 172 ("Tm", 14.5,6.5, "Thulium", REcolor, 0.723), 173 ("Yb", 15.5,6.5, "Ytterbium", REcolor, 0.750), 174 ("Lu", 16.5,6.5, "Lutetium", REcolor, 0.780), 175 ("Hf", 3,5, "Hafnium", Metcolor, 0.804), 176 ("Ta", 4,5, "Tantalum", Metcolor, 0.834), 177 ("W", 5,5, "Tungsten", Metcolor, 0.864), 178 ("Re", 6,5, "Rhenium", Metcolor, 0.900), 179 ("Os", 7,5, "Osmium", Metcolor, 0.919), 180 ("Ir", 8,5, "Iridium", Metcolor, 0.948), 181 ("Pt", 9,5, "Platinium", Metcolor, 0.984), 182 ("Au", 10,5, "Gold", Metcolor, 1.014), 183 ("Hg", 11,5, "Mercury", Metcolor, 1.046), 184 ("Tl", 12,5, "Thallium", SemMetcolor, 1.080), 185 ("Pb", 13,5, "Lead", SemMetcolor, 1.116), 186 ("Bi", 14,5, "Bismuth", SemMetcolor, 1.149), 187 ("Po", 15,5, "Polonium", SemMetcolor, 1.189), 188 ("At", 16,5, "Astatine", NonMetcolor, 1.224), 189 ("Rn", 17,5, "Radon", Noblecolor, 1.260), 190 ("Fr", 0,6, "Francium", Alkcolor, 1.296), 191 ("Ra", 1,6, "Radium", AlkEcolor, 1.332), 192 ("Ac", 2,6, "Actinium", Metcolor, 1.374), 193 ("Th", 3.5,7.5, "Thorium", REcolor, 1.416), 194 ("Pa", 4.5,7.5, "Protactinium",REcolor, 1.458), 195 ("U", 5.5,7.5, "Uranium", REcolor, 1.470), 196 ("Np", 6.5,7.5, "Neptunium", REcolor, 1.536), 197 ("Pu", 7.5,7.5, "Plutonium", REcolor, 1.584), 198 ("Am", 8.5,7.5, "Americium", REcolor, 1.626), 199 ("Cm", 9.5,7.5, "Curium", REcolor, 1.669), 200 ("Bk", 10.5,7.5, "Berkelium", REcolor, 1.716), 201 ("Cf", 11.5,7.5, "Californium", REcolor, 1.764)] 202 203 mainSizer = wx.BoxSizer(wx.VERTICAL) 204 elPanel = wx.Panel(panel) 205 206 i=0 207 for E in self.ElTable: 208 PickElements.ElButton(self,parent=elPanel,name=E[0], 209 pos=wx.Point(E[1]*30+20,E[2]*30+25),tip=E[3],color=E[4]) 210 i+=1 211 mainSizer.Add(elPanel,0,wx.EXPAND) 212 mainSizer.Add((10,10),0) 213 214 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 215 OkBtn = wx.Button(panel,-1,"Ok") 216 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 217 cancelBtn = wx.Button(panel,-1,"Cancel") 218 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 219 btnSizer.Add((20,20),1) 220 btnSizer.Add(OkBtn) 221 btnSizer.Add((20,20),1) 222 btnSizer.Add(cancelBtn) 223 btnSizer.Add((20,20),1) 224 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM, 10) 225 panel.SetSizer(mainSizer) 226 panel.Fit() 227 228 def OnOk(self,event): 229 if self.Elem: 230 self.EndModal(wx.ID_OK) 231 else: 232 self.EndModal(wx.ID_CANCEL) 233 234 def OnCancel(self,event): 235 self.EndModal(wx.ID_CANCEL) 236 237 def __init__(self, parent,list): 238 self._init_ctrls(parent,list) 239 240 def ElButton(self, parent, name, pos, tip, color): 241 Black = wx.Colour(0,0,0) 242 if name in self.Elem: 243 color = Black 244 El = wscs.ColourSelect(label=name, parent=parent,colour=color, 245 pos=pos, size=wx.Size(32, 32), style=wx.RAISED_BORDER) 246 El.SetBackgroundColour(color) 247 El.SetLabel(name) 248 El.SetToolTipString(tip) 249 El.Bind(wx.EVT_BUTTON, self.OnElButton) 250 251 def OnElButton(self, event): 252 Black = wx.Colour(0,0,0) 253 btn = event.GetEventObject() 254 El = btn.GetLabel() 255 if btn.GetColour() != Black: 256 for Elem in self.ElTable: 257 if El in Elem: 258 ElColor = Elem[4] 259 if El in self.Elem: 260 btn.SetColour(ElColor) 261 self.Elem.remove(El) 262 else: 263 btn.SetColour(wx.Colour(255,0,0)) 264 self.Elem.append(El) 265 82 266 class DeleteElement(wx.Dialog): 83 267 "Delete element from selected set widget" -
trunk/GSASIIIO.py
r1207 r1208 887 887 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Reflection Lists'),{}) 888 888 elif 'SASD' in name: 889 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Contrast'),{}) 889 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Contrast'), 890 {'Substances':{'vacuum':{'Elements':{},'Volume':1.0,'Density':0.0,'Scatt density':0.0}}, 891 'Contrast':0.0}) 890 892 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Models'),{}) 891 893 else: … … 907 909 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Reflection Lists'),{}) 908 910 elif 'SASD' in name: 909 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Contrast'),{}) 911 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Contrast'), 912 {'Substances':{'vacuum':{'Elements':{},'Volume':1.0,'Density':0.0,'Scatt density':0.0}}, 913 'Contrast':0.0}) 910 914 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Models'),{}) 911 915 valuesdict = { -
trunk/GSASIIgrid.py
r1207 r1208 134 134 ] = [wx.NewId() for item in range(1)] 135 135 136 [ wxID_MODELCOPY,wxID_MODELFIT 137 ] = [wx.NewId() for item in range(2)] 136 [ wxID_MODELCOPY,wxID_MODELFIT,wxID_CONTRASTADD,wxID_CONTRASTDELETE,wxID_ADDSUBSTANCE, 137 wxID_LOADSUBSTANCE, 138 ] = [wx.NewId() for item in range(6)] 138 139 139 140 [ wxID_SELECTPHASE, … … 2380 2381 self.PrefillDataMenu(self.ContrastMenu,helpType='Contrast') 2381 2382 self.ContrastEdit = wx.Menu(title='') 2382 self.ContrastMenu.Append(menu=self.ContrastEdit, title='Models') 2383 self.ContrastMenu.Append(menu=self.ContrastEdit, title='Edit') 2384 self.ContrastEdit.Append(id=wxID_ADDSUBSTANCE, kind=wx.ITEM_NORMAL,text='Add substance', 2385 help='Add new substance') 2386 self.ContrastEdit.Append(id=wxID_LOADSUBSTANCE, kind=wx.ITEM_NORMAL,text='Load substance', 2387 help='Load substance from file') 2388 self.ContrastEdit.Append(id=wxID_CONTRASTADD, kind=wx.ITEM_NORMAL,text='Add elements', 2389 help='Add elements to substance') 2390 self.ContrastEdit.Append(id=wxID_CONTRASTDELETE, kind=wx.ITEM_NORMAL,text='Delete elements', 2391 help='Delete elements from substance') 2383 2392 self.PostfillDataMenu() 2384 2393 -
trunk/GSASIImath.py
r1207 r1208 540 540 541 541 def getMass(generalData): 542 '''default doc string 543 544 :param type name: description 545 546 :returns: type name: description 547 548 ''' 549 'Computes mass of unit cell contents' 542 '''Computes mass of unit cell contents 543 544 :param dict generalData: The General dictionary in Phase 545 546 :returns: float mass: Crystal unit cell mass in AMU. 547 548 ''' 550 549 mass = 0. 551 550 for i,elem in enumerate(generalData['AtomTypes']): … … 554 553 555 554 def getDensity(generalData): 556 ''' default doc string557 558 :param type name: description559 560 :returns: type name: description555 '''calculate crystal structure density 556 557 :param dict generalData: The General dictionary in Phase 558 559 :returns: float density: crystal density in gm/cm^3 561 560 562 561 ''' … … 567 566 568 567 def getWave(Parms): 569 '''default doc string 570 571 :param type name: description 572 573 :returns: type name: description 568 '''returns wavelength from Instrument parameters dictionary 569 570 :param dict Parms: Instrument parameters; 571 must contain: 572 Lam: single wavelength 573 or 574 Lam1: Ka1 radiation wavelength 575 576 :returns: float wave: wavelength 574 577 575 578 ''' … … 578 581 except KeyError: 579 582 return Parms['Lam1'][1] 583 584 def El2Mass(Elements): 585 '''compute molecular weight from Elements 586 587 :param dict Elements: elements in molecular formula; 588 each must contain 589 Num: number of atoms in formula 590 Mass: at. wt. 591 592 :returns: float mass: molecular weight. 593 594 ''' 595 mass = 0 596 for El in Elements: 597 mass += Elements[El]['Num']*Elements[El]['Mass'] 598 return mass 599 600 def Den2Vol(Elements,density): 601 '''converts density to molecular volume 602 603 :param dict Elements: elements in molecular formula; 604 each must contain 605 Num: number of atoms in formula 606 Mass: at. wt. 607 :param float density: material density in gm/cm^3 608 609 :returns: float volume: molecular volume in A^3 610 611 ''' 612 return El2Mass(Elements)/(density*0.6022137) 613 614 def Vol2Den(Elements,volume): 615 '''converts volume to density 616 617 :param dict Elements: elements in molecular formula; 618 each must contain 619 Num: number of atoms in formula 620 Mass: at. wt. 621 :param float volume: molecular volume in A^3 622 623 :returns: float density: material density in gm/cm^3 624 625 ''' 626 return El2Mass(Elements)/(volume*0.6022137) 627 628 def El2EstVol(Elements): 629 '''Estimate volume from molecular formula; assumes atom volume = 10A^3 630 631 :param dict Elements: elements in molecular formula; 632 each must contain 633 Num: number of atoms in formula 634 635 :returns: float volume: estimate of molecular volume in A^3 636 637 ''' 638 vol = 0 639 for El in Elements: 640 vol += 10.*Elements[El]['Num'] 641 return vol 642 643 def XScattDen(Elements,vol,wave=0.): 644 '''Estimate X-ray scattering density from molecular formula & volume; 645 ignores valence, but includes anomalous effects 646 647 :param dict Elements: elements in molecular formula; 648 each element must contain 649 Num: number of atoms in formula 650 Z: atomic number 651 :param float vol: molecular volume in A^3 652 :param float wave: optional wavelength in A 653 654 :returns: float rho: scattering density in 10^10cm^-2; 655 if wave > 0 the includes f' contribution 656 657 ''' 658 rho = 0 659 if wave: 660 Xanom = XAnomAbs(Elements,wave) 661 for El in Elements: 662 f0 = Elements[El]['Z'] 663 if wave: 664 f0 += Xanom[El][0] 665 rho += Elements[El]['Num']*f0 666 return 28.179*rho/vol 667 668 def wavekE(wavekE): 669 '''Convert wavelength to energy & vise versa 670 671 :param float waveKe:wavelength in A or energy in kE 672 673 :returns float waveKe:the other one 674 675 ''' 676 return 12.397639/wavekE 677 678 def XAnomAbs(Elements,wave): 679 kE = wavekE(wave) 680 Xanom = {} 681 for El in Elements: 682 Orbs = G2el.GetXsectionCoeff(El) 683 Xanom[El] = G2el.FPcalc(Orbs, kE) 684 return Xanom 685 580 686 581 687 ################################################################################ -
trunk/GSASIIpwdGUI.py
r1207 r1208 20 20 import wx 21 21 import wx.grid as wg 22 import wx.lib.scrolledpanel as wxscroll 22 23 import numpy as np 23 24 import numpy.ma as ma … … 2069 2070 '''respond to selection of SASD Contrast data tree item. 2070 2071 ''' 2072 import Substances as substFile 2071 2073 2072 def FillDefaultContrast(): 2073 data = {} 2074 def OnLoadSubstance(event): 2075 names = substFile.Substances.keys() 2076 dlg = wx.SingleChoiceDialog(G2frame, 'Which substance?', 'Select substance', names, wx.CHOICEDLG_STYLE) 2077 try: 2078 if dlg.ShowModal() == wx.ID_OK: 2079 name = names[dlg.GetSelection()] 2080 else: 2081 return 2082 finally: 2083 dlg.Destroy() 2084 data['Substances'][name] = {'Elements':{},'Volume':1.0,'Density':1.0, 2085 'Scatt density':0.0,'XAnom density':0.0} 2086 subst = substFile.Substances[name] 2087 ElList = subst['Elements'].keys() 2088 for El in ElList: 2089 Info = G2elem.GetAtomInfo(El.strip().upper()) 2090 Info.update(subst['Elements'][El]) 2091 data['Substances'][name]['Elements'][El] = Info 2092 if 'Volume' in subst: 2093 data['Substances'][name]['Volume'] = subst['Volume'] 2094 data['Substances'][name]['Density'] = \ 2095 G2mth.Vol2Den(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 2096 elif 'Density' in subst: 2097 data['Substances'][name]['Density'] = subst['Density'] 2098 data['Substances'][name]['Volume'] = \ 2099 G2mth.Den2Vol(data['Substances'][name]['Elements'],data['Substances'][name]['Density']) 2100 else: 2101 data['Substances'][name]['Volume'] = G2mth.El2EstVol(data['Substances'][name]['Elements']) 2102 data['Substances'][name]['Density'] = \ 2103 G2mth.Vol2Den(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 2104 data['Substances'][name]['Scatt density'] = \ 2105 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 2106 data['Substances'][name]['XAnom density'] = \ 2107 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 2108 UpdateContrastGrid(G2frame,data) 2109 2110 def OnAddSubstance(event): 2111 dlg = wx.TextEntryDialog(None,'Enter a name for this substance','Substance Name Entry','New substance', 2112 style=wx.OK) 2113 if dlg.ShowModal() == wx.ID_OK: 2114 Name = dlg.GetValue() 2115 data['Substances'][Name] = {'Elements':{},'Volume':1.0,'Density':1.0, 2116 'Scatt density':0.0,'XAnom density':0.} 2117 dlg.Destroy() 2118 UpdateContrastGrid(G2frame,data) 2119 2120 def OnAddElement(event): 2121 TextList = [] 2122 for name in data['Substances']: 2123 if name != 'vacuum': 2124 TextList += [name,] 2125 if not TextList: 2126 return 2127 dlg = wx.SingleChoiceDialog(G2frame, 'Which substance?', 'Select substance', TextList, wx.CHOICEDLG_STYLE) 2128 try: 2129 if dlg.ShowModal() == wx.ID_OK: 2130 name = TextList[dlg.GetSelection()] 2131 else: 2132 return 2133 finally: 2134 dlg.Destroy() 2135 ElList = data['Substances'][name]['Elements'].keys() 2136 dlg = G2elemGUI.PickElements(G2frame,ElList) 2137 if dlg.ShowModal() == wx.ID_OK: 2138 for El in dlg.Elem: 2139 El = El.strip().upper() 2140 Info = G2elem.GetAtomInfo(El) 2141 Info.update({'Num':1}) 2142 data['Substances'][name]['Elements'][El] = Info 2143 data['Substances'][name]['Volume'] = G2mth.El2EstVol(data['Substances'][name]['Elements']) 2144 data['Substances'][name]['Density'] = \ 2145 G2mth.Vol2Den(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 2146 data['Substances'][name]['Scatt density'] = \ 2147 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 2148 data['Substances'][name]['XAnom density'] = \ 2149 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 2150 dlg.Destroy() 2151 UpdateContrastGrid(G2frame,data) 2152 2153 def OnDeleteElement(event): 2154 TextList = [] 2155 for name in data['Substances']: 2156 if name != 'vacuum': 2157 TextList += [name,] 2158 if not TextList: 2159 return 2160 dlg = wx.SingleChoiceDialog(G2frame, 'Which substance?', 'Select substance', TextList, wx.CHOICEDLG_STYLE) 2161 try: 2162 if dlg.ShowModal() == wx.ID_OK: 2163 name = TextList[dlg.GetSelection()] 2164 else: 2165 return 2166 finally: 2167 dlg.Destroy() 2168 ElList = data['Substances'][name]['Elements'].keys() 2169 if len(ElList): 2170 DE = G2elemGUI.DeleteElement(G2frame,ElList) 2171 if DE.ShowModal() == wx.ID_OK: 2172 El = DE.GetDeleteElement().strip().upper() 2173 del(data['Substances'][name]['Elements'][El]) 2174 data['Substances'][name]['Volume'] = G2mth.El2EstVol(data['Substances'][name]['Elements']) 2175 data['Substances'][name]['Density'] = \ 2176 G2mth.Vol2Den(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 2177 data['Substances'][name]['Scatt density'] = \ 2178 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 2179 data['Substances'][name]['XAnom density'] = \ 2180 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 2181 UpdateContrastGrid(G2frame,data) 2182 2183 def SubstSizer(): 2184 2185 def OnValueChange(event): 2186 Obj = event.GetEventObject() 2187 if len(Indx[Obj.GetId()]) == 3: 2188 name,El,keyId = Indx[Obj.GetId()] 2189 try: 2190 value = max(0,int(Obj.GetValue())) 2191 except ValueError: 2192 value = 0 2193 Obj.SetValue(str(value)) 2194 data['Substances'][name]['Elements'][El][keyId] = value 2195 data['Substances'][name]['Volume'] = G2mth.El2EstVol(data['Substances'][name]['Elements']) 2196 data['Substances'][name]['Density'] = \ 2197 G2mth.Vol2Den(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 2198 else: 2199 name,keyId = Indx[Obj.GetId()] 2200 try: 2201 value = max(0,float(Obj.GetValue())) 2202 except ValueError: 2203 value = 1.0 2204 data['Substances'][name][keyId] = value 2205 if keyId in 'Volume': 2206 data['Substances'][name]['Density'] = \ 2207 G2mth.Vol2Den(data['Substances'][name]['Elements'],value) 2208 elif keyId in 'Density': 2209 data['Substances'][name]['Volume'] = \ 2210 G2mth.Den2Vol(data['Substances'][name]['Elements'],value) 2211 data['Substances'][name]['Scatt density'] = \ 2212 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 2213 data['Substances'][name]['XAnom density'] = \ 2214 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 2215 UpdateContrastGrid(G2frame,data) 2216 2217 Indx = {} 2218 Pwr10 = unichr(0x0b9)+unichr(0x0b0) 2219 Pwrm2 = unichr(0x207b)+unichr(0x0b2) 2220 substSizer = wx.BoxSizer(wx.VERTICAL) 2221 substSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Substance list:'), 2222 0,wx.ALIGN_CENTER_VERTICAL) 2223 for name in data['Substances']: 2224 substSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Data for '+name+':'), 2225 0,wx.ALIGN_CENTER_VERTICAL) 2226 if name == 'vacuum': 2227 substSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Not applicable'), 2228 0,wx.ALIGN_CENTER_VERTICAL) 2229 else: 2230 elSizer = wx.FlexGridSizer(1,6,5,5) 2231 Substance = data['Substances'][name] 2232 Elems = Substance['Elements'] 2233 for El in Elems: 2234 elSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' '+El+': '), 2235 0,wx.ALIGN_CENTER_VERTICAL) 2236 num = wx.TextCtrl(G2frame.dataDisplay,value=str(Elems[El]['Num']),style=wx.TE_PROCESS_ENTER) 2237 Indx[num.GetId()] = [name,El,'Num'] 2238 num.Bind(wx.EVT_TEXT_ENTER,OnValueChange) 2239 num.Bind(wx.EVT_KILL_FOCUS,OnValueChange) 2240 elSizer.Add(num,0,wx.ALIGN_CENTER_VERTICAL) 2241 substSizer.Add(elSizer,0) 2242 vdsSizer = wx.FlexGridSizer(1,4,5,5) 2243 vdsSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Volume: '), 2244 0,wx.ALIGN_CENTER_VERTICAL) 2245 vol = wx.TextCtrl(G2frame.dataDisplay,value='%.3f'%(Substance['Volume']),style=wx.TE_PROCESS_ENTER) 2246 Indx[vol.GetId()] = [name,'Volume'] 2247 vol.Bind(wx.EVT_TEXT_ENTER,OnValueChange) 2248 vol.Bind(wx.EVT_KILL_FOCUS,OnValueChange) 2249 vdsSizer.Add(vol,0,wx.ALIGN_CENTER_VERTICAL) 2250 vdsSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Density: '), 2251 0,wx.ALIGN_CENTER_VERTICAL) 2252 den = wx.TextCtrl(G2frame.dataDisplay,value='%.3f'%(Substance['Density']),style=wx.TE_PROCESS_ENTER) 2253 Indx[den.GetId()] = [name,'Density'] 2254 den.Bind(wx.EVT_TEXT_ENTER,OnValueChange) 2255 den.Bind(wx.EVT_KILL_FOCUS,OnValueChange) 2256 vdsSizer.Add(den,0,wx.ALIGN_CENTER_VERTICAL) 2257 substSizer.Add(vdsSizer,0) 2258 substSizer.Add(wx.StaticText(G2frame.dataDisplay, 2259 label=' Scattering density : %.2f *10%scm%s'%(Substance['Scatt density'],Pwr10,Pwrm2)), 2260 0,wx.ALIGN_CENTER_VERTICAL) 2261 substSizer.Add(wx.StaticText(G2frame.dataDisplay, 2262 label=' Anomalous density : %.2f *10%scm%s'%(Substance['XAnom density'],Pwr10,Pwrm2)), 2263 0,wx.ALIGN_CENTER_VERTICAL) 2264 2265 return substSizer 2074 2266 2267 Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))[0] 2268 wave = G2mth.getWave(Inst) 2269 if G2frame.dataDisplay: 2270 G2frame.dataFrame.DestroyChildren() 2075 2271 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.ContrastMenu) 2076 2272 if not G2frame.dataFrame.GetStatusBar(): 2077 2273 Status = G2frame.dataFrame.CreateStatusBar() 2078 if not len(data): 2079 FillDefaultContrast() 2080 G2frame.dataDisplay = wx.Panel(G2frame.dataFrame) 2081 2274 G2frame.dataDisplay = wxscroll.ScrolledPanel(G2frame.dataFrame) 2275 G2frame.dataFrame.SetLabel('Contrast calculator') 2276 G2frame.dataFrame.Bind(wx.EVT_MENU, OnLoadSubstance, id=G2gd.wxID_LOADSUBSTANCE) 2277 G2frame.dataFrame.Bind(wx.EVT_MENU, OnAddSubstance, id=G2gd.wxID_ADDSUBSTANCE) 2278 G2frame.dataFrame.Bind(wx.EVT_MENU, OnAddElement, id=G2gd.wxID_CONTRASTADD) 2279 G2frame.dataFrame.Bind(wx.EVT_MENU, OnDeleteElement, id=G2gd.wxID_CONTRASTDELETE) 2280 mainSizer = wx.BoxSizer(wx.VERTICAL) 2281 mainSizer.Add(SubstSizer(),0) 2282 2283 mainSizer.Layout() 2284 G2frame.dataDisplay.SetSizer(mainSizer) 2285 G2frame.dataDisplay.SetAutoLayout(1) 2286 G2frame.dataDisplay.SetupScrolling() 2287 Size = mainSizer.Fit(G2frame.dataFrame) 2288 Size[0] += 25 2289 G2frame.dataDisplay.SetSize(Size) 2290 G2frame.dataFrame.setSizePosLeft(Size) 2291 2082 2292 2083 2293 ################################################################################ … … 2104 2314 if not len(data): 2105 2315 FillDefaultModel() 2106 G2frame.dataDisplay = wx.Panel(G2frame.dataFrame) 2316 G2frame.dataFrame.SetLabel('Modelling') 2317 G2frame.dataDisplay = wxscroll.ScrolledPanel(G2frame.dataFrame) 2107 2318 G2frame.dataFrame.Bind(wx.EVT_MENU, OnCopyModel, id=G2gd.wxID_MODELCOPY) 2108 2319 G2frame.dataFrame.Bind(wx.EVT_MENU, OnFitModel, id=G2gd.wxID_MODELFIT) 2320 2321 mainSizer.Layout() 2322 G2frame.dataDisplay.SetSizer(mainSizer) 2323 G2frame.dataDisplay.SetAutoLayout(1) 2324 G2frame.dataDisplay.SetupScrolling() 2325 Size = mainSizer.Fit(G2frame.dataFrame) 2326 Size[0] += 25 2327 G2frame.dataDisplay.SetSize(Size) 2328 G2frame.dataFrame.setSizePosLeft(Size) 2109 2329 2110 2330
Note: See TracChangeset
for help on using the changeset viewer.