diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/circos/CircosAnalysis.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/circos/CircosAnalysis.java index 2ed3cf65913..96bf18034c0 100644 --- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/circos/CircosAnalysis.java +++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/circos/CircosAnalysis.java @@ -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; @@ -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(); @@ -58,6 +61,8 @@ protected void check() throws Exception { // } // // addAttribute("sampleName", sampleName); + + assembly = ResourceUtils.getAssembly(catalogManager, study, token); } @Override diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/circos/CircosLocalAnalysisExecutor.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/circos/CircosLocalAnalysisExecutor.java index 40f829ecd6c..356d53d1d84 100644 --- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/circos/CircosLocalAnalysisExecutor.java +++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/circos/CircosLocalAnalysisExecutor.java @@ -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; @@ -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(); @@ -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 @@ -138,10 +139,19 @@ public void run() throws ToolException, IOException { AbstractMap.SimpleEntry 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() diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/genomePlot/GenomePlotAnalysis.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/genomePlot/GenomePlotAnalysis.java index f7f63f37706..04a5241623f 100644 --- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/genomePlot/GenomePlotAnalysis.java +++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/genomePlot/GenomePlotAnalysis.java @@ -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; diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/genomePlot/GenomePlotLocalAnalysisExecutor.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/genomePlot/GenomePlotLocalAnalysisExecutor.java index 4246e142d55..a86cc797287 100644 --- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/genomePlot/GenomePlotLocalAnalysisExecutor.java +++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/genomePlot/GenomePlotLocalAnalysisExecutor.java @@ -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; @@ -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; @@ -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()); @@ -125,10 +124,19 @@ public void run() throws ToolException, IOException { inputBindings.add(new AbstractMap.SimpleEntry<>(rScriptPath, DOCKER_INPUT_PATH)); AbstractMap.SimpleEntry 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() diff --git a/opencga-server/src/main/java/org/opencb/opencga/server/rest/analysis/VariantWebService.java b/opencga-server/src/main/java/org/opencb/opencga/server/rest/analysis/VariantWebService.java index 6ac26bbb92e..761426a0b9a 100644 --- a/opencga-server/src/main/java/org/opencb/opencga/server/rest/analysis/VariantWebService.java +++ b/opencga-server/src/main/java/org/opencb/opencga/server/rest/analysis/VariantWebService.java @@ -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; @@ -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); @@ -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) {