#!/usr/bin/env gnuplot -c
# == DEFINICIONS ==
outputfile = ARG2 # Nom de la imatge resultant (sense extensió)
datafile = ARG1 # Nom del fitxer de dades que es vol usar
shouldfit = ARG4

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

# == CONFIGURACIÓ DEL PLOT ==
set xlabel '$\dot{\gamma} \, (\si{\per\second})$'
set ylabel '$\tau \, (\si{\pascal})$'

set yrange [0:]

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

if (shouldfit == "0") {
    plot datafile u 9:11:10:12 w xyerr ps 0.8 pt 2 lc ARG3 t "Experimental data"
} else {
    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 9:11 via a, b
    stats datafile u 9:11 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('$\tau(\dot{\gamma}) = %.'.sd_error_a.'f \dot{\gamma} + %.'.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 9:11:10:12 w xyerr ps 0.8 pt 2 lc ARG3 t "Experimental data", \
         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
