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

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

# == CONFIGURACIÓ DEL PLOT ==
set xlabel 'Força magnètica $(\si{\milli\newton})$'
set ylabel 'Velocitat $(\si{\centi\meter \per \second})$'

# 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 1: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 1: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 - n))

error_a = STATS_slope_err
sd_error_a = significant_digits(error_a)
error_b = sqrt(STATS_slope_err + error_sist_b)
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('$V(F) = %.'.sd_error_a.'f F + (%.'.sd_error_b.'f)$, $r = %.'.sd_r.'f$', a, b, r);

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