####################################################################
## Author: Gro Nilsen, Knut Liestøl and Ole Christian Lingjærde.
## Maintainer: Gro Nilsen <gronilse@ifi.uio.no>
## License: Artistic 2.0
## Part of the copynumber package
## Reference: Nilsen and Liestøl et al. (2012), BMC Genomics
####################################################################
###Function that checks plot input; and retrieves and returns necessary information
###Input:
### data: data.frame or matrix with observed copy numbers; chrom in col 1, pos in col 2 and copy numbers in remaining columns
### segments: segmentation results on either uniseg or multiseg format
### winsoutliers: outlier statuses from winsorization; same number of columns and rows as data
### type: type of plot; "sample","genome" or "chromosome"
### xaxis: "index" eller "pos"
### pos.unit: "bp","kbp", "mbp"
### sample: the sample numbers to be plotted
### chrom: chromosomes to be plotted (NB: if type=genome -> chrom=NULL)
### Output:
### data: checked data with numeric chromosomes in column 1
### segments: checked and modified segments according to checkSegments
### sampleID: a character vector with picked out sampleIDs to be plotted
### chrom: a vector with checked and picked out chromosomes to be plotted
##Required by:
### plotAllele
### plotChrom
### plotGenome
### plotSample
##Requires:
### checkChrom
### checkSegments
### checkWinsoutliers
### numericChrom
### pullOutContent
checkAndRetrievePlotInput <- function(data,segments,winsoutliers,type,xaxis,pos.unit,sample,chrom=NULL){
if(type=="aspcf"){
logR <- data$logR
BAF <- data$BAF
#Check that at least one of of logR, BAF and segments has been specified
if(all(sapply(list(logR,BAF,segments),is.null))){
stop("Arguments 'logR' and 'BAF', or 'segments', must be specified!",call.=FALSE)
}
if((is.null(logR)&&!is.null(BAF))||(is.null(BAF)&&!is.null(logR))){
stop("'BAF' must be specified if 'logR' is specified, and vice versa",call.=FALSE)
}
if(!is.null(logR)){
#logR and BAF could possibly have been winsorized: make sure it is a data frame:
logR <- pullOutContent(logR,what="wins.data")
BAF <- pullOutContent(BAF,what="wins.data")
#Check dimensions of logR and BAF:
stopifnot(ncol(logR)>=3)
stopifnot(ncol(logR)==ncol(BAF),nrow(logR)==nrow(BAF))
}
data <- logR
}else{
#Check that at least of of data and segments has been specified
if(is.null(data)&&is.null(segments)){
stop("One of the arguments 'data' and 'segments' must be specified!",call.=FALSE)
}
}
#Check and retrieve data input:
if(!is.null(data)){
#data could possibly come from winsorize, make sure to pull out wins.data data frame
data <- pullOutContent(data,what="wins.data")
stopifnot(ncol(data)>=3) #something is missing in input data
#Make sure chromosomes are numeric:
data[,1] <- numericChrom(data[,1])
#Check winsoutliers
if(!is.null(winsoutliers)){
winsoutliers <- checkWinsoutliers(winsoutliers,data)
}
}#endif
#Check, modify and retrieve segments input:
if(!is.null(segments)){
segments <- checkSegments(segments,type)
}#endif
#Check sampleIDs to be plotted (only plot sampleIDs found in both data and segments)
sampleID <- checkSampleID(data,segments,sample)
#Check and if necessary modify chrom to be plotted:
if(type!="genome"){
chrom <- checkChrom(data,segments,chrom)
}
#Check xaxis input:
if(!xaxis %in% c("pos","index")){
stop("xaxis must be one of 'pos' and 'index'",call.=FALSE)
}
#Check that pos.unit has been specified if xaxis="pos"
if(xaxis=="pos"){
#Check pos.unit input:
if(!pos.unit %in% c("bp","kbp","mbp")){
stop("pos.unit must be one of bp, kbp and mbp",call.=FALSE)
}
}
if(type=="aspcf"){
#Return data as list
data <- list(logR=data,BAF=BAF)
}
return(list(data=data,segments=segments,sampleID=sampleID,chrom=chrom,winsoutliers=winsoutliers))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.