## ----setup, include=FALSE-------------------------------------------
## use collapse for bookdown, to collapse all the source and output
## blocks from one code chunk into a single block
knitr::opts_chunk$set(echo = TRUE, collapse = TRUE)
options(width = 70)
require(BiocStyle)
require(pander)

## ----frelats, eval=TRUE,echo=FALSE, fig.cap="Relationships between the main functions in OncoSimulR."----
knitr::include_graphics("relfunct.png")

## ----firstload------------------------------------------------------
## Load the package
library(OncoSimulR) 

## ---- echo=FALSE----------------------------------------------------
set.seed(2)
RNGkind("L'Ecuyer-CMRG")

## ----ex-dag-inf-----------------------------------------------------
## For reproducibility
set.seed(2)
RNGkind("L'Ecuyer-CMRG")

## Simulate a DAG
g1 <- simOGraph(4, out = "rT")

## Simulate 10 evolutionary trajectories
s1 <- oncoSimulPop(10, allFitnessEffects(g1, drvNames = 1:4),
                   mc.cores = 2, ## adapt to your hardware
                   seed = NULL) ## for reproducibility of vignette

## Sample those data uniformly, and add noise
d1 <- samplePop(s1, timeSample = "unif", propError = 0.1)

## You would now run the appropriate inferential method and
## compare observed and true. For example

## require(Oncotree)
## fit1 <- oncotree.fit(d1)

## Now, you'd compare fitted and original. This is well beyond 
## the scope of this document (and OncoSimulR itself).


## ----hidden-rng-exochs, echo = FALSE--------------------------------
set.seed(NULL)

## ----hiddenochs, echo=FALSE-----------------------------------------
set.seed(2)
RNGkind("L'Ecuyer-CMRG")

## ----exochs---------------------------------------------------------
## For reproducibility
set.seed(2)
RNGkind("L'Ecuyer-CMRG")

## Specify fitness effects. 

## Numeric values arbitrary, but set the intermediate genotype en
## route to ui as mildly deleterious so there is a valley.

## As in Ochs and Desai, the ui and uv genotypes
## can never appear. 

u <- 0.2; i <- -0.02; vi <- 0.6; ui <- uv <- -Inf

od <- allFitnessEffects(
    epistasis = c("u" = u,  "u:i" = ui,
                  "u:v" = uv, "i" = i,
                  "v:-i" = -Inf, "v:i" = vi))

## For the sake of extending this example, also turn i into a
## mutator gene

odm <- allMutatorEffects(noIntGenes = c("i" = 50))

## How do mutation and fitness look like for each genotype?
evalAllGenotypesFitAndMut(od, odm, addwt = TRUE)

## ----exochsb--------------------------------------------------------
## Set a small initSize, as o.w. unlikely to pass the valley
initS <- 10
## The number of replicates is tiny, 10, for the sake of speed
## of creation of the vignette
od_sim <- oncoSimulPop(10, od, muEF = odm,
                       fixation = c("u", "i, v"), initSize = initS,
                       model = "McFL",
                       mu = 1e-4, detectionDrivers = NA, 
					   finalTime = NA,
                       detectionSize = NA, detectionProb = NA,
                       onlyCancer = TRUE, 
					   mc.cores = 2, ## adapt to your hardware
                       seed = NULL) ## for reproducibility
## What is the frequency of each final genotype?
sampledGenotypes(samplePop(od_sim))

## ----hidden-rng-exochs33, echo = FALSE------------------------------
set.seed(NULL)

## ----hiddenrng0szen, echo=FALSE-------------------------------------
set.seed(7)
RNGkind("L'Ecuyer-CMRG")

## ----exszendro------------------------------------------------------
## For reproducibility
set.seed(7)
RNGkind("L'Ecuyer-CMRG")


## Repeat the following loop for different combinations of whatever
## interests you, such as number of genes, or distribution of the
## c and sd (which affect how rugged the landscape is), or 
## reference genotype, or evolutionary model, or stopping criterion, 
## or sampling procedure, or ...

##  Generate a random fitness landscape, from the Rough Mount
##  Fuji model, with g genes, and c ("slope" constant) and
##  reference chosen randomly (reference is random by default and 
##  thus not specified below). Require a minimal number of  
##  accessible genotypes

g <- 6
c <- runif(1, 1/5, 5)
rl <- rfitness(g, c = c, min_accessible_genotypes = g)

## Plot it if you want; commented here as it takes long for a
## vignette

## plot(rl)

## Obtain landscape measures from Magellan. Export to Magellan
to_Magellan(rl, file = "rl1.txt")

## (Getting the statistics from Magellan requires either 
## calling the web app (http://wwwabi.snv.jussieu.fr/public/Magellan/) 
## or asking Magellan's authors for the software. This is of course
## beyond the scope of the example and the package.)

## Simulate evolution in that landscape many times (here just 10)
simulrl <- oncoSimulPop(10, allFitnessEffects(genotFitness = rl),
                        keepPhylog = TRUE, keepEvery = 1,
                        initSize = 4000,
                        seed = NULL, ## for reproducibility
                        mc.cores = 2) ## adapt to your hardware

## Obtain measures of evolutionary predictability
diversityLOD(LOD(simulrl))
diversityPOM(POM(simulrl))
sampledGenotypes(samplePop(simulrl, typeSample = "whole"))

## ----hidden-rng-exszend, echo = FALSE-------------------------------
set.seed(NULL)

## ----ex-tomlin1-----------------------------------------------------
sd <- 0.1 ## fitness effect of drivers
sm <- 0 ## fitness effect of mutator
nd <- 20 ## number of drivers
nm <- 5  ## number of mutators
mut <- 10 ## mutator effect

fitnessGenesVector <- c(rep(sd, nd), rep(sm, nm))
names(fitnessGenesVector) <- 1:(nd + nm)
mutatorGenesVector <- rep(mut, nm)
names(mutatorGenesVector) <- (nd + 1):(nd + nm)

ft <- allFitnessEffects(noIntGenes = fitnessGenesVector,
                        drvNames = 1:nd)
mt <- allMutatorEffects(noIntGenes = mutatorGenesVector)


## ----hiddentom, echo=FALSE------------------------------------------
set.seed(2)
RNGkind("L'Ecuyer-CMRG")

## ----ex-tomlin2-----------------------------------------------------
## For reproducibility
set.seed(2)
RNGkind("L'Ecuyer-CMRG")


ddr <- 4
st <- oncoSimulPop(4, ft, muEF = mt,
                   detectionDrivers = ddr,
                   finalTime = NA,
                   detectionSize = NA,
                   detectionProb = NA,
                   onlyCancer = TRUE,
                   keepEvery = NA, 
                   mc.cores = 2, ## adapt to your hardware
                   seed = NULL) ## for reproducibility

## How long did it take to reach cancer?
unlist(lapply(st, function(x) x$FinalTime))


## ----hidden-rng-tom, echo = FALSE-----------------------------------
set.seed(NULL)

## ----exusagebau-----------------------------------------------------
K <- 4
sp <- 1e-5
sdp <- 0.015
sdplus <- 0.05
sdminus <- 0.1

cnt <- (1 + sdplus)/(1 + sdminus)
prod_cnt <- cnt - 1
bauer <- data.frame(parent = c("Root", rep("D", K)),
                    child = c("D", paste0("s", 1:K)),
                    s = c(prod_cnt, rep(sdp, K)),
                    sh = c(0, rep(sp, K)),
                    typeDep = "MN")
fbauer <- allFitnessEffects(bauer)
(b1 <- evalAllGenotypes(fbauer, order = FALSE, addwt = TRUE))

## How does the fitness landscape look like?
plot(b1, use_ggrepel = TRUE) ## avoid overlapping labels

## ----hiddenbau, echo=FALSE------------------------------------------
set.seed(2)
RNGkind("L'Ecuyer-CMRG")

## ----exusagebau2----------------------------------------------------
## For reproducibility
set.seed(2)
RNGkind("L'Ecuyer-CMRG")

totalpops <- 5
initSize <- 100
sb1 <- oncoSimulPop(totalpops, fbauer, model = "Exp",
                    initSize = initSize,
                    onlyCancer = FALSE, 
					mc.cores = 2, ## adapt to your hardware
                    seed = NULL) ## for reproducibility
					
## What proportion of the simulations reach 4x initSize?
sum(summary(sb1)[, "TotalPopSize"] > (4 * initSize))/totalpops


## ----hidden-rng-exbau, echo = FALSE---------------------------------
set.seed(NULL)

## ----hiddenbau22, echo=FALSE----------------------------------------
set.seed(2)
RNGkind("L'Ecuyer-CMRG")

## ----hhhhbbbb22-----------------------------------------------------

totalpops <- 5
initSize <- 100
sb2 <- oncoSimulPop(totalpops, fbauer, model = "Exp",
                    initSize = initSize,
                    onlyCancer = TRUE,
					detectionSize = 10 * initSize,
					mc.cores = 2, ## adapt to your hardware
                    seed = NULL) ## for reproducibility
				
## How long did it take to reach cancer?
unlist(lapply(sb2, function(x) x$FinalTime))

## ----hidden-rng-exbau22, echo = FALSE-------------------------------
set.seed(NULL)

## ----oex1intro------------------------------------------------------
## Order effects involving three genes.

## Genotype "D, M" has different fitness effects
## depending on whether M or D mutated first.
## Ditto for genotype "F, D, M".

## Meaning of specification: X > Y means
## that X is mutated before Y.


o3 <- allFitnessEffects(orderEffects = c(
                            "F > D > M" = -0.3,
                            "D > F > M" = 0.4,
                            "D > M > F" = 0.2,
                            "D > M"     = 0.1,
                            "M > D"     = 0.5))

## With the above specification, let's double check
## the fitness of the possible genotypes

(oeag <- evalAllGenotypes(o3, addwt = TRUE, order = TRUE))


## ----hiddoef, echo=FALSE--------------------------------------------
set.seed(2)
RNGkind("L'Ecuyer-CMRG")

## ----exusageoe2-----------------------------------------------------
## For reproducibility
set.seed(2)
RNGkind("L'Ecuyer-CMRG")

totalpops <- 5
soe1 <- oncoSimulPop(totalpops, o3, model = "Exp",
                    initSize = 500,
                    onlyCancer = FALSE,
					mc.cores = 2, ## adapt to your hardware
                    seed = NULL) ## for reproducibility
					
## What proportion of the simulations do not end up extinct?
sum(summary(soe1)[, "TotalPopSize"] > 0)/totalpops


## ----hidden-rng-exoef, echo = FALSE---------------------------------
set.seed(NULL)

## ---- results="hide",message=FALSE, echo=TRUE, include=TRUE---------
library(OncoSimulR)
library(graph)
library(igraph)
igraph_options(vertex.color = "SkyBlue2")

## ---- echo=FALSE, results='hide'----------------------------------
options(width = 68)

## -----------------------------------------------------------------
packageVersion("OncoSimulR")

## ---- fig.width=6.5, fig.height=10--------------------------------
## 1. Fitness effects: here we specify an 
##    epistatic model with modules.
sa <- 0.1
sb <- -0.2
sab <- 0.25
sac <- -0.1
sbc <- 0.25
sv2 <- allFitnessEffects(epistasis = c("-A : B" = sb,
                                       "A : -B" = sa,
                                       "A : C" = sac,
                                       "A:B" = sab,
                                       "-A:B:C" = sbc),
                         geneToModule = c(
                             "A" = "a1, a2",
                             "B" = "b",
                             "C" = "c"),
                         drvNames = c("a1", "a2", "b", "c"))
evalAllGenotypes(sv2, addwt = TRUE)

## 2. Simulate the data. Here we use the "McFL" model and set
##    explicitly parameters for mutation rate, initial size, size
##    of the population that will end the simulations, etc

RNGkind("Mersenne-Twister")
set.seed(983)
ep1 <- oncoSimulIndiv(sv2, model = "McFL",
                      mu = 5e-6,
                      sampleEvery = 0.025,
                      keepEvery = 0.5,
                      initSize = 2000,
                      finalTime = 3000,
                      onlyCancer = FALSE)

## ----iep1x1,fig.width=6.5, fig.height=4.5, fig.cap="Plot of drivers of an epistasis simulation."----
## 3. We will not analyze those data any further. We will only plot
## them.  For the sake of a small plot, we thin the data.
plot(ep1, show = "drivers", xlim = c(0, 1500),
     thinData = TRUE, thinData.keep = 0.5)

## ----fepancr1, fig.width=5----------------------------------------
## 1. Fitness effects: 
pancr <- allFitnessEffects(
    data.frame(parent = c("Root", rep("KRAS", 4), 
                   "SMAD4", "CDNK2A", 
                   "TP53", "TP53", "MLL3"),
               child = c("KRAS","SMAD4", "CDNK2A", 
                   "TP53", "MLL3",
                   rep("PXDN", 3), rep("TGFBR2", 2)),
               s = 0.1,
               sh = -0.9,
               typeDep = "MN"),
    drvNames = c("KRAS", "SMAD4", "CDNK2A", "TP53", 
	             "MLL3", "TGFBR2", "PXDN"))

## ----figfpancr1, fig.width=5, fig.cap="Plot of DAG corresponding to fitnessEffects object."----
## Plot the DAG of the fitnessEffects object
plot(pancr)

## -----------------------------------------------------------------
## 2. Simulate from it. We change several possible options. 

set.seed(4) ## Fix the seed, so we can repeat it
ep2 <- oncoSimulIndiv(pancr, model = "McFL",
                     mu = 1e-6,
                     sampleEvery = 0.02,
                     keepEvery = 1,
                     initSize = 1000,
                     finalTime = 10000,
                     onlyCancer = FALSE)

## ----iep2x2, fig.width=6.5, fig.height=5, fig.cap= "Plot of genotypes of a simulation from a DAG."----
## 3. What genotypes and drivers we get? And play with limits
##    to show only parts of the data. We also aggressively thin
##    the data.
par(cex = 0.7)
plot(ep2, show = "genotypes", xlim = c(1000, 8000), 
     ylim = c(0, 2400),
     thinData = TRUE, thinData.keep = 0.03)

## -----------------------------------------------------------------
citation("OncoSimulR")

## ----colnames_benchmarks, echo = FALSE, eval = TRUE---------------

data(benchmark_1)
data(benchmark_1_0.05)
data(benchmark_2)
data(benchmark_3)

colnames(benchmark_1)[
    match(c(
	"time_per_simul",
    "size_mb_per_simul", "NumClones.Median", "NumIter.Median",
	"FinalTime.Median", "TotalPopSize.Median", "TotalPopSize.Mean",
	"TotalPopSize.Max.", "keepEvery",  "Attempts.Median",
	"Attempts.Mean", "Attempts.Max.",
	"PDBaseline", "n2", "onlyCancer"),
	 colnames(benchmark_1)
	)] <- c("Elapsed Time, average per simulation (s)",
	              "Object Size, average per simulation (MB)",
				  "Number of Clones, median",
				  "Number of Iterations, median",
				  "Final Time, median",
				  "Total Population Size, median",
				   "Total Population Size, mean",
				  "Total Population Size, max.",
				  "keepEvery",
				  "Attempts until Cancer, median",
				  "Attempts until Cancer, mean",
				  "Attempts until Cancer, max.",
				  "PDBaseline", "n2", "onlyCancer"
				  )
				  
	
colnames(benchmark_1_0.05)[
    match(c("time_per_simul",
    "size_mb_per_simul", "NumClones.Median", "NumIter.Median",
	"FinalTime.Median", "TotalPopSize.Median", "TotalPopSize.Mean", 
	"TotalPopSize.Max.",
	"keepEvery",
	"PDBaseline", "n2", "onlyCancer", "Attempts.Median"),
	colnames(benchmark_1_0.05))] <- c("Elapsed Time, average per simulation (s)",
	              "Object Size, average per simulation (MB)",
				  "Number of Clones, median",
				  "Number of Iterations, median",
				  "Final Time, median",
				  "Total Population Size, median",
				  "Total Population Size, mean",
				  "Total Population Size, max.",
				  "keepEvery",
				  "PDBaseline", "n2", "onlyCancer",
				  "Attempts until Cancer, median"
				  )


colnames(benchmark_2)[match(c("Model", "fitness", "time_per_simul",
    "size_mb_per_simul", "NumClones.Median", "NumIter.Median",
	"FinalTime.Median", "TotalPopSize.Median", "TotalPopSize.Mean", 
	"TotalPopSize.Max."), colnames(benchmark_2))] <-  c("Model",
				  "Fitness",
	"Elapsed Time, average per simulation (s)",
	              "Object Size, average per simulation (MB)",
				  "Number of Clones, median",
				  "Number of Iterations, median",
				  "Final Time, median",
				  "Total Population Size, median",
				  "Total Population Size, mean",
				  "Total Population Size, max."
				  )	
				  
colnames(benchmark_3)[match(c("Model", "fitness", "time_per_simul",
    "size_mb_per_simul", "NumClones.Median", "NumIter.Median",
	"FinalTime.Median", "TotalPopSize.Median", "TotalPopSize.Mean", 
	"TotalPopSize.Max."), colnames(benchmark_3))] <-  c("Model",
				  "Fitness",
	"Elapsed Time, average per simulation (s)",
	              "Object Size, average per simulation (MB)",
				  "Number of Clones, median",
				  "Number of Iterations, median",
				  "Final Time, median",
				  "Total Population Size, median",
				  "Total Population Size, mean",
				  "Total Population Size, max."
				  )					  

## ----timing1, eval=FALSE------------------------------------------
#  ## Specify fitness
#  pancr <- allFitnessEffects(
#      data.frame(parent = c("Root", rep("KRAS", 4),
#                     "SMAD4", "CDNK2A",
#                     "TP53", "TP53", "MLL3"),
#                 child = c("KRAS","SMAD4", "CDNK2A",
#                     "TP53", "MLL3",
#                     rep("PXDN", 3), rep("TGFBR2", 2)),
#                 s = 0.1,
#                 sh = -0.9,
#                 typeDep = "MN"),
#      drvNames = c("KRAS", "SMAD4", "CDNK2A", "TP53",
#  	             "MLL3", "TGFBR2", "PXDN"))
#  
#  Nindiv <- 100 ## Number of simulations run.
#                ## Increase this number to decrease sampling variation
#  
#  ## keepEvery = 1
#  t_exp1 <- system.time(
#      exp1 <- oncoSimulPop(Nindiv, pancr,
#                              detectionProb = "default",
#                              detectionSize = NA,
#                              detectionDrivers = NA,
#                              finalTime = NA,
#                              keepEvery = 1,
#                              model = "Exp",
#                              mc.cores = 1))["elapsed"]/Nindiv
#  
#  
#  t_mc1 <- system.time(
#      mc1 <- oncoSimulPop(Nindiv, pancr,
#                             detectionProb = "default",
#                             detectionSize = NA,
#                             detectionDrivers = NA,
#                             finalTime = NA,
#                             keepEvery = 1,
#                             model = "McFL",
#                             mc.cores = 1))["elapsed"]/Nindiv
#  
#  ## keepEvery = NA
#  t_exp2 <- system.time(
#      exp2 <- oncoSimulPop(Nindiv, pancr,
#                              detectionProb = "default",
#                              detectionSize = NA,
#                              detectionDrivers = NA,
#                              finalTime = NA,
#                              keepEvery = NA,
#                              model = "Exp",
#                              mc.cores = 1))["elapsed"]/Nindiv
#  
#  
#  t_mc2 <- system.time(
#      mc2 <- oncoSimulPop(Nindiv, pancr,
#                             detectionProb = "default",
#                             detectionSize = NA,
#                             detectionDrivers = NA,
#                             finalTime = NA,
#                             keepEvery = NA,
#                             model = "McFL",
#                             mc.cores = 1))["elapsed"]/Nindiv
#  
#  

## ---- eval=FALSE--------------------------------------------------
#  cat("\n\n\n t_exp1 = ", t_exp1, "\n")
#  object.size(exp1)/(Nindiv * 1024^2)
#  cat("\n\n")
#  summary(unlist(lapply(exp1, "[[", "NumClones")))
#  summary(unlist(lapply(exp1, "[[", "NumIter")))
#  summary(unlist(lapply(exp1, "[[", "FinalTime")))
#  summary(unlist(lapply(exp1, "[[", "TotalPopSize")))

## ----bench1, eval=TRUE, echo = FALSE------------------------------

panderOptions('table.split.table', 99999999)
panderOptions('table.split.cells', 900)  ## For HTML
## panderOptions('table.split.cells', 8) ## For PDF

set.alignment('right')
panderOptions('round', 2)
panderOptions('big.mark', ',')
panderOptions('digits', 2)
				          
pander(benchmark_1[1:4, c("Elapsed Time, average per simulation (s)", 
 	              "Object Size, average per simulation (MB)",
 				  "Number of Clones, median",
 				  "Number of Iterations, median",
 				  "Final Time, median",
 				  "Total Population Size, median",
 				  "Total Population Size, max.",
 				  "keepEvery")],
				  justify = c('left', rep('right', 8)), ##  o.w. hlines not right
				  ## caption = "\\label{tab:bench1}Benchmarks of Exp and McFL  models using the default `detectionProb` with two settings of `keepEvery`."
				  )

## ----timing2, eval = FALSE----------------------------------------
#  t_exp3 <- system.time(
#      exp3 <- oncoSimulPop(Nindiv, pancr,
#                              detectionProb = c(PDBaseline = 5e4,
#                                                p2 = 0.1, n2 = 5e5,
#                                                checkSizePEvery = 20),
#                              detectionSize = NA,
#                              detectionDrivers = NA,
#                              finalTime = NA,
#                              keepEvery = 1,
#                              model = "Exp",
#                              mc.cores = 1))["elapsed"]/Nindiv
#  
#  t_exp4 <- system.time(
#      exp4 <- oncoSimulPop(Nindiv, pancr,
#                              detectionProb = c(PDBaseline = 5e4,
#                                                p2 = 0.1, n2 = 5e5,
#                                                checkSizePEvery = 20),
#                              detectionSize = NA,
#                              detectionDrivers = NA,
#                              finalTime = NA,
#                              keepEvery = NA,
#                              model = "Exp",
#                              mc.cores = 1))["elapsed"]/Nindiv
#  
#  
#  
#  t_exp5 <- system.time(
#      exp5 <- oncoSimulPop(Nindiv, pancr,
#                              detectionProb = c(PDBaseline = 5e5,
#                                                p2 = 0.1, n2 = 5e7),
#                              detectionSize = NA,
#                              detectionDrivers = NA,
#                              finalTime = NA,
#                              keepEvery = 1,
#                              model = "Exp",
#                              mc.cores = 1))["elapsed"]/Nindiv
#  
#  t_exp6 <- system.time(
#      exp6 <- oncoSimulPop(Nindiv, pancr,
#                              detectionProb = c(PDBaseline = 5e5,
#                                                p2 = 0.1, n2 = 5e7),
#                              detectionSize = NA,
#                              detectionDrivers = NA,
#                              finalTime = NA,
#                              keepEvery = NA,
#                              model = "Exp",
#                              mc.cores = 1))["elapsed"]/Nindiv
#  

## ----bench1b, eval=TRUE, echo = FALSE-----------------------------
panderOptions('table.split.table', 99999999)
panderOptions('table.split.cells', 900)  ## For HTML
## panderOptions('table.split.cells', 8) ## For PDF

set.alignment('right')
panderOptions('round', 2)
panderOptions('big.mark', ',')
panderOptions('digits', 2)

pander(benchmark_1[5:8, c("Elapsed Time, average per simulation (s)",
 	              "Object Size, average per simulation (MB)",
 				  "Number of Clones, median",
 				  "Number of Iterations, median",
 				  "Final Time, median",
 				  "Total Population Size, median",
 				  "Total Population Size, max.",
 				  "keepEvery",
				  "PDBaseline",
				  "n2")], 
				  justify = c('left', rep('right', 10)), ##  o.w. hlines not right
## 				  round = c(rep(2, 3), rep(0, 7)),
## 				  digits = c(rep(2, 3), rep(1, 7)),
	  ## caption = "\\label{tab:bench1b}Benchmarks of Exp and McFL models modifying the default `detectionProb` with two settings of `keepEvery`."
    )


## ----bench1c, eval=TRUE, echo = FALSE-----------------------------
panderOptions('table.split.table', 99999999)
panderOptions('table.split.cells', 900)  ## For HTML
## panderOptions('table.split.cells', 12) ## For PDF
set.alignment('right')
panderOptions('round', 2)
panderOptions('big.mark', ',')
panderOptions('digits', 2)

pander(benchmark_1[1:8, c(
"Attempts until Cancer, median", 
"Attempts until Cancer, mean", 
"Attempts until Cancer, max.", 
				  "PDBaseline",
				  "n2")], 
				  justify = c('left', rep('right', 5)), ##  o.w. hlines not right
## 				  round = c(rep(2, 3), rep(0, 7)),
## 				  digits = c(rep(2, 3), rep(1, 7)),
	  ## caption = "\\label{tab:bench1c}Number of attempts until cancer."
    )
## ## data(benchmark_1)
## knitr::kable(benchmark_1[1:8, c("Attempts.Median",
##                                 "PDBaseline", "n2"), drop = FALSE], 
##     booktabs = TRUE,
## 	row.names = TRUE,
## 	col.names = c("Attempts until cancer", "PDBaseline", "n2"),
##     caption = "Median number of attempts until cancer.", 
## 	align = "r")
	

## ----bench1d, eval=TRUE, echo = FALSE-----------------------------
panderOptions('table.split.table', 99999999)
panderOptions('table.split.cells', 900)  ## For HTML
## panderOptions('table.split.cells', 8) ## For PDF
panderOptions('table.split.cells', 15) ## does not fit otherwise
set.alignment('right')
panderOptions('round', 3)

pander(benchmark_1[9:16, 
    c("Elapsed Time, average per simulation (s)",
 	              "Object Size, average per simulation (MB)",
 				  "Number of Clones, median",
 				  "Number of Iterations, median",
 				  "Final Time, median",
 				  "Total Population Size, median",
				  "Total Population Size, mean",
 				  "Total Population Size, max.",
 				  "keepEvery",
				  "PDBaseline",
				  "n2")],
				  justify = c('left', rep('right', 11)), ##  o.w. hlines not right
## caption = "\\label{tab:timing3} Benchmarks of models in Table \\@ref(tab:bench1) and \\@ref(tab:bench1b) when run with `onlyCancer = FALSE`."
				  )	
	

## ----bench1dx0, eval=TRUE, echo = FALSE---------------------------
panderOptions('table.split.table', 99999999)
## panderOptions('table.split.cells', 900)  ## For HTML
panderOptions('table.split.cells', 19)

set.alignment('right') 
panderOptions('round', 3)
	
pander(benchmark_1[ , c("Elapsed Time, average per simulation (s)",
 	              "Object Size, average per simulation (MB)", 
				  "Number of Clones, median", 
				  "Number of Iterations, median", 
				  "Final Time, median", "Total Population Size, median", 
				  "Total Population Size, mean", "Total Population Size, max.",
 	              "keepEvery", "PDBaseline", "n2", "onlyCancer")], 
				  justify = c('left', rep('right', 12)), ##  o.w. hlines not right
				  ## caption = "\\label{tab:allr1bck}Benchmarks of all models in Tables \\@ref(tab:bench1), \\@ref(tab:bench1b),  and \\@ref(tab:timing3)."  
				  )  

## ----bench1dx, eval=TRUE, echo = FALSE----------------------------
## data(benchmark_1_0.05)
## knitr::kable(benchmark_1_0.05[, c("time_per_simul",
##     "size_mb_per_simul", "NumClones.Median", "NumIter.Median",
## 	"FinalTime.Median", "TotalPopSize.Median", "TotalPopSize.Mean", 
## 	"TotalPopSize.Max.",
## 	"keepEvery",
## 	"PDBaseline", "n2", "onlyCancer")], 
##     booktabs = TRUE,
## 	col.names = c("Elapsed Time, average per simulation (s)",
## 	              "Object Size, average per simulation (MB)",
## 				  "Number of Clones, median",
## 				  "Number of Iterations, median",
## 				  "Final Time, median",
## 				  "Total Population Size, median",
## 				  "Total Population Size, mean",
## 				  "Total Population Size, max.",				  
## 				  "keepEvery",
## 				  "PDBaseline", "n2", "onlyCancer"
## 				  ),
## ##    caption = "Benchmarks of models in Table \@ref(tab:bench1) and
## ##   \@ref(tab:bench1b) when run with `onlyCancer = FALSE`", 
## 	align = "c")
	
panderOptions('table.split.table', 99999999)
## panderOptions('table.split.cells', 900)  ## For HTML
panderOptions('table.split.cells', 19)

set.alignment('right') 
panderOptions('round', 3)
	
pander(benchmark_1_0.05[ , c("Elapsed Time, average per simulation (s)",
 	              "Object Size, average per simulation (MB)", 
				  "Number of Clones, median", 
				  "Number of Iterations, median", 
				  "Final Time, median", 
				  "Total Population Size, median", 
				  "Total Population Size, mean", "Total Population Size, max.",
 	              "keepEvery", "PDBaseline", "n2", "onlyCancer")], 
				  justify = c('left', rep('right', 12)), ##  o.w. hlines not right
 	              ## caption = "\\label{tab:timing3xf}Benchmarks of all models in Table \\@ref(tab:allr1bck) using $s=0.05$ (instead of $s=0.1$)."  
)  
				  

## ----fitusualb, echo = TRUE, eval = FALSE-------------------------
#  pancr <- allFitnessEffects(
#      data.frame(parent = c("Root", rep("KRAS", 4),
#                     "SMAD4", "CDNK2A",
#                     "TP53", "TP53", "MLL3"),
#                 child = c("KRAS","SMAD4", "CDNK2A",
#                     "TP53", "MLL3",
#                     rep("PXDN", 3), rep("TGFBR2", 2)),
#                 s = 0.1,
#                 sh = -0.9,
#                 typeDep = "MN"),
#      drvNames = c("KRAS", "SMAD4", "CDNK2A", "TP53",
#  	             "MLL3", "TGFBR2", "PXDN"))
#  
#  
#  ## Random fitness landscape with 6 genes
#  ## At least 50 accessible genotypes
#  rfl6 <- rfitness(6, min_accessible_genotypes = 50)
#  attributes(rfl6)$accessible_genotypes ## How many accessible
#  rf6 <- allFitnessEffects(genotFitness = rfl6)
#  
#  
#  ## Random fitness landscape with 12 genes
#  ## At least 200 accessible genotypes
#  rfl12 <- rfitness(12, min_accessible_genotypes = 200)
#  attributes(rfl12)$accessible_genotypes ## How many accessible
#  rf12 <- allFitnessEffects(genotFitness = rfl12)
#  
#  
#  
#  
#  ## Independent genes; positive fitness from exponential distribution
#  ## with mean around 0.1, and negative from exponential with mean
#  ## around -0.02. Half of genes positive fitness effects, half
#  ## negative.
#  
#  ng <- 200 re_200 <- allFitnessEffects(noIntGenes = c(rexp(ng/2, 10),
#  -rexp(ng/2, 50)))
#  
#  ng <- 500
#  re_500 <- allFitnessEffects(noIntGenes = c(rexp(ng/2, 10),
#                                             -rexp(ng/2, 50)))
#  
#  ng <- 2000
#  re_2000 <- allFitnessEffects(noIntGenes = c(rexp(ng/2, 10),
#                                              -rexp(ng/2, 50)))
#  
#  ng <- 4000
#  re_4000 <- allFitnessEffects(noIntGenes = c(rexp(ng/2, 10),
#                                              -rexp(ng/2, 50)))
#  

## ----exp-usual-r, eval = FALSE, echo = TRUE-----------------------
#  
#  oncoSimulPop(Nindiv,
#              fitness,
#              detectionProb = NA,
#              detectionSize = 1e6,
#              initSize = 500,
#              detectionDrivers = NA,
#              keepPhylog = TRUE,
#              model = "Exp",
#              errorHitWallTime = FALSE,
#              errorHitMaxTries = FALSE,
#              finalTime = 5000,
#              onlyCancer = FALSE,
#              mc.cores = 1,
#              sampleEvery = 0.5,
#  			keepEvery = 1)

## ----mc-usual-r, eval = FALSE, echo = TRUE------------------------
#  initSize <- 1000
#  oncoSimulPop(Nindiv,
#                fitness,
#                 detectionProb = c(
#                     PDBaseline = 1.4 * initSize,
#                     n2 = 2 * initSize,
#                     p2 = 0.1,
#                     checkSizePEvery = 4),
#                 initSize = initSize,
#                 detectionSize = NA,
#                 detectionDrivers = NA,
#                 keepPhylog = TRUE,
#                 model = "McFL",
#                 errorHitWallTime = FALSE,
#                 errorHitMaxTries = FALSE,
#                 finalTime = 5000,
#                 max.wall.time = 10,
#                 onlyCancer = FALSE,
#                 mc.cores = 1,
#  			   keepEvery = 1)
#  

## ----benchustable, eval=TRUE, echo = FALSE------------------------
## data(benchmark_2)

## knitr::kable(benchmark_2[, c("Model", "fitness", "time_per_simul",
##     "size_mb_per_simul", "NumClones.Median", "NumIter.Median",
## 	"FinalTime.Median", "TotalPopSize.Median", "TotalPopSize.Mean", 
## 	"TotalPopSize.Max.")], 
##     booktabs = TRUE,
## 	col.names = c("Model",
## 				  "Fitness",
## 	"Elapsed Time, average per simulation (s)",
## 	              "Object Size, average per simulation (MB)",
## 				  "Number of Clones, median",
## 				  "Number of Iterations, median",
## 				  "Final Time, median",
## 				  "Total Population Size, median",
## 				  "Total Population Size, mean",
## 				  "Total Population Size, max."
## 				  ),
## 	align = "c")

panderOptions('table.split.table', 99999999)
panderOptions('table.split.cells', 900)  ## For HTML
## panderOptions('table.split.cells', 8) ## For PDF

## set.alignment('right', row.names = 'center')
panderOptions('table.alignment.default', 'right')

panderOptions('round', 3)

