- Timestamp:
- Jul 19, 2022 11:11:38 AM (3 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/GSASIIdataGUI.py ¶
r5311 r5312 5729 5729 'No Cluster Analysis possible') 5730 5730 return 5731 5732 print(CAmatrix.shape) 5733 5734 #fill cluster analysis data matrix here 5731 ClusterData['DataMatrix'] = CAmatrix 5732 Ymat = SSD.pdist(CAmatrix,ClusterData['Method']) 5735 5733 5736 5734 Id = GetGPXtreeItemId(self,self.root,'Cluster Analysis') 5737 5735 if not Id: 5738 5736 Id = self.GPXtree.AppendItem(self.root,text='Cluster Analysis') 5739 self.GPXtree.SetItemPyData(Id,{}) #what should go in here by default? 5740 5741 5742 5737 ClustDict = {'ConDistMat':Ymat} 5738 ClustDict.update(ClusterData) 5739 self.GPXtree.SetItemPyData(Id,ClustDict) #what should go in here by default? 5740 5741 self.GPXtree.SelectItem(Id) 5743 5742 5744 5743 def reloadFromGPX(self,rtext=None): … … 7148 7147 data['newLeBail'] = False 7149 7148 if 'Cluster Data' not in data: 7150 data['Cluster Data'] = {'Files':[],'DataMatrix':None,'Method':'euclidean','Limits':[]} 7149 data['Cluster Data'] = {'Files':[],'Method':'euclidean','Limits':[],'DataMatrix':None,'LinkMethod':'single', 7150 'Opt Order':False} 7151 7151 7152 7152 #end patch … … 7279 7279 ClusData['Files'] = names 7280 7280 limits = GetCaLimits(names) 7281 ClusData['Limits'] = [limits,limits] 7281 ClusData['Limits'] = [copy.copy(limits),limits] 7282 ClusData['DataMatrix'] = None 7282 7283 7283 7284 dlg.Destroy() 7284 7285 G2frame.SetTitleByGPX() 7285 7286 7286 7287 7287 wx.CallAfter(UpdateControls,G2frame,data) … … 7299 7299 ClusData['DataMatrix'] = None 7300 7300 7301 def GetYMatSize(): 7302 nData = 0 7303 for name in ClusData['Files']: 7304 item = GetGPXtreeItemId(G2frame,G2frame.root,name) 7305 if 'PWDR' in name: 7306 x = G2frame.GPXtree.GetItemPyData(item)[1][0] 7307 else: 7308 PDFControls = G2frame.GPXtree.GetItemPyData(GetGPXtreeItemId(G2frame, item,'PDF Controls')) 7309 x = PDFControls['G(R)'][1][0] 7310 iBeg = np.searchsorted(x,ClusData['Limits'][1][0]) 7311 iFin = np.searchsorted(x,ClusData['Limits'][1][1])+1 7312 nData += (iFin-iBeg) 7313 return nData 7314 7301 7315 def CheckLimits(invalid,value,tc): 7316 #TODO this needs a check on ultimate size of data array; loop over names & count points? 7317 7302 7318 if ClusData['Limits'][1][1] < ClusData['Limits'][1][0]: 7303 7319 ClusData['Limits'][1] = [ClusData['Limits'][1][1],ClusData['Limits'][1][0]] 7304 wx.CallAfter(UpdateControls,G2frame,data) 7320 wx.CallAfter(UpdateControls,G2frame,data) 7321 7305 7322 7306 7323 clusSizer = wx.BoxSizer(wx.VERTICAL) … … 7320 7337 clusSizer.Add(dataSizer) 7321 7338 if len(ClusData['Files']): 7339 print(' Cluster analysis data array size: %d'%GetYMatSize()) 7322 7340 choice = ['braycurtis', 'canberra', 'chebyshev', 'cityblock', 'correlation', 'cosine', \ 7323 'dice', 'euclidean', 'hamming', 'jaccard', 'jensenshannon', 'kulsinski', \ 7324 'kulczynski1', 'mahalanobis', 'matching', 'minkowski', 'rogerstanimoto', \ 7325 'russellrao', 'seuclidean', 'sokalmichener', 'sokalsneath', 'sqeuclidean', 'yule'] 7341 'euclidean', 'jensenshannon', 'minkowski', 'seuclidean', 'sqeuclidean'] 7326 7342 methsizer = wx.BoxSizer(wx.HORIZONTAL) 7327 7343 methsizer.Add(wx.StaticText(G2frame.dataWindow,label='Select cluster analysis data method: '),0,WACV) … … 7338 7354 xmin=ClusData['Limits'][0][0],xmax=ClusData['Limits'][0][1],OnLeave=CheckLimits),0,WACV) 7339 7355 clusSizer.Add(limitSizer) 7340 clusSizer.Add(wx.StaticText(G2frame.dataWindow,label='(Examine any %s plot for reasonable limits ) '%Type),0,WACV)7356 clusSizer.Add(wx.StaticText(G2frame.dataWindow,label='(Examine any %s plot for reasonable limits; any change will clear Cluster data matrix) '%Type),0,WACV) 7341 7357 return clusSizer 7342 7358 … … 8211 8227 wx.StaticText(G2frame.dataWindow,wx.ID_ANY,'Select one phase to see its parameters')) 8212 8228 elif G2frame.GPXtree.GetItemText(item) == 'Cluster Analysis': 8213 G2frame.dataWindow.GetSizer().Add(8214 wx.StaticText(G2frame.dataWindow,wx.ID_ANY,'Cluster Analysis Results:'))8229 data = G2frame.GPXtree.GetItemPyData(item) 8230 G2seq.UpdateClusterAnalysis(G2frame,data) 8215 8231 elif G2frame.GPXtree.GetItemText(item) == 'Restraints': 8216 8232 data = G2frame.GPXtree.GetItemPyData(item) -
TabularUnified trunk/GSASIImath.py ¶
r5306 r5312 55 55 56 56 ################################################################################ 57 #### #Hessian least-squares Levenberg-Marquardt routine57 #### Hessian least-squares Levenberg-Marquardt routine 58 58 ################################################################################ 59 59 class G2NormException(Exception): pass … … 587 587 588 588 ################################################################################ 589 #### #Atom manipulations589 #### Atom manipulations 590 590 ################################################################################ 591 591 … … 1425 1425 for i in centList: 1426 1426 cent += Cart[i] 1427 model['MolCent'][0] = cent/len(centList) 1427 model['MolCent'][0] = cent/len(centList) 1428 1429 ############################################################################### 1430 #### Various utilities 1431 ############################################################################### 1428 1432 1429 1433 def UpdateRBUIJ(Bmat,Cart,RBObj): … … 2388 2392 2389 2393 ################################################################################ 2390 #### #distance, angle, planes, torsion stuff2394 #### distance, angle, planes, torsion stuff 2391 2395 ################################################################################ 2392 2396 … … 3246 3250 3247 3251 ############################################################################### 3248 #### #Protein validation - "ERRATV2" analysis3252 #### Protein validation - "ERRATV2" analysis 3249 3253 ############################################################################### 3250 3254 … … 3429 3433 3430 3434 ################################################################################ 3431 #### #Texture fitting stuff3435 #### Texture fitting stuff 3432 3436 ################################################################################ 3433 3437 … … 3605 3609 3606 3610 ################################################################################ 3607 #### #Fourier & charge flip stuff3611 #### Fourier & charge flip stuff 3608 3612 ################################################################################ 3609 3613 … … 4561 4565 4562 4566 ################################################################################ 4563 #### #single peak fitting profile fxn stuff4567 #### single peak fitting profile fxn stuff 4564 4568 ################################################################################ 4565 4569 … … 4829 4833 4830 4834 ################################################################################ 4831 #### #MC/SA stuff4835 #### MC/SA stuff 4832 4836 ################################################################################ 4833 4837 … … 5642 5646 return Result,tsum,nsum,rcov 5643 5647 5648 ############################################################################### 5649 #### Cluster Analysis math 5650 ############################################################################### 5651 import scipy.spatial.distance as SSD 5652 import scipy.cluster.hierarchy as SCH 5653 5654 5644 5655 5645 5656 ################################################################################ 5646 #### #Quaternion stuff5657 #### Quaternion stuff 5647 5658 ################################################################################ 5648 5659 -
TabularUnified trunk/GSASIIplot.py ¶
r5307 r5312 2473 2473 def onMovePeak(event): 2474 2474 selectedPeaks = list(set([row for row,col in G2frame.phaseDisplay.GetSelectedCells()] + 2475 2475 G2frame.phaseDisplay.GetSelectedRows())) 2476 2476 if len(selectedPeaks) != 1: 2477 2477 G2G.G2MessageBox(G2frame,'You must select one peak in the table first. # selected ='+ 2478 2478 str(len(selectedPeaks)),'Select one peak') 2479 2479 return 2480 2480 G2frame.itemPicked = G2frame.Lines[selectedPeaks[0]+2] # 1st 2 lines are limits … … 2967 2967 dlg.Destroy() 2968 2968 applyLims(None) # apply limits 2969 #GSASIIpath.IPyBreak()2970 2969 2971 2970 def onPlotFormat(event): -
TabularUnified trunk/GSASIIpwd.py ¶
r5309 r5312 2645 2645 return YI,WYI 2646 2646 2647 #### Cluster Analysis routines ###################################################################2648 2649 2650 2647 #### RMCutilities ################################################################################ 2651 2648 def MakeInst(PWDdata,Name,Size,Mustrain,useSamBrd): -
TabularUnified trunk/GSASIIpwdGUI.py ¶
r5311 r5312 6928 6928 data['FltBack'][1] = backref.GetValue() 6929 6929 6930 def OnSliderMax(event): 6931 data['slider max'] = float(slidermax.GetValue()) 6932 wx.CallAfter(UpdateREFDModelsGrid,G2frame,data) 6933 6930 6934 def Recalculate(invalid,value,tc): 6931 6935 if invalid: … … 6951 6955 backref.SetValue(data['FltBack'][1]) 6952 6956 backref.Bind(wx.EVT_CHECKBOX, OnBackRef) 6953 overall.Add(backref,0,WACV) 6957 overall.Add(backref,0,WACV) 6958 overall.Add(wx.StaticText(G2frame.dataWindow,label=' Select slider range 0-'),0,WACV) 6959 choice = ['1000','2000','5000','10000'] 6960 slidermax = wx.ComboBox(G2frame.dataWindow,value='%d'%data['slider max'],choices=choice, 6961 style=wx.CB_READONLY|wx.CB_DROPDOWN) 6962 slidermax.Bind(wx.EVT_COMBOBOX,OnSliderMax) 6963 overall.Add(slidermax,0,WACV) 6954 6964 return overall 6955 6965 … … 7000 7010 if invalid: 7001 7011 return 7012 if tc and tc.GetId() in Indx: #sets slider 7013 Indx[tc.GetId()].SetValue(value) 7002 7014 G2pwd.REFDModelFxn(Profile,Inst,Limits,Substances,data) 7003 7015 x,xr,y = G2pwd.makeSLDprofile(data,Substances) 7004 7016 ModelPlot(data,x,xr,y) 7005 7017 G2plt.PlotPatterns(G2frame,plotType='REFD') 7006 # wx.CallLater(100,UpdateREFDModelsGrid,G2frame,data) 7018 7019 def OnMoveParm(event): 7020 Obj = event.GetEventObject() 7021 ilay,parm,parmObj = Indx[Obj.GetId()] 7022 move = Obj.GetValue() # +1 or -1 7023 Obj.SetValue(0) 7024 data['Layers'][ilay][parm][0] += move 7025 parmObj.SetValue(data['Layers'][ilay][parm][0]) 7026 Recalculate(False,1.0,None) 7027 7028 def OnParmSlider(event): 7029 Obj = event.GetEventObject() 7030 ilay,parmObj = Indx[Obj.GetId()] 7031 value = Obj.GetValue() 7032 data['Layers'][ilay]['Thick'][0] = value 7033 parmObj.SetValue(data['Layers'][ilay]['Thick'][0]) 7034 Recalculate(False,1.0,None) 7007 7035 7008 7036 Indx = {} … … 7089 7117 if ilay == len(data['Layers'])-1: 7090 7118 parms = ['Rough',] 7119 if len(parms) > 1: 7120 slide = wx.BoxSizer(wx.HORIZONTAL) 7121 slide.Add(wx.StaticText(G2frame.dataWindow,label=' Layer thickness: '),0,WACV) 7122 parmSldr = wx.Slider(G2frame.dataWindow,minValue=0,maxValue=data['slider max'],value=data['Layers'][ilay]['Thick'][0]) 7123 parmSldr.Bind(wx.EVT_SLIDER,OnParmSlider) 7124 slide.Add(parmSldr,1,wx.EXPAND) 7091 7125 for parm in parms: 7092 7126 parmsline.Add(wx.StaticText(G2frame.dataWindow,label=' %s: '%(names[parm])),0,WACV) 7093 parmsline.Add(G2G.ValidatedTxtCtrl(G2frame.dataWindow,data['Layers'][ilay][parm],0, 7094 nDig=(10,2),OnLeave=Recalculate),0,WACV) 7127 parmval = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data['Layers'][ilay][parm],0,nDig=(10,2),OnLeave=Recalculate) 7128 if parm =='Thick': 7129 Indx[parmval.GetId()] = parmSldr 7130 parmsline.Add(parmval,0,WACV) 7131 parmSpin = wx.SpinButton(G2frame.dataWindow,style=wx.SP_VERTICAL,size=wx.Size(25,25)) 7132 Indx[parmSpin.GetId()] = [ilay,parm,parmval] 7133 parmSpin.SetValue(0) 7134 parmSpin.SetRange(-1,1) 7135 parmSpin.Bind(wx.EVT_SPIN, OnMoveParm) 7136 parmsline.Add(parmSpin,0,WACV) 7095 7137 varBox = wx.CheckBox(G2frame.dataWindow,label='Refine?') 7096 7138 Indx[varBox.GetId()] = [ilay,parm] … … 7099 7141 parmsline.Add(varBox,0,WACV) 7100 7142 layerSizer.Add(parmsline) 7143 if len(parms) > 1: 7144 Indx[parmSldr.GetId()] = [ilay,parmval] #parmval is always for Thick 7145 layerSizer.Add(slide,1,wx.EXPAND) 7101 7146 if ilay < len(data['Layers'])-1: 7102 7147 newlayer = wx.BoxSizer(wx.HORIZONTAL) … … 7165 7210 Substances = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,G2frame.PatternId, 'Substances'))['Substances'] 7166 7211 ProfDict,Profile,Name = G2frame.GPXtree.GetItemPyData(G2frame.PatternId)[:3] 7212 #patch 7213 if 'slider max' not in data: 7214 data['slider max'] = 2000. 7167 7215 if 'ifDQ' not in ProfDict: 7168 7216 ProfDict['ifDQ'] = np.any(Profile[5]) -
TabularUnified trunk/GSASIIseqGUI.py ¶
r5307 r5312 1562 1562 #UpdateClusterAnalysis: results 1563 1563 ############################################################################################################### 1564 1565 def UpdateClusterAnalysis(G2frame,data): 1566 import scipy.spatial.distance as SSD 1567 import scipy.cluster.hierarchy as SCH 1564 1568 1569 # import matplotlib.pyplot as plt 1570 # plt.figure() 1571 # Zsingle = SCH.single(data['ConDistMat']) 1572 # SCH.dendrogram(Zsingle) 1573 # plt.show() 1574 # Zcomplete = SCH.complete(data['ConDistMat']) 1575 # SCH.dendrogram(Zcomplete) 1576 # plt.show() 1577 1578 def OnLinkMethod(event): 1579 data['LinkMethod'] = method.GetValue() 1580 1581 def OnOptOrd(event): 1582 data['Opt Order'] = not data['Opt Order'] 1583 1584 def OnCompute(event): 1585 print('Do heirarchial clustering - TBD') 1586 1587 Z = data['ConDistMat'] 1588 ZM = SSD.squareform(Z) 1589 XY = np.mgrid[0:ZM.shape[0],0:ZM.shape[1]] 1590 1591 G2plt.PlotXYZ(G2frame,XY,ZM,labelX='Data no.',labelY='Data No.',newPlot=False,Title=data['Method'],zrange=None,color=None,buttonHandler=None) 1592 1593 bigSizer = wx.BoxSizer(wx.HORIZONTAL) 1594 mainSizer = wx.BoxSizer(wx.VERTICAL) 1595 mainSizer.Add((5,5),0) 1596 subSizer = wx.BoxSizer(wx.HORIZONTAL) 1597 subSizer.Add((-1,-1),1,wx.EXPAND) 1598 subSizer.Add(wx.StaticText(G2frame.dataWindow,label='Cluster Analysis tools: '),0,WACV) 1599 subSizer.Add((-1,-1),1,wx.EXPAND) 1600 mainSizer.Add(subSizer,0,wx.EXPAND) 1601 mainSizer.Add((5,5),0) 1602 hierSizer = wx.BoxSizer(wx.HORIZONTAL) 1603 hierSizer.Add(wx.StaticText(G2frame.dataWindow,label='Hierarchical clustering: Select linkage method: '),0,WACV) 1604 choice = ['single','complete','average','weighted','centroid','median','ward',] 1605 method = wx.ComboBox(G2frame.dataWindow,choices=choice,style=wx.CB_READONLY|wx.CB_DROPDOWN) 1606 method.SetValue(data['LinkMethod']) 1607 method.Bind(wx.EVT_COMBOBOX, OnLinkMethod) 1608 hierSizer.Add(method,0,WACV) 1609 optOrd = wx.CheckBox(G2frame.dataWindow,label=' Optimal order? ') 1610 optOrd.Bind(wx.EVT_CHECKBOX,OnOptOrd) 1611 optOrd.SetValue(data['Opt Order']) 1612 hierSizer.Add(optOrd,0,WACV) 1613 compute = wx.Button(G2frame.dataWindow,label='Compute') 1614 compute.Bind(wx.EVT_BUTTON,OnCompute) 1615 hierSizer.Add(compute,0,WACV) 1616 mainSizer.Add(hierSizer) 1617 1618 1619 1620 1621 bigSizer.Add(mainSizer) 1622 1623 bigSizer.Add(G2G.HelpButton(G2frame.dataWindow,helpIndex='Cluster Analysis')) 1624 bigSizer.Layout() 1625 bigSizer.FitInside(G2frame.dataWindow) 1626 G2frame.dataWindow.SetSizer(bigSizer) 1627 G2frame.dataWindow.SetDataSize() 1628 G2frame.SendSizeEvent() 1629 1630
Note: See TracChangeset
for help on using the changeset viewer.