123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- ##' Function to Calculate Various Parameters of Response Dynamics
- ##'
- ##' The following parameters are calculated:
- ##' Time to 10% of Response Maximum (Minimum),
- ##' Time to 90% of Response Maximum (Minimum),
- ##' Time to Response Maximum (Minimum),
- ##' Time to 90% of Response Maximum (Minimum) after Max (Min),
- ##' Time to 10% of Response Maximum (Minimum) after Max (Min),
- ##' Risetime to Maximum (Minimum),
- ##' Falltime from Maximum (Minimum),
- ##' Mean Response Maximum (Minimum).
- ##'
- ##' @param x Input dataframe with one row per 5 sec trace
- ##' @param from Response starting percentage for Risetime calculation,
- ##' defaults to 10 percent of response maximum (or minimum, respectively).
- ##' @param to Response ending percentage for Risetime calculation,
- ##' defaults to 90 percent of response maximum (or minimum, respectively).
- ##'
- ##' @return New columns with calculated response dynamic parameters
- ##'
- ##
- responseDynamics <- function(x, from=0.1, to=0.9) {
-
- ## sub_sub is the time window where the Max and Min is expected
- ## starting 50ms after valve opening)
- avo <- 50 ## After Valve Opening
-
- sub_sub <- x[(avo+1) :1000]
-
- ## win is the window size before and after time of Max (or Min) to calculate the mean of the response
- win <- 25
-
- ## Max is the time pint of maximum response
- Max <- which(x==max(sub_sub))[1] + avo
-
- Max10_1 <- which(x <= max(x * from))
- Max10_1 <- Max10_1[which(Max10_1 <= Max)]
- Max10_1 <- Max10_1[length(Max10_1)]
-
- Max90_1 <- which(x <= max(x * to))
- Max90_1 <- Max90_1[which(Max90_1 <= Max)]
- Max90_1 <- Max90_1[length(Max90_1)]
-
- Max10_2 <- which(x <= max(x * from))
- Max10_2 <- Max10_2[which(Max10_2 >= Max)]
- Max10_2 <- Max10_2[1]
-
- Max90_2 <- which(x <= max(x * to))
- Max90_2 <- Max90_2[which(Max90_2 >= Max)]
- Max90_2 <- Max90_2[1]
-
-
- Mean_max <- mean(x[(Max - win + 1) : (Max + win)])
-
-
- ## Min is the time pint of minimum response
- Min <- which(x==min(sub_sub))[1] + avo
-
- Min10_1 <- which(x >= min(x * from))
- Min10_1 <- Min10_1[which(Min10_1 <= Min)]
- Min10_1 <- Min10_1[length(Min10_1)]
-
- Min90_1 <- which(x >= min(x * to))
- Min90_1 <- Min90_1[which(Min90_1 <= Min)]
- Min90_1 <- Min90_1[length(Min90_1)]
-
- Min10_2 <- which(x >= min(x * from))
- Min10_2 <- Min10_2[which(Min10_2 >= Min)]
- Min10_2 <- Min10_2[1]
-
- Min90_2 <- which(x >= min(x * to))
- Min90_2 <- Min90_2[which(Min90_2 >= Min)]
- Min90_2 <- Min90_2[1]
-
- Mean_min <- mean(x[(Min - win + 1) : (Min + win)])
-
-
-
-
- Timeto10Max <- Max10_1
- Timeto10Min <- Min10_1
-
-
- Max_rise <- Max90_1 - Max10_1
- Max_fall <- Max10_2 - Max90_2
-
- Min_rise <- Min90_1 - Min10_1
- Min_fall <- Min10_2 - Min90_2
-
-
- if(length(Max10_1) < 1){
- Max10_1 <- NA
- Max_rise <- NA
- }
-
- if(length(Max90_1) < 1){
- Max90_1 <- NA
- Max_rise <- NA
- }
-
- if(length(Max90_2) < 1){
- Max90_2 <- NA
- Max_fall <- NA
-
- }
-
- if(length(Max10_2) < 1){
- Max10_2 <- NA
- Max_fall <- NA
- }
-
-
- if(length(Min10_1) < 1){
- Min10_1 <- NA
- Min_rise <- NA
- }
-
- if(length(Min90_1) < 1){
- Min90_1 <- NA
- Min_rise <- NA
- }
-
- if(length(Min90_2) < 1){
- Min90_2 <- NA
- Min_fall <- NA
-
- }
-
- if(length(Min10_2) < 1){
- Min10_2 <- NA
- Min_fall <- NA
- }
-
-
-
- df <- c(Max10_1,
- Max90_1,
- Max,
- Max90_2,
- Max10_2,
- Max_rise,
- Max_fall,
- Min10_1,
- Min90_1,
- Min,
- Min90_2,
- Min10_2,
- Min_rise,
- Min_fall,
- Mean_max,
- Mean_min)
-
- return(df)
-
- }
|