pander(benchmark_2[ , c(
    "Model", "Fitness",
    "Elapsed Time, average per simulation (s)",
 	              "Object Size, average per simulation (MB)",
 				  "Number of Clones, median",
 				  "Number of Iterations, median",
 				  "Final Time, median",
 				  "Total Population Size, median",
 				  "Total Population Size, mean",				  
 				  "Total Population Size, max.")], 
				  justify = c('left', 'left', rep('right', 8)),
				  ## caption = "\\label{tab:timingusual}Benchmarks under some common use cases, set 1." 
				  )	
	

## ----benchustable2, eval=TRUE, echo = FALSE-----------------------
## data(benchmark_3)

## knitr::kable(benchmark_3[, c("Model", "fitness", "time_per_simul",
##     "size_mb_per_simul", "NumClones.Median", "NumIter.Median",
## 	"FinalTime.Median", "TotalPopSize.Median", "TotalPopSize.Mean", 
## 	"TotalPopSize.Max.")], 
##     booktabs = TRUE,
## 	col.names = c("Model",
## 				  "Fitness", "Elapsed Time, average per simulation (s)",
## 	              "Object Size, average per simulation (MB)",
## 				  "Number of Clones, median",
## 				  "Number of Iterations, median",
## 				  "Final Time, median",
## 				  "Total Population Size, median",
## 				  "Total Population Size, mean",
## 				  "Total Population Size, max."
## 				  ),
## 	align = "c")

panderOptions('table.split.table', 99999999)
panderOptions('table.split.cells', 900)  ## For HTML
## panderOptions('table.split.cells', 8) ## For PDF


panderOptions('round', 3)
panderOptions('table.alignment.default', 'right')

pander(benchmark_3[ , c(
    "Model", "Fitness",
    "Elapsed Time, average per simulation (s)",
 	              "Object Size, average per simulation (MB)",
 				  "Number of Clones, median",
 				  "Number of Iterations, median",
 				  "Final Time, median",
 				  "Total Population Size, median",
 				  "Total Population Size, mean",				  
 				  "Total Population Size, max.")],
				  justify = c('left', 'left', rep('right', 8)),
				  ## caption = "\\label{tab:timingusual2}Benchmarks under some common use cases, set 2."
				  )	

## ----exp10000, echo = TRUE, eval = FALSE--------------------------
#  ng <- 10000
#  u <- allFitnessEffects(noIntGenes = c(rep(0.1, ng/2),
#                                        rep(-0.1, ng/2)))
#  
#  t_e_10000 <- system.time(
#      e_10000 <- oncoSimulPop(5, u, model = "Exp", mu = 1e-7,
#                              detectionSize = 1e6,
#                              detectionDrivers = NA,
#                              detectionProb = NA,
#                              keepPhylog = TRUE,
#                              onlyCancer = FALSE,
#                              mutationPropGrowth = TRUE,
#                              mc.cores = 1))

## ----exp10000-out, echo = TRUE, eval = FALSE----------------------
#  t_e_10000
#  ##    user  system elapsed
#  ##   4.368   0.196   4.566
#  
#  summary(e_10000)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1      5017      1180528       415116       143    7547
#  ## 2      3726      1052061       603612       131    5746
#  ## 3      4532      1100721       259510       132    6674
#  ## 4      4150      1283115       829728        99    6646
#  ## 5      4430      1139185       545958       146    6748
#  
#  print(object.size(e_10000), units = "MB")
#  ## 863.9 Mb
#  

## ----exp10000b, eval = FALSE, echo = TRUE-------------------------
#  t_e_10000b <- system.time(
#      e_10000b <- oncoSimulPop(5,
#                               u,
#                               model = "Exp",
#                               mu = 1e-7,
#                               detectionSize = 1e6,
#                               detectionDrivers = NA,
#                               detectionProb = NA,
#                               keepPhylog = TRUE,
#                               onlyCancer = FALSE,
#                               keepEvery = NA,
#                               mutationPropGrowth = TRUE,
#                               mc.cores = 1
#                               ))
#  

## ----exp10000b-out, echo = TRUE, eval = FALSE---------------------
#  t_e_10000b
#  ##    user  system elapsed
#  ##   5.484   0.100   5.585
#  
#  summary(e_10000b)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1      2465      1305094       727989        91    6447
#  ## 2      2362      1070225       400329       204    8345
#  ## 3      2530      1121164       436721       135    8697
#  ## 4      2593      1206293       664494       125    8149
#  ## 5      2655      1186994       327835       191    8572
#  
#  print(object.size(e_10000b), units = "MB")
#  ## 488.3 Mb
#  

## ----exp50000, echo = TRUE, eval = FALSE--------------------------
#  ng <- 50000
#  u <- allFitnessEffects(noIntGenes = c(rep(0.1, ng/2),
#                                        rep(-0.1, ng/2)))
#  t_e_50000 <- system.time(
#      e_50000 <- oncoSimulPop(5,
#                              u,
#                              model = "Exp",
#                              mu = 1e-7,
#                              detectionSize = 1e6,
#                              detectionDrivers = NA,
#                              detectionProb = NA,
#                              keepPhylog = TRUE,
#                              onlyCancer = FALSE,
#                              keepEvery = NA,
#                              mutationPropGrowth = FALSE,
#                              mc.cores = 1
#                              ))
#  
#  
#  t_e_50000
#  ##    user  system elapsed
#  ##  44.192   1.684  45.891
#  
#  summary(e_50000)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1      7367      1009949       335455     75.00   18214
#  ## 2      8123      1302324       488469     63.65   17379
#  ## 3      8408      1127261       270690     72.57   21144
#  ## 4      8274      1138513       318152     80.59   20994
#  ## 5      7520      1073131       690814     70.00   18569
#  
#  print(object.size(e_50000), units = "MB")
#  ## 7598.6 Mb

## ----exp50000np, echo = TRUE, eval = FALSE------------------------
#  ng <- 50000
#  u <- allFitnessEffects(noIntGenes = c(rep(0.1, ng/2),
#                                        rep(-0.1, ng/2)))
#  t_e_50000np <- system.time(
#      e_50000np <- oncoSimulPop(5,
#                                u,
#                                model = "Exp",
#                                mu = 1e-7,
#                                detectionSize = 1e6,
#                                detectionDrivers = NA,
#                                detectionProb = NA,
#                                keepPhylog = TRUE,
#                                onlyCancer = FALSE,
#                                keepEvery = 1,
#                                mutationPropGrowth = FALSE,
#                                mc.cores = 1
#                                ))
#  
#  t_e_50000np
#  ##   user  system elapsed
#  ## 42.316   2.764  45.079
#  
#  summary(e_50000np)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1     13406      1027949       410074     71.97   19469
#  ## 2     12469      1071325       291852     66.00   17834
#  ## 3     11821      1089834       245720     90.00   16711
#  ## 4     14008      1165168       505607     77.61   19675
#  ## 5     14759      1074621       205954     87.68   20597
#  
#  print(object.size(e_50000np), units = "MB")
#  ## 12748.4 Mb
#  

## ----exp50000mpg, echo = TRUE, eval = FALSE-----------------------
#  
#  ng <- 50000
#  u <- allFitnessEffects(noIntGenes = c(rep(0.1, ng/2),
#                                        rep(-0.1, ng/2)))
#  
#  t_e_50000c <- system.time(
#      e_50000c <- oncoSimulPop(5,
#                               u,
#                               model = "Exp",
#                               mu = 1e-7,
#                               detectionSize = 1e6,
#                               detectionDrivers = NA,
#                               detectionProb = NA,
#                               keepPhylog = TRUE,
#                               onlyCancer = FALSE,
#                               keepEvery = NA,
#                               mutationPropGrowth = TRUE,
#                               mc.cores = 1
#                               ))
#  
#  t_e_50000c
#  ##    user  system elapsed
#  ## 84.228   2.416  86.665
#  
#  summary(e_50000c)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1     11178      1241970       344479     84.74   27137
#  ## 2     12820      1307086       203544     91.94   33448
#  ## 3     10592      1126091       161057     83.81   26064
#  ## 4     11883      1351114       148986     65.68   25396
#  ## 5     10518      1101392       253523     99.79   26082
#  
#  print(object.size(e_50000c), units = "MB")
#  ## 10904.9 Mb
#  

## ----sizedetail, eval = FALSE, echo = TRUE------------------------
#  r1 <- oncoSimulIndiv(u,
#                       model = "Exp",
#                       mu = 1e-7,
#                       detectionSize = 1e6,
#                       detectionDrivers = NA,
#                       detectionProb = NA,
#                       keepPhylog = TRUE,
#                       onlyCancer = FALSE,
#                       mutationPropGrowth = TRUE
#                       )
#  summary(r1)[c(1, 8)]
#  ##   NumClones  FinalTime
#  ## 1      3887        345
#  
#  print(object.size(r1), units = "MB")
#  ## 160 Mb
#  
#  ## Size of the two largest objects inside:
#  sizes <- lapply(r1, function(x) object.size(x)/(1024^2))
#  sort(unlist(sizes), decreasing = TRUE)[1:2]
#  ## Genotypes pops.by.time
#  ##       148.28        10.26
#  
#  dim(r1$Genotypes)
#  ## [1] 10000  3887

## ----mc50000_1, echo = TRUE, eval = FALSE-------------------------
#  ng <- 50000
#  u <- allFitnessEffects(noIntGenes = c(rep(0.1, ng/2),
#                                        rep(-0.1, ng/2)))
#  
#  t_mc_50000_nmpg <- system.time(
#      mc_50000_nmpg <- oncoSimulPop(5,
#                                    u,
#                                    model = "McFL",
#                                    mu = 1e-7,
#                                    detectionSize = 1e6,
#                                    detectionDrivers = NA,
#                                    detectionProb = NA,
#                                    keepPhylog = TRUE,
#                                    onlyCancer = FALSE,
#                                    keepEvery = NA,
#                                    mutationPropGrowth = FALSE,
#                                    mc.cores = 1
#                                    ))
#  t_mc_50000_nmpg
#  ##   user  system elapsed
#  ##  30.46    0.54   31.01
#  
#  
#  summary(mc_50000_nmpg)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1      1902      1002528       582752     284.2   31137
#  ## 2      2159      1002679       404858     274.8   36905
#  ## 3      2247      1002722       185678     334.5   42429
#  ## 4      2038      1009606       493574     218.4   32519
#  ## 5      2222      1004661       162628     291.0   38470
#  
#  print(object.size(mc_50000_nmpg), units = "MB")
#  ## 2057.6 Mb
#  

## ----mc50000_kp, echo = TRUE, eval = FALSE------------------------
#  t_mc_50000_nmpg_k <- system.time(
#      mc_50000_nmpg_k <- oncoSimulPop(5,
#                                      u,
#                                      model = "McFL",
#                                      mu = 1e-7,
#                                      detectionSize = 1e6,
#                                      detectionDrivers = NA,
#                                      detectionProb = NA,
#                                      keepPhylog = TRUE,
#                                      onlyCancer = FALSE,
#                                      keepEvery = 1,
#                                      mutationPropGrowth = FALSE,
#                                      mc.cores = 1
#                                      ))
#  
#  t_mc_50000_nmpg_k
#  ##    user  system elapsed
#  ##  30.000   1.712  31.714
#  
#  summary(mc_50000_nmpg_k)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1      8779      1000223       136453     306.7   38102
#  ## 2      7442      1006563       428150     345.3   35139
#  ## 3      8710      1003509       224543     252.3   35659
#  ## 4      8554      1002537       103889     273.7   36783
#  ## 5      8233      1003171       263005     301.8   35236
#  
#  print(object.size(mc_50000_nmpg_k), units = "MB")
#  ## 8101.4 Mb

## ----mc50000_popx, echo = TRUE, eval = FALSE----------------------
#  ng <- 50000
#  u <- allFitnessEffects(noIntGenes = c(rep(0.1, ng/2),
#                                        rep(-0.1, ng/2)))
#  
#  t_mc_50000_nmpg_3e6 <- system.time(
#      mc_50000_nmpg_3e6 <- oncoSimulPop(5,
#                                        u,
#                                        model = "McFL",
#                                        mu = 1e-7,
#                                        detectionSize = 3e6,
#                                        detectionDrivers = NA,
#                                        detectionProb = NA,
#                                        keepPhylog = TRUE,
#                                        onlyCancer = FALSE,
#                                        keepEvery = NA,
#                                        mutationPropGrowth = FALSE,
#                                        mc.cores = 1
#                                        ))
#  t_mc_50000_nmpg_3e6
#  ##    user  system elapsed
#  ##  77.240   1.064  78.308
#  
#  summary(mc_50000_nmpg_3e6)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1      5487      3019083       836793     304.5   65121
#  ## 2      4812      3011816       789146     286.3   53087
#  ## 3      4463      3016896      1970957     236.6   45918
#  ## 4      5045      3028142       956026     360.3   63464
#  ## 5      4791      3029720       916692     358.1   55012
#  
#  print(object.size(mc_50000_nmpg_3e6), units = "MB")
#  ## 4759.3 Mb
#  												

## ----mc50000_mux, echo = TRUE, eval = FALSE-----------------------
#  
#  t_mc_50000_nmpg_5mu <- system.time(
#      mc_50000_nmpg_5mu <- oncoSimulPop(5,
#                                        u,
#                                        model = "McFL",
#                                        mu = 5e-7,
#                                        detectionSize = 1e6,
#                                        detectionDrivers = NA,
#                                        detectionProb = NA,
#                                        keepPhylog = TRUE,
#                                        onlyCancer = FALSE,
#                                        keepEvery = NA,
#                                        mutationPropGrowth = FALSE,
#                                        mc.cores = 1
#                                        ))
#  
#  t_mc_50000_nmpg_5mu
#  ##    user  system elapsed
#  ## 167.332   1.796 169.167
#  
#  summary(mc_50000_nmpg_5mu)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1      7963      1004415       408352     99.03   57548
#  ## 2      8905      1010751       120155    130.30   74738
#  ## 3      8194      1005465       274661     96.98   58546
#  ## 4      9053      1014049       119943    112.23   75379
#  ## 5      8982      1011817        95047     99.95   76757
#  
#  print(object.size(mc_50000_nmpg_5mu), units = "MB")
#  ## 8314.4 Mb

## ----mcf5muk, echo = TRUE, eval = FALSE---------------------------
#  t_mc_50000_nmpg_5mu_k <- system.time(
#      mc_50000_nmpg_5mu_k <- oncoSimulPop(5,
#                                          u,
#                                          model = "McFL",
#                                          mu = 5e-7,
#                                          detectionSize = 1e6,
#                                          detectionDrivers = NA,
#                                          detectionProb = NA,
#                                          keepPhylog = TRUE,
#                                          onlyCancer = FALSE,
#                                          keepEvery = 1,
#                                          mutationPropGrowth = FALSE,
#                                          mc.cores = 1
#                                          ))
#  												
#  t_mc_50000_nmpg_5mu_k
#  ##    user  system elapsed
#  ## 174.404   5.068 179.481
#  
#  summary(mc_50000_nmpg_5mu_k)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1     25294      1001597       102766     123.4   74524
#  ## 2     23766      1006679       223010     124.3   71808
#  ## 3     21755      1001379       203638     114.8   62609
#  ## 4     24889      1012103       161003     119.3   75031
#  ## 5     21844      1002927       255388     108.8   64556
#  
#  print(object.size(mc_50000_nmpg_5mu_k), units = "MB")
#  ## 22645.8 Mb
#  

## ----mc50000_2, echo = TRUE, eval = FALSE-------------------------
#  
#  t_mc_50000 <- system.time(
#      mc_50000 <- oncoSimulPop(5,
#                               u,
#                               model = "McFL",
#                               mu = 1e-7,
#                               detectionSize = 1e6,
#                               detectionDrivers = NA,
#                               detectionProb = NA,
#                               keepPhylog = TRUE,
#                               onlyCancer = FALSE,
#                               keepEvery = NA,
#                               mutationPropGrowth = TRUE,
#                               mc.cores = 1
#                               ))
#  
#  t_mc_50000
#  ##    user  system elapsed
#  ## 303.352   2.808 306.223
#  
#  summary(mc_50000)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1     13928      1010815       219814     210.9   91255
#  ## 2     12243      1003267       214189     178.1   67673
#  ## 3     13880      1014131       124354     161.4   88322
#  ## 4     14104      1012941        75521     205.7   98583
#  ## 5     12428      1005594       232603     167.4   70359
#  
#  print(object.size(mc_50000), units = "MB")
#  ## 12816.6 Mb
#  

## ----mcf5muk005, echo = TRUE, eval = FALSE------------------------
#  t_mc_50000_nmpg_5mu_k <- system.time(
#      mc_50000_nmpg_5mu_k <- oncoSimulPop(2,
#                                          u,
#                                          model = "McFL",
#                                          mu = 5e-7,
#                                          detectionSize = 1e6,
#                                          detectionDrivers = NA,
#                                          detectionProb = NA,
#                                          keepPhylog = TRUE,
#                                          onlyCancer = FALSE,
#                                          keepEvery = 1,
#                                          mutationPropGrowth = FALSE,
#                                          mc.cores = 1
#                                          ))
#  t_mc_50000_nmpg_5mu_k
#  ##    user  system elapsed
#  ## 305.512   5.164 310.711
#  
#  summary(mc_50000_nmpg_5mu_k)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1     61737      1003273       104460  295.8731  204214
#  ## 2     65072      1000540       133068  296.6243  210231
#  
#  print(object.size(mc_50000_nmpg_5mu_k), units = "MB")
#  ## 24663.6 Mb
#  

