|
|
|
@@ -3,8 +3,9 @@ import org.jgrapht.graph.SimpleWeightedGraph;
|
|
|
|
|
import org.jgrapht.nio.Attribute;
|
|
|
|
|
import org.jgrapht.nio.AttributeType;
|
|
|
|
|
import org.jgrapht.nio.DefaultAttribute;
|
|
|
|
|
import org.jgrapht.nio.dot.DOTExporter;
|
|
|
|
|
import org.jgrapht.nio.graphml.GraphMLExporter;
|
|
|
|
|
import org.jgrapht.nio.graphml.GraphMLExporter.AttributeCategory;
|
|
|
|
|
import org.w3c.dom.Attr;
|
|
|
|
|
|
|
|
|
|
import java.io.BufferedWriter;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
@@ -12,14 +13,14 @@ import java.nio.file.Files;
|
|
|
|
|
import java.nio.file.Path;
|
|
|
|
|
import java.nio.file.StandardOpenOption;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.LinkedHashMap;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
public class GraphMLFileWriter {
|
|
|
|
|
|
|
|
|
|
String filename;
|
|
|
|
|
SimpleWeightedGraph graph;
|
|
|
|
|
GraphWithMapData data;
|
|
|
|
|
|
|
|
|
|
Map<String, Attribute> graphAttributes;
|
|
|
|
|
|
|
|
|
|
public GraphMLFileWriter(String filename, GraphWithMapData data) {
|
|
|
|
|
if(!filename.matches(".*\\.graphml")){
|
|
|
|
@@ -27,52 +28,61 @@ public class GraphMLFileWriter {
|
|
|
|
|
}
|
|
|
|
|
this.filename = filename;
|
|
|
|
|
this.data = data;
|
|
|
|
|
this.graph = data.getGraph();
|
|
|
|
|
graphAttributes = createGraphAttributes();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// public void writeGraphToFile() {
|
|
|
|
|
// try(BufferedWriter writer = Files.newBufferedWriter(Path.of(filename), StandardOpenOption.CREATE_NEW);
|
|
|
|
|
// ){
|
|
|
|
|
// GraphMLExporter<SimpleWeightedGraph, BufferedWriter> exporter = new GraphMLExporter<>();
|
|
|
|
|
// exporter.exportGraph(graph, writer);
|
|
|
|
|
// } catch(IOException ex){
|
|
|
|
|
// System.out.println("Could not make new file named "+filename);
|
|
|
|
|
// System.err.println(ex);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
public GraphMLFileWriter(String filename, SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph) {
|
|
|
|
|
if(!filename.matches(".*\\.graphml")){
|
|
|
|
|
filename = filename + ".graphml";
|
|
|
|
|
}
|
|
|
|
|
this.filename = filename;
|
|
|
|
|
this.graph = graph;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, Attribute> createGraphAttributes(){
|
|
|
|
|
Map<String, Attribute> ga = new HashMap<>();
|
|
|
|
|
//Sample plate filename
|
|
|
|
|
ga.put("sample plate filename", DefaultAttribute.createAttribute(data.getSourceFilename()));
|
|
|
|
|
// Number of wells
|
|
|
|
|
ga.put("well count", DefaultAttribute.createAttribute(data.getNumWells().toString()));
|
|
|
|
|
//Well populations
|
|
|
|
|
Integer[] wellPopulations = data.getWellPopulations();
|
|
|
|
|
StringBuilder populationsStringBuilder = new StringBuilder();
|
|
|
|
|
populationsStringBuilder.append(wellPopulations[0].toString());
|
|
|
|
|
for(int i = 1; i < wellPopulations.length; i++){
|
|
|
|
|
populationsStringBuilder.append(", ");
|
|
|
|
|
populationsStringBuilder.append(wellPopulations[i].toString());
|
|
|
|
|
}
|
|
|
|
|
String wellPopulationsString = populationsStringBuilder.toString();
|
|
|
|
|
ga.put("well populations", DefaultAttribute.createAttribute(wellPopulationsString));
|
|
|
|
|
return ga;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void writeGraphToFile() {
|
|
|
|
|
SimpleWeightedGraph graph = data.getGraph();
|
|
|
|
|
Map<Integer, Integer> vertexToAlphaMap = data.getPlateVtoAMap();
|
|
|
|
|
Map<Integer, Integer> vertexToBetaMap = data.getPlateVtoBMap();
|
|
|
|
|
Map<Integer, Integer> alphaOccs = data.getAlphaWellCounts();
|
|
|
|
|
Map<Integer, Integer> betaOccs = data.getBetaWellCounts();
|
|
|
|
|
try(BufferedWriter writer = Files.newBufferedWriter(Path.of(filename), StandardOpenOption.CREATE_NEW);
|
|
|
|
|
){
|
|
|
|
|
//create exporter. Let the vertex labels be the unique ids for the vertices
|
|
|
|
|
GraphMLExporter<Integer, SimpleWeightedGraph<Vertex, DefaultWeightedEdge>> exporter = new GraphMLExporter<>(v -> v.toString());
|
|
|
|
|
GraphMLExporter<Vertex, SimpleWeightedGraph<Vertex, DefaultWeightedEdge>> exporter = new GraphMLExporter<>(v -> v.getVertexLabel().toString());
|
|
|
|
|
//set to export weights
|
|
|
|
|
exporter.setExportEdgeWeights(true);
|
|
|
|
|
//Set graph attributes
|
|
|
|
|
exporter.setGraphAttributeProvider( () -> graphAttributes);
|
|
|
|
|
//set type, sequence, and occupancy attributes for each vertex
|
|
|
|
|
exporter.setVertexAttributeProvider( v -> {
|
|
|
|
|
Map<String, Attribute> attributes = new HashMap<>();
|
|
|
|
|
if(vertexToAlphaMap.containsKey(v)) {
|
|
|
|
|
attributes.put("type", DefaultAttribute.createAttribute("CDR3 Alpha"));
|
|
|
|
|
attributes.put("sequence", DefaultAttribute.createAttribute(vertexToAlphaMap.get(v)));
|
|
|
|
|
attributes.put("occupancy", DefaultAttribute.createAttribute(
|
|
|
|
|
alphaOccs.get(vertexToAlphaMap.get(v))));
|
|
|
|
|
}
|
|
|
|
|
else if(vertexToBetaMap.containsKey(v)) {
|
|
|
|
|
attributes.put("type", DefaultAttribute.createAttribute("CDR3 Beta"));
|
|
|
|
|
attributes.put("sequence", DefaultAttribute.createAttribute(vertexToBetaMap.get(v)));
|
|
|
|
|
attributes.put("occupancy", DefaultAttribute.createAttribute(
|
|
|
|
|
betaOccs.get(vertexToBetaMap.get(v))));
|
|
|
|
|
}
|
|
|
|
|
attributes.put("type", DefaultAttribute.createAttribute(v.getType().name()));
|
|
|
|
|
attributes.put("sequence", DefaultAttribute.createAttribute(v.getSequence()));
|
|
|
|
|
attributes.put("occupancy", DefaultAttribute.createAttribute(v.getOccupancy()));
|
|
|
|
|
return attributes;
|
|
|
|
|
});
|
|
|
|
|
//register the attributes
|
|
|
|
|
exporter.registerAttribute("type", GraphMLExporter.AttributeCategory.NODE, AttributeType.STRING);
|
|
|
|
|
exporter.registerAttribute("sequence", GraphMLExporter.AttributeCategory.NODE, AttributeType.STRING);
|
|
|
|
|
exporter.registerAttribute("occupancy", GraphMLExporter.AttributeCategory.NODE, AttributeType.STRING);
|
|
|
|
|
for(String s : graphAttributes.keySet()) {
|
|
|
|
|
exporter.registerAttribute(s, AttributeCategory.GRAPH, AttributeType.STRING);
|
|
|
|
|
}
|
|
|
|
|
exporter.registerAttribute("type", AttributeCategory.NODE, AttributeType.STRING);
|
|
|
|
|
exporter.registerAttribute("sequence", AttributeCategory.NODE, AttributeType.STRING);
|
|
|
|
|
exporter.registerAttribute("occupancy", AttributeCategory.NODE, AttributeType.STRING);
|
|
|
|
|
//export the graph
|
|
|
|
|
exporter.exportGraph(graph, writer);
|
|
|
|
|
} catch(IOException ex){
|
|
|
|
@@ -81,4 +91,3 @@ public class GraphMLFileWriter {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|