## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(echo = TRUE)

## ----out.width = "600px", echo=FALSE------------------------------------------
knitr::include_graphics("rstudio-IRISSeismic.png")

## ----first, results="hide"----------------------------------------------------
library(IRISSeismic)
iris <- new("IrisClient")

## ----second, fig.height=4, fig.width=5----------------------------------------
starttime <- as.POSIXct("2002-04-20", tz = "GMT")
endtime <- as.POSIXct("2002-04-21", tz = "GMT")
result <- try(st <- getDataselect(iris, "US", "OXF", "", "BHZ", starttime, endtime))
if (inherits(result, "try-error")) {
  message(geterrmessage())
} else {
  length(st@traces)
  plotUpDownTimes(st, min_signal = 1, min_gap = 1)
}

## ----third--------------------------------------------------------------------
if (exists("st")) {
  getGaps(st)
}

## ----fourth-------------------------------------------------------------------
if (exists("st")) {
  parallelLength(st)
  parallelMax(st)
  parallelSd(st)
}

## ----fifth--------------------------------------------------------------------
if (exists("st")) {
  tr <- st@traces[[3]]
  tr@stats
}

## ----sixth, fig.height=4, fig.width=6-----------------------------------------
if (exists("tr")) {
  plot(tr)
}

## ----seventh------------------------------------------------------------------
if (exists("st")) {
  slotNames(st)
}

## ----eighth-------------------------------------------------------------------
if (exists("st")) {
  class(st@url)
  class(st@requestedStarttime)
  class(st@traces)
}

## ----ninth--------------------------------------------------------------------
if (exists("st")) {
  slotNames(st@traces[[1]])
}

## ----include=FALSE------------------------------------------------------------
if (exists("st")) {
  rm(st)
}
if (exists("tr")) {
  rm(tr)
}

## ----tenth--------------------------------------------------------------------
as.POSIXct("2010-02-27", tz = "GMT") # good
as.POSIXct("2010-02-27 04:00:00", tz = "GMT") # good
as.POSIXct("2010-02-27T04:00:00",
  tz = "GMT",
  format = "%Y-%m-%dT%H:%M:%OS"
) # good

as.POSIXct("2010-02-27") # BAD -- no timezone
as.POSIXct("2010-02-27T04:00:00", tz = "GMT") # BAD -- no formatting

## ----eleventh, results="hide"-------------------------------------------------
help("IRISSeismic", package = "IRISSeismic")

## ----twelfth,fig.height=8, fig.width=6----------------------------------------
starttime <- as.POSIXct("2010-02-27", tz = "GMT")
endtime <- as.POSIXct("2010-02-28", tz = "GMT")
result <- try(st <- getDataselect(iris, "IU", "ANMO", "00", "BHZ", starttime, endtime))
if (inherits(result, "try-error")) {
  message(geterrmessage())
} else {
  start2 <- as.POSIXct("2010-02-27 06:40:00", tz = "GMT")
  end2 <- as.POSIXct("2010-02-27 07:40:00", tz = "GMT")

  tr1 <- st@traces[[1]]
  tr2 <- slice(tr1, start2, end2)

  layout(matrix(seq(2))) # layout a 2x1 matrix
  plot(tr1)
  plot(tr2)
  layout(1) # restore original layout
}

## ----include=FALSE------------------------------------------------------------
if (exists("st")) {
  rm(st)
}
if (exists("tr1")) {
  rm(tr1)
}
if (exists("tr2")) {
  rm(tr2)
}

## ----thirteenth---------------------------------------------------------------
starttime <- as.POSIXct("2002-04-20", tz = "GMT")
endtime <- as.POSIXct("2002-04-21", tz = "GMT")
result <- try(st <- getDataselect(iris, "US", "OXF", "", "BHZ", starttime, endtime))
if (inherits(result, "try-error")) {
  message(geterrmessage())
} else {
  tr <- st@traces[[3]]
  picker <- STALTA(tr, 3, 30)
  threshold <- quantile(picker, 0.99999, na.rm = TRUE)
  to <- triggerOnset(tr, picker, threshold)
}

## ----fourteenth, fig.height=12, fig.width=6-----------------------------------
if (exists("tr")) {
  layout(matrix(seq(3))) # layout a 3x1 matrix
  closeup1 <- eventWindow(tr, picker, threshold, 3600)
  closeup2 <- eventWindow(tr, picker, threshold, 600)
  plot(tr)
  abline(v = to, col = "red", lwd = 2)
  plot(closeup1)
  abline(v = to, col = "red", lwd = 2)
  plot(closeup2)
  abline(v = to, col = "red", lwd = 2)
  layout(1) # restore original layout
}

## ----include=FALSE------------------------------------------------------------
if (exists("st")) {
  rm(st)
}
if (exists("tr")) {
  rm(tr)
}

## ----sixteenth, fig.height=4, fig.width=6-------------------------------------
# Open a connection to EarthScope webservices
iris <- new("IrisClient")

# Two days around the "Nisqually Quake"
starttime <- as.POSIXct("2001-02-27", tz = "GMT")
endtime <- starttime + 3600 * 24 * 2

# Find biggest seismic event over these two days -- it's the "Nisqually"
result <- try(events <- getEvent(iris, starttime, endtime, minmag = 5.0))
if (inherits(result, "try-error")) {
  message(geterrmessage())
} else {
  bigOneIndex <- which(events$magnitude == max(events$magnitude))
  bigOne <- events[bigOneIndex[1], ]
}

# Find US stations that are available within 10 degrees of arc of the
# event location during the 15 minutes after the event
if (exists("bigOne")) {
  start <- bigOne$time
  end <- start + 900
  result <- try(av <- getChannel(iris, "US", "", "", "BHZ", start, end,
    latitude = bigOne$latitude, longitude = bigOne$longitude,
    minradius = 0, maxradius = 10
  ))
  if (inherits(result, "try-error")) {
    message(geterrmessage())
  } else {
    # Get the station the furthest East
    minLonIndex <- which(av$longitude == max(av$longitude))
    snclE <- av[minLonIndex, ]
  }
}

# Get travel times to this station
result <- try(traveltimes <- taupTraveltime(
  bigOne$latitude, bigOne$longitude, bigOne$depth,
  snclE$latitude, snclE$longitude
))
if (inherits(result, "try-error")) {
  message(geterrmessage())
} else {
  # Look at the list
  traveltimes

  # Find the P and S arrival times
  pArrival <- start + traveltimes$travelTime[traveltimes$phaseName == "P"]
  sArrival <- start + traveltimes$travelTime[traveltimes$phaseName == "S"]

  # Get the BHZ signal for this station
  result <- try(st <- getDataselect(
    iris, snclE$network, snclE$station,
    snclE$location, snclE$channel,
    start, end
  ))
  if (inherits(result, "try-error")) {
    message(geterrmessage())
  } else {
    # Check that there is only a single trace
    length(st@traces)
    # Plot the seismic trace and mark the "P" and "S" arrival times
    tr <- st@traces[[1]]
    plot(tr, subsampling = 1) # need subsampling=1 to add vertical lines with abline()
    abline(v = pArrival, col = "red")
    abline(v = sArrival, col = "blue")
  }
}

