Skip to content
Snippets Groups Projects
Commit 7aecee6d authored by Michal Petrovič's avatar Michal Petrovič
Browse files

Merge branch '20-cpx-not-working-bedgraph' into 'main'

Resolve "CpX not working bedgraph"

Closes #20

See merge request !19
parents e66ee5f8 bedf7c4a
Branches
1 merge request!19Resolve "CpX not working bedgraph"
Pipeline #204014 passed with stages
in 13 minutes and 28 seconds
...@@ -12,26 +12,6 @@ services: ...@@ -12,26 +12,6 @@ services:
- postgres:/data/postgres - postgres:/data/postgres
ports: ports:
- 5432:5432 - 5432:5432
pgadmin:
image: dpage/pgadmin4
depends_on:
- postgres
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-pgadmin4@pgadmin.org}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-password}
volumes:
- pgadmin:/root/.pgadmin
ports:
- 5050:80
adminer:
image: adminer
depends_on:
- postgres
environment:
ADMINER_DEFAULT_SERVER: postgres
ports:
- 5000:8080
volumes: volumes:
postgres: postgres:
......
...@@ -18,7 +18,7 @@ public interface CpgRepository extends BaseRepository<Cpg, UUID> { ...@@ -18,7 +18,7 @@ public interface CpgRepository extends BaseRepository<Cpg, UUID> {
@Query("select a from Cpg as a join a.owner o join a.tags t where t = :tag and o.id = ?#{principal.id}") @Query("select a from Cpg as a join a.owner o join a.tags t where t = :tag and o.id = ?#{principal.id}")
Page<Cpg> findAll(Pageable pageable, @Param("tag") String tag); Page<Cpg> findAll(Pageable pageable, @Param("tag") String tag);
@Query("select a from Cpg as a join a.owner o where a.id = :id and o.id = ?#{principal.id}") @Query("select a from Cpg a where a.id = :id")
Optional<Cpg> findById(@Param("id") UUID id); Optional<Cpg> findById(@Param("id") UUID id);
@Query("select distinct t from Cpg as s join s.owner o join s.tags t where o.id = ?#{principal.id}") @Query("select distinct t from Cpg as s join s.owner o join s.tags t where o.id = ?#{principal.id}")
......
package cz.mendelu.dnaAnalyser.analyse.cpg; package cz.mendelu.dnaAnalyser.analyse.cpg;
import cz.mendelu.dnaAnalyser.analyse.zdna.Zdna;
import cz.mendelu.dnaAnalyser.analyse.zdna.ZdnaAnalyseResult;
import cz.mendelu.dnaAnalyser.analyse.zdna.ZdnaMapper;
import cz.mendelu.dnaAnalyser.batch.BatchService; import cz.mendelu.dnaAnalyser.batch.BatchService;
import cz.mendelu.dnaAnalyser.sequence.Sequence; import cz.mendelu.dnaAnalyser.sequence.Sequence;
import cz.mendelu.dnaAnalyser.sequence.data.SequenceData; import cz.mendelu.dnaAnalyser.sequence.data.SequenceData;
import cz.mendelu.dnaAnalyser.sequence.data.SequenceDataRepository; import cz.mendelu.dnaAnalyser.sequence.data.SequenceDataRepository;
import cz.mendelu.dnaAnalyser.sequence.stream.BufferedWindow;
import cz.mendelu.dnaAnalyser.sequence.stream.Window;
import cz.mendelu.dnaAnalyser.utils.analyse.service.heatmap.Heatmap; import cz.mendelu.dnaAnalyser.utils.analyse.service.heatmap.Heatmap;
import cz.mendelu.dnaAnalyser.utils.exception.NotFoundException; import cz.mendelu.dnaAnalyser.utils.exception.NotFoundException;
import cz.mendelu.dnaAnalyser.utils.repository.BaseRepository; import cz.mendelu.dnaAnalyser.utils.repository.BaseRepository;
...@@ -143,7 +139,7 @@ public class CpgService extends ModelService<Cpg> { ...@@ -143,7 +139,7 @@ public class CpgService extends ModelService<Cpg> {
.mapToInt(e -> e.length) .mapToInt(e -> e.length)
.sum(); .sum();
result = analysisCpg.size() != 0 result = !analysisCpg.isEmpty()
? totalCpgLen / analysisCpg.size() ? totalCpgLen / analysisCpg.size()
: 0; : 0;
} }
...@@ -157,4 +153,9 @@ public class CpgService extends ModelService<Cpg> { ...@@ -157,4 +153,9 @@ public class CpgService extends ModelService<Cpg> {
if (!orderIterator.hasNext()) return null; if (!orderIterator.hasNext()) return null;
return orderIterator.next(); return orderIterator.next();
} }
public Cpg findOne(UUID id) {
return cpgRepository.findById(id)
.orElseThrow(() -> new NotFoundException(Cpg.class, id));
}
} }
package cz.mendelu.dnaAnalyser.exporter; package cz.mendelu.dnaAnalyser.exporter;
import com.opencsv.CSVWriter; import com.opencsv.CSVWriter;
import cz.mendelu.dnaAnalyser.analyse.cpg.CpgDataSessionService;
import cz.mendelu.dnaAnalyser.analyse.cpg.CpgService;
import cz.mendelu.dnaAnalyser.utils.analyse.service.AbstractDataSessionService; import cz.mendelu.dnaAnalyser.utils.analyse.service.AbstractDataSessionService;
import cz.mendelu.dnaAnalyser.utils.exception.NotFoundException;
import cz.mendelu.dnaAnalyser.analyse.g4hunter.quadruplex.QuadruplexDataSessionService; import cz.mendelu.dnaAnalyser.analyse.g4hunter.quadruplex.QuadruplexDataSessionService;
import cz.mendelu.dnaAnalyser.analyse.rloopr.RloopDataSessionService; import cz.mendelu.dnaAnalyser.analyse.rloopr.RloopDataSessionService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -41,6 +42,11 @@ public class ExporterService { ...@@ -41,6 +42,11 @@ public class ExporterService {
@Autowired @Autowired
private AnalyseRepository analyseRepository; private AnalyseRepository analyseRepository;
@Autowired
private CpgDataSessionService cpgDataSessionService;
@Autowired
private CpgService cpgService;
public String exportData(UUID id, Analysis analysis, Output format) { public String exportData(UUID id, Analysis analysis, Output format) {
...@@ -65,6 +71,9 @@ public class ExporterService { ...@@ -65,6 +71,9 @@ public class ExporterService {
case RLOOP: case RLOOP:
sessionService = rloopDataSessionService; sessionService = rloopDataSessionService;
break; break;
case CPG:
sessionService = cpgDataSessionService;
break;
default: default:
// default to quadruplex for now // default to quadruplex for now
sessionService = quadruplexDataSessionService; sessionService = quadruplexDataSessionService;
...@@ -119,6 +128,13 @@ public class ExporterService { ...@@ -119,6 +128,13 @@ public class ExporterService {
ArrayList<String> zdnaColumns = new ArrayList<>(); ArrayList<String> zdnaColumns = new ArrayList<>();
zdnaColumns.add("SCORE"); zdnaColumns.add("SCORE");
ArrayList<String> cpxColumns = new ArrayList<>();
cpxColumns.add("GCPERC");
cpxColumns.add("OBSERVEDTOEXPECTEDCPG");
cpxColumns.add("LENGTH");
String browserHeader = "browser position "; String browserHeader = "browser position ";
String result = "track type=bedGraph name=\"%s\" " + String result = "track type=bedGraph name=\"%s\" " +
"description=%s " + "description=%s " +
...@@ -135,7 +151,7 @@ public class ExporterService { ...@@ -135,7 +151,7 @@ public class ExporterService {
Integer posInGenomeStart = 0; Integer posInGenomeStart = 0;
Integer posInGenomeEnd = 0; Integer posInGenomeEnd = 0;
final String format = "%s %d %d %s\n"; String format = "%s %d %d %s\n";
String chrom = getChromName(id); String chrom = getChromName(id);
Pattern p = Pattern.compile("[A-Z][a-z].*_(chr[1-9XY]+):([0-9].+)-([0-9].+)"); // genome browser format, e.g. Human_chr8:128748315-128753680 Pattern p = Pattern.compile("[A-Z][a-z].*_(chr[1-9XY]+):([0-9].+)-([0-9].+)"); // genome browser format, e.g. Human_chr8:128748315-128753680
...@@ -175,6 +191,18 @@ public class ExporterService { ...@@ -175,6 +191,18 @@ public class ExporterService {
analysisColumnMapper = zdnaColumns; analysisColumnMapper = zdnaColumns;
break; break;
case CPG:
// Retrieve the second nucleotide from the Cpg service
Character secondNuc = cpgService.findOne(id).getSecondNucleotide();
// Set name and description based on the second nucleotide
name = "Cp" + (secondNuc != null ? secondNuc : "X") + " tracker";
description = "\"BedGraph output of Cp" + (secondNuc != null ? secondNuc : "X") + " analysis\"";
// Set the analysisColumnMapper based on the case
analysisColumnMapper = cpxColumns;
break;
default: default:
name = ""; name = "";
description = ""; description = "";
...@@ -196,6 +224,9 @@ public class ExporterService { ...@@ -196,6 +224,9 @@ public class ExporterService {
String strand = null; String strand = null;
int score = 0; int score = 0;
double gcperc = 0.0;
double observertoexpected = 0.0;
int length = 0;
if (analysis == Analysis.RLOOP) { if (analysis == Analysis.RLOOP) {
strand = rs.getString("STRAND"); strand = rs.getString("STRAND");
...@@ -214,9 +245,18 @@ public class ExporterService { ...@@ -214,9 +245,18 @@ public class ExporterService {
score = (int) Math.ceil(rs.getDouble("SCORE") * 100); score = (int) Math.ceil(rs.getDouble("SCORE") * 100);
} else if (analysis == Analysis.ZDNA) { } else if (analysis == Analysis.ZDNA) {
score = (int) Math.ceil(rs.getDouble("SCORE")); score = (int) Math.ceil(rs.getDouble("SCORE"));
} else if (analysis == Analysis.CPG) {
gcperc = rs.getDouble("gcPerc");
observertoexpected = rs.getDouble("observedToExpectedCpG");
length = rs.getInt("length");
}
if (analysis == Analysis.CPG) {
dataValue = String.format(" %.3f %.3f %d", gcperc*100, observertoexpected, length);
} else {
dataValue = String.format(" %d", score);
} }
dataValue = String.format(" %d", score);
} catch (SQLException e) { } catch (SQLException e) {
log.error("Error fetching analysis data: {}", e); log.error("Error fetching analysis data: {}", e);
......
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