Changeset 4077


Ignore:
Timestamp:
Aug 4, 2019 3:28:46 PM (2 years ago)
Author:
vondreele
Message:

add SHAPES capability & all the interface stuff

Location:
trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIplot.py

    r4076 r4077  
    32383238                        else:
    32393239                            Plot.plot(X,YB,colors[0]+pP,picker=3.,clip_on=Clip_on,label='_obs')
    3240                         Plot.plot(X,W,colors[2],picker=False,label='_bkg')     #const. background
    3241                         Plot.plot(X,ZB,colors[1],picker=False,label='_calc')
     3240                        Plot.plot(X,W,colors[1],picker=False,label='_bkg')     #const. background
     3241                        Plot.plot(X,ZB,colors[2],picker=False,label='_calc')
    32423242                else:  # not logPlot
    32433243                    if G2frame.SubBack:
     
    32483248                        else:
    32493249                            Plot.plot(X,YB,colors[0]+pP,picker=3.,clip_on=Clip_on,label='_obs')
    3250                             Plot.plot(X,ZB,colors[1],picker=False,label='_calc')
     3250                            Plot.plot(X,ZB,colors[2],picker=False,label='_calc')
    32513251                    else:
    32523252                        if 'PWDR' in plottype:
     
    32553255                        else:
    32563256                            Plot.plot(X,YB,colors[0]+pP,picker=3.,clip_on=Clip_on,label='_obs')
    3257                             Plot.plot(X,ZB,colors[1],picker=False,label='_calc')
     3257                            Plot.plot(X,ZB,colors[2],picker=False,label='_calc')
    32583258                    if 'PWDR' in plottype and (G2frame.SinglePlot and G2frame.plusPlot):
    32593259                        BackLine = Plot.plot(X,W,colors[2],picker=False,label='_bkg')                 #Ib
  • trunk/GSASIIpwdGUI.py

    r4076 r4077  
    360360                'Moore':20,'Dist G':100.,},           
    361361        'Particle':{'Matrix':{'Name':'vacuum','VolFrac':[0.0,False]},'Levels':[],},
     362        'Shapes':{'outName':'run','NumAA':100,'Niter':1,'AAscale':1.0,'Symm':1,'bias-z':0.0,
     363                 'inflateV':1.0,'AAglue':0.0,'pdbOut':False},
    362364        'Current':'Size dist.','BackFile':'',
    363365        }
     
    52235225    if 'Pair' not in data:
    52245226        data['Pair'] = {'Method':'Regularization','MaxRadius':100.,'NBins':100,'Errors':'User',
    5225             'Percent error':2.5,'Background':[0,False],'Distribution':[],'Moore':[20,False],'Dist G':100.,}           
     5227            'Percent error':2.5,'Background':[0,False],'Distribution':[],'Moore':[20,False],'Dist G':100.,} 
     5228    if 'Shapes' not in data:
     5229        data['Shapes'] = {'outName':'run','NumAA':100,'Niter':1,'AAscale':1.0,'Symm':1,'bias-z':0.0,
     5230            'inflateV':1.0,'AAglue':0.0,'pdbOut':False}
    52265231
    52275232    #end patches
     
    54145419            wx.CallAfter(UpdateModelsGrid,G2frame,data)
    54155420           
     5421        elif data['Current'] == 'Shapes':
     5422            import G2shapes
     5423            SaveState()
     5424            wx.MessageBox(''' For use of SHAPES, please cite:
     5425      A New Algroithm for the Reconstruction of Protein Molecular Envelopes
     5426      from X-ray Solution Scattering Data,
     5427      J. Badger, Jour. of Appl. Chrystallogr. 2019, XX, xxx-xxx.
     5428      doi: xxx''',
     5429      caption='Program Shapes',style=wx.ICON_INFORMATION)
     5430            Phases,Patterns = G2shapes.G2shapes(Profile,ProfDict,Limits,data)
     5431           
     5432           
     5433           
    54165434    def OnUnDo(event):
    54175435        DoUnDo()
     
    55775595                        ' Msg: '+Results[-1]+'\nYou need to rethink your selection of parameters\n'+    \
    55785596                        ' Model restored to previous version')
    5579 #            G2sasd.PairFxn(Profile,ProfDict,Limits,Sample,data)
    55805597            RefreshPlots(True)
    55815598            wx.CallAfter(UpdateModelsGrid,G2frame,data)                   
     
    55835600        def OnMooreTerms(event):
    55845601            data['Pair']['Moore'] = int(round(Limits[1][1]*data['Pair']['MaxRadius']/np.pi))-1
    5585             wx.CallAfter(UpdateModelsGrid,G2frame,data)                   
    5586            
     5602            wx.CallAfter(UpdateModelsGrid,G2frame,data)                               
    55875603           
    55885604        pairSizer = wx.BoxSizer(wx.VERTICAL)
     
    56345650        return pairSizer   
    56355651   
    5636     def ShapeSizer():
     5652    def ShapesSizer():
     5653       
     5654        def OnPDBout(event):
     5655            data['Shapes']['pdbOut'] = not data['Shapes']['pdbOut']
     5656       
    56375657        shapeSizer = wx.BoxSizer(wx.VERTICAL)
    5638         shapeSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Shape parameters: TBD'),0,WACV)
    5639        
    5640        
     5658        shapeSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Shape parameters:'),0,WACV)
     5659        parmSizer = wx.FlexGridSizer(0,4,5,5)
     5660#1st row       
     5661        parmSizer.Add(wx.StaticText(G2frame.dataWindow,label=' No. amino acids: '),0,WACV)
     5662        numAA = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data['Shapes'],'NumAA',min=10)
     5663        parmSizer.Add(numAA,0,WACV)
     5664        parmSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Nballs=no. amino acids*'),0,WACV)       
     5665        scaleAA = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data['Shapes'],'AAscale',min=0.1,max=10.,nDig=(10,2))
     5666        parmSizer.Add(scaleAA,0,WACV)
     5667#2nd row       
     5668        parmSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Inflate by (1.-1.4): '),0,WACV)       
     5669        inflate = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data['Shapes'],'inflateV',min=1.,max=1.4,nDig=(10,2))
     5670        parmSizer.Add(inflate,0,WACV)
     5671        parmSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Axial symmetry (1-6): '),0,WACV)       
     5672        symm = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data['Shapes'],'Symm',min=1,max=6)
     5673        parmSizer.Add(symm,0,WACV)
     5674#3rd row
     5675        parmSizer.Add(wx.StaticText(G2frame.dataWindow,label=' z-axis bias (-2 to 2): '),0,WACV)       
     5676        zaxis = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data['Shapes'],'bias-z',min=-2.,max=2.,nDig=(10,2))
     5677        parmSizer.Add(zaxis,0,WACV)
     5678        parmSizer.Add(wx.StaticText(G2frame.dataWindow,label=' elongation (0-20): '),0,WACV)       
     5679        glue = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data['Shapes'],'AAglue',min=0.,max=20.,nDig=(10,2))
     5680        parmSizer.Add(glue,0,WACV)
     5681#4th row
     5682        parmSizer.Add(wx.StaticText(G2frame.dataWindow,label=' No. iterations (1-10): '),0,WACV)       
     5683        niter = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data['Shapes'],'Niter',min=1,max=10)
     5684        parmSizer.Add(niter,0,WACV)
     5685        parmSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Output name: '),0,WACV)       
     5686        name = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data['Shapes'],'outName')
     5687        parmSizer.Add(name,0,WACV)
     5688#last row       
     5689        pdb = wx.CheckBox(G2frame.dataWindow,label=' Save as pdb files?: ')
     5690        pdb.SetValue(data['Shapes']['pdbOut'])
     5691        pdb.Bind(wx.EVT_CHECKBOX, OnPDBout)       
     5692        parmSizer.Add(pdb,0,WACV)
     5693       
     5694        shapeSizer.Add(parmSizer)
    56415695        return shapeSizer
    5642        
    5643        
    56445696
    56455697    def PartSizer():
     
    59425994    models = ['Size dist.','Particle fit','Pair distance',]
    59435995    if len(data['Pair']['Distribution']):
    5944         models += ['Shape',]
     5996        models += ['Shapes',]
    59455997    topSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Modeling by: '),0,WACV)
    59465998    fitSel = wx.ComboBox(G2frame.dataWindow,value=data['Current'],choices=models,
     
    59676019        mainSizer.Add(PairSizer(),1,wx.ALIGN_LEFT|wx.EXPAND)
    59686020    elif 'Shape' in data['Current']:
    5969         mainSizer.Add(ShapeSizer(),1,wx.ALIGN_LEFT|wx.EXPAND)
     6021        mainSizer.Add(ShapesSizer(),1,wx.ALIGN_LEFT|wx.EXPAND)
    59706022    G2G.HorizontalLine(mainSizer,G2frame.dataWindow)   
    59716023    backSizer = wx.BoxSizer(wx.HORIZONTAL)
  • trunk/GSASIIsasd.py

    r4076 r4077  
    10841084
    10851085def PairDistFxn(Profile,ProfDict,Limits,Sample,data):
    1086     print('create P(R) fit to data - TBD')
    10871086   
    10881087    def CalcMoore():
    1089        
    1090 #        def MooreRg(cw,q):      #lines 1400-1409
    1091 #            n = 0
    1092 #            nmax = len(cw)-5
    1093 #            POR = 0.
    1094 #            dmax = cw[nmax+2]
    1095 #            while n < nmax:
    1096 #                POR += cw[n]*((-1**n)*((np.pi*(n+1))**2-6)/((n+1)**3))
    1097 #                n += 1
    1098 #            POR *= 4*(dmax**4)/((np.pi**2)*cw[nmax+3])
    1099 #            return POR
    11001088       
    11011089        def MoorePOR(cw,r,dmax):    #lines 1417-1428
     
    11181106                n += 1
    11191107            return POR
    1120        
    1121 #        def MooreINaught(cw,q,dmax):         #lines 1457-1466
    1122 #            n = 0
    1123 #            nmax = len(cw)
    1124 #            POR = 0.
    1125 #            while n < nmax:
    1126 #                POR += cw[n]*8*(dmax**2)*((-1.)**n)/(n+1)
    1127 #                n += 1
    1128 #            return POR
    11291108       
    11301109        def calcSASD(values,Q,Io,wt,Ifb,dmax,ifBack):
     
    11501129            N += 1
    11511130        MPV = np.zeros(N)
    1152         MPS = np.zeros(N)
    11531131        MPV[0] = Q[Ibeg]
    11541132        dmax = pairData['MaxRadius']
     
    11641142        chisq = np.sum(result[2]['fvec']**2)
    11651143        Ic[Ibeg:Ifin] = MooreIOREFF(MPVR,Q[Ibeg:Ifin],dmax)+Ifb+Back
    1166         covM = result[1]
     1144        ncalc = result[2]['nfev']
    11671145        GOF = chisq/(Ifin-Ibeg-N)
    1168         MPS = np.sqrt(np.diag(covM)*GOF)
     1146        Rwp = np.sqrt(chisq/np.sum(wt[Ibeg:Ifin]*Io[Ibeg:Ifin]**2))*100.      #to %
     1147        print (' Results of small angle data modelling fit of P(R):')
     1148        print ('Number of function calls: %d Number of observations: %d Number of parameters: %d'%(ncalc,Ifin-Ibeg,N))
     1149        print ('Rwp = %7.2f%%, chi**2 = %12.6g, reduced chi**2 = %6.2f'%(Rwp,chisq,GOF))
    11691150        BinMag = MoorePOR(MPVR,Bins,dmax)/2.
    11701151        return Bins,Dbins,BinMag
Note: See TracChangeset for help on using the changeset viewer.