Créer des profils du manteau neigeux - retour accueil
git clone git://bebou.netlib.re/gelinive
Log | Files | Refs | README |
commit bd8af3a7f8543759bfb6f1c95e89dea7b802e7d8 parent 8f53eacc92b09aed5e0c478aaaf8025bdee86d6e Auterice: Arthur Pons <arthur.pons@unistra.fr> Date: Mon, 11 Mar 2024 17:23:03 +0100 Ajout de la génération des images On utilise gnuplot et le script geliniveplot pour générer un png. Modif de toute la documentation en fonction. Diffstat:
M | .gitignore | | | 7 | ++++++- |
M | README.md | | | 34 | +++++++++++++++++++--------------- |
M | gelinive | | | 36 | +++++++++++++++++++++++++++--------- |
M | gelinive.1.md | | | 30 | +++++++++++++++++++++++++----- |
M | gelinive.5.md | | | 10 | +++++----- |
A | geliniveplot | | | 184 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
M | makefile | | | 2 | ++ |
R | data -> tests/data | | | 0 | |
A | tests/data.png | | | 0 | |
R | tests/resdata -> tests/intermediairedata | | | 0 | |
M | tests/test | | | 18 | +++++++++--------- |
11 files changed, 277 insertions(+), 44 deletions(-)
diff --git a/.gitignore b/.gitignore @@ -1,9 +1,14 @@ * +!*/ !gelinive !mail !makefile !.gitignore !data -!tests/* +!tests/data +!tests/data.png +!tests/intermediairedata +!tests/tests !README.md !gelinive.?.md +!geliniveplot diff --git a/README.md b/README.md @@ -17,14 +17,19 @@ Les dépendances notables sont : * GNU Make pour la compilation/l'installation * bc * awk - * gnuplot + * gnuplot 5.4 + * dash Pour installer le logiciel faire - make install - make test + make + make test -Si les tests passent alors tout devrait être bon. +Si les tests passent alors on peut installer : + + make install + +Gelinive a été développé et testé sur debian 12. ### Depuis un paquet (TODO) @@ -35,28 +40,27 @@ une fois téléchargé faire : ## Utilisation - gelinive fichier - -ou - - < fichier gelinive + < fichier gelinive intermediaire Avec `fichier` étant un fichier texte contenant les données du sondage par -battage selon un certain format. Pour plus d'infos voir le manuel de la commande -et le manuel du format : +battage selon un certain format et intermediaire un chemin optionnel pour +sauvegarder les valeurs calculées de R et e. Pour plus d'infos voir le manuel +de la commande et le manuel du format : man gelinive.1 man gelinive.5 ## Les fichiers - * gelinive : le script calculant R et e - * data : un exemple de jeu de données + * gelinive : le script que calcule R, e, éventuellement les sauve puis génère l'image + * geliniveplot : le script gnuplot qui génère l'image * mail : le mail initiant la demande * makefile : le makefile pour générer le manuel, lancer les tests et installer le script/le man * gelinive.?.md : les sources du manuel * tests/test : le script lançant les tests - * tests/resdata : le jeu de donnée contre lequel vérifier le bon - fonctionnement de gelinive + * tests/data : le jeu de donnée de tests + * tests/intermediairedata : le jeu de donnée contre lequel vérifier le bon calcul de R et e + * tests/data.png : l'image contre laquelle vérifier la bonne génération de l'image * README.md : ce fichier + diff --git a/gelinive b/gelinive @@ -3,18 +3,20 @@ if [ "$1" = "-h" -o "$1" = "--help" ] then <<. cat -Utilisation : gelinive [fichier] ou [< fichier] gelinive +Utilisation : [< fichier_entrée] gelinive [fichier_intermédiaire] -Si fichier est omis alors gelinive lire dans stdin. -Autrement dit dans la majorité des cas vous pourrez -entrer les données au clavier. +Si `< fichier` est omis alors gelinive lira dans stdin. Autrement dit dans la +majorité des cas vous pourrez entrer les données au clavier. -Pas d'arguments +`fichier_intermédiaire` est le chemin du fichier à créer contenant les données +d'entrée complétées de la résistance au battage et l'enfoncement total de la +sonde. Cet argument est optionel, s'il n'existe pas aucun fichier ne sera +créé. . exit 0 fi -calcR() { +calc_Re() { awk -F'\t' '{ if($5=="0"){ print "print \"/\n\"" } else { printf "(%s*%s)/%s+%s+%s\n", $3, $4, $5, $1, $2 } }' | bc -l | cut -d'.' -f1 @@ -27,10 +29,26 @@ BEGIN { getline; tot=$col; print tot } ' } +makehistodata() { +sed '$ a\ +0 0 0 0 0 0 0 0 +2,$ p' | +awk '{ + hcur=$6;dcur=$7 + getline + hnext=$6;dnext=$7 + for(i=hcur;i>hnext;i--) {print i" "dcur} +}' | +tr '/' '1' +} + tempdir=$(mktemp -d);trap "rm -rf $tempdir" EXIT -cat $1 > $tempdir/in -< $tempdir/in calcR | +cat > $tempdir/in +< $tempdir/in calc_Re | paste $tempdir/in - > $tempdir/temp < $tempdir/temp sumcol 5 | - paste $tempdir/temp - + paste $tempdir/temp - | + tee "$1" 2> /dev/null | + makehistodata | + geliniveplot diff --git a/gelinive.1.md b/gelinive.1.md @@ -7,21 +7,41 @@ gelinive - calcul la résistance au battage ## SYNOPSIS -**gelinive** FICHIER +[< _ENTREE_] **gelinive** [_INTERMEDIAIRE_] ## DESCRIPTION Calcul la résistance au battaque et l'enfoncement total d'une sonde dans la -neige. Pour le format en entrée et sortie voir gelinive(5). +neige. En fait un graphique png à l'aide de geliniveplot. +Pour le format en entrée et celui du fichier intermédiaire voir gelinive(5). -## UTILISATION +## UTILISATION ET EXAMPLES - gelinive data +On peut rentrer les données au format gelinive(5) au clavier : -ou + gelinive + +Ou lire données depuis un fichier : < data gelinive +On peut rediriger la sortie vers un fichier : + + < data gelinive > image.png + +Ou les piper directement dans un visionneur d'image : + + < data gelinive | feh -. - + +Si l'on renseigne un chemin à la place de INTERMEDIAIRE alors un +fichier sera créé à ce chemin avec les données calculées de résistance au +battage et d'enfoncement total de la sonde. + + < data gelinive data_with_Re > image.png + +Si l'on ne renseigne pas INTERMEDIAIRE aucun fichier intermédiaire +ne sera créé. + ## VOIR AUSSI gelinive(5) diff --git a/gelinive.5.md b/gelinive.5.md @@ -11,14 +11,10 @@ gelinive ## DESCRIPTION -gelinive(1) prend en entrée et écrit en sortie (stdout) des données sous ce -format séparées par des tabulations. +gelinive(1) prend en entrée des données concernant le manteau neigeux sous un certain format. ## CHAMPS SÉPARÉS PAR DES TABULATIONs -Les deux derniers champs du format sont optionnels. gelinive(1) permet justement -de les créer. - L'ordre et le contenu des champs sont : 1. q le nombre de tubes @@ -26,6 +22,10 @@ L'ordre et le contenu des champs sont : 3. n le nombre de coups 4. h la hauteur de chute (cm) 5. d l'enfoncement pour n coups (cm) + +Si gelinive(1) est appelé avec un chemin en argument il créera un +fichier en calculant et ajoutant aux cinq précédents les deux éléments suivants : + 6. R la résistance au battage 7. e l'enfoncement total de la sonde (cm) diff --git a/geliniveplot b/geliniveplot @@ -0,0 +1,184 @@ +#!/usr/bin/gnuplot +# +# +# G N U P L O T +# Version 5.4 patchlevel 4 last modified 2022-07-10 +# +# Copyright (C) 1986-1993, 1998, 2004, 2007-2022 +# Thomas Williams, Colin Kelley and many others +# +# gnuplot home: http://www.gnuplot.info +# 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 +# set terminal dumb size 150 75 +# set output "|feh -" +unset clip points +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 zdata +set ydata +set xdata +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 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 z "% h" +set format cb "% h" +set format r "% h" +set ttics format "% h" +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 +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 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 +unset object +unset walls +set style textbox transparent margins 1.0, 1.0 border lt -1 linewidth 1.0 +set offsets 0, 0, 0, 0 +set pointsize 1 +set pointintervalbox 1 +set encoding default +unset polar +unset parametric +unset spiderplot +unset decimalsign +unset micro +unset minussign +set view 60, 30, 1, 1 +set view azimuth 0 +set rgbmax 255 +set samples 100, 100 +set isosamples 10, 10 +set surface implicit +set surface +unset contour +set cntrlabel format '%8.3g' font '' start 5 interval 20 +set mapping cartesian +set datafile separator whitespace +set datafile nocolumnheaders +unset hidden3d +set cntrparam order 4 +set cntrparam linear +set cntrparam levels 5 +set cntrparam levels auto +set cntrparam firstlinetype 0 unsorted +set cntrparam points 5 +set size ratio 0 1,1 +set origin 0,0 +set style data points +set style function lines +unset xzeroaxis +unset yzeroaxis +unset zzeroaxis +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 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 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 +set trange [ * : * ] noreverse nowriteback +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 : 200.000 ] noreverse writeback +set x2range [ * : * ] noreverse writeback +set ylabel "Résistance au battage (Kg)" +set ylabel offset character 0, -1, 0 font "" textcolor lt -1 rotate by -90 +set y2label "" +set y2label font "" textcolor lt -1 rotate +set yrange [ 0.00000 : 100.000 ] noreverse writeback +set y2range [ * : * ] noreverse writeback +set zlabel "" +set zlabel font "" textcolor lt -1 norotate +set zrange [ * : * ] noreverse writeback +set cblabel "" +set cblabel font "" textcolor lt -1 rotate +set cbrange [ * : * ] noreverse writeback +set rlabel "" +set rlabel font "" textcolor lt -1 norotate +set rrange [ * : * ] noreverse writeback +unset logscale +unset jitter +set zero 1e-08 +set lmargin -1 +set bmargin -1 +set rmargin -1 +set tmargin -1 +set locale "fr_FR.UTF-8" +set pm3d explicit at s +set pm3d scansautomatic +set pm3d interpolate 1,1 flush begin noftriangles noborder corners2color mean +set pm3d clip z +set pm3d nolighting +set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB +set palette rgbformulae 7, 5, 15 +set colorbox default +set colorbox vertical origin screen 0.9, 0.2 size screen 0.05, 0.6 front noinvert bdefault +set style boxplot candles range 1.50 outliers pt 7 separation 1 labels auto unsorted +set loadpath +set fontpath +set psdir +set fit brief errorvariables nocovariancevariables errorscaling prescale nowrap v5 +GNUTERM = "qt" +I = {0.0, 1.0} +VoxelDistance = 0.0 +x = 0.0 +## Last datafile plotted: "histodata" +plot '< cat -' u 2 w histogram title '' +# EOF diff --git a/makefile b/makefile @@ -7,7 +7,9 @@ test:;tests/test install: mkdir -p ${PREFIX}/bin cp gelinive ${PREFIX}/bin + cp geliniveplot ${PREFIX}/bin chmod +x ${PREFIX}/bin/gelinive + chmod +x ${PREFIX}/bin/geliniveplot cp gelinive.1 ${PREFIX}/man/man1 cp gelinive.5 ${PREFIX}/man/man5 diff --git a/data b/tests/data diff --git a/tests/data.png b/tests/data.png Binary files differ. diff --git a/tests/resdata b/tests/intermediairedata diff --git a/tests/test b/tests/test @@ -5,19 +5,19 @@ red="\033[91m" green="\033[92m" norm="\033[0m" -pass() echo $green"pass"$norm -fail() echo $red"fail"$norm +pass() echo -n $green"pass"$norm +fail() echo -n $red"fail"$norm echo "Launching test" for file in data do -printf "Testing file $file through stdin : " -< $file ./gelinive > $tempdir/1 -cmp --silent tests/res$file $tempdir/1 && pass || fail - -printf "Testing file $file through positional argument : " -./gelinive $file > $tempdir/1 -cmp --silent tests/res$file $tempdir/1 && pass || fail +printf "Testing file $file | " +< tests/$file ./gelinive $tempdir/intermediaire$file > $tempdir/$file.png +printf "inter " +cmp --silent tests/intermediaire$file $tempdir/intermediaire$file && pass || fail +printf " image " +cmp --silent tests/$file.png $tempdir/$file.png && pass || fail +echo done