Skip to content

Commit 757eafc

Browse files
authored
Merge pull request #145 from LabKey/fb_merge_22.3_to_develop
Merge discvr-22.3 to develop
2 parents 9530c66 + c95268e commit 757eafc

File tree

7 files changed

+47
-21
lines changed

7 files changed

+47
-21
lines changed

singlecell/api-src/org/labkey/api/singlecell/pipeline/AbstractSingleCellPipelineStep.java

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -348,38 +348,52 @@ public static void executeR(SequenceOutputHandler.JobContext ctx, String dockerC
348348
localBashScript.delete();
349349
}
350350

351-
protected String prepareValueForR(SeuratToolParameter pd)
351+
protected void addParameterVariables(SeuratToolParameter pd, List<String> body)
352352
{
353353
String val = StringUtils.trimToNull(pd.extractValue(getPipelineCtx().getJob(), getProvider(), getStepIdx()));
354354
if (val == null)
355355
{
356-
return "NULL";
356+
body.add((pd.getVariableName() + " <- NULL"));
357357
}
358358
else if ("false".equals(val))
359359
{
360-
return "FALSE";
360+
body.add((pd.getVariableName() + " <- FALSE"));
361361
}
362362
else if ("true".equals(val))
363363
{
364-
return "TRUE";
364+
body.add((pd.getVariableName() + " <- TRUE"));
365365
}
366366
else if (NumberUtils.isCreatable(val))
367367
{
368-
return val;
368+
body.add((pd.getVariableName() + " <- " + val));
369369
}
370370
else if ("sequenceanalysis-trimmingtextarea".equals(pd.getFieldXtype()))
371371
{
372372
val = val.replace("'", "\\\'");
373-
String[] vals = val.split(pd.getDelimiter());
374-
return "c('" + StringUtils.join(vals, "','") + "')";
373+
serializeMultiValueParam(pd, body, val);
375374
}
376375
else if (pd.isMultiValue())
377376
{
378-
String[] vals = val.split(pd.getDelimiter());
379-
return "c('" + StringUtils.join(vals, "','") + "')";
377+
serializeMultiValueParam(pd, body, val);
380378
}
379+
else
380+
{
381+
body.add((pd.getVariableName() + " <- '" + val + "'"));
382+
}
383+
}
381384

382-
return "'" + val + "'";
385+
private void serializeMultiValueParam(SeuratToolParameter pd, List<String> body, String val)
386+
{
387+
String[] vals = val.split(pd.getDelimiter());
388+
final int batchSize = 75;
389+
int numBatches = (int)Math.ceil((double)vals.length / batchSize);
390+
391+
for (int i=0;i<numBatches;i++)
392+
{
393+
int start = (i * batchSize);
394+
int end = Math.min(start + batchSize, vals.length);
395+
body.add(pd.getVariableName() + " <- " + "c(" + (i == 0 ? "" : pd.getVariableName() + ", ") + "'" + StringUtils.join(Arrays.copyOfRange(vals, start, end), "','") + "')");
396+
}
383397
}
384398

385399
protected List<String> loadChunkFromFile() throws PipelineJobException
@@ -423,7 +437,7 @@ protected Chunk createParamChunk(SequenceOutputHandler.JobContext ctx, List<Seur
423437
SeuratToolParameter stp = (SeuratToolParameter)pd;
424438
if (stp.shouldIncludeInMarkdown(getPipelineCtx().getJob(), getProvider(), getStepIdx()))
425439
{
426-
body.add(((SeuratToolParameter) pd).getVariableName() + " <- " + prepareValueForR(stp));
440+
addParameterVariables(stp, body);
427441
}
428442
}
429443
}

singlecell/api-src/org/labkey/api/singlecell/pipeline/SeuratToolParameter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public String getVariableName()
5050
return _rName == null ? getName() : _rName;
5151
}
5252

53-
public boolean shouldIncludeInMarkdown(PipelineJob job, PipelineStepProvider provider, int stepIdx)
53+
public boolean shouldIncludeInMarkdown(PipelineJob job, PipelineStepProvider<?> provider, int stepIdx)
5454
{
5555
if (!_includeIfEmptyOrNull)
5656
{
File renamed without changes.

singlecell/resources/chunks/TcrFilter.R

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ for (datasetId in names(seuratObjects)) {
1818

1919
cdr3ForLocus <- gsub(cdr3ForLocus, pattern = paste0(fieldName, ':'), replacement = '')
2020
matchingCells <- sapply(seuratObj@meta.data[[fieldName]], function(x){
21-
values <- unlist(strsplit(x, split = ','))
21+
if (is.na(x)) {
22+
return(FALSE)
23+
}
24+
25+
values <- unlist(strsplit(as.character(x), split = ','))
2226
return(length(intersect(values, cdr3ForLocus)) != 0)
2327
})
2428

@@ -37,8 +41,9 @@ for (datasetId in names(seuratObjects)) {
3741
if (all(is.null(cellsToKeep))) {
3842
print('There were no matching cells')
3943
} else {
44+
print(paste0('Total passing cells: ', length(cellsToKeep)))
4045
seuratObj <- subset(seuratObj, cells = cellsToKeep)
41-
#saveData(seuratObj, datasetId)
46+
saveData(seuratObj, datasetId)
4247
totalPassed <- totalPassed + 1
4348
}
4449

singlecell/src/org/labkey/singlecell/SingleCellModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ public static void registerPipelineSteps()
188188
SequencePipelineService.get().registerPipelineStep(new CheckExpectations.Provider());
189189
SequencePipelineService.get().registerPipelineStep(new CommonFilters.Provider());
190190
SequencePipelineService.get().registerPipelineStep(new RunVision.Provider());
191-
SequencePipelineService.get().registerPipelineStep(new NimbleAppend.Provider());
191+
SequencePipelineService.get().registerPipelineStep(new AppendNimble.Provider());
192192
SequencePipelineService.get().registerPipelineStep(new AppendTcr.Provider());
193193
SequencePipelineService.get().registerPipelineStep(new TcrFilter.Provider());
194194

singlecell/src/org/labkey/singlecell/pipeline/singlecell/NimbleAppend.java renamed to singlecell/src/org/labkey/singlecell/pipeline/singlecell/AppendNimble.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
import java.util.List;
1616
import java.util.Set;
1717

18-
public class NimbleAppend extends AbstractRDiscvrStep
18+
public class AppendNimble extends AbstractRDiscvrStep
1919
{
20-
public NimbleAppend(PipelineContext ctx, NimbleAppend.Provider provider)
20+
public AppendNimble(PipelineContext ctx, AppendNimble.Provider provider)
2121
{
2222
super(provider, ctx);
2323
}
@@ -35,9 +35,9 @@ public Provider()
3535

3636

3737
@Override
38-
public NimbleAppend create(PipelineContext ctx)
38+
public AppendNimble create(PipelineContext ctx)
3939
{
40-
return new NimbleAppend(ctx, this);
40+
return new AppendNimble(ctx, this);
4141
}
4242
}
4343

@@ -62,6 +62,7 @@ protected Chunk createParamChunk(SequenceOutputHandler.JobContext ctx, List<Seur
6262
ret.bodyLines.add("nimbleGenomes <- list(");
6363
String genomeStr = getProvider().getParameterByName("nimbleGenomes").extractValue(getPipelineCtx().getJob(), getProvider(), getStepIdx(), String.class);
6464
JSONArray json = new JSONArray(genomeStr);
65+
String delim = "";
6566
for (int i = 0; i < json.length(); i++)
6667
{
6768
JSONArray arr = json.getJSONArray(i);
@@ -72,7 +73,8 @@ protected Chunk createParamChunk(SequenceOutputHandler.JobContext ctx, List<Seur
7273

7374
int genomeId = arr.getInt(0);
7475
String targetAssay = arr.getString(1);
75-
ret.bodyLines.add("\t" + genomeId + " = " + targetAssay);
76+
ret.bodyLines.add("\t" + delim + "'" + genomeId + "' = '" + targetAssay + "'");
77+
delim = ",";
7678
}
7779
ret.bodyLines.add(")");
7880

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,15 @@ protected Chunk createParamChunk(SequenceOutputHandler.JobContext ctx, List<Seur
7272

7373
for (SeuratObjectWrapper so : inputObjects)
7474
{
75+
if (so.getSequenceOutputFile().getReadset() == null)
76+
{
77+
throw new PipelineJobException("Unable to find readset for outputfile: " + so.getSequenceOutputFileId() + ". This set requires single-dataset inputs. Removing this step may be a solution.");
78+
}
79+
7580
Readset parentReadset = ctx.getSequenceSupport().getCachedReadset(so.getSequenceOutputFile().getReadset());
7681
if (parentReadset == null)
7782
{
78-
throw new PipelineJobException("Unable to find readset for outputfile: " + so.getSequenceOutputFileId());
83+
throw new PipelineJobException("Unable to find readset for outputfile: " + so.getSequenceOutputFileId() + ". This set requires single-dataset inputs. Removing this step may be a solution.");
7984
}
8085

8186
Set<String> htosPerReadset = CellHashingServiceImpl.get().getHtosForParentReadset(parentReadset.getReadsetId(), ctx.getSourceDirectory(), ctx.getSequenceSupport(), false);

0 commit comments

Comments
 (0)