Ignore:
Timestamp:
Sep 8, 2017 2:17:29 PM (4 years ago)
Author:
toby
Message:

expand error reporting with constraints (no fixes yet to prevent them)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIconstrGUI.py

    r3054 r3056  
    3737import GSASIIspc as G2spc
    3838VERY_LIGHT_GREY = wx.Colour(235,235,235)
    39 
    40 class MultiIntegerDialog(wx.Dialog):
    41     '''Input a series of integers based on prompts
    42     '''
    43     def __init__(self,parent,title,prompts,values):
    44         wx.Dialog.__init__(self,parent,-1,title,
    45             pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE)
    46         self.panel = wx.Panel(self)         #just a dummy - gets destroyed in Draw!
    47         self.values = values
    48         self.prompts = prompts
    49         self.Draw()
    50        
    51     def Draw(self):
    52        
    53         def OnValItem(event):
    54             event.Skip()
    55             Obj = event.GetEventObject()
    56             ind = Indx[Obj.GetId()]
    57             try:
    58                 val = int(Obj.GetValue())
    59                 if val <= 0:
    60                     raise ValueError
    61             except ValueError:
    62                 val = self.values[ind]
    63             self.values[ind] = val
    64             Obj.SetValue('%d'%(val))
    65            
    66         self.panel.Destroy()
    67         self.panel = wx.Panel(self)
    68         mainSizer = wx.BoxSizer(wx.VERTICAL)
    69         Indx = {}
    70         for ival,[prompt,value] in enumerate(zip(self.prompts,self.values)):
    71             mainSizer.Add(wx.StaticText(self.panel,-1,prompt),0,wx.ALIGN_CENTER)
    72             valItem = wx.TextCtrl(self.panel,-1,value='%d'%(value),style=wx.TE_PROCESS_ENTER)
    73             mainSizer.Add(valItem,0,wx.ALIGN_CENTER)
    74             Indx[valItem.GetId()] = ival
    75             valItem.Bind(wx.EVT_TEXT_ENTER,OnValItem)
    76             valItem.Bind(wx.EVT_KILL_FOCUS,OnValItem)
    77         OkBtn = wx.Button(self.panel,-1,"Ok")
    78         OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)
    79         CancelBtn = wx.Button(self.panel,-1,'Cancel')
    80         CancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel)
    81         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
    82         btnSizer.Add((20,20),1)
    83         btnSizer.Add(OkBtn)
    84         btnSizer.Add(CancelBtn)
    85         btnSizer.Add((20,20),1)
    86         mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)
    87         self.panel.SetSizer(mainSizer)
    88         self.panel.Fit()
    89         self.Fit()
    90 
    91     def GetValues(self):
    92         return self.values
    93        
    94     def OnOk(self,event):
    95         parent = self.GetParent()
    96         parent.Raise()
    97         self.EndModal(wx.ID_OK)             
    98        
    99     def OnCancel(self,event):
    100         parent = self.GetParent()
    101         parent.Raise()
    102         self.EndModal(wx.ID_CANCEL)
    10339
    10440class ConstraintDialog(wx.Dialog):
     
    234170        AtomDict = dict([Phases[phase]['pId'],Phases[phase]['Atoms']] for phase in Phases)
    235171    except KeyError:
    236         G2frame.ErrorDialog('Constraint Error','You must run least squares at least once before setting constraints\n'+ \
    237             'We suggest you refine scale factor first')
     172        G2frame.ErrorDialog('Constraint Error','Constraints cannot be set until a cycle of least squares'+
     173                            'has been run.\nWe suggest you refine a scale factor.')
    238174        return
    239175
     
    871807
    872808        :param str name: the type of constraints to be displayed ('HAP',
    873           'Hist', 'Phase', or 'Global')
     809          'Hist', 'Phase', 'Global', 'Sym-Generated')
    874810        :param wx.Panel pageDisplay: parent panel for sizer
    875811        :returns: wx.Sizer created by method
    876812        '''
    877         #TODO: show symmetry generated constraints - no clue how to do this.
     813        if name == 'Sym-Generated':         #show symmetry generated constraints
     814            Sizer1 =  wx.BoxSizer(wx.VERTICAL)
     815            Sizer1.Add(wx.StaticText(pageDisplay,wx.ID_ANY,
     816                                    'Equivalences generated based on cell/space group input'))
     817            Sizer1.Add((-1,5))
     818            Sizer = wx.FlexGridSizer(0,2,0,0)
     819            Sizer1.Add(Sizer)
     820            for sym in G2mv.GetSymEquiv():
     821                Sizer.Add(wx.StaticText(pageDisplay,wx.ID_ANY,'EQUIV'),
     822                           0,wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER|wx.RIGHT|wx.LEFT,3)
     823                Sizer.Add(wx.StaticText(pageDisplay,wx.ID_ANY,sym))
     824                Sizer.Add((-1,-1))
     825                Sizer.Add((-1,2))
     826            return Sizer1
    878827        constSizer = wx.FlexGridSizer(0,6,0,0)
    879         maxlen = 70 # characters before wrapping a constraint
     828        maxlen = 50 # characters before wrapping a constraint
    880829        for Id,item in enumerate(data[name]):
    881830            refineflag = False
    882831            helptext = ""
    883832            eqString = ['',]
     833            problemItem = False
     834            for term in item[:-3]:
     835                if str(term[1]) in G2mv.problemVars:
     836                    problemItem = True
    884837            if item[-1] == 'h': # Hold on variable
    885838                constSizer.Add((-1,-1),0)              # blank space for edit button
     
    890843                helptext = "Prevents variable:\n"+ var + " ("+ varMean + ")\nfrom being changed"
    891844            elif isinstance(item[-1],str): # not true on original-style (2011?) constraints
    892                 constEdit = wx.Button(pageDisplay,-1,'Edit',style=wx.BU_EXACTFIT)
     845                constEdit = wx.Button(pageDisplay,wx.ID_ANY,'Edit',style=wx.BU_EXACTFIT)
    893846                constEdit.Bind(wx.EVT_BUTTON,OnConstEdit)
    894847                constSizer.Add(constEdit,0,wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER,1)            # edit button
     
    966919                data[name] = []
    967920                return constSizer
    968             constDel = wx.Button(pageDisplay,-1,'Delete',style=wx.BU_EXACTFIT)
     921            constDel = wx.Button(pageDisplay,wx.ID_ANY,'Delete',style=wx.BU_EXACTFIT)
    969922            constDel.Bind(wx.EVT_BUTTON,OnConstDel)
    970923            Indx[constDel.GetId()] = [Id,name]
     
    980933            else:
    981934                constSizer.Add((-1,-1))               
    982             constSizer.Add(wx.StaticText(pageDisplay,-1,typeString),
     935            constSizer.Add(wx.StaticText(pageDisplay,wx.ID_ANY,typeString),
    983936                           0,wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER|wx.RIGHT|wx.LEFT,3)
     937            if problemItem: eqString[-1] += ' -- Conflict: see console'
    984938            if len(eqString) > 1:
    985939                Eq = wx.BoxSizer(wx.VERTICAL)
    986940                for s in eqString:
    987                     Eq.Add(wx.StaticText(pageDisplay,-1,s),0,wx.ALIGN_CENTER_VERTICAL)
     941                    line = wx.StaticText(pageDisplay,wx.ID_ANY,s)
     942                    if problemItem: line.SetBackgroundColour(wx.YELLOW)
     943                    Eq.Add(line,0,wx.ALIGN_CENTER_VERTICAL)
     944                Eq.Add((-1,4))
    988945            else:
    989                 Eq = wx.StaticText(pageDisplay,-1,eqString[0])
     946                Eq = wx.StaticText(pageDisplay,wx.ID_ANY,eqString[0])
     947                if problemItem: Eq.SetBackgroundColour(wx.YELLOW)
    990948            constSizer.Add(Eq,1,wx.ALIGN_CENTER_VERTICAL)
    991949        return constSizer
     
    11041062            G2frame.Page = [page,'glb']
    11051063            UpdateConstraintPanel(GlobalConstr,'Global')
     1064        else:
     1065            G2frame.Page = [page,'sym']
     1066            UpdateConstraintPanel(SymConstr,'Sym-Generated')           
     1067        G2frame.dataWindow.SetDataSize()
    11061068
    11071069    def RaisePage(event):
     
    11501112    GlobalConstr = wx.ScrolledWindow(G2frame.constr)
    11511113    G2frame.constr.AddPage(GlobalConstr,'Global')
     1114    SymConstr = wx.ScrolledWindow(G2frame.constr)
     1115    G2frame.constr.AddPage(SymConstr,'Sym-Generated')
    11521116    wx.CallAfter(OnPageChanged,None)
    11531117    G2frame.constr.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged)
     
    11581122        allcons += data[key]
    11591123    if not len(allcons): return
     1124    #reload(G2mv) # TODO: for testing
    11601125    G2mv.InitVars()   
    11611126    constDictList,fixedList,ignored = G2stIO.ProcessConstraints(allcons)
     1127    # generate symmetry constraints to check for conflicts
     1128    rigidbodyDict = G2frame.GPXtree.GetItemPyData(   
     1129            G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Rigid bodies'))
     1130    rbIds = rigidbodyDict.get('RBIds',{'Vector':[],'Residue':[]})
     1131    rbVary,rbDict = G2stIO.GetRigidBodyModels(rigidbodyDict,Print=False)
     1132    Natoms,atomIndx,phaseVary,phaseDict,pawleyLookup,FFtables,BLtables,MFtables,maxSSwave = G2stIO.GetPhaseData(
     1133        Phases,RestraintDict=None,rbIds=rbIds,Print=False) # generates atom symmetry constraints
    11621134    errmsg, warnmsg = G2mv.CheckConstraints('',constDictList,fixedList)
    11631135    if errmsg:
    1164         G2frame.ErrorDialog('Constraint Error','Error in constraints:\n'+errmsg,
    1165             parent=G2frame)
     1136        G2frame.ErrorDialog('Constraint Error',
     1137                            'Error in constraints:\n'+errmsg+'\nCheck console output for more information',
     1138                            parent=G2frame)
     1139        print errmsg
     1140        print G2mv.VarRemapShow([],True)
    11661141    elif warnmsg:
    11671142        print 'Unexpected contraint warning:\n',warnmsg
     
    13911366    def AddVectorRB(event):
    13921367        AtInfo = data['Vector']['AtInfo']
    1393         dlg = MultiIntegerDialog(G2frame,'New Rigid Body',['No. atoms','No. translations'],[1,1])
     1368        dlg = G2G.MultiIntegerDialog(G2frame,'New Rigid Body',['No. atoms','No. translations'],[1,1])
    13941369        if dlg.ShowModal() == wx.ID_OK:
    13951370            nAtoms,nTrans = dlg.GetValues()
Note: See TracChangeset for help on using the changeset viewer.