Skip to content
Snippets Groups Projects
Commit 02eb5c2d authored by Claus Jonathan Fritzemeier's avatar Claus Jonathan Fritzemeier
Browse files

Merge branch 'writeSBML' of git.hhu.de:bioinformatik/sybilsbml into writeSBML

parents aa140f1e 440f385c
No related branches found
No related tags found
No related merge requests found
...@@ -331,8 +331,7 @@ deformatGene<-function(idstr) { ...@@ -331,8 +331,7 @@ deformatGene<-function(idstr) {
return(idstr) return(idstr)
} }
exportSBML<- function(morg=NULL,level=2,version=4,FbcLevel=0,filename="export.xml",validation=TRUE){ exportSBML<- function(morg=NULL,level=2,version=4,FbcLevel=0,filename="export.xml",recoverExtMet=TRUE,printNotes=TRUE,printAnnos=TRUE,validation=FALSE ){
#morg<-modelorg[["modelorg"]]
if(class(morg)!="modelorg"){ if(class(morg)!="modelorg"){
stop("morg has to be of class modelorg\n") stop("morg has to be of class modelorg\n")
} }
...@@ -382,12 +381,14 @@ exportSBML<- function(morg=NULL,level=2,version=4,FbcLevel=0,filename="export.xm ...@@ -382,12 +381,14 @@ exportSBML<- function(morg=NULL,level=2,version=4,FbcLevel=0,filename="export.xm
##EXCHANGE REACTIONS## ##EXCHANGE REACTIONS##
ex <- findExchReact(morg) ex <- findExchReact(morg)
ex_react<-NULL ex_react<-NULL
if(!is.null(ex)) # if recoverExtMet== FALSE => null for ex_react
if( (!is.null(ex)) && (recoverExtMet) )
{ {
if(!(all(diag(S(morg)[met_pos(ex), react_pos(ex)])==-1))) if(!(all(diag(S(morg)[met_pos(ex), react_pos(ex)])==-1)))
stop("exchange reactions with Scoeff different than -1\n") stop("exchange reactions with Scoeff different than -1\n")
ex_react<-as.integer(react_pos(ex)) ex_react<-as.integer(react_pos(ex))
} }
### Build wrapper for C Function ##### ### Build wrapper for C Function #####
...@@ -415,27 +416,24 @@ exportSBML<- function(morg=NULL,level=2,version=4,FbcLevel=0,filename="export.xm ...@@ -415,27 +416,24 @@ exportSBML<- function(morg=NULL,level=2,version=4,FbcLevel=0,filename="export.xm
newsubS<- NULL 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") ) if( .hasSlot(morg,"mod_attr") && .hasSlot(morg,"comp_attr") && .hasSlot(morg,"met_attr") && .hasSlot(morg,"react_attr") )
newSybil<-TRUE newSybil<-TRUE
else newSybil<-FALSE else newSybil<-FALSE
### Start newSybil attr ### Start newSybil attr
if(newSybil) if(newSybil)
{ {
if("notes" %in% colnames(mod_attr(morg))) mod_notes<-as.character(mod_attr(morg)[['notes']]) if(("notes" %in% colnames(mod_attr(morg))) && (printNotes) ) mod_notes<-as.character(mod_attr(morg)[['notes']])
if("annotation" %in% colnames(mod_attr(morg))) mod_annotation<-as.character(mod_attr(morg)[['annotation']]) if(("annotation" %in% colnames(mod_attr(morg))) && (printAnnos) ) 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(("notes" %in% colnames(comp_attr(morg))) && (printNotes) ) 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(("annotation" %in% colnames(comp_attr(morg))) && (printAnnos) ) 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("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("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(("annotation" %in% colnames(met_attr(morg))) && (printAnnos)) 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("boundaryCondition" %in% colnames(met_attr(morg))) met_bnd<-as.logical(as.list((met_attr(morg)[['boundaryCondition']])))
if("notes" %in% colnames(met_attr(morg))) if(("notes" %in% colnames(met_attr(morg))) && (printNotes) )
{ # delete Formular and charge from notes to do { # delete Formular and charge from notes to do
met_notes<-as.character(as.list((met_attr(morg)[['notes']]))) met_notes<-as.character(as.list((met_attr(morg)[['notes']])))
if (!is.null(met_charge) || !is.null(met_formula)) if (!is.null(met_charge) || !is.null(met_formula))
...@@ -481,10 +479,10 @@ exportSBML<- function(morg=NULL,level=2,version=4,FbcLevel=0,filename="export.xm ...@@ -481,10 +479,10 @@ exportSBML<- function(morg=NULL,level=2,version=4,FbcLevel=0,filename="export.xm
} }
} }
if("annotation" %in% colnames(react_attr(morg))) react_anno<-as.character(as.list((react_attr(morg)[['annotation']]))) if(("annotation" %in% colnames(react_attr(morg))) && (printAnnos)) react_anno<-as.character(as.list((react_attr(morg)[['annotation']])))
# Merge Notes with "our" Notes and make sure gpr Rules from gpr # Merge Notes with "our" Notes and make sure gpr Rules from gpr
if("notes" %in% colnames(react_attr(morg))) if(("notes" %in% colnames(react_attr(morg))) && (printNotes))
{ {
react_notes<-as.character(as.list((react_attr(morg)[['notes']]))) react_notes<-as.character(as.list((react_attr(morg)[['notes']])))
# using # using
...@@ -565,6 +563,7 @@ exportSBML<- function(morg=NULL,level=2,version=4,FbcLevel=0,filename="export.xm ...@@ -565,6 +563,7 @@ exportSBML<- function(morg=NULL,level=2,version=4,FbcLevel=0,filename="export.xm
react_notes, react_notes,
react_anno, react_anno,
ex_react, ex_react,
as.logical(validation),
as.character(deformatGene(allgenes)) as.character(deformatGene(allgenes))
) )
return (success) return (success)
......
...@@ -54,7 +54,7 @@ static const R_CallMethodDef callMethods[] = { ...@@ -54,7 +54,7 @@ static const R_CallMethodDef callMethods[] = {
{"getSBMLCompartList", (DL_FUNC) &getSBMLCompartList, 1}, {"getSBMLCompartList", (DL_FUNC) &getSBMLCompartList, 1},
{"getSBMLSpeciesList", (DL_FUNC) &getSBMLSpeciesList, 1}, {"getSBMLSpeciesList", (DL_FUNC) &getSBMLSpeciesList, 1},
{"getSBMLReactionsList", (DL_FUNC) &getSBMLReactionsList, 1}, {"getSBMLReactionsList", (DL_FUNC) &getSBMLReactionsList, 1},
{"exportSBML", (DL_FUNC) &exportSBML, 33}, {"exportSBML", (DL_FUNC) &exportSBML, 34},
{"getSBMLFbcversion", (DL_FUNC) &getSBMLFbcversion, 1}, {"getSBMLFbcversion", (DL_FUNC) &getSBMLFbcversion, 1},
{NULL, NULL, 0} {NULL, NULL, 0}
}; };
......
...@@ -1605,7 +1605,7 @@ void ParseModtoAnno (SBase_t* comp , char* Mannocopy) ...@@ -1605,7 +1605,7 @@ void ParseModtoAnno (SBase_t* comp , char* Mannocopy)
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) 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 validation, SEXP allgenes)
{ {
//Varaibles from R //Varaibles from R
const char* fname = CHAR(STRING_ELT(filename, 0)); const char* fname = CHAR(STRING_ELT(filename, 0));
...@@ -1791,7 +1791,6 @@ SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybi ...@@ -1791,7 +1791,6 @@ SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybi
Compartment_setId(comp,sName); Compartment_setId(comp,sName);
Compartment_setConstant(comp,1); Compartment_setConstant(comp,1);
if( strcmp(sName,"BOUNDARY")==0 || strcmp(sName,"Boundary")==0 || strcmp(sName,"boundary")==0)hasBoundary=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) if (!Rf_isNull(com_notes) && Rf_length(com_notes) > 1)
{ {
char *Cnotes = (char*) CHAR(STRING_ELT(com_notes, i)); char *Cnotes = (char*) CHAR(STRING_ELT(com_notes, i));
...@@ -1819,7 +1818,7 @@ SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybi ...@@ -1819,7 +1818,7 @@ SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybi
/* Boundary Compartment */ /* Boundary Compartment */
if(hasBoundary==0 && Rf_isNull(met_bnd) && Rf_length(met_bnd) <= 1 ) if(hasBoundary==0 && Rf_isNull(met_bnd) && Rf_length(met_bnd) <= 1 && !Rf_isNull(ex_react))
{ {
comp = Model_createCompartment(model); comp = Model_createCompartment(model);
Compartment_setId(comp,"BOUNDARY"); Compartment_setId(comp,"BOUNDARY");
...@@ -1903,13 +1902,8 @@ SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybi ...@@ -1903,13 +1902,8 @@ SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybi
if((Manno != NULL) && (Manno[0] != '\0' )) 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_setMetaId((SBase_t*)sp, CHAR(STRING_ELT(met_id, i)));
//SBase_appendAnnotation((SBase_t*)sp, xmlannotation );
// COPY STRING // COPY STRING
char *Manno = (char*) CHAR(STRING_ELT(met_anno, i)); char *Manno = (char*) CHAR(STRING_ELT(met_anno, i));
...@@ -2094,7 +2088,7 @@ SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybi ...@@ -2094,7 +2088,7 @@ SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybi
SpeciesReference_setStoichiometry(spr, fabs(REAL(SMatrix)[hash])); SpeciesReference_setStoichiometry(spr, fabs(REAL(SMatrix)[hash]));
//is Exchange Reaction //is Exchange Reaction
if(isexchange==1) if(isexchange==1 && !Rf_isNull(ex_react))
{ {
/* Create boundary Species */ /* Create boundary Species */
sp = Model_createSpecies(model); sp = Model_createSpecies(model);
...@@ -2281,6 +2275,20 @@ SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybi ...@@ -2281,6 +2275,20 @@ SEXP exportSBML (SEXP version, SEXP level,SEXP FbcLevel, SEXP filename,SEXP sybi
} }
} }
// if VALIDATION TRUE FIND ERRORS
if(LOGICAL(validation)[0]==1)
{
unsigned int errors = 0;
errors = SBMLDocument_getNumErrors(sbmlDoc);
// errors += SBMLDocument_checkConsistency(sbmlDoc); warnings
if (errors > 0){
SBMLDocument_printErrors(sbmlDoc, stdout);
printf("\n");
}
else printf("No errors \n");
}
// write SBML file
int result = writeSBML(sbmlDoc, fname); int result = writeSBML(sbmlDoc, fname);
SEXP out = R_NilValue; SEXP out = R_NilValue;
if (result) out = Rf_mkString(append_strings("Wrote file",fname," ")); if (result) out = Rf_mkString(append_strings("Wrote file",fname," "));
......
...@@ -109,5 +109,5 @@ SEXP getSBMLSpeciesList(SEXP sbmlmod); ...@@ -109,5 +109,5 @@ SEXP getSBMLSpeciesList(SEXP sbmlmod);
SEXP getSBMLReactionsList(SEXP sbmlmod); SEXP getSBMLReactionsList(SEXP sbmlmod);
/* export Modelorg to SBML*/ /* 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); 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 validation, SEXP allgenes);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment