Skip to content

Commit c9e2a9a

Browse files
committed
Improve SDA support
1 parent 4add0ff commit c9e2a9a

File tree

2 files changed

+77
-2
lines changed

2 files changed

+77
-2
lines changed

singlecell/resources/chunks/RunSDA.R

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,28 @@ if (Sys.getenv('SEURAT_MAX_THREADS') != '') {
22
nThreads <- Sys.getenv('SEURAT_MAX_THREADS')
33
}
44

5+
sdaFiles <- data.frame(DatasetId = character(), FileName = character())
6+
57
for (datasetId in names(seuratObjects)) {
68
printName(datasetId)
79
seuratObj <- readRDS(seuratObjects[[datasetId]])
810
gc()
911

10-
outputFolder <- ''
12+
outputFolder <- paste0('sdaOutput.', datasetId)
1113
if (dir.exists(outputFolder)) {
1214
unlink(outputFolder, recursive = TRUE)
1315
}
1416

1517
sdaResults <- bindArgs(CellMembrane::RunSDA, seuratObj)()
1618

19+
fileName <- paste0('sda.', datasetId, '.rds')
20+
saveRDS(sdaResults, file = fileName)
21+
22+
sdaFiles <- rbind(sdaFiles, data.frame(DatasetId = datasetId, FileName = fileName))
23+
1724
# Cleanup
1825
rm(seuratObj)
1926
gc()
20-
}
27+
}
28+
29+
write.table(sdaFiles, file = 'sdaFiles.txt', row.names = FALSE, col.names = FALSE, quote = FALSE, sep = '\t')

singlecell/src/org/labkey/singlecell/pipeline/singlecell/RunSDA.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
11
package org.labkey.singlecell.pipeline.singlecell;
22

3+
import au.com.bytecode.opencsv.CSVReader;
34
import org.json.old.JSONObject;
5+
import org.labkey.api.pipeline.PipelineJobException;
6+
import org.labkey.api.reader.Readers;
7+
import org.labkey.api.sequenceanalysis.SequenceOutputFile;
48
import org.labkey.api.sequenceanalysis.pipeline.AbstractPipelineStepProvider;
59
import org.labkey.api.sequenceanalysis.pipeline.PipelineContext;
10+
import org.labkey.api.sequenceanalysis.pipeline.SequenceOutputHandler;
611
import org.labkey.api.singlecell.pipeline.SeuratToolParameter;
712
import org.labkey.api.singlecell.pipeline.SingleCellStep;
813

14+
import java.io.File;
15+
import java.io.IOException;
916
import java.util.Arrays;
17+
import java.util.List;
18+
import java.util.Set;
19+
import java.util.stream.Collectors;
1020

1121
public class RunSDA extends AbstractCellMembraneStep
1222
{
@@ -68,6 +78,62 @@ public String getFileSuffix()
6878
{
6979
return "sda";
7080
}
81+
82+
@Override
83+
public Output execute(SequenceOutputHandler.JobContext ctx, List<SeuratObjectWrapper> inputObjects, String outputPrefix) throws PipelineJobException
84+
{
85+
Output output = super.execute(ctx, inputObjects, outputPrefix);
86+
87+
File saved = new File(ctx.getOutputDir(), "sdaFiles.txt");
88+
if (!saved.exists())
89+
{
90+
throw new PipelineJobException("Unable to find file: " + saved.getPath());
91+
}
92+
93+
try (CSVReader reader = new CSVReader(Readers.getReader(saved), '\t'))
94+
{
95+
String[] line;
96+
while ((line = reader.readNext()) != null)
97+
{
98+
File rds = new File(ctx.getOutputDir(), line[1]);
99+
if (!rds.exists())
100+
{
101+
throw new PipelineJobException("Unable to find file: " + rds.getPath());
102+
}
103+
104+
final String datasetId = line[0];
105+
Set<SeuratObjectWrapper> wrappers = inputObjects.stream().filter(x -> datasetId.equals(x.getDatasetId())).collect(Collectors.toSet());
106+
if (wrappers.size() == 0)
107+
{
108+
throw new PipelineJobException("Unable to find seurat object wrapper for: " + datasetId);
109+
}
110+
else if (wrappers.size() > 1)
111+
{
112+
throw new PipelineJobException("More than one seurat object wrapper matched: " + datasetId + ", found: " + wrappers.stream().map(SeuratObjectWrapper::getDatasetId).collect(Collectors.joining(", ")));
113+
}
114+
115+
SeuratObjectWrapper wrapper = wrappers.iterator().next();
116+
117+
SequenceOutputFile so = new SequenceOutputFile();
118+
so.setFile(rds);
119+
so.setCategory("SDA Results");
120+
so.setLibrary_id(ctx.getSequenceSupport().getCachedGenomes().iterator().next().getGenomeId());
121+
so.setReadset(wrapper.getReadsetId());
122+
so.setName(wrapper.getDatasetName() == null ? wrapper.getDatasetId() : wrapper.getDatasetName() + ": SDA Analysis");
123+
124+
ctx.getFileManager().addSequenceOutput(so);
125+
}
126+
}
127+
catch (IOException e)
128+
{
129+
throw new PipelineJobException(e);
130+
}
131+
132+
ctx.getFileManager().addIntermediateFile(saved);
133+
134+
return output;
135+
}
136+
71137
}
72138

73139

0 commit comments

Comments
 (0)