Changeset 1325


Ignore:
Timestamp:
May 5, 2014 5:15:00 PM (8 years ago)
Author:
toby
Message:

Provide selection menu for Dependent variables

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIexprGUI.py

    r1324 r1325  
    2020
    2121'''
    22 # TODO: improve variable browser (search, add parameter descriptions)
    23 
    2422import re
    2523import sys
     
    107105        self.fit = fit
    108106        self.depVarDict = depVarDict
     107        'dict for dependent variables'
    109108        self.parmDict = {}
    110109        '''A copy of the G2 parameter dict (parmDict) except only numerical
     
    135134        self.expr = ''
    136135        'Expression as a text string'
    137         self.depVar = [None,None]
    138         'index # and name for dependent variable selection when depVarDict is specified'
     136        self.dependentVar = None
     137        'name for dependent variable selection, when depVarDict is specified'
    139138       
    140139        # process dictionary of values and create an index
     
    165164            self.exsizer.Add(label, 0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 0)
    166165        elif depVarDict:
    167             choice = G2gd.G2ChoiceButton(
    168                 self,
    169                 sorted(depVarDict.keys()),
    170                 self.depVar,0,
    171                 self.depVar,1,
    172                 self.RestartTimer)
     166            self.depParmLists = IndexParmDict(self.depVarDict,False)
     167            choices = ['','Phase','Hist./Phase','Hist.','Global']
     168            for i in range(1,len(choices)): # remove empty menus from choice list
     169                if not len(self.depParmLists[i]): choices[i] = ''
     170            self.depChoices = [i for i in range(len(choices)) if choices[i]]
     171            choice = wx.Choice(
     172                self, wx.ID_ANY,
     173                choices = [choices[i] for i in self.depChoices]
     174                )
     175            choice.SetSelection(wx.NOT_FOUND)
     176            choice.Bind(wx.EVT_CHOICE,self.OnDepChoice)
    173177            self.exsizer.Add(choice, 0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 0)
     178            self.exsizer.Add((5,5))
     179            self.depLabel = wx.StaticText(self,  wx.ID_ANY, ' ')
     180            self.exsizer.Add(self.depLabel, 0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 0)
    174181            label = wx.StaticText(self,  wx.ID_ANY, ' = ')
    175182            self.exsizer.Add(label, 0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 0)
     
    218225                var = exprObj.GetDepVar()
    219226                if var in self.depVarDict:
    220                     indx = sorted(self.depVarDict.keys()).index(var)
    221                     choice.SetSelection(indx)
    222                     self.depVar = [indx,var]
     227                    self.depLabel.SetLabel(var)
     228                    self.dependentVar = var
    223229                   
    224230        self.exCtrl.SetValue(self.expr)
     
    250256                )
    251257            if self.depVarDict:
    252                 exprObj.SetDepVar(self.depVar[1])
     258                exprObj.SetDepVar(self.dependentVar)
    253259            return exprObj
    254260        else:
     
    338344        Siz.Add(
    339345            wx.StaticText(self.varbox,wx.ID_ANY,
    340                           'Assign variables to labels'),
     346                          'Assignment of variables to labels:'),
    341347            0,wx.EXPAND|wx.ALIGN_CENTER,0)
    342348        GridSiz = wx.FlexGridSizer(len(self.exprVarLst)+1,5,2,2)
     
    353359        for i in range(1,len(choices)): # remove empty menus from choice list
    354360            if not len(self.parmLists[i]): choices[i] = ''
    355 
    356361        self.AllowedChoices = [i for i in range(len(choices)) if choices[i]]
    357362        for lbl in lbls:
     
    433438        return
    434439
     440    def OnDepChoice(self,event):
     441        '''Respond to a selection of a variable type for a label in
     442        an expression
     443        '''
     444        sel = self.depChoices[event.GetEventObject().GetSelection()]
     445        var = self.SelectG2var(sel,'Dependent variable',self.depParmLists[sel])
     446        if not var:
     447            self.dependentVar = None
     448            self.OnValidate(None)
     449            event.GetEventObject().SetSelection(wx.NOT_FOUND)
     450            return
     451        self.dependentVar = var
     452        self.depLabel.SetLabel(var)
     453        self.OnValidate(None)
     454        self.Layout()
     455
    435456    def GetDepVar(self):
    436457        '''Returns the name of the dependent variable, when depVarDict is used.
    437458        '''
    438         return self.depVar[1]
     459        return self.dependentVar
    439460       
    440461    def OnChoice(self,event):
     
    449470            self.varValue[v] = self.varValue.get(v,0.0)
    450471        else:
    451             var = self.SelectG2var(sel,v)
     472            var = self.SelectG2var(sel,v,self.parmLists[sel])
    452473            if not var:
    453474                del self.varSelect[v]
     
    457478        self.OnValidate(None)
    458479
    459     def SelectG2var(self,sel,var):
     480    def SelectG2var(self,sel,var,parmList):
    460481        '''Offer a selection of a GSAS-II variable.
    461482
     
    465486        :returns: a variable name or None (if Cancel is pressed)
    466487        '''
    467         if not self.parmLists[sel]:
     488        if not parmList:
    468489            return None
    469         #varListlbl = ["("+i+") "+G2obj.fmtVarDescr(i) for i in self.parmLists[sel]]
    470         #varListlbl = self.parmLists[sel]
    471490        l2 = l1 = 1
    472         for i in self.parmLists[sel]:
     491        for i in parmList:
    473492            l1 = max(l1,len(i))
    474493            loc,desc = G2obj.VarDescr(i)
    475494            l2 = max(l2,len(loc))
    476495        fmt = u"{:"+str(l1)+"s} {:"+str(l2)+"s} {:s}"
    477         varListlbl = [fmt.format(i,*G2obj.VarDescr(i)) for i in self.parmLists[sel]]
     496        varListlbl = [fmt.format(i,*G2obj.VarDescr(i)) for i in parmList]
    478497
    479498        dlg = G2gd.G2SingleChoiceDialog(
     
    486505        if dlg.ShowModal() == wx.ID_OK:
    487506            i = dlg.GetSelection()
    488             var = self.parmLists[sel][i]
     507            var = parmList[i]
    489508        dlg.Destroy()
    490509        return var
     
    566585        depVal = ""
    567586        if self.depVarDict:
    568             if not self.depVar[1]:
     587            if not self.dependentVar:
    569588                self.setEvalResult("A dependent variable must be selected.")
    570589                return
    571             depVal = '; Variable "' + self.depVar[1] + '" = ' + str(
    572                 self.depVarDict.get(self.depVar[1],'?')
     590            depVal = '; Variable "' + self.dependentVar + '" = ' + str(
     591                self.depVarDict.get(self.dependentVar,'?')
    573592                )
    574593        self.setEvalResult("Expression evaluates to: "+str(s)+depVal)
     
    579598    frm = wx.Frame(None)
    580599    frm.Show()
    581     PSvarDict = {'::a':1.0,'::b':1.1,'0::c':1.2}
     600    PSvarDict = {'::a':1.0,'::b':1.1,'0::c':1.2,'::AlongVaraiableName':1000.}
    582601    #PSvars = PSvarDict.keys()
    583602    indepvarDict = {'Temperature':1.0,'Pressure':1.1,'Phase of Moon':1.2,'1:1:HAP':1.3}
     
    588607                           #VarLabel="New PseudoVar",                           
    589608                           )
    590     print dlg.GetDepVar()
     609    newobj = dlg.Show(True)
     610    dlg = ExpressionDialog(frm,indepvarDict,newobj,
     611                           header="Edit the PseudoVar expression",
     612                           fit=False,
     613                           depVarDict=PSvarDict,
     614                           #VarLabel="New PseudoVar",                           
     615                           )
    591616    newobj = dlg.Show(True)
    592617    print dlg.GetDepVar()
Note: See TracChangeset for help on using the changeset viewer.