## ----mc50000_1_005, echo = TRUE, eval = FALSE---------------------
#  t_mc_50000_nmpg <- system.time(
#      mc_50000_nmpg <- oncoSimulPop(5,
#                                    u,
#                                    model = "McFL",
#                                    mu = 1e-7,
#                                    detectionSize = 1e6,
#                                    detectionDrivers = NA,
#                                    detectionProb = NA,
#                                    keepPhylog = TRUE,
#                                    onlyCancer = FALSE,
#                                    keepEvery = NA,
#                                    mutationPropGrowth = FALSE,
#                                    mc.cores = 1
#                                    ))
#  t_mc_50000_nmpg
#  ##    user  system elapsed
#  ## 111.236   0.596 111.834
#  
#  summary(mc_50000_nmpg)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1      2646      1000700       217188   734.475  108566
#  ## 2      2581      1001626       209873   806.500  107296
#  ## 3      2903      1001409       125148   841.700  120859
#  ## 4      2310      1000146       473948   906.300   91519
#  ## 5      2704      1001290       448409   838.800  103556
#  
#  print(object.size(mc_50000_nmpg), units = "MB")
#  ## 2638.3 Mb
#  

## ----filog_exp50000_1, echo = TRUE, eval = FALSE------------------
#  head(e_50000[[1]]$other$PhylogDF)
#  ##   parent child   time
#  ## 1         3679 0.8402
#  ## 2         4754 1.1815
#  ## 3        20617 1.4543
#  ## 4        15482 2.3064
#  ## 5         4431 3.7130
#  ## 6        41915 4.0628
#  
#  tail(e_50000[[1]]$other$PhylogDF)
#  ##                          parent                            child time
#  ## 20672               3679, 20282               3679, 20282, 22359 75.0
#  ## 20673        3679, 17922, 22346        3679, 17922, 22346, 35811 75.0
#  ## 20674                2142, 3679                2142, 3679, 25838 75.0
#  ## 20675        3679, 17922, 19561        3679, 17922, 19561, 43777 75.0
#  ## 20676 3679, 15928, 19190, 20282 3679, 15928, 19190, 20282, 49686 75.0
#  ## 20677         2142, 3679, 16275         2142, 3679, 16275, 24201 75.0

## ----noplotlconephylog, echo = TRUE, eval = FALSE-----------------
#  plotClonePhylog(e_50000[[1]]) ## plot not shown
#  

## ----ex-large-pop-size, eval = FALSE, echo = TRUE-----------------
#  ng <- 50
#  u <- allFitnessEffects(noIntGenes = c(rep(0.1, ng)))

## ----ex-large-mf, eval = FALSE, echo = TRUE-----------------------
#  t_mc_k_50_1e11 <- system.time(
#      mc_k_50_1e11 <- oncoSimulPop(5,
#                                   u,
#                                   model = "McFL",
#                                   mu = 1e-7,
#                                   detectionSize = 1e11,
#                                   initSize = 1e5,
#                                   detectionDrivers = NA,
#                                   detectionProb = NA,
#                                   keepPhylog = TRUE,
#                                   onlyCancer = FALSE,
#                                   mutationPropGrowth = FALSE,
#                                   keepEvery = 1,
#                                   finalTime = 5000,
#                                   mc.cores = 1,
#                                   max.wall.time = 600
#                                   ))
#  
#  ## Recoverable exception ti set to DBL_MIN. Rerunning.
#  ## Recoverable exception ti set to DBL_MIN. Rerunning.
#  
#  t_mc_k_50_1e11
#  ## user  system elapsed
#  ## 613.612   0.040 613.664
#  
#  summary(mc_k_50_1e11)[, c(1:3, 8, 9)]
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1      5491 100328847809  44397848771  1019.950  942764
#  ## 2      3194 100048090441  34834178374   789.675  888819
#  ## 3      5745 100054219162  24412502660   927.950  929231
#  ## 4      4017 101641197799  60932177160   750.725  480938
#  ## 5      5393 100168156804  41659212367   846.250  898245
#  
#  ## print(object.size(mc_k_50_1e11), units = "MB")
#  ## 177.8 Mb
#  

## ----ex-large-exp, eval = FALSE, echo = TRUE----------------------
#  t_exp_k_50_1e11 <- system.time(
#      exp_k_50_1e11 <- oncoSimulPop(5,
#                                    u,
#                                    model = "Exp",
#                                    mu = 1e-7,
#                                    detectionSize = 1e11,
#                                    initSize = 1e5,
#                                    detectionDrivers = NA,
#                                    detectionProb = NA,
#                                    keepPhylog = TRUE,
#                                    onlyCancer = FALSE,
#                                    mutationPropGrowth = FALSE,
#                                    keepEvery = 1,
#                                    finalTime = 5000,
#                                    mc.cores = 1,
#                                    max.wall.time = 600,
#                                    errorHitWallTime = FALSE,
#                                    errorHitMaxTries = FALSE
#                                    ))
#  
#  ## Recoverable exception ti set to DBL_MIN. Rerunning.
#  ## Hitted wall time. Exiting.
#  ## Recoverable exception ti set to DBL_MIN. Rerunning.
#  ## Recoverable exception ti set to DBL_MIN. Rerunning.
#  ## Recoverable exception ti set to DBL_MIN. Rerunning.
#  ## Hitted wall time. Exiting.
#  ## Recoverable exception ti set to DBL_MIN. Rerunning.
#  ## Recoverable exception ti set to DBL_MIN. Rerunning.
#  ## Recoverable exception ti set to DBL_MIN. Rerunning.
#  ## Recoverable exception ti set to DBL_MIN. Rerunning.
#  ## Recoverable exception ti set to DBL_MIN. Rerunning.
#  ## Hitted wall time. Exiting.
#  ## Hitted wall time. Exiting.
#  
#  t_exp_k_50_1e11
#  ##     user   system  elapsed
#  ## 2959.068    0.128 2959.556
#  try(summary(exp_k_50_1e11)[, c(1:3, 8, 9)])
#  ##   NumClones TotalPopSize LargestClone FinalTime NumIter
#  ## 1      6078  65172752616  16529682757  235.7590 1883438
#  ## 2      5370 106476643712  24662446729  232.0000 2516675
#  ## 3      2711  21911284363  17945303353  224.8608  543698
#  ## 4      2838  13241462284   2944300245  216.8091  372298
#  ## 5      7289  76166784312  10941729810  240.0217 1999489
#  
#  print(object.size(exp_k_50_1e11), units = "MB")
#  ## 53.5 Mb
#  

## -----------------------------------------------------------------
m4 <- data.frame(G = c("WT", "A", "B", "A, B"), F = c(1, 2, 3, 4))

## -----------------------------------------------------------------
fem4 <- allFitnessEffects(genotFitness = m4)

## -----------------------------------------------------------------
try(plot(fem4))

## ---- fig.width=6.5, fig.height = 6.5-----------------------------
plotFitnessLandscape(evalAllGenotypes(fem4))

## -----------------------------------------------------------------
evalAllGenotypes(fem4, addwt = TRUE)

## -----------------------------------------------------------------
plotFitnessLandscape(evalAllGenotypes(fem4))

## -----------------------------------------------------------------
m6 <- cbind(c(1, 1), c(1, 0), c(2, 3))
fem6 <- allFitnessEffects(genotFitness = m6)
evalAllGenotypes(fem6, addwt = TRUE)
## plot(fem6)

## ---- fig.width=6.5, fig.height = 6.5-----------------------------
plotFitnessLandscape(evalAllGenotypes(fem6))

## ----mcflparam----------------------------------------------------
sp <- 1e-3 
spp <- -sp/(1 + sp)

## -----------------------------------------------------------------

ai1 <- evalAllGenotypes(allFitnessEffects(
    noIntGenes = c(0.05, -.2, .1)), order = FALSE)

## -----------------------------------------------------------------
ai1

## -----------------------------------------------------------------
all(ai1[, "Fitness"]  == c( (1 + .05), (1 - .2), (1 + .1),
       (1 + .05) * (1 - .2),
       (1 + .05) * (1 + .1),
       (1 - .2) * (1 + .1),
       (1 + .05) * (1 - .2) * (1 + .1)))


## -----------------------------------------------------------------
(ai2 <- evalAllGenotypes(allFitnessEffects(
    noIntGenes = c(0.05, -.2, .1)), order = TRUE,
    addwt = TRUE))


## ---- fig.height=4------------------------------------------------
data(examplesFitnessEffects)
plot(examplesFitnessEffects[["cbn1"]])

## -----------------------------------------------------------------

cs <-  data.frame(parent = c(rep("Root", 4), "a", "b", "d", "e", "c"),
                 child = c("a", "b", "d", "e", "c", "c", rep("g", 3)),
                 s = 0.1,
                 sh = -0.9,
                 typeDep = "MN")

cbn1 <- allFitnessEffects(cs)


## ---- fig.height=3------------------------------------------------
plot(cbn1)

## ---- fig.height=5------------------------------------------------
plot(cbn1, "igraph")

## ---- fig.height=5------------------------------------------------
library(igraph) ## to make the reingold.tilford layout available
plot(cbn1, "igraph", layout = layout.reingold.tilford)

## -----------------------------------------------------------------
gfs <- evalAllGenotypes(cbn1, order = FALSE, addwt = TRUE)

gfs[1:15, ]

## -----------------------------------------------------------------

c1 <- data.frame(parent = c(rep("Root", 4), "a", "b", "d", "e", "c"),
                 child = c("a", "b", "d", "e", "c", "c", rep("g", 3)),
                 s = c(0.01, 0.02, 0.03, 0.04, 0.1, 0.1, rep(0.2, 3)),
                 sh = c(rep(0, 4), c(-.1, -.2), c(-.05, -.06, -.07)),
                 typeDep = "MN")

try(fc1 <- allFitnessEffects(c1))


## -----------------------------------------------------------------
c1 <- data.frame(parent = c(rep("Root", 4), "a", "b", "d", "e", "c"),
                 child = c("a", "b", "d", "e", "c", "c", rep("g", 3)),
                 s = c(0.01, 0.02, 0.03, 0.04, 0.1, 0.1, rep(0.2, 3)),
                 sh = c(rep(0, 4), c(-.9, -.9), rep(-.95, 3)),
                 typeDep = "MN")

cbn2 <- allFitnessEffects(c1)


## -----------------------------------------------------------------
gcbn2 <- evalAllGenotypes(cbn2, order = FALSE)
gcbn2[1:10, ]

## -----------------------------------------------------------------
gcbn2o <- evalAllGenotypes(cbn2, order = TRUE, max = 1956)
gcbn2o[1:10, ]

## -----------------------------------------------------------------
all.equal(
        gcbn2[c(1:21, 22, 28, 41, 44, 56, 63 ) , "Fitness"],
        c(1.01, 1.02, 0.1, 1.03, 1.04, 0.05,
          1.01 * c(1.02, 0.1, 1.03, 1.04, 0.05),
          1.02 * c(0.10, 1.03, 1.04, 0.05),
          0.1 * c(1.03, 1.04, 0.05),
          1.03 * c(1.04, 0.05),
          1.04 * 0.05,
          1.01 * 1.02 * 1.1,
          1.01 * 0.1 * 0.05,
          1.03 * 1.04 * 0.05,
          1.01 * 1.02 * 1.1 * 0.05,
          1.03 * 1.04 * 1.2 * 0.1, ## notice this
          1.01 * 1.02 * 1.03 * 1.04 * 1.1 * 1.2
          ))

## -----------------------------------------------------------------
gcbn2[56, ] 
all.equal(gcbn2[56, "Fitness"], 1.03 * 1.04 * 1.2 * 0.10)

## -----------------------------------------------------------------

s1 <- data.frame(parent = c(rep("Root", 4), "a", "b", "d", "e", "c"),
                 child = c("a", "b", "d", "e", "c", "c", rep("g", 3)),
                 s = c(0.01, 0.02, 0.03, 0.04, 0.1, 0.1, rep(0.2, 3)),
                 sh = c(rep(0, 4), c(-.9, -.9), rep(-.95, 3)),
                 typeDep = "SM")

smn1 <- allFitnessEffects(s1)


## ---- fig.height=3------------------------------------------------
plot(smn1)

## -----------------------------------------------------------------
gsmn1 <- evalAllGenotypes(smn1, order = FALSE)


## -----------------------------------------------------------------
gcbn2[c(8, 12, 22), ]
gsmn1[c(8, 12, 22), ]

gcbn2[c(20:21, 28), ]
gsmn1[c(20:21, 28), ]

## -----------------------------------------------------------------

x1 <- data.frame(parent = c(rep("Root", 4), "a", "b", "d", "e", "c"),
                 child = c("a", "b", "d", "e", "c", "c", rep("g", 3)),
                 s = c(0.01, 0.02, 0.03, 0.04, 0.1, 0.1, rep(0.2, 3)),
                 sh = c(rep(0, 4), c(-.9, -.9), rep(-.95, 3)),
                 typeDep = "XMPN")

xor1 <- allFitnessEffects(x1)


## ---- fig.height=3------------------------------------------------
plot(xor1)

## -----------------------------------------------------------------

gxor1 <- evalAllGenotypes(xor1, order = FALSE)


## -----------------------------------------------------------------
gxor1[c(22, 41), ] 
c(1.01 * 1.02 * 0.1, 1.03 * 1.04 * 0.05)

## -----------------------------------------------------------------
gxor1[28, ] 
1.01 * 1.1 * 1.2

## -----------------------------------------------------------------
gxor1[44, ] 
1.01 * 1.02 * 0.1 * 1.2

## -----------------------------------------------------------------

p3 <- data.frame(
    parent = c(rep("Root", 4), "a", "b", "d", "e", "c", "f"),
    child = c("a", "b", "d", "e", "c", "c", "f", "f", "g", "g"),
    s = c(0.01, 0.02, 0.03, 0.04, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3),
    sh = c(rep(0, 4), c(-.9, -.9), c(-.95, -.95), c(-.99, -.99)),
    typeDep = c(rep("--", 4), 
                "XMPN", "XMPN", "MN", "MN", "SM", "SM"))
fp3 <- allFitnessEffects(p3)

## ---- fig.height=3------------------------------------------------
plot(fp3)

## ---- fig.height=6------------------------------------------------
plot(fp3, "igraph", layout.reingold.tilford)

## -----------------------------------------------------------------

gfp3 <- evalAllGenotypes(fp3, order = FALSE)


## -----------------------------------------------------------------
gfp3[c(9, 24, 29, 59, 60, 66, 119, 120, 126, 127), ]

c(1.01 * 1.1, 1.03 * .05, 1.01 * 1.02 * 0.1, 0.1 * 0.05 * 1.3,
  1.03 * 1.04 * 1.2, 1.01 * 1.02 * 0.1 * 0.05,
  0.1 * 1.03 * 1.04 * 1.2 * 1.3,
  1.01 * 1.02 * 0.1 * 1.03 * 1.04 * 1.2,
  1.02 * 1.1 * 1.03 * 1.04 * 1.2 * 1.3,
  1.01 * 1.02 * 1.03 * 1.04 * 0.1 * 1.2 * 1.3)


## -----------------------------------------------------------------
s <- 0.2
sboth <- (1/(1 + s)) - 1
m0 <- allFitnessEffects(data.frame(
    parent = c("Root", "Root", "a1", "a2"),
    child = c("a1", "a2", "b", "b"),
    s = s,
    sh = -1,
    typeDep = "OR"),
                        epistasis = c("a1:a2" = sboth))
evalAllGenotypes(m0, order = FALSE, addwt = TRUE)

## -----------------------------------------------------------------
s <- 0.2
m1 <- allFitnessEffects(data.frame(
    parent = c("Root", "A"),
    child = c("A", "B"),
    s = s,
    sh = -1,
    typeDep = "OR"),
                        geneToModule = c("Root" = "Root",
                                         "A" = "a1, a2",
                                         "B" = "b1"))
evalAllGenotypes(m1, order = FALSE, addwt = TRUE)

## -----------------------------------------------------------------
fnme <- allFitnessEffects(epistasis = c("A" = 0.1,
                                        "B" = 0.2),
                          geneToModule = c("A" = "a1, a2",
                                           "B" = "b1"))
evalAllGenotypes(fnme, order = FALSE, addwt = TRUE)

## -----------------------------------------------------------------
fnme2 <- allFitnessEffects(epistasis = c("A" = 0.1,
                                        "B" = 0.2),
                          geneToModule = c(
                              "Root" = "Root",
                              "A" = "a1, a2",
                              "B" = "b1"))
evalAllGenotypes(fnme, order = FALSE, addwt = TRUE)

## -----------------------------------------------------------------
p4 <- data.frame(
    parent = c(rep("Root", 4), "A", "B", "D", "E", "C", "F"),
    child = c("A", "B", "D", "E", "C", "C", "F", "F", "G", "G"),
    s = c(0.01, 0.02, 0.03, 0.04, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3),
    sh = c(rep(0, 4), c(-.9, -.9), c(-.95, -.95), c(-.99, -.99)),
    typeDep = c(rep("--", 4), 
                "XMPN", "XMPN", "MN", "MN", "SM", "SM"))

