#!/usr/bin/env gnuplot -c
# == DEFINICIONS ==
outputfile = ARG5 # Nom de la imatge resultant (sense extensió)
datafile = ARG1 # Nom del fitxer de dades que es vol usar
filederiva = ARG2
fileahundred = ARG3
filefiftythree = ARG4
error_sist_b = 0.001 # Error sistemàtic en l'eix y

# Set to 1 for linear fitting.
# Set to 2 for no fitting.
linear = 2

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

# == CONFIGURACIÓ DEL PLOT ==
set xlabel "$t \\, (\\si{\\second})$"
set ylabel "$\\varepsilon \\, (\\si{\\milli\\volt})$"

set autoscale yfixmin
set autoscale xfixmax

# Opcions per la llegenda:
set key above
set key spacing 1.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 - n))

if (linear == 1) {
    f(x) = a*x + b # Funció a fitar
    fit f(x) filederiva u 1:2 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 filederiva u 1:2 name "STATS" nooutput

    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("=== ".filederiva." ===")
    print("* Línia base: fit lineal")
}

if (linear == 2) {
    print("=== ".filederiva." ===")
    print("* Línia base: no es fa fit")

    f(x) = 0 # Cap fit
}

print("* t = 0 ºC")
stats filederiva u (column(2) - f(column(1))) name "STATS_ZERO" nooutput
sign_dig_epsilon_100 = significant_digits(STATS_ZERO_stddev)
print(sprintf("    - epsilon = %.".sign_dig_epsilon_100."f +- %.".sign_dig_epsilon_100."f", STATS_ZERO_mean, STATS_ZERO_stddev))

print("* t = 100 ºC")
stats fileahundred u (column(2) - f(column(1))) name "STATS_AHUNDRED" nooutput
sign_dig_epsilon_100 = significant_digits(STATS_AHUNDRED_stddev)
print(sprintf("    - epsilon = %.".sign_dig_epsilon_100."f +- %.".sign_dig_epsilon_100."f", STATS_AHUNDRED_mean, STATS_AHUNDRED_stddev))

print("* t = 53 ºC")
stats filefiftythree u (column(2) - f(column(1))) name "STATS_FIFTYTHREE" nooutput
sign_dig_epsilon_100 = significant_digits(STATS_FIFTYTHREE_stddev)
print(sprintf("    - epsilon = %.".sign_dig_epsilon_100."f +- %.".sign_dig_epsilon_100."f", STATS_FIFTYTHREE_mean, STATS_FIFTYTHREE_stddev))

plot [0:] datafile u 1:(column(2) - f(column(1))) t "Força electromotriu mesurada" w l, STATS_AHUNDRED_mean t "$\\varepsilon(\\SI{100}{\\celsius})$", STATS_FIFTYTHREE_mean t "$\\varepsilon(\\SI{53}{\\celsius})$"

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