Commit e2ea932a authored by Michael Menzel's avatar Michael Menzel

added example db

parent b99ea48f
# Enhort: Genomic Position Profiling
The rise of high-throughput methods in genomic research greatly expanded our knowledge about the functionality of the genome. At the same time, the amount of available genomic position data increased massively, e.g., through genome-wide profiling of protein binding, virus integration or DNA methylation. However, there is no specialized software to investigate integration site profiles of virus integration or transcription factor binding sites by correlating the sites with the diversity of available genomic annotations.
Here we present Enhort, a user-friendly software tool for relating large sets of genomic positions to a variety of annotations. It functions as a statistics based genome browser, not focused on a single locus but analyzing many genomic positions simultaneously. Enhort provides comprehensive yet easy-to-use methods for statistical analysis, visualization, and the adjustment of background models according to experimental conditions and scientific questions.
# Availability
Enhort is publicly available online at www.enhort.mni.thm.de and published under GNU General Public License.
# Build
Enhort is build using Maven. Some tests do not work well using mvn, the build is possible by skipping the test with -DskipTests=true
Enhort works using a backend server and a frontend webserver. Both need to be build and deployed. Additionally Enhort needs a sqlite database for all annotations and a directory containing the .bed files.
This diff is collapsed.
......@@ -19,6 +19,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>8</source>
<target>8</target>
......@@ -56,6 +57,14 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<runOrder>random</runOrder>
</configuration>
</plugin>
</plugins>
</build>
......
......@@ -305,6 +305,7 @@ class ScoreBackgroundModel {
List<String> new_names = new ArrayList<>();
Genome.Assembly assembly = tracks.get(0).getAssembly();
//TODO check if track is already covering the whole genome, then skip the following
// take all start and ends, combine in lists and sort
for(ScoredTrack track: tracks){
......
......@@ -110,6 +110,7 @@ public final class TrackFactory {
allTracks = connector.getAllTracks(" WHERE directory like '%genetic%' and genome_assembly = 'hg19' ORDER BY lines ASC ");
allTracks.addAll(connector.getAllTracks("WHERE genome_assembly = 'hg19' and directory like '%encode%HeLa%'"));
allTracks.addAll(connector.getAllTracks("WHERE genome_assembly = 'hg19' and directory like '%custom%'"));
//allTracks = connector.getAllTracks("WHERE bed_filename = 'SRX062365.05.bed'");
allTracks.addAll(connector.getAllTracks("WHERE name like '%ontigs'"));
//allTracks = connector.getAllTracks(" WHERE genome_assembly = 'hg19' ORDER BY lines ASC LIMIT 3000");
......@@ -186,7 +187,7 @@ public final class TrackFactory {
exe.shutdown();
try {
int timeout = (System.getenv("HOME").contains("menzel")) ? 10 : 60 * 2;
int timeout = (System.getenv("HOME").contains("menzel")) ? 30 : 60 * 2;
completionService.poll(timeout, TimeUnit.SECONDS);
logger.warn("Still loading track files. Stopping now");
......@@ -396,11 +397,10 @@ public final class TrackFactory {
returnTracks.add(track);
}
if (!returnTracks.isEmpty())
return returnTracks;
return returnTracks;
throw new RuntimeException("Could not find tracks for packages" + Arrays.toString(packages.toArray()) + ". Some parts might not be working correct. " +
"Please check the names");
//throw new RuntimeException("Could not find tracks for packages" + Arrays.toString(packages.toArray()) + ". Some parts might not be working correct. " +
// "Please check the names");
}
/**
......
......@@ -27,6 +27,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.file.FileVisitOption;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
......@@ -191,7 +192,7 @@ final class GenomeSequence {
ChromosomSizes chrSizes = ChromosomSizes.getInstance();
try {
paths = Files.walk(filepath);
paths = Files.walk(filepath, FileVisitOption.FOLLOW_LINKS);
} catch (IOException e) {
logger.error("Exception {}", e.getMessage(), e);
return null;
......
......@@ -25,6 +25,7 @@ import de.thm.genomeData.tracks.TrackFactory;
import de.thm.misc.ChromosomSizes;
import de.thm.misc.Genome;
import de.thm.positionData.Sites;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
......@@ -41,8 +42,8 @@ import static org.mockito.Mockito.when;
*/
public class MultiTrackBackgroundModelTest {
@BeforeClass
public static void setUp(){
@Before
public void setUp(){
long end = 1000; //should be larger than all test intervals in this class
//mock contigs track
......
This diff is collapsed.
......@@ -16,6 +16,8 @@
// along with Enhort. If not, see <https://www.gnu.org/licenses/>.
package de.thm.genomeData.tracks;
import java.util.Random;
/**
* Object mapping helper class
*/
......@@ -47,6 +49,9 @@ public class TrackEntry {
this.pack = pack;
this.source = "";
this.sourceURL = "";
// This constructor is used only for creating tests tracks or converted tracks.
// A random id is sufficient:
this.dbID = 1000 * 1000 + new Random().nextInt(1000);
}
......
File added
This diff is collapsed.
......@@ -20,7 +20,6 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
......
......@@ -41,6 +41,7 @@ public class RCodeExport {
+ "\n"
+ "#bottom, left, top and right margins\n"
+ "par(mar=c(15,5,5,5))\n"
+ "fontsize=1\n"
+ "\n"
+ "perc <- as.matrix(rbind(dat$`percent positions measured inside`,dat$`percent positions expected inside`))\n"
+ "colnames(perc) <- row.names(dat)\n"
......@@ -50,6 +51,9 @@ public class RCodeExport {
+ " col = c('blue', 'lightgray'),\n"
+ " #log='y',\n"
+ " beside=TRUE,\n"
+ " cex=fontsize,\n"
+ " cex.axis=fontsize,\n"
+ " cex.lab=fontsize,\n"
+ " ylab = '% inside')\n"
+ "\n"
+ "\n"
......
......@@ -163,6 +163,7 @@ public class BatchController {
TestResult tr = sortedResults.get(trackN);
List<Number> tmp = new ArrayList<>();
//TODO CSV:
csv.append(tr.getTrack().getName()).append(" Fold change (log2): ").append(tr.getEffectSize()).append(" In sites: ").append(tr.getMeasuredIn()).append(" In control: ").append(tr.getExpectedIn()).append(" Out sites: ").append(tr.getMeasuredOut()).append(" Out control: ").append(tr.getExpectedOut()).append(" P value: ").append(tr.getpValue());
csv.append(lb);
......
......@@ -397,7 +397,7 @@
ticksuffix: ' '
},
font: {
size: 14
size: 18
}
};
......@@ -412,7 +412,7 @@
text: zValues[i][j] + " " + pValues[j][i], // inverted i and j because pValues is not transposed
font: {
family: 'Arial',
size: 14,
size: 18,
color: textColor
},
showarrow: false
......
......@@ -127,7 +127,7 @@
<a data-toggle="pill" href="#nav2">
<div id="hotspots" data-toggle="tooltip"
data-placement="right"
title="Hotspots across the genome. Click to enlarge.">
title="Hotspots across the genome">
<th:block th:if="${interfaceCommand.hotspots != null}">
<th:block th:each="pixel: ${interfaceCommand.hotspots}">
......
scp backend/target/Enhort-1.01-jar-with-dependencies.jar hydra:~/enhort/enhort.jar
scp backend/target/Enhort-1.01-jar-with-dependencies.jar ladon:~/enhort/enhort.jar
scp frontend/target/Enhort-1.01.jar mmnz21@enhort.mni.thm.de:~/enhort/frontend.jar
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment