Changeset 4801 for trunk


Ignore:
Timestamp:
Feb 5, 2021 10:14:23 PM (2 years ago)
Author:
toby
Message:

Cleanup deleted hists in Phase/data; improve help button location; mac: use default browser for help; G2compare filter projects by histogram

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/G2compare.py

    r4785 r4801  
    162162        item = File.Append(wx.ID_ANY,'&Import single project...\tCtrl+O','Open a GSAS-II project file (*.gpx)')           
    163163        self.Bind(wx.EVT_MENU, self.onLoadGPX, id=item.GetId())
    164         item = File.Append(wx.ID_ANY,'&Import multiple projects...\tCtrl+M','Open a GSAS-II project file (*.gpx)')           
     164        item = File.Append(wx.ID_ANY,'&Import multiple projects...\tCtrl+U','Open a GSAS-II project file (*.gpx)')
    165165        self.Bind(wx.EVT_MENU, self.onLoadMultGPX, id=item.GetId())
    166166        item = File.Append(wx.ID_ANY,'&Wildcard import of projects...\tCtrl+W','Open a GSAS-II project file (*.gpx)')           
     
    177177                                                 'Display {}s'.format(m))
    178178            self.Bind(wx.EVT_MENU, self.onRefresh, id=item.GetId())
    179         item = self.Mode.Append(wx.ID_ANY,'Set histogram filter','Set a filter for histograms to display')
    180         self.Bind(wx.EVT_MENU, self.onHistFilter, id=item.GetId())
     179        self.hFilter = self.Mode.Append(wx.ID_ANY,'Filter by histogram\tCtrl+F','Only show selected histograms')
     180        self.Bind(wx.EVT_MENU, self.onHistFilter, id=self.hFilter.GetId())
    181181        modeMenu = wx.Menu(title='')
    182182        self.MenuBar.Append(menu=modeMenu, title='TBD')
    183183        self.modeMenuPos = self.MenuBar.FindMenu('TBD')
    184         #item = modeMenu.Append(wx.ID_ANY,'test') # menu can't be empty
    185184       
    186185        Frame.SetMenuBar(self.MenuBar)
     
    227226
    228227        self.fileList = []  # list of files read for use in Reload
    229         self.histList = []  # list of histograms loaded for unique naming
     228        self.histListOrg = [] # list of histograms, before mods for unique naming
     229        self.histList = []  # list of histograms, after mods for unique naming
    230230        self.projList = []
    231231
     
    298298        self.GPXtree.DeleteChildren(self.root)  # delete tree contents
    299299        self.histList = []  # clear list of loaded histograms
     300        self.histListOrg = []
    300301        self.projList = []
     302        self.hFilter.Enable(not self.getMode() == "Phase") # Filter disabled for Phase display
    301303        for fil,mode in self.fileList:
    302304            self.loadFile(fil)
     
    410412                    break
    411413                if not data[0][0].startswith('PWDR'): continue
     414                self.histListOrg.append(data[0][0])
    412415                if self.PWDRfilter is not None: # implement filter
    413416                    if self.PWDRfilter not in data[0][0]: continue
     
    459462    def onHistFilter(self,event):
    460463        'Load a filter string via a dialog in response to a menu event'
    461         lbl = ''
     464        defval = ''
    462465        if self.PWDRfilter is not None:
    463             lbl = self.PWDRfilter
     466            defval = self.PWDRfilter
     467        uniqueHist = sorted(set(self.histListOrg))
    464468        dlg = G2G.SingleStringDialog(self,'Set string',
    465469                                'Set a string that must be in histogram name',
    466                                  lbl,size=(400,-1))
     470                                defval, choices=uniqueHist, size=(400,-1))
    467471        if dlg.Show():
    468472            if dlg.GetValue().strip() == '':
     
    550554        #Phases = None
    551555        #G2frame.GPXtree.SetItemPyData(Id,Covar[1])
     556        if self.PWDRfilter is None: # implement filter
     557            match = True
     558        else:
     559            match = False
     560        Covar = None
    552561        try:
    553562            while True:
     
    556565                except EOFError:
    557566                    break
    558                 #if data[0][0] == 'Controls' and 'LastSavedUsing' in data[0][1]:
     567                if data[0][0].startswith('PWDR'):
     568                    self.histListOrg.append(data[0][0])
     569                    if self.PWDRfilter is not None: # implement filter
     570                        if self.PWDRfilter in data[0][0]: match = True
    559571                if not data[0][0].startswith('Covariance'): continue
    560572                Covar = data[0]
     
    570582                        projInfo += ['?']
    571583                    f = '{:6.2f}'
    572                 #GSASIIpath.IPyBreak_base()
    573                 #if self.PWDRfilter is not None: # implement filter
    574                 #    if self.PWDRfilter not in data[0][0]: continue
    575584                Covar[0] = shortname # + ' Covariance'
     585            if match and Covar:
    576586                Id = G2frame.GPXtree.AppendItem(parent=G2frame.root,text=Covar[0])
    577587                G2frame.GPXtree.SetItemPyData(Id,Covar[1])
    578588                self.projList.append(projInfo)
    579                 break
    580             else:
    581                 print("{} does not have refinement results".format(shortname))
    582589        except Exception as errmsg:
    583590            if GSASIIpath.GetConfigValue('debug'):
     
    880887    GSASIIpath.InvokeDebugOpts()
    881888    Frame = main(application) # start the GUI
     889    loadall = False
    882890    argLoadlist = sys.argv[1:]
    883891    for arg in argLoadlist:
     
    886894            Frame.fileList.append([fil,'GPX'])
    887895            Frame.loadFile(fil)
     896        elif '-d' in arg:
     897            loadall = True
    888898        else:
    889899            print('File {} not found. Skipping'.format(fil))
    890900    Frame.doneLoad()
    891901    # debug code to select Project in initial mode
    892     #Frame.onLoadWildGPX(None,wildcard='*')
    893     #Frame.Mode.FindItemById(Frame.wxID_Mode['Project']).Check(True)
    894     #Frame.onRefresh(None)
     902    if loadall:
     903        Frame.onLoadWildGPX(None,wildcard='*')
     904        Frame.Mode.FindItemById(Frame.wxID_Mode['Project']).Check(True)
     905        Frame.onRefresh(None)
    895906   
    896907    application.MainLoop()
  • trunk/GSASIIctrlGUI.py

    r4799 r4801  
    26892689    :param str prompt: string to tell use what they are inputting
    26902690    :param str value: default input value, if any
     2691    :param tuple size: specifies default size and width for dialog
     2692      [default (200,-1)]
     2693    :param str help: if supplied, a help button is added to the dialog that
     2694      can be used to display the supplied help text/URL for setting this
     2695      variable. (Default is '', which is ignored.)
     2696    :param list choices: a set of strings that provide optional values that
     2697      can be selected from; these can be edited if desired.
    26912698    '''
    2692     def __init__(self,parent,title,prompt,value='',size=(200,-1),help=''):
     2699    def __init__(self,parent,title,prompt,value='',size=(200,-1),help='',
     2700                     choices=None):
    26932701        wx.Dialog.__init__(self,parent,wx.ID_ANY,title,pos=wx.DefaultPosition,
    26942702            style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
     
    27002708        mainSizer.Add(wx.StaticText(self.panel,-1,self.prompt),0,wx.ALIGN_CENTER)
    27012709        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
    2702         self.valItem = wx.TextCtrl(self.panel,-1,value=self.value,size=size)
     2710        if choices:
     2711            self.valItem = wx.ComboBox(self.panel, wx.ID_ANY, value,
     2712                                size=size,choices=[value]+choices,
     2713                                style=wx.CB_DROPDOWN|wx.TE_PROCESS_ENTER)
     2714        else:
     2715            self.valItem = wx.TextCtrl(self.panel,-1,value=self.value,size=size)
    27032716        sizer1.Add(self.valItem,0,wx.ALIGN_CENTER)
    27042717        if help:
     
    61336146            htmlPanel.LoadFile(helplink)
    61346147    else:
    6135         if sys.platform == "darwin": # for Mac, force use of safari to preserve anchors on file URLs
    6136             wb = webbrowser.MacOSXOSAScript('safari')
    6137         else:
    6138             wb = webbrowser
     6148        wb = webbrowser
     6149        if sys.platform == "darwin": # on Mac, use a OSXscript so that file anchors work
     6150            # Get the default browser, this will fail in py2.7 and might fail, so
     6151            # use safari as a backup
     6152            appleScript = '''   
     6153    use framework "AppKit"
     6154    use AppleScript version "2.4"
     6155    use scripting additions
     6156
     6157    property NSWorkspace : a reference to current application's NSWorkspace
     6158    property NSURL : a reference to current application's NSURL
     6159
     6160    set wurl to NSURL's URLWithString:"https://www.apple.com"
     6161    set thisBrowser to (NSWorkspace's sharedWorkspace)'s ¬
     6162                        URLForApplicationToOpenURL:wurl
     6163    set appname to (thisBrowser's absoluteString)'s lastPathComponent()'s ¬
     6164                    stringByDeletingPathExtension() as text
     6165    return appname as text
     6166            '''
     6167            import subprocess
     6168            try:
     6169                browser = subprocess.check_output(["osascript","-e",appleScript], encoding='UTF-8').strip()
     6170                wb = webbrowser.MacOSXOSAScript(browser)
     6171            except:
     6172                wb = webbrowser.MacOSXOSAScript('safari')
     6173        # open the link
    61396174        helplink = os.path.join(path2GSAS2,'help',helplink)
    61406175        pfx = "file://"
  • trunk/GSASIIdataGUI.py

    r4789 r4801  
    66336633
    66346634        tmpSizer=wx.BoxSizer(wx.HORIZONTAL)
    6635         tmpSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Refinement type: '),0,WACV)
     6635        tmpSizer.Add(wx.StaticText(G2frame.dataWindow,label='Refinement\ntype: '),0,WACV)
    66366636        tmpSizer.Add(G2G.HelpButton(G2frame.dataWindow,helpIndex='RefineType'))
    66376637        LSSizer.Add(tmpSizer,0,WACV)
     
    66436643           
    66446644        LSSizer.Add(derivSel,0,WACV)
    6645         LSSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Min delta-M/M: '),0,WACV)
     6645        LSSizer.Add(wx.StaticText(G2frame.dataWindow,label='Min delta-M/M: '),0,WACV)
    66466646        LSSizer.Add(G2G.ValidatedTxtCtrl(G2frame.dataWindow,data,'min dM/M',nDig=(10,2,'g'),xmin=1.e-9,xmax=1.),0,WACV)
    66476647        if 'Hessian' in data['deriv type']:
    6648             LSSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Max cycles: '),0,WACV)
     6648            LSSizer.Add(wx.StaticText(G2frame.dataWindow,label='Max cycles: '),0,WACV)
    66496649            Choice = ['0','1','2','3','5','10','15','20']
    66506650            maxCyc = wx.ComboBox(parent=G2frame.dataWindow,value=str(data['max cyc']),choices=Choice,
     
    66596659                marqLam.Bind(wx.EVT_COMBOBOX,OnMarqLam)
    66606660                LSSizer.Add(marqLam,0,WACV)
    6661             LSSizer.Add(wx.StaticText(G2frame.dataWindow,label=' SVD zero tolerance:'),0,WACV)
     6661            LSSizer.Add(wx.StaticText(G2frame.dataWindow,label='SVD zero\ntolerance:'),0,WACV)
    66626662            LSSizer.Add(G2G.ValidatedTxtCtrl(G2frame.dataWindow,data,'SVDtol',nDig=(10,1,'g'),xmin=1.e-9,xmax=.01),0,WACV)
    66636663        else:       #TODO what for SVD refine?
     
    67126712    G2frame.dataWindow.ClearData()
    67136713    SetDataMenuBar(G2frame,G2frame.dataWindow.ControlsMenu)
     6714    bigSizer = wx.BoxSizer(wx.HORIZONTAL)
    67146715    mainSizer = wx.BoxSizer(wx.VERTICAL)
    67156716    mainSizer.Add((5,5),0)
     
    67186719    subSizer.Add(wx.StaticText(G2frame.dataWindow,label='Refinement Controls'),0,WACV)   
    67196720    subSizer.Add((-1,-1),1,wx.EXPAND)
    6720     subSizer.Add(G2G.HelpButton(G2frame.dataWindow,helpIndex='Controls'))
    67216721    mainSizer.Add(subSizer,0,wx.EXPAND)
    67226722    mainSizer.Add((5,5),0)
     
    67746774        subSizer.Add(btn)
    67756775        mainSizer.Add(subSizer)
    6776        
    6777     mainSizer.Layout()
    6778     mainSizer.FitInside(G2frame.dataWindow)   
    6779     G2frame.dataWindow.SetSizer(mainSizer)
     6776    bigSizer.Add(mainSizer)
     6777       
     6778    bigSizer.Add(G2G.HelpButton(G2frame.dataWindow,helpIndex='Controls'))
     6779    bigSizer.Layout()
     6780    bigSizer.FitInside(G2frame.dataWindow)
     6781    G2frame.dataWindow.SetSizer(bigSizer)
    67806782    G2frame.dataWindow.SetDataSize()
    67816783    G2frame.SendSizeEvent()
     
    88218823            data = G2frame.GPXtree.GetItemPyData(item)
    88228824            text = ''
    8823             subSizer = wx.BoxSizer(wx.HORIZONTAL)
    8824             subSizer.Add((-1,-1),1,wx.EXPAND)
     8825            mainSizer = wx.BoxSizer(wx.HORIZONTAL)
     8826            subSizer = wx.BoxSizer(wx.VERTICAL)
    88258827            if 'Rvals' in data:
    88268828                lbl = 'Refinement results'
    88278829            else:
    88288830                lbl = 'No refinement results'
    8829             subSizer.Add(wx.StaticText(G2frame.dataWindow,label=lbl),0,WACV)
    8830             subSizer.Add((-1,-1),1,wx.EXPAND)
    8831             subSizer.Add(G2G.HelpButton(G2frame.dataWindow,helpIndex='Covariance'))
    8832             G2frame.dataWindow.GetSizer().Add(subSizer)             #,0,wx.EXPAND)
     8831            subSizer.Add(wx.StaticText(G2frame.dataWindow,label=lbl))
    88338832            if 'Rvals' in data:
    88348833                Nvars = len(data['varyList'])
     
    88458844                if '2' not in platform.python_version_tuple()[0]: # greek OK in Py2?
    88468845                    text += '\n\tReduced χ**2 = {:.2f}'.format(Rvals['GOF']**2)
    8847                 G2frame.dataWindow.GetSizer().Add(
    8848                     wx.StaticText(G2frame.dataWindow,wx.ID_ANY,text))
     8846                subSizer.Add(wx.StaticText(G2frame.dataWindow,wx.ID_ANY,text))
     8847            mainSizer.Add(subSizer)
     8848            mainSizer.Add(G2G.HelpButton(G2frame.dataWindow,helpIndex='Covariance'))
     8849            #mainSizer.Add((-1,-1),1,wx.EXPAND)
     8850            G2frame.dataWindow.GetSizer().Add(mainSizer)
    88498851#            G2frame.dataWindow.GetSizer().Add((-1,-1),1,wx.EXPAND,1)
    88508852            G2plt.PlotCovariance(G2frame,data)
  • trunk/GSASIIddataGUI.py

    r4783 r4801  
    10011001    keyList = G2frame.GetHistogramNames(['PWDR','HKLF'])
    10021002    UseList = data['Histograms']
     1003    # look for histgrams that are no longer in the project (should not happen!)
     1004    broken = [i for i in UseList if i not in keyList]
     1005    if broken:
     1006        msg = 'Removing histogram(s) referenced in this phase that are no longer in project:\n\n'
     1007        for i,j in enumerate(broken):
     1008            if i > 0: msg += ', '
     1009            msg += j
     1010            del data['Histograms'][j]
     1011        G2G.G2MessageBox(G2frame,msg,'Removing bad histograms')
    10031012    if UseList:
    10041013        G2frame.dataWindow.DataMenu.Enable(G2G.wxID_DATADELETE,True)
  • trunk/GSASIIphsGUI.py

    r4789 r4801  
    45714571            wx.CallAfter(UpdateRMC)
    45724572           
    4573         def GetAtmChoice(RMCPdict):
     4573        def GetAtmChoice(pnl,RMCPdict):
    45744574           
    45754575            Indx = {}
     
    46044604            nTypes = len(RMCPdict['aTypes'])
    46054605            atmChoice = wx.FlexGridSizer(nTypes+1,5,5)
    4606             atmChoice.Add(wx.StaticText(G2frame.FRMC,label=' Set atom ordering: '),0,WACV)
     4606            atmChoice.Add(wx.StaticText(pnl,label='atom ordering: '),0,WACV)
    46074607            for iType in range(nTypes):
    46084608                atChoice = RMCPdict['atSeq'][iType:]
    4609                 atmSel = wx.ComboBox(G2frame.FRMC,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY)
     4609                atmSel = wx.ComboBox(pnl,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY)
    46104610                atmSel.SetStringSelection(RMCPdict['atSeq'][iType])
    46114611                atmSel.Bind(wx.EVT_COMBOBOX,OnAtSel)
     
    46134613                atmChoice.Add(atmSel,0,WACV)
    46144614            if RMCPdict['useBVS']:   
    4615                 atmChoice.Add(wx.StaticText(G2frame.FRMC,label=' Select valence: '),0,WACV)
     4615                atmChoice.Add(wx.StaticText(pnl,label='Valence: '),0,WACV)
    46164616                for itype in range(nTypes):
    46174617                    valChoice = atmdata.BVSoxid[RMCPdict['atSeq'][itype]]
    4618                     valSel = wx.ComboBox(G2frame.FRMC,choices=valChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY)
     4618                    valSel = wx.ComboBox(pnl,choices=valChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY)
    46194619                    try:
    46204620                        valSel.SetStringSelection(RMCPdict['Oxid'][itype][0])
     
    46244624                    Indx[valSel.GetId()] = itype
    46254625                    atmChoice.Add(valSel,0,WACV)
    4626                 atmChoice.Add(wx.StaticText(G2frame.FRMC,label=' BVS weight: '),0,WACV)
     4626                atmChoice.Add(wx.StaticText(pnl,label='BVS weight: '),0,WACV)
    46274627                for itype in range(nTypes):
    4628                     atmChoice.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['Oxid'][itype],1,xmin=0.),0,WACV)
     4628                    atmChoice.Add(G2G.ValidatedTxtCtrl(pnl,RMCPdict['Oxid'][itype],1,xmin=0.),0,WACV)
    46294629            if G2frame.RMCchoice == 'RMCProfile':
    4630                 atmChoice.Add(wx.StaticText(G2frame.FRMC,label=' Set max shift: '),0,WACV)
     4630                atmChoice.Add(wx.StaticText(pnl,label='max shift: '),0,WACV)
    46314631                for iType in range(nTypes):
    46324632                    atId = RMCPdict['atSeq'][iType]
    4633                     atmChoice.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['aTypes'],atId,xmin=0.,xmax=1.),0,WACV)
     4633                    atmChoice.Add(G2G.ValidatedTxtCtrl(pnl,RMCPdict['aTypes'],atId,xmin=0.,xmax=1.),0,WACV)
    46344634            return atmChoice
    46354635       
     
    46644664            return swapSizer
    46654665       
    4666         def GetPairSizer(RMCdict):
     4666        def GetPairSizer(pnl,RMCdict):
    46674667            pairSizer = wx.FlexGridSizer(len(RMCPdict['Pairs'])+1,5,5)
    46684668            pairSizer.Add((5,5),0)
    46694669            for pair in RMCPdict['Pairs']:
    4670                 pairSizer.Add(wx.StaticText(G2frame.FRMC,label=pair),0,WACV)
     4670                pairSizer.Add(wx.StaticText(pnl,label=pair),0,WACV)
    46714671            if G2frame.RMCchoice == 'RMCProfile':
    4672                 pairSizer.Add(wx.StaticText(G2frame.FRMC,label='%14s'%' Hard min: '),0,WACV)
     4672                pairSizer.Add(wx.StaticText(pnl,label='%14s'%' Hard min: '),0,WACV)
    46734673                for pair in RMCPdict['Pairs']:
    4674                     pairSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['Pairs'][pair],0,xmin=0.,xmax=10.,size=(50,25)),0,WACV)
    4675             pairSizer.Add(wx.StaticText(G2frame.FRMC,label='%14s'%' Search from: '),0,WACV)
     4674                    pairSizer.Add(G2G.ValidatedTxtCtrl(pnl,RMCPdict['Pairs'][pair],0,xmin=0.,xmax=10.,size=(50,25)),0,WACV)
     4675            pairSizer.Add(wx.StaticText(pnl,label='%14s'%' Search from: '),0,WACV)
    46764676            for pair in RMCPdict['Pairs']:
    4677                 pairSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['Pairs'][pair],
     4677                pairSizer.Add(G2G.ValidatedTxtCtrl(pnl,RMCPdict['Pairs'][pair],
    46784678                    1,xmin=0.,xmax=10.,size=(50,25)),0,WACV)
    4679             pairSizer.Add(wx.StaticText(G2frame.FRMC,label='%14s'%'to: '),0,WACV)
     4679            pairSizer.Add(wx.StaticText(pnl,label='%14s'%'to: '),0,WACV)
    46804680            for pair in RMCPdict['Pairs']:
    4681                 pairSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['Pairs'][pair],2,xmin=0.,xmax=10.,size=(50,25)),0,WACV)
     4681                pairSizer.Add(G2G.ValidatedTxtCtrl(pnl,RMCPdict['Pairs'][pair],2,xmin=0.,xmax=10.,size=(50,25)),0,WACV)
    46824682            return pairSizer
    46834683                   
     
    48644864        if G2frame.FRMC.GetSizer():
    48654865            G2frame.FRMC.GetSizer().Clear(True)
     4866        bigSizer = wx.BoxSizer(wx.HORIZONTAL)
    48664867        mainSizer = wx.BoxSizer(wx.VERTICAL)
    48674868        runFile = ' '
     
    51685169               
    51695170        elif G2frame.RMCchoice ==  'RMCProfile':
    5170             mainSizer.Add(wx.StaticText(G2frame.FRMC,label=''' "RMCProfile: Reverse Monte Carlo for polycrystalline materials", M.G. Tucker, D.A. Keen, M.T. Dove, A.L. Goodwin and Q. Hui,
    5171  Jour. Phys.: Cond. Matter 2007, 19, 335218. doi: https://doi.org/10.1088/0953-8984/19/33/335218
    5172  '''))
    5173             topSizer = wx.BoxSizer(wx.HORIZONTAL)
    5174             topSizer.Add(wx.StaticText(G2frame.FRMC,label=' RMCProfile setup:'),0,WACV)
    5175             # add help button to bring up help web page - at right sede of window
    5176             topSizer.Add((-1,-1),1,wx.EXPAND)
    5177             topSizer.Add(G2G.HelpButton(G2frame.FRMC,helpIndex=G2frame.dataWindow.helpKey))
    5178             mainSizer.Add(topSizer,0,wx.EXPAND)
    5179 #            mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' RMCProfile setup:'))
     5171            subSizer = wx.BoxSizer(wx.HORIZONTAL)
     5172            subSizer.Add((-1,-1),1,wx.EXPAND)
     5173            subSizer.Add(wx.StaticText(G2frame.FRMC,label='RMCProfile setup'),0,WACV)
     5174            subSizer.Add((-1,-1),1,wx.EXPAND)
     5175            mainSizer.Add(subSizer,0,wx.EXPAND)
     5176            mainSizer.Add((5,5))
     5177            mainSizer.Add(wx.StaticText(G2frame.FRMC,label=
     5178'''"RMCProfile: Reverse Monte Carlo for polycrystalline materials", M.G. Tucker,
     5179D.A. Keen, M.T. Dove, A.L. Goodwin and Q. Hui, Jour. Phys.: Cond. Matter (2007),
     518019, 335218. doi: https://doi.org/10.1088/0953-8984/19/33/335218'''))
     5181            mainSizer.Add((5,5))
    51805182            if not data['RMC']['RMCProfile']:
    51815183                Atypes = [atype.split('+')[0].split('-')[0] for atype in data['General']['AtomTypes']]
     
    52765278                return superSizer
    52775279                     
    5278             def GetBvsSizer():
     5280            def GetBvsSizer(pnl):
    52795281               
    52805282                def OnResetBVS(event):
     
    52955297                bvsSizer.Add((5,5),0)
    52965298                for pair in RMCPdict['BVS']:
    5297                     bvsSizer.Add(wx.StaticText(G2frame.FRMC,label=pair),0,WACV)
    5298                 bvsSizer.Add(wx.StaticText(G2frame.FRMC,label=' Reset:'),0,WACV)
     5299                    bvsSizer.Add(wx.StaticText(pnl,label=pair),0,WACV)
     5300                bvsSizer.Add(wx.StaticText(pnl,label=' Reset:'),0,WACV)
    52995301                for pair in RMCPdict['BVS']:
    5300                     reset = wx.Button(G2frame.FRMC,label='Yes')
     5302                    reset = wx.Button(pnl,label='Yes')
    53015303                    bvsSizer.Add(reset,0,WACV)
    53025304                    reset.Bind(wx.EVT_BUTTON,OnResetBVS)
    53035305                    Indx[reset.GetId()] = pair
    5304                 bvsSizer.Add(wx.StaticText(G2frame.FRMC,label=' Bond length:'),0,WACV)
     5306                bvsSizer.Add(wx.StaticText(pnl,label=' Bond length:'),0,WACV)
    53055307                for pair in RMCPdict['BVS']:
    5306                     bvsSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['BVS'][pair],0,xmin=0.,xmax=10.,size=(50,25)),0,WACV)
    5307                 bvsSizer.Add(wx.StaticText(G2frame.FRMC,label=' B constant (0.37): '),0,WACV)
     5308                    bvsSizer.Add(G2G.ValidatedTxtCtrl(pnl,RMCPdict['BVS'][pair],0,xmin=0.,xmax=10.,size=(50,25)),0,WACV)
     5309                bvsSizer.Add(wx.StaticText(pnl,label=' B constant (0.37): '),0,WACV)
    53085310                for pair in RMCPdict['BVS']:
    5309                     bvsSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['BVS'][pair],1,xmin=0.,xmax=10.,size=(50,25)),0,WACV)
    5310                 bvsSizer.Add(wx.StaticText(G2frame.FRMC,label=' Cut off: '),0,WACV)
     5311                    bvsSizer.Add(G2G.ValidatedTxtCtrl(pnl,RMCPdict['BVS'][pair],1,xmin=0.,xmax=10.,size=(50,25)),0,WACV)
     5312                bvsSizer.Add(wx.StaticText(pnl,label=' Cut off: '),0,WACV)
    53115313                for pair in RMCPdict['BVS']:
    5312                     bvsSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['BVS'][pair],2,xmin=0.,xmax=10.,size=(50,25)),0,WACV)
     5314                    bvsSizer.Add(G2G.ValidatedTxtCtrl(pnl,RMCPdict['BVS'][pair],2,xmin=0.,xmax=10.,size=(50,25)),0,WACV)
    53135315                return bvsSizer
    53145316           
     
    54705472            mainSizer.Add(GetSuperSizer(),0)
    54715473           
    5472             mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' NB: be sure to set cations first && anions last in atom ordering'),0)
    5473             mainSizer.Add(GetAtmChoice(RMCPdict),0)
     5474            aPanel = wxscroll.ScrolledPanel(G2frame.FRMC, wx.ID_ANY,
     5475                style=wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER)
     5476            mSizer = wx.BoxSizer(wx.VERTICAL)
     5477            mSizer.Add(wx.StaticText(aPanel,label='Enter atom settings'),0)
     5478            mSizer.Add(GetAtmChoice(aPanel,RMCPdict),0)
     5479            mSizer.Add(wx.StaticText(aPanel,label=' N.B.: be sure to set cations first && anions last in atom ordering'))
     5480            mSizer.Layout()
     5481            aPanel.SetSizer(mSizer)
     5482            aPanel.SetMinSize((300,mSizer.GetMinSize()[1]))
     5483            aPanel.SetAutoLayout(1)
     5484            aPanel.SetupScrolling()
     5485            mainSizer.Add(aPanel,1,wx.EXPAND)
    54745486           
    54755487            G2G.HorizontalLine(mainSizer,G2frame.FRMC)
     
    54845496           
    54855497            G2G.HorizontalLine(mainSizer,G2frame.FRMC)
    5486             mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' Enter constraints && restraints:'),0)
    5487             mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' Set minimum && maximum distances for:'),0)       
    5488             mainSizer.Add(GetPairSizer(RMCPdict),0)
     5498
     5499            sPanel = wxscroll.ScrolledPanel(G2frame.FRMC, wx.ID_ANY,
     5500                style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER)
     5501            mSizer = wx.BoxSizer(wx.VERTICAL)
     5502            mSizer.Add(wx.StaticText(sPanel,label='Enter constraints && restraints via minimum && maximum distances for atom pairs:'),0)
     5503            mSizer.Add(GetPairSizer(sPanel,RMCPdict),0)
     5504            sPanel.SetSizer(mSizer)
     5505            mSizer.Layout()
     5506            sPanel.SetMinSize((300,25+mSizer.GetMinSize()[1]))
     5507            sPanel.SetAutoLayout(1)
     5508            sPanel.SetupScrolling()
     5509            mainSizer.Add(sPanel,1,wx.EXPAND)
    54895510           
    54905511            G2G.HorizontalLine(mainSizer,G2frame.FRMC)
     
    54945515            mainSizer.Add(useBVS,0)
    54955516            if RMCPdict.get('useBVS',False):
    5496                 mainSizer.Add(GetBvsSizer(),0)
    5497        
     5517                sPanel = wxscroll.ScrolledPanel(G2frame.FRMC, wx.ID_ANY,
     5518                    style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER)
     5519                mSizer = wx.BoxSizer(wx.VERTICAL)
     5520                mSizer.Add(GetBvsSizer(sPanel),0)
     5521                sPanel.SetSizer(mSizer)
     5522                mSizer.Layout()
     5523                sPanel.SetMinSize((300,25+mSizer.GetMinSize()[1]))
     5524                sPanel.SetAutoLayout(1)
     5525                sPanel.SetupScrolling()
     5526                mainSizer.Add(sPanel,1,wx.EXPAND)
     5527               
    54985528            G2G.HorizontalLine(mainSizer,G2frame.FRMC)
    54995529            fxcnBox = wx.BoxSizer(wx.HORIZONTAL)
     
    55685598            FileSizer(RMCPdict,mainSizer)
    55695599   
    5570         SetPhaseWindow(G2frame.FRMC,mainSizer)
     5600        bigSizer.Add(mainSizer,1,wx.EXPAND)
     5601        # add help button to bring up help web page - at right sede of window
     5602        bigSizer.Add(G2G.HelpButton(G2frame.FRMC,helpIndex=G2frame.dataWindow.helpKey))
     5603        SetPhaseWindow(G2frame.FRMC,bigSizer)
    55715604       
    55725605    def OnSetupRMC(event):
Note: See TracChangeset for help on using the changeset viewer.