Skip to content

Commit bbae51f

Browse files
authored
Merge pull request #210 from LabKey/fb_merge_22.11_to_develop
Merge 22.11 to develop
2 parents 8ec51c4 + 1682da2 commit bbae51f

File tree

38 files changed

+628
-330
lines changed

38 files changed

+628
-330
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,13 @@ static public void setInstance(SequenceAnalysisService instance)
105105
abstract public void mergeFastqFiles(File output, List<File> inputs, Logger log) throws PipelineJobException;
106106

107107
abstract public void registerAccessoryFileProvider(Function<File, List<File>> fn);
108+
109+
abstract public void registerReadsetListener(ReadsetListener listener);
110+
111+
public static interface ReadsetListener
112+
{
113+
public void onReadsetCreate(User u, Readset rs, @Nullable Readset replacedReadset, @Nullable PipelineJob job);
114+
115+
public boolean isAvailable(Container c, User u);
116+
}
108117
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ private static boolean verifyOrCreateCachedIndex(PipelineContext ctx, @Nullable
7878
File lockFile = new File(webserverIndexDir.getPath() + ".copyLock");
7979
if (lockFile.exists())
8080
{
81-
ctx.getLogger().error("Another job is actively saving this cached index. Will not re-created, but if this job tries to use it before copy is complete this might cause issues.");
81+
ctx.getLogger().error("Another job is actively saving this cached index. This job will skip that step; however, if this job tries to start alignment and use the index before copy is complete this might cause issues.");
8282
}
8383

8484
hasCachedIndex = true;

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ default void init(PipelineJob job, SequenceAnalysisJobSupport support, List<Sequ
3838

3939
}
4040

41+
default void complete(PipelineJob job, List<SequenceOutputFile> inputs, List<SequenceOutputFile> outputsCreated, SequenceAnalysisJobSupport support) throws PipelineJobException
42+
{
43+
44+
}
45+
4146
enum ScatterGatherMethod
4247
{
4348
none(),

SequenceAnalysis/resources/web/SequenceAnalysis/window/ReprocessLibraryWindow.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ Ext4.define('SequenceAnalysis.window.ReprocessLibraryWindow', {
2727
html: 'This will cause the server to reprocess the selected reference genomes, which should be used if the data or attributes have changed.',
2828
border: false,
2929
style: 'padding-bottom: 10px;'
30+
},{
31+
xtype: 'checkbox',
32+
itemId: 'alignerIndexesOnly',
33+
fieldLabel: 'Prepare Aligner Indexes Only',
34+
checked: false
3035
}],
3136
buttons: [{
3237
text: 'Submit',
@@ -46,10 +51,13 @@ Ext4.define('SequenceAnalysis.window.ReprocessLibraryWindow', {
4651
onSubmit: function(){
4752
Ext4.Msg.wait('Saving...');
4853

54+
var skipFastaRecreate = !!this.down('#alignerIndexesOnly').getValue();
55+
4956
LABKEY.Ajax.request({
5057
url: LABKEY.ActionURL.buildURL('sequenceanalysis', 'recreateReferenceLibrary'),
5158
jsonData: {
52-
libraryIds: this.libraryIds
59+
libraryIds: this.libraryIds,
60+
skipFastaRecreate: skipFastaRecreate
5361
},
5462
scope: this,
5563
success: function(){

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3190,7 +3190,7 @@ public ApiResponse execute(RecreateReferenceLibraryForm form, BindException erro
31903190
throw new PipelineValidationException("Insufficient permissions to update reference genome: " + libraryId);
31913191
}
31923192

3193-
PipelineService.get().queueJob(ReferenceLibraryPipelineJob.recreate(c, getUser(), root, libraryId, form.isSkipCacheIndexes(), false));
3193+
PipelineService.get().queueJob(ReferenceLibraryPipelineJob.recreate(c, getUser(), root, libraryId, form.isSkipCacheIndexes(), false, form.isSkipFastaRecreate()));
31943194
}
31953195

31963196
return new ApiSimpleResponse("success", true);
@@ -3207,6 +3207,7 @@ public static class RecreateReferenceLibraryForm
32073207
{
32083208
private int[] _libraryIds;
32093209
private boolean _skipCacheIndexes = false;
3210+
private boolean _skipFastaRecreate = false;
32103211

32113212
public int[] getLibraryIds()
32123213
{
@@ -3227,6 +3228,16 @@ public void setSkipCacheIndexes(boolean skipCacheIndexes)
32273228
{
32283229
_skipCacheIndexes = skipCacheIndexes;
32293230
}
3231+
3232+
public boolean isSkipFastaRecreate()
3233+
{
3234+
return _skipFastaRecreate;
3235+
}
3236+
3237+
public void setSkipFastaRecreate(boolean skipFastaRecreate)
3238+
{
3239+
_skipFastaRecreate = skipFastaRecreate;
3240+
}
32303241
}
32313242

32323243
@RequiresPermission(ReadPermission.class)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,7 @@ public static List<String> getAssociatedFiles(File f, boolean includeGz)
533533
if (_bamFileType.isType(f))
534534
{
535535
ret.add(f.getName() + ".bai");
536+
ret.add(f.getName() + ".pbi");
536537
}
537538
else if (_cramFileType.isType(f))
538539
{

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,7 @@ public ReferenceLibraryPipelineJob createReferenceLibrary(Container c, User u, S
718718
try
719719
{
720720
PipeRoot root = PipelineService.get().getPipelineRootSetting(c);
721-
ReferenceLibraryPipelineJob job = new ReferenceLibraryPipelineJob(c, u, root, name, assemblyId, description, libraryMembers, null, skipCacheIndexes, skipTriggers, unplacedContigPrefixes, extraTriggers);
721+
ReferenceLibraryPipelineJob job = new ReferenceLibraryPipelineJob(c, u, root, name, assemblyId, description, libraryMembers, null, skipCacheIndexes, skipTriggers, unplacedContigPrefixes, extraTriggers, false);
722722
PipelineService.get().queueJob(job);
723723

724724
return job;

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.labkey.api.sequenceanalysis.ReferenceLibraryHelper;
3535
import org.labkey.api.sequenceanalysis.SequenceAnalysisService;
3636
import org.labkey.api.sequenceanalysis.SequenceDataProvider;
37+
import org.labkey.api.sequenceanalysis.model.Readset;
3738
import org.labkey.api.sequenceanalysis.pipeline.ReferenceGenome;
3839
import org.labkey.api.sequenceanalysis.pipeline.SequenceOutputHandler;
3940
import org.labkey.api.util.FileType;
@@ -80,6 +81,7 @@ public class SequenceAnalysisServiceImpl extends SequenceAnalysisService
8081
private final Set<SequenceOutputHandler<SequenceOutputHandler.SequenceOutputProcessor>> _fileHandlers = new HashSet<>();
8182
private final Set<SequenceOutputHandler<SequenceOutputHandler.SequenceReadsetProcessor>> _readsetHandlers = new HashSet<>();
8283
private final Map<String, SequenceDataProvider> _dataProviders = new HashMap<>();
84+
private final List<ReadsetListener> _readsetListeners = new ArrayList<>();
8385

8486
private SequenceAnalysisServiceImpl()
8587
{
@@ -539,4 +541,20 @@ public List<Function<File, List<File>>> getAccessoryFileProviders()
539541
{
540542
return Collections.unmodifiableList(_accessoryFileProviders);
541543
}
544+
545+
@Override
546+
public void registerReadsetListener(ReadsetListener listener)
547+
{
548+
_readsetListeners.add(listener);
549+
}
550+
551+
public void onReadsetCreate(User u, Readset rs, @Nullable Readset replacedReadset, @Nullable PipelineJob job)
552+
{
553+
_readsetListeners.forEach(l -> {
554+
Container c = ContainerManager.getForId(rs.getContainer());
555+
if (l.isAvailable(c, u)) {
556+
l.onReadsetCreate(u, rs, replacedReadset, job);
557+
}
558+
});
559+
}
542560
}

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

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@
5757
import org.labkey.sequenceanalysis.SequenceAnalysisServiceImpl;
5858
import org.labkey.sequenceanalysis.model.ReferenceLibraryMember;
5959
import org.labkey.sequenceanalysis.run.util.FastaIndexer;
60-
import picard.sam.CreateSequenceDictionary;
6160

6261
import java.io.File;
62+
import java.io.IOException;
6363
import java.io.PrintWriter;
6464
import java.util.ArrayList;
6565
import java.util.Arrays;
@@ -113,6 +113,33 @@ public PipelineJob.Task<?> createTask(PipelineJob job)
113113
return new CreateReferenceLibraryTask(this, job);
114114
}
115115

116+
@Override
117+
public boolean isParticipant(PipelineJob job) throws IOException
118+
{
119+
if (!(job instanceof ReferenceLibraryPipelineJob rpj))
120+
{
121+
throw new IllegalArgumentException("Pipeline job is not a ReferenceLibraryPipelineJob");
122+
}
123+
124+
if (rpj.isSkipFastaRecreate())
125+
{
126+
job.getLogger().debug("Will skip re-creation of FASTA");
127+
try
128+
{
129+
ReferenceGenomeImpl genome = SequenceAnalysisServiceImpl.get().getReferenceGenome(rpj.getLibraryId(), job.getUser());
130+
rpj.setReferenceGenome(genome);
131+
}
132+
catch (PipelineJobException e)
133+
{
134+
job.error(e.getMessage(), e);
135+
}
136+
137+
return false;
138+
}
139+
140+
return super.isParticipant(job);
141+
}
142+
116143
@Override
117144
public boolean isJobComplete(PipelineJob job)
118145
{

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,22 @@ public Factory()
4747
@Override
4848
public boolean isParticipant(PipelineJob job)
4949
{
50-
5150
if (!SequenceTaskHelper.isAlignmentUsed(job))
5251
{
5352
return false;
5453
}
5554

5655
try
5756
{
58-
SequenceTaskHelper taskHelper = new SequenceTaskHelper((SequenceAlignmentJob)job, job.getLogFile().getParentFile());
59-
AlignmentStep alignmentStep = taskHelper.getSingleStep(AlignmentStep.class).create(taskHelper);
60-
6157
if (!(job instanceof SequenceAlignmentJob))
6258
{
6359
job.getLogger().error("Job is not a SequenceAlignmentJob");
6460
return true;
6561
}
6662

63+
SequenceTaskHelper taskHelper = new SequenceTaskHelper((SequenceAlignmentJob)job, job.getLogFile().getParentFile());
64+
AlignmentStep alignmentStep = taskHelper.getSingleStep(AlignmentStep.class).create(taskHelper);
65+
6766
ReferenceGenome referenceGenome = ((SequenceAlignmentJob)job).getTargetGenome();
6867
if (referenceGenome == null)
6968
{

0 commit comments

Comments
 (0)