#!/usr/bin/env gnuplot -c
# == DEFINICIONS ==
outputfile = '../output/6_3_2_2' # Nom de la imatge resultant (sense extensió)
datafile = '../data/6_3_2_2.dat' # Nom del fitxer de dades que es vol usar
b_mean_exp_err = 0.00014
a_exp_err = 0.002

# == CONFIGURACIÓ DE L'OUTPUT PEL LATEX ==
set terminal cairolatex size 10cm, 7.5cm font ",10"
set output outputfile.'.tex'

# == CONFIGURACIÓ DEL PLOT ==
set xlabel '$B_b \, (\si{\milli\tesla)}$'
set ylabel '${\scriptstyle (-1)^s} \frac{1}{T^2} =: y \quad (\si{\per\second\squared})$'

# Opcions per la llegenda:
set key above
set key spacing 1.5
set key font ",8.5"

# == CONFIGURACIÓ DEL FIT ==
set fit quiet

f(x) = a*x + b # Funció a fitar
fit f(x) datafile u 7:6 via a, b # Fem el fit de les dades

# Això s'usa per obtenir el valor del coeficient de correlació "r", que estarà
# guardat a la var. "STATS_correlation"
stats datafile u 7:6 name "STATS" nooutput

# Funció per obtenir els dígits significatius d'una expressió
f_sd(n, i) = (int(n) == 0 ? f_sd(n*10, i+1) : (int(n) == 1 ? i+1 : i))
significant_digits(n) = f_sd(n - 10*int(n/10), 0)

significant_digits_r(n) = (n == 1 ? 0 : significant_digits(1 - abs(n)))

error_a = sqrt(STATS_slope_err**2 + a_exp_err**2)
sd_error_a = significant_digits(error_a)
error_b = sqrt(STATS_intercept_err**2 + b_mean_exp_err**2)
sd_error_b = significant_digits(error_b)
r = STATS_correlation
sd_r = significant_digits_r(r)

print("=== ".datafile." ===")
print(sprintf('delta(a) = %.'.sd_error_a.'f, sd=%.0f', error_a, sd_error_a))
print(sprintf('delta(b) = %.'.sd_error_b.'f, sd=%.0f', error_b, sd_error_b))

# Aquesta funció escriu, a partir dels valors del paràmetres a, b i r,
# l'equació de la regressió:
title_f(a, b, r) = sprintf('$y(B_b) = %.'.sd_error_a.'f B_b + (%.'.sd_error_b.'f)$, $r = %.'.sd_r.'f$', a, b, r);

set xtics 0.03

plot datafile u 7:6:10 t "Dades experimentals" w yerr, f(x) t title_f(a, b, r)

# == CONFIGURACIÓ DE L'OUTPUT PER SVG ==
# Això ho uso per generar també una imatge de previsualització que puc carregar
# a l'ordinador per veure més o menys com a sortit el plot sense haver
# d'inserir-ho al LaTeX per veure-ho.
set terminal svg dashed size 600, 600 font "Computer Modern,Tinos,Helvetica,15"
set output outputfile.'.svg'
replot
