Skip to content

Commit

Permalink
merge
Browse files Browse the repository at this point in the history
  • Loading branch information
umut-er committed Feb 7, 2025
2 parents f69c2d5 + 23d87b2 commit 2c7ecb6
Show file tree
Hide file tree
Showing 6 changed files with 130 additions and 14 deletions.
18 changes: 14 additions & 4 deletions sbgnviz.js

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
var sbmlToSbgnmlConverter = require('./utilities/sbml-to-sbgnml-converter-factory')();
var sbgnmlToGpmlConverter = require('./utilities/sbgnml-to-gpml-converter-factory')();
var gpmlToSbgnmlConverter = require('./utilities/gpml-to-sbgnml-converter-factory')();
var sbmlSimulationUtilities = require('./utilities/sbml-simulation-utilities-factory')();
// Fill param object to use it utilities internally

param.optionUtilities = optionUtilities;
Expand Down Expand Up @@ -72,6 +73,7 @@
param.gpmlToSbgnmlConverter = gpmlToSbgnmlConverter;
param.experimentalDataOverlay = experimentalDataOverlay;
param.libsbmlInstance = libsbmlInstance;
param.sbmlSimulationUtilities = sbmlSimulationUtilities;

// call constructors of objects with param

Expand Down Expand Up @@ -102,6 +104,7 @@
sbgnmlToGpmlConverter(param);
gpmlToSbgnmlConverter(param);
experimentalDataOverlay(param);
sbmlSimulationUtilities(param);

// set scratch pad for sbgnviz and init sbgnvizParams inside it
sbgnCyInstance.getCy().scratch('_sbgnviz', {});
Expand Down Expand Up @@ -140,6 +143,11 @@
api[prop] = graphUtilities[prop];
}

// Expose each sbgn graph utility seperately
for (var prop in sbmlSimulationUtilities) {
api[prop] = sbmlSimulationUtilities[prop];
}

// Expose createSbml
api["createSbml"] = jsonToSbmlConverter.createSbml;

