Changeset 3103


Ignore:
Timestamp:
Sep 28, 2017 2:25:23 PM (4 years ago)
Author:
vondreele
Message:

show seq. result in structure drawing - steps thru histograms changing structure at each step

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIlattice.py

    r3097 r3103  
    196196    g = nl.inv(G)
    197197    return G,g
     198
     199def cellDijFill(pfx,phfx,SGData,parmDict):
     200    '''Returns the filled-out reciprocal cell (A) terms
     201    from the parameter dictionaries corrected for Dij.
     202
     203    :param str pfx: parameter prefix ("n::", where n is a phase number)
     204    :param dict SGdata: a symmetry object
     205    :param dict parmDict: a dictionary of parameters
     206
     207    :returns: A,sigA where each is a list of six terms with the A terms
     208    '''
     209    if SGData['SGLaue'] in ['-1',]:
     210        A = [parmDict[pfx+'A0']+parmDict[phfx+'D11'],parmDict[pfx+'A1']+parmDict[phfx+'D22'],
     211             parmDict[pfx+'A2']+parmDict[phfx+'D33'],
     212             parmDict[pfx+'A3']+parmDict[phfx+'D12'],parmDict[pfx+'A4']+parmDict[phfx+'D13'],
     213             parmDict[pfx+'A5']+parmDict[phfx+'D23']]
     214    elif SGData['SGLaue'] in ['2/m',]:
     215        if SGData['SGUniq'] == 'a':
     216            A = [parmDict[pfx+'A0']+parmDict[phfx+'D11'],parmDict[pfx+'A1']+parmDict[phfx+'D22'],
     217                 parmDict[pfx+'A2']+parmDict[phfx+'D33'],0,0,parmDict[pfx+'A5']+parmDict[phfx+'D23']]
     218        elif SGData['SGUniq'] == 'b':
     219            A = [parmDict[pfx+'A0']+parmDict[phfx+'D11'],parmDict[pfx+'A1']+parmDict[phfx+'D22'],
     220                 parmDict[pfx+'A2']+parmDict[phfx+'D33'],0,parmDict[pfx+'A4']+parmDict[phfx+'D13'],0]
     221        else:
     222            A = [parmDict[pfx+'A0']+parmDict[phfx+'D11'],parmDict[pfx+'A1']+parmDict[phfx+'D22'],
     223                 parmDict[pfx+'A2']+parmDict[phfx+'D33'],parmDict[pfx+'A3']+parmDict[phfx+'D12'],0,0]
     224    elif SGData['SGLaue'] in ['mmm',]:
     225        A = [parmDict[pfx+'A0']+parmDict[phfx+'D11'],parmDict[pfx+'A1']+parmDict[phfx+'D22'],
     226             parmDict[pfx+'A2']+parmDict[phfx+'D33'],0,0,0]
     227    elif SGData['SGLaue'] in ['4/m','4/mmm']:
     228        A = [parmDict[pfx+'A0']+parmDict[phfx+'D11'],parmDict[pfx+'A0']+parmDict[phfx+'D11'],
     229             parmDict[pfx+'A2']+parmDict[phfx+'D33'],0,0,0]
     230    elif SGData['SGLaue'] in ['6/m','6/mmm','3m1', '31m', '3']:
     231        A = [parmDict[pfx+'A0']+parmDict[phfx+'D11'],parmDict[pfx+'A0']+parmDict[phfx+'D11'],
     232             parmDict[pfx+'A2']+parmDict[phfx+'D33'],parmDict[pfx+'A0']+parmDict[phfx+'D11'],0,0]
     233    elif SGData['SGLaue'] in ['3R', '3mR']:
     234        A = [parmDict[pfx+'A0']+parmDict[phfx+'D11'],parmDict[pfx+'A0']+parmDict[phfx+'D11'],
     235            parmDict[pfx+'A0']+parmDict[phfx+'D11'],
     236            parmDict[pfx+'A3']+parmDict[phfx+'D23'],parmDict[pfx+'A3']+parmDict[phfx+'D23'],
     237            parmDict[pfx+'A3']+parmDict[phfx+'D23']]
     238    elif SGData['SGLaue'] in ['m3m','m3']:
     239        A = [parmDict[pfx+'A0']+parmDict[phfx+'D11'],parmDict[pfx+'A0']+parmDict[phfx+'D11'],
     240             parmDict[pfx+'A0']+parmDict[phfx+'D11'],0,0,0]
     241    return A
    198242   
    199243def prodMGMT(G,Mat):
  • trunk/GSASIImath.py

    r3099 r3103  
    548548   
    549549
     550def ApplySeqData(data,seqData):
     551    '''Applies result from seq. refinement to drawing atom positions & Uijs
     552    '''
     553    generalData = data['General']
     554    SGData = generalData['SGData']
     555    cx,ct,cs,cia = generalData['AtomPtrs']
     556    drawingData = data['Drawing']
     557    dcx,dct,dcs,dci = drawingData['atomPtrs']
     558    atoms = data['Atoms']
     559    drawAtoms = drawingData['Atoms']
     560    pId = data['pId']
     561    pfx = '%d::'%(pId)
     562    parmDict = seqData['parmDict']
     563    for ia,atom in enumerate(atoms):
     564        dxyz = np.array([parmDict[pfx+'dAx:'+str(ia)],parmDict[pfx+'dAy:'+str(ia)],parmDict[pfx+'dAz:'+str(ia)]])
     565        if atom[cia] == 'A':
     566            atuij = np.array([parmDict[pfx+'AU11:'+str(ia)],parmDict[pfx+'AU22:'+str(ia)],parmDict[pfx+'AU33:'+str(ia)],
     567                parmDict[pfx+'AU12:'+str(ia)],parmDict[pfx+'AU13:'+str(ia)],parmDict[pfx+'AU23:'+str(ia)]])
     568        else:
     569            atuiso = parmDict[pfx+'AUiso:'+str(ia)]
     570        atxyz = G2spc.MoveToUnitCell(np.array(atom[cx:cx+3])+dxyz)[0]
     571        indx = FindAtomIndexByIDs(drawAtoms,dci,[atom[cia+8],],True)
     572        for ind in indx:
     573            drawatom = drawAtoms[ind]
     574            opr = drawatom[dcs-1]
     575            #how do I handle Sfrac? - fade the atoms?
     576            if atom[cia] == 'A':                   
     577                X,U = G2spc.ApplyStringOps(opr,SGData,atxyz,atuij)
     578                drawatom[dcx:dcx+3] = X
     579                drawatom[dci-6:dci] = U
     580            else:
     581                X = G2spc.ApplyStringOps(opr,SGData,atxyz)
     582                drawatom[dcx:dcx+3] = X
     583                drawatom[dci-7] = atuiso
     584    return drawAtoms
     585   
    550586def FindNeighbors(phase,FrstName,AtNames,notName=''):
    551587    General = phase['General']
     
    15681604    B = np.array([fc[:,nxs]*np.cos(2.*np.pi*(i+1)*tau) for i,fc in enumerate(fcos)])
    15691605    return np.sum(A,axis=0)+np.sum(B,axis=0)
    1570    
     1606
    15711607def ApplyModulation(data,tau):
    15721608    '''Applies modulation to drawing atom positions & Uijs for given tau
  • trunk/GSASIIphsGUI.py

    r3101 r3103  
    994994    phasePage.SendSizeEvent()
    995995    phasePage.Scroll(0,Scroll)
    996 
    997996   
    998 def FindBondsDraw(data):   
     997def FindBondsDraw(data):
     998    '''Generally used routine where cell is from data
     999    '''
     1000    generalData = data['General']
     1001    cell = generalData['Cell'][1:7]
     1002    FindBondsDrawCell(data,cell)
     1003   
     1004def FindBondsDrawCell(data,cell):   
    9991005    '''uses numpy & masks - very fast even for proteins!
     1006    allows different cell as input from seq. refinements
    10001007    '''
    10011008    import numpy.ma as ma
     
    10041011    atomData = data['Drawing']['Atoms']
    10051012    generalData = data['General']
    1006     Amat,Bmat = G2lat.cell2AB(generalData['Cell'][1:7])
     1013    Amat,Bmat = G2lat.cell2AB(cell)
    10071014    radii = generalData['BondRadii']
    10081015#    if generalData.get('DisAglCtls',{}):
  • trunk/GSASIIplot.py

    r3101 r3103  
    56265626    # PlotStructure initialization here
    56275627    global mcsaXYZ,mcsaTypes,mcsaBonds
     5628    global cell, Vol, Amat, Bmat, A4mat, B4mat
    56285629    ForthirdPI = 4.0*math.pi/3.0
    56295630    generalData = data['General']
     
    58265827        elif key in ['M',]and generalData['Modulated']:  #make a movie file
    58275828            G2frame.tau = 0.
    5828             for i in range(10):
     5829            for i in range(100):
    58295830                G2frame.tau += 0.1
     5831                G2frame.tau %= 1.
    58305832                G2frame.G2plotNB.status.SetStatusText('Modulation tau = %.2f'%(G2frame.tau),1)
    58315833                data['Drawing']['Atoms'],Fade = G2mth.ApplyModulation(data,G2frame.tau)     #modifies drawing atom array!         
     
    58355837                    Fade += 1
    58365838                Draw('key down',Fade)
    5837         elif key in ['+','-','=','0'] and generalData['Modulated']:
     5839            return
     5840        elif key in ['+','-','=','0']:
    58385841            if keyBox:
    58395842                OnKeyPressed(event)
     
    58795882                    G2frame.seq %= len(histNames)   #makes loop
    58805883                    G2frame.G2plotNB.status.SetStatusText('Seq. data file: %s'%(histNames[G2frame.seq]),1)
    5881                    
    5882                    
    5883                    
     5884                    pId = data['pId']
     5885                    SGData = generalData['SGData']
     5886                    pfx = str(pId)+'::'
     5887                    phfx = '%d:%d:'%(pId,G2frame.seq)
     5888                    seqData = Seqdata[histNames[G2frame.seq]]
     5889                    parmDict = seqData['parmDict']
     5890                    cellA = G2lat.cellDijFill(pfx,phfx,SGData,parmDict)
     5891                    global cell, Vol, Amat, Bmat, A4mat, B4mat
     5892                    cell = G2lat.A2cell(cellA)
     5893                    Vol = G2lat.calc_V(cellA)
     5894                    Amat,Bmat = G2lat.cell2AB(cell)         #Amat - crystal to cartesian, Bmat - inverse
     5895                    Gmat,gmat = G2lat.cell2Gmat(cell)
     5896                    A4mat = np.concatenate((np.concatenate((Amat,[[0],[0],[0]]),axis=1),[[0,0,0,1],]),axis=0)
     5897                    B4mat = np.concatenate((np.concatenate((Bmat,[[0],[0],[0]]),axis=1),[[0,0,0,1],]),axis=0)
     5898                    data['Drawing']['Atoms'] = G2mth.ApplySeqData(data,seqData)
    58845899                    SetDrawAtomsText(data['Drawing']['Atoms'])
    5885                     G2phG.FindBondsDraw(data)           #rebuild bonds & polygons
     5900                    G2phG.FindBondsDrawCell(data,cell)           #rebuild bonds & polygons
    58865901                    Draw('key down')                   
    58875902                else:
     
    67806795        pass
    67816796    wx.CallAfter(Draw,'main')
    6782     if firstCall: Draw('main') # draw twice the first time that graphics are displayed
     6797#    if firstCall: Draw('main') # draw twice the first time that graphics are displayed
    67836798
    67846799################################################################################
Note: See TracChangeset for help on using the changeset viewer.