Changeset 1138 for trunk/GSASII.py
- Timestamp:
- Nov 7, 2013 12:12:55 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r1128 r1138 556 556 Id = self.PatternTree.AppendItem(parent=self.root, 557 557 text='HKLF '+HistName) 558 self.PatternTree.SetItemPyData(Id,[{'wtFactor':1.0,'Dummy':False},rd.RefDict]) 558 valuesdict = { 559 'wtFactor':1.0, 560 'Dummy':False, 561 'ranId':ran.randint(0,sys.maxint), 562 } 563 self.PatternTree.SetItemPyData(Id,[valuesdict,rd.RefDict]) 559 564 Sub = self.PatternTree.AppendItem(Id,text='Instrument Parameters') 560 565 self.PatternTree.SetItemPyData(Sub,rd.Parameters) … … 980 985 Tmin = min(rd.powderdata[0]) 981 986 Tmax = max(rd.powderdata[0]) 982 self.PatternTree.SetItemPyData(Id,[{'wtFactor':1.0,'Dummy':False},rd.powderdata]) 987 valuesdict = { 988 'wtFactor':1.0, 989 'Dummy':False, 990 'ranId':ran.randint(0,sys.maxint), 991 } 992 rd.Sample['ranId'] = valuesdict['ranId'] # this should be removed someday 993 self.PatternTree.SetItemPyData(Id,[valuesdict,rd.powderdata]) 983 994 self.PatternTree.SetItemPyData( 984 995 self.PatternTree.AppendItem(Id,text='Comments'), … … 1093 1104 Id = self.PatternTree.AppendItem(parent=self.root, 1094 1105 text='PWDR '+inp[0]) 1095 self.PatternTree.SetItemPyData(Id,[{'wtFactor':1.0,'Dummy':True},rd.powderdata]) 1106 valuesdict = { 1107 'wtFactor':1.0, 1108 'Dummy':True, 1109 'ranId':ran.randint(0,sys.maxint), 1110 } 1111 self.PatternTree.SetItemPyData(Id,[valuesdict,rd.powderdata]) 1096 1112 self.PatternTree.SetItemPyData( 1097 1113 self.PatternTree.AppendItem(Id,text='Comments'), … … 1737 1753 def GetData(self): 1738 1754 return self.data 1739 1740 class ConstraintDialog(wx.Dialog): 1741 '''Window to edit Constraint values 1742 ''' 1743 def __init__(self,parent,title,text,data,separator='*'): 1744 wx.Dialog.__init__(self,parent,-1,title, 1745 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 1746 self.data = data 1747 panel = wx.Panel(self) 1748 mainSizer = wx.BoxSizer(wx.VERTICAL) 1749 topLabl = wx.StaticText(panel,-1,text) 1750 mainSizer.Add((10,10),1) 1751 mainSizer.Add(topLabl,0,wx.ALIGN_CENTER_VERTICAL|wx.LEFT,10) 1752 mainSizer.Add((10,10),1) 1753 dataGridSizer = wx.FlexGridSizer(rows=len(data),cols=2,hgap=2,vgap=2) 1754 for id,item in enumerate(self.data[:-1]): 1755 lbl = item[1] 1756 if lbl[-1] != '=': lbl += ' ' + separator + ' ' 1757 name = wx.StaticText(panel,-1,lbl,size=wx.Size(200,20), 1758 style=wx.ALIGN_RIGHT) 1759 scale = wx.TextCtrl(panel,id,'%.3f'%(item[0]),style=wx.TE_PROCESS_ENTER) 1760 scale.Bind(wx.EVT_TEXT_ENTER,self.OnScaleChange) 1761 scale.Bind(wx.EVT_KILL_FOCUS,self.OnScaleChange) 1762 dataGridSizer.Add(name,0,wx.LEFT,10) 1763 dataGridSizer.Add(scale,0,wx.RIGHT,10) 1764 mainSizer.Add(dataGridSizer,0,wx.EXPAND) 1765 OkBtn = wx.Button(panel,-1,"Ok") 1766 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 1767 cancelBtn = wx.Button(panel,-1,"Cancel") 1768 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 1769 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 1770 btnSizer.Add((20,20),1) 1771 btnSizer.Add(OkBtn) 1772 btnSizer.Add((20,20),1) 1773 btnSizer.Add(cancelBtn) 1774 btnSizer.Add((20,20),1) 1775 1776 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 1777 panel.SetSizer(mainSizer) 1778 panel.Fit() 1779 self.Fit() 1780 self.CenterOnParent() 1781 1782 def OnNameChange(self,event): 1783 self.data[-1] = self.name.GetValue() 1784 1785 def OnScaleChange(self,event): 1786 id = event.GetId() 1787 value = self.FindWindowById(id).GetValue() 1788 try: 1789 self.data[id][0] = float(value) 1790 self.FindWindowById(id).SetValue('%.3f'%(self.data[id][0])) 1791 except ValueError: 1792 if value and '-' not in value[0]: 1793 print 'bad input - numbers only' 1794 self.FindWindowById(id).SetValue('0.000') 1795 1796 def OnOk(self,event): 1797 parent = self.GetParent() 1798 parent.Raise() 1799 self.EndModal(wx.ID_OK) 1800 1801 def OnCancel(self,event): 1802 parent = self.GetParent() 1803 parent.Raise() 1804 self.EndModal(wx.ID_CANCEL) 1805 1806 def GetData(self): 1807 return self.data 1808 1755 1809 1756 def OnPwdrSum(self,event): 1810 1757 'Sum together powder data(?)' … … 1886 1833 if Id: 1887 1834 Sample = G2pdG.SetDefaultSample() 1888 self.PatternTree.SetItemPyData(Id,[{'wtFactor':1.0,'Dummy':False},[np.array(Xsum),np.array(Ysum),np.array(Wsum), 1835 valuesdict = { 1836 'wtFactor':1.0, 1837 'Dummy':False, 1838 'ranId':ran.randint(0,sys.maxint), 1839 } 1840 self.PatternTree.SetItemPyData(Id,[valuesdict,[np.array(Xsum),np.array(Ysum),np.array(Wsum), 1889 1841 np.array(YCsum),np.array(YBsum),np.array(YDsum)]]) 1890 1842 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),Comments) … … 2457 2409 PWDRdata['Sample Parameters'] = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PWDRname,'Sample Parameters')) 2458 2410 PWDRdata['Reflection Lists'] = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PWDRname,'Reflection Lists')) 2459 if 'ranId' not in PWDRdata['Sample Parameters']: 2460 PWDRdata['Sample Parameters']['ranId'] = ran.randint(0,sys.maxint) 2461 PWDRdata['ranId'] = PWDRdata['Sample Parameters']['ranId'] 2411 if 'ranId' not in PWDRdata: # patch, add a random Id 2412 PWDRdata['ranId'] = ran.randint(0,sys.maxint) 2413 if 'ranId' not in PWDRdata['Sample Parameters']: # I hope this becomes obsolete at some point 2414 PWDRdata['Sample Parameters']['ranId'] = PWDRdata['ranId'] 2462 2415 return PWDRdata 2463 2416 … … 2483 2436 2484 2437 def GetPhaseData(self): 2485 '''Returns a list of defined phases. Used only in GSASIIgrid 2486 Note routine :meth:`GSASIIstruct.GetPhaseData` also exists. 2438 '''Returns a dict with defined phases. 2439 Note routine :func:`GSASIIstrIO.GetPhaseData` also exists to 2440 get same info from GPX file. 2487 2441 ''' 2488 2442 phaseData = {} … … 2490 2444 sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases') 2491 2445 else: 2492 print 'no phases to be refined'2493 return2446 print 'no phases found in GetPhaseData' 2447 sub = None 2494 2448 if sub: 2495 2449 item, cookie = self.PatternTree.GetFirstChild(sub) … … 2500 2454 phaseData[phaseName]['ranId'] = ran.randint(0,sys.maxint) 2501 2455 item, cookie = self.PatternTree.GetNextChild(sub, cookie) 2502 return phaseData 2456 return phaseData 2457 2458 def GetPhaseNames(self): 2459 '''Returns a list of defined phases. 2460 Note routine :func:`GSASIIstrIO.GetPhaseNames` also exists to 2461 get same info from GPX file. 2462 ''' 2463 phaseNames = [] 2464 if G2gd.GetPatternTreeItemId(self,self.root,'Phases'): 2465 sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases') 2466 else: 2467 print 'no phases found in GetPhaseNames' 2468 sub = None 2469 if sub: 2470 item, cookie = self.PatternTree.GetFirstChild(sub) 2471 while item: 2472 phase = self.PatternTree.GetItemText(item) 2473 phaseNames.append(phase) 2474 item, cookie = self.PatternTree.GetNextChild(sub, cookie) 2475 return phaseNames 2476 2477 def GetHistogramNames(self,hType): 2478 """ Returns a list of histogram names found in the GSASII data tree 2479 Note routine :func:`GSASIIstrIO.GetHistogramNames` also exists to 2480 get same info from GPX file. 2481 2482 :param str hType: list of histogram types 2483 :return: list of histogram names 2484 2485 """ 2486 HistogramNames = [] 2487 if self.PatternTree.GetCount(): 2488 item, cookie = self.PatternTree.GetFirstChild(self.root) 2489 while item: 2490 name = self.PatternTree.GetItemText(item) 2491 if name[:4] in hType: 2492 HistogramNames.append(name) 2493 item, cookie = self.PatternTree.GetNextChild(self.root, cookie) 2494 2495 return HistogramNames 2496 2503 2497 2504 2498 def GetUsedHistogramsAndPhasesfromTree(self): 2505 2499 ''' Returns all histograms that are found in any phase 2506 and any phase that uses a histogram 2507 :returns: two dicts: 2500 and any phase that uses a histogram. 2501 This also assigns numbers to used phases and histograms by the 2502 order they appear in the file. 2503 Note routine :func:`GSASIIstrIO.GetUsedHistogramsAndPhasesfromTree` also exists to 2504 get same info from GPX file. 2505 2506 :returns: (Histograms,Phases) 2508 2507 2509 2508 * Histograms = dictionary of histograms as {name:data,...} 2510 2509 * Phases = dictionary of phases that use histograms 2511 2510 ''' 2512 phaseData = self.GetPhaseData()2513 if not phaseData:2514 return {},{}2515 2511 Histograms = {} 2516 2512 Phases = {} 2513 phaseNames = self.GetPhaseNames() 2514 phaseData = self.GetPhaseData() 2515 histoList = self.GetHistogramNames(['PWDR','HKLF']) 2516 2517 2517 for phase in phaseData: 2518 2518 Phase = phaseData[phase] 2519 2519 if Phase['Histograms']: 2520 2520 if phase not in Phases: 2521 pId = phaseNames.index(phase) 2522 Phase['pId'] = pId 2521 2523 Phases[phase] = Phase 2522 2524 for hist in Phase['Histograms']: 2523 if hist not in Histograms: 2525 if 'Use' not in Phase['Histograms'][hist]: #patch: add Use flag as True 2526 Phase['Histograms'][hist]['Use'] = True 2527 if hist not in Histograms and Phase['Histograms'][hist]['Use']: 2524 2528 item = G2gd.GetPatternTreeItemId(self,self.root,hist) 2525 if 'PWDR' in hist[:4]: 2526 Histograms[hist] = self.GetPWDRdatafromTree(item) 2527 elif 'HKLF' in hist[:4]: 2528 Histograms[hist] = self.GetHKLFdatafromTree(item) 2529 #future restraint, etc. histograms here 2529 if item: 2530 if 'PWDR' in hist[:4]: 2531 Histograms[hist] = self.GetPWDRdatafromTree(item) 2532 elif 'HKLF' in hist[:4]: 2533 Histograms[hist] = self.GetHKLFdatafromTree(item) 2534 hId = histoList.index(hist) 2535 Histograms[hist]['hId'] = hId 2536 else: # would happen if a referenced histogram were renamed or deleted 2537 print('For phase "'+str(phase)+ 2538 '" unresolved reference to histogram "'+str(hist)+'"') 2530 2539 return Histograms,Phases 2531 2540
Note: See TracChangeset
for help on using the changeset viewer.