From 4be668dba272d267e6aad91df2fc2939bce60b2b Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Tue, 19 May 2020 11:51:44 +0200 Subject: [PATCH 01/30] fix bug in getInpSync() - failed if sync_tag was only heard on own hydro --- NEWS.md | 6 ++++++ R/syncHelperFuncs.R | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/NEWS.md b/NEWS.md index 9e8a550..7a5fed8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,9 @@ +# yaps v1.2.0.9112 +* New site add to github pages intended to collect yaps-related resources, how-tos etc. (https://baktoft.github.io/yaps/) +* Add first step-by-step tutorial to yaps pages + + + # yaps v1.2.0.9111 ## New stuff diff --git a/R/syncHelperFuncs.R b/R/syncHelperFuncs.R index 9ebaffa..348be7f 100644 --- a/R/syncHelperFuncs.R +++ b/R/syncHelperFuncs.R @@ -54,6 +54,12 @@ buildToaListGross <- function(sync_dat, excl_self_detect){ } other_detections <- detections[tag==sync_tags[i] & hydro_idx!=hydro_i_idx] + + # if no other hydro detected the sync_tag it is useless... + if(nrow(other_detections) == 0){ + next + } + self_detections[, epo_roll:=epofrac] other_detections[, epo_roll:=epofrac] toa_i <- t(plyr::daply(.data=other_detections, .variables="hydro_idx", .fun=function(k){ From 219682e2516b5a807bc0e01bd6dfc1ce6b520845 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Fri, 5 Jun 2020 07:57:30 +0200 Subject: [PATCH 02/30] add function to fine tune sync_model --- DESCRIPTION | 2 +- NAMESPACE | 1 + NEWS.md | 6 +- R/fineTuneSyncModel.R | 48 ++ R/syncGetters.R | 14 +- README.Rmd | 6 +- README.html | 754 ---------------------------- man/fineTuneSyncModel.Rd | 20 + man/getSyncModel.Rd | 4 +- tests/testthat/sync_model_ref.RData | Bin 26572 -> 26586 bytes 10 files changed, 89 insertions(+), 766 deletions(-) create mode 100644 R/fineTuneSyncModel.R delete mode 100644 README.html create mode 100644 man/fineTuneSyncModel.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 496566a..b7a4926 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: yaps Title: Track estimation using YAPS (Yet Another Positioning Solver) -Version: 1.2.0.9111 +Version: 1.2.0.9112 Authors@R: c( person("Henrik", "Baktoft", email = "hba@aqua.dtu.dk", role = c("cre", "aut")), person("Karl", "Gjelland", role=c("aut")), person("Uffe H.", "Thygesen", role=c("aut")), diff --git a/NAMESPACE b/NAMESPACE index 72ddc95..6fef07c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,6 +2,7 @@ export(alignBurstSeq) export(applySync) +export(fineTuneSyncModel) export(getDatTmb) export(getInits) export(getInp) diff --git a/NEWS.md b/NEWS.md index 7a5fed8..7d0195d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,8 +1,10 @@ # yaps v1.2.0.9112 -* New site add to github pages intended to collect yaps-related resources, how-tos etc. (https://baktoft.github.io/yaps/) +* New site added to github pages intended to collect yaps-related resources, how-tos etc. (https://baktoft.github.io/yaps/) * Add first step-by-step tutorial to yaps pages +* Add function to fine-tune sync_model based on residual threshold - +## Bug fixes +* Fix bug in getInpSync() - failed if sync_tag was only heard on own hydro # yaps v1.2.0.9111 diff --git a/R/fineTuneSyncModel.R b/R/fineTuneSyncModel.R new file mode 100644 index 0000000..c3b22f2 --- /dev/null +++ b/R/fineTuneSyncModel.R @@ -0,0 +1,48 @@ +#' Fine-tune an already fitted sync_model +#' Wrapper function to re-run getSyncModel() using the same data, but excluding outliers. Note dimensions of data might change if eps_threshold results in empty rows in the TOA-matrix. +#' @param sync_model sync_model obtained using getSyncModel() +#' @param eps_threshold Maximum value of residual measured in meter assuming speed of sound = 1450 m/s +#' @param silent logical whether to make getSyncModel() silent +#' @export +fineTuneSyncModel <- function(sync_model, eps_threshold, silent=TRUE){ + # original inp_sync + inp_sync <- sync_model$inp_synced + + # getting resids, identify outliers and get rid of them everywhere in inp_sync + resids <- sync_model$report$eps + resids[resids == 0] <- NA + outliers <- which(abs(resids)*1450 > eps_threshold) + inp_sync$dat_tmb_sync$toa_offset[outliers] <- NA + inp_sync$inp_params$toa[outliers] <- NA + + # check if any empty rows now exists - if so get rid of them entirely + nobs <- apply(inp_sync$dat_tmb_sync$toa_offset, 1, function(k) sum(!is.na(k))) + empty_rows <- which(nobs <= inp_sync$inp_params$min_hydros) + + if(length(empty_rows) > 0){ + inp_sync$dat_tmb_sync$toa_offset <- inp_sync$dat_tmb_sync$toa_offset[-empty_rows, ] + inp_sync$dat_tmb_sync$sync_tag_idx_vec <- inp_sync$dat_tmb_sync$sync_tag_idx_vec[-empty_rows] + inp_sync$dat_tmb_sync$offset_idx <- inp_sync$dat_tmb_sync$offset_idx[-empty_rows] + inp_sync$dat_tmb_sync$ss_idx <- inp_sync$dat_tmb_sync$ss_idx[-empty_rows] + inp_sync$dat_tmb_sync$np <- inp_sync$dat_tmb_sync$np - length(empty_rows) + + inp_sync$params_tmb_sync$TOP <- inp_sync$params_tmb_sync$TOP[-empty_rows] + + inp_sync$inp_params$toa <- inp_sync$inp_params$toa[-empty_rows, ] + } + + # # # attempt to speed up next getSyncModel() by setting initial param values to relevant values + # # # If NAs in OFFSET or SLOPEs it will not work... + # inp_sync$params_tmb_sync$OFFSET <- sync_model$pl$OFFSET + # inp_sync$params_tmb_sync$SLOPE1 <- sync_model$pl$SLOPE1 + # inp_sync$params_tmb_sync$SLOPE2 <- sync_model$pl$SLOPE2 + inp_sync$params_tmb_sync$SS <- sync_model$pl$SS + inp_sync$params_tmb_sync$TRUE_H <- sync_model$pl$TRUE_H + inp_sync$params_tmb_sync$LOG_SIGMA_TOA <- sync_model$pl$LOG_SIGMA_TOA + inp_sync$params_tmb_sync$LOG_SIGMA_HYDROS_XY <- sync_model$pl$LOG_SIGMA_HYDROS_XY + + # run getSyncModel() using the tuned inp_sync + sync_model_tuned <- getSyncModel(inp_sync, silent=silent) + + return(sync_model_tuned) +} diff --git a/R/syncGetters.R b/R/syncGetters.R index db2e106..1a76ea1 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -1,10 +1,10 @@ #' Get sync model from inp_sync object obtained by getInpSync() #' @param inp_sync Input data prepared for the sync model using `getInpSync()` #' @param silent Keep TMB quiet -#' @param fine_tune Logical. Wheter to re-run the sync model excluding residual outliers +#' @param fine_tune Logical. Whether to re-run the sync model excluding residual outliers. Consider to use fineTuneSyncModel() instead. #' @param max_iter Max number of iterations to run TMB. Default=100 seems to work in most cases. #' @export -getSyncModel <- function(inp_sync, silent=TRUE, fine_tune=TRUE, max_iter=100){ +getSyncModel <- function(inp_sync, silent=TRUE, fine_tune=FALSE, max_iter=100){ dat_tmb <- inp_sync$dat_tmb_sync params <- inp_sync$params_tmb_sync random <- inp_sync$random_tmb_sync @@ -13,6 +13,7 @@ getSyncModel <- function(inp_sync, silent=TRUE, fine_tune=TRUE, max_iter=100){ cat(paste0(Sys.time(), " \n")) cat(". Running optimization of the sync model. Please be patient - this can take a long time. \n") + if(fine_tune){cat(".... fine tuning is enabled, but is getting deprecated in this function. Consider to use the function fineTuneSyncModel() instead. See ?fineTuneSyncModel for info. \n")} tictoc::tic("Fitting sync model: ") opt <- c() @@ -47,13 +48,14 @@ getSyncModel <- function(inp_sync, silent=TRUE, fine_tune=TRUE, max_iter=100){ cat(".... obj = ", obj_val, " \n") report <- obj$report() - crazy_outliers <- which(abs(report$eps_toa) > 10) - fine_outliers <- which(abs(report$eps_toa)*1450 > 100) + crazy_outliers <- which(abs(report$eps_toa)*1450 > 10000) + fine_outliers <- which(abs(report$eps_toa)*1450 > 1000) if(length(crazy_outliers > 0)){ cat(".... some extreme outliers potentially affecting the model where identified and removed - rerunning sync_model \n") dat_tmb$toa_offset[crazy_outliers] <- NA } else if(fine_tune & length(fine_outliers > 0)){ - cat(".... fine_tune is enable (fine_tune = TRUE) - some outliers where identified and removed - rerunning sync_model \n") + cat(".... fine tuning is enabled, but is getting deprecated in this function. Consider to use the function fineTuneSyncModel() instead. See ?fineTuneSyncModel for info. \n") + cat(".... fine tuning is enable (fine_tune = TRUE) - some outliers where identified and removed - rerunning sync_model \n") dat_tmb$toa_offset[fine_outliers] <- NA } else { sync_done <- TRUE @@ -123,7 +125,7 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe inits_tmb_sync <- c(3, rep(-3,dat_tmb_sync$nh)) inp_params <- list(toa=inp_toa_list$toa, T0=T0, Hx0=inp_H_info$Hx0, Hy0=inp_H_info$Hy0, offset_levels=offset_vals$offset_levels, ss_levels=ss_vals$ss_levels, max_epo_diff=max_epo_diff, hydros=sync_dat$hydros, - lin_corr_coeffs=lin_corr_coeffs + lin_corr_coeffs=lin_corr_coeffs, min_hydros=min_hydros ) return(list(dat_tmb_sync=dat_tmb_sync, params_tmb_sync=params_tmb_sync, random_tmb_sync=random_tmb_sync, inits_tmb_sync=inits_tmb_sync, inp_params=inp_params)) diff --git a/README.Rmd b/README.Rmd index 8a2b7d1..7a0fbd9 100644 --- a/README.Rmd +++ b/README.Rmd @@ -182,7 +182,11 @@ points(hy~hx, data=hydros, col="green", pch=20, cex=3) lines(pl$Y~pl$X, col="red") ``` -# Papers using YAPS +# Papers using or relating to YAPS +## 2020 + +* Vergeynst, J., Vanwyck, T., Baeyens, R. et al. (2020). Acoustic positioning in a reflective environment: going beyond point-by-point algorithms. Anim Biotelemetry 8, 16. https://doi.org/10.1186/s40317-020-00203-1 + ## 2019 * Baktoft, H., Gjelland, K.Ø., Økland, F., Rehage, J.S., Rodemann, J.R., Corujo, R.S., Viadero, N., Thygesen, U.H. (2019). Opening the black box of fish tracking using acoustic telemetry diff --git a/README.html b/README.html deleted file mode 100644 index 81c0f6b..0000000 --- a/README.html +++ /dev/null @@ -1,754 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -

YAPS - (Yet Another Positioning Solver)

-

Welcome to the yaps repository. The yaps package is based on the original YAPS presented in Baktoft, Gjelland, Økland & Thygesen (2017): Positioning of aquatic animals based on time-of-arrival and random walk models using YAPS (Yet Another Positioning Solver)

-

To use yaps on own data, you need to compile a TOA-matrix based on synchronized hydrophone data and replace the hydros dataframe with actual hydrophone positions. A complete step-by-step guide on how to do this, can be found in our pre-print paper Opening the black box of fish tracking using acoustic telemetry. The example in this guide is based on data collected using a 69 kHz PPM-based system (Vemco VR2). We are working towards adding examples based on data collected using other manufacturers.

-

See YAPS in action

-

We are working towards true live tracking for aquatic animals. Check out our prototype of yaps-live (or click the screenshot below). The track estimation is done on-the-fly using yaps, but the live-stream of detection data is at the moment computer generated from manually downloaded data.

-

yaps-live

-

Dependencies

-

The yaps package requires devtools and TMB. Please see instructions on TMB installation. If working on Windows, you might also need to install Rtools as specified in the TMB documentation.

-

Disclaimer

-

yaps obeys the fundamental rule of “garbage in, garbage out”. Therefore, DO NOT expect yaps to salvage a poorly designed study, nor to turn crappy data into gold.
-We have attempted to make both synchronization process and track estimation user-friendly. However, it is not trivial to synchronize hydrophones (let alone automating the process) based on detections in a variable and often noisy environment. Hydrophones might be replaced/shifted and if not fixed securely, hydrophones might move/be moved during a study. Additionally, hydrophone performance and output format varies considerably among (and within) manufacturers. On top of that, hydrophones don’t always behave and perform as expected. For instance, some hydrophone models autonomously initiate reboots causing perturbation of varying magnitude and/or duration of the internal clock at apparently random time intervals. Therefore, the functions in yaps might perform sub-optimal or even fail miserably when applied to new data. If/when this happens, please let us know through a direct message or leave a bug-report. Also note, the to-do list for improvements and tweaks is long and growing, so stay tuned for updates.

-

Installation

-

Make sure you have the newest version of yaps installed. For this, you need devtools installed - if not already installed, run install.packages('devtools').
-yaps relies heavily on use of Template Model Builder TMB for fitting the models, so make sure TMB is installed and working by following the simple TMB instructions.
-Then install the latest version of yaps with:

- -

Processing example data ssu1

-

The code below is identical to the example workflow presented in Opening the black box of fish tracking using acoustic telemetry. See the pre-print for further explantion.

-
library(yaps)
-
-# set sync parameters 
-max_epo_diff <- 120
-min_hydros <- 2
-time_keeper_idx <- 5
-fixed_hydros_idx <- c(2:3, 6, 8, 11, 13:17)
-n_offset_day <- 2
-n_ss_day <- 2
-
-# get input data ready for getSyncModel()
-inp_sync <- getInpSync(sync_dat=ssu1, max_epo_diff, min_hydros, time_keeper_idx, 
-    fixed_hydros_idx, n_offset_day, n_ss_day)
-
-# fit the sync model
-sync_model <- getSyncModel(inp_sync, silent=TRUE)
-
-# Plot model residuals and model check plots to ensure the synchronization process was successful...
-plotSyncModelResids(sync_model, by='overall')       
-plotSyncModelResids(sync_model, by='sync_tag')      
-plotSyncModelResids(sync_model, by='hydro')         
-
-plotSyncModelCheck(sync_model, by="sync_bin_sync")  
-plotSyncModelCheck(sync_model, by="sync_bin_hydro") 
-plotSyncModelCheck(sync_model, by="sync_tag")       
-plotSyncModelCheck(sync_model, by="hydro")          
-
-# Apply the synchronization model to all data
-detections_synced <- applySync(toa=ssu1$detections, hydros=ssu1$hydros, sync_model)
-
-# Prepare to estimate track using `yaps` on newly synchronized `ssu1` data
-hydros_yaps <- data.table::data.table(sync_model$pl$TRUE_H)
-colnames(hydros_yaps) <- c('hx','hy','hz')
-
-# Specify focal tag and tag specific min and max burst intervals
-focal_tag <- 15266
-rbi_min <- 20
-rbi_max <- 40
-
-# Extract relevant data from the synced data
-synced_dat_ssu1 <- detections_synced[tag == focal_tag]
-
-# Compile TOA-matrix to use for yaps
-toa_ssu1 <- getToaYaps(synced_dat_ssu1, hydros_yaps, rbi_min, rbi_max)
-
-# Compile all input data needed for yaps
-inp_ssu1 <- getInp(hydros_yaps, toa_ssu1, E_dist="Mixture", n_ss=2, pingType="rbi", 
-    sdInits=1, rbi_min=rbi_min, rbi_max=rbi_max, ss_data_what="est", ss_data=0)
-
-# Run yaps to obtain estimated track
-yaps_out_ssu1 <- runYaps(inp_ssu1, silent=TRUE) 
-
-# plot the estimated track
-plotYaps(inp=inp_ssu1, yaps_out=yaps_out_ssu1, type="map")
-# Add gps track for direct comparison
-lines(utm_y~utm_x, data=ssu1$gps, lty=2)
-
-par(mfrow=c(2,1))
-plotYaps(inp=inp_ssu1, yaps_out=yaps_out_ssu1, type="coord_X")
-lines(utm_x~ts, data=ssu1$gps, lty=2)
-plotYaps(inp=inp_ssu1, yaps_out=yaps_out_ssu1, type="coord_Y")
-lines(utm_y~ts, data=ssu1$gps, lty=2)
-

Example using YAPS on simulated data

-
devtools::install_github("baktoft/yaps")
-rm(list=ls())   
-library(yaps)
-
-# Simulate true track of animal movement of n seconds
-trueTrack <- simTrueTrack(model='crw', n = 15000, deltaTime=1, shape=1, scale=0.5, addDielPattern=TRUE, ss='rw')
-
-# Simulate telemetry observations from true track.
-# Format and parameters depend on type of transmitter burst interval (BI) - stable (sbi) or random (rbi).
-pingType <- 'sbi'
-
-if(pingType == 'sbi') { # stable BI
-    sbi_mean <- 30; sbi_sd <- 1e-4;
-    teleTrack <- simTelemetryTrack(trueTrack, pingType=pingType, sbi_mean=sbi_mean, sbi_sd=sbi_sd)
-} else if(pingType == 'rbi'){ # random BI
-    pingType <- 'rbi'; rbi_min <- 20; rbi_max <- 40;
-    teleTrack <- simTelemetryTrack(trueTrack, pingType=pingType, rbi_min=rbi_min, rbi_max=rbi_max)
-}
-
-# Simulate hydrophone array
-hydros <- simHydros(auto=TRUE, trueTrack=trueTrack)
-toa_list <- simToa(teleTrack, hydros, pingType, sigmaToa=1e-4, pNA=0.25, pMP=0.01)
-toa <- toa_list$toa
-
-# Specify whether to use ss_data from measured water temperature (ss_data_what <- 'data') or to estimate ss in the model (ss_data_what <- 'est')
-ss_data_what <- 'data'
-if(ss_data_what == 'data') {ss_data <- teleTrack$ss} else {ss_data <- 0}
-
-
-if(pingType == 'sbi'){
-    inp <- getInp(hydros, toa, E_dist="Mixture", n_ss=10, pingType=pingType, sdInits=0, ss_data_what=ss_data_what, ss_data=ss_data)
-} else if(pingType == 'rbi'){
-    inp <- getInp(hydros, toa, E_dist="Mixture", n_ss=10, pingType=pingType, sdInits=0, rbi_min=rbi_min, rbi_max=rbi_max, ss_data_what=ss_data_what, ss_data=ss_data)
-} 
-str(inp)
-
-pl <- c()
-maxIter <- ifelse(pingType=="sbi", 500, 5000)
-outTmb <- runTmb(inp, maxIter=maxIter, getPlsd=TRUE, getRep=TRUE)
-str(outTmb)
-
-# Estimates in pl
-pl <- outTmb$pl
-# Correcting for hydrophone centering
-pl$X <- outTmb$pl$X + inp$inp_params$Hx0
-pl$Y <- outTmb$pl$Y + inp$inp_params$Hy0
-
-
-# Error estimates in plsd
-plsd <- outTmb$plsd
-
-# plot the resulting estimated track
-plot(y~x, data=trueTrack, type="l", xlim=range(hydros$hx), ylim=range(hydros$hy), asp=1)
-lines(y~x, data=teleTrack)
-points(hy~hx, data=hydros, col="green", pch=20, cex=3)
-lines(pl$Y~pl$X, col="red")
-

Papers using YAPS

-

2019

