gelinive

Créer des profils du manteau neigeux - retour accueil

git clone git://bebou.netlib.re/gelinive
Log | Files | Refs | README |

commit 601a520edefbb4894f4de73f295b2a81e19f3288
parent 2b499131cd700ac17a2def71e86dddeeaae796ae
Auterice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Wed, 13 Mar 2024 13:50:28 +0100

Ajout températures + Changement graphisme + facto

Gros changements.

La nouvelle fonctionnalité est l'ajout des courbes de températures et
des titres sur les graphs. Modification des tests en fonction.

L'apparence des graphs a également beaucoup changé.

Légère refonte du code pour être plus lisible.

Gestion des arguments très douteuse mais c'est bien comme ça pour
l'instant.

Diffstat:
M.gitignore | 8+++-----
Mgelinive.1 | 40+++++++++++++++++++++++++++-------------
Mgelinive.5 | 22+++++++++++++++++++---
Mgeliniveplot | 64+++++++++++++++++++++++++++++++++-------------------------------
Mgelinivetest | 46+++++++++++++++++++++++++++++++---------------
Mtests/hohneck.png | 0
Atests/hohnecktemp | 20++++++++++++++++++++
Mtests/miribel.png | 0
Atests/miribeltemp | 6++++++
Mtests/test | 12++++++------
10 files changed, 145 insertions(+), 73 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -4,13 +4,11 @@ !mail !makefile !.gitignore -!data !tests/miribel !tests/hohneck -!tests/miribel.png -!tests/hohneck.png -!tests/miribeltab -!tests/hohnecktab +!tests/*.png +!tests/*tab +!tests/*temp !tests/tests !README.md !gelinive.? diff --git a/gelinive.1 b/gelinive.1 @@ -3,17 +3,18 @@ .SS NOM .LP -gelinive - calcul la résistance au battage +gelinive - produire des graphiques de profils stratigraphiques du manteau neigeux .SS SYNOPSIS .LP -[< \fIENTREE\fR] \fBgelinive\fR [\fITABLEAU\fR] +[< \fIPROFIL\fR] \fBgelinive\fR [\fIPROFIL\fR [\fITITRE\fR [\fITABLEAU\fR [\fITEMPERATURE\fR]]]] .SS DESCRIPTION .LP -Calcul la résistance au battaque et l\(cqenfoncement total d\(cqune sonde dans la -neige. En fait un graphique png à l\(cqaide de geliniveplot. -Pour le format en entrée et celui du tableau produit voir gelinive(5). +Calcul la résistance au battage et l\(cqenfoncement total d\(cqune sonde dans la +neige. En fait un graphique png en y ajoutant optionnellement la température +des couche. Pour le format en entrée, celui du tableau éventuellement produit +et le format des relevés de température voir gelinive(5). .SS UTILISATION ET EXEMPLES .LP @@ -26,30 +27,43 @@ gelinive Ou lire données depuis un fichier : .LP .EX -< data gelinive +< profil gelinive .EE .PP On peut rediriger la sortie vers un fichier : .LP .EX -< data gelinive > image.png +< profil gelinive > image.png .EE .PP Ou les piper directement dans un visionneur d\(cqimage : .LP .EX -< data gelinive | feh -. - +< profil gelinive | feh -. - .EE .PP -Si l\(cqon renseigne un chemin à la place de TABLEAU alors un -fichier sera créé à ce chemin avec les données calculées de résistance au -battage et d\(cqenfoncement pour n coups. +Si l\(cqon renseigne le fichier de profil en argument on peut également renseigner +un titre de graph, le chemin vers un tableau complet à créer et le chemin vers +un fichier avec les données de températures : .LP .EX -< data gelinive data_with_Re > image.png +gelinive profil \(dqTitre\(dq tableau temperature .EE .PP -Si l\(cqon ne renseigne pas TABLEAU aucun fichier ne sera créé. +Finalement pour l\(cq\fIexemple le plus typique\fR, on peut rediriger la sortie pour +créer une image : +.LP +.EX +gelinive profil \(dqTitre\(dq tableau temperature > image.png +.EE +.SS +BUGS ET AMELIORATIONS +.LP +Pour l\(cqinstant et pour faciliter le développement, chaque argument optionnel +nécessite l\(cqexistance du précédent pour être pris en compte. Pour afficher une +courbe de température il faut donc créer un fichier de tableau et donner un +titre au graph. Il ne sera pas possible de créer un graph avec une courbe de +température mais sans titre par exemple. .SS VOIR AUSSI .LP diff --git a/gelinive.5 b/gelinive.5 @@ -3,7 +3,7 @@ .SS NAME .LP -gelinive - format des sondages par battage +gelinive - format des sondages par battage et des revelés de températures .SS SYNOPSIS .LP @@ -12,9 +12,13 @@ gelinive DESCRIPTION .LP gelinive(1) prend en entrée des données concernant le manteau neigeux sous un -certain format. +certain format et les températures sous un autre. +.PP +Tous les champs sont délimités par une tabulation (tab). .SS -CHAMPS SÉPARÉS PAR DES TABULATIONs +LES FORMATS +.SS +PROFIL STRATIGRAPHIQUE .LP L\(cqordre et le contenu des champs sont : .IP "1. " @@ -61,6 +65,18 @@ R la résistance au battage .IP "8. " H la hauteur au-dessus du sol (cm) .SS +TEMPERATURES +.LP +Le contenu est : +.IP "1. " +H la hauteur (cm) +.if n \ +.sp -1 +.if t \ +.sp -0.25v +.IP "2. " +C la température (°C) +.SS VOIR AUSSI .LP gelinive(1) diff --git a/geliniveplot b/geliniveplot @@ -1,4 +1,4 @@ -#!/usr/bin/gnuplot +#! /usr/bin/gnuplot -c # # # G N U P L O T @@ -11,7 +11,7 @@ # faq, bugs, etc: type "help FAQ" # immediate help: type "help" (plot window: hit 'h') # set terminal qt 0 font "Sans,9" -set term pngcairo size 1000,500 font "Sans,9" +set term pngcairo size 1000,500 font "Sans,12" # set terminal dumb size 150 75 # set output "|feh -" unset clip points @@ -19,7 +19,7 @@ set clip one unset clip two unset clip radial set errorbars front 1.000000 -set border 31 front lt black linewidth 1.000 dashtype solid +set border 31 front lt black linewidth 3.000 dashtype solid set zdata set ydata set xdata @@ -27,15 +27,15 @@ set y2data set x2data set boxwidth set boxdepth 0 -set style fill transparent solid 0.65 border rgb "dark-violet" -set style rectangle back fc bgnd fillstyle solid 1.00 border lt -1 +set style fill transparent solid 1 +set style rectangle back fc bgnd fillstyle solid 1.00 border lt -1 set style circle radius graph 0.02 set style ellipse size graph 0.05, 0.03 angle 0 units xy set dummy x, y set format x "% h" set format y "% h" set format x2 "% h" -set format y2 "% h" +set format y2 "-% h" set format z "% h" set format cb "% h" set format r "% h" @@ -44,22 +44,23 @@ set timefmt "%d/%m/%y,%H:%M" set angles radians set tics back set grid nopolar -set grid xtics mxtics ytics mytics noztics nomztics nortics nomrtics \ - nox2tics nomx2tics noy2tics nomy2tics nocbtics nomcbtics -set grid layerdefault linecolor -1 linewidth 1.000 dashtype solid, linecolor -1 linewidth 0.200 dashtype solid +set grid xtics nomxtics ytics nomytics noztics nomztics nortics nomrtics \ + nox2tics nomx2tics y2tics nomy2tics nocbtics nomcbtics +set grid front lt 0 linewidth 1.200 +unset grid unset raxis set theta counterclockwise right set style parallel front lt black linewidth 2.000 dashtype solid -set key notitle -set key fixed right top vertical Right noreverse enhanced autotitle nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 +set key noautotitle +set key at 300,110 horizontal noreverse enhanced noautotitle nobox +set key noinvert samplen 0.1 spacing 0 width 0 height 0 set key maxcolumns 0 maxrows 0 set key noopaque unset label unset arrow unset style line unset style arrow -set style histogram clustered gap 0 title textcolor lt -1 +set style histogram clustered gap 0 unset object unset walls set style textbox transparent margins 1.0, 1.0 border lt -1 linewidth 1.0 @@ -103,29 +104,28 @@ unset x2zeroaxis unset y2zeroaxis set xyplane relative 0.5 set tics scale 1, 0.5, 1, 1, 1 -set mxtics 10.000000 -set mytics 10.000000 +set mxtics 4.000000 +set mytics 2.000000 +set my2tics 4.000000 set mztics default set mx2tics default -set my2tics default set mcbtics default set mrtics default set nomttics -set xtics border in scale 1,0.5 mirror rotate by -90 autojustify -set xtics norangelimit 10 -set ytics border in scale 1,0.5 mirror rotate by -90 offset character 0, -0.5, 0 autojustify -set ytics norangelimit 10 -set ztics border in scale 1,0.5 nomirror norotate autojustify +set xtics border out scale 1,0.5 nomirror rotate by -90 autojustify +set xtics norangelimit 20 +set ytics border out scale 1,0.5 nomirror rotate by -90 offset character 0, -0.5, 0 autojustify +set ytics norangelimit 20 +set y2tics border out scale 1,0.5 nomirror rotate by -90 offset character 0, +1, 0 autojustify +set y2tics norangelimit 4 +set ztics border out scale 1,0.5 nomirror norotate autojustify set ztics norangelimit autofreq unset x2tics -unset y2tics set cbtics border in scale 1,0.5 mirror norotate autojustify set cbtics norangelimit autofreq set rtics axis in scale 1,0.5 nomirror norotate autojustify set rtics norangelimit autofreq unset ttics -set title "" -set title font "" textcolor lt -1 norotate set timestamp bottom set timestamp "" set timestamp font "" textcolor lt -1 norotate @@ -134,16 +134,14 @@ set urange [ * : * ] noreverse nowriteback set vrange [ * : * ] noreverse nowriteback set xlabel "Hauteur de neige (cm)" set xlabel font "" textcolor lt -1 norotate -set x2label "" -set x2label font "" textcolor lt -1 norotate set xrange [ 0.00000 : 310.000 ] noreverse writeback set x2range [ * : * ] noreverse writeback set ylabel "Résistance au battage (Kg)" set ylabel offset character 2, -1, 0 font "" textcolor lt -1 rotate by -90 -set y2label "" -set y2label font "" textcolor lt -1 rotate -set yrange [ 0.00000 : 140.000 ] noreverse writeback -set y2range [ * : * ] noreverse writeback +set y2label "Température (°C)" +set y2label offset character -1.5, 0, 0 font "" textcolor lt -1 rotate by -90 +set yrange [ 0.00000 : 125.000 ] noreverse writeback +set y2range [ 0 : 25 ] noreverse writeback set zlabel "" set zlabel font "" textcolor lt -1 norotate set zrange [ * : * ] noreverse writeback @@ -179,6 +177,10 @@ GNUTERM = "qt" I = {0.0, 1.0} VoxelDistance = 0.0 x = 0.0 +set style textbox opaque noborder +set label ARG2 at 343,25 rotate by -90 left boxed +set label "Résistance au battage (Kg)" at 280,105 rotate by -90 left boxed +set label "Température (°C)" at 294,105 rotate by -90 left boxed ## Last datafile plotted: "histodata" -plot '< cat -' u 2 w histogram title '' +plot "< cat" u 2 w histogram title ' ' lc rgbcolor "#aad9f3", ARG1 u 1:($2*-1) w lp axes x1y2 pt 7 lw 2 lc rgbcolor "#c97fe8" title ' ' # EOF diff --git a/gelinivetest b/gelinivetest @@ -3,15 +3,27 @@ if [ "$1" = "-h" -o "$1" = "--help" ] then <<. cat -Utilisation : [< fichier_entrée] gelinive [fichier_intermédiaire] +Utilisation : [< fichier_profil] gelinive [fichier_profil [titre_du_graph [fichier_tableau [fichier_température]]] -Si `< fichier` est omis alors gelinive lira dans stdin. Autrement dit dans la -majorité des cas vous pourrez entrer les données au clavier. +Le fichier_profil, seule donnée nécessaire pour que gelinive produise un +graphique, peut être passé via stdin ou en premier argument à la commande. -`fichier_intermédiaire` est le chemin du fichier à créer contenant les données -d'entrée complétées de l'enfoncement après n coups et de la résistance au -battage . Cet argument est optionel, s'il n'existe pas aucun fichier ne sera -créé. +Si fichier_température est omis le grah généré n'aura pas de courbe de +température. + +Si titre_du_graph est omis le graph généré n'aura pas de titre. + +fichier_tableau est le chemin du fichier à créer contenant les données +d'entrée complétées de l'enfoncement après n coups, de la résistance au +battage et de la hauteur au-dessus du sol. Cet argument est optionel, s'il +n'existe pas aucun fichier ne sera créé. + +A noter qu'en l'état, pour faciliter le développement de l'outil, chaque +argument optionnel nécessite l'existance du précédent pour être accepté. +Autrement dit, si vous voulez mettre une courbe de température au graph il +faudra donner le chemin vers le fichier de tableau à créer, un titre au graph +et et avoir passé un fichier de profil en argument. Ce souci peut être résolu +en intégrant une vraie gestion des arguments avec des options. . exit 0 fi @@ -29,21 +41,25 @@ awk '{ tr '/' '1' } -tempfile=$(mktemp);trap "rm -rf $tempdir" EXIT -cat > $tempfile - -topheight=$(tail -n1 $tempfile | cut -f5) -awk -vH="$topheight" -vOFS='\t' ' +calc_R_e_H() { +awk -vH="$1" -vOFS='\t' ' { q=$1;P=$2;n=$3;h=$4;e=$5;d=e-olde H=H-(olde-volde) if(d!=0) { R=int(n*h/d+q+P) } else { R="/" } print $0,d,R,H volde=olde;olde=e -}' $tempfile | - tee "$1" 2> /dev/null | +}' +} + +tempdir=$(mktemp -d);trap "rm -rf $tempdir" EXIT +cat $1 > $tempdir/profil + +topheight=$(tail -n1 $tempdir/profil | cut -f5) +< $tempdir/profil calc_R_e_H $topheight | + tee "$3" 2> /dev/null | makehistodata | tac | - ./geliniveplot | + ./geliniveplot "$4" "$2" 2> /dev/null | convert - -rotate -90 - diff --git a/tests/hohneck.png b/tests/hohneck.png Binary files differ. diff --git a/tests/hohnecktemp b/tests/hohnecktemp @@ -0,0 +1,20 @@ +145 -3.0 +143 -3.5 +140 -4.0 +135 -4.0 +130 -4.4 +125 -4.6 +120 -4.7 +115 -4.6 +110 -4.0 +100 -4.0 +90 -3.0 +80 -2.5 +70 -1.8 +60 -1.3 +50 -0.3 +40 -0.3 +30 -0.2 +20 -0.2 +10 -0.1 +0 -0.0 diff --git a/tests/miribel.png b/tests/miribel.png Binary files differ. diff --git a/tests/miribeltemp b/tests/miribeltemp @@ -0,0 +1,6 @@ +100 -3.2 +90 -1.2 +80 -0.35 +70 -0.2 +60 -0.1 +0 0 diff --git a/tests/test b/tests/test @@ -5,16 +5,16 @@ red="\033[91m" green="\033[92m" norm="\033[0m" -pass() echo -n $green"pass"$norm -fail() echo -n $red"fail"$norm +pass() echo -n $green"succès"$norm +fail() echo -n $red"échec"$norm -echo "Launching test" +echo "Lancement des tests" for file in miribel hohneck do -printf "Testing file $file | " -< tests/$file ./gelinivetest $tempdir/${file}tab > $tempdir/$file.png -printf "inter " +printf "Test du fichier $file | " +./gelinivetest tests/$file "Fichier de test$file" $tempdir/${file}tab tests/${file}temp > $tempdir/$file.png +printf "tab " cmp --silent tests/${file}tab $tempdir/${file}tab && pass || fail printf " image " compare -metric AE tests/$file.png $tempdir/$file.png /dev/null 2> /dev/null && pass || fail