Changeset 1199 for trunk/GSASII.py


Ignore:
Timestamp:
Jan 16, 2014 3:55:36 PM (8 years ago)
Author:
vondreele
Message:

1st import of small angle data, create SASD data from image.
Work on proper plotting of SASD data
work on image GUI stuff for small angle data

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r1191 r1199  
    216216        self.ImportPowderReaderlist = []
    217217        self._init_Import_routines('pwd',self.ImportPowderReaderlist,'Powder_Data')
     218        self.ImportSmallAngleReaderlist = []
     219        self._init_Import_routines('sad',self.ImportSmallAngleReaderlist,'SmallAngle_Data')
    218220        self.ImportMenuId = {}
    219221
     
    256258                            readerlist.append(reader)
    257259            except AttributeError:
    258                 print 'Import_'+errprefix+': Attribute Error'+str(filename)
     260                print 'Import_'+errprefix+': Attribute Error '+str(filename)
    259261                pass
    260262            except ImportError:
    261                 print 'Import_'+errprefix+': Error importing file'+str(filename)
     263                print 'Import_'+errprefix+': Error importing file '+str(filename)
    262264                pass
    263265            if fp: fp.close()
     
    14551457        return # success
    14561458
     1459    def _Add_ImportMenu_smallangle(self,parent):
     1460        '''configure the Small Angle Data menus accord to the readers found in _init_Imports
     1461        '''
     1462        submenu = wx.Menu()
     1463        item = parent.AppendMenu(wx.ID_ANY, 'Small Angle Data',
     1464            submenu, help='Import small angle data')
     1465        for reader in self.ImportSmallAngleReaderlist:
     1466            item = submenu.Append(wx.ID_ANY,help=reader.longFormatName,
     1467                kind=wx.ITEM_NORMAL,text='from '+reader.formatName+' file')
     1468            self.ImportMenuId[item.GetId()] = reader
     1469            self.Bind(wx.EVT_MENU, self.OnImportSmallAngle, id=item.GetId())
     1470        item = submenu.Append(wx.ID_ANY,
     1471            help='Import small angle data, use file to try to determine format',
     1472            kind=wx.ITEM_NORMAL,text='guess format from file')
     1473        self.Bind(wx.EVT_MENU, self.OnImportSmallAngle, id=item.GetId())
     1474           
     1475
     1476    def OnImportSmallAngle(self,event):
     1477        '''Called in response to an Import/Small Angle Data/... menu item
     1478        to read a small angle diffraction data set.
     1479        dict self.ImportMenuId is used to look up the specific
     1480        reader item associated with the menu item, which will be
     1481        None for the last menu item, which is the "guess" option
     1482        where all appropriate formats will be tried.
     1483
     1484        '''
     1485       
     1486        def GetSASDIparm(reader):
     1487            parm = reader.instdict
     1488            Iparm = {'Type':[parm['type'],parm['type'],0],'Lam':[parm['wave'],
     1489                parm['wave'],0],'Azimuth':[0.,0.,0]}           
     1490            return Iparm,{}
     1491           
     1492        # get a list of existing histograms
     1493        SASDlist = []
     1494        if self.PatternTree.GetCount():
     1495            item, cookie = self.PatternTree.GetFirstChild(self.root)
     1496            while item:
     1497                name = self.PatternTree.GetItemText(item)
     1498                if name.startswith('SASD ') and name not in SASDlist:
     1499                    SASDlist.append(name)
     1500                item, cookie = self.PatternTree.GetNextChild(self.root, cookie)
     1501        # look up which format was requested
     1502        reqrdr = self.ImportMenuId.get(event.GetId()) 
     1503        rdlist = self.OnImportGeneric(
     1504            reqrdr,self.ImportSmallAngleReaderlist,'Small Angle Data',multiple=True)
     1505        if len(rdlist) == 0: return
     1506        self.CheckNotebook()
     1507        Iparm = None
     1508        lastdatafile = ''
     1509        newHistList = []
     1510        for rd in rdlist:
     1511            lastdatafile = rd.smallangleentry[0]
     1512            HistName = rd.idstring
     1513            HistName = 'SASD '+HistName
     1514            # make new histogram names unique
     1515            HistName = G2obj.MakeUniqueLabel(HistName,SASDlist)
     1516            print 'Read small angle data '+str(HistName)+ \
     1517                ' from file '+str(self.lastimport)
     1518            # data are read, now store them in the tree
     1519            Id = self.PatternTree.AppendItem(parent=self.root,text=HistName)
     1520            Iparm1,Iparm2 = GetSASDIparm(rd)
     1521#            if 'T' in Iparm1['Type'][0]:
     1522#                if not rd.clockWd and rd.GSAS:
     1523#                    rd.powderdata[0] *= 100.        #put back the CW centideg correction
     1524#                cw = np.diff(rd.powderdata[0])
     1525#                rd.powderdata[0] = rd.powderdata[0][:-1]+cw/2.
     1526#                rd.powderdata[1] = rd.powderdata[1][:-1]/cw
     1527#                rd.powderdata[2] = rd.powderdata[2][:-1]*cw**2  #1/var=w at this point
     1528#                if 'Itype' in Iparm2:
     1529#                    Ibeg = np.searchsorted(rd.powderdata[0],Iparm2['Tminmax'][0])
     1530#                    Ifin = np.searchsorted(rd.powderdata[0],Iparm2['Tminmax'][1])
     1531#                    rd.powderdata[0] = rd.powderdata[0][Ibeg:Ifin]
     1532#                    YI,WYI = G2pwd.calcIncident(Iparm2,rd.powderdata[0])
     1533#                    rd.powderdata[1] = rd.powderdata[1][Ibeg:Ifin]/YI
     1534#                    var = 1./rd.powderdata[2][Ibeg:Ifin]
     1535#                    var += WYI*rd.powderdata[1]**2
     1536#                    var /= YI**2
     1537#                    rd.powderdata[2] = 1./var
     1538#                rd.powderdata[3] = np.zeros_like(rd.powderdata[0])                                       
     1539#                rd.powderdata[4] = np.zeros_like(rd.powderdata[0])                                       
     1540#                rd.powderdata[5] = np.zeros_like(rd.powderdata[0])                                       
     1541            Tmin = min(rd.smallangledata[0])
     1542            Tmax = max(rd.smallangledata[0])
     1543            valuesdict = {
     1544                'wtFactor':1.0,
     1545                'Dummy':False,
     1546                'ranId':ran.randint(0,sys.maxint),
     1547                }
     1548            rd.Sample['ranId'] = valuesdict['ranId'] # this should be removed someday
     1549            self.PatternTree.SetItemPyData(Id,[valuesdict,rd.smallangledata])
     1550            self.PatternTree.SetItemPyData(
     1551                self.PatternTree.AppendItem(Id,text='Comments'),
     1552                rd.comments)
     1553            self.PatternTree.SetItemPyData(
     1554                self.PatternTree.AppendItem(Id,text='Limits'),
     1555                [(Tmin,Tmax),[Tmin,Tmax]])
     1556            self.PatternId = G2gd.GetPatternTreeItemId(self,Id,'Limits')
     1557            self.PatternTree.SetItemPyData(
     1558                self.PatternTree.AppendItem(Id,text='Instrument Parameters'),
     1559                [Iparm1,Iparm2])
     1560            self.PatternTree.SetItemPyData(
     1561                self.PatternTree.AppendItem(Id,text='Sample Parameters'),
     1562                rd.Sample)
     1563            self.PatternTree.Expand(Id)
     1564            self.PatternTree.SelectItem(Id)
     1565            newHistList.append(HistName)
     1566           
     1567        if not newHistList: return # somehow, no new histograms
     1568        return # success
     1569
    14571570    def _init_Exports(self,menu):
    14581571        '''Find exporter routines and add them into menus
     
    16241737        self._Add_ImportMenu_powder(Import)
    16251738        self._Add_ImportMenu_Sfact(Import)
     1739        self._Add_ImportMenu_smallangle(Import)
    16261740        #======================================================================
    16271741        # Code to help develop/debug an importer, much is hard-coded below
     
    24022516        DelItemList = []
    24032517        ifPWDR = False
     2518        ifSASD = False
    24042519        ifIMG = False
    24052520        ifHKLF = False
     
    24122527                    'Restraints','Phases','Rigid bodies']:
    24132528                    if 'PWDR' in name: ifPWDR = True
     2529                    if 'SASD' in name: ifSASD = True
    24142530                    if 'IMG' in name: ifIMG = True
    24152531                    if 'HKLF' in name: ifHKLF = True
     
    24182534                item, cookie = self.PatternTree.GetNextChild(self.root, cookie)
    24192535            if ifPWDR: TextList.insert(1,'All PWDR')
     2536            if ifSASD: TextList.insert(1,'All SASD')
    24202537            if ifIMG: TextList.insert(1,'All IMG')
    24212538            if ifHKLF: TextList.insert(1,'All HKLF')
     
    24302547                    elif 'All PWDR' in DelList:
    24312548                        DelList = [item for item in TextList if item[:4] == 'PWDR']
     2549                    elif 'All SASD' in DelList:
     2550                        DelList = [item for item in TextList if item[:4] == 'SASD']
    24322551                    elif 'All IMG' in DelList:
    24332552                        DelList = [item for item in TextList if item[:3] == 'IMG']
Note: See TracChangeset for help on using the changeset viewer.