Skip to content
Snippets Groups Projects
Commit 78a70f43 authored by Robin van Esch's avatar Robin van Esch
Browse files

Added panva utility function to get similarity scores fro the graph

parent 1e18eb1d
No related branches found
No related tags found
No related merge requests found
...@@ -10,6 +10,7 @@ package nl.wur.bif.pantools.pantools; ...@@ -10,6 +10,7 @@ package nl.wur.bif.pantools.pantools;
import nl.wur.bif.pantools.cli.Map; import nl.wur.bif.pantools.cli.Map;
import nl.wur.bif.pantools.cli.*; import nl.wur.bif.pantools.cli.*;
import nl.wur.bif.pantools.pangenome.PangenomeGraph; import nl.wur.bif.pantools.pangenome.PangenomeGraph;
import nl.wur.bif.pantools.panva.panva_get_similarity.PanvaGetSimilarityCLI;
import nl.wur.bif.pantools.utils.ConsoleInput; import nl.wur.bif.pantools.utils.ConsoleInput;
import nl.wur.bif.pantools.utils.Globals; import nl.wur.bif.pantools.utils.Globals;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
...@@ -103,7 +104,8 @@ import static picocli.CommandLine.ScopeType.INHERIT; ...@@ -103,7 +104,8 @@ import static picocli.CommandLine.ScopeType.INHERIT;
RetrieveRegions.class, RetrieveRegions.class,
MSA.class, MSA.class,
Map.class, Map.class,
ExportPangenome.class ExportPangenome.class,
PanvaGetSimilarityCLI.class
}) })
public class Pantools { public class Pantools {
@Parameters(descriptionKey = "database-path", index = "0", scope = INHERIT) @Parameters(descriptionKey = "database-path", index = "0", scope = INHERIT)
......
package nl.wur.bif.pantools.panva.panva_get_similarity;
import nl.wur.bif.pantools.utils.Globals;
import org.neo4j.graphdb.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import static nl.wur.bif.pantools.utils.Globals.mRNA_label;
public class PanvaGetSimilarity {
private final GraphDatabaseService graphDb;
final BufferedWriter writer;
public PanvaGetSimilarity(GraphDatabaseService graphDb, Path databaseDirectory) throws IOException {
this.graphDb = graphDb;
this.writer = createOutputWriter(databaseDirectory);
getSimilarity();
}
private BufferedWriter createOutputWriter(Path databaseDirectory) throws IOException {
final Path outputFile = databaseDirectory.resolve("panva").resolve("similarity_scores.csv");
Files.createDirectories(outputFile.getParent());
return new BufferedWriter(new FileWriter(outputFile.toFile()));
}
private void getSimilarity() throws IOException {
writer.write("genome1,mRNA1,genome2,mRNA2,similarity\n");
try (Transaction ignored = graphDb.beginTx()) {
final ResourceIterable<Relationship> relationships = graphDb.getAllRelationships();
relationships.stream().iterator().forEachRemaining(this::readSimilarityScore);
}
writer.close();
}
private void readSimilarityScore(Relationship relationship) {
if (!relationship.isType(Globals.RelTypes.is_similar_to)) return;
final Node startNode = relationship.getStartNode();
assert startNode.hasLabel(mRNA_label);
final Node endNode = relationship.getEndNode();
assert endNode.hasLabel(mRNA_label);
final String startNodeId = (String) startNode.getProperty("id");
final String endNodeId = (String) endNode.getProperty("id");
final int startGenome = (int) startNode.getProperty("genome");
final int endGenome = (int) endNode.getProperty("genome");
final String similarity = String.valueOf((double) relationship.getProperty("similarity"));
try {
writer.write(String.join(",",
Integer.toString(startGenome),
startNodeId,
Integer.toString(endGenome),
endNodeId,
similarity));
writer.write("\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
package nl.wur.bif.pantools.panva.panva_get_similarity;
import nl.wur.bif.pantools.cli.validation.BeanValidation;
import nl.wur.bif.pantools.pantools.Pantools;
import org.neo4j.graphdb.GraphDatabaseService;
import picocli.CommandLine.Model.CommandSpec;
import java.io.IOException;
import java.nio.file.Path;
import java.util.concurrent.Callable;
import static nl.wur.bif.pantools.cli.validation.Constraints.*;
import static picocli.CommandLine.*;
/**
* Command line interface for pantools panva_similarity_scores
*
* @author Robin van Esch, Wageningen University, the Netherlands
*/
@Command(name = "panva_get_similarity")
public class PanvaGetSimilarityCLI implements Callable<Integer> {
@Spec CommandSpec spec;
@ParentCommand
@GraphDatabase
private Pantools pantools;
@Override
public Integer call() throws IOException {
pantools.createLogger(spec);
new BeanValidation().argValidation(spec, this);
pantools.setPangenomeGraph();
final Path databaseDirectory = pantools.getDatabaseDirectory();
final GraphDatabaseService graphDb = pantools.pangenomeGraph().getGraphDb();
new PanvaGetSimilarity(graphDb, databaseDirectory);
return 0;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment