Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TASK-5113 - SVs not being displayed in genome plot (circos) #2362

Merged
merged 8 commits into from
Dec 4, 2023
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.opencb.opencga.analysis.variant.circos;

import org.opencb.opencga.analysis.ResourceUtils;
import org.opencb.opencga.analysis.tools.OpenCgaTool;
import org.opencb.opencga.core.exceptions.ToolException;
import org.opencb.opencga.core.models.common.Enums;
Expand All @@ -34,6 +35,8 @@ public class CircosAnalysis extends OpenCgaTool {
private String study;
private CircosAnalysisParams circosParams;

private String assembly;

@Override
protected void check() throws Exception {
super.check();
Expand All @@ -58,6 +61,8 @@ protected void check() throws Exception {
// }
//
// addAttribute("sampleName", sampleName);

assembly = ResourceUtils.getAssembly(catalogManager, study, token);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@
import org.opencb.commons.datastore.core.Query;
import org.opencb.commons.datastore.core.QueryOptions;
import org.opencb.commons.utils.DockerUtils;
import org.opencb.opencga.analysis.ResourceUtils;
import org.opencb.opencga.analysis.StorageToolExecutor;
import org.opencb.opencga.analysis.variant.manager.VariantStorageManager;
import org.opencb.opencga.catalog.exceptions.CatalogException;
import org.opencb.opencga.core.common.GitRepositoryState;
import org.opencb.opencga.core.common.TimeUtils;
import org.opencb.opencga.core.exceptions.ToolException;
Expand Down Expand Up @@ -93,7 +95,7 @@ public VariantStorageManager getVariantStorageManager() throws ToolExecutorExcep
}

@Override
public void run() throws ToolException, IOException {
public void run() throws ToolException, IOException, CatalogException {

// Create query
Query query = new Query();
Expand Down Expand Up @@ -128,7 +130,6 @@ public void run() throws ToolException, IOException {
throw new ToolException("Error launching threads when executing the Circos analysis", e);
}


if (MapUtils.isEmpty(errors)) {
// Execute R script
// circos.R ./snvs.tsv ./indels.tsv ./cnvs.tsv ./rearrs.tsv SampleId
Expand All @@ -138,10 +139,19 @@ public void run() throws ToolException, IOException {
AbstractMap.SimpleEntry<String, String> outputBinding = new AbstractMap.SimpleEntry<>(getOutDir()
.toAbsolutePath().toString(),
DOCKER_OUTPUT_PATH);

// Get genome version
String genomeVersion = "hg38";
String assembly = ResourceUtils.getAssembly(storageManager.getCatalogManager(), getStudy(), getToken());
if (StringUtils.isNotEmpty(assembly) && assembly.toUpperCase(Locale.ROOT).equals("GRCH37")) {
genomeVersion = "hg19";
}

String scriptParams = "R CMD Rscript --vanilla " + DOCKER_INPUT_PATH + "/circos.R"
+ (plotCopynumber ? "" : " --no_copynumber")
+ (plotIndels ? "" : " --no_indels")
+ (plotRearrangements ? "" : " --no_rearrangements")
+ " --genome_version " + genomeVersion
+ " --out_path " + DOCKER_OUTPUT_PATH
+ " " + DOCKER_OUTPUT_PATH + "/" + snvsFile.getName()
+ " " + DOCKER_OUTPUT_PATH + "/" + indelsFile.getName()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.opencb.biodata.models.clinical.qc.GenomePlotConfig;
import org.opencb.commons.datastore.core.QueryOptions;
import org.opencb.opencga.analysis.AnalysisUtils;
import org.opencb.opencga.analysis.ResourceUtils;
import org.opencb.opencga.analysis.tools.OpenCgaToolScopeStudy;
import org.opencb.opencga.core.common.JacksonUtils;
import org.opencb.opencga.core.exceptions.ToolException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,10 @@
import org.opencb.commons.datastore.core.Query;
import org.opencb.commons.datastore.core.QueryOptions;
import org.opencb.commons.utils.DockerUtils;
import org.opencb.opencga.analysis.ResourceUtils;
import org.opencb.opencga.analysis.StorageToolExecutor;
import org.opencb.opencga.analysis.variant.manager.VariantStorageManager;
import org.opencb.opencga.catalog.exceptions.CatalogException;
import org.opencb.opencga.core.common.GitRepositoryState;
import org.opencb.opencga.core.common.JacksonUtils;
import org.opencb.opencga.core.common.TimeUtils;
Expand All @@ -46,10 +48,7 @@
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.*;

import static org.opencb.opencga.analysis.wrappers.executors.DockerWrapperAnalysisExecutor.DOCKER_INPUT_PATH;
Expand Down Expand Up @@ -79,7 +78,7 @@ public class GenomePlotLocalAnalysisExecutor extends GenomePlotAnalysisExecutor
private Logger logger = LoggerFactory.getLogger(this.getClass());

@Override
public void run() throws ToolException, IOException {
public void run() throws ToolException, IOException, CatalogException {

plotConfig = JacksonUtils.getDefaultObjectMapper().readerFor(GenomePlotConfig.class).readValue(getConfigFile());

Expand Down Expand Up @@ -125,10 +124,19 @@ public void run() throws ToolException, IOException {
inputBindings.add(new AbstractMap.SimpleEntry<>(rScriptPath, DOCKER_INPUT_PATH));
AbstractMap.SimpleEntry<String, String> outputBinding = new AbstractMap.SimpleEntry<>(getOutDir()
.toAbsolutePath().toString(), DOCKER_OUTPUT_PATH);

// Get genome version
String genomeVersion = "hg38";
String assembly = ResourceUtils.getAssembly(storageManager.getCatalogManager(), getStudy(), getToken());
if (StringUtils.isNotEmpty(assembly) && assembly.toUpperCase(Locale.ROOT).equals("GRCH37")) {
genomeVersion = "hg19";
}

String scriptParams = "R CMD Rscript --vanilla " + DOCKER_INPUT_PATH + "/circos.R"
+ (plotCopynumber ? "" : " --no_copynumber")
+ (plotIndels ? "" : " --no_indels")
+ (plotRearrangements ? "" : " --no_rearrangements")
+ " --genome_version " + genomeVersion
+ " --out_path " + DOCKER_OUTPUT_PATH
+ " " + DOCKER_OUTPUT_PATH + "/" + snvsFile.getName()
+ " " + DOCKER_OUTPUT_PATH + "/" + indelsFile.getName()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.opencb.commons.annotations.DataField;
import org.opencb.commons.datastore.core.*;
import org.opencb.opencga.analysis.AnalysisUtils;
import org.opencb.opencga.analysis.ResourceUtils;
import org.opencb.opencga.analysis.family.qc.FamilyQcAnalysis;
import org.opencb.opencga.analysis.individual.qc.IndividualQcAnalysis;
import org.opencb.opencga.analysis.individual.qc.IndividualQcUtils;
Expand Down Expand Up @@ -1330,6 +1331,7 @@ public Response circos(
if (!outDir.exists()) {
return createErrorResponse(new Exception("Error creating temporal directory for Circos analysis"));
}
Runtime.getRuntime().exec("chmod 777 " + outDir.getAbsolutePath());

// Create and set up Circos executor
CircosLocalAnalysisExecutor executor = new CircosLocalAnalysisExecutor(study, params, variantManager);
Expand Down Expand Up @@ -1361,13 +1363,13 @@ public Response circos(
} else {
return createErrorResponse(new Exception("Error plotting Circos graph"));
}
} catch (ToolException | IOException e) {
} catch (ToolException | IOException | CatalogException e) {
return createErrorResponse(e);
} finally {
if (outDir != null) {
// Delete temporal directory
try {
if (outDir.exists() && !params.getTitle().startsWith("no.delete.")) {
if (outDir.exists()) {
FileUtils.deleteDirectory(outDir);
}
} catch (IOException e) {
Expand Down
Loading