### Appendix to Péron, Fleming, Calabrese. 2016.

### Periodicity test
## data : a telemetry object
## model : a ctmm object
## period : period of interest (in seconds) or NULL
## n : number of simulations
## deltat : window within which to look for a larger value of the periodogram (in seconds)
### returns a list with two items: tested period in seconds and P-value of that period
period.test=function(data,model,period=NULL,n=100,deltat=60,...) {
  # initiate output vector
  RES=NULL
  # compute periodogram of the true data
  per=periodogram(data,...)
  # set period of interest at the periodogram peak if not provided by user
  if(is.null(period)) period=1/per$f[which.max(per$LSP)]
  else period=period[1]
  # MC loop
  for (k in 1:n) {
  # simulate dataset using model provided by user and time grid from the true data
    s=simulate(object=model,t=data$t-data$t[1])
  # compute periodogram of the simulated dataset
    s.per=periodogram(s,...)
  # compute whether simulated value is higher than true value
    RES=c(RES, max(s.per$LSP[abs(1/s.per$f - period)<=deltat])<
            max(per$LSP[abs(1/per$f - period)<=deltat]) )
  }
  return(list(period=period,P.value=1-sum(RES)/sum(!is.na(RES))))
}
