Changeset 1925


Ignore:
Timestamp:
Jul 10, 2015 3:50:10 PM (7 years ago)
Author:
vondreele
Message:

create AddHatomDialog? & work on OnHydAtomAdd?
allow reading of .cor images made at APS 1ID

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIIO.py

    r1920 r1925  
    178178    if not os.path.exists(imagefile):
    179179        dlg = wx.FileDialog(G2frame, 'Previous image file not found; open here', '.', '',\
    180         'Any image file (*.edf;*.tif;*.tiff;*.mar*;*.ge*;*.avg;*.sum;*.img)\
    181         |*.edf;*.tif;*.tiff;*.mar*;*.ge*;*.avg;*.sum;*.img|\
     180        'Any image file (*.edf;*.tif;*.tiff;*.mar*;*.ge*;*.avg;*.sum;*.img;*.cor)\
     181        |*.edf;*.tif;*.tiff;*.mar*;*.ge*;*.avg;*.sum;*.img;*.cor|\
    182182        European detector file (*.edf)|*.edf|\
    183183        Any detector tif (*.tif;*.tiff)|*.tif;*.tiff|\
    184184        MAR file (*.mar*)|*.mar*|\
    185         GE Image (*.ge*;*.avg;*.sum)|*.ge*;*.avg;*.sum|\
     185        GE Image (*.ge*;*.avg;*.sum;*.cor)|*.ge*;*.avg;*.sum;*.cor|\
    186186        ADSC Image (*.img)|*.img|\
    187187        All files (*.*)|*.*',wx.OPEN|wx.CHANGE_DIR)
     
    303303    elif ext in ['.mar3450','.mar2300','.mar2560']:
    304304        Comments,Data,Npix,Image = GetMAR345Data(imagefile)
    305     elif ext in ['.sum','.avg'] or 'ge' in ext:
     305    elif ext in ['.sum','.avg','.cor'] or 'ge' in ext:
    306306        Comments,Data,Npix,Image = GetGEsumData(imagefile)
    307307    elif ext == '.G2img':
     
    410410        print 'Read GE sum file: ',filename   
    411411    File = open(filename,'rb')
    412     if '.sum' in filename:
    413         head = ['GE detector sum data from APS 1-ID',]
     412    if '.sum' in filename or '.cor' in filename:
     413        head = ['GE detector sum or cor data from APS 1-ID',]
    414414        sizexy = [2048,2048]
    415415    elif '.avg' in filename or '.ge' in filename:
     
    424424        File.seek(pos)
    425425    Npix = sizexy[0]*sizexy[1]
    426     if '.sum' in filename:
     426    if '.sum' in filename or '.cor' in filename:
    427427        image = np.array(ar.array('f',File.read(4*Npix)),dtype=np.int32)
    428428    elif '.avg' in filename or '.ge' in filename:
  • trunk/GSASIIconstrGUI.py

    r1924 r1925  
    775775        Dx = np.inner(Amat,XYZ-XYZ[Orig]).T
    776776        dist = np.sqrt(np.sum(Dx**2,axis=1))
    777         sumR = AtInfo[OType]+0.5
     777        sumR = AtInfo[OType]+0.5    #H-atoms only!
    778778        IndB = ma.nonzero(ma.masked_greater(dist-0.85*sumR,0.))
    779779        for j in IndB[0]:
  • trunk/GSASIIgrid.py

    r1924 r1925  
    316316        parent.Raise()
    317317        self.EndModal(wx.ID_CANCEL)
     318       
     319class AddHatomDialog(wx.Dialog):
     320    '''H atom addition dialog. After :meth:`ShowModal` returns, the results
     321    are found in dict :attr:`self.data`, which is accessed using :meth:`GetData`.
     322    :param wx.Frame parent: reference to parent frame (or None)
     323    :param dict Neigh: a dict of atom names with list of atom name, dist pairs for neighboring atoms
     324    :param dict phase: a dict containing the phase as defined by
     325      :ref:`Phase Tree Item <Phase_table>`   
     326    '''
     327    def __init__(self,parent,Neigh,phase):
     328        wx.Dialog.__init__(self,parent,wx.ID_ANY,'H atom add',
     329            pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE)
     330        self.panel = wxscroll.ScrolledPanel(self)         #just a dummy - gets destroyed in Draw!
     331        self.Neigh = Neigh
     332        self.phase = phase
     333        self.Hatoms = []
     334        self.Draw(self.Neigh,self.phase)
     335           
     336    def Draw(self,Neigh,phase):
     337        '''Creates the contents of the dialog. Normally called
     338        by :meth:`__init__`.
     339        '''
     340        def OnHSelect(event):
     341            Obj = event.GetEventObject()
     342            item,i = Indx[Obj.GetId()]
     343            for obj in Indx[item]:
     344                obj.SetValue(False)
     345            Obj.SetValue(True)
     346            self.Neigh[item][2] = i
     347           
     348        self.panel.Destroy()
     349        self.panel = wxscroll.ScrolledPanel(self,style = wx.DEFAULT_DIALOG_STYLE)
     350        mainSizer = wx.BoxSizer(wx.VERTICAL)
     351        mainSizer.Add(wx.StaticText(self.panel,-1,'H atom add controls for phase %s:'%(phase['General']['Name'])),
     352            0,wx.LEFT|wx.TOP,10)
     353        mainSizer.Add(wx.StaticText(self.panel,-1," Atom:  Add # H's          Neighbors, dist"),0,wx.TOP|wx.LEFT,5)
     354        nHatms = ['0','1','2','3']
     355        dataSizer = wx.FlexGridSizer(0,3,0,0)
     356        Indx = {}
     357        for inei,neigh in enumerate(Neigh):
     358            dataSizer.Add(wx.StaticText(self.panel,-1,' %s:  '%(neigh[0])),0,WACV)
     359            nH = 1      #for O atom
     360            if 'C' in neigh[0] or 'N' in neigh[0]:
     361                nH = 4-len(neigh[1])
     362            neigh[2] = nH
     363            checks = wx.BoxSizer(wx.HORIZONTAL)
     364            Ids = []
     365            for i in range(nH+1):
     366                nHs = wx.CheckBox(self.panel,-1,label=nHatms[i])
     367                if i == neigh[2]:
     368                    nHs.SetValue(True)
     369                Indx[nHs.GetId()] = [inei,i]
     370                Ids.append(nHs)
     371                nHs.Bind(wx.EVT_CHECKBOX, OnHSelect)
     372                checks.Add(nHs,0,WACV)
     373            Indx[inei] = Ids
     374            dataSizer.Add(checks,0,WACV)
     375            lineSizer = wx.BoxSizer(wx.HORIZONTAL)
     376            for bond in neigh[1]:
     377                lineSizer.Add(wx.StaticText(self.panel,-1,' %s, %.3f'%(bond[0],bond[1])),0,WACV)
     378            dataSizer.Add(lineSizer,0,WACV)
     379        mainSizer.Add(dataSizer,0,wx.LEFT,5)
     380
     381        CancelBtn = wx.Button(self.panel,-1,'Cancel')
     382        CancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel)
     383        OkBtn = wx.Button(self.panel,-1,'Ok')
     384        OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)
     385        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
     386        btnSizer.Add((20,20),1)
     387        btnSizer.Add(OkBtn)
     388        btnSizer.Add((20,20),1)
     389        btnSizer.Add(CancelBtn)
     390        btnSizer.Add((20,20),1)
     391        mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)
     392        self.panel.SetSizer(mainSizer)
     393        self.panel.SetupScrolling()
     394       
     395    def GetData(self):
     396        'Returns the values from the dialog'
     397        return self.Neigh       #has #Hs to add for each entry
     398       
     399    def OnOk(self,event):
     400        'Called when the OK button is pressed'
     401        parent = self.GetParent()
     402        parent.Raise()
     403        self.EndModal(wx.ID_OK)             
     404
     405    def OnCancel(self,event):
     406        parent = self.GetParent()
     407        parent.Raise()
     408        self.EndModal(wx.ID_CANCEL)
    318409
    319410class DisAglDialog(wx.Dialog):
     
    331422      search ranges for each element.
    332423    '''
    333     def __init__(self,parent,data,default):
     424    def __init__(self,parent,data,default,Reset=True):
    334425        wx.Dialog.__init__(self,parent,wx.ID_ANY,
    335426                           'Distance Angle Controls',
    336427            pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE)
    337428        self.default = default
     429        self.Reset = Reset
    338430        self.panel = wx.Panel(self)         #just a dummy - gets destroyed in Draw!
    339431        self._default(data,self.default)
     
    396488        OkBtn = wx.Button(self.panel,-1,"Ok")
    397489        OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)
    398         ResetBtn = wx.Button(self.panel,-1,'Reset')
    399         ResetBtn.Bind(wx.EVT_BUTTON, self.OnReset)
    400490        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
    401491        btnSizer.Add((20,20),1)
    402492        btnSizer.Add(OkBtn)
    403         btnSizer.Add(ResetBtn)
     493        if self.Reset:
     494            ResetBtn = wx.Button(self.panel,-1,'Reset')
     495            ResetBtn.Bind(wx.EVT_BUTTON, self.OnReset)
     496            btnSizer.Add(ResetBtn)
    404497        btnSizer.Add((20,20),1)
    405498        mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)
  • trunk/GSASIImath.py

    r1845 r1925  
    376376    return XYZ
    377377
     378def FindNeighbors(phase,FrstName,AtNames):
     379    General = phase['General']
     380    cx,ct,cs,cia = General['AtomPtrs']
     381    Atoms = phase['Atoms']
     382    atNames = [atom[ct-1] for atom in Atoms]
     383    Cell = General['Cell'][1:7]
     384    Amat,Bmat = G2lat.cell2AB(Cell)
     385    atTypes = General['AtomTypes']
     386    Radii = np.array(General['BondRadii'])
     387    AtInfo = dict(zip(atTypes,Radii)) #or General['BondRadii']
     388    Orig = atNames.index(FrstName)
     389    OType = Atoms[Orig][ct]
     390    XYZ = getAtomXYZ(Atoms,cx)       
     391    Neigh = []
     392    Dx = np.inner(Amat,XYZ-XYZ[Orig]).T
     393    dist = np.sqrt(np.sum(Dx**2,axis=1))
     394    sumR = np.array([AtInfo[OType]+AtInfo[atom[ct]] for atom in Atoms])
     395    IndB = ma.nonzero(ma.masked_greater(dist-0.85*sumR,0.))
     396    for j in IndB[0]:
     397        if j != Orig:
     398            Neigh.append([AtNames[j],dist[j]])
     399    return Neigh
     400       
    378401def AtomUij2TLS(atomData,atPtrs,Amat,Bmat,rbObj):   #unfinished & not used
    379402    '''default doc string
  • trunk/GSASIIphsGUI.py

    r1924 r1925  
    15371537       
    15381538    def OnHydAtomAdd(event):
    1539         print "Doesn't do anything yet!"
    15401539        indx = Atoms.GetSelectedRows()
    15411540        if indx:
     1541            DisAglCtls = {}
    15421542            generalData = data['General']
    15431543            if 'DisAglCtls' in generalData:
    15441544                DisAglCtls = generalData['DisAglCtls']
    1545             dlg = G2gd.DisAglDialog(G2frame,DisAglCtls,generalData)
     1545                if 'H' not in DisAglCtls['AtomTypes']:
     1546                    DisAglCtls['AtomTypes'].append('H')
     1547                    DisAglCtls['AngleRadii'].append(0.5)
     1548                    DisAglCtls['BondRadii'].append(0.5)
     1549            dlg = G2gd.DisAglDialog(G2frame,DisAglCtls,generalData,Reset=False)
    15461550            if dlg.ShowModal() == wx.ID_OK:
    15471551                DisAglCtls = dlg.GetData()
     
    15511555            dlg.Destroy()
    15521556            generalData['DisAglCtls'] = DisAglCtls
     1557            cx,ct,cs,cia = generalData['AtomPtrs']
    15531558            atomData = data['Atoms']
     1559            AtNames = [atom[ct-1] for atom in atomData]
    15541560            colLabels = [Atoms.GetColLabelValue(c) for c in range(Atoms.GetNumberCols())]
     1561            Neigh = []
    15551562            for ind in indx:
    15561563                atom = atomData[ind]
     1564                if atom[ct] not in ['C','N','O']:
     1565                    continue
     1566                neigh = [atom[ct-1],G2mth.FindNeighbors(data,atom[ct-1],AtNames),0]
     1567                if len(neigh[1]) > 3 or (atom[ct] == 'O' and len(neigh[1]) > 1):
     1568                    continue
     1569                Neigh.append(neigh)
     1570            if Neigh:
     1571                dlg = G2gd.AddHatomDialog(G2frame,Neigh,data)
     1572                if dlg.ShowModal() == wx.ID_OK:
     1573                    Neigh = dlg.GetData()
     1574                    for neigh in Neigh:
     1575                        print neigh
     1576                   
     1577                dlg.Destroy()
     1578            else:
     1579                wx.MessageBox('No candidates found',caption='Add H atom Error',style=wx.ICON_EXCLAMATION)
    15571580       
    15581581    def OnAtomMove(event):
Note: See TracChangeset for help on using the changeset viewer.