public MetabolicReaction parseTwoSidedReaction( PreparsedReaction preparsed, String[] equationSides) throws UnparsableReactionError { Matcher reactionCompartment = REACTION_COMPARTMENT.matcher(equationSides[0]); MetabolicReaction rxn = getReaction(preparsed); Compartment defaultCompartment = Organelle.CYTOPLASM; if (reactionCompartment.find()) { defaultCompartment = resolver.getCompartment(reactionCompartment.group(1)); equationSides[0] = reactionCompartment.replaceAll(""); } for (MetabolicParticipantImplementation p : parseParticipants(equationSides[0], defaultCompartment, preparsed)) { rxn.addReactant(p); } for (MetabolicParticipantImplementation p : parseParticipants(equationSides[1], defaultCompartment, preparsed)) { rxn.addProduct(p); } return rxn; }
/** Only have left side (or some weird reaction operator) */ public MetabolicReaction parseExchangeReaction(PreparsedReaction reaction, String equationSide) throws UnparsableReactionError { Matcher reactionCompartment = REACTION_COMPARTMENT.matcher(equationSide); MetabolicReaction rxn = getReaction(reaction); Compartment defaultCompartment = Organelle.CYTOPLASM; if (reactionCompartment.find()) { defaultCompartment = resolver.getCompartment(reactionCompartment.group(1)); equationSide = reactionCompartment.replaceAll(""); } for (MetabolicParticipantImplementation p : parseParticipants(equationSide, defaultCompartment, reaction)) { rxn.addReactant(p); } return rxn; }
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; }