#!/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
datafitfile = ARG4

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

# == CONFIGURACIÓ DEL PLOT ==
set xlabel '$\frac{1}{T} \, (\si{\per\kelvin})$'
set ylabel '$\log(\mu \cdot \si{\second\per\milli\pascal})$'

set yrange [0:]

# Opcions per la llegenda:
set key above
set key spacing 1.5
set key font ",8.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/($4 + 273.15)):(log($2)) via a, b
stats datafile u (1/($4 + 273.15)):(log($2)) name "STATS" nooutput
error_a = STATS_slope_err
sd_error_a = significant_digits(error_a)
error_b = STATS_intercept_err
sd_error_b = significant_digits(error_b)
r = STATS_correlation
sd_r = significant_digits_r(r)
title_f(a, b, r) = sprintf('($\log(\mu)) \left(\frac{1}{T}\right) = %.'.sd_error_a.'f \frac{1}{T} + (%.'.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))

set xtics 0.0001

plot datafile u (1/($4 + 273.15)):(log($2)):(0.2/((($4 + 273.15)**2))):(5/$2) 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