Expand Down
5 changes: 2 additions & 3 deletions src/utilities/element-utilities-factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ module.exports = function () {
) {
d += performance.now(); //use high-precision timer if available
}
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
return "xxxxxxxx_xxxx_4xxx_yxxx_xxxxxxxxxxxx".replace(
/[xy]/g,
function (c) {
var r = (d + Math.random() * 16) % 16 | 0;
Expand Down Expand Up @@ -4785,8 +4785,7 @@ module.exports = function () {
} else if (elementUtilities.processTypes.includes(pureClass)) { // SBML Process
return {
'localParameters': [], // {name: , value: , unit: }
'kineticLaw': "", // Use ID's of species
'kineticLawVisible': "" // Can use labels of species
'kineticLaw': "0"
};
} else if (elementUtilities.edgeTypes.includes(pureClass)) { // SBML Edge
return {
Expand Down
21 changes: 16 additions & 5 deletions src/utilities/json-to-sbml-converter-factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ var textUtilities = require('./text-utilities');
var classes = require('./classes');

module.exports = function () {
var elementUtilities, graphUtilities, experimentalDataOverlay;
var elementUtilities, graphUtilities, experimentalDataOverlay, sbmlSimulationUtilities;
var cy;

var nodesToSbo =
Expand Down Expand Up @@ -74,6 +74,7 @@ module.exports = function () {
elementUtilities = param.elementUtilities;
graphUtilities = param.graphUtilities;
experimentalDataOverlay = param.experimentalDataOverlay;
sbmlSimulationUtilities = param.sbmlSimulationUtilities;
cy = param.sbgnCyInstance.getCy();
}

Expand Down Expand Up @@ -105,6 +106,16 @@ module.exports = function () {
const box = cy.elements().boundingBox();
dim.setWidth(box.w); dim.setHeight(box.h);

// Create Parameters
var parameters = sbmlSimulationUtilities.getParameters();
for (var p of parameters) {
const param = model.createParameter();
param.setId(p.id);
param.setName(p.name);
param.setValue(p.value);
param.setConstant(p.constant);
}

// Create compartment
for (let i = 0; i < nodes.length; i++)
{
Expand Down Expand Up @@ -357,14 +368,14 @@ module.exports = function () {
else
rxn.setSBOTerm(176);

for(var lp in process.data("simulation")["localParameters"]){
var localp = rxn.createLocalParameter();
const k1 = rxn.createKineticLaw();
for(var lp of process.data("simulation")["localParameters"]){
var localp = k1.createLocalParameter();
localp.setValue(lp.quantity);
localp.setName(lp.name.replace(/-/g, '_'));
}
const k1 = rxn.createKineticLaw();
const parser = new libsbmlInstance.SBMLFormulaParser();
const kmath = parser.parseL3Formula( (process.data("simulation")["kineticLaw"].replace(/-/g, '_') || "") );
const kmath = parser.parseL3Formula( (process.data("simulation")["kineticLaw"] || "") );
k1.setMath(kmath);
// Add Layout Info for Processes
const glyph = layout.createReactionGlyph();
Expand Down
69 changes: 69 additions & 0 deletions src/utilities/sbml-simulation-utilities-factory.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
module.exports = function () {
var parameters = {}; // { id = str: { name = str, value = float, unit = str, constant = bool } },

var cy;
var sbmlSimulationUtilities = function (param) {
cy = param.sbgnCyInstance.getCy();
};

sbmlSimulationUtilities.generateUUID = function () {
// Public Domain/MIT
var d = Date.now();
if (
typeof performance !== "undefined" &&
typeof performance.now === "function"
) {
d += performance.now(); //use high-precision timer if available
}
return "xxxxxxxx_xxxx_4xxx_yxxx_xxxxxxxxxxxx".replace(
/[xy]/g,
function (c) {
var r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
}
);
};

sbmlSimulationUtilities.generateParameterID = function() {
return "param_" + sbmlSimulationUtilities.generateUUID();
}

sbmlSimulationUtilities.addParameter = function (name, value, unit, constant) {
var id = sbmlSimulationUtilities.generateParameterID();
parameters[id] = {
name: name,
value: value,
unit: unit,
constant: constant
}
}

// Should only be used while importing, not really anything else
// Consider using sbmlSimulationUtilities.addParameter(name, value, unit, constant)
sbmlSimulationUtilities.addParameterWithId = function(id, name, value, unit, constant){
parameters[id] = {
name: name,
value: value,
unit: unit,
constant: constant
}
}

sbmlSimulationUtilities.removeParameter = function (id) {
delete parameters[id];
}

sbmlSimulationUtilities.getParameters = function () {
return Object.entries(parameters).map( ([id, {name, value, unit, constant}]) => ({
id, name, value, unit, constant
}));
}

sbmlSimulationUtilities.setParameter = function (id, field, value) {
parameters[id][field] = value;
}

return sbmlSimulationUtilities;
};

23 changes: 21 additions & 2 deletions src/utilities/sbml-to-json-converter-factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ var jQuery = ($ = libs.jQuery);
var classes = require("./classes");

module.exports = function () {
var elementUtilities, graphUtilities, handledElements, mainUtilities, libsbmlInstance;
var elementUtilities, graphUtilities, handledElements, mainUtilities, sbmlSimulationUtilities, libsbmlInstance;
let resultJson = [];
let speciesCompartmentMap = new Map;
let layout;
Expand All @@ -17,6 +17,7 @@ module.exports = function () {
elementUtilities = param.elementUtilities;
graphUtilities = param.graphUtilities;
mainUtilities = param.mainUtilities;
sbmlSimulationUtilities = param.sbmlSimulationUtilities;
libsbmlInstance = param.libsbmlInstance;

handledElements = {};
Expand Down Expand Up @@ -128,6 +129,7 @@ module.exports = function () {
let compartmentBoundingBoxes = new Map;
let containerNodeMap = new Map;

sbmlToJson.addParameters(model);
sbmlToJson.addCompartments(model, cytoscapeJsNodes, compartmentBoundingBoxes, containerNodeMap);
sbmlToJson.addSpecies(model, cytoscapeJsNodes, compartmentBoundingBoxes, containerNodeMap);
sbmlToJson.addReactions(model, cytoscapeJsEdges,cytoscapeJsNodes);
Expand All @@ -147,6 +149,23 @@ module.exports = function () {
return cytoscapeJsGraph;
};

// add parameters TODO: implement units
sbmlToJson.addParameters = function(model) {
for(let i = 0; i < model.getNumParameters(); i++){
let parameter = model.getParameter(i);
var paramId = parameter.getId();
var paramName = paramId;
if (parameter.isSetName())
paramName = parameter.getName();
paramValue = 0.0;
if (parameter.isSetValue())
paramValue = parameter.getValue();
paramConstant = true;
if (parameter.isSetConstant())
paramConstant = parameter.getConstant();
sbmlSimulationUtilities.addParameterWithId(paramId, paramName, paramValue, "", paramConstant);
}
}

// add compartment nodes
sbmlToJson.addCompartments = function (model,cytoscapeJsNodes, compartmentBoundingBoxes, containerNodeMap) {
Expand Down Expand Up @@ -240,7 +259,7 @@ sbmlToJson.addSpecies = function(model, cytoscapeJsNodes, compartmentBoundingBox
})
speciesCompartmentMap.set(species.getId(), species.getCompartment());
var sboTerm = species.getSBOTerm();
let speciesData = {"id": species.getId(), "label": species.getName() || " ",
let speciesData = {"id": species.getId(), "label": species.getName() || species.getId(),
"parent": species.getCompartment(), "sboTerm": species.getSBOTerm(),
"active": active, "multimer": multimer, "hypothetical": hypothetical,
"bindingRegion": bindingRegion, "residueVariable": residueVariable, "unitOfInfo": unitOfInfo};
Expand Down

0 comments on commit 2c7ecb6

Please sign in to comment.