fp4m <- allFitnessEffects(
    p4,
    geneToModule = c("Root" = "Root", "A" = "a1",
                     "B" = "b1, b2", "C" = "c1",
                     "D" = "d1, d2", "E" = "e1",
                     "F" = "f1, f2", "G" = "g1"))

## ---- fig.height=3------------------------------------------------
plot(fp4m)

## ---- fig.height=3------------------------------------------------
plot(fp4m, expandModules = TRUE)

## ---- fig.height=6------------------------------------------------
plot(fp4m, "igraph", layout = layout.reingold.tilford, 
     expandModules = TRUE)


## -----------------------------------------------------------------
gfp4 <- evalAllGenotypes(fp4m, order = FALSE, max = 1024)

## -----------------------------------------------------------------
gfp4[c(12, 20, 21, 40, 41, 46, 50, 55, 64, 92,
       155, 157, 163, 372, 632, 828), ]

c(1.01 * 1.02, 1.02, 1.02 * 1.1, 0.1 * 1.3, 1.03, 
  1.03 * 1.04, 1.04 * 0.05, 0.05 * 1.3,  
  1.01 * 1.02 * 0.1, 1.02 * 1.1, 0.1 * 0.05 * 1.3,
  1.03 * 0.05, 1.03 * 0.05, 1.03 * 1.04 * 1.2, 1.03 * 1.04 * 1.2, 
  1.02 * 1.1 * 1.03 * 1.04 * 1.2 * 1.3)


## -----------------------------------------------------------------
o3 <- allFitnessEffects(orderEffects = c(
                            "F > D > M" = -0.3,
                            "D > F > M" = 0.4,
                            "D > M > F" = 0.2,
                            "D > M"     = 0.1,
                            "M > D"     = 0.5),
                        geneToModule =
                            c("M" = "m",
                              "F" = "f",
                              "D" = "d") )


(ag <- evalAllGenotypes(o3, addwt = TRUE, order = TRUE))

## -----------------------------------------------------------------

ofe1 <- allFitnessEffects(
    orderEffects = c("F > D" = -0.3, "D > F" = 0.4),
    geneToModule =
        c("F" = "f1, f2",
          "D" = "d1, d2") )

ag <- evalAllGenotypes(ofe1, order = TRUE)


## -----------------------------------------------------------------
ag[5:16,]

## -----------------------------------------------------------------
ag[c(17, 39, 19, 29), ]

## -----------------------------------------------------------------
ag[c(17, 39, 19, 29), "Fitness"] == c(1.4, 0.7, 1.4, 0.7)

## -----------------------------------------------------------------
ag[c(43, 44),]
ag[c(43, 44), "Fitness"] == c(1.4, 1.4)

## -----------------------------------------------------------------
all(ag[41:52, "Fitness"] == 1.4)

## -----------------------------------------------------------------
all(ag[53:64, "Fitness"] == 0.7)

## -----------------------------------------------------------------

ofe2 <- allFitnessEffects(
    orderEffects = c("F > D" = -0.3, "D > F" = 0.4),
    geneToModule =
        c("F" = "f1, f2, f3",
          "D" = "d1, d2") )
ag2 <- evalAllGenotypes(ofe2, max = 325, order = TRUE)


## -----------------------------------------------------------------
all(ag2[grep("^d.*f.*", ag2[, 1]), "Fitness"] == 1.4)
all(ag2[grep("^f.*d.*", ag2[, 1]), "Fitness"] == 0.7)
oe <- c(grep("^f.*d.*", ag2[, 1]), grep("^d.*f.*", ag2[, 1]))
all(ag2[-oe, "Fitness"] == 1)

## -----------------------------------------------------------------

foi1 <- allFitnessEffects(
    orderEffects = c("D>B" = -0.2, "B > D" = 0.3),
    noIntGenes = c("A" = 0.05, "C" = -.2, "E" = .1))


## -----------------------------------------------------------------
foi1[c("geneModule", "long.geneNoInt")]

## -----------------------------------------------------------------
agoi1 <- evalAllGenotypes(foi1,  max = 325, order = TRUE)
head(agoi1)

## -----------------------------------------------------------------
rn <- 1:nrow(agoi1)
names(rn) <- agoi1[, 1]

agoi1[rn[LETTERS[1:5]], "Fitness"] == c(1.05, 1, 0.8, 1, 1.1)


## -----------------------------------------------------------------
agoi1[grep("^A > [BD]$", names(rn)), "Fitness"] == 1.05
agoi1[grep("^C > [BD]$", names(rn)), "Fitness"] == 0.8
agoi1[grep("^E > [BD]$", names(rn)), "Fitness"] == 1.1
agoi1[grep("^[BD] > A$", names(rn)), "Fitness"] == 1.05
agoi1[grep("^[BD] > C$", names(rn)), "Fitness"] == 0.8
agoi1[grep("^[BD] > E$", names(rn)), "Fitness"] == 1.1

## -----------------------------------------------------------------
all.equal(agoi1[230:253, "Fitness"] ,
          rep((1 - 0.2) * 1.05 * 0.8 * 1.1, 24))

## -----------------------------------------------------------------
sa <- 0.2
sb <- 0.3
sab <- 0.7

e2 <- allFitnessEffects(epistasis =
                            c("A: -B" = sa,
                              "-A:B" = sb,
                              "A : B" = sab))
evalAllGenotypes(e2, order = FALSE, addwt = TRUE)


## -----------------------------------------------------------------
s2 <- ((1 + sab)/((1 + sa) * (1 + sb))) - 1

e3 <- allFitnessEffects(epistasis =
                            c("A" = sa,
                              "B" = sb,
                              "A : B" = s2))
evalAllGenotypes(e3, order = FALSE, addwt = TRUE)


## -----------------------------------------------------------------
sa <- 0.1
sb <- 0.15
sc <- 0.2
sab <- 0.3
sbc <- -0.25
sabc <- 0.4

sac <- (1 + sa) * (1 + sc) - 1

E3A <- allFitnessEffects(epistasis =
                            c("A:-B:-C" = sa,
                              "-A:B:-C" = sb,
                              "-A:-B:C" = sc,
                              "A:B:-C" = sab,
                              "-A:B:C" = sbc,
                              "A:-B:C" = sac,
                              "A : B : C" = sabc)
                                                )

evalAllGenotypes(E3A, order = FALSE, addwt = FALSE)


## -----------------------------------------------------------------

sa <- 0.1
sb <- 0.15
sc <- 0.2
sab <- 0.3
Sab <- ( (1 + sab)/((1 + sa) * (1 + sb))) - 1
Sbc <- ( (1 + sbc)/((1 + sb) * (1 + sc))) - 1
Sabc <- ( (1 + sabc)/
          ( (1 + sa) * (1 + sb) * (1 + sc) *
            (1 + Sab) * (1 + Sbc) ) ) - 1

E3B <- allFitnessEffects(epistasis =
                             c("A" = sa,
                               "B" = sb,
                               "C" = sc,
                               "A:B" = Sab,
                               "B:C" = Sbc,
                               ## "A:C" = sac, ## not needed now
                               "A : B : C" = Sabc)
                                                )
evalAllGenotypes(E3B, order = FALSE, addwt = FALSE)


## -----------------------------------------------------------------
all(evalAllGenotypes(E3A, order = FALSE, addwt = FALSE) == 
    evalAllGenotypes(E3B, order = FALSE, addwt = FALSE))

## -----------------------------------------------------------------

sa <- 0.2
sb <- 0.3
sab <- 0.7

em <- allFitnessEffects(epistasis =
                            c("A: -B" = sa,
                              "-A:B" = sb,
                              "A : B" = sab),
                        geneToModule = c("A" = "a1, a2",
                                         "B" = "b1, b2"))
evalAllGenotypes(em, order = FALSE, addwt = TRUE)

## -----------------------------------------------------------------
s2 <- ((1 + sab)/((1 + sa) * (1 + sb))) - 1

em2 <- allFitnessEffects(epistasis =
                            c("A" = sa,
                              "B" = sb,
                              "A : B" = s2),
                         geneToModule = c("A" = "a1, a2",
                                         "B" = "b1, b2")
                         )
evalAllGenotypes(em2, order = FALSE, addwt = TRUE)


## -----------------------------------------------------------------

fnme <- allFitnessEffects(epistasis = c("A" = 0.1,
                                        "B" = 0.2),
                          geneToModule = c("A" = "a1, a2",
                                           "B" = "b1, b2, b3"))

evalAllGenotypes(fnme, order = FALSE, addwt = TRUE)


## -----------------------------------------------------------------
fnme <- allFitnessEffects(epistasis = c("A" = 0.1,
                                        "B" = 0.2,
                                        "A : B" = 0.0),
                          geneToModule = c("A" = "a1, a2",
                                           "B" = "b1, b2, b3"))

evalAllGenotypes(fnme, order = FALSE, addwt = TRUE)


## -----------------------------------------------------------------
s <- 0.2
sv <- allFitnessEffects(epistasis = c("-A : B" = -1,
                                      "A : -B" = -1,
                                      "A:B" = s))

## -----------------------------------------------------------------
(asv <- evalAllGenotypes(sv, order = FALSE, addwt = TRUE))

## -----------------------------------------------------------------
evalAllGenotypes(sv, order = TRUE, addwt = TRUE)

## -----------------------------------------------------------------
sa <- -0.1
sb <- -0.2
sab <- 0.25
sv2 <- allFitnessEffects(epistasis = c("-A : B" = sb,
                             "A : -B" = sa,
                             "A:B" = sab),
                         geneToModule = c(
                             "A" = "a1, a2",
                             "B" = "b"))
evalAllGenotypes(sv2, order = FALSE, addwt = TRUE)

## -----------------------------------------------------------------
evalAllGenotypes(sv2, order = TRUE, addwt = TRUE)

## -----------------------------------------------------------------
sa <- 0.1
sb <- 0.2
sab <- -0.8
sm1 <- allFitnessEffects(epistasis = c("-A : B" = sb,
                             "A : -B" = sa,
                             "A:B" = sab))
evalAllGenotypes(sm1, order = FALSE, addwt = TRUE)


## -----------------------------------------------------------------
evalAllGenotypes(sm1, order = TRUE, addwt = TRUE)

## -----------------------------------------------------------------
evalAllGenotypes(sv, order = FALSE, addwt = TRUE, model = "Bozic")

## -----------------------------------------------------------------
s <- 0.2
svB <- allFitnessEffects(epistasis = c("-A : B" = -Inf,
                                      "A : -B" = -Inf,
                                      "A:B" = s))
evalAllGenotypes(svB, order = FALSE, addwt = TRUE, model = "Bozic")

## -----------------------------------------------------------------

s <- 1
svB1 <- allFitnessEffects(epistasis = c("-A : B" = -Inf,
                                       "A : -B" = -Inf,
                                       "A:B" = s))

evalAllGenotypes(svB1, order = FALSE, addwt = TRUE, model = "Bozic")


s <- 3
svB3 <- allFitnessEffects(epistasis = c("-A : B" = -Inf,
                                       "A : -B" = -Inf,
                                       "A:B" = s))

evalAllGenotypes(svB3, order = FALSE, addwt = TRUE, model = "Bozic")



## -----------------------------------------------------------------
i1 <- allFitnessEffects(noIntGenes = c(1, 0.5))
evalAllGenotypes(i1, order = FALSE, addwt = TRUE, 
                 model = "Bozic")
				 
i1_b <- oncoSimulIndiv(i1, model = "Bozic")


## -----------------------------------------------------------------
evalAllGenotypes(i1, order = FALSE, addwt = TRUE, 
                 model = "Exp")
i1_e <- oncoSimulIndiv(i1, model = "Exp")
summary(i1_e)

## -----------------------------------------------------------------
p4 <- data.frame(
    parent = c(rep("Root", 4), "A", "B", "D", "E", "C", "F"),
    child = c("A", "B", "D", "E", "C", "C", "F", "F", "G", "G"),
    s = c(0.01, 0.02, 0.03, 0.04, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3),
    sh = c(rep(0, 4), c(-.9, -.9), c(-.95, -.95), c(-.99, -.99)),
    typeDep = c(rep("--", 4), 
                "XMPN", "XMPN", "MN", "MN", "SM", "SM"))

oe <- c("C > F" = -0.1, "H > I" = 0.12)
sm <- c("I:J"  = -1)
sv <- c("-K:M" = -.5, "K:-M" = -.5)
epist <- c(sm, sv)

modules <- c("Root" = "Root", "A" = "a1",
             "B" = "b1, b2", "C" = "c1",
             "D" = "d1, d2", "E" = "e1",
             "F" = "f1, f2", "G" = "g1",
             "H" = "h1, h2", "I" = "i1",
             "J" = "j1, j2", "K" = "k1, k2", "M" = "m1")

set.seed(1) ## for reproducibility
noint <- rexp(5, 10)
names(noint) <- paste0("n", 1:5)

fea <- allFitnessEffects(rT = p4, epistasis = epist,
                         orderEffects = oe,
                         noIntGenes = noint,
                         geneToModule = modules)

## ---- fig.height=5.5----------------------------------------------
plot(fea)

## ---- fig.height=5.5----------------------------------------------
plot(fea, "igraph")

## ---- fig.height=5.5----------------------------------------------
plot(fea, expandModules = TRUE)

## ---- fig.height=6.5----------------------------------------------
plot(fea, "igraph", expandModules = TRUE)

## -----------------------------------------------------------------

evalGenotype("k1 > i1 > h2", fea) ## 0.5
evalGenotype("k1 > h1 > i1", fea) ## 0.5 * 1.12

evalGenotype("k2 > m1 > h1 > i1", fea) ## 1.12

evalGenotype("k2 > m1 > h1 > i1 > c1 > n3 > f2", fea) 
## 1.12 * 0.1 * (1 + noint[3]) * 0.05 * 0.9


## -----------------------------------------------------------------

randomGenotype <- function(fe, ns = NULL) {
    gn <- setdiff(c(fe$geneModule$Gene,
                    fe$long.geneNoInt$Gene), "Root")
    if(is.null(ns)) ns <- sample(length(gn), 1)
    return(paste(sample(gn, ns), collapse = " > "))
}

set.seed(2) ## for reproducibility

evalGenotype(randomGenotype(fea), fea, echo = TRUE, verbose = TRUE)
## Genotype:  k2 > i1 > c1 > n1 > m1
##  Individual s terms are : 0.0755182 -0.9
##  Fitness:  0.107552 
evalGenotype(randomGenotype(fea), fea, echo = TRUE, verbose = TRUE)
## Genotype:  n2 > h1 > h2
##  Individual s terms are : 0.118164
##  Fitness:  1.11816 
evalGenotype(randomGenotype(fea), fea, echo = TRUE, verbose = TRUE)
## Genotype:  d2 > k2 > c1 > f2 > n4 > m1 > n3 > f1 > b1 > g1 > n5 > h1 > j2
##  Individual s terms are : 0.0145707 0.0139795 0.0436069 0.02 0.1 0.03 -0.95 0.3 -0.1
##  Fitness:  0.0725829 
evalGenotype(randomGenotype(fea), fea, echo = TRUE, verbose = TRUE)
## Genotype:  h2 > c1 > f1 > n2 > b2 > a1 > n1 > i1
##  Individual s terms are : 0.0755182 0.118164 0.01 0.02 -0.9 -0.95 -0.1 0.12
##  Fitness:  0.00624418 
evalGenotype(randomGenotype(fea), fea, echo = TRUE, verbose = TRUE)
## Genotype:  h2 > j1 > m1 > d2 > i1 > b2 > k2 > d1 > b1 > n3 > n1 > g1 > h1 > c1 > k1 > e1 > a1 > f1 > n5 > f2
##  Individual s terms are : 0.0755182 0.0145707 0.0436069 0.01 0.02 -0.9 0.03 0.04 0.2 0.3 -1 -0.1 0.12
##  Fitness:  0 
evalGenotype(randomGenotype(fea), fea, echo = TRUE, verbose = TRUE)
## Genotype:  n1 > m1 > n3 > i1 > j1 > n5 > k1
##  Individual s terms are : 0.0755182 0.0145707 0.0436069 -1
##  Fitness:  0 
evalGenotype(randomGenotype(fea), fea, echo = TRUE, verbose = TRUE)
## Genotype:  d2 > n1 > g1 > f1 > f2 > c1 > b1 > d1 > k1 > a1 > b2 > i1 > n4 > h2 > n2
##  Individual s terms are : 0.0755182 0.118164 0.0139795 0.01 0.02 -0.9 0.03 -0.95 0.3 -0.5
##  Fitness:  0.00420528 
evalGenotype(randomGenotype(fea), fea, echo = TRUE, verbose = TRUE)
## Genotype:  j1 > f1 > j2 > a1 > n4 > c1 > n3 > k1 > d1 > h1
##  Individual s terms are : 0.0145707 0.0139795 0.01 0.1 0.03 -0.95 -0.5
##  Fitness:  0.0294308 
evalGenotype(randomGenotype(fea), fea, echo = TRUE, verbose = TRUE)
## Genotype:  n5 > f2 > f1 > h2 > n4 > c1 > n3 > b1
##  Individual s terms are : 0.0145707 0.0139795 0.0436069 0.02 0.1 -0.95
##  Fitness:  0.0602298 
evalGenotype(randomGenotype(fea), fea, echo = TRUE, verbose = TRUE)
## Genotype:  h1 > d1 > f2
##  Individual s terms are : 0.03 -0.95
##  Fitness:  0.0515 



## -----------------------------------------------------------------

muvar2 <- c("U" = 1e-6, "z" = 5e-5, "e" = 5e-4, "m" = 5e-3,
            "D" = 1e-4)
ni1 <- rep(0, 5)
names(ni1) <- names(muvar2) ## We use the same names, of course
fe1 <- allFitnessEffects(noIntGenes = ni1)
bb <- oncoSimulIndiv(fe1, 
                     mu = muvar2, onlyCancer = FALSE,
                     initSize = 1e5,
                     finalTime = 25,
                     seed =NULL)


## -----------------------------------------------------------------
fe2 <- allFitnessEffects(noIntGenes =
                         c(a1 = 0.1, a2 = 0.2,
                           b1 = 0.01, b2 = 0.3, b3 = 0.2,
                           c1 = 0.3, c2 = -0.2))

fm2 <- allMutatorEffects(epistasis = c("A" = 5,
                                       "B" = 10,
                                       "C" = 3),
                         geneToModule = c("A" = "a1, a2",
                                          "B" = "b1, b2, b3",
                                          "C" = "c1, c2"))

## Show the fitness effect of a specific genotype
evalGenotype("a1, c2", fe2, verbose = TRUE)

## Show the mutator effect of a specific genotype
evalGenotypeMut("a1, c2", fm2, verbose = TRUE)

## Fitness and mutator of a specific genotype
evalGenotypeFitAndMut("a1, c2", fe2, fm2, verbose = TRUE)

## ---- eval=FALSE--------------------------------------------------
#  ## Show only all the fitness effects
#  evalAllGenotypes(fe2, order = FALSE)
#  
#  ## Show only all mutator effects
#  evalAllGenotypesMut(fm2)
#  
#  ## Show all fitness and mutator
#  evalAllGenotypesFitAndMut(fe2, fm2, order = FALSE)

## -----------------------------------------------------------------

set.seed(1) ## for reproducibility
## 17 genes, 7 with no direct fitness effects
ni <- c(rep(0, 7), runif(10, min = -0.01, max = 0.1))
names(ni) <- c("a1", "a2", "b1", "b2", "b3", "c1", "c2",
               paste0("g", 1:10))

fe3 <- allFitnessEffects(noIntGenes = ni)

fm3 <- allMutatorEffects(epistasis = c("A" = 5,
                                       "B" = 10,
                                       "C" = 3,
                                       "A:C" = 70),
                         geneToModule = c("A" = "a1, a2",
                                          "B" = "b1, b2, b3",
                                          "C" = "c1, c2"))

## -----------------------------------------------------------------
## These only affect mutation, not fitness
evalGenotypeFitAndMut("a1, a2", fe3, fm3, verbose = TRUE)
evalGenotypeFitAndMut("a1, b3", fe3, fm3, verbose = TRUE)

## These only affect fitness: the mutator multiplier is 1
evalGenotypeFitAndMut("g1", fe3, fm3, verbose = TRUE)                      
evalGenotypeFitAndMut("g3, g9", fe3, fm3, verbose = TRUE)

## These affect both
evalGenotypeFitAndMut("g3, g9, a2, b3", fe3, fm3, verbose = TRUE)

## -----------------------------------------------------------------
set.seed(1) ## so that it is easy to reproduce
mue1 <- oncoSimulIndiv(fe3, muEF = fm3, 
                       mu = 1e-6,
                       initSize = 1e5,
                       model = "McFL",
                       detectionSize = 5e6,
                       finalTime = 500,
                       onlyCancer = FALSE)

## ---- eval=FALSE--------------------------------------------------
#  ## We do not show this in the vignette to avoid cluttering it
#  ## with output
#  mue1

## ---- eval=FALSE--------------------------------------------------
#  
#  set.seed(1) ## for reproducibility
#  ## 17 genes, 7 with no direct fitness effects
#  ni <- c(rep(0, 7), runif(10, min = -0.01, max = 0.1))
#  names(ni) <- c("a1", "a2", "b1", "b2", "b3", "c1", "c2",
#                 paste0("g", 1:10))
#  
#  ## Next is for nicer figure labeling.
#  ## Consider as drivers genes with s >0
#  gp <- which(ni > 0)
#  
#  fe3 <- allFitnessEffects(noIntGenes = ni,
#                           drvNames = names(ni)[gp])
#  
#  
#  set.seed(12)
#  mue1 <- oncoSimulIndiv(fe3, muEF = fm3,
#                         mu = 1e-6,
#                         initSize = 1e5,
#                         model = "McFL",
#                         detectionSize = 5e6,
#                         finalTime = 270,
#                         keepPhylog = TRUE,
#                         onlyCancer = FALSE)
#  mue1
#  ## If you decrease N even further it gets even more cluttered
#  op <- par(ask = TRUE)
#  plotClonePhylog(mue1, N = 10, timeEvents = TRUE)
#  plot(mue1, plotDrivers = TRUE, addtot = TRUE,
#       plotDiversity = TRUE)
#  	
#  ## The stacked plot is slow; be patient
#  ## Most clones have tiny population sizes, and their lines
#  ## are piled on top of each other
#  plot(mue1, addtot = TRUE,
#       plotDiversity = TRUE, type = "stacked")
#  par(op)

## -----------------------------------------------------------------

d1 <- -0.05 ## single mutant fitness 0.95
d2 <- -0.08 ## double mutant fitness 0.92
d3 <- 0.2   ## triple mutant fitness 1.2
s2 <- ((1 + d2)/(1 + d1)^2) - 1
s3 <- ( (1 + d3)/((1 + d1)^3 * (1 + s2)^3) ) - 1

wb <- allFitnessEffects(
    epistasis = c(
        "A" = d1,
        "B" = d1,
        "C" = d1,
        "A:B" = s2,
        "A:C" = s2,
        "B:C" = s2,
        "A:B:C" = s3))

## ---- fig.width=6.5, fig.height=5---------------------------------
plotFitnessLandscape(wb, use_ggrepel = TRUE) 

## ---- fig.width=6.5, fig.height=5---------------------------------
(ewb <- evalAllGenotypes(wb, order = FALSE))
plot(ewb, use_ggrepel = TRUE) 


## ----wasthis111, fig.width=9.5, fig.height=9.5--------------------
par(cex = 0.7)
pancr <- allFitnessEffects(
    data.frame(parent = c("Root", rep("KRAS", 4), 
                   "SMAD4", "CDNK2A", 
                   "TP53", "TP53", "MLL3"),
               child = c("KRAS","SMAD4", "CDNK2A", 
                   "TP53", "MLL3",
                   rep("PXDN", 3), rep("TGFBR2", 2)),
               s = 0.1,
               sh = -0.9,
               typeDep = "MN"))
plot(evalAllGenotypes(pancr, order = FALSE), use_ggrepel = TRUE)


## -----------------------------------------------------------------
K <- 4
sp <- 1e-5
sdp <- 0.015
sdplus <- 0.05
sdminus <- 0.1
cnt <- (1 + sdplus)/(1 + sdminus)
prod_cnt <- cnt - 1
bauer <- data.frame(parent = c("Root", rep("D", K)),
                    child = c("D", paste0("s", 1:K)),
                    s = c(prod_cnt, rep(sdp, K)),
                    sh = c(0, rep(sp, K)),
                    typeDep = "MN")
fbauer <- allFitnessEffects(bauer)
(b1 <- evalAllGenotypes(fbauer, order = FALSE, addwt = TRUE))


## ---- fig.height=3------------------------------------------------
plot(fbauer)

## ---- fig.width=6, fig.height=6-----------------------------------
plot(b1, use_ggrepel = TRUE)

## -----------------------------------------------------------------
m1 <- expand.grid(D = c(1, 0), s1 = c(1, 0), s2 = c(1, 0),
                  s3 = c(1, 0), s4 = c(1, 0))

fitness_bauer <- function(D, s1, s2, s3, s4, 
                          sp = 1e-5, sdp = 0.015, sdplus = 0.05,
                          sdminus = 0.1) {
    if(!D) {
        b <- 0.5 * ( (1 + sp)^(sum(c(s1, s2, s3, s4))))
    } else {
        b <- 0.5 * 
            (((1 + sdplus)/(1 + sdminus)  *
              (1 + sdp)^(sum(c(s1, s2, s3, s4)))))
    }
    fitness <- b - (1 - b)
    our_fitness <- 1 + fitness ## prevent negative fitness and
    ## make wt fitness = 1
    return(our_fitness)
}

m1$Fitness <- 
    apply(m1, 1, function(x) do.call(fitness_bauer, as.list(x)))

bauer2 <- allFitnessEffects(genotFitness = m1)

## -----------------------------------------------------------------
evalAllGenotypes(bauer2, order = FALSE, addwt = TRUE)

## ---- echo=FALSE, fig.height=4, fig.width=4-----------------------

df1 <- data.frame(x = c(1, 1.2, 1.4), f = c(1, 1.2, 1.2),
                 names = c("wt", "A", "B"))
plot(df1[, 2] ~ df1[, 1], axes = TRUE, xlab= "", 
     ylab = "Fitness", xaxt = "n", yaxt = "n", ylim = c(1, 1.21))
segments(1, 1, 1.2, 1.2)
segments(1, 1, 1.4, 1.2)
text(1, 1, "wt", pos = 4)
text(1.2, 1.2, "A", pos = 2)
text(1.4, 1.2, "B", pos = 2)
## axis(1,  tick = FALSE, labels = FALSE)
## axis(2,  tick = FALSE, labels = FALSE)

## -----------------------------------------------------------------
s <- 0.1 ## or whatever number
m1a1 <- allFitnessEffects(data.frame(parent = c("Root", "Root"),
                                     child = c("A", "B"),
                                     s = s,
                                     sh = 0,
                                     typeDep = "MN"))
evalAllGenotypes(m1a1, order = FALSE, addwt = TRUE)

## -----------------------------------------------------------------
s <- 0.1
sab <- 0.3
m1a2 <- allFitnessEffects(epistasis = c("A:-B" = s,
                                        "-A:B" = s,
                                        "A:B" = sab))
evalAllGenotypes(m1a2, order = FALSE, addwt = TRUE)

## -----------------------------------------------------------------
sab3 <- ((1 + sab)/((1 + s)^2)) - 1
m1a3 <- allFitnessEffects(data.frame(parent = c("Root", "Root"),
                                     child = c("A", "B"),
                                     s = s,
                                     sh = 0,
                                     typeDep = "MN"),
                          epistasis = c("A:B" = sab3))
evalAllGenotypes(m1a3, order = FALSE, addwt = TRUE)

## -----------------------------------------------------------------
all.equal(evalAllGenotypes(m1a2, order = FALSE, addwt = TRUE),
          evalAllGenotypes(m1a3, order = FALSE, addwt = TRUE))

## ---- echo=FALSE, fig.width=4, fig.height=4-----------------------

df1 <- data.frame(x = c(1, 1.2, 1.2, 1.4), f = c(1, 0.4, 0.3, 1.3),
                 names = c("wt", "A", "B", "AB"))
plot(df1[, 2] ~ df1[, 1], axes = TRUE, xlab= "", ylab = "Fitness",
     xaxt = "n", yaxt = "n", ylim = c(0.29, 1.32))
segments(1, 1, 1.2, 0.4)
segments(1, 1, 1.2, 0.3)
segments(1.2, 0.4, 1.4, 1.3)
segments(1.2, 0.3, 1.4, 1.3)
text(x = df1[, 1], y = df1[, 2], labels = df1[, "names"], pos = c(4, 2, 2, 2))
## text(1, 1, "wt", pos = 4)
## text(1.2, 1.2, "A", pos = 2)
## text(1.4, 1.2, "B", pos = 2)

## -----------------------------------------------------------------
sa <- -0.6
sb <- -0.7
sab <- 0.3
m1b1 <- allFitnessEffects(epistasis = c("A:-B" = sa,
                                        "-A:B" = sb,
                                        "A:B" = sab))
evalAllGenotypes(m1b1, order = FALSE, addwt = TRUE)

## ---- echo=FALSE, fig.width=4, fig.height=4-----------------------

df1 <- data.frame(x = c(1, 1.2, 1.2, 1.4), f = c(1, 1.2, 0.7, 1.5),
                 names = c("wt", "A", "B", "AB"))
plot(df1[, 2] ~ df1[, 1], axes = TRUE, xlab = "", ylab = "Fitness",
     xaxt = "n", yaxt = "n", ylim = c(0.69, 1.53))
segments(1, 1, 1.2, 1.2)
segments(1, 1, 1.2, 0.7)
segments(1.2, 1.2, 1.4, 1.5)
segments(1.2, 0.7, 1.4, 1.5)
text(x = df1[, 1], y = df1[, 2], labels = df1[, "names"], pos = c(3, 3, 3, 2))
## text(1, 1, "wt", pos = 4)
## text(1.2, 1.2, "A", pos = 2)
## text(1.4, 1.2, "B", pos = 2)


## -----------------------------------------------------------------
sa <- 0.2
sb <- -0.3
sab <- 0.5
m1c1 <- allFitnessEffects(epistasis = c("A:-B" = sa,
                                        "-A:B" = sb,
                                        "A:B" = sab))
evalAllGenotypes(m1c1, order = FALSE, addwt = TRUE)

## ---- echo=FALSE, fig.width=4.5, fig.height=3.5-------------------

df1 <- data.frame(x = c(1, 2, 3, 4), f = c(1.1, 1, 0.95, 1.2),
                 names = c("u", "wt", "i", "v"))
plot(df1[, 2] ~ df1[, 1], axes = FALSE, xlab = "", ylab = "")
par(las = 1)
axis(2)
axis(1, at = c(1, 2, 3, 4), labels = df1[, "names"], ylab = "")
box()
arrows(c(2, 2, 3), c(1, 1, 0.95),
       c(1, 3, 4), c(1.1, 0.95, 1.2))
## text(1, 1, "wt", pos = 4)
## text(1.2, 1.2, "A", pos = 2)
## text(1.4, 1.2, "B", pos = 2)

## -----------------------------------------------------------------
su <- 0.1
si <- -0.05
fvi <- 1.2 ## the fitness of the vi mutant
sv <- (fvi/(1 + si)) - 1
sui <- suv <- -1
od <- allFitnessEffects(
    data.frame(parent = c("Root", "Root", "i"),
               child = c("u", "i", "v"),
               s = c(su, si, sv),
               sh = -1,
               typeDep = "MN"),
    epistasis = c(
        "u:i" = sui,
        "u:v" = suv))

## ---- fig.width=3, fig.height=3-----------------------------------
plot(od)

## -----------------------------------------------------------------
evalAllGenotypes(od, order = FALSE, addwt = TRUE)

## -----------------------------------------------------------------

u <- 0.2; i <- -0.02; vi <- 0.6; ui <- uv <- -Inf
od2 <- allFitnessEffects(
    epistasis = c("u" = u,  "u:i" = ui,
                  "u:v" = uv, "i" = i,
                  "v:-i" = -Inf, "v:i" = vi))
evalAllGenotypes(od, addwt = TRUE)


## ---- echo=FALSE, fig.width=4, fig.height=3-----------------------

df1 <- data.frame(x = c(1, 2, 3), f = c(1, 0.95, 1.2),
                 names = c("wt", "1", "2"))
plot(df1[, 2] ~ df1[, 1], axes = FALSE, xlab = "", ylab = "")
par(las = 1)
axis(2)
axis(1, at = c(1, 2, 3), labels = df1[, "names"], ylab = "")
box()
segments(c(1, 2), c(1, 0.95),
       c(2, 3), c(0.95, 1.2))
## text(1, 1, "wt", pos = 4)
## text(1.2, 1.2, "A", pos = 2)
## text(1.4, 1.2, "B", pos = 2)



## ---- echo=FALSE, fig.width=4, fig.height=3-----------------------

df1 <- data.frame(x = c(1, 2, 3, 4), f = c(1, 0.95, 0.92, 1.2),
                 names = c("wt", "1", "2", "3"))
plot(df1[, 2] ~ df1[, 1], axes = FALSE, xlab = "", ylab = "")
par(las = 1)
axis(2)
axis(1, at = c(1, 2, 3, 4), labels = df1[, "names"], ylab = "")
box()
segments(c(1, 2, 3), c(1, 0.95, 0.92),
       c(2, 3, 4), c(0.95, 0.92, 1.2))
## text(1, 1, "wt", pos = 4)
## text(1.2, 1.2, "A", pos = 2)
## text(1.4, 1.2, "B", pos = 2)

## -----------------------------------------------------------------

d1 <- -0.05 ## single mutant fitness 0.95
d2 <- -0.08 ## double mutant fitness 0.92
d3 <- 0.2   ## triple mutant fitness 1.2

s2 <- ((1 + d2)/(1 + d1)^2) - 1
s3 <- ( (1 + d3)/((1 + d1)^3 * (1 + s2)^3) ) - 1

w <- allFitnessEffects(
    data.frame(parent = c("Root", "Root", "Root"),
               child = c("A", "B", "C"),
               s = d1,
               sh = -1,
               typeDep = "MN"),
    epistasis = c(
        "A:B" = s2,
        "A:C" = s2,
        "B:C" = s2,
        "A:B:C" = s3))

## ---- fig.width=4, fig.height=4-----------------------------------
plot(w)

## -----------------------------------------------------------------
evalAllGenotypes(w, order = FALSE, addwt = TRUE)

## -----------------------------------------------------------------
wb <- allFitnessEffects(
    epistasis = c(
        "A" = d1,
        "B" = d1,
        "C" = d1,
        "A:B" = s2,
        "A:C" = s2,
        "B:C" = s2,
        "A:B:C" = s3))

evalAllGenotypes(wb, order = FALSE, addwt = TRUE)

## ---- , fig.width=3, fig.height=3---------------------------------
plot(wb)

## -----------------------------------------------------------------
wc <- allFitnessEffects(
    epistasis = c(
        "A:-B:-C" = d1,
        "B:-C:-A" = d1,
        "C:-A:-B" = d1,
        "A:B:-C" = d2,
        "A:C:-B" = d2,
        "B:C:-A" = d2,
        "A:B:C" = d3))
evalAllGenotypes(wc, order = FALSE, addwt = TRUE)

## ---- fig.width=4-------------------------------------------------

pancr <- allFitnessEffects(
    data.frame(parent = c("Root", rep("KRAS", 4), 
                   "SMAD4", "CDNK2A", 
                   "TP53", "TP53", "MLL3"),
               child = c("KRAS","SMAD4", "CDNK2A", 
                   "TP53", "MLL3",
                   rep("PXDN", 3), rep("TGFBR2", 2)),
               s = 0.1,
               sh = -0.9,
               typeDep = "MN"))

plot(pancr)

## ---- fig.height = 4----------------------------------------------
rv1 <- allFitnessEffects(data.frame(parent = c("Root", "A", "KRAS"),
                                    child = c("A", "KRAS", "FBXW7"),
                                    s = 0.1,
                                    sh = -0.01,
                                    typeDep = "MN"),
                         geneToModule = c("Root" = "Root",
                             "A" = "EVC2, PIK3CA, TP53",
                             "KRAS" = "KRAS",
                             "FBXW7" = "FBXW7"))

plot(rv1, expandModules = TRUE, autofit = TRUE)


## ---- fig.height=6------------------------------------------------
rv2 <- allFitnessEffects(
    data.frame(parent = c("Root", "1", "2", "3", "4"),
               child = c("1", "2", "3", "4", "ELF3"),
               s = 0.1,
               sh = -0.01,
               typeDep = "MN"),
    geneToModule = c("Root" = "Root",
                     "1" = "APC, FBXW7",
                     "2" = "ATM, FAM123B, PIK3CA, TP53",
                     "3" = "BRAF, KRAS, NRAS",
                     "4" = "SMAD2, SMAD4, SOX9",
                     "ELF3" = "ELF3"))

plot(rv2, expandModules = TRUE,   autofit = TRUE)

## ----prbau003, fig.height=6---------------------------------------

o3init <- allFitnessEffects(orderEffects = c(
                            "M > D > F" = 0.99,
                            "D > M > F" = 0.2,
                            "D > M"     = 0.1,
                            "M > D"     = 0.9),
                        noIntGenes = c("u" = 0.01, 
                                       "v" = 0.01,
                                       "w" = 0.001,
                                       "x" = 0.0001,
                                       "y" = -0.0001,
                                       "z" = -0.001),
                        geneToModule =
                            c("M" = "m",
                              "F" = "f",
                              "D" = "d") )

oneI <- oncoSimulIndiv(o3init, model = "McFL",
                       mu = 5e-5, finalTime = 500,
                       detectionDrivers = 3,
                       onlyCancer = FALSE,
                       initSize = 1000,
                       keepPhylog = TRUE,
                       initMutant = c("m > u > d")
                       )
plotClonePhylog(oneI, N = 0)

## ----prbau003bb, fig.height=6-------------------------------------
## Note we also disable the stopping stochastically as a function of size
## to allow the population to grow large and generate may different
## clones.
ospI <- oncoSimulPop(2, 
                    o3init, model = "Exp",
                    mu = 5e-5, finalTime = 500,
                    detectionDrivers = 3,
                    onlyCancer = TRUE,
                    initSize = 10,
                    keepPhylog = TRUE,
                    initMutant = c("d > m > z"),
                    mc.cores = 2
                    )
op <- par(mar = rep(0, 4), mfrow = c(1, 2))
plotClonePhylog(ospI[[1]])
plotClonePhylog(ospI[[2]])
par(op)

ossI <- oncoSimulSample(2, 
                        o3init, model = "Exp",
                        mu = 5e-5, finalTime = 500,
                        detectionDrivers = 2,
                        onlyCancer = TRUE,
                        initSize = 10,
                        initMutant = c("z > d"),
                        ## check presence of initMutant:
                        thresholdWhole = 1 
                    )

## No phylogeny is kept with oncoSimulSample, but look at the 
## OcurringDrivers and the sample
ossI$popSample
ossI$popSummary[, "OccurringDrivers", drop = FALSE]

## ----prbaux002, eval=FALSE----------------------------------------
#  gi2 <- rep(0, 5)
#  names(gi2) <- letters[1:5]
#  oi2 <- allFitnessEffects(noIntGenes = gi2)
#  s5 <- oncoSimulPop(200,
#                     oi2,
#                     model = "McFL",
#                     initSize = 1000,
#                     detectionProb = c(p2 = 0.1,
#                                       n2 = 2000,
#                                       PDBaseline = 1000,
#                                       checkSizePEvery = 2),
#                     detectionSize = NA,
#                     finalTime = NA,
#                     keepEvery = NA,
#                     detectionDrivers = NA)
#  s5
#  hist(unlist(lapply(s5, function(x) x$FinalTime)))

## -----------------------------------------------------------------
u <- 0.2; i <- -0.02; vi <- 0.6; ui <- uv <- -Inf
od2 <- allFitnessEffects(
    epistasis = c("u" = u,  "u:i" = ui,
                  "u:v" = uv, "i" = i,
                  "v:-i" = -Inf, "v:i" = vi))

## ----simul-ochs---------------------------------------------------
initS <- 20
## We use only a small number of repetitions for the sake
## of speed.
od100 <- oncoSimulPop(10, od2,
                      fixation = c("u", "v, i"),
                      model = "McFL",
                      mu = 1e-4,
                      detectionDrivers = NA,
                      finalTime = NA,
                      detectionSize = NA,
                      detectionProb = NA,
                      onlyCancer = TRUE,
                      initSize = initS, 
                      mc.cores = 2)

## ----ochs-freq-genots---------------------------------------------
sampledGenotypes(samplePop(od100))                      

## ----sum-simul-ochs-----------------------------------------------
head(summary(od100)[, c(1:3, 8:9)])

## ----fixationG1---------------------------------------------------
## Create a simple fitness landscape
rl1 <- matrix(0, ncol = 6, nrow = 9)
colnames(rl1) <- c(LETTERS[1:5], "Fitness")
rl1[1, 6] <- 1
rl1[cbind((2:4), c(1:3))] <- 1
rl1[2, 6] <- 1.4
rl1[3, 6] <- 1.32
rl1[4, 6] <- 1.32
rl1[5, ] <- c(0, 1, 0, 0, 1, 1.5)
rl1[6, ] <- c(0, 0, 1, 1, 0, 1.54)
rl1[7, ] <- c(1, 0, 1, 1, 0, 1.65)
rl1[8, ] <- c(1, 1, 1, 1, 0, 1.75)
rl1[9, ] <- c(1, 1, 1, 1, 1, 1.85)
class(rl1) <- c("matrix", "genotype_fitness_matrix")
## plot(rl1) ## to see the fitness landscape

## Gene combinations
local_max_g <- c("A", "B, E", "A, B, C, D, E")
## Specify the genotypes
local_max <- paste0("_,", local_max_g)

fr1 <- allFitnessEffects(genotFitness = rl1, drvNames = LETTERS[1:5])
initS <- 2000


######## Stop on gene combinations   #####
r1 <- oncoSimulPop(10,
                       fp = fr1,
                       model = "McFL",
                       initSize = initS,
                       mu = 1e-4,
                       detectionSize = NA,
                       sampleEvery = .03,
                       keepEvery = 1, 
                       finalTime = 50000,
                       fixation = local_max_g, 
                       detectionDrivers = NA,
                       detectionProb = NA,
                       onlyCancer = TRUE,
                       max.num.tries = 500,
                       max.wall.time = 20, 
                       errorHitMaxTries = TRUE,
                       keepPhylog = FALSE,
                       mc.cores = 2)
sp1 <- samplePop(r1, "last", "singleCell")
sgsp1 <- sampledGenotypes(sp1)
## often you will stop on gene combinations that
## are not local maxima in the fitness landscape
sgsp1
sgsp1$Genotype %in% local_max_g

####### Stop on genotypes   ####

r2 <- oncoSimulPop(10,
                       fp = fr1,
                       model = "McFL",
                       initSize = initS,
                       mu = 1e-4,
                       detectionSize = NA,
                       sampleEvery = .03,
                       keepEvery = 1, 
                       finalTime = 50000,
                       fixation = local_max, 
                       detectionDrivers = NA,
                       detectionProb = NA,
                       onlyCancer = TRUE,
                       max.num.tries = 500,
                       max.wall.time = 20, 
                       errorHitMaxTries = TRUE,
                       keepPhylog = FALSE,
                       mc.cores = 2)
## All final genotypes should be local maxima                       
sp2 <- samplePop(r2, "last", "singleCell")
sgsp2 <- sampledGenotypes(sp2)
sgsp2$Genotype %in% local_max_g




## ----fixationG2---------------------------------------------------
## Create a simple fitness landscape
rl1 <- matrix(0, ncol = 6, nrow = 9)
colnames(rl1) <- c(LETTERS[1:5], "Fitness")
rl1[1, 6] <- 1
rl1[cbind((2:4), c(1:3))] <- 1
rl1[2, 6] <- 1.4
rl1[3, 6] <- 1.32
rl1[4, 6] <- 1.32
rl1[5, ] <- c(0, 1, 0, 0, 1, 1.5)
rl1[6, ] <- c(0, 0, 1, 1, 0, 1.54)
rl1[7, ] <- c(1, 0, 1, 1, 0, 1.65)
rl1[8, ] <- c(1, 1, 1, 1, 0, 1.75)
rl1[9, ] <- c(1, 1, 1, 1, 1, 1.85)
class(rl1) <- c("matrix", "genotype_fitness_matrix")
## plot(rl1) ## to see the fitness landscape

## The local fitness maxima are
## c("A", "B, E", "A, B, C, D, E")

fr1 <- allFitnessEffects(genotFitness = rl1, drvNames = LETTERS[1:5])
initS <- 2000

## Stop on genotypes

r3 <- oncoSimulPop(10,
                  fp = fr1,
                  model = "McFL",
                  initSize = initS,
                  mu = 1e-4,
                  detectionSize = NA,
                  sampleEvery = .03,
                  keepEvery = 1, 
                  finalTime = 50000,
                  fixation = c(paste0("_,",
                                   c("A", "B, E", "A, B, C, D, E")),
                               fixation_tolerance = 0.1,
                               min_successive_fixation = 200,
                               fixation_min_size = 3000),
                  detectionDrivers = NA,
                  detectionProb = NA,
                  onlyCancer = TRUE,
                  max.num.tries = 500,
                  max.wall.time = 20, 
                  errorHitMaxTries = TRUE,
                  keepPhylog = FALSE,
                  mc.cores = 2)


## ----prbaux001----------------------------------------------------
K <- 5
sd <- 0.1
sdp <- 0.15
sp <- 0.05
bauer <- data.frame(parent = c("Root", rep("p", K)),
                    child = c("p", paste0("s", 1:K)),
                    s = c(sd, rep(sdp, K)),
                    sh = c(0, rep(sp, K)),
                    typeDep = "MN")
fbauer <- allFitnessEffects(bauer, drvNames = "p")
set.seed(1)
## Use fairly large mutation rate
b1 <- oncoSimulIndiv(fbauer, mu = 5e-5, initSize = 1000,
                     finalTime = NA,
                     onlyCancer = TRUE,
                     detectionProb = "default")


## ----baux1,fig.width=6.5, fig.height=10, fig.cap="Three drivers' plots of a simulation of Bauer's model"----
par(mfrow = c(3, 1))
## First, drivers
plot(b1, type = "line", addtot = TRUE)
plot(b1, type = "stacked")
plot(b1, type = "stream")

## ----baux2,fig.width=6.5, fig.height=10, fig.cap="Three genotypes' plots of a simulation of Bauer's model"----
par(mfrow = c(3, 1))
## Next, genotypes
plot(b1, show = "genotypes", type = "line")
plot(b1, show = "genotypes", type = "stacked")
plot(b1, show = "genotypes", type = "stream")

## ---- fig.width=6-------------------------------------------------

set.seed(678)
nd <- 70  
np <- 5000 
s <- 0.1  
sp <- 1e-3 
spp <- -sp/(1 + sp)
mcf1 <- allFitnessEffects(noIntGenes = c(rep(s, nd), rep(spp, np)),
                          drvNames = seq.int(nd))
mcf1s <-  oncoSimulIndiv(mcf1,
                         model = "McFL", 
                         mu = 1e-7,
                         detectionProb = "default",
                         detectionSize = NA, 
                         detectionDrivers = NA,
                         sampleEvery = 0.025,
                         keepEvery = 8,
                         initSize = 2000,
                         finalTime = 4000,
                         onlyCancer = FALSE)
summary(mcf1s)


## ----mcf1sx1,fig.width=6.5, fig.height=10-------------------------
par(mfrow  = c(2, 1))
## I use thinData to make figures smaller and faster
plot(mcf1s, addtot = TRUE, lwdClone = 0.9, log = "", 
     thinData = TRUE, thinData.keep = 0.5)
plot(mcf1s, show = "drivers", type = "stacked",
     thinData = TRUE, thinData.keep = 0.3,
     legend.ncols = 2)

## ---- eval=FALSE--------------------------------------------------
#  
#  set.seed(123)
#  nd <- 70
#  np <- 50000
#  s <- 0.1
#  sp <- 1e-4 ## as we have many more passengers
#  spp <- -sp/(1 + sp)
#  mcfL <- allFitnessEffects(noIntGenes = c(rep(s, nd), rep(spp, np)),
#                            drvNames = seq.int(nd))
#  mcfLs <-  oncoSimulIndiv(mcfL,
#                           model = "McFL",
#                           mu = 1e-7,
#                           detectionSize = 1e8,
#                           detectionDrivers = 100,
#                           sampleEvery = 0.02,
#                           keepEvery = 2,
#                           initSize = 1000,
#                           finalTime = 2000,
#                           onlyCancer = FALSE)

## ---- mcflsx2,fig.width=6-----------------------------------------
data(mcfLs)
plot(mcfLs, addtot = TRUE, lwdClone = 0.9, log = "",
     thinData = TRUE, thinData.keep = 0.3,
     plotDiversity = TRUE)

## -----------------------------------------------------------------
summary(mcfLs)
## number of passengers per clone
summary(colSums(mcfLs$Genotypes[-(1:70), ]))

## ----mcflsx3------------------------------------------------------
plot(mcfLs, type = "stacked", thinData = TRUE, 
     thinData.keep = 0.2,
     plotDiversity = TRUE,
     xlim = c(0, 1000))

## -----------------------------------------------------------------
data(examplesFitnessEffects)
names(examplesFitnessEffects)

## ----smmcfls------------------------------------------------------
data(examplesFitnessEffects)
evalAllGenotypes(examplesFitnessEffects$cbn1, order = FALSE)[1:10, ]
sm <-  oncoSimulIndiv(examplesFitnessEffects$cbn1,
                      model = "McFL", 
                      mu = 5e-7,
                      detectionSize = 1e8, 
                      detectionDrivers = 2,
                      detectionProb = "default",
                      sampleEvery = 0.025,
                      keepEvery = 5,
                      initSize = 2000,
                      onlyCancer = TRUE)
summary(sm)

## ----smbosb1------------------------------------------------------
set.seed(1234)
evalAllGenotypes(examplesFitnessEffects$cbn1, order = FALSE, 
                 model = "Bozic")[1:10, ]
sb <-  oncoSimulIndiv(examplesFitnessEffects$cbn1,
                       model = "Bozic", 
                       mu = 5e-6,
                      detectionProb = "default",
                       detectionSize = 1e8, 
                       detectionDrivers = 4,
                       sampleEvery = 2,
                       initSize = 2000,
                       onlyCancer = TRUE)
summary(sb)

## ----sbx1,fig.width=6.5, fig.height=3.3---------------------------
## Show drivers, line plot
par(cex = 0.75, las = 1)
plot(sb,show = "drivers", type = "line", addtot = TRUE,
     plotDiversity = TRUE)

## ----sbx2,fig.width=6.5, fig.height=3.3---------------------------
## Drivers, stacked
par(cex = 0.75, las = 1)
plot(sb,show = "drivers", type = "stacked", plotDiversity = TRUE)

## ----sbx3,fig.width=6.5, fig.height=3.3---------------------------
## Drivers, stream
par(cex = 0.75, las = 1)
plot(sb,show = "drivers", type = "stream", plotDiversity = TRUE)

## ----sbx4,fig.width=6.5, fig.height=3.3---------------------------
## Genotypes, line plot
par(cex = 0.75, las = 1)
plot(sb,show = "genotypes", type = "line", plotDiversity = TRUE)

## ----sbx5,fig.width=6.5, fig.height=3.3---------------------------
## Genotypes, stacked
par(cex = 0.75, las = 1)
plot(sb,show = "genotypes", type = "stacked", plotDiversity = TRUE)

## ----sbx6,fig.width=6.5, fig.height=3.3---------------------------
## Genotypes, stream
par(cex = 0.75, las = 1)
plot(sb,show = "genotypes", type = "stream", plotDiversity = TRUE)

## ---- fig.width=6-------------------------------------------------

set.seed(4321)
tmp <-  oncoSimulIndiv(examplesFitnessEffects[["o3"]],
                       model = "McFL", 
                       mu = 5e-5,
                       detectionSize = 1e8, 
                       detectionDrivers = 3,
                       sampleEvery = 0.025,
                       max.num.tries = 10,
                       keepEvery = 5,
                       initSize = 2000,
                       finalTime = 6000,
                       onlyCancer = FALSE) 

## ----tmpmx1,fig.width=6.5, fig.height=4.1-------------------------
par(las = 1, cex = 0.85)
plot(tmp, addtot = TRUE, log = "", plotDiversity = TRUE,
     thinData = TRUE, thinData.keep = 0.2)

## ----tmpmx2,fig.width=6.5, fig.height=4.1-------------------------
par(las = 1, cex = 0.85)
plot(tmp, type = "stacked", plotDiversity = TRUE, 
     ylim = c(0, 5500), legend.ncols = 4,
     thinData = TRUE, thinData.keep = 0.2)

## -----------------------------------------------------------------
evalAllGenotypes(examplesFitnessEffects[["o3"]], addwt = TRUE,
                 order = TRUE)

## ----tmpmx3,fig.width=6.5, fig.height=5.5-------------------------
plot(tmp, show = "genotypes", ylim = c(0, 5500), legend.ncols = 3,
     thinData = TRUE, thinData.keep = 0.5)

## -----------------------------------------------------------------
set.seed(15)
tmp <-  oncoSimulIndiv(examplesFitnessEffects[["o3"]],
                       model = "McFL", 
                       mu = 5e-5,
                       detectionSize = 1e8, 
                       detectionDrivers = 3,
                       sampleEvery = 0.025,
                       max.num.tries = 10,
                       keepEvery = 5,
                       initSize = 2000,
                       finalTime = 20000,
                       onlyCancer = FALSE,
                       extraTime = 1500)
tmp

## ----tmpmdx5,fig.width=6.5, fig.height=4--------------------------
par(las = 1, cex = 0.85)
plot(tmp, addtot = TRUE, log = "", plotDiversity = TRUE,
     thinData = TRUE, thinData.keep = 0.5)

## ----tmpmdx6,fig.width=6.5, fig.height=4--------------------------
par(las = 1, cex = 0.85)
plot(tmp, type = "stacked", plotDiversity = TRUE,
     legend.ncols = 4, ylim = c(0, 5200), xlim = c(3400, 5000),
     thinData = TRUE, thinData.keep = 0.5)

## ----tmpmdx7,fig.width=6.5, fig.height=5.3------------------------
## Improve telling apart the most abundant 
## genotypes by sorting colors
## differently via breakSortColors
## Modify ncols of legend, so it is legible by not overlapping
## with plot
par(las = 1, cex = 0.85)
plot(tmp, show = "genotypes", breakSortColors = "distave",
     plotDiversity = TRUE, legend.ncols = 4,
     ylim = c(0, 5300), xlim = c(3400, 5000),
     thinData = TRUE, thinData.keep = 0.5)

## ---- eval=FALSE--------------------------------------------------
#  ## Convert the data
#  lb1 <- OncoSimulWide2Long(b1)
#  
#  ## Install the streamgraph package from GitHub and load
#  library(devtools)
#  devtools::install_github("hrbrmstr/streamgraph")
#  library(streamgraph)
#  
#  ## Stream plot for Genotypes
#  sg_legend(streamgraph(lb1, Genotype, Y, Time, scale = "continuous"),
#                show=TRUE, label="Genotype: ")
#  
#  ## Staked area plot and we use the pipe
#  streamgraph(lb1, Genotype, Y, Time, scale = "continuous",
#              offset = "zero") %>%
#      sg_legend(show=TRUE, label="Genotype: ")

## ----pancrpopcreate-----------------------------------------------

pancrPop <- oncoSimulPop(4, pancr,
                         detectionSize = 1e7,
                         keepEvery = 10,
                         mc.cores = 2)

summary(pancrPop)
samplePop(pancrPop)


## -----------------------------------------------------------------
library(parallel)

if(.Platform$OS.type == "windows") {
    mc.cores <- 1
} else {
    mc.cores <- 2
}

p2 <- mclapply(1:4, function(x) oncoSimulIndiv(pancr,
                                               detectionSize = 1e7,
                                               keepEvery = 10),
                                               mc.cores = mc.cores)
class(p2) <- "oncosimulpop"
samplePop(p2)

## -----------------------------------------------------------------
tail(pancrPop[[1]]$pops.by.time)

## -----------------------------------------------------------------
pancrPopNH <- oncoSimulPop(4, pancr,
                           detectionSize = 1e7,
                           keepEvery = NA,
                           mc.cores = 2)

summary(pancrPopNH)
samplePop(pancrPopNH)

## -----------------------------------------------------------------
pancrPopNH[[1]]$pops.by.time

## -----------------------------------------------------------------
pancrSamp <- oncoSimulSample(4, pancr)
pancrSamp$popSamp


## -----------------------------------------------------------------

set.seed(15)
tmp <-  oncoSimulIndiv(examplesFitnessEffects[["o3"]],
                       model = "McFL", 
                       mu = 5e-5,
                       detectionSize = 1e8, 
                       detectionDrivers = 3,
                       sampleEvery = 0.025,
                       max.num.tries = 10,
                       keepEvery = 5,
                       initSize = 2000,
                       finalTime = 20000,
                       onlyCancer = FALSE,
                       extraTime = 1500,
                       keepPhylog = TRUE)
tmp

## -----------------------------------------------------------------
plotClonePhylog(tmp, N = 0)

## -----------------------------------------------------------------
plotClonePhylog(tmp, N = 1)

## ----pcpkeepx1----------------------------------------------------
plotClonePhylog(tmp, N = 1, keepEvents = TRUE)

## -----------------------------------------------------------------
plotClonePhylog(tmp, N = 1, timeEvents = TRUE)

## ---- fig.keep="none"---------------------------------------------
get.adjacency(plotClonePhylog(tmp, N = 1, returnGraph = TRUE))


## -----------------------------------------------------------------

set.seed(456)
mcf1s <-  oncoSimulIndiv(mcf1,
                         model = "McFL", 
                         mu = 1e-7,
                         detectionSize = 1e8, 
                         detectionDrivers = 100,
                         sampleEvery = 0.025,
                         keepEvery = 2,
                         initSize = 2000,
                         finalTime = 1000,
                         onlyCancer = FALSE,
                         keepPhylog = TRUE)


## -----------------------------------------------------------------
plotClonePhylog(mcf1s, N = 1)

## -----------------------------------------------------------------
par(cex = 0.7)
plotClonePhylog(mcf1s, N = 1, timeEvents = TRUE)

## -----------------------------------------------------------------
par(cex = 0.7)
plotClonePhylog(mcf1s, N = 1, t = c(800, 1000))

## -----------------------------------------------------------------
par(cex = 0.7)
plotClonePhylog(mcf1s, N = 1, t = c(900, 1000), timeEvents = TRUE)

## ----fig.keep="none"----------------------------------------------
g1 <- plotClonePhylog(mcf1s, N = 1, t = c(900, 1000),
                      returnGraph = TRUE)

## -----------------------------------------------------------------
plot(g1)

## ---- eval=FALSE--------------------------------------------------
#  op <- par(ask = TRUE)
#  while(TRUE) {
#      tmp <- oncoSimulIndiv(smn1, model = "McFL",
#                            mu = 5e-5, finalTime = 500,
#                            detectionDrivers = 3,
#                            onlyCancer = FALSE,
#                            initSize = 1000, keepPhylog = TRUE)
#      plotClonePhylog(tmp, N = 0)
#  }
#  par(op)

## -----------------------------------------------------------------

oi <- allFitnessEffects(orderEffects =
               c("F > D" = -0.3, "D > F" = 0.4),
               noIntGenes = rexp(5, 10),
                          geneToModule =
                              c("F" = "f1, f2, f3",
                                "D" = "d1, d2") )
oiI1 <- oncoSimulIndiv(oi, model = "Exp")
oiP1 <- oncoSimulPop(4, oi,
                     keepEvery = 10,
                     mc.cores = 2,
                     keepPhylog = TRUE)


## ---- fig.height=9------------------------------------------------

op <- par(mar = rep(0, 4), mfrow = c(2, 1))
plotClonePhylog(oiP1[[1]])
plotClonePhylog(oiP1[[2]])
par(op)


## -----------------------------------------------------------------
## A small example
rfitness(3)

## A 5-gene example, where the reference genotype is the
## one with all positions mutated, similar to Greene and Crona,
## 2014.  We will plot the landscape and use it for simulations
## We downplay the random component with a sd = 0.5

r1 <- rfitness(5, reference = rep(1, 5), sd = 0.6)
plot(r1)
oncoSimulIndiv(allFitnessEffects(genotFitness = r1))

## ----lod_pom_ex---------------------------------------------------
pancr <- allFitnessEffects(
    data.frame(parent = c("Root", rep("KRAS", 4), "SMAD4", "CDNK2A", 
                          "TP53", "TP53", "MLL3"),
               child = c("KRAS","SMAD4", "CDNK2A", 
                         "TP53", "MLL3",
                         rep("PXDN", 3), rep("TGFBR2", 2)),
               s = 0.05, sh = -0.3, typeDep = "MN"))

pancr16 <- oncoSimulPop(16, pancr, model = "Exp",
                        mc.cores = 2)

## Look a the first POM 
str(POM(pancr16)[1:3])

LOD(pancr16)[1:2]

## The diversity of LOD (lod_single) and POM might or might not
## be identical
diversityPOM(POM(pancr16))
diversityLOD(LOD(pancr16))

## Show the genotypes and their diversity (which might, or might
## not, differ from the diversity of LOD and POM)
sampledGenotypes(samplePop(pancr16))


## -----------------------------------------------------------------
## No seed fixed, so reruns will give different DAGs.
(a1 <- simOGraph(10))
library(graph) ## for simple plotting
plot(as(a1, "graphNEL"))

## ----simographindirect, eval=FALSE,echo=TRUE----------------------
#  g2 <- simOGraph(4, out = "rT", removeDirectIndirect = FALSE)
#  
#  fe_from_d <- allFitnessEffects(g2)
#  fitness_d <- evalAllGenotypes(fe_from_d)
#  
#  fe_from_t <- allFitnessEffects(genotFitness =
#                            OncoSimulR:::allGenotypes_to_matrix(fitness_d))
#  						
#  ## Compare
#  fitness_d
#  (fitness_t <- evalAllGenotypes(fe_from_t))
#  
#  identical(fitness_d, fitness_t)
#  						
#  
#  ## ... but to be safe use fe_from_t as the fitnessEffects object for simulations
#  

## -----------------------------------------------------------------
## This code will only be evaluated under Windows
if(.Platform$OS.type == "windows")
    try(pancrError <- oncoSimulPop(10, pancr,
                               initSize = 1e-5,
                               detectionSize = 1e7,
                               keepEvery = 10,
                               mc.cores = 2))

## -----------------------------------------------------------------
## Do not run under Windows
if(.Platform$OS.type != "windows")
    pancrError <- oncoSimulPop(10, pancr,
                               initSize = 1e-5,
                               detectionSize = 1e7,
                               keepEvery = 10,
                               mc.cores = 2)

## ---- eval=FALSE--------------------------------------------------
#  pancrError[[1]]

## ---- eval=FALSE--------------------------------------------------
#  pancrError[[1]][1]

## ----ex-tomlin1exc------------------------------------------------
sd <- 0.1 ## fitness effect of drivers
sm <- 0 ## fitness effect of mutator
nd <- 20 ## number of drivers
nm <- 5  ## number of mutators
mut <- 50 ## mutator effect  THIS IS THE DIFFERENCE

fitnessGenesVector <- c(rep(sd, nd), rep(sm, nm))
names(fitnessGenesVector) <- 1:(nd + nm)
mutatorGenesVector <- rep(mut, nm)
names(mutatorGenesVector) <- (nd + 1):(nd + nm)

ft <- allFitnessEffects(noIntGenes = fitnessGenesVector,
                        drvNames = 1:nd)
mt <- allMutatorEffects(noIntGenes = mutatorGenesVector)


## ----ex-tomlinexc2------------------------------------------------
ddr <- 4
set.seed(2)
RNGkind("L'Ecuyer-CMRG")
st <- oncoSimulPop(4, ft, muEF = mt,
                   detectionDrivers = ddr,
                   finalTime = NA,
                   detectionSize = NA,
                   detectionProb = NA,
                   onlyCancer = TRUE,
                   keepEvery = NA, 
                   mc.cores = 2, ## adapt to your hardware
                   seed = NULL) ## for reproducibility
set.seed(NULL) ## return things to their "usual state"


## ---- fig.height=3------------------------------------------------
## Node 2 and 3 depend on 1, and 4 depends on no one
p1 <- cbind(c(1L, 1L, 0L), c(2L, 3L, 4L))
plotPoset(p1, addroot = TRUE)

## ---- fig.height=3------------------------------------------------
## A simple way to create a poset where no gene (in a set of 15)
## depends on any other.
p4 <- cbind(0L, 15L)
plotPoset(p4, addroot = TRUE)

## ---- fig.height=3------------------------------------------------
pancreaticCancerPoset <- cbind(c(1, 1, 1, 1, 2, 3, 4, 4, 5),
                               c(2, 3, 4, 5, 6, 6, 6, 7, 7))
storage.mode(pancreaticCancerPoset) <- "integer"
plotPoset(pancreaticCancerPoset,
          names = c("KRAS", "SMAD4", "CDNK2A", "TP53",
                    "MLL3","PXDN", "TGFBR2"))


## ---- echo=FALSE,results='hide',error=FALSE---------------
options(width=60)

## ---------------------------------------------------------
## use poset p1101
data(examplePosets)
p1101 <- examplePosets[["p1101"]]

## Bozic Model
b1 <- oncoSimulIndiv(p1101, keepEvery = 15)
summary(b1)

## ----pb2bothx1,fig.height=5.5, fig.width=5.5--------------
b2 <- oncoSimulIndiv(p1101, keepEvery = 1)
summary(b2)
plot(b2)

## ----pbssttx1,eval=FALSE----------------------------------
#  plot(b2, type = "stacked")

## ---- echo=FALSE,eval=TRUE--------------------------------
set.seed(1) ## for reproducibility. Once I saw it not reach cancer.

## ---------------------------------------------------------

m2 <- oncoSimulIndiv(examplePosets[["p1101"]], model = "McFL", 
                     numPassengers = 0, detectionDrivers = 8, 
                     mu = 5e-7, initSize = 4000, 
                     sampleEvery = 0.025,
                     finalTime = 25000, keepEvery = 5, 
                     detectionSize = 1e6) 

## ----m2x1,fig.width=6.5, fig.height=10--------------------
par(mfrow = c(2, 1))
plot(m2, addtot = TRUE, log = "",
     thinData = TRUE, thinData.keep = 0.5)
plot(m2, type = "stacked",
     thinData = TRUE, thinData.keep = 0.5)

## ---------------------------------------------------------
b3 <- oncoSimulIndiv(p1101, onlyCancer = FALSE)
summary(b3)

b4 <- oncoSimulIndiv(p1101, onlyCancer = FALSE)
summary(b4)

## ----b3b4x1ch1, fig.width=8, fig.height=4-----------------
par(mfrow = c(1, 2))
par(cex = 0.8) ## smaller font
plot(b3)
plot(b4)

## ----ch2--------------------------------------------------
p1 <- oncoSimulPop(4, p1101, mc.cores = 2)
par(mfrow = c(2, 2))
plot(p1, ask = FALSE)

## ----p1multx1,eval=FALSE----------------------------------
#  par(mfrow = c(2, 2))
#  plot(p1, type = "stream", ask = FALSE)

## ----p1multstx1,eval=FALSE--------------------------------
#  par(mfrow = c(2, 2))
#  plot(p1, type = "stacked", ask = FALSE)

## ---------------------------------------------------------

m1 <- oncoSimulPop(100, examplePosets[["p1101"]], 
                   numPassengers = 0, mc.cores = 2)


## ---------------------------------------------------------
genotypes <- samplePop(m1)

## ----fxot1,fig.width=4, fig.height=4----------------------
colSums(genotypes)/nrow(genotypes)

require(Oncotree)
ot1 <- oncotree.fit(genotypes)
plot(ot1)

## ----fxot2,fig.width=4, fig.height=4----------------------
genotypesSC <- samplePop(m1, typeSample = "single")
colSums(genotypesSC)/nrow(genotypesSC)

ot2 <- oncotree.fit(genotypesSC)
plot(ot2)

## ---------------------------------------------------------
sessionInfo()

## ---- echo=FALSE, eval=TRUE-------------------------------
## reinitialize the seed
set.seed(NULL)

