--- a
+++ b/R/lag.R
@@ -0,0 +1,120 @@
+#In predict from parameters it is possible to include a 
+#lag in the study definition when calculating event times
+#the code associated with this lag is contained here.
+
+
+#' @include ctrlSpec.R
+NULL
+
+##' Parameter settings for when including a lagged effect. 
+##' 
+##' Note the lambda and HR in the \code{Study} class will be used
+##' for time > T
+##' @slot Lag.T Lagtime (T)
+##' @slot ctrlSpec Control median specification for time period [0,T]
+##' @slot L.HazardRatio Hazard for time period [0,T]
+##' @seealso \code{\link{show,LagEffect-method}}
+##' @export
+setClass( "LagEffect", 
+          slots=c( 
+            Lag.T = "numeric",
+            ctrlSpec = "CtrlSpec",
+            L.HazardRatio = "numeric"
+                     
+          ), prototype = prototype( 
+            Lag.T = 0,
+            ctrlSpec = CtrlSpecfromMedian(as.numeric(NA)),
+            L.HazardRatio = as.numeric(NA)
+          ),
+          validity = function(object){
+            ans <- ""
+            if(object@Lag.T < 0) ans <- paste(ans,"Invalid Lag.T")
+            if(!is.na(object@L.HazardRatio) && (object@L.HazardRatio < 0 || object@L.HazardRatio > 1))
+              ans <- paste(ans,"Hazard Ratio must be in [0,1]")
+            
+            if(object@Lag.T!=0){
+              if(is.na(object@ctrlSpec@median)){
+                ans <- paste(ans,"Invalid LagEffect") 
+              } 
+            }
+            else{
+              if(!is.na(object@ctrlSpec@median) || !is.na(object@L.HazardRatio)){
+                ans <- paste(ans,"Invalid nullLagEffect") 
+              } 
+            }
+            
+            if(ans=="") return(TRUE)
+            ans
+            
+          }
+)
+
+
+
+##' @name show
+##' @rdname show-methods
+##' @aliases show,LagEffect-method
+##' @export
+setMethod("show", signature(object="LagEffect"), 
+  function(object) {
+    if(isNullLag(object)){
+      cat("No Lag\n")
+    }
+    else{
+      cat(paste(object@Lag.T,"months of lag during which\n"))
+      cat(paste("control group survival",object@ctrlSpec@text,"months\n"))
+      if(!is.na(object@L.HazardRatio)){
+        cat(paste("and the hazard ratio is",object@L.HazardRatio,"\n"))
+      }
+          
+    }
+  }
+)
+          
+
+##' LagEffect constructor
+##'
+##' Note the lambda and HR in the study class will be used
+##' for time > T
+##' @param Lag.T Lagtime (T)
+##' @param L.Ctr.median Control median for time period [0,T]
+##' @param L.HazardRatio Hazard for time period [0,T]
+##' @return A LagEffect object
+##' @export
+LagEffect <- function(Lag.T,L.Ctr.median=as.numeric(NA),L.HazardRatio=as.numeric(NA)){
+  ctrlSpec <- CtrlSpecfromMedian(L.Ctr.median)
+  new("LagEffect",Lag.T=Lag.T,ctrlSpec=ctrlSpec,L.HazardRatio=L.HazardRatio)
+}
+
+##' Create a LagEffect object with no lag
+##' @return A LagEffect object for which \code{isNullLag()} is TRUE
+##' @export
+NullLag <- function(){
+  NAnumeric <- as.numeric(NA)
+  LagEffect(Lag.T=0,L.Ctr.median=NAnumeric,L.HazardRatio=NAnumeric)
+}
+
+##' Function to check whether Lag is a null lag
+##' 
+##' This checks whether the Lag.T slot is 0 
+##'    
+##' @name isNullLag
+##' @docType methods
+##' @rdname isNullLag-methods
+##' @param Lag A LagEffect object
+##' @return TRUE if null lag, FALSE otherwise
+##' @export
+setGeneric( "isNullLag",
+            def=function( Lag )
+              standardGeneric( "isNullLag" ) )
+
+
+##' @rdname isNullLag-methods
+##' @aliases isNullLag,LagEffect-method
+##' @name isNullLag
+##' @export
+setMethod( "isNullLag",signature=(Lag="LagEffect"), 
+  function( Lag ) {
+    Lag@Lag.T==0
+})
+