#!/usr/bin/env gnuplot -c
# == DEFINICIONS ==
outputfile = '../output/4_4_1' # Nom de la imatge resultant (sense extensió)
datafile1 = '../data/4_4_1_1.dat' # Nom del fitxer de dades que es vol usar
datafile2 = '../data/4_4_1_2.dat' # Nom del fitxer de dades que es vol usar

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

# == CONFIGURACIÓ DEL PLOT ==
set xlabel '$V \, (\si{\volt})$'
set ylabel '$I \, (\si{\milli\ampere})$'

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

# == CONFIGURACIÓ DEL 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)))

# FITS:

f1(x) = a1*x + b1 # Funció a fitar
fit f1(x) datafile1 u 1:2 via a1, b1 # Fem el fit de les dades

f2(x) = a2*x + b2 # Funció a fitar
fit f2(x) datafile2 u 1:2 via a2, b2 # 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 datafile1 u 1:2 name "STATS1" nooutput
stats datafile2 u 1:2 name "STATS2" nooutput

error_a_1 = STATS1_slope_err
sd_error_a_1 = significant_digits(error_a_1)
error_b_1 = STATS1_intercept_err
sd_error_b_1 = significant_digits(error_b_1)
r_1 = STATS1_correlation
sd_r_1 = significant_digits_r(r_1)

print("=== ".datafile1." ===")
print(sprintf('delta(a) = %.'.sd_error_a_1.'f, sd=%.0f', error_a_1, sd_error_a_1))
print(sprintf('delta(b) = %.'.sd_error_b_1.'f, sd=%.0f', error_b_1, sd_error_b_1))

error_a_2 = STATS2_slope_err
sd_error_a_2 = significant_digits(error_a_2)
error_b_2 = STATS2_intercept_err
sd_error_b_2 = significant_digits(error_b_2)
r_2 = STATS2_correlation
sd_r_2 = significant_digits_r(r_2)

print("=== ".datafile2." ===")
print(sprintf('delta(a) = %.'.sd_error_a_2.'f, sd=%.0f', error_a_2, sd_error_a_2))
print(sprintf('delta(b) = %.'.sd_error_b_2.'f, sd=%.0f', error_b_2, sd_error_b_2))

# Aquesta funció escriu, a partir dels valors del paràmetres a_i (c), b_i (d),
# sd_error_a_i, sd_error_b_i, 'i', r i sd_r, l'equació de la regressió:
title_f(c, d, r, sd_error_c, sd_error_d, sd_r, i) = sprintf('$I_'.i.'(V) = %.'.sd_error_c.'f V + (%.'.sd_error_d.'f)$, $r = %.'.sd_r.'f$', c, d, r);

plot datafile1 u 1:2 t "Dades làmina 1" w p, \
     datafile2 u 1:2 t "Dades làmina 2" w p, \
     f1(x) t title_f(a1, b1, r_1, sd_error_a_1, sd_error_b_1, sd_r_1, 1), \
     f2(x) t title_f(a2, b2, r_2, sd_error_a_2, sd_error_b_2, sd_r_2, 2)


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