Skip to content

Commit 81c5425

Browse files
committed
Merge discvr19.1 r64416-64455
SVN r64456 |2019-09-08 14:35:56 +0000
1 parent dbce93f commit 81c5425

File tree

7 files changed

+85
-15
lines changed

7 files changed

+85
-15
lines changed

SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/SequenceAnalysisService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,6 @@ static public void setInstance(SequenceAnalysisService instance)
9090
abstract public File getPicardJar();
9191

9292
abstract public File writeAllCellHashingBarcodes(File webserverDir) throws PipelineJobException;
93+
94+
abstract public String createReferenceLibrary(List<Integer> sequenceIds, Container c, User u, String name, String assemblyId, String description, boolean skipCacheIndexes, boolean skipTriggers) throws IOException;
9395
}

SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/pipeline/VariantProcessingStep.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@
1515
*/
1616
package org.labkey.api.sequenceanalysis.pipeline;
1717

18+
import org.labkey.api.pipeline.PipelineJob;
1819
import org.labkey.api.pipeline.PipelineJobException;
20+
import org.labkey.api.sequenceanalysis.SequenceOutputFile;
1921

2022
import java.io.File;
23+
import java.util.List;
2124

2225
/**
2326
* User: bimber
@@ -28,6 +31,11 @@ public interface VariantProcessingStep extends PipelineStep
2831
{
2932
public Output processVariants(File inputVCF, File outputDirectory, ReferenceGenome genome) throws PipelineJobException;
3033

34+
default void init(PipelineJob job, SequenceAnalysisJobSupport support, List<SequenceOutputFile> inputFiles) throws PipelineJobException
35+
{
36+
37+
}
38+
3139
public static interface Output extends PipelineStepOutput
3240
{
3341
public File getVCF();

SequenceAnalysis/resources/external/scRNAseq/Seurat3.rmd

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
```{r}
1+
```{r Setup}
22
33
knitr::opts_chunk$set(message=FALSE, warning=FALSE,echo=TRUE,error = FALSE)
44
library(knitr)
@@ -15,6 +15,15 @@ if (cores != ''){
1515
print('Updating future.globals.maxSize')
1616
options(future.globals.maxSize = Inf)
1717
18+
print('Global variables: ')
19+
for (v in c('outPrefix', 'resolutionToUse', 'dimsToUse', 'minDimsToUse', 'doCellFilter', 'doCellCycle', 'useSCTransform', 'mergeMethod')){
20+
if (exists(v)){
21+
print(paste0(v, ': ', get(v)))
22+
} else {
23+
print(paste0(v, ': not defined'))
24+
}
25+
}
26+
1827
```
1928

2029
## Prepare data
@@ -49,7 +58,7 @@ if (file.exists(saveFile)) {
4958
print('resuming from file')
5059
seuratObj <- readRDS(saveFile)
5160
} else {
52-
seuratObj <- MergeSeuratObjs(seuratObjs, metadata = data)
61+
seuratObj <- MergeSeuratObjs(seuratObjs, metadata = data, method = mergeMethod)
5362
saveRDS(seuratObj, file = saveFile)
5463
rm(seuratObjs)
5564
}
@@ -70,15 +79,16 @@ seuratObj <- ProcessSeurat1(seuratObj, variableGeneTable = paste0(outPrefix, '.v
7079

7180
```{r DimRedux}
7281
73-
seuratObj <- FindClustersAndDimRedux(seuratObj, dimsToUse = dimsToUse)
82+
seuratObj <- FindClustersAndDimRedux(seuratObj, dimsToUse = dimsToUse, minDimsToUse = minDimsToUse)
83+
saveRDS(seuratObj, file = saveFile)
7484
7585
Find_Markers(seuratObj, resolutionToUse = resolutionToUse, outFile = paste0(outPrefix, '.markers.txt'), saveFileMarkers = paste0(outPrefix, '.markers.rds'))
7686
7787
```
7888

7989
## SingleR
8090

81-
```{r}
91+
```{r SingleR}
8292
8393
seuratObj <- RunSingleR(seuratObj = seuratObj, resultTableFile = paste0(outPrefix, '.singleR.txt'))
8494
saveRDS(seuratObj, file = saveFile)
@@ -91,17 +101,27 @@ Tabulate_SingleRClassLabs(seuratObj, plotIndividually = T)
91101

92102
## Phenotypes
93103

94-
```{r}
104+
```{r Phenotypes}
95105
96106
PlotImmuneMarkers(seuratObj, reduction = 'tsne')
97107
98108
PlotImmuneMarkers(seuratObj, reduction = 'umap')
99109
110+
if (length(unique(seuratObj$BarcodePrefix)) > 1) {
111+
print(DimPlot(seuratObj, reduction = 'pca', group.by = 'BarcodePrefix', label = T))
112+
print(DimPlot(seuratObj, reduction = 'tsne', group.by = 'BarcodePrefix', label = T))
113+
print(DimPlot(seuratObj, reduction = 'umap', group.by = 'BarcodePrefix', label = T))
114+
115+
t <- table(Cluster = Idents(seuratObj), Dataset = seuratObj$BarcodePrefix)
116+
t <- round(t / colSums(t), 2)
117+
knitr::kable(t)
118+
}
119+
100120
```
101121

102122
## Write Summary
103123

104-
```{r}
124+
```{r Summary}
105125
106126
saveRDS(seuratObj, file = saveFile)
107127
unlink(rawDataSaveFile)

SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisController.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4379,6 +4379,12 @@ public ApiResponse execute(CompareFastaSequencesForm form, BindException errors)
43794379
continue;
43804380
}
43814381

4382+
if (m.getSeqLength() > 1000000)
4383+
{
4384+
_log.info("skipping large reference: " + m.getName());
4385+
continue;
4386+
}
4387+
43824388
SequenceMatch sm = SequenceMatch.checkReference(fastaHeader, fastaData.get(fastaHeader), m);
43834389
if (sm != null)
43844390
{
@@ -4396,6 +4402,12 @@ public ApiResponse execute(CompareFastaSequencesForm form, BindException errors)
43964402
continue;
43974403
}
43984404

4405+
if (m.getSeqLength() > 1000000)
4406+
{
4407+
_log.info("skipping large reference: " + m.getName());
4408+
continue;
4409+
}
4410+
43994411
SequenceMatch sm = SequenceMatch.checkReference(fastaHeader, fastaData.get(fastaHeader), m);
44004412
if (sm != null)
44014413
{

SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisServiceImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.labkey.sequenceanalysis.analysis.CellHashingHandler;
4141
import org.labkey.sequenceanalysis.pipeline.ProcessVariantsHandler;
4242
import org.labkey.sequenceanalysis.pipeline.ReferenceGenomeImpl;
43+
import org.labkey.sequenceanalysis.pipeline.ReferenceLibraryPipelineJob;
4344
import org.labkey.sequenceanalysis.pipeline.SequenceTaskHelper;
4445
import org.labkey.sequenceanalysis.run.util.BgzipRunner;
4546
import org.labkey.sequenceanalysis.run.util.FastaIndexer;
@@ -453,4 +454,12 @@ public File writeAllCellHashingBarcodes(File webserverDir) throws PipelineJobExc
453454
{
454455
return CellHashingHandler.writeAllBarcodes(webserverDir);
455456
}
457+
458+
@Override
459+
public String createReferenceLibrary(List<Integer> sequenceIds, Container c, User u, String name, String assemblyId, String description, boolean skipCacheIndexes, boolean skipTriggers) throws IOException
460+
{
461+
ReferenceLibraryPipelineJob job = SequenceAnalysisManager.get().createReferenceLibrary(sequenceIds, c, u, name, assemblyId, description, skipCacheIndexes, skipTriggers, null);
462+
463+
return job.getJobGUID();
464+
}
456465
}

SequenceAnalysis/src/org/labkey/sequenceanalysis/analysis/CellRangerSeuratHandler.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,11 @@ public CellRangerSeuratHandler()
6767
}}, true),
6868
ToolParameterDescriptor.create("useSCTransform", "Use SCTransform", "If selected, the pipeline will use the newer SCtransform method instead of the standard Seurat pipeline.", "checkbox", new JSONObject(){{
6969
put("checked", false);
70-
}}, false)
71-
));
70+
}}, false),
71+
ToolParameterDescriptor.create("mergeMethod", "Merge Method", "This determines whether any batch correction will be applied when merging datasets.", "ldk-simplecombo", new JSONObject(){{
72+
put("storeValues", "simple;cca");
73+
}}, "simple")
74+
));
7275
}
7376

7477
@Override
@@ -245,8 +248,6 @@ public void processFilesRemote(List<SequenceOutputFile> inputFiles, JobContext c
245248
outPrefix = FileUtil.makeLegalName(outPrefix);
246249

247250
File tmpScript = new File(ctx.getWorkingDirectory(), "script.R");
248-
ctx.getFileManager().addIntermediateFile(tmpScript);
249-
250251
File outHtml = new File(ctx.getWorkingDirectory(), outPrefix + ".html");
251252

252253
try (PrintWriter writer = PrintWriters.getPrintWriter(tmpScript))
@@ -272,10 +273,13 @@ public void processFilesRemote(List<SequenceOutputFile> inputFiles, JobContext c
272273

273274
writer.println("outPrefix <- '" + outPrefix + "'");
274275
writer.println("resolutionToUse <- 0.6");
275-
String dimsToUse = StringUtils.trimToNull(ctx.getParams().optString("dimsToUse"));
276-
dimsToUse = dimsToUse == null ? "NULL" : dimsToUse;
276+
for (String v : new String[]{"dimsToUse", "minDimsToUse", "mergeMethod"}) {
277+
String val = StringUtils.trimToNull(ctx.getParams().optString(v));
278+
val = val == null ? "NULL" : val;
279+
280+
writer.println(v + " <- " + val);
281+
}
277282

278-
writer.println("dimsToUse <- " + dimsToUse);
279283
boolean doCellFilter = ctx.getParams().optBoolean("doCellFilter", true);
280284
writer.println("doCellFilter <- " + String.valueOf(doCellFilter).toUpperCase());
281285

@@ -315,11 +319,16 @@ public void processFilesRemote(List<SequenceOutputFile> inputFiles, JobContext c
315319
}
316320

317321
String dimsToUse = StringUtils.trimToNull(ctx.getParams().optString("dimsToUse"));
322+
String minDimsToUse = StringUtils.trimToNull(ctx.getParams().optString("minDimsToUse"));
323+
String mergeMethod = StringUtils.trimToNull(ctx.getParams().optString("mergeMethod"));
324+
318325
String description = StringUtils.join(new String[]{
319326
"Correct Cell Cycle: " + ctx.getParams().optBoolean("doCellCycle", true),
320327
"Perform Cell Filtering: " + ctx.getParams().optBoolean("doCellFilter", true),
328+
"Min. Dims To Use: " + (minDimsToUse == null ? "NA" : minDimsToUse),
321329
"Dims To Use: " + (dimsToUse == null ? "automatic" : dimsToUse),
322-
"Use SCTransform: " + ctx.getParams().optBoolean("useSCTransform", false)
330+
"Use SCTransform: " + ctx.getParams().optBoolean("useSCTransform", false),
331+
"Merge method: " + mergeMethod
323332
}, "\n");
324333

325334
ctx.getFileManager().addSequenceOutput(seuratObj, "Seurat Object: " + outPrefix, "Seurat Data", (inputFiles.size() == 1 ? inputFiles.iterator().next().getReadset() : null), null, getGenomeId(inputFiles), description);
@@ -330,7 +339,7 @@ public void processFilesRemote(List<SequenceOutputFile> inputFiles, JobContext c
330339
throw new PipelineJobException("Unable to find summary report");
331340
}
332341
ctx.getFileManager().addOutput(action, "Seurat Report", outHtml);
333-
ctx.getFileManager().addSequenceOutput(outHtml, "Seurat Report: " + outPrefix, "Seurat Report", (inputFiles.size() == 1 ? inputFiles.iterator().next().getReadset() : null), null, getGenomeId(inputFiles), null);
342+
ctx.getFileManager().addSequenceOutput(outHtml, "Seurat Report: " + outPrefix, "Seurat Report", (inputFiles.size() == 1 ? inputFiles.iterator().next().getReadset() : null), null, getGenomeId(inputFiles), description);
334343

335344
File seuratObjRaw = new File(ctx.getWorkingDirectory(), outPrefix + ".rawData.rds");
336345
if (seuratObjRaw.exists())

SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/ProcessVariantsHandler.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,15 @@ public SequenceOutputProcessor getProcessor()
138138
return new Processor();
139139
}
140140

141+
private static SequenceOutputHandlerJob getPipelineJob(PipelineJob job)
142+
{
143+
return (SequenceOutputHandlerJob)job;
144+
}
145+
141146
public static void initVariantProcessing(PipelineJob job, SequenceAnalysisJobSupport support, List<SequenceOutputFile> inputFiles, File outputDir) throws PipelineJobException
142147
{
148+
SequenceTaskHelper taskHelper = new SequenceTaskHelper(getPipelineJob(job), outputDir);
149+
143150
List<PipelineStepCtx<VariantProcessingStep>> providers = SequencePipelineService.get().getSteps(job, VariantProcessingStep.class);
144151
boolean requiresPedigree = false;
145152
for (PipelineStepCtx<VariantProcessingStep> stepCtx : providers)
@@ -158,6 +165,9 @@ public static void initVariantProcessing(PipelineJob job, SequenceAnalysisJobSup
158165
{
159166
requiresPedigree = true;
160167
}
168+
169+
VariantProcessingStep step = stepCtx.getProvider().create(taskHelper);
170+
step.init(job, support, inputFiles);
161171
}
162172

163173
if (requiresPedigree)

0 commit comments

Comments
 (0)