Changeset 3244


Ignore:
Timestamp:
Jan 25, 2018 1:43:57 PM (4 years ago)
Author:
vondreele
Message:

deal with incomplete residues in residue rigid body assign - they are skipped

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r3243 r3244  
    73547354                rbIds = []
    73557355                for iratm in range(len(rbRes['atNames'])):
     7356                    if res != Atoms[iatm][1]:
     7357                        print('Short %s residue at atom %d is skipped'%(Atoms[iatm][1],iatm))
     7358                        break
    73567359                    rbAtoms.append(np.array(Atoms[iatm][cx:cx+3]))
    73577360                    rbIds.append(Atoms[iatm][20])
    73587361                    iatm += incr    #puts this at beginning of next residue?
    7359                 if 'N  B' in atom[3]:   #end of disorder - reset next atom position
    7360                     iatm -= 1
    7361                     incr = 1
    7362                 Orig = rbAtoms[rbRef[0]]
    7363                 rbObj['RBId'] = RBIds[res]
    7364                 rbObj['Ids'] = rbIds
    7365                 rbObj['Orig'] = [Orig,False]
    7366 #                print ' residue '+rbRes['RBname']+str(atom[0]).strip()+ \
    7367 #                    ' origin at: ','%.5f %.5f %.5f'%(Orig[0],Orig[1],Orig[2])
    7368                 VAC = np.inner(Amat,rbAtoms[rbRef[1]]-Orig)
    7369                 VBC = np.inner(Amat,rbAtoms[rbRef[2]]-Orig)
    7370                 VCC = np.cross(VAR,VAC)
    7371                 QuatA = G2mth.makeQuat(VAR,VAC,VCC)[0]
    7372                 VAR = G2mth.prodQVQ(QuatA,VAR)
    7373                 VBR = G2mth.prodQVQ(QuatA,VBR)
    7374                 QuatB = G2mth.makeQuat(VBR,VBC,VAR)[0]
    7375                 QuatC = G2mth.prodQQ(QuatB,QuatA)
    7376                 rbObj['Orient'] = [QuatC,' ']
    7377                 rbObj['ThermalMotion'] = ['None',[0. for i in range(21)],[False for i in range(21)]] #type,values,flags
    7378                 SXYZ = []
    7379                 TXYZ = []
    7380                 rbObj['Torsions'] = []
    7381                 for i,xyz in enumerate(rbRes['rbXYZ']):
    7382                     SXYZ.append(G2mth.prodQVQ(QuatC,xyz))               
    7383                     TXYZ.append(np.inner(Amat,rbAtoms[i]-Orig))
    7384                 for Oatm,Patm,x,Riders in rbRes['rbSeq']:
    7385                     VBR = SXYZ[Oatm]-SXYZ[Patm]
    7386                     VAR = SXYZ[Riders[0]]-SXYZ[Patm]
    7387                     VAC = TXYZ[Riders[0]]-TXYZ[Patm]
    7388                     QuatA,D = G2mth.makeQuat(VAR,VAC,VBR)
    7389                     ang = 180.*D/np.pi
    7390                     rbObj['Torsions'].append([ang,False])
    7391                     for ride in Riders:
    7392                         SXYZ[ride] = G2mth.prodQVQ(QuatA,SXYZ[ride]-SXYZ[Patm])+SXYZ[Patm]
    7393                 rbRes['useCount'] += 1
    7394                 RBObjs.append(rbObj)
     7362                else:
     7363                    if 'N  B' in atom[3]:   #end of disorder - reset next atom position
     7364                        iatm -= 1
     7365                        incr = 1
     7366                    Orig = rbAtoms[rbRef[0]]
     7367                    rbObj['RBId'] = RBIds[res]
     7368                    rbObj['Ids'] = rbIds
     7369                    rbObj['Orig'] = [Orig,False]
     7370    #                print ' residue '+rbRes['RBname']+str(atom[0]).strip()+ \
     7371    #                    ' origin at: ','%.5f %.5f %.5f'%(Orig[0],Orig[1],Orig[2])
     7372                    VAC = np.inner(Amat,rbAtoms[rbRef[1]]-Orig)
     7373                    VBC = np.inner(Amat,rbAtoms[rbRef[2]]-Orig)
     7374                    VCC = np.cross(VAR,VAC)
     7375                    QuatA = G2mth.makeQuat(VAR,VAC,VCC)[0]
     7376                    VAR = G2mth.prodQVQ(QuatA,VAR)
     7377                    VBR = G2mth.prodQVQ(QuatA,VBR)
     7378                    QuatB = G2mth.makeQuat(VBR,VBC,VAR)[0]
     7379                    QuatC = G2mth.prodQQ(QuatB,QuatA)
     7380                    rbObj['Orient'] = [QuatC,' ']
     7381                    rbObj['ThermalMotion'] = ['None',[0. for i in range(21)],[False for i in range(21)]] #type,values,flags
     7382                    SXYZ = []
     7383                    TXYZ = []
     7384                    rbObj['Torsions'] = []
     7385                    for i,xyz in enumerate(rbRes['rbXYZ']):
     7386                        SXYZ.append(G2mth.prodQVQ(QuatC,xyz))               
     7387                        TXYZ.append(np.inner(Amat,rbAtoms[i]-Orig))
     7388                    for Oatm,Patm,x,Riders in rbRes['rbSeq']:
     7389                        VBR = SXYZ[Oatm]-SXYZ[Patm]
     7390                        VAR = SXYZ[Riders[0]]-SXYZ[Patm]
     7391                        VAC = TXYZ[Riders[0]]-TXYZ[Patm]
     7392                        QuatA,D = G2mth.makeQuat(VAR,VAC,VBR)
     7393                        ang = 180.*D/np.pi
     7394                        rbObj['Torsions'].append([ang,False])
     7395                        for ride in Riders:
     7396                            SXYZ[ride] = G2mth.prodQVQ(QuatA,SXYZ[ride]-SXYZ[Patm])+SXYZ[Patm]
     7397                    rbRes['useCount'] += 1
     7398                    RBObjs.append(rbObj)
    73957399                if isave:
    73967400                    iatm = isave
Note: See TracChangeset for help on using the changeset viewer.