Changeset 727


Ignore:
Timestamp:
Aug 22, 2012 11:15:50 AM (10 years ago)
Author:
vondreele
Message:

add generic sort routine to G2mth
add dzero - distance of peak from origin to peak list
allow sort of peaks by mag or dzero

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIImath.py

    r726 r727  
    886886    peaks = []
    887887    mags = []
     888    dzeros = []
    888889    try:
    889890        mapData = generalData['Map']
     
    916917            break
    917918        peak = (np.array(x1[1:4])-rMI)/incre
     919        dzero = np.sqrt(np.sum(np.inner(Amat,peak)**2))
    918920        peak = fixSpecialPos(peak,SGData,Amat)
    919921        if not len(peaks):
    920922            peaks.append(peak)
    921923            mags.append(x1[0])
     924            dzeros.append(dzero)
    922925        else:
    923926            if keepDup:
     
    925928                    peaks.append(peak)
    926929                    mags.append(x1[0])
     930                    dzeros.append(dzero)
    927931            elif noEquivalent(peak,peaks,SGData) and x1[0] > 0.:
    928932                peaks.append(peak)
    929933                mags.append(x1[0])
     934                dzeros.append(dzero)
    930935            GoOn = Pgbar.Update(len(peaks),newmsg='%s%d'%('No. Peaks found =',len(peaks)))[0]
    931936            if not GoOn or len(peaks) > 500:
     
    933938        rho[rMM[0]:rMP[0],rMM[1]:rMP[1],rMM[2]:rMP[2]] = peakFunc(x1,rX,rY,rZ,rhoPeak,res,SGData['SGLaue'])
    934939        rho = np.roll(np.roll(np.roll(rho,-rMI[2],axis=2),-rMI[1],axis=1),-rMI[0],axis=0)
    935     return np.array(peaks),np.array([mags,]).T
    936 
     940    return np.array(peaks),np.array([mags,]).T,np.array([dzeros,]).T
     941   
     942def sortArray(data,pos,reverse=False):
     943    #data is a list of items
     944    #sort by pos in list; reverse if True
     945    T = []
     946    for i,M in enumerate(data):
     947        T.append((M[pos],i))
     948    D = dict(zip(T,data))
     949    T.sort()
     950    if reverse:
     951        T.reverse()
     952    X = []
     953    for key in T:
     954        X.append(D[key])
     955    return X
     956               
    937957def PeaksUnique(data,Ind):
    938958
     
    951971    XYZ = {}
    952972    for ind in Ind:
    953         XYZ[ind] = np.array(mapPeaks[ind][1:])
     973        XYZ[ind] = np.array(mapPeaks[ind][1:4])
    954974        Indx[ind] = True
    955975    for ind in Ind:
  • trunk/GSASIIphsGUI.py

    r724 r727  
    917917        Size[1] += 35                           #compensate for status bar
    918918        dataDisplay.SetSize(Size)
     919        G2frame.dataFrame.SetStatusText('')
    919920        G2frame.dataFrame.setSizePosLeft(Size)
    920921
     
    12011202       
    12021203        SGData = data['General']['SGData']
     1204        G2frame.dataFrame.SetStatusText('')
    12031205        if SGData['SGPolax']:
    12041206            G2frame.dataFrame.SetStatusText('Warning: The location of the origin is arbitrary in '+SGData['SGPolax'])
     
    16621664           
    16631665    def UpdateDrawAtoms():
     1666        G2frame.dataFrame.SetStatusText('')
    16641667        generalData = data['General']
    16651668        SetupDrawingData()
     
    25612564            return radSizer
    25622565
     2566        G2frame.dataFrame.SetStatusText('')
    25632567        drawOptions.DestroyChildren()
    25642568        dataDisplay = wx.Panel(drawOptions)
     
    25842588       
    25852589    def UpdateTexture():
     2590        G2frame.dataFrame.SetStatusText('')
    25862591        generalData = data['General']       
    25872592        SGData = generalData['SGData']
     
    28142819       
    28152820    def UpdateDData():
     2821        G2frame.dataFrame.SetStatusText('')
    28162822        UseList = data['Histograms']
    28172823        if UseList:
     
    37343740
    37353741    def FillPawleyReflectionsGrid():
     3742        G2frame.dataFrame.SetStatusText('')
    37363743                       
    37373744        def KeyEditPawleyGrid(event):
     
    38893896                else:
    38903897                    MapPeaks.ClearSelection()
    3891                     MapPeaks.SelectRow(r,True)               
     3898                    MapPeaks.SelectRow(r,True)
     3899            elif r < 0:                 #a column pick
     3900                mapPeaks = data['Map Peaks']
     3901                c =  event.GetCol()
     3902                if colLabels[c] == 'mag':
     3903                    mapPeaks = G2mth.sortArray(mapPeaks,0,reverse=True)
     3904                elif colLabels[c] == 'dzero':
     3905                    mapPeaks = G2mth.sortArray(mapPeaks,4)
     3906                else:
     3907                    return
     3908                data['Map Peaks'] = mapPeaks
     3909                wx.CallAfter(FillMapPeaksGrid)
    38923910            G2plt.PlotStructure(G2frame,data)                   
    38933911           
    38943912        G2frame.dataFrame.setSizePosLeft([450,300])
     3913        G2frame.dataFrame.SetStatusText('')
    38953914        if 'Map Peaks' in data:
     3915            G2frame.dataFrame.SetStatusText('Select mag or dzero columns to sort')
    38963916            mapPeaks = data['Map Peaks']                       
    38973917            rowLabels = []
    38983918            for i in range(len(mapPeaks)): rowLabels.append(str(i))
    3899             colLabels = ['mag','x','y','z']
    3900             Types = 4*[wg.GRID_VALUE_FLOAT+':10,4',]
     3919            colLabels = ['mag','x','y','z','dzero']
     3920            Types = 5*[wg.GRID_VALUE_FLOAT+':10,4',]
    39013921            MapPeaksTable = G2gd.Table(mapPeaks,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    39023922            MapPeaks.SetTable(MapPeaksTable, True)
     
    40214041    def OnSearchMaps(event):
    40224042       
     4043#        def FindBondsPeaks(peaks):                    #uses numpy & masks - very fast even for proteins!
     4044#            import numpy.ma as ma
     4045#            Amat,Bmat = G2lat.cell2AB(generalData['Cell'][1:7])
     4046#            for peak in peaks:
     4047#                peak[-1] = []
     4048#            Indx = range(len(peaks))
     4049#            Peaks = []
     4050#            Radii = []
     4051#            for peak in peaks:
     4052#                Peaks.append(np.array(peak[1:4]))
     4053#                Radii.append(1.0)
     4054#            Atoms = np.array(Atoms)
     4055#            Radii = np.array(Radii)
     4056#            IAR = zip(Indx,Atoms,Radii)
     4057#            for atomA in IAR:
     4058#                Dx = Atoms-atomA[1]
     4059#                dist = ma.masked_less(np.sqrt(np.sum(np.inner(Amat,Dx)**2,axis=0)),0.5) #gets rid of G2frame & disorder "bonds" < 0.5A
     4060#                sumR = atomA[3]+Radii
     4061#                IndB = ma.nonzero(ma.masked_greater(dist-data['Drawing']['radiusFactor']*sumR,0.))                 #get indices of bonded atoms
     4062#                i = atomA[0]
     4063#                for j in IndB[0]:
     4064#                    if Styles[i] == 'polyhedra':
     4065#                        atomData[i][-2].append(np.inner(Amat,Dx[j]))
     4066#                    elif Styles[j] != 'polyhedra' and j > i:
     4067#                        atomData[i][-2].append(Dx[j]*Radii[i]/sumR[j])
     4068#                        atomData[j][-2].append(-Dx[j]*Radii[j]/sumR[j])
     4069                           
    40234070        peaks = []
    40244071        mags = []
     
    40364083            pgbar.SetSize(Size)
    40374084            try:
    4038                 peaks,mags = G2mth.SearchMap(data,keepDup=True,Pgbar=pgbar)
     4085                peaks,mags,dzeros = G2mth.SearchMap(data,keepDup=True,Pgbar=pgbar)
    40394086            finally:
    40404087                pgbar.Destroy()
    40414088            sortIdx = np.argsort(mags.flatten())
    40424089            if len(peaks):
    4043                 data['Map Peaks'] = np.concatenate((mags,peaks),axis=1)           
     4090                data['Map Peaks'] = np.concatenate((mags,peaks,dzeros),axis=1)           
    40444091                print ' Map search finished, time = %.2fs'%(time.time()-time0)
    40454092            Page = G2frame.dataDisplay.FindPage('Map peaks')
  • trunk/GSASIIplot.py

    r725 r727  
    23742374        if G2frame.dataDisplay.GetPageText(getSelection()) == 'Map peaks':
    23752375            for i,peak in enumerate(mapPeaks):
    2376                 x,y,z = peak[1:]
     2376                x,y,z,d = peak[1:]
    23772377                X,Y,Z = gluProject(x,y,z,Model,Proj,View)
    23782378                XY = [int(X),int(View[3]-Y)]
     
    30053005            RenderMap(rho,rhoXYZ,indx,Rok)
    30063006        if len(mapPeaks):
    3007             for ind,[mag,x,y,z] in enumerate(mapPeaks):
     3007            for ind,[mag,x,y,z,d] in enumerate(mapPeaks):
    30083008                if ind in Ind and pageName == 'Map peaks':
    30093009                    RenderMapPeak(x,y,z,Gr)
Note: See TracChangeset for help on using the changeset viewer.