Search in sources :

Example 31 with MolecularType

use of org.vcell.model.rbm.MolecularType in project vcell by virtualcell.

the class ReactionRule method resolveBonds.

private void resolveBonds(ReactionRuleParticipantType type) {
    HashMap<MolecularType, Integer> moleculeIndexMap = new HashMap<MolecularType, Integer>();
    List<? extends ReactionRuleParticipant> patterns = (type == ReactionRuleParticipantType.Reactant) ? reactantPatterns : productPatterns;
    for (ReactionRuleParticipant participant : patterns) {
        List<MolecularTypePattern> molecularTypePatterns = participant.getSpeciesPattern().getMolecularTypePatterns();
        for (MolecularTypePattern mtp : molecularTypePatterns) {
            Integer index = moleculeIndexMap.get(mtp.getMolecularType());
            if (index == null) {
                index = 1;
            } else {
                ++index;
            }
            mtp.setIndex(index);
            moleculeIndexMap.put(mtp.getMolecularType(), index);
        }
        participant.getSpeciesPattern().resolveBonds();
    }
}
Also used : MolecularType(org.vcell.model.rbm.MolecularType) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) MolecularTypePattern(org.vcell.model.rbm.MolecularTypePattern)

Example 32 with MolecularType

use of org.vcell.model.rbm.MolecularType in project vcell by virtualcell.

the class ReactionRule method gatherIssues.

// -----------------------------------------------------------------------------------------------------
// 
public void gatherIssues(IssueContext issueContext, List<Issue> issueList) {
    issueContext = issueContext.newChildContext(ContextType.ReactionRule, this);
    if (name == null || name.isEmpty()) {
        issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, "Label is missing", Issue.Severity.ERROR));
    }
    if (name != null && name.startsWith("_reverse_")) {
        String msg = "The prefix '_reverse_' is a BioNetGen reserved keyword. Please rename the " + typeName + ".";
        issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.Severity.ERROR));
    }
    for (MolecularType mt : model.getRbmModelContainer().getMolecularTypeList()) {
        if (mt.getName().equals(name)) {
            String msg = "Name '" + name + "' name already used for " + mt.getDisplayType() + " '" + mt.getName() + "'.";
            issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.Severity.WARNING));
            // no need to look further, we won't find another match since Molecule names are unique
            break;
        }
    }
    if (reactantPatterns == null) {
        issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, "Reactant Pattern is null", Issue.Severity.ERROR));
    } else if (reactantPatterns.isEmpty()) {
        String msg = typeName + " " + name + " does not have any Reactants.\n";
        issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.Severity.ERROR));
    } else {
        checkReactantPatterns(issueContext, issueList);
        for (ReactantPattern rp : reactantPatterns) {
            issueContext = issueContext.newChildContext(ContextType.ReactionRule, this);
            rp.getSpeciesPattern().gatherIssues(issueContext, issueList);
        }
    }
    if (productPatterns == null) {
        issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, "Product Pattern is null", Issue.Severity.ERROR));
    } else if (productPatterns.isEmpty()) {
        String msg = typeName + " " + name + " does not have any Products.\n";
        issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.Severity.ERROR));
    } else {
        checkProductPatterns(issueContext, issueList);
        for (ProductPattern pp : productPatterns) {
            issueContext = issueContext.newChildContext(ContextType.ReactionRule, this);
            pp.getSpeciesPattern().gatherIssues(issueContext, issueList);
        }
    }
    kineticLaw.gatherIssues(issueContext, issueList);
    if (molecularTypeMappings == null) {
        issueList.add(new Issue(this, issueContext, IssueCategory.KineticsExpressionMissing, MolecularType.typeName + " Mapping is null", Issue.Severity.WARNING));
    }
    // the structure must be in the list of anchors, if anchors are being used -------------------------------
    for (ReactantPattern rp : reactantPatterns) {
        SpeciesPattern sp = rp.getSpeciesPattern();
        for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
            MolecularType mt = mtp.getMolecularType();
            if (mt.isAnchorAll()) {
                // no restrictions for this molecular type
                continue;
            }
            if (!mt.getAnchors().contains(rp.getStructure())) {
                String message = "The Structure " + structure.getName() + " is not allowed for the Molecule " + mt.getDisplayName();
                issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.ERROR));
            }
        }
    }
    for (ProductPattern pp : productPatterns) {
        SpeciesPattern sp = pp.getSpeciesPattern();
        for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
            MolecularType mt = mtp.getMolecularType();
            if (mt.isAnchorAll()) {
                // no restrictions for this molecular type
                continue;
            }
            if (!mt.getAnchors().contains(pp.getStructure())) {
                String message = "The Structure " + structure.getName() + " is not allowed for the Molecule " + mt.getDisplayName();
                issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.ERROR));
            }
        }
    }
    for (ReactantPattern rp : reactantPatterns) {
        SpeciesPattern sp = rp.getSpeciesPattern();
        for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
            String name = mtp.getMolecularType().getDisplayName().toLowerCase();
            if (name.equals("trash")) {
                String message = "'Trash' is a reserved NFSim keyword and it cannot be used as a reactant.";
                issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.WARNING));
            }
        }
    }
    if (bReversible) {
        for (ProductPattern pp : productPatterns) {
            SpeciesPattern sp = pp.getSpeciesPattern();
            for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
                String name = mtp.getMolecularType().getDisplayName().toLowerCase();
                if (name.equals("trash")) {
                    String message = "'Trash' is a reserved NFSim keyword and it cannot be used as a reactant.";
                    issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.WARNING));
                }
            }
        }
    }
    // match management
    issueContext = issueContext.newChildContext(ContextType.ReactionRule, this);
    Map<String, Integer> matchedReactants = new LinkedHashMap<String, Integer>();
    Map<String, Integer> unmatchedReactants = new LinkedHashMap<String, Integer>();
    Map<String, MolecularTypePattern> rMatches = new LinkedHashMap<String, MolecularTypePattern>();
    for (ReactantPattern rp : reactantPatterns) {
        SpeciesPattern sp = rp.getSpeciesPattern();
        for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
            String thisName = mtp.getMolecularType().getDisplayName();
            if (!mtp.hasExplicitParticipantMatch()) {
                if (unmatchedReactants.containsKey(thisName)) {
                    int newCounter = unmatchedReactants.get(thisName) + 1;
                    unmatchedReactants.put(thisName, newCounter);
                } else {
                    unmatchedReactants.put(thisName, 1);
                }
                continue;
            }
            // the value doesn't matter, it's important to be there
            matchedReactants.put(thisName, 99);
            String key = mtp.getParticipantMatchLabel();
            if (rMatches.containsKey(key)) {
                // no duplicates in reactants allowed
                String message = "Multiple Reactants with the same match id " + key + " are not allowed.";
                issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.WARNING));
            } else {
                rMatches.put(key, mtp);
            }
        }
    }
    Map<String, Integer> matchedProducts = new LinkedHashMap<String, Integer>();
    Map<String, Integer> unmatchedProducts = new LinkedHashMap<String, Integer>();
    Map<String, MolecularTypePattern> pMatches = new LinkedHashMap<String, MolecularTypePattern>();
    for (ProductPattern pp : productPatterns) {
        SpeciesPattern sp = pp.getSpeciesPattern();
        for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
            String thisName = mtp.getMolecularType().getDisplayName();
            if (!mtp.hasExplicitParticipantMatch()) {
                if (unmatchedProducts.containsKey(thisName)) {
                    int newCounter = unmatchedProducts.get(thisName) + 1;
                    unmatchedProducts.put(thisName, newCounter);
                } else {
                    unmatchedProducts.put(thisName, 1);
                }
                continue;
            }
            matchedProducts.put(thisName, 100);
            String key = mtp.getParticipantMatchLabel();
            if (pMatches.containsKey(key)) {
                // no duplicates in products allowed
                String message = "Multiple Products with the same match id " + key + " are not allowed.";
                issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.WARNING));
            } else {
                pMatches.put(key, mtp);
            }
        }
    }
    // 2+ unmatched reactants and 1+ unmatched products of same molecule mean error (or vice-versa: 1+ && 2+)
    for (String key : unmatchedReactants.keySet()) {
        if (unmatchedProducts.containsKey(key)) {
            // both maps have the same unmatched molecule, anything larger than 1 and 1 means matching error
            int rCounter = unmatchedReactants.get(key);
            int pCounter = unmatchedProducts.get(key);
            if ((rCounter > 1 && pCounter > 1) || (rCounter > 0 && pCounter > 1)) {
                String message = "Matching missing for Molecule " + key;
                issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.ERROR));
            }
        }
    }
    // must look also for combination with matches and unmatches for the same molecule like pA rA matched AND also pA and rA unmatched - one of each unmatched
    for (String key : unmatchedReactants.keySet()) {
        if (unmatchedProducts.containsKey(key) && matchedProducts.containsKey(key) && matchedReactants.containsKey(key)) {
            int rCounter = matchedReactants.get(key);
            int pCounter = matchedProducts.get(key);
            if (rCounter == 1 && pCounter == 1) {
                // the cases when either is >1 was addressed above, don't need duplicates
                String message = "Matching missing for Molecule " + key;
                issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.ERROR));
            }
        }
    }
    // unmatched products must be unambiguous (bond can't be 'possible' and state can't be 'any')
    for (ProductPattern pp : productPatterns) {
        SpeciesPattern sp = pp.getSpeciesPattern();
        for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
            MolecularTypePattern match = getMatchingReactantMolecule(mtp);
            if (match == null) {
                // this product has no reactant to match
                for (MolecularComponentPattern mcp : mtp.getComponentPatternList()) {
                    if (mcp.isAmbiguousBond()) {
                        String message = "Ambiguous bond '" + mcp.getBondType().name() + "' in site '" + mcp.getMolecularComponent().getDisplayName() + "' in unmatched product molecule '" + mtp.getMolecularType().getDisplayName() + "'";
                        issueList.add(new Issue(this, mcp, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
                    }
                    if (mcp.isAmbiguousState()) {
                        String message = "Ambiguous state 'any' in site '" + mcp.getMolecularComponent().getDisplayName() + "' in unmatched product molecule '" + mtp.getMolecularType().getDisplayName() + "'";
                        issueList.add(new Issue(this, mcp, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
                    }
                }
            }
        }
    }
    if (bReversible) {
        // same as above for reactants if the rule is reversible
        for (ReactantPattern rp : reactantPatterns) {
            SpeciesPattern sp = rp.getSpeciesPattern();
            for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
                MolecularTypePattern match = getMatchingProductMolecule(mtp);
                if (match == null) {
                    for (MolecularComponentPattern mcp : mtp.getComponentPatternList()) {
                        if (mcp.isAmbiguousBond()) {
                            String message = "Ambiguous bond '" + mcp.getBondType().name() + "' in site '" + mcp.getMolecularComponent().getDisplayName() + "' in unmatched reactant molecule '" + mtp.getMolecularType().getDisplayName() + "'";
                            issueList.add(new Issue(this, mcp, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
                        }
                        if (mcp.isAmbiguousState()) {
                            String message = "Ambiguous state 'any' in site '" + mcp.getMolecularComponent().getDisplayName() + "' in unmatched reactant molecule '" + mtp.getMolecularType().getDisplayName() + "'";
                            issueList.add(new Issue(this, mcp, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
                        }
                    }
                }
            }
        }
    }
    // invalid combinations of bonds / states for corresponding reactant/product component pairs
    for (ReactantPattern rp : reactantPatterns) {
        SpeciesPattern sp = rp.getSpeciesPattern();
        for (MolecularTypePattern mtpReactant : sp.getMolecularTypePatterns()) {
            MolecularTypePattern mtpProduct = getMatchingProductMolecule(mtpReactant);
            // mtpProduct may be null (perhaps we don't have yet any explicit or implicit match for this reactant)
            if (mtpProduct == null) {
                continue;
            }
            for (MolecularComponentPattern mcpReactant : mtpReactant.getComponentPatternList()) {
                // search for a match of the component in this product molecule
                MolecularComponentPattern mcpProduct = ReactionRule.getMatchingComponent(mtpProduct, mcpReactant);
                if (mcpProduct == null) {
                    throw new RuntimeException("Reactant Site " + mcpReactant.getDisplayName() + " is missing its matching Product Site.");
                }
                boolean incompatibleBonds = false;
                switch(mcpReactant.getBondType()) {
                    case Exists:
                        switch(mcpProduct.getBondType()) {
                            case Exists:
                                break;
                            case None:
                                incompatibleBonds = true;
                                break;
                            case Possible:
                                incompatibleBonds = true;
                                break;
                            case Specified:
                                incompatibleBonds = true;
                                break;
                        }
                        break;
                    case None:
                        switch(mcpProduct.getBondType()) {
                            case Exists:
                                incompatibleBonds = true;
                                break;
                            case None:
                                break;
                            case Possible:
                                incompatibleBonds = true;
                                break;
                            case Specified:
                                break;
                        }
                        break;
                    case Possible:
                        switch(mcpProduct.getBondType()) {
                            case Exists:
                                incompatibleBonds = true;
                                break;
                            case None:
                                incompatibleBonds = true;
                                break;
                            case Possible:
                                break;
                            case Specified:
                                incompatibleBonds = true;
                                break;
                        }
                        break;
                    case Specified:
                        switch(mcpProduct.getBondType()) {
                            case Exists:
                                incompatibleBonds = true;
                                break;
                            case None:
                                break;
                            case Possible:
                                incompatibleBonds = true;
                                break;
                            case Specified:
                                break;
                        }
                        break;
                }
                // ----- end of bonds switch
                if (incompatibleBonds) {
                    String message = "Reactant " + MolecularComponentPattern.typeName + " " + mcpReactant.getDisplayName();
                    message += " and its matching Product " + MolecularComponentPattern.typeName + " " + mcpProduct.getDisplayName() + " have incompatible Bond Types.";
                    issueList.add(new Issue(this, mcpProduct, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
                }
                boolean incompatibleStates = true;
                if (mcpReactant.getMolecularComponent().getComponentStateDefinitions().isEmpty()) {
                // nothing to do if there are no States defined
                } else {
                    ComponentStatePattern cspReactant = mcpReactant.getComponentStatePattern();
                    ComponentStatePattern cspProduct = mcpProduct.getComponentStatePattern();
                    if (cspReactant == null) {
                        String message = "Required " + ComponentStatePattern.typeName + " missing for " + MolecularComponentPattern.typeName + " " + mcpReactant.getDisplayName();
                        issueList.add(new Issue(this, mcpReactant, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
                    }
                    if (cspProduct == null) {
                        String message = "Required " + ComponentStatePattern.typeName + " missing for " + MolecularComponentPattern.typeName + " " + mcpProduct.getDisplayName();
                        issueList.add(new Issue(this, mcpProduct, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
                    }
                    if (cspReactant.isAny() && cspProduct.isAny()) {
                        incompatibleStates = false;
                    } else if (!cspReactant.isAny() && !cspProduct.isAny()) {
                        incompatibleStates = false;
                    }
                    if (incompatibleStates) {
                        String message = "Reactant " + MolecularComponentPattern.typeName + " " + mcpReactant.getDisplayName();
                        message += " and its matching Product " + MolecularComponentPattern.typeName + " " + mcpProduct.getDisplayName() + " have incompatible States";
                        issueList.add(new Issue(this, mcpProduct, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
                    }
                }
            }
        }
    }
}
Also used : Issue(org.vcell.util.Issue) MolecularComponentPattern(org.vcell.model.rbm.MolecularComponentPattern) ComponentStatePattern(org.vcell.model.rbm.ComponentStatePattern) SpeciesPattern(org.vcell.model.rbm.SpeciesPattern) LinkedHashMap(java.util.LinkedHashMap) MolecularType(org.vcell.model.rbm.MolecularType) MolecularTypePattern(org.vcell.model.rbm.MolecularTypePattern)

Example 33 with MolecularType

use of org.vcell.model.rbm.MolecularType in project vcell by virtualcell.

the class SpeciesContext method checkComponentStateConsistency.

public void checkComponentStateConsistency(IssueContext issueContext, List<Issue> issueList, MolecularTypePattern mtpThis) {
    issueContext = issueContext.newChildContext(ContextType.SpeciesContext, this);
    MolecularType mtThat = mtpThis.getMolecularType();
    for (MolecularComponentPattern mcpThis : mtpThis.getComponentPatternList()) {
        ComponentStatePattern cspThis = mcpThis.getComponentStatePattern();
        String mcNameThis = mcpThis.getMolecularComponent().getName();
        MolecularComponent[] mcThatList = mtThat.getMolecularComponents(mcNameThis);
        if (mcThatList.length == 0) {
            System.out.println("we already fired an issue about component missing");
            // nothing to do here, we already fired an issue about component missing
            continue;
        } else if (mcThatList.length > 1) {
            String msg = "Multiple " + MolecularComponent.typeName + "s with the same name are not yet supported.";
            issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.SEVERITY_ERROR));
        } else {
            // found exactly 1 component
            MolecularComponent mcThat = mcThatList[0];
            List<ComponentStateDefinition> csdListThat = mcThat.getComponentStateDefinitions();
            if (csdListThat.size() == 0) {
                // component has no states, we check if mcpThis has any states... it shouldn't
                if (cspThis == null) {
                    // all is well
                    continue;
                }
                if (!cspThis.isAny() || (cspThis.getComponentStateDefinition() != null)) {
                    String msg = MolecularComponentPattern.typeName + " " + mcNameThis + " is in an invalid State.";
                    issueList.add(new Issue(this, mcpThis, issueContext, IssueCategory.Identifiers, msg, null, Issue.SEVERITY_WARNING));
                }
            } else {
                // we check if mcpThis has any of these states... it should!
                if ((cspThis == null) || cspThis.isAny() || (cspThis.getComponentStateDefinition() == null)) {
                    String msg = MolecularComponentPattern.typeName + " " + mcNameThis + " must be in an explicit State.";
                    issueList.add(new Issue(this, mcpThis, issueContext, IssueCategory.Identifiers, msg, null, Issue.Severity.ERROR));
                } else {
                    String csdNameThis = cspThis.getComponentStateDefinition().getName();
                    if (csdNameThis.isEmpty() || (mcThat.getComponentStateDefinition(csdNameThis) == null)) {
                        String msg = "Invalid State " + csdNameThis + " for " + MolecularComponentPattern.typeName + " " + mcNameThis;
                        issueList.add(new Issue(this, mcpThis, issueContext, IssueCategory.Identifiers, msg, null, Issue.SEVERITY_WARNING));
                    }
                }
            }
        }
    }
}
Also used : MolecularType(org.vcell.model.rbm.MolecularType) Issue(org.vcell.util.Issue) MolecularComponentPattern(org.vcell.model.rbm.MolecularComponentPattern) MolecularComponent(org.vcell.model.rbm.MolecularComponent) ComponentStatePattern(org.vcell.model.rbm.ComponentStatePattern) List(java.util.List)

Example 34 with MolecularType

use of org.vcell.model.rbm.MolecularType in project vcell by virtualcell.

the class SpeciesContext method gatherIssues.

public void gatherIssues(IssueContext issueContext, List<Issue> issueList) {
    issueContext = issueContext.newChildContext(ContextType.SpeciesContext, this);
    if (species == null) {
        issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, "Species is null", Issue.SEVERITY_WARNING));
    } else {
        if (speciesPattern != null) {
            checkBondsSufficiency(issueContext, issueList, speciesPattern);
            speciesPattern.checkSpeciesPattern(issueContext, issueList);
            speciesPattern.gatherIssues(issueContext, issueList);
            for (MolecularType mtThat : model.getRbmModelContainer().getMolecularTypeList()) {
                for (MolecularTypePattern mtpThis : speciesPattern.getMolecularTypePatterns()) {
                    if (mtThat.getName().equals(mtpThis.getMolecularType().getName())) {
                        // this should never fire issues!!!
                        checkMolecularTypeConsistency(issueContext, issueList, mtThat, mtpThis);
                        if (!mtThat.compareEqual(mtpThis.getMolecularType())) {
                            String msg = MolecularType.typeName + "s " + mtThat.getName() + " and " + mtpThis.getMolecularType().getName() + " do not compare equal.";
                            issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.SEVERITY_WARNING));
                        } else {
                        // TODO: components cannot be missing, see if this test is really needed
                        // TODO: the isImplied test is wrong here
                        // String msg = "All components in the " + mtThat.getDisplayType() + " definition must be present. Missing:";
                        // boolean isInvalid = false;
                        // for(int i=0; i< mtpThis.getComponentPatternList().size(); i++) {
                        // MolecularComponentPattern mcp = mtpThis.getComponentPatternList().get(i);
                        // if(mcp.isImplied()) {
                        // if(isInvalid) {
                        // msg += ",";
                        // }
                        // isInvalid = true;
                        // msg += " " + mcp.getMolecularComponent().getName();
                        // }
                        // }
                        // if(isInvalid) {
                        // msg += ".";
                        // issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.Severity.ERROR));
                        // }
                        }
                    }
                }
            }
            // if the component has states, the component pattern must have ONE of those states
            for (MolecularTypePattern mtpThis : speciesPattern.getMolecularTypePatterns()) {
                checkComponentStateConsistency(issueContext, issueList, mtpThis);
            }
            // the bond must not be ambiguous - seed species must be either unbound or specified (explicit) bond
            for (MolecularTypePattern mtpThis : speciesPattern.getMolecularTypePatterns()) {
                for (MolecularComponentPattern mcpThis : mtpThis.getComponentPatternList()) {
                    if (mcpThis.getBondType() == BondType.Possible || mcpThis.getBondType() == BondType.Exists) {
                        String msg = "The Bond of " + mcpThis.getMolecularComponent().getDisplayName() + " must be 'Unbound' or explicit.";
                        issueList.add(new Issue(this, mcpThis, issueContext, IssueCategory.Identifiers, msg, null, Issue.Severity.ERROR));
                    }
                }
            }
            // the structure must be in the list of anchors, if anchors are being used
            for (MolecularTypePattern mtp : speciesPattern.getMolecularTypePatterns()) {
                MolecularType mt = mtp.getMolecularType();
                if (mt.isAnchorAll()) {
                    // no restrictions for this molecular type
                    continue;
                }
                if (!mt.getAnchors().contains(structure)) {
                    String message = "The Structure " + structure.getName() + " is not allowed for the Molecule " + mt.getDisplayName();
                    issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.ERROR));
                }
            }
            // check for reserved name 'trash'
            for (MolecularTypePattern mtp : speciesPattern.getMolecularTypePatterns()) {
                String name = mtp.getMolecularType().getDisplayName().toLowerCase();
                if (name.equals("trash")) {
                    String message = "'Trash' is a reserved NFSim keyword and it cannot be used as a seed species.";
                    issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.WARNING));
                }
            }
        }
    }
}
Also used : MolecularType(org.vcell.model.rbm.MolecularType) Issue(org.vcell.util.Issue) MolecularComponentPattern(org.vcell.model.rbm.MolecularComponentPattern) MolecularTypePattern(org.vcell.model.rbm.MolecularTypePattern)

Example 35 with MolecularType

use of org.vcell.model.rbm.MolecularType in project vcell by virtualcell.

the class RbmMolecularTypeTreeCellEditor method getTreeCellEditorComponent.

@Override
public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
    Component component = null;
    realEditor = defaultCellEditor;
    if (value instanceof BioModelNode) {
        BioModelNode node = (BioModelNode) value;
        Object userObject = node.getUserObject();
        String text = null;
        Icon icon = null;
        if (userObject instanceof MolecularType) {
            text = ((MolecularType) userObject).getName();
            icon = VCellIcons.rbmMolecularTypeIcon;
        } else if (userObject instanceof MolecularComponent) {
            BioModelNode parentNode = (BioModelNode) node.getParent();
            Object parentObject = parentNode == null ? null : parentNode.getUserObject();
            icon = VCellIcons.rbmComponentErrorIcon;
            text = ((MolecularComponent) userObject).getName();
        } else if (userObject instanceof ComponentStateDefinition) {
            text = ((ComponentStateDefinition) userObject).getName();
            icon = VCellIcons.rbmComponentStateIcon;
        } else {
            System.out.println("unexpected thing here " + userObject);
        }
        renderer.setOpenIcon(icon);
        renderer.setClosedIcon(icon);
        renderer.setLeafIcon(icon);
        component = super.getTreeCellEditorComponent(tree, value, isSelected, expanded, leaf, row);
        if (editingComponent instanceof JTextField) {
            JTextField textField = (JTextField) editingComponent;
            textField.setText(text);
        }
    }
    return component;
}
Also used : MolecularType(org.vcell.model.rbm.MolecularType) MolecularComponent(org.vcell.model.rbm.MolecularComponent) BioModelNode(cbit.vcell.desktop.BioModelNode) Icon(javax.swing.Icon) MolecularComponent(org.vcell.model.rbm.MolecularComponent) Component(java.awt.Component) JTextField(javax.swing.JTextField) ComponentStateDefinition(org.vcell.model.rbm.ComponentStateDefinition)

Aggregations

MolecularType (org.vcell.model.rbm.MolecularType)78 SpeciesPattern (org.vcell.model.rbm.SpeciesPattern)25 MolecularComponent (org.vcell.model.rbm.MolecularComponent)23 Structure (cbit.vcell.model.Structure)20 ArrayList (java.util.ArrayList)20 ReactionRule (cbit.vcell.model.ReactionRule)19 SpeciesContext (cbit.vcell.model.SpeciesContext)19 MolecularTypePattern (org.vcell.model.rbm.MolecularTypePattern)16 PropertyVetoException (java.beans.PropertyVetoException)15 ComponentStateDefinition (org.vcell.model.rbm.ComponentStateDefinition)15 RbmObservable (cbit.vcell.model.RbmObservable)14 List (java.util.List)13 RbmModelContainer (cbit.vcell.model.Model.RbmModelContainer)12 Point (java.awt.Point)12 MolecularComponentPattern (org.vcell.model.rbm.MolecularComponentPattern)12 BioPaxObject (org.vcell.pathway.BioPaxObject)11 RelationshipObject (org.vcell.relationship.RelationshipObject)11 BioModelNode (cbit.vcell.desktop.BioModelNode)10 ModelException (cbit.vcell.model.ModelException)10 ParticleMolecularType (cbit.vcell.math.ParticleMolecularType)9