Changeset 796 for trunk/GSASII.py


Ignore:
Timestamp:
Nov 7, 2012 2:54:48 PM (10 years ago)
Author:
vondreele
Message:

revise instrument parameters (again); now two dictionaries
revise key stroke options on plots

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r795 r796  
    533533        self.Bind(wx.EVT_MENU, self.OnImportPowder, id=item.GetId())
    534534           
    535     def ReadPowderInstprm(self,instfile):
     535    def ReadPowderInstprm(self,instfile):       #fix the write routine for [inst1,inst2] style
    536536        '''Read a GSAS-II (new) instrument parameter file'''
    537537        if os.path.splitext(instfile)[1].lower() != '.instprm': # invalid file
     
    656656                    data.extend([0.0,0.0,0.002,azm])                                      #OK defaults if fxn #3 not 1st in iprm file
    657657                codes.extend([0,0,0,0,0,0,0])
    658                 return G2IO.makeInstDict(names,data,codes)
     658                return [G2IO.makeInstDict(names,data,codes),{}]
    659659            elif 'T' in DataType:
    660660                names = ['Type','2-theta','difC','difA','Zero','alpha','beta-0','beta-1','var-inst','X','Y','Azimuth']
     
    681681                        s = Iparm['INS  1PRCF12'].split()
    682682                        data.extend([G2IO.sfloat(s[0]),0.0,0.0,azm])                       
    683                 Inst = G2IO.makeInstDict(names,data,codes)
     683                Inst1 = G2IO.makeInstDict(names,data,codes)
     684                Inst2 = {}
    684685                if pfType < 0:
    685686                    Ipab = 'INS  1PAB'+str(-pfType)
    686687                    Npab = int(Iparm[Ipab+'  '].strip())
    687                     Inst['Pdabc'] = []
     688                    Inst2['Pdabc'] = []
    688689                    for i in range(Npab):
    689690                        k = Ipab+str(i+1).rjust(2)
    690691                        s = Iparm[k].split()
    691                         Inst['Pdabc'].append([float(t) for t in s])
    692                     Inst['Pdabc'] = np.array(Inst['Pdabc'])
     692                        Inst2['Pdabc'].append([float(t) for t in s])
     693                    Inst2['Pdabc'] = np.array(Inst2['Pdabc'])
     694                    Inst2['Pdabc'][3] += Inst2['Pdabc'][0]*Inst1['difC'][0] #turn 3rd col into TOF
    693695                if 'INS  1I ITYP' in Iparm:
    694                     Ityp = int(Iparm['INS  1I ITYP'].split()[0])
    695                     if Ityp in [1,2,3,4,5]:
    696                         Inst['Itype'] = Ityp
     696                    s = Iparm['INS  1I ITYP'].split()
     697                    Ityp = int(s[0])
     698                    Tminmax = [float(s[1])*1000.,float(s[2])*1000.]
     699                    Itypes = ['Exponential','Maxwell/Exponential','','Maxwell/Chebyschev','']
     700                    if Ityp in [1,2,4]:
     701                        Inst2['Itype'] = Itypes[Ityp-1]
     702                        Inst2['Tminmax'] = Tminmax
    697703                        Icoeff = []
    698704                        Iesd = []
     
    706712                            s = Iparm['INS  1IECOR'+str(i+1)].split()
    707713                            Icovar += [float(S) for S in s]
    708                         Inst['Icoeff'] = Icoeff
    709                         Inst['Iesd'] = Iesd
    710                         Inst['Icovar'] = Icovar
    711                 return Inst
     714                        Inst2['Icoeff'] = Icoeff
     715                        Inst2['Iesd'] = Iesd
     716                        Inst2['Icovar'] = Icovar
     717                return [Inst1,Inst2]
    712718
    713719        # stuff we might need from the reader
     
    737743                    return SetPowderInstParms(Iparm,rd)
    738744            else:
    739                 self.ErrorDialog('Open Error',
    740                                  'Error opening instrument parameter file '
    741                                  +str(instfile)
    742                                  +' requested by file '+ filename)
     745                self.ErrorDialog('Open Error','Error opening instrument parameter file '
     746                    +str(instfile)+' requested by file '+ filename)
    743747        # is there an instrument parameter file matching the current file
    744748        # with extension .inst or .prm? If so read it
     
    851855        for rd in rdlist:
    852856            # get instrument parameters for each dataset
    853             instParmList = self.GetPowderIparm(rd, Iparm, lastIparmfile, lastdatafile)
     857            Iparm1,Iparm2 = self.GetPowderIparm(rd, Iparm, lastIparmfile, lastdatafile)
    854858            lastIparmfile = rd.instfile
    855859            lastdatafile = rd.powderentry[0]
     
    860864            Id = self.PatternTree.AppendItem(parent=self.root,
    861865                text='PWDR '+rd.idstring)
    862             self.PatternTree.SetItemPyData(Id,[{'wtFactor':1.0},rd.powderdata])
    863             self.PatternTree.SetItemPyData(
    864                 self.PatternTree.AppendItem(Id,text='Comments'),
    865                 rd.comments)
    866             if 'T' in instParmList['Type'][0]:
     866            if 'T' in Iparm1['Type'][0]:
    867867                if not rd.clockWd and rd.GSAS:
    868868                    rd.powderdata[0] *= 100.
     
    870870                rd.powderdata[0] = rd.powderdata[0][:-1]+cw/2.
    871871                rd.powderdata[1] = rd.powderdata[1][:-1]/cw
    872                 rd.powderdata[2] = rd.powderdata[2][:-1]
    873                 rd.powderdata[3] = rd.powderdata[3][:-1]
    874                 rd.powderdata[4] = rd.powderdata[4][:-1]
    875                 rd.powderdata[5] = rd.powderdata[5][:-1]
    876                 if 'Itype' in instParmList:
    877                     incident = G2pwd.calcIncident(instParmList,rd.powderdata[0])
     872                rd.powderdata[2] = rd.powderdata[2][:-1]/cw**2
     873                if 'Itype' in Iparm2:
     874                    Ibeg = np.searchsorted(rd.powderdata[0],Iparm2['Tminmax'][0])
     875                    Ifin = np.searchsorted(rd.powderdata[0],Iparm2['Tminmax'][1])
     876                    print Ibeg,Ifin,Iparm2['Tminmax']
     877                    rd.powderdata[0] = rd.powderdata[0][Ibeg:Ifin]
     878                    YI,WYI = G2pwd.calcIncident(Iparm2,rd.powderdata[0])
     879                    rd.powderdata[1] = rd.powderdata[1][Ibeg:Ifin]/YI
     880                    rd.powderdata[2] = rd.powderdata[2][Ibeg:Ifin]+(rd.powderdata[1]**2+WYI)
     881                    rd.powderdata[2] /= YI**2
     882                rd.powderdata[3] = np.zeros_like(rd.powderdata[0])                                       
     883                rd.powderdata[4] = np.zeros_like(rd.powderdata[0])                                       
     884                rd.powderdata[5] = np.zeros_like(rd.powderdata[0])                                       
    878885            Tmin = min(rd.powderdata[0])
    879886            Tmax = max(rd.powderdata[0])
     887            self.PatternTree.SetItemPyData(Id,[{'wtFactor':1.0},rd.powderdata])
     888            self.PatternTree.SetItemPyData(
     889                self.PatternTree.AppendItem(Id,text='Comments'),
     890                rd.comments)
    880891            self.PatternTree.SetItemPyData(
    881892                self.PatternTree.AppendItem(Id,text='Limits'),
     
    888899            self.PatternTree.SetItemPyData(
    889900                self.PatternTree.AppendItem(Id,text='Instrument Parameters'),
    890                 instParmList)
     901                [Iparm1,Iparm2])
    891902            self.PatternTree.SetItemPyData(
    892903                self.PatternTree.AppendItem(Id,text='Sample Parameters'),
     
    11591170                names = ['Type','Lam','Zero']
    11601171                codes = [0,0,0]
    1161                 inst = G2IO.makeInstDict(names,data,codes)
     1172                inst = [G2IO.makeInstDict(names,data,codes),{}]
    11621173                self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Instrument Parameters'),inst)
    11631174                self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),comments)
     
    14701481        SumList = []
    14711482        Names = []
    1472         Inst = {}
     1483        Inst = None
    14731484        SumItemList = []
    14741485        Comments = ['Sum equals: \n']
Note: See TracChangeset for help on using the changeset viewer.