Changeset 792


Ignore:
Timestamp:
Oct 24, 2012 8:54:20 AM (10 years ago)
Author:
vondreele
Message:

change instrument parameters to dict from lists
chase down effects - got them all?
start on TOF; read TimeMap? style data - not complete

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r776 r792  
    557557            S = File.readline()               
    558558        File.close()
    559         return [tuple(newVals),newVals,len(newVals)*[False,],newItems]
     559        return dict(zip(newItems,zip(newVals,newVals,len(newVals)*[False,])))
    560560       
    561561    def ReadPowderIparm(self,instfile,bank,databanks,rd):
     
    577577        except:
    578578            ibanks = 1
     579        hType = Iparm['INS   HTYPE '].strip()
    579580        if ibanks == 1: # there is only one bank here, return it
    580581            rd.instbank = 1
    581582            return Iparm
    582         if ibanks != databanks:
     583        if 'PNT' in hType:
     584            rd.instbank = bank
     585        elif ibanks != databanks:
    583586            # number of banks in data and prm file not not agree, need a
    584587            # choice from a human here
     
    588591            bank = rd.BlockSelector(
    589592                choices, self,
    590                 title='Select an instrument parameter block for '+
    591                 os.path.split(rd.powderentry[0])[1]+' block '+str(bank)+
     593                title='Select an instrument parameter bank for '+
     594                os.path.split(rd.powderentry[0])[1]+' BANK '+str(bank)+
    592595                '\nOr use Cancel to select from the default parameter sets',
    593596                header='Block Selector')
     
    612615            Create and return the contents of the instrument parameter tree entry.
    613616            '''
    614             DataType = Iparm['INS   HTYPE '].strip()[0:3]  # take 1st 3 chars
     617            DataType = Iparm['INS   HTYPE '].strip()[:3]  # take 1st 3 chars
    615618            # override inst values with values read from data file
    616619            if rd.instdict.get('type'):
    617620                DataType = rd.instdict.get('type')
    618             wave1 = None
    619             wave2 = 0.0
    620             if rd.instdict.get('wave'):
    621                 wl = rd.instdict.get('wave')
    622                 wave1 = wl[0]
    623                 if len(wl) > 1: wave2 = wl[1]
    624621            data = [DataType,]
    625622            if 'C' in DataType:
     623                wave1 = None
     624                wave2 = 0.0
     625                if rd.instdict.get('wave'):
     626                    wl = rd.instdict.get('wave')
     627                    wave1 = wl[0]
     628                    if len(wl) > 1: wave2 = wl[1]
    626629                s = Iparm['INS  1 ICONS']
    627630                if not wave1:
     
    652655                    data.extend([0.0,0.0,0.002,azm])                                      #OK defaults if fxn #3 not 1st in iprm file
    653656                codes.extend([0,0,0,0,0,0,0])
    654                 return [tuple(data),data,codes,names]
     657                return dict(zip(names,zip(data,data,codes)))
     658            elif 'T' in DataType:
     659                names = ['Type','2-theta','difC','difA','Zero','alpha','beta-0','beta-1','var-inst','X','Y','Azimuth']
     660                codes = [0,0,0,0,0,0,0,0,0,0,0,0]
     661                azm = Iparm.get('INS  1DETAZM')
     662                if azm is None: #not in this Iparm file
     663                    azm = 0.0
     664                else:
     665                    azm = float(azm)
     666                s = Iparm['INS  1BNKPAR'].split()
     667                data.extend([G2IO.sfloat(s[1]),])               #2-theta for bank
     668                s = Iparm['INS  1 ICONS'].split()
     669                data.extend([G2IO.sfloat(s[0]),G2IO.sfloat(s[1]),G2IO.sfloat(s[2])])    #difC, difA, Zero
     670                s = Iparm['INS  1PRCF1 '].split()
     671                pfType = int(s[0])
     672                s = Iparm['INS  1PRCF11'].split()
     673                if pfType == 1:
     674                    data.extend([G2IO.sfloat(s[1]),G2IO.sfloat(s[2]),G2IO.sfloat(s[3])])
     675                    s = Iparm['INS  1PRCF12'].split()
     676                    data.extend([G2IO.sfloat(s[1]),0.0,0.0,azm])
     677                elif pfType in [3,4,5]:
     678                    data.extend([G2IO.sfloat(s[0]),G2IO.sfloat(s[1]),G2IO.sfloat(s[2])])
     679                    if pfType == 4:
     680                        data.extend([G2IO.sfloat(s[3]),0.0,0.0,azm])
     681                    else:
     682                        s = Iparm['INS  1PRCF12'].split()
     683                        data.extend([G2IO.sfloat(s[0]),0.0,0.0,azm])
     684                return dict(zip(names,zip(data,data,codes)))
    655685
    656686        # stuff we might need from the reader
     
    785815        '''
    786816        reqrdr = self.ImportMenuId.get(event.GetId())  # look up which format was requested
    787         rdlist = self.OnImportGeneric(reqrdr,
    788                                       self.ImportPowderReaderlist,
    789                                       'Powder Data',multiple=True)
     817        rdlist = self.OnImportGeneric(reqrdr,self.ImportPowderReaderlist,
     818            'Powder Data',multiple=True)
    790819        if len(rdlist) == 0: return
    791820        self.CheckNotebook()
     
    798827            lastIparmfile = rd.instfile
    799828            lastdatafile = rd.powderentry[0]
    800             print 'Read powder data '+str(
    801                 rd.idstring)+' from file '+str(
    802                 self.lastimport) + ' with parameters from '+str(
    803                 rd.instmsg)
     829            print 'Read powder data '+str(rd.idstring)+ \
     830                ' from file '+str(self.lastimport) + \
     831                ' with parameters from '+str(rd.instmsg)
    804832            # data are read, now store them in the tree
    805             Id = self.PatternTree.AppendItem(
    806                 parent=self.root,
     833            Id = self.PatternTree.AppendItem(parent=self.root,
    807834                text='PWDR '+rd.idstring)
    808835            self.PatternTree.SetItemPyData(Id,[{'wtFactor':1.0},rd.powderdata])
     
    10181045        self.Legend = False
    10191046        self.SinglePlot = False
     1047        self.SubBack = False
    10201048        self.plotView = 0
    10211049        self.Image = 0
     
    10921120                names = ['Type','Lam','Zero']
    10931121                codes = [0,0]
    1094                 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Instrument Parameters'),[tuple(data),data,codes,names])
     1122                self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Instrument Parameters'),dict(zip(names,zip(data,data,codes))))
    10951123                self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),comments)
    10961124                self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Index Peak List'),peaks)
  • trunk/GSASIIIO.py

    r762 r792  
    441441            for datus in data[1:]:
    442442                sub = G2frame.PatternTree.AppendItem(Id,datus[0])
     443#patch
     444                if datus[0] == 'Instrument Parameters' and not isinstance(datus[1],dict):
     445                    datus[1] = dict(zip(datus[1][3],zip(datus[1][0],datus[1][1],datus[1][2])))
     446                    for item in datus[1]:               #zip makes tuples - now make lists!
     447                        datus[1][item] = list(datus[1][item])
     448#end patch
    443449                G2frame.PatternTree.SetItemPyData(sub,datus[1])
    444450            if 'IMG' in datum[0]:                   #retrieve image default flag & data if set
     
    516522            G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Background'),[['chebyschev',1,3,1.0,0.0,0.0],
    517523                            {'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]}])
    518             G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'),[tuple(parms),parms[:],codes,names])
     524            G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'),dict(zip(names,zip(parms,parms,codes))))
    519525            G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Peak List'),[])
    520526            G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Index Peak List'),[])
     
    527533            G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Background'),[['chebyschev',1,3,1.0,0.0,0.0],
    528534                            {'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]}])
    529             G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Instrument Parameters'),[tuple(parms),parms[:],codes,names])
     535            G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Instrument Parameters'),dict(zip(names,zip(parms,parms,codes))))
    530536            G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Sample Parameters'),Sample)
    531537            G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Peak List'),[])
     
    546552        prm = open(prmname,'w')      #old style GSAS parm file
    547553        PickId = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, export)
    548         Values,Names = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame, \
    549             PickId, 'Instrument Parameters'))[1::2]     #get values & names
    550         Inst = dict(zip(Names,Values))
     554        Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame, \
     555            PickId, 'Instrument Parameters'))
    551556        print Inst['Type']
    552557        prm.write( '            123456789012345678901234567890123456789012345678901234567890        '+'\n')
    553558        prm.write( 'INS   BANK      1                                                               '+'\n')
    554         prm.write(('INS   HTYPE   %sR                                                              '+'\n')%(Inst['Type']))
     559        prm.write(('INS   HTYPE   %sR                                                              '+'\n')%(Inst['Type'][0]))
    555560        if 'Lam1' in Inst:              #Ka1 & Ka2
    556             prm.write(('INS  1 ICONS%10.7f%10.7f    0.0000               0.990    0     0.500   '+'\n')%(Inst['Lam1'],Inst['Lam2']))
     561            prm.write(('INS  1 ICONS%10.7f%10.7f    0.0000               0.990    0     0.500   '+'\n')%(Inst['Lam1'],Inst['Lam2'][0]))
    557562        elif 'Lam' in Inst:             #single wavelength
    558             prm.write(('INS  1 ICONS%10.7f%10.7f    0.0000               0.990    0     0.500   '+'\n')%(Inst['Lam'],0.0))
     563            prm.write(('INS  1 ICONS%10.7f%10.7f    0.0000               0.990    0     0.500   '+'\n')%(Inst['Lam'][0],0.0))
    559564        prm.write( 'INS  1 IRAD     0                                                               '+'\n')
    560565        prm.write( 'INS  1I HEAD                                                                    '+'\n')
    561566        prm.write( 'INS  1I ITYP    0    0.0000  180.0000         1                                 '+'\n')
    562         prm.write(('INS  1DETAZM%10.3f                                                          '+'\n')%(Inst['Azimuth']))
     567        prm.write(('INS  1DETAZM%10.3f                                                          '+'\n')%(Inst['Azimuth'][0]))
    563568        prm.write( 'INS  1PRCF1     3    8   0.00100                                                '+'\n')
    564         prm.write(('INS  1PRCF11     %15.6g%15.6g%15.6g%15.6g   '+'\n')%(Inst['U'],Inst['V'],Inst['W'],0.0))
    565         prm.write(('INS  1PRCF12     %15.6g%15.6g%15.6g%15.6g   '+'\n')%(Inst['X'],Inst['Y'],Inst['SH/L']/2.,Inst['SH/L']/2.))
     569        prm.write(('INS  1PRCF11     %15.6g%15.6g%15.6g%15.6g   '+'\n')%(Inst['U'][0],Inst['V'][0],Inst['W'][0],0.0))
     570        prm.write(('INS  1PRCF12     %15.6g%15.6g%15.6g%15.6g   '+'\n')%(Inst['X'][0],Inst['Y'][0],Inst['SH/L'][0]/2.,Inst['SH/L'][0]/2.))
    566571        prm.close()
    567572        file = open(filename,'w')
     
    13091314        'INS   HTYPE ':'PNC',
    13101315        'INS  1 ICONS':'   1.54020   0.00000   0.04000         0',
    1311         'INS  1PRCF1 ':'    3    8      0.01                                                ',
    13121316        'INS  1PRCF1 ':'    3    8     0.005',
    13131317        'INS  1PRCF11':'   0.239700E+03  -0.298200E+03   0.180800E+03   0.000000E+00',
    13141318        'INS  1PRCF12':'   0.000000E+00   0.000000E+00   0.400000E-01   0.300000E-01',
     1319        })
     1320    defaultIparm_lbl.append('10m TOF backscattering bank')
     1321    defaultIparms.append({
     1322        'INS  1 ICONS':'   5000.00      0.00      0.00',
     1323        'INS  1BNKPAR':'    1.0000   150.000',       
     1324        'INS  1PRCF1 ':'    1    8   0.01000',
     1325        'INS  1PRCF11':'   0.000000E+00   5.000000E+00   3.000000E-02   1.000000E-03',
     1326        'INS  1PRCF12':'   0.000000E+00   4.000000E+01   0.000000E+00   0.000000E+00',       
     1327        })
     1328    defaultIparm_lbl.append('10m TOF 90deg bank')
     1329    defaultIparms.append({
     1330        'INS  1 ICONS':'   3500.00      0.00      0.00',
     1331        'INS  1BNKPAR':'    1.0000    90.000',       
     1332        'INS  1PRCF1 ':'    1    8   0.01000',
     1333        'INS  1PRCF11':'   0.000000E+00   5.000000E+00   3.000000E-02   4.000000E-03',
     1334        'INS  1PRCF12':'   0.000000E+00   8.000000E+01   0.000000E+00   0.000000E+00',       
    13151335        })
    13161336    def __init__(self,
  • trunk/GSASIIgrid.py

    r791 r792  
    513513        self.InstEdit.Append(id=wxID_INSTFLAGCOPY, kind=wx.ITEM_NORMAL,text='Copy flags',
    514514            help='Copy instrument parameter refinement flags to other histograms')
    515         self.InstEdit.Append(help='Change radiation type (Ka12 - synch)',
    516             id=wxID_CHANGEWAVETYPE, kind=wx.ITEM_NORMAL,text='Change radiation')
     515#        self.InstEdit.Append(help='Change radiation type (Ka12 - synch)',
     516#            id=wxID_CHANGEWAVETYPE, kind=wx.ITEM_NORMAL,text='Change radiation')
    517517        self.PostfillDataMenu()
    518518       
  • trunk/GSASIIindex.py

    r783 r792  
    491491    return A
    492492
    493 def DoIndexPeaks(peaks,inst,controls,bravais):
     493def DoIndexPeaks(peaks,wave,controls,bravais):
    494494   
    495495    delt = 0.005                                     #lowest d-spacing cushion - can be fixed?
     
    505505    Nm  = [1,1,1,   1,1,  1,1,     1,1,1,1,   2,2,   4]
    506506    Nobs = len(peaks)
    507     wave = inst[1]
    508507    zero,ncno = controls[1:3]
    509508    ncMax = Nobs*ncno
  • trunk/GSASIIplot.py

    r777 r792  
    322322    '''
    323323    global HKL
     324
     325    def getWave(Parms):
     326        try:
     327            return Parms['Lam'][1]
     328        except KeyError:
     329            return Parms['Lam1'][1]
    324330   
    325331    def OnKeyBox(event):
     
    338344                G2frame.SinglePlot = True
    339345            newPlot = True
     346        elif event.key == 'b':
     347            if G2frame.SubBack:
     348                G2frame.SubBack = False
     349            else:
     350                G2frame.SubBack = True
     351                G2frame.SinglePlot = True               
    340352        elif event.key == 'n':
    341353            if G2frame.Contour:
     
    422434            Page.canvas.SetCursor(wx.CROSS_CURSOR)
    423435            try:
    424                 Values,Names = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))[1::2]
    425                 Parms = dict(zip(Names,Values))
    426                 try:
    427                     wave = Parms['Lam']
    428                 except KeyError:
    429                     wave = Parms['Lam1']
    430                 if G2frame.qPlot:
    431                     try:
    432                         xpos = 2.0*asind(xpos*wave/(4*math.pi))
    433                     except ValueError:      #avoid bad value in asin beyond upper limit
    434                         pass
    435                 dsp = 0.0
    436                 if abs(xpos) > 0.:                  #avoid possible singularity at beam center
    437                     dsp = wave/(2.*sind(abs(xpos)/2.0))
    438                 if G2frame.Contour:
    439                     G2frame.G2plotNB.status.SetStatusText('2-theta =%9.3f d =%9.5f pattern ID =%5d'%(xpos,dsp,int(ypos)),1)
    440                 else:
    441                     G2frame.G2plotNB.status.SetStatusText('2-theta =%9.3f d =%9.5f Intensity =%9.1f'%(xpos,dsp,ypos),1)
     436                Parms = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))
     437                if 'C' in Parms['Type'][0]:
     438                    wave = getWave(Parms)
     439                    if G2frame.qPlot:
     440                        try:
     441                            xpos = 2.0*asind(xpos*wave/(4*math.pi))
     442                        except ValueError:      #avoid bad value in asin beyond upper limit
     443                            pass
     444                    dsp = 0.0
     445                    if abs(xpos) > 0.:                  #avoid possible singularity at beam center
     446                        dsp = wave/(2.*sind(abs(xpos)/2.0))
     447                    if G2frame.Contour:
     448                        G2frame.G2plotNB.status.SetStatusText('2-theta =%9.3f d =%9.5f pattern ID =%5d'%(xpos,dsp,int(ypos)),1)
     449                    else:
     450                        G2frame.G2plotNB.status.SetStatusText('2-theta =%9.3f d =%9.5f Intensity =%9.1f'%(xpos,dsp,ypos),1)
     451                else:       #TOF neutrons
     452                    dsp = 0.0
     453                    difC = Parms['difC'][1]
     454                    dsp = xpos/difC             #rough approx.!
     455                    if G2frame.Contour:
     456                        G2frame.G2plotNB.status.SetStatusText('TOF =%9.3f d =%9.5f pattern ID =%5d'%(xpos,dsp,int(ypos)),1)
     457                    else:
     458                        G2frame.G2plotNB.status.SetStatusText('TOF =%9.3f d =%9.5f Intensity =%9.1f'%(xpos,dsp,ypos),1)
    442459                if G2frame.itemPicked:
    443460                    Page.canvas.SetToolTipString('%9.3f'%(xpos))
     
    463480        PatternId = G2frame.PatternId
    464481        try:
    465             Values,Names = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))[1::2]
     482            Parms = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))
    466483        except TypeError:
    467484            return
    468         Parms = dict(zip(Names,Values))
    469         try:
    470             wave = Parms['Lam']
    471         except KeyError:
    472             wave = Parms['Lam1']
     485        if 'C' in Parms['Type'][0]:
     486            wave = getWave(Parms)
     487        else:
     488            difC = Parms['difC'][1]
    473489        PickId = G2frame.PickId
    474490        pick = event.artist
     
    480496        if G2frame.PatternTree.GetItemText(PickId) == 'Peak List':
    481497            if ind.all() != [0]:                                    #picked a data point
    482                 if 'C' in Parms['Type']:                            #CW data - TOF later in an elif
    483                     ins = [Parms[x] for x in ['U','V','W','X','Y']]
     498                data = G2frame.PatternTree.GetItemPyData(G2frame.PickId)
     499                if 'C' in Parms['Type'][0]:                            #CW data - TOF later in an elif
     500                    ins = [Parms[x][1] for x in ['U','V','W','X','Y']]
    484501                    if G2frame.qPlot:                              #qplot - convert back to 2-theta
    485502                        xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi))
    486503                    sig = ins[0]*tand(xy[0]/2.0)**2+ins[1]*tand(xy[0]/2.0)+ins[2]
    487504                    gam = ins[3]/cosd(xy[0]/2.0)+ins[4]*tand(xy[0]/2.0)           
    488                     data = G2frame.PatternTree.GetItemPyData(G2frame.PickId)
    489505                    XY = [xy[0],0, xy[1],1, sig,0, gam,0]       #default refine intensity 1st
     506                else:
     507                    XY = [xy[0],0,xy[1],1,1,0,1,0]
    490508                data.append(XY)
    491509                G2pdG.UpdatePeakGrid(G2frame,data)
     
    497515                LimitId = G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Limits')
    498516                data = G2frame.PatternTree.GetItemPyData(LimitId)
    499                 if 'C' in Parms['Type']:                            #CW data - TOF later in an elif
     517                if 'C' in Parms['Type'][0]:                            #CW data - TOF later in an elif
    500518                    if G2frame.qPlot:                              #qplot - convert back to 2-theta
    501519                        xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi))
     
    516534    def OnRelease(event):
    517535        if G2frame.itemPicked is None: return
    518         Values,Names = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))[1::2]
    519         Parms = dict(zip(Names,Values))
    520         try:
    521             wave = Parms['Lam']
    522         except KeyError:
    523             wave = Parms['Lam1']
     536        Parms = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))
     537        if 'C' in Parms['Type'][0]:
     538            wave = getWave(Parms)
     539        else:
     540            difC = Parms['difC'][1]
    524541        xpos = event.xdata
    525542        PickId = G2frame.PickId
     
    534551                data = G2frame.PatternTree.GetItemPyData(LimitId)
    535552                if G2frame.qPlot:
    536                     data[1][lineNo] = 2.0*asind(wave*xpos/(4*math.pi))
     553                    if 'C' in Parms['Type'][0]:
     554                        data[1][lineNo] = 2.0*asind(wave*xpos/(4*math.pi))
     555                    else:
     556                        data[1][lineNo] = 2*math.pi*Parms['difC'][1]/xpos
    537557                else:
    538558                    data[1][lineNo] = xpos
     
    596616        else:
    597617            Choice = (' key press','l: offset left','r: offset right','d: offset down',
    598                 'u: offset up','o: reset offset','n: log(I) on','c: contour on',
     618                'u: offset up','o: reset offset','b: toggle subtr. backgnd','n: log(I) on','c: contour on',
    599619                'q: toggle q plot','s: toggle single plot','w: toggle divide by sig','+: no selection')
    600620    cb = wx.ComboBox(G2frame.G2plotNB.status,style=wx.CB_DROPDOWN|wx.CB_READONLY,
     
    611631        Pattern.append(G2frame.PatternTree.GetItemText(PatternId))
    612632        PlotList = [Pattern,]
    613         ParmList = [G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,
    614             G2frame.PatternId, 'Instrument Parameters'))[1],]
     633        Parms = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,
     634            G2frame.PatternId, 'Instrument Parameters'))
     635        ParmList = [Parms,]
    615636    else:       
    616637        PlotList = []
     
    624645                PlotList.append(Pattern)
    625646                ParmList.append(G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,
    626                     item,'Instrument Parameters'))[1])
     647                    item,'Instrument Parameters')))
    627648            item, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie)               
    628649    Ymax = 1.0
     
    648669    if G2frame.qPlot:
    649670        Plot.set_xlabel(r'$q, \AA^{-1}$',fontsize=14)
    650     else:       
    651         Plot.set_xlabel(r'$\mathsf{2\theta}$',fontsize=14)
     671    else:
     672        if 'C' in ParmList[0]['Type'][0]:       
     673            Plot.set_xlabel(r'$\mathsf{2\theta}$',fontsize=14)
     674        else:
     675            Plot.set_xlabel(r'TOF, $\mathsf{\mu}$s',fontsize=14)           
    652676    if G2frame.Weight:
    653677        Plot.set_ylabel(r'$\mathsf{I/\sigma(I)}$',fontsize=14)
    654678    else:
    655         Plot.set_ylabel('Intensity',fontsize=12)
     679        if 'C' in ParmList[0]['Type'][0]:
     680            Plot.set_ylabel('Intensity',fontsize=14)
     681        else:
     682            Plot.set_ylabel('Counts/$\mathsf{\mu}$s',fontsize=14)
    656683    if G2frame.Contour:
    657684        ContourZ = []
     
    662689    for N,Pattern in enumerate(PlotList):
    663690        Parms = ParmList[N]
     691        if 'C' in Parms['Type'][0]:
     692            wave = getWave(Parms)
     693        else:
     694            difC = Parms['difC'][1]
    664695        ifpicked = False
    665696        LimitId = 0
     
    670701        if G2frame.qPlot:
    671702            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root, Pattern[2])
    672             X = 4*np.pi*npsind(xye[0]/2.0)/Parms[1]
     703            if 'C' in Parms['Type'][0]:
     704                X = 4*np.pi*npsind(xye[0]/2.0)/wave
     705            else:
     706                X = 2*np.pi*Parms['difC'][1]/xye[0]
    673707        else:
    674708            X = xye[0]
     
    679713            limits = np.array(G2frame.PatternTree.GetItemPyData(LimitId))
    680714            if G2frame.qPlot:
    681                 limits = 4*np.pi*npsind(limits/2.0)/Parms[1]
     715                if 'C' in Parms['Type'][0]:
     716                    limits = 4*np.pi*npsind(limits/2.0)/wave
     717                else:
     718                    limits = 2*np.pi*difC/limits
    682719            Lines.append(Plot.axvline(limits[1][0],color='g',dashes=(5,5),picker=3.))   
    683720            Lines.append(Plot.axvline(limits[1][1],color='r',dashes=(5,5),picker=3.))                   
     
    710747                    Plot.axhline(0.,color=wx.BLACK)
    711748                else:
    712                     Plot.plot(X,Y,colors[N%6]+'+',picker=3.,clip_on=False)
    713                     Plot.plot(X,Z,colors[(N+1)%6],picker=False)
     749                    if G2frame.SubBack:
     750                        Plot.plot(X,Y-W,colors[N%6]+'+',picker=3.,clip_on=False)
     751                        Plot.plot(X,Z-W,colors[(N+1)%6],picker=False)
     752                    else:
     753                        Plot.plot(X,Y,colors[N%6]+'+',picker=3.,clip_on=False)
     754                        Plot.plot(X,Z,colors[(N+1)%6],picker=False)
    714755                    Plot.plot(X,W,colors[(N+2)%6],picker=False)
    715756                    Plot.plot(X,D,colors[(N+3)%6],picker=False)
     
    722763                    for item in data:
    723764                        if G2frame.qPlot:
    724                             Lines.append(Plot.axvline(4*math.pi*sind(item[0]/2.)/Parms[1],color=colors[N%6],picker=2.))
     765                            if 'C' in Parms['Type'][0]:
     766                                Lines.append(Plot.axvline(4*math.pi*sind(item[0]/2.)/wave,color=colors[N%6],picker=2.))
     767                            else:
     768                                Lines.append(Plot.axvline(2*math.pi*difC/item[0],color=colors[N%6],picker=2.))                               
    725769                        else:
    726770                            Lines.append(Plot.axvline(item[0],color=colors[N%6],picker=2.))
     
    735779                    Plot.plot(X,Y,colors[N%6],picker=False)
    736780    if PickId and not G2frame.Contour:
    737         Values,Names = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters'))[1::2]
    738         Parms = dict(zip(Names,Values))
    739         try:
    740             wave = Parms['Lam']
    741         except KeyError:
    742             wave = Parms['Lam1']
     781        Parms = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters'))
     782        if 'C' in Parms['Type'][0]:
     783            wave = getWave(Parms)
     784        else:
     785            difC = Parms['difC'][1]
    743786        if G2frame.PatternTree.GetItemText(PickId) in ['Index Peak List','Unit Cells List']:
    744787            peaks = np.array((G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Index Peak List'))))
     
    11871230    else:
    11881231        return
    1189     instParms = G2frame.PatternTree.GetItemPyData( \
     1232    Parms = G2frame.PatternTree.GetItemPyData( \
    11901233        G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters'))
    1191     if instParms[0][0] in ['PXC','PNC']:
    1192         lam = instParms[1][1]
    1193         if len(instParms[1]) == 13:
    1194             GU,GV,GW,LX,LY = instParms[0][6:11]
    1195         else:
    1196             GU,GV,GW,LX,LY = instParms[0][4:9]
     1234    if 'C' in Parms['Type'][0]:
     1235        try:           
     1236            lam = Parms['Lam'][1]
     1237        except KeyError:
     1238            lam = Parms['Lam1'][1]
     1239        GU = Parms['U'][0]
     1240        GV = Parms['V'][0]
     1241        GW = Parms['W'][0]
     1242        LX = Parms['X'][0]
     1243        LY = Parms['Y'][0]
     1244    else:
     1245        difC = Parms['difC'][0]
     1246        alp = Parms['alpha'][0]
     1247        bet0 = Parms['beta-0'][0]
     1248        bet1 = Parms['beta-1'][0]
     1249        sig = Parms['var-inst'][0]
     1250        LX = Parms['X'][0]
     1251        LY = Parms['Y'][0]
    11971252    peakID = G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Peak List')
    11981253    if peakID:
     
    12311286    gamFW = lambda s,g: math.exp(math.log(s**5+2.69269*s**4*g+2.42843*s**3*g**2+4.47163*s**2*g**3+0.07842*s*g**4+g**5)/5.)
    12321287#    gamFW2 = lambda s,g: math.sqrt(s**2+(0.4654996*g)**2)+.5345004*g  #Ubaldo Bafile - private communication
    1233     try:
    1234         for theta in thetas:
    1235             X.append(4.0*math.pi*sind(theta)/lam)              #q
    1236             s = sig(theta,GU,GV,GW)
    1237             g = gam(theta,LX,LY)
    1238             G = gamFW(g,s)
    1239             Y.append(s/tand(theta))
    1240             Z.append(g/tand(theta))
    1241             W.append(G/tand(theta))
    1242         Plot.set_title('Instrument and sample peak widths')
    1243         Plot.set_ylabel(r'$\Delta q/q, \Delta d/d$',fontsize=14)
    1244         Plot.set_xlabel(r'$q, \AA^{-1}$',fontsize=14)
    1245         Plot.plot(X,Y,color='r',label='Gaussian')
    1246         Plot.plot(X,Z,color='g',label='Lorentzian')
    1247         Plot.plot(X,W,color='b',label='G+L')
    1248         X = []
    1249         Y = []
    1250         Z = []
    1251         W = []
    1252         V = []
    1253         for peak in peaks:
    1254             X.append(4.0*math.pi*sind(peak[0]/2.0)/lam)
    1255             try:
    1256                 s = 1.17741*math.sqrt(peak[4])*math.pi/18000.
    1257             except ValueError:
    1258                 s = 0.01
    1259             g = peak[6]*math.pi/18000.
    1260             G = gamFW(g,s)
    1261             Y.append(s/tand(peak[0]/2.))
    1262             Z.append(g/tand(peak[0]/2.))
    1263             W.append(G/tand(peak[0]/2.))
    1264         Plot.plot(X,Y,'+',color='r',label='G peak')
    1265         Plot.plot(X,Z,'+',color='g',label='L peak')
    1266         Plot.plot(X,W,'+',color='b',label='G+L peak')
    1267         Plot.legend(loc='best')
    1268         Page.canvas.draw()
    1269     except ValueError:
    1270         print '**** ERROR - default U,V,W profile coefficients yield sqrt of negative value at 2theta =', \
    1271             '%.3f'%(2*theta)
    1272         G2frame.G2plotNB.Delete('Peak Widths')
     1288    Plot.set_title('Instrument and sample peak widths')
     1289    Plot.set_ylabel(r'$\Delta q/q, \Delta d/d$',fontsize=14)
     1290    Plot.set_xlabel(r'$q, \AA^{-1}$',fontsize=14)
     1291    if 'C' in Parms['Type'][0]:
     1292        try:
     1293            for theta in thetas:
     1294                X.append(4.0*math.pi*sind(theta)/lam)              #q
     1295                s = sig(theta,GU,GV,GW)
     1296                g = gam(theta,LX,LY)
     1297                G = gamFW(g,s)
     1298                Y.append(s/tand(theta))
     1299                Z.append(g/tand(theta))
     1300                W.append(G/tand(theta))
     1301            Plot.plot(X,Y,color='r',label='Gaussian')
     1302            Plot.plot(X,Z,color='g',label='Lorentzian')
     1303            Plot.plot(X,W,color='b',label='G+L')
     1304            X = []
     1305            Y = []
     1306            Z = []
     1307            W = []
     1308            V = []
     1309            for peak in peaks:
     1310                X.append(4.0*math.pi*sind(peak[0]/2.0)/lam)
     1311                try:
     1312                    s = 1.17741*math.sqrt(peak[4])*math.pi/18000.
     1313                except ValueError:
     1314                    s = 0.01
     1315                g = peak[6]*math.pi/18000.
     1316                G = gamFW(g,s)
     1317                Y.append(s/tand(peak[0]/2.))
     1318                Z.append(g/tand(peak[0]/2.))
     1319                W.append(G/tand(peak[0]/2.))
     1320            Plot.plot(X,Y,'+',color='r',label='G peak')
     1321            Plot.plot(X,Z,'+',color='g',label='L peak')
     1322            Plot.plot(X,W,'+',color='b',label='G+L peak')
     1323            Plot.legend(loc='best')
     1324            Page.canvas.draw()
     1325        except ValueError:
     1326            print '**** ERROR - default U,V,W profile coefficients yield sqrt of negative value at 2theta =', \
     1327                '%.3f'%(2*theta)
     1328            G2frame.G2plotNB.Delete('Peak Widths')
     1329    else:
     1330        pass    #for TOF peak parms
    12731331
    12741332   
  • trunk/GSASIIpwdGUI.py

    r785 r792  
    153153            G2frame.ErrorDialog('No peaks!','Nothing to do!')
    154154            return
    155         inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters'))
    156         Inst = dict(zip(inst[3],inst[1]))
    157         print len(Inst['Type'])
     155        Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters'))
    158156        for peak in peaks:
    159             if Inst['Type'] in ['PXC','PNC']:
    160                 peak[4] = Inst['U']*tand(peak[0]/2.0)**2+Inst['V']*tand(peak[0]/2.0)+Inst['W']
    161                 peak[6] = Inst['X']/cosd(peak[0]/2.0)+Inst['Y']*tand(peak[0]/2.0)
     157            if 'C' in Inst['Type'][0]:
     158                peak[4] = Inst['U'][1]*tand(peak[0]/2.0)**2+Inst['V'][1]*tand(peak[0]/2.0)+Inst['W'][1]
     159                peak[6] = Inst['X'][1]/cosd(peak[0]/2.0)+Inst['Y'][1]*tand(peak[0]/2.0)
     160            else:
     161                pass
    162162        UpdatePeakGrid(G2frame,peaks)
    163163               
     
    606606       
    607607def UpdateInstrumentGrid(G2frame,data):
    608     if len(data) > 3:                   #powder data
    609         insVal = dict(zip(data[3],data[1]))
    610         insDef = dict(zip(data[3],data[0]))
    611         insRef = dict(zip(data[3],data[2]))
    612         if 'N' in insDef['Type']:
     608    keys = data.keys()
     609    if 'P' in data['Type'][0]:          #powder data
     610        insVal = dict(zip(keys,[data[key][1] for key in keys]))
     611        insDef = dict(zip(keys,[data[key][0] for key in keys]))
     612        insRef = dict(zip(keys,[data[key][2] for key in keys]))
     613        if 'NC' in data['Type'][0]:
    613614            del(insDef['Polariz.'])
    614615            del(insVal['Polariz.'])
    615616            del(insRef['Polariz.'])
    616617    else:                               #single crystal data
    617         insVal = dict(zip(data[2],data[1]))
    618         insDef = dict(zip(data[2],data[0]))
     618        insVal = dict(zip(keys,[data[key][1] for key in keys]))
     619        insDef = dict(zip(keys,[data[key][0] for key in keys]))
    619620        insRef = {}
    620621    ValObj = {}
     
    625626       
    626627    def inst2data(inst,ref,data):
    627         if len(data) > 3:
    628             for i,item in enumerate(data[3]):
    629                 try:
    630                     data[1][i] = inst[item]
    631                     data[2][i] = ref[item]
    632                 except KeyError:
    633                     data[1][i] = 0
    634                     data[2][i] = 0                   
    635         else:
    636             for i,item in enumerate(data[2]):
    637                 data[1][i] = inst[item]           
     628        for item in data:
     629            data[item] = [data[item][0],inst[item],ref[item]]
    638630        return data
    639631       
     
    645637        if doAnyway or event.GetRow() == 1:
    646638            peaks = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Peak List'))
    647             if 'P' in insVal['Type']:                                       #update powder peak parameters
     639            if 'C' in data['Type'][0]:                                       #update powder peak parameters
    648640                for peak in peaks:
    649641                    peak[4] = insVal['U']*tand(peak[0]/2.0)**2+insVal['V']*tand(peak[0]/2.0)+insVal['W']
    650642                    peak[6] = insVal['X']/cosd(peak[0]/2.0)+insVal['Y']*tand(peak[0]/2.0)
     643            else:
     644                pass
     645#                for peak in peaks:
     646                   
    651647                   
    652648    def OnLoad(event):
     
    677673                    S = File.readline()               
    678674                File.close()
    679                 data = [tuple(newVals),newVals,len(newVals)*[False,],newItems]
     675                data = dict(zip(newItems,zip(newVals,newVals,len(newVals)*[False,])))
    680676                G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId,'Instrument Parameters'),data)
    681677                RefreshInstrumentGrid(event,doAnyway=True)          #to get peaks updated
     
    696692                filename = os.path.splitext(filename)[0]+'.instprm'
    697693                File = open(filename,'w')
    698                 File.write("#GSAS-II instrument parameter file; do not add/delete or change order of items!\n") 
    699                 for i,item in enumerate(data[3]):
    700                     File.write(item+':'+str(data[1][i])+'\n')
     694                File.write("#GSAS-II instrument parameter file; do not add/delete or change order of items!\n")
     695                for item in data:
     696                    File.write(item+':'+str(data[item][1])+'\n')
    701697                File.close()
    702698        finally:
     
    711707    def OnInstFlagCopy(event):
    712708        histName = G2frame.PatternTree.GetItemText(G2frame.PatternId)
    713         flags = data[2]
    714         instType = data[0][0]
     709        keys = data.keys()
     710        flags = dict(zip(keys,[data[key][2] for key in keys]))
     711        instType = data['Type'][0]
    715712        histList = ['All',]+G2gd.GetPatternTreeDataNames(G2frame,['PWDR',])
    716713        copyList = []
     
    728725                Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
    729726                instData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'))
    730                 if len(data) == len(instData) and instType == instData[0][0]:   #don't mix data types or lam & lam1/lam2 parms!
     727                if len(data) == len(instData) and instType == instData['Type'][0]:   #don't mix data types or lam & lam1/lam2 parms!
     728                   
    731729                    instData[2] = copy.copy(flags)
    732730                else:
     
    736734       
    737735    def OnInstCopy(event):
     736        #need fix for dictionary
    738737        histName = G2frame.PatternTree.GetItemText(G2frame.PatternId)
    739738        histList = ['All',]+G2gd.GetPatternTreeDataNames(G2frame,['PWDR',])
    740739        copyList = []
    741         instType = data[0][0]
     740        instType = data['Type'][0]
    742741        dlg = wx.MultiChoiceDialog(G2frame,
    743742            'Copy parameters from\n'+histName, 'Copy parameters',
     
    753752                Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
    754753                instData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'))
    755                 if len(data) == len(instData) and instType == instData[0][0]:  #don't mix data types or lam & lam1/lam2 parms!
     754                if len(data) == len(instData) and instType == instData['Type'][0]:  #don't mix data types or lam & lam1/lam2 parms!
    756755                    for i,item in enumerate(data[1:]):                  #skip default values in tuple
    757756                        instData[i+1][:-1] = copy.copy(item[:-1])       #skip azimuth at end
     
    762761       
    763762    def OnWaveChange(event):
    764         if 'Lam' in insVal:           
    765             data[0] = data[0][:1]+tuple(waves['CuKa'])+(.5,)+data[0][2:]
    766             data[1] = data[1][:1]+waves['CuKa']+[.5,]+data[1][2:]
    767             data[2] = data[2][:1]+[0,0,0,]+data[2][2:]
    768             data[3] = data[3][:1]+['Lam1','Lam2','I(L2)/I(L1)',]+data[3][2:]           
     763        if 'Lam' in insVal:
     764            data['Lam1'] = [waves['CuKa'][0],waves['CuKa'][0],0]
     765            data['Lam2'] = [waves['CuKa'][1],waves['CuKa'][1],0]
     766            data['I(L2)/I(L1)'] = [0.5,0.5,0]
     767            del(data['Lam'])
    769768        else:
    770             data[0] = data[0][:2]+data[0][4:]
    771             data[1] = data[1][:2]+data[1][4:]
    772             data[2] = data[2][:2]+data[2][4:]
    773             data[3] = data[3][:1]+['Lam',]+data[3][4:]           
     769            data['Lam'] = [data['Lam1'][0],data['Lam1'][0],0]
     770            del(data['Lam1'])
    774771        UpdateInstrumentGrid(G2frame,data)
    775772               
     
    940937                instSizer.Add(itemRef,0,wx.ALIGN_CENTER_VERTICAL)
    941938        else:                                   #time of flight (neutrons)
    942             pass                                #for now
    943        
    944        
    945 
     939            instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' Azimuth: %7.2f'%(insVal['Azimuth'])),0,wx.ALIGN_CENTER_VERTICAL)
     940            for item in ['difC','difA','Zero','alpha','beta-0','beta-1','var-inst','X','Y']:
     941                fmt = '%10.3f'
     942                if 'beta' in item:
     943                    fmt = '%12.4g'
     944                Fmt = ' %s: ('+fmt+')'
     945                instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,Fmt%(item,insDef[item])),
     946                        0,wx.ALIGN_CENTER_VERTICAL)
     947                itemVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,fmt%(insVal[item]),style=wx.TE_PROCESS_ENTER)
     948                ValObj[itemVal.GetId()] = [item,fmt]
     949                itemVal.Bind(wx.EVT_TEXT_ENTER,OnItemValue)
     950                itemVal.Bind(wx.EVT_KILL_FOCUS,OnItemValue)
     951                instSizer.Add(itemVal,0,wx.ALIGN_CENTER_VERTICAL)
     952                itemRef = wx.CheckBox(G2frame.dataDisplay,wx.ID_ANY,label=' Refine?')
     953                itemRef.SetValue(bool(insRef[item]))
     954                RefObj[itemRef.GetId()] = item
     955                itemRef.Bind(wx.EVT_CHECKBOX, OnItemRef)
     956                instSizer.Add(itemRef,0,wx.ALIGN_CENTER_VERTICAL)
     957       
    946958    else:                       #single crystal data
    947959        if 'C' in insVal['Type']:               #constant wavelength
     
    12491261def UpdateIndexPeaksGrid(G2frame, data):
    12501262    IndexId = G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Index Peak List')
    1251     inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))
    1252     Inst = dict(zip(inst[3],inst[1]))
     1263    Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))
    12531264    try:
    1254         wave = Inst['Lam']
     1265        wave = Inst['Lam'][1]
    12551266    except KeyError:
    1256         wave = Inst['Lam1']
     1267        wave = Inst['Lam1'][0]
    12571268   
    12581269    def RefreshIndexPeaksGrid(event):
     
    12721283        peaks = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Peak List'))
    12731284        for peak in peaks:
    1274             dsp = wave/(2.0*sind((peak[0]-Inst['Zero'])/2.0))
     1285            dsp = wave/(2.0*sind((peak[0]-Inst['Zero'][1])/2.0))
    12751286            data.append([peak[0],peak[2],True,False,0,0,0,dsp,0.0])
    12761287        G2frame.PatternTree.SetItemPyData(IndexId,data)
     
    13201331                    G2indx.IndexPeaks(data,G2frame.HKL)
    13211332                    for hkl in G2frame.HKL:
    1322                         hkl.append(2.0*asind(wave/(2.*hkl[3]))+Inst['Zero'])             
     1333                        hkl.append(2.0*asind(wave/(2.*hkl[3]))+Inst['Zero'][1])             
    13231334    rowLabels = []
    13241335    for i in range(len(data)): rowLabels.append(str(i+1))
     
    13551366    spaceGroups = ['F m 3 m','I m 3 m','P m 3 m','R 3 m','P 6/m m m','I 4/m m m',
    13561367        'P 4/m m m','F m m m','I m m m','C m m m','P m m m','C 2/m','P 2/m','P -1']
    1357     inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))
    1358     Inst = dict(zip(inst[3],inst[1]))
     1368    Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))
    13591369    if 'Lam' in Inst:
    1360         wave = Inst['Lam']
     1370        wave = Inst['Lam'][1]
    13611371    else:
    1362         wave = Inst['Lam1']
     1372        wave = Inst['Lam1'][0]
    13631373       
    13641374    def SetLattice(controls):
     
    14761486        G2frame.HKL = G2pwd.getHKLpeak(dmin,SGData,A)
    14771487        for hkl in G2frame.HKL:
    1478             hkl.append(2.0*asind(wave/(2.*hkl[3]))+controls[1]+Inst['Zero'])             
     1488            hkl.append(2.0*asind(wave/(2.*hkl[3]))+controls[1]+Inst['Zero'][1])             
    14791489        if 'PKS' in G2frame.PatternTree.GetItemText(G2frame.PatternId):
    14801490            G2plt.PlotPowderLines(G2frame)
     
    15571567        cellPrint(ibrav,Aref)
    15581568        for hkl in G2frame.HKL:
    1559             hkl.append(2.0*asind(wave/(2.*hkl[3]))+controls[1]+Inst['Zero'])             
     1569            hkl.append(2.0*asind(wave/(2.*hkl[3]))+controls[1]+Inst['Zero'][1])             
    15601570        if 'PKS' in G2frame.PatternTree.GetItemText(G2frame.PatternId):
    15611571            G2plt.PlotPowderLines(G2frame)
     
    15831593        G2frame.dataFrame.CopyCell.Enable(False)
    15841594        G2frame.dataFrame.RefineCell.Enable(False)
    1585         OK,dmin,newcells = G2indx.DoIndexPeaks(peaks,inst[1],controls,bravais)
     1595        OK,dmin,newcells = G2indx.DoIndexPeaks(peaks,wave,controls,bravais)
    15861596        cells = keepcells+newcells
    15871597        cells = G2indx.sortM20(cells)
     
    15941604                G2frame.HKL = G2lat.GenHBravais(dmin,bestCell[2],G2lat.cell2A(bestCell[3:9]))
    15951605                for hkl in G2frame.HKL:
    1596                     hkl.append(2.0*asind(wave/(2.*hkl[3]))+controls[1]+Inst['Zero'])             
     1606                    hkl.append(2.0*asind(wave/(2.*hkl[3]))+controls[1]+Inst['Zero'][1])             
    15971607                if 'PKS' in G2frame.PatternTree.GetItemText(G2frame.PatternId):
    15981608                    G2plt.PlotPowderLines(G2frame)
     
    16201630                G2frame.HKL = G2lat.GenHBravais(dmin,ibrav,A)
    16211631                for hkl in G2frame.HKL:
    1622                     hkl.append(2.0*asind(wave/(2.*hkl[3]))+controls[1]+Inst['Zero'])             
     1632                    hkl.append(2.0*asind(wave/(2.*hkl[3]))+controls[1]+Inst['Zero'][1])             
    16231633                if 'PKS' in G2frame.PatternTree.GetItemText(G2frame.PatternId):
    16241634                    G2plt.PlotPowderLines(G2frame)
     
    18181828                G2frame.HKL = G2lat.GenHBravais(dmin,cell[2],A)
    18191829                for hkl in G2frame.HKL:
    1820                     hkl.append(2.0*asind(wave/(2.*hkl[3]))+controls[1]+Inst['Zero'])             
     1830                    hkl.append(2.0*asind(wave/(2.*hkl[3]))+controls[1]+Inst['Zero'][1])             
    18211831            table.append(row)
    18221832        UnitCellsTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     
    19161926    fullLimits,limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,powId, 'Limits'))
    19171927    inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,powId, 'Instrument Parameters'))
    1918     inst = dict(zip(inst[3],inst[1]))
    19191928    if 'Lam' in inst:
    1920         keV = 12.397639/inst['Lam']
     1929        keV = 12.397639/inst['Lam'][1]
    19211930    else:
    1922         keV = 12.397639/inst['Lam1']
     1931        keV = 12.397639/inst['Lam1'][0]
    19231932    wave = 12.397639/keV
    19241933    qLimits = [tth2q(fullLimits[0],wave),tth2q(fullLimits[1],wave)]
     
    19281937    else:                                #initial setting at 90% of max Q
    19291938        data['QScaleLim'][0] = 0.90*data['QScaleLim'][1]
    1930     polariz = inst['Polariz.']
    1931     azimuth = inst['Azimuth']
     1939    polariz = inst['Polariz.'][1]
     1940    azimuth = inst['Azimuth'][1]
    19321941    itemDict = {}
    19331942   
     
    20542063                raise ValueError
    20552064        except ValueError:
    2056             value = inst['Polariz.']
    2057         inst['Polariz.'] = value
    2058         polaVal.SetValue('%.2f'%(inst['Polariz.']))
     2065            value = inst['Polariz.'][1]
     2066        inst['Polariz.'][1] = value
     2067        polaVal.SetValue('%.2f'%(inst['Polariz.'][1]))
    20592068        UpdatePDFGrid(G2frame,data)
    20602069        auxPlot = ComputePDF(data)
     
    20672076                raise ValueError
    20682077        except ValueError:
    2069             value = inst['Azimuth']
    2070         inst['Azimuth'] = value
    2071         azimVal.SetValue('%.1f'%(inst['Azimuth']))
     2078            value = inst['Azimuth'][1]
     2079        inst['Azimuth'][1] = value
     2080        azimVal.SetValue('%.1f'%(inst['Azimuth'][1]))
    20722081        UpdatePDFGrid(G2frame,data)
    20732082        auxPlot = ComputePDF(data)
     
    22482257        powId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,powName)
    22492258        inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,powId,'Instrument Parameters'))
    2250         inst = dict(zip(inst[3],inst[1]))
    22512259        auxPlot = G2pwd.CalcPDF(Data,inst,xydata)
    22522260        PDFId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'PDF '+powName[4:])
  • trunk/GSASIIstruct.py

    r780 r792  
    11111111                limits = Histogram['Limits'][1]
    11121112                inst = Histogram['Instrument Parameters']
    1113                 inst = dict(zip(inst[3],inst[1]))
    1114                 Zero = inst['Zero']
    1115                 if 'C' in inst['Type']:
     1113                Zero = inst['Zero'][1]
     1114                if 'C' in inst['Type'][1]:
    11161115                    try:
    1117                         wave = inst['Lam']
     1116                        wave = inst['Lam'][1]
    11181117                    except KeyError:
    1119                         wave = inst['Lam1']
     1118                        wave = inst['Lam1'][1]
    11201119                    dmin = wave/(2.0*sind(limits[1]/2.0))
    11211120                pfx = str(pId)+':'+str(hId)+':'
     
    11921191                    if ext:
    11931192                        continue
    1194                     if 'C' in inst['Type']:
     1193                    if 'C' in inst['Type'][0]:
    11951194                        pos = 2.0*asind(wave/(2.0*d))+Zero
    11961195                        if limits[0] < pos < limits[1]:
     
    12021201            elif 'HKLF' in histogram:
    12031202                inst = Histogram['Instrument Parameters']
    1204                 inst = dict(zip(inst[2],inst[1]))
    12051203                hId = Histogram['hId']
    12061204                hfx = ':%d:'%(hId)
    12071205                for item in inst:
    1208                     hapDict[hfx+item] = inst[item]
     1206                    hapDict[hfx+item] = inst[item][1]
    12091207                pfx = str(pId)+':'+str(hId)+':'
    12101208                hapDict[pfx+'Scale'] = hapData['Scale'][0]
     
    15381536        return bakType,backDict,backVary           
    15391537       
    1540     def GetInstParms(hId,Inst):
    1541         insVals,insFlags,insNames = Inst[1:4]
    1542         dataType = insVals[0]
     1538    def GetInstParms(hId,Inst):     
     1539        dataType = Inst['Type'][0]
    15431540        instDict = {}
    15441541        insVary = []
    15451542        pfx = ':'+str(hId)+':'
    1546         for i,flag in enumerate(insFlags):
    1547             insName = pfx+insNames[i]
    1548             instDict[insName] = insVals[i]
    1549             if flag:
     1543        for item in Inst:
     1544            insName = pfx+item
     1545            instDict[insName] = Inst[item][1]
     1546            if Inst[item][2]:
    15501547                insVary.append(insName)
    15511548        instDict[pfx+'X'] = max(instDict[pfx+'X'],0.001)
     
    16121609        ptstr =  ' value :'
    16131610        varstr = ' refine:'
    1614         instNames = Inst[3][1:]
    1615         for i,name in enumerate(instNames):
    1616             ptlbls += '%12s' % (name)
    1617             ptstr += '%12.6f' % (Inst[1][i+1])
    1618             if name in ['Lam1','Lam2','Azimuth']:
    1619                 varstr += 12*' '
    1620             else:
    1621                 varstr += '%12s' % (str(bool(Inst[2][i+1])))
     1611        for item in Inst:
     1612            if item != 'Type':
     1613                ptlbls += '%12s' % (item)
     1614                ptstr += '%12.6f' % (Inst[item][1])
     1615                if item in ['Lam1','Lam2','Azimuth']:
     1616                    varstr += 12*' '
     1617                else:
     1618                    varstr += '%12s' % (str(bool(Inst[item][2])))
    16221619        print >>pFile,ptlbls
    16231620        print >>pFile,ptstr
     
    16471644        print >>pFile,varstr
    16481645       
    1649 
    16501646    histDict = {}
    16511647    histVary = []
     
    17351731       
    17361732    def SetInstParms(pfx,Inst,parmDict,sigDict):
    1737         insVals,insFlags,insNames = Inst[1:4]
    1738         instSig = [0 for i in range(len(insVals))]
    1739         for i,flag in enumerate(insFlags):
    1740             insName = pfx+insNames[i]
    1741             insVals[i] = parmDict[insName]
     1733        instSig = {}
     1734        for item in Inst:
     1735            insName = pfx+item
     1736            Inst[item][1] = parmDict[insName]
    17421737            if insName in sigDict:
    1743                 instSig[i] = sigDict[insName]
     1738                instSig[item] = sigDict[insName]
     1739            else:
     1740                instSig[item] = 0
    17441741        return instSig
    17451742       
     
    18161813        ptstr =  ' value :'
    18171814        sigstr = ' sig   :'
    1818         instNames = Inst[3][1:]
    18191815        refine = False
    1820         for i,name in enumerate(instNames):
    1821             ptlbls += '%12s' % (name)
    1822             ptstr += '%12.6f' % (Inst[1][i+1])
    1823             if instSig[i+1]:
    1824                 refine = True
    1825                 sigstr += '%12.6f' % (instSig[i+1])
    1826             else:
    1827                 sigstr += 12*' '
     1816        for name in instSig:
     1817            if name not in  ['Type','Lam1','Lam2','Azimuth']:
     1818                ptlbls += '%12s' % (name)
     1819                ptstr += '%12.6f' % (Inst[name][1])
     1820                if instSig[name]:
     1821                    refine = True
     1822                    sigstr += '%12.6f' % (instSig[name])
     1823                else:
     1824                    sigstr += 12*' '
    18281825        if refine:
    18291826            print >>pFile,'\n Instrument Parameters:'
  • trunk/imports/G2pwd_fxye.py

    r762 r792  
    2828        #print 'ContentsValidator: '+self.formatName
    2929        for i,line in enumerate(filepointer):
     30            self.TimeMap = False
    3031            if i==0: # first line is always a comment
    3132                continue
     
    3637            if line[:4] == 'BANK':
    3738                return True
     39            if line [:8] == 'TIME_MAP':          #LANSCE TOF data
     40                self.TimeMap = True
     41                return True
    3842            else:
    3943                print 'ContentsValidator: '+self.formatName
     
    4448
    4549    def Reader(self,filename,filepointer, ParentFrame=None, **kwarg):
     50        clockWd = None
     51       
     52        def GetFXYEdata(File,Pos,Bank):
     53            File.seek(Pos)
     54            x = []
     55            y = []
     56            w = []
     57            S = File.readline()
     58            while S and S[:4] != 'BANK':
     59                vals = S.split()
     60                x.append(float(vals[0])/100.)               #CW: from centidegrees to degrees
     61                f = float(vals[1])
     62                if f <= 0.0:
     63                    y.append(0.0)
     64                    w.append(1.0)
     65                else:
     66                    y.append(float(vals[1]))
     67                    w.append(1.0/float(vals[2])**2)
     68                S = File.readline()
     69            N = len(x)
     70            return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]   
     71           
     72        def GetFXYdata(File,Pos,Bank):
     73            File.seek(Pos)
     74            x = []
     75            y = []
     76            w = []
     77            S = File.readline()
     78            while S and S[:4] != 'BANK':
     79                vals = S.split()
     80                x.append(float(vals[0])/100.)               #CW: from centidegrees to degrees
     81                f = float(vals[1])
     82                if f > 0.0:
     83                    y.append(f)
     84                    w.append(1.0/f)
     85                else:             
     86                    y.append(0.0)
     87                    w.append(1.0)
     88                S = File.readline()
     89            N = len(x)
     90            return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
     91           
     92        def GetESDdata(File,Pos,Bank):
     93            File.seek(Pos)
     94            cons = Bank.split()
     95            if clockWd:
     96                start = 0
     97                step = 1
     98            else:
     99                start = float(cons[5])/100.0               #CW: from centidegrees to degrees
     100                step = float(cons[6])/100.0
     101            x = []
     102            y = []
     103            w = []
     104            S = File.readline()
     105            j = 0
     106            while S and S[:4] != 'BANK':
     107                for i in range(0,80,16):
     108                    xi = start+step*j
     109                    yi = sfloat(S[i:i+8])
     110                    ei = sfloat(S[i+8:i+16])
     111                    x.append(xi)
     112                    if yi > 0.0:
     113                        y.append(yi)
     114                        w.append(1.0/ei**2)
     115                    else:             
     116                        y.append(0.0)
     117                        w.append(1.0)
     118                    j += 1
     119                S = File.readline()
     120            N = len(x)
     121            if clockWd:
     122                x,cw = Tmap2TOF(self.TimeMap,clockWd)
     123                x = x[:-2]+cw[:-1]/2.
     124                return [x,np.array(y)/cw[:-1],np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
     125            else:
     126                return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
     127       
     128        def GetSTDdata(File,Pos,Bank):
     129            File.seek(Pos)
     130            cons = Bank.split()
     131            Nch = int(cons[2])
     132            if clockWd:
     133                start = 0
     134                step = 1
     135            else:
     136                start = float(cons[5])/100.0               #CW: from centidegrees to degrees
     137                step = float(cons[6])/100.0
     138            x = []
     139            y = []
     140            w = []
     141            S = File.readline()
     142            j = 0
     143            while S and S[:4] != 'BANK':
     144                for i in range(0,80,8):
     145                    xi = start+step*j
     146                    ni = max(sint(S[i:i+2]),1)
     147                    yi = max(sfloat(S[i+2:i+8]),0.0)
     148                    if yi:
     149                        vi = yi/ni
     150                    else:
     151                        yi = 0.0
     152                        vi = 1.0
     153                    j += 1
     154                    if j < Nch:
     155                        x.append(xi)
     156                        y.append(yi)
     157                        w.append(1.0/vi)
     158                S = File.readline()
     159            N = len(x)
     160            if clockWd:
     161                x,cw = Tmap2TOF(self.TimeMap,clockWd)
     162                x = x[:-2]+cw[:-1]/2.
     163                return [x,np.array(y)/cw[:-1],np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
     164            else:
     165                return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
     166           
     167        def GetTimeMap(File,Pos,TimeMap):
     168            File.seek(Pos)
     169            cons = TimeMap.split()
     170            Nch = int(cons[1])
     171            Nrec = int(cons[2])
     172            clockWd = float(cons[4])/1000.          #in mus
     173            TMap = np.zeros(Nch+2,dtype=int)
     174            ind = 0
     175            for i in range(Nrec):
     176                S = File.readline().rstrip('\n')
     177                vals = S.split()
     178                for val in vals:
     179                    TMap[ind] = int(val)
     180                    ind += 1
     181            TMap = np.reshape(TMap,(-1,3))
     182            TMax = TMap[-1][0]
     183            Nch = TMap[-2][0]+(TMax-TMap[-2][1]+TMap[-2][2]-1)/TMap[-2][2]
     184            TMap[-1] = [Nch+1,TMax,0]
     185            TMap = TMap.T
     186            TMap[0] -= 1
     187            return TMap.T,clockWd
     188           
     189        def Tmap2TOF(TMap,clockWd):
     190            TOF = []
     191            chWdt = []
     192            Tch,T,Step = TMap[0]
     193            for tmap in TMap[1:]:
     194                tch,t,step = tmap
     195                TOF += [T+Step*(i-Tch) for i in range(Tch,tch)]
     196                Tch,T,Step = tmap
     197            TOF = np.array(TOF)*clockWd
     198            chWdt = np.diff(TOF)
     199            return TOF,chWdt
     200
    46201        x = []
    47202        y = []
     
    83238                        # comments in fact should only preceed BANK lines
    84239                        comments[-1].append(S[:-1])
    85                         continue       #ignore comments, if any
     240                        continue
    86241                    if S[:4] == 'BANK':
    87242                        comments.append([title,])
    88243                        Banks.append(S)
    89244                        Pos.append(filepointer.tell())
     245                    if S[:8] == 'TIME_MAP':
     246                        self.TimeMap,clockWd = GetTimeMap(filepointer,filepointer.tell(),S)
    90247            except Exception as detail:
    91248                print self.formatName+' scan error:'+str(detail) # for testing
     
    166323        return True
    167324       
    168 def GetFXYEdata(File,Pos,Bank):
    169     File.seek(Pos)
    170     x = []
    171     y = []
    172     w = []
    173     S = File.readline()
    174     while S and S[:4] != 'BANK':
    175         vals = S.split()
    176         x.append(float(vals[0])/100.)               #CW: from centidegrees to degrees
    177         f = float(vals[1])
    178         if f <= 0.0:
    179             y.append(0.0)
    180             w.append(1.0)
    181         else:
    182             y.append(float(vals[1]))
    183             w.append(1.0/float(vals[2])**2)
    184         S = File.readline()
    185     N = len(x)
    186     return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]   
    187    
    188 def GetFXYdata(File,Pos,Bank):
    189     File.seek(Pos)
    190     x = []
    191     y = []
    192     w = []
    193     S = File.readline()
    194     while S and S[:4] != 'BANK':
    195         vals = S.split()
    196         x.append(float(vals[0])/100.)               #CW: from centidegrees to degrees
    197         f = float(vals[1])
    198         if f > 0.0:
    199             y.append(f)
    200             w.append(1.0/f)
    201         else:             
    202             y.append(0.0)
    203             w.append(1.0)
    204         S = File.readline()
    205     N = len(x)
    206     return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
    207    
    208 def GetESDdata(File,Pos,Bank):
    209     File.seek(Pos)
    210     cons = Bank.split()
    211     start = float(cons[5])/100.0               #CW: from centidegrees to degrees
    212     step = float(cons[6])/100.0
    213     x = []
    214     y = []
    215     w = []
    216     S = File.readline()
    217     j = 0
    218     while S and S[:4] != 'BANK':
    219         for i in range(0,80,16):
    220             xi = start+step*j
    221             yi = sfloat(S[i:i+8])
    222             ei = sfloat(S[i+8:i+16])
    223             x.append(xi)
    224             if yi > 0.0:
    225                 y.append(yi)
    226                 w.append(1.0/ei**2)
    227             else:             
    228                 y.append(0.0)
    229                 w.append(1.0)
    230             j += 1
    231         S = File.readline()
    232     N = len(x)
    233     return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
    234 
    235 def GetSTDdata(File,Pos,Bank):
    236     File.seek(Pos)
    237     cons = Bank.split()
    238     Nch = int(cons[2])
    239     start = float(cons[5])/100.0               #CW: from centidegrees to degrees
    240     step = float(cons[6])/100.0
    241     x = []
    242     y = []
    243     w = []
    244     S = File.readline()
    245     j = 0
    246     while S and S[:4] != 'BANK':
    247         for i in range(0,80,8):
    248             xi = start+step*j
    249             ni = max(sint(S[i:i+2]),1)
    250             yi = max(sfloat(S[i+2:i+8]),0.0)
    251             if yi:
    252                 vi = yi/ni
    253             else:
    254                 yi = 0.0
    255                 vi = 1.0
    256             j += 1
    257             if j < Nch:
    258                 x.append(xi)
    259                 y.append(yi)
    260                 w.append(1.0/vi)
    261         S = File.readline()
    262     N = len(x)
    263     return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
    264325
    265326def sfloat(S):
Note: See TracChangeset for help on using the changeset viewer.