Changeset 1459 for trunk/GSASIIstrIO.py


Ignore:
Timestamp:
Aug 8, 2014 2:59:09 PM (7 years ago)
Author:
vondreele
Message:

add instrument parameters (flight path & detector 2-theta) needed for TOF
rework reflection list for TOF
change default diff curve & reflection marker offsets
change weighting to instrument constants calibration to be 1/esd2 from peak fit positions - works a lot better
1st shot at TOF Rietveld refinement with derivatives - need to be checked for correctness (some are wrong)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIstrIO.py

    r1415 r1459  
    239239            hId = Histogram['hId']
    240240            hfx = ':%d:'%(hId)
    241             keV = controlDict[hfx+'keV']
    242             for El in FFtables:
    243                 Orbs = G2el.GetXsectionCoeff(El.split('+')[0].split('-')[0])
    244                 FP,FPP,Mu = G2el.FPcalc(Orbs, keV)
    245                 FFtables[El][hfx+'FP'] = FP
    246                 FFtables[El][hfx+'FPP'] = FPP               
     241            if 'X' in controlDict[hfx+'histType']:
     242                keV = controlDict[hfx+'keV']
     243                for El in FFtables:
     244                    Orbs = G2el.GetXsectionCoeff(El.split('+')[0].split('-')[0])
     245                    FP,FPP,Mu = G2el.FPcalc(Orbs, keV)
     246                    FFtables[El][hfx+'FP'] = FP
     247                    FFtables[El][hfx+'FPP'] = FPP               
    247248           
    248249def GetPhaseNames(GPXfile):
     
    17181719                limits = Histogram['Limits'][1]
    17191720                inst = Histogram['Instrument Parameters'][0]
    1720                 Zero = inst['Zero'][1]
     1721                Zero = inst['Zero'][0]
    17211722                if 'C' in inst['Type'][1]:
    17221723                    try:
     
    17251726                        wave = inst['Lam1'][1]
    17261727                    dmin = wave/(2.0*sind(limits[1]/2.0))
     1728                elif 'T' in inst['Type'][0]:
     1729                    dmin = limits[0]/inst['difC'][1]
    17271730                pfx = str(pId)+':'+str(hId)+':'
    17281731                for item in ['Scale','Extinction']:
     
    18101813                            pos = 2.0*asind(wave/(2.0*d))+Zero
    18111814                            if limits[0] < pos < limits[1]:
    1812                                 refList.append([h,k,l,mul,d,pos,0.0,0.0,0.0,0.0,0.0,0.0])
     1815                                refList.append([h,k,l,mul,d, pos,0.0,0.0,0.0,0.0, 0.0,0.0])
    18131816                                Uniq.append(uniq)
    18141817                                Phi.append(phi)
    1815                         else:
    1816                             raise ValueError
     1818                        elif 'T' in inst['Type'][0]:
     1819                            pos = inst['difC'][1]*d+inst['difA'][1]*d**2+inst['difB'][1]*d**3+Zero
     1820                            if limits[0] < pos < limits[1]:
     1821                                wave = inst['difC'][1]*d/(252.816*inst['fltPath'][0])
     1822                                refList.append([h,k,l,mul,d, pos,0.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.0,wave])
     1823                                Uniq.append(uniq)
     1824                                Phi.append(phi)
    18171825                    Histogram['Reflection Lists'][phase] = {'RefList':np.array(refList),'FF':{}}
    18181826            elif 'HKLF' in histogram:
     
    22182226            if len(Inst[item]) > 2 and Inst[item][2]:
    22192227                insVary.append(insName)
    2220 #        instDict[pfx+'X'] = max(instDict[pfx+'X'],0.001)
    2221 #        instDict[pfx+'Y'] = max(instDict[pfx+'Y'],0.001)
    2222         instDict[pfx+'SH/L'] = max(instDict[pfx+'SH/L'],0.0005)
     2228        if 'C' in dataType:
     2229            instDict[pfx+'SH/L'] = max(instDict[pfx+'SH/L'],0.0005)
    22232230        return dataType,instDict,insVary
    22242231       
     
    22812288    def PrintInstParms(Inst):
    22822289        print >>pFile,'\n Instrument Parameters:'
    2283         ptlbls = ' name  :'
    2284         ptstr =  ' value :'
    2285         varstr = ' refine:'
    22862290        insKeys = Inst.keys()
    22872291        insKeys.sort()
    2288         for item in insKeys:
    2289             if item not in ['Type','Source']:
    2290                 ptlbls += '%12s' % (item)
    2291                 ptstr += '%12.6f' % (Inst[item][1])
    2292                 if item in ['Lam1','Lam2','Azimuth']:
    2293                     varstr += 12*' '
    2294                 else:
    2295                     varstr += '%12s' % (str(bool(Inst[item][2])))
    2296         print >>pFile,ptlbls
    2297         print >>pFile,ptstr
    2298         print >>pFile,varstr
     2292        iBeg = 0
     2293        Ok = True
     2294        while Ok:
     2295            ptlbls = ' name  :'
     2296            ptstr =  ' value :'
     2297            varstr = ' refine:'
     2298            iFin = min(iBeg+9,len(insKeys))
     2299            for item in insKeys[iBeg:iFin]:
     2300                if item not in ['Type','Source']:
     2301                    ptlbls += '%12s' % (item)
     2302                    ptstr += '%12.6f' % (Inst[item][1])
     2303                    if item in ['Lam1','Lam2','Azimuth','fltPath','2-theta',]:
     2304                        varstr += 12*' '
     2305                    else:
     2306                        varstr += '%12s' % (str(bool(Inst[item][2])))
     2307            print >>pFile,ptlbls
     2308            print >>pFile,ptstr
     2309            print >>pFile,varstr
     2310            iBeg = iFin
     2311            if iBeg == len(insKeys):
     2312                Ok = False
     2313            else:
     2314                print >>pFile,'\n'
    22992315       
    23002316    def PrintSampleParms(Sample):
     
    23472363            Type,instDict,insVary = GetInstParms(hId,Inst)
    23482364            controlDict[pfx+'histType'] = Type
    2349             if pfx+'Lam1' in instDict:
    2350                 controlDict[pfx+'keV'] = 12.397639/instDict[pfx+'Lam1']
    2351             else:
    2352                 controlDict[pfx+'keV'] = 12.397639/instDict[pfx+'Lam']           
     2365            if 'XC' in Type:
     2366                if pfx+'Lam1' in instDict:
     2367                    controlDict[pfx+'keV'] = 12.397639/instDict[pfx+'Lam1']
     2368                else:
     2369                    controlDict[pfx+'keV'] = 12.397639/instDict[pfx+'Lam']           
    23532370            histDict.update(instDict)
    23542371            histVary += insVary
     
    23832400            Inst = Histogram['Instrument Parameters'][0]
    23842401            controlDict[pfx+'histType'] = Inst['Type'][0]
    2385             histDict[pfx+'Lam'] = Inst['Lam'][1]
    2386             controlDict[pfx+'keV'] = 12.397639/histDict[pfx+'Lam']                   
     2402            if 'X' in Inst['Type'][0]:
     2403                histDict[pfx+'Lam'] = Inst['Lam'][1]
     2404                controlDict[pfx+'keV'] = 12.397639/histDict[pfx+'Lam']                   
    23872405    return histVary,histDict,controlDict
    23882406   
     
    24982516       
    24992517    def PrintInstParmsSig(Inst,instSig):
    2500         ptlbls = ' names :'
    2501         ptstr =  ' value :'
    2502         sigstr = ' sig   :'
    25032518        refine = False
    25042519        insKeys = instSig.keys()
    25052520        insKeys.sort()
    2506         for name in insKeys:
    2507             if name not in  ['Type','Lam1','Lam2','Azimuth','Source']:
    2508                 ptlbls += '%12s' % (name)
    2509                 ptstr += '%12.6f' % (Inst[name][1])
    2510                 if instSig[name]:
    2511                     refine = True
    2512                     sigstr += '%12.6f' % (instSig[name])
    2513                 else:
    2514                     sigstr += 12*' '
    2515         if refine:
    2516             print >>pFile,'\n Instrument Parameters:'
    2517             print >>pFile,ptlbls
    2518             print >>pFile,ptstr
    2519             print >>pFile,sigstr
     2521        iBeg = 0
     2522        Ok = True
     2523        while Ok:
     2524            ptlbls = ' names :'
     2525            ptstr =  ' value :'
     2526            sigstr = ' sig   :'
     2527            iFin = min(iBeg+9,len(insKeys))
     2528            for name in insKeys[iBeg:iFin]:
     2529                if name not in  ['Type','Lam1','Lam2','Azimuth','Source','fltPath']:
     2530                    ptlbls += '%12s' % (name)
     2531                    ptstr += '%12.6f' % (Inst[name][1])
     2532                    if instSig[name]:
     2533                        refine = True
     2534                        sigstr += '%12.6f' % (instSig[name])
     2535                    else:
     2536                        sigstr += 12*' '
     2537            if refine:
     2538                print >>pFile,'\n Instrument Parameters:'
     2539                print >>pFile,ptlbls
     2540                print >>pFile,ptstr
     2541                print >>pFile,sigstr
     2542            iBeg = iFin
     2543            if iBeg == len(insKeys):
     2544                Ok = False
    25202545       
    25212546    def PrintSampleParmsSig(Sample,sampleSig):
Note: See TracChangeset for help on using the changeset viewer.