Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4099ec2623 | ||
|
|
7744586e79 | ||
|
|
83eff0d1e7 | ||
|
|
d1810c453d | ||
|
|
187401f2d6 | ||
|
|
678ce99424 | ||
|
|
c21e375303 | ||
|
|
57fe9c1619 | ||
|
|
e1888a99c6 | ||
|
|
bcf5a4c749 | ||
|
|
81d8a12765 | ||
|
|
b5c0568e22 |
27
.idea/artifacts/BiGpairSEQ_Sim_jar.xml
generated
27
.idea/artifacts/BiGpairSEQ_Sim_jar.xml
generated
@@ -1,16 +1,27 @@
|
|||||||
<component name="ArtifactManager">
|
<component name="ArtifactManager">
|
||||||
<artifact type="jar" build-on-make="true" name="BiGpairSEQ_Sim:jar">
|
<artifact type="jar" name="BiGpairSEQ_Sim:jar">
|
||||||
<output-path>$PROJECT_DIR$/out/artifacts/BiGpairSEQ_Sim_jar</output-path>
|
<output-path>$PROJECT_DIR$/out/artifacts/BiGpairSEQ_Sim_jar</output-path>
|
||||||
<root id="archive" name="BiGpairSEQ_Sim.jar">
|
<root id="archive" name="BiGpairSEQ_Sim.jar">
|
||||||
<element id="directory" name="META-INF">
|
<element id="directory" name="META-INF">
|
||||||
<element id="file-copy" path="$PROJECT_DIR$/src/main/java/META-INF/MANIFEST.MF" />
|
<element id="file-copy" path="$PROJECT_DIR$/META-INF/MANIFEST.MF" />
|
||||||
</element>
|
</element>
|
||||||
<element id="module-output" name="BigPairSEQ" />
|
<element id="module-output" name="BiGpairSEQ_Sim" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jgrapht/jgrapht-core/1.5.1/jgrapht-core-1.5.1.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jgrapht/jgrapht-core/1.5.2/jgrapht-core-1.5.2.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jheaps/jheaps/0.13/jheaps-0.13.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-rng-sampling/1.6/commons-rng-sampling-1.6.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-cli/commons-cli/1.5.0/commons-cli-1.5.0.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-csv/1.14.0/commons-csv-1.14.0.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-csv/1.9.0/commons-csv-1.9.0.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/annotations/26.0.2/annotations-26.0.2.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/annotations/23.0.0/annotations-23.0.0.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jgrapht/jgrapht-io/1.5.2/jgrapht-io-1.5.2.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-rng-simple/1.6/commons-rng-simple-1.6.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-io/commons-io/2.18.0/commons-io-2.18.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-rng-core/1.6/commons-rng-core-1.6.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.18.0/commons-codec-1.18.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-rng-client-api/1.6/commons-rng-client-api-1.6.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-cli/commons-cli/1.9.0/commons-cli-1.9.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/antlr/antlr4-runtime/4.12.0/antlr4-runtime-4.12.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apfloat/apfloat/1.10.1/apfloat-1.10.1.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-text/1.10.0/commons-text-1.10.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jheaps/jheaps/0.14/jheaps-0.14.jar" path-in-jar="/" />
|
||||||
</root>
|
</root>
|
||||||
</artifact>
|
</artifact>
|
||||||
</component>
|
</component>
|
||||||
1
.idea/compiler.xml
generated
1
.idea/compiler.xml
generated
@@ -7,6 +7,7 @@
|
|||||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||||
<outputRelativeToContentRoot value="true" />
|
<outputRelativeToContentRoot value="true" />
|
||||||
<module name="BigPairSEQ" />
|
<module name="BigPairSEQ" />
|
||||||
|
<module name="BiGpairSEQ_Sim" />
|
||||||
</profile>
|
</profile>
|
||||||
</annotationProcessing>
|
</annotationProcessing>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
25
.idea/jarRepositories.xml
generated
25
.idea/jarRepositories.xml
generated
@@ -1,20 +1,35 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="RemoteRepositoriesConfiguration">
|
<component name="RemoteRepositoriesConfiguration">
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="my-internal-site" />
|
||||||
|
<option name="name" value="my-internal-site" />
|
||||||
|
<option name="url" value="https://myserver/repo" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central" />
|
||||||
|
<option name="name" value="Central Repository" />
|
||||||
|
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central repo" />
|
||||||
|
<option name="name" value="central repo" />
|
||||||
|
<option name="url" value="https://repo1.maven.org/maven2/" />
|
||||||
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="central" />
|
<option name="id" value="central" />
|
||||||
<option name="name" value="Central Repository" />
|
<option name="name" value="Central Repository" />
|
||||||
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
<remote-repository>
|
|
||||||
<option name="id" value="central" />
|
|
||||||
<option name="name" value="Maven Central repository" />
|
|
||||||
<option name="url" value="https://repo1.maven.org/maven2" />
|
|
||||||
</remote-repository>
|
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="jboss.community" />
|
<option name="id" value="jboss.community" />
|
||||||
<option name="name" value="JBoss Community repository" />
|
<option name="name" value="JBoss Community repository" />
|
||||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="34d16bdc-85f0-48ee-8e8b-144091765be1" />
|
||||||
|
<option name="name" value="34d16bdc-85f0-48ee-8e8b-144091765be1" />
|
||||||
|
<option name="url" value="https://repository.mulesoft.org/nexus/content/repositories/public/" />
|
||||||
|
</remote-repository>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
6
.idea/libraries/apache_commons_csv.xml
generated
6
.idea/libraries/apache_commons_csv.xml
generated
@@ -1,8 +1,10 @@
|
|||||||
<component name="libraryTable">
|
<component name="libraryTable">
|
||||||
<library name="apache.commons.csv" type="repository">
|
<library name="apache.commons.csv" type="repository">
|
||||||
<properties maven-id="org.apache.commons:commons-csv:1.9.0" />
|
<properties maven-id="org.apache.commons:commons-csv:1.14.0" />
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-csv/1.9.0/commons-csv-1.9.0.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-csv/1.14.0/commons-csv-1.14.0.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/commons-io/commons-io/2.18.0/commons-io-2.18.0.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.18.0/commons-codec-1.18.0.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES />
|
<SOURCES />
|
||||||
|
|||||||
4
.idea/libraries/commons_cli.xml
generated
4
.idea/libraries/commons_cli.xml
generated
@@ -1,8 +1,8 @@
|
|||||||
<component name="libraryTable">
|
<component name="libraryTable">
|
||||||
<library name="commons.cli" type="repository">
|
<library name="commons.cli" type="repository">
|
||||||
<properties maven-id="commons-cli:commons-cli:1.5.0" />
|
<properties maven-id="commons-cli:commons-cli:1.9.0" />
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/commons-cli/commons-cli/1.5.0/commons-cli-1.5.0.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/commons-cli/commons-cli/1.9.0/commons-cli-1.9.0.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES />
|
<SOURCES />
|
||||||
|
|||||||
13
.idea/libraries/commons_rng_1.xml
generated
13
.idea/libraries/commons_rng_1.xml
generated
@@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="commons-rng-1">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="file://$USER_HOME$/Downloads/commons-rng-1.6" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC />
|
|
||||||
<SOURCES>
|
|
||||||
<root url="file://$USER_HOME$/Downloads/commons-rng-1.6" />
|
|
||||||
</SOURCES>
|
|
||||||
<jarDirectory url="file://$USER_HOME$/Downloads/commons-rng-1.6" recursive="false" />
|
|
||||||
<jarDirectory url="file://$USER_HOME$/Downloads/commons-rng-1.6" recursive="false" type="SOURCES" />
|
|
||||||
</library>
|
|
||||||
</component>
|
|
||||||
7
.idea/libraries/jgrapht_core.xml
generated
7
.idea/libraries/jgrapht_core.xml
generated
@@ -1,9 +1,10 @@
|
|||||||
<component name="libraryTable">
|
<component name="libraryTable">
|
||||||
<library name="jgrapht.core" type="repository">
|
<library name="jgrapht.core" type="repository">
|
||||||
<properties maven-id="org.jgrapht:jgrapht-core:1.5.1" />
|
<properties maven-id="org.jgrapht:jgrapht-core:1.5.2" />
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jgrapht/jgrapht-core/1.5.1/jgrapht-core-1.5.1.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/jgrapht/jgrapht-core/1.5.2/jgrapht-core-1.5.2.jar!/" />
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jheaps/jheaps/0.13/jheaps-0.13.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/jheaps/jheaps/0.14/jheaps-0.14.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/apfloat/apfloat/1.10.1/apfloat-1.10.1.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES />
|
<SOURCES />
|
||||||
|
|||||||
15
.idea/libraries/jgrapht_io.xml
generated
15
.idea/libraries/jgrapht_io.xml
generated
@@ -1,13 +1,14 @@
|
|||||||
<component name="libraryTable">
|
<component name="libraryTable">
|
||||||
<library name="jgrapht.io" type="repository">
|
<library name="jgrapht.io" type="repository">
|
||||||
<properties maven-id="org.jgrapht:jgrapht-io:1.5.1" />
|
<properties maven-id="org.jgrapht:jgrapht-io:1.5.2" />
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jgrapht/jgrapht-io/1.5.1/jgrapht-io-1.5.1.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/jgrapht/jgrapht-io/1.5.2/jgrapht-io-1.5.2.jar!/" />
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jgrapht/jgrapht-core/1.5.1/jgrapht-core-1.5.1.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/jgrapht/jgrapht-core/1.5.2/jgrapht-core-1.5.2.jar!/" />
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jheaps/jheaps/0.13/jheaps-0.13.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/jheaps/jheaps/0.14/jheaps-0.14.jar!/" />
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/antlr/antlr4-runtime/4.8-1/antlr4-runtime-4.8-1.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/apfloat/apfloat/1.10.1/apfloat-1.10.1.jar!/" />
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-text/1.8/commons-text-1.8.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/antlr/antlr4-runtime/4.12.0/antlr4-runtime-4.12.0.jar!/" />
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-text/1.10.0/commons-text-1.10.0.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES />
|
<SOURCES />
|
||||||
|
|||||||
44
pom.xml
44
pom.xml
@@ -5,7 +5,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>org.example</groupId>
|
<groupId>org.example</groupId>
|
||||||
<artifactId>TCellSim</artifactId>
|
<artifactId>BiGpairSEQ_Sim</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
@@ -26,8 +26,48 @@
|
|||||||
<version>RELEASE</version>
|
<version>RELEASE</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-rng-simple -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-rng-simple</artifactId>
|
||||||
|
<version>1.6</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-rng-sampling</artifactId>
|
||||||
|
<version>1.6</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-csv</artifactId>
|
||||||
|
<version>1.14.0</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.jgrapht/jgrapht-core -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jgrapht</groupId>
|
||||||
|
<artifactId>jgrapht-core</artifactId>
|
||||||
|
<version>1.5.2</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.jgrapht/jgrapht-io -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jgrapht</groupId>
|
||||||
|
<artifactId>jgrapht-io</artifactId>
|
||||||
|
<version>1.5.2</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.jheaps/jheaps -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jheaps</groupId>
|
||||||
|
<artifactId>jheaps</artifactId>
|
||||||
|
<version>0.14</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-cli</groupId>
|
||||||
|
<artifactId>commons-cli</artifactId>
|
||||||
|
<version>1.9.0</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>11</maven.compiler.source>
|
<maven.compiler.source>11</maven.compiler.source>
|
||||||
<maven.compiler.target>11</maven.compiler.target>
|
<maven.compiler.target>11</maven.compiler.target>
|
||||||
|
|||||||
@@ -634,7 +634,10 @@ a means of exploring some very beautiful math.
|
|||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
* Update CLI option text in this readme to include Zipf distribution options
|
* Consider whether a graph database might be a better option than keeping things in memory.
|
||||||
|
* Look at fastUtil for more performant maps and arrays. Note that there is an optional jGraphT library to work with fastUtil (see FastutilMapIntVertexGraph, for example).
|
||||||
|
* Consider implementing an option to use the jGrapht sparse graph representation for a lower memory cost with very large graphs (tens or hundreds of thousands of distinct sequences).
|
||||||
|
* ~~Update CLI option text in this readme to include Zipf distribution options~~
|
||||||
* ~~Try invoking GC at end of workloads to reduce paging to disk~~ DONE
|
* ~~Try invoking GC at end of workloads to reduce paging to disk~~ DONE
|
||||||
* ~~Hold graph data in memory until another graph is read-in? ABANDONED UNABANDONED~~ DONE
|
* ~~Hold graph data in memory until another graph is read-in? ABANDONED UNABANDONED~~ DONE
|
||||||
* ~~*No, this won't work, because BiGpairSEQ simulations alter the underlying graph based on filtering constraints. Changes would cascade with multiple experiments.*~~
|
* ~~*No, this won't work, because BiGpairSEQ simulations alter the underlying graph based on filtering constraints. Changes would cascade with multiple experiments.*~~
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class BiGpairSEQ {
|
|||||||
private static boolean cacheCells = false;
|
private static boolean cacheCells = false;
|
||||||
private static boolean cachePlate = false;
|
private static boolean cachePlate = false;
|
||||||
private static boolean cacheGraph = false;
|
private static boolean cacheGraph = false;
|
||||||
private static AlgorithmType matchingAlgoritmType = AlgorithmType.HUNGARIAN;
|
private static AlgorithmType matchingAlgorithmType = AlgorithmType.HUNGARIAN;
|
||||||
private static HeapType priorityQueueHeapType = HeapType.PAIRING;
|
private static HeapType priorityQueueHeapType = HeapType.PAIRING;
|
||||||
private static DistributionType distributionType = DistributionType.ZIPF;
|
private static DistributionType distributionType = DistributionType.ZIPF;
|
||||||
private static boolean outputBinary = true;
|
private static boolean outputBinary = true;
|
||||||
@@ -166,13 +166,13 @@ public class BiGpairSEQ {
|
|||||||
return priorityQueueHeapType;
|
return priorityQueueHeapType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AlgorithmType getMatchingAlgoritmType() { return matchingAlgoritmType; }
|
public static AlgorithmType getMatchingAlgorithmType() { return matchingAlgorithmType; }
|
||||||
|
|
||||||
public static void setHungarianAlgorithm() { matchingAlgoritmType = AlgorithmType.HUNGARIAN; }
|
public static void setHungarianAlgorithm() { matchingAlgorithmType = AlgorithmType.HUNGARIAN; }
|
||||||
|
|
||||||
public static void setIntegerWeightScalingAlgorithm() { matchingAlgoritmType = AlgorithmType.INTEGER_WEIGHT_SCALING; }
|
public static void setIntegerWeightScalingAlgorithm() { matchingAlgorithmType = AlgorithmType.INTEGER_WEIGHT_SCALING; }
|
||||||
|
|
||||||
public static void setAuctionAlgorithm() { matchingAlgoritmType = AlgorithmType.AUCTION; }
|
public static void setAuctionAlgorithm() { matchingAlgorithmType = AlgorithmType.AUCTION; }
|
||||||
|
|
||||||
public static void setPairingHeap() {
|
public static void setPairingHeap() {
|
||||||
priorityQueueHeapType = HeapType.PAIRING;
|
priorityQueueHeapType = HeapType.PAIRING;
|
||||||
|
|||||||
@@ -1,72 +1,54 @@
|
|||||||
import org.jgrapht.graph.DefaultWeightedEdge;
|
import org.jgrapht.graph.DefaultWeightedEdge;
|
||||||
import org.jgrapht.graph.SimpleWeightedGraph;
|
import org.jgrapht.graph.SimpleWeightedGraph;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public interface GraphModificationFunctions {
|
public interface GraphModificationFunctions {
|
||||||
|
|
||||||
//remove over- and under-weight edges, return removed edges
|
//remove over- and under-weight edges, return removed edges
|
||||||
static Map<Vertex[], Integer> filterByOverlapThresholds(SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph,
|
static Map<DefaultWeightedEdge, Vertex[]> filterByOverlapThresholds(SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph,
|
||||||
int low, int high, boolean saveEdges) {
|
int low, int high, boolean saveEdges) {
|
||||||
Map<Vertex[], Integer> removedEdges = new HashMap<>();
|
Map<DefaultWeightedEdge, Vertex[]> removedEdges = new HashMap<>();
|
||||||
|
Set<DefaultWeightedEdge> edgesToRemove = new HashSet<>();
|
||||||
for (DefaultWeightedEdge e : graph.edgeSet()) {
|
for (DefaultWeightedEdge e : graph.edgeSet()) {
|
||||||
if ((graph.getEdgeWeight(e) > high) || (graph.getEdgeWeight(e) < low)) {
|
if ((graph.getEdgeWeight(e) > high) || (graph.getEdgeWeight(e) < low)) {
|
||||||
if(saveEdges) {
|
if(saveEdges) {
|
||||||
Vertex source = graph.getEdgeSource(e);
|
Vertex[] vertices = {graph.getEdgeSource(e), graph.getEdgeTarget(e)};
|
||||||
Vertex target = graph.getEdgeTarget(e);
|
removedEdges.put(e, vertices);
|
||||||
Integer weight = (int) graph.getEdgeWeight(e);
|
|
||||||
Vertex[] edge = {source, target};
|
|
||||||
removedEdges.put(edge, weight);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
graph.setEdgeWeight(e, 0.0);
|
|
||||||
}
|
}
|
||||||
|
edgesToRemove.add(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(saveEdges) {
|
edgesToRemove.forEach(graph::removeEdge);
|
||||||
for (Vertex[] edge : removedEdges.keySet()) {
|
|
||||||
graph.removeEdge(edge[0], edge[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return removedEdges;
|
return removedEdges;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Remove edges for pairs with large occupancy discrepancy, return removed edges
|
//Remove edges for pairs with large occupancy discrepancy, return removed edges
|
||||||
static Map<Vertex[], Integer> filterByRelativeOccupancy(SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph,
|
static Map<DefaultWeightedEdge, Vertex[]> filterByRelativeOccupancy(SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph,
|
||||||
Integer maxOccupancyDifference, boolean saveEdges) {
|
Integer maxOccupancyDifference, boolean saveEdges) {
|
||||||
Map<Vertex[], Integer> removedEdges = new HashMap<>();
|
Map<DefaultWeightedEdge, Vertex[]> removedEdges = new HashMap<>();
|
||||||
|
Set<DefaultWeightedEdge> edgesToRemove = new HashSet<>();
|
||||||
for (DefaultWeightedEdge e : graph.edgeSet()) {
|
for (DefaultWeightedEdge e : graph.edgeSet()) {
|
||||||
Integer alphaOcc = graph.getEdgeSource(e).getOccupancy();
|
Integer alphaOcc = graph.getEdgeSource(e).getOccupancy();
|
||||||
Integer betaOcc = graph.getEdgeTarget(e).getOccupancy();
|
Integer betaOcc = graph.getEdgeTarget(e).getOccupancy();
|
||||||
if (Math.abs(alphaOcc - betaOcc) >= maxOccupancyDifference) {
|
if (Math.abs(alphaOcc - betaOcc) >= maxOccupancyDifference) {
|
||||||
if (saveEdges) {
|
if (saveEdges) {
|
||||||
Vertex source = graph.getEdgeSource(e);
|
Vertex[] vertices = {graph.getEdgeSource(e), graph.getEdgeTarget(e)};
|
||||||
Vertex target = graph.getEdgeTarget(e);
|
removedEdges.put(e, vertices);
|
||||||
Integer weight = (int) graph.getEdgeWeight(e);
|
|
||||||
Vertex[] edge = {source, target};
|
|
||||||
removedEdges.put(edge, weight);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
graph.setEdgeWeight(e, 0.0);
|
|
||||||
}
|
}
|
||||||
|
edgesToRemove.add(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(saveEdges) {
|
edgesToRemove.forEach(graph::removeEdge);
|
||||||
for (Vertex[] edge : removedEdges.keySet()) {
|
|
||||||
graph.removeEdge(edge[0], edge[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return removedEdges;
|
return removedEdges;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Remove edges for pairs where overlap size is significantly lower than the well occupancy, return removed edges
|
//Remove edges for pairs where overlap size is significantly lower than the well occupancy, return removed edges
|
||||||
static Map<Vertex[], Integer> filterByOverlapPercent(SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph,
|
static Map<DefaultWeightedEdge, Vertex[]> filterByOverlapPercent(SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph,
|
||||||
Integer minOverlapPercent,
|
Integer minOverlapPercent,
|
||||||
boolean saveEdges) {
|
boolean saveEdges) {
|
||||||
Map<Vertex[], Integer> removedEdges = new HashMap<>();
|
Map<DefaultWeightedEdge, Vertex[]> removedEdges = new HashMap<>();
|
||||||
|
Set<DefaultWeightedEdge> edgesToRemove = new HashSet<>();
|
||||||
for (DefaultWeightedEdge e : graph.edgeSet()) {
|
for (DefaultWeightedEdge e : graph.edgeSet()) {
|
||||||
Integer alphaOcc = graph.getEdgeSource(e).getOccupancy();
|
Integer alphaOcc = graph.getEdgeSource(e).getOccupancy();
|
||||||
Integer betaOcc = graph.getEdgeTarget(e).getOccupancy();
|
Integer betaOcc = graph.getEdgeTarget(e).getOccupancy();
|
||||||
@@ -74,22 +56,13 @@ public interface GraphModificationFunctions {
|
|||||||
double min = minOverlapPercent / 100.0;
|
double min = minOverlapPercent / 100.0;
|
||||||
if ((weight / alphaOcc < min) || (weight / betaOcc < min)) {
|
if ((weight / alphaOcc < min) || (weight / betaOcc < min)) {
|
||||||
if (saveEdges) {
|
if (saveEdges) {
|
||||||
Vertex source = graph.getEdgeSource(e);
|
Vertex[] vertices = {graph.getEdgeSource(e), graph.getEdgeTarget(e)};
|
||||||
Vertex target = graph.getEdgeTarget(e);
|
removedEdges.put(e, vertices);
|
||||||
Integer intWeight = (int) graph.getEdgeWeight(e);
|
|
||||||
Vertex[] edge = {source, target};
|
|
||||||
removedEdges.put(edge, intWeight);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
graph.setEdgeWeight(e, 0.0);
|
|
||||||
}
|
}
|
||||||
|
edgesToRemove.add(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(saveEdges) {
|
edgesToRemove.forEach(graph::removeEdge);
|
||||||
for (Vertex[] edge : removedEdges.keySet()) {
|
|
||||||
graph.removeEdge(edge[0], edge[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return removedEdges;
|
return removedEdges;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,10 +99,10 @@ public interface GraphModificationFunctions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void addRemovedEdges(SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph,
|
static void addRemovedEdges(SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph,
|
||||||
Map<Vertex[], Integer> removedEdges) {
|
Map<DefaultWeightedEdge, Vertex[]> removedEdges) {
|
||||||
for (Vertex[] edge : removedEdges.keySet()) {
|
for (DefaultWeightedEdge edge : removedEdges.keySet()) {
|
||||||
DefaultWeightedEdge e = graph.addEdge(edge[0], edge[1]);
|
Vertex[] vertices = removedEdges.get(edge);
|
||||||
graph.setEdgeWeight(e, removedEdges.get(edge));
|
graph.addEdge(vertices[0], vertices[1], edge);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,7 @@ TODO: Implement discrete frequency distributions using Vose's Alias Method
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
import org.apache.commons.rng.UniformRandomProvider;
|
|
||||||
import org.apache.commons.rng.core.BaseProvider;
|
|
||||||
import org.apache.commons.rng.sampling.distribution.RejectionInversionZipfSampler;
|
import org.apache.commons.rng.sampling.distribution.RejectionInversionZipfSampler;
|
||||||
import org.apache.commons.rng.simple.JDKRandomWrapper;
|
import org.apache.commons.rng.simple.JDKRandomWrapper;
|
||||||
|
|
||||||
@@ -242,7 +241,7 @@ public class Plate {
|
|||||||
sequencesAndMisreads.put(currentSequence, new ArrayList<>());
|
sequencesAndMisreads.put(currentSequence, new ArrayList<>());
|
||||||
}
|
}
|
||||||
//The specific misread hasn't happened before
|
//The specific misread hasn't happened before
|
||||||
if (rand.nextDouble() >= errorCollisionRate || sequencesAndMisreads.get(currentSequence).size() == 0) {
|
if (rand.nextDouble() >= errorCollisionRate || sequencesAndMisreads.get(currentSequence).isEmpty()) {
|
||||||
//The misread doesn't collide with a real sequence already on the plate and some sequences have already been read
|
//The misread doesn't collide with a real sequence already on the plate and some sequences have already been read
|
||||||
if(rand.nextDouble() >= realSequenceCollisionRate || !sequenceMap.isEmpty()){
|
if(rand.nextDouble() >= realSequenceCollisionRate || !sequenceMap.isEmpty()){
|
||||||
StringBuilder spurious = new StringBuilder(currentSequence);
|
StringBuilder spurious = new StringBuilder(currentSequence);
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
import org.jgrapht.Graphs;
|
||||||
import org.jgrapht.alg.interfaces.MatchingAlgorithm;
|
import org.jgrapht.alg.interfaces.MatchingAlgorithm;
|
||||||
import org.jgrapht.alg.matching.MaximumWeightBipartiteMatching;
|
import org.jgrapht.alg.matching.MaximumWeightBipartiteMatching;
|
||||||
import org.jgrapht.generate.SimpleWeightedBipartiteGraphMatrixGenerator;
|
|
||||||
import org.jgrapht.graph.DefaultWeightedEdge;
|
import org.jgrapht.graph.DefaultWeightedEdge;
|
||||||
import org.jgrapht.graph.SimpleWeightedGraph;
|
import org.jgrapht.graph.SimpleWeightedGraph;
|
||||||
import org.jheaps.tree.FibonacciHeap;
|
|
||||||
import org.jheaps.tree.PairingHeap;
|
import org.jheaps.tree.PairingHeap;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@@ -70,58 +69,104 @@ public class Simulator implements GraphModificationFunctions {
|
|||||||
if(verbose){System.out.println("Total beta sequence wells removed: " + betaWellsRemoved);}
|
if(verbose){System.out.println("Total beta sequence wells removed: " + betaWellsRemoved);}
|
||||||
}
|
}
|
||||||
|
|
||||||
//construct the graph. For simplicity, going to make
|
/*
|
||||||
if(verbose){System.out.println("Making vertex maps");}
|
* The commented out code below works beautifully for small enough graphs. However, after implementing a
|
||||||
//For the SimpleWeightedBipartiteGraphMatrixGenerator, all vertices must have
|
* Zipf distribution and attempting to simulate Experiment 3 from the paper again, I discovered that
|
||||||
//distinct numbers associated with them. Since I'm using a 2D array, that means
|
* this method uses too much memory. Even a 120GB heap is not enough to build this adjacency matrix.
|
||||||
//distinct indices between the rows and columns. vertexStartValue lets me track where I switch
|
* So I'm going to attempt to build this graph directly and see if that is less memory intensive
|
||||||
//from numbering rows to columns, so I can assign unique numbers to every vertex, and then
|
*/
|
||||||
//subtract the vertexStartValue from betas to use their vertex labels as array indices
|
// //construct the graph. For simplicity, going to make
|
||||||
int vertexStartValue = 0;
|
// if(verbose){System.out.println("Making vertex maps");}
|
||||||
//keys are sequential integer vertices, values are alphas
|
// //For the SimpleWeightedBipartiteGraphMatrixGenerator, all vertices must have
|
||||||
Map<String, Integer> plateAtoVMap = makeSequenceToVertexMap(alphaSequences, vertexStartValue);
|
// //distinct numbers associated with them. Since I'm using a 2D array, that means
|
||||||
//new start value for vertex to beta map should be one more than final vertex value in alpha map
|
// //distinct indices between the rows and columns. vertexStartValue lets me track where I switch
|
||||||
vertexStartValue += plateAtoVMap.size();
|
// //from numbering rows to columns, so I can assign unique numbers to every vertex, and then
|
||||||
//keys are betas, values are sequential integers
|
// //subtract the vertexStartValue from betas to use their vertex labels as array indices
|
||||||
Map<String, Integer> plateBtoVMap = makeSequenceToVertexMap(betaSequences, vertexStartValue);
|
// int vertexStartValue = 0;
|
||||||
if(verbose){System.out.println("Vertex maps made");}
|
// //keys are sequential integer vertices, values are alphas
|
||||||
//make adjacency matrix for bipartite graph generator
|
// Map<String, Integer> plateAtoVMap = makeSequenceToVertexMap(alphaSequences, vertexStartValue);
|
||||||
//(technically this is only 1/4 of an adjacency matrix, but that's all you need
|
// //new start value for vertex to beta map should be one more than final vertex value in alpha map
|
||||||
//for a bipartite graph, and all the SimpleWeightedBipartiteGraphMatrixGenerator class expects.)
|
// vertexStartValue += plateAtoVMap.size();
|
||||||
if(verbose){System.out.println("Making adjacency matrix");}
|
// //keys are betas, values are sequential integers
|
||||||
double[][] weights = new double[plateAtoVMap.size()][plateBtoVMap.size()];
|
// Map<String, Integer> plateBtoVMap = makeSequenceToVertexMap(betaSequences, vertexStartValue);
|
||||||
fillAdjacencyMatrix(weights, vertexStartValue, alphaSequences, betaSequences, plateAtoVMap, plateBtoVMap);
|
// if(verbose){System.out.println("Vertex maps made");}
|
||||||
if(verbose){System.out.println("Adjacency matrix made");}
|
// //make adjacency matrix for bipartite graph generator
|
||||||
|
// //(technically this is only 1/4 of an adjacency matrix, but that's all you need
|
||||||
|
// //for a bipartite graph, and all the SimpleWeightedBipartiteGraphMatrixGenerator class expects.)
|
||||||
|
// if(verbose){System.out.println("Making adjacency matrix");}
|
||||||
|
// double[][] weights = new double[plateAtoVMap.size()][plateBtoVMap.size()];
|
||||||
|
// fillAdjacencyMatrix(weights, vertexStartValue, alphaSequences, betaSequences, plateAtoVMap, plateBtoVMap);
|
||||||
|
// if(verbose){System.out.println("Adjacency matrix made");}
|
||||||
|
// //make bipartite graph
|
||||||
|
// if(verbose){System.out.println("Making bipartite weighted graph");}
|
||||||
|
// //the graph object
|
||||||
|
// SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph =
|
||||||
|
// new SimpleWeightedGraph<>(DefaultWeightedEdge.class);
|
||||||
|
// //the graph generator
|
||||||
|
// SimpleWeightedBipartiteGraphMatrixGenerator graphGenerator = new SimpleWeightedBipartiteGraphMatrixGenerator();
|
||||||
|
// //the list of alpha vertices
|
||||||
|
// List<Vertex> alphaVertices = new ArrayList<>();
|
||||||
|
// for (String seq : plateAtoVMap.keySet()) {
|
||||||
|
// Vertex alphaVertex = new Vertex(alphaSequences.get(seq), plateAtoVMap.get(seq));
|
||||||
|
// alphaVertices.add(alphaVertex);
|
||||||
|
// }
|
||||||
|
// //Sort to make sure the order of vertices in list matches the order of the adjacency matrix
|
||||||
|
// Collections.sort(alphaVertices);
|
||||||
|
// //Add ordered list of vertices to the graph
|
||||||
|
// graphGenerator.first(alphaVertices);
|
||||||
|
// //the list of beta vertices
|
||||||
|
// List<Vertex> betaVertices = new ArrayList<>();
|
||||||
|
// for (String seq : plateBtoVMap.keySet()) {
|
||||||
|
// Vertex betaVertex = new Vertex(betaSequences.get(seq), plateBtoVMap.get(seq));
|
||||||
|
// betaVertices.add(betaVertex);
|
||||||
|
// }
|
||||||
|
// //Sort to make sure the order of vertices in list matches the order of the adjacency matrix
|
||||||
|
// Collections.sort(betaVertices);
|
||||||
|
// //Add ordered list of vertices to the graph
|
||||||
|
// graphGenerator.second(betaVertices);
|
||||||
|
// //use adjacency matrix of weight created previously
|
||||||
|
// graphGenerator.weights(weights);
|
||||||
|
// graphGenerator.generateGraph(graph);
|
||||||
|
|
||||||
//make bipartite graph
|
//make bipartite graph
|
||||||
if(verbose){System.out.println("Making bipartite weighted graph");}
|
if(verbose){System.out.println("Making bipartite weighted graph");}
|
||||||
//the graph object
|
//the graph object
|
||||||
SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph =
|
SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph =
|
||||||
new SimpleWeightedGraph<>(DefaultWeightedEdge.class);
|
new SimpleWeightedGraph<>(DefaultWeightedEdge.class);
|
||||||
//the graph generator
|
int vertexLabelValue = 0;
|
||||||
SimpleWeightedBipartiteGraphMatrixGenerator graphGenerator = new SimpleWeightedBipartiteGraphMatrixGenerator();
|
//create and add alpha sequence vertices
|
||||||
//the list of alpha vertices
|
|
||||||
List<Vertex> alphaVertices = new ArrayList<>();
|
List<Vertex> alphaVertices = new ArrayList<>();
|
||||||
for (String seq : plateAtoVMap.keySet()) {
|
for (Map.Entry<String, SequenceRecord> entry: alphaSequences.entrySet()) {
|
||||||
Vertex alphaVertex = new Vertex(alphaSequences.get(seq), plateAtoVMap.get(seq));
|
alphaVertices.add(new Vertex(entry.getValue(), vertexLabelValue));
|
||||||
alphaVertices.add(alphaVertex);
|
vertexLabelValue++;
|
||||||
}
|
}
|
||||||
//Sort to make sure the order of vertices in list matches the order of the adjacency matrix
|
alphaVertices.forEach(graph::addVertex);
|
||||||
Collections.sort(alphaVertices);
|
//add beta sequence vertices
|
||||||
//Add ordered list of vertices to the graph
|
|
||||||
graphGenerator.first(alphaVertices);
|
|
||||||
//the list of beta vertices
|
|
||||||
List<Vertex> betaVertices = new ArrayList<>();
|
List<Vertex> betaVertices = new ArrayList<>();
|
||||||
for (String seq : plateBtoVMap.keySet()) {
|
for (Map.Entry<String, SequenceRecord> entry: betaSequences.entrySet()) {
|
||||||
Vertex betaVertex = new Vertex(betaSequences.get(seq), plateBtoVMap.get(seq));
|
betaVertices.add(new Vertex(entry.getValue(), vertexLabelValue));
|
||||||
betaVertices.add(betaVertex);
|
vertexLabelValue++;
|
||||||
|
}
|
||||||
|
betaVertices.forEach(graph::addVertex);
|
||||||
|
//add edges (best so far)
|
||||||
|
int edgesAddedCount = 0;
|
||||||
|
for(Vertex a: alphaVertices) {
|
||||||
|
Set<Integer> a_wells = a.getRecord().getWells();
|
||||||
|
for(Vertex b: betaVertices) {
|
||||||
|
Set<Integer> sharedWells = new HashSet<>(a_wells);
|
||||||
|
sharedWells.retainAll(b.getRecord().getWells());
|
||||||
|
if (!sharedWells.isEmpty()) {
|
||||||
|
Graphs.addEdge(graph, a, b, (double) sharedWells.size());
|
||||||
|
}
|
||||||
|
edgesAddedCount++;
|
||||||
|
if (edgesAddedCount % 10000000 == 0) { //collect garbage every 10,000,000 edges
|
||||||
|
System.out.println(edgesAddedCount + " edges added");
|
||||||
|
//request garbage collection
|
||||||
|
System.gc();
|
||||||
|
System.out.println("Garbage collection requested");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//Sort to make sure the order of vertices in list matches the order of the adjacency matrix
|
|
||||||
Collections.sort(betaVertices);
|
|
||||||
//Add ordered list of vertices to the graph
|
|
||||||
graphGenerator.second(betaVertices);
|
|
||||||
//use adjacency matrix of weight created previously
|
|
||||||
graphGenerator.weights(weights);
|
|
||||||
graphGenerator.generateGraph(graph);
|
|
||||||
if(verbose){System.out.println("Graph created");}
|
if(verbose){System.out.println("Graph created");}
|
||||||
//stop timing
|
//stop timing
|
||||||
Instant stop = Instant.now();
|
Instant stop = Instant.now();
|
||||||
@@ -145,7 +190,7 @@ public class Simulator implements GraphModificationFunctions {
|
|||||||
Integer minOverlapPercent, boolean verbose, boolean calculatePValue) {
|
Integer minOverlapPercent, boolean verbose, boolean calculatePValue) {
|
||||||
Instant start = Instant.now();
|
Instant start = Instant.now();
|
||||||
SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph = data.getGraph();
|
SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph = data.getGraph();
|
||||||
Map<Vertex[], Integer> removedEdges = new HashMap<>();
|
Map<DefaultWeightedEdge, Vertex[]> removedEdges = new HashMap<>();
|
||||||
boolean saveEdges = BiGpairSEQ.cacheGraph();
|
boolean saveEdges = BiGpairSEQ.cacheGraph();
|
||||||
int numWells = data.getNumWells();
|
int numWells = data.getNumWells();
|
||||||
//Integer alphaCount = data.getAlphaCount();
|
//Integer alphaCount = data.getAlphaCount();
|
||||||
@@ -163,6 +208,7 @@ public class Simulator implements GraphModificationFunctions {
|
|||||||
}
|
}
|
||||||
Integer graphAlphaCount = alphas.size();
|
Integer graphAlphaCount = alphas.size();
|
||||||
Integer graphBetaCount = betas.size();
|
Integer graphBetaCount = betas.size();
|
||||||
|
Integer graphEdgeCount = graph.edgeSet().size();
|
||||||
|
|
||||||
//remove edges with weights outside given overlap thresholds, add those to removed edge list
|
//remove edges with weights outside given overlap thresholds, add those to removed edge list
|
||||||
if(verbose){System.out.println("Eliminating edges with weights outside overlap threshold values");}
|
if(verbose){System.out.println("Eliminating edges with weights outside overlap threshold values");}
|
||||||
@@ -182,12 +228,14 @@ public class Simulator implements GraphModificationFunctions {
|
|||||||
if(verbose){System.out.println("Edges between vertices of with excessively different occupancy values " +
|
if(verbose){System.out.println("Edges between vertices of with excessively different occupancy values " +
|
||||||
"removed");}
|
"removed");}
|
||||||
|
|
||||||
|
Integer filteredGraphEdgeCount = graph.edgeSet().size();
|
||||||
|
|
||||||
//Find Maximum Weight Matching
|
//Find Maximum Weight Matching
|
||||||
if(verbose){System.out.println("Finding maximum weight matching");}
|
if(verbose){System.out.println("Finding maximum weight matching");}
|
||||||
//The matching object
|
//The matching object
|
||||||
MatchingAlgorithm<Vertex, DefaultWeightedEdge> maxWeightMatching;
|
MatchingAlgorithm<Vertex, DefaultWeightedEdge> maxWeightMatching;
|
||||||
//Determine algorithm type
|
//Determine algorithm type
|
||||||
AlgorithmType algorithm = BiGpairSEQ.getMatchingAlgoritmType();
|
AlgorithmType algorithm = BiGpairSEQ.getMatchingAlgorithmType();
|
||||||
switch (algorithm) { //Only two options now, but I have room to add more algorithms in the future this way
|
switch (algorithm) { //Only two options now, but I have room to add more algorithms in the future this way
|
||||||
case AUCTION -> {
|
case AUCTION -> {
|
||||||
//create a new MaximumIntegerWeightBipartiteAuctionMatching
|
//create a new MaximumIntegerWeightBipartiteAuctionMatching
|
||||||
@@ -333,8 +381,10 @@ public class Simulator implements GraphModificationFunctions {
|
|||||||
metadata.put("real sequence collision rate", data.getRealSequenceCollisionRate().toString());
|
metadata.put("real sequence collision rate", data.getRealSequenceCollisionRate().toString());
|
||||||
metadata.put("total alphas read from plate", data.getAlphaCount().toString());
|
metadata.put("total alphas read from plate", data.getAlphaCount().toString());
|
||||||
metadata.put("total betas read from plate", data.getBetaCount().toString());
|
metadata.put("total betas read from plate", data.getBetaCount().toString());
|
||||||
|
metadata.put("initial edges in graph", graphEdgeCount.toString());
|
||||||
metadata.put("alphas in graph (after pre-filtering)", graphAlphaCount.toString());
|
metadata.put("alphas in graph (after pre-filtering)", graphAlphaCount.toString());
|
||||||
metadata.put("betas in graph (after pre-filtering)", graphBetaCount.toString());
|
metadata.put("betas in graph (after pre-filtering)", graphBetaCount.toString());
|
||||||
|
metadata.put("final edges in graph (after pre-filtering)", filteredGraphEdgeCount.toString());
|
||||||
metadata.put("high overlap threshold for pairing", highThreshold.toString());
|
metadata.put("high overlap threshold for pairing", highThreshold.toString());
|
||||||
metadata.put("low overlap threshold for pairing", lowThreshold.toString());
|
metadata.put("low overlap threshold for pairing", lowThreshold.toString());
|
||||||
metadata.put("minimum overlap percent for pairing", minOverlapPercent.toString());
|
metadata.put("minimum overlap percent for pairing", minOverlapPercent.toString());
|
||||||
|
|||||||
Reference in New Issue
Block a user