- - - - diff --git a/man/fineTuneSyncModel.Rd b/man/fineTuneSyncModel.Rd new file mode 100644 index 0000000..3e8af15 --- /dev/null +++ b/man/fineTuneSyncModel.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fineTuneSyncModel.R +\name{fineTuneSyncModel} +\alias{fineTuneSyncModel} +\title{Fine-tune an already fitted sync_model +Wrapper function to re-run getSyncModel() using the same data, but excluding outliers. Note dimensions of data might change if eps_threshold results in empty rows in the TOA-matrix.} +\usage{ +fineTuneSyncModel(sync_model, eps_threshold, silent = TRUE) +} +\arguments{ +\item{sync_model}{sync_model obtained using getSyncModel()} + +\item{eps_threshold}{Maximum value of residual measured in meter assuming speed of sound = 1450 m/s} + +\item{silent}{logical whether to make getSyncModel() silent} +} +\description{ +Fine-tune an already fitted sync_model +Wrapper function to re-run getSyncModel() using the same data, but excluding outliers. Note dimensions of data might change if eps_threshold results in empty rows in the TOA-matrix. +} diff --git a/man/getSyncModel.Rd b/man/getSyncModel.Rd index fa2aefe..eec6d53 100644 --- a/man/getSyncModel.Rd +++ b/man/getSyncModel.Rd @@ -4,7 +4,7 @@ \alias{getSyncModel} \title{Get sync model from inp_sync object obtained by getInpSync()} \usage{ -getSyncModel(inp_sync, silent = TRUE, fine_tune = TRUE, +getSyncModel(inp_sync, silent = TRUE, fine_tune = FALSE, max_iter = 100) } \arguments{ @@ -12,7 +12,7 @@ getSyncModel(inp_sync, silent = TRUE, fine_tune = TRUE, \item{silent}{Keep TMB quiet} -\item{fine_tune}{Logical. Wheter to re-run the sync model excluding residual outliers} +\item{fine_tune}{Logical. Whether to re-run the sync model excluding residual outliers. Consider to use fineTuneSyncModel() instead.} \item{max_iter}{Max number of iterations to run TMB. Default=100 seems to work in most cases.} } diff --git a/tests/testthat/sync_model_ref.RData b/tests/testthat/sync_model_ref.RData index f376ee8ae5e80ad395f16bd2bb854eb8ee789dfc..b335eade5a1b699fbb2169877f306dd827cf6aa5 100644 GIT binary patch literal 26586 zcmZ^~Wl$VW^evc#00{(l4<0|M$SCy_qQS1uh<++v`nMO@zukR8yS;CYlP_ zm06tFr;BZ^m2OaX*Te1Yc#~%AEj1Gtw6-I);I^`UgeO7ixx@hVn_?Udg}fcM0B;X9 z78-L3os^40QU~Vbj4CljbIgYK6H~T%E`Ldux;ooaM%}Qi-cuTVCo)_T@&2q8%1Y8R zbsNxDs+h>)gL~;wra0KI!7~1*jLhdO$>Y?f%-Ah{zTk*RYrB`1k>dNkhHQLt5cRrO zFe^?%J80A%Q=1luFdiIOB2@aR^5;5sop8*`>;2T+saD7AczyoZSt)$)mv!Hvh8Civ zoQps3dx>F(7b>;U2w}aR;ZQ?wdRZs%Gpzm4m(_DEo>5b!s(5y){346MIfhkC7VA@H zbC~Hxd7HaTN38eD*CizrL7D*(H@(7dw%Bfm_aia#1jZV&e|-?t=?&_I#@Z^LM9Wu@nPpgd_wXh|}E17=UC%g3e#WteWC8<$=z2g<%cHn3@mzB|f zcW?)(N}nhw5Cn19Q?v${xH$O^u1tC*#9p?hu;jOsnuVc1KwC(8Bckk;GDP7FW*g57 zZ9c4wrBd8%$(Ti)eE_9}yr>HMoP@F8#HsBbIlmeNDMqQ5$EQg;`1^QD!tm9N63SX` zL>MLh9`0x^?RHIj`{_ix+0pfI7U%`bbUpmjxw?SsNLau>oU^%YQmGX33@V#t!ra#* zxknZ6?Z!u5GkI~zFpU5|vCR4AV=Hb} zrE(wS(U~C}G$U18*vJTe0M}`4@q2JTZ)W-lfkSiIh@sSQW3qVhV#?11ZdKPMizMYEpr>&)@&~9doLf^-4tiVnZGn9-)GUrX** zmk~3Wjpz>#K&T#*5KEk8Z(q+3qGbq0c8tyxiertnv)aH)$n2 z2?!t5$qY90Z{&~-&9S*(P%Y}ucK@*R2ga73ntz4O$#In3;XBCd5fl%$&KrK|_#uIA zEGMGY%NvD-Z^(81IZKt(psym69J&8wpQM5tknCJv>#fS_J?3+BQ-yWtbfOIV($h*- zBK%dyOG)V+zl-NCOHiu?0$6?Vr#)UOl-q5nhml8B-3Q%F{>a)-@fcGHVk08Au1qm_ zDd`0$!$&~@eXOn zvVeMbVl+(>%5ZRKiaPonY#C;y%O7q`JwkX;o5$rdE#I@UWl(<4bexP$VRK2Pw>9G> zdVgm>v0FK=#n2IYX*p+u%})+zg5y1bRmWP0(3jm5T8&J9q+buq2`C@VJMyDveLS2x zoUa#Nx+w+-6LuGkX28iNugEAzhjL$2!hb(7?aJ7-`dxCkGS(mG6I45_nGF>QJ`Z0V z=i@jZjj%6y>j`uS_*&-jrE~7(LNLuVH_y%H%rd+UXRldU?M^0J92kqAz2|pp7wq7F z<~kE)qFti^yVK{CX)kVbV063H$Nh~3&-t4KUx}RPj=g$nx3}@C=x~wP=NTgT>|yP8 zAGL7Nr`>~yPJ$ETVQWhbF(~)f%PnvDd2BaxIQ(Du(T%66kXGCUa*geldeHtL!h;a_ z$B)?sp8U)v(!HsQ?n%Zv7Ww9bC&1-|r=-L*YUzZUb!PUDxb zg&~126K+HJTqia+XNI6nXUw=bjT=NvpU8${SPjrpWq$P1-s!%0Ab((~-|2L6L3uKm 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 P`TqX^hhg{^oAm$yCbbbM literal 26572 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 Date: Sun, 7 Jun 2020 22:12:39 +0200 Subject: [PATCH 03/30] eliminate estimation of log_sigma_hydros_xy, replax priors on SS, return plsd from getSyncModel() --- NEWS.md | 7 +++++++ R/syncGetters.R | 19 ++++++++++--------- src/nll_ss_est.h | 2 +- src/yaps_sync.h | 17 ++++++++++------- tests/testthat/sync_model_ref.RData | Bin 26586 -> 27912 bytes tests/testthat/yaps_out_ref.RData | Bin 34069 -> 34179 bytes 6 files changed, 28 insertions(+), 17 deletions(-) diff --git a/NEWS.md b/NEWS.md index 7d0195d..56de407 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,10 +1,17 @@ # yaps v1.2.0.9112 +## New stuff * New site added to github pages intended to collect yaps-related resources, how-tos etc. (https://baktoft.github.io/yaps/) * Add first step-by-step tutorial to yaps pages * Add function to fine-tune sync_model based on residual threshold ## Bug fixes * Fix bug in getInpSync() - failed if sync_tag was only heard on own hydro +* Eliminate estimation of log_sigma_hydros_xy in sync_model +* Relax priors on SS in both track and sync model - consider to switch to softplus instead +* Return plsd object from getSyncModel + + + # yaps v1.2.0.9111 diff --git a/R/syncGetters.R b/R/syncGetters.R index 1a76ea1..eef6fc7 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -64,11 +64,11 @@ getSyncModel <- function(inp_sync, silent=TRUE, fine_tune=FALSE, max_iter=100){ i <- i +1 } - # jointrep <- try(TMB::sdreport(obj, getJointPrecision=TRUE), silent=silent) - # param_names <- rownames(summary(jointrep)) - # sds <- summary(jointrep)[,2] - # summ <- data.frame(param=param_names, sd=sds) - # plsd <- split(summ[,2], f=summ$param) + jointrep <- try(TMB::sdreport(obj, getJointPrecision=TRUE), silent=silent) + param_names <- rownames(summary(jointrep)) + sds <- summary(jointrep)[,2] + summ <- data.frame(param=param_names, sd=sds) + plsd <- split(summ[,2], f=summ$param) pl$TRUE_H[,1] <- pl$TRUE_H[,1] + inp_params$Hx0 pl$TRUE_H[,2] <- pl$TRUE_H[,2] + inp_params$Hy0 @@ -82,7 +82,7 @@ getSyncModel <- function(inp_sync, silent=TRUE, fine_tune=FALSE, max_iter=100){ cat("Sync model done \n") cat("Consider saving the sync model for later use - e.g. save(sync_model, file='path_to_sync_save'). \n") tictoc::toc() - return(list(pl=pl, report=report, obj_val=obj_val, eps_long=eps_long, inp_synced=inp_sync)) + return(list(pl=pl, plsd=plsd, report=report, obj_val=obj_val, eps_long=eps_long, inp_synced=inp_sync)) } @@ -122,7 +122,8 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe dat_tmb_sync <- getDatTmbSync(sync_dat, time_keeper_idx, inp_toa_list, fixed_hydros_vec, offset_vals, ss_vals, inp_H_info, T0) params_tmb_sync <- getParamsTmbSync(dat_tmb_sync) random_tmb_sync <- c("TOP", "OFFSET", "SLOPE1", "SLOPE2", "SS", "TRUE_H") - inits_tmb_sync <- c(3, rep(-3,dat_tmb_sync$nh)) + # inits_tmb_sync <- c(3, rep(-3,dat_tmb_sync$nh)) + inits_tmb_sync <- c(3) inp_params <- list(toa=inp_toa_list$toa, T0=T0, Hx0=inp_H_info$Hx0, Hy0=inp_H_info$Hy0, offset_levels=offset_vals$offset_levels, ss_levels=ss_vals$ss_levels, max_epo_diff=max_epo_diff, hydros=sync_dat$hydros, lin_corr_coeffs=lin_corr_coeffs, min_hydros=min_hydros @@ -268,8 +269,8 @@ getParamsTmbSync <- function(dat_tmb_sync){ SLOPE2 = matrix(rnorm(dat_tmb_sync$nh*dat_tmb_sync$n_offset_idx, 0, 3), nrow=dat_tmb_sync$nh, ncol=dat_tmb_sync$n_offset_idx), SS = rnorm(dat_tmb_sync$n_ss_idx, 1420, 1), TRUE_H = as.matrix(cbind(dat_tmb_sync$H[,1], dat_tmb_sync$H[,2], dat_tmb_sync$H[,3])), - LOG_SIGMA_TOA = 0, - LOG_SIGMA_HYDROS_XY = rnorm(dat_tmb_sync$nh,-3,1) + LOG_SIGMA_TOA = 0 + # LOG_SIGMA_HYDROS_XY = rnorm(dat_tmb_sync$nh,-3,1) ) return(params_tmb_sync) } diff --git a/src/nll_ss_est.h b/src/nll_ss_est.h index 1d9246e..03d5d8c 100644 --- a/src/nll_ss_est.h +++ b/src/nll_ss_est.h @@ -3,7 +3,7 @@ PARAMETER_VECTOR(ss); // Estimated speed of sound - nll -= dnorm(ss(0),Type(1475.0),Type(40.0),true); + nll -= dnorm(ss(0),Type(1475.0),Type(100.0),true); for(int i = 1; i < n_ss; ++i){ nll -= dnorm(ss(i), ss(i-1),sqrt(2*D_v), true); nll -= dnorm(ss(i),Type(1475.0),Type(100.0),true); diff --git a/src/yaps_sync.h b/src/yaps_sync.h index ee56045..52239d3 100644 --- a/src/yaps_sync.h +++ b/src/yaps_sync.h @@ -20,8 +20,8 @@ PARAMETER(LOG_SIGMA_TOA); Type SIGMA_TOA = exp(LOG_SIGMA_TOA); - PARAMETER_VECTOR(LOG_SIGMA_HYDROS_XY); - vector SIGMA_HYDROS_XY = exp(LOG_SIGMA_HYDROS_XY); + // PARAMETER_VECTOR(LOG_SIGMA_HYDROS_XY); + // vector SIGMA_HYDROS_XY = exp(LOG_SIGMA_HYDROS_XY); array mu_toa(np,nh); array eps_toa(np,nh); @@ -77,16 +77,19 @@ if(fixed_hydros_vec(h) == 1){ nll -= dnorm(TRUE_H(h,0), H(h,0), Type(1e-6), true); nll -= dnorm(TRUE_H(h,1), H(h,1), Type(1e-6), true); - nll -= dnorm(SIGMA_HYDROS_XY(h), Type(0), Type(1), true); - } else { - nll -= dnorm(TRUE_H(h,0), H(h,0), SIGMA_HYDROS_XY(h), true); - nll -= dnorm(TRUE_H(h,1), H(h,1), SIGMA_HYDROS_XY(h), true); + // nll -= dnorm(SIGMA_HYDROS_XY(h), Type(0), Type(1), true); + } + else { + // nll -= dnorm(TRUE_H(h,0), H(h,0), SIGMA_HYDROS_XY(h), true); + // nll -= dnorm(TRUE_H(h,1), H(h,1), SIGMA_HYDROS_XY(h), true); + nll -= dnorm(TRUE_H(h,0), H(h,0), Type(10), true); + nll -= dnorm(TRUE_H(h,1), H(h,1), Type(10), true); } } //speed of sound component for(int i = 0; i < n_ss_idx; ++i){ - nll -= dnorm(SS(i), Type(1450.0), Type(20), true); + nll -= dnorm(SS(i), Type(1475.0), Type(100), true); } REPORT(eps_toa); diff --git a/tests/testthat/sync_model_ref.RData b/tests/testthat/sync_model_ref.RData index b335eade5a1b699fbb2169877f306dd827cf6aa5..2007327399c8cabc4f829587d033536d750bbb39 100644 GIT binary patch literal 27912 zcmZ^}WmFqp@HSZ5B1KDaO(~_g7nih9ptwWvQXGmqgrqI*?i$=F?ouE)1b4UK9tfKE zxBuNed-m+R_tU*!=G=MCGc)&@JAiPUXaBRXj{PtVwTG{POa!?se}20uC{T|GzJC4U z1#v>$Up3;tc&)H6Jg>F1q`oA`?!J!Gcq8{^{n?+~U*EnJqxtQ!{k_)wZaZ&QJl9S$ z;a06F3%-`K<)@{owFqI)gYN2FJQ;5%VIuJa3= zvyi_f`RKwK`pU9dFQ40{J8$pHvora4D-o>_@qZooEK|qzB<9y_ng$Q-AbLt8sD=zI znZ9BG$_K=^;o5U3pfqMCA0up$Cc~-2OOmfF!j+~=`*{;p5GGDkrz1y{ufTms=iY28 zryaiD60}=C%@`OeW)PNHqQ8GW#h3f8ShU`3t|)>mFKv2GkziazHgO@lQZ3T(OQPyG zHw*hS?9#g&^X0%y0YoO$!xKvKo;yHAr;j4VkDo4Dc!&u88XJznJ~TNPj!r^?~2tT%Q0nVYm1j_50?BI&NM8T zSuv8}9AV8xyqo8rd`lUI$32T9U&BPb)i=(6Vz3?bg{lSLw`n!6S9XQ2Y!xeH-s^AZ zOOk5dUt`S>kZVuzG^R1Ox9?3N@*9--Rr=8<4VgklZKM4i@uG0*6gfG z`CKhk58$9X`xS}zPdbv9snG6mSw|*_@hRh~O)-dpebQ|Hw+p5I+6O}5jRO)jAGFVk zmCWHBzeKQ>SPf^jshazW8X)XLwc7GqxRA2c;%-(
Wkq%zc#z zkw%@L5-65TYPTYTXm=(G2y2I({XK7LT$S-2BI_YBPB4SV6U&6A=bM}S{LuPVLdbKo z@Xsg%1ZCTDvi8dR{(Cd6YK~PGwr+?a{0-))3MR8dN{J>%( z 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 literal 26586 zcmZ^~Wl$VW^evc#00{(l4<0|M$SCy_qQS1uh<++v`nMO@zukR8yS;CYlP_ zm06tFr;BZ^m2OaX*Te1Yc#~%AEj1Gtw6-I);I^`UgeO7ixx@hVn_?Udg}fcM0B;X9 z78-L3os^40QU~Vbj4CljbIgYK6H~T%E`Ldux;ooaM%}Qi-cuTVCo)_T@&2q8%1Y8R zbsNxDs+h>)gL~;wra0KI!7~1*jLhdO$>Y?f%-Ah{zTk*RYrB`1k>dNkhHQLt5cRrO zFe^?%J80A%Q=1luFdiIOB2@aR^5;5sop8*`>;2T+saD7AczyoZSt)$)mv!Hvh8Civ zoQps3dx>F(7b>;U2w}aR;ZQ?wdRZs%Gpzm4m(_DEo>5b!s(5y){346MIfhkC7VA@H zbC~Hxd7HaTN38eD*CizrL7D*(H@(7dw%Bfm_aia#1jZV&e|-?t=?&_I#@Z^LM9Wu@nPpgd_wXh|}E17=UC%g3e#WteWC8<$=z2g<%cHn3@mzB|f zcW?)(N}nhw5Cn19Q?v${xH$O^u1tC*#9p?hu;jOsnuVc1KwC(8Bckk;GDP7FW*g57 zZ9c4wrBd8%$(Ti)eE_9}yr>HMoP@F8#HsBbIlmeNDMqQ5$EQg;`1^QD!tm9N63SX` zL>MLh9`0x^?RHIj`{_ix+0pfI7U%`bbUpmjxw?SsNLau>oU^%YQmGX33@V#t!ra#* zxknZ6?Z!u5GkI~zFpU5|vCR4AV=Hb} zrE(wS(U~C}G$U18*vJTe0M}`4@q2JTZ)W-lfkSiIh@sSQW3qVhV#?11ZdKPMizMYEpr>&)@&~9doLf^-4tiVnZGn9-)GUrX** zmk~3Wjpz>#K&T#*5KEk8Z(q+3qGbq0c8tyxiertnv)aH)$n2 z2?!t5$qY90Z{&~-&9S*(P%Y}ucK@*R2ga73ntz4O$#In3;XBCd5fl%$&KrK|_#uIA zEGMGY%NvD-Z^(81IZKt(psym69J&8wpQM5tknCJv>#fS_J?3+BQ-yWtbfOIV($h*- zBK%dyOG)V+zl-NCOHiu?0$6?Vr#)UOl-q5nhml8B-3Q%F{>a)-@fcGHVk08Au1qm_ zDd`0$!$&~@eXOn zvVeMbVl+(>%5ZRKiaPonY#C;y%O7q`JwkX;o5$rdE#I@UWl(<4bexP$VRK2Pw>9G> zdVgm>v0FK=#n2IYX*p+u%})+zg5y1bRmWP0(3jm5T8&J9q+buq2`C@VJMyDveLS2x zoUa#Nx+w+-6LuGkX28iNugEAzhjL$2!hb(7?aJ7-`dxCkGS(mG6I45_nGF>QJ`Z0V z=i@jZjj%6y>j`uS_*&-jrE~7(LNLuVH_y%H%rd+UXRldU?M^0J92kqAz2|pp7wq7F z<~kE)qFti^yVK{CX)kVbV063H$Nh~3&-t4KUx}RPj=g$nx3}@C=x~wP=NTgT>|yP8 zAGL7Nr`>~yPJ$ETVQWhbF(~)f%PnvDd2BaxIQ(Du(T%66kXGCUa*geldeHtL!h;a_ z$B)?sp8U)v(!HsQ?n%Zv7Ww9bC&1-|r=-L*YUzZUb!PUDxb zg&~126K+HJTqia+XNI6nXUw=bjT=NvpU8${SPjrpWq$P1-s!%0Ab((~-|2L6L3uKm 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 P`TqX^hhg{^oAm$yCbbbM diff --git a/tests/testthat/yaps_out_ref.RData b/tests/testthat/yaps_out_ref.RData index 192533d45923c9e07304396af92ff567794746e8..b67fef9b06ca1e59c63a1ab7b7c7c53b6d3d7cae 100644 GIT binary patch literal 34179 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 Date: Thu, 2 Jul 2020 17:48:27 +0200 Subject: [PATCH 04/30] change version to 1.2.1.9000 --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index b7a4926..bd99bc2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: yaps Title: Track estimation using YAPS (Yet Another Positioning Solver) -Version: 1.2.0.9112 +Version: 1.2.1.9000 Authors@R: c( person("Henrik", "Baktoft", email = "hba@aqua.dtu.dk", role = c("cre", "aut")), person("Karl", "Gjelland", role=c("aut")), person("Uffe H.", "Thygesen", role=c("aut")), From 6ba9673eaa5bfcd4c0061786dcfa0354a94a02d0 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Tue, 6 Oct 2020 12:30:34 +0200 Subject: [PATCH 05/30] add plots of temporal stability of sync_model --- DESCRIPTION | 2 +- NEWS.md | 4 +++- R/syncPlotters.R | 15 +++++++++++++-- man/alignBurstSeq.Rd | 10 ++++++++-- man/getDatTmb.Rd | 16 ++++++++++++++-- man/getInp.Rd | 17 ++++++++++++++--- man/getInpSync.Rd | 15 ++++++++++++--- man/getSyncModel.Rd | 3 +-- man/hald.Rd | 6 ++++-- man/plotSyncModelResids.Rd | 2 +- man/plotYaps.Rd | 3 +-- man/runYaps.Rd | 26 ++++++++++++++++++++------ man/simTOP.Rd | 10 ++++++++-- man/simTelemetryTrack.Rd | 10 ++++++++-- man/simToa.Rd | 3 +-- man/simTrueTrack.Rd | 14 +++++++++++--- man/ssu1.Rd | 6 ++++-- man/testYaps.Rd | 10 ++++++++-- 18 files changed, 132 insertions(+), 40 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index bd99bc2..8eb0f05 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -11,7 +11,7 @@ Depends: R (>= 3.5.0) License: GPL-3 + file LICENSE Encoding: UTF-8 LazyData: true -RoxygenNote: 6.1.1 +RoxygenNote: 7.1.1 LinkingTo: Rcpp, TMB, RcppEigen Imports: circular, data.table, ggplot2, Matrix, nloptr, plyr, Rcpp, RcppEigen, reshape2, splusTimeSeries, stats, tictoc, TMB, viridis, zoo Suggests: diff --git a/NEWS.md b/NEWS.md index 56de407..09c16d4 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,8 +1,10 @@ -# yaps v1.2.0.9112 +# yaps v1.2.1.9000 + ## New stuff * New site added to github pages intended to collect yaps-related resources, how-tos etc. (https://baktoft.github.io/yaps/) * Add first step-by-step tutorial to yaps pages * Add function to fine-tune sync_model based on residual threshold +* Add plot to check temporal stability of sync_models. Try plotSyncModelResids(sync_model, by='temporal') ## Bug fixes * Fix bug in getInpSync() - failed if sync_tag was only heard on own hydro diff --git a/R/syncPlotters.R b/R/syncPlotters.R index 8fa26e0..a2ed111 100644 --- a/R/syncPlotters.R +++ b/R/syncPlotters.R @@ -1,7 +1,7 @@ #' Plot residuals of sync_model to enable check of model #' #' @param sync_model Synchronization model obtained using `getSyncModel()` -#' @param by What to facet/group the plot by? Currently supports one of 'overall', 'sync_tag', 'hydro', 'quantiles' +#' @param by What to facet/group the plot by? Currently supports one of 'overall', 'sync_tag', 'hydro', 'quantiles', 'temporal', 'temporal_hydro', 'temporal_sync_tag' #' @export plotSyncModelResids <- function(sync_model, by='overall'){ eps_long <- sync_model$eps_long @@ -30,7 +30,18 @@ plotSyncModelResids <- function(sync_model, by='overall'){ out_quants <- quants[ abs(q10) > thres | abs(q90) > thres] p <- ggplot2::ggplot(data=out_quants) + geom_point(aes(x=hydro_idx, y=factor(sync_tag_idx), col=abs(q50), size=N)) p <- p + viridis::scale_color_viridis(option="magma") + labs(y = "sync tag idx") - + } else if(by %in% c('temporal', 'temporal_hydro', 'temporal_sync_tag')){ + tops <- sync_model$pl$TOP + sync_model$inp_synced$inp_params$T0 + offset_idx <- sync_model$inp_synced$dat_tmb_sync$offset_idx + # offset_levels <- sync_model$inp_synced$inp_params$offset_levels + eps_long[, top := tops[ping]] + if(by == 'temporal_hydro'){ + p <- ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=hydro_idx], aes(yintercept=mean_E_m), col="red") + facet_wrap(~hydro_idx) + } else if(by == 'temporal_sync_tag'){ + p <- ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=sync_tag_idx], aes(yintercept=mean_E_m), col="red") + facet_wrap(~sync_tag_idx) + } else if(by == 'temporal'){ + p <- ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=c('hydro_idx', 'sync_tag_idx')], aes(yintercept=mean_E_m), col="red") + facet_grid(sync_tag_idx~hydro_idx) + } } suppressWarnings(print(p)) diff --git a/man/alignBurstSeq.Rd b/man/alignBurstSeq.Rd index 75d1aa9..1090d22 100644 --- a/man/alignBurstSeq.Rd +++ b/man/alignBurstSeq.Rd @@ -4,8 +4,14 @@ \alias{alignBurstSeq} \title{Align synced data with known burst sequence} \usage{ -alignBurstSeq(synced_dat, burst_seq, seq_lng_min = 10, rbi_min, rbi_max, - plot_diag = TRUE) +alignBurstSeq( + synced_dat, + burst_seq, + seq_lng_min = 10, + rbi_min, + rbi_max, + plot_diag = TRUE +) } \arguments{ \item{synced_dat}{data.table obtained using applySync() on a detections_table} diff --git a/man/getDatTmb.Rd b/man/getDatTmb.Rd index f30cbfb..d7ff971 100644 --- a/man/getDatTmb.Rd +++ b/man/getDatTmb.Rd @@ -4,8 +4,20 @@ \alias{getDatTmb} \title{Get data for input to TMB} \usage{ -getDatTmb(hydros, toa, E_dist, n_ss, pingType, rbi_min, rbi_max, - ss_data_what, ss_data, biTable, inp_params, z_vec) +getDatTmb( + hydros, + toa, + E_dist, + n_ss, + pingType, + rbi_min, + rbi_max, + ss_data_what, + ss_data, + biTable, + inp_params, + z_vec +) } \arguments{ \item{hydros}{Dataframe from simHydros() or Dataframe with columns hx and hy containing positions of the receivers. Translate the coordinates to get the grid centre close to (0;0).} diff --git a/man/getInp.Rd b/man/getInp.Rd index e9ff555..e0490a8 100644 --- a/man/getInp.Rd +++ b/man/getInp.Rd @@ -4,9 +4,20 @@ \alias{getInp} \title{Get prepared inp-object for use in TMB-call} \usage{ -getInp(hydros, toa, E_dist, n_ss, pingType, sdInits = 1, rbi_min = 0, - rbi_max = 0, ss_data_what = "est", ss_data = 0, biTable = NULL, - z_vec = NULL) +getInp( + hydros, + toa, + E_dist, + n_ss, + pingType, + sdInits = 1, + rbi_min = 0, + rbi_max = 0, + ss_data_what = "est", + ss_data = 0, + biTable = NULL, + z_vec = NULL +) } \arguments{ \item{hydros}{Dataframe from simHydros() or Dataframe with columns hx and hy containing positions of the receivers. Translate the coordinates to get the grid centre close to (0;0).} diff --git a/man/getInpSync.Rd b/man/getInpSync.Rd index d08afb3..5062912 100644 --- a/man/getInpSync.Rd +++ b/man/getInpSync.Rd @@ -4,9 +4,18 @@ \alias{getInpSync} \title{Get object inp for synchronization} \usage{ -getInpSync(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, - fixed_hydros_idx, n_offset_day, n_ss_day, keep_rate = 1, - excl_self_detect = TRUE, lin_corr_coeffs = NA) +getInpSync( + sync_dat, + max_epo_diff, + min_hydros, + time_keeper_idx, + fixed_hydros_idx, + n_offset_day, + n_ss_day, + keep_rate = 1, + excl_self_detect = TRUE, + lin_corr_coeffs = NA +) } \arguments{ \item{sync_dat}{List containing data.tables with hydrophone information and detections. See e.g. `?ssu1` for example} diff --git a/man/getSyncModel.Rd b/man/getSyncModel.Rd index eec6d53..de7ebc5 100644 --- a/man/getSyncModel.Rd +++ b/man/getSyncModel.Rd @@ -4,8 +4,7 @@ \alias{getSyncModel} \title{Get sync model from inp_sync object obtained by getInpSync()} \usage{ -getSyncModel(inp_sync, silent = TRUE, fine_tune = FALSE, - max_iter = 100) +getSyncModel(inp_sync, silent = TRUE, fine_tune = FALSE, max_iter = 100) } \arguments{ \item{inp_sync}{Input data prepared for the sync model using `getInpSync()`} diff --git a/man/hald.Rd b/man/hald.Rd index edafa35..dac1c2b 100644 --- a/man/hald.Rd +++ b/man/hald.Rd @@ -4,7 +4,8 @@ \name{hald} \alias{hald} \title{Test data from Lake Hald, Denmark} -\format{A list containing 3 data.tables: +\format{ +A list containing 3 data.tables: \describe{ \item{hydros}{ \itemize{ @@ -29,7 +30,8 @@ \item utm_x, utm_y Coordinates of position. Same projection and coordinate system as used in hydros. } } -}} +} +} \usage{ hald } diff --git a/man/plotSyncModelResids.Rd b/man/plotSyncModelResids.Rd index 32a1bea..bb698b7 100644 --- a/man/plotSyncModelResids.Rd +++ b/man/plotSyncModelResids.Rd @@ -9,7 +9,7 @@ plotSyncModelResids(sync_model, by = "overall") \arguments{ \item{sync_model}{Synchronization model obtained using `getSyncModel()`} -\item{by}{What to facet/group the plot by? Currently supports one of 'overall', 'sync_tag', 'hydro', 'quantiles'} +\item{by}{What to facet/group the plot by? Currently supports one of 'overall', 'sync_tag', 'hydro', 'quantiles', 'temporal', 'temporal_hydro', 'temporal_sync_tag'} } \description{ Plot residuals of sync_model to enable check of model diff --git a/man/plotYaps.Rd b/man/plotYaps.Rd index b1fc9e6..e9f60b0 100644 --- a/man/plotYaps.Rd +++ b/man/plotYaps.Rd @@ -4,8 +4,7 @@ \alias{plotYaps} \title{Basic plots of yaps output} \usage{ -plotYaps(inp, yaps_out, type = "map", xlim = NULL, ylim = NULL, - main = NULL) +plotYaps(inp, yaps_out, type = "map", xlim = NULL, ylim = NULL, main = NULL) } \arguments{ \item{inp}{Input object obtained using \code{getInp()}} diff --git a/man/runYaps.Rd b/man/runYaps.Rd index e4007d9..1c5dc4a 100644 --- a/man/runYaps.Rd +++ b/man/runYaps.Rd @@ -5,13 +5,27 @@ \alias{runTmb} \title{Function to run TMB to estimate track} \usage{ -runYaps(inp, maxIter = 1000, getPlsd = TRUE, getRep = TRUE, - silent = TRUE, opt_fun = "nlminb", opt_controls = list(), - bounds = list()) +runYaps( + inp, + maxIter = 1000, + getPlsd = TRUE, + getRep = TRUE, + silent = TRUE, + opt_fun = "nlminb", + opt_controls = list(), + bounds = list() +) -runTmb(inp, maxIter = 1000, getPlsd = TRUE, getRep = TRUE, - silent = TRUE, opt_fun = "nlminb", opt_controls = list(), - bounds = list()) +runTmb( + inp, + maxIter = 1000, + getPlsd = TRUE, + getRep = TRUE, + silent = TRUE, + opt_fun = "nlminb", + opt_controls = list(), + bounds = list() +) } \arguments{ \item{inp}{inp-object obtained from getInp()} diff --git a/man/simTOP.Rd b/man/simTOP.Rd index 292aae4..bd91c18 100644 --- a/man/simTOP.Rd +++ b/man/simTOP.Rd @@ -4,8 +4,14 @@ \alias{simTOP} \title{Simulate time of pings (Internal function)} \usage{ -simTOP(trueTrack, pingType, sbi_mean = NULL, sbi_sd = NULL, - rbi_min = NULL, rbi_max = NULL) +simTOP( + trueTrack, + pingType, + sbi_mean = NULL, + sbi_sd = NULL, + rbi_min = NULL, + rbi_max = NULL +) } \arguments{ \item{trueTrack}{Track obtained from simTrueTrack().} diff --git a/man/simTelemetryTrack.Rd b/man/simTelemetryTrack.Rd index db6c403..9914d07 100644 --- a/man/simTelemetryTrack.Rd +++ b/man/simTelemetryTrack.Rd @@ -4,8 +4,14 @@ \alias{simTelemetryTrack} \title{Simulate telemetry track based on known true track obtained using simTrueTrack} \usage{ -simTelemetryTrack(trueTrack, pingType, sbi_mean = NULL, sbi_sd = NULL, - rbi_min = NULL, rbi_max = NULL) +simTelemetryTrack( + trueTrack, + pingType, + sbi_mean = NULL, + sbi_sd = NULL, + rbi_min = NULL, + rbi_max = NULL +) } \arguments{ \item{trueTrack}{Know track obtained using simTrueTrack} diff --git a/man/simToa.Rd b/man/simToa.Rd index ee204c5..7b6b6e3 100644 --- a/man/simToa.Rd +++ b/man/simToa.Rd @@ -4,8 +4,7 @@ \alias{simToa} \title{Sim TOA matrix for the supplied telemetryTrack} \usage{ -simToa(telemetryTrack, hydros, pingType, sigmaToa, pNA, pMP, - tempRes = NA) +simToa(telemetryTrack, hydros, pingType, sigmaToa, pNA, pMP, tempRes = NA) } \arguments{ \item{telemetryTrack}{Dataframe obtained from simTelemetryTrack} diff --git a/man/simTrueTrack.Rd b/man/simTrueTrack.Rd index 5c7e87d..cc12939 100644 --- a/man/simTrueTrack.Rd +++ b/man/simTrueTrack.Rd @@ -4,9 +4,17 @@ \alias{simTrueTrack} \title{Simulate a known movement track for subsequent estimation using YAPS} \usage{ -simTrueTrack(model = "rw", n, deltaTime = 1, D = NULL, - shape = NULL, scale = NULL, addDielPattern = TRUE, ss = "rw", - start_pos = NULL) +simTrueTrack( + model = "rw", + n, + deltaTime = 1, + D = NULL, + shape = NULL, + scale = NULL, + addDielPattern = TRUE, + ss = "rw", + start_pos = NULL +) } \arguments{ \item{model}{Movement model: 'rw': Two-dimension random walk (X,Y)} diff --git a/man/ssu1.Rd b/man/ssu1.Rd index 9b1f5c9..4e6a159 100644 --- a/man/ssu1.Rd +++ b/man/ssu1.Rd @@ -4,7 +4,8 @@ \name{ssu1} \alias{ssu1} \title{Test data from Florida Bay} -\format{A list containing 3 data.tables: +\format{ +A list containing 3 data.tables: \describe{ \item{hydros}{ \itemize{ @@ -29,7 +30,8 @@ \item utm_x, utm_y Coordinates of position. Same projection and coordinate system as used in hydros. } } -}} +} +} \usage{ ssu1 } diff --git a/man/testYaps.Rd b/man/testYaps.Rd index 3f1ef54..18ba393 100644 --- a/man/testYaps.Rd +++ b/man/testYaps.Rd @@ -4,8 +4,14 @@ \alias{testYaps} \title{Test YAPS core functionality} \usage{ -testYaps(silent = TRUE, pingType = "sbi", est_ss = TRUE, - opt_fun = "nlminb", opt_controls = list(), bounds = list()) +testYaps( + silent = TRUE, + pingType = "sbi", + est_ss = TRUE, + opt_fun = "nlminb", + opt_controls = list(), + bounds = list() +) } \arguments{ \item{silent}{Logical whether to print output to the console} From df77bffa7a80f732a6e8c3e6c17ca67b48271464 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Thu, 8 Oct 2020 12:48:53 +0200 Subject: [PATCH 06/30] adds bbox-constraint --- NAMESPACE | 2 ++ NEWS.md | 1 + R/getBbox.R | 17 +++++++++++++++++ R/plotBbox.R | 36 ++++++++++++++++++++++++++++++++++++ R/prepTmb.R | 20 +++++++++++++++----- R/zzz.R | 3 ++- man/getBbox.Rd | 21 +++++++++++++++++++++ man/getDatTmb.Rd | 5 ++++- man/getInp.Rd | 5 ++++- man/plotBbox.Rd | 16 ++++++++++++++++ src/nll_bbox.h | 14 ++++++++++++++ src/yaps_track.h | 6 ++++++ 12 files changed, 138 insertions(+), 8 deletions(-) create mode 100644 R/getBbox.R create mode 100644 R/plotBbox.R create mode 100644 man/getBbox.Rd create mode 100644 man/plotBbox.Rd create mode 100644 src/nll_bbox.h diff --git a/NAMESPACE b/NAMESPACE index 6fef07c..aceb74c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -3,6 +3,7 @@ export(alignBurstSeq) export(applySync) export(fineTuneSyncModel) +export(getBbox) export(getDatTmb) export(getInits) export(getInp) @@ -10,6 +11,7 @@ export(getInpSync) export(getParams) export(getSyncModel) export(getToaYaps) +export(plotBbox) export(plotSyncModelCheck) export(plotSyncModelResids) export(plotYaps) diff --git a/NEWS.md b/NEWS.md index 09c16d4..0ee4277 100644 --- a/NEWS.md +++ b/NEWS.md @@ -5,6 +5,7 @@ * Add first step-by-step tutorial to yaps pages * Add function to fine-tune sync_model based on residual threshold * Add plot to check temporal stability of sync_models. Try plotSyncModelResids(sync_model, by='temporal') +* Add option to impose spatial constraints (BBox only) and plot a visual of the constraint. Mainly used to constrain parameter space and increase speed and convergence. ## Bug fixes * Fix bug in getInpSync() - failed if sync_tag was only heard on own hydro diff --git a/R/getBbox.R b/R/getBbox.R new file mode 100644 index 0000000..5124f16 --- /dev/null +++ b/R/getBbox.R @@ -0,0 +1,17 @@ +#' Get a standard bounding box to impose spatial constraints +#' +#' Standard is a rectangle based on coordinates of outer hydros +- the buffer in meters +#' Returns a vector of lenght 6: c(x_min, x_max, y_min, y_max, eps, pen). Limits are given in UTM coordinates. +#' @param buffer Number of meters the spatial domain extends beyound the outer hydros. +#' @param eps Specifies how well-defined the borders are (eps=1E-2 is very sharp, eps=100 is very soft). +#' @param pen Specifies the penalty multiplier. +#' @inheritParams getInp +#' @export +getBbox <- function(hydros, buffer=5, eps=1E-3, pen=1){ + x_min <- hydros[which.min(hydros$hx), hx] - buffer + x_max <- hydros[which.max(hydros$hx), hx] + buffer + y_min <- hydros[which.min(hydros$hy), hy] - buffer + y_max <- hydros[which.max(hydros$hy), hy] + buffer + bbox <- c(x_min, x_max, y_min, y_max, eps, pen) + return(bbox) +} diff --git a/R/plotBbox.R b/R/plotBbox.R new file mode 100644 index 0000000..4238b9b --- /dev/null +++ b/R/plotBbox.R @@ -0,0 +1,36 @@ +#' Graphical representation of spatial constraints +#' @inheritParams getInp +#' @export +plotBbox <- function(hydros, bbox){ + softplus <- function(x, eps){return (0.5*(x+sqrt(x*x+eps*eps))) } + + x_space_min <- floor(hydros[which.min(hydros$x_synced), x_synced] - 20) + x_space_max <- ceiling(hydros[which.max(hydros$x_synced), x_synced] + 20) + y_space_min <- floor(hydros[which.min(hydros$y_synced), y_synced] - 20) + y_space_max <- ceiling(hydros[which.max(hydros$y_synced), y_synced] + 20) + + xs <- x_space_min:x_space_max + ys <- y_space_min:y_space_max + + x_min <- bbox[1] + x_max <- bbox[2] + y_min <- bbox[3] + y_max <- bbox[4] + eps <- bbox[5] + pen <- bbox[6] + + pen_mat <- (outer(xs,ys, FUN=function(i,j) { + pen * (softplus(i - x_max, eps=eps) + softplus(x_min - i, eps=eps) + + softplus(j - y_max, eps=eps) + softplus(y_min - j, eps=eps)) + })) + + + pen_long <- data.table::data.table(reshape2::melt(pen_mat)) + pen_long[, x := xs[Var1]] + pen_long[, y := ys[Var2]] + pen_long[, pen := value] + + p <- ggplot2::ggplot(pen_long) + geom_tile(aes(x, y, fill=(pen))) + coord_fixed(ratio=1) + viridis::scale_fill_viridis() + geom_point(data=hydros, aes(x=x_synced, y=y_synced), col="red", size=2) + print(p) +} + diff --git a/R/prepTmb.R b/R/prepTmb.R index 9c85f05..a27fb9a 100644 --- a/R/prepTmb.R +++ b/R/prepTmb.R @@ -12,13 +12,13 @@ #' @param ss_data Vector of ss-data to be used if ss_data_what = 'est'. Otherwise ss_data <- 0 (default) #' @param biTable Table of known burst intervals. Only used when pingType == "pbi". Default=NULL #' @param z_vec Vector of known depth values (positive real). Default=NULL is which case no 3D is assumed. Estimation of depth from detections is currently not supported. - +#' @param bbox Spatial constraints in the form of a bounding box. See ?getBbox for details. #' @return List of input data ready for use in TMB-call #' @export -getInp <- function(hydros, toa, E_dist, n_ss, pingType, sdInits=1, rbi_min=0, rbi_max=0, ss_data_what='est', ss_data=0, biTable=NULL, z_vec=NULL){ +getInp <- function(hydros, toa, E_dist, n_ss, pingType, sdInits=1, rbi_min=0, rbi_max=0, ss_data_what='est', ss_data=0, biTable=NULL, z_vec=NULL, bbox=NULL){ inp_params <- getInpParams(hydros, toa, pingType) - datTmb <- getDatTmb(hydros, toa, E_dist, n_ss, pingType, rbi_min, rbi_max, ss_data_what, ss_data, biTable, inp_params, z_vec) + datTmb <- getDatTmb(hydros, toa, E_dist, n_ss, pingType, rbi_min, rbi_max, ss_data_what, ss_data, biTable, inp_params, z_vec, bbox) params <- getParams(datTmb) inits <- getInits(datTmb, sdInits) return(list( @@ -39,7 +39,7 @@ getInp <- function(hydros, toa, E_dist, n_ss, pingType, sdInits=1, rbi_min=0, rb #' #' @return List for use in TMB. #' @export -getDatTmb <- function(hydros, toa, E_dist, n_ss, pingType, rbi_min, rbi_max, ss_data_what, ss_data, biTable, inp_params, z_vec){ +getDatTmb <- function(hydros, toa, E_dist, n_ss, pingType, rbi_min, rbi_max, ss_data_what, ss_data, biTable, inp_params, z_vec, bbox){ T0 <- inp_params$T0 Hx0 <- inp_params$Hx0 Hy0 <- inp_params$Hy0 @@ -75,6 +75,15 @@ getDatTmb <- function(hydros, toa, E_dist, n_ss, pingType, rbi_min, rbi_max, ss_ } else { how_3d <- 'data' } + + if(is.null(bbox)){ + bbox <- NA + } else { + bbox[1] <- bbox[1] - inp_params$Hx0 + bbox[2] <- bbox[2] - inp_params$Hx0 + bbox[3] <- bbox[3] - inp_params$Hy0 + bbox[4] <- bbox[4] - inp_params$Hy0 + } datTmb <- list( model = "yaps_track", @@ -95,7 +104,8 @@ getDatTmb <- function(hydros, toa, E_dist, n_ss, pingType, rbi_min, rbi_max, ss_ approxBI = approxBI, biTable = c(1), how_3d = how_3d, - z_vec = z_vec + z_vec = z_vec, + bbox = bbox ) if(pingType == 'pbi') {datTmb$biTable = biTable} diff --git a/R/zzz.R b/R/zzz.R index 27ed2e2..a410773 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -24,7 +24,8 @@ if (getRversion() >= "2.15.1"){ utils::globalVariables(c("N", "next_ping_too_late", "OFFSET", "offset_idx", "offset_level", "ping2next", "ping_idx", "q10", "q50")) utils::globalVariables(c("q90", "roll_eposync", "roll_seq_epo")) utils::globalVariables(c("seq_epo", "seq_lng", "seq_ping_idx", "serial", "slope1","SLOPE1", "SLOPE2", "slope2", "ss", "sync_tag", "sync_tag_idx")) - utils::globalVariables(c("tag", "toa_idx", "ts", "x", "y")) + utils::globalVariables(c("tag", "toa_idx", "ts", "x", "x_synced", "y", "y_synced")) + utils::globalVariables(c("Var1", "Var2")) } diff --git a/man/getBbox.Rd b/man/getBbox.Rd new file mode 100644 index 0000000..e8af9c5 --- /dev/null +++ b/man/getBbox.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/getBbox.R +\name{getBbox} +\alias{getBbox} +\title{Get a standard bounding box to impose spatial constraints} +\usage{ +getBbox(hydros, buffer = 5, eps = 0.001, pen = 1) +} +\arguments{ +\item{hydros}{Dataframe from simHydros() or Dataframe with columns hx and hy containing positions of the receivers. Translate the coordinates to get the grid centre close to (0;0).} + +\item{buffer}{Number of meters the spatial domain extends beyound the outer hydros.} + +\item{eps}{Specifies how well-defined the borders are (eps=1E-2 is very sharp, eps=100 is very soft).} + +\item{pen}{Specifies the penalty multiplier.} +} +\description{ +Standard is a rectangle based on coordinates of outer hydros +- the buffer in meters +Returns a vector of lenght 6: c(x_min, x_max, y_min, y_max, eps, pen). Limits are given in UTM coordinates. +} diff --git a/man/getDatTmb.Rd b/man/getDatTmb.Rd index d7ff971..037da98 100644 --- a/man/getDatTmb.Rd +++ b/man/getDatTmb.Rd @@ -16,7 +16,8 @@ getDatTmb( ss_data, biTable, inp_params, - z_vec + z_vec, + bbox ) } \arguments{ @@ -43,6 +44,8 @@ getDatTmb( \item{inp_params}{Selection of parameters used to setup and run YAPS.} \item{z_vec}{Vector of known depth values (positive real). Default=NULL is which case no 3D is assumed. Estimation of depth from detections is currently not supported.} + +\item{bbox}{Spatial constraints in the form of a bounding box. See ?getBbox for details.} } \value{ List for use in TMB. diff --git a/man/getInp.Rd b/man/getInp.Rd index e0490a8..a111a15 100644 --- a/man/getInp.Rd +++ b/man/getInp.Rd @@ -16,7 +16,8 @@ getInp( ss_data_what = "est", ss_data = 0, biTable = NULL, - z_vec = NULL + z_vec = NULL, + bbox = NULL ) } \arguments{ @@ -41,6 +42,8 @@ getInp( \item{biTable}{Table of known burst intervals. Only used when pingType == "pbi". Default=NULL} \item{z_vec}{Vector of known depth values (positive real). Default=NULL is which case no 3D is assumed. Estimation of depth from detections is currently not supported.} + +\item{bbox}{Spatial constraints in the form of a bounding box. See ?getBbox for details.} } \value{ List of input data ready for use in TMB-call diff --git a/man/plotBbox.Rd b/man/plotBbox.Rd new file mode 100644 index 0000000..44c2cc0 --- /dev/null +++ b/man/plotBbox.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/plotBbox.R +\name{plotBbox} +\alias{plotBbox} +\title{Graphical representation of spatial constraints} +\usage{ +plotBbox(hydros, bbox) +} +\arguments{ +\item{hydros}{Dataframe from simHydros() or Dataframe with columns hx and hy containing positions of the receivers. Translate the coordinates to get the grid centre close to (0;0).} + +\item{bbox}{Spatial constraints in the form of a bounding box. See ?getBbox for details.} +} +\description{ +Graphical representation of spatial constraints +} diff --git a/src/nll_bbox.h b/src/nll_bbox.h new file mode 100644 index 0000000..245a541 --- /dev/null +++ b/src/nll_bbox.h @@ -0,0 +1,14 @@ +// nll contrib if bbox constraints are specified + Type x_min = bbox(0); + Type x_max = bbox(1); + Type y_min = bbox(2); + Type y_max = bbox(3); + Type eps = bbox(4); + Type pen = bbox(5); + + for(int i=0; i Date: Thu, 8 Oct 2020 13:13:17 +0200 Subject: [PATCH 07/30] fix bug in plotBbox() --- R/plotBbox.R | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/R/plotBbox.R b/R/plotBbox.R index 4238b9b..ee3ff94 100644 --- a/R/plotBbox.R +++ b/R/plotBbox.R @@ -4,10 +4,10 @@ plotBbox <- function(hydros, bbox){ softplus <- function(x, eps){return (0.5*(x+sqrt(x*x+eps*eps))) } - x_space_min <- floor(hydros[which.min(hydros$x_synced), x_synced] - 20) - x_space_max <- ceiling(hydros[which.max(hydros$x_synced), x_synced] + 20) - y_space_min <- floor(hydros[which.min(hydros$y_synced), y_synced] - 20) - y_space_max <- ceiling(hydros[which.max(hydros$y_synced), y_synced] + 20) + x_space_min <- floor(hydros[which.min(hydros$hx), hx] - 20) + x_space_max <- ceiling(hydros[which.max(hydros$hx), hx] + 20) + y_space_min <- floor(hydros[which.min(hydros$hy), hy] - 20) + y_space_max <- ceiling(hydros[which.max(hydros$hy), hy] + 20) xs <- x_space_min:x_space_max ys <- y_space_min:y_space_max @@ -30,7 +30,7 @@ plotBbox <- function(hydros, bbox){ pen_long[, y := ys[Var2]] pen_long[, pen := value] - p <- ggplot2::ggplot(pen_long) + geom_tile(aes(x, y, fill=(pen))) + coord_fixed(ratio=1) + viridis::scale_fill_viridis() + geom_point(data=hydros, aes(x=x_synced, y=y_synced), col="red", size=2) + p <- ggplot2::ggplot(pen_long) + geom_tile(aes(x, y, fill=(pen))) + coord_fixed(ratio=1) + viridis::scale_fill_viridis() + geom_point(data=hydros, aes(x=hx, y=hy), col="red", size=2) print(p) } From d06acbc2c3d0430e44609d689d8cceb5ec1cf43f Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Thu, 8 Oct 2020 13:19:07 +0200 Subject: [PATCH 08/30] fix global variables warnings in devtools::check() --- R/syncPlotters.R | 6 +++--- R/zzz.R | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/R/syncPlotters.R b/R/syncPlotters.R index a2ed111..9a49258 100644 --- a/R/syncPlotters.R +++ b/R/syncPlotters.R @@ -36,11 +36,11 @@ plotSyncModelResids <- function(sync_model, by='overall'){ # offset_levels <- sync_model$inp_synced$inp_params$offset_levels eps_long[, top := tops[ping]] if(by == 'temporal_hydro'){ - p <- ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=hydro_idx], aes(yintercept=mean_E_m), col="red") + facet_wrap(~hydro_idx) + p <- ggplot2::ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=hydro_idx], aes(yintercept=mean_E_m), col="red") + facet_wrap(~hydro_idx) } else if(by == 'temporal_sync_tag'){ - p <- ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=sync_tag_idx], aes(yintercept=mean_E_m), col="red") + facet_wrap(~sync_tag_idx) + p <- ggplot2::ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=sync_tag_idx], aes(yintercept=mean_E_m), col="red") + facet_wrap(~sync_tag_idx) } else if(by == 'temporal'){ - p <- ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=c('hydro_idx', 'sync_tag_idx')], aes(yintercept=mean_E_m), col="red") + facet_grid(sync_tag_idx~hydro_idx) + p <- ggplot2::ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=c('hydro_idx', 'sync_tag_idx')], aes(yintercept=mean_E_m), col="red") + facet_grid(sync_tag_idx~hydro_idx) } } diff --git a/R/zzz.R b/R/zzz.R index a410773..80ceb56 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -18,14 +18,14 @@ NULL # Prevent R CMD check from complaining about the use of standard data.table variables and variables inside data.table calls if (getRversion() >= "2.15.1"){ utils::globalVariables(c(".")) - utils::globalVariables(c("bi", "cum_bi", "delta", "delta_eposync", "delta_ping", "dist_to_sync_tag")) + utils::globalVariables(c("bi", "coord_fixed", "cum_bi", "delta", "delta_eposync", "delta_ping", "dist_to_sync_tag")) utils::globalVariables(c("E", "E_m", "epo", "epofrac", "epofrac_lin_corr", "epo_roll", "eposync")) - utils::globalVariables(c("focal_hydro_idx", "frac", "hx", "hy", "hydro_idx", "id", "idx", "idx med_delta", "in_seq", "lin_corr_coeffs_offset", "lin_corr_coeffs_slope", "med_delta")) - utils::globalVariables(c("N", "next_ping_too_late", "OFFSET", "offset_idx", "offset_level", "ping2next", "ping_idx", "q10", "q50")) + utils::globalVariables(c("focal_hydro_idx", "frac", "hx", "hy", "hydro_idx", "id", "idx", "idx med_delta", "in_seq", "lin_corr_coeffs_offset", "lin_corr_coeffs_slope", "med_delta", "mean_E_m")) + utils::globalVariables(c("N", "next_ping_too_late", "OFFSET", "offset_idx", "offset_level", "ping", "ping2next", "ping_idx", "q10", "q50")) utils::globalVariables(c("q90", "roll_eposync", "roll_seq_epo")) utils::globalVariables(c("seq_epo", "seq_lng", "seq_ping_idx", "serial", "slope1","SLOPE1", "SLOPE2", "slope2", "ss", "sync_tag", "sync_tag_idx")) - utils::globalVariables(c("tag", "toa_idx", "ts", "x", "x_synced", "y", "y_synced")) - utils::globalVariables(c("Var1", "Var2")) + utils::globalVariables(c("tag", "toa_idx", "top", "ts", "x", "x_synced", "y", "y_synced")) + utils::globalVariables(c("value", "Var1", "Var2")) } From 1ba9169ccf7b078794d17ce62b497a3250389057 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Fri, 16 Oct 2020 13:05:53 +0200 Subject: [PATCH 09/30] add option to use recorded SS in sync --- NEWS.md | 1 + R/fineTuneSyncModel.R | 10 +++++--- R/syncGetters.R | 55 +++++++++++++++++++++++++++++++++--------- man/getInpSync.Rd | 10 ++++++-- src/nll_sync_ss_data.h | 1 + src/nll_sync_ss_est.h | 20 +++++++++++++++ src/yaps_sync.h | 31 ++++++++++++++++++------ 7 files changed, 104 insertions(+), 24 deletions(-) create mode 100644 src/nll_sync_ss_data.h create mode 100644 src/nll_sync_ss_est.h diff --git a/NEWS.md b/NEWS.md index 0ee4277..4e114e2 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,6 +2,7 @@ ## New stuff * New site added to github pages intended to collect yaps-related resources, how-tos etc. (https://baktoft.github.io/yaps/) +* Add option to use speed of sound based on logged temperatur in the synchronisation process. * Add first step-by-step tutorial to yaps pages * Add function to fine-tune sync_model based on residual threshold * Add plot to check temporal stability of sync_models. Try plotSyncModelResids(sync_model, by='temporal') diff --git a/R/fineTuneSyncModel.R b/R/fineTuneSyncModel.R index c3b22f2..1731964 100644 --- a/R/fineTuneSyncModel.R +++ b/R/fineTuneSyncModel.R @@ -17,7 +17,7 @@ fineTuneSyncModel <- function(sync_model, eps_threshold, silent=TRUE){ # check if any empty rows now exists - if so get rid of them entirely nobs <- apply(inp_sync$dat_tmb_sync$toa_offset, 1, function(k) sum(!is.na(k))) - empty_rows <- which(nobs <= inp_sync$inp_params$min_hydros) + empty_rows <- which(nobs < inp_sync$inp_params$min_hydros) if(length(empty_rows) > 0){ inp_sync$dat_tmb_sync$toa_offset <- inp_sync$dat_tmb_sync$toa_offset[-empty_rows, ] @@ -26,6 +26,10 @@ fineTuneSyncModel <- function(sync_model, eps_threshold, silent=TRUE){ inp_sync$dat_tmb_sync$ss_idx <- inp_sync$dat_tmb_sync$ss_idx[-empty_rows] inp_sync$dat_tmb_sync$np <- inp_sync$dat_tmb_sync$np - length(empty_rows) + if(inp_sync$dat_tmb_sync$ss_data_what == "data"){ + inp_sync$dat_tmb_sync$ss_data_vec = inp_sync$dat_tmb_sync$ss_data_vec [-empty_rows] + } + inp_sync$params_tmb_sync$TOP <- inp_sync$params_tmb_sync$TOP[-empty_rows] inp_sync$inp_params$toa <- inp_sync$inp_params$toa[-empty_rows, ] @@ -36,8 +40,8 @@ fineTuneSyncModel <- function(sync_model, eps_threshold, silent=TRUE){ # inp_sync$params_tmb_sync$OFFSET <- sync_model$pl$OFFSET # inp_sync$params_tmb_sync$SLOPE1 <- sync_model$pl$SLOPE1 # inp_sync$params_tmb_sync$SLOPE2 <- sync_model$pl$SLOPE2 - inp_sync$params_tmb_sync$SS <- sync_model$pl$SS - inp_sync$params_tmb_sync$TRUE_H <- sync_model$pl$TRUE_H + # inp_sync$params_tmb_sync$SS <- sync_model$pl$SS # Disabled because option to use ss_data is implemented... + inp_sync$params_tmb_sync$TRUE_H <- sync_model$pl$TRUE_H inp_sync$params_tmb_sync$LOG_SIGMA_TOA <- sync_model$pl$LOG_SIGMA_TOA inp_sync$params_tmb_sync$LOG_SIGMA_HYDROS_XY <- sync_model$pl$LOG_SIGMA_HYDROS_XY diff --git a/R/syncGetters.R b/R/syncGetters.R index eef6fc7..d6c40bb 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -95,12 +95,14 @@ getSyncModel <- function(inp_sync, silent=TRUE, fine_tune=FALSE, max_iter=100){ #' @param time_keeper_idx Index of the hydrophone to use as time keeper. Could e.g. be the one with smallest overall clock-drift. #' @param fixed_hydros_idx Vector of hydro idx's for all hydrophones where the position is assumed to be known with adequate accuracy and precission. Include as many as possible as fixed hydros to reduce overall computation time and reduce overall variability. As a bare minimum two hydros need to be fixed, but we strongly advice to use more than two. #' @param n_offset_day Specifies the number of hydrophone specific quadratic polynomials to use per day. For PPM based systems, 1 or 2 is often adeqaute. -#' @param n_ss_day Specifies number of speed of sound to estimate per day. Future versions will enable use of logged water temperature instead. However, estimating SS gives an extra option for sanity-checking the final sync-model. +#' @param n_ss_day Specifies number of speed of sound to estimate per day if no ss data is supplied. It is recommended to use logged water temperature instead. However, estimating SS gives an extra option for sanity-checking the final sync-model. +#' @param ss_data_what Indicates whether to estimate ("est") speed of sound or to use data based on logged water temperature ("data"). +#' @param ss_data data.table containing timestamp and speed of sound for the entire period to by synchronised. Must contain columns 'ts' (POSIXct timestamp) and 'ss' speed of sound in m/s (typical values range 1400 - 1550). #' @param keep_rate Syncing large data sets can take a long time. However, there is typically an excess number of sync tag detections and a sub-sample is typically enough for good synchronization. This parameter specifies the proportion (0-1) of data to keep when sub-sampling. #' @param excl_self_detect Logical whether to excluded detections of sync tags on the hydros they are co-located with. Sometimes self detections can introduce excessive residuals in the sync model in which case they should be excluded. #' @param lin_corr_coeffs Matrix of coefficients used for pre-sync linear correction. dim(lin_corr_coeffs)=(#hydros, 2). #' @export -getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixed_hydros_idx, n_offset_day, n_ss_day, keep_rate=1, excl_self_detect=TRUE, lin_corr_coeffs=NA){ +getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixed_hydros_idx, n_offset_day, n_ss_day, keep_rate=1, excl_self_detect=TRUE, lin_corr_coeffs=NA, ss_data_what="est", ss_data=c(0)){ sync_dat <- appendDetections(sync_dat) @@ -118,21 +120,38 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe fixed_hydros_vec <- getFixedHydrosVec(sync_dat, fixed_hydros_idx) offset_vals <- getOffsetVals(inp_toa_list, n_offset_day) ss_vals <- getSsVals(inp_toa_list, n_ss_day) - - dat_tmb_sync <- getDatTmbSync(sync_dat, time_keeper_idx, inp_toa_list, fixed_hydros_vec, offset_vals, ss_vals, inp_H_info, T0) - params_tmb_sync <- getParamsTmbSync(dat_tmb_sync) - random_tmb_sync <- c("TOP", "OFFSET", "SLOPE1", "SLOPE2", "SS", "TRUE_H") + ss_data_vec <- getSsDataVec(inp_toa_list, ss_data) + + dat_tmb_sync <- getDatTmbSync(sync_dat, time_keeper_idx, inp_toa_list, fixed_hydros_vec, offset_vals, ss_vals, inp_H_info, T0, ss_data_what, ss_data_vec) + params_tmb_sync <- getParamsTmbSync(dat_tmb_sync, ss_data_what) + if(ss_data_what == "est"){ + random_tmb_sync <- c("TOP", "OFFSET", "SLOPE1", "SLOPE2", "SS", "TRUE_H") + } else { + random_tmb_sync <- c("TOP", "OFFSET", "SLOPE1", "SLOPE2", "TRUE_H") + } # inits_tmb_sync <- c(3, rep(-3,dat_tmb_sync$nh)) inits_tmb_sync <- c(3) inp_params <- list(toa=inp_toa_list$toa, T0=T0, Hx0=inp_H_info$Hx0, Hy0=inp_H_info$Hy0, offset_levels=offset_vals$offset_levels, ss_levels=ss_vals$ss_levels, max_epo_diff=max_epo_diff, hydros=sync_dat$hydros, - lin_corr_coeffs=lin_corr_coeffs, min_hydros=min_hydros + lin_corr_coeffs=lin_corr_coeffs, min_hydros=min_hydros, ss_data=ss_data ) return(list(dat_tmb_sync=dat_tmb_sync, params_tmb_sync=params_tmb_sync, random_tmb_sync=random_tmb_sync, inits_tmb_sync=inits_tmb_sync, inp_params=inp_params)) } +#' Internal function. Extract speed of sounds for each timestamp used in sync-process from supplied data. +#' @inheritParams getInpSync +#' @noRd +getSsDataVec <- function(inp_toa_list, ss_data){ + ss_data + roll <- data.table::data.table(ts = as.POSIXct(inp_toa_list$epo_self_vec, origin="1970-01-01", tz="UTC")) + data.table::setkey(ss_data, ts) + data.table::setkey(roll, ts) + ss_data_vec <- ss_data[roll, roll="nearest"]$ss + return(ss_data_vec) +} + #' Internal function. Apply linear correction matrix to epofrac before sync #' @inheritParams getInpSync #' @noRd @@ -234,7 +253,7 @@ getSsVals <- function(inp_toa_list, n_ss_day){ #' Internal function to get dat for TMB sync #' @inheritParams getInpSync #' @noRd -getDatTmbSync <- function(sync_dat, time_keeper_idx, inp_toa_list, fixed_hydros_vec, offset_vals, ss_vals, inp_H_info, T0){ +getDatTmbSync <- function(sync_dat, time_keeper_idx, inp_toa_list, fixed_hydros_vec, offset_vals, ss_vals, inp_H_info, T0, ss_data_what, ss_data_vec){ H <- as.matrix(inp_H_info$inp_H) dimnames(H) <- NULL @@ -252,7 +271,9 @@ getDatTmbSync <- function(sync_dat, time_keeper_idx, inp_toa_list, fixed_hydros_ offset_idx = offset_vals$offset_idx, n_offset_idx = offset_vals$n_offset_idx, ss_idx = ss_vals$ss_idx, - n_ss_idx = ss_vals$n_ss_idx + n_ss_idx = ss_vals$n_ss_idx, + ss_data_what = ss_data_what, + ss_data_vec = ss_data_vec ) return(dat_tmb_sync) } @@ -261,17 +282,19 @@ getDatTmbSync <- function(sync_dat, time_keeper_idx, inp_toa_list, fixed_hydros_ #' Internal function to get params for TMB sync #' @inheritParams getInpSync #' @noRd -getParamsTmbSync <- function(dat_tmb_sync){ +getParamsTmbSync <- function(dat_tmb_sync, ss_data_what){ params_tmb_sync <- list( TOP = rowMeans(dat_tmb_sync$toa, na.rm=TRUE), OFFSET = matrix(rnorm(dat_tmb_sync$nh*dat_tmb_sync$n_offset_idx, 0, 3), nrow=dat_tmb_sync$nh, ncol=dat_tmb_sync$n_offset_idx), SLOPE1 = matrix(rnorm(dat_tmb_sync$nh*dat_tmb_sync$n_offset_idx, 0, 3), nrow=dat_tmb_sync$nh, ncol=dat_tmb_sync$n_offset_idx), SLOPE2 = matrix(rnorm(dat_tmb_sync$nh*dat_tmb_sync$n_offset_idx, 0, 3), nrow=dat_tmb_sync$nh, ncol=dat_tmb_sync$n_offset_idx), - SS = rnorm(dat_tmb_sync$n_ss_idx, 1420, 1), TRUE_H = as.matrix(cbind(dat_tmb_sync$H[,1], dat_tmb_sync$H[,2], dat_tmb_sync$H[,3])), LOG_SIGMA_TOA = 0 # LOG_SIGMA_HYDROS_XY = rnorm(dat_tmb_sync$nh,-3,1) ) + if(ss_data_what == "est"){ + params_tmb_sync[['SS']] <- rnorm(dat_tmb_sync$n_ss_idx, 1420, 1) + } return(params_tmb_sync) } @@ -280,12 +303,20 @@ getParamsTmbSync <- function(dat_tmb_sync){ #' @inheritParams getInpSync #' @noRd getEpsLong <- function(report, pl, inp_sync){ + + if(inp_sync$dat_tmb_sync$ss_data_what == "est"){ + ss_vec <- pl$SS[inp_sync$dat_tmb_sync$ss_idx] + } else { + ss_vec <- inp_sync$dat_tmb_sync$ss_data_vec + } + + eps <- report$eps_toa eps[which(eps==0)] <- NA eps_long <- data.table::data.table(reshape2::melt(eps)) colnames(eps_long) <- c('ping', 'hydro_idx', 'E') eps_long[, sync_tag_idx:=rep(inp_sync$dat_tmb_sync$sync_tag_idx_vec, times=ncol(eps))] - eps_long[, ss:=rep(pl$SS[inp_sync$dat_tmb_sync$ss_idx], times=ncol(eps))] + eps_long[, ss:=rep(ss_vec, times=ncol(eps))] eps_long[, E_m:=E*ss] eps_long <- eps_long[!is.na(E)] diff --git a/man/getInpSync.Rd b/man/getInpSync.Rd index 5062912..35b480b 100644 --- a/man/getInpSync.Rd +++ b/man/getInpSync.Rd @@ -14,7 +14,9 @@ getInpSync( n_ss_day, keep_rate = 1, excl_self_detect = TRUE, - lin_corr_coeffs = NA + lin_corr_coeffs = NA, + ss_data_what = "est", + ss_data = c(0) ) } \arguments{ @@ -30,13 +32,17 @@ getInpSync( \item{n_offset_day}{Specifies the number of hydrophone specific quadratic polynomials to use per day. For PPM based systems, 1 or 2 is often adeqaute.} -\item{n_ss_day}{Specifies number of speed of sound to estimate per day. Future versions will enable use of logged water temperature instead. However, estimating SS gives an extra option for sanity-checking the final sync-model.} +\item{n_ss_day}{Specifies number of speed of sound to estimate per day if no ss data is supplied. It is recommended to use logged water temperature instead. However, estimating SS gives an extra option for sanity-checking the final sync-model.} \item{keep_rate}{Syncing large data sets can take a long time. However, there is typically an excess number of sync tag detections and a sub-sample is typically enough for good synchronization. This parameter specifies the proportion (0-1) of data to keep when sub-sampling.} \item{excl_self_detect}{Logical whether to excluded detections of sync tags on the hydros they are co-located with. Sometimes self detections can introduce excessive residuals in the sync model in which case they should be excluded.} \item{lin_corr_coeffs}{Matrix of coefficients used for pre-sync linear correction. dim(lin_corr_coeffs)=(#hydros, 2).} + +\item{ss_data_what}{Indicates whether to estimate ("est") speed of sound or to use data based on logged water temperature ("data").} + +\item{ss_data}{data.table containing timestamp and speed of sound for the entire period to by synchronised. Must contain columns 'ts' (POSIXct timestamp) and 'ss' speed of sound in m/s (typical values range 1400 - 1550).} } \description{ Get object inp for synchronization diff --git a/src/nll_sync_ss_data.h b/src/nll_sync_ss_data.h new file mode 100644 index 0000000..df9fe2c --- /dev/null +++ b/src/nll_sync_ss_data.h @@ -0,0 +1 @@ + ss_i = ss_data_vec; \ No newline at end of file diff --git a/src/nll_sync_ss_est.h b/src/nll_sync_ss_est.h new file mode 100644 index 0000000..6e95715 --- /dev/null +++ b/src/nll_sync_ss_est.h @@ -0,0 +1,20 @@ + // PARAMETER(logD_v); // Diffusivity of sound speed + // Type D_v = exp(logD_v); + + PARAMETER_VECTOR(SS); // Estimated speed of sound + + + for(int i = 0; i < n_ss_idx; ++i){ + nll -= dnorm(SS(i), Type(1475.0), Type(100), true); + } + + for(int i = 0; i < np; i++){ + ss_i(i) = SS(ss_idx(i)); + } + + // nll -= dnorm(ss(0),Type(1475.0),Type(100.0),true); + // for(int i = 1; i < n_ss; ++i){ + // nll -= dnorm(ss(i), ss(i-1),sqrt(2*D_v), true); + // nll -= dnorm(ss(i),Type(1475.0),Type(100.0),true); + // } + diff --git a/src/yaps_sync.h b/src/yaps_sync.h index 52239d3..2247ddd 100644 --- a/src/yaps_sync.h +++ b/src/yaps_sync.h @@ -7,6 +7,9 @@ DATA_VECTOR(fixed_hydros_vec); DATA_IVECTOR(offset_idx); DATA_INTEGER(n_offset_idx); + + DATA_STRING(ss_data_what); // 'est' = estimate SS-data; 'data' = Use SS-data + DATA_VECTOR(ss_data_vec); // Vector of SS-data if used - length(ss_data) = np DATA_IVECTOR(ss_idx); DATA_INTEGER(n_ss_idx); @@ -14,7 +17,8 @@ PARAMETER_ARRAY(OFFSET); PARAMETER_ARRAY(SLOPE1); PARAMETER_ARRAY(SLOPE2); - PARAMETER_VECTOR(SS); + // PARAMETER_VECTOR(SS); + PARAMETER_ARRAY(TRUE_H); PARAMETER(LOG_SIGMA_TOA); @@ -26,6 +30,7 @@ array mu_toa(np,nh); array eps_toa(np,nh); array dist_mat(nh,nh); + vector ss_i(np); // Adapting to zero-based index in cpp sync_tag_idx_vec = sync_tag_idx_vec - 1; @@ -45,6 +50,14 @@ } } } + + if(ss_data_what != "est"){ + #include "nll_sync_ss_data.h" + } else { + #include "nll_sync_ss_est.h" + } + + // OFFSET as 1-D random walks... for(int i = 0; i < n_offset_idx; ++i){ for(int h=0; h Date: Fri, 16 Oct 2020 13:07:11 +0200 Subject: [PATCH 10/30] updated NEWS.md --- NEWS.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 4e114e2..ada95e9 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,8 +2,9 @@ ## New stuff * New site added to github pages intended to collect yaps-related resources, how-tos etc. (https://baktoft.github.io/yaps/) -* Add option to use speed of sound based on logged temperatur in the synchronisation process. * Add first step-by-step tutorial to yaps pages +* Add function to sequentially fine-tune sync model. +* Add option to use speed of sound based on logged temperatur in the synchronisation process. * Add function to fine-tune sync_model based on residual threshold * Add plot to check temporal stability of sync_models. Try plotSyncModelResids(sync_model, by='temporal') * Add option to impose spatial constraints (BBox only) and plot a visual of the constraint. Mainly used to constrain parameter space and increase speed and convergence. From 3890870dc2399f00c201f997bd9769f5be748b29 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Fri, 16 Oct 2020 13:56:42 +0200 Subject: [PATCH 11/30] fix bug in getting sync_model when ss_data_what=est --- R/syncGetters.R | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/R/syncGetters.R b/R/syncGetters.R index d6c40bb..23240d5 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -120,7 +120,11 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe fixed_hydros_vec <- getFixedHydrosVec(sync_dat, fixed_hydros_idx) offset_vals <- getOffsetVals(inp_toa_list, n_offset_day) ss_vals <- getSsVals(inp_toa_list, n_ss_day) - ss_data_vec <- getSsDataVec(inp_toa_list, ss_data) + if(ss_data_what == "data"){ + ss_data_vec <- getSsDataVec(inp_toa_list, ss_data) + } else { + ss_data_vec <- c(0) + } dat_tmb_sync <- getDatTmbSync(sync_dat, time_keeper_idx, inp_toa_list, fixed_hydros_vec, offset_vals, ss_vals, inp_H_info, T0, ss_data_what, ss_data_vec) params_tmb_sync <- getParamsTmbSync(dat_tmb_sync, ss_data_what) @@ -144,7 +148,6 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe #' @inheritParams getInpSync #' @noRd getSsDataVec <- function(inp_toa_list, ss_data){ - ss_data roll <- data.table::data.table(ts = as.POSIXct(inp_toa_list$epo_self_vec, origin="1970-01-01", tz="UTC")) data.table::setkey(ss_data, ts) data.table::setkey(roll, ts) From 811ca8db9b88ae4087056c80e00dd096527831cc Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Sat, 17 Oct 2020 07:54:52 +0200 Subject: [PATCH 12/30] fix bug in plotSyncModelResids() --- R/syncPlotters.R | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/R/syncPlotters.R b/R/syncPlotters.R index 9a49258..6fa7956 100644 --- a/R/syncPlotters.R +++ b/R/syncPlotters.R @@ -31,16 +31,18 @@ plotSyncModelResids <- function(sync_model, by='overall'){ p <- ggplot2::ggplot(data=out_quants) + geom_point(aes(x=hydro_idx, y=factor(sync_tag_idx), col=abs(q50), size=N)) p <- p + viridis::scale_color_viridis(option="magma") + labs(y = "sync tag idx") } else if(by %in% c('temporal', 'temporal_hydro', 'temporal_sync_tag')){ - tops <- sync_model$pl$TOP + sync_model$inp_synced$inp_params$T0 + T0 <- sync_model$inp_synced$inp_params$T0 offset_idx <- sync_model$inp_synced$dat_tmb_sync$offset_idx - # offset_levels <- sync_model$inp_synced$inp_params$offset_levels + offset_levels <- sync_model$inp_synced$inp_params$offset_levels + # tops <- sync_model$pl$TOP + sync_model$inp_synced$inp_params$T0 + tops <- as.POSIXct(sync_model$pl$TOP + offset_levels[offset_idx, 1], origin="1970-01-01", tz="UTC") eps_long[, top := tops[ping]] if(by == 'temporal_hydro'){ - p <- ggplot2::ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=hydro_idx], aes(yintercept=mean_E_m), col="red") + facet_wrap(~hydro_idx) + p <- ggplot2::ggplot(data=eps_long) + ggtitle("by hydro") + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=hydro_idx], aes(yintercept=mean_E_m), col="red") + facet_wrap(~hydro_idx) } else if(by == 'temporal_sync_tag'){ - p <- ggplot2::ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=sync_tag_idx], aes(yintercept=mean_E_m), col="red") + facet_wrap(~sync_tag_idx) + p <- ggplot2::ggplot(data=eps_long) + ggtitle("by sync tag") + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=sync_tag_idx], aes(yintercept=mean_E_m), col="red") + facet_wrap(~sync_tag_idx) } else if(by == 'temporal'){ - p <- ggplot2::ggplot(data=eps_long) + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=c('hydro_idx', 'sync_tag_idx')], aes(yintercept=mean_E_m), col="red") + facet_grid(sync_tag_idx~hydro_idx) + p <- ggplot2::ggplot(data=eps_long) + ggtitle("by hydro (col) X sync tag (row)") + geom_point(aes(x=top, y=E_m), pch=".") + geom_hline(data=eps_long[, .(mean_E_m=mean(E_m)), by=c('hydro_idx', 'sync_tag_idx')], aes(yintercept=mean_E_m), col="red") + facet_grid(sync_tag_idx~hydro_idx) } } From 4a2846d4abf1b7e613329e8bfc2bf2655b99ddd7 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Sat, 17 Oct 2020 08:50:52 +0200 Subject: [PATCH 13/30] fix bug in getInpSync() when ignoring specific hydros --- R/syncGetters.R | 10 +++++----- R/syncHelperFuncs.R | 9 +++++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/R/syncGetters.R b/R/syncGetters.R index 23240d5..f688dca 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -121,13 +121,13 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe offset_vals <- getOffsetVals(inp_toa_list, n_offset_day) ss_vals <- getSsVals(inp_toa_list, n_ss_day) if(ss_data_what == "data"){ - ss_data_vec <- getSsDataVec(inp_toa_list, ss_data) + ss_data_vec <- getSsDataVec(inp_toa_list, ss_data) } else { ss_data_vec <- c(0) } - dat_tmb_sync <- getDatTmbSync(sync_dat, time_keeper_idx, inp_toa_list, fixed_hydros_vec, offset_vals, ss_vals, inp_H_info, T0, ss_data_what, ss_data_vec) - params_tmb_sync <- getParamsTmbSync(dat_tmb_sync, ss_data_what) + dat_tmb_sync <- getDatTmbSync(sync_dat, time_keeper_idx, inp_toa_list, fixed_hydros_vec, offset_vals, ss_vals, inp_H_info, T0, ss_data_what, ss_data_vec) + params_tmb_sync <- getParamsTmbSync(dat_tmb_sync, ss_data_what) if(ss_data_what == "est"){ random_tmb_sync <- c("TOP", "OFFSET", "SLOPE1", "SLOPE2", "SS", "TRUE_H") } else { @@ -175,8 +175,8 @@ applyLinCorCoeffsInpSync <- function(sync_dat, lin_corr_coeffs){ #' @noRd getInpSyncToaList <- function(sync_dat, max_epo_diff, min_hydros, excl_self_detect, keep_rate, lin_corr_coeffs){ toa_list_gross <- buildToaListGross(sync_dat, excl_self_detect) - toa_list_pruned <- pruneToaListGross(toa_list_gross, max_epo_diff, min_hydros) - toa_list_downsampled <- downsampleToaList(toa_list_pruned, keep_rate) + toa_list_pruned <- yaps:::pruneToaListGross(toa_list_gross, max_epo_diff, min_hydros) + toa_list_downsampled <- yaps:::downsampleToaList(toa_list_pruned, keep_rate) return(toa_list_downsampled) } diff --git a/R/syncHelperFuncs.R b/R/syncHelperFuncs.R index 348be7f..3612ce1 100644 --- a/R/syncHelperFuncs.R +++ b/R/syncHelperFuncs.R @@ -44,13 +44,18 @@ buildToaListGross <- function(sync_dat, excl_self_detect){ sync_tag_i_idx <- hydro_i_idx # hydro_st_serial <- hydros[sync_tag == sync_tags[st], serial] self_detections <- detections[tag==sync_tags[i] & hydro_idx==hydro_i_idx] + # detects_on_others <- detections[tag==sync_tags[i] & hydro_idx!=hydro_i_idx] # hack added to support ref tags to serve as beacons without a hydro if(nrow(self_detections) == 0){ num_detects_on_hydro <- detections[tag==sync_tags[i], .N, by=hydro_idx] best_hydro_idx <- num_detects_on_hydro[which.max(num_detects_on_hydro$N), hydro_idx] - best_other_detections <- detections[tag==sync_tags[i] & hydro_idx==best_hydro_idx] - self_detections <- best_other_detections + if(length(best_hydro_idx) == 0){ + self_detections <- NA #ugly hack added to support situations where hydros are completely ignored - e.g. due to very crappy performance + } else { + best_other_detections <- detections[tag==sync_tags[i] & hydro_idx==best_hydro_idx] + self_detections <- best_other_detections + } } other_detections <- detections[tag==sync_tags[i] & hydro_idx!=hydro_i_idx] From 989dcd1d6b6700f14fa4cf63933042c7db04de6f Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Thu, 22 Oct 2020 14:26:30 +0200 Subject: [PATCH 14/30] fix bug if not enough data to produce toa --- R/getToaYaps.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/R/getToaYaps.R b/R/getToaYaps.R index 06f62a3..0b79dfb 100644 --- a/R/getToaYaps.R +++ b/R/getToaYaps.R @@ -47,6 +47,12 @@ getToaYaps <- function(synced_dat, hydros, rbi_min, rbi_max){ nobs <- apply(toa, 1, function(k) sum(!is.na(k))) first_ping <- which(nobs >= 2)[1] last_ping <- rev(which(nobs >= 2))[1] + + if(is.na(first_ping) | is.na(last_ping) | first_ping == last_ping){ + print("FATAL ERROR: Not enough data to produce toa") + return(FALSE) + } + toa <- toa[first_ping:last_ping, ] # remake toa-matrix to include pings missed by all hydros... From b09375971c0f50c3c221418aa54a0256765d47bd Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Wed, 28 Oct 2020 21:23:21 +0100 Subject: [PATCH 15/30] add checkInpSync() --- NAMESPACE | 1 + NEWS.md | 1 + R/checkInpSync.R | 56 ++++++++++++++++++++++++++++++++++++++++++ R/syncGetters.R | 6 +++-- man/checkInpSync.Rd | 14 +++++++++++ man/getSyncCoverage.Rd | 11 +++++++++ 6 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 R/checkInpSync.R create mode 100644 man/checkInpSync.Rd create mode 100644 man/getSyncCoverage.Rd diff --git a/NAMESPACE b/NAMESPACE index aceb74c..351662d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -9,6 +9,7 @@ export(getInits) export(getInp) export(getInpSync) export(getParams) +export(getSyncCoverage) export(getSyncModel) export(getToaYaps) export(plotBbox) diff --git a/NEWS.md b/NEWS.md index ada95e9..a266002 100644 --- a/NEWS.md +++ b/NEWS.md @@ -8,6 +8,7 @@ * Add function to fine-tune sync_model based on residual threshold * Add plot to check temporal stability of sync_models. Try plotSyncModelResids(sync_model, by='temporal') * Add option to impose spatial constraints (BBox only) and plot a visual of the constraint. Mainly used to constrain parameter space and increase speed and convergence. +* Add various checks in checkInpSync() ## Bug fixes * Fix bug in getInpSync() - failed if sync_tag was only heard on own hydro diff --git a/R/checkInpSync.R b/R/checkInpSync.R new file mode 100644 index 0000000..f014341 --- /dev/null +++ b/R/checkInpSync.R @@ -0,0 +1,56 @@ +#' Check consistency of `inp_sync` object obtained from `getInpSync()` +#' +#' @param inp_sync Object obtained using `getInpSync()` +checkInpSync <- function(inp_sync){ + # speed of sound stuff + if(inp_sync$dat_tmb_sync$ss_data_what != "data"){cat("WARNING: getSyncModel() will estimate speed of sound. It is strongly advised to use data instead!\n")} + if(inp_sync$dat_tmb_sync$ss_data_what == "data" ){ + stopifnot(length(inp_sync$dat_tmb_sync$ss_data_vec) == inp_sync$dat_tmb_sync$np) + } + + # is timekeeper a fixed hydro? + stopifnot(inp_sync$dat_tmb_sync$fixed_hydros_vec[inp_sync$dat_tmb_sync$tk ] == 1) + + # are dimensions correct? + stopifnot(ncol(inp_sync$dat_tmb_sync$toa) == inp_sync$dat_tmb_sync$nh) + stopifnot(nrow(inp_sync$dat_tmb_sync$toa) == inp_sync$dat_tmb_sync$np) + + # check that all offset_idx are present in the offset_idx vector + stopifnot(inp_sync$dat_tmb_sync$n_offset_idx == length(unique(inp_sync$dat_tmb_sync$offset_idx))) + + # check that all hydro x offset_idx combination have at least some data... + # trigger thresholds for N is somewhat arbitrary.. + sync_coverage <- getSyncCoverage(inp_sync, plot=FALSE) + if(min(sync_coverage$N) <= 5) {cat("ERROR: At least one hydro x offset_idx combination has less than 5 observations. This hydro cannot be synced in that period!\n")} + stopifnot(min(sync_coverage$N) > 5) + if(min(sync_coverage$N) < 10) { + cat("WARNING: At least one hydro has less than 10 pings in an offset_idx - try getSyncCoverage(inp_sync, plot=TRUE) for visual\n and rerun getInpSync() with increased keep_rate\n") + } else if(min(sync_coverage$N) < 50) { + cat("WARNING: At least one hydro has less than 50 pings in an offset_idx - try getSyncCoverage(inp_sync, plot=TRUE) for visual\n and rerun getInpSync() with increased keep_rate\n") + } +} + +#' Quick overview to check if all hydros have enough data within each offset period. +#' +#' @inheritparams checkInpSyn +#' @export +getSyncCoverage <- function(inp_sync, plot=FALSE){ + toa <- inp_sync$dat_tmb_sync$toa + nh <- ncol(toa) + offset_idx <- inp_sync$dat_tmb_sync$offset_idx + + toa_long <- data.table::data.table(reshape2::melt(toa)) + colnames(toa_long) <- c('ping', 'h','toa') + toa_long[, offset_idx := rep(offset_idx, nh)] + sync_coverage <- data.table::data.table(reshape2::melt(with(toa_long[!is.na(toa)], table(h, offset_idx)))) + colnames(sync_coverage) <- c('h', 'offset_idx' ,'N') + + if(plot){ + p <- ggplot(sync_coverage) + geom_point(aes(offset_idx, N)) + p <- p + geom_point(data=sync_coverage[N < 50], aes(offset_idx, N), col="red", size=2) + p <- p + facet_wrap(~h) + ylim(0, max(sync_coverage$N)) + print(p) + } + + return(sync_coverage) +} \ No newline at end of file diff --git a/R/syncGetters.R b/R/syncGetters.R index f688dca..22ce9d0 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -139,8 +139,10 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe ss_levels=ss_vals$ss_levels, max_epo_diff=max_epo_diff, hydros=sync_dat$hydros, lin_corr_coeffs=lin_corr_coeffs, min_hydros=min_hydros, ss_data=ss_data ) - - return(list(dat_tmb_sync=dat_tmb_sync, params_tmb_sync=params_tmb_sync, random_tmb_sync=random_tmb_sync, inits_tmb_sync=inits_tmb_sync, inp_params=inp_params)) + + inp_sync <- list(dat_tmb_sync=dat_tmb_sync, params_tmb_sync=params_tmb_sync, random_tmb_sync=random_tmb_sync, inits_tmb_sync=inits_tmb_sync, inp_params=inp_params) + checkInpSync(inp_sync) + return(inp_sync) } diff --git a/man/checkInpSync.Rd b/man/checkInpSync.Rd new file mode 100644 index 0000000..455148f --- /dev/null +++ b/man/checkInpSync.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/checkInpSync.R +\name{checkInpSync} +\alias{checkInpSync} +\title{Check consistency of `inp_sync` object obtained from `getInpSync()`} +\usage{ +checkInpSync(inp_sync) +} +\arguments{ +\item{inp_sync}{Object obtained using `getInpSync()`} +} +\description{ +Check consistency of `inp_sync` object obtained from `getInpSync()` +} diff --git a/man/getSyncCoverage.Rd b/man/getSyncCoverage.Rd new file mode 100644 index 0000000..b265277 --- /dev/null +++ b/man/getSyncCoverage.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/checkInpSync.R +\name{getSyncCoverage} +\alias{getSyncCoverage} +\title{Quick overview to check if all hydros have enough data within each offset period.} +\usage{ +getSyncCoverage(inp_sync, plot = FALSE) +} +\description{ +Quick overview to check if all hydros have enough data within each offset period. +} From edc9eb564bede3b2942d0392ac63c76d876fa2a2 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Thu, 29 Oct 2020 09:50:24 +0100 Subject: [PATCH 16/30] minor bug fixes according to check() and test() --- NAMESPACE | 4 ++++ R/checkInpSync.R | 23 ++++++++++++++--------- R/syncGetters.R | 9 +++++---- R/zzz.R | 2 +- man/checkInpSync.Rd | 4 +++- man/getInpSync.Rd | 5 ++++- man/getSyncCoverage.Rd | 5 +++++ tests/testthat/sync_model_ref.RData | Bin 27912 -> 27944 bytes tests/testthat/test-getSyncModel.R | 12 ++++++------ tests/testthat/test-runYaps.R | 20 ++++++++++---------- tests/testthat/yaps_out_ref.RData | Bin 34179 -> 34252 bytes 11 files changed, 52 insertions(+), 32 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 351662d..10d7cac 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,6 +2,7 @@ export(alignBurstSeq) export(applySync) +export(checkInpSync) export(fineTuneSyncModel) export(getBbox) export(getDatTmb) @@ -45,12 +46,15 @@ importFrom(ggplot2,geom_smooth) importFrom(ggplot2,geom_tile) importFrom(ggplot2,geom_violin) importFrom(ggplot2,geom_vline) +importFrom(ggplot2,ggtitle) importFrom(ggplot2,labs) importFrom(ggplot2,scale_fill_gradientn) importFrom(ggplot2,scale_y_log10) importFrom(ggplot2,theme) importFrom(ggplot2,xlab) +importFrom(ggplot2,xlim) importFrom(ggplot2,ylab) +importFrom(ggplot2,ylim) importFrom(grDevices,dev.off) importFrom(grDevices,pdf) importFrom(graphics,abline) diff --git a/R/checkInpSync.R b/R/checkInpSync.R index f014341..6875902 100644 --- a/R/checkInpSync.R +++ b/R/checkInpSync.R @@ -1,15 +1,19 @@ #' Check consistency of `inp_sync` object obtained from `getInpSync()` #' +#' @inheritParams getInpSync #' @param inp_sync Object obtained using `getInpSync()` -checkInpSync <- function(inp_sync){ +#' @export +checkInpSync <- function(inp_sync, silent_check){ # speed of sound stuff - if(inp_sync$dat_tmb_sync$ss_data_what != "data"){cat("WARNING: getSyncModel() will estimate speed of sound. It is strongly advised to use data instead!\n")} + if(!silent_check & inp_sync$dat_tmb_sync$ss_data_what != "data"){cat("WARNING: getSyncModel() will estimate speed of sound. It is strongly advised to use data instead!\n")} if(inp_sync$dat_tmb_sync$ss_data_what == "data" ){ stopifnot(length(inp_sync$dat_tmb_sync$ss_data_vec) == inp_sync$dat_tmb_sync$np) } # is timekeeper a fixed hydro? - stopifnot(inp_sync$dat_tmb_sync$fixed_hydros_vec[inp_sync$dat_tmb_sync$tk ] == 1) + if(!silent_check & inp_sync$dat_tmb_sync$fixed_hydros_vec[inp_sync$dat_tmb_sync$tk ] != 1){ + cat("NOTE: The designated time-keeper is not a fixed hydrophone - is this intentional?\n") + } # are dimensions correct? stopifnot(ncol(inp_sync$dat_tmb_sync$toa) == inp_sync$dat_tmb_sync$nh) @@ -21,18 +25,19 @@ checkInpSync <- function(inp_sync){ # check that all hydro x offset_idx combination have at least some data... # trigger thresholds for N is somewhat arbitrary.. sync_coverage <- getSyncCoverage(inp_sync, plot=FALSE) - if(min(sync_coverage$N) <= 5) {cat("ERROR: At least one hydro x offset_idx combination has less than 5 observations. This hydro cannot be synced in that period!\n")} + if(!silent_check & min(sync_coverage$N) <= 5) {cat("ERROR: At least one hydro x offset_idx combination has less than 5 observations. This hydro cannot be synced in that period!\n")} stopifnot(min(sync_coverage$N) > 5) - if(min(sync_coverage$N) < 10) { + if(!silent_check & min(sync_coverage$N) < 10) { cat("WARNING: At least one hydro has less than 10 pings in an offset_idx - try getSyncCoverage(inp_sync, plot=TRUE) for visual\n and rerun getInpSync() with increased keep_rate\n") - } else if(min(sync_coverage$N) < 50) { - cat("WARNING: At least one hydro has less than 50 pings in an offset_idx - try getSyncCoverage(inp_sync, plot=TRUE) for visual\n and rerun getInpSync() with increased keep_rate\n") + } else if(!silent_check & min(sync_coverage$N) < 50) { + cat("NOTE: At least one hydro has less than 50 pings in an offset_idx - try getSyncCoverage(inp_sync, plot=TRUE) for visual\n and rerun getInpSync() with increased keep_rate\n") } } #' Quick overview to check if all hydros have enough data within each offset period. #' -#' @inheritparams checkInpSyn +#' @inheritParams checkInpSync +#' @param plot Logical indicating whether to plot a visual or not. #' @export getSyncCoverage <- function(inp_sync, plot=FALSE){ toa <- inp_sync$dat_tmb_sync$toa @@ -46,7 +51,7 @@ getSyncCoverage <- function(inp_sync, plot=FALSE){ colnames(sync_coverage) <- c('h', 'offset_idx' ,'N') if(plot){ - p <- ggplot(sync_coverage) + geom_point(aes(offset_idx, N)) + p <- ggplot2::ggplot(sync_coverage) + geom_point(aes(offset_idx, N)) p <- p + geom_point(data=sync_coverage[N < 50], aes(offset_idx, N), col="red", size=2) p <- p + facet_wrap(~h) + ylim(0, max(sync_coverage$N)) print(p) diff --git a/R/syncGetters.R b/R/syncGetters.R index 22ce9d0..39531aa 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -101,8 +101,9 @@ getSyncModel <- function(inp_sync, silent=TRUE, fine_tune=FALSE, max_iter=100){ #' @param keep_rate Syncing large data sets can take a long time. However, there is typically an excess number of sync tag detections and a sub-sample is typically enough for good synchronization. This parameter specifies the proportion (0-1) of data to keep when sub-sampling. #' @param excl_self_detect Logical whether to excluded detections of sync tags on the hydros they are co-located with. Sometimes self detections can introduce excessive residuals in the sync model in which case they should be excluded. #' @param lin_corr_coeffs Matrix of coefficients used for pre-sync linear correction. dim(lin_corr_coeffs)=(#hydros, 2). +#' @param silent_check Logical whether to get output from checkInpSync(). Default is FALSE #' @export -getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixed_hydros_idx, n_offset_day, n_ss_day, keep_rate=1, excl_self_detect=TRUE, lin_corr_coeffs=NA, ss_data_what="est", ss_data=c(0)){ +getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixed_hydros_idx, n_offset_day, n_ss_day, keep_rate=1, excl_self_detect=TRUE, lin_corr_coeffs=NA, ss_data_what="est", ss_data=c(0), silent_check=FALSE){ sync_dat <- appendDetections(sync_dat) @@ -141,7 +142,7 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe ) inp_sync <- list(dat_tmb_sync=dat_tmb_sync, params_tmb_sync=params_tmb_sync, random_tmb_sync=random_tmb_sync, inits_tmb_sync=inits_tmb_sync, inp_params=inp_params) - checkInpSync(inp_sync) + checkInpSync(inp_sync, silent_check) return(inp_sync) } @@ -177,8 +178,8 @@ applyLinCorCoeffsInpSync <- function(sync_dat, lin_corr_coeffs){ #' @noRd getInpSyncToaList <- function(sync_dat, max_epo_diff, min_hydros, excl_self_detect, keep_rate, lin_corr_coeffs){ toa_list_gross <- buildToaListGross(sync_dat, excl_self_detect) - toa_list_pruned <- yaps:::pruneToaListGross(toa_list_gross, max_epo_diff, min_hydros) - toa_list_downsampled <- yaps:::downsampleToaList(toa_list_pruned, keep_rate) + toa_list_pruned <- pruneToaListGross(toa_list_gross, max_epo_diff, min_hydros) + toa_list_downsampled <- downsampleToaList(toa_list_pruned, keep_rate) return(toa_list_downsampled) } diff --git a/R/zzz.R b/R/zzz.R index 80ceb56..edbccf0 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -4,7 +4,7 @@ #' @importFrom graphics par plot matplot abline points lines #' @importFrom grDevices dev.off pdf -#' @importFrom ggplot2 aes facet_grid facet_wrap labs scale_fill_gradientn scale_y_log10 theme xlab ylab +#' @importFrom ggplot2 aes facet_grid facet_wrap ggtitle labs scale_fill_gradientn scale_y_log10 theme xlab ylab ylim xlim #' @importFrom ggplot2 geom_bar geom_boxplot geom_histogram geom_hline geom_line geom_point geom_ribbon geom_smooth geom_tile geom_violin geom_vline #' @importFrom stats power rnorm median quantile #' @importFrom utils tail diff --git a/man/checkInpSync.Rd b/man/checkInpSync.Rd index 455148f..57c3ba7 100644 --- a/man/checkInpSync.Rd +++ b/man/checkInpSync.Rd @@ -4,10 +4,12 @@ \alias{checkInpSync} \title{Check consistency of `inp_sync` object obtained from `getInpSync()`} \usage{ -checkInpSync(inp_sync) +checkInpSync(inp_sync, silent_check) } \arguments{ \item{inp_sync}{Object obtained using `getInpSync()`} + +\item{silent_check}{Logical whether to get output from checkInpSync(). Default is FALSE} } \description{ Check consistency of `inp_sync` object obtained from `getInpSync()` diff --git a/man/getInpSync.Rd b/man/getInpSync.Rd index 35b480b..bef8601 100644 --- a/man/getInpSync.Rd +++ b/man/getInpSync.Rd @@ -16,7 +16,8 @@ getInpSync( excl_self_detect = TRUE, lin_corr_coeffs = NA, ss_data_what = "est", - ss_data = c(0) + ss_data = c(0), + silent_check = FALSE ) } \arguments{ @@ -43,6 +44,8 @@ getInpSync( \item{ss_data_what}{Indicates whether to estimate ("est") speed of sound or to use data based on logged water temperature ("data").} \item{ss_data}{data.table containing timestamp and speed of sound for the entire period to by synchronised. Must contain columns 'ts' (POSIXct timestamp) and 'ss' speed of sound in m/s (typical values range 1400 - 1550).} + +\item{silent_check}{Logical whether to get output from checkInpSync(). Default is FALSE} } \description{ Get object inp for synchronization diff --git a/man/getSyncCoverage.Rd b/man/getSyncCoverage.Rd index b265277..906604e 100644 --- a/man/getSyncCoverage.Rd +++ b/man/getSyncCoverage.Rd @@ -6,6 +6,11 @@ \usage{ getSyncCoverage(inp_sync, plot = FALSE) } +\arguments{ +\item{inp_sync}{Object obtained using `getInpSync()`} + +\item{plot}{Logical indicating whether to plot a visual or not.} +} \description{ Quick overview to check if all hydros have enough data within each offset period. } diff --git a/tests/testthat/sync_model_ref.RData b/tests/testthat/sync_model_ref.RData index 2007327399c8cabc4f829587d033536d750bbb39..78f5e55771defee24c2ecbbe76ccd4a80608bbcb 100644 GIT binary patch literal 27944 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 WCL$BNy7Zy=?f(I}8J2jk`v3r;T`+(E literal 27912 zcmZ^}WmFqp@HSZ5B1KDaO(~_g7nih9ptwWvQXGmqgrqI*?i$=F?ouE)1b4UK9tfKE zxBuNed-m+R_tU*!=G=MCGc)&@JAiPUXaBRXj{PtVwTG{POa!?se}20uC{T|GzJC4U z1#v>$Up3;tc&)H6Jg>F1q`oA`?!J!Gcq8{^{n?+~U*EnJqxtQ!{k_)wZaZ&QJl9S$ z;a06F3%-`K<)@{owFqI)gYN2FJQ;5%VIuJa3= zvyi_f`RKwK`pU9dFQ40{J8$pHvora4D-o>_@qZooEK|qzB<9y_ng$Q-AbLt8sD=zI znZ9BG$_K=^;o5U3pfqMCA0up$Cc~-2OOmfF!j+~=`*{;p5GGDkrz1y{ufTms=iY28 zryaiD60}=C%@`OeW)PNHqQ8GW#h3f8ShU`3t|)>mFKv2GkziazHgO@lQZ3T(OQPyG zHw*hS?9#g&^X0%y0YoO$!xKvKo;yHAr;j4VkDo4Dc!&u88XJznJ~TNPj!r^?~2tT%Q0nVYm1j_50?BI&NM8T zSuv8}9AV8xyqo8rd`lUI$32T9U&BPb)i=(6Vz3?bg{lSLw`n!6S9XQ2Y!xeH-s^AZ zOOk5dUt`S>kZVuzG^R1Ox9?3N@*9--Rr=8<4VgklZKM4i@uG0*6gfG z`CKhk58$9X`xS}zPdbv9snG6mSw|*_@hRh~O)-dpebQ|Hw+p5I+6O}5jRO)jAGFVk zmCWHBzeKQ>SPf^jshazW8X)XLwc7GqxRA2c;%-(

Wkq%zc#z zkw%@L5-65TYPTYTXm=(G2y2I({XK7LT$S-2BI_YBPB4SV6U&6A=bM}S{LuPVLdbKo z@Xsg%1ZCTDvi8dR{(Cd6YK~PGwr+?a{0-))3MR8dN{J>%( z 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 diff --git a/tests/testthat/test-getSyncModel.R b/tests/testthat/test-getSyncModel.R index ec0a7ad..6499adc 100644 --- a/tests/testthat/test-getSyncModel.R +++ b/tests/testthat/test-getSyncModel.R @@ -13,7 +13,7 @@ keep_rate <- 0.1 # get input data ready for getSyncModel() inp_sync <- getInpSync(sync_dat=ssu1, max_epo_diff, min_hydros, time_keeper_idx, - fixed_hydros_idx, n_offset_day, n_ss_day, keep_rate=keep_rate) + fixed_hydros_idx, n_offset_day, n_ss_day, keep_rate=keep_rate, silent_check=TRUE) # fit the sync model sync_model <- getSyncModel(inp_sync, silent=TRUE) @@ -26,9 +26,9 @@ sync_model <- getSyncModel(inp_sync, silent=TRUE) test_that("sync_model is as expected", { load("sync_model_ref.RData") - expect_equal(sync_model$pl, sync_model_ref$pl) - expect_equal(sync_model$report, sync_model_ref$report) - expect_equal(sync_model$obj_val, sync_model_ref$obj_val) - expect_equal(sync_model$eps_long, sync_model_ref$eps_long) - expect_equal(sync_model$inp_synced, sync_model_ref$inp_synced) + expect_equal(sync_model$pl, sync_model_ref$pl, tolerance=1E-3) + expect_equal(sync_model$report, sync_model_ref$report, tolerance=1E-3) + expect_equal(sync_model$obj_val, sync_model_ref$obj_val, tolerance=1E-3) + expect_equal(sync_model$eps_long, sync_model_ref$eps_long, tolerance=1E-3) + expect_equal(sync_model$inp_synced, sync_model_ref$inp_synced, tolerance=1E-3) }) diff --git a/tests/testthat/test-runYaps.R b/tests/testthat/test-runYaps.R index bd18fe5..9101409 100644 --- a/tests/testthat/test-runYaps.R +++ b/tests/testthat/test-runYaps.R @@ -27,17 +27,17 @@ test_that("yaps_out is as expected", { load("yaps_out_ref.RData") # need to run individual tests - somehow order of items in the lists differ when running devtools::check() - expect_equal(yaps_out$pl$X, yaps_out_ref$pl$X) - expect_equal(yaps_out$pl$Y, yaps_out_ref$pl$Y) - expect_equal(yaps_out$pl$top, yaps_out_ref$pl$top) - expect_equal(yaps_out$pl$ss, yaps_out_ref$pl$ss) - expect_equal(yaps_out$pl$logD_xy, yaps_out_ref$pl$logD_xy) + expect_equal(yaps_out$pl$X, yaps_out_ref$pl$X, tolerance=1E-3) + expect_equal(yaps_out$pl$Y, yaps_out_ref$pl$Y, tolerance=1E-3) + expect_equal(yaps_out$pl$top, yaps_out_ref$pl$top, tolerance=1E-3) + expect_equal(yaps_out$pl$ss, yaps_out_ref$pl$ss, tolerance=1E-3) + expect_equal(yaps_out$pl$logD_xy, yaps_out_ref$pl$logD_xy, tolerance=1E-3) - expect_equal(yaps_out$pl_sd$X, yaps_out_ref$pl_sd$X) - expect_equal(yaps_out$pl_sd$Y, yaps_out_ref$pl_sd$Y) - expect_equal(yaps_out$pl_sd$top, yaps_out_ref$pl_sd$top) - expect_equal(yaps_out$pl_sd$ss, yaps_out_ref$pl_sd$ss) - expect_equal(yaps_out$pl_sd$logD_xy, yaps_out_ref$pl_sd$logD_xy) + expect_equal(yaps_out$pl_sd$X, yaps_out_ref$pl_sd$X, tolerance=1E-3) + expect_equal(yaps_out$pl_sd$Y, yaps_out_ref$pl_sd$Y, tolerance=1E-3) + expect_equal(yaps_out$pl_sd$top, yaps_out_ref$pl_sd$top, tolerance=1E-3) + expect_equal(yaps_out$pl_sd$ss, yaps_out_ref$pl_sd$ss, tolerance=1E-3) + expect_equal(yaps_out$pl_sd$logD_xy, yaps_out_ref$pl_sd$logD_xy, tolerance=1E-3) }) diff --git a/tests/testthat/yaps_out_ref.RData b/tests/testthat/yaps_out_ref.RData index b67fef9b06ca1e59c63a1ab7b7c7c53b6d3d7cae..ac8ac5fdfffa2b6e8e58bcfba0734448cc66cf68 100644 GIT binary patch literal 34252 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 E0I%=xBLDyZ literal 34179 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 Date: Thu, 29 Oct 2020 13:29:33 +0100 Subject: [PATCH 17/30] Change from error to warning if sync_coverage$n <= 5 --- R/checkInpSync.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/R/checkInpSync.R b/R/checkInpSync.R index 6875902..f07c346 100644 --- a/R/checkInpSync.R +++ b/R/checkInpSync.R @@ -25,8 +25,10 @@ checkInpSync <- function(inp_sync, silent_check){ # check that all hydro x offset_idx combination have at least some data... # trigger thresholds for N is somewhat arbitrary.. sync_coverage <- getSyncCoverage(inp_sync, plot=FALSE) - if(!silent_check & min(sync_coverage$N) <= 5) {cat("ERROR: At least one hydro x offset_idx combination has less than 5 observations. This hydro cannot be synced in that period!\n")} - stopifnot(min(sync_coverage$N) > 5) + if(!silent_check & min(sync_coverage$N) <= 5) { + cat("WARNING: At least one hydro x offset_idx combination has less than 5 observations. This hydro cannot be synced in that period!\n") + print(sync_coverage[N <= 5]) + } if(!silent_check & min(sync_coverage$N) < 10) { cat("WARNING: At least one hydro has less than 10 pings in an offset_idx - try getSyncCoverage(inp_sync, plot=TRUE) for visual\n and rerun getInpSync() with increased keep_rate\n") } else if(!silent_check & min(sync_coverage$N) < 50) { From 25cac5a0fb620295826f0ddde6490b0f91810d7b Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Thu, 29 Oct 2020 14:09:14 +0100 Subject: [PATCH 18/30] add better plot to getSyncCoverage() and include data in inp_sync$sync_params$sync_coverage --- .gitignore | 1 + R/checkInpSync.R | 8 ++++++-- R/syncGetters.R | 8 ++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 32a03c3..a1cfd8f 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ man/figures/*.png rsconnect/ .Rproj.user inst/doc +debug.log diff --git a/R/checkInpSync.R b/R/checkInpSync.R index f07c346..463218c 100644 --- a/R/checkInpSync.R +++ b/R/checkInpSync.R @@ -34,6 +34,7 @@ checkInpSync <- function(inp_sync, silent_check){ } else if(!silent_check & min(sync_coverage$N) < 50) { cat("NOTE: At least one hydro has less than 50 pings in an offset_idx - try getSyncCoverage(inp_sync, plot=TRUE) for visual\n and rerun getInpSync() with increased keep_rate\n") } + return(sync_coverage) } #' Quick overview to check if all hydros have enough data within each offset period. @@ -53,8 +54,11 @@ getSyncCoverage <- function(inp_sync, plot=FALSE){ colnames(sync_coverage) <- c('h', 'offset_idx' ,'N') if(plot){ - p <- ggplot2::ggplot(sync_coverage) + geom_point(aes(offset_idx, N)) - p <- p + geom_point(data=sync_coverage[N < 50], aes(offset_idx, N), col="red", size=2) + p <- ggplot2::ggplot(sync_coverage) + p <- p + geom_point(aes(offset_idx, N), col="steelblue") + p <- p + geom_point(data=sync_coverage[N < 50], aes(offset_idx, N), col="blue", size=2) + p <- p + geom_point(data=sync_coverage[N < 10], aes(offset_idx, N), col="orange", size=2) + p <- p + geom_point(data=sync_coverage[N <= 5], aes(offset_idx, N), col="red", size=2) p <- p + facet_wrap(~h) + ylim(0, max(sync_coverage$N)) print(p) } diff --git a/R/syncGetters.R b/R/syncGetters.R index 39531aa..9170fdb 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -104,8 +104,12 @@ getSyncModel <- function(inp_sync, silent=TRUE, fine_tune=FALSE, max_iter=100){ #' @param silent_check Logical whether to get output from checkInpSync(). Default is FALSE #' @export getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixed_hydros_idx, n_offset_day, n_ss_day, keep_rate=1, excl_self_detect=TRUE, lin_corr_coeffs=NA, ss_data_what="est", ss_data=c(0), silent_check=FALSE){ - sync_dat <- appendDetections(sync_dat) + if(length(unique(sync_dat$hydros$serial)) != nrow(sync_dat$hydros)){ + print(sync_dat$hydros[, .N, by=serial][N>=2]) + stop("ERROR: At least one hydrophone serial number is used more than once in sync_dat$hydros!\n") + } + sync_dat <- appendDetections(sync_dat) if(is.na(lin_corr_coeffs[1])){ lin_corr_coeffs <- matrix(0, nrow=nrow(sync_dat$hydros), ncol=2, byrow=TRUE) @@ -142,7 +146,7 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe ) inp_sync <- list(dat_tmb_sync=dat_tmb_sync, params_tmb_sync=params_tmb_sync, random_tmb_sync=random_tmb_sync, inits_tmb_sync=inits_tmb_sync, inp_params=inp_params) - checkInpSync(inp_sync, silent_check) + inp_sync$inp_params$sync_coverage <- checkInpSync(inp_sync, silent_check) return(inp_sync) } From 48ae72be34746177d224846ce4867554e47e0c8f Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Thu, 29 Oct 2020 23:30:54 +0100 Subject: [PATCH 19/30] add option to use selective downsampling in getInpSync() --- R/checkInpSync.R | 4 +- R/syncGetters.R | 88 +++++++++++++++++++++++----- R/zzz.R | 2 +- man/getInpSync.Rd | 5 +- tests/testthat/sync_model_ref.RData | Bin 27944 -> 28052 bytes 5 files changed, 81 insertions(+), 18 deletions(-) diff --git a/R/checkInpSync.R b/R/checkInpSync.R index 463218c..e802b84 100644 --- a/R/checkInpSync.R +++ b/R/checkInpSync.R @@ -26,8 +26,8 @@ checkInpSync <- function(inp_sync, silent_check){ # trigger thresholds for N is somewhat arbitrary.. sync_coverage <- getSyncCoverage(inp_sync, plot=FALSE) if(!silent_check & min(sync_coverage$N) <= 5) { - cat("WARNING: At least one hydro x offset_idx combination has less than 5 observations. This hydro cannot be synced in that period!\n") - print(sync_coverage[N <= 5]) + cat("WARNING: At least one hydro x offset_idx combination has less than 5 observations. This hydro cannot be synced in that period!\n Run getSyncCoverage(inp_sync, plot=TRUE) for more info\n") + # print(sync_coverage[N <= 5]) } if(!silent_check & min(sync_coverage$N) < 10) { cat("WARNING: At least one hydro has less than 10 pings in an offset_idx - try getSyncCoverage(inp_sync, plot=TRUE) for visual\n and rerun getInpSync() with increased keep_rate\n") diff --git a/R/syncGetters.R b/R/syncGetters.R index 9170fdb..c1bc445 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -98,7 +98,10 @@ getSyncModel <- function(inp_sync, silent=TRUE, fine_tune=FALSE, max_iter=100){ #' @param n_ss_day Specifies number of speed of sound to estimate per day if no ss data is supplied. It is recommended to use logged water temperature instead. However, estimating SS gives an extra option for sanity-checking the final sync-model. #' @param ss_data_what Indicates whether to estimate ("est") speed of sound or to use data based on logged water temperature ("data"). #' @param ss_data data.table containing timestamp and speed of sound for the entire period to by synchronised. Must contain columns 'ts' (POSIXct timestamp) and 'ss' speed of sound in m/s (typical values range 1400 - 1550). -#' @param keep_rate Syncing large data sets can take a long time. However, there is typically an excess number of sync tag detections and a sub-sample is typically enough for good synchronization. This parameter specifies the proportion (0-1) of data to keep when sub-sampling. +#' @param keep_rate Syncing large data sets can take a really long time. However, there is typically an excess number of sync tag detections +#' and a sub-sample is typically enough for good synchronization. +#' This parameter EITHER specifies a proportion (0-1) of data to keep when sub-sampling +#' OR (if keep_rate > 10) number of pings (approximate) to keep in each hydro X offset_idx combination if enough exists. #' @param excl_self_detect Logical whether to excluded detections of sync tags on the hydros they are co-located with. Sometimes self detections can introduce excessive residuals in the sync model in which case they should be excluded. #' @param lin_corr_coeffs Matrix of coefficients used for pre-sync linear correction. dim(lin_corr_coeffs)=(#hydros, 2). #' @param silent_check Logical whether to get output from checkInpSync(). Default is FALSE @@ -121,10 +124,12 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe inp_H_info <- getInpSyncHInfo(sync_dat) - inp_toa_list <- getInpSyncToaList(sync_dat, max_epo_diff, min_hydros, excl_self_detect, keep_rate) - fixed_hydros_vec <- getFixedHydrosVec(sync_dat, fixed_hydros_idx) - offset_vals <- getOffsetVals(inp_toa_list, n_offset_day) - ss_vals <- getSsVals(inp_toa_list, n_ss_day) + inp_toa_list_all <- getInpSyncToaList(sync_dat, max_epo_diff, min_hydros, excl_self_detect) + fixed_hydros_vec <- getFixedHydrosVec(sync_dat, fixed_hydros_idx) + offset_vals_all <- getOffsetVals(inp_toa_list_all, n_offset_day) + inp_toa_list <- getDownsampledToaList(inp_toa_list_all, offset_vals_all, keep_rate) + offset_vals <- getOffsetVals(inp_toa_list, n_offset_day) + ss_vals <- getSsVals(inp_toa_list, n_ss_day) if(ss_data_what == "data"){ ss_data_vec <- getSsDataVec(inp_toa_list, ss_data) } else { @@ -183,23 +188,78 @@ applyLinCorCoeffsInpSync <- function(sync_dat, lin_corr_coeffs){ getInpSyncToaList <- function(sync_dat, max_epo_diff, min_hydros, excl_self_detect, keep_rate, lin_corr_coeffs){ toa_list_gross <- buildToaListGross(sync_dat, excl_self_detect) toa_list_pruned <- pruneToaListGross(toa_list_gross, max_epo_diff, min_hydros) - toa_list_downsampled <- downsampleToaList(toa_list_pruned, keep_rate) - return(toa_list_downsampled) + return(toa_list_pruned) } +#' Internal warpper function to do downsampling of the toa +#' @inheritParams getInpSync +#' @noRd +getDownsampledToaList <- function(inp_toa_list_all, offset_vals_all, keep_rate){ + if(keep_rate > 0 & keep_rate <= 1){ + toa_list_downsampled <- downsampleToaList_random(inp_toa_list_all, keep_rate) + } else if(keep_rate > 10){ + toa_list_downsampled <- downsampleToaList_selective(inp_toa_list_all, offset_vals_all, keep_rate) + } + +} + +# Internal function to selectively downsample the toa-matrix for inp_sync +#' @param inp_toa_list_all Output from `getInpSyncToaList` +#' @inheritParams getInpSync +#' @noRd +downsampleToaList_selective <- function(inp_toa_list_all, offset_vals_all, keep_rate){ + toa <- inp_toa_list_all$toa + offset_idx <- offset_vals_all$offset_idx + + toa_long <- data.table::data.table(reshape2::melt(toa), rep(offset_idx, times=ncol(toa))) + colnames(toa_long) <- c('ping', 'h_idx','toa','offset_idx') + # nobs_per_offset <- toa_long[!is.na(toa), .N, by=c('h_idx' ,'offset_idx')] + + nobs_per_offset <- data.table::data.table(reshape2::melt(with(toa_long[!is.na(toa)], table(h_idx, offset_idx)), value.name="N")) + + + keep_pings <- c() + for(i in 1:length(unique(offset_idx))){ + toa_long_i <- toa_long[offset_idx == i] + keep_pings_i <- c() + h_order <- order(nobs_per_offset[offset_idx == i, N]) + for(h in 1:length(h_order)){ + already_in_keeps <- nrow(toa_long_i[!is.na(toa) & ping %in% keep_pings_i & offset_idx == i & h_idx==h_order[h]]) + if(already_in_keeps >= keep_rate){ + # already enough with this hydro... + next + } else { + need <- keep_rate - already_in_keeps + 1 + pings_h <- toa_long_i[!is.na(toa) & offset_idx == i & h_idx==h_order[h], ping] + if(length(pings_h) < need){ + keep_pings_h <- pings_h + } else { + keep_pings_h <- sample(pings_h, size=need) + } + keep_pings_i <- c(keep_pings_i, keep_pings_h) + } + } + keep_pings <- c(keep_pings, keep_pings_i) + } + + toa_list_downsampled <- list( toa = inp_toa_list_all$toa[keep_pings, ], + sync_tag_idx_vec = inp_toa_list_all$sync_tag_idx[keep_pings], + epo_self_vec = inp_toa_list_all$epo_self_vec[keep_pings]) + return(toa_list_downsampled) +} -# Internal function to downsample the toa-matrix for inp_sync -#' @param toa_list_pruned Output from `pruneToaListGross` +# Internal function to randomly downsample the toa-matrix for inp_sync +#' @param inp_toa_list_all Output from `getInpSyncToaList` #' @inheritParams getInpSync #' @noRd -downsampleToaList <- function(toa_list_pruned, keep_rate){ +downsampleToaList_random <- function(inp_toa_list_all, keep_rate){ toa_list_downsampled <- list() - keeps_idx <- which(stats::rbinom(nrow(toa_list_pruned$toa), 1, keep_rate) == 1) - toa_list_downsampled$toa <- toa_list_pruned$toa[keeps_idx,] - toa_list_downsampled$epo_self_vec <- toa_list_pruned$epo_self_vec[keeps_idx] - toa_list_downsampled$sync_tag_idx_vec <- toa_list_pruned$sync_tag_idx_vec[keeps_idx] + keeps_idx <- which(stats::rbinom(nrow(inp_toa_list_all$toa), 1, keep_rate) == 1) + toa_list_downsampled$toa <- inp_toa_list_all$toa[keeps_idx,] + toa_list_downsampled$epo_self_vec <- inp_toa_list_all$epo_self_vec[keeps_idx] + toa_list_downsampled$sync_tag_idx_vec <- inp_toa_list_all$sync_tag_idx_vec[keeps_idx] return(toa_list_downsampled) } diff --git a/R/zzz.R b/R/zzz.R index edbccf0..6dfc7e6 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -20,7 +20,7 @@ if (getRversion() >= "2.15.1"){ utils::globalVariables(c(".")) utils::globalVariables(c("bi", "coord_fixed", "cum_bi", "delta", "delta_eposync", "delta_ping", "dist_to_sync_tag")) utils::globalVariables(c("E", "E_m", "epo", "epofrac", "epofrac_lin_corr", "epo_roll", "eposync")) - utils::globalVariables(c("focal_hydro_idx", "frac", "hx", "hy", "hydro_idx", "id", "idx", "idx med_delta", "in_seq", "lin_corr_coeffs_offset", "lin_corr_coeffs_slope", "med_delta", "mean_E_m")) + utils::globalVariables(c("focal_hydro_idx", "frac", "h_idx", "hx", "hy", "hydro_idx", "id", "idx", "idx med_delta", "in_seq", "lin_corr_coeffs_offset", "lin_corr_coeffs_slope", "med_delta", "mean_E_m")) utils::globalVariables(c("N", "next_ping_too_late", "OFFSET", "offset_idx", "offset_level", "ping", "ping2next", "ping_idx", "q10", "q50")) utils::globalVariables(c("q90", "roll_eposync", "roll_seq_epo")) utils::globalVariables(c("seq_epo", "seq_lng", "seq_ping_idx", "serial", "slope1","SLOPE1", "SLOPE2", "slope2", "ss", "sync_tag", "sync_tag_idx")) diff --git a/man/getInpSync.Rd b/man/getInpSync.Rd index bef8601..a0f4ee5 100644 --- a/man/getInpSync.Rd +++ b/man/getInpSync.Rd @@ -35,7 +35,10 @@ getInpSync( \item{n_ss_day}{Specifies number of speed of sound to estimate per day if no ss data is supplied. It is recommended to use logged water temperature instead. However, estimating SS gives an extra option for sanity-checking the final sync-model.} -\item{keep_rate}{Syncing large data sets can take a long time. However, there is typically an excess number of sync tag detections and a sub-sample is typically enough for good synchronization. This parameter specifies the proportion (0-1) of data to keep when sub-sampling.} +\item{keep_rate}{Syncing large data sets can take a really long time. However, there is typically an excess number of sync tag detections +and a sub-sample is typically enough for good synchronization. +This parameter EITHER specifies a proportion (0-1) of data to keep when sub-sampling +OR (if keep_rate > 10) number of pings (approximate) to keep in each hydro X offset_idx combination if enough exists.} \item{excl_self_detect}{Logical whether to excluded detections of sync tags on the hydros they are co-located with. Sometimes self detections can introduce excessive residuals in the sync model in which case they should be excluded.} diff --git a/tests/testthat/sync_model_ref.RData b/tests/testthat/sync_model_ref.RData index 78f5e55771defee24c2ecbbe76ccd4a80608bbcb..4308979234e63ee4fd033123ca9ffb35a12369e1 100644 GIT binary patch literal 28052 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 M0Y@-aXLbGn0QH=DA^-pY literal 27944 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 WCL$BNy7Zy=?f(I}8J2jk`v3r;T`+(E From e3cd9aa0fea9ddfc2ca29edf25d87f341e05a429 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Fri, 30 Oct 2020 09:06:21 +0100 Subject: [PATCH 20/30] disable auto rerunning getSyncModel when extreme outliers identified --- NEWS.md | 1 + R/checkInpSync.R | 3 +- R/syncGetters.R | 77 +++++++++++++++++++++++------------------------- 3 files changed, 39 insertions(+), 42 deletions(-) diff --git a/NEWS.md b/NEWS.md index a266002..7808556 100644 --- a/NEWS.md +++ b/NEWS.md @@ -9,6 +9,7 @@ * Add plot to check temporal stability of sync_models. Try plotSyncModelResids(sync_model, by='temporal') * Add option to impose spatial constraints (BBox only) and plot a visual of the constraint. Mainly used to constrain parameter space and increase speed and convergence. * Add various checks in checkInpSync() +* Add option to use selective downsampling in getInpSync(). ## Bug fixes * Fix bug in getInpSync() - failed if sync_tag was only heard on own hydro diff --git a/R/checkInpSync.R b/R/checkInpSync.R index e802b84..4cc848c 100644 --- a/R/checkInpSync.R +++ b/R/checkInpSync.R @@ -26,8 +26,7 @@ checkInpSync <- function(inp_sync, silent_check){ # trigger thresholds for N is somewhat arbitrary.. sync_coverage <- getSyncCoverage(inp_sync, plot=FALSE) if(!silent_check & min(sync_coverage$N) <= 5) { - cat("WARNING: At least one hydro x offset_idx combination has less than 5 observations. This hydro cannot be synced in that period!\n Run getSyncCoverage(inp_sync, plot=TRUE) for more info\n") - # print(sync_coverage[N <= 5]) + cat("WARNING: At least one hydro x offset_idx combination has less than 5 observations. This/these hydro(s) might not be synced in that/these period(s)!\n Run getSyncCoverage(inp_sync, plot=TRUE) for more info\n") } if(!silent_check & min(sync_coverage$N) < 10) { cat("WARNING: At least one hydro has less than 10 pings in an offset_idx - try getSyncCoverage(inp_sync, plot=TRUE) for visual\n and rerun getInpSync() with increased keep_rate\n") diff --git a/R/syncGetters.R b/R/syncGetters.R index c1bc445..d245499 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -20,50 +20,43 @@ getSyncModel <- function(inp_sync, silent=TRUE, fine_tune=FALSE, max_iter=100){ pl <- c() plsd <- c() obj <- c() - - sync_done <- FALSE - i <- 1 - while(!sync_done){ - tictoc::tic(paste0("... iteration ", i)) - obj <- c() - opt <- c() - report <- c() - gc() - - # config(DLL="yaps_sync") - # ## Reduce memory peak of a parallel model by creating tapes in serial - # config(tape.parallel=0, DLL="yaps_sync") - obj <- TMB::MakeADFun(data = dat_tmb, parameters = params, random = random, DLL = "yaps", inner.control = list(maxit = max_iter), silent=silent) - - if(silent){ - opt <- suppressWarnings(stats::nlminb(inits,obj$fn,obj$gr)) - } else { - opt <- stats::nlminb(inits,obj$fn,obj$gr) - } - obj$fn() - pl <- obj$env$parList() # List of estimates - obj_val <- opt$objective - cat(paste0(".. ", Sys.time()), " \n") - cat(".... obj = ", obj_val, " \n") - report <- obj$report() + tictoc::tic() + obj <- c() + opt <- c() + report <- c() + gc() - crazy_outliers <- which(abs(report$eps_toa)*1450 > 10000) - fine_outliers <- which(abs(report$eps_toa)*1450 > 1000) - if(length(crazy_outliers > 0)){ - cat(".... some extreme outliers potentially affecting the model where identified and removed - rerunning sync_model \n") - dat_tmb$toa_offset[crazy_outliers] <- NA - } else if(fine_tune & length(fine_outliers > 0)){ - cat(".... fine tuning is enabled, but is getting deprecated in this function. Consider to use the function fineTuneSyncModel() instead. See ?fineTuneSyncModel for info. \n") - cat(".... fine tuning is enable (fine_tune = TRUE) - some outliers where identified and removed - rerunning sync_model \n") - dat_tmb$toa_offset[fine_outliers] <- NA - } else { - sync_done <- TRUE - } - tictoc::toc() - i <- i +1 + # config(DLL="yaps_sync") + # ## Reduce memory peak of a parallel model by creating tapes in serial + # config(tape.parallel=0, DLL="yaps_sync") + obj <- TMB::MakeADFun(data = dat_tmb, parameters = params, random = random, DLL = "yaps", inner.control = list(maxit = max_iter), silent=silent) + + if(silent){ + opt <- suppressWarnings(stats::nlminb(inits,obj$fn,obj$gr)) + } else { + opt <- stats::nlminb(inits,obj$fn,obj$gr) } + obj$fn() + pl <- obj$env$parList() # List of estimates + obj_val <- opt$objective + cat(paste0(".. ", Sys.time()), " \n") + cat(".... obj = ", obj_val, " \n") + report <- obj$report() + + crazy_outliers <- which(abs(report$eps_toa)*1450 > 10000) + fine_outliers <- which(abs(report$eps_toa)*1450 > 1000) + if(length(crazy_outliers > 0)){ + cat(".... some extreme outliers potentially affecting the model where identified \n Consider to run fineTuneSyncModel(sync_model, eps_threshold=10000). See ?fineTuneSyncModel for more info. \n") + # dat_tmb$toa_offset[crazy_outliers] <- NA + } else if(fine_tune){ + cat(".... fine tuning is enabled, but is deprecated. Use the function fineTuneSyncModel() instead. See ?fineTuneSyncModel for info. \n") + # dat_tmb$toa_offset[fine_outliers] <- NA + } + + tictoc::toc() + jointrep <- try(TMB::sdreport(obj, getJointPrecision=TRUE), silent=silent) param_names <- rownames(summary(jointrep)) sds <- summary(jointrep)[,2] @@ -112,6 +105,10 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe stop("ERROR: At least one hydrophone serial number is used more than once in sync_dat$hydros!\n") } + if(keep_rate <=0 | (keep_rate > 1 & keep_rate < 10) | (keep_rate >= 10 & keep_rate %% 1 != 0)){ + stop("ERROR: Invalid keep_rate! Must be either ]0;1] or integer >= 10\n") + } + sync_dat <- appendDetections(sync_dat) if(is.na(lin_corr_coeffs[1])){ From 258029393962198882bc55401793e167bc3d5ea8 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Fri, 30 Oct 2020 09:16:29 +0100 Subject: [PATCH 21/30] fix tiny bug in getDownsampledToaList() --- R/syncGetters.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/syncGetters.R b/R/syncGetters.R index d245499..007f4e7 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -198,7 +198,7 @@ getDownsampledToaList <- function(inp_toa_list_all, offset_vals_all, keep_rate){ } else if(keep_rate > 10){ toa_list_downsampled <- downsampleToaList_selective(inp_toa_list_all, offset_vals_all, keep_rate) } - + return(toa_list_downsampled) } # Internal function to selectively downsample the toa-matrix for inp_sync From ff6302c1f85687eaf1633b1bc6ff50fa9fccca1d Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Mon, 2 Nov 2020 09:13:58 +0100 Subject: [PATCH 22/30] fix bug in applySync() so it now can be applied to a matrix also --- R/applySync.R | 4 +++- R/syncGetters.R | 10 +++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/R/applySync.R b/R/applySync.R index df4723a..583b353 100644 --- a/R/applySync.R +++ b/R/applySync.R @@ -14,7 +14,9 @@ applySync <- function(toa, hydros="", sync_model){ if(type=="toa_matrix"){ - stop("USE OF LINEAR CORRECTION IS NOT IMPLEMENTED IN APPLYING SYNC TO A MATRIX YET!!!") + if(sum(inp_synced$inp_params$lin_corr_coeffs != 0)){ + stop("ERROR: Use of linear correction is not yet implemented in applying sync to a matrix!\n If linear corrections are used in sync, these are ignored in this step and results will be wrong!\n") + } offset_idx_mat <- matrix(findInterval(toa, ks), ncol=ncol(toa)) offset_level_mat <- matrix(inp_synced$inp_params$offset_levels[offset_idx_mat, 1], ncol=ncol(offset_idx_mat)) diff --git a/R/syncGetters.R b/R/syncGetters.R index 007f4e7..0bde82b 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -195,7 +195,7 @@ getInpSyncToaList <- function(sync_dat, max_epo_diff, min_hydros, excl_self_dete getDownsampledToaList <- function(inp_toa_list_all, offset_vals_all, keep_rate){ if(keep_rate > 0 & keep_rate <= 1){ toa_list_downsampled <- downsampleToaList_random(inp_toa_list_all, keep_rate) - } else if(keep_rate > 10){ + } else if(keep_rate >= 10){ toa_list_downsampled <- downsampleToaList_selective(inp_toa_list_all, offset_vals_all, keep_rate) } return(toa_list_downsampled) @@ -396,7 +396,7 @@ getEpsLong <- function(report, pl, inp_sync){ #' @param extreme_threshold Ignore delta values larger than this threshold. #' @inheritParams getInpSync #' @noRd -getSyncCheckDat <- function(sync_model, extreme_threshold=10000){ +getSyncCheckDat <- function(sync_model, extreme_threshold=1000){ toa <- sync_model$inp_synced$inp_params$toa toa_sync <- applySync(toa, sync_model=sync_model) @@ -408,7 +408,11 @@ getSyncCheckDat <- function(sync_model, extreme_threshold=10000){ true_y <- sync_model$pl$TRUE_H[,2] true_z <- sync_model$pl$TRUE_H[,3] - ss_long <- sync_model$pl$SS[ss_idx] + if(sync_model$inp_synced$dat_tmb_sync$dd_data_what == "est"){ + ss_long <- sync_model$pl$SS[ss_idx] + } else { + ss_long <- sync_model$inp_synced$dat_tmb_sync$ss_data_vec[ss_idx] + } toa_sync_long <- data.table::data.table(reshape2::melt(toa_sync)) colnames(toa_sync_long) <- c('ping_idx','hydro_idx', 'toa_sync') From 821d385ffeecb62dda1abb6cfed3feb8d3a847ab Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Mon, 2 Nov 2020 09:26:31 +0100 Subject: [PATCH 23/30] fix bug in getSyncCheckDat() --- R/syncGetters.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/syncGetters.R b/R/syncGetters.R index 0bde82b..ad37ac5 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -408,10 +408,10 @@ getSyncCheckDat <- function(sync_model, extreme_threshold=1000){ true_y <- sync_model$pl$TRUE_H[,2] true_z <- sync_model$pl$TRUE_H[,3] - if(sync_model$inp_synced$dat_tmb_sync$dd_data_what == "est"){ + if(sync_model$inp_synced$dat_tmb_sync$ss_data_what == "est"){ ss_long <- sync_model$pl$SS[ss_idx] } else { - ss_long <- sync_model$inp_synced$dat_tmb_sync$ss_data_vec[ss_idx] + ss_long <- sync_model$inp_synced$dat_tmb_sync$ss_data_vec } toa_sync_long <- data.table::data.table(reshape2::melt(toa_sync)) From d8b7a2deade3af8e5d1bee47fcef425d5865e328 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Mon, 2 Nov 2020 10:43:47 +0100 Subject: [PATCH 24/30] add plotSyncModelHydros() --- NAMESPACE | 1 + NEWS.md | 1 + R/syncPlotters.R | 26 ++++++++++++++++++++++++-- man/plotSyncModelHydros.Rd | 16 ++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 man/plotSyncModelHydros.Rd diff --git a/NAMESPACE b/NAMESPACE index 10d7cac..2a33a61 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -15,6 +15,7 @@ export(getSyncModel) export(getToaYaps) export(plotBbox) export(plotSyncModelCheck) +export(plotSyncModelHydros) export(plotSyncModelResids) export(plotYaps) export(prepDetections) diff --git a/NEWS.md b/NEWS.md index 7808556..12234e9 100644 --- a/NEWS.md +++ b/NEWS.md @@ -10,6 +10,7 @@ * Add option to impose spatial constraints (BBox only) and plot a visual of the constraint. Mainly used to constrain parameter space and increase speed and convergence. * Add various checks in checkInpSync() * Add option to use selective downsampling in getInpSync(). +* Add function to plot hydros from sync_model - usefull if hydros were re-positioned during getSyncModel(). ## Bug fixes * Fix bug in getInpSync() - failed if sync_tag was only heard on own hydro diff --git a/R/syncPlotters.R b/R/syncPlotters.R index 6fa7956..4344083 100644 --- a/R/syncPlotters.R +++ b/R/syncPlotters.R @@ -49,12 +49,34 @@ plotSyncModelResids <- function(sync_model, by='overall'){ suppressWarnings(print(p)) } -checkSyncModelResidQuantiles <- function(sync_model){ - eps_long <- sync_model$eps_long +#' Plot hydrophone positions. Especially useful if some hydro re-positioned as part of the sync model. +#' @param sync_model Synchronization model obtained using `getSyncModel()` +#' @param by What to facet/group the plot by? Currently supports one of 'sync_bin_sync', 'sync_bin_hydro', 'sync_bin_sync_smooth', 'sync_bin_hydro_smooth', 'hydro', 'sync_tag' +#' @export +plotSyncModelHydros <- function(sync_model){ + h_pos <- data.table::data.table(sync_model$inp_synced$dat_tmb_sync$H) + colnames(h_pos) <- c('x','y','z') + h_pos[, idx := 1:.N] + h_pos[, x := x + sync_model$inp_synced$inp_params$Hx0] + h_pos[, y := y + sync_model$inp_synced$inp_params$Hy0] + + h_pos[, x_synced := sync_model$pl$TRUE_H[,1]] + h_pos[, y_synced := sync_model$pl$TRUE_H[,2]] + h_pos[, z_synced := sync_model$pl$TRUE_H[,3]] + cols <- ifelse(sync_model$inp_synced$dat_tmb_sync$fixed_hydros_vec == 1, "steelblue", "tomato") + p1 <- ggplot(h_pos) + geom_point(aes(x=x,y=y), size=3) + geom_point(aes(x=x_synced, y=y_synced), col=cols) + ggrepel::geom_text_repel(aes(x=x_synced, y=y_synced, label=idx)) + coord_fixed(ratio=1) + p2 <- ggplot(h_pos) + geom_point(aes(x=idx, y=x-x), size=3) + geom_point(aes(x=idx, y=x-x_synced), col=cols) + ylab("x-x_synced") + p3 <- ggplot(h_pos) + geom_point(aes(x=idx, y=y-y), size=3) + geom_point(aes(x=idx, y=y-y_synced), col=cols) + ylab("y-y_synced") + + return(cowplot::plot_grid(p1, p2, p3, ncol=1, rel_heights=c(5,1,1))) + } + + + #' Plot to check how well the sync model is working #' #' Delta values indicate absolute difference between true and estimated distances based on pairwise relative distances to sync_tag. diff --git a/man/plotSyncModelHydros.Rd b/man/plotSyncModelHydros.Rd new file mode 100644 index 0000000..217d697 --- /dev/null +++ b/man/plotSyncModelHydros.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/syncPlotters.R +\name{plotSyncModelHydros} +\alias{plotSyncModelHydros} +\title{Plot hydrophone positions. Especially useful if some hydro re-positioned as part of the sync model.} +\usage{ +plotSyncModelHydros(sync_model) +} +\arguments{ +\item{sync_model}{Synchronization model obtained using `getSyncModel()`} + +\item{by}{What to facet/group the plot by? Currently supports one of 'sync_bin_sync', 'sync_bin_hydro', 'sync_bin_sync_smooth', 'sync_bin_hydro_smooth', 'hydro', 'sync_tag'} +} +\description{ +Plot hydrophone positions. Especially useful if some hydro re-positioned as part of the sync model. +} From 792d8777ef4adeb74f900352c55a882e0cf3efd8 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Mon, 2 Nov 2020 14:55:13 +0100 Subject: [PATCH 25/30] fix potential bug in fineTuneSyncModel() --- R/fineTuneSyncModel.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/fineTuneSyncModel.R b/R/fineTuneSyncModel.R index 1731964..6cdd73c 100644 --- a/R/fineTuneSyncModel.R +++ b/R/fineTuneSyncModel.R @@ -41,9 +41,9 @@ fineTuneSyncModel <- function(sync_model, eps_threshold, silent=TRUE){ # inp_sync$params_tmb_sync$SLOPE1 <- sync_model$pl$SLOPE1 # inp_sync$params_tmb_sync$SLOPE2 <- sync_model$pl$SLOPE2 # inp_sync$params_tmb_sync$SS <- sync_model$pl$SS # Disabled because option to use ss_data is implemented... + # inp_sync$params_tmb_sync$LOG_SIGMA_HYDROS_XY <- sync_model$pl$LOG_SIGMA_HYDROS_XY inp_sync$params_tmb_sync$TRUE_H <- sync_model$pl$TRUE_H inp_sync$params_tmb_sync$LOG_SIGMA_TOA <- sync_model$pl$LOG_SIGMA_TOA - inp_sync$params_tmb_sync$LOG_SIGMA_HYDROS_XY <- sync_model$pl$LOG_SIGMA_HYDROS_XY # run getSyncModel() using the tuned inp_sync sync_model_tuned <- getSyncModel(inp_sync, silent=silent) From cf934fcf661bb49b32424cd3edf8d973a1382fc5 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Fri, 13 Nov 2020 14:16:09 +0100 Subject: [PATCH 26/30] add estimation of Z --- R/prepTmb.R | 11 +++++++++-- R/runYaps.R | 3 +++ man/getDatTmb.Rd | 2 +- man/getInp.Rd | 2 +- src/dist_mat_3d_est.h | 17 +++++++++++++++++ src/yaps_track.h | 26 ++++++++++++++------------ 6 files changed, 45 insertions(+), 16 deletions(-) create mode 100644 src/dist_mat_3d_est.h diff --git a/R/prepTmb.R b/R/prepTmb.R index a27fb9a..d65408d 100644 --- a/R/prepTmb.R +++ b/R/prepTmb.R @@ -11,7 +11,7 @@ #' @param ss_data_what What speed of sound (ss) data to be used. Default ss_data_what='est': ss is estimated by the model. Alternatively, if ss_data_what='data': ss_data must be provided and length(ss_data) == ncol(toa) #' @param ss_data Vector of ss-data to be used if ss_data_what = 'est'. Otherwise ss_data <- 0 (default) #' @param biTable Table of known burst intervals. Only used when pingType == "pbi". Default=NULL -#' @param z_vec Vector of known depth values (positive real). Default=NULL is which case no 3D is assumed. Estimation of depth from detections is currently not supported. +#' @param z_vec Vector of known depth values (positive real). Default=NULL is which case no 3D is assumed. If z_vec = "est" depth will be estimated. #' @param bbox Spatial constraints in the form of a bounding box. See ?getBbox for details. #' @return List of input data ready for use in TMB-call @@ -72,6 +72,9 @@ getDatTmb <- function(hydros, toa, E_dist, n_ss, pingType, rbi_min, rbi_max, ss_ if(is.null(z_vec)){ how_3d <- 'none' z_vec <- c(1) + } else if(z_vec == "est") { + how_3d <- 'est' + z_vec <- c(1) } else { how_3d <- 'data' } @@ -134,13 +137,17 @@ getParams <- function(datTmb){ # , log_t_part = 0 #Mixture ratio between Gaussian and t ) + if(datTmb$how_3d == "est"){ + out$Z <- stats::runif(ncol(datTmb$toa), -10, 0) + } + # # # ss related if(datTmb$ss_data_what == 'est'){ out$logD_v <- 0 #diffusivity of speed of sound (D_v in ms) out$ss <- stats::rnorm(datTmb$n_ss, 1450, 5) #speed of sound } - # # # Edist realted + # # # Edist related if(datTmb$Edist[1] == 1){ out$logSigma_toa = 0 #sigma for Gaussian } else if(datTmb$Edist[2] == 1){ diff --git a/R/runYaps.R b/R/runYaps.R index 54ad0b5..2469468 100644 --- a/R/runYaps.R +++ b/R/runYaps.R @@ -12,6 +12,9 @@ runYaps <- function(inp, maxIter=1000, getPlsd=TRUE, getRep=TRUE, silent=TRUE, opt_fun='nlminb', opt_controls=list(), bounds=list()){ print("Running yaps...") random <- c("X", "Y", "top") + if(inp$datTmb$how_3d == "est"){ + random <- c(random, "Z") + } if(inp$datTmb$ss_data_what == 'est'){ random <- c(random, 'ss') } diff --git a/man/getDatTmb.Rd b/man/getDatTmb.Rd index 037da98..56aa460 100644 --- a/man/getDatTmb.Rd +++ b/man/getDatTmb.Rd @@ -43,7 +43,7 @@ getDatTmb( \item{inp_params}{Selection of parameters used to setup and run YAPS.} -\item{z_vec}{Vector of known depth values (positive real). Default=NULL is which case no 3D is assumed. Estimation of depth from detections is currently not supported.} +\item{z_vec}{Vector of known depth values (positive real). Default=NULL is which case no 3D is assumed. If z_vec = "est" depth will be estimated.} \item{bbox}{Spatial constraints in the form of a bounding box. See ?getBbox for details.} } diff --git a/man/getInp.Rd b/man/getInp.Rd index a111a15..417c979 100644 --- a/man/getInp.Rd +++ b/man/getInp.Rd @@ -41,7 +41,7 @@ getInp( \item{biTable}{Table of known burst intervals. Only used when pingType == "pbi". Default=NULL} -\item{z_vec}{Vector of known depth values (positive real). Default=NULL is which case no 3D is assumed. Estimation of depth from detections is currently not supported.} +\item{z_vec}{Vector of known depth values (positive real). Default=NULL is which case no 3D is assumed. If z_vec = "est" depth will be estimated.} \item{bbox}{Spatial constraints in the form of a bounding box. See ?getBbox for details.} } diff --git a/src/dist_mat_3d_est.h b/src/dist_mat_3d_est.h new file mode 100644 index 0000000..10c773d --- /dev/null +++ b/src/dist_mat_3d_est.h @@ -0,0 +1,17 @@ + PARAMETER_VECTOR(Z); //Position at time of ping + + nll -= dnorm(Z(0),Type(0),Type(10000),true); + + for(int i=1; i ss_i(np); Type nll = 0.0; - + if(ss_data_what != "est"){ #include "nll_ss_data.h" } else { #include "nll_ss_est.h" } - - for(int i=0; i Date: Sun, 10 Jan 2021 20:00:45 +0100 Subject: [PATCH 27/30] fix nasty bug in likelihood when using ping_type='rbi' --- src/nll_pingtype_rbi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nll_pingtype_rbi.h b/src/nll_pingtype_rbi.h index 66b3dca..17b5612 100644 --- a/src/nll_pingtype_rbi.h +++ b/src/nll_pingtype_rbi.h @@ -1,6 +1,6 @@ // nll contrib for top when pingType == 'rbi' nll -= dnorm(top(0),Type(0.0),Type(4.0),true); for(int i = 1; i < np; ++i) { - nll -= dnorm(top(i), top(i-1) + (rbi_max - rbi_min)/2, (rbi_max-rbi_min)/2, true); + nll -= dnorm(top(i), top(i-1) + (rbi_min + (rbi_max - rbi_min)/2), (rbi_max-rbi_min)/2, true); nll += bi_penalty * (softplus((top(i) - top(i-1)) - rbi_max, bi_epsilon) + softplus(rbi_min - (top(i) - top(i-1)), bi_epsilon)); } From 17584dcb87122ee74343c0fc0e0a951617ee856e Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Sun, 10 Jan 2021 20:01:24 +0100 Subject: [PATCH 28/30] update NEWS.md and update test ref data --- NEWS.md | 2 ++ tests/testthat/yaps_out_ref.RData | Bin 34252 -> 34236 bytes 2 files changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index 12234e9..d10234a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -11,8 +11,10 @@ * Add various checks in checkInpSync() * Add option to use selective downsampling in getInpSync(). * Add function to plot hydros from sync_model - usefull if hydros were re-positioned during getSyncModel(). +* Add option to estimate Z-dimension (depth) of tracks. ## Bug fixes +* Fix nasty bug in likelihood contribution of ToP-estimation when using random burst interval (ping_type = 'rbi') * Fix bug in getInpSync() - failed if sync_tag was only heard on own hydro * Eliminate estimation of log_sigma_hydros_xy in sync_model * Relax priors on SS in both track and sync model - consider to switch to softplus instead diff --git a/tests/testthat/yaps_out_ref.RData b/tests/testthat/yaps_out_ref.RData index ac8ac5fdfffa2b6e8e58bcfba0734448cc66cf68..b96a9b57b05241ddc3294c56c66685319ab9cbd8 100644 GIT binary patch literal 34236 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 literal 34252 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 E0I%=xBLDyZ From 052e793cbabcddd43ba4602b243f04d233eac9f2 Mon Sep 17 00:00:00 2001 From: Henrik Baktoft Date: Sun, 10 Jan 2021 21:19:43 +0100 Subject: [PATCH 29/30] Fix bug in getToaYaps() that allowed too short/too high BI to pass through when using ping_type='rbi' and very fast transmitters --- NEWS.md | 1 + R/getToaYaps.R | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/NEWS.md b/NEWS.md index d10234a..80a8a71 100644 --- a/NEWS.md +++ b/NEWS.md @@ -19,6 +19,7 @@ * Eliminate estimation of log_sigma_hydros_xy in sync_model * Relax priors on SS in both track and sync model - consider to switch to softplus instead * Return plsd object from getSyncModel +* Fix bug in getToaYaps() that allowed too short/too high BI to pass through when using ping_type='rbi' and very fast transmitters diff --git a/R/getToaYaps.R b/R/getToaYaps.R index 0b79dfb..a357c8e 100644 --- a/R/getToaYaps.R +++ b/R/getToaYaps.R @@ -25,14 +25,18 @@ getToaYaps <- function(synced_dat, hydros, rbi_min, rbi_max){ ts_focal <- as.matrix(as.data.frame(ts_focal)) ts_focal <- ts_focal/10 toa <- ts_focal - dim(toa) + dimnames(toa) <- NULL # remove rows with too short BI... top1 <- rowMeans(toa, na.rm=TRUE) diffs1 <- c(diff(top1),NA) nobs <- apply(toa, 1, function(k) sum(!is.na(k))) - rem_idx <- which(diffs1 < rbi_min-1) # THIS NEEDS TO BE SET BASED ON USED SYSTEM - 1 IS TOO HIGH FOR HR-LIKE + if(rbi_min > 10){ + rem_idx <- which(diffs1 < rbi_min-1) # THIS NEEDS TO BE SET BASED ON USED SYSTEM - 1 IS TOO HIGH FOR HR-LIKE + } else { + rem_idx <- which(diffs1 < rbi_min-0.1) # rbi_min < 10 should always be HR??? + } if(length(rem_idx) > 0){ toa[rem_idx, ] <- NA } @@ -63,7 +67,11 @@ getToaYaps <- function(synced_dat, hydros, rbi_min, rbi_max){ pings <- data.table::data.table(top=top2, diff=diffs2) pings[, toa_idx:=1:.N] pings[, ping2next := 1] - pings[, next_ping_too_late := diff > rbi_max+1] + if(rbi_max > 15){ + pings[, next_ping_too_late := diff > rbi_max+1] # same as for rbi_min above when trying to exclude impossible pings + } else { + pings[, next_ping_too_late := diff > rbi_max+.1] + } pings[next_ping_too_late==TRUE, ping2next:=ping2next+round(diff/rbi_max)] pings[, ping_idx:=cumsum(c(1,ping2next[-.N]))] toa_all <- matrix(ncol=ncol(toa), nrow=max(pings$ping_idx)) From 39b43745326102c2fd54ba0e90a48645d8703d32 Mon Sep 17 00:00:00 2001 From: Karl Gjelland Date: Wed, 20 Jan 2021 09:09:27 +0100 Subject: [PATCH 30/30] Update syncGetters.R --- R/syncGetters.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/syncGetters.R b/R/syncGetters.R index ad37ac5..07ec674 100644 --- a/R/syncGetters.R +++ b/R/syncGetters.R @@ -119,6 +119,8 @@ getInpSync <- function(sync_dat, max_epo_diff, min_hydros, time_keeper_idx, fixe T0 <- min(sync_dat$detections$epo) + if (is.null(sync_dat$hydros$hlabel)) sync_dat$hydros[, hlabel := paste(idx)] # Each hydrofone may have a label different from it's idx, if provided on input + inp_H_info <- getInpSyncHInfo(sync_dat) inp_toa_list_all <- getInpSyncToaList(sync_dat, max_epo_diff, min_hydros, excl_self_detect)