public MetabolicReaction parseReaction(PreparsedReaction reaction) throws UnparsableReactionError { String equation = reaction.getEquation(); String[] rxnSides = getReactionSides(equation); // determine whether the reaction contains two sides or one. if (rxnSides.length == 2) { // standard reaction return parseTwoSidedReaction(reaction, rxnSides); } else if (rxnSides.length == 1) { // exchange reaction return parseExchangeReaction(reaction, rxnSides[0]); } else { throw new UnparsableReactionError("No equation found for rxn: " + reaction.getIdentifier()); } }
public MetabolicReaction getReaction(PreparsedReaction preparsed) { MetabolicReaction rxn = factory.ofClass( MetabolicReaction.class, BasicReactionIdentifier.nextIdentifier(), preparsed.hasValue(DESCRIPTION) ? preparsed.getValue(DESCRIPTION) : "", preparsed.hasValue(ABBREVIATION) ? preparsed.getValue(ABBREVIATION) : ""); if (preparsed.hasValue(DIRECTION)) { rxn.setDirection(getReactionArrow(preparsed.getValue(DIRECTION))); } else { rxn.setDirection(getReactionArrow(preparsed.getEquation())); } // add subsytem annotation if (preparsed.hasValue(SUBSYSTEM)) { rxn.addAnnotation(new Subsystem(preparsed.getSubsystem())); } // add classification for (String classification : preparsed.getClassifications()) { // load EC code if (classification.matches("(?:\\d+\\.){3}\\d+") || classification.contains("EC")) { rxn.addAnnotation(new EnzymeClassification(new ECNumber(classification))); } else if (classification.contains("TC")) { rxn.addAnnotation(new Classification(new TransportClassificationNumber(classification))); } } // add loci for (String locus : preparsed.getLoci()) { rxn.addAnnotation(new Locus(locus)); } // add delta g and delta g error if (preparsed.hasValue(FREE_ENERGY)) { try { if (preparsed.hasValue(FREE_ENERGY_ERROR)) { rxn.addAnnotation( new GibbsEnergy( Double.parseDouble(preparsed.getValue(FREE_ENERGY)), Double.parseDouble(preparsed.getValue(FREE_ENERGY_ERROR)))); } else { rxn.addAnnotation( new GibbsEnergy(Double.parseDouble(preparsed.getValue(FREE_ENERGY)), 0d)); } } catch (NumberFormatException ex) { LOGGER.error("Gibbs energy column(s) contained invalid value (not a double)"); } } if (preparsed.hasValue(MIN_FLUX)) { try { rxn.addAnnotation(new FluxLowerBound(Double.parseDouble(preparsed.getValue(MIN_FLUX)))); } catch (NumberFormatException ex) { LOGGER.error( "Min flux column contained invalid value (not a double): " + preparsed.getValue(MIN_FLUX)); } } if (preparsed.hasValue(MAX_FLUX)) { try { rxn.addAnnotation(new FluxLowerBound(Double.parseDouble(preparsed.getValue(MAX_FLUX)))); } catch (NumberFormatException ex) { LOGGER.error( "Max flux column contained invalid value (not a double): " + preparsed.getValue(MAX_FLUX)); } } return rxn; }