Browse Source

Check for duplicate ids/names in reactions-to-PRISM translation.

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@5423 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 14 years ago
parent
commit
5486e68282
  1. 45
      prism/src/prism/Reactions2Prism.java

45
prism/src/prism/Reactions2Prism.java

@ -144,21 +144,38 @@ public class Reactions2Prism
/** /**
* Do some processing of the reaction set model in preparation for conversion to PRISM code. * Do some processing of the reaction set model in preparation for conversion to PRISM code.
*/ */
private void processModel()
private void processModel() throws PrismException
{ {
int i, j, k, n, m;
int j, k, m;
String s, s2; String s, s2;
Species species;
Reaction reaction;
Parameter parameter;
HashSet<String> modulesNames; HashSet<String> modulesNames;
HashSet<String> prismIdents; HashSet<String> prismIdents;
// Check species ids are unique
ArrayList<String> speciesIDs = new ArrayList<String>();
for (Species species : speciesList) {
if (speciesIDs.contains(species.id))
throw new PrismException("Duplicate species id \"" + species.id + "\"");
speciesIDs.add(species.id);
}
// Check parameter names are unique
ArrayList<String> paramNames = new ArrayList<String>();
for (Parameter parameter : parameterList) {
if (paramNames.contains(parameter.name))
throw new PrismException("Duplicate parameter name \"" + parameter.name + "\"");
paramNames.add(parameter.name);
}
// Check reaction ids are unique
ArrayList<String> reactionIDs = new ArrayList<String>();
for (Reaction reaction : reactionList) {
if (reactionIDs.contains(reaction.id))
throw new PrismException("Duplicate reaction id \"" + reaction.id + "\"");
reactionIDs.add(reaction.id);
}
// Look at initial amounts for all species // Look at initial amounts for all species
// If any exceed MAX_AMOUNT, increase it accordingly // If any exceed MAX_AMOUNT, increase it accordingly
n = speciesList.size();
for (i = 0; i < n; i++) {
species = speciesList.get(i);
for (Species species : speciesList) {
if (species.init > maxAmount) if (species.init > maxAmount)
maxAmount = (int) species.init; maxAmount = (int) species.init;
} }
@ -166,9 +183,7 @@ public class Reactions2Prism
// Generate unique and valid PRISM identifier (module and variable name) for each species // Generate unique and valid PRISM identifier (module and variable name) for each species
modulesNames = new HashSet<String>(); modulesNames = new HashSet<String>();
prismIdents = new HashSet<String>(); prismIdents = new HashSet<String>();
n = speciesList.size();
for (i = 0; i < n; i++) {
species = speciesList.get(i);
for (Species species : speciesList) {
s = species.id; s = species.id;
s2 = convertToValidPrismIdent(s); s2 = convertToValidPrismIdent(s);
if (!s.equals(s2)) if (!s.equals(s2))
@ -185,9 +200,7 @@ public class Reactions2Prism
} }
// Generate unique and valid PRISM constant name for model parameter // Generate unique and valid PRISM constant name for model parameter
n = parameterList.size();
for (i = 0; i < n; i++) {
parameter = parameterList.get(i);
for (Parameter parameter : parameterList) {
s = parameter.name; s = parameter.name;
s2 = convertToValidPrismIdent(s); s2 = convertToValidPrismIdent(s);
if (!s.equals(s2)) if (!s.equals(s2))
@ -204,9 +217,7 @@ public class Reactions2Prism
} }
// Generate unique and valid PRISM constant name for each reaction parameter // Generate unique and valid PRISM constant name for each reaction parameter
n = reactionList.size();
for (i = 0; i < n; i++) {
reaction = reactionList.get(i);
for (Reaction reaction : reactionList) {
m = reaction.parameters.size(); m = reaction.parameters.size();
for (j = 0; j < m; j++) { for (j = 0; j < m; j++) {
s = reaction.parameters.get(j).name; s = reaction.parameters.get(j).name;

Loading…
Cancel
Save