# AssayGroup class
setClass( "AssayGroup", slots = c( biological_replicates = "vector", assay_group_id = "character", assay_group_label = "character" ) )
#####################
# AssayGroup Generics
# assay_group_id getter
setGeneric( "assay_group_id", function( object ) standardGeneric( "assay_group_id" ) )
# biological_replicates getter
setGeneric( "biological_replicates", function( object ) standardGeneric( "biological_replicates" ) )
# assay_names getter
setGeneric( "assay_names", function( object ) standardGeneric( "assay_names" ) )
# assay_group_label getter.
setGeneric( "assay_group_label", function( object ) standardGeneric( "assay_group_label" ) )
####################
# AssayGroup Methods
# constructor
setMethod( "initialize", "AssayGroup", function( .Object, assayGroupNode ) {
# Get all the assay nodes.
assayGroupAssays <- xmlElementsByTagName( assayGroupNode, "assay" )
# Get a vector of biological replicates.
biologicalReplicates <- .create_biological_replicates( assayGroupAssays )
# Get the assay_group element attributes.
assayGroupAttrs <- xmlAttrs( assayGroupNode )
# Get the assay group ID.
assayGroupID <- assayGroupAttrs[[ "id" ]]
# Get the assay group label
assayGroupLabel <- tryCatch(
{
assayGroupAttrs[[ "label" ]]
},
error = function( cond ) {
cat( paste( "Assay group", assayGroupID, "does not have a label\n" ) )
return( NULL )
}
)
# Add everything to the new object.
.Object@biological_replicates <- biologicalReplicates
.Object@assay_group_id <- assayGroupID
if( !is.null( assayGroupLabel ) ) {
.Object@assay_group_label <- assayGroupLabel
}
return( .Object )
})
# Method for biological_replicates getter
setMethod( "biological_replicates", "AssayGroup", function( object ) object@biological_replicates )
# Method for assay_group_id getter
setMethod( "assay_group_id", "AssayGroup", function( object ) object@assay_group_id )
# Method for assay_names getter #FIXME
setMethod( "assay_names", "AssayGroup", function( object ) {
biologicalReplicates <- object@biological_replicates
assayNames <- unlist( sapply( biologicalReplicates, function( biologicalReplicate ) {
biorep_assay_names( biologicalReplicate )
} ) )
assayNames
} )
# Method for assay_group_label getter
setMethod( "assay_group_label", "AssayGroup", function( object ) object@assay_group_label )
######################
# Additional functions
.create_biological_replicates <- function( assayGroupAssays ) {
# Initialise some variables needed later.
bioRepsWithTechReps <- character()
bioRepsWithoutTechReps <- character()
# Get a vector of techincal replicate IDs, if there are any.
technicalReplicateIds <- unique( unlist( sapply( assayGroupAssays, function( assayNode ) {
assayNodeAttrs <- xmlAttrs( assayNode )
assayNodeAttrs[[ "technical_replicate_id" ]]
}
) ) )
# If we found some technical replicates, make BiologicalReplicates for
# them.
if( length( technicalReplicateIds ) > 0 ) {
# First get the assay names for each technical replicate group.
# Use the "simplify = FALSE" setting in sapply() so that the named list
# structure is not lost.
techRepAssays <- sapply( technicalReplicateIds, simplify = FALSE, function( techRepId ) {
techRepAssays <- .find_assays_for_tech_rep_id( assayGroupAssays, techRepId )
})
# Now make a vector of BiologicalReplicate objects.
bioRepsWithTechReps <- unlist( sapply( names( techRepAssays ), function( techRepId ) {
assayNames <- techRepAssays[[ techRepId ]]
biologicalReplicate <- new( "BiologicalReplicate", assayNames, techRepId )
} ) )
}
# Get the names of the assays that are not technical replicates.
noTechRepAssays <- unlist( sapply( assayGroupAssays, function( assayNode ) {
assayNodeAttrs <- xmlAttrs( assayNode )
if( length( assayNodeAttrs ) == 0 ) { xmlValue( assayNode ) }
}
) )
# Now create the BiologicalReplicate objects for the assays that are not
# technical replicates.
bioRepsWithoutTechReps <- sapply( noTechRepAssays, function( assayName ) {
biologicalReplicate <- new( "BiologicalReplicate", assayName )
})
# Return the BiologicalReplicate objects that were created.
return( c( bioRepsWithTechReps, bioRepsWithoutTechReps ) )
}
.find_assays_for_tech_rep_id <- function( assayGroupAssays, tech_rep_id ) {
techRepAssays <- sapply( assayGroupAssays, function( assayNode ) {
assayNodeAttrs <- xmlAttrs( assayNode )
if( length( assayNodeAttrs ) > 0 ) {
if( assayNodeAttrs[[ "technical_replicate_id" ]] == tech_rep_id ) { xmlValue( assayNode ) }
}
})
return( unlist( techRepAssays ) )
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.