Changeset 31


Ignore:
Timestamp:
Feb 20, 2010 2:09:56 PM (12 years ago)
Author:
vondreel
Message:

move peak fit, index & refine menus to respective data frames
fix reading mar345 files with overflows

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r29 r31  
    5656
    5757[wxID_GSASIIFILECLOSE, wxID_GSASIIFILEEXIT, wxID_GSASIIFILEOPEN,
    58  wxID_GSASIIFILESAVE, wxID_GSASIIFILESAVEAS, wxID_GSASIIPEAKFIT,
    59  wxID_GSASIIINDEX, wxID_GSASIIAUTOPEAKFIT, wxID_GSASIIUNDO, wxID_GSASIIREFINECELL,
    60 ] = [wx.NewId() for _init_coll_File_Items in range(10)]
     58 wxID_GSASIIFILESAVE, wxID_GSASIIFILESAVEAS, wxID_GSASIIUNDO,
     59] = [wx.NewId() for _init_coll_File_Items in range(6)]
    6160
    6261[wxID_GSASIIPWDRREAD,wxID_GSASIISNGLREAD,wxID_GSASIIADDPHASE,wxID_GSASIIDELETEPHASE,
     
    135134        self.UnDo = parent.Append(help='', id=wxID_GSASIIUNDO, kind=wx.ITEM_NORMAL,
    136135            text='UnDo')
    137         self.PeakFit = parent.Append(help='', id=wxID_GSASIIPEAKFIT, kind=wx.ITEM_NORMAL,
    138             text='PeakFit')
    139         self.AutoPeakFit = parent.Append(help='', id=wxID_GSASIIAUTOPEAKFIT, kind=wx.ITEM_NORMAL,
    140             text='AutoPeakFit')
    141         self.RefineCell = parent.Append(help='', id=wxID_GSASIIREFINECELL, kind=wx.ITEM_NORMAL,
    142             text='RefineCell')
    143         self.IndexPeaks = parent.Append(help='', id=wxID_GSASIIINDEX, kind=wx.ITEM_NORMAL,
    144             text='IndexPeaks')
    145136        self.UnDo.Enable(False)
    146         self.PeakFit.Enable(False)
    147         self.AutoPeakFit.Enable(False)
    148         self.IndexPeaks.Enable(False)
    149         self.RefineCell.Enable(False)
    150137        self.Bind(wx.EVT_MENU, self.OnUnDo, id=wxID_GSASIIUNDO)
    151         self.Bind(wx.EVT_MENU, self.OnPeakFit, id=wxID_GSASIIPEAKFIT)
    152         self.Bind(wx.EVT_MENU, self.OnAutoPeakFit, id=wxID_GSASIIAUTOPEAKFIT)
    153         self.Bind(wx.EVT_MENU, self.OnRefineCell, id=wxID_GSASIIREFINECELL)
    154         self.Bind(wx.EVT_MENU, self.OnIndexPeaks, id=wxID_GSASIIINDEX)
    155138       
    156139    def _init_coll_Import_Items(self,parent):
     
    269252        self.SCevent = []
    270253        self.Sngl = 0
     254        self.ifGetRing = False
    271255
    272256    def OnSize(self,event):
     
    10291013        file.close()
    10301014       
    1031     def OnPeakFit(self,event):
    1032         self.SaveState()
    1033         print 'Peak Fitting - Do one cycle of peak fitting'
    1034         PatternId = self.PatternId
    1035         PickId = self.PickId
    1036         peaks = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Peak List'))
    1037         if not peaks:
    1038             self.ErrorDialog('No peaks!','Nothing to fit!')
    1039             return
    1040         background = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Background'))[0]
    1041         limits = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Limits'))[1]
    1042         inst = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))
    1043         data = self.PatternTree.GetItemPyData(PatternId)[1]
    1044         OK,smin,Rwp,runtime,GoOn = G2cmp.DoPeakFit(peaks,background,limits,inst,data)
    1045         G2gd.UpdatePeakGrid(self,peaks)
    1046         self.PlotPatterns()
    1047         if not OK:
    1048             print 'Refinement failed'
    1049             dlg = wx.MessageDialog(self, 'Do you want to reload now?', 'Refinement failed',  wx.YES_NO)
    1050             try:
    1051                 if dlg.ShowModal() == wx.ID_YES:
    1052                     self.DoUnDo()
    1053                     self.UnDo.Enable(False)
    1054             finally:
    1055                 dlg.Destroy()
    1056         else:
    1057             print "%s%7.2f%s%12.6g" % ('Rwp = ',Rwp,'%, Smin = ',smin)
    1058             print "%s%8.3f%s " % ('fitpeak time =',runtime,'s')
    1059             print 'finished'
    1060         return
    1061        
    1062     def OnAutoPeakFit(self,event):
    1063         self.SaveState()
    1064         print 'AutoPeak Fitting - run until minimized'
    1065         PatternId = self.PatternId
    1066         PickId = self.PickId
    1067         peaks = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Peak List'))
    1068         if not peaks:
    1069             self.ErrorDialog('No peaks!','Nothing to fit!')
    1070             return
    1071         background = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Background'))[0]
    1072         limits = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Limits'))[1]
    1073         inst = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))
    1074         data = self.PatternTree.GetItemPyData(PatternId)[1]
    1075         smin = 1.0e10
    1076         GoOn = True
    1077         while GoOn:
    1078             osmin = smin
    1079             OK,smin,Rwp,runtime,GoOn = G2cmp.DoPeakFit(peaks,background,limits,inst,data)
    1080             print GoOn
    1081             G2gd.UpdatePeakGrid(self,peaks)
    1082             if not OK:
    1083                 break
    1084             self.PlotPatterns()
    1085             print "%s%7.2f%s%12.6g" % ('Rwp = ',Rwp,'%, Smin = ',smin)
    1086             rat = (osmin-smin)/smin
    1087             if rat < 1.0e-4: GoOn = False
    1088         if not OK:
    1089             print 'Refinement failed'
    1090             dlg = wx.MessageDialog(self, 'Do you want to reload now?', 'Refinement failed',  wx.YES_NO)
    1091             try:
    1092                 if dlg.ShowModal() == wx.ID_YES:
    1093                     self.DoUnDo()
    1094                     self.UnDo.Enable(False)
    1095             finally:
    1096                 dlg.Destroy()
    1097         else:
    1098             print "%s%8.3f%s " % ('fitpeak time =',runtime,'s per cycle')
    1099             print 'finished'
    1100         return
    1101        
    1102     def OnRefineCell(self,event):
    1103         def cellPrint(ibrav,A):
    1104             cell = G2cmp.A2cell(A)
    1105             Vol = G2cmp.calc_V(A)
    1106             if ibrav in [0,1,2]:
    1107                 print "%s%10.6f" % ('a =',cell[0])
    1108             elif ibrav in [3,4,5,6]:
    1109                 print "%s%10.6f %s%10.6f %s%12.3f" % ('a =',cell[0],' c =',cell[2],' volume =',Vol)
    1110             elif ibrav in [7,8,9,10]:
    1111                 print "%s%10.6f %s%10.6f %s%10.6f %s%12.3f" % ('a =',cell[0],'b =',cell[1],'c =',cell[2],' volume =',Vol)
    1112             elif ibrav in [11,12]:
    1113                 print "%s%10.6f %s%10.6f %s%10.6f %s%8.3f %s%12.3f" % ('a =',cell[0],'b =',cell[1],'c =',cell[2],'beta =',cell[4],' volume =',Vol)
    1114             else:
    1115                 print "%s%10.6f %s%10.6f %s%10.6f" % ('a =',cell[0],'b =',cell[1],'c =',cell[2])
    1116                 print "%s%8.3f %s%8.3f %s%8.3f %s%12.3f" % ('alpha =',cell[3],'beta =',cell[4],'gamma =',cell[5],' volume =',Vol)
    1117              
    1118         bravaisSymb = ['Fm3m','Im3m','Pm3m','R3-H','P6/mmm','I4/mmm',
    1119             'P4/mmm','Fmmm','Immm','Cmmm','Pmmm','C2/m','P2/m','P1']
    1120         PatternId = self.PatternId
    1121         PickId = self.PickId   
    1122         peaks = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Index Peak List'))
    1123         if not peaks:
    1124             self.ErrorDialog('No peaks!', 'Nothing to refine!')
    1125             return       
    1126         print 'Refine cell'
    1127         inst = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))[1]
    1128         controls,bravais,cells,dmin = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Unit Cells List'))
    1129         cell = controls[6:12]
    1130         A = G2cmp.cell2A(cell)
    1131         print controls[5]
    1132         ibrav = bravaisSymb.index(controls[5])
    1133         dmin = G2cmp.getDmin(peaks)-0.05
    1134         Lhkl,M20,X20 = G2cmp.refinePeaks(peaks,ibrav,A)
    1135         controls[6:12] = G2cmp.A2cell(A)
    1136         controls[12] = G2cmp.calc_V(A)
    1137         data = [controls,bravais,cells,dmin]
    1138         self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Unit Cells List'),data)
    1139         self.HKL = G2cmp.GenHBravais(dmin,ibrav,A)
    1140         G2gd.UpdateUnitCellsGrid(self,data)
    1141         print "%s%10.3f" % ('refinement M20 = ',M20)
    1142         print 'unindexed lines = ',X20
    1143         cellPrint(ibrav,A)
    1144         for hkl in self.HKL:
    1145             hkl.append(2.0*asind(inst[1]/(2.*hkl[3])))             
    1146         self.PlotPatterns()
    1147        
    11481015    def SaveState(self):
    11491016        file = open('GSASII.save','wb')
     
    11541021        self.UnDo.Enable(True)
    11551022         
    1156     def OnIndexPeaks(self,event):
    1157         PatternId = self.PatternId   
    1158         peaks = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Index Peak List'))
    1159         if not peaks:
    1160             self.ErrorDialog('No peaks!', 'Nothing to index!')
    1161             return
    1162         inst = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))[1]
    1163         print 'Peak Indexing'
    1164         try:
    1165             controls,bravais,cells,dmin = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Unit Cells List'))
    1166             cells = []
    1167         except ValueError:
    1168             self.ErrorDialog('Error','Need to set controls in Unit Cell List first')
    1169             return
    1170         if True not in bravais:
    1171             self.ErrorDialog('Error','No Bravais lattices selected')
    1172             return
    1173         self.IndexPeaks.Enable(False)
    1174         self.RefineCell.Enable(False)
    1175         OK,dmin,cells = G2cmp.DoIndexPeaks(peaks,inst,controls,bravais)
    1176         if OK:
    1177             data = [controls,bravais,cells,dmin]
    1178             self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Unit Cells List'),data)
    1179             G2gd.UpdateUnitCellsGrid(self,data)
    1180             bestCell = cells[0]
    1181             if bestCell[0] > 10.:
    1182                 self.HKL = G2cmp.GenHBravais(dmin,bestCell[2],G2cmp.cell2A(bestCell[3:9]))
    1183                 for hkl in self.HKL:
    1184                     hkl.append(2.0*asind(inst[1]/(2.*hkl[3])))             
    1185                 self.PlotPatterns()
    1186         self.RefineCell.Enable(True)
    1187         self.IndexPeaks.Enable(True)
    1188        
    11891023    def ClearEventList(self,eventList):
    11901024        if eventList:
     
    12881122        def OnImMotion(event):
    12891123            self.pdplot.canvas.SetToolTipString('')
     1124            size = len(self.ImageZ)
    12901125            if (xlim[0] < event.xdata < xlim[1]) & (ylim[0] > event.ydata > ylim[1]):
    12911126                item = self.itemPicked
     
    13231158                    cent = Data['center'] = [Xpos*pixelSize[0]/1000.,Ypos*pixelSize[1]/1000.] #convert to mm
    13241159                    self.centText.SetValue(("%8.3f,%8.3f" % (cent[0],cent[1])))
    1325                 elif event.key == 'r':
    1326                     Xpos,Ypos,I,J = G2cmp.ImageLocalMax(self.ImageZ,20,Xpos,Ypos)
    1327                     if I and J:
    1328                         xpos = Xpos*pixelSize[0]/1000.
    1329                         ypos = Ypos*pixelSize[1]/1000.
    1330                         Data['ring'].append([xpos,ypos])
    1331                 elif event.key == 'd':
    1332                     scale = self.imScale*pixelSize[0]/1000.
    1333                     xypos = [event.xdata*scale,event.ydata*scale]
    1334                     rings = Data['ring']
    1335                     for ring in rings:
    1336                         if np.allclose(ring,xypos,.01,0):
    1337                             rings.remove(ring)                                               
    13381160                elif event.key == 'm':
    13391161                    xpos = Xpos*pixelSize[0]/1000.
     
    13431165               
    13441166        def OnImPick(event):
     1167            if self.PatternTree.GetItemText(self.PickId) != 'Image Controls':
     1168                return
    13451169            if self.itemPicked is not None: return
    13461170            pick = event.artist
     
    13481172           
    13491173        def OnImRelease(event):
    1350             if self.itemPicked is None or self.PatternTree.GetItemText(self.PickId) != 'Image Controls': return
     1174            if self.PatternTree.GetItemText(self.PickId) != 'Image Controls':
     1175                return
    13511176            Data = self.PatternTree.GetItemPyData(self.PickId)
    1352             xpos = event.xdata
    1353             if xpos:                                        #avoid out of frame mouse position
    1354                 xcent,ycent = Data['center']
    1355                 xcent *= scalex
    1356                 ycent *= scaley
    1357                 ypos = event.ydata
    1358                 xpos -= xcent
    1359                 ypos -= ycent
    1360                 radius = math.sqrt(xpos**2+ypos**2)
    1361                 xpos /= radius
    1362                 ypos /= radius
    1363                 ang = int(atan2d(-ypos,xpos))
    1364                 if 'Line2D' in str(self.itemPicked):
    1365                     if 'line2' in str(self.itemPicked) and not Data['fullIntegrate']:
    1366                         Data['LRazimuth'][0] = ang
    1367                     elif 'line3' in str(self.itemPicked) and not Data['fullIntegrate']:
    1368                         Data['LRazimuth'][1] = ang
    1369                     elif 'line0' in str(self.itemPicked):
    1370                         Data['IOradii'][0] = radius/scalex
    1371                     elif 'line1' in str(self.itemPicked):
    1372                         Data['IOradii'][1] = radius/scalex
    1373                     if Data['LRazimuth'][1] < Data['LRazimuth'][0]:
    1374                         Data['LRazimuth'][1] += 360
    1375                     if  Data['IOradii'][0] > Data['IOradii'][1]:
    1376                         Data['IOradii'] = G2cmp.SwapXY(Data['IOradii'][0],Data['IOradii'][1])
    1377                     self.IOradText.SetValue("%8.3f,%8.3f" % (Data['IOradii'][0],Data['IOradii'][1]))
    1378                     self.LRazim.SetValue("%6d,%6d" % (Data['LRazimuth'][0],Data['LRazimuth'][1]))
    1379                 elif 'Text' in str(self.itemPicked) and Data['refine'][0]:
    1380                     cent = Data['center'] = [event.xdata/scalex,event.ydata/scalex]
    1381                     try:
    1382                         self.centText.SetValue(("%8.3f,%8.3f" % (cent[0],cent[1])))
    1383                     except AttributeError:
    1384                         pass
    1385                 self.PlotImage()
    1386             self.itemPicked = None
     1177            pixelSize = Data['pixelSize']
     1178            if self.itemPicked is None:
     1179                size = len(self.ImageZ)
     1180                Xpos = event.xdata
     1181                if Xpos and self.ifGetRing:
     1182                    Xpos = int(Xpos)*self.imScale
     1183                else:                   #got point out of frame
     1184                    return
     1185                Ypos = int(event.ydata)*self.imScale
     1186                if Ypos and not self.pdplot.canvas.toolbar._active:         #make sure zoom/pan not selected
     1187                    if event.button == 1:
     1188                        Xpos,Ypos,I,J = G2cmp.ImageLocalMax(self.ImageZ,20,Xpos,Ypos)
     1189                        if I and J:
     1190                            xpos = Xpos*pixelSize[0]/1000.
     1191                            ypos = Ypos*pixelSize[1]/1000.
     1192                            Data['ring'].append([xpos,ypos])
     1193                    self.PlotImage()
     1194                return
     1195            else:
     1196                xpos = event.xdata
     1197                if xpos:                                        #avoid out of frame mouse position
     1198                    ypos = event.ydata
     1199                    if self.ifGetRing:
     1200                        scale = self.imScale*pixelSize[0]/1000.
     1201                        xypos = [xpos*scale,ypos*scale]
     1202                        rings = Data['ring']
     1203                        for ring in rings:
     1204                            if np.allclose(ring,xypos,.01,0):
     1205                                rings.remove(ring)                                                                       
     1206                    else:
     1207                        xcent,ycent = Data['center']
     1208                        xcent *= scalex
     1209                        ycent *= scaley
     1210                        xpos -= xcent
     1211                        ypos -= ycent
     1212                        radius = math.sqrt(xpos**2+ypos**2)
     1213                        xpos /= radius
     1214                        ypos /= radius
     1215                        ang = int(atan2d(-ypos,xpos))
     1216                        if 'Line2D' in str(self.itemPicked):
     1217                            if 'line2' in str(self.itemPicked) and not Data['fullIntegrate']:
     1218                                Data['LRazimuth'][0] = ang
     1219                            elif 'line3' in str(self.itemPicked) and not Data['fullIntegrate']:
     1220                                Data['LRazimuth'][1] = ang
     1221                            elif 'line0' in str(self.itemPicked):
     1222                                Data['IOradii'][0] = radius/scalex
     1223                            elif 'line1' in str(self.itemPicked):
     1224                                Data['IOradii'][1] = radius/scalex
     1225                            if Data['LRazimuth'][1] < Data['LRazimuth'][0]:
     1226                                Data['LRazimuth'][1] += 360
     1227                            if  Data['IOradii'][0] > Data['IOradii'][1]:
     1228                                Data['IOradii'] = G2cmp.SwapXY(Data['IOradii'][0],Data['IOradii'][1])
     1229                            self.IOradText.SetValue("%8.3f,%8.3f" % (Data['IOradii'][0],Data['IOradii'][1]))
     1230                            self.LRazim.SetValue("%6d,%6d" % (Data['LRazimuth'][0],Data['LRazimuth'][1]))
     1231#                        elif 'Text' in str(self.itemPicked) and Data['refine'][0]:
     1232#                            cent = Data['center'] = [event.xdata/scalex,event.ydata/scalex]
     1233#                            try:
     1234#                                self.centText.SetValue(("%8.3f,%8.3f" % (cent[0],cent[1])))
     1235#                            except AttributeError:
     1236#                                pass
     1237                        else:
     1238                            print event.xdata,event.ydata,event.button
     1239                    self.PlotImage()
     1240                self.itemPicked = None
    13871241           
    13881242        newPlot = False
     
    14341288        self.Img = ax.imshow(self.ImageZ[::self.imScale,::self.imScale], \
    14351289            aspect='equal',origin='upper',cmap=acolor, \
    1436             interpolation='nearest',vmin=Imin,vmax=Imax)
     1290            interpolation='nearest',vmin=Imin,vmax=Imax,picker=1)
    14371291        ax.text(xcent,ycent,'+',ha='center',va='center',picker=3)
    14381292        if Data['showLines']:
     
    14591313            xring *= scalex
    14601314            yring *= scaley
    1461             ax.text(xring,yring,'+',ha='center',va='center',picker=3)
     1315            ax.text(xring,yring,'+',color='r',ha='center',va='center',picker=3)
    14621316#        for ring in Data['rings']:
    14631317#            for xring,yring in ring:
  • trunk/GSASIIIO.py

    r29 r31  
    504504            items = line.split()
    505505            size = int(items[1])
    506     line = File.readline()
    507     line = File.readline()
    508     File.seek(4133)
     506    pos = 4096
     507    File.seek(pos)
     508    line = File.read(8)
     509    while 'CCP4' not in line:       #get past overflow list for now
     510        line = File.read(8)
     511        pos += 8
     512    pos += 37
     513    File.seek(pos)
    509514    raw = File.read()
    510515    File.close()
  • trunk/GSASIIcomp.py

    r29 r31  
    13031303    print 'inner ring:',ellipse
    13041304    data['center'] = ellipse[0]           #not right!! (but useful for now)
    1305 #    data['ellipses'].append(ellipse[:])
     1305    data['ellipses'].append(ellipse[:])
    13061306    self.PlotImage()
    13071307   
    13081308    #setup for calibration
    13091309    data['rings'] = []
     1310    data['ellipses'] = []
    13101311    if not data['calibrant']:
    13111312        print 'no calibration material selected'
     
    13321333            ellipse = FitEllipse(Ring)
    13331334            cosb = (1.-ellipse[2][0]**2/ellipse[2][1]**2)*cosd(tth)**2
    1334             print 'for ring #',i,cosb,(ellipse[2][0]**2/ellipse[2][1])/tand(tth)
     1335            print 'for ring #',i,ellipse[1],cosb,(ellipse[2][0]**2/ellipse[2][1])/tand(tth)
    13351336            data['ellipses'].append(copy.deepcopy(ellipse))
    13361337            self.PlotImage()
  • trunk/GSASIIgrid.py

    r29 r31  
    55import math
    66import time
     7import cPickle
    78import GSASIIcomp as G2cmp
    89import GSASIIspc as G2spc
     
    1819] = [wx.NewId() for _init_coll_Atom_Items in range(2)]
    1920
    20 [ wxID_IMCALIBRATE, wxID_IMINTEGRATE,
    21 ] = [wx.NewId() for _init_coll_IMAGE_Items in range(2)]
     21[ wxID_IMCALIBRATE, wxID_IMINTEGRATE, wxID_IMCLEARCALIB,
     22] = [wx.NewId() for _init_coll_IMAGE_Items in range(3)]
     23
     24[ wxID_UNDO,wxID_PEAKFIT,wxID_AUTOPEAKFIT,
     25] = [wx.NewId() for _init_coll_PEAK_Items in range(3)]
     26
     27[  wxID_INDEXPEAKS, wxID_REFINECELL, wxID_COPYCELL,
     28] = [wx.NewId() for _init_coll_INDEX_Items in range(3)]
    2229
    2330class DataFrame(wx.Frame):
     
    3138        parent.Append(menu=self.ImageEdit, title='Image Operations')
    3239       
     40    def _init_coll_PeakMenu(self,parent):
     41        parent.Append(menu=self.PeakEdit, title='Peak Fitting')
     42
     43    def _init_coll_IndexMenu(self,parent):
     44        parent.Append(menu=self.IndexEdit, title='Cell Index/Refine')
     45       
    3346    def _init_coll_Atom_Items(self,parent):
    34         self.Add = parent.Append(help='',id=wxID_ATOMSEDITADD, kind=wx.ITEM_NORMAL,text='Append empty atom')
    35         self.Add = parent.Append(id=wxID_ATOMSEDITINSERT, kind=wx.ITEM_NORMAL,text='Insert empty atom',
     47        parent.Append(help='',id=wxID_ATOMSEDITADD, kind=wx.ITEM_NORMAL,text='Append empty atom')
     48        parent.Append(id=wxID_ATOMSEDITINSERT, kind=wx.ITEM_NORMAL,text='Insert empty atom',
    3649            help='Double left click on atom row to Insert before')
    3750           
    3851    def _init_coll_Image_Items(self,parent):
    39         self.Add = parent.Append(help='',id=wxID_IMCALIBRATE, kind=wx.ITEM_NORMAL,text='Calibrate')
    40         self.Add = parent.Append(id=wxID_IMINTEGRATE, kind=wx.ITEM_NORMAL,text='Integrate',
    41             help='')
     52        parent.Append(help='',id=wxID_IMCALIBRATE, kind=wx.ITEM_NORMAL,text='Calibrate')
     53        parent.Append(help='',id=wxID_IMCLEARCALIB, kind=wx.ITEM_NORMAL,text='Clear calibration')
     54        parent.Append(help='',id=wxID_IMINTEGRATE, kind=wx.ITEM_NORMAL,text='Integrate')
    4255           
    43        
     56    def _init_coll_Peak_Items(self,parent):
     57        self.UnDo = parent.Append(help='', id=wxID_UNDO, kind=wx.ITEM_NORMAL,
     58            text='UnDo')
     59        self.PeakFit = parent.Append(help='', id=wxID_PEAKFIT, kind=wx.ITEM_NORMAL,
     60            text='PeakFit')
     61        self.AutoPeakFit = parent.Append(help='', id=wxID_AUTOPEAKFIT, kind=wx.ITEM_NORMAL,
     62            text='AutoPeakFit')
     63           
     64    def _init_coll_Index_Items(self,parent):
     65        self.IndexPeaks = parent.Append(help='', id=wxID_INDEXPEAKS, kind=wx.ITEM_NORMAL,
     66            text='Index Cell')
     67        self.CopyCell = parent.Append(help='', id=wxID_COPYCELL, kind=wx.ITEM_NORMAL,
     68            text='Copy Cell')
     69        self.RefineCell = parent.Append(help='', id=wxID_REFINECELL, kind=wx.ITEM_NORMAL,
     70            text='Refine Cell')
     71
    4472    def _init_utils(self):
    4573        self.BlankMenu = wx.MenuBar()
     
    4775        self.AtomsMenu = wx.MenuBar()
    4876        self.ImageMenu = wx.MenuBar()
     77        self.PeakMenu = wx.MenuBar()
     78        self.IndexMenu = wx.MenuBar()
    4979        self.AtomEdit = wx.Menu(title='')
    5080        self.ImageEdit = wx.Menu(title='')
     81        self.PeakEdit = wx.Menu(title='')
     82        self.IndexEdit = wx.Menu(title='')
    5183        self._init_coll_AtomsMenu(self.AtomsMenu)
    5284        self._init_coll_Atom_Items(self.AtomEdit)
    5385        self._init_coll_ImageMenu(self.ImageMenu)
    5486        self._init_coll_Image_Items(self.ImageEdit)
    55        
     87        self._init_coll_PeakMenu(self.PeakMenu)
     88        self._init_coll_Peak_Items(self.PeakEdit)
     89        self._init_coll_IndexMenu(self.IndexMenu)
     90        self._init_coll_Index_Items(self.IndexEdit)
     91        self.UnDo.Enable(False)
     92        self.PeakFit.Enable(False)
     93        self.AutoPeakFit.Enable(False)
     94        self.IndexPeaks.Enable(False)
     95        self.CopyCell.Enable(False)
     96        self.RefineCell.Enable(False)
     97               
    5698    def _init_ctrls(self, parent,name=None,size=None,pos=None):
    5799        wx.Frame.__init__(self,parent=parent,style=wx.DEFAULT_FRAME_STYLE ^ wx.CLOSE_BOX,
     
    256298        self.dataDisplay.Destroy()
    257299   
     300    def OnUnDo(event):
     301        DoUnDo()
     302        self.dataFrame.UnDo.Enable(False)
     303       
     304    def DoUnDo():
     305        print 'Undo last refinement'
     306        file = open('GSASII.save','rb')
     307        PatternId = self.PatternId
     308        for item in ['Background','Instrument Parameters','Peak List']:
     309            self.PatternTree.SetItemPyData(GetPatternTreeItemId(self,PatternId, item),cPickle.load(file))
     310            if self.dataDisplay.GetName() == item:
     311                if item == 'Background':
     312                    UpdateBackgroundGrid(self,self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, item)))
     313                elif item == 'Instrument Parameters':
     314                    UpdateInstrumentGrid(self,self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, item)))
     315                elif item == 'Peak List':
     316                    UpdatePeakGrid(self,self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, item)))
     317            print item,' recovered'
     318        file.close()
     319       
     320    def OnPeakFit(event):
     321        self.SaveState()
     322        print 'Peak Fitting - Do one cycle of peak fitting'
     323        PatternId = self.PatternId
     324        PickId = self.PickId
     325        peaks = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Peak List'))
     326        if not peaks:
     327            self.ErrorDialog('No peaks!','Nothing to fit!')
     328            return
     329        background = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Background'))[0]
     330        limits = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Limits'))[1]
     331        inst = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))
     332        data = self.PatternTree.GetItemPyData(PatternId)[1]
     333        OK,smin,Rwp,runtime,GoOn = G2cmp.DoPeakFit(peaks,background,limits,inst,data)
     334        UpdatePeakGrid(self,peaks)
     335        self.PlotPatterns()
     336        if not OK:
     337            print 'Refinement failed'
     338            dlg = wx.MessageDialog(self, 'Do you want to reload now?', 'Refinement failed',  wx.YES_NO)
     339            try:
     340                if dlg.ShowModal() == wx.ID_YES:
     341                    DoUnDo()
     342                    self.dataFrame.UnDo.Enable(False)
     343            finally:
     344                dlg.Destroy()
     345        else:
     346            self.dataFrame.UnDo.Enable(True)
     347            print "%s%7.2f%s%12.6g" % ('Rwp = ',Rwp,'%, Smin = ',smin)
     348            print "%s%8.3f%s " % ('fitpeak time =',runtime,'s')
     349            print 'finished'
     350        return
     351       
     352    def OnAutoPeakFit(event):
     353        self.SaveState()
     354        print 'AutoPeak Fitting - run until minimized'
     355        PatternId = self.PatternId
     356        PickId = self.PickId
     357        peaks = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Peak List'))
     358        if not peaks:
     359            self.ErrorDialog('No peaks!','Nothing to fit!')
     360            return
     361        background = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Background'))[0]
     362        limits = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Limits'))[1]
     363        inst = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))
     364        data = self.PatternTree.GetItemPyData(PatternId)[1]
     365        smin = 1.0e10
     366        GoOn = True
     367        while GoOn:
     368            osmin = smin
     369            OK,smin,Rwp,runtime,GoOn = G2cmp.DoPeakFit(peaks,background,limits,inst,data)
     370            UpdatePeakGrid(self,peaks)
     371            if not OK:
     372                break
     373            self.PlotPatterns()
     374            print "%s%7.2f%s%12.6g" % ('Rwp = ',Rwp,'%, Smin = ',smin)
     375            rat = (osmin-smin)/smin
     376            if rat < 1.0e-4: GoOn = False
     377        if not OK:
     378            print 'Refinement failed'
     379            dlg = wx.MessageDialog(self, 'Do you want to reload now?', 'Refinement failed',  wx.YES_NO)
     380            try:
     381                if dlg.ShowModal() == wx.ID_YES:
     382                    DoUnDo()
     383                    self.dataFrame.UnDo.Enable(False)
     384            finally:
     385                dlg.Destroy()
     386        else:
     387            self.dataFrame.UnDo.Enable(True)
     388            print "%s%8.3f%s " % ('fitpeak time =',runtime,'s per cycle')
     389            print 'finished'
     390        return       
     391
    258392    def RefreshPeakGrid(event):
    259393        event.StopPropagation()
     
    325459        self.PlotPatterns()
    326460           
     461    self.dataFrame.SetMenuBar(self.dataFrame.PeakMenu)
     462    self.Bind(wx.EVT_MENU, OnUnDo, id=wxID_UNDO)
     463    self.Bind(wx.EVT_MENU, OnPeakFit, id=wxID_PEAKFIT)
     464    self.Bind(wx.EVT_MENU, OnAutoPeakFit, id=wxID_AUTOPEAKFIT)
     465    if data:
     466        self.dataFrame.PeakFit.Enable(True)
     467        self.dataFrame.AutoPeakFit.Enable(True)
    327468    self.PickTable = []
    328469    rowLabels = []
     
    335476        wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL]
    336477    T = []
    337     for peak in data:T.append(peak[0])
     478    for peak in data:
     479        T.append(peak[0])
    338480    D = dict(zip(T,data))
    339481    T.sort()
     
    394536    self.BackTable = Table(data,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    395537    self.dataFrame.SetLabel('Background')
     538    self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)
    396539    self.dataDisplay = GSGrid(parent=self.dataFrame)
    397540    self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshBackgroundGrid)               
     
    420563    self.LimitsTable = Table(data,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    421564    self.dataFrame.SetLabel('Limits')
     565    self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)
    422566    self.dataDisplay = GSGrid(parent=self.dataFrame)               
    423567    self.dataDisplay.SetTable(self.LimitsTable, True)
     
    435579        Xwid = 800       
    436580    self.dataFrame.setSizePosLeft([Xwid,150])
     581    self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)
    437582    InstId = GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters')
    438583    def RefreshInstrumentGrid(event):
     
    537682        self.dataDisplay.Destroy()
    538683    self.dataFrame.setSizePosLeft([500,300])
     684    self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)
    539685    inst = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters'))[1]
    540686    self.IndexPeaksTable = []
     
    578724    bravaisSymb = ['Fm3m','Im3m','Pm3m','R3-H','P6/mmm','I4/mmm',
    579725        'P4/mmm','Fmmm','Immm','Cmmm','Pmmm','C2/m','P2/m','P1']
     726       
     727    def OnRefineCell(event):
     728        def cellPrint(ibrav,A):
     729            cell = G2cmp.A2cell(A)
     730            Vol = G2cmp.calc_V(A)
     731            if ibrav in [0,1,2]:
     732                print "%s%10.6f" % ('a =',cell[0])
     733            elif ibrav in [3,4,5,6]:
     734                print "%s%10.6f %s%10.6f %s%12.3f" % ('a =',cell[0],' c =',cell[2],' volume =',Vol)
     735            elif ibrav in [7,8,9,10]:
     736                print "%s%10.6f %s%10.6f %s%10.6f %s%12.3f" % ('a =',cell[0],'b =',cell[1],'c =',cell[2],' volume =',Vol)
     737            elif ibrav in [11,12]:
     738                print "%s%10.6f %s%10.6f %s%10.6f %s%8.3f %s%12.3f" % ('a =',cell[0],'b =',cell[1],'c =',cell[2],'beta =',cell[4],' volume =',Vol)
     739            else:
     740                print "%s%10.6f %s%10.6f %s%10.6f" % ('a =',cell[0],'b =',cell[1],'c =',cell[2])
     741                print "%s%8.3f %s%8.3f %s%8.3f %s%12.3f" % ('alpha =',cell[3],'beta =',cell[4],'gamma =',cell[5],' volume =',Vol)
     742             
     743        bravaisSymb = ['Fm3m','Im3m','Pm3m','R3-H','P6/mmm','I4/mmm',
     744            'P4/mmm','Fmmm','Immm','Cmmm','Pmmm','C2/m','P2/m','P1']
     745        PatternId = self.PatternId
     746        PickId = self.PickId   
     747        peaks = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Index Peak List'))
     748        if not peaks:
     749            self.ErrorDialog('No peaks!', 'Nothing to refine!')
     750            return       
     751        print 'Refine cell'
     752        inst = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))[1]
     753        controls,bravais,cells,dmin = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Unit Cells List'))
     754        cell = controls[6:12]
     755        A = G2cmp.cell2A(cell)
     756        print controls[5]
     757        ibrav = bravaisSymb.index(controls[5])
     758        dmin = G2cmp.getDmin(peaks)-0.05
     759        Lhkl,M20,X20 = G2cmp.refinePeaks(peaks,ibrav,A)
     760        controls[6:12] = G2cmp.A2cell(A)
     761        controls[12] = G2cmp.calc_V(A)
     762        data = [controls,bravais,cells,dmin]
     763        self.PatternTree.SetItemPyData(GetPatternTreeItemId(self,PatternId, 'Unit Cells List'),data)
     764        self.HKL = G2cmp.GenHBravais(dmin,ibrav,A)
     765        UpdateUnitCellsGrid(self,data)
     766        print "%s%10.3f" % ('refinement M20 = ',M20)
     767        print 'unindexed lines = ',X20
     768        cellPrint(ibrav,A)
     769        for hkl in self.HKL:
     770            hkl.append(2.0*asind(inst[1]/(2.*hkl[3])))             
     771        self.PlotPatterns()
     772       
     773    def OnIndexPeaks(event):
     774        PatternId = self.PatternId   
     775        peaks = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Index Peak List'))
     776        if not peaks:
     777            self.ErrorDialog('No peaks!', 'Nothing to index!')
     778            return
     779        inst = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))[1]
     780        print 'Peak Indexing'
     781        try:
     782            controls,bravais,cells,dmin = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Unit Cells List'))
     783            cells = []
     784        except ValueError:
     785            self.ErrorDialog('Error','Need to set controls in Unit Cell List first')
     786            return
     787        if True not in bravais:
     788            self.ErrorDialog('Error','No Bravais lattices selected')
     789            return
     790        self.dataFrame.IndexPeaks.Enable(False)
     791        self.dataFrame.CopyCell.Enable(False)
     792        OK,dmin,cells = G2cmp.DoIndexPeaks(peaks,inst,controls,bravais)
     793        if OK:
     794            data = [controls,bravais,cells,dmin]
     795            self.PatternTree.SetItemPyData(GetPatternTreeItemId(self,PatternId, 'Unit Cells List'),data)
     796            UpdateUnitCellsGrid(self,data)
     797            bestCell = cells[0]
     798            if bestCell[0] > 10.:
     799                self.HKL = G2cmp.GenHBravais(dmin,bestCell[2],G2cmp.cell2A(bestCell[3:9]))
     800                for hkl in self.HKL:
     801                    hkl.append(2.0*asind(inst[1]/(2.*hkl[3])))             
     802                self.PlotPatterns()
     803        self.dataFrame.CopyCell.Enable(True)
     804        self.dataFrame.IndexPeaks.Enable(True)
     805               
    580806    def CopyUnitCell(event):
    581         if event.GetCol() == 6:
    582             row = event.GetRow()
    583             controls,bravais,cells,dmin = self.PatternTree.GetItemPyData(UnitCellsId)
    584             cell = cells[row][2:9]
    585             controls[4] = 1
    586             controls[5] = bravaisSymb[cell[0]]
    587             controls[6:12] = cell[1:8]
    588             controls[12] = G2cmp.calc_V(G2cmp.cell2A(controls[6:12]))
    589             for i in range(4,13):
    590                 self.UnitCellsTable.SetValue(i,1,controls[i])
    591             self.PatternTree.SetItemPyData(UnitCellsId,[controls,bravais,cells,dmin])
    592             self.dataDisplay.ForceRefresh()
    593             self.RefineCell.Enable(True)
     807        controls,bravais,cells,dmin = self.PatternTree.GetItemPyData(UnitCellsId)
     808        for Cell in cells:
     809            if Cell[-1]:
     810                break
     811        cell = Cell[2:9]
     812        controls[4] = 1
     813        controls[5] = bravaisSymb[cell[0]]
     814        controls[6:12] = cell[1:8]
     815        controls[12] = G2cmp.calc_V(G2cmp.cell2A(controls[6:12]))
     816        for i in range(4,13):
     817            self.UnitCellsTable.SetValue(i,1,controls[i])
     818        self.PatternTree.SetItemPyData(UnitCellsId,[controls,bravais,cells,dmin])
     819        self.dataDisplay.ForceRefresh()
     820        self.dataFrame.RefineCell.Enable(True)
     821           
    594822    def RefreshUnitCellsGrid(event):
    595823        cells,dmin = self.PatternTree.GetItemPyData(UnitCellsId)[2:]
     
    671899        self.dataDisplay.ForceRefresh()
    672900        if controls[4] and not False in controls[6:12]:
    673             self.RefineCell.Enable(True)
     901            self.dataFrame.RefineCell.Enable(True)
    674902        else:
    675             self.RefineCell.Enable(False)
     903            self.dataFrame.RefineCell.Enable(False)
    676904        data = [controls,bravais,cells,dmin]                   
    677905        self.PatternTree.SetItemPyData(UnitCellsId,data)
     
    679907    if self.dataDisplay:
    680908        self.dataDisplay.Destroy()
     909    self.dataFrame.SetMenuBar(self.dataFrame.IndexMenu)
     910    self.Bind(wx.EVT_MENU, OnIndexPeaks, id=wxID_INDEXPEAKS)
     911    self.Bind(wx.EVT_MENU, CopyUnitCell, id=wxID_COPYCELL)
     912    self.Bind(wx.EVT_MENU, OnRefineCell, id=wxID_REFINECELL)
    681913    self.UnitCellsTable = []
    682914    controls,bravais,cells,dmin = data
     
    735967    self.dataDisplay.SetTable(self.UnitCellsTable, True)
    736968    self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshUnitCellsGrid)
    737     self.dataDisplay.Bind(wg.EVT_GRID_CELL_RIGHT_DCLICK, CopyUnitCell)
    738     if cells:
    739         self.dataDisplay.GetGridWindow().SetToolTipString('Right d-click "use" box to copy cell to controls')
    740969    self.dataDisplay.SetMargins(0,0)
    741970    self.dataDisplay.SetRowLabelSize(0)
     
    762991        self.dataDisplay.SetReadOnly(i,3,isReadOnly=True)
    763992    if cells:
     993        self.dataFrame.CopyCell.Enable(True)
    764994        for r in range(max(len(cells),14)):
    765995            if r > 12:
     
    7751005    self.dataDisplay.AutoSizeColumns(False)
    7761006    if controls[4] and not False in controls[6:12]:
    777         self.RefineCell.Enable(True)
     1007        self.dataFrame.RefineCell.Enable(True)
    7781008    else:
    779         self.RefineCell.Enable(False)
     1009        self.dataFrame.RefineCell.Enable(False)
    7801010       
    7811011def UpdateHKLControls(self,data):
     
    8191049        typeChoices = ['Fosq','Fo']
    8201050    self.dataDisplay = wx.Panel(self.dataFrame)
     1051    self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)
    8211052    mainSizer = wx.BoxSizer(wx.VERTICAL)
    8221053    mainSizer.Add((5,10),0)
     
    9401171        self.PlotImage()
    9411172       
    942        
    9431173    def OnSetDefault(event):
    9441174        import copy
     
    9551185        data['ellipses'] = []
    9561186        self.PlotImage()
    957         clearCalib.SetValue(False)
    9581187           
    959     def OnCalibrate(event):
     1188    def OnCalibrate(event):       
     1189        msg = \
     1190        '''Select > 5 points on inner ring of image pattern.
     1191        Click right mouse button to select point.
     1192          Use left mouse button to delete point.
     1193                 Press OK when done'''
     1194        dlg = wx.MessageDialog(self,msg,'Pick inner ring',wx.OK)
     1195        self.ifGetRing = True
     1196        dlg.ShowModal()
     1197        self.ifGetRing = False
     1198       
    9601199        if G2cmp.ImageCalibrate(self,data):
    9611200            Status.SetStatusText('Calibration successful')
     
    9701209    def SetStatusLine():
    9711210        if data['refine'][0]:
    972             Status.SetStatusText("On Image: key 'c' to mark center, 'r' on inner ring for calibration or 'd' to delete")
     1211            Status.SetStatusText("On Image: key 'c' to mark center")
    9731212        else:
    974             Status.SetStatusText("On Image: key 'r' on inner ring for calibration or 'd' to delete")
     1213            Status.SetStatusText("")
    9751214                             
    9761215    colorList = [m for m in mpl.cm.datad.keys() if not m.endswith("_r")]
     
    9821221    SetStatusLine()
    9831222    self.dataFrame.Bind(wx.EVT_MENU, OnCalibrate, id=wxID_IMCALIBRATE)
     1223    self.dataFrame.Bind(wx.EVT_MENU, OnClearCalib, id=wxID_IMCLEARCALIB)   
    9841224    self.dataFrame.Bind(wx.EVT_MENU, OnIntegrate, id=wxID_IMINTEGRATE)       
    9851225    self.dataDisplay = wx.Panel(self.dataFrame)
     
    11101350    setDefault.Bind(wx.EVT_CHECKBOX, OnSetDefault)
    11111351    setDefault.SetValue(data['setDefault'])
    1112     clearCalib = wx.CheckBox(parent=self.dataDisplay,label='Clear calibration rings?')
    1113     dataSizer.Add(clearCalib,0)
    1114     clearCalib.Bind(wx.EVT_CHECKBOX, OnClearCalib)
     1352    dataSizer.Add((10,5),0)
    11151353       
    11161354    mainSizer.Add(dataSizer,0)
     
    14261664        FillAtomsGrid()
    14271665       
    1428 
    14291666    def UpdateDrawing():
    14301667        print 'Drawing'
     
    14491686        self.dataDisplay.Destroy()                   
    14501687    PhaseName = self.PatternTree.GetItemText(item)
     1688    self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)
    14511689    self.dataFrame.SetLabel('Phase Data for '+PhaseName)
    14521690    self.dataDisplay = GSNoteBook(parent=self.dataFrame,size=self.dataFrame.GetClientSize())
     
    14851723    oldPage = 0
    14861724    if self.dataFrame:
     1725        self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)
    14871726        if self.dataFrame.GetLabel() == 'Comments':
    14881727            data = [self.dataDisplay.GetValue()]
     
    15051744    self.PickId = 0
    15061745    self.PatternId = 0
    1507     self.PeakFit.Enable(False)
    1508     self.AutoPeakFit.Enable(False)
    1509     self.IndexPeaks.Enable(False)
    1510     self.RefineCell.Enable(False)
    15111746    parentID = self.root
    15121747    if item != self.root:
     
    15601795    elif self.PatternTree.GetItemText(item) == 'Peak List':
    15611796        self.PatternId = self.PatternTree.GetItemParent(item)
    1562         self.PeakFit.Enable(True)
    15631797        self.ExportPeakList.Enable(True)
    1564         self.AutoPeakFit.Enable(True)
    15651798        self.PickId = item
    15661799        data = self.PatternTree.GetItemPyData(item)
     
    15951828    elif self.PatternTree.GetItemText(item) == 'Unit Cells List':
    15961829        self.PatternId = self.PatternTree.GetItemParent(item)
    1597         self.IndexPeaks.Enable(True)
    15981830        self.PickId = item
    15991831        data = self.PatternTree.GetItemPyData(item)
     
    16051837            self.PatternTree.SetItemPyData(item,data)                             
    16061838        UpdateUnitCellsGrid(self,data)
     1839        self.dataFrame.RefineCell.Enable(True)
     1840        self.dataFrame.IndexPeaks.Enable(True)
    16071841        self.NewPlot = True
    16081842        self.PlotPatterns()
Note: See TracChangeset for help on using the changeset viewer.