#!/usr/bin/env gnuplot -c
outputfile="../output/estacionari"
datafolder="../data/estacionari/"

tamb=20 #Celsius
error_sist_b=1

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

# == CONFIGURACIÓ DEL PLOT ==
set xlabel '$x \, (\si{\centi\meter})$'
set ylabel '$\log((T - T_0) \, \si{\per\celsius})$'

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

f(x) = a*x + b
fit f(x) datafolder.'coure_fit.dat' u 1:(log(column(3) - tamb)) via a, b
stats datafolder.'coure_fit.dat' u 1:2 name "STATSC" nooutput
error_a = STATSC_slope_err
sd_error_a = significant_digits(error_a)
error_b = sqrt(STATSC_slope_err + error_sist_b)
sd_error_b = significant_digits(error_b)
rc = STATSC_correlation
sd_rc = significant_digits_r(rc)
title_f(a, b, rc) = sprintf('$\log (\Theta_C(x)) = %.'.sd_error_a.'f x + %.'.sd_error_b.'f$, $r = %.'.sd_rc.'f$', a, b, rc);

g(x) = c*x + d
fit g(x) datafolder.'ferro_fit.dat' u 1:(log(column(3) - tamb)) via c, d
stats datafolder.'ferro_fit.dat' u 1:2 name "STATSF" nooutput
error_c = STATSF_slope_err
sd_error_c = significant_digits(error_c)
error_d = sqrt(STATSF_slope_err + error_sist_b)
sd_error_d = significant_digits(error_d)
rf = STATSF_correlation
sd_rf = significant_digits_r(rf)
title_g(c, d, rf) = sprintf('$\log (\Theta_F(x)) = %.'.sd_error_c.'f x + %.'.sd_error_d.'f$, $r = %.'.sd_rf.'f$', c, d, rf);

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('delta(c) = %.'.sd_error_c.'f, sd=%.0f', error_c, sd_error_c))
print(sprintf('delta(d) = %.'.sd_error_d.'f, sd=%.0f', error_d, sd_error_d))
print(sprintf('rc = %.'.sd_rc.'f, sd=%.0f', rc, sd_rc))
print(sprintf('rf = %.'.sd_rf.'f, sd=%.0f', rf, sd_rf))

plot datafolder.'coure.dat' u 1:(log(column(3) - tamb)):(column(4)/(column(3) - tamb)) w yerr t 'Coure', \
     datafolder.'ferro.dat' u 1:(log(column(3) - tamb)):(column(4)/(column(3) - tamb)) w yerr t 'Ferro', \
     f(x) t title_f(a, b, rc), \
     g(x) t title_g(c, d, rf)

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