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

debugmode = 0 # 0: off, 1: on

print('== '.datafile.' ==')

# == 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 "$m \\, (\\si{\\gram})$"

set autoscale yfixmin
set autoscale xfixmax

# Opcions per la llegenda:
set key above
set key spacing 1.5

# == CONFIGURACIÓ DEL FIT ==
set fit quiet

f(x) = a*x + b
g(x) = c*x + d

fit f(x) datafilelow u 1:(column(2)/1000) via a, b
fit g(x) datafilehigh u 1:(column(2)/1000) via c, d

if (debugmode) {
    stats datafilelow u 1:(column(2)/1000) name 'LOW' nooutput

    print(sprintf('a = %.4f', a))
    print(sprintf('b = %.4f', b))
    print(sprintf('R = %.4f', LOW_correlation))

    stats datafilehigh u 1:(column(2)/1000) name 'HIGH' nooutput

    print(sprintf('c = %.4f', c))
    print(sprintf('d = %.4f', d))
    print(sprintf('R = %.4f', HIGH_correlation))
}

stats datafile u 1:(column(2)/1000) name 'STATS' nooutput

print(sprintf('min = (%.4f, %.4f)', STATS_pos_min_y, STATS_min_y))
print(sprintf('max = (%.4f, %.4f)', STATS_pos_max_y, STATS_max_y))

M = STATS_max_y - f((STATS_pos_min_y + STATS_pos_max_y)/2)
print(sprintf('M = %.4f', M))

deltam = STATS_max_y - g((STATS_pos_min_y + STATS_pos_max_y)/2)
print(sprintf('delta m = %.4f', deltam))

set arrow 1 from ((STATS_pos_min_y + STATS_pos_max_y)/2),STATS_max_y to \
    ((STATS_pos_min_y + STATS_pos_max_y)/2),g(STATS_pos_min_y)
set arrow 1 nohead

set label 1 "$\\Delta m$" at \
    ((STATS_pos_min_y + STATS_pos_max_y)/2),((STATS_max_y + g(STATS_pos_min_y))/2) \
    right offset -0.5

plot datafile u 1:(column(2)/1000) w p pt 7 ps 0.4 t "Dades experimentals", \
    f(x) t "1r estat estable", g(x) t "2n estat estable"

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

print('')
