Changeset 1935


Ignore:
Timestamp:
Jul 20, 2015 9:25:46 AM (7 years ago)
Author:
vondreele
Message:

apply Uiso (equiv) for H-atom generation/update
revise H-atom addition to allow consecutive addition
deleted H atoms treated correctly

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIImath.py

    r1930 r1935  
    421421    Oatom = GetAtomsById(Atoms,AtLookUp,[AddHydId[0],])[0]
    422422    OXYZ = np.array(Oatom[cx:cx+3])
     423    if 'I' in Oatom[cia]:
     424        Uiso = Oatom[cia+1]
     425    else:
     426        Uiso = (Oatom[cia+2]+Oatom[cia+3]+Oatom[cia+4])/3.0       #simple average
     427    Uiso = max(Uiso,0.005)                      #set floor!
    423428    Tatoms = GetAtomsById(Atoms,AtLookUp,AddHydId[1])
    424429    TXYZ = np.array([tatom[cx:cx+3] for tatom in Tatoms]) #3 x xyz
     
    431436            Len = np.sqrt(np.sum(Vec**2))
    432437            Hpos = OXYZ-0.98*np.inner(Bmat,Vec).T/Len
    433             return [Hpos,]
     438            HU = 1.1*Uiso
     439            return [Hpos,],[HU,]
    434440        elif AddHydId[-1] == 2:
    435441            Vec = np.inner(Amat,TXYZ-OXYZ).T
     
    442448            Hpos = np.array([[-0.97*cosd(54.75),0.97*sind(54.75),0.],
    443449                [-0.97*cosd(54.75),-0.97*sind(54.75),0.]])
     450            HU = 1.2*Uiso*np.ones(2)
    444451            Hpos = np.inner(Bmat,np.inner(iMat,Hpos).T).T+OXYZ
    445             return Hpos
     452            return Hpos,HU
    446453        else:
    447454            Ratom = GetAtomsById(Atoms,AtLookUp,[AddHydId[2],])[0]
     
    452459            Hpos = np.array([[a,0.,-b],[a,-b*cosd(30.),0.5*b],[a,b*cosd(30.),0.5*b]])
    453460            Hpos = np.inner(Bmat,np.inner(iMat,Hpos).T).T+OXYZ
    454             return Hpos           
     461            HU = 1.5*Uiso*np.ones(3)
     462            return Hpos,HU         
    455463    elif nBonds == 3:
    456464        if AddHydId[-1] == 1:
     
    459467            Vec = -0.93*Vec/Len
    460468            Hpos = OXYZ+Vec
    461             return [Hpos,]
     469            HU = 1.1*Uiso
     470            return [Hpos,],[HU,]
    462471        elif AddHydId[-1] == 2:
    463472            Ratom = GetAtomsById(Atoms,AtLookUp,[AddHydId[2],])[0]
     
    468477            Hpos = [[a,b,0],[a,-b,0]]
    469478            Hpos = np.inner(Bmat,np.inner(iMat,Hpos).T).T+OXYZ
    470             return Hpos
     479            HU = 1.2*Uiso*np.ones(2)
     480            return Hpos,HU
    471481    else:   #2 bonds
    472482        if 'C' in Oatom[ct]:
     
    475485            Vec = -0.93*Vec/Len
    476486            Hpos = OXYZ+Vec
    477             return [Hpos,]
     487            HU = 1.1*Uiso
     488            return [Hpos,],[HU,]
    478489        elif 'O' in Oatom[ct]:
    479490            mapData = General['Map']
     
    488499            Rhos = np.array([getRho(pos,mapData) for pos in Hpos])
    489500            imax = np.argmax(Rhos)
    490             return [Hpos[imax],]
    491     return []
     501            HU = 1.5*Uiso
     502            return [Hpos[imax],],[HU,]
     503    return [],[]
    492504       
    493505def AtomUij2TLS(atomData,atPtrs,Amat,Bmat,rbObj):   #unfinished & not used
  • trunk/GSASIIphsGUI.py

    r1933 r1935  
    157157                generalData['4DmapData'] = mapDefault.copy()
    158158                generalData['4DmapData'].update({'MapType':'Fobs'})
     159        if 'HydIds' not in generalData:
     160            generalData['HydIds'] = {}
    159161# end of patches
    160162        cx,ct,cs,cia = generalData['AtomPtrs']
     
    11881190                            else:                           #'A' --> 'I'
    11891191                                Uij = atomData[r][ui:ui+6]
    1190                                 Uiso = (Uij[0]+Uij[1]+Uij[2])/3.0
     1192                                Uiso = (Uij[0]+Uij[1]+Uij[2])/3.0   
    11911193                                atomData[r][us] = Uiso
    11921194                                Atoms.SetCellStyle(r,us,WHITE,False)
     
    16001602                            mapError = True
    16011603                            continue                           
    1602                         Hxyz = G2mth.AddHydrogens(AtLookUp,generalData,atomData,AddHydIds[ineigh])
     1604                        Hxyz,HU = G2mth.AddHydrogens(AtLookUp,generalData,atomData,AddHydIds[ineigh])
    16031605                        for iX,X in enumerate(Hxyz):
    16041606                            Nat += 1
    16051607                            AtomAdd(X[0],X[1],X[2],'H','H(%d)'%(Nat))
     1608                            data['Atoms'][-1][cia+1] = HU[iX]
    16061609                            Id = data['Atoms'][-1][cia+8]
    16071610                            HydIds[Id] = [iX,AddHydIds[ineigh]]
     
    16091612                    G2frame.ErrorDialog('Add H atom error','Adding O-H atoms requires delt-F map')
    16101613                SetupGeneral()
    1611                 data['General']['HydIds'] = HydIds
     1614                data['General']['HydIds'].update(HydIds)
    16121615                G2frame.dataFrame.AtomEdit.Enable(G2gd.wxID_UPDATEHATOM,True)
    16131616                FillAtomsGrid(Atoms)
     
    16241627        AtLookUp = G2mth.FillAtomLookUp(atomData,cia+8)
    16251628        HydIds = data['General']['HydIds']
     1629        delList = []
    16261630        for HId in HydIds:
    16271631            hydIds = HydIds[HId]
    16281632            num = hydIds[0]
    1629             Hxyz = G2mth.AddHydrogens(AtLookUp,generalData,atomData,hydIds[1])
     1633            Hxyz,HU = G2mth.AddHydrogens(AtLookUp,generalData,atomData,hydIds[1])
    16301634            try:
    16311635                data['Atoms'][AtLookUp[HId]][cx:cx+3] = Hxyz[num]
     1636                data['Atoms'][-1][cia+1] = HU[num]
    16321637            except KeyError:
    1633                 Error += 'Hydrogen atom not in atom list - ignored\n'
     1638                delList.append(HId)
    16341639                continue
     1640        for HId in delList: #clear out deleted H-atoms
     1641            del HydIds[HId]
    16351642        data['Drawing']['Atoms'] = []
    16361643        UpdateDrawAtoms()
    16371644        FillAtomsGrid(Atoms)
    16381645        G2plt.PlotStructure(G2frame,data)
    1639         if Error:
    1640             wx.MessageBox(Error,caption=' H atom update Error',style=wx.ICON_EXCLAMATION)
    16411646       
    16421647    def OnAtomMove(event):
Note: See TracChangeset for help on using the changeset viewer.