#!/usr/bin/env gnuplot -c
outputfile="../output/graph"
datafile="../data/regresio.dat"

# == CONFIGURACIÓ DE L'OUTPUT PEL LATEX ==
set terminal cairolatex size 11cm, 8cm
set output outputfile.'.tex'

# == CONFIGURACIÓ DEL PLOT ==
set xlabel '$\frac{Q_s}{Q_s + Q_f}$'
set ylabel '$\frac{w_s}{w}$'

# Opcions per la llegenda:
set key above
set key spacing 1.5

# == FIT ==
set fit quiet

# 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)))

f(x) = a*x + b
fit f(x) datafile u 1:2 via a, b
stats datafile u 1:2 name "STATS" nooutput
error_a = STATS_slope_err
sd_error_a = significant_digits(error_a)
error_b = STATS_slope_err
sd_error_b = significant_digits(error_b)
r = STATS_correlation
sd_r = significant_digits_r(r)
title_f(a, b, r) = sprintf('$\frac{Q_s}{Q_s + Q_f}(\frac{w_s}{w}) = %.'.sd_error_a.'f \frac{w_s}{w} + %.'.sd_error_b.'f$, $r = %.'.sd_r.'f$', a, b, r);

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))
print(sprintf('r = %.'.sd_r.'f, sd=%.0f', r, sd_r))

plot datafile u 1:2 t "Dades", \
     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
