Changeset 630


Ignore:
Timestamp:
May 21, 2012 3:44:17 PM (9 years ago)
Author:
vondreele
Message:

major mods for HKLF data
remove some dead code
mark more code as dead (#)
implement cif data style as 'val(esd)' for f & f_squared
continue implementation of HKLF data in refinement
HKLF now OK in Fourier & charge flip calcs.

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r623 r630  
    387387                                   'Phase')
    388388        submenu = wx.Menu()
    389         item = parent.AppendMenu(wx.ID_ANY, 'Import Phase',
     389        item = parent.AppendMenu(wx.ID_ANY, 'Phase',
    390390            submenu, help='Import phase data')
    391391        for reader in self.ImportPhaseReaderlist:
     
    441441                                   'Struct_Factor')
    442442        submenu = wx.Menu()
    443         item = parent.AppendMenu(wx.ID_ANY, 'Import Structure Factor',
     443        item = parent.AppendMenu(wx.ID_ANY, 'Structure Factor',
    444444            submenu, help='Import Structure Factor data')
    445445        for reader in self.ImportSfactReaderlist:
     
    449449            self.Bind(wx.EVT_MENU, self.OnImportSfact, id=item.GetId())
    450450        item = submenu.Append(wx.ID_ANY,
    451                               help='Import Structure Factor, use file to try to determine format',
    452                               kind=wx.ITEM_NORMAL,
    453                               text='guess format from file')
     451            help='Import Structure Factor, use file to try to determine format',
     452            kind=wx.ITEM_NORMAL,
     453            text='guess format from file')
    454454        self.Bind(wx.EVT_MENU, self.OnImportSfact, id=item.GetId())
    455455
     
    475475            Id = self.PatternTree.AppendItem(parent=self.root,
    476476                                             text='HKLF '+HistName)
    477             self.PatternTree.SetItemPyData(Id,rd.RefList)
     477            self.PatternTree.SetItemPyData(Id,['HKLF '+HistName,rd.RefList])
    478478            Sub = self.PatternTree.AppendItem(Id,text='Instrument Parameters')
    479479            self.PatternTree.SetItemPyData(Sub,rd.Parameters)
     
    481481                self.PatternTree.AppendItem(Id,text='HKL Plot Controls'),
    482482                rd.Controls)
     483            self.PatternTree.SetItemPyData(
     484                self.PatternTree.AppendItem(Id,text='Reflection List'),[])  #dummy entry for GUI use
    483485            self.PatternTree.SelectItem(Id)
    484486            self.PatternTree.Expand(Id)
     
    494496            'Powder_Data')
    495497        submenu = wx.Menu()
    496         item = parent.AppendMenu(wx.ID_ANY, 'Import Powder Data',
     498        item = parent.AppendMenu(wx.ID_ANY, 'Powder Data',
    497499            submenu, help='Import Powder data')
    498500        for reader in self.ImportPowderReaderlist:
     
    10921094            dlg.Destroy()
    10931095
    1094     # this will be removed eventually
    1095 #    def OnSnglRead(self,event):
    1096 #        self.CheckNotebook()
    1097 #        dlg = wx.FileDialog(self, 'Choose file', '.', '',
    1098 #            'hkl files (*.hkl)|*.hkl|All files (*.*)|*.*',
    1099 #            wx.OPEN|wx.CHANGE_DIR)
    1100 #        try:
    1101 #            if dlg.ShowModal() == wx.ID_OK:
    1102 #                filename = dlg.GetPath()
    1103 #                wx.BeginBusyCursor()
    1104 #                try:
    1105 #                    Data = {}
    1106 #                    names = ['Type','Lam']
    1107 #                    HKLref,HKLmin,HKLmax,FoMax,ifFc = G2IO.GetHKLData(filename)
    1108 #                    Id = self.PatternTree.AppendItem(parent=self.root,text='HKLF '+os.path.basename(filename))
    1109 #                    self.PatternTree.SetItemPyData(Id,HKLref)
    1110 #                    Sub = self.PatternTree.AppendItem(Id,text='Instrument Parameters')
    1111 #                    data = ['SXC',1.5428,]
    1112 #                    self.PatternTree.SetItemPyData(Sub,[tuple(data),data,names])
    1113 #                    Data['Type'] = 'Fosq'
    1114 #                    Data['ifFc'] = ifFc
    1115 #                    Data['HKLmax'] = HKLmax
    1116 #                    Data['HKLmin'] = HKLmin
    1117 #                    Data['FoMax'] = FoMax
    1118 #                    Data['Zone'] = '001'
    1119 #                    Data['Layer'] = 0
    1120 #                    Data['Scale'] = 1.0
    1121 #                    Data['log-lin'] = 'lin'                   
    1122 #                    self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='HKL Plot Controls'),Data)
    1123 #                    self.PatternTree.SelectItem(Id)
    1124 #                    self.PatternTree.Expand(Id)
    1125 #                    self.Sngl = Id
    1126 #                finally:
    1127 #                    wx.EndBusyCursor()   
    1128 #        finally:
    1129 #            dlg.Destroy()
    1130            
    11311096    def CheckNotebook(self):
    11321097        '''Make sure the data tree has the minimally expected controls
     
    19271892        return:
    19281893            HKLFdata = single crystal data list of reflections: for each reflection:
    1929                 HKLF = [np.array([h,k,l]),FoSq,sigFoSq,FcSq,Fcp,Fcpp,phase]
     1894                HKLF =
    19301895        '''
    1931         HKLFdata = []
    1932         while True:
    1933             data = self.PatternTree.GetItemPyData(HKLFname)
    1934             datum = data[0]
    1935             if datum[0] == HKLFname:
    1936                 HKLFdata = datum[1:][0]
     1896        HKLFdata = {}
     1897        HKLFdata['Data'] = self.PatternTree.GetItemPyData(HKLFname)[1]
     1898        HKLFdata['Instrument Parameters'] = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,HKLFname,'Instrument Parameters'))
    19371899        return HKLFdata
    19381900                   
     
    20011963        parmDict = {}
    20021964        Histograms,Phases = self.GetUsedHistogramsAndPhasesfromTree()
     1965        print Histograms.keys()
    20031966        Natoms,phaseVary,phaseDict,pawleyLookup,FFtable,BLtable = G2str.GetPhaseData(Phases,Print=False)       
    20041967        hapVary,hapDict,controlDict = G2str.GetHistogramPhaseData(Phases,Histograms,Print=False)
  • trunk/GSASIIIO.py

    r622 r630  
    4444    return file
    4545   
    46 # to be removed
    47 def SelectPowderData(G2frame, filename):
    48     """Selects banks of data from a filename of any GSAS powder data format
    49     Input - filename: any GSAS powder data formatted file (currently STD, FXYE, FXY & ESD)
    50     Returns - a list of banks to be read; each entry in list is a tuple containing:
    51     filename: same as input filename
    52     Pos: position for start of data; record just after BANK record
    53     Bank: the BANK record
    54     """
    55     File = open(filename,'Ur')
    56     Title = '''
    57 First line of this file:
    58 '''+File.readline()
    59     dlg = wx.MessageDialog(G2frame, Title, 'Is this the file you want?',
    60         wx.YES_NO | wx.ICON_QUESTION)
    61     try:
    62         result = dlg.ShowModal()
    63     finally:
    64         dlg.Destroy()
    65     if result == wx.ID_NO: return (0,0)
    66     Temperature = 300
    67    
    68     if '.xye' in filename:      #Topas style xye file (e.g. 2-th, I, sig) - no iparm file/no BANK record
    69         dlg = wx.MessageDialog(G2frame,'''Is this laboratory Cu Ka1/Ka2 data?
    70 (No = 0.6A wavelength synchrotron data)
    71 Change wavelength in Instrument Parameters if needed''','Data type?',
    72             wx.YES_NO | wx.ICON_QUESTION)
    73         try:
    74             result = dlg.ShowModal()
    75         finally:
    76             dlg.Destroy()
    77         print result
    78         if result == wx.ID_YES:
    79             Iparm = {}                                               #Assume CuKa lab data
    80             Iparm['INS   HTYPE '] = 'PXC '
    81             Iparm['INS  1 ICONS'] = '  1.540500  1.544300       0.0         0       0.7    0       0.5   '
    82             Iparm['INS  1PRCF1 '] = '    3    8      0.01                                                '
    83             Iparm['INS  1PRCF11'] = '   2.000000E+00  -2.000000E+00   5.000000E+00   0.000000E+00        '
    84             Iparm['INS  1PRCF12'] = '   0.000000E+00   0.000000E+00   0.100000E-01   0.100000E-01        '
    85         else:
    86             Iparm = {}                                               #Assume 0.6A synchrotron data
    87             Iparm['INS   HTYPE '] = 'PXC '
    88             Iparm['INS  1 ICONS'] = '  0.600000  0.000000       0.0         0      0.99    0       0.5   '
    89             Iparm['INS  1PRCF1 '] = '    3    8      0.01                                                '
    90             Iparm['INS  1PRCF11'] = '   1.000000E+00  -1.000000E+00   0.300000E+00   0.000000E+00        '
    91             Iparm['INS  1PRCF12'] = '   0.000000E+00   0.000000E+00   0.100000E-02   0.100000E-02        '
    92                        
    93        
    94     else:                       #GSAS style fxye or fxy file (e.g. 100*2-th, I, sig)
    95         G2frame.IparmName = GetInstrumentFile(G2frame,filename)
    96         if G2frame.IparmName:
    97             Iparm = GetInstrumentData(G2frame.IparmName)
    98         else:
    99             Iparm = {}                                               #Assume CuKa lab data if no iparm file
    100             Iparm['INS   HTYPE '] = 'PXC '
    101             Iparm['INS  1 ICONS'] = '  1.540500  1.544300       0.0         0       0.7    0       0.5   '
    102             Iparm['INS  1PRCF1 '] = '    3    8      0.01                                                '
    103             Iparm['INS  1PRCF11'] = '   2.000000E+00  -2.000000E+00   5.000000E+00   0.000000E+00        '
    104             Iparm['INS  1PRCF12'] = '   0.000000E+00   0.000000E+00   0.100000E-01   0.100000E-01        '
    105     S = 1
    106     Banks = []
    107     Pos = []
    108     FoundData = []
    109     Comments = []
    110     wx.BeginBusyCursor()
    111     try:
    112         while S:
    113             S = File.readline()
    114             if S[:1] != '#':
    115                 if S[:4] == 'BANK':
    116                     Banks.append(S)
    117                     Pos.append(File.tell())
    118                 elif '.xye' in filename:    #No BANK in a xye file
    119                     Banks.append('BANK 1 XYE')
    120                     Pos.append(File.tell())
    121                     break
    122             else:
    123                 Comments.append(S[:-1])
    124                 if 'Temp' in S.split('=')[0]:
    125                     Temperature = float(S.split('=')[1])
    126         File.close()
    127     finally:
    128         wx.EndBusyCursor()
    129     if Comments:
    130        print 'Comments on file:'
    131        for Comment in Comments: print Comment
    132     if Banks:
    133         result = [0]
    134         if len(Banks) >= 2:
    135             dlg = wx.MultiChoiceDialog(G2frame, 'Which scans do you want?', 'Select scans', Banks, wx.CHOICEDLG_STYLE)
    136             try:
    137                 if dlg.ShowModal() == wx.ID_OK:
    138                     result = dlg.GetSelections()
    139                 else:
    140                     result = []
    141             finally:
    142                 dlg.Destroy()
    143         for i in result:
    144             FoundData.append((filename,Pos[i],Banks[i]))
    145     else:
    146         dlg = wx.MessageDialog(G2frame, 'ERROR - this is not a GSAS powder data file', 'No BANK records', wx.OK | wx.ICON_ERROR)
    147         try:
    148             result = dlg.ShowModal()
    149         finally:
    150             dlg.Destroy()
    151     return FoundData,Iparm,Comments,Temperature
    152 
    153 # to be removed
    154 def GetInstrumentFile(G2frame,filename):
    155     import os.path as op
    156     dlg = wx.FileDialog(G2frame,'Choose an instrument file','.', '', 'GSAS iparm file (*.prm)|*.prm|All files(*.*)|*.*',
    157         wx.OPEN|wx.CHANGE_DIR)
    158     Tname = filename[:filename.index('.')]+'.prm'
    159     if op.exists(Tname):
    160         G2frame.IparmName = Tname       
    161     if G2frame.IparmName: dlg.SetFilename(G2frame.IparmName)
    162     filename = ''
    163     try:
    164         if dlg.ShowModal() == wx.ID_OK:
    165             filename = dlg.GetPath()
    166     finally:
    167         dlg.Destroy()
    168     return filename
    169 
    170 # to be removed
    171 def GetInstrumentData(IparmName):
    172     file = open(IparmName, 'Ur')
    173     S = 1
    174     Iparm = {}
    175     while S:
    176         S = file.readline()
    177         Iparm[S[:12]] = S[12:-1]
    178     return Iparm
     46## to be removed
     47#def SelectPowderData(G2frame, filename):
     48#    """Selects banks of data from a filename of any GSAS powder data format
     49#    Input - filename: any GSAS powder data formatted file (currently STD, FXYE, FXY & ESD)
     50#    Returns - a list of banks to be read; each entry in list is a tuple containing:
     51#    filename: same as input filename
     52#    Pos: position for start of data; record just after BANK record
     53#    Bank: the BANK record
     54#    """
     55#    File = open(filename,'Ur')
     56#    Title = '''
     57#First line of this file:
     58#'''+File.readline()
     59#    dlg = wx.MessageDialog(G2frame, Title, 'Is this the file you want?',
     60#        wx.YES_NO | wx.ICON_QUESTION)
     61#    try:
     62#        result = dlg.ShowModal()
     63#    finally:
     64#        dlg.Destroy()
     65#    if result == wx.ID_NO: return (0,0)
     66#    Temperature = 300
     67#   
     68#    if '.xye' in filename:      #Topas style xye file (e.g. 2-th, I, sig) - no iparm file/no BANK record
     69#        dlg = wx.MessageDialog(G2frame,'''Is this laboratory Cu Ka1/Ka2 data?
     70#(No = 0.6A wavelength synchrotron data)
     71#Change wavelength in Instrument Parameters if needed''','Data type?',
     72#            wx.YES_NO | wx.ICON_QUESTION)
     73#        try:
     74#            result = dlg.ShowModal()
     75#        finally:
     76#            dlg.Destroy()
     77#        print result
     78#        if result == wx.ID_YES:
     79#            Iparm = {}                                               #Assume CuKa lab data
     80#            Iparm['INS   HTYPE '] = 'PXC '
     81#            Iparm['INS  1 ICONS'] = '  1.540500  1.544300       0.0         0       0.7    0       0.5   '
     82#            Iparm['INS  1PRCF1 '] = '    3    8      0.01                                                '
     83#            Iparm['INS  1PRCF11'] = '   2.000000E+00  -2.000000E+00   5.000000E+00   0.000000E+00        '
     84#            Iparm['INS  1PRCF12'] = '   0.000000E+00   0.000000E+00   0.100000E-01   0.100000E-01        '
     85#        else:
     86#            Iparm = {}                                               #Assume 0.6A synchrotron data
     87#            Iparm['INS   HTYPE '] = 'PXC '
     88#            Iparm['INS  1 ICONS'] = '  0.600000  0.000000       0.0         0      0.99    0       0.5   '
     89#            Iparm['INS  1PRCF1 '] = '    3    8      0.01                                                '
     90#            Iparm['INS  1PRCF11'] = '   1.000000E+00  -1.000000E+00   0.300000E+00   0.000000E+00        '
     91#            Iparm['INS  1PRCF12'] = '   0.000000E+00   0.000000E+00   0.100000E-02   0.100000E-02        '
     92#                       
     93#       
     94#    else:                       #GSAS style fxye or fxy file (e.g. 100*2-th, I, sig)
     95#        G2frame.IparmName = GetInstrumentFile(G2frame,filename)
     96#        if G2frame.IparmName:
     97#            Iparm = GetInstrumentData(G2frame.IparmName)
     98#        else:
     99#            Iparm = {}                                               #Assume CuKa lab data if no iparm file
     100#            Iparm['INS   HTYPE '] = 'PXC '
     101#            Iparm['INS  1 ICONS'] = '  1.540500  1.544300       0.0         0       0.7    0       0.5   '
     102#            Iparm['INS  1PRCF1 '] = '    3    8      0.01                                                '
     103#            Iparm['INS  1PRCF11'] = '   2.000000E+00  -2.000000E+00   5.000000E+00   0.000000E+00        '
     104#            Iparm['INS  1PRCF12'] = '   0.000000E+00   0.000000E+00   0.100000E-01   0.100000E-01        '
     105#    S = 1
     106#    Banks = []
     107#    Pos = []
     108#    FoundData = []
     109#    Comments = []
     110#    wx.BeginBusyCursor()
     111#    try:
     112#        while S:
     113#            S = File.readline()
     114#            if S[:1] != '#':
     115#                if S[:4] == 'BANK':
     116#                    Banks.append(S)
     117#                    Pos.append(File.tell())
     118#                elif '.xye' in filename:    #No BANK in a xye file
     119#                    Banks.append('BANK 1 XYE')
     120#                    Pos.append(File.tell())
     121#                    break
     122#            else:
     123#                Comments.append(S[:-1])
     124#                if 'Temp' in S.split('=')[0]:
     125#                    Temperature = float(S.split('=')[1])
     126#        File.close()
     127#    finally:
     128#        wx.EndBusyCursor()
     129#    if Comments:
     130#       print 'Comments on file:'
     131#       for Comment in Comments: print Comment
     132#    if Banks:
     133#        result = [0]
     134#        if len(Banks) >= 2:
     135#            dlg = wx.MultiChoiceDialog(G2frame, 'Which scans do you want?', 'Select scans', Banks, wx.CHOICEDLG_STYLE)
     136#            try:
     137#                if dlg.ShowModal() == wx.ID_OK:
     138#                    result = dlg.GetSelections()
     139#                else:
     140#                    result = []
     141#            finally:
     142#                dlg.Destroy()
     143#        for i in result:
     144#            FoundData.append((filename,Pos[i],Banks[i]))
     145#    else:
     146#        dlg = wx.MessageDialog(G2frame, 'ERROR - this is not a GSAS powder data file', 'No BANK records', wx.OK | wx.ICON_ERROR)
     147#        try:
     148#            result = dlg.ShowModal()
     149#        finally:
     150#            dlg.Destroy()
     151#    return FoundData,Iparm,Comments,Temperature
     152#
     153## to be removed
     154#def GetInstrumentFile(G2frame,filename):
     155#    import os.path as op
     156#    dlg = wx.FileDialog(G2frame,'Choose an instrument file','.', '', 'GSAS iparm file (*.prm)|*.prm|All files(*.*)|*.*',
     157#        wx.OPEN|wx.CHANGE_DIR)
     158#    Tname = filename[:filename.index('.')]+'.prm'
     159#    if op.exists(Tname):
     160#        G2frame.IparmName = Tname       
     161#    if G2frame.IparmName: dlg.SetFilename(G2frame.IparmName)
     162#    filename = ''
     163#    try:
     164#        if dlg.ShowModal() == wx.ID_OK:
     165#            filename = dlg.GetPath()
     166#    finally:
     167#        dlg.Destroy()
     168#    return filename
     169#
     170## to be removed
     171#def GetInstrumentData(IparmName):
     172#    file = open(IparmName, 'Ur')
     173#    S = 1
     174#    Iparm = {}
     175#    while S:
     176#        S = file.readline()
     177#        Iparm[S[:12]] = S[12:-1]
     178#    return Iparm
    179179   
    180180def GetPowderPeaks(fileName):
     
    308308#    return HKLref,HKLmin,HKLmax,FoMax,ifFc
    309309
    310 # to be removed
    311 def GetPowderData(filename,Pos,Bank,DataType):
    312     '''Reads one BANK of data from GSAS raw powder data file
    313     input:
    314     filename: GSAS raw powder file dataname
    315     Pos: start of data in file just after BANK record
    316     Bank: the BANK record
    317     DataType: powder data type, e.g. "PXC" for Powder X-ray CW data
    318     returns: list [x,y,e,yc,yb]
    319     x: np.array of x-axis values
    320     y: np.array of powder pattern intensities
    321     w: np.array of w=sig(intensity)^2 values
    322     yc: np.array of calc. intensities (zero)
    323     yb: np.array of calc. background (zero)
    324     yd: np.array of obs-calc profiles
    325     '''
    326     print 'Reading: '+filename
    327     print 'Bank:    '+Bank[:-1]
    328     if 'FXYE' in Bank:
    329         return GetFXYEdata(filename,Pos,Bank,DataType)
    330     elif ' XYE' in Bank:
    331         return GetXYEdata(filename,Pos,Bank,DataType)
    332     elif 'FXY' in Bank:
    333         return GetFXYdata(filename,Pos,Bank,DataType)
    334     elif 'ESD' in Bank:
    335         return GetESDdata(filename,Pos,Bank,DataType)
    336     elif 'STD' in Bank:
    337         return GetSTDdata(filename,Pos,Bank,DataType)
    338     else:
    339         return GetSTDdata(filename,Pos,Bank,DataType)
    340     return []
    341 
    342 # to be removed
    343 def GetFXYEdata(filename,Pos,Bank,DataType):
    344     File = open(filename,'Ur')
    345     File.seek(Pos)
    346     x = []
    347     y = []
    348     w = []
    349     S = File.readline()
    350     while S and S[:4] != 'BANK':
    351         vals = S.split()
    352         if DataType[2] == 'C':
    353             x.append(float(vals[0])/100.)               #CW: from centidegrees to degrees
    354         elif DataType[2] == 'T':
    355             x.append(float(vals[0])/1000.0)             #TOF: from musec to millisec
    356         f = float(vals[1])
    357         if f <= 0.0:
    358             y.append(0.0)
    359             w.append(1.0)
    360         else:
    361             y.append(float(vals[1]))
    362             w.append(1.0/float(vals[2])**2)
    363         S = File.readline()
    364     File.close()
    365     N = len(x)
    366     return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
    367    
    368 # to be removed
    369 def GetXYEdata(filename,Pos,Bank,DataType):
    370     File = open(filename,'Ur')
    371     File.seek(Pos)
    372     x = []
    373     y = []
    374     w = []
    375     S = File.readline()
    376     while S:
    377         vals = S.split()
    378         try:
    379             x.append(float(vals[0]))
    380             f = float(vals[1])
    381             if f <= 0.0:
    382                 y.append(0.0)
    383                 w.append(1.0)
    384             else:
    385                 y.append(float(vals[1]))
    386                 w.append(1.0/float(vals[2])**2)
    387             S = File.readline()
    388         except ValueError:
    389             break
    390     File.close()
    391     N = len(x)
    392     return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
    393    
    394    
    395 # to be removed
    396 def GetFXYdata(filename,Pos,Bank,DataType):
    397     File = open(filename,'Ur')
    398     File.seek(Pos)
    399     x = []
    400     y = []
    401     w = []
    402     S = File.readline()
    403     while S and S[:4] != 'BANK':
    404         vals = S.split()
    405         if DataType[2] == 'C':
    406             x.append(float(vals[0])/100.)               #CW: from centidegrees to degrees
    407         elif DataType[2] == 'T':
    408             x.append(float(vals[0])/1000.0)             #TOF: from musec to millisec
    409         f = float(vals[1])
    410         if f > 0.0:
    411             y.append(f)
    412             w.append(1.0/f)
    413         else:             
    414             y.append(0.0)
    415             w.append(1.0)
    416         S = File.readline()
    417     File.close()
    418     N = len(x)
    419     return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
    420    
    421 # to be removed
    422 def GetESDdata(filename,Pos,Bank,DataType):
    423     File = open(filename,'Ur')
    424     cons = Bank.split()
    425     if DataType[2] == 'C':
    426         start = float(cons[5])/100.0               #CW: from centidegrees to degrees
    427         step = float(cons[6])/100.0
    428     elif DataType[2] == 'T':
    429         start = float(cons[5])/1000.0              #TOF: from musec to millisec
    430         step = float(cons[6])/1000.0
    431     File.seek(Pos)
    432     x = []
    433     y = []
    434     w = []
    435     S = File.readline()
    436     j = 0
    437     while S and S[:4] != 'BANK':
    438         for i in range(0,80,16):
    439             xi = start+step*j
    440             yi = sfloat(S[i:i+8])
    441             ei = sfloat(S[i+8:i+16])
    442             x.append(xi)
    443             if yi > 0.0:
    444                 y.append(yi)
    445                 w.append(1.0/ei**2)
    446             else:             
    447                 y.append(0.0)
    448                 w.append(1.0)
    449             j += 1
    450         S = File.readline()
    451     File.close()
    452     N = len(x)
    453     return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
    454 
    455 # to be removed
    456 def GetSTDdata(filename,Pos,Bank,DataType):
    457     File = open(filename,'Ur')
    458     cons = Bank.split()
    459     Nch = int(cons[2])
    460     if DataType[2] == 'C':
    461         start = float(cons[5])/100.0               #CW: from centidegrees to degrees
    462         step = float(cons[6])/100.0
    463     elif DataType[2] == 'T':
    464         start = float(cons[5])/1000.0              #TOF: from musec to millisec - not likely!
    465         step = float(cons[6])/1000.0
    466     File.seek(Pos)
    467     x = []
    468     y = []
    469     w = []
    470     S = File.readline()
    471     j = 0
    472     while S and S[:4] != 'BANK':
    473         for i in range(0,80,8):
    474             xi = start+step*j
    475             ni = max(sint(S[i:i+2]),1)
    476             yi = max(sfloat(S[i+2:i+8]),0.0)
    477             if yi:
    478                 vi = yi/ni
    479             else:
    480                 yi = 0.0
    481                 vi = 1.0
    482             j += 1
    483             if j < Nch:
    484                 x.append(xi)
    485                 y.append(yi)
    486                 w.append(1.0/vi)
    487         S = File.readline()
    488     File.close()
    489     N = len(x)
    490     return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
     310## to be removed
     311#def GetPowderData(filename,Pos,Bank,DataType):
     312#    '''Reads one BANK of data from GSAS raw powder data file
     313#    input:
     314#    filename: GSAS raw powder file dataname
     315#    Pos: start of data in file just after BANK record
     316#    Bank: the BANK record
     317#    DataType: powder data type, e.g. "PXC" for Powder X-ray CW data
     318#    returns: list [x,y,e,yc,yb]
     319#    x: np.array of x-axis values
     320#    y: np.array of powder pattern intensities
     321#    w: np.array of w=sig(intensity)^2 values
     322#    yc: np.array of calc. intensities (zero)
     323#    yb: np.array of calc. background (zero)
     324#    yd: np.array of obs-calc profiles
     325#    '''
     326#    print 'Reading: '+filename
     327#    print 'Bank:    '+Bank[:-1]
     328#    if 'FXYE' in Bank:
     329#        return GetFXYEdata(filename,Pos,Bank,DataType)
     330#    elif ' XYE' in Bank:
     331#        return GetXYEdata(filename,Pos,Bank,DataType)
     332#    elif 'FXY' in Bank:
     333#        return GetFXYdata(filename,Pos,Bank,DataType)
     334#    elif 'ESD' in Bank:
     335#        return GetESDdata(filename,Pos,Bank,DataType)
     336#    elif 'STD' in Bank:
     337#        return GetSTDdata(filename,Pos,Bank,DataType)
     338#    else:
     339#        return GetSTDdata(filename,Pos,Bank,DataType)
     340#    return []
     341#
     342## to be removed
     343#def GetFXYEdata(filename,Pos,Bank,DataType):
     344#    File = open(filename,'Ur')
     345#    File.seek(Pos)
     346#    x = []
     347#    y = []
     348#    w = []
     349#    S = File.readline()
     350#    while S and S[:4] != 'BANK':
     351#        vals = S.split()
     352#        if DataType[2] == 'C':
     353#            x.append(float(vals[0])/100.)               #CW: from centidegrees to degrees
     354#        elif DataType[2] == 'T':
     355#            x.append(float(vals[0])/1000.0)             #TOF: from musec to millisec
     356#        f = float(vals[1])
     357#        if f <= 0.0:
     358#            y.append(0.0)
     359#            w.append(1.0)
     360#        else:
     361#            y.append(float(vals[1]))
     362#            w.append(1.0/float(vals[2])**2)
     363#        S = File.readline()
     364#    File.close()
     365#    N = len(x)
     366#    return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
     367#   
     368## to be removed
     369#def GetXYEdata(filename,Pos,Bank,DataType):
     370#    File = open(filename,'Ur')
     371#    File.seek(Pos)
     372#    x = []
     373#    y = []
     374#    w = []
     375#    S = File.readline()
     376#    while S:
     377#        vals = S.split()
     378#        try:
     379#            x.append(float(vals[0]))
     380#            f = float(vals[1])
     381#            if f <= 0.0:
     382#                y.append(0.0)
     383#                w.append(1.0)
     384#            else:
     385#                y.append(float(vals[1]))
     386#                w.append(1.0/float(vals[2])**2)
     387#            S = File.readline()
     388#        except ValueError:
     389#            break
     390#    File.close()
     391#    N = len(x)
     392#    return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
     393#   
     394#   
     395## to be removed
     396#def GetFXYdata(filename,Pos,Bank,DataType):
     397#    File = open(filename,'Ur')
     398#    File.seek(Pos)
     399#    x = []
     400#    y = []
     401#    w = []
     402#    S = File.readline()
     403#    while S and S[:4] != 'BANK':
     404#        vals = S.split()
     405#        if DataType[2] == 'C':
     406#            x.append(float(vals[0])/100.)               #CW: from centidegrees to degrees
     407#        elif DataType[2] == 'T':
     408#            x.append(float(vals[0])/1000.0)             #TOF: from musec to millisec
     409#        f = float(vals[1])
     410#        if f > 0.0:
     411#            y.append(f)
     412#            w.append(1.0/f)
     413#        else:             
     414#            y.append(0.0)
     415#            w.append(1.0)
     416#        S = File.readline()
     417#    File.close()
     418#    N = len(x)
     419#    return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
     420#   
     421## to be removed
     422#def GetESDdata(filename,Pos,Bank,DataType):
     423#    File = open(filename,'Ur')
     424#    cons = Bank.split()
     425#    if DataType[2] == 'C':
     426#        start = float(cons[5])/100.0               #CW: from centidegrees to degrees
     427#        step = float(cons[6])/100.0
     428#    elif DataType[2] == 'T':
     429#        start = float(cons[5])/1000.0              #TOF: from musec to millisec
     430#        step = float(cons[6])/1000.0
     431#    File.seek(Pos)
     432#    x = []
     433#    y = []
     434#    w = []
     435#    S = File.readline()
     436#    j = 0
     437#    while S and S[:4] != 'BANK':
     438#        for i in range(0,80,16):
     439#            xi = start+step*j
     440#            yi = sfloat(S[i:i+8])
     441#            ei = sfloat(S[i+8:i+16])
     442#            x.append(xi)
     443#            if yi > 0.0:
     444#                y.append(yi)
     445#                w.append(1.0/ei**2)
     446#            else:             
     447#                y.append(0.0)
     448#                w.append(1.0)
     449#            j += 1
     450#        S = File.readline()
     451#    File.close()
     452#    N = len(x)
     453#    return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
     454#
     455## to be removed
     456#def GetSTDdata(filename,Pos,Bank,DataType):
     457#    File = open(filename,'Ur')
     458#    cons = Bank.split()
     459#    Nch = int(cons[2])
     460#    if DataType[2] == 'C':
     461#        start = float(cons[5])/100.0               #CW: from centidegrees to degrees
     462#        step = float(cons[6])/100.0
     463#    elif DataType[2] == 'T':
     464#        start = float(cons[5])/1000.0              #TOF: from musec to millisec - not likely!
     465#        step = float(cons[6])/1000.0
     466#    File.seek(Pos)
     467#    x = []
     468#    y = []
     469#    w = []
     470#    S = File.readline()
     471#    j = 0
     472#    while S and S[:4] != 'BANK':
     473#        for i in range(0,80,8):
     474#            xi = start+step*j
     475#            ni = max(sint(S[i:i+2]),1)
     476#            yi = max(sfloat(S[i+2:i+8]),0.0)
     477#            if yi:
     478#                vi = yi/ni
     479#            else:
     480#                yi = 0.0
     481#                vi = 1.0
     482#            j += 1
     483#            if j < Nch:
     484#                x.append(xi)
     485#                y.append(yi)
     486#                w.append(1.0/vi)
     487#        S = File.readline()
     488#    File.close()
     489#    N = len(x)
     490#    return [np.array(x),np.array(y),np.array(w),np.zeros(N),np.zeros(N),np.zeros(N)]
    491491   
    492492def CheckImageFile(G2frame,imagefile):
     
    833833                sub = G2frame.PatternTree.AppendItem(Id,datus[0])
    834834                G2frame.PatternTree.SetItemPyData(sub,datus[1])
    835             if 'IMG' in datum[0]:                   #retreive image default flag & data if set
     835            if 'IMG' in datum[0]:                   #retrieve image default flag & data if set
    836836                Data = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Image Controls'))
    837837                if Data['setDefault']:
     
    15101510            }
    15111511        self.Parameters = [ # list with data collection parameters
    1512             ('SXC',1.5428),
    1513             ['SXC',1.5428],
     1512            ('SXC',0.70926),
     1513            ['SXC',0.70926],
    15141514            ['Type','Lam']
    15151515            ]
     
    15541554            self.Controls['FoMax'] = Fo2max
    15551555        else:
    1556             print "Unsupported Stract Fact type in ImportStructFactor.UpdateControls"
    1557             raise Exception,"Unsupported Stract Fact type in ImportStructFactor.UpdateControls"
     1556            print "Unsupported Struct Fact type in ImportStructFactor.UpdateControls"
     1557            raise Exception,"Unsupported Struct Fact type in ImportStructFactor.UpdateControls"
    15581558
    15591559######################################################################
  • trunk/GSASIIgrid.py

    r620 r630  
    19521952        else:
    19531953            G2plt.PlotPatterns(G2frame)
    1954     elif G2frame.PatternTree.GetItemText(item) == 'Reflection Lists':
     1954    elif G2frame.PatternTree.GetItemText(item) == 'Reflection Lists':   #powder reflections
    19551955        G2frame.PatternId = G2frame.PatternTree.GetItemParent(item)
    19561956        G2frame.PickId = item
     
    19611961        G2pdG.UpdateReflectionGrid(G2frame,data)
    19621962        G2plt.PlotPatterns(G2frame)
     1963    elif G2frame.PatternTree.GetItemText(item) == 'Reflection List':    #HKLF reflections
     1964        G2frame.PatternId = G2frame.PatternTree.GetItemParent(item)
     1965        data = G2frame.PatternTree.GetItemPyData(G2frame.PatternId)
     1966        G2pdG.UpdateReflectionGrid(G2frame,data,HKLF=True)
  • trunk/GSASIIphsGUI.py

    r623 r630  
    27282728                           
    27292729            scaleSizer = wx.BoxSizer(wx.HORIZONTAL)
    2730             scaleRef = wx.CheckBox(DData,-1,label=' Phase fraction: ')
     2730            if 'PWDR' in item:
     2731                scaleRef = wx.CheckBox(DData,-1,label=' Phase fraction: ')
     2732            elif 'HKLF' in item:
     2733                scaleRef = wx.CheckBox(DData,-1,label=' Scale factor: ')               
    27312734            scaleRef.SetValue(UseList[item]['Scale'][1])
    27322735            Indx[scaleRef.GetId()] = item
     
    29682971            Obj.SetValue("%.5f"%(UseList[hist]['HStrain'][0][pid]))          #reset in case of error
    29692972
    2970         def OnPOType(event):
    2971             Obj = event.GetEventObject()
    2972             hist = Indx[Obj.GetId()]
    2973             if 'March' in Obj.GetValue():
    2974                 UseList[hist]['Pref.Ori.'][0] = 'MD'
    2975             else:
    2976                 UseList[hist]['Pref.Ori.'][0] = 'SH'
    2977             wx.CallAfter(UpdateDData)           
    2978 
    2979         def OnPORef(event):
    2980             Obj = event.GetEventObject()
    2981             hist = Indx[Obj.GetId()]
    2982             UseList[hist]['Pref.Ori.'][2] = Obj.GetValue()
    2983            
    29842973        def OnPOVal(event):
    29852974            Obj = event.GetEventObject()
     
    30153004            wx.CallAfter(UpdateDData)
    30163005
     3006        def OnPOType(event):
     3007            Obj = event.GetEventObject()
     3008            hist = Indx[Obj.GetId()]
     3009            if 'March' in Obj.GetValue():
     3010                UseList[hist]['Pref.Ori.'][0] = 'MD'
     3011            else:
     3012                UseList[hist]['Pref.Ori.'][0] = 'SH'
     3013            wx.CallAfter(UpdateDData)           
     3014   
     3015        def OnPORef(event):
     3016            Obj = event.GetEventObject()
     3017            hist = Indx[Obj.GetId()]
     3018            UseList[hist]['Pref.Ori.'][2] = Obj.GetValue()
     3019               
    30173020        def SetPOCoef(Order,hist):
    30183021            cofNames = G2lat.GenSHCoeff(SGData['SGLaue'],'0',Order,False)     #cylindrical & no M
     
    30363039            except ValueError:
    30373040                pass
    3038             Obj.SetValue("%.2f"%(UseList[Indx[Obj.GetId()]]['Extinction'][0]))          #reset in case of error
    3039            
     3041            Obj.SetValue("%.2f"%(UseList[Indx[Obj.GetId()]]['Extinction'][0]))
     3042           
     3043        def OnTbarVal(event):
     3044            Obj = event.GetEventObject()
     3045            try:
     3046                tbar = float(Obj.GetValue())
     3047                if tbar >= 0:
     3048                    UseList[Indx[Obj.GetId()]]['Extinction'][2]['Tbar'] = tbar
     3049            except ValueError:
     3050                pass
     3051            Obj.SetValue("%.2f"%(UseList[Indx[Obj.GetId()]]['Extinction'][2]['Tbar']))
     3052           
     3053        def OnEval(event):
     3054            Obj = event.GetEventObject()
     3055            item = Indx[Obj.GetId()]
     3056            try:
     3057                val = float(Obj.GetValue())
     3058                if val >= 0:
     3059                    UseList[item[0]]['Extinction'][2][item[1]][0] = val
     3060            except ValueError:
     3061                pass
     3062            Obj.SetValue("%9.3g"%(UseList[item[0]]['Extinction'][2][item[1]][0]))
     3063           
     3064        def OnEref(event):
     3065            Obj = event.GetEventObject()
     3066            item = Indx[Obj.GetId()]
     3067            UseList[item[0]]['Extinction'][2][item[1]][1] = Obj.GetValue()
     3068
     3069        def OnSCExtType(event):
     3070            Obj = event.GetEventObject()
     3071            item = Indx[Obj.GetId()]
     3072            UseList[item[0]]['Extinction'][item[1]] = Obj.GetValue()
     3073            wx.CallAfter(UpdateDData)
     3074               
    30403075        def checkAxis(axis):
    30413076            if not np.any(np.array(axis)):
     
    32513286            extSizer.Add(extVal,0,wx.ALIGN_CENTER_VERTICAL)
    32523287            return extSizer
     3288       
     3289        def SCExtSizer():
     3290#'Extinction':['Lorentzian','Secondary Type I',{'Tbar':0.20,'Eg':[0.0,False],'Es':[0.0,False],'Ep':[0.0,False]},]}
     3291            extSizer = wx.BoxSizer(wx.VERTICAL)
     3292            typeSizer = wx.BoxSizer(wx.HORIZONTAL)           
     3293            typeSizer.Add(wx.StaticText(DData,-1,' Extinction type: '),0,wx.ALIGN_CENTER_VERTICAL)
     3294            Choices = ['Primary','Secondary Type I','Secondary Type II','Secondary Type I & II']
     3295            typeTxt = wx.ComboBox(DData,-1,choices=Choices,value=UseList[item]['Extinction'][1],
     3296                style=wx.CB_READONLY|wx.CB_DROPDOWN)
     3297            Indx[typeTxt.GetId()] = [item,1]
     3298            typeTxt.Bind(wx.EVT_COMBOBOX,OnSCExtType)
     3299            typeSizer.Add(typeTxt)
     3300            typeSizer.Add(wx.StaticText(DData,-1,' Approx: '),0,wx.ALIGN_CENTER_VERTICAL)
     3301            Choices=['Lorentzian','Gaussian']
     3302            approxTxT = wx.ComboBox(DData,-1,choices=Choices,value=UseList[item]['Extinction'][0],
     3303                style=wx.CB_READONLY|wx.CB_DROPDOWN)
     3304            Indx[approxTxT.GetId()] = [item,0]
     3305            approxTxT.Bind(wx.EVT_COMBOBOX,OnSCExtType)
     3306            typeSizer.Add(approxTxT)
     3307            extSizer.Add(typeSizer,0,wx.ALIGN_CENTER_VERTICAL)
     3308            extSizer.Add((0,5),)
     3309            valSizer =wx.BoxSizer(wx.HORIZONTAL)
     3310            valSizer.Add(wx.StaticText(DData,-1,' Tbar(mm):'),0,wx.ALIGN_CENTER_VERTICAL)
     3311            tbarVal = wx.TextCtrl(DData,wx.ID_ANY,
     3312                '%.3f'%(UseList[item]['Extinction'][2]['Tbar']),style=wx.TE_PROCESS_ENTER)
     3313            Indx[tbarVal.GetId()] = item
     3314            tbarVal.Bind(wx.EVT_TEXT_ENTER,OnTbarVal)
     3315            tbarVal.Bind(wx.EVT_KILL_FOCUS,OnTbarVal)
     3316            valSizer.Add(tbarVal,0,wx.ALIGN_CENTER_VERTICAL)
     3317            if 'Primary' in UseList[item]['Extinction'][1]:
     3318                Ekey = ['Ep',]
     3319            elif 'Secondary Type II' == UseList[item]['Extinction'][1]:
     3320                Ekey = ['Es',]
     3321            elif 'Secondary Type I' == UseList[item]['Extinction'][1]:
     3322                Ekey = ['Eg',]
     3323            else:
     3324                Ekey = ['Eg','Es']
     3325            for ekey in Ekey:
     3326                Eref = wx.CheckBox(DData,-1,label=ekey+' : ')
     3327                Eref.SetValue(UseList[item]['Extinction'][2][ekey][1])
     3328                Indx[Eref.GetId()] = [item,ekey]
     3329                Eref.Bind(wx.EVT_CHECKBOX, OnEref)
     3330                valSizer.Add(Eref,0,wx.ALIGN_CENTER_VERTICAL)
     3331                Eval = wx.TextCtrl(DData,wx.ID_ANY,
     3332                    '%9.3g'%(UseList[item]['Extinction'][2][ekey][0]),style=wx.TE_PROCESS_ENTER)
     3333                Indx[Eval.GetId()] = [item,ekey]
     3334                Eval.Bind(wx.EVT_TEXT_ENTER,OnEval)
     3335                Eval.Bind(wx.EVT_KILL_FOCUS,OnEval)
     3336                valSizer.Add(Eval,0,wx.ALIGN_CENTER_VERTICAL)
     3337
     3338            extSizer.Add(valSizer,0,wx.ALIGN_CENTER_VERTICAL)
     3339            return extSizer
    32533340           
    32543341        if DData.GetSizer():
     
    32603347        for item in keyList:
    32613348            histData = UseList[item]
    3262 ####### Patch to add LGmix to Size & Mustrain
    3263 #            if len(histData['Size'][1]) == 2:
    3264 #                histData['Size'][1].append(1.0)
    3265 #                histData['Size'][2].append(False)
    3266 #                histData['Mustrain'][1].append(1.0)
    3267 #                histData['Mustrain'][2].append(False)
    3268 #                UseList[item] = histData
    3269 ####### end patch
    32703349            showSizer = wx.BoxSizer(wx.HORIZONTAL)
    32713350            showData = wx.CheckBox(DData,-1,label=' Show '+item)
     
    33613440                mainSizer.Add((0,5),0)
    33623441            elif item[:4] == 'HKLF' and UseList[item]['Show']:
     3442                mainSizer.Add((0,5),0)               
     3443                mainSizer.Add(SCExtSizer())
     3444                mainSizer.Add((0,5),0)
    33633445                pass
    33643446        mainSizer.Add((5,5),0)
     
    33683450        Size = mainSizer.GetMinSize()
    33693451        Size[0] += 40
    3370         Size[1] = max(Size[1],250) + 20
     3452        Size[1] = max(Size[1],290) + 20
    33713453        DData.SetSize(Size)
    33723454        DData.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1)
     
    33923474                        histoName = TextList[i]
    33933475                        UseList[histoName] = {'Histogram':histoName,'Show':False,'Scale':[1.0,True],
    3394                             'Extinction':['Lorentzian','Secondary Type I',{'Eg':[0.0,False]},]}                       
     3476                            'Extinction':['Lorentzian','Secondary Type I',
     3477                            {'Tbar':0.0,'Eg':[0.0,False],'Es':[0.0,False],'Ep':[0.0,False]},]}                       
    33953478                    data['Histograms'] = UseList
    33963479                    wx.BeginBusyCursor()
     
    34043487        generalData = data['General']
    34053488        Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,histoName)
    3406         reflData = G2frame.PatternTree.GetItemPyData(Id)
     3489        reflData = G2frame.PatternTree.GetItemPyData(Id)[1]
    34073490        SGData = generalData['SGData']
    34083491        Cell = generalData['Cell'][1:7]
     
    34153498            ref[11] = Uniq
    34163499            ref[12] = phi
    3417         G2frame.PatternTree.SetItemPyData(Id,reflData)
     3500        G2frame.PatternTree.SetItemPyData(Id,[histoName,reflData])
    34183501       
    34193502    def OnPwdrAdd(event):
     
    36623745        elif 'HKLF' in reflName:
    36633746            PatternId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root, reflName)
    3664             reflData = G2frame.PatternTree.GetItemPyData(PatternId)
     3747            reflData = G2frame.PatternTree.GetItemPyData(PatternId)[1]
    36653748        mapData.update(G2mth.FourierMap(data,reflData))
    36663749        mapData['Flip'] = False
     
    37423825        elif 'HKLF' in reflName:
    37433826            PatternId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root, reflName)
    3744             reflData = G2frame.PatternTree.GetItemPyData(PatternId)
     3827            reflData = G2frame.PatternTree.GetItemPyData(PatternId)[1]
    37453828        else:
    37463829            print '**** ERROR - No data defined for charge flipping'
  • trunk/GSASIIplot.py

    r623 r630  
    242242   
    243243    Plot.set_aspect(aspect='equal')
    244     HKLref = self.PatternTree.GetItemPyData(self.Sngl)
    245     Data = self.PatternTree.GetItemPyData( \
     244    HKLref = self.PatternTree.GetItemPyData(self.Sngl)[1]
     245    Data = self.PatternTree.GetItemPyData(
    246246        G2gd.GetPatternTreeItemId(self,self.Sngl, 'HKL Plot Controls'))
    247247    Type = Data['Type']           
  • trunk/GSASIIpwdGUI.py

    r584 r630  
    761761        insVal['Type'] = typePick.GetValue()
    762762        data = updateData(insVal,insRef)
    763         UpdateInstrumentGrid(G2frame,data)
     763        if 'P' in insVal['Type']:
     764            UpdateInstrumentGrid(G2frame,data)
    764765       
    765766    def OnLamPick(event):
     
    942943        instSizer.Add(typePick,0,wx.ALIGN_CENTER_VERTICAL)
    943944        if 'C' in insVal['Type']:               #constant wavelength
    944             instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' Lam: %10.6f'%(insDef['Lam'])),
    945                     0,wx.ALIGN_CENTER_VERTICAL)
     945            instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' Lam: (%10.6f)'%(insDef['Lam'])),
     946                0,wx.ALIGN_CENTER_VERTICAL)
     947            waveVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,'%10.6f'%(insVal['Lam']),style=wx.TE_PROCESS_ENTER)
     948            waveVal.Bind(wx.EVT_TEXT_ENTER,OnWaveValue)
     949            waveVal.Bind(wx.EVT_KILL_FOCUS,OnWaveValue)
     950            instSizer.Add(waveVal,0,wx.ALIGN_CENTER_VERTICAL)
    946951        else:                                   #time of flight (neutrons)
    947952            pass                                #for now
     
    17481753################################################################################           
    17491754       
    1750 def UpdateReflectionGrid(G2frame,data):
     1755def UpdateReflectionGrid(G2frame,data,HKLF=False):
    17511756    if not data:
    17521757        print 'No phases, no reflections'
    17531758        return
    1754     phases = data.keys()
     1759    if HKLF:
     1760        G2frame.RefList = 1
     1761        phaseName = data[0]
     1762    else:
     1763        phasename = G2frame.RefList
     1764        phases = data.keys()
    17551765   
    1756     def OnSelectPhase(event):
    1757         dlg = wx.SingleChoiceDialog(G2frame,'Select','Phase',phases)
    1758         try:
    1759             if dlg.ShowModal() == wx.ID_OK:
    1760                 sel = dlg.GetSelection()
    1761                 G2frame.RefList = phases[sel]
    1762                 UpdateReflectionGrid(G2frame,data)
    1763         finally:
    1764             dlg.Destroy()
    1765         G2plt.PlotPatterns(G2frame)
     1766        def OnSelectPhase(event):
     1767            dlg = wx.SingleChoiceDialog(G2frame,'Select','Phase',phases)
     1768            try:
     1769                if dlg.ShowModal() == wx.ID_OK:
     1770                    sel = dlg.GetSelection()
     1771                    G2frame.RefList = phases[sel]
     1772                    UpdateReflectionGrid(G2frame,data)
     1773            finally:
     1774                dlg.Destroy()
     1775            G2plt.PlotPatterns(G2frame)
    17661776       
    17671777       
    17681778    if G2frame.dataDisplay:
    17691779        G2frame.dataFrame.Clear()
    1770     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.ReflMenu)
    1771     if not G2frame.dataFrame.GetStatusBar():
    1772         Status = G2frame.dataFrame.CreateStatusBar()   
    1773     G2frame.Bind(wx.EVT_MENU, OnSelectPhase, id=G2gd.wxID_SELECTPHASE)
    1774     G2frame.dataFrame.SelectPhase.Enable(False)
    1775     if len(data) > 1:
    1776         G2frame.dataFrame.SelectPhase.Enable(True)
    17771780    rowLabels = []
    1778     refList = [refl[:11] for refl in data[G2frame.RefList]]
     1781    if HKLF:
     1782        G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.BlankMenu)
     1783        refList = [refl[:11] for refl in data[1]]
     1784    else:       
     1785        G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.ReflMenu)
     1786        if not G2frame.dataFrame.GetStatusBar():
     1787            Status = G2frame.dataFrame.CreateStatusBar()   
     1788        G2frame.Bind(wx.EVT_MENU, OnSelectPhase, id=G2gd.wxID_SELECTPHASE)
     1789        G2frame.dataFrame.SelectPhase.Enable(False)
     1790        if len(data) > 1:
     1791            G2frame.dataFrame.SelectPhase.Enable(True)
     1792        refList = [refl[:11] for refl in data[G2frame.RefList]]
    17791793    for i in range(len(refList)): rowLabels.append(str(i))
    1780     colLabels = ['H','K','L','mul','d','pos','sig','gam','Fosq','Fcsq','phase',]
     1794    if HKLF:
     1795        colLabels = ['H','K','L','mul','d','Fosq','sig','Fcsq','FoTsq','FcTsq','phase',]
     1796    else:
     1797        colLabels = ['H','K','L','mul','d','pos','sig','gam','Fosq','Fcsq','phase',]
    17811798    Types = 4*[wg.GRID_VALUE_LONG,]+4*[wg.GRID_VALUE_FLOAT+':10,4',]+2*[wg.GRID_VALUE_FLOAT+':10,2',]+[wg.GRID_VALUE_FLOAT+':10,3',]
    17821799    G2frame.PeakTable = G2gd.Table(refList,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    1783     G2frame.dataFrame.SetLabel('Reflection List for '+G2frame.RefList)
     1800    G2frame.dataFrame.SetLabel('Reflection List for '+phaseName)
    17841801    G2frame.dataDisplay = G2gd.GSGrid(parent=G2frame.dataFrame)
    17851802    G2frame.dataDisplay.SetTable(G2frame.PeakTable, True)
  • trunk/GSASIIstruct.py

    r620 r630  
    207207                    PWDRdata[data[9][0]] = data[9][1]       #Reflection lists might be missing
    208208                except IndexError:
    209                     PWDRdata['Reflection lists'] = {}
     209                    PWDRdata['Reflection Lists'] = {}
    210210   
    211211                Histograms[hist] = PWDRdata
    212212            elif 'HKLF' in hist[:4]:
    213                 HKLFdata = []
    214                 datum = data[0]
    215                 HKLFdata = datum[1:][0]
     213                HKLFdata = {}
     214                HKLFdata['Data'] = datum[1][1]
     215                HKLFdata[data[1][0]] = data[1][1]       #Instrument parameters
     216                HKLFdata['Reflection Lists'] = None
    216217                Histograms[hist] = HKLFdata           
    217218    fl.close()
     
    412413                PWDRdata[data[9][0]] = data[9][1]       #Reflection lists might be missing
    413414            except IndexError:
    414                 PWDRdata['Reflection lists'] = {}
     415                PWDRdata['Reflection Lists'] = {}
    415416    fl.close()
    416417    return PWDRdata
     
    427428    '''
    428429    fl = open(GPXfile,'rb')
    429     HKLFdata = []
     430    HKLFdata = {}
    430431    while True:
    431432        try:
     
    435436        datum = data[0]
    436437        if datum[0] == HKLFname:
    437             HKLFdata = datum[1:][0]
     438            HKLFdata['Data'] = datum[1:][0]       
     439            HKLFdata['Reflection Lists'] = None
    438440    fl.close()
    439441    return HKLFdata
     
    11201122            hapData = HistoPhase[histogram]
    11211123            hId = Histogram['hId']
    1122             limits = Histogram['Limits'][1]
    1123             inst = Histogram['Instrument Parameters']
    1124             inst = dict(zip(inst[3],inst[1]))
    1125             Zero = inst['Zero']
    1126             if 'C' in inst['Type']:
    1127                 try:
    1128                     wave = inst['Lam']
    1129                 except KeyError:
    1130                     wave = inst['Lam1']
    1131                 dmin = wave/(2.0*sind(limits[1]/2.0))
    1132             pfx = str(pId)+':'+str(hId)+':'
    1133             for item in ['Scale','Extinction']:
    1134                 hapDict[pfx+item] = hapData[item][0]
    1135                 if hapData[item][1]:
    1136                     hapVary.append(pfx+item)
    1137             names = G2spc.HStrainNames(SGData)
    1138             for i,name in enumerate(names):
    1139                 hapDict[pfx+name] = hapData['HStrain'][0][i]
    1140                 if hapData['HStrain'][1][i]:
    1141                     hapVary.append(pfx+name)
    1142             controlDict[pfx+'poType'] = hapData['Pref.Ori.'][0]
    1143             if hapData['Pref.Ori.'][0] == 'MD':
    1144                 hapDict[pfx+'MD'] = hapData['Pref.Ori.'][1]
    1145                 controlDict[pfx+'MDAxis'] = hapData['Pref.Ori.'][3]
    1146                 if hapData['Pref.Ori.'][2]:
    1147                     hapVary.append(pfx+'MD')
    1148             else:                           #'SH' spherical harmonics
    1149                 controlDict[pfx+'SHord'] = hapData['Pref.Ori.'][4]
    1150                 controlDict[pfx+'SHncof'] = len(hapData['Pref.Ori.'][5])
    1151                 for item in hapData['Pref.Ori.'][5]:
    1152                     hapDict[pfx+item] = hapData['Pref.Ori.'][5][item]
     1124            if 'PWDR' in histogram:
     1125                limits = Histogram['Limits'][1]
     1126                inst = Histogram['Instrument Parameters']
     1127                inst = dict(zip(inst[3],inst[1]))
     1128                Zero = inst['Zero']
     1129                if 'C' in inst['Type']:
     1130                    try:
     1131                        wave = inst['Lam']
     1132                    except KeyError:
     1133                        wave = inst['Lam1']
     1134                    dmin = wave/(2.0*sind(limits[1]/2.0))
     1135                pfx = str(pId)+':'+str(hId)+':'
     1136                for item in ['Scale','Extinction']:
     1137                    hapDict[pfx+item] = hapData[item][0]
     1138                    if hapData[item][1]:
     1139                        hapVary.append(pfx+item)
     1140                names = G2spc.HStrainNames(SGData)
     1141                for i,name in enumerate(names):
     1142                    hapDict[pfx+name] = hapData['HStrain'][0][i]
     1143                    if hapData['HStrain'][1][i]:
     1144                        hapVary.append(pfx+name)
     1145                controlDict[pfx+'poType'] = hapData['Pref.Ori.'][0]
     1146                if hapData['Pref.Ori.'][0] == 'MD':
     1147                    hapDict[pfx+'MD'] = hapData['Pref.Ori.'][1]
     1148                    controlDict[pfx+'MDAxis'] = hapData['Pref.Ori.'][3]
    11531149                    if hapData['Pref.Ori.'][2]:
    1154                         hapVary.append(pfx+item)
    1155             for item in ['Mustrain','Size']:
    1156                 controlDict[pfx+item+'Type'] = hapData[item][0]
    1157                 hapDict[pfx+item+':mx'] = hapData[item][1][2]
    1158                 if hapData[item][2][2]:
    1159                     hapVary.append(pfx+item+':mx')
    1160                 if hapData[item][0] in ['isotropic','uniaxial']:
    1161                     hapDict[pfx+item+':i'] = hapData[item][1][0]
    1162                     if hapData[item][2][0]:
    1163                         hapVary.append(pfx+item+':i')
    1164                     if hapData[item][0] == 'uniaxial':
    1165                         controlDict[pfx+item+'Axis'] = hapData[item][3]
    1166                         hapDict[pfx+item+':a'] = hapData[item][1][1]
    1167                         if hapData[item][2][1]:
    1168                             hapVary.append(pfx+item+':a')
    1169                 else:       #generalized for mustrain or ellipsoidal for size
    1170                     Nterms = len(hapData[item][4])
    1171                     if item == 'Mustrain':
    1172                         names = G2spc.MustrainNames(SGData)
    1173                         pwrs = []
    1174                         for name in names:
    1175                             h,k,l = name[1:]
    1176                             pwrs.append([int(h),int(k),int(l)])
    1177                         controlDict[pfx+'MuPwrs'] = pwrs
    1178                     for i in range(Nterms):
    1179                         sfx = ':'+str(i)
    1180                         hapDict[pfx+item+sfx] = hapData[item][4][i]
    1181                         if hapData[item][5][i]:
    1182                             hapVary.append(pfx+item+sfx)
    1183                            
    1184             if Print:
    1185                 print '\n Phase: ',phase,' in histogram: ',histogram
    1186                 print 135*'-'
    1187                 print ' Phase fraction  : %10.4f'%(hapData['Scale'][0]),' Refine?',hapData['Scale'][1]
    1188                 print ' Extinction coeff: %10.4f'%(hapData['Extinction'][0]),' Refine?',hapData['Extinction'][1]
    1189                 if hapData['Pref.Ori.'][0] == 'MD':
    1190                     Ax = hapData['Pref.Ori.'][3]
    1191                     print ' March-Dollase PO: %10.4f'%(hapData['Pref.Ori.'][1]),' Refine?',hapData['Pref.Ori.'][2], \
    1192                         ' Axis: %d %d %d'%(Ax[0],Ax[1],Ax[2])
    1193                 else: #'SH' for spherical harmonics
    1194                     PrintSHPO(hapData['Pref.Ori.'])
    1195                 PrintSize(hapData['Size'])
    1196                 PrintMuStrain(hapData['Mustrain'],SGData)
    1197                 PrintHStrain(hapData['HStrain'],SGData)
    1198             HKLd = np.array(G2lat.GenHLaue(dmin,SGData,A))
    1199             refList = []
    1200             for h,k,l,d in HKLd:
    1201                 ext,mul,Uniq,phi = G2spc.GenHKLf([h,k,l],SGData)
    1202                 if ext:
    1203                     continue
    1204                 if 'C' in inst['Type']:
    1205                     pos = 2.0*asind(wave/(2.0*d))+Zero
    1206                     if limits[0] < pos < limits[1]:
    1207                         refList.append([h,k,l,mul,d,pos,0.0,0.0,0.0,0.0,0.0,Uniq,phi,0.0,{}])
    1208                         #last item should contain form factor values by atom type
     1150                        hapVary.append(pfx+'MD')
     1151                else:                           #'SH' spherical harmonics
     1152                    controlDict[pfx+'SHord'] = hapData['Pref.Ori.'][4]
     1153                    controlDict[pfx+'SHncof'] = len(hapData['Pref.Ori.'][5])
     1154                    for item in hapData['Pref.Ori.'][5]:
     1155                        hapDict[pfx+item] = hapData['Pref.Ori.'][5][item]
     1156                        if hapData['Pref.Ori.'][2]:
     1157                            hapVary.append(pfx+item)
     1158                for item in ['Mustrain','Size']:
     1159                    controlDict[pfx+item+'Type'] = hapData[item][0]
     1160                    hapDict[pfx+item+':mx'] = hapData[item][1][2]
     1161                    if hapData[item][2][2]:
     1162                        hapVary.append(pfx+item+':mx')
     1163                    if hapData[item][0] in ['isotropic','uniaxial']:
     1164                        hapDict[pfx+item+':i'] = hapData[item][1][0]
     1165                        if hapData[item][2][0]:
     1166                            hapVary.append(pfx+item+':i')
     1167                        if hapData[item][0] == 'uniaxial':
     1168                            controlDict[pfx+item+'Axis'] = hapData[item][3]
     1169                            hapDict[pfx+item+':a'] = hapData[item][1][1]
     1170                            if hapData[item][2][1]:
     1171                                hapVary.append(pfx+item+':a')
     1172                    else:       #generalized for mustrain or ellipsoidal for size
     1173                        Nterms = len(hapData[item][4])
     1174                        if item == 'Mustrain':
     1175                            names = G2spc.MustrainNames(SGData)
     1176                            pwrs = []
     1177                            for name in names:
     1178                                h,k,l = name[1:]
     1179                                pwrs.append([int(h),int(k),int(l)])
     1180                            controlDict[pfx+'MuPwrs'] = pwrs
     1181                        for i in range(Nterms):
     1182                            sfx = ':'+str(i)
     1183                            hapDict[pfx+item+sfx] = hapData[item][4][i]
     1184                            if hapData[item][5][i]:
     1185                                hapVary.append(pfx+item+sfx)
     1186                               
     1187                if Print:
     1188                    print '\n Phase: ',phase,' in histogram: ',histogram
     1189                    print 135*'-'
     1190                    print ' Phase fraction  : %10.4f'%(hapData['Scale'][0]),' Refine?',hapData['Scale'][1]
     1191                    print ' Extinction coeff: %10.4f'%(hapData['Extinction'][0]),' Refine?',hapData['Extinction'][1]
     1192                    if hapData['Pref.Ori.'][0] == 'MD':
     1193                        Ax = hapData['Pref.Ori.'][3]
     1194                        print ' March-Dollase PO: %10.4f'%(hapData['Pref.Ori.'][1]),' Refine?',hapData['Pref.Ori.'][2], \
     1195                            ' Axis: %d %d %d'%(Ax[0],Ax[1],Ax[2])
     1196                    else: #'SH' for spherical harmonics
     1197                        PrintSHPO(hapData['Pref.Ori.'])
     1198                    PrintSize(hapData['Size'])
     1199                    PrintMuStrain(hapData['Mustrain'],SGData)
     1200                    PrintHStrain(hapData['HStrain'],SGData)
     1201                HKLd = np.array(G2lat.GenHLaue(dmin,SGData,A))
     1202                refList = []
     1203                for h,k,l,d in HKLd:
     1204                    ext,mul,Uniq,phi = G2spc.GenHKLf([h,k,l],SGData)
     1205                    if ext:
     1206                        continue
     1207                    if 'C' in inst['Type']:
     1208                        pos = 2.0*asind(wave/(2.0*d))+Zero
     1209                        if limits[0] < pos < limits[1]:
     1210                            refList.append([h,k,l,mul,d,pos,0.0,0.0,0.0,0.0,0.0,Uniq,phi,0.0,{}])
     1211                            #last item should contain form factor values by atom type
     1212                    else:
     1213                        raise ValueError
     1214                Histogram['Reflection Lists'][phase] = refList
     1215            elif 'HKLF' in histogram:
     1216                inst = Histogram['Instrument Parameters']
     1217                inst = dict(zip(inst[2],inst[1]))
     1218                hId = Histogram['hId']
     1219                hfx = ':%d:'%(hId)
     1220                for item in inst:
     1221                    hapDict[hfx+item] = inst[item]
     1222                pfx = str(pId)+':'+str(hId)+':'
     1223                hapDict[pfx+'Scale'] = hapData['Scale'][0]
     1224                if hapData['Scale'][1]:
     1225                    hapVary.append(pfx+'Scale')
     1226                extApprox,extType,extParms = hapData['Extinction']
     1227                controlDict[pfx+'EType'] = extType
     1228                controlDict[pfx+'EApprox'] = extApprox
     1229                if 'Primary' in extType:
     1230                    Ekey = ['Ep',]
     1231                elif 'Secondary Type II' == extType:
     1232                    Ekey = ['Es',]
     1233                elif 'Secondary Type I' == extType:
     1234                    Ekey = ['Eg',]
    12091235                else:
    1210                     raise ValueError
    1211             Histogram['Reflection Lists'][phase] = refList
     1236                    Ekey = ['Eg','Es']
     1237                for eKey in Ekey:
     1238                    hapDict[pfx+eKey] = extParms[eKey][0]
     1239                    if extParms[eKey][1]:
     1240                        hapVary.append(pfx+eKey)
     1241                if Print:
     1242                    print '\n Phase: ',phase,' in histogram: ',histogram
     1243                    print 135*'-'
     1244                    print ' Scale factor     : %10.4f'%(hapData['Scale'][0]),' Refine?',hapData['Scale'][1]
     1245                    print ' Extinction approx: %10s'%(extApprox),' Type: %15s'%(extType),' tbar: %6.3f'%(extParms['Tbar'])
     1246                    text = ' Parameters       :'
     1247                    for eKey in Ekey:
     1248                        text += ' %4s : %10.3g Refine? '%(eKey,extParms[eKey][0])+str(extParms[eKey][1])
     1249                    print text
     1250                Histogram['Reflection Lists'] = phase       
     1251               
    12121252    return hapVary,hapDict,controlDict
    12131253   
     
    13491389            hapData = HistoPhase[histogram]
    13501390            hId = Histogram['hId']
    1351             pfx = str(pId)+':'+str(hId)+':'
    1352             print ' Final refinement RF, RF^2 = %.2f%%, %.2f%% on %d reflections'   \
    1353                 %(Histogram[pfx+'Rf'],Histogram[pfx+'Rf^2'],Histogram[pfx+'Nref'])
    1354            
    1355             PhFrExtPOSig = {}
    1356             for item in ['Scale','Extinction']:
    1357                 hapData[item][0] = parmDict[pfx+item]
    1358                 if pfx+item in sigDict:
    1359                     PhFrExtPOSig[item] = sigDict[pfx+item]
    1360             if hapData['Pref.Ori.'][0] == 'MD':
    1361                 hapData['Pref.Ori.'][1] = parmDict[pfx+'MD']
    1362                 if pfx+'MD' in sigDict:
    1363                     PhFrExtPOSig['MD'] = sigDict[pfx+'MD']
    1364             else:                           #'SH' spherical harmonics
    1365                 for item in hapData['Pref.Ori.'][5]:
    1366                     hapData['Pref.Ori.'][5][item] = parmDict[pfx+item]
     1391            if 'PWDR' in histogram:
     1392                pfx = str(pId)+':'+str(hId)+':'
     1393                print ' Final refinement RF, RF^2 = %.2f%%, %.2f%% on %d reflections'   \
     1394                    %(Histogram[pfx+'Rf'],Histogram[pfx+'Rf^2'],Histogram[pfx+'Nref'])
     1395               
     1396                PhFrExtPOSig = {}
     1397                for item in ['Scale','Extinction']:
     1398                    hapData[item][0] = parmDict[pfx+item]
    13671399                    if pfx+item in sigDict:
    13681400                        PhFrExtPOSig[item] = sigDict[pfx+item]
    1369             if Print:
    1370                 if 'Scale' in PhFrExtPOSig:
    1371                     print ' Phase fraction  : %10.4f, sig %10.4f'%(hapData['Scale'][0],PhFrExtPOSig['Scale'])
    1372                 if 'Extinction' in PhFrExtPOSig:
    1373                     print ' Extinction coeff: %10.4f, sig %10.4f'%(hapData['Extinction'][0],PhFrExtPOSig['Extinction'])
    13741401                if hapData['Pref.Ori.'][0] == 'MD':
    1375                     if 'MD' in PhFrExtPOSig:
    1376                         print ' March-Dollase PO: %10.4f, sig %10.4f'%(hapData['Pref.Ori.'][1],PhFrExtPOSig['MD'])
    1377                 else:
    1378                     PrintSHPOAndSig(hapData['Pref.Ori.'],PhFrExtPOSig)
    1379             SizeMuStrSig = {'Mustrain':[[0,0,0],[0 for i in range(len(hapData['Mustrain'][4]))]],
    1380                 'Size':[[0,0,0],[0 for i in range(len(hapData['Size'][4]))]],
    1381                 'HStrain':{}}                 
    1382             for item in ['Mustrain','Size']:
    1383                 hapData[item][1][2] = parmDict[pfx+item+':mx']
    1384                 hapData[item][1][2] = min(1.,max(0.1,hapData[item][1][2]))
    1385                 if pfx+item+':mx' in sigDict:
    1386                     SizeMuStrSig[item][0][2] = sigDict[pfx+item+':mx']
    1387                 if hapData[item][0] in ['isotropic','uniaxial']:                   
    1388                     hapData[item][1][0] = parmDict[pfx+item+':i']
    1389                     if item == 'Size':
    1390                         hapData[item][1][0] = min(10.,max(0.001,hapData[item][1][0]))
    1391                     if pfx+item+':i' in sigDict:
    1392                         SizeMuStrSig[item][0][0] = sigDict[pfx+item+':i']
    1393                     if hapData[item][0] == 'uniaxial':
    1394                         hapData[item][1][1] = parmDict[pfx+item+':a']
     1402                    hapData['Pref.Ori.'][1] = parmDict[pfx+'MD']
     1403                    if pfx+'MD' in sigDict:
     1404                        PhFrExtPOSig['MD'] = sigDict[pfx+'MD']
     1405                else:                           #'SH' spherical harmonics
     1406                    for item in hapData['Pref.Ori.'][5]:
     1407                        hapData['Pref.Ori.'][5][item] = parmDict[pfx+item]
     1408                        if pfx+item in sigDict:
     1409                            PhFrExtPOSig[item] = sigDict[pfx+item]
     1410                if Print:
     1411                    if 'Scale' in PhFrExtPOSig:
     1412                        print ' Phase fraction  : %10.4f, sig %10.4f'%(hapData['Scale'][0],PhFrExtPOSig['Scale'])
     1413                    if 'Extinction' in PhFrExtPOSig:
     1414                        print ' Extinction coeff: %10.4f, sig %10.4f'%(hapData['Extinction'][0],PhFrExtPOSig['Extinction'])
     1415                    if hapData['Pref.Ori.'][0] == 'MD':
     1416                        if 'MD' in PhFrExtPOSig:
     1417                            print ' March-Dollase PO: %10.4f, sig %10.4f'%(hapData['Pref.Ori.'][1],PhFrExtPOSig['MD'])
     1418                    else:
     1419                        PrintSHPOAndSig(hapData['Pref.Ori.'],PhFrExtPOSig)
     1420                SizeMuStrSig = {'Mustrain':[[0,0,0],[0 for i in range(len(hapData['Mustrain'][4]))]],
     1421                    'Size':[[0,0,0],[0 for i in range(len(hapData['Size'][4]))]],
     1422                    'HStrain':{}}                 
     1423                for item in ['Mustrain','Size']:
     1424                    hapData[item][1][2] = parmDict[pfx+item+':mx']
     1425                    hapData[item][1][2] = min(1.,max(0.1,hapData[item][1][2]))
     1426                    if pfx+item+':mx' in sigDict:
     1427                        SizeMuStrSig[item][0][2] = sigDict[pfx+item+':mx']
     1428                    if hapData[item][0] in ['isotropic','uniaxial']:                   
     1429                        hapData[item][1][0] = parmDict[pfx+item+':i']
    13951430                        if item == 'Size':
    1396                             hapData[item][1][1] = min(10.,max(0.001,hapData[item][1][1]))                       
    1397                         if pfx+item+':a' in sigDict:
    1398                             SizeMuStrSig[item][0][1] = sigDict[pfx+item+':a']
    1399                 else:       #generalized for mustrain or ellipsoidal for size
    1400                     Nterms = len(hapData[item][4])
    1401                     for i in range(Nterms):
    1402                         sfx = ':'+str(i)
    1403                         hapData[item][4][i] = parmDict[pfx+item+sfx]
    1404                         if pfx+item+sfx in sigDict:
    1405                             SizeMuStrSig[item][1][i] = sigDict[pfx+item+sfx]
    1406             names = G2spc.HStrainNames(SGData)
    1407             for i,name in enumerate(names):
    1408                 hapData['HStrain'][0][i] = parmDict[pfx+name]
    1409                 if pfx+name in sigDict:
    1410                     SizeMuStrSig['HStrain'][name] = sigDict[pfx+name]
    1411             if Print:
    1412                 PrintSizeAndSig(hapData['Size'],SizeMuStrSig['Size'])
    1413                 PrintMuStrainAndSig(hapData['Mustrain'],SizeMuStrSig['Mustrain'],SGData)
    1414                 PrintHStrainAndSig(hapData['HStrain'],SizeMuStrSig['HStrain'],SGData)
     1431                            hapData[item][1][0] = min(10.,max(0.001,hapData[item][1][0]))
     1432                        if pfx+item+':i' in sigDict:
     1433                            SizeMuStrSig[item][0][0] = sigDict[pfx+item+':i']
     1434                        if hapData[item][0] == 'uniaxial':
     1435                            hapData[item][1][1] = parmDict[pfx+item+':a']
     1436                            if item == 'Size':
     1437                                hapData[item][1][1] = min(10.,max(0.001,hapData[item][1][1]))                       
     1438                            if pfx+item+':a' in sigDict:
     1439                                SizeMuStrSig[item][0][1] = sigDict[pfx+item+':a']
     1440                    else:       #generalized for mustrain or ellipsoidal for size
     1441                        Nterms = len(hapData[item][4])
     1442                        for i in range(Nterms):
     1443                            sfx = ':'+str(i)
     1444                            hapData[item][4][i] = parmDict[pfx+item+sfx]
     1445                            if pfx+item+sfx in sigDict:
     1446                                SizeMuStrSig[item][1][i] = sigDict[pfx+item+sfx]
     1447                names = G2spc.HStrainNames(SGData)
     1448                for i,name in enumerate(names):
     1449                    hapData['HStrain'][0][i] = parmDict[pfx+name]
     1450                    if pfx+name in sigDict:
     1451                        SizeMuStrSig['HStrain'][name] = sigDict[pfx+name]
     1452                if Print:
     1453                    PrintSizeAndSig(hapData['Size'],SizeMuStrSig['Size'])
     1454                    PrintMuStrainAndSig(hapData['Mustrain'],SizeMuStrSig['Mustrain'],SGData)
     1455                    PrintHStrainAndSig(hapData['HStrain'],SizeMuStrSig['HStrain'],SGData)
     1456               
     1457            elif 'HKLF' in histogram:
     1458                pfx = str(pId)+':'+str(hId)+':'
     1459# fix after it runs!               
     1460#                hapDict[pfx+'Scale'] = hapData['Scale'][0]
     1461#                if hapData['Scale'][1]:
     1462#                    hapVary.append(pfx+'Scale')
     1463#                extApprox,extType,extParms = hapData['Extinction']
     1464#                controlDict[pfx+'EType'] = extType
     1465#                controlDict[pfx+'EApprox'] = extApprox
     1466#                if 'Primary' in extType:
     1467#                    Ekey = ['Ep',]
     1468#                elif 'Secondary Type II' == extType:
     1469#                    Ekey = ['Es',]
     1470#                elif 'Secondary Type I' == extType:
     1471#                    Ekey = ['Eg',]
     1472#                else:
     1473#                    Ekey = ['Eg','Es']
     1474#                for eKey in Ekey:
     1475#                    hapDict[pfx+eKey] = extParms[eKey][0]
     1476#                    if extParms[eKey][1]:
     1477#                        hapVary.append(pfx+eKey)
     1478#                if Print:
     1479#                    print '\n Phase: ',phase,' in histogram: ',histogram
     1480#                    print 135*'-'
     1481#                    print ' Scale factor     : %10.4f'%(hapData['Scale'][0]),' Refine?',hapData['Scale'][1]
     1482#                    print ' Extinction approx: %10s'%(extApprox),' Type: %15s'%(extType),' tbar: %6.3f'%(extParms['Tbar'])
     1483#                    text = ' Parameters       :'
     1484#                    for eKey in Ekey:
     1485#                        text += ' %4s : %10.3g Refine? '%(eKey,extParms[eKey][0])+str(extParms[eKey][1])
     1486#                    print text
    14151487   
    14161488################################################################################
     
    15491621    histoList.sort()
    15501622    for histogram in histoList:
    1551         Histogram = Histograms[histogram]
    1552         hId = Histogram['hId']
    1553         pfx = ':'+str(hId)+':'
    1554         controlDict[pfx+'Limits'] = Histogram['Limits'][1]
    1555        
    1556         Background = Histogram['Background']
    1557         Type,bakDict,bakVary = GetBackgroundParms(hId,Background)
    1558         controlDict[pfx+'bakType'] = Type
    1559         histDict.update(bakDict)
    1560         histVary += bakVary
    1561        
    1562         Inst = Histogram['Instrument Parameters']
    1563         Type,instDict,insVary = GetInstParms(hId,Inst)
    1564         controlDict[pfx+'histType'] = Type
    1565         if pfx+'Lam1' in instDict:
    1566             controlDict[pfx+'keV'] = 12.397639/instDict[pfx+'Lam1']
    1567         else:
    1568             controlDict[pfx+'keV'] = 12.397639/instDict[pfx+'Lam']           
    1569         histDict.update(instDict)
    1570         histVary += insVary
    1571        
    1572         Sample = Histogram['Sample Parameters']
    1573         Type,sampDict,sampVary = GetSampleParms(hId,Sample)
    1574         controlDict[pfx+'instType'] = Type
    1575         histDict.update(sampDict)
    1576         histVary += sampVary
    1577 
    1578         if Print:
    1579             print '\n Histogram: ',histogram,' histogram Id: ',hId
    1580             print 135*'-'
    1581             Units = {'C':' deg','T':' msec'}
    1582             units = Units[controlDict[pfx+'histType'][2]]
    1583             Limits = controlDict[pfx+'Limits']
    1584             print ' Instrument type: ',Sample['Type']
    1585             print ' Histogram limits: %8.2f%s to %8.2f%s'%(Limits[0],units,Limits[1],units)     
    1586             PrintSampleParms(Sample)
    1587             PrintInstParms(Inst)
    1588             PrintBackground(Background)
    1589        
     1623        if 'PWDR' in histogram:
     1624            Histogram = Histograms[histogram]
     1625            hId = Histogram['hId']
     1626            pfx = ':'+str(hId)+':'
     1627            controlDict[pfx+'Limits'] = Histogram['Limits'][1]
     1628           
     1629            Background = Histogram['Background']
     1630            Type,bakDict,bakVary = GetBackgroundParms(hId,Background)
     1631            controlDict[pfx+'bakType'] = Type
     1632            histDict.update(bakDict)
     1633            histVary += bakVary
     1634           
     1635            Inst = Histogram['Instrument Parameters']
     1636            Type,instDict,insVary = GetInstParms(hId,Inst)
     1637            controlDict[pfx+'histType'] = Type
     1638            if pfx+'Lam1' in instDict:
     1639                controlDict[pfx+'keV'] = 12.397639/instDict[pfx+'Lam1']
     1640            else:
     1641                controlDict[pfx+'keV'] = 12.397639/instDict[pfx+'Lam']           
     1642            histDict.update(instDict)
     1643            histVary += insVary
     1644           
     1645            Sample = Histogram['Sample Parameters']
     1646            Type,sampDict,sampVary = GetSampleParms(hId,Sample)
     1647            controlDict[pfx+'instType'] = Type
     1648            histDict.update(sampDict)
     1649            histVary += sampVary
     1650   
     1651            if Print:
     1652                print '\n Histogram: ',histogram,' histogram Id: ',hId
     1653                print 135*'-'
     1654                Units = {'C':' deg','T':' msec'}
     1655                units = Units[controlDict[pfx+'histType'][2]]
     1656                Limits = controlDict[pfx+'Limits']
     1657                print ' Instrument type: ',Sample['Type']
     1658                print ' Histogram limits: %8.2f%s to %8.2f%s'%(Limits[0],units,Limits[1],units)     
     1659                PrintSampleParms(Sample)
     1660                PrintInstParms(Inst)
     1661                PrintBackground(Background)
     1662        elif 'HKLF' in histogram:
     1663            Histogram = Histograms[histogram]
     1664            hId = Histogram['hId']
     1665            pfx = ':'+str(hId)+':'
     1666            Inst = Histogram['Instrument Parameters']
     1667            controlDict[pfx+'histType'] = Inst[1][0]
     1668            histDict[pfx+'Lam'] = Inst[1][1]
     1669            controlDict[pfx+'keV'] = 12.397639/histDict[pfx+'Lam']                   
    15901670    return histVary,histDict,controlDict
    15911671   
     
    23562436    histoList.sort()
    23572437    for histogram in histoList:
    2358         if 'PWDR' in histogram[:4]:
     2438        if histogram[:4] in ['PWDR','HKLF']:
    23592439            Histogram = Histograms[histogram]
    23602440            hId = Histogram['hId']
     
    27752855            else:
    27762856                dMdv = dMdvh
     2857        elif 'HKLF' in histogram[:4]:
     2858            Histogram = Histograms[histogram]
     2859            hId = Histogram['hId']
     2860            hfx = ':%d:'%(hId)
     2861           
    27772862#    dpdv = penaltyDeriv(parmdict,varylist)
    27782863#    dMdv = np.concatenate((dMdv.T,np.outer(dpdv,dpdv))).T
     
    28072892                Vec = np.sum(dMdvh*np.sqrt(w[xB:xF])*dy[xB:xF],axis=1)
    28082893                Hess = np.inner(dMdvh,dMdvh)
     2894        elif 'HKLF' in histogram[:4]:
     2895            Histogram = Histograms[histogram]
     2896            hId = Histogram['hId']
     2897            hfx = ':%d:'%(hId)
     2898
    28092899#    dpdv = penaltyDeriv(parmdict,varylist)
    28102900#    Vec += dpdv*penaltyFxn(parmdict,varylist)
     
    28482938                dlg.Update(Histogram['wRp'],newmsg='For histogram %d Rwp=%8.3f%s'%(hId,Histogram['wRp'],'%'))[0]
    28492939            M = np.concatenate((M,wdy))
     2940        elif 'HKLF' in histogram[:4]:
     2941            Histogram = Histograms[histogram]
     2942            phase = Histogram['Reflection Lists']
     2943            Phase = Phases[phase]
     2944            hId = Histogram['hId']
     2945            hfx = ':%d:'%(hId)
     2946            pfx = '%d::'%(Phase['pId'])
     2947            phfx = '%d:%d:'%(Phase['pId'],hId)
     2948            SGData = Phase['General']['SGData']
     2949            A = [parmdict[pfx+'A%d'%(i)] for i in range(6)]
     2950            G,g = G2lat.A2Gmat(A)       #recip & real metric tensors
     2951            refList = Histogram['Data']
     2952            Histogram['Nobs'] = len(refList)
     2953            Nobs += Histogram['Nobs']
     2954            StructureFactor(refList,G,hfx,pfx,SGData,calcControls,parmdict)
     2955            df = np.empty(len(refList))
     2956            for i,ref in enumerate(refList):
     2957                ref[7] = parmdict[phfx+'Scale']*ref[9]
     2958                ref[8] = ref[5]/parmdict[phfx+'Scale']
     2959                df[i] = ((ref[5]-ref[7])/ref[6])**2
     2960            M = np.concatenate((M,df))
     2961
     2962
    28502963    Histograms['sumwYo'] = sumwYo
    28512964    Histograms['Nobs'] = Nobs
  • trunk/imports/G2sfact_CIF.py

    r623 r630  
    161161                        ref[5] = Fsq
    162162                    except:
    163                         pass
     163                        try:
     164                            Fsq,Esd = item[itemkeys['_refln_f_squared_meas']].split('(')
     165                            Fsq = float(Fsq)
     166                            ref[8] = Fsq
     167                            ref[5] = Fsq
     168                            ref[6] = float(Esd[:-1])
     169                        except:
     170                            pass
    164171                    if  '_refln_f_squared_sigma' in itemkeys:
    165172                        try:
     
    173180                        ref[5] = Fsq
    174181                    except:
    175                         pass                               
     182                        try:
     183                            Fsq,Esd = item[itemkeys['_refln_f_squared_meas']].split('(')
     184                            Fsq = float(Fsq)**2
     185                            ref[8] = Fsq
     186                            ref[5] = Fsq
     187                            ref[6] = 2.0*sqrt(Fsq)*float(Esd[:-1])
     188                        except:
     189                            pass                               
    176190                    if  '_refln_f_sigma' in itemkeys:
    177191                        try:
Note: See TracChangeset for help on using the changeset viewer.