iccsa-21-wind

git clone https://git.igankevich.com/iccsa-21-wind.git
Log | Files | Refs

commit c2a3e6ad754c2038babb31aa4e5f6eaf611e8fe9
parent 9b416ed1733da8ca3fa83cfc2b094961982a4414
Author: Ivan Gankevich <i.gankevich@spbu.ru>
Date:   Thu,  8 Apr 2021 19:07:16 +0300

Recalculate everything for the new RMSE.

Diffstat:
Makefile | 16+++++++---------
R/anal.R | 28++++++++++++++++++----------
R/direction-min-max.R | 5+++--
R/minmax.R | 30+++++++++++++++++++++++++++++-
gnuplot/acf.gnuplot | 4++--
gnuplot/direction-dist.gnuplot | 19++++++++++---------
gnuplot/velocity-dist.gnuplot | 52+++++++++++++++++++++++++++-------------------------
gnuplot/velocity-xy-dist.gnuplot | 24++++++++++++++++--------
main.tex | 10+++-------
9 files changed, 115 insertions(+), 73 deletions(-)

diff --git a/Makefile b/Makefile @@ -58,15 +58,13 @@ build/daily-stats.svg: gnuplot/daily-stats.gnuplot build/daily-stats build/daily-rmse.svg: gnuplot/daily-rmse.gnuplot build/daily-rmse gnuplot -d $< -build/gnuplot/velocity-xy-dist-min.svg: gnuplot/velocity-xy-dist.gnuplot build/direction/1616497200-hist-xy - gnuplot -d -c gnuplot/velocity-xy-dist.gnuplot \ - build/direction/1616497200-hist-xy build/gnuplot/velocity-xy-dist-min.svg \ - 0.024544 4.495469 - -build/gnuplot/velocity-xy-dist-max.svg: gnuplot/velocity-xy-dist.gnuplot build/direction/1616792400-hist-xy - gnuplot -d -c gnuplot/velocity-xy-dist.gnuplot \ - build/direction/1616792400-hist-xy build/gnuplot/velocity-xy-dist-max.svg \ - 0.154791 0.801432 +build/gnuplot/velocity-xy-dist-min.svg: gnuplot/velocity-xy-dist.gnuplot build/gnuplot/direction_rmse.gnuplot + gnuplot -d -c gnuplot/velocity-xy-dist.gnuplot min + +build/gnuplot/velocity-xy-dist-max.svg: gnuplot/velocity-xy-dist.gnuplot build/gnuplot/direction_rmse.gnuplot + gnuplot -d -c gnuplot/velocity-xy-dist.gnuplot max + +build/gnuplot/direction-dist.svg: build/gnuplot/direction_rmse.gnuplot #build/main.zip: build/gnuplot/*.eps main.tex build/main.zip: main.tex diff --git a/R/anal.R b/R/anal.R @@ -344,7 +344,7 @@ fit_velocity_acf_bilateral <- function (velocity, axis="x", timestamp=0, plot=TR estimated=estimated) } -fit_direction <- function (theta, density, plot=TRUE, sign=-1) { +fit_direction <- function (theta, density, plot=TRUE) { pdf_x <- data.frame(x=theta,density=density); #print(pdf_x) scale <- max(abs(theta)) @@ -378,19 +378,27 @@ fit_direction_bilateral <- function (direction, plot=TRUE, timestamp=0, dist="vo x = hist$x; v = hist$density; d = density(direction,adjust=0.5) - dist_left <- fit_direction(x[x<=0], v[x<=0], sign=-1, plot=FALSE) - dist_right <- fit_direction(x[x>=0], v[x>=0], sign=1, plot=FALSE) - #dist_left <- fit_direction(x[x>=0], v[x>=0], sign=1, plot=FALSE) - #x <- c(dist_left$x, dist_right$x) - actual_density <- c(dist_left$actual_density, dist_right$actual_density) - estimated_density <- c(dist_left$estimated_density, dist_right$estimated_density) + dist_1 <- fit_direction(x[-pi<=x&x<=-pi/2], v[-pi<=x&x<=-pi/2], plot=FALSE) + dist_2 <- fit_direction(x[-pi/2<=x&x<=0], v[-pi/2<=x&x<=0], plot=FALSE) + dist_3 <- fit_direction(x[x>=0&x<=pi/2], v[x>=0&x<=pi/2], plot=FALSE) + dist_4 <- fit_direction(x[x>=pi/2&x<=pi], v[x>=pi/2&x<=pi], plot=FALSE) + #dist_1 <- fit_direction(x[x>=0], v[x>=0], sign=1, plot=FALSE) + #x <- c(dist_1$x, dist_3$x) + actual_density <- c(dist_1$actual_density, + dist_2$actual_density, + dist_3$actual_density, + dist_4$actual_density) + estimated_density <- c(dist_1$estimated_density, + dist_2$estimated_density, + dist_3$estimated_density, + dist_4$estimated_density) if (plot) { plot(x, actual_density, xlab='Direction', ylab='PDF') #hist(direction, xlab=paste('Velocity', axis), ylab='PDF', freq=FALSE, breaks=100) lines(d, col='green', lwd=2) #lines(x, estimated_density, col='red', lwd=2) - lines(dist_left$x, dist_left$estimated_density, col='red', lwd=2) - lines(dist_right$x, dist_right$estimated_density, col='blue', lwd=2) + lines(dist_1$x, dist_1$estimated_density, col='red', lwd=2) + lines(dist_3$x, dist_3$estimated_density, col='blue', lwd=2) } #printf("RMSE %f\n", rmse(estimated_density, actual_density)) path <- file.path('build', 'direction', dist) @@ -401,7 +409,7 @@ fit_direction_bilateral <- function (direction, plot=TRUE, timestamp=0, dist="vo write("\n",file=filename,append=TRUE) write.table(data.frame(x=d$x,density=d$y), filename, row.names=FALSE, quote=FALSE, append=TRUE) - list(coefficients=dist_left$coefficients, + list(coefficients=dist_1$coefficients, rmse=rmse(estimated_density, actual_density)) } diff --git a/R/direction-min-max.R b/R/direction-min-max.R @@ -1,9 +1,10 @@ library(gplots) # hist2d source("R/common.R") +source("build/gnuplot/direction_rmse.gnuplot") -t_min_rmse <- 1616497200 -t_max_rmse <- 1616792400 +t_min_rmse <- direction_rmse_min_timestamp +t_max_rmse <- direction_rmse_max_timestamp time_delta = 60*60*2 for (timestamp in c(t_min_rmse, t_max_rmse)) { velocity <- select_samples(timestamp, timestamp+time_delta) diff --git a/R/minmax.R b/R/minmax.R @@ -2,6 +2,22 @@ library(DBI) source("R/common.R") +gnuplot <- function (file, str, ...) { + cat(sprintf(str, ...), file=file, append=TRUE) +} +gnuplot_all <- function (filename, prefix, rmse_column, row_min, row_max) { + f <- filename + cat("",file=f) + gnuplot(f, paste(prefix,"_rmse_min = %f\n",sep=""), row_min[rmse_column]) + gnuplot(f, paste(prefix,"_rmse_min_timestamp = %d\n",sep=""), as.integer(row_min["timestamp"])) + gnuplot(f, paste(prefix,"_rmse_min_speed = %f\n",sep=""), row_min["speed"]) + gnuplot(f, paste(prefix,"_rmse_min_direction = %f\n",sep=""), row_min["direction"]) + gnuplot(f, paste(prefix,"_rmse_max = %f\n",sep=""), row_max[rmse_column]) + gnuplot(f, paste(prefix,"_rmse_max_timestamp = %d\n",sep=""), as.integer(row_max["timestamp"])) + gnuplot(f, paste(prefix,"_rmse_max_speed = %f\n",sep=""), row_max["speed"]) + gnuplot(f, paste(prefix,"_rmse_max_direction = %f\n",sep=""), row_max["direction"]) +} + data <- read.table("build/daily-rmse", sep="", header=TRUE) z_rmse_sorted <- sort(data$z_rmse, decreasing=TRUE) print("Min. velocity RMSE") @@ -15,7 +31,6 @@ print(data[data$z_rmse == z_rmse_sorted[[1]], ]) print(data[data$z_rmse == z_rmse_sorted[[2]], ]) print("Mean velocity RMSE") print(summary(data)) -print(cor(data)) with(list(tmp = data[data$x_rmse == min(data$x_rmse), ]), printf("Velocity X min. RMSE = %f (%s), mean speed = %f\n", tmp["x_rmse"], tmp["timestamp"], tmp["speed"])) with(list(tmp = data[data$y_rmse == min(data$y_rmse), ]), @@ -29,6 +44,15 @@ with(list(tmp = data[data$y_rmse == max(data$y_rmse), ]), with(list(tmp = data[data$z_rmse == max(data$z_rmse), ]), printf("Velocity Z max. RMSE = %f (%s), mean speed = %f\n", tmp["z_rmse"], tmp["timestamp"], tmp["speed"])) #print(data) +gnuplot_all("build/gnuplot/x_rmse.gnuplot", "x", "x_rmse", + data[data$x_rmse == min(data$x_rmse),], + data[data$x_rmse == max(data$x_rmse),]) +gnuplot_all("build/gnuplot/y_rmse.gnuplot", "y", "y_rmse", + data[data$y_rmse == min(data$y_rmse),], + data[data$y_rmse == max(data$y_rmse),]) +gnuplot_all("build/gnuplot/z_rmse.gnuplot", "z", "z_rmse", + data[data$z_rmse == min(data$z_rmse),], + data[data$z_rmse == max(data$z_rmse),]) direction_rmse_min = data[data$direction_rmse == min(data$direction_rmse), ] direction_rmse_max = data[data$direction_rmse == max(data$direction_rmse), ] @@ -44,6 +68,8 @@ printf("Max. direction RMSE = %f (%s), mean direction = %f, mean speed = %f\n", direction_rmse_max["direction"], direction_rmse_max["speed"]) printf("Mean direction RMSE = %f\n", direction_rmse_mean) +gnuplot_all("build/gnuplot/direction_rmse.gnuplot", + "direction", "direction_rmse", direction_rmse_min, direction_rmse_max) filename <- "build/gnuplot/acf_rmse.gnuplot" cat("",file=filename) @@ -94,3 +120,5 @@ with(list(tmp = data[data$acf_z_rmse == max(data$acf_z_rmse), ]), gnuplot("acf_z_rmse_max_speed = %f\n", tmp["speed"]) printf("ACF Z max. RMSE = %f (%s), mean speed = %f\n", tmp["acf_z_rmse"], tmp["timestamp"], tmp["speed"]) }) + +print(cor(data)["speed",]) diff --git a/gnuplot/acf.gnuplot b/gnuplot/acf.gnuplot @@ -51,7 +51,7 @@ filename('y',acf_y_rmse_max_timestamp) index 0 using (-$1):2 with points pt 6 lc '' index 1 using ($1):2 with points pt 6 lc '#404040',\ '' index 1 using ($1):3 with lines lw 2 lc '#c04040' -set yrange [0:0.1] +set yrange [0:2] set title sprintf('RMSE_z = %.1f%%', (acf_z_rmse_max*100)) plot \ filename('z',acf_z_rmse_max_timestamp) index 0 using (-$1):2 with points pt 6 lc '#404040',\ @@ -72,7 +72,7 @@ filename('x',acf_x_rmse_min_timestamp) index 0 using (-$1):2 with points pt 6 lc '' index 1 using ($1):2 with points pt 6 lc '#404040',\ '' index 1 using ($1):3 with lines lw 2 lc '#c04040' -set yrange [0:2] +set yrange [0:0.25] set title sprintf('RMSE_y = %.1f%%',(acf_y_rmse_min*100)) plot \ filename('y',acf_y_rmse_min_timestamp) index 0 using (-$1):2 with points pt 6 lc '#404040',\ diff --git a/gnuplot/direction-dist.gnuplot b/gnuplot/direction-dist.gnuplot @@ -1,3 +1,4 @@ +load "build/gnuplot/direction_rmse.gnuplot" set terminal svg size 450,450/2 font 'Free Serif, 10' enhanced round dynamic set xtics nomirror out offset 0,0.25 set ytics nomirror out offset 0.5,0 @@ -7,7 +8,7 @@ set output 'build/gnuplot/direction-dist.svg' set xlabel 'θ' offset 0,1.0 set xrange [-180:180] set xtics -180,90 -set yrange [0:4] +set yrange [0:2] set rmargin 1.5 set tmargin 1 set title offset 0,-1 @@ -16,21 +17,21 @@ positive(x) = x<0 ? (1/0) : x negative(x) = x>0 ? (1/0) : x round(x) = floor(x+0.5) rad2deg(rad) = (rad * 180) / pi -# Min. direction RMSE = 0.024544 (1616497200), mean direction = -2.399689, mean speed = 4.495469 -# Max. direction RMSE = 0.154791 (1616792400), mean direction = -2.440686, mean speed = 0.801432 -# Mean direction RMSE = 0.056350 - +filename = sprintf('build/direction/vonmises/%d', direction_rmse_max_timestamp) set lmargin 5 -set title sprintf('RMSE = %.0f%%, mean speed = %.1fm/s',round(0.154791*100), 0.801432) +set title sprintf('RMSE = %.0f%%, mean speed = %.1fm/s', \ + round(direction_rmse_max*100), direction_rmse_max_speed) plot \ -'build/direction/vonmises/1616792400' index 0 using (rad2deg($1)):2 every 5 with points pt 6 lc '#404040' title 'Observed PDF of υ_x',\ +filename index 0 using (rad2deg($1)):2 every 5 with points pt 6 lc '#404040' title 'Observed PDF of υ_x',\ '' index 0 using (positive(rad2deg($1))):3 with lines lw 2 lc '#c04040' title 'Estimated PDF of positive υ_x',\ '' index 0 using (negative(rad2deg($1))):3 with lines lw 2 lc '#4040c0' title 'Estimated PDF of negative υ_x' +filename = sprintf('build/direction/vonmises/%d', direction_rmse_min_timestamp) set lmargin 5 -set title sprintf('RMSE = %.0f%%, mean speed = %.1fm/s',round(0.024544*100), 4.495469) +set title sprintf('RMSE = %.0f%%, mean speed = %.1fm/s', \ + round(direction_rmse_min*100), direction_rmse_min_speed) plot \ -'build/direction/vonmises/1616497200' index 0 using (rad2deg($1)):2 every 5 with points pt 6 lc '#404040' title 'Observed PDF of υ_x',\ +filename index 0 using (rad2deg($1)):2 every 5 with points pt 6 lc '#404040' title 'Observed PDF of υ_x',\ '' index 0 using (positive(rad2deg($1))):3 with lines lw 2 lc '#c04040' title 'Estimated PDF of positive υ_x',\ '' index 0 using (negative(rad2deg($1))):3 with lines lw 2 lc '#4040c0' title 'Estimated PDF of negative υ_x' diff --git a/gnuplot/velocity-dist.gnuplot b/gnuplot/velocity-dist.gnuplot @@ -1,4 +1,7 @@ load 'gnuplot/paired.pal' +load 'build/gnuplot/x_rmse.gnuplot' +load 'build/gnuplot/y_rmse.gnuplot' +load 'build/gnuplot/z_rmse.gnuplot' set terminal svg size 450,450/3*2 font 'Free Serif, 10' enhanced round dynamic set xtics nomirror out offset 0,0.25 set ytics nomirror out offset 0.5,0 @@ -9,7 +12,8 @@ unset key set output 'build/gnuplot/velocity-dist.svg' set xlabel 'υ_x' offset 0,1.0 -set yrange [0:1.2] +set yrange [0:0.4] +set ytics 0,0.1 set rmargin 0 set tmargin 1 set multiplot layout 2,3 @@ -18,43 +22,39 @@ positive(x) = x<0 ? (1/0) : x negative(x) = x>0 ? (1/0) : x round(x) = floor(x+0.5) -# Velocity X max. RMSE = 0.123038 (1615230000), mean speed = 2.497133 -# Velocity Y max. RMSE = 0.115007 (1615388400), mean speed = 1.435405 -# Velocity Z max. RMSE = 0.141865 (1616958000), mean speed = 0.853936 - ################################### # first row ################################### +filename = sprintf('build/velocity/x/weibull/%d', x_rmse_max_timestamp) set lmargin 5 set title offset 0,-1 -set title sprintf('RMSE_x = %.0f%%', round(0.123038*100)) -set xrange [-5:3] +set title sprintf('RMSE_x = %.1f%%', (x_rmse_max*100)) +set xrange [-10:10] plot \ -'build/velocity/x/weibull/1615230000' index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_x',\ +filename index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_x',\ '' index 0 using (positive($1)):3 with lines lw 2 lc '#c04040' title 'Estimated PDF of positive υ_x',\ '' index 0 using (negative($1)):3 with lines lw 2 lc '#4040c0' title 'Estimated PDF of negative υ_x' #'' index 1 using 1:2 with lines dashtype 1 lw 2 lc '#808080' notitle, \ -#set key top center outside Left reverse +filename = sprintf('build/velocity/y/weibull/%d', y_rmse_max_timestamp) set lmargin 5 -#set xrange [-3:3] set xlabel 'υ_y' -set title sprintf('RMSE_y = %.0f%%',round(0.115007*100)) -set xrange [-4:4] +set title sprintf('RMSE_y = %.1f%%',(y_rmse_max*100)) +#set xrange [-4:4] plot \ -'build/velocity/y/weibull/1615388400' index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_y',\ +filename index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_y',\ '' index 0 using (positive($1)):3 with lines lw 2 lc '#c04040' title 'Estimated PDF of positive υ_y',\ '' index 0 using (negative($1)):3 with lines lw 2 lc '#4040c0' title 'Estimated PDF of negative υ_y' #'' index 1 using 1:2 with lines dashtype 1 lw 2 lc '#808080' notitle, \ #unset key -set xrange [-4:4] -#set xtics -2,1,2 +filename = sprintf('build/velocity/z/weibull/%d', z_rmse_max_timestamp) +#set xrange [-4:4] set xlabel 'υ_z' -set title sprintf('RMSE_z = %.0f%%', round(0.141865*100)) +set title sprintf('RMSE_z = %.1f%%', (z_rmse_max*100)) plot \ -'build/velocity/z/weibull/1616958000' index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_z',\ +filename index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_z',\ '' index 0 using (positive($1)):3 with lines lw 2 lc '#c04040' title 'Estimated PDF of positive υ_z',\ '' index 0 using (negative($1)):3 with lines lw 2 lc '#4040c0' title 'Estimated PDF of negative υ_z' #'' index 1 using 1:2 with lines dashtype 1 lw 2 lc '#808080' notitle, \ @@ -67,35 +67,37 @@ plot \ # second row ################################### set bmargin 3 -set xrange [-4:4] +set xrange [-4.5:4.5] set yrange [0:1.2] set ytics 0,0.2 #set xtics -10,1 +filename = sprintf('build/velocity/x/weibull/%d', x_rmse_min_timestamp) set lmargin 5 -set title sprintf('RMSE_x = %.0f%%', round(0.016698*100)) +set title sprintf('RMSE_x = %.1f%%', (x_rmse_min*100)) plot \ -'build/velocity/x/weibull/1614135600' index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_x',\ +filename index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_x',\ '' index 0 using (positive($1)):3 with lines lw 2 lc '#c04040' title 'Estimated PDF of positive υ_x',\ '' index 0 using (negative($1)):3 with lines lw 2 lc '#4040c0' title 'Estimated PDF of negative υ_x' #'' index 1 using 1:2 with lines dashtype 1 lw 2 lc '#808080' notitle, \ +filename = sprintf('build/velocity/y/weibull/%d', y_rmse_min_timestamp) set lmargin 5 #set xrange [-3:3] set xlabel 'υ_y' -set title sprintf('RMSE_y = %.0f%%', round(0.021981*100)) +set title sprintf('RMSE_y = %.1f%%', (y_rmse_min*100)) #set xrange [-3:5] plot \ -'build/velocity/y/weibull/1615647600' index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_y',\ +filename index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_y',\ '' index 0 using (positive($1)):3 with lines lw 2 lc '#c04040' title 'Estimated PDF of positive υ_y',\ '' index 0 using (negative($1)):3 with lines lw 2 lc '#4040c0' title 'Estimated PDF of negative υ_y' #'' index 1 using 1:2 with lines dashtype 1 lw 2 lc '#808080' notitle, \ -#set xtics -2,1,2 +filename = sprintf('build/velocity/z/weibull/%d', z_rmse_min_timestamp) set xlabel 'υ_z' -set title sprintf('RMSE_z = %.0f%%', round(0.015136*100)) +set title sprintf('RMSE_z = %.1f%%', (z_rmse_min*100)) plot \ -'build/velocity/z/weibull/1615647600' index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_z',\ +filename index 0 using 1:2 with points pt 6 lc '#404040' title 'Observed PDF of υ_z',\ '' index 0 using (positive($1)):3 with lines lw 2 lc '#c04040' title 'Estimated PDF of positive υ_z',\ '' index 0 using (negative($1)):3 with lines lw 2 lc '#4040c0' title 'Estimated PDF of negative υ_z' #'' index 1 using 1:2 with lines dashtype 1 lw 2 lc '#808080' notitle, \ diff --git a/gnuplot/velocity-xy-dist.gnuplot b/gnuplot/velocity-xy-dist.gnuplot @@ -1,4 +1,5 @@ load 'gnuplot/blues.pal' +load 'build/gnuplot/direction_rmse.gnuplot' set palette defined (0 '#4040c0', 1 '#c0c0c0', 2 '#c04040') #set palette defined (0 '#c0c0c0', 1 '#c04040') f = 0.90 @@ -37,16 +38,23 @@ circle(x,y,z) = length(x,y)>s ? NaN : z #circle(x,y,z) = z max(x,y) = x>y ? x : y -filename = ARG1 +direction_rmse = direction_rmse_min +direction_rmse_timestamp = direction_rmse_min_timestamp +direction_rmse_speed = direction_rmse_min_speed +direction_rmse_direction = direction_rmse_min_direction +if (ARG1 eq 'max') { + direction_rmse = direction_rmse_max; + direction_rmse_timestamp = direction_rmse_max_timestamp; + direction_rmse_speed = direction_rmse_max_speed; + direction_rmse_direction = direction_rmse_max_direction; +} +filename = sprintf('build/direction/%d-hist-xy', direction_rmse_timestamp) filename_tmp = sprintf('%s.tmp', filename) filename_cnt = sprintf('%s.cnt', filename) -filename_out = ARG2 -rmse = ARG3 + 0 -speed = ARG4 + 0 - -# Min. direction RMSE = 0.024544 (1616497200), mean direction = -2.399689 -# Max. direction RMSE = 0.154791 (1616792400), mean direction = -2.440686 -# Mean direction RMSE = 0.056350 +filename_out = sprintf('build/gnuplot/velocity-xy-dist-%s.svg', ARG1) +rmse = direction_rmse +speed = direction_rmse_speed +print filename ## interpolation {{{ ## http://www.gnuplotting.org/circular-heat-map/ diff --git a/main.tex b/main.tex @@ -356,13 +356,9 @@ distributions for each axis are presented in figure~\ref{fig-velocity-distributi Wind direction was approximated by von Mises distribution using least-squares fitting. Following the common practice~\cite{feng2015sectors} we divided direction axis -into sectors: ``positive'' (from 0 to 180\textdegree) and ``negative'' (from 0 to --180\textdegree) --- and fitted each sector independently. We choose two -sectors as they give reasonably small error: one sector is not enough here, -because we always have at least two mean directions (one for incident flow and -one for turbulent flow behined the arm), and four sectors or more is too many -as we have four mean directions only when the wind speed is low and the flow -is close to turbulent. The best-fit and worst-fit distributions for each axis +into four sectors: from -180\textdegree to -90\textdegree, from from -90\textdegree to +0\textdegree, from 0 to 90\textdegree and from 90\textdegree to 180\textdegree --- and fitted each sector independently. We chose four sector to have one sector for each side of the anemometer. +The best-fit and worst-fit distributions for each axis are presented in figure~\ref{fig-direction-distributions}. \begin{figure}