#!/usr/bin/python # -*- coding: utf-8 -*- from __future__ import division from math import pi from intervals import Interval import sys def read_tex_tab(name, xoffset = 0.0): with open(name) as f: f.readline() for line in f.readlines(): if line.strip() != r"\hline": line = [x.strip() for x in line.rstrip("\\\\\n").strip().split("&")] piezopos_um = float(line[2]) fname = line[3].split("(")[0].strip() if not fname.startswith("-"): yield (piezopos_um + xoffset, fname) def interval_from_gnuplot_pm(line): line = line.split("(")[0].strip() vname, rest = line.split("=", 1) vname = vname.strip() rest = rest.strip() a,da = map(float, rest.split("+/-")) vvalue = Interval(a - da, a + da) #print(vname, vvalue, line) return vname, vvalue def get_Q(fname): vars = {} with open(fname) as f: for line in f: if line.find("$ Q") != -1: # Q_{load} := \frac{ν_0}{Δν} = 6.43\cdot 10^{5} \pm 2.5\cdot 10^{4} $ vstr = line.split("=")[-1].replace("$", "").strip().replace("\\pm", "+/-").replace("\\cdot 10^{", "E").replace("}", "") vname, vvalue = interval_from_gnuplot_pm("Q=%s"%vstr) #print >>sys.stderr, vstr, vname, vvalue return vvalue #cat fits/F0054CH1.result |grep +/- # FIXME better to just do one since they are independent measurements! # -2.4 #items = list(read_tex_tab("positionsA.inc", 1.73)) + list(read_tex_tab("positionsB.inc", -0.7)) # FIXME items = list(read_tex_tab("positionsB.inc", -13.85)) #items = list(read_tex_tab("positionsA.inc", 0)) # -13.85)) for piezopos_um, fnamex in items: fname = "fits/F00%sCH1.g" % fnamex #print(piezopos_um,fname) Q = get_Q(fname) Qmin, Qmax = Q print("%s,%s,%s" % (piezopos_um,Qmin,Qmax)) #gnuplot> plot "Q" using 1:2:2:3 with yerrorbars