From 9c74be988597c99327a9b3b7876b18713c8fc561 Mon Sep 17 00:00:00 2001 From: ardalan <ardalan@install-fai.cn.uni-duesseldorf.de> Date: Tue, 18 Oct 2016 16:22:26 +0200 Subject: [PATCH] new Version Ardalan Habil --- DESCRIPTION | 2 +- NAMESPACE | 6 +- R/readSBMLmod.R | 176 ++- R/sybilSBML.R | 299 ++++ build/vignette.rds | Bin 0 -> 217 bytes inst/doc/sybilSBML.R | 30 + inst/doc/sybilSBML.Rnw | 132 ++ inst/doc/sybilSBML.pdf | Bin 0 -> 134817 bytes man/getSBMLFbcversion.Rd | 44 + man/getSBMLmodAnnotation.Rd | 44 + man/getSBMLmodNotes.Rd | 44 + src/init.c | 4 + src/sybilSBML.c | 2883 +++++++++++++++++++++++++---------- src/sybilSBML.h | 13 + 14 files changed, 2828 insertions(+), 849 deletions(-) create mode 100644 build/vignette.rds create mode 100644 inst/doc/sybilSBML.R create mode 100644 inst/doc/sybilSBML.Rnw create mode 100644 inst/doc/sybilSBML.pdf create mode 100644 man/getSBMLFbcversion.Rd create mode 100644 man/getSBMLmodAnnotation.Rd create mode 100644 man/getSBMLmodNotes.Rd diff --git a/DESCRIPTION b/DESCRIPTION index be7ca6b..fa20d2d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -14,7 +14,7 @@ License: GPL-3 | file LICENSE LazyLoad: yes Collate: generics.R sbmlPtrClass.R sbmlErrorClass.R sybilSBML.R uglyHack.R readSBMLmod.R zzz.R -Packaged: 2014-05-21 07:11:55 UTC; gabriel +Packaged: 2016-10-18 13:31:19 UTC; ardalan Author: C. Jonathan Fritzemeier [cre, ctb], Gabriel Gelius-Dietrich [aut], Deya Alzoubi [ctb] diff --git a/NAMESPACE b/NAMESPACE index 26d265c..09e9dba 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -48,5 +48,9 @@ getSBMLunitDefinitionsList, getSBMLCompartList, getSBMLSpeciesList, getSBMLReactionsList, -readSBMLmod +readSBMLmod, +exportSBML, +getSBMLFbcversion, +getSBMLmodNotes, +getSBMLmodAnnotation ) diff --git a/R/readSBMLmod.R b/R/readSBMLmod.R index e55f7e8..fee51e4 100644 --- a/R/readSBMLmod.R +++ b/R/readSBMLmod.R @@ -247,7 +247,13 @@ parseNotesReact <- function(notes) { gpr <- sub("GENE[_ ]?ASSOCIATION: *", "", fields_str[j]) gene_rule <- sybil:::.parseBoolean(gpr) #print(gene_rule) - } + + }#Ardalan Habil + else if (grepl("GPR[_ ]?ASSOCIATION", fields_str[j])) { + gpr <- sub("GPR[_ ]?ASSOCIATION: *", "", fields_str[j]) + gene_rule <- sybil:::.parseBoolean(gpr) + } + if (charmatch("SUBSYSTEM", fields_str[j], nomatch = -1) != -1) { subSyst <- sub("SUBSYSTEM: *", "", fields_str[j]) subSyst <- sub("^S_", "", subSyst, perl = TRUE) @@ -283,6 +289,14 @@ sbmldoc <- openSBMLfile(filename) message("OK") +# warning if new Version/Level/ +SBMLlevel<- getSBMLlevel(sbmldoc) +SBMLversion<- getSBMLversion(sbmldoc) +FBCversion<-getSBMLFbcversion(sbmldoc) +if(SBMLlevel == 3 && SBMLversion > 1) + warning(paste("No support for Level 3 Version ",SBMLversion)) +if (FBCversion > 2) + warning(paste("No support for Fbc Version ",FBCversion)) #------------------------------------------------------------------------------# # check the model # @@ -380,6 +394,7 @@ if (mdesc == filename) { sybil::mod_desc(mod) <- mdesc + #------------------------------------------------------------------------------# # units # #------------------------------------------------------------------------------# @@ -430,6 +445,7 @@ missingId(metabolitesList) metSpIds <- metabolitesList[["id"]] #nummet <- getSBMLnumSpecies(sbmlmod) + if (isTRUE(bndCond)) { metSpBnd <- metabolitesList[["boundaryCondition"]] met_id_pos <- !metSpBnd @@ -485,12 +501,20 @@ gpr <- character(numreact) hasNotes <- FALSE hasAnnot <- FALSE +#FBC contraints @Ardalan Habil +fbclowbnd<-reactionsList[["fbc_lowbnd"]] +fbcuppbnd<-reactionsList[["fbc_uppbnd"]] +fbcgprRules<-reactionsList[["fbc_gprRules"]] +fbcObjectives<-reactionsList[["fbc_Objectives"]] + for (i in 1 : numreact) { # the notes/annotations field notes <- reactionsList[["notes"]][i] annot <- reactionsList[["annotation"]][i] - + + # Notes und Annotation can be null ( @Ardalan Habil) + if(!is.null( reactionsList[["notes"]])) if (nchar(notes) > 0) { hasNotes <- TRUE @@ -504,7 +528,7 @@ for (i in 1 : numreact) { } else { - + if(!is.null( reactionsList[["annotation"]])) if (nchar(annot) > 0) { hasAnnot <- TRUE pn <- regexpr("Pathway Name: [^<]+", annot, perl = TRUE) @@ -512,7 +536,18 @@ for (i in 1 : numreact) { } } - + + + + fbcgene_rule <- NA + if ( !is.null(fbcgprRules)) + { + fbcgene_rule<- sybil:::.parseBoolean(fbcgprRules[i]) + + genes[[i]] <- fbcgene_rule$gene # list of genes + rules[i] <- fbcgene_rule$rule # rules + gpr[i] <- fbcgprRules[i] + } # Check here if reactants and products lists exist, same for the stoichiometry slot @@ -565,6 +600,16 @@ for (i in 1 : numreact) { # } # the constraints + + #FBC contraints @Ardalan Habil + if ( !is.null(fbclowbnd) && !is.null(fbcuppbnd)) + { + lbnd[i] <- checkupplowbnd(fbclowbnd[i]) + ubnd[i] <- checkupplowbnd(fbcuppbnd[i]) + } + #read from kinetic_law if fbc is empty + else + { parm <- reactionsList[["kinetic_law"]][[i]] if (is.null(parm)) { ubnd[i] <- def_bnd @@ -591,10 +636,16 @@ for (i in 1 : numreact) { # reduced cost? (sbml file) } } - + } + #FBC Objective @Ardalan Habil + if(!is.null(fbcObjectives)) + { + ocof[i]<-as.numeric(fbcObjectives[i]) + } + + } - # ---------------------------------------------------------------------------- # # search for unused metabolites and unused reactions @@ -877,7 +928,7 @@ else { rules <- rules[SKIP_REACTION] gpr <- gpr[SKIP_REACTION] - if (isTRUE(hasNotes)) { + if (isTRUE(hasNotes) || !is.null(fbcgprRules) ) { message("GPR mapping ... ", appendLF = FALSE) #allGenes <- unique(allGenes) @@ -969,6 +1020,56 @@ react_name_tmp <- sub( "\\s+$", "", react_name_tmp, perl = TRUE) sybil::react_name(mod) <- react_name_tmp +#------------------------------------------------------------------------------# +# Reaction Attr @Ardalan # +#------------------------------------------------------------------------------# +# Test for new Slots +if( .hasSlot(mod,"mod_attr") && .hasSlot(mod,"comp_attr") && .hasSlot(mod,"met_attr") && .hasSlot(mod,"react_attr") ) + newSybil<-TRUE +else newSybil<-FALSE + +numreact<-nummet <- sum(SKIP_REACTION) +reactannotation <- reactionsList[["annotation"]][SKIP_REACTION] +reactnotes <- reactionsList[["notes"]][SKIP_REACTION] +if(newSybil) +{ + sybil::react_attr(mod) <-data.frame(row.names=1:numreact) + #Speed optimierung durch notes NULL falls nichts drin steht + + if( !is.null(reactannotation) && length(reactannotation)==numreact )sybil::react_attr(mod)[['annotation']]<-reactannotation + if( !is.null(reactnotes) && length(reactnotes)==numreact )sybil::react_attr(mod)[['notes']]<-reactnotes +} + + +#------------------------------------------------------------------------------# +# Model Attr @Ardalan # +#------------------------------------------------------------------------------# + +modanno<-getSBMLmodAnnotation(sbmlmod) +modnotes<-getSBMLmodNotes(sbmlmod) +if(newSybil) +{ + sybil::mod_attr(mod) <-data.frame(row.names=1) + if(nchar(modanno)>1)sybil::mod_attr(mod)[['annotation']]<-modanno + if(nchar(modnotes)>1)sybil::mod_attr(mod)[['notes']]<-modnotes + +} + +#------------------------------------------------------------------------------# +# compartments Attr @Ardalan # +#------------------------------------------------------------------------------# + +numcom<-length(mod_compart(mod)) +comannotation <- compartmentsList[["annotation"]] +comnotes <- compartmentsList[["notes"]] +if(newSybil) +{ +sybil::comp_attr(mod) <-data.frame(row.names=1:numcom) +if( !is.null(comannotation) && length(comannotation)==numcom )sybil::comp_attr(mod)[['annotation']]<-comannotation +if( !is.null(comnotes) && length(comnotes)==numcom )sybil::comp_attr(mod)[['notes']]<-comnotes + +} + #------------------------------------------------------------------------------# # metabolite id's # #------------------------------------------------------------------------------# @@ -1001,6 +1102,67 @@ met_name_tmp <- sub( "\\s+$", "", met_name_tmp, perl = TRUE) sybil::met_name(mod) <- met_name_tmp +#------------------------------------------------------------------------------# +# metabolite attr @Ardalan Habil # +#------------------------------------------------------------------------------# + +#ChemicalFormula Charge Notes Annotation MetaID @Ardalan Habil + +metformula <- metabolitesList[["chemicalFormula"]][met_id_pos][SKIP_METABOLITE] +metcharge <- metabolitesList[["charge"]][met_id_pos][SKIP_METABOLITE] + +metnotes <- metabolitesList[["notes"]][met_id_pos][SKIP_METABOLITE] +metannotation <- metabolitesList[["annotation"]][met_id_pos][SKIP_METABOLITE] + + +metchargenote<-NULL +metformulanote<-NULL +# check metnotes for Formula and Charge +if( !is.null(metnotes) && length(metnotes==nummet)) +{ + pn <- regexpr("FORMULA: [^<]+", metnotes, perl = TRUE) + metformulanote <- substr(metnotes, (pn+9), pn + ((attr(pn, "match.length"))-1)) + pn <- regexpr("CHARGE: [^<]+", metnotes, perl = TRUE) + metchargenote <- substr(metnotes, (pn+8), pn + ((attr(pn, "match.length"))-1)) + metchargenote <- as.integer(metchargenote) + metchargenote[is.na(metchargenote)] <- 0 +} + + +nummet <- sum(SKIP_METABOLITE) +if(newSybil) +{ + # save attributes to met_attr slot + sybil::met_attr(mod) <-data.frame(row.names=1:nummet) + if( !is.null(metformula) && length(metformula)==nummet) + {sybil::met_attr(mod)[['chemicalFormula']]<-metformula} + else{ + if(length(metformulanote)==nummet) + { if(max(nchar(metformulanote)) >0) + sybil::met_attr(mod)[['chemicalFormula']]<-metformulanote + } + } + if( !is.null(metcharge) && length(metcharge)==nummet && sum(metcharge)!=0) + {sybil::met_attr(mod)[['charge']]<-metcharge} + else{ + if( length(metchargenote)==nummet) + { if(max(nchar(metchargenote)) >0) + sybil::met_attr(mod)[['charge']]<-metchargenote + } + } + if( !is.null(metnotes) && length(metnotes)==nummet)sybil::met_attr(mod)[['notes']]<-metnotes + if( !is.null(metannotation) && length(metannotation)==nummet)sybil::met_attr(mod)[['annotation']]<-metannotation + + # Save boundaryCondition when bndCond=FALSE + if (!isTRUE(bndCond)) { + metBnd <- metabolitesList[["boundaryCondition"]][met_id_pos][SKIP_METABOLITE] + # When all metBnd = False -> metabolite removed by extMetFlag + if( !is.null(metBnd) && length(metBnd)==nummet && !all(metBnd == FALSE) )sybil::met_attr(mod)[['boundaryCondition']]<-metBnd + } + + +} + #------------------------------------------------------------------------------# # check reversibilities # #------------------------------------------------------------------------------# diff --git a/R/sybilSBML.R b/R/sybilSBML.R index c76394e..402200e 100644 --- a/R/sybilSBML.R +++ b/R/sybilSBML.R @@ -124,6 +124,17 @@ getSBMLversion <- function(sbmlf) { return(version) } +#------------------------------------------------------------------------------# + +getSBMLFbcversion <- function(sbmlf) { + + version <- .Call("getSBMLFbcversion", PACKAGE = "sybilSBML", + sbmlPointer(sbmlf) + ) + + return(version) +} + #------------------------------------------------------------------------------# @@ -186,6 +197,28 @@ getSBMLmodName <- function(sbmlm) { return(modn) } +#------------------------------------------------------------------------------# + +getSBMLmodNotes <- function(sbmlm) { + + modnotes <- .Call("getSBMLmodNotes", PACKAGE = "sybilSBML", + sbmlPointer(sbmlm) + ) + + return(modnotes) +} + +#------------------------------------------------------------------------------# + +getSBMLmodAnnotation <- function(sbmlm) { + + modanno <- .Call("getSBMLmodAnnotation", PACKAGE = "sybilSBML", + sbmlPointer(sbmlm) + ) + + return(modanno) +} + #------------------------------------------------------------------------------# @@ -271,6 +304,272 @@ getSBMLReactionsList <- function(sbmlm) { } +#------------------------------------------------------------------------------# +#export mod to SBML +deformatSBMLid <- function(idstr) { + idstr <- gsub("-", "_DASH_", idstr, fixed = TRUE) + idstr <- gsub("(", "_LPAREN_", idstr, fixed = TRUE) + idstr <- gsub(")", "_RPAREN_", idstr, fixed = TRUE) + idstr <- gsub("[", "_", idstr, fixed = TRUE) + idstr <- gsub("]", "", idstr, fixed = TRUE) + idstr <- gsub(",", "_COMMA_", idstr, fixed = TRUE) + idstr <- gsub(".", "_PERIOD_", idstr, fixed = TRUE) + idstr <- gsub("'", "_APOS_", idstr, fixed = TRUE) + idstr <- sub("\\(e\\)$", "_e_", idstr) + idstr <- gsub("-", "_", idstr, fixed = TRUE) + return(idstr) +} + +deformatGene<-function(idstr) { + # idstr <- gsub("and", "&&", idstr, fixed = TRUE) + # idstr <- gsub("or", "||", idstr, fixed = TRUE) + idstr <- gsub("( ", "(", idstr, fixed = TRUE) + idstr <- gsub(" (", "(", idstr, fixed = TRUE) + idstr <- gsub(") ", ")", idstr, fixed = TRUE) + idstr <- gsub(" )", ")", idstr, fixed = TRUE) + idstr <- gsub(":", "_", idstr, fixed = TRUE) + return(idstr) +} + +exportSBML<- function(morg=NULL,level=2,version=4,FbcLevel=0,filename="export.xml",validation=TRUE){ + #morg<-modelorg[["modelorg"]] + if(class(morg)!="modelorg"){ + stop("morg has to be of class modelorg\n") + } + + ###right + if(level==1) + { + # test if Matrix has no double values + if( !all( S(morg) == floor(S(morg))) ) warning("Level 1 does not support double values") + FbcLevel=0 + if(version != 2) + { + warning("just Level 1 Version 2 will be supported") + version=2 + } + }else if (level==2) + { + FbcLevel=0 + if(version >5) + { + warning("Level 2 Version 5 will be supported") + version=5 + } + if(version < 1) + { + warning("Level 2 Version 1 will be supported") + version=1 + } + } + else if (level==3) + { if(FbcLevel >2)FbcLevel=2 + if(version != 1) + { + print("Level 3 Version 1 will be supported") + version=1 + } + + }else { + stop(" Support just for Level 1,2 and 3 \n") + } + + ##All GENES### + allgenes<- unique(unlist(genes(morg))) + allgenes<-allgenes[allgenes != ""] + + + ##EXCHANGE REACTIONS## + ex <- findExchReact(morg) + ex_react<-NULL + if(!is.null(ex)) + { + if(!(all(diag(S(morg)[met_pos(ex), react_pos(ex)])==-1))) + stop("exchange reactions with Scoeff different than -1\n") + ex_react<-as.integer(react_pos(ex)) + } + ### Build wrapper for C Function ##### + + + ##Met Attribute### + com_meta_id<- NULL + met_meta_id<- NULL + com_notes <- NULL + com_annotation<- NULL + met_notes<- NULL + met_anno<- NULL + met_bnd<- NULL + met_charge<-NULL + met_formula<-NULL + + react_notes<-NULL + react_anno<-NULL + + mod_notes<-NULL + mod_anno<-NULL + + #subsystem + # is subsystem Empty + if(length( colnames(subSys(morg)))==1 && colnames(subSys(morg))[1]=="" ) modhasubSys<-FALSE + else modhasubSys<-TRUE + + newsubS<- NULL + + + # TODO ATRRIBUTE NUR LESEN BEI NEUER SYBIL VERSION + + if( .hasSlot(morg,"mod_attr") && .hasSlot(morg,"comp_attr") && .hasSlot(morg,"met_attr") && .hasSlot(morg,"react_attr") ) + newSybil<-TRUE + else newSybil<-FALSE + ### Start newSybil attr + if(newSybil) + { + if("notes" %in% colnames(mod_attr(morg))) mod_notes<-as.character(mod_attr(morg)[['notes']]) + if("annotation" %in% colnames(mod_attr(morg))) mod_annotation<-as.character(mod_attr(morg)[['annotation']]) + + if("notes" %in% colnames(comp_attr(morg))) com_notes<-as.character(as.list((comp_attr(morg)[['notes']]))) + if("annotation" %in% colnames(comp_attr(morg))) com_annotation<-as.character(as.list((comp_attr(morg)[['annotation']]))) + + if("charge" %in% colnames(met_attr(morg))) met_charge<- as.integer(as.list((met_attr(morg)[['charge']]))) + if("chemicalFormula" %in% colnames(met_attr(morg))) met_formula<-as.character(as.list((met_attr(morg)[['chemicalFormula']]))) + if("annotation" %in% colnames(met_attr(morg))) met_anno<-as.character(as.list((met_attr(morg)[['annotation']]))) + if("boundaryCondition" %in% colnames(met_attr(morg))) met_bnd<-as.logical(as.list((met_attr(morg)[['boundaryCondition']]))) + + if("notes" %in% colnames(met_attr(morg))) + { # delete Formular and charge from notes to do + met_notes<-as.character(as.list((met_attr(morg)[['notes']]))) + if (!is.null(met_charge) || !is.null(met_formula)) + { + for ( i in 1:met_num(morg)) + { + + if(nchar(met_notes[i])> 8) + { + # Have Assocation in Notes?yes: replace no: append + + if (regexpr("html:p", met_notes[i], fixed = TRUE) == -1)tag <- "p" + else tag <- "html:p" + + + if (!is.null(met_formula)) + { + haveform<-grepl("FORMULA: [^<]+",met_notes[i]) + #Have Gene if not ->no need to write in FBC2 + if(haveform) + { + if(FbcLevel==0)met_notes[i]<-sub("FORMULA: [^<]+",paste("FORMULA: ",met_formula[i], sep = ""), met_notes[i], perl = TRUE) + else met_notes[i]<-sub(paste("<",tag,">","FORMULA: [^<]+","</",tag,">",sep = ""),"",met_notes[i], perl = TRUE) + } + else if(FbcLevel==0) met_notes[i]<-gsub("</notes>",paste("<",tag,">","FORMULA: ",met_formula[i],"</",tag,">","\n</notes>",sep = ""),met_notes[i]) + } + if (!is.null(met_charge)) + { + havecharge<-grepl("CHARGE: [^<]+",met_notes[i]) + #Have Subsystem + if(havecharge) + { + if(FbcLevel !=0 || (level==2 && version==1 )) + met_notes[i]<-sub(paste("<",tag,">","CHARGE: [^<]+","</",tag,">",sep = ""),"",met_notes[i], perl = TRUE) + else met_notes[i]<-sub("CHARGE: [^<]+",paste("CHARGE: ",met_charge[i], sep = ""), met_notes[i], perl = TRUE) + + + } + else if(FbcLevel==0) if(level!=2 && version!=1) met_notes[i]<-gsub("</notes>",paste("<",tag,">","CHARGE: ",met_charge[i],"</",tag,">","\n</notes>",sep = ""),met_notes[i]) + } + } + } + } + + } + if("annotation" %in% colnames(react_attr(morg))) react_anno<-as.character(as.list((react_attr(morg)[['annotation']]))) + + # Merge Notes with "our" Notes and make sure gpr Rules from gpr + if("notes" %in% colnames(react_attr(morg))) + { + react_notes<-as.character(as.list((react_attr(morg)[['notes']]))) + # using + # SubSystem EXISTIERT nicht colnames(subSys(ec)) + + for ( i in 1:react_num(morg)) + { + # using the for loop + if(modhasubSys)newsubS[i]<- paste(names(which(subSys(morg)[i,])), collapse=", ") + if(nchar(react_notes[i])> 8) + { + # Have Association in Notes? yes: replace no: append + + if (regexpr("html:p", react_notes[i], fixed = TRUE) == -1)tag <- "p" + else tag <- "html:p" + + havegene<-grepl("GENE[_ ]?ASSOCIATION: [^<]+",react_notes[i]) + havesub<-grepl("SUBSYSTEM: [^<]+",react_notes[i]) + + #Have Gene if not ->no need to write in FBC2 + if(havegene) + { + if(FbcLevel==2) react_notes[i]<-sub(paste("<",tag,">","GENE[_ ]?ASSOCIATION: [^<]+","</",tag,">",sep = ""),"",react_notes[i], perl = TRUE) + else react_notes[i]<-sub("GENE[_ ]?ASSOCIATION: [^<]+",paste("GENE_ASSOCIATION: ",gpr(morg)[i], sep = ""), react_notes[i], perl = TRUE) + } + else if(FbcLevel!=2)react_notes[i]<-gsub("</notes>",paste("<",tag,">","GENE_ASSOCIATION: ",gpr(morg)[i],"</",tag,">","\n</notes>",sep = ""),react_notes[i]) + + #Have Subsystem + if(havesub)react_notes[i]<-sub("SUBSYSTEM: [^<]+",paste("SUBSYSTEM: ",newsubS[i], sep = ""), react_notes[i], perl = TRUE) + else if(modhasubSys) react_notes[i]<-gsub("</notes>",paste("<",tag,">","SUBSYSTEM: ",newsubS[i],"</",tag,">","\n</notes>",sep = ""),react_notes[i]) + } + } + } + + + } ####END newSybil attr + + # Subsystem + if(is.null(newsubS) && !(modhasubSys) ) for ( i in 1:react_num(morg)) {newsubS[i]<- paste(names(which(subSys(morg)[i,])), collapse=", ")} + + newmet_id <- paste0("M_", (deformatSBMLid(met_id(morg)))) + #newmet_id <- sub("\\[(\\w)\\]$", "_\\1", newmet_id) # append compartment id, if in postfix with square brkts + + newreact_id <- paste0("R_", deformatSBMLid(react_id(morg))) + newmet_comp<-mod_compart(morg)[met_comp(morg)] + + + success <-.Call("exportSBML", PACKAGE = "sybilSBML", + as.integer(version), + as.integer(level), + as.integer(FbcLevel), + as.character(filename), + SYBIL_SETTINGS("MAXIMUM"), + as.character(mod_desc(morg)), + as.character(mod_name(morg)), + as.character(mod_compart(morg)), + as.character(newmet_id), + as.character(met_name(morg)), + as.character(newmet_comp), + met_formula, + met_charge, + as.character(newreact_id), + as.character(react_name(morg)), + as.logical(react_rev(morg)), + as.numeric(lowbnd(morg)), + as.numeric(uppbnd(morg)), + as.integer(obj_coef(morg)), + as.character(newsubS), + as.character(deformatGene(gpr(morg))), + as.numeric(shrinkMatrix(morg,j=1:react_num(morg))), + mod_notes, + mod_anno, + com_notes, + com_annotation, + met_notes, + met_anno, + met_bnd, + react_notes, + react_anno, + ex_react, + as.character(deformatGene(allgenes)) + ) + return (success) +} + diff --git a/build/vignette.rds b/build/vignette.rds new file mode 100644 index 0000000000000000000000000000000000000000..217b014b3aaa3d2181c33fc96a7045116045540b GIT binary patch literal 217 zcmb2|=3oE==I#ec2?+^F327-Q2}x{5Gg}*3qy@Mc43(L=nbjve(_QCt>I`Sur>_^e zPiebP4&m_dIp^o&AKIWDbm3|!ht64_b735Mo;q3wb0ZwRq-Lp@Px5sr=WJf8;MLI3 z%IT?@9ha1sWjL#@Z2Fa^D|<vHe6WA>OY;BX%!eQR*6N(sZ+ht%c$h8p@S|xnCv$B! zSJ}*RE|IUGu-Qnm`NG|XM7yrvmffFDe@&=+z<Sh)dBP8VmKSoq=R9@XzH5YgC3!B2 UixLd5KXI2~yWj(^<BSXp0Mp1=ApigX literal 0 HcmV?d00001 diff --git a/inst/doc/sybilSBML.R b/inst/doc/sybilSBML.R new file mode 100644 index 0000000..3b366b5 --- /dev/null +++ b/inst/doc/sybilSBML.R @@ -0,0 +1,30 @@ +### R code from vignette source 'sybilSBML.Rnw' +### Encoding: UTF-8 + +################################################### +### code chunk number 1: sybilSBML.Rnw:85-87 (eval = FALSE) +################################################### +## library(sybilSBML) +## model <- readSBMLmod("<model>.xml") + + +################################################### +### code chunk number 2: sybilSBML.Rnw:103-106 +################################################### +library(sybilSBML) +mp <- system.file(package = "sybilSBML", "extdata") +ec_mod <- file.path(mp, "ecoli_core_model.xml") + + +################################################### +### code chunk number 3: sybilSBML.Rnw:109-110 +################################################### +mod <- readSBMLmod(ec_mod, bndCond = FALSE) + + +################################################### +### code chunk number 4: sybilSBML.Rnw:123-124 +################################################### +err <- validateSBMLdocument(ec_mod) + + diff --git a/inst/doc/sybilSBML.Rnw b/inst/doc/sybilSBML.Rnw new file mode 100644 index 0000000..5d11fdf --- /dev/null +++ b/inst/doc/sybilSBML.Rnw @@ -0,0 +1,132 @@ +\documentclass[a4paper,headings=small]{scrartcl} +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{textcomp,lmodern} +\typearea[current]{last} +\usepackage{fixltx2e,mparhack,mathdots} + +\usepackage{natbib} +%\usepackage{hyperref} + +\usepackage{microtype} + +\newcommand{\Comp}[1]{\texttt{#1}} +% bash command prompt +\DeclareRobustCommand{\PROMPTL}{\Comp{\$}} + +% just a bash command +\DeclareRobustCommand{\COML}[1]{% + \small{\PROMPTL\Comp{ #1}} +} +% bash command with quote environment +\DeclareRobustCommand{\COMML}[1]{% + \begin{quote}% + \small{\PROMPTL\Comp{ #1}} + \end{quote} +} + +\addtolength{\skip\footins}{0.5\baselineskip} +\usepackage{fnpos} + + +% \hypersetup{ +% pdftitle = {sybilSBML -- Quick Start}, +% pdfauthor = {Gabriel Gelius-Dietrich}, +% pdfsubject = {SBML support for SyBiL}, +% pdfkeywords = {SBML}, +% pdfborder = {0 0 0}, +% pdfhighlight = {/N} +% } + + +\newcommand{\pkg}[1]{\emph{#1}} +\newcommand{\CRANpkg}[1]{\href{http://CRAN.R-project.org/package=#1}{\pkg{#1}}} +%\newcommand{\pkgname}{\CRANpkg{sybilSBML}} +\newcommand{\pkgname}{\emph{sybilSBML}} +\newcommand{\prgname}[1]{\textsc{#1}} + + +\begin{document} +\title{sybilSBML -- Quick Start} +%\VignetteIndexEntry{Package sybilSBML -- Quick Start} +%\VignettePackage{sybilSBML} +\author{Gabriel Gelius-Dietrich} + +\maketitle + + +\section{Introduction} + +The package \pkgname{} is an addition to package +\pkg{sybil}\footnote{\texttt{http://CRAN.R-project.org/package=sybil}} +providing support for +metabolic networks written in SBML (Systems Biology Markup Language), in +particular those developed by Bernhard \O. Palsson's +lab\footnote{\texttt{http://gcrg.ucsd.edu/}} and those from the BiGG +database\footnote{\texttt{http://bigg.ucsd.edu/}} \citep{Schellenberger:2010fk}. +\nocite{Becker:2007uq,Schellenberger:2011fk} + + +\section{Installation} + +The package \pkgname{} depends on a working installation of +LibSBML \citep{Bornstein:2008uq} available from the SBML +homepage\footnote{\texttt{http://www.sbml.org/}, libSBML version 5.6.0 or higher} +(in particular libraries and header files). +See \Comp{INSTALL} for installation instructions and platform specific details. + + +\section{Usage} + +The package \pkgname{} provides the command \Comp{readSBMLmod()} which reads +SBML formated files and returns instances of class \Comp{modelorg}. + +<<eval=FALSE>>= +library(sybilSBML) +model <- readSBMLmod("<model>.xml") +@ + + +\section{Input files} + +The function \Comp{readSBMLmod()} reads metabolic network models written in +SBML format (Systems Biology Markup Language). Among the models available in +this de-facto standard format are in particular those developed by +Bernhard \O. Palsson's lab. + +The file \Comp{ecoli\_core\_model.xml} (in \Comp{extdata/}) contains an +exemplarily metabolic network written in SBML for the core energy metabolism +of \emph{E.~coli} \citep{Palsson:2006fk,Orth:2010fk}. +The exact location of the file can be retrieved with the \Comp{system.file()} +command: +<<>>= +library(sybilSBML) +mp <- system.file(package = "sybilSBML", "extdata") +ec_mod <- file.path(mp, "ecoli_core_model.xml") +@ +The model can be read in by using the command \Comp{readSBMLmod()}: +<<print=true>>= +mod <- readSBMLmod(ec_mod, bndCond = FALSE) +@ +The metabolite id's of the SBML files are written in the format +\Comp{M\_<metabolite abbreviation>\_<compartment abbreviation>}. The compartment +abbreviation is a one letter abbreviation, e.\,g. \Comp{c} for cytosol. All +metabolites outside the system boundary belong to compartment \Comp{b}. Those +metabolites are transported into or outside the system. As long as they are +mentioned, the network is closed. The function \Comp{readSBMLmod()} will remove +them in order to produce an open network. + +\section{Validation of input files} + +SBML files can be validated by using the command \Comp{validateSBMLdocument()}: +<<>>= +err <- validateSBMLdocument(ec_mod) +@ +The variable \Comp{err} is of class \Comp{sbmlError}, storing error messages +generated by the validation procedure. + +\bibliographystyle{abbrvnat} +\bibliography{sybilSBML} + +\end{document} diff --git a/inst/doc/sybilSBML.pdf b/inst/doc/sybilSBML.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fd54c3f9672b2e542000cb87bca02a4e8f84429a GIT binary patch literal 134817 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 XsVGWK<1#chF)=XaQdM>JcjE#8bmDhj literal 0 HcmV?d00001 diff --git a/man/getSBMLFbcversion.Rd b/man/getSBMLFbcversion.Rd new file mode 100644 index 0000000..326a48c --- /dev/null +++ b/man/getSBMLFbcversion.Rd @@ -0,0 +1,44 @@ +\name{getSBMLFbcversion} +\alias{getSBMLFbcversion} + +\title{ + Get SBML Version +} + +\description{ + Retrieve SBML FBC version of SBML file. +} + +\usage{ + getSBMLversion(sbmlf) +} + +\arguments{ + \item{sbmlf}{ + An object of class \code{\linkS4class{sbmlPtr}} as returned by + \code{\link{openSBMLfile}}. This is basically a pointer to a SBML document. + } +} + +\value{ + A single integer value containing the SBML FBC version of the SBML file. +} + +\references{ + Bornstein, B. J., Keating, S. M., Jouraku, A., and Hucka M. (2008) + LibSBML: An API Library for SBML. \emph{Bioinformatics} \bold{24}, + 880--881. +} + +\author{ + Gabriel Gelius-Dietrich <geliudie@uni-duesseldorf.de> + + Maintainer: Claus Jonathan Fritzemeier <clausjonathan.fritzemeier@uni-duesseldorf.de> +} + + +\seealso{ + \code{\link{openSBMLfile}}, \code{\linkS4class{sbmlPtr}} +} + +\keyword{ IO } diff --git a/man/getSBMLmodAnnotation.Rd b/man/getSBMLmodAnnotation.Rd new file mode 100644 index 0000000..c24372b --- /dev/null +++ b/man/getSBMLmodAnnotation.Rd @@ -0,0 +1,44 @@ +\name{getSBMLmodAnnotation} +\alias{getSBMLmodAnnotation} + +\title{ + Get Model Annotation +} + +\description{ + Retrieve model annotation of a SBML model +} + +\usage{ + getSBMLmodName(sbmlm) +} + +\arguments{ + \item{sbmlm}{ + An object of class \code{\linkS4class{sbmlPtr}} as returned by + \code{\link{getSBMLmodel}}. This is basically a pointer to a SBML model. + } +} + +\value{ + A single character string containing the model annotation of the SBML model. +} + +\references{ + Bornstein, B. J., Keating, S. M., Jouraku, A., and Hucka M. (2008) + LibSBML: An API Library for SBML. \emph{Bioinformatics} \bold{24}, + 880--881. +} + +\author{ + Gabriel Gelius-Dietrich <geliudie@uni-duesseldorf.de> + + Maintainer: Claus Jonathan Fritzemeier <clausjonathan.fritzemeier@uni-duesseldorf.de> +} + + +\seealso{ + \code{\link{getSBMLmodel}}, \code{\linkS4class{sbmlPtr}} +} + +\keyword{ IO } diff --git a/man/getSBMLmodNotes.Rd b/man/getSBMLmodNotes.Rd new file mode 100644 index 0000000..d5843ca --- /dev/null +++ b/man/getSBMLmodNotes.Rd @@ -0,0 +1,44 @@ +\name{getSBMLmodNotes} +\alias{getSBMLmodNotes} + +\title{ + Get Model Note +} + +\description{ + Retrieve model notes of a SBML model +} + +\usage{ + getSBMLmodName(sbmlm) +} + +\arguments{ + \item{sbmlm}{ + An object of class \code{\linkS4class{sbmlPtr}} as returned by + \code{\link{getSBMLmodel}}. This is basically a pointer to a SBML model. + } +} + +\value{ + A single character string containing the model notes of the SBML model. +} + +\references{ + Bornstein, B. J., Keating, S. M., Jouraku, A., and Hucka M. (2008) + LibSBML: An API Library for SBML. \emph{Bioinformatics} \bold{24}, + 880--881. +} + +\author{ + Gabriel Gelius-Dietrich <geliudie@uni-duesseldorf.de> + + Maintainer: Claus Jonathan Fritzemeier <clausjonathan.fritzemeier@uni-duesseldorf.de> +} + + +\seealso{ + \code{\link{getSBMLmodel}}, \code{\linkS4class{sbmlPtr}} +} + +\keyword{ IO } diff --git a/src/init.c b/src/init.c index 59a802a..5632ae6 100644 --- a/src/init.c +++ b/src/init.c @@ -45,6 +45,8 @@ static const R_CallMethodDef callMethods[] = { {"getSBMLmodel", (DL_FUNC) &getSBMLmodel, 2}, {"getSBMLmodId", (DL_FUNC) &getSBMLmodId, 1}, {"getSBMLmodName", (DL_FUNC) &getSBMLmodName, 1}, + {"getSBMLmodNotes", (DL_FUNC) &getSBMLmodNotes, 1}, + {"getSBMLmodAnnotation", (DL_FUNC) &getSBMLmodAnnotation, 1}, {"getSBMLnumCompart", (DL_FUNC) &getSBMLnumCompart, 1}, {"getSBMLnumSpecies", (DL_FUNC) &getSBMLnumSpecies, 1}, {"getSBMLnumReactions", (DL_FUNC) &getSBMLnumReactions, 1}, @@ -52,6 +54,8 @@ static const R_CallMethodDef callMethods[] = { {"getSBMLCompartList", (DL_FUNC) &getSBMLCompartList, 1}, {"getSBMLSpeciesList", (DL_FUNC) &getSBMLSpeciesList, 1}, {"getSBMLReactionsList", (DL_FUNC) &getSBMLReactionsList, 1}, + {"exportSBML", (DL_FUNC) &exportSBML, 33}, + {"getSBMLFbcversion", (DL_FUNC) &getSBMLFbcversion, 1}, {NULL, NULL, 0} }; diff --git a/src/sybilSBML.c b/src/sybilSBML.c index 2c89694..912d752 100644 --- a/src/sybilSBML.c +++ b/src/sybilSBML.c @@ -1,30 +1,63 @@ /* sybilSBML.c - Link to libSBML for sybil. + Link to libSBML for sybil. - Copyright (C) 2010-2013 Gabriel Gelius-Dietrich, Dpt. for Bioinformatics, - Institute for Informatics, Heinrich-Heine-University, Duesseldorf, Germany. - All right reserved. - Email: geliudie@uni-duesseldorf.de - - This file is part of sybilSBML. - - SybilSBML is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - SybilSBML is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with sybilSBML. If not, see <http://www.gnu.org/licenses/>. + Copyright (C) 2010-2013 Gabriel Gelius-Dietrich, Dpt. for Bioinformatics, +Institute for Informatics, Heinrich-Heine-University, Duesseldorf, Germany. +All right reserved. +Email: geliudie@uni-duesseldorf.de + +This file is part of sybilSBML. + +SybilSBML is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +SybilSBML is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with sybilSBML. If not, see <http://www.gnu.org/licenses/>. */ #include "sybilSBML.h" +//new includes @Ardalan Habil +#include <stdlib.h> +#include <string.h> +#include <sbml/xml/XMLTriple.h> +#include <sbml/annotation/CVTerm.h> +#include <sbml/annotation/RDFAnnotationParser.h> +#include <sbml/annotation/ModelHistory.h> +#include <sbml/math/ASTNode.h> +#include <math.h> + +/* FBCv1includes */ + +#include <sbml/extension/SBMLExtensionRegister.h> +#include <sbml/extension/SBMLDocumentPlugin.h> + +#include <sbml/packages/fbc/common/fbcfwd.h> + +/* FBC PLUGINS*/ +#include <sbml/packages/fbc/extension/FbcSBMLDocumentPlugin.h> +#include <sbml/packages/fbc/extension/FbcModelPlugin.h> +#include <sbml/packages/fbc/extension/FbcReactionPlugin.h> +#include <sbml/packages/fbc/extension/FbcSpeciesPlugin.h> + +#include <sbml/packages/fbc/sbml/FluxBound.h> +#include <sbml/packages/fbc/sbml/Objective.h> +#include <sbml/packages/fbc/sbml/FluxObjective.h> +#include <sbml/packages/fbc/sbml/GeneProduct.h> +#include <sbml/packages/fbc/sbml/GeneProductRef.h> +#include <sbml/packages/fbc/sbml/GeneProductAssociation.h> +#include <sbml/packages/fbc/sbml/FbcAssociation.h> +#include <sbml/packages/fbc/sbml/FbcAnd.h> +#include <sbml/packages/fbc/sbml/FbcOr.h> + static SEXP tagSBMLmodel; static SEXP tagSBMLdocument; @@ -37,12 +70,12 @@ static SEXP tagSBMLdocument; /* -------------------------------------------------------------------------- */ /* finalizer for sbml document objects */ static void sbmlDocumentFinalizer (SEXP sbmldoc) { - if (!R_ExternalPtrAddr(sbmldoc)) { - return; - } - else { - delDocument(sbmldoc); - } + if (!R_ExternalPtrAddr(sbmldoc)) { + return; + } + else { + delDocument(sbmldoc); + } } @@ -50,12 +83,12 @@ static void sbmlDocumentFinalizer (SEXP sbmldoc) { /* finalizer for sbml model objects */ /* static void sbmlModelFinalizer (SEXP sbmlmodel) { - if (!R_ExternalPtrAddr(sbmlmodel)) { - return; - } - else { - delModel(sbmlmodel); - } +if (!R_ExternalPtrAddr(sbmlmodel)) { +return; +} +else { +delModel(sbmlmodel); +} } */ @@ -66,53 +99,145 @@ static void sbmlModelFinalizer (SEXP sbmlmodel) { /* check for pointer to sbml document */ SEXP isSBMLdocptr(SEXP ptr) { - - SEXP out = R_NilValue; - - if ( (TYPEOF(ptr) == EXTPTRSXP) && - (R_ExternalPtrTag(ptr) == tagSBMLdocument) ) { - out = Rf_ScalarLogical(1); - } - else { - out = Rf_ScalarLogical(0); - } - - return out; + + SEXP out = R_NilValue; + + if ( (TYPEOF(ptr) == EXTPTRSXP) && + (R_ExternalPtrTag(ptr) == tagSBMLdocument) ) { + out = Rf_ScalarLogical(1); + } + else { + out = Rf_ScalarLogical(0); + } + + return out; } /* check for pointer to sbml model */ SEXP isSBMLmodptr(SEXP ptr) { - - SEXP out = R_NilValue; - - if ( (TYPEOF(ptr) == EXTPTRSXP) && - (R_ExternalPtrTag(ptr) == tagSBMLmodel) ) { - out = Rf_ScalarLogical(1); - } - else { - out = Rf_ScalarLogical(0); - } - - return out; + + SEXP out = R_NilValue; + + if ( (TYPEOF(ptr) == EXTPTRSXP) && + (R_ExternalPtrTag(ptr) == tagSBMLmodel) ) { + out = Rf_ScalarLogical(1); + } + else { + out = Rf_ScalarLogical(0); + } + + return out; } /* check for NULL pointer */ SEXP isNULLptr(SEXP ptr) { + + SEXP out = R_NilValue; + + if ( (TYPEOF(ptr) == EXTPTRSXP) && + (R_ExternalPtrAddr(ptr) == NULL) ) { + out = Rf_ScalarLogical(1); + } + else { + out = Rf_ScalarLogical(0); + } + + return out; +} - SEXP out = R_NilValue; - if ( (TYPEOF(ptr) == EXTPTRSXP) && - (R_ExternalPtrAddr(ptr) == NULL) ) { - out = Rf_ScalarLogical(1); - } - else { - out = Rf_ScalarLogical(0); - } +/* -------------------------------------------------------------------------- */ +/* Helper functions */ +/* -------------------------------------------------------------------------- */ - return out; + +// append two string +char * append_strings(const char * old, const char * new, const char* delim) +{ + // find the size of the string to allocate + size_t len = strlen(old) + strlen(new) + strlen(delim) + 1; + + // allocate a pointer to the new string + char *out = malloc(len); + + // concat both strings and return + sprintf(out, "%s%s%s", old, delim , new); + + return out; } + +// Parse Anntatation to modelorg +const char* parseAnnotationTomorg(XMLNode_t* xml) +{ + const XMLNode_t* rdf =NULL; + const XMLNode_t* desc = NULL; + rdf = XMLNode_getChildForName(xml,"RDF"); + if(rdf !=NULL) desc= XMLNode_getChildForName(rdf,"Description"); + const char* annoString = ""; + int firstelement=1; + if (desc!=NULL) + { + + int num=0; + for(num=0;num<XMLNode_getNumChildren(desc);num++) + { + const char* pref= XMLNode_getPrefix(XMLNode_getChild(desc,num)); + + if( strcmp(pref,"bqbiol")==0 || strcmp(pref,"bqmodel")==0 ) + { + CVTerm_t* cv= CVTerm_createFromNode(XMLNode_getChild(desc,num)); + if( CVTerm_getNumResources(cv)>0 ) + { + int numR=0; + if(strcmp(pref,"bqbiol")==0) + { + const char* bioQual = append_strings("bqbiol",BiolQualifierType_toString( CVTerm_getBiologicalQualifierType(cv)),"_"); + if(firstelement==0) annoString = append_strings(annoString,bioQual,";"); + else + { + annoString = append_strings(annoString,bioQual,""); + firstelement=0; + } + + } + if(strcmp(pref,"bqmodel")==0) + { + const char* modQual = append_strings("bqmodel",ModelQualifierType_toString( CVTerm_getModelQualifierType(cv)),"_"); + if(firstelement==0)annoString = append_strings(annoString,modQual,";"); + + else + { + annoString = append_strings(annoString,modQual,""); + firstelement=0; + } + } + + for(numR=0;numR<CVTerm_getNumResources(cv);numR++) + { + // sprintf(annoString+strlen(annoString),"__%s", CVTerm_getResourceURI(cv,numR)); + annoString = append_strings(annoString,CVTerm_getResourceURI(cv,numR),";"); + } + + } + } + + + } + return annoString; + } + else + { + return ""; + } + + + return ""; +} + + + /* -------------------------------------------------------------------------- */ /* API-Functions */ /* -------------------------------------------------------------------------- */ @@ -120,299 +245,326 @@ SEXP isNULLptr(SEXP ptr) { /* -------------------------------------------------------------------------- */ /* initialize sybilSBML */ SEXP initSBML(void) { - tagSBMLmodel = Rf_install("TYPE_SBML_MODEL"); - tagSBMLdocument = Rf_install("TYPE_SBML_DOCUMENT"); - return R_NilValue; + tagSBMLmodel = Rf_install("TYPE_SBML_MODEL"); + tagSBMLdocument = Rf_install("TYPE_SBML_DOCUMENT"); + return R_NilValue; } /* -------------------------------------------------------------------------- */ /* get libsbml version number (dotted version) */ SEXP getLibSBMLversion() { - - SEXP out = R_NilValue; - - const char *vstr = getLibSBMLDottedVersion(); - - out = Rf_mkString(vstr); - - return out; - + + SEXP out = R_NilValue; + + const char *vstr = getLibSBMLDottedVersion(); + + out = Rf_mkString(vstr); + + return out; + } /* -------------------------------------------------------------------------- */ /* remove sbml document pointer */ SEXP delDocument(SEXP sbmldoc) { - - SEXP out = R_NilValue; - SBMLDocument_t *del = NULL; - - checkDocument(sbmldoc); - - del = R_ExternalPtrAddr(sbmldoc); - - SBMLDocument_free(del); - R_ClearExternalPtr(sbmldoc); - - return out; + + SEXP out = R_NilValue; + SBMLDocument_t *del = NULL; + + checkDocument(sbmldoc); + + del = R_ExternalPtrAddr(sbmldoc); + + SBMLDocument_free(del); + R_ClearExternalPtr(sbmldoc); + + return out; } /* -------------------------------------------------------------------------- */ /* remove model pointer */ SEXP delModel(SEXP sbmlmodel) { - - SEXP out = R_NilValue; - /* Model_t *del = NULL; */ - - checkModel(sbmlmodel); - - /* del = R_ExternalPtrAddr(sbmlmodel); */ - - /* Model_free(del); */ - R_ClearExternalPtr(sbmlmodel); - - return out; + + SEXP out = R_NilValue; + /* Model_t *del = NULL; */ + + checkModel(sbmlmodel); + + /* del = R_ExternalPtrAddr(sbmlmodel); */ + + /* Model_free(del); */ + R_ClearExternalPtr(sbmlmodel); + + return out; } /* -------------------------------------------------------------------------- */ /* read SBML file */ SEXP readSBMLfile(SEXP fname, SEXP ptrtype) { - - SEXP sfext = R_NilValue; - SEXP ptr, class, file; - const char *rfname = CHAR(STRING_ELT(fname, 0)); - - SBMLDocument_t *sbmldoc; - - /* create sbml document pointer */ - PROTECT(ptr = Rf_allocVector(STRSXP, 1)); - SET_STRING_ELT(ptr, 0, STRING_ELT(ptrtype, 0)); - - PROTECT(class = Rf_allocVector(STRSXP, 1)); - SET_STRING_ELT(class, 0, Rf_mkChar("sbml_doc_ptr")); - - PROTECT(file = Rf_allocVector(STRSXP, 1)); - SET_STRING_ELT(file, 0, Rf_mkChar("file_name")); - - /* read the model xml file */ - sbmldoc = readSBML(rfname); - - sfext = R_MakeExternalPtr(sbmldoc, tagSBMLdocument, R_NilValue); - PROTECT(sfext); - R_RegisterCFinalizerEx(sfext, sbmlDocumentFinalizer, TRUE); - Rf_setAttrib(ptr, class, sfext); - Rf_setAttrib(ptr, file, fname); - Rf_classgets(ptr, class); - - UNPROTECT(4); - - return ptr; + + SEXP sfext = R_NilValue; + SEXP ptr, class, file; + const char *rfname = CHAR(STRING_ELT(fname, 0)); + + SBMLDocument_t *sbmldoc; + + /* create sbml document pointer */ + PROTECT(ptr = Rf_allocVector(STRSXP, 1)); + SET_STRING_ELT(ptr, 0, STRING_ELT(ptrtype, 0)); + + PROTECT(class = Rf_allocVector(STRSXP, 1)); + SET_STRING_ELT(class, 0, Rf_mkChar("sbml_doc_ptr")); + + PROTECT(file = Rf_allocVector(STRSXP, 1)); + SET_STRING_ELT(file, 0, Rf_mkChar("file_name")); + + /* read the model xml file */ + sbmldoc = readSBML(rfname); + + sfext = R_MakeExternalPtr(sbmldoc, tagSBMLdocument, R_NilValue); + PROTECT(sfext); + R_RegisterCFinalizerEx(sfext, sbmlDocumentFinalizer, TRUE); + Rf_setAttrib(ptr, class, sfext); + Rf_setAttrib(ptr, file, fname); + Rf_classgets(ptr, class); + + UNPROTECT(4); + + return ptr; } /* -------------------------------------------------------------------------- */ /* get sbml document level */ SEXP getSBMLlevel(SEXP sbmldoc) { - - SEXP out = R_NilValue; - unsigned int level; - - checkDocument(sbmldoc); - - level = SBMLDocument_getLevel(R_ExternalPtrAddr(sbmldoc)); - - out = Rf_ScalarInteger(level); - - return out; + + SEXP out = R_NilValue; + unsigned int level; + + checkDocument(sbmldoc); + + level = SBMLDocument_getLevel(R_ExternalPtrAddr(sbmldoc)); + + out = Rf_ScalarInteger(level); + + return out; } /* -------------------------------------------------------------------------- */ /* get sbml document version */ SEXP getSBMLversion(SEXP sbmldoc) { - - SEXP out = R_NilValue; - unsigned int version; - - checkDocument(sbmldoc); - - version = SBMLDocument_getVersion(R_ExternalPtrAddr(sbmldoc)); - - out = Rf_ScalarInteger(version); - - return out; + + SEXP out = R_NilValue; + unsigned int version; + + checkDocument(sbmldoc); + + version = SBMLDocument_getVersion(R_ExternalPtrAddr(sbmldoc)); + + out = Rf_ScalarInteger(version); + + return out; } /* -------------------------------------------------------------------------- */ -/* validate SBML document */ -SEXP validateDocument(SEXP sbmldoc) { - /* - this is adopted from Michael Lawrence: rsbml - Michael Lawrence (). rsbml: R support for SBML, using libsbml. - R package version 2.18.0. http://www.sbml.org - http://www.bioconductor.org/packages/release/bioc/html/rsbml.html - */ - - SEXP out = R_NilValue; +/* get sbml document FBC version */ +SEXP getSBMLFbcversion(SEXP sbmldoc) { + + SEXP out = R_NilValue; + unsigned int version; + + checkDocument(sbmldoc); + //hierher + SBasePlugin_t * modelPlug= NULL; + modelPlug = SBase_getPlugin((SBase_t *)(R_ExternalPtrAddr(sbmldoc)), "fbc"); + if( modelPlug != NULL) + { + if(strcmp("fbc",SBasePlugin_getPackageName(modelPlug) ) ==0) + version = SBasePlugin_getPackageVersion(modelPlug); + else version=0; + } else version=0; + + out = Rf_ScalarInteger(version); + + return out; +} - unsigned int validation; - - checkDocument(sbmldoc); - /* number or errors logged when reading SBML file */ - validation = SBMLDocument_getNumErrors(R_ExternalPtrAddr(sbmldoc)); - /* number or errors from structural and mathematical tests */ - validation += SBMLDocument_checkConsistency(R_ExternalPtrAddr(sbmldoc)); +/* -------------------------------------------------------------------------- */ - if (validation > 0) { - out = Rf_ScalarLogical(0); - } - else { - out = Rf_ScalarLogical(1); - } - return out; +/* validate SBML document */ +SEXP validateDocument(SEXP sbmldoc) { + + /* + this is adopted from Michael Lawrence: rsbml + Michael Lawrence (). rsbml: R support for SBML, using libsbml. + R package version 2.18.0. http://www.sbml.org + http://www.bioconductor.org/packages/release/bioc/html/rsbml.html + */ + + SEXP out = R_NilValue; + + unsigned int validation; + + checkDocument(sbmldoc); + + /* number or errors logged when reading SBML file */ + validation = SBMLDocument_getNumErrors(R_ExternalPtrAddr(sbmldoc)); + /* number or errors from structural and mathematical tests */ + validation += SBMLDocument_checkConsistency(R_ExternalPtrAddr(sbmldoc)); + + if (validation > 0) { + out = Rf_ScalarLogical(0); + } + else { + out = Rf_ScalarLogical(1); + } + + return out; } /* -------------------------------------------------------------------------- */ /* get SBML errors */ SEXP getSBMLerrors(SEXP sbmldoc) { - + + /* + this is adopted from Michael Lawrence: rsbml + Michael Lawrence (). rsbml: R support for SBML, using libsbml. + R package version 2.18.0. http://www.sbml.org + http://www.bioconductor.org/packages/release/bioc/html/rsbml.html + */ + + SEXP out = R_NilValue; + SEXP listv = R_NilValue; + SEXP info = R_NilValue; + SEXP warn = R_NilValue; + SEXP error = R_NilValue; + SEXP fatal = R_NilValue; + SEXP class = R_NilValue; + SEXP el = R_NilValue; + + XMLError_t *sbml_err; + + unsigned int nprob, i, ind; + int ninfo = 0, nwarn = 0, nerror = 0, nfatal = 0, nunknown = 0; + + checkDocument(sbmldoc); + + nprob = SBMLDocument_getNumErrors(R_ExternalPtrAddr(sbmldoc)); + + /* + Rprintf("Model Errors: %i\n", nprob); + */ + + if (nprob > 0) { + + /* check how many infos, warnings, errors and fatals we have */ + for (i = 0; i < nprob; i++) { + sbml_err = (XMLError_t *) SBMLDocument_getError(R_ExternalPtrAddr(sbmldoc), i); + if (XMLError_isInfo(sbml_err)) { + ninfo++; + } + else if (XMLError_isWarning(sbml_err)) { + nwarn++; + } + else if (XMLError_isError(sbml_err)) { + nerror++; + } + else if (XMLError_isFatal(sbml_err)) { + nfatal++; + } + else { + nunknown++; + } + } + /* - this is adopted from Michael Lawrence: rsbml - Michael Lawrence (). rsbml: R support for SBML, using libsbml. - R package version 2.18.0. http://www.sbml.org - http://www.bioconductor.org/packages/release/bioc/html/rsbml.html + Rprintf("number of infos: %i, warnings: %i, errors: %i, falals: %i, unknowns: %i\n", + ninfo, nwarn, nerror, nfatal, nunknown); */ - SEXP out = R_NilValue; - SEXP listv = R_NilValue; - SEXP info = R_NilValue; - SEXP warn = R_NilValue; - SEXP error = R_NilValue; - SEXP fatal = R_NilValue; - SEXP class = R_NilValue; - SEXP el = R_NilValue; - - XMLError_t *sbml_err; - - unsigned int nprob, i, ind; - int ninfo = 0, nwarn = 0, nerror = 0, nfatal = 0, nunknown = 0; - - checkDocument(sbmldoc); - - nprob = SBMLDocument_getNumErrors(R_ExternalPtrAddr(sbmldoc)); - /* - Rprintf("Model Errors: %i\n", nprob); + out will be a list of four elements: + infos + warnings + errors + fatals + each of them is a list of three elements: + id + line + column + msg */ - - if (nprob > 0) { - - /* check how many infos, warnings, errors and fatals we have */ - for (i = 0; i < nprob; i++) { - sbml_err = (XMLError_t *) SBMLDocument_getError(R_ExternalPtrAddr(sbmldoc), i); - if (XMLError_isInfo(sbml_err)) { - ninfo++; - } - else if (XMLError_isWarning(sbml_err)) { - nwarn++; - } - else if (XMLError_isError(sbml_err)) { - nerror++; - } - else if (XMLError_isFatal(sbml_err)) { - nfatal++; - } - else { - nunknown++; - } - } - - /* - Rprintf("number of infos: %i, warnings: %i, errors: %i, falals: %i, unknowns: %i\n", - ninfo, nwarn, nerror, nfatal, nunknown); - */ - - /* - out will be a list of four elements: - infos - warnings - errors - fatals - each of them is a list of three elements: - id - line - column - msg - */ - - PROTECT(out = Rf_allocVector(VECSXP, 4)); - - /* allocate space for each error list */ - PROTECT(info = Rf_allocVector(VECSXP, ninfo)); - PROTECT(warn = Rf_allocVector(VECSXP, nwarn)); - PROTECT(error = Rf_allocVector(VECSXP, nerror)); - PROTECT(fatal = Rf_allocVector(VECSXP, nfatal)); - - SET_VECTOR_ELT(out, 0, info); - SET_VECTOR_ELT(out, 1, warn); - SET_VECTOR_ELT(out, 2, error); - SET_VECTOR_ELT(out, 3, fatal); - - PROTECT(listv = Rf_allocVector(STRSXP, 4)); - SET_STRING_ELT(listv, 0, Rf_mkChar("infos")); - SET_STRING_ELT(listv, 1, Rf_mkChar("warnings")); - SET_STRING_ELT(listv, 2, Rf_mkChar("errors")); - SET_STRING_ELT(listv, 3, Rf_mkChar("fatals")); - Rf_setAttrib(out, R_NamesSymbol, listv); - - /* get the error messages */ - ninfo = 0, nwarn = 0, nerror = 0, nfatal = 0, nunknown = 0; - for (i = 0; i < nprob; i++) { - sbml_err = (XMLError_t *) SBMLDocument_getError(R_ExternalPtrAddr(sbmldoc), i); - el = R_NilValue; - ind = 0; - if (XMLError_isInfo(sbml_err)) { - ind = ninfo++; - el = info; - } - else if (XMLError_isWarning(sbml_err)) { - ind = nwarn++; - el = warn; - } - else if (XMLError_isError(sbml_err)) { - ind = nerror++; - el = error; - } - else if (XMLError_isFatal(sbml_err)) { - ind = nfatal++; - el = fatal; - } - else { - nunknown++; - } - SET_VECTOR_ELT(el, ind, generateProblemMsg(sbml_err)); - } - - /* make the list to be an instance of 'sbml_error' */ - PROTECT(class = Rf_allocVector(STRSXP, 1)); - SET_STRING_ELT(class, 0, Rf_mkChar("sbml_error")); - Rf_classgets(out, class); - - UNPROTECT(7); - - } /* end if nprob > 0 */ + + PROTECT(out = Rf_allocVector(VECSXP, 4)); + + /* allocate space for each error list */ + PROTECT(info = Rf_allocVector(VECSXP, ninfo)); + PROTECT(warn = Rf_allocVector(VECSXP, nwarn)); + PROTECT(error = Rf_allocVector(VECSXP, nerror)); + PROTECT(fatal = Rf_allocVector(VECSXP, nfatal)); + + SET_VECTOR_ELT(out, 0, info); + SET_VECTOR_ELT(out, 1, warn); + SET_VECTOR_ELT(out, 2, error); + SET_VECTOR_ELT(out, 3, fatal); + + PROTECT(listv = Rf_allocVector(STRSXP, 4)); + SET_STRING_ELT(listv, 0, Rf_mkChar("infos")); + SET_STRING_ELT(listv, 1, Rf_mkChar("warnings")); + SET_STRING_ELT(listv, 2, Rf_mkChar("errors")); + SET_STRING_ELT(listv, 3, Rf_mkChar("fatals")); + Rf_setAttrib(out, R_NamesSymbol, listv); + + /* get the error messages */ + ninfo = 0, nwarn = 0, nerror = 0, nfatal = 0, nunknown = 0; + for (i = 0; i < nprob; i++) { + sbml_err = (XMLError_t *) SBMLDocument_getError(R_ExternalPtrAddr(sbmldoc), i); + el = R_NilValue; + ind = 0; + if (XMLError_isInfo(sbml_err)) { + ind = ninfo++; + el = info; + } + else if (XMLError_isWarning(sbml_err)) { + ind = nwarn++; + el = warn; + } + else if (XMLError_isError(sbml_err)) { + ind = nerror++; + el = error; + } + else if (XMLError_isFatal(sbml_err)) { + ind = nfatal++; + el = fatal; + } + else { + nunknown++; + } + SET_VECTOR_ELT(el, ind, generateProblemMsg(sbml_err)); + } + + /* make the list to be an instance of 'sbml_error' */ + PROTECT(class = Rf_allocVector(STRSXP, 1)); + SET_STRING_ELT(class, 0, Rf_mkChar("sbml_error")); + Rf_classgets(out, class); + + UNPROTECT(7); + + } /* end if nprob > 0 */ else { - out = Rf_ScalarLogical(1); + out = Rf_ScalarLogical(1); } - + return out; } @@ -420,628 +572,1679 @@ SEXP getSBMLerrors(SEXP sbmldoc) { /* -------------------------------------------------------------------------- */ /* get sbml model from sbml document */ SEXP getSBMLmodel(SEXP sbmldoc, SEXP ptrtype) { - - SEXP smext = R_NilValue; - SEXP ptr, class; - - Model_t *sbmlmodel; - - checkDocument(sbmldoc); - - /* create model pointer */ - PROTECT(ptr = Rf_allocVector(STRSXP, 1)); - SET_STRING_ELT(ptr, 0, STRING_ELT(ptrtype, 0)); - - PROTECT(class = Rf_allocVector(STRSXP, 1)); - SET_STRING_ELT(class, 0, Rf_mkChar("sbml_model_ptr")); - - /* get sbml model */ - sbmlmodel = SBMLDocument_getModel(R_ExternalPtrAddr(sbmldoc)); - - smext = R_MakeExternalPtr(sbmlmodel, tagSBMLmodel, R_NilValue); - PROTECT(smext); - /* R_RegisterCFinalizerEx(smext, sbmlModelFinalizer, TRUE); */ - Rf_setAttrib(ptr, class, smext); - Rf_classgets(ptr, class); - - UNPROTECT(3); - - return ptr; + + SEXP smext = R_NilValue; + SEXP ptr, class; + + Model_t *sbmlmodel; + + checkDocument(sbmldoc); + + /* create model pointer */ + PROTECT(ptr = Rf_allocVector(STRSXP, 1)); + SET_STRING_ELT(ptr, 0, STRING_ELT(ptrtype, 0)); + + PROTECT(class = Rf_allocVector(STRSXP, 1)); + SET_STRING_ELT(class, 0, Rf_mkChar("sbml_model_ptr")); + + /* get sbml model */ + sbmlmodel = SBMLDocument_getModel(R_ExternalPtrAddr(sbmldoc)); + + smext = R_MakeExternalPtr(sbmlmodel, tagSBMLmodel, R_NilValue); + PROTECT(smext); + /* R_RegisterCFinalizerEx(smext, sbmlModelFinalizer, TRUE); */ + Rf_setAttrib(ptr, class, smext); + Rf_classgets(ptr, class); + + UNPROTECT(3); + + return ptr; } /* -------------------------------------------------------------------------- */ /* get model id */ SEXP getSBMLmodId(SEXP sbmlmod) { - - SEXP out = R_NilValue; - const char *mid; - - checkModel(sbmlmod); - - if (Model_isSetId(R_ExternalPtrAddr(sbmlmod))) { - mid = Model_getId(R_ExternalPtrAddr(sbmlmod)); - } - else { - mid = "no_id"; - } - - out = Rf_mkString(mid); - - return out; + + SEXP out = R_NilValue; + const char *mid; + + checkModel(sbmlmod); + + if (Model_isSetId(R_ExternalPtrAddr(sbmlmod))) { + mid = Model_getId(R_ExternalPtrAddr(sbmlmod)); + } + else { + mid = "no_id"; + } + + out = Rf_mkString(mid); + + return out; } /* -------------------------------------------------------------------------- */ /* get model name */ SEXP getSBMLmodName(SEXP sbmlmod) { + + SEXP out = R_NilValue; + const char *mnm; + + checkModel(sbmlmod); + + if (Model_isSetName(R_ExternalPtrAddr(sbmlmod))) { + mnm = Model_getName(R_ExternalPtrAddr(sbmlmod)); + } + else { + mnm = ""; + } + + out = Rf_mkString(mnm); + + return out; +} - SEXP out = R_NilValue; - const char *mnm; - - checkModel(sbmlmod); - - if (Model_isSetName(R_ExternalPtrAddr(sbmlmod))) { - mnm = Model_getName(R_ExternalPtrAddr(sbmlmod)); - } - else { - mnm = ""; - } - out = Rf_mkString(mnm); +/* -------------------------------------------------------------------------- */ +/* get model notes */ +SEXP getSBMLmodNotes(SEXP sbmlmod) { + + SEXP out = R_NilValue; + const char *mnotes; + + checkModel(sbmlmod); + + if (SBase_isSetNotes((SBase_t *) R_ExternalPtrAddr(sbmlmod))) { + mnotes = SBase_getNotesString((SBase_t *) R_ExternalPtrAddr(sbmlmod)); + } + else { + mnotes = ""; + } + + out = Rf_mkString(mnotes); + + return out; +} - return out; +/* -------------------------------------------------------------------------- */ +/* get model name */ +SEXP getSBMLmodAnnotation(SEXP sbmlmod) { + + SEXP out = R_NilValue; + const char *manno; + + checkModel(sbmlmod); + + if (SBase_isSetAnnotation((SBase_t *) R_ExternalPtrAddr(sbmlmod))) { + XMLNode_t* xml = RDFAnnotationParser_parseCVTerms((SBase_t *) R_ExternalPtrAddr(sbmlmod)); + manno = parseAnnotationTomorg(xml); + } + else { + manno = ""; + } + + out = Rf_mkString(manno); + + return out; } + /* -------------------------------------------------------------------------- */ /* get number of compartments */ SEXP getSBMLnumCompart(SEXP sbmlmod) { - - SEXP out = R_NilValue; - unsigned int nc; - - checkModel(sbmlmod); - - nc = Model_getNumCompartments(R_ExternalPtrAddr(sbmlmod)); - - out = Rf_ScalarInteger(nc); - - return out; + + SEXP out = R_NilValue; + unsigned int nc; + + checkModel(sbmlmod); + + nc = Model_getNumCompartments(R_ExternalPtrAddr(sbmlmod)); + + out = Rf_ScalarInteger(nc); + + return out; } /* -------------------------------------------------------------------------- */ /* get number of species (metabolites) */ SEXP getSBMLnumSpecies(SEXP sbmlmod) { - - SEXP out = R_NilValue; - unsigned int nsp; - - checkModel(sbmlmod); - - nsp = Model_getNumSpecies(R_ExternalPtrAddr(sbmlmod)); - - out = Rf_ScalarInteger(nsp); - - return out; + + SEXP out = R_NilValue; + unsigned int nsp; + + checkModel(sbmlmod); + + nsp = Model_getNumSpecies(R_ExternalPtrAddr(sbmlmod)); + + out = Rf_ScalarInteger(nsp); + + return out; } /* -------------------------------------------------------------------------- */ /* get number of reactions */ SEXP getSBMLnumReactions(SEXP sbmlmod) { - - SEXP out = R_NilValue; - unsigned int nr; - - checkModel(sbmlmod); - - nr = Model_getNumReactions(R_ExternalPtrAddr(sbmlmod)); - - out = Rf_ScalarInteger(nr); - - return out; + + SEXP out = R_NilValue; + unsigned int nr; + + checkModel(sbmlmod); + + nr = Model_getNumReactions(R_ExternalPtrAddr(sbmlmod)); + + out = Rf_ScalarInteger(nr); + + return out; } /* -------------------------------------------------------------------------- */ /* get list of unit definitions */ SEXP getSBMLunitDefinitionsList(SEXP sbmlmod) { - - SEXP out = R_NilValue; - SEXP class = R_NilValue; - SEXP unl = R_NilValue; - SEXP listv = R_NilValue; - SEXP listn = R_NilValue; - - SEXP unitdefid = R_NilValue; - SEXP unitdef = R_NilValue; - - SEXP unitkind = R_NilValue; - SEXP unitscale = R_NilValue; - SEXP unitexp = R_NilValue; - SEXP unitmult = R_NilValue; - - unsigned int nud, nu, i, j; - - /* ListOf_t *udl; */ - UnitDefinition_t *udlel; - Unit_t *uel; - - checkModel(sbmlmod); - - /* udl = Model_getListOfUnitDefinitions(R_ExternalPtrAddr(sbmlmod)); */ - nud = Model_getNumUnitDefinitions(R_ExternalPtrAddr(sbmlmod)); - - if (nud > 0) { - PROTECT(unitdefid = Rf_allocVector(STRSXP, nud)); - PROTECT(unitdef = Rf_allocVector(VECSXP, nud)); - for (i = 0; i < nud; i++) { - /* udlel = (UnitDefinition_t *) ListOf_get(udl, i); */ - udlel = Model_getUnitDefinition(R_ExternalPtrAddr(sbmlmod), i); - - /* id and unit */ - if (UnitDefinition_isSetId(udlel)) { - SET_STRING_ELT(unitdefid, i, Rf_mkChar(UnitDefinition_getId(udlel))); - - nu = UnitDefinition_getNumUnits(udlel); + + SEXP out = R_NilValue; + SEXP class = R_NilValue; + SEXP unl = R_NilValue; + SEXP listv = R_NilValue; + SEXP listn = R_NilValue; + + SEXP unitdefid = R_NilValue; + SEXP unitdef = R_NilValue; + + SEXP unitkind = R_NilValue; + SEXP unitscale = R_NilValue; + SEXP unitexp = R_NilValue; + SEXP unitmult = R_NilValue; + + unsigned int nud, nu, i, j; + + /* ListOf_t *udl; */ + UnitDefinition_t *udlel; + Unit_t *uel; + + checkModel(sbmlmod); + + /* udl = Model_getListOfUnitDefinitions(R_ExternalPtrAddr(sbmlmod)); */ + nud = Model_getNumUnitDefinitions(R_ExternalPtrAddr(sbmlmod)); + + if (nud > 0) { + PROTECT(unitdefid = Rf_allocVector(STRSXP, nud)); + PROTECT(unitdef = Rf_allocVector(VECSXP, nud)); + for (i = 0; i < nud; i++) { + /* udlel = (UnitDefinition_t *) ListOf_get(udl, i); */ + udlel = Model_getUnitDefinition(R_ExternalPtrAddr(sbmlmod), i); + + /* id and unit */ + if (UnitDefinition_isSetId(udlel)) { + SET_STRING_ELT(unitdefid, i, Rf_mkChar(UnitDefinition_getId(udlel))); - PROTECT(unitkind = Rf_allocVector(STRSXP, nu)); - PROTECT(unitscale = Rf_allocVector(INTSXP, nu)); - PROTECT(unitexp = Rf_allocVector(INTSXP, nu)); - PROTECT(unitmult = Rf_allocVector(REALSXP, nu)); - - for (j = 0; j < nu; j++) { - uel = UnitDefinition_getUnit(udlel, j); - - /* kind */ - if (Unit_isSetKind(uel)) { - SET_STRING_ELT(unitkind, j, Rf_mkChar(UnitKind_toString(Unit_getKind(uel)))); - } - else { - SET_STRING_ELT(unitkind, j, Rf_mkChar("no_kind")); - } - - /* scale */ - if (Unit_isSetScale(uel)) { - INTEGER(unitscale)[j] = Unit_getScale(uel); - } - else { - INTEGER(unitscale)[j] = 0; - } - - /* exponent */ - if (Unit_isSetExponent(uel)) { - INTEGER(unitexp)[j] = Unit_getExponent(uel); - } - else { - INTEGER(unitexp)[j] = 1; - } - - /* multiplier */ - if (Unit_isSetMultiplier(uel)) { - REAL(unitmult)[j] = Unit_getMultiplier(uel); - } - else { - REAL(unitmult)[j] = 1; - } - - } - - PROTECT(unl = Rf_allocVector(VECSXP, 4)); - SET_VECTOR_ELT(unl, 0, unitkind); - SET_VECTOR_ELT(unl, 1, unitscale); - SET_VECTOR_ELT(unl, 2, unitexp); - SET_VECTOR_ELT(unl, 3, unitmult); - - PROTECT(listn = Rf_allocVector(STRSXP, 4)); - SET_STRING_ELT(listn, 0, Rf_mkChar("kind")); - SET_STRING_ELT(listn, 1, Rf_mkChar("scale")); - SET_STRING_ELT(listn, 2, Rf_mkChar("exponent")); - SET_STRING_ELT(listn, 3, Rf_mkChar("multiplier")); - Rf_setAttrib(unl, R_NamesSymbol, listn); - - SET_VECTOR_ELT(unitdef, i, unl); - - UNPROTECT(6); - - } - else { - SET_STRING_ELT(unitdefid, i, Rf_mkChar("no_id")); - } + nu = UnitDefinition_getNumUnits(udlel); + + PROTECT(unitkind = Rf_allocVector(STRSXP, nu)); + PROTECT(unitscale = Rf_allocVector(INTSXP, nu)); + PROTECT(unitexp = Rf_allocVector(INTSXP, nu)); + PROTECT(unitmult = Rf_allocVector(REALSXP, nu)); + + for (j = 0; j < nu; j++) { + uel = UnitDefinition_getUnit(udlel, j); + + /* kind */ + if (Unit_isSetKind(uel)) { + SET_STRING_ELT(unitkind, j, Rf_mkChar(UnitKind_toString(Unit_getKind(uel)))); + } + else { + SET_STRING_ELT(unitkind, j, Rf_mkChar("no_kind")); + } + + /* scale */ + if (Unit_isSetScale(uel)) { + INTEGER(unitscale)[j] = Unit_getScale(uel); + } + else { + INTEGER(unitscale)[j] = 0; + } + + /* exponent */ + if (Unit_isSetExponent(uel)) { + INTEGER(unitexp)[j] = Unit_getExponent(uel); + } + else { + INTEGER(unitexp)[j] = 1; + } + + /* multiplier */ + if (Unit_isSetMultiplier(uel)) { + REAL(unitmult)[j] = Unit_getMultiplier(uel); + } + else { + REAL(unitmult)[j] = 1; + } + } - - PROTECT(out = Rf_allocVector(VECSXP, 2)); - SET_VECTOR_ELT(out, 0, unitdefid); - SET_VECTOR_ELT(out, 1, unitdef); - - PROTECT(listv = Rf_allocVector(STRSXP, 2)); - SET_STRING_ELT(listv, 0, Rf_mkChar("definition_id")); - SET_STRING_ELT(listv, 1, Rf_mkChar("definition")); - - Rf_setAttrib(out, R_NamesSymbol, listv); - - /* make the list to be an instance of 'unit_definition' */ - PROTECT(class = Rf_allocVector(STRSXP, 1)); - SET_STRING_ELT(class, 0, Rf_mkChar("unit_definition")); - Rf_classgets(out, class); - - UNPROTECT(5); - } - else { - out = R_NilValue; + + PROTECT(unl = Rf_allocVector(VECSXP, 4)); + SET_VECTOR_ELT(unl, 0, unitkind); + SET_VECTOR_ELT(unl, 1, unitscale); + SET_VECTOR_ELT(unl, 2, unitexp); + SET_VECTOR_ELT(unl, 3, unitmult); + + PROTECT(listn = Rf_allocVector(STRSXP, 4)); + SET_STRING_ELT(listn, 0, Rf_mkChar("kind")); + SET_STRING_ELT(listn, 1, Rf_mkChar("scale")); + SET_STRING_ELT(listn, 2, Rf_mkChar("exponent")); + SET_STRING_ELT(listn, 3, Rf_mkChar("multiplier")); + Rf_setAttrib(unl, R_NamesSymbol, listn); + + SET_VECTOR_ELT(unitdef, i, unl); + + UNPROTECT(6); + + } + else { + SET_STRING_ELT(unitdefid, i, Rf_mkChar("no_id")); + } } - - return out; + + PROTECT(out = Rf_allocVector(VECSXP, 2)); + SET_VECTOR_ELT(out, 0, unitdefid); + SET_VECTOR_ELT(out, 1, unitdef); + + PROTECT(listv = Rf_allocVector(STRSXP, 2)); + SET_STRING_ELT(listv, 0, Rf_mkChar("definition_id")); + SET_STRING_ELT(listv, 1, Rf_mkChar("definition")); + + Rf_setAttrib(out, R_NamesSymbol, listv); + + /* make the list to be an instance of 'unit_definition' */ + PROTECT(class = Rf_allocVector(STRSXP, 1)); + SET_STRING_ELT(class, 0, Rf_mkChar("unit_definition")); + Rf_classgets(out, class); + + UNPROTECT(5); + } + else { + out = R_NilValue; + } + + return out; } /* -------------------------------------------------------------------------- */ /* get list of compartments */ SEXP getSBMLCompartList(SEXP sbmlmod) { - - SEXP out = R_NilValue; - SEXP class = R_NilValue; - SEXP listv = R_NilValue; - SEXP compid = R_NilValue; - SEXP compname = R_NilValue; - SEXP compout = R_NilValue; - - unsigned int nc, i; - - /* ListOf_t *cl; */ - Compartment_t *clel; - - checkModel(sbmlmod); - - /* cl = Model_getListOfCompartments(R_ExternalPtrAddr(sbmlmod)); */ - nc = Model_getNumCompartments(R_ExternalPtrAddr(sbmlmod)); + + SEXP out = R_NilValue; + SEXP class = R_NilValue; + SEXP listv = R_NilValue; + SEXP compid = R_NilValue; + SEXP compname = R_NilValue; + SEXP compannot = R_NilValue; + SEXP compnotes = R_NilValue; + SEXP compout = R_NilValue; + + unsigned int nc, i; + + /* ListOf_t *cl; */ + Compartment_t *clel; + + checkModel(sbmlmod); + + /* cl = Model_getListOfCompartments(R_ExternalPtrAddr(sbmlmod)); */ + nc = Model_getNumCompartments(R_ExternalPtrAddr(sbmlmod)); + + if (nc > 0) { + PROTECT(compid = Rf_allocVector(STRSXP, nc)); + PROTECT(compname = Rf_allocVector(STRSXP, nc)); + PROTECT(compannot = Rf_allocVector(STRSXP, nc)); + PROTECT(compnotes = Rf_allocVector(STRSXP, nc)); - if (nc > 0) { - PROTECT(compid = Rf_allocVector(STRSXP, nc)); - PROTECT(compname = Rf_allocVector(STRSXP, nc)); - PROTECT(compout = Rf_allocVector(STRSXP, nc)); - - for (i = 0; i < nc; i++) { - /* clel = (Compartment_t *) ListOf_get(cl, i); */ - clel = Model_getCompartment(R_ExternalPtrAddr(sbmlmod), i); - /* id */ - if (Compartment_isSetId(clel)) { - SET_STRING_ELT(compid, i, Rf_mkChar(Compartment_getId(clel))); - } - else { - SET_STRING_ELT(compid, i, Rf_mkChar("no_id")); - } - /* name */ - if (Compartment_isSetName(clel)) { - SET_STRING_ELT(compname, i, Rf_mkChar(Compartment_getName(clel))); - } - else { - SET_STRING_ELT(compname, i, Rf_mkChar("")); - } - /* outside */ - if (Compartment_isSetOutside(clel)) { - SET_STRING_ELT(compout, i, Rf_mkChar(Compartment_getOutside(clel))); - } - else { - SET_STRING_ELT(compout, i, Rf_mkChar("")); - } - } + // Counter Variables + int annocount=0; + int notescount=0; - PROTECT(out = Rf_allocVector(VECSXP, 3)); - SET_VECTOR_ELT(out, 0, compid); - SET_VECTOR_ELT(out, 1, compname); - SET_VECTOR_ELT(out, 2, compout); - - PROTECT(listv = Rf_allocVector(STRSXP, 3)); - SET_STRING_ELT(listv, 0, Rf_mkChar("id")); - SET_STRING_ELT(listv, 1, Rf_mkChar("name")); - SET_STRING_ELT(listv, 2, Rf_mkChar("outside")); - - Rf_setAttrib(out, R_NamesSymbol, listv); - - /* make the list to be an instance of 'compartments_list' */ - PROTECT(class = Rf_allocVector(STRSXP, 1)); - SET_STRING_ELT(class, 0, Rf_mkChar("compartments_list")); - Rf_classgets(out, class); - - UNPROTECT(6); - } - else { - out = R_NilValue; + PROTECT(compout = Rf_allocVector(STRSXP, nc)); + + for (i = 0; i < nc; i++) { + clel = Model_getCompartment(R_ExternalPtrAddr(sbmlmod), i); + /* id */ + if (Compartment_isSetId(clel)) { + SET_STRING_ELT(compid, i, Rf_mkChar(Compartment_getId(clel))); + } + else { + SET_STRING_ELT(compid, i, Rf_mkChar("no_id")); + } + /* name */ + if (Compartment_isSetName(clel)) { + SET_STRING_ELT(compname, i, Rf_mkChar(Compartment_getName(clel))); + } + else { + SET_STRING_ELT(compname, i, Rf_mkChar("")); + } + /* outside */ + if (Compartment_isSetOutside(clel)) { + SET_STRING_ELT(compout, i, Rf_mkChar(Compartment_getOutside(clel))); + } + else { + SET_STRING_ELT(compout, i, Rf_mkChar("")); + } + + /* NEW INFORMATIONS*/ + /* notes */ + if (SBase_isSetNotes((SBase_t *) clel)) { + SET_STRING_ELT(compnotes, i, Rf_mkChar(SBase_getNotesString((SBase_t *) clel))); + notescount=notescount+1; + } + else { + SET_STRING_ELT(compnotes, i, Rf_mkChar("")); + } + + /* annotation */ + if (SBase_isSetAnnotation((SBase_t *) clel)) { + XMLNode_t* xml = RDFAnnotationParser_parseCVTerms((SBase_t *) clel); + SET_STRING_ELT(compannot, i, Rf_mkChar(parseAnnotationTomorg(xml))); + annocount=annocount+1; + } + else { + SET_STRING_ELT(compannot, i, Rf_mkChar("")); + } + + } - - return out; + + // NULL if empty + if (annocount==0) compannot = R_NilValue; + if (notescount==0) compnotes = R_NilValue; + + PROTECT(out = Rf_allocVector(VECSXP, 5)); + SET_VECTOR_ELT(out, 0, compid); + SET_VECTOR_ELT(out, 1, compname); + SET_VECTOR_ELT(out, 2, compout); + SET_VECTOR_ELT(out, 3, compannot); + SET_VECTOR_ELT(out, 4, compnotes); + + + PROTECT(listv = Rf_allocVector(STRSXP, 5)); + SET_STRING_ELT(listv, 0, Rf_mkChar("id")); + SET_STRING_ELT(listv, 1, Rf_mkChar("name")); + SET_STRING_ELT(listv, 2, Rf_mkChar("outside")); + SET_STRING_ELT(listv, 3, Rf_mkChar("annotation")); + SET_STRING_ELT(listv, 4, Rf_mkChar("notes")); + + + + Rf_setAttrib(out, R_NamesSymbol, listv); + + /* make the list to be an instance of 'compartments_list' */ + PROTECT(class = Rf_allocVector(STRSXP, 1)); + SET_STRING_ELT(class, 0, Rf_mkChar("compartments_list")); + Rf_classgets(out, class); + + UNPROTECT(8); + } + else { + out = R_NilValue; + } + + return out; } - /* -------------------------------------------------------------------------- */ /* get list of species (metabolites) */ SEXP getSBMLSpeciesList(SEXP sbmlmod) { + + SEXP out = R_NilValue; + SEXP class = R_NilValue; + SEXP listv = R_NilValue; + SEXP metid = R_NilValue; + SEXP metname = R_NilValue; + SEXP metcomp = R_NilValue; + SEXP metcharge = R_NilValue; + SEXP metchemic = R_NilValue; + SEXP metbndcnd = R_NilValue; + SEXP metannot = R_NilValue; + SEXP metnotes = R_NilValue; + + unsigned int nsp, i; + + /* ListOf_t *spl; */ + Species_t *splel; + + checkModel(sbmlmod); + + /* spl = Model_getListOfSpecies(R_ExternalPtrAddr(sbmlmod)); */ + nsp = Model_getNumSpecies(R_ExternalPtrAddr(sbmlmod)); + + + if (nsp > 0) { + PROTECT(metid = Rf_allocVector(STRSXP, nsp)); + PROTECT(metname = Rf_allocVector(STRSXP, nsp)); + PROTECT(metcomp = Rf_allocVector(STRSXP, nsp)); + PROTECT(metcharge = Rf_allocVector(INTSXP, nsp)); + PROTECT(metchemic = Rf_allocVector(STRSXP, nsp)); + PROTECT(metbndcnd = Rf_allocVector(LGLSXP, nsp)); + PROTECT(metannot = Rf_allocVector(STRSXP, nsp)); + PROTECT(metnotes = Rf_allocVector(STRSXP, nsp)); + + int chcount=0; + int notescount=0; + int annotcount=0; + + for (i = 0; i < nsp; i++) { + /* splel = (Species_t *) ListOf_get(spl, i); */ + splel = Model_getSpecies(R_ExternalPtrAddr(sbmlmod), i); + /* id */ + if (Species_isSetId(splel)) { + SET_STRING_ELT(metid, i, Rf_mkChar(Species_getId(splel))); + } + else { + SET_STRING_ELT(metid, i, Rf_mkChar("no_id")); + } + /* name */ + if (Species_isSetName(splel)) { + SET_STRING_ELT(metname, i, Rf_mkChar(Species_getName(splel))); + } + else { + SET_STRING_ELT(metname, i, Rf_mkChar("")); + } + /* compartment */ + if (Species_isSetCompartment(splel)) { + SET_STRING_ELT(metcomp, i, Rf_mkChar(Species_getCompartment(splel))); + } + else { + SET_STRING_ELT(metcomp, i, Rf_mkChar("")); + } + /* charge */ + if (Species_isSetCharge(splel)) { + INTEGER(metcharge)[i] = Species_getCharge(splel); + } + else { + INTEGER(metcharge)[i] = 0; + } + /* boundary condition */ + if (Species_isSetBoundaryCondition(splel)) { + LOGICAL(metbndcnd)[i] = Species_getBoundaryCondition(splel); + } + else { + LOGICAL(metbndcnd)[i] = 0; + } + + + + /* notes */ + if (SBase_isSetNotes((SBase_t *) splel)) { + SET_STRING_ELT(metnotes, i, Rf_mkChar(SBase_getNotesString((SBase_t *) splel))); + notescount=notescount+1; + + } + else { + SET_STRING_ELT(metnotes, i, Rf_mkChar("")); + } + + /* annotation */ + if (SBase_isSetAnnotation((SBase_t *) splel)) { + //SET_STRING_ELT(metannot, i, Rf_mkChar(SBase_getAnnotationString((SBase_t *) splel))); + XMLNode_t* xml = RDFAnnotationParser_parseCVTerms((SBase_t *) splel); + annotcount=annotcount+1; + SET_STRING_ELT(metannot, i, Rf_mkChar(parseAnnotationTomorg(xml))); + } + else { + SET_STRING_ELT(metannot, i, Rf_mkChar("")); + } + + + /* FBC PLUGIN @ Ardalan */ + SBasePlugin_t *SpeciesPlug = SBase_getPlugin((SBase_t *)(splel), "fbc"); + + /* FBCcharge */ + if (FbcSpeciesPlugin_isSetCharge(SpeciesPlug)) { + INTEGER(metcharge)[i] = FbcSpeciesPlugin_getCharge(SpeciesPlug); + } + + /* FBC chemicalFormula */ + if (FbcSpeciesPlugin_isSetChemicalFormula(SpeciesPlug)) { + SET_STRING_ELT(metchemic, i, Rf_mkChar(FbcSpeciesPlugin_getChemicalFormula(SpeciesPlug))); + chcount=chcount+1; + } + else { + SET_STRING_ELT(metchemic, i, Rf_mkChar("")); + } + + + } + + // NULL if empty + if (chcount==0) metchemic = R_NilValue; + if (notescount==0) metnotes = R_NilValue; + if (annotcount==0) metannot = R_NilValue; + + PROTECT(out = Rf_allocVector(VECSXP, 8)); + SET_VECTOR_ELT(out, 0, metid); + SET_VECTOR_ELT(out, 1, metname); + SET_VECTOR_ELT(out, 2, metcomp); + SET_VECTOR_ELT(out, 3, metcharge); + SET_VECTOR_ELT(out, 4, metchemic); + SET_VECTOR_ELT(out, 5, metbndcnd); + SET_VECTOR_ELT(out, 6, metannot); + SET_VECTOR_ELT(out, 7, metnotes); + + + PROTECT(listv = Rf_allocVector(STRSXP, 8)); + SET_STRING_ELT(listv, 0, Rf_mkChar("id")); + SET_STRING_ELT(listv, 1, Rf_mkChar("name")); + SET_STRING_ELT(listv, 2, Rf_mkChar("compartment")); + SET_STRING_ELT(listv, 3, Rf_mkChar("charge")); + SET_STRING_ELT(listv, 4, Rf_mkChar("chemicalFormula")); + SET_STRING_ELT(listv, 5, Rf_mkChar("boundaryCondition")); + SET_STRING_ELT(listv, 6, Rf_mkChar("annotation")); + SET_STRING_ELT(listv, 7, Rf_mkChar("notes")); + + + Rf_setAttrib(out, R_NamesSymbol, listv); + + /* make the list to be an instance of 'species_list' */ + PROTECT(class = Rf_allocVector(STRSXP, 1)); + SET_STRING_ELT(class, 0, Rf_mkChar("species_list")); + Rf_classgets(out, class); + + UNPROTECT(11); + } + else { + out = R_NilValue; + } + + return out; +} - SEXP out = R_NilValue; - SEXP class = R_NilValue; - SEXP listv = R_NilValue; - SEXP metid = R_NilValue; - SEXP metname = R_NilValue; - SEXP metcomp = R_NilValue; - SEXP metcharge = R_NilValue; - SEXP metbndcnd = R_NilValue; - - unsigned int nsp, i; - - /* ListOf_t *spl; */ - Species_t *splel; - - checkModel(sbmlmod); - /* spl = Model_getListOfSpecies(R_ExternalPtrAddr(sbmlmod)); */ - nsp = Model_getNumSpecies(R_ExternalPtrAddr(sbmlmod)); +/* -------------------------------------------------------------------------- */ +/* get list of reactions */ +SEXP getSBMLReactionsList(SEXP sbmlmod) { + + SEXP out = R_NilValue; + SEXP class = R_NilValue; + SEXP listv = R_NilValue; + SEXP reactid = R_NilValue; + SEXP reactname = R_NilValue; + SEXP reactrev = R_NilValue; + SEXP reactnotes = R_NilValue; + SEXP reactannot = R_NilValue; + SEXP reactreact = R_NilValue; + SEXP reactprod = R_NilValue; + SEXP reactkl = R_NilValue; + + SEXP parml = R_NilValue; + SEXP parmn = R_NilValue; + SEXP parmid = R_NilValue; + SEXP parmval = R_NilValue; + SEXP parmunit = R_NilValue; + + SEXP fbclb = R_NilValue; //lowerbnd + SEXP fbcup = R_NilValue; //upperbnd + SEXP fbcgene = R_NilValue; //fbc gene Rules + SEXP fbcobj = R_NilValue; // fbc objective + + unsigned int nre, i, j, nreactant, nproduct, nparm; + + /* ListOf_t *rel; */ + Reaction_t *relel; + KineticLaw_t *kl; + Parameter_t *parm; + + checkModel(sbmlmod); + + /* rel = Model_getListOfReactions(R_ExternalPtrAddr(sbmlmod)); */ + nre = Model_getNumReactions(R_ExternalPtrAddr(sbmlmod)); + + if (nre > 0) { + PROTECT(reactid = Rf_allocVector(STRSXP, nre)); + PROTECT(reactname = Rf_allocVector(STRSXP, nre)); + PROTECT(reactrev = Rf_allocVector(LGLSXP, nre)); + PROTECT(reactnotes = Rf_allocVector(STRSXP, nre)); + PROTECT(reactannot = Rf_allocVector(STRSXP, nre)); + PROTECT(reactreact = Rf_allocVector(VECSXP, nre)); + PROTECT(reactprod = Rf_allocVector(VECSXP, nre)); + PROTECT(reactkl = Rf_allocVector(VECSXP, nre)); - if (nsp > 0) { - PROTECT(metid = Rf_allocVector(STRSXP, nsp)); - PROTECT(metname = Rf_allocVector(STRSXP, nsp)); - PROTECT(metcomp = Rf_allocVector(STRSXP, nsp)); - PROTECT(metcharge = Rf_allocVector(INTSXP, nsp)); - PROTECT(metbndcnd = Rf_allocVector(LGLSXP, nsp)); - - for (i = 0; i < nsp; i++) { - /* splel = (Species_t *) ListOf_get(spl, i); */ - splel = Model_getSpecies(R_ExternalPtrAddr(sbmlmod), i); + PROTECT(fbclb = Rf_allocVector(REALSXP, nre)); + PROTECT(fbcup = Rf_allocVector(REALSXP, nre)); + PROTECT(fbcgene = Rf_allocVector(STRSXP , nre)); + PROTECT(fbcobj = Rf_allocVector(REALSXP, nre)); + + + int lbcount=0; + int upcount=0; + int genecount=0; + int objcount=0; + int annocount=0; + int notescount=0; + + /* Help Var for Fbc Objective*/ + double Objcoeff =0; + const char* Objreaction = NULL; + char* objActiv = NULL; + + /* FBC OBJECTIV @Ardalan*/ + Objective_t * objective; + FluxObjective_t * fluxObjective; + SBasePlugin_t * modelPlug= NULL; + + modelPlug = SBase_getPlugin((SBase_t *)(R_ExternalPtrAddr(sbmlmod)), "fbc"); + + // Read the Objectives when FBCPlugin for the model exists + if( modelPlug != NULL) + { + + objActiv = FbcModelPlugin_getActiveObjectiveId(modelPlug); + int ob=0; + if(strcmp(objActiv,"") !=0) + { + for(ob; ob< FbcModelPlugin_getNumObjectives(modelPlug);ob++) + { + objective= FbcModelPlugin_getObjective(modelPlug,ob); + //printf("ObjectiveID: %s \n", Objective_getId(objective) ); + if(strcmp(objActiv,Objective_getId(objective))==0) + { // TODO mehrer FLUXOBJECTIVE; MAXimierung Minimirung? + + // int fob=0; + // for(fob; ob<FbcModelPlugin_getNumObjectives(modelPlug);fob++ ) + // { + fluxObjective= Objective_getFluxObjective(objective,0); + Objreaction= FluxObjective_getReaction(fluxObjective) ; + Objcoeff = FluxObjective_getCoefficient(fluxObjective); + + //printf("ReactionObjectiveID: %s \n", Objreaction); + //printf("Coefficient: %f \n", Objcoeff); + // } + } + + } + + } + + } + + + for (i = 0; i < nre; i++) { + /* relel = (Reaction_t *) ListOf_get(rel, i); */ + relel = Model_getReaction(R_ExternalPtrAddr(sbmlmod), i); + + nreactant = Reaction_getNumReactants(relel); + nproduct = Reaction_getNumProducts(relel); + + /* id */ + if (Reaction_isSetId(relel)) { + SET_STRING_ELT(reactid, i, Rf_mkChar(Reaction_getId(relel))); + } + else { + SET_STRING_ELT(reactid, i, Rf_mkChar("no_id")); + } + /* name */ + if (Reaction_isSetName(relel)) { + SET_STRING_ELT(reactname, i, Rf_mkChar(Reaction_getName(relel))); + } + else { + SET_STRING_ELT(reactname, i, Rf_mkChar("")); + } + /* reversible */ + if (Reaction_isSetReversible(relel)) { + LOGICAL(reactrev)[i] = Reaction_getReversible(relel); + } + else { + LOGICAL(reactrev)[i] = 0; + } + /* notes */ + if (SBase_isSetNotes((SBase_t *) relel)) { + SET_STRING_ELT(reactnotes, i, Rf_mkChar(SBase_getNotesString((SBase_t *) relel))); + notescount=notescount+1; + } + else { + SET_STRING_ELT(reactnotes, i, Rf_mkChar("")); + } + /* annotation */ + if (SBase_isSetAnnotation((SBase_t *) relel)) { + //SET_STRING_ELT(reactannot, i, Rf_mkChar(SBase_getAnnotationString((SBase_t *) relel))); + XMLNode_t* xml = RDFAnnotationParser_parseCVTerms((SBase_t *) relel); + SET_STRING_ELT(reactannot, i, Rf_mkChar(parseAnnotationTomorg(xml))); + annocount=annocount+1; + } + else { + SET_STRING_ELT(reactannot, i, Rf_mkChar("")); + } + + /* FBC LEVEL 2 @Ardalan Habil*/ + + /* ReactionPLugin for FBC 2 */ + SBasePlugin_t *reactionPlug = SBase_getPlugin((SBase_t *)(relel), "fbc"); + + + /* LOWERFLUXBOUND */ + if (FbcReactionPlugin_isSetLowerFluxBound(reactionPlug)) + { + parm = Model_getParameterById(R_ExternalPtrAddr (sbmlmod) ,FbcReactionPlugin_getLowerFluxBound(reactionPlug)); + //printf("LowerFLUXBOUND: %f \n", Parameter_getValue(parm)); + REAL(fbclb)[i] = Parameter_getValue(parm); + lbcount=lbcount+1; + } + else{ + REAL(fbclb)[i] = 0; + } + + /* UPPERFLUXBOUND*/ + if (FbcReactionPlugin_isSetUpperFluxBound(reactionPlug)) + { + parm = Model_getParameterById(R_ExternalPtrAddr (sbmlmod) ,FbcReactionPlugin_getUpperFluxBound(reactionPlug)); + //printf("UPPERFLUXBOUND: %f \n", Parameter_getValue(parm)); + REAL(fbcup)[i] = Parameter_getValue(parm); + upcount=upcount+1; + } + else{ + REAL(fbcup)[i] = 0; + } + + + + /* FBC GENE */ + if( FbcReactionPlugin_isSetGeneProductAssociation(reactionPlug) ) { + GeneProductAssociation_t* gpa = FbcReactionPlugin_getGeneProductAssociation(reactionPlug); + FbcAssociation_t* asso= (FbcAssociation_t*) GeneProductAssociation_getAssociation(gpa); + SET_STRING_ELT(fbcgene, i, Rf_mkChar(FbcAssociation_toInfix(asso))); + //printf("Gene: %s \n", FbcAssociation_toInfix(asso)); + genecount=genecount+1; + } + else { + SET_STRING_ELT(fbcgene, i, Rf_mkChar("")); + } + + /* FBC OBJECTIVES*/ + if (Objreaction != NULL && strcmp(Objreaction , Reaction_getId(relel) )==0) + { + + REAL(fbcobj)[i] = Objcoeff; + objcount=objcount+1; + } + else{ + REAL(fbcobj)[i] = 0; + } + + + /* reactants */ + SET_VECTOR_ELT(reactreact, i, getSpeciesReference(relel, nreactant, 0)); + + /* products */ + SET_VECTOR_ELT(reactprod, i, getSpeciesReference(relel, nproduct, 1)); + + /* kineticLaw */ + if (Reaction_isSetKineticLaw(relel)) { + kl = Reaction_getKineticLaw(relel); + nparm = KineticLaw_getNumParameters(kl); + + if (nparm > 0) { + PROTECT(parmid = Rf_allocVector(STRSXP, nparm)); + PROTECT(parmval = Rf_allocVector(REALSXP, nparm)); + PROTECT(parmunit = Rf_allocVector(STRSXP, nparm)); + + for (j = 0; j < nparm; j++) { + parm = KineticLaw_getParameter(kl, j); + /* id */ - if (Species_isSetId(splel)) { - SET_STRING_ELT(metid, i, Rf_mkChar(Species_getId(splel))); + if (Parameter_isSetId(parm)) { + SET_STRING_ELT(parmid, j, Rf_mkChar(Parameter_getId(parm))); } else { - SET_STRING_ELT(metid, i, Rf_mkChar("no_id")); + SET_STRING_ELT(parmid, j, Rf_mkChar("no_id")); } - /* name */ - if (Species_isSetName(splel)) { - SET_STRING_ELT(metname, i, Rf_mkChar(Species_getName(splel))); + /* value */ + if (Parameter_isSetValue(parm)) { + REAL(parmval)[j] = Parameter_getValue(parm); } else { - SET_STRING_ELT(metname, i, Rf_mkChar("")); + REAL(parmval)[j] = 0; } - /* compartment */ - if (Species_isSetCompartment(splel)) { - SET_STRING_ELT(metcomp, i, Rf_mkChar(Species_getCompartment(splel))); + /* units */ + if (Parameter_isSetUnits(parm)) { + SET_STRING_ELT(parmunit, j, Rf_mkChar(Parameter_getUnits(parm))); } else { - SET_STRING_ELT(metcomp, i, Rf_mkChar("")); - } - /* charge */ - if (Species_isSetCharge(splel)) { - INTEGER(metcharge)[i] = Species_getCharge(splel); - } - else { - INTEGER(metcharge)[i] = 0; - } - /* boundary condition */ - if (Species_isSetBoundaryCondition(splel)) { - LOGICAL(metbndcnd)[i] = Species_getBoundaryCondition(splel); - } - else { - LOGICAL(metbndcnd)[i] = 0; + SET_STRING_ELT(parmunit, j, Rf_mkChar("")); } + } + + PROTECT(parml = Rf_allocVector(VECSXP, 3)); + SET_VECTOR_ELT(parml, 0, parmid); + SET_VECTOR_ELT(parml, 1, parmval); + SET_VECTOR_ELT(parml, 2, parmunit); + + PROTECT(parmn = Rf_allocVector(STRSXP, 3)); + SET_STRING_ELT(parmn, 0, Rf_mkChar("id")); + SET_STRING_ELT(parmn, 1, Rf_mkChar("value")); + SET_STRING_ELT(parmn, 2, Rf_mkChar("units")); + Rf_setAttrib(parml, R_NamesSymbol, parmn); + + UNPROTECT(5); } + else { + parml = R_NilValue; + } + SET_VECTOR_ELT(reactkl, i, parml); + } + else { + SET_VECTOR_ELT(reactkl, i, R_NilValue); + } + + + } - PROTECT(out = Rf_allocVector(VECSXP, 5)); - SET_VECTOR_ELT(out, 0, metid); - SET_VECTOR_ELT(out, 1, metname); - SET_VECTOR_ELT(out, 2, metcomp); - SET_VECTOR_ELT(out, 3, metcharge); - SET_VECTOR_ELT(out, 4, metbndcnd); - - PROTECT(listv = Rf_allocVector(STRSXP, 5)); - SET_STRING_ELT(listv, 0, Rf_mkChar("id")); - SET_STRING_ELT(listv, 1, Rf_mkChar("name")); - SET_STRING_ELT(listv, 2, Rf_mkChar("compartment")); - SET_STRING_ELT(listv, 3, Rf_mkChar("charge")); - SET_STRING_ELT(listv, 4, Rf_mkChar("boundaryCondition")); - - Rf_setAttrib(out, R_NamesSymbol, listv); - - /* make the list to be an instance of 'species_list' */ - PROTECT(class = Rf_allocVector(STRSXP, 1)); - SET_STRING_ELT(class, 0, Rf_mkChar("species_list")); - Rf_classgets(out, class); + // NULL if empty + if(lbcount==0) fbclb = R_NilValue; + if(upcount==0) fbcup = R_NilValue; + if(genecount==0) fbcgene = R_NilValue; + if(objcount==0) fbcobj = R_NilValue; + if(annocount==0) reactannot= R_NilValue; + if(notescount==0) reactnotes= R_NilValue; + + + PROTECT(out = Rf_allocVector(VECSXP, 12)); + SET_VECTOR_ELT(out, 0, reactid); + SET_VECTOR_ELT(out, 1, reactname); + SET_VECTOR_ELT(out, 2, reactrev); + SET_VECTOR_ELT(out, 3, reactnotes); + SET_VECTOR_ELT(out, 4, reactannot); + SET_VECTOR_ELT(out, 5, reactreact); + SET_VECTOR_ELT(out, 6, reactprod); + SET_VECTOR_ELT(out, 7, reactkl); + SET_VECTOR_ELT(out, 8, fbclb); + SET_VECTOR_ELT(out, 9, fbcup); + SET_VECTOR_ELT(out, 10, fbcgene); + SET_VECTOR_ELT(out, 11, fbcobj); + + + PROTECT(listv = Rf_allocVector(STRSXP, 12)); + SET_STRING_ELT(listv, 0, Rf_mkChar("id")); + SET_STRING_ELT(listv, 1, Rf_mkChar("name")); + SET_STRING_ELT(listv, 2, Rf_mkChar("reversible")); + SET_STRING_ELT(listv, 3, Rf_mkChar("notes")); + SET_STRING_ELT(listv, 4, Rf_mkChar("annotation")); + SET_STRING_ELT(listv, 5, Rf_mkChar("reactants")); + SET_STRING_ELT(listv, 6, Rf_mkChar("products")); + SET_STRING_ELT(listv, 7, Rf_mkChar("kinetic_law")); + SET_STRING_ELT(listv, 8, Rf_mkChar("fbc_lowbnd")); + SET_STRING_ELT(listv, 9, Rf_mkChar("fbc_uppbnd")); + SET_STRING_ELT(listv, 10, Rf_mkChar("fbc_gprRules")); + SET_STRING_ELT(listv, 11, Rf_mkChar("fbc_Objectives")); + + Rf_setAttrib(out, R_NamesSymbol, listv); + + /* make the list to be an instance of 'reactions_list' */ + PROTECT(class = Rf_allocVector(STRSXP, 1)); + SET_STRING_ELT(class, 0, Rf_mkChar("reactions_list")); + Rf_classgets(out, class); + + UNPROTECT(15); + } + else { + out = R_NilValue; + } + + return out; +} - UNPROTECT(8); - } - else { - out = R_NilValue; +/* -------------------------------------------------------------------------- */ +/* export SBML*/ + +void ParseModtoAnno (SBase_t* comp , char* Mannocopy) + +{ + + char delimiter[] = ";"; + char *ptr; + ptr = strtok(Mannocopy, delimiter); + char* quali; + CVTerm_t *cv; + int first=0; + + while(ptr != NULL) { + + if(strncmp("bqbiol", ptr, strlen("bqbiol")) == 0) + { + if (first != 0) SBase_addCVTerm((SBase_t*)comp, cv); + + quali = strcpy(&ptr[0],&ptr[7]); + cv = CVTerm_createWithQualifierType(BIOLOGICAL_QUALIFIER); + CVTerm_setBiologicalQualifierTypeByString( cv, (const char*) quali); + first=1; } + else if(strncmp("bqmodel", ptr, strlen("bqmodel")) == 0) + { + if (first != 0) SBase_addCVTerm((SBase_t*)comp, cv); + quali = strcpy(&ptr[0],&ptr[8]); + cv = CVTerm_createWithQualifierType(MODEL_QUALIFIER); + CVTerm_setModelQualifierTypeByString( cv, (const char*) quali); + } + else + { + CVTerm_addResource(cv,ptr ); + } - return out; + // naechsten Abschnitt erstellen + ptr = strtok(NULL, delimiter); + } + SBase_addCVTerm((SBase_t*)comp, cv); + } -/* -------------------------------------------------------------------------- */ -/* get list of reactions */ -SEXP getSBMLReactionsList(SEXP sbmlmod) { - SEXP out = R_NilValue; - SEXP class = R_NilValue; - SEXP listv = R_NilValue; - SEXP reactid = R_NilValue; - SEXP reactname = R_NilValue; - SEXP reactrev = R_NilValue; - SEXP reactnotes = R_NilValue; - SEXP reactannot = R_NilValue; - SEXP reactreact = R_NilValue; - SEXP reactprod = R_NilValue; - SEXP reactkl = R_NilValue; - - SEXP parml = R_NilValue; - SEXP parmn = R_NilValue; - SEXP parmid = R_NilValue; - SEXP parmval = R_NilValue; - SEXP parmunit = R_NilValue; - - unsigned int nre, i, j, nreactant, nproduct, nparm; - - /* ListOf_t *rel; */ - Reaction_t *relel; - KineticLaw_t *kl; - Parameter_t *parm; - - checkModel(sbmlmod); - - /* rel = Model_getListOfReactions(R_ExternalPtrAddr(sbmlmod)); */ - nre = Model_getNumReactions(R_ExternalPtrAddr(sbmlmod)); - - if (nre > 0) { - PROTECT(reactid = Rf_allocVector(STRSXP, nre)); - PROTECT(reactname = Rf_allocVector(STRSXP, nre)); - PROTECT(reactrev = Rf_allocVector(LGLSXP, nre)); - PROTECT(reactnotes = Rf_allocVector(STRSXP, nre)); - PROTECT(reactannot = Rf_allocVector(STRSXP, nre)); - PROTECT(reactreact = Rf_allocVector(VECSXP, nre)); - PROTECT(reactprod = Rf_allocVector(VECSXP, nre)); - PROTECT(reactkl = Rf_allocVector(VECSXP, nre)); - - for (i = 0; i < nre; i++) { - /* relel = (Reaction_t *) ListOf_get(rel, i); */ - relel = Model_getReaction(R_ExternalPtrAddr(sbmlmod), i); - - nreactant = Reaction_getNumReactants(relel); - nproduct = Reaction_getNumProducts(relel); - /* id */ - if (Reaction_isSetId(relel)) { - SET_STRING_ELT(reactid, i, Rf_mkChar(Reaction_getId(relel))); - } - else { - SET_STRING_ELT(reactid, i, Rf_mkChar("no_id")); - } - /* name */ - if (Reaction_isSetName(relel)) { - SET_STRING_ELT(reactname, i, Rf_mkChar(Reaction_getName(relel))); - } - else { - SET_STRING_ELT(reactname, i, Rf_mkChar("")); - } - /* reversible */ - if (Reaction_isSetReversible(relel)) { - LOGICAL(reactrev)[i] = Reaction_getReversible(relel); - } - else { - LOGICAL(reactrev)[i] = 0; - } - /* notes */ - if (SBase_isSetNotes((SBase_t *) relel)) { - SET_STRING_ELT(reactnotes, i, Rf_mkChar(SBase_getNotesString((SBase_t *) relel))); - } - else { - SET_STRING_ELT(reactnotes, i, Rf_mkChar("")); - } - /* annotation */ - if (SBase_isSetAnnotation((SBase_t *) relel)) { - SET_STRING_ELT(reactannot, i, Rf_mkChar(SBase_getAnnotationString((SBase_t *) relel))); - } - else { - SET_STRING_ELT(reactannot, i, Rf_mkChar("")); - } +int writeExampleSBML(SBMLDocument_t* sbmlDoc, const char* filename) +{ + int SBMLok =0; + // SBMLok = validateSBML(sbmlDoc); + int result = writeSBML(sbmlDoc, filename); + + if (result) + { + printf("Wrote file \"%s\"\n", filename); + + return 1; + } + else + { + fprintf(stderr, "Failed to write \"%s\"\n", filename ); + return 0; + } +} - /* reactants */ - SET_VECTOR_ELT(reactreact, i, getSpeciesReference(relel, nreactant, 0)); - - /* products */ - SET_VECTOR_ELT(reactprod, i, getSpeciesReference(relel, nproduct, 1)); - - /* kineticLaw */ - if (Reaction_isSetKineticLaw(relel)) { - kl = Reaction_getKineticLaw(relel); - nparm = KineticLaw_getNumParameters(kl); - - if (nparm > 0) { - PROTECT(parmid = Rf_allocVector(STRSXP, nparm)); - PROTECT(parmval = Rf_allocVector(REALSXP, nparm)); - PROTECT(parmunit = Rf_allocVector(STRSXP, nparm)); - - for (j = 0; j < nparm; j++) { - parm = KineticLaw_getParameter(kl, j); - - /* id */ - if (Parameter_isSetId(parm)) { - SET_STRING_ELT(parmid, j, Rf_mkChar(Parameter_getId(parm))); - } - else { - SET_STRING_ELT(parmid, j, Rf_mkChar("no_id")); - } - /* value */ - if (Parameter_isSetValue(parm)) { - REAL(parmval)[j] = Parameter_getValue(parm); - } - else { - REAL(parmval)[j] = 0; - } - /* units */ - if (Parameter_isSetUnits(parm)) { - SET_STRING_ELT(parmunit, j, Rf_mkChar(Parameter_getUnits(parm))); - } - else { - SET_STRING_ELT(parmunit, j, Rf_mkChar("")); - } - } - - PROTECT(parml = Rf_allocVector(VECSXP, 3)); - SET_VECTOR_ELT(parml, 0, parmid); - SET_VECTOR_ELT(parml, 1, parmval); - SET_VECTOR_ELT(parml, 2, parmunit); - - PROTECT(parmn = Rf_allocVector(STRSXP, 3)); - SET_STRING_ELT(parmn, 0, Rf_mkChar("id")); - SET_STRING_ELT(parmn, 1, Rf_mkChar("value")); - SET_STRING_ELT(parmn, 2, Rf_mkChar("units")); - Rf_setAttrib(parml, R_NamesSymbol, parmn); - - UNPROTECT(5); - } - else { - parml = R_NilValue; - } - SET_VECTOR_ELT(reactkl, i, parml); - } - else { - SET_VECTOR_ELT(reactkl, i, R_NilValue); - } - } +SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybil_max, SEXP mod_desc, SEXP mod_name, SEXP mod_compart, SEXP met_id, SEXP met_name, SEXP met_comp, SEXP met_form,SEXP met_charge, SEXP react_id, SEXP react_name, SEXP react_rev, SEXP lowbnd, SEXP uppbnd, SEXP obj_coef, SEXP subSys, SEXP gpr, SEXP SMatrix, SEXP mod_notes, SEXP mod_anno, SEXP com_notes , SEXP com_anno, SEXP met_notes, SEXP met_anno, SEXP met_bnd , SEXP react_notes, SEXP react_anno, SEXP ex_react, SEXP allgenes) +{ + //Varaibles from R + const char* fname = CHAR(STRING_ELT(filename, 0)); + const char* model_desc = CHAR(STRING_ELT(mod_desc, 0)); + const char* model_name = CHAR(STRING_ELT(mod_name, 0)); + + int SBMLlevel = INTEGER(level)[0]; + int SBMLversion = INTEGER(version)[0]; + int SBMLfbcversion = INTEGER(FbcLevel)[0]; + double sybilmax = REAL(sybil_max)[0]; + double sybilmin = sybilmax*(-1); + + // variable FBC + XMLNamespaces_t * fbc; + SBMLNamespaces_t * sbmlns; + FluxBound_t * fluxBound; + Objective_t * objective; + FluxObjective_t * fluxObjective; + SBMLDocumentPlugin_t * docPlug; + SBasePlugin_t * modelPlug; + SBasePlugin_t *reactionPlug; + SBasePlugin_t *SpeciesPlug ; + + FbcAssociation_t* asso; + + + // Variable inital + + SBMLDocument_t* sbmlDoc; + Model_t* model; + XMLNamespaces_t* xmlns; + + UnitDefinition_t* unitdef; + Unit_t* unit; + + Species_t *sp; + Reaction_t* reaction; + SpeciesReference_t* spr; + Compartment_t* comp; + KineticLaw_t* kl; + Parameter_t* para; + + ASTNode_t* flux; + ASTNode_t* astMath; + ASTNode_t* ast; + char* mathXMLString; + + /*--------------------------------------------------------------------------- + * + * Creates an SBMLDocument object + * + *---------------------------------------------------------------------------*/ + + if (SBMLlevel == 1 || SBMLlevel == 2) + { + sbmlDoc = SBMLDocument_createWithLevelAndVersion(SBMLlevel,SBMLversion); + xmlns = (XMLNamespaces_t*) SBMLDocument_getNamespaces(sbmlDoc); + XMLNamespaces_add(xmlns, "http://www.w3.org/1999/xhtml", "html"); + } + else if(SBMLlevel == 3) + { + if(SBMLfbcversion == 0) + { + sbmlDoc = SBMLDocument_createWithLevelAndVersion(3,1); + xmlns = (XMLNamespaces_t*) SBMLDocument_getNamespaces(sbmlDoc); + XMLNamespaces_add(xmlns, "http://www.w3.org/1999/xhtml", "html"); + + } else { + + /* FBC LEVEL */ + /* get fbc registry entry */ + SBMLExtension_t *sbmlext = SBMLExtensionRegistry_getExtension("fbc"); + + /* create the sbml namespaces object with fbc */ + fbc = XMLNamespaces_create(); + XMLNamespaces_add(fbc, SBMLExtension_getURI(sbmlext, 3, 1, SBMLfbcversion), "fbc"); + + sbmlns = SBMLNamespaces_create(3, 1); + SBMLNamespaces_addNamespaces(sbmlns, fbc); + + + /* create the document */ + sbmlDoc = SBMLDocument_createWithSBMLNamespaces(sbmlns); + + /* XHTML for notes*/ + xmlns = (XMLNamespaces_t*) SBMLDocument_getNamespaces(sbmlDoc); + XMLNamespaces_add(xmlns, "http://www.w3.org/1999/xhtml", "html"); + + /* set the fbc reqd attribute to false */ + docPlug = (SBMLDocumentPlugin_t*)(SBase_getPlugin((SBase_t*)(sbmlDoc), "fbc")); + SBMLDocumentPlugin_setRequired(docPlug, 0); + + } - PROTECT(out = Rf_allocVector(VECSXP, 8)); - SET_VECTOR_ELT(out, 0, reactid); - SET_VECTOR_ELT(out, 1, reactname); - SET_VECTOR_ELT(out, 2, reactrev); - SET_VECTOR_ELT(out, 3, reactnotes); - SET_VECTOR_ELT(out, 4, reactannot); - SET_VECTOR_ELT(out, 5, reactreact); - SET_VECTOR_ELT(out, 6, reactprod); - SET_VECTOR_ELT(out, 7, reactkl); - - PROTECT(listv = Rf_allocVector(STRSXP, 8)); - SET_STRING_ELT(listv, 0, Rf_mkChar("id")); - SET_STRING_ELT(listv, 1, Rf_mkChar("name")); - SET_STRING_ELT(listv, 2, Rf_mkChar("reversible")); - SET_STRING_ELT(listv, 3, Rf_mkChar("notes")); - SET_STRING_ELT(listv, 4, Rf_mkChar("annotation")); - SET_STRING_ELT(listv, 5, Rf_mkChar("reactants")); - SET_STRING_ELT(listv, 6, Rf_mkChar("products")); - SET_STRING_ELT(listv, 7, Rf_mkChar("kinetic_law")); - - Rf_setAttrib(out, R_NamesSymbol, listv); - - /* make the list to be an instance of 'reactions_list' */ - PROTECT(class = Rf_allocVector(STRSXP, 1)); - SET_STRING_ELT(class, 0, Rf_mkChar("reactions_list")); - Rf_classgets(out, class); - - UNPROTECT(11); + } + + + /*--------------------------------------------------------------------------- + * + * Creates a Model object inside the SBMLDocument object. + * + *---------------------------------------------------------------------------*/ + + model = SBMLDocument_createModel(sbmlDoc); + Model_setId(model,model_name); + + // Get a SBasePlugin_t object plugged in the model object. + if(SBMLfbcversion == 2) + { + modelPlug = SBase_getPlugin((SBase_t *)(model), "fbc"); + + // set the fbc strict attribute + FbcModelPlugin_setStrict(modelPlug, 1); + } + + // Model NOTERS + if (!Rf_isNull(mod_notes)) + { + char *Modnotes = (char*) CHAR(STRING_ELT(mod_notes, 0)); + if ((Modnotes != NULL) && (Modnotes[0] != '\0')) + { + //printf("Canno: %s", Cnotes); + SBase_setNotesString((SBase_t*) model , Modnotes); } - else { - out = R_NilValue; + } + + /*Annotation*/ + if (!Rf_isNull(mod_anno) ) + { char *Manno = (char*) CHAR(STRING_ELT(mod_anno, 0)); + if((Manno != NULL) && (Manno[0] != '\0' )) + { + SBase_setMetaId((SBase_t*)reaction,model_name); + char Mannocopy[strlen(Manno)+1]; + strcpy(Mannocopy,Manno); + // PARSING + ParseModtoAnno((SBase_t*)model, Mannocopy); + } - - return out; + } + + /*--------------------------------------------------------------------------- + * + * Creates UnitDefinition objects inside the Model object. + * + *---------------------------------------------------------------------------*/ + + //TO-DO + + + + /*--------------------------------------------------------------------------- + * + * Creates a Compartment object inside the Model object. + * + *---------------------------------------------------------------------------*/ + //compSymbolList = {'c','m','v','x','e','t','g','r','n','p'}; + //compNameList = {'Cytosol','Mitochondria','Vacuole','Peroxisome','Extra-organism','Pool','Golgi Apparatus','Endoplasmic Reticulum','Nucleus','Periplasm'}; + const char *sName; + int i; + int hasBoundary=0; + for (i=0; i<LENGTH(mod_compart); i++) + { + sName = CHAR(STRING_ELT(mod_compart, i)); + comp = Model_createCompartment(model); + Compartment_setId(comp,sName); + Compartment_setConstant(comp,1); + if( strcmp(sName,"BOUNDARY")==0 || strcmp(sName,"Boundary")==0 || strcmp(sName,"boundary")==0 )hasBoundary=1; + + if (!Rf_isNull(com_notes) && Rf_length(com_notes) > 1) + { + char *Cnotes = (char*) CHAR(STRING_ELT(com_notes, i)); + if ((Cnotes != NULL) && (Cnotes[0] != '\0')) + { + //printf("Canno: %s", Cnotes); + SBase_setNotesString((SBase_t*)comp, Cnotes); + } + } + + + if (!Rf_isNull(com_anno) && Rf_length(com_anno) > 1 ) + { char *Manno = (char*) CHAR(STRING_ELT(com_anno, i)); + if((Manno != NULL) && (Manno[0] != '\0' )) + { + SBase_setMetaId((SBase_t*)comp, CHAR(STRING_ELT(mod_compart, i))); + char Mannocopy[strlen(Manno)+1]; + strcpy(Mannocopy,Manno); + ParseModtoAnno((SBase_t*) comp,Mannocopy); + + } + } + + } + + + /* Boundary Compartment */ + if(hasBoundary==0 && Rf_isNull(met_bnd) && Rf_length(met_bnd) <= 1 ) + { + comp = Model_createCompartment(model); + Compartment_setId(comp,"BOUNDARY"); + Compartment_setConstant(comp,1); + } + /*--------------------------------------------------------------------------- + * + * Creates Species objects inside the Model object. + * + *---------------------------------------------------------------------------*/ + for (i=0; i<LENGTH(met_name); i++) + { + + + sp = Model_createSpecies(model); + Species_setId(sp,CHAR(STRING_ELT(met_id, i))); + Species_setName(sp,CHAR(STRING_ELT(met_name, i))); + Species_setCompartment(sp,CHAR(STRING_ELT(met_comp, i))); + Species_setHasOnlySubstanceUnits(sp, 0); + Species_setConstant(sp, 0); + + //Bondary Condition + if (!Rf_isNull(met_bnd) && Rf_length(met_bnd) > 1) Species_setBoundaryCondition(sp, LOGICAL(met_bnd)[i]); + else Species_setBoundaryCondition(sp, 0); + + + int hasNotes=0; + const char* metnote=""; + if (!Rf_isNull(met_form) && Rf_length(met_form) > 1) + { + if (SBMLfbcversion >0) + { + SpeciesPlug = SBase_getPlugin((SBase_t *)(sp), "fbc"); + FbcSpeciesPlugin_setChemicalFormula(SpeciesPlug, CHAR(STRING_ELT(met_form, i))); + } + + else{ + metnote = append_strings(metnote,"<html:p>FORMULA: ",""); + metnote =append_strings(metnote,CHAR(STRING_ELT(met_form, i)),""); + metnote =append_strings(metnote," </html:p>",""); + hasNotes=1; + } + } + + if (!Rf_isNull(met_charge) && Rf_length(met_charge) > 1) + { + if (SBMLfbcversion >0) + { + SpeciesPlug = SBase_getPlugin((SBase_t *)(sp), "fbc"); + FbcSpeciesPlugin_setCharge(SpeciesPlug, INTEGER(met_charge)[i]); + } + else + { + metnote = append_strings(metnote,"<html:p>CHARGE: ",""); + char chint[256]; + sprintf(chint, "%d", INTEGER(met_charge)[i]); + metnote =append_strings(metnote,chint,""); + metnote =append_strings(metnote," </html:p>",""); + hasNotes=1; + } + } + + + if (!Rf_isNull(met_notes) && Rf_length(met_notes) > 1) + { + char *Mnotes = (char*) CHAR(STRING_ELT(met_notes, i)); + if ((Mnotes != NULL) && (Mnotes[0] != '\0')) + { + SBase_setNotesString((SBase_t*)sp, Mnotes); + hasNotes=0; + } + + } + + + if(hasNotes !=0 )SBase_setNotesString((SBase_t*)sp, metnote); + + if (!Rf_isNull(met_anno) && Rf_length(met_anno) > 1 ) + { char *Manno = (char*) CHAR(STRING_ELT(met_anno, i)); + + if((Manno != NULL) && (Manno[0] != '\0' )) + { + //XMLNode_t * xmlannotation= RDFAnnotationParser_createAnnotation(); + //XMLNode_t *rdf=RDFAnnotationParser_createRDFAnnotation(2,4); + //XMLNode_addChild(xmlannotation,(const XMLNode_t*) rdf); + + //char *Mmetaid = (char*) CHAR(STRING_ELT(met_metaid, i)); + SBase_setMetaId((SBase_t*)sp, CHAR(STRING_ELT(met_id, i))); + //SBase_appendAnnotation((SBase_t*)sp, xmlannotation ); + + // COPY STRING + char *Manno = (char*) CHAR(STRING_ELT(met_anno, i)); + char Mannocopy[strlen(Manno)+1]; + strcpy(Mannocopy,Manno); + // PARSING + ParseModtoAnno((SBase_t*)sp, Mannocopy); + + } + } + + + + } + /*--------------------------------------------------------------------------- + * + * Creates Reaction objects inside the Model object. + * + *---------------------------------------------------------------------------*/ + + /* LISTOFGENES + * + */ + if(SBMLfbcversion == 2 && Rf_length(gpr) > 1) + { + if (!Rf_isNull(gpr) && Rf_length(gpr) > 1) + { + modelPlug = SBase_getPlugin((SBase_t *)(model), "fbc"); + GeneProduct_t* gene; + char* genid = malloc( 100 ); + + for (i=0; i<LENGTH(allgenes); i++) + { + GeneProduct_t* gene = GeneProduct_create(3,1,2); + sprintf(genid,"G_%s", CHAR(STRING_ELT(allgenes, i))); + GeneProduct_setId(gene ,genid); + GeneProduct_setLabel(gene ,CHAR(STRING_ELT(allgenes, i))); + FbcModelPlugin_addGeneProduct(modelPlug,gene); + } + free(genid); + } + /* + ListOfParemters + */ + + // create the Parameters + + para = Model_createParameter(model); + Parameter_setId(para, "default_lb"); + Parameter_setConstant(para, 1); + Parameter_setValue(para, sybilmin); + + para = Model_createParameter(model); + Parameter_setId(para, "default_ub"); + Parameter_setConstant(para, 1); + Parameter_setValue(para, sybilmax); + + para = Model_createParameter(model); + Parameter_setId(para, "default_0"); + Parameter_setConstant(para, 1); + Parameter_setValue(para, 0); + + + + // char *genString = malloc( 1000 ); + } + char *subString = malloc( 1000 ); + for (i=0; i<LENGTH(react_name); i++) + { + reaction = Model_createReaction(model); + + Reaction_setId(reaction, CHAR(STRING_ELT(react_id, i))); + Reaction_setName(reaction, CHAR(STRING_ELT(react_name, i))); + Reaction_setReversible(reaction,LOGICAL(react_rev)[i]); + Reaction_setFast(reaction, 0); + + if(SBMLfbcversion == 2) + { + // FBCv2 + reactionPlug = SBase_getPlugin((SBase_t *)(reaction), "fbc"); + GeneProductAssociation_t* gpa = GeneProductAssociation_create(3,1,2); + + // FbcAnd_t * und= FbcAnd_create(3,1,2); + asso= FbcAssociation_parseFbcInfixAssociation(CHAR(STRING_ELT(gpr, i)),modelPlug); + GeneProductAssociation_setAssociation(gpa,asso); + FbcReactionPlugin_setGeneProductAssociation(reactionPlug,gpa); + } + + + + const char* notesString = ""; + + + + if (!Rf_isNull(react_notes) && Rf_length(react_notes) > 1) + { + char *Rnotes = (char*) CHAR(STRING_ELT(react_notes, i)); + if ((Rnotes != NULL) && (Rnotes[0] != '\0')) + { + //printf("Reaction Nores:%s ",Rnotes); + SBase_setNotesString((SBase_t*)reaction, Rnotes); + } + + } + else + { if(SBMLfbcversion == 0) + { + if (!Rf_isNull(gpr) && Rf_length(gpr) > 1) + { + notesString = append_strings(notesString,"<html:p>GENE_ASSOCIATION: ",""); + notesString =append_strings(notesString,CHAR(STRING_ELT(gpr, i)),""); + notesString =append_strings(notesString," </html:p>",""); + } + if (!Rf_isNull(subSys) && Rf_length(subSys) > 1) + { + notesString = append_strings(notesString,"<html:p>SUBSYSTEM: ",""); + notesString =append_strings(notesString,CHAR(STRING_ELT(subSys, i)),""); + notesString =append_strings(notesString," </html:p>",""); + } + //sprintf(subString,"<html:p>GENE_ASSOCIATION: %s </html:p><html:p>SUBSYSTEM: %s </html:p>", CHAR(STRING_ELT(gpr, i)) , CHAR(STRING_ELT(subSys, i))); + SBase_setNotesString((SBase_t*)reaction, notesString); + } + } + + const double *lower_bnd = REAL(lowbnd); + const double *upper_bnd = REAL(uppbnd); + + if(SBMLfbcversion == 0) + { + kl = Reaction_createKineticLaw(reaction); + + astMath = ASTNode_createWithType(AST_NAME); + ASTNode_setName(astMath, "FLUX_VALUE"); + + KineticLaw_setMath( kl, astMath); + + + para = KineticLaw_createParameter( kl ); + Parameter_setId(para, "LOWER_BOUND"); + Parameter_setValue( para, lower_bnd[i]); + //Parameter_setUnits( para, "litre_per_mole_per_second"); + + para = KineticLaw_createParameter( kl ); + Parameter_setId(para, "UPPER_BOUND"); + Parameter_setValue( para, upper_bnd[i]); + //Parameter_setUnits( para, "litre_per_mole_per_second"); + + para = KineticLaw_createParameter( kl ); + Parameter_setId(para, "OBJECTIVE_COEFFICIENT"); + Parameter_setValue( para, INTEGER(obj_coef)[i]); + + para = KineticLaw_createParameter( kl ); + Parameter_setId(para, "FLUX_VALUE"); + Parameter_setValue( para, 0); + } + + //NOTES + + /* + XMLTriple_t *pTripple; + pTripple =XMLTriple_createWith("p",CHAR(STRING_ELT(subSys,i)) , "xhtml"); + XMLAttributes_t* xmlAttr = XMLAttributes_create(); + XMLNode_t* notesXMLNode = XMLNode_createStartElement(pTripple, xmlAttr); + XMLNode_addChild( notesXMLNode, XMLNode_createTextNode("FLUX_VALE:TRUE")); + + + printf(" SUBSYSTEM: %s \n", CHAR(STRING_ELT(subSys,i))); + SBase_setNotes( (SBase_t*) reaction, notesXMLNode); + + + char* notesString = "FLUX_VALUE"; + SBase_setNotesString((SBase_t*)reaction, notesString); + */ + + int isexchange=0; + int k; + if (Rf_isNull(met_bnd) && Rf_length(met_bnd) <= 1 && !Rf_isNull(ex_react)) + for (k=0; k<LENGTH(ex_react); k++) + if( i+1 == INTEGER(ex_react)[k]) + isexchange=1; + + int j=0; + for (j=0; j<LENGTH(met_id); j++) + { + + int hash = LENGTH(met_id) * i + j; + if (REAL(SMatrix)[hash] != 0.00 ) + { + + if(REAL(SMatrix)[hash] < 0.00) + { + spr = Reaction_createReactant(reaction); + SpeciesReference_setConstant(spr, 1); + SpeciesReference_setSpecies(spr,CHAR(STRING_ELT(met_id, j))); + SpeciesReference_setStoichiometry(spr, fabs(REAL(SMatrix)[hash])); + + if(isexchange==1) + { + /* Create boundary Species */ + sp = Model_createSpecies(model); + + Species_setId(sp, append_strings(CHAR(STRING_ELT(met_id, j)),"BOUNDARY","_") ); + Species_setName(sp,append_strings(CHAR(STRING_ELT(met_name, j)),"BOUNDARY"," ") ); + + Species_setCompartment(sp,"BOUNDARY"); + Species_setHasOnlySubstanceUnits(sp, 0); + Species_setBoundaryCondition(sp, 1); + Species_setConstant(sp, 1); + + /* Add boundary Species as Product */ + spr = Reaction_createProduct(reaction); + SpeciesReference_setSpecies(spr,append_strings(CHAR(STRING_ELT(met_id, j)),"BOUNDARY","_") ); + SpeciesReference_setStoichiometry(spr,1); + + SpeciesReference_setConstant(spr, 1); + } + + + }else{ + spr = Reaction_createProduct(reaction); + SpeciesReference_setConstant(spr, 1); + SpeciesReference_setSpecies(spr,CHAR(STRING_ELT(met_id, j))); + SpeciesReference_setStoichiometry(spr, fabs(REAL(SMatrix)[hash])); + } + + } + } + + + + /*Annotation*/ + if (!Rf_isNull(react_anno) && Rf_length(react_anno) > 1 ) + { char *Manno = (char*) CHAR(STRING_ELT(react_anno, i)); + if((Manno != NULL) && (Manno[0] != '\0' )) + { + SBase_setMetaId((SBase_t*)reaction, CHAR(STRING_ELT(react_id, i))); + char Mannocopy[strlen(Manno)+1]; + strcpy(Mannocopy,Manno); + // PARSING + ParseModtoAnno((SBase_t*)reaction, Mannocopy); + + } + } + + + + /* FBC LEVEL 2 */ + if(SBMLfbcversion == 2) + { + // Get a SBasePlugin_t object plugged in the reaction object. + + reactionPlug = SBase_getPlugin((SBase_t *)(reaction), "fbc"); + + const char* para_lb; + const char* para_ub; + + char* newpara = malloc( 100 ); + // sprintf(genid,"G_%s", CHAR(STRING_ELT(allgenes, i))); + // free(genid); + // set the flux bounds for this reaction + + if (lower_bnd[i]<= sybilmin) + { + para_lb="default_lb"; + } + else if (lower_bnd[i] == 0) + { + para_lb="default_0"; + } + else + { + sprintf(newpara,"%s_lower_bound", CHAR(STRING_ELT(react_id, i))); + + para = Model_createParameter(model); + Parameter_setId(para, newpara); + Parameter_setConstant(para, 1); + Parameter_setValue(para, lower_bnd[i]); + + para_lb=newpara; + + } + + if (upper_bnd[i] >= sybilmax) + { + para_ub="default_ub"; + } + + else if (upper_bnd[i] == 0) + { + para_ub="default_0"; + } + + else + { + sprintf(newpara,"%s_upper_bound", CHAR(STRING_ELT(react_id, i))); + + para = Model_createParameter(model); + Parameter_setId(para, newpara); + Parameter_setConstant(para, 1); + Parameter_setValue(para, upper_bnd[i]); + + para_ub=newpara; + } + + // set the flux bounds for this reaction + FbcReactionPlugin_setLowerFluxBound(reactionPlug, para_lb); + FbcReactionPlugin_setUpperFluxBound(reactionPlug, para_ub); + + // OBJECTIVES + if (INTEGER(obj_coef)[i]!=0) + { + objective = Objective_create(3, 1, 2); + Objective_setId(objective, "obj"); + Objective_setType(objective, "maximize"); + + fluxObjective = Objective_createFluxObjective(objective); + FluxObjective_setReaction(fluxObjective, CHAR(STRING_ELT(react_id, i))); + FluxObjective_setCoefficient(fluxObjective, INTEGER(obj_coef)[i]); + + FbcModelPlugin_addObjective(modelPlug, objective); + + // mark obj1 as active objective + FbcModelPlugin_setActiveObjectiveId(modelPlug, "obj"); + + } + } + + + }// ENDE REACTION + if(SBMLfbcversion == 1) + { + + // FBC LEVEL 1 + + // Get a SBasePlugin_t object plugged in the model object. + + modelPlug = SBase_getPlugin((SBase_t *)(model), "fbc"); + int ObjCounter = 0; + for (i=0; i<LENGTH(react_name); i++) + { + + const double *lower_bnd = REAL(lowbnd); + const double *upper_bnd = REAL(uppbnd); + + char buf[20]; + // printf("Lower: %s\n", buf); + sprintf(buf, "LOWER_BOUND%d", i); + if (INTEGER(obj_coef)[i] != 1) + { + fluxBound = FluxBound_create(3, 1, 1); + FluxBound_setId(fluxBound, buf); + FluxBound_setReaction(fluxBound, CHAR(STRING_ELT(react_id, i))); + FluxBound_setOperation(fluxBound, "greaterEqual"); + FluxBound_setValue(fluxBound, lower_bnd[i]); + FbcModelPlugin_addFluxBound(modelPlug, fluxBound); + + //printf("Upper: %s\n", buf); + sprintf(buf, "UPPER_BOUND%d", i); + fluxBound = FluxBound_create(3, 1, 1); + FluxBound_setId(fluxBound, buf); + FluxBound_setReaction(fluxBound, CHAR(STRING_ELT(react_id, i))); + FluxBound_setOperation(fluxBound, "lessEqual"); + FluxBound_setValue(fluxBound, upper_bnd[i]); + + FbcModelPlugin_addFluxBound(modelPlug, fluxBound); + } + + if (INTEGER(obj_coef)[i] == 1 && ObjCounter == 0) + { + sprintf(buf, "OBJ%d", i); + objective = Objective_create(3, 1, 1); + Objective_setId(objective, buf); + Objective_setType(objective, "maximize"); + + fluxObjective = Objective_createFluxObjective(objective); + FluxObjective_setReaction(fluxObjective, CHAR(STRING_ELT(react_id, i))); + FluxObjective_setCoefficient(fluxObjective, 1); + + FbcModelPlugin_addObjective(modelPlug, objective); + FbcModelPlugin_setActiveObjectiveId(modelPlug, buf); + ObjCounter = ObjCounter +1; + } + + + + } + } + + //if(validateSBML(sbmlDoc)==1)printf("falsche Val"); + writeSBML(sbmlDoc, fname); + printf("Wrote file %s \n", fname); + + SEXP out = R_NilValue; + out = Rf_mkString("DONE"); + //UNPROTECT(1); + return out; } + + + + +/* -------------------------------------------------------------------------- */ diff --git a/src/sybilSBML.h b/src/sybilSBML.h index 0334524..68fe44d 100644 --- a/src/sybilSBML.h +++ b/src/sybilSBML.h @@ -63,6 +63,9 @@ SEXP getSBMLlevel(SEXP sbmldoc); /* get sbml document version */ SEXP getSBMLversion(SEXP sbmldoc); +/* get sbml document FBC version */ +SEXP getSBMLFbcversion(SEXP sbmldoc); + /* validate SBML document */ SEXP validateDocument(SEXP sbmldoc); @@ -78,6 +81,12 @@ SEXP getSBMLmodId(SEXP sbmlmod); /* get model name */ SEXP getSBMLmodName(SEXP sbmlmod); +/* get model notes */ +SEXP getSBMLmodNotes(SEXP sbmlmod); + +/* get model annotation */ +SEXP getSBMLmodAnnotation(SEXP sbmlmod); + /* get number of compartments */ SEXP getSBMLnumCompart(SEXP sbmlmod); @@ -98,3 +107,7 @@ SEXP getSBMLSpeciesList(SEXP sbmlmod); /* get list of reactions */ SEXP getSBMLReactionsList(SEXP sbmlmod); + +/* export Modelorg to SBML*/ +SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybil_max, SEXP mod_desc, SEXP mod_name, SEXP mod_compart, SEXP met_id, SEXP met_name, SEXP met_comp, SEXP met_form,SEXP met_charge, SEXP react_id, SEXP react_name, SEXP react_rev, SEXP lowbnd, SEXP uppbnd, SEXP obj_coef, SEXP subSys, SEXP gpr, SEXP SMatrix, SEXP mod_notes, SEXP mod_anno, SEXP com_notes , SEXP com_anno, SEXP met_notes, SEXP met_anno, SEXP met_bnd , SEXP react_notes, SEXP react_anno, SEXP ex_react, SEXP allgenes); + -- GitLab