Skip to content

Commit 70dfa28

Browse files
committed
Allow multiple subsets in seurat pipeline
1 parent 4a7b0ba commit 70dfa28

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

singlecell/resources/chunks/SubsetSeurat.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ for (datasetId in names(seuratObjects)) {
22
seuratObj <- seuratObjects[[datasetId]]
33
seuratObjects[[datasetId]] <- NULL
44

5-
seuratObj <- subset(seuratObj, subset = <EXPRESSION>)
5+
<SUBSETS>
66

77
newSeuratObjects[[datasetId]] <- seuratObj
88

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public Provider()
3636
SeuratToolParameter.create("featuresToRegress", "Features to Regress", "These features, entered comma-separated or one/line, will be passed to Seurat::ScaleData vars.to.regress", "sequenceanalysis-trimmingtextarea", new JSONObject(){{
3737
put("height", 150);
3838
put("delimiter", ",");
39-
}}, "nCount_RNA,p.mito"),
39+
}}, null),
4040
SeuratToolParameter.create("scaleVariableFeaturesOnly", "ScaleData On Variable Features Only", "If checked, ScaleData will only be performed on VariableFeatures, which should dramatically reduce time and memory", "checkbox", new JSONObject(){{
4141
put("checked", true);
4242
}}, true),

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

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
import org.labkey.api.singlecell.pipeline.SeuratToolParameter;
1010
import org.labkey.api.singlecell.pipeline.SingleCellStep;
1111

12+
import java.util.ArrayList;
1213
import java.util.Arrays;
1314
import java.util.Collection;
1415
import java.util.HashSet;
1516
import java.util.List;
1617
import java.util.Set;
17-
import java.util.stream.Collectors;
1818

1919
public class SubsetSeurat extends AbstractCellMembraneStep
2020
{
@@ -28,12 +28,12 @@ public static class Provider extends AbstractPipelineStepProvider<SingleCellStep
2828
public Provider()
2929
{
3030
super("SubsetSeurat", "Subset", "CellMembrane/Seurat", "The seurat object will be subset based on the expression below, which is passed directly to Seurat's subset(subset = X).", Arrays.asList(
31-
SeuratToolParameter.create("expression", "Expression", "Filter Expression", "textarea", new JSONObject(){{
31+
SeuratToolParameter.create("expression", "Expression", "Filter Expression(s)", "sequenceanalysis-trimmingtextarea", new JSONObject(){{
3232
put("allowBlank", false);
3333
put("height", 150);
3434
put("delimiter", ",");
3535
}}, null)
36-
), null, null);
36+
), Arrays.asList("/sequenceanalysis/field/TrimmingTextArea.js"), null);
3737
}
3838

3939

@@ -54,22 +54,34 @@ public Collection<String> getRLibraries()
5454
return ret;
5555
}
5656

57-
final static String EXPRESSION = "<EXPRESSION>";
57+
final static String EXPRESSION = "<SUBSETS>";
5858

5959
@Override
6060
protected List<String> loadChunkFromFile() throws PipelineJobException
6161
{
6262
ToolParameterDescriptor pd = getProvider().getParameterByName("expression");
6363
final String val = StringUtils.trimToNull(pd.extractValue(getPipelineCtx().getJob(), getProvider(), getStepIdx()));
64+
final String[] values = val.split(",");
6465

65-
return super.loadChunkFromFile().stream().map(x -> {
66-
if (x.contains(EXPRESSION))
66+
List<String> ret = new ArrayList<>();
67+
for (String line : super.loadChunkFromFile())
68+
{
69+
if (line.contains(EXPRESSION))
70+
{
71+
for (String subset : values)
72+
{
73+
String toSub = "seuratObj <- subset(seuratObj, subset = " + subset + ")";
74+
ret.add(line.replaceAll(EXPRESSION, toSub));
75+
ret.add(line.replaceAll(EXPRESSION, "print(paste0('Cells after subset: ', ncol(seuratObj))"));
76+
}
77+
}
78+
else
6779
{
68-
x = x.replaceAll(EXPRESSION, val);
80+
ret.add(line);
6981
}
82+
}
7083

71-
return x;
72-
}).collect(Collectors.toList());
84+
return ret;
7385
}
7486

7587
@Override

0 commit comments

Comments
 (0)