/** * Adds a new {@link Unit} instance, created from the given unit {@link Kind}, to this * {@link UnitDefinition}. * * @param unit the unit kind. */ public void addUnit(String unit) { addUnit(Unit.Kind.valueOf(unit)); }
/** * Creates a dimensionless unit definition object encapsulated in an * {@link ASTNode2Value}. * @param type The type of the dimensionless value, e.g., Boolean.class etc. * * @return */ private <T> ASTNode2Value<T> dimensionless(Class<T> type) { UnitDefinition ud = new UnitDefinition(level, version); ud.addUnit(Unit.Kind.DIMENSIONLESS); return new ASTNode2Value<T>(ud, this); }
/** * Creates a dimensionless unit definition object encapsulated in an * ASTNodeValue. * * @return */ protected ASTNodeValue dimensionless() { UnitDefinition ud = new UnitDefinition(level, version); ud.addUnit(Unit.Kind.DIMENSIONLESS); return new ASTNodeValue(ud, this); }
/** * Adds a new {@link Unit} instance, with the given kind, to this {@link UnitDefinition}. * * @param kind the unit kind. */ public void addUnit(Unit.Kind kind) { addUnit(new Unit(1d, 0, kind, 1d, getLevel(), getVersion())); }
/** * Creates an invalid unit definition encapsulated in an ASTNode2Value. * * @return */ private <T> ASTNode2Value<?> invalid() { UnitDefinition ud = new UnitDefinition(level, version); ud.addUnit(new Unit(level, version)); return new ASTNode2Value(ud, this); }
/** * Creates an invalid unit definition encapsulated in an ASTNodeValue. * * @return an invalid unit definition encapsulated in an ASTNodeValue. */ protected ASTNodeValue invalid() { UnitDefinition ud = new UnitDefinition(level, version); ud.addUnit(new Unit(level, version)); return new ASTNodeValue(ud, this); }
/** * Compile boolean values * * @param b * @return */ public ASTNodeValue compile(boolean b) { UnitDefinition ud = new UnitDefinition(level, version); ud.addUnit(Kind.DIMENSIONLESS); ASTNodeValue value = new ASTNodeValue(b, this); value.setUnits(ud); return value; }
/** * Compile boolean values * * @param b * @return */ public <T> ASTNode2Value<Boolean> compile(boolean b) { UnitDefinition ud = new UnitDefinition(level, version); ud.addUnit(Kind.DIMENSIONLESS); ASTNode2Value<Boolean> value = new ASTNode2Value<Boolean>(b, this); value.setUnits(ud); return value; }
/** * Creates a new {@link Unit} instance with the given {@link Unit.Kind} and * adds * it to this {@link UnitDefinition}. * * @param kind * the kind to be set in the new Unit. * @return a new {@link Unit} instance with the given {@link Unit.Kind}. */ public Unit createUnit(Unit.Kind kind) { Unit unit = new Unit(1d, 0, kind, 1d, getLevel(), getVersion()); addUnit(unit); return unit; }
/** * * @param id * @param name * @return */ public UnitDefinition buildUnitDefinition(String id, String name, Unit... units) { Model model = getModel(); UnitDefinition ud = model.createUnitDefinition(id); ud.setName(name); if (units != null) { for (Unit unit : units) { ud.addUnit(unit); } } return ud; }
/** * * @param base * @param exponent * @return * @throws SBMLException */ protected ASTNodeValue pow(ASTNodeValue base, ASTNodeValue exponent) throws SBMLException { double exp = Double.NaN, v; v = exponent.toDouble(); exp = v == 0d ? 0d : 1d / v; if (exp == 0d) { UnitDefinition ud = new UnitDefinition(level, version); ud.addUnit(Kind.DIMENSIONLESS); ASTNodeValue value = new ASTNodeValue(ud, this); value.setValue(Integer.valueOf(1)); return value; } if (!Double.isNaN(exp)) { return root(exp, base); } return new ASTNodeValue(this); }
@Override public UnitDefinition getDerivedUnitDefinition() { if (isSetStoichiometryMath()) { return stoichiometryMath.getDerivedUnitDefinition(); } UnitDefinition ud = new UnitDefinition(getLevel(), getVersion()); ud.addUnit(Unit.Kind.DIMENSIONLESS); return ud; }
@Override @Deprecated public void setUnits(Unit unit) { UnitDefinition ud = new UnitDefinition(unit.getKind().toString(), getLevel(), getVersion()); ud.addUnit(unit); if ((unit.getExponent() != 1) || (unit.getScale() != 0) || (unit.getMultiplier() != 1d) || (unit.getOffset() != 0d)) { StringBuilder sb = new StringBuilder(); sb.append(unit.getMultiplier()); sb.append('_'); sb.append(unit.getScale()); sb.append('_'); sb.append(unit.getKind().toString()); sb.append('_'); sb.append(unit.getExponent()); ud.setId(sb.toString()); Model m = getModel(); if (m != null) { m.addUnitDefinition(ud); } } setUnits(ud); }
@Override public ASTNodeValue compile(double real, String units) { ASTNodeValue v = new ASTNodeValue(real, this); UnitDefinition ud; if (Unit.Kind.isValidUnitKindString(units, level, version)) { ud = new UnitDefinition(level, version); ud.addUnit(Unit.Kind.valueOf(units.toUpperCase())); v.setUnits(ud); } else if (model != null) { ud = model.getUnitDefinition(units); if (ud != null) { v.setUnits(ud); } } return v; }
@Override public <T> ASTNode2Value<Double> getConstantAvogadro(String name) { // TODO: If there is a different value in a later SBML specification, this must be checked here. ASTNode2Value<Double> value = new ASTNode2Value<Double>(Maths.AVOGADRO_L3V1, this); UnitDefinition perMole = new UnitDefinition(level, version); perMole.setLevel(level); perMole.setId("per_mole"); perMole.addUnit(new Unit(1d, 0, Kind.MOLE, -1d, level, version)); value.setUnits(perMole); return value; }
@Override public <T> ASTNode2Value<String> compile(double real, String units) { ASTNode2Value<String> v = new ASTNode2Value<String>(StringTools.toString(Locale.ENGLISH, real), this); UnitDefinition ud; if (Unit.Kind.isValidUnitKindString(units, level, version)) { ud = new UnitDefinition(level, version); ud.addUnit(Unit.Kind.valueOf(units.toUpperCase())); v.setUnits(ud); } else if (model != null) { ud = model.getUnitDefinition(units); if (ud != null) { v.setUnits(ud); } } return v; }
@Override public ASTNodeValue getConstantAvogadro(String name) { ASTNodeValue value = new ASTNodeValue(Maths.getAvogadro(level, version), this); UnitDefinition perMole = new UnitDefinition(level, version); perMole.setLevel(level); perMole.setId("per_mole"); perMole.addUnit(new Unit(1d, 0, Kind.MOLE, -1d, level, version)); value.setUnits(perMole); return value; }
@Override public UnitDefinition getUnitsInstance() { String unitsId = unitsID; if (isSetUnits()) { int level = getLevel(), version = getVersion(); if (Unit.isUnitKind(unitsId, level, version)) { UnitDefinition ud = new UnitDefinition(unitsId + UnitDefinition.BASE_UNIT_SUFFIX, level, version); ud.addUnit(Unit.Kind.valueOf(unitsId.toUpperCase())); return ud; } } else { unitsId = getPredefinedUnitID(); } Model model = getModel(); return model == null ? null : model.getUnitDefinition(unitsId); }
/** * * @return the UnitDefinition instance which has the substanceUnistID of * this KineticLaw as id. Return null if it doesn't exist. */ @Deprecated public UnitDefinition getSubstanceUnitsInstance() { Model m = getModel(); if ((m != null) && isSetSubstanceUnits()) { return m.getUnitDefinition(substanceUnitsID); } if (unitsID != null) { UnitDefinition def = new UnitDefinition(UnitDefinition.SUBSTANCE, getLevel(), getVersion()); for (Unit unit : getUnitsInstance().getListOfUnits()) { if (unit.isVariantOfSubstance()) { def.addUnit(unit); } } return def; } return null; }
/** * * @return the UnitDefinition instance which has the timeUnistID of this * KineticLaw as id. Return null if it doesn't exist. */ @Deprecated public UnitDefinition getTimeUnitsInstance() { Model m = getModel(); if ((m != null) && isSetTimeUnits()) { return m.getUnitDefinition(timeUnitsID); } if (unitsID != null) { UnitDefinition def = new UnitDefinition(UnitDefinition.TIME, getLevel(), getVersion()); Unit time; for (Unit unit : getUnitsInstance().getListOfUnits()) { time = unit.clone(); time.setExponent(-unit.getExponent()); if (unit.isVariantOfTime()) { def.addUnit(time); } } return def; } return null; }