#!/bin/bash echo '==========================================================' echo ' Simple example of use of htexplo ' echo '==========================================================' echo ' Autors : N. Villefranque, M. Coulon-Decorzens, F. Hourdin' #to be run on HighTune #svn checkout --username htune https://svn.lmd.jussieu.fr/HighTune/trunk HighTune #cd HighTune && bash setup.sh echo echo '==========================================================' echo ' Model available ' echo '==========================================================' nparam=2 echo ' 1) Simple OLR model with nparam=1 or 2 parameters ' echo ' here nparam='$nparam noise=1. echo ' whit a noise of value noise = '$noise' on the OLR ' map=0 echo ' Or 2) krigging of a map with map=1 or bash exemples.sh map ' echo here map=$map echo echo '==========================================================' echo ' Control of emulator building ' echo '==========================================================' seed="-seed 123" echo seed of pseudo random numbers generators : $seed nsondes=20 echo number of points sampled in the hypercube : $nsondes meanFun="constant" echo 'mean function "consant" or"fitted", here : '$meanFun echo '(will be forced to constant for map expe)' nugget=1 echo 'Nugget='$nugget' changed directly in BuildEmulator' echo ' nugget = float (0. means no nugget) or fit could be changed' echo ' with option -nugget' echo echo '==========================================================' echo ' Control for History matching ' echo '==========================================================' cutoff=3 echo 'default cutoff : 3. To be changed with option -cutoff ' echo echo '==========================================================' echo ' Initialisations ' echo '==========================================================' set -eu # exit on most (not all!) error codes, and error on unset variables export LC_ALL=C # set locale for computation with awk htune_dir="$(pwd)/../.." install_dir="$htune_dir/../install_shared" local=$(pwd) src="$htune_dir/src" wave_two_metrics=9999 # starting from this wave, a second metric will be added if [[ $# -eq 4 ]] ; then wave_two_metrics=$4 fi mkdir -p log echo echo '==========================================================' echo ' Default parameters and reading options ' echo '==========================================================' wave=1 clean=0 setup=0 while (($# > 0)); do case $1 in "-h"|"--help") echo "Usage: $0 [clean|setup|map] [-wave NWAVE] htune_dir"; exit 0 ;; "-htune") htune_dir=$(readlink -f "$2"); shift; shift;; "-installdir") install_dir=$2; shift; shift;; "-wave") wave=$2 ; shift; shift;; "-cutoff") cutoff=$2 ; shift; shift;; "-nugget") nugget=$2 ; shift; shift;; "clean") clean=1 ; shift;; "setup") setup=1 ; shift;; "map") map=1 ; shift;; *) $0 -h; exit 1 esac done source "$install_dir/env.sh" if [[ $clean = 1 ]] ; then echo "-----------------------------------" echo "clean : menage des précédents runs" echo "-----------------------------------" # Pourquoi ce -- ? #rm -r -- param ModelParam.R *.csv *Rdata *RData *asc *pdf Remain* WAVE* rm -r param ModelParam.R *.csv *Rdata *RData *asc *pdf Remain* WAVE* exemple_image.txt param_after_wave* echo Apres ; exit exit 0 fi if [[ $setup = 1 ]] ; then echo "-----------------------------------" echo "setup : recuperation des logiciels" echo "-----------------------------------" cd "$src" cp -f run_exemple_and_plot.sh scatter_score.py mycolors.py "$local/" cp -f HistoryMatching_addon.R htune_Emulating_Multi_Metric_Multi_LHS_new.R "$local/" cp -f htune_convertDesign.R kLHC.R htune_convert.R param2R.sh htune_csv2Rdata.R "$local/" cp -f htune_emulator_predictions.R "$local/" # the following files are specific to the "map" experiment cp -f plot_map_emulated.py map_make_files.sh exemple_image.txt "$local/" cd - cp -r "$install_dir/ExeterUQ_MOGP/BuildEmulator" . cp -f "$src/BuildEmulator_tmp.R" BuildEmulator/BuildEmulator.R ln -sf "$install_dir/ExeterUQ_MOGP/HistoryMatching" . ln -sf "$install_dir/mogp_emulator" . exit 0 else # On force le setup if [ ! -d BuildEmulator ] ; then bash ./exemple.sh setup ; fi fi # Modification of nugget directly in BuildEmulator if [ $nugget = 0 ] ; then sed -i'' '/NuggetProportion.*=.*, Nugget.*=/s/,.*Nugget.*$/, Nugget = 0.,/' BuildEmulator/BuildEmulator.R else sed -i'' '/NuggetProportion.*=.*, Nugget.*=/s/,.*Nugget.*$/, Nugget = "fit",/' BuildEmulator/BuildEmulator.R fi echo "------------------" echo "Work : WAVE $wave" echo "------------------" mkdir "WAVE${wave}" #set -x # print commands used echo "-------------------------------------------------------------" echo "[min,max] des parametres" echo "-------------------------------------------------------------" if [[ $map -eq 1 ]] ; then im=$(head -1 exemple_image.txt | awk ' { print $1 } ') jm=$(head -1 exemple_image.txt | awk ' { print $2 } ') cat > param < param < cibles.csv < cibles.csv < log/param2R.$$ echo running ./param2R.sh param, log in log/param2R.$$ cmd="Rscript htune_convertDesign.R -LHCSIZE $nsondes -NLHC 1 -wave $wave $seed" else echo "2B/ Computing the LHS for wave $wave" cmd="Rscript htune_convertDesign.R -wave $wave $seed" fi echo Running $cmd echo log in $log $cmd > $log 2>&1 echo "-------------------------------------------------------------" echo "Generation des resultats de modeles" echo "-------------------------------------------------------------" map_model() { echo F >| tmp # Reading image dimensions from the first line # find the line number in exemple_image.txt from i,j read in the param file lin=$(tail -n +2 "Par1D_Wave${wave}.asc"|awk '{ printf "%i ", (int($2)-1)*'$jm'+int($3) + 1 }') for l in $lin ; do sed -n "${l}p" exemple_image.txt|awk '{print $1}' >> tmp done echo SIM >| names tail -n +2 "Par1D_Wave${wave}.asc"|awk '{print $1}' |sed 's/"//g' >> names paste -d, names tmp > Metrics.csv } awk_model() { echo SIM,F > Metrics.csv tail -n +2 "Par1D_Wave${wave}.asc" | awk ' { sim=$1 ; a=$2 ; b=$3 ; F=10*log(2*a-1)+238 +'$noise'*sin(a*1000) ; print sim","F } ' | sed -e 's/"//g' >> Metrics.csv } if [[ $wave -lt $wave_two_metrics ]] ; then if [[ $map -eq 1 ]]; then map_model else awk_model fi else echo SIM,F,G > Metrics.csv tail -n +2 "Par1D_Wave${wave}.asc" | awk ' { sim=$1 ; a=$2 ; b=$3 ; F=10*log(2*a-1)+238; G=(220*a)+0.1*sin(b*200); print sim","F","G } ' | sed -e 's/"//g' >> Metrics.csv #tail -n +2 Par1D_Wave${wave}.asc | awk ' { sim=$1 ; a=$2 ; b=$3 ; c=$4 ; F=exp(-a*a)+0.01*cos(b*1000); G=a+0.05*sin(a*200); print sim","F","G } ' | sed -e 's/"//g' >> Metrics.csv fi cp -f "Par1D_Wave${wave}.asc" Params.asc cmd="Rscript --vanilla htune_csv2Rdata.R $wave -dir . -par Params.asc -sim Metrics.csv -ref cibles.csv $seed" log=log/htune_csv2Rdata.$$ echo Runing $cmd echo Log in $log $cmd > $log 2>&1 echo "-------------------------------------------------------------" echo "Saving files in WAVE$wave" echo "-------------------------------------------------------------" mv -f cibles.csv metrics_REF_${wave}.csv mv -f Metrics.csv metrics_WAVE${wave}_${wave}.csv mv -f Params.asc metrics_REF_${wave}.csv metrics_WAVE${wave}_${wave}.csv Wave${wave}.RData Par1D_Wave${wave}.asc Wave${wave}_SCM.Rdata Wave${wave}_REF.Rdata WAVE${wave}/ echo "-------------------------------------------------------------" echo "Emulateur + history matching" echo "-------------------------------------------------------------" # force constant fun for map experiment if [[ $map -eq 1 ]] ; then meanFun="constant" ; fi cmd="Rscript htune_Emulating_Multi_Metric_Multi_LHS_new.R -wave $wave -cutoff $cutoff -sample_size 30000 -sample_size_next_design 10 -meanFun $meanFun $seed" log=log/htune_emulate.$$ echo running $cmd echo log in $log time $cmd > $log 2>&1 mv -f InputSpace_wave${wave}.pdf WAVE${wave}/ echo "-------------------------------------------------------------" echo "Additional post processing" echo "-------------------------------------------------------------" echo Plotting scores log=log/scatter_score.log python scatter_score.py > $log 2>&1 echo runing python scatter_score.py, log in $log echo echo " =================" echo " Files available :" echo " =================" echo echo "score_metrics.pdf : scatter plot of metrics error / tolerance" echo "WAVE${wave}/EMULATOR_MULT_METRIC_wave1_mogp : Emulator python" echo "WAVE${wave}/EMULATOR_MULT_METRIC_wave1.RData : Emulator R" echo "WAVE${wave}/InputSpace_wave${wave}.pdf : implausibility matrix" echo "WAVE${wave}/metrics_REF_${wave}.csv : metrics of target, mean and tolerance" echo "WAVE${wave}/metrics_WAVE${wave}_${wave}.csv : metrics values of simulations" echo "WAVE${wave}/Par1D_Wave${wave}.asc : parameter values" echo "WAVE${wave}/Params.asc : same" echo "WAVE${wave}/Plots_LOO.pdf : Leave One Out plots" echo "WAVE${wave}/Plots_Metrics.pdf : metrics plots" echo "WAVE${wave}/Wave${wave}.RData : R failes for wave $wave" echo "WAVE${wave}/Wave${wave}_REF.Rdata : metrics of target, R format" echo "WAVE${wave}/Wave${wave}_SCM.Rdata : metrics of simulations, R format"