Skip to content

Commit ab7cbd9

Browse files
authored
Merge pull request #97 from LabKey/fb_merge_discvr-20.11
Merge discvr-20.11 to develop
2 parents 97604ef + a5b20ed commit ab7cbd9

File tree

19 files changed

+174
-28
lines changed

19 files changed

+174
-28
lines changed

SequenceAnalysis/resources/queries/sequenceanalysis/reference_library_members/.qview.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<columns>
33
<column name="library_id" />
44
<column name="ref_nt_id" />
5+
<column name="alias" />
56
<column name="start" />
67
<column name="stop" />
78
<column name="type" />
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE sequenceanalysis.reference_library_members ADD alias VARCHAR(4000);
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE sequenceanalysis.reference_library_members ADD alias VARCHAR(4000);

SequenceAnalysis/resources/schemas/sequenceanalysis.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2234,6 +2234,9 @@
22342234
<fkColumnName>rowid</fkColumnName>
22352235
</fk>
22362236
</column>
2237+
<column columnName="alias">
2238+
<description>Optional. Can be used to give the sequence a local name</description>
2239+
</column>
22372240
<column columnName="start">
22382241
<description>Optional. Can be used in conjunction with stop to select a subsequence of the reference. If blank the region will begin at the first base of the reference</description>
22392242
</column>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ public String getName()
178178
@Override
179179
public Double getSchemaVersion()
180180
{
181-
return 12.324;
181+
return 12.325;
182182
}
183183

184184
@Override

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,8 @@ private Map<String, Pair<String, Integer>> getNameTranslationMap(List<RefNtSeque
357357

358358
getJob().getLogger().info("building list of chromosome name translations");
359359
Map<String, Pair<String, Integer>> ret = new CaseInsensitiveHashMap<>();
360+
361+
TableInfo rlm = SequenceAnalysisSchema.getTable(SequenceAnalysisSchema.TABLE_REF_LIBRARY_MEMBERS);
360362
for (RefNtSequenceModel m : refNtSequenceModels)
361363
{
362364
if (m.getOffsetsFile() != null && m.getOffsetsFile().exists())
@@ -446,6 +448,18 @@ private Map<String, Pair<String, Integer>> getNameTranslationMap(List<RefNtSeque
446448
String strPart = m.getName().toLowerCase().replaceAll("^chr", "");
447449
ret.put(strPart, Pair.of(m.getName(), 0));
448450
}
451+
452+
SimpleFilter filter = new SimpleFilter(FieldKey.fromString("library_id"), getPipelineJob().getLibraryId());
453+
filter.addCondition(FieldKey.fromString("ref_nt_id"), m.getRowid());
454+
TableSelector ts = new TableSelector(rlm, PageFlowUtil.set("alias"), filter, null);
455+
if (ts.exists())
456+
{
457+
String alias = ts.getObject(String.class);
458+
if (alias != null)
459+
{
460+
ret.put(alias, Pair.of(m.getName(), 0));
461+
}
462+
}
449463
}
450464
}
451465
}

SequenceAnalysis/src/org/labkey/sequenceanalysis/run/util/AbstractGenomicsDBImportHandler.java

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,14 @@
4040
import java.util.ArrayList;
4141
import java.util.Arrays;
4242
import java.util.Collection;
43+
import java.util.Collections;
4344
import java.util.Date;
4445
import java.util.HashSet;
4546
import java.util.LinkedHashSet;
4647
import java.util.List;
4748
import java.util.Map;
4849
import java.util.Set;
50+
import java.util.stream.Collectors;
4951

5052
abstract public class AbstractGenomicsDBImportHandler extends AbstractParameterizedOutputHandler<SequenceOutputHandler.SequenceOutputProcessor> implements SequenceOutputHandler.TracksVCF, SequenceOutputHandler.HasCustomVariantMerge, VariantProcessingStep.MayRequirePrepareTask, VariantProcessingStep.SupportsScatterGather
5153
{
@@ -302,16 +304,28 @@ Set<String> getContigsInInputs(List<File> inputVCFs, Logger log) throws Pipeline
302304
return _contigsInInputs;
303305
}
304306

305-
private void copyToLevelFiles(PipelineJob job, File sourceWorkspace, File destinationWorkspace, boolean overwrite) throws IOException
307+
private void copyToLevelFiles(PipelineJob job, File sourceWorkspace, File destinationWorkspace, boolean removeOtherFiles, boolean overwriteExisting) throws IOException
306308
{
307309
job.getLogger().info("Copying top-level files from: " + sourceWorkspace.getPath());
310+
if (removeOtherFiles)
311+
{
312+
for (File f : destinationWorkspace.listFiles())
313+
{
314+
if (!f.isDirectory())
315+
{
316+
job.getLogger().debug("deleting existing top-level file: " + f.getPath());
317+
f.delete();
318+
}
319+
}
320+
}
321+
308322
for (String fn : Arrays.asList("callset.json", "vidmap.json", "vcfheader.vcf", "__tiledb_workspace.tdb"))
309323
{
310324
File source = new File(sourceWorkspace, fn);
311325
File dest = new File(destinationWorkspace, fn);
312326
if (dest.exists())
313327
{
314-
if (!overwrite)
328+
if (!overwriteExisting)
315329
{
316330
job.getLogger().debug("workspace file exists, will not overwrite: " + dest.getPath());
317331
continue;
@@ -457,7 +471,7 @@ else if (genomeIds.isEmpty())
457471
}
458472

459473
File sourceWorkspace = getSourceWorkspace(ctx.getParams(), ctx.getSequenceSupport());
460-
copyWorkspace(ctx, sourceWorkspace, workingDestinationWorkspaceFolder, genome, toDelete, !genomicsDbCompleted);
474+
copyWorkspace(ctx, sourceWorkspace, workingDestinationWorkspaceFolder, genome, toDelete, !genomicsDbCompleted, !genomicsDbCompleted, !genomicsDbCompleted);
461475
}
462476
else
463477
{
@@ -587,7 +601,7 @@ else if (genomeIds.isEmpty())
587601

588602
if (!copyToSourceDone.exists())
589603
{
590-
copyWorkspace(ctx, workingDestinationWorkspaceFolder, workspaceLocalDir, genome, toDelete, true);
604+
copyWorkspace(ctx, workingDestinationWorkspaceFolder, workspaceLocalDir, genome, toDelete, true, false, false);
591605

592606
try
593607
{
@@ -635,7 +649,7 @@ else if (genomeIds.isEmpty())
635649
}
636650
}
637651

638-
private void copyWorkspace(JobContext ctx, File sourceWorkspace, File destinationWorkspaceFolder, ReferenceGenome genome, Collection<File> toDelete, boolean alwaysPerformRsync) throws PipelineJobException
652+
private void copyWorkspace(JobContext ctx, File sourceWorkspace, File destinationWorkspaceFolder, ReferenceGenome genome, Collection<File> toDelete, boolean alwaysPerformRsync, boolean overwriteTopLevelFiles, boolean removeExistingTopLevelFiles) throws PipelineJobException
639653
{
640654
if (!destinationWorkspaceFolder.exists())
641655
{
@@ -665,14 +679,15 @@ private void copyWorkspace(JobContext ctx, File sourceWorkspace, File destinatio
665679
else
666680
{
667681
ctx.getLogger().info("has been copied, skipping: " + i.getContig());
682+
assertContigFoldersEqual(sourceFolder, destContigFolder);
668683
reportFragmentsPerContig(ctx, destContigFolder, i.getContig());
669684
continue;
670685
}
671686
}
672687

673688
if (!haveCopiedTopLevelFiles)
674689
{
675-
copyToLevelFiles(ctx.getJob(), sourceWorkspace, destinationWorkspaceFolder, false);
690+
copyToLevelFiles(ctx.getJob(), sourceWorkspace, destinationWorkspaceFolder, removeExistingTopLevelFiles, overwriteTopLevelFiles);
676691
haveCopiedTopLevelFiles = true;
677692
}
678693

@@ -704,6 +719,7 @@ private void copyWorkspace(JobContext ctx, File sourceWorkspace, File destinatio
704719
}
705720

706721
FileUtils.touch(copyDone);
722+
assertContigFoldersEqual(sourceFolder, destContigFolder);
707723
reportFragmentsPerContig(ctx, destContigFolder, i.getContig());
708724
}
709725
catch (IOException e)
@@ -718,22 +734,46 @@ private File getCopyToSourceDone(JobContext ctx)
718734
return new File(ctx.getSourceDirectory(), "copyToWebserver.done");
719735
}
720736

721-
private void reportFragmentsPerContig(JobContext ctx, File destContigFolder, String contigName)
737+
private void assertContigFoldersEqual(File sourceFolder, File destContigFolder) throws IllegalArgumentException
722738
{
723-
if (destContigFolder.exists())
739+
List<String> sourceFiles = getFragmentsPerContig(sourceFolder);
740+
List<String> destFiles = getFragmentsPerContig(destContigFolder);
741+
742+
if (!sourceFiles.equals(destFiles))
724743
{
725-
File[] children = destContigFolder.listFiles(x -> {
726-
return x.isDirectory() && !"genomicsdb_meta_dir".equals(x.getName());
727-
});
744+
throw new IllegalArgumentException("Source and destination contig files not equal for: " + destContigFolder.getPath());
745+
}
746+
}
728747

729-
ctx.getLogger().info(contigName + " total fragments: " + children.length);
748+
private void reportFragmentsPerContig(JobContext ctx, File destContigFolder, String contigName)
749+
{
750+
List<String> children = getFragmentsPerContig(destContigFolder);
751+
if (children == null)
752+
{
753+
ctx.getLogger().warn("expected folder not found: " + destContigFolder.getPath());
730754
}
731755
else
732756
{
733-
ctx.getLogger().warn("expected folder not found: " + destContigFolder.getPath());
757+
ctx.getLogger().info(contigName + " total fragments: " + children.size());
734758
}
735759
}
736760

761+
private List<String> getFragmentsPerContig(File destContigFolder)
762+
{
763+
if (destContigFolder.exists())
764+
{
765+
List<String> children = Arrays.stream(destContigFolder.listFiles(x -> {
766+
return x.isDirectory() && !"genomicsdb_meta_dir".equals(x.getName());
767+
})).map(File::getName).collect(Collectors.toList());
768+
769+
Collections.sort(children);
770+
771+
return children;
772+
}
773+
774+
return null;
775+
}
776+
737777
private boolean doCopyLocal(JSONObject params)
738778
{
739779
return params.optBoolean("doCopyGVcfLocal", false);

SequenceAnalysis/src/org/labkey/sequenceanalysis/run/util/GenomicsDbImportWrapper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ public void execute(ReferenceGenome genome, List<File> inputGvcfs, File outputFi
8888
args.add(intervalList.getPath());
8989
}
9090

91+
args.add("-R");
92+
args.add(genome.getWorkingFastaFile().getPath());
93+
9194
execute(args);
9295

9396
if (!outputFile.exists())

SequenceAnalysis/src/org/labkey/sequenceanalysis/util/ChainFileValidator.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,19 @@
77
import org.junit.Assert;
88
import org.junit.Test;
99
import org.labkey.api.collections.CaseInsensitiveHashMap;
10+
import org.labkey.api.data.CompareType;
1011
import org.labkey.api.data.DbScope;
12+
import org.labkey.api.data.Results;
1113
import org.labkey.api.data.SQLFragment;
1214
import org.labkey.api.data.Selector;
15+
import org.labkey.api.data.SimpleFilter;
1316
import org.labkey.api.data.SqlSelector;
17+
import org.labkey.api.data.TableSelector;
18+
import org.labkey.api.query.FieldKey;
19+
import org.labkey.api.sequenceanalysis.RefNtSequenceModel;
1420
import org.labkey.api.util.FileUtil;
21+
import org.labkey.api.util.PageFlowUtil;
22+
import org.labkey.sequenceanalysis.SequenceAnalysisSchema;
1523

1624
import java.io.BufferedWriter;
1725
import java.io.File;
@@ -301,6 +309,23 @@ public void exec(ResultSet rs) throws SQLException
301309
}
302310
});
303311

312+
SimpleFilter filter = new SimpleFilter(FieldKey.fromString("library_id"), genomeId);
313+
filter.addCondition(FieldKey.fromString("alias"), null, CompareType.NONBLANK);
314+
TableSelector ts = new TableSelector(SequenceAnalysisSchema.getTable(SequenceAnalysisSchema.TABLE_REF_LIBRARY_MEMBERS), PageFlowUtil.set("ref_nt_id", "alias"), filter, null);
315+
if (ts.exists())
316+
{
317+
ts.forEachResults(new Selector.ForEachBlock<Results>()
318+
{
319+
@Override
320+
public void exec(Results rs) throws SQLException
321+
{
322+
String name = RefNtSequenceModel.getForRowId(rs.getInt(FieldKey.fromString("ref_nt_id"))).getName();
323+
String alias = rs.getString(FieldKey.fromString("alias"));
324+
cachedReferences.put(alias, name);
325+
}
326+
});
327+
}
328+
304329
_cachedReferencesByGenome.put(genomeId, cachedReferences);
305330
}
306331

singlecell/resources/chunks/Downsample.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-
CellMembrane::DownsampleSeurat(seuratObj, targetCells = targetCells, subsetFields = subsetFields, seed = seed)
5+
seuratObj <- CellMembrane::DownsampleSeurat(seuratObj, targetCells = targetCells, subsetFields = subsetFields, seed = seed)
66

77
newSeuratObjects[[datasetId]] <- seuratObj
88

0 commit comments

Comments
 (0)