###################################
###Fabio Morgante
###11-2-2016
###Simulation of true QTL genotypes from pruned
###DGRP data and simulation of phenotypes
###Additive only or epistatic only scenarios
###################################


###Load the pruned genotype data (rows=variants (8,665 coded as 0 and 2), cols=lines) and transform it into a matrix
###Full genotype data is available at http://dgrp2.gnets.ncsu.edu
geno <- read.table("")
geno <- as.matrix(geno)

###Calculate allele frequencies and store them in two vectors
p <- c()
q <- c()

for(i in 1:nrow(geno)){
  a <- length(which(geno[i, ]==0))
  b <- length(which(geno[i, ]==2))
  p[i] <- a/(a+b)
  q[i] <- b/(a+b)
  if((i%%10000)==1){print(paste("SNP",i))}
}

################################################
################################################
###Simulate QTLs with given DGRP allele freq####
################################################
################################################

###Number of replicates
nreps <- 30

###Number of lines
nlines <- 205

###############################################
####1 major QTL explaining all the variance####
###############################################

QTLmajorFinal <- NULL
QTLmajorFinal <- as.list(QTLmajorFinal)


for(k in 1:nreps){
  ###Simulate genotype
  set.seed(120+k)
  QTLfreq <- sample(p, 1)
  set.seed(120+k)
  genoQTL <- sample(c(0, 2), nlines, prob=c(QTLfreq, 1-QTLfreq), replace=T)
  
  ###Simulate phenotype
  ##Set heritability
  H2 <- 0.4
  ##Genotype matrix
  X <- genoQTL
  ##Simulate QTL effect
  set.seed(121+k)
  beta <- rgamma(1, shape=0.4, scale=1.66)
  ##Sample a sign for the effect
  set.seed(121+k)
  sign <- sample(size=length(beta), x=c(1, -1), replace=T, prob=c(0.5, 0.5))
  beta <- beta * sign
  ##Genetic value of lines
  g <- X %*% as.matrix((beta), ncol=1)
  ##Calculate res var given genetic var and H2
  varg <- var(g)
  vare <- (varg-(varg*H2))/H2
  ##Simulate random errors
  set.seed(120+k)
  e <- rnorm(length(X), mean=0, sd=sqrt(vare))
  ##Get the phenotypes
  phenoMajor <- g + e
  
  if(k == 1){phenoMajorFinal <- phenoMajor}
  if(k > 1){phenoMajorFinal <- cbind(phenoMajorFinal, phenoMajor)}
  
  QTLmajorFinal[[k]] <- genoQTL
}

rm(list=setdiff(ls(), c("p", "q", "nlines", "nreps", "phenoMajorFinal", "QTLmajorFinal")))




##########################################
####20 QTL explaining all the variance####
##########################################

QTLadd20Final <- NULL
QTLadd20Final <- as.list(QTLadd20Final)


for(k in 1:nreps){
  ###Simulate genotype
  set.seed(121+k)
  QTLfreq <- sample(p, 20, replace=F)
  
  genoQTL <- matrix(NA, nrow=length(QTLfreq), ncol=nlines)
  
  for(i in 1:length(QTLfreq)){
    set.seed(121+k+i)
    genoQTL[i, ] <- sample(c(0, 2), nlines, prob=c(QTLfreq[i], 1-QTLfreq[i]), replace=T)
  }

  
  ###Simulate phenotype
  ##Set heritability
  H2 <- 0.4
  ##Genotype matrix
  X <- t(genoQTL)
  ##Simulate QTL effect
  set.seed(129+k)
  beta <- rgamma(ncol(X), shape=0.4, scale=1.66)
  ##Sample a sign for the effect
  set.seed(129+k)
  sign <- sample(size=length(beta), x=c(1, -1), replace=T, prob=c(0.5, 0.5))
  beta <- beta * sign
  ##Genetic value of lines
  g <- X %*% as.matrix((beta), ncol=1)
  ##Calculate res var given genetic var and H2
  varg <- var(g)
  vare <- (varg-(varg*H2))/H2
  ##Simulate random errors
  set.seed(140+k)
  e <- rnorm(nrow(X), mean=0, sd=sqrt(vare))
  ##Get the phenotypes
  phenoAdd20 <- g + e
  
  if(k == 1){phenoAdd20Final <- phenoAdd20}
  if(k > 1){phenoAdd20Final <- cbind(phenoAdd20Final, phenoAdd20)}
  
  QTLadd20Final[[k]] <- genoQTL
}

rm(list=setdiff(ls(), c("p", "q", "nlines", "nreps", "phenoMajorFinal", "QTLmajorFinal", "phenoAdd20Final", "QTLadd20Final")))


###########################################
####100 QTL explaining all the variance####
###########################################

QTLadd100Final <- NULL
QTLadd100Final <- as.list(QTLadd100Final)


for(k in 1:nreps){
  ###Simulate genotype
  set.seed(122+k)
  QTLfreq <- sample(p, 100, replace=F)
  
  genoQTL <- matrix(NA, nrow=length(QTLfreq), ncol=nlines)
  
  for(i in 1:length(QTLfreq)){
    set.seed(122+k+i)
    genoQTL[i, ] <- sample(c(0, 2), nlines, prob=c(QTLfreq[i], 1-QTLfreq[i]), replace=T)
  }

  ###Simulate phenotype
  ##Set heritability
  H2 <- 0.4
  ##Genotype matrix
  X <- t(genoQTL)
  ##Simulate QTL effect
  set.seed(123+k)
  beta <- rgamma(ncol(X), shape=0.4, scale=1.66)
  ##Sample a sign for the effect
  set.seed(123+k)
  sign <- sample(size=length(beta), x=c(1, -1), replace=T, prob=c(0.5, 0.5))
  beta <- beta * sign
  ##Genetic value of lines
  g <- X %*% as.matrix((beta), ncol=1)
  ##Calculate res var given genetic var and H2
  varg <- var(g)
  vare <- (varg-(varg*H2))/H2
  ##Simulate random errors
  set.seed(130+k)
  e <- rnorm(nrow(X), mean=0, sd=sqrt(vare))
  ##Get the phenotypes
  phenoAdd100 <- g + e
  
  if(k == 1){phenoAdd100Final <- phenoAdd100}
  if(k > 1){phenoAdd100Final <- cbind(phenoAdd100Final, phenoAdd100)}
  
  QTLadd100Final[[k]] <- genoQTL
}
  
rm(list=setdiff(ls(), c("p", "q", "nlines", "nreps", "phenoMajorFinal", "QTLmajorFinal", "phenoAdd20Final", "QTLadd20Final", "phenoAdd100Final", "QTLadd100Final")))

  
  
############################################
####1000 QTL explaining all the variance####
############################################

QTLadd1000Final <- NULL
QTLadd1000Final <- as.list(QTLadd1000Final)


for(k in 1:nreps){
  ###Simulate genotype
  set.seed(123+k)
  QTLfreq <- sample(p, 1000, replace=F)
  
  genoQTL <- matrix(NA, nrow=length(QTLfreq), ncol=nlines)
  
  for(i in 1:length(QTLfreq)){
    set.seed(123+k+i)
    genoQTL[i, ] <- sample(c(0, 2), nlines, prob=c(QTLfreq[i], 1-QTLfreq[i]), replace=T)
  }
  
  ###Simulate phenotype
  ##Set heritability
  H2 <- 0.4
  ##Genotype matrix
  X <- t(genoQTL)
  ##Simulate QTL effect
  set.seed(122+k)
  beta <- rgamma(ncol(X), shape=0.4, scale=1.66)
  ##Sample a sign for the effect
  set.seed(122+k)
  sign <- sample(size=length(beta), x=c(1, -1), replace=T, prob=c(0.5, 0.5))
  beta <- beta * sign
  ##Genetic value of lines
  g <- X %*% as.matrix((beta), ncol=1)
  ##Calculate res var given genetic var and H2
  varg <- var(g)
  vare <- (varg-(varg*H2))/H2
  ##Simulate random errors
  set.seed(140+k)
  e <- rnorm(nrow(X), mean=0, sd=sqrt(vare))
  ##Get the phenotypes
  phenoAdd1000 <- g + e
  
  if(k == 1){phenoAdd1000Final <- phenoAdd1000}
  if(k > 1){phenoAdd1000Final <- cbind(phenoAdd1000Final, phenoAdd1000)}
  
  QTLadd1000Final[[k]] <- genoQTL
}  
  
rm(list=setdiff(ls(), c("p", "q", "nlines", "nreps", "phenoMajorFinal", "QTLmajorFinal", "phenoAdd20Final", "QTLadd20Final", "phenoAdd100Final", "QTLadd100Final", "phenoAdd1000Final", "QTLadd1000Final")))

  
  
  
  
###########################################################################
####50 QTL-QTL interactions explaining all the variance (Sign epistasis)####
###########################################################################

QTL1epiCrossFinal <- NULL
QTL1epiCrossFinal <- as.list(QTL1epiCrossFinal)

QTL2epiCrossFinal <- NULL
QTL2epiCrossFinal <- as.list(QTL2epiCrossFinal)



for(k in 1:nreps){
  ###Simulate genotype
  ##Simulate first set of 50 variants to make up the interactions
  set.seed(123+k)
  QTL1freq <- sample(p[1:4000], 50, replace=F)
  
  genoQTL1 <- matrix(NA, nrow=length(QTL1freq), ncol=nlines)
  
  for(i in 1:length(QTL1freq)){
    set.seed(123+k+i)
    genoQTL1[i, ] <- sample(c(0, 2), nlines, prob=c(QTL1freq[i], 1-QTL1freq[i]), replace=T)
  }  
  
  ##Simulate second set of 50 variants to make up the interactions
  set.seed(124+k)
  QTL2freq <- sample(p[4001:8665], 50, replace=F)
  
  genoQTL2 <- matrix(NA, nrow=length(QTL2freq), ncol=nlines)
  
  for(i in 1:length(QTL2freq)){
    set.seed(124+k+i)
    genoQTL2[i, ] <- sample(c(0, 2), nlines, prob=c(QTL2freq[i], 1-QTL2freq[i]), replace=T)
  }  
  
  
  ###Simulate phenotype
  ##Set heritability
  H2 <- 0.4
  ##Genotype matrix
  X1 <- t(genoQTL1)
  X2 <- t(genoQTL2)
  ##Compute interaction matrix
  X1X2 <- matrix(NA, ncol=ncol(X1), nrow=nrow(X1))
  for(i in 1:ncol(X1)){
    for(j in 1:ncol(X2)){
      a <- X1[, i]
      b <- X2[, j]
      if(i==j){X1X2[, i] <- paste(a, b)}
    }
  }
  ##Recode interaction matrix
  for(i in 1:nrow(X1X2)){
    for(j in 1:ncol(X1X2)){
      if(X1X2[i, j]=='0 0'){X1X2[i, j] <- -1}
      if(X1X2[i, j]=='2 2'){X1X2[i, j] <- -1}
      if(X1X2[i, j]=='0 2'){X1X2[i, j] <- 1}
      if(X1X2[i, j]=='2 0'){X1X2[i, j] <- 1}
    }
  }
  ##Transform character to integers
  X1X2int <- matrix(NA, ncol=ncol(X1), nrow=nrow(X1))
  for(i in 1:nrow(X1X2)){
    for(j in 1:ncol(X1X2)){
      X1X2int[i, j] <- as.integer(X1X2[i, j])
    }
  }
  ##Simulate QTL effect
  set.seed(130+k)
  beta <- rgamma(ncol(X1X2), shape=0.4, scale=1.66)
  ##Sample a sign for the effect
  set.seed(130+k)
  sign <- sample(size=length(beta), x=c(1, -1), replace=T, prob=c(0.5, 0.5))
  beta <- beta * sign
  ##Genetic value of lines
  g <- X1X2int %*% as.matrix(beta, ncol=1)
  ##Calculate res var given genetic var and H2
  varg <- var(g)
  vare <- (varg-(varg*H2))/H2
  ##Simulate random errors
  set.seed(150+k)
  e <- rnorm(nrow(X1X2), mean=0, sd=sqrt(vare))
  ##Get the phenotypes
  phenoEpiCross <- g + e
  
  if(k == 1){phenoEpiCrossFinal <- phenoEpiCross}
  if(k > 1){phenoEpiCrossFinal <- cbind(phenoEpiCrossFinal, phenoEpiCross)}
  
  QTL1epiCrossFinal[[k]] <- genoQTL1
  QTL2epiCrossFinal[[k]] <- genoQTL2
}    

rm(list=setdiff(ls(), c("p", "q", "nlines", "nreps", "phenoMajorFinal", "QTLmajorFinal", "phenoAdd20Final", "QTLadd20Final", "phenoAdd100Final", "QTLadd100Final", "phenoAdd1000Final", "QTLadd1000Final", "phenoEpiCrossFinal", "QTL1epiCrossFinal", "QTL2epiCrossFinal")))




##############################################################################
####50 QTL-QTL interactions explaining all the variance (Variance Epistasis)####
##############################################################################

QTL1epiNoCrossFinal <- NULL
QTL1epiNoCrossFinal <- as.list(QTL1epiNoCrossFinal)

QTL2epiNoCrossFinal <- NULL
QTL2epiNoCrossFinal <- as.list(QTL2epiNoCrossFinal)



for(k in 1:nreps){
  ###Simulate genotype
  ##Simulate first set of 50 variants to make up the interactions
  set.seed(113+k)
  QTL1freq <- sample(p[1:4000], 50, replace=F)
  
  genoQTL1 <- matrix(NA, nrow=length(QTL1freq), ncol=nlines)
  
  for(i in 1:length(QTL1freq)){
    set.seed(113+k+i)
    genoQTL1[i, ] <- sample(c(0, 2), nlines, prob=c(QTL1freq[i], 1-QTL1freq[i]), replace=T)
  }  
  
  ##Simulate second set of 50 variants to make up the interactions
  set.seed(114+k)
  QTL2freq <- sample(p[4001:8665], 50, replace=F)
  
  genoQTL2 <- matrix(NA, nrow=length(QTL2freq), ncol=nlines)
  
  for(i in 1:length(QTL2freq)){
    set.seed(114+k+i)
    genoQTL2[i, ] <- sample(c(0, 2), nlines, prob=c(QTL2freq[i], 1-QTL2freq[i]), replace=T)
  }  
  
  ###Simulate phenotype
  ##Set heritability
  H2 <- 0.4
  ##Genotype matrix
  X1 <- t(genoQTL1)
  X2 <- t(genoQTL2)
  ##Compute interaction matrix
  X1X2 <- matrix(NA, ncol=ncol(X1), nrow=nrow(X1))
  for(i in 1:ncol(X1)){
    for(j in 1:ncol(X2)){
      a <- X1[, i]
      b <- X2[, j]
      if(i==j){X1X2[, i] <- paste(a, b)}
    }
  }
  ##Recode interaction matrix
  for(i in 1:nrow(X1X2)){
    for(j in 1:ncol(X1X2)){
      if(X1X2[i, j]=='0 0'){X1X2[i, j] <- -1}
      if(X1X2[i, j]=='2 2'){X1X2[i, j] <- -1}
      if(X1X2[i, j]=='0 2'){X1X2[i, j] <- 1}
      if(X1X2[i, j]=='2 0'){X1X2[i, j] <- -1}
    }
  }
  ##Transform character to integers
  X1X2int <- matrix(NA, ncol=ncol(X1), nrow=nrow(X1))
  for(i in 1:nrow(X1X2)){
    for(j in 1:ncol(X1X2)){
      X1X2int[i, j] <- as.integer(X1X2[i, j])
    }
  }
  ##Simulate QTL effect
  set.seed(128+k)
  beta <- rgamma(ncol(X1X2), shape=0.4, scale=1.66)
  ##Sample a sign for the effect
  set.seed(128+k)
  sign <- sample(size=length(beta), x=c(1, -1), replace=T, prob=c(0.5, 0.5))
  beta <- beta * sign
  ##Genetic value of lines
  g <- X1X2int %*% as.matrix(beta, ncol=1)
  ##Calculate res var given genetic var and H2
  varg <- var(g)
  vare <- (varg-(varg*H2))/H2
  ##Simulate random errors
  set.seed(160+k)
  e <- rnorm(nrow(X1X2), mean=0, sd=sqrt(vare))
  ##Get the phenotypes
  phenoEpiNoCross <- g + e
  
  if(k == 1){phenoEpiNoCrossFinal <- phenoEpiNoCross}
  if(k > 1){phenoEpiNoCrossFinal <- cbind(phenoEpiNoCrossFinal, phenoEpiNoCross)}
  
  QTL1epiNoCrossFinal[[k]] <- genoQTL1
  QTL2epiNoCrossFinal[[k]] <- genoQTL2
}    

rm(list=setdiff(ls(), c("p", "q", "nlines", "nreps", "phenoMajorFinal", "QTLmajorFinal", "phenoAdd20Final", "QTLadd20Final", "phenoAdd100Final", "QTLadd100Final", "phenoAdd1000Final", "QTLadd1000Final", "phenoEpiCrossFinal", "QTL1epiCrossFinal", "QTL2epiCrossFinal", "phenoEpiNoCrossFinal", "QTL1epiNoCrossFinal", "QTL2epiNoCrossFinal")))




###########################################################################
####500 QTL-QTL interactions explaining all the variance (with crossing)####
###########################################################################

QTL1epiCross500Final <- NULL
QTL1epiCross500Final <- as.list(QTL1epiCross500Final)

QTL2epiCross500Final <- NULL
QTL2epiCross500Final <- as.list(QTL2epiCross500Final)



for(k in 1:nreps){
  ###Simulate genotype
  set.seed(173+k)
  QTL1freq <- sample(p[1:4000], 500, replace=F)
  
  genoQTL1 <- matrix(NA, nrow=length(QTL1freq), ncol=nlines)
  
  for(i in 1:length(QTL1freq)){
    set.seed(173+k+i)
    genoQTL1[i, ] <- sample(c(0, 2), nlines, prob=c(QTL1freq[i], 1-QTL1freq[i]), replace=T)
  }  
  
  
  set.seed(174+k)
  QTL2freq <- sample(p[4001:8665], 500, replace=F)
  
  genoQTL2 <- matrix(NA, nrow=length(QTL2freq), ncol=nlines)
  
  for(i in 1:length(QTL2freq)){
    set.seed(174+k+i)
    genoQTL2[i, ] <- sample(c(0, 2), nlines, prob=c(QTL2freq[i], 1-QTL2freq[i]), replace=T)
  }  
  
  
  ###Simulate phenotype
  H2 <- 0.4
  ##Genotype matrix
  X1 <- t(genoQTL1)
  X2 <- t(genoQTL2)
  ##Compute interaction matrix
  X1X2 <- matrix(NA, ncol=ncol(X1), nrow=nrow(X1))
  for(i in 1:ncol(X1)){
    for(j in 1:ncol(X2)){
      a <- X1[, i]
      b <- X2[, j]
      if(i==j){X1X2[, i] <- paste(a, b)}
    }
  }
  ##Recode interaction matrix
  for(i in 1:nrow(X1X2)){
    for(j in 1:ncol(X1X2)){
      if(X1X2[i, j]=='0 0'){X1X2[i, j] <- -1}
      if(X1X2[i, j]=='2 2'){X1X2[i, j] <- -1}
      if(X1X2[i, j]=='0 2'){X1X2[i, j] <- 1}
      if(X1X2[i, j]=='2 0'){X1X2[i, j] <- 1}
    }
  }
  ##Transform character to integers
  X1X2int <- matrix(NA, ncol=ncol(X1), nrow=nrow(X1))
  for(i in 1:nrow(X1X2)){
    for(j in 1:ncol(X1X2)){
      X1X2int[i, j] <- as.integer(X1X2[i, j])
    }
  }
  ##Simulate QTL effect
  set.seed(190+k)
  beta <- rgamma(ncol(X1X2), shape=0.4, scale=1.66)
  set.seed(190+k)
  sign <- sample(size=length(beta), x=c(1, -1), replace=T, prob=c(0.5, 0.5))
  beta <- beta * sign
  ##Genetic value of lines
  g <- X1X2int %*% as.matrix(beta, ncol=1)
  ##Calculate res var given genetic var and H2
  varg <- var(g)
  vare <- (varg-(varg*H2))/H2
  ##Simulate random errors
  set.seed(180+k)
  e <- rnorm(nrow(X1X2), mean=0, sd=sqrt(vare))
  
  phenoEpiCross <- g + e
  
  if(k == 1){phenoEpiCross500Final <- phenoEpiCross}
  if(k > 1){phenoEpiCross500Final <- cbind(phenoEpiCross500Final, phenoEpiCross)}
  
  QTL1epiCross500Final[[k]] <- genoQTL1
  QTL2epiCross500Final[[k]] <- genoQTL2
}    

rm(list=setdiff(ls(), c("p", "q", "nlines", "nreps", "phenoMajorFinal", "QTLmajorFinal", "phenoAdd20Final", "QTLadd20Final", "phenoAdd100Final", "QTLadd100Final", "phenoAdd1000Final", "QTLadd1000Final", 
						"phenoEpiCrossFinal", "QTL1epiCrossFinal", "QTL2epiCrossFinal", "phenoEpiNoCrossFinal", "QTL1epiNoCrossFinal", "QTL2epiNoCrossFinal", "phenoEpiCross500Final", "QTL1epiCross500Final", "QTL2epiCross500Final")))



##############################################################################
####500 QTL-QTL interactions explaining all the variance (without crossing)####
##############################################################################

QTL1epiNoCross500Final <- NULL
QTL1epiNoCross500Final <- as.list(QTL1epiNoCross500Final)

QTL2epiNoCross500Final <- NULL
QTL2epiNoCross500Final <- as.list(QTL2epiNoCross500Final)



for(k in 1:nreps){
  ###Simulate genotype
  set.seed(183+k)
  QTL1freq <- sample(p[1:4000], 500, replace=F)
  
  genoQTL1 <- matrix(NA, nrow=length(QTL1freq), ncol=nlines)
  
  for(i in 1:length(QTL1freq)){
    set.seed(183+k+i)
    genoQTL1[i, ] <- sample(c(0, 2), nlines, prob=c(QTL1freq[i], 1-QTL1freq[i]), replace=T)
  }  
  
  
  set.seed(184+k)
  QTL2freq <- sample(p[4001:8665], 500, replace=F)
  
  genoQTL2 <- matrix(NA, nrow=length(QTL2freq), ncol=nlines)
  
  for(i in 1:length(QTL2freq)){
    set.seed(184+k+i)
    genoQTL2[i, ] <- sample(c(0, 2), nlines, prob=c(QTL2freq[i], 1-QTL2freq[i]), replace=T)
  }  
  
  ###Simulate phenotype
  H2 <- 0.4
  ##Genotype matrix
  X1 <- t(genoQTL1)
  X2 <- t(genoQTL2)
  ##Compute interaction matrix
  X1X2 <- matrix(NA, ncol=ncol(X1), nrow=nrow(X1))
  for(i in 1:ncol(X1)){
    for(j in 1:ncol(X2)){
      a <- X1[, i]
      b <- X2[, j]
      if(i==j){X1X2[, i] <- paste(a, b)}
    }
  }
  ##Recode interaction matrix
  for(i in 1:nrow(X1X2)){
    for(j in 1:ncol(X1X2)){
      if(X1X2[i, j]=='0 0'){X1X2[i, j] <- -1}
      if(X1X2[i, j]=='2 2'){X1X2[i, j] <- -1}
      if(X1X2[i, j]=='0 2'){X1X2[i, j] <- 1}
      if(X1X2[i, j]=='2 0'){X1X2[i, j] <- -1}
    }
  }
  ##Transform character to integers
  X1X2int <- matrix(NA, ncol=ncol(X1), nrow=nrow(X1))
  for(i in 1:nrow(X1X2)){
    for(j in 1:ncol(X1X2)){
      X1X2int[i, j] <- as.integer(X1X2[i, j])
    }
  }
  ##Simulate QTL effect
  set.seed(138+k)
  beta <- rgamma(ncol(X1X2), shape=0.4, scale=1.66)
  set.seed(138+k)
  sign <- sample(size=length(beta), x=c(1, -1), replace=T, prob=c(0.5, 0.5))
  beta <- beta * sign
  ##Genetic value of lines
  g <- X1X2int %*% as.matrix(beta, ncol=1)
  ##Calculate res var given genetic var and H2
  varg <- var(g)
  vare <- (varg-(varg*H2))/H2
  ##Simulate random errors
  set.seed(110+k)
  e <- rnorm(nrow(X1X2), mean=0, sd=sqrt(vare))
  
  phenoEpiNoCross <- g + e
  
  if(k == 1){phenoEpiNoCross500Final <- phenoEpiNoCross}
  if(k > 1){phenoEpiNoCross500Final <- cbind(phenoEpiNoCross500Final, phenoEpiNoCross)}
  
  QTL1epiNoCross500Final[[k]] <- genoQTL1
  QTL2epiNoCross500Final[[k]] <- genoQTL2
} 


rm(list=setdiff(ls(), c("p", "q", "nlines", "nreps", "phenoMajorFinal", "QTLmajorFinal", "phenoAdd20Final", "QTLadd20Final", "phenoAdd100Final", "QTLadd100Final", "phenoAdd1000Final", "QTLadd1000Final", 
						"phenoEpiCrossFinal", "QTL1epiCrossFinal", "QTL2epiCrossFinal", "phenoEpiNoCrossFinal", "QTL1epiNoCrossFinal", "QTL2epiNoCrossFinal", "phenoEpiCross500Final", "QTL1epiCross500Final", "QTL2epiCross500Final",
						"phenoEpiNoCross500Final", "QTL1epiNoCross500Final", "QTL2epiNoCross500Final")))
   



##Save the worspace
save.image(file=paste('SimGenoData',nlines,'.RData', sep=''))











