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

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

# == CONFIGURACIÓ DEL PLOT ==
set xlabel '$\tan(\alpha) =: x$'
set ylabel '$B_b \, (\si{\milli\tesla)}$'

# 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 4:3 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 4:3 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 = STATS_slope_err
sd_error_a = significant_digits(error_a)
error_b = STATS_intercept_err
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('$B_b(x) = %.'.sd_error_a.'f x + (%.'.sd_error_b.'f)$, $r = %.'.sd_r.'f$', a, b, r);

plot datafile u 4:3:5 t "Dades experimentals" w xerr, 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
