/*************************************************************************
* *
* This file is part of the 20n/act project. *
* 20n/act enables DNA prediction for synthetic biology/bioengineering. *
* Copyright (C) 2017 20n Labs, Inc. *
* *
* Please direct all queries to act@20n.com. *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
*************************************************************************/
package com.act.reachables;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class ReactionPath {
public List<Cascade.NodeInformation> getPath() {
return path;
}
public void setPath(List<Cascade.NodeInformation> path) {
this.path = path;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Long getTarget() {
return target;
}
public void setTarget(Long target) {
this.target = target;
}
public Long getRank() {
return rank;
}
public void setRank(Long rank) {
this.rank = rank;
}
public Integer getDegree() {
return degree;
}
public void setDegree(Integer degree) {
this.degree = degree;
}
public Integer getReactionSum() {
return reactionSum;
}
public void setReactionSum(Integer reactionSum) {
this.reactionSum = reactionSum;
}
public void setDnaDesignRef(String id) {
this.dnaDesignRef = id;
}
public String getDnaDesignRef() {
return this.dnaDesignRef;
}
private List<Cascade.NodeInformation> path;
@JsonProperty("_id")
private String id;
private Long target;
private Long rank;
private Integer degree;
private Integer reactionSum;
private Boolean isMostNative = false;
private String dnaDesignRef;
public ArrayList<String> getMostCommonOrganism() {
return mostCommonOrganism;
}
public void setMostCommonOrganism(ArrayList<String> mostCommonOrganism) {
this.mostCommonOrganism = mostCommonOrganism;
}
public ArrayList<Double> getMostCommonOrganismCount() {
return mostCommonOrganismCount;
}
public void setMostCommonOrganismCount(ArrayList<Double> mostCommonOrganismCount) {
this.mostCommonOrganismCount = mostCommonOrganismCount;
}
public Boolean getMostNative() {
return isMostNative;
}
public void setMostNative(Boolean mostNative) {
isMostNative = mostNative;
}
private ArrayList<String> mostCommonOrganism;
private ArrayList<Double> mostCommonOrganismCount;
public ReactionPath() {}
public ReactionPath(String id, List<Cascade.NodeInformation> path) {
this.id = id;
this.path = path;
this.target = Long.parseLong(this.id.split("w")[0]);
this.rank = Long.parseLong(this.id.split("w")[1]);
this.degree = this.getReactionCount(this.path.get(1));
this.reactionSum = this.path.stream().map(x -> getReactionCount(x)).collect(Collectors.summingInt(Integer::intValue));
}
public ReactionPath(List<Cascade.NodeInformation> path, String id, Long target, Long rank, Integer degree, Integer reactionSum, Boolean isMostNative, ArrayList<Double> mostCommonOrganismCount, ArrayList<String> mostCommonOrganism) {
this.path = path;
this.id = id;
this.target = target;
this.rank = rank;
this.degree = degree;
this.reactionSum = reactionSum;
this.isMostNative = isMostNative;
this.mostCommonOrganism = mostCommonOrganism;
this.mostCommonOrganismCount = mostCommonOrganismCount;
}
@JsonIgnore
private Integer getReactionCount(Cascade.NodeInformation nodeInfo) {
// Only reactions contribute
return nodeInfo.getReactionCount();
}
}