Changeset 2753


Ignore:
Timestamp:
Mar 10, 2017 12:01:46 PM (6 years ago)
Author:
vondreele
Message:

minor shuffling about for atom constraints - no discernable impact
setup default reflectometry data stub in G2pwdrGUI
setup reflectometry (REFD) data import stub (no importers yet) & generic data handling for REFD tree entries in GGSAII

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r2739 r2753  
    217217            wx.ID_ANY, 'Expand tree items', expandmenu,
    218218            help='Expand items of type in GSAS-II data tree')
    219         for s in 'all','IMG','PWDR','PDF','HKLF','SASD':
     219        for s in 'all','IMG','PWDR','PDF','HKLF','SASD','REFD':
    220220            if s == 'all':
    221221                help = 'Expand all items in GSAS-II data tree'
     
    228228            wx.ID_ANY, 'Move tree items', movemenu,
    229229            help='Move items of type items to end of GSAS-II data tree')
    230         for s in 'IMG','PWDR','PDF','HKLF','SASD','Phase':
     230        for s in 'IMG','PWDR','PDF','HKLF','SASD','REFD','Phase':
    231231            help = 'Move '+s+' type items to end of GSAS-II data tree'
    232232            item = movemenu.Append(wx.ID_ANY,kind=wx.ITEM_NORMAL,text=s,help=help)
     
    280280        self.ImportSmallAngleReaderlist = []
    281281        self._init_Import_routines('sad',self.ImportSmallAngleReaderlist,'SmallAngle_Data')
     282        self.ImportReflectometryReaderlist = []
     283        self._init_Import_routines('rfd',self.ImportReflectometryReaderlist,'Reflectometry_Data')
    282284        self.ImportImageReaderlist = []
    283285        self._init_Import_routines('img',self.ImportImageReaderlist,'Images')
     
    373375
    374376        Called from :meth:`GSASII.OnImportPhase`, :meth:`GSASII.OnImportImage`,
    375         :meth:`GSASII.OnImportSfact`, :meth:`GSASII.OnImportPowder` and
    376         :meth:`GSASII.OnImportSmallAngle`
     377        :meth:`GSASII.OnImportSfact`, :meth:`GSASII.OnImportPowder`,
     378        :meth:`GSASII.OnImportSmallAngle` and :meth:'GSASII.OnImportReflectometry`
    377379
    378380        Uses reader_objects subclassed from :class:`GSASIIIO.ImportPhase`,
     
    19711973        if not newHistList: return # somehow, no new histograms
    19721974        return # success
     1975       
     1976    def _Add_ImportMenu_reflectometry(self,parent):
     1977        '''configure the reflectometry Data menus accord to the readers found in _init_Imports
     1978        '''
     1979        submenu = wx.Menu()
     1980        item = parent.AppendMenu(wx.ID_ANY, 'Reflectometry Data',
     1981            submenu, help='Import reflectometry data')
     1982        for reader in self.ImportReflectometryReaderlist:
     1983            item = submenu.Append(wx.ID_ANY,help=reader.longFormatName,
     1984                kind=wx.ITEM_NORMAL,text='from '+reader.formatName+' file')
     1985            self.ImportMenuId[item.GetId()] = reader
     1986            self.Bind(wx.EVT_MENU, self.OnImportReflectometry, id=item.GetId())
     1987        # item = submenu.Append(wx.ID_ANY,
     1988        #     help='Import reflectometry data, use file to try to determine format',
     1989        #     kind=wx.ITEM_NORMAL,text='guess format from file')
     1990        # self.Bind(wx.EVT_MENU, self.OnImportReflectometry, id=item.GetId())
     1991       
     1992    def OnImportReflectometry(self,event):
     1993        '''Called in response to an Import/Small Angle Data/... menu item
     1994        to read a small angle diffraction data set.
     1995        dict self.ImportMenuId is used to look up the specific
     1996        reader item associated with the menu item, which will be
     1997        None for the last menu item, which is the "guess" option
     1998        where all appropriate formats will be tried.
     1999
     2000        '''
     2001       
     2002        def GetREFDIparm(reader):
     2003            parm = reader.instdict
     2004            Iparm = {'Type':[parm['type'],parm['type'],0],'Lam':[parm['wave'],
     2005                parm['wave'],0],'Azimuth':[0.,0.,0]}           
     2006            return Iparm,{}
     2007           
     2008        # get a list of existing histograms
     2009        REFDlist = []
     2010        if self.PatternTree.GetCount():
     2011            item, cookie = self.PatternTree.GetFirstChild(self.root)
     2012            while item:
     2013                name = self.PatternTree.GetItemText(item)
     2014                if name.startswith('REFD ') and name not in REFDlist:
     2015                    REFDlist.append(name)
     2016                item, cookie = self.PatternTree.GetNextChild(self.root, cookie)
     2017        # look up which format was requested
     2018        reqrdr = self.ImportMenuId.get(event.GetId()) 
     2019        rdlist = self.OnImportGeneric(
     2020            reqrdr,self.ImportReflectometryReaderlist,'Reflectometry Data',multiple=True)
     2021        if len(rdlist) == 0: return
     2022        self.CheckNotebook()
     2023        newHistList = []
     2024        self.EnablePlot = False
     2025        for rd in rdlist:
     2026            HistName = rd.idstring
     2027            HistName = 'REFD '+HistName
     2028            # make new histogram names unique
     2029            HistName = G2obj.MakeUniqueLabel(HistName,REFDlist)
     2030            print 'Read reflectometry data '+HistName+ \
     2031                ' from file '+self.lastimport
     2032            # data are read, now store them in the tree
     2033            Id = self.PatternTree.AppendItem(parent=self.root,text=HistName)
     2034            Iparm1,Iparm2 = GetREFDIparm(rd)
     2035#            if 'T' in Iparm1['Type'][0]:
     2036#                if not rd.clockWd and rd.GSAS:
     2037#                    rd.powderdata[0] *= 100.        #put back the CW centideg correction
     2038#                cw = np.diff(rd.powderdata[0])
     2039#                rd.powderdata[0] = rd.powderdata[0][:-1]+cw/2.
     2040#                rd.powderdata[1] = rd.powderdata[1][:-1]/cw
     2041#                rd.powderdata[2] = rd.powderdata[2][:-1]*cw**2  #1/var=w at this point
     2042#                if 'Itype' in Iparm2:
     2043#                    Ibeg = np.searchsorted(rd.powderdata[0],Iparm2['Tminmax'][0])
     2044#                    Ifin = np.searchsorted(rd.powderdata[0],Iparm2['Tminmax'][1])
     2045#                    rd.powderdata[0] = rd.powderdata[0][Ibeg:Ifin]
     2046#                    YI,WYI = G2pwd.calcIncident(Iparm2,rd.powderdata[0])
     2047#                    rd.powderdata[1] = rd.powderdata[1][Ibeg:Ifin]/YI
     2048#                    var = 1./rd.powderdata[2][Ibeg:Ifin]
     2049#                    var += WYI*rd.powderdata[1]**2
     2050#                    var /= YI**2
     2051#                    rd.powderdata[2] = 1./var
     2052#                rd.powderdata[3] = np.zeros_like(rd.powderdata[0])                                       
     2053#                rd.powderdata[4] = np.zeros_like(rd.powderdata[0])                                       
     2054#                rd.powderdata[5] = np.zeros_like(rd.powderdata[0])                                       
     2055            Tmin = min(rd.reflectometrydata[0])
     2056            Tmax = max(rd.reflectometrydata[0])
     2057            valuesdict = {
     2058                'wtFactor':1.0,
     2059                'Dummy':False,
     2060                'ranId':ran.randint(0,sys.maxint),
     2061                }
     2062            rd.Sample['ranId'] = valuesdict['ranId'] # this should be removed someday
     2063            self.PatternTree.SetItemPyData(Id,[valuesdict,rd.reflectometrydata])
     2064            self.PatternTree.SetItemPyData(
     2065                self.PatternTree.AppendItem(Id,text='Comments'),
     2066                rd.comments)
     2067            self.PatternTree.SetItemPyData(
     2068                self.PatternTree.AppendItem(Id,text='Limits'),
     2069                [(Tmin,Tmax),[Tmin,Tmax]])
     2070            self.PatternId = G2gd.GetPatternTreeItemId(self,Id,'Limits')
     2071            self.PatternTree.SetItemPyData(
     2072                self.PatternTree.AppendItem(Id,text='Instrument Parameters'),
     2073                [Iparm1,Iparm2])
     2074            self.PatternTree.SetItemPyData(
     2075                self.PatternTree.AppendItem(Id,text='Substances'),G2pdG.SetDefaultSubstances())
     2076            self.PatternTree.SetItemPyData(
     2077                self.PatternTree.AppendItem(Id,text='Sample Parameters'),
     2078                rd.Sample)
     2079            self.PatternTree.SetItemPyData(
     2080                self.PatternTree.AppendItem(Id,text='Models'),G2pdG.SetDefaultREFDModel())
     2081            newHistList.append(HistName)
     2082        else:
     2083            self.EnablePlot = True
     2084            self.PatternTree.Expand(Id)
     2085            self.PatternTree.SelectItem(Id)
     2086           
     2087        if not newHistList: return # somehow, no new histograms
     2088        return # success
    19732089
    19742090    def OnMacroRecordStatus(self,event,setvalue=None):
     
    22592375        self._Add_ImportMenu_Sfact(Import)
    22602376        self._Add_ImportMenu_smallangle(Import)
     2377        self._Add_ImportMenu_reflectometry(Import)
    22612378
    22622379        #======================================================================
     
    31453262        DelList = []
    31463263        DelItemList = []
    3147         nItems = {'PWDR':0,'SASD':0,'IMG':0,'HKLF':0,'PDF':0}
     3264        nItems = {'PWDR':0,'SASD':0,'REFD':0,'IMG':0,'HKLF':0,'PDF':0}
    31483265        PDFnames = []
    31493266        if self.PatternTree.GetCount():
     
    31553272                    if 'PWDR' in name[:4]: nItems['PWDR'] += 1
    31563273                    if 'SASD' in name[:4]: nItems['SASD'] += 1
     3274                    if 'REFD' in name[:4]: nItems['REFD'] += 1
    31573275                    if 'IMG' in name[:3]:  nItems['IMG'] += 1
    31583276                    if 'HKLF' in name[:4]: nItems['HKLF'] += 1
     
    31783296                            if 'PWDR' in itemName[:4]: nItems['PWDR'] -= 1
    31793297                            elif 'SASD' in itemName[:4]: nItems['SASD'] -= 1
     3298                            elif 'REFD' in itemName[:4]: nItems['REFD'] -= 1
    31803299                            elif 'IMG' in itemName[:3]: nItems['IMG'] -= 1
    31813300                            elif 'HKLF' in itemName[:4]: nItems['HKLF'] -= 1
     
    32553374    def StartProject(self):
    32563375        '''Opens a GSAS-II project file & selects the 1st available data set to
    3257         display (PWDR, HKLF or SASD)
     3376        display (PWDR, HKLF, REFD or SASD)
    32583377        '''
    32593378       
     
    32673386        while item and not Id:
    32683387            name = self.PatternTree.GetItemText(item)
    3269             if name[:4] in ['PWDR','HKLF','IMG ','PDF ','SASD',]:
     3388            if name[:4] in ['PWDR','HKLF','IMG ','PDF ','SASD','REFD']:
    32703389                Id = item
    32713390            elif name == "Phases":
  • trunk/GSASIIconstrGUI.py

    r2707 r2753  
    20602060        #ResidueRB.DestroyChildren() # bad, deletes scrollbars on Mac!
    20612061        if ResidueRB.GetSizer():
    2062             ResidueRB.DestroyChildren()
    2063 #            ResidueRB.GetSizer().Clear(True)
     2062#            ResidueRB.DestroyChildren()
     2063            ResidueRB.GetSizer().Clear(True)
    20642064           
    20652065        ResidueRBDisplay = wx.Panel(ResidueRB)
  • trunk/GSASIIpwdGUI.py

    r2749 r2753  
    207207        'Current':'Size dist.','BackFile':'',
    208208        }
     209       
     210def SetDefaultREFDModel():
     211    'Fills in default items for the SASD Models dictionary'   
     212    return {'Back':[0.0,False],'Layers':[{'Thickness':[1000.,False],'Name':'vacuum'},],'BackFile':'',}
    209213       
    210214def SetDefaultSubstances():
  • trunk/GSASIIspc.py

    r2567 r2753  
    20032003    [[1,2,2,3,3,4],[ 1.0, 1.0, 1.0, 1.0,-1.0, 1.0],[1,1,0,1,0,1],[1.0,1.0,1.0,0.0,0.0,0.0]],    #23  A  B  B  D -D  F
    20042004    [[1,2,2,3,3,4],[ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],[1,1,0,1,0,1],[1.0,1.0,1.0,0.0,0.0,0.0]],    #24  A  B  B  D  D  F
    2005     [[1,2,3,2,4,4],[ 1.0, 1.0, 1.0, 0.5, 0.5, 1.0],[1,1,1,0,0,1],[1.0,1.0,1.0,0.5,0.0,0.0]],    #25  A  B  C B/2 F/2 F
     2005    [[1,2,3,2,4,4],[ 1.0, 1.0, 1.0, 0.5, 1.0, 2.0],[1,1,1,0,0,1],[1.0,1.0,1.0,0.5,0.0,0.0]],    #25  A  B  C B/2 F/2 F
    20062006    [[1,2,3,1,0,4],[ 1.0, 1.0, 1.0, 0.5, 0.0, 1.0],[1,1,1,0,0,1],[1.0,1.0,1.0,0.5,0.0,0.0]],    #26  A  B  C A/2  0  F
    20072007    [[1,2,3,2,4,0],[ 1.0, 1.0, 1.0, 0.5, 1.0, 0.0],[1,1,1,0,1,0],[1.0,1.0,1.0,0.5,0.0,0.0]],    #27  A  B  C B/2  E  0
  • trunk/GSASIIstrIO.py

    r2752 r2753  
    11771177                        at[cs] = Sytsym
    11781178                        xId,xCoef = G2spc.GetCSxinel(at[cs])
    1179                     xId,xCoef = G2spc.GetCSxinel(at[cs])
    11801179                    names = [pfx+'dAx:'+str(i),pfx+'dAy:'+str(i),pfx+'dAz:'+str(i)]
    11811180                    equivs = [[],[],[]]
     
    12011200                            at[cs] = Sytsym
    12021201                            uId,uCoef = G2spc.GetCSuinel(at[cs])[:2]
    1203                         uId,uCoef = G2spc.GetCSuinel(at[cs])[:2]
    12041202                        names = [pfx+'AU11:'+str(i),pfx+'AU22:'+str(i),pfx+'AU33:'+str(i),
    12051203                            pfx+'AU12:'+str(i),pfx+'AU13:'+str(i),pfx+'AU23:'+str(i)]
     
    12151213                                for eqv in equiv[1:]:
    12161214                                    eqv[1] /= coef
    1217                                 G2mv.StoreEquivalence(name,equiv[1:])
     1215                                    G2mv.StoreEquivalence(name,(eqv,))
    12181216                if 'M' in at[ct+1]:
    12191217                    SytSym,Mul,Nop,dupDir = G2spc.SytSym(at[cx:cx+3],SGData)
     
    12841282                                        for eqv in equiv[1:]:
    12851283                                            eqv[1] /= coef
    1286                                         G2mv.StoreEquivalence(name,equiv[1:])
     1284                                            G2mv.StoreEquivalence(name,(eqv,))
    12871285                            maxSSwave[pfx][Stype] = max(maxSSwave[pfx][Stype],iw+1)
    12881286            textureData = General['SH Texture']
  • trunk/GSASIIstrMath.py

    r2752 r2753  
    870870        Tindx = np.array([refDict['FF']['El'].index(El) for El in Tdata])
    871871        FF = np.repeat(refDict['FF']['FF'][iBeg:iFin].T[Tindx].T,len(SGT),axis=0)
    872 #        GSASIIpath.IPyBreak()
    873872        Uniq = np.inner(H,SGMT)             # array(nSGOp,3)
    874873        Phi = np.inner(H,SGT)
     
    879878        biso = -SQfactor*Uisodata[:,nxs]
    880879        Tiso = np.repeat(np.where(biso<1.,np.exp(biso),1.0),len(SGT),axis=1).T
    881         HbH = -np.sum(Uniq.T*np.swapaxes(np.inner(bij,Uniq),2,-1),axis=1)
    882         Tuij = np.where(HbH<1.,np.exp(HbH),1.0).T
     880        HbH = np.sum(Uniq.T*np.swapaxes(np.inner(bij,Uniq),2,-1),axis=1)
     881        Tuij = np.where(HbH<1.,np.exp(-HbH),1.0).T
    883882        Tcorr = np.reshape(Tiso,Tuij.shape)*Tuij*Mdata*Fdata/len(SGMT)
    884         Hij = np.array([Mast*np.multiply.outer(U,U) for U in np.reshape(Uniq,(-1,3))])
    885         Hij = np.reshape(np.array([G2lat.UijtoU6(uij) for uij in Hij]),(-1,len(SGT),6))
     883        Hij = np.array([Mast*np.multiply.outer(U,U) for U in np.reshape(Uniq,(-1,3))])      #Nref*Nops,3,3
     884        Hij = np.reshape(np.array([G2lat.UijtoU6(uij) for uij in Hij]),(-1,len(SGT),6))     #Nref,Nops,6
    886885        fot = np.reshape(((FF+FP).T-Bab).T,cosp.shape)*Tcorr
    887886        if len(FPP.shape) > 1:
Note: See TracChangeset for help on using the changeset viewer.