Changeset 3617


Ignore:
Timestamp:
Sep 24, 2018 9:33:52 AM (3 years ago)
Author:
vondreele
Message:

fix mag space group counts
fix k-SUBGROUPSMAG k-vec input
fix lattice constraints between parent & mag phase

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIconstrGUI.py

    r3601 r3617  
    13391339            DepCons = [1.0,G2obj.G2VarObj('%d::%s:%s'%(opId,name,iat))]
    13401340            constraints['Phase'].append([DepCons,IndpCon,None,None,'e'])
    1341 #        for iu,Uid in enumerate(Uids):
    1342         for iu in list(set(CSU[0])):
    1343             if not iu:
    1344                 continue
    1345             Uid = Uids[iu-1]
    1346             IndpCon = [1.0,G2obj.G2VarObj('%d::%s:%s'%(npId,Uid[2],ia))]
    1347             DepCons = []
    1348             for iau in range(3):
    1349                 for ibu in range(3):
    1350                     if abs(Trans[Uid[0],iau]) > 1.e-4 and abs(Trans[Uid[1],ibu]) > 1.e-4:
    1351                         parm = '%d::%s:%s'%(opId,unames[ibu][iau],iat)
    1352                         if not parm in varyList:
    1353                             varyList.append(parm)
    1354                         DepCons.append([Trans[ibu,iau]/detTrans,G2obj.G2VarObj(parm)])
    1355             if len(DepCons) == 1:
    1356                 constraints['Phase'].append([DepCons[0],IndpCon,None,None,'e'])
    1357             elif len(DepCons) > 1:       
    1358                 for Dep in DepCons:
    1359                     Dep[0] *= -1
    1360                 constraints['Phase'].append([IndpCon]+DepCons+[0.0,None,'c'])
     1341#        for iu,Uid in enumerate(Uids): Not right
     1342#        for iu in list(set(CSU[0])):
     1343#            if not iu:
     1344#                continue
     1345#            Uid = Uids[iu-1]
     1346#            IndpCon = [1.0,G2obj.G2VarObj('%d::%s:%s'%(npId,Uid[2],ia))]
     1347#            DepCons = []
     1348#            for iau in range(3):
     1349#                for ibu in range(3):
     1350#                    if abs(Trans[Uid[0],iau]) > 1.e-4 and abs(Trans[Uid[1],ibu]) > 1.e-4:
     1351#                        parm = '%d::%s:%s'%(opId,unames[ibu][iau],iat)
     1352#                        if not parm in varyList:
     1353#                            varyList.append(parm)
     1354#                        DepCons.append([Trans[ibu,iau]/detTrans,G2obj.G2VarObj(parm)])
     1355#            if len(DepCons) == 1:
     1356#                constraints['Phase'].append([DepCons[0],IndpCon,None,None,'e'])
     1357#            elif len(DepCons) > 1:       
     1358#                for Dep in DepCons:
     1359#                    Dep[0] *= -1
     1360#                constraints['Phase'].append([IndpCon]+DepCons+[0.0,None,'c'])
    13611361           
    13621362        #how do I do Uij's for most Trans?
    1363     Anames = [['A0','A3','A4'],['A3','A1','A5'],['A4','A5','A2']]
    13641363    As = ['A0','A1','A2','A3','A4','A5']
    13651364    Aids = [[0,0,'A0'],[1,1,'A1'],[2,2,'A2'],[0,1,'A3'],[0,2,'A4'],[1,2,'A5']]
    13661365    Axes = ['a','b','c']
    13671366    Holds = []
     1367    DepConsDict = dict(zip(As,[[],[],[],[],[],[]]))
    13681368    for iA,Aid in enumerate(Aids):
    1369         parm = SetUniqAj(npId,Aid[2],nSGData['SGLaue'])
     1369        GT = np.zeros((3,3))
     1370        if abs(oAcof[iA]) > 1.e-8:
     1371            GT[Aid[0],Aid[1]] = 1
     1372            nGT = G2lat.prodMGMT(GT,invTrans)
     1373            nAT = G2lat.Gmat2A(nGT)
     1374            for ia,nA in enumerate(nAT):
     1375                if abs(nA) > 1.e-8 and abs(oAcof[ia]) > 1.e-8:
     1376                    parm = SetUniqAj(opId,As[ia],nSGData['SGLaue'])
     1377                    DepConsDict[Aid[2]].append([nA,G2obj.G2VarObj(parm)])
     1378    for Asi in As:
     1379        parm = SetUniqAj(npId,Asi,nSGData['SGLaue'])
    13701380        parmDict[parm] = nAcof[iA]
    13711381        varyList.append(parm)
    13721382        IndpCon = [1.0,G2obj.G2VarObj(parm)]
    1373         DepCons = []
    1374         for iat in range(3):
    1375             if nSGData['SGLaue'] in ['-1','2/m']:       #set holds
    1376                 if (abs(nAcof[iA]) < 1.e-8) and (abs(invTrans[Aid[0],Aid[1]]) < 1.e-8):
    1377                     if Axes[iat] != nSGData['SGUniq'] and nSGData['SGLaue'] != oSGData['SGLaue']:
    1378                         HoldObj = G2obj.G2VarObj('%d::%s'%(npId,Aid[2]))
    1379                         if not HoldObj in Holds:
    1380                             constraints['Phase'].append([[0.0,HoldObj],None,None,'h'])
    1381                             Holds.append(HoldObj)
    1382                             continue
    1383             for ibt in range(3):
    1384                 if abs(Trans[Aid[0],iat]) > 1.e-4 and abs(invTrans[Aid[1],ibt]) > 1.e-4 and abs(oAcof[iA]) > 1.e-8:
    1385                     parm = SetUniqAj(opId,Anames[ibt][iat],nSGData['SGLaue'])
    1386                     parmDict[parm] = oAcof[As.index(Anames[ibt][iat])]
    1387                     if not parm in varyList:
    1388                         varyList.append(parm)
    1389                     DepCons.append([invTrans[ibt,iat]*invTrans[iat,ibt],G2obj.G2VarObj(parm)])
    1390         if len(DepCons) == 1:
    1391             constraints['Phase'].append([IndpCon,DepCons[0],None,None,'e'])
    1392         elif len(DepCons) > 1:       
    1393             for Dep in DepCons:
     1383        if len(DepConsDict[Asi]) == 1:
     1384            if DepConsDict[Asi][0]:
     1385                constraints['Phase'].append([IndpCon,DepConsDict[Asi][0],None,None,'e'])
     1386        elif len(DepConsDict[Asi]) > 1:       
     1387            for Dep in DepConsDict[Asi]:
    13941388                Dep[0] *= -1
    1395             constraints['Phase'].append([IndpCon]+DepCons+[0.0,None,'c'])
     1389            constraints['Phase'].append([IndpCon]+DepConsDict[Asi]+[0.0,None,'c'])
     1390       
     1391       
     1392   
     1393   
     1394   
     1395   
     1396   
     1397   
     1398#    for iA,Aid in enumerate(Aids):      #TODO: this is not generally correct - ok for orthonormal cases
     1399#        parm = SetUniqAj(npId,Aid[2],nSGData['SGLaue'])
     1400#        parmDict[parm] = nAcof[iA]
     1401#        varyList.append(parm)
     1402#        IndpCon = [1.0,G2obj.G2VarObj(parm)]
     1403#        DepCons = []
     1404#        for iat in range(3):
     1405#            if nSGData['SGLaue'] in ['-1','2/m']:       #set holds
     1406#                if (abs(nAcof[iA]) < 1.e-8) and (abs(invTrans[Aid[0],Aid[1]]) < 1.e-8):
     1407#                    if Axes[iat] != nSGData['SGUniq'] and nSGData['SGLaue'] != oSGData['SGLaue']:
     1408#                        HoldObj = G2obj.G2VarObj('%d::%s'%(npId,Aid[2]))
     1409#                        if not HoldObj in Holds:
     1410#                            constraints['Phase'].append([[0.0,HoldObj],None,None,'h'])
     1411#                            Holds.append(HoldObj)
     1412#                            continue
     1413#            for ibt in range(3):
     1414#                if abs(Trans[Aid[0],iat]) > 1.e-4 and abs(invTrans[Aid[1],ibt]) > 1.e-4 and abs(oAcof[iA]) > 1.e-8:
     1415#                    parm = SetUniqAj(opId,As[iat],nSGData['SGLaue'])
     1416#                    parmDict[parm] = oAcof[iat]
     1417#                    if not parm in varyList:
     1418#                        varyList.append(parm)
     1419#                    DepCons.append([invTrans[ibt,iat]*invTrans[iat,ibt],G2obj.G2VarObj(parm)])
     1420#        if len(DepCons) == 1:
     1421#            constraints['Phase'].append([IndpCon,DepCons[0],None,None,'e'])
     1422#        elif len(DepCons) > 1:       
     1423#            for Dep in DepCons:
     1424#                Dep[0] *= -1
     1425#            constraints['Phase'].append([IndpCon]+DepCons+[0.0,None,'c'])
    13961426#    constDict,fixedList,ignored = G2stIO.ProcessConstraints(constraints['Phase'])
    13971427#    groups,parmlist = G2mv.GroupConstraints(constDict)
  • trunk/GSASIIlattice.py

    r3596 r3617  
    250250   
    251251    '''
    252     return np.inner(Mat,np.inner(G,Mat).T)
     252    return np.inner(np.inner(Mat,G),Mat)        #right
     253#    return np.inner(Mat,np.inner(Mat,G))       #right
     254#    return np.inner(np.inner(G,Mat).T,Mat)      #right
     255#    return np.inner(Mat,np.inner(G,Mat).T)     #right
    253256   
    254257def TransformCell(cell,Trans):
     
    277280    '''Transform atoms from oldPhase to newPhase
    278281    M' is inv(M)
    279     does X' = (X-U)M'+V transformation for coordinates and U' = MUM/det(M)
     282    does X' = M(X-U)+V transformation for coordinates and U' = MUM/det(M)
    280283    for anisotropic thermal parameters
    281284   
     
    300303    invTrans = nl.inv(Trans)
    301304    newAtoms,atCodes = FillUnitCell(oldPhase)
    302     Unit =[abs(int(max(unit))-1) for unit in Trans]
     305    Unit =[abs(int(max(unit))-1) for unit in Trans.T]
    303306    for i,unit in enumerate(Unit):
    304307        if unit > 0:
     
    334337        newPhase['Draw Atoms'] = []
    335338    for atom in newAtoms:
    336         atom[cx:cx+3] = TransformXYZ(atom[cx:cx+3]+Uvec,invTrans.T,Vvec)%1.
     339        atom[cx:cx+3] = TransformXYZ(atom[cx:cx+3]+Uvec,invTrans,Vvec)%1.
    337340        if atom[cia] == 'A':
    338341            atom[cia+2:cia+8] = TransformU6(atom[cia+2:cia+8],Trans)
     
    354357   
    355358def FindNonstandard(Phase):
     359    'This makes occasional mistakes!'
    356360    abc = np.eye(3)
    357361    cba = np.rot90(np.eye(3))
    358     cba[1,1] *= -1      #makes -cba
     362    cba[1,1] *= -1      #makes c-ba
    359363    Mats = {'abc':abc,'cab':np.roll(abc,1,1),'bca':np.roll(abc,2,1),
    360364            'acb':np.roll(cba,1,1),'bac':np.roll(cba,2,1),'cba':cba}        #ok
  • trunk/GSASIIphsGUI.py

    r3616 r3617  
    24702470        for mid,magdata in enumerate(magData):
    24712471            if magdata['Keep']:
    2472                 magdata['No.'] = mid
     2472                magdata['No.'] = mid+1
    24732473                trans = G2spc.Trans2Text(magdata['Trans'])
    24742474                vec = G2spc.Latt2text([magdata['Uvec'],])
    24752475                magKeep.append(magdata)
    24762476                magIds.append(mid)
    2477                 magchoices.append('(%d) %s; (%s) + (%s)'%(mid,magdata['Name'],trans,vec))
     2477                magchoices.append('(%d) %s; (%s) + (%s)'%(mid+1,magdata['Name'],trans,vec))
    24782478        if not len(magKeep):
    24792479            G2frame.ErrorDialog('Magnetic phase selection error','No magnetic phases found; be sure to "Keep" some')
  • trunk/GSASIIpwdGUI.py

    r3616 r3617  
    35053505        E,SGData = G2spc.SpcGroup(controls[13])
    35063506        testAtoms = ['',]+list(set([atom[1] for atom in controls[15]]))
    3507         kvec = ['0','0','0','0','0','0']
    3508         Kx = ['0','1/2','-1/2','1/3','-1/3','2/3','1']
    3509         Ky = ['0','1/2','1/3','2/3','1']
    3510         Kz = ['0','1/2','3/2','1/3','2/3','1']
     3507        kvec = ['0','0','0',' ',' ',' ']
     3508        Kx = [' ','0','1/2','-1/2','1/3','-1/3','2/3','1']
     3509        Ky = [' ','0','1/2','1/3','2/3','1']
     3510        Kz = [' ','0','1/2','3/2','1/3','2/3','1']
    35113511        dlg = G2G.MultiDataDialog(G2frame,title='k-SUBGROUPSMAG options',
    35123512            prompts=[' kx1 as fr.',' ky1 as fr.',' kz1 as fr.',' kx2 as fr.',' ky2 as fr.',' kz2 as fr.',\
    35133513                     ' Use whole star',' Landau transition',' Give intermediate cells','preserve axes','test for mag. atoms','all have moment'],
    35143514            values=kvec+[False,False,False,True,'',False],
    3515             limits=[Kx,Ky,Kz,Kx,Ky,Kz,[True,False],[True,False],[True,False],[True,False],testAtoms,[True,False]],
     3515            limits=[Kx[1:],Ky[1:],Kz[1:],Kx,Ky,Kz,[True,False],[True,False],[True,False],[True,False],testAtoms,[True,False]],
    35163516            formats=['choice','choice','choice','choice','choice','choice','bool','bool','bool','bool',
    35173517                     'choice','bool'])
     
    35623562                phase['aType'] = atype
    35633563                found = False
     3564                if not magAtms:
     3565                    phase['Keep'] = True
    35643566                for matm in magAtms:
    35653567                    xyzs = G2spc.GenAtom(matm[3:6],SGData,False,Move=True)
  • trunk/GSASIIspc.py

    r3616 r3617  
    11181118
    11191119def getlattSym(Trans):
    1120     Fives = {'ababc':'abc','bcbca':'cba','acacb':'acb','cabab':'cab'}
     1120    Fives = {'ababc':'abc','bcbca':'cba','acacb':'acb','cabab':'cab','abcab':'acb'}
    11211121    transText = Trans2Text(Trans)
    11221122    lattSym = ''
     
    32393239        return MagSytSym
    32403240    if len(dupDir) == 1:
    3241         return dupDir.keys()[0]
     3241        return list(dupDir.keys())[0]
    32423242   
    32433243   
Note: See TracChangeset for help on using the changeset viewer.