Initial commit
This commit is contained in:
72
fitlor.py
Executable file
72
fitlor.py
Executable file
@ -0,0 +1,72 @@
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
from math import sin, cos, radians
|
||||
from subprocess import call
|
||||
from collections import Mapping
|
||||
from tempfile import NamedTemporaryFile
|
||||
|
||||
output_format = '{n:6d}{h:4d}{k:4d}{l:4d}'\
|
||||
'{i1:10.2f}{sigi1:10.2f}'\
|
||||
'{th1:8.2f}{p1:8.2f}{chi:8.2f}{phi:8.2f}'
|
||||
|
||||
if len(sys.argv) > 0 and sys.argv[0] == '-fit':
|
||||
call_fit = True
|
||||
sys.argv.pop(0)
|
||||
else:
|
||||
call_fit = False
|
||||
|
||||
if len(sys.argv) > 0:
|
||||
datfile = sys.argv[0]
|
||||
sys.argv.pop(0)
|
||||
else:
|
||||
datfile = 'fitlor_data.txt'
|
||||
|
||||
if len(sys.argv) > 0:
|
||||
outfile = sys.argv[0]
|
||||
sys.argv.pop(0)
|
||||
else:
|
||||
outfile = 'fitlor_out.txt'
|
||||
|
||||
if call_fit:
|
||||
with NamedTemporaryFile('w') as cmdfil:
|
||||
cmdfil.write('k h,k,l,i1,p1,intexp,two_theta,chi,phi\n')
|
||||
cmdfil.write('open %s\n' % outfile)
|
||||
call(('fit', '-F', cmdfil.name))
|
||||
|
||||
tilt_geometry = False
|
||||
lorentz_correction = True
|
||||
|
||||
class Row(object):
|
||||
def __init__(self, keys, values):
|
||||
if keys is None:
|
||||
raise ValueError('no keys')
|
||||
for k,v in zip(keys, values):
|
||||
v = float(v)
|
||||
if v == int(v):
|
||||
v = int(v)
|
||||
setattr(self, k.lower(), v)
|
||||
|
||||
keys = None
|
||||
rows = []
|
||||
with open(datfile) as inp:
|
||||
for line in inp:
|
||||
values = line.split()
|
||||
try:
|
||||
row = Row(keys, values)
|
||||
except ValueError:
|
||||
keys = values
|
||||
continue
|
||||
rows.append(row)
|
||||
row.n = len(rows)
|
||||
row.th1=row.two_theta * 0.2
|
||||
if lorentz_correction:
|
||||
lor_cor = sin(abs(radians(row.two_theta)))
|
||||
if tilt_geometry:
|
||||
lor_cor *= cos(radians(row.chi))
|
||||
row.intcor = row.i1 * lor_cor
|
||||
row.sigcor = row.sigi1 * lor_cor
|
||||
|
||||
with open(outfile, 'w') as out:
|
||||
for row in rows:
|
||||
out.write(output_format.format(row.__dict__) + '\n')
|
||||
|
Reference in New Issue
Block a user