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:
- postgres:/data/postgres
ports:
- 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:
postgres:
......
......@@ -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}")
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);
@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;
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.sequence.Sequence;
import cz.mendelu.dnaAnalyser.sequence.data.SequenceData;
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.exception.NotFoundException;
import cz.mendelu.dnaAnalyser.utils.repository.BaseRepository;
......@@ -143,7 +139,7 @@ public class CpgService extends ModelService<Cpg> {
.mapToInt(e -> e.length)
.sum();
result = analysisCpg.size() != 0
result = !analysisCpg.isEmpty()
? totalCpgLen / analysisCpg.size()
: 0;
}
......@@ -157,4 +153,9 @@ public class CpgService extends ModelService<Cpg> {
if (!orderIterator.hasNext()) return null;
return orderIterator.next();
}
public Cpg findOne(UUID id) {
return cpgRepository.findById(id)
.orElseThrow(() -> new NotFoundException(Cpg.class, id));
}
}
package cz.mendelu.dnaAnalyser.exporter;
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.exception.NotFoundException;
import cz.mendelu.dnaAnalyser.analyse.g4hunter.quadruplex.QuadruplexDataSessionService;
import cz.mendelu.dnaAnalyser.analyse.rloopr.RloopDataSessionService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -41,6 +42,11 @@ public class ExporterService {
@Autowired
private AnalyseRepository analyseRepository;
@Autowired
private CpgDataSessionService cpgDataSessionService;
@Autowired
private CpgService cpgService;
public String exportData(UUID id, Analysis analysis, Output format) {
......@@ -65,6 +71,9 @@ public class ExporterService {
case RLOOP:
sessionService = rloopDataSessionService;
break;
case CPG:
sessionService = cpgDataSessionService;
break;
default:
// default to quadruplex for now
sessionService = quadruplexDataSessionService;
......@@ -119,6 +128,13 @@ public class ExporterService {
ArrayList<String> zdnaColumns = new ArrayList<>();
zdnaColumns.add("SCORE");
ArrayList<String> cpxColumns = new ArrayList<>();
cpxColumns.add("GCPERC");
cpxColumns.add("OBSERVEDTOEXPECTEDCPG");
cpxColumns.add("LENGTH");
String browserHeader = "browser position ";
String result = "track type=bedGraph name=\"%s\" " +
"description=%s " +
......@@ -135,7 +151,7 @@ public class ExporterService {
Integer posInGenomeStart = 0;
Integer posInGenomeEnd = 0;
final String format = "%s %d %d %s\n";
String format = "%s %d %d %s\n";
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
......@@ -175,6 +191,18 @@ public class ExporterService {
analysisColumnMapper = zdnaColumns;
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:
name = "";
description = "";
......@@ -196,6 +224,9 @@ public class ExporterService {
String strand = null;
int score = 0;
double gcperc = 0.0;
double observertoexpected = 0.0;
int length = 0;
if (analysis == Analysis.RLOOP) {
strand = rs.getString("STRAND");
......@@ -214,9 +245,18 @@ public class ExporterService {
score = (int) Math.ceil(rs.getDouble("SCORE") * 100);
} else if (analysis == Analysis.ZDNA) {
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) {
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