END_TEST START_TEST (test_L3_Species_initDefaults) { Species_t *s = Species_create(3,1); fail_unless( Species_getId (s) == NULL ); fail_unless( Species_getName (s) == NULL ); fail_unless( Species_getCompartment (s) == NULL ); fail_unless( util_isNaN(Species_getInitialAmount (s)) ); fail_unless( util_isNaN(Species_getInitialConcentration (s)) ); fail_unless( Species_getSubstanceUnits (s) == NULL ); fail_unless( Species_getHasOnlySubstanceUnits(s) == 0 ); fail_unless( Species_getBoundaryCondition(s) == 0 ); fail_unless( Species_getConstant(s) == 0 ); fail_unless( Species_getConversionFactor (s) == NULL ); fail_unless( !Species_isSetId (s) ); fail_unless( !Species_isSetName (s) ); fail_unless( !Species_isSetCompartment (s) ); fail_unless( !Species_isSetInitialAmount (s) ); fail_unless( !Species_isSetInitialConcentration (s) ); fail_unless( !Species_isSetSubstanceUnits (s) ); fail_unless( !Species_isSetHasOnlySubstanceUnits(s) ); fail_unless( !Species_isSetBoundaryCondition(s) ); fail_unless( !Species_isSetConstant(s) ); fail_unless( !Species_isSetConversionFactor (s) ); Species_initDefaults(s); fail_unless( Species_getId (s) == NULL ); fail_unless( Species_getName (s) == NULL ); fail_unless( Species_getCompartment (s) == NULL ); fail_unless( util_isNaN(Species_getInitialAmount (s)) ); fail_unless( util_isNaN(Species_getInitialConcentration (s)) ); fail_unless( !strcmp(Species_getSubstanceUnits (s),"mole" )); fail_unless( Species_getHasOnlySubstanceUnits(s) == 0 ); fail_unless( Species_getBoundaryCondition(s) == 0 ); fail_unless( Species_getConstant(s) == 0 ); fail_unless( Species_getConversionFactor (s) == NULL ); fail_unless( !Species_isSetId (s) ); fail_unless( !Species_isSetName (s) ); fail_unless( !Species_isSetCompartment (s) ); fail_unless( !Species_isSetInitialAmount (s) ); fail_unless( !Species_isSetInitialConcentration (s) ); fail_unless( Species_isSetSubstanceUnits (s) ); fail_unless( Species_isSetHasOnlySubstanceUnits(s) ); fail_unless( Species_isSetBoundaryCondition(s) ); fail_unless( Species_isSetConstant(s) ); fail_unless( !Species_isSetConversionFactor (s) ); Species_free(s); }
END_TEST START_TEST (test_SBMLConvert_convertToL1_Species_Amount) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 4); Model_t *m = SBMLDocument_createModel(d); const char *sid = "C"; Compartment_t *c = Compartment_create(2, 4); Species_t *s = Species_create(2, 4); Compartment_setId ( c, sid ); Model_addCompartment( m, c ); Species_setCompartment ( s, sid ); Species_setInitialAmount( s, 2.34 ); Model_addSpecies ( m, s ); fail_unless( SBMLDocument_setLevelAndVersion(d, 1, 2) == 1, NULL ); fail_unless( Species_getInitialAmount(s) == 2.34, NULL ); SBMLDocument_free(d); }
void printSpecies(Model_t *m, FILE *f) { int i, j; Species_t *s; Compartment_t *c; fprintf(f, "\n"); fprintf(f, "# Initial Conditions for Species and Compartments:\n"); for ( i=0; i<Model_getNumCompartments(m); i++ ) { if ( i== 0 ) fprintf(f, "# Compartments:\n"); c = Model_getCompartment(m,i); if(Compartment_isSetId(c)) fprintf(f, "%s ", Compartment_getId(c)); if(Compartment_isSetName(c)) fprintf(f, "(%s) ", Compartment_getName(c)); if ( Compartment_isSetVolume(c) ) fprintf(f, "= %g; ", Compartment_getSize(c)); fprintf(f, "%s", Compartment_getConstant(c) ? "" : "variable; "); if(Compartment_isSetOutside(c)) fprintf(f, "outside %s; ", Compartment_getOutside(c)); /* fprintf(f, "\n"); */ fprintf(f, "dimensions %d; ", Compartment_getSpatialDimensions(c)); if(Compartment_isSetUnits(c)) fprintf(f, "[%s]; ", Compartment_getUnits(c)); fprintf(f, "\n"); fprintf(f, "# Species concentrations in `compartment' %s\n", Compartment_getId(c)); for(j=0;j<Model_getNumSpecies(m);j++){ s = Model_getSpecies(m,j); if(strcmp(Species_getCompartment(s), Compartment_getId(c))==0){ fprintf(f, "%s ", Species_getId(s)); if(Species_isSetName(s)) fprintf(f, "(%s) ", Species_getName(s)); if ( Species_isSetInitialAmount(s) ) fprintf(f, "= %g/%g; ", Species_getInitialAmount(s), Compartment_getSize(c)); else if ( Species_isSetInitialConcentration(s) ) fprintf(f, "= %g; ", Species_getInitialConcentration(s)); else fprintf(f, "# no initial value;"); fprintf(f, "%s", Species_getBoundaryCondition(s) ? "boundary;" : ""); fprintf(f, "%s", Species_getConstant(s) ? "constant;" : ""); if(Species_isSetCharge(s)) fprintf(f, "charge = %d; ", Species_getCharge(s)); fprintf(f, "\n"); } } fprintf(f, "\n"); } }
END_TEST START_TEST (test_L3_Species_initialAmount) { double initialAmount = 0.2; fail_unless( !Species_isSetInitialAmount(S)); fail_unless( util_isNaN(Species_getInitialAmount(S))); Species_setInitialAmount(S, initialAmount); fail_unless( Species_getInitialAmount(S) == initialAmount ); fail_unless( Species_isSetInitialAmount(S) ); Species_unsetInitialAmount(S); fail_unless( !Species_isSetInitialAmount(S) ); fail_unless( util_isNaN(Species_getInitialAmount(S))); }
END_TEST START_TEST (test_L3_Species_createWithNS ) { XMLNamespaces_t *xmlns = XMLNamespaces_create(); XMLNamespaces_add(xmlns, "http://www.sbml.org", "testsbml"); SBMLNamespaces_t *sbmlns = SBMLNamespaces_create(3,1); SBMLNamespaces_addNamespaces(sbmlns,xmlns); Species_t *s = Species_createWithNS (sbmlns); fail_unless( SBase_getTypeCode ((SBase_t *) s) == SBML_SPECIES ); fail_unless( SBase_getMetaId ((SBase_t *) s) == NULL ); fail_unless( SBase_getNotes ((SBase_t *) s) == NULL ); fail_unless( SBase_getAnnotation((SBase_t *) s) == NULL ); fail_unless( SBase_getLevel ((SBase_t *) s) == 3 ); fail_unless( SBase_getVersion ((SBase_t *) s) == 1 ); fail_unless( Species_getNamespaces (s) != NULL ); fail_unless( XMLNamespaces_getLength(Species_getNamespaces(s)) == 2 ); fail_unless( Species_getId (s) == NULL ); fail_unless( Species_getName (s) == NULL ); fail_unless( Species_getCompartment (s) == NULL ); fail_unless( util_isNaN(Species_getInitialAmount (s)) ); fail_unless( util_isNaN(Species_getInitialConcentration (s)) ); fail_unless( Species_getSubstanceUnits (s) == NULL ); fail_unless( Species_getHasOnlySubstanceUnits(s) == 0 ); fail_unless( Species_getBoundaryCondition(s) == 0 ); fail_unless( Species_getConstant(s) == 0 ); fail_unless( Species_getConversionFactor (s) == NULL ); fail_unless( !Species_isSetId (s) ); fail_unless( !Species_isSetName (s) ); fail_unless( !Species_isSetCompartment (s) ); fail_unless( !Species_isSetInitialAmount (s) ); fail_unless( !Species_isSetInitialConcentration (s) ); fail_unless( !Species_isSetSubstanceUnits (s) ); fail_unless( !Species_isSetHasOnlySubstanceUnits(s) ); fail_unless( !Species_isSetBoundaryCondition(s) ); fail_unless( !Species_isSetConstant(s) ); fail_unless( !Species_isSetConversionFactor (s) ); Species_free(s); XMLNamespaces_free(xmlns); SBMLNamespaces_free(sbmlns); }
/** * \fn void SBML_initEspeceAmounts(Model_t *mod, pEspeces molecules, int nbEspeces) * \author Amine Ghozlane * \brief Alloc memory and initialize the struct Especes * \param mod Model of the SBML file * \param molecules Struct Especes * \param nbEspeces Number of molecules */ void SBML_initEspeceAmounts(Model_t *mod, pEspeces molecules, int nbEspeces) { /* Initialisation de l'etat des especes */ int i; Species_t *esp=NULL; /* Initialisation des quantites des especes*/ for (i = 0; i < nbEspeces; i++) { esp = Model_getSpecies(mod, i); Especes_save(molecules, i, Species_getInitialAmount(esp), Species_getId(esp)); } }
END_TEST START_TEST (test_Species_setInitialAmount) { fail_unless( !Species_isSetInitialAmount (S) ); fail_unless( !Species_isSetInitialConcentration(S) ); Species_setInitialAmount(S, 1.2); fail_unless( Species_isSetInitialAmount (S) ); fail_unless( !Species_isSetInitialConcentration(S) ); fail_unless( Species_getInitialAmount(S) == 1.2 ); }
END_TEST START_TEST (test_Species_setInitialAmount1) { int i = Species_setInitialAmount(C, 2.0); fail_unless( i == LIBSBML_OPERATION_SUCCESS ); fail_unless( Species_getInitialAmount(C) == 2.0 ); fail_unless( Species_isSetInitialAmount(C)); i = Species_unsetInitialAmount(C); fail_unless( i == LIBSBML_OPERATION_SUCCESS ); fail_unless( !Species_isSetInitialAmount(C)); }
END_TEST START_TEST (test_SBMLConvert_convertToL1_Species_Concentration) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 1); Model_t *m = SBMLDocument_createModel(d); const char *sid = "C"; Compartment_t *c = Compartment_create(2, 1); Species_t *s = Species_create(2, 1); Compartment_setId ( c, sid ); Compartment_setSize ( c, 1.2 ); Model_addCompartment( m, c ); Species_setId ( s, "s" ); Species_setCompartment ( s, sid ); Species_setInitialConcentration( s, 2.34 ); Model_addSpecies ( m, s ); fail_unless( SBMLDocument_setLevelAndVersion(d, 1, 2) == 1, NULL); /** * These tests will fail under Cygwin because of a minimal * setlocale() implementation (see setlocale manpage). */ #ifndef CYGWIN fail_unless( Species_getInitialAmount(Model_getSpecies(m, 0)) == 2.808, NULL ); #endif Species_t * s1 = Model_getSpecies(m, 0); fail_unless (s1 != NULL); fail_unless (!strcmp(Species_getCompartment(s1), "C")); fail_unless(Compartment_getSize(Model_getCompartmentById(m, "C")) == 1.2); fail_unless(Species_getInitialConcentration(s1) == 2.34); fail_unless(Species_isSetInitialConcentration(s1) == 1); SBMLDocument_free(d); }
END_TEST START_TEST (test_Species_setInitialAmount2) { Species_t *c = Species_create(2, 2); int i = Species_setInitialAmount(c, 4); fail_unless( i == LIBSBML_OPERATION_SUCCESS ); fail_unless( Species_getInitialAmount(c) == 4.0 ); fail_unless( Species_isSetInitialAmount(c)); i = Species_unsetInitialAmount(c); fail_unless( i == LIBSBML_OPERATION_SUCCESS ); fail_unless( !Species_isSetInitialAmount(c)); Species_free(c); }
/* setValues: the user can enter a species name and change its initial condition (amount or concentration) */ static void setValues(Model_t *m) { char *species; char *newIA; char *newIC; Species_t *s; printf("Please enter the id of the species to change: "); species = get_line(stdin); species = util_trim(species); if ( (s = Model_getSpeciesById(m,species) ) ) { printf("\n"); printf("Id: %s\n", Species_getId(s)); if ( Species_isSetName(s) ) { printf("Name: %s\n", Species_getName(s)); } if ( Species_isSetInitialAmount(s) ) { printf("Initial Amount: %g", Species_getInitialAmount(s)); } else if (Species_isSetInitialConcentration(s) ) { printf("Initial Concentration: %g", Species_getInitialConcentration(s)); } if ( Species_getHasOnlySubstanceUnits(s) ) { if ( Species_isSetSubstanceUnits(s) ) { printf("%s ", Species_getSubstanceUnits(s)); } } else { if ( Species_isSetSubstanceUnits(s) ) { printf("%s ", Species_getSubstanceUnits(s)); } if ( Species_isSetSpatialSizeUnits(s) ) { printf("%s%s", "/", Species_getSpatialSizeUnits(s)); } } if ( Species_getHasOnlySubstanceUnits(s) ) { printf(" (has only substance units)"); } printf("\n"); if ( Species_isSetCharge(s) ) { printf("Charge: %-10d", Species_getCharge(s)); } printf("\n"); printf("%s ", Species_getBoundaryCondition(s) ? "Species is a Boundary\n" : "\n"); printf("%s ", Species_getConstant(s) ? "Species is set constant" : "\n"); printf("\n"); if ( Species_isSetInitialAmount(s) ) { printf("Please enter new initial Amount: "); newIA = get_line(stdin); newIA = util_trim(newIA); Species_setInitialAmount(s, (float) atof(newIA)); } else if ( Species_isSetInitialConcentration(s) ) { printf("Please enter new initial Concentration: "); newIC = get_line(stdin); newIC = util_trim(newIC); Species_setInitialConcentration(s, (float) atof(newIC)); } } else { printf("%s not found.\n", species); } }
int main(int argc, char** argv) { myspecies_t* species; //pinakas ximikon stoixeion reaction_t *reaction; //20 ximikes antidraseis int i,j,k,num_species, num_reactions; double V; FILE *pf1, *pf2, *pf3, *pf4, *pf5, *pf6, *fsize; SBMLDocument_t *d; Model_t *m; ListOf_t *lo; Species_t *sp; Reaction_t *re; Parameter_t *p; KineticLaw_t *kin; SpeciesReference_t *sr; Compartment_t *c; //an den exei 2 argument if(argc != 2) { printf("Ektelesi: %s <SBML xml>\n", argv[0]); exit(-1); } //arxeia results if((pf1 = fopen("RT_reactant.txt", "w")) == NULL) { printf("Error create file %s\n","RT_reactant.txt"); exit(-1); } if((pf2 = fopen("RT_product.txt", "w")) == NULL) { printf("Error create file %s\n","RT_product.txt"); fclose(pf1); exit(-1); } if((pf3 = fopen("VT_reactant.txt", "w")) == NULL) { printf("Error create file %s\n","VT_reactant.txt"); fclose(pf1); fclose(pf2); exit(-1); } if((pf4 = fopen("VT_product.txt", "w")) == NULL) { printf("Error create file %s\n","VT_product.txt"); fclose(pf1); fclose(pf2); fclose(pf3); exit(-1); } if((pf5 = fopen("ST.txt", "w")) == NULL) { printf("Error create file %s\n","ST.txt"); fclose(pf1); fclose(pf2); fclose(pf3); fclose(pf4); exit(-1); } if((pf6 = fopen("k_parameter.txt", "w")) == NULL) { printf("Error create file %s\n","k_parameter.txt"); fclose(pf1); fclose(pf2); fclose(pf3); fclose(pf4); fclose(pf5); exit(-1); } fsize = fopen("fsize.txt", "w"); //anoigo to SBML arxeio d = readSBML(argv[1]); //d=readSBML("C:/home/orsalia/BIOMD0000000001"); m = SBMLDocument_getModel(d); num_species = Model_getNumSpecies(m); num_reactions = Model_getNumReactions(m); fprintf(fsize,"%d\n",num_species); fprintf(fsize,"%d\n",num_reactions); //Pairnoume ton ogko c = Model_getCompartment(m,0); V = Compartment_getVolume(c); //Desmeysi pinakon domon gia stoixeia kai reaction species = (myspecies_t*) malloc(num_species*sizeof(myspecies_t)); reaction = (reaction_t*) malloc(num_reactions*sizeof(reaction_t)); //gemizo ton pinaka me tis arxikes sigkentroseis ton stoixeion for(i=0;i<num_species;i++) { sp = Model_getSpecies(m,i); species[i].conc = Species_getInitialConcentration(sp)?Species_getInitialConcentration(sp):Species_getInitialAmount(sp); species[i].name = malloc(50*sizeof(char)); strcpy(species[i].name,Species_getId(sp)); strcpy(species[i].name2,Species_getName(sp)); } ///gemizo ton pinaka domon ton reaction for(i=0;i<num_reactions;i++) { re = Model_getReaction(m,i); kin = Reaction_getKineticLaw(re); p = KineticLaw_getParameter(kin,0); reaction[i].react_num = Reaction_getNumReactants(re); reaction[i].product_num = Reaction_getNumProducts(re); reaction[i].react = (x_vector_t*) malloc(reaction[i].react_num*sizeof(x_vector_t)); reaction[i].product = (x_vector_t*) malloc(reaction[i].product_num*sizeof(x_vector_t)); for(j=0;j<reaction[i].react_num;j++) { sr = Reaction_getReactant(re,j); for(k=0;k<num_species;k++) { //an vrei to stoixeio ston megalo pinaka krata ti thesi tou if (strcmp(SpeciesReference_getSpecies(sr),species[k].name) == 0) { reaction[i].react[j].x = k; //ithesi ston pinaka species reaction[i].react[j].v = (-1) * SpeciesReference_getStoichiometry(sr); break; } } } for(j=0;j<reaction[i].product_num;j++) { sr = Reaction_getProduct(re,j); for(k=0;k<num_species;k++) { //an vrei to stoixeio ston megalo pinaka krata ti thesi tou if (strcmp(SpeciesReference_getSpecies(sr),species[k].name) == 0) { reaction[i].product[j].x = k; //ithesi ston pinaka species reaction[i].product[j].v = SpeciesReference_getStoichiometry(sr); break; } } } reaction[i].k = Parameter_getValue(p); //vlepo tin eidos antidraseis einai kai vazo to c tis kathe antidrasis if(reaction[i].react_num == 3) { reaction[i].type = 7; reaction[i].c = Parameter_getValue(p)/(V*V); //mallon } else if(reaction[i].react_num == 2) { sr = Reaction_getReactant(re,0); if (SpeciesReference_getStoichiometry(sr) == 2 ) { reaction[i].type = 5; reaction[i].c = 2*Parameter_getValue(p)/(V*V); //oute kan } else { sr = Reaction_getReactant(re,1); if (SpeciesReference_getStoichiometry(sr) == 2 ) { reaction[i].type = 6; reaction[i].c = 2*Parameter_getValue(p)/(V*V); //oute kan } else { reaction[i].type = 2; reaction[i].c = Parameter_getValue(p)/V; } } } else //if(reaction[i].react_num == 1) { sr = Reaction_getReactant(re,0); if (SpeciesReference_getStoichiometry(sr) == 2 ) //an einai bimolecular me to idio stoixeio { reaction[i].type = 3; reaction[i].c = 2*Parameter_getValue(p)/V; } else if(SpeciesReference_getStoichiometry(sr) == 3 ) { reaction[i].type = 4; reaction[i].c = 3*Parameter_getValue(p)/(V*V); //mallon } else { reaction[i].type = 1; reaction[i].c = Parameter_getValue(p); } } } for(i=0;i<num_species;i++) { //fprintf(pf5,"%d\t%s\n",(int)species[i].conc,species[i].name2); fprintf(pf5,"%d\t\n",(int)species[i].conc); } for(i=0;i<num_reactions;i++) { for(k=0;k<reaction[i].react_num;k++) { fprintf(pf1,"%d\t",reaction[i].react[k].x+1); fprintf(pf3,"%d\t",reaction[i].react[k].v); } for(k=0;k<reaction[i].product_num;k++) { fprintf(pf2,"%d\t",reaction[i].product[k].x+1); fprintf(pf4,"%d\t",reaction[i].product[k].v); } fprintf(pf1,"\n"); fprintf(pf3,"\n"); fprintf(pf2,"\n"); fprintf(pf4,"\n"); fprintf(pf6,"%f\n",reaction[i].k); } fclose(pf1); fclose(pf2); fclose(pf3); fclose(pf4); fclose(pf5); fclose(pf6); fclose(fsize); }