diff --git a/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_by_lineage.sql b/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_by_lineage.sql
index a89cd1f50..7ab8394a5 100644
--- a/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_by_lineage.sql
+++ b/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_by_lineage.sql
@@ -1,20 +1,7 @@
-/*
- * Copyright (c) 2012 LabKey Corporation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+PARAMETERS(AnalysisId INTEGER)
+
select
- (CAST(a.analysis_id as varchar) || '<>' || a.lineages) as key,
+ (CAST(AnalysisId as varchar) || '<>' || a.lineages) as key,
a.analysis_id,
a.lineages,
max(a.totalLineages) as totalLineages,
@@ -25,13 +12,13 @@ select
round(100 * (cast(sum(a.total) as float) / cast(max(a.total_reads) as float)), 2) as percent,
group_concat(distinct a.haplotypesWithAllele) as haplotypesWithAllele,
- CAST((select sum(s.total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = a.analysis_id AND s.rowid IN (
- SELECT distinct asj.alignment_id from sequenceanalysis.alignment_summary_junction asj WHERE asj.ref_nt_id.locus = a.loci and asj.status = true
+ CAST((select sum(s.total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = AnalysisId AND s.rowid IN (
+ SELECT distinct asj.alignment_id from sequenceanalysis.alignment_summary_junction asj WHERE asj.analysis_id = AnalysisId AND asj.ref_nt_id.locus = a.loci and asj.status = true
)
) as integer) as total_reads_from_locus,
- round(100 * (cast(sum(a.total) as float) / cast((select sum(s.total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = a.analysis_id AND s.rowid IN (
- SELECT distinct asj.alignment_id from sequenceanalysis.alignment_summary_junction asj WHERE asj.ref_nt_id.locus = a.loci and asj.status = true
+ round(100 * (cast(sum(a.total) as float) / cast((select sum(s.total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = AnalysisId AND s.rowid IN (
+ SELECT distinct asj.alignment_id from sequenceanalysis.alignment_summary_junction asj WHERE asj.analysis_id = AnalysisId AND asj.ref_nt_id.locus = a.loci and asj.status = true
)
) as float)), 2) as percent_from_locus,
group_concat(distinct a.rowid, ',') as rowids
@@ -47,15 +34,16 @@ FROM (
group_concat(distinct coalesce(j.ref_nt_id.locus, j.ref_nt_id.name), chr(10)) as loci,
total,
- cast((select sum(total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = a.analysis_id) as integer) as total_reads,
+ cast((select sum(total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = AnalysisId) as integer) as total_reads,
group_concat(distinct hs.haplotype, chr(10)) as haplotypesWithAllele
from sequenceanalysis.alignment_summary a
- join sequenceanalysis.alignment_summary_junction j ON (j.alignment_id = a.rowid and j.status = true)
+ join sequenceanalysis.alignment_summary_junction j ON (j.analysis_id = AnalysisId AND j.alignment_id = a.rowid and j.status = true)
left join sequenceanalysis.haplotype_sequences hs ON ((
(hs.name = j.ref_nt_id.lineage AND hs.type = 'Lineage') OR
(hs.name = j.ref_nt_id.name AND hs.type = 'Allele')
) AND hs.haplotype.datedisabled IS NULL)
+ WHERE a.analysis_id = AnalysisId
group by a.analysis_id, a.rowid, a.total
) a
diff --git a/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_by_lineage_pivoted.query.xml b/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_by_lineage_pivoted.query.xml
deleted file mode 100644
index 2876baf89..000000000
--- a/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_by_lineage_pivoted.query.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
- Alignment Summary By Lineage
-
-
-
-
diff --git a/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_by_lineage_pivoted.sql b/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_by_lineage_pivoted.sql
deleted file mode 100644
index 13bb7d346..000000000
--- a/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_by_lineage_pivoted.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-SELECT
- a.analysis_id,
- a.lineages,
- sum(a.percent) as percent
-
-FROM sequenceanalysis.alignment_summary_by_lineage a
-
-GROUP BY a.analysis_id, a.lineages
-PIVOT percent BY lineages
\ No newline at end of file
diff --git a/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_grouped.sql b/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_grouped.sql
index 5bfff44a0..ee61c695e 100644
--- a/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_grouped.sql
+++ b/SequenceAnalysis/resources/queries/sequenceanalysis/alignment_summary_grouped.sql
@@ -1,18 +1,5 @@
-/*
- * Copyright (c) 2012 LabKey Corporation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+PARAMETERS(AnalysisId INTEGER)
+
select
a.analysis_id,
a.alleles,
@@ -36,13 +23,13 @@ select
group_concat(a.rowid, ',') as rowids,
group_concat(distinct a.haplotypesWithAllele) as haplotypesWithAllele,
- CAST((select sum(s.total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = a.analysis_id AND s.rowid IN (
- SELECT distinct asj.alignment_id from sequenceanalysis.alignment_summary_junction asj WHERE asj.ref_nt_id.locus = a.loci and asj.status = true
+ CAST((select sum(s.total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = AnalysisId AND s.rowid IN (
+ SELECT distinct asj.alignment_id from sequenceanalysis.alignment_summary_junction asj WHERE asj.analysis_id = AnalysisId AND asj.ref_nt_id.locus = a.loci and asj.status = true
)
) as INTEGER) as total_reads_from_locus,
- round(100 * (cast(sum(a.total) as float) / CASE WHEN count(a.lineages) = 0 THEN max(a.total_reads) ELSE cast((select sum(s.total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = a.analysis_id AND s.rowid IN (
- SELECT distinct asj.alignment_id from sequenceanalysis.alignment_summary_junction asj WHERE asj.ref_nt_id.locus = a.loci and asj.status = true
+ round(100 * (cast(sum(a.total) as float) / CASE WHEN count(a.lineages) = 0 THEN max(a.total_reads) ELSE cast((select sum(s.total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = AnalysisId AND s.rowid IN (
+ SELECT distinct asj.alignment_id from sequenceanalysis.alignment_summary_junction asj WHERE asj.analysis_id = AnalysisId AND asj.ref_nt_id.locus = a.loci and asj.status = true
)
) as float) END), 2) as percent_from_locus,
max(lastModified) as lastModified,
@@ -67,14 +54,15 @@ FROM (
total_forward,
total_reverse,
valid_pairs,
- (select sum(total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = a.analysis_id) as total_reads,
+ (select sum(total) as total FROM sequenceanalysis.alignment_summary s WHERE s.analysis_id = AnalysisId) as total_reads,
max(j.modified) as lastModified
from sequenceanalysis.alignment_summary a
- left join sequenceanalysis.alignment_summary_junction j ON (j.alignment_id = a.rowid and j.status = true)
+ left join sequenceanalysis.alignment_summary_junction j ON (j.analysis_id = AnalysisId AND j.alignment_id = a.rowid and j.status = true)
left join sequenceanalysis.haplotype_sequences hs ON ((
(hs.name = j.ref_nt_id.lineage AND hs.type = 'Lineage') OR
(hs.name = j.ref_nt_id.name AND hs.type = 'Allele')
) AND hs.haplotype.datedisabled IS NULL)
+ WHERE a.analysis_id = AnalysisId
group by a.analysis_id, a.rowid, a.total, total_forward, total_reverse, valid_pairs
) a
diff --git a/SequenceAnalysis/resources/schemas/sequenceanalysis.xml b/SequenceAnalysis/resources/schemas/sequenceanalysis.xml
index 5e420b38c..322de8124 100644
--- a/SequenceAnalysis/resources/schemas/sequenceanalysis.xml
+++ b/SequenceAnalysis/resources/schemas/sequenceanalysis.xml
@@ -523,17 +523,8 @@
SequenceAnalysis.window.RunExportWindow.downloadFilesForAnalysis(dataRegionName);
-
-
-
- SequenceAnalysis.Buttons.viewQuery(dataRegionName, {queryName: 'alignment_summary_grouped'})
-
- -
- SequenceAnalysis.Buttons.viewQuery(dataRegionName, {queryName: 'alignment_summary_by_lineage'})
-
- -
- SequenceAnalysis.Buttons.viewAlignmentsPivoted(dataRegionName)
-
-
- SequenceAnalysis.Buttons.viewQuery(dataRegionName, {queryName: 'haplotypeMatches'})
+ SequenceAnalysis.Buttons.viewMatchingHaplotypes(dataRegionName)
-
SequenceAnalysis.Buttons.viewQuery(dataRegionName, {queryName: 'sequence_coverage'})
diff --git a/SequenceAnalysis/resources/views/sbtToGeneTable.html b/SequenceAnalysis/resources/views/sbtToGeneTable.html
deleted file mode 100644
index f506f9472..000000000
--- a/SequenceAnalysis/resources/views/sbtToGeneTable.html
+++ /dev/null
@@ -1,454 +0,0 @@
-
\ No newline at end of file
diff --git a/SequenceAnalysis/resources/views/sbtToGeneTable.view.xml b/SequenceAnalysis/resources/views/sbtToGeneTable.view.xml
deleted file mode 100644
index e95eaf46b..000000000
--- a/SequenceAnalysis/resources/views/sbtToGeneTable.view.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SequenceAnalysis/resources/web/SequenceAnalysis/sequenceanalysisButtons.js b/SequenceAnalysis/resources/web/SequenceAnalysis/sequenceanalysisButtons.js
index e2cd084f9..df68e755c 100644
--- a/SequenceAnalysis/resources/web/SequenceAnalysis/sequenceanalysisButtons.js
+++ b/SequenceAnalysis/resources/web/SequenceAnalysis/sequenceanalysisButtons.js
@@ -163,7 +163,7 @@ SequenceAnalysis.Buttons = new function(){
);
},
- viewAlignmentsPivoted: function(dataRegionName){
+ viewMatchingHaplotypes: function(dataRegionName){
var dataRegion = LABKEY.DataRegions[dataRegionName];
var checked = dataRegion.getChecked();
if (!checked.length){
@@ -171,11 +171,16 @@ SequenceAnalysis.Buttons = new function(){
return;
}
+ if (checked.length !== 1) {
+ alert('Only one row at a time can be selected');
+ return;
+ }
+
window.location = LABKEY.ActionURL.buildURL(
'sequenceanalysis',
- 'lineagePivot',
+ 'haplotypeMatches',
dataRegion.containerPath,
- {analysisIds: checked.join(';')}
+ {'query.param.AnalysisId': checked[0]}
);
},
diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisModule.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisModule.java
index 3fc642130..e6ddc71b3 100644
--- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisModule.java
+++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisModule.java
@@ -57,7 +57,6 @@
import org.labkey.sequenceanalysis.analysis.PrintReadBackedHaplotypesHandler;
import org.labkey.sequenceanalysis.analysis.RecalculateSequenceMetricsHandler;
import org.labkey.sequenceanalysis.analysis.RnaSeqcHandler;
-import org.labkey.sequenceanalysis.analysis.SbtGeneCountHandler;
import org.labkey.sequenceanalysis.analysis.UnmappedSequenceBasedGenotypeHandler;
import org.labkey.sequenceanalysis.analysis.UpdateReadsetFilesHandler;
import org.labkey.sequenceanalysis.button.AddSraRunButton;
@@ -189,7 +188,6 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;
@@ -389,7 +387,6 @@ public static void registerPipelineSteps()
SequenceAnalysisService.get().registerFileHandler(new RnaSeqcHandler());
SequenceAnalysisService.get().registerFileHandler(new CombineStarGeneCountsHandler());
SequenceAnalysisService.get().registerFileHandler(new CombineSubreadGeneCountsHandler());
- SequenceAnalysisService.get().registerFileHandler(new SbtGeneCountHandler());
SequenceAnalysisService.get().registerFileHandler(new ProcessVariantsHandler());
SequenceAnalysisService.get().registerFileHandler(new UnmappedReadExportHandler());
SequenceAnalysisService.get().registerFileHandler(new MergeVcfsAndGenotypesHandler());
diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/analysis/SbtGeneCountHandler.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/analysis/SbtGeneCountHandler.java
deleted file mode 100644
index 0ebe5e999..000000000
--- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/analysis/SbtGeneCountHandler.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package org.labkey.sequenceanalysis.analysis;
-
-import org.json.JSONObject;
-import org.labkey.api.data.Container;
-import org.labkey.api.module.Module;
-import org.labkey.api.module.ModuleLoader;
-import org.labkey.api.pipeline.PipelineJob;
-import org.labkey.api.pipeline.PipelineJobException;
-import org.labkey.api.pipeline.RecordedAction;
-import org.labkey.api.query.DetailsURL;
-import org.labkey.api.security.User;
-import org.labkey.api.sequenceanalysis.SequenceOutputFile;
-import org.labkey.api.sequenceanalysis.pipeline.SequenceAnalysisJobSupport;
-import org.labkey.api.sequenceanalysis.pipeline.SequenceOutputHandler;
-import org.labkey.api.util.FileType;
-import org.labkey.api.view.ActionURL;
-import org.labkey.sequenceanalysis.SequenceAnalysisModule;
-
-import java.io.File;
-import java.util.LinkedHashSet;
-import java.util.List;
-
-public class SbtGeneCountHandler implements SequenceOutputHandler
-{
- private final FileType _txtType = new FileType(List.of(".txt"), ".txt", false, FileType.gzSupportLevel.NO_GZ);
-
- public SbtGeneCountHandler()
- {
-
- }
-
- @Override
- public String getName()
- {
- return "Append SBT To Gene Counts";
- }
-
- @Override
- public String getDescription()
- {
- return "This will gather SBT data associated with the readsets used to make this combined gene table, and output them as a table suitable to append or analyze in concert with this table.";
- }
-
- @Override
- public String getButtonJSHandler()
- {
- return null;
- }
-
- @Override
- public ActionURL getButtonSuccessUrl(Container c, User u, List outputFileIds)
- {
- return DetailsURL.fromString("/sequenceanalysis/sbtToGeneTable.view?outputFileId=" + outputFileIds.iterator().next(), c).getActionURL();
- }
-
- @Override
- public boolean useWorkbooks()
- {
- return true;
- }
-
- @Override
- public Module getOwningModule()
- {
- return ModuleLoader.getInstance().getModule(SequenceAnalysisModule.class);
- }
-
- @Override
- public LinkedHashSet getClientDependencies()
- {
- return null;
- }
-
- @Override
- public boolean canProcess(SequenceOutputFile f)
- {
- return f.getCategory() != null && f.getCategory().startsWith("Gene Count Table") && (_txtType.isType(f.getFile()));
- }
-
- @Override
- public boolean doRunRemote()
- {
- return false;
- }
-
- @Override
- public boolean doRunLocal()
- {
- return false;
- }
-
- @Override
- public SequenceOutputProcessor getProcessor()
- {
- return new Processor();
- }
-
- @Override
- public boolean doSplitJobs()
- {
- return false;
- }
-
- private static class Processor implements SequenceOutputProcessor
- {
- @Override
- public void processFilesOnWebserver(PipelineJob job, SequenceAnalysisJobSupport support, List inputFiles, JSONObject params, File outputDir, List actions, List outputsToCreate) throws UnsupportedOperationException, PipelineJobException
- {
-
- }
-
- @Override
- public void processFilesRemote(List inputFiles, JobContext ctx) throws UnsupportedOperationException, PipelineJobException
- {
-
- }
- }
-}
diff --git a/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/analysis/SequenceBasedTypingAnalysis.java b/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/analysis/SequenceBasedTypingAnalysis.java
index c3d9343d7..1f7847b5f 100644
--- a/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/analysis/SequenceBasedTypingAnalysis.java
+++ b/SequenceAnalysis/src/org/labkey/sequenceanalysis/run/analysis/SequenceBasedTypingAnalysis.java
@@ -177,7 +177,7 @@ public static void prepareLineageMapFiles(SequenceAnalysisJobSupport support, Lo
continue;
}
- File lineageMapFile = new File(sourceDirectory, genome.getGenomeId() + "_lineageMap.txt");
+ File lineageMapFile = FileUtil.appendName(sourceDirectory, genome.getGenomeId() + "_lineageMap.txt");
try (final CSVWriter writer = new CSVWriter(PrintWriters.getPrintWriter(lineageMapFile), '\t', CSVWriter.NO_QUOTE_CHARACTER))
{
log.info("writing lineage map file");
@@ -227,7 +227,7 @@ public Output performAnalysisPerSampleLocal(AnalysisModel model, File inputBam,
throw new PipelineJobException("Genome not found: " + model.getLibraryId());
}
- File lineageMapFile = new File(getPipelineCtx().getSourceDirectory(), referenceGenome.getGenomeId() + "_lineageMap.txt");
+ File lineageMapFile = FileUtil.appendName(getPipelineCtx().getSourceDirectory(), referenceGenome.getGenomeId() + "_lineageMap.txt");
if (lineageMapFile.exists())
{
getPipelineCtx().getLogger().debug("deleting lineage map file: " + lineageMapFile.getName());
@@ -264,8 +264,8 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
BamIterator bi = new BamIterator(inputBam, referenceGenome.getWorkingFastaFile(), getPipelineCtx().getLogger());
List aggregators = new ArrayList<>();
- File workDir = new File(getPipelineCtx().getSourceDirectory(), FileUtil.getBaseName(inputBam));
- File sbtOutputLog = new File(workDir, FileUtil.getBaseName(inputBam) + ".sbt.txt.gz");
+ File workDir = FileUtil.appendName(getPipelineCtx().getSourceDirectory(), FileUtil.getBaseName(inputBam));
+ File sbtOutputLog = FileUtil.appendName(workDir, FileUtil.getBaseName(inputBam) + ".sbt.txt.gz");
SequenceBasedTypingAlignmentAggregator agg = new SequenceBasedTypingAlignmentAggregator(getPipelineCtx().getLogger(), referenceGenome.getWorkingFastaFile(), avgBaseQualityAggregator, toolParams);
if (getProvider().getParameterByName("writeLog").extractValue(getPipelineCtx().getJob(), getProvider(), getStepIdx(), Boolean.class, false))
@@ -277,7 +277,7 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
agg.setOutputLog(sbtOutputLog);
}
- File lineageMapFile = new File(getPipelineCtx().getSourceDirectory(), referenceGenome.getGenomeId() + "_lineageMap.txt");
+ File lineageMapFile = FileUtil.appendName(getPipelineCtx().getSourceDirectory(), referenceGenome.getGenomeId() + "_lineageMap.txt");
if (lineageMapFile.exists())
{
getPipelineCtx().getLogger().debug("using lineage map: " + lineageMapFile.getName());
@@ -371,7 +371,7 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
protected File getSBTSummaryFile(File outputDir, File bam)
{
- return new File(outputDir, FileUtil.getBaseName(bam) + ".sbt_hits.txt.gz");
+ return FileUtil.appendName(outputDir, FileUtil.getBaseName(bam) + ".sbt_hits.txt.gz");
}
public static class AlignmentGroupCompare
@@ -383,7 +383,9 @@ public AlignmentGroupCompare(final long analysisId, Container c, User u)
{
this.analysisId = analysisId;
- new TableSelector(QueryService.get().getUserSchema(u, c, "sequenceanalysis").getTable("alignment_summary_grouped"), PageFlowUtil.set("analysis_id", "alleles", "lineages", "totalLineages", "total_reads", "total_forward", "total_reverse", "valid_pairs", "rowids"), new SimpleFilter(FieldKey.fromString("analysis_id"), analysisId), null).forEachResults(rs -> {
+ TableSelector ts = new TableSelector(QueryService.get().getUserSchema(u, c, "sequenceanalysis").getTable("alignment_summary_grouped"), PageFlowUtil.set("analysis_id", "alleles", "lineages", "totalLineages", "total_reads", "total_forward", "total_reverse", "valid_pairs", "rowids"), new SimpleFilter(FieldKey.fromString("analysis_id"), analysisId), null);
+ ts.setNamedParameters(Map.of("AnalysisId", this.analysisId));
+ ts.forEachResults(rs -> {
if (rs.getString(FieldKey.fromString("alleles")) == null)
{
return;