Skip to content

Commit 919b3d4

Browse files
authored
Merge pull request #139 from LabKey/fb_merge_22.3_to_develop
Merge discvr-22.3 to develop
2 parents 16a3c3a + 840479e commit 919b3d4

File tree

123 files changed

+8016
-10593
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

123 files changed

+8016
-10593
lines changed

SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/model/ReadData.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public interface ReadData extends Serializable
5656

5757
public Integer getModifiedBy();
5858

59+
public Integer getTotalReads();
60+
5961
public String getSra_accession();
6062

6163
public boolean isArchived();

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import org.apache.commons.io.FileUtils;
55
import org.apache.commons.lang3.StringUtils;
66
import org.apache.logging.log4j.Logger;
7-
import org.apache.logging.log4j.LogManager;
87
import org.jetbrains.annotations.Nullable;
98
import org.labkey.api.pipeline.PipelineJobException;
109
import org.labkey.api.pipeline.PipelineJobService;
@@ -30,6 +29,11 @@ public SamSorter(@Nullable Logger logger)
3029
}
3130

3231
public File execute(File input, @Nullable File output, SAMFileHeader.SortOrder sortOrder) throws PipelineJobException
32+
{
33+
return execute(input, output, sortOrder, null);
34+
}
35+
36+
public File execute(File input, @Nullable File output, SAMFileHeader.SortOrder sortOrder, @Nullable List<String> extraArgs) throws PipelineJobException
3337
{
3438
getLogger().info("Sorting SAM/BAM: " + input.getPath());
3539

@@ -50,7 +54,7 @@ public File execute(File input, @Nullable File output, SAMFileHeader.SortOrder s
5054
}
5155
else if (sortOrder != SAMFileHeader.SortOrder.coordinate)
5256
{
53-
throw new PipelineJobException("Improper sort order: " + sortOrder.name());
57+
getLogger().debug("Using sort order: " + sortOrder.name());
5458
}
5559

5660
Integer threads = SequencePipelineService.get().getMaxThreads(getLogger());
@@ -71,6 +75,11 @@ else if (sortOrder != SAMFileHeader.SortOrder.coordinate)
7175
params.add("-T");
7276
params.add(tmpDir);
7377

78+
if (extraArgs != null)
79+
{
80+
params.addAll(extraArgs);
81+
}
82+
7483
params.add("-o");
7584
params.add(output.getPath());
7685

SequenceAnalysis/resources/queries/sequenceanalysis/outputfiles.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,17 @@ function beforeDelete(row, errors){
1414
errors._form = 'You cannot directly delete analyses. To delete these records, use the delete button above the analysis grid.';
1515
}
1616
}
17+
18+
function beforeInsert(row, errors){
19+
beforeUpsert(row, errors);
20+
}
21+
22+
function beforeUpdate(row, errors){
23+
beforeUpsert(row, errors);
24+
}
25+
26+
function beforeUpsert(row, errors) {
27+
if (row.dataid && typeof row.dataid == 'string') {
28+
row.dataid = triggerHelper.createExpData(row.dataid);
29+
}
30+
}

SequenceAnalysis/resources/web/SequenceAnalysis/field/GenomeField.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ Ext4.define('SequenceAnalysis.field.GenomeField', {
77
forceSelection: true,
88
displayField: 'name',
99
valueField: 'rowid',
10+
queryMode: 'local',
11+
triggerAction: 'all',
1012
store: {
1113
type: 'labkey-store',
1214
schemaName: 'sequenceanalysis',

SequenceAnalysis/resources/web/SequenceAnalysis/field/SequenceOutputFileSelectorField.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Ext4.define('SequenceAnalysis.field.SequenceOutputFileSelectorField', {
4949
}
5050
}
5151
else {
52-
LDK.Utils.logError('unable to find library field in GenomeFileSelectorField');
52+
LDK.Utils.logError('unable to find library field in SequenceOutputFileSelectorField');
5353
}
5454
}
5555
else if (window && window.libraryId){

SequenceAnalysis/resources/web/SequenceAnalysis/panel/AnalysisSectionPanel.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,27 @@ Ext4.define('SequenceAnalysis.panel.AnalysisSectionPanel', {
128128

129129
items.push({
130130
xtype: 'ldk-linkbutton',
131-
text: 'Add',
131+
text: 'Add to Start',
132+
linkCls: 'labkey-text-link',
133+
step: step,
134+
handler: function(btn){
135+
var win = btn.up('window');
136+
var owner = win.ownerPanel;
137+
var target = owner.down('#toolConfgPanel');
138+
139+
//check if exists
140+
if (!owner.allowDuplicateSteps && target.down('[stepName=' + btn.step.name + ']')) {
141+
Ext4.Msg.alert('Already Added', 'This step has already been added and cannot be used twice.');
142+
}
143+
else {
144+
target.insert(0, owner.getAbbreviatedConfigForItem(btn.step));
145+
}
146+
}
147+
});
148+
149+
items.push({
150+
xtype: 'ldk-linkbutton',
151+
text: 'Add to End',
132152
linkCls: 'labkey-text-link',
133153
step: step,
134154
handler: function(btn){
@@ -144,7 +164,7 @@ Ext4.define('SequenceAnalysis.panel.AnalysisSectionPanel', {
144164
target.add(owner.getAbbreviatedConfigForItem(btn.step));
145165
}
146166
}
147-
})
167+
});
148168
}, this);
149169

150170
if (items.length){
@@ -161,7 +181,7 @@ Ext4.define('SequenceAnalysis.panel.AnalysisSectionPanel', {
161181
},
162182
layout: {
163183
type: 'table',
164-
columns: 3
184+
columns: 4
165185
},
166186
items: items
167187
}];

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

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
package org.labkey.sequenceanalysis;
22

3+
import org.labkey.api.data.CompareType;
4+
import org.labkey.api.data.SimpleFilter;
5+
import org.labkey.api.data.Sort;
6+
import org.labkey.api.data.TableSelector;
37
import org.labkey.api.data.Transient;
48
import org.labkey.api.exp.api.ExpData;
59
import org.labkey.api.exp.api.ExperimentService;
610
import org.labkey.api.pipeline.PipelineJobService;
11+
import org.labkey.api.query.FieldKey;
712
import org.labkey.api.sequenceanalysis.model.ReadData;
13+
import org.labkey.api.util.PageFlowUtil;
814

915
import java.io.File;
1016
import java.util.Date;
1117
import java.util.HashMap;
18+
import java.util.List;
1219
import java.util.Map;
1320

1421
/**
@@ -33,13 +40,14 @@ public class ReadDataImpl implements ReadData
3340
private boolean _archived = false;
3441
private String sra_accession;
3542

36-
private Map<Integer, File> _cachedFiles = new HashMap<>();
43+
private final Map<Integer, File> _cachedFiles = new HashMap<>();
3744

3845
public ReadDataImpl()
3946
{
4047

4148
}
4249

50+
@Override
4351
public Integer getRowid()
4452
{
4553
return _rowid;
@@ -50,6 +58,7 @@ public void setRowid(Integer rowid)
5058
_rowid = rowid;
5159
}
5260

61+
@Override
5362
public Integer getReadset()
5463
{
5564
return _readset;
@@ -60,6 +69,7 @@ public void setReadset(Integer readset)
6069
_readset = readset;
6170
}
6271

72+
@Override
6373
public String getPlatformUnit()
6474
{
6575
return _platformUnit;
@@ -70,6 +80,7 @@ public void setPlatformUnit(String platformUnit)
7080
_platformUnit = platformUnit;
7181
}
7282

83+
@Override
7384
public String getCenterName()
7485
{
7586
return _centerName;
@@ -80,6 +91,7 @@ public void setCenterName(String centerName)
8091
_centerName = centerName;
8192
}
8293

94+
@Override
8395
public Date getDate()
8496
{
8597
return _date;
@@ -90,6 +102,7 @@ public void setDate(Date date)
90102
_date = date;
91103
}
92104

105+
@Override
93106
public Integer getFileId1()
94107
{
95108
return _fileId1;
@@ -100,6 +113,7 @@ public void setFileId1(Integer fileId1)
100113
_fileId1 = fileId1;
101114
}
102115

116+
@Override
103117
public Integer getFileId2()
104118
{
105119
return _fileId2;
@@ -110,11 +124,13 @@ public void setFileId2(Integer fileId2)
110124
_fileId2 = fileId2;
111125
}
112126

127+
@Override
113128
public String getDescription()
114129
{
115130
return _description;
116131
}
117132

133+
@Override
118134
public Integer getRunId()
119135
{
120136
return _runId;
@@ -130,6 +146,7 @@ public void setDescription(String description)
130146
_description = description;
131147
}
132148

149+
@Override
133150
public String getContainer()
134151
{
135152
return _container;
@@ -140,6 +157,7 @@ public void setContainer(String container)
140157
_container = container;
141158
}
142159

160+
@Override
143161
public Date getCreated()
144162
{
145163
return _created;
@@ -150,6 +168,7 @@ public void setCreated(Date created)
150168
_created = created;
151169
}
152170

171+
@Override
153172
public Integer getCreatedBy()
154173
{
155174
return _createdBy;
@@ -160,6 +179,7 @@ public void setCreatedBy(Integer createdBy)
160179
_createdBy = createdBy;
161180
}
162181

182+
@Override
163183
public Date getModified()
164184
{
165185
return _modified;
@@ -170,6 +190,7 @@ public void setModified(Date modified)
170190
_modified = modified;
171191
}
172192

193+
@Override
173194
public Integer getModifiedBy()
174195
{
175196
return _modifiedBy;
@@ -180,12 +201,14 @@ public void setModifiedBy(Integer modifiedBy)
180201
_modifiedBy = modifiedBy;
181202
}
182203

204+
@Override
183205
@Transient
184206
public File getFile1()
185207
{
186208
return getFile(1, _fileId1);
187209
}
188210

211+
@Override
189212
@Transient
190213
public File getFile2()
191214
{
@@ -197,6 +220,33 @@ public void setFile(File f, int fileIdx)
197220
_cachedFiles.put(fileIdx, f);
198221
}
199222

223+
@Override
224+
@Transient
225+
public Integer getTotalReads()
226+
{
227+
if (getFileId1() == null)
228+
{
229+
return null;
230+
}
231+
232+
if (PipelineJobService.get().getLocationType() != PipelineJobService.LocationType.WebServer)
233+
{
234+
throw new IllegalStateException("Cannot call getTotalReads() on the remote server unless this value has been cached");
235+
}
236+
237+
SimpleFilter filter = new SimpleFilter(FieldKey.fromString("dataid"), getFileId1());
238+
filter.addCondition(FieldKey.fromString("readset"), getReadset(), CompareType.EQUAL);
239+
filter.addCondition(FieldKey.fromString("metricname"), "Total Reads", CompareType.EQUAL);
240+
TableSelector ts = new TableSelector(SequenceAnalysisSchema.getTable(SequenceAnalysisSchema.TABLE_QUALITY_METRICS), PageFlowUtil.set("metricvalue"), filter, new Sort("-rowid"));
241+
List<Double> values = ts.getArrayList(Double.class);
242+
if (!values.isEmpty())
243+
{
244+
return values.get(0).intValue();
245+
}
246+
247+
return 0;
248+
}
249+
200250
@Transient
201251
private File getFile(int fileIdx, Integer fileId)
202252
{

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,14 @@ private static void deleteReferenceLibrary(User user, Container c, Integer rowId
643643
if (libraryDir.exists())
644644
{
645645
_log.info("deleting reference library dir: " + libraryDir.getPath());
646-
FileUtils.deleteDirectory(libraryDir);
646+
try
647+
{
648+
FileUtils.deleteDirectory(libraryDir);
649+
}
650+
catch (IOException e)
651+
{
652+
_log.error("Unable to delete folder: " + libraryDir.getPath(), e);
653+
}
647654
}
648655
}
649656

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,25 @@ private Long getTotalReadsForFile(int fileId, int readsetId)
547547

548548
public static long addQualityMetricsForReadset(Readset rs, int fileId, PipelineJob job) throws PipelineJobException
549549
{
550+
return addQualityMetricsForReadset(rs, fileId, job, false);
551+
}
552+
553+
public static long addQualityMetricsForReadset(Readset rs, int fileId, PipelineJob job, boolean deleteExisting) throws PipelineJobException
554+
{
555+
if (deleteExisting)
556+
{
557+
//update metrics. first delete existing:
558+
SimpleFilter metricsFilter = new SimpleFilter(FieldKey.fromString("readset"), rs.getRowId());
559+
metricsFilter.addCondition(FieldKey.fromString("container"), rs.getContainer());
560+
metricsFilter.addCondition(FieldKey.fromString("dataId"), fileId);
561+
int deleted = Table.delete(SequenceAnalysisManager.get().getTable(SequenceAnalysisSchema.TABLE_QUALITY_METRICS), metricsFilter);
562+
job.getLogger().debug("existing metrics deleted: " + deleted);
563+
}
564+
else
565+
{
566+
job.getLogger().debug("will not attempt to pre-delete existing metrics");
567+
}
568+
550569
try
551570
{
552571
ExpData d = ExperimentService.get().getExpData(fileId);

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,7 @@ public void cacheReadset(SequenceReadsetImpl m, boolean allowReadsetsWithArchive
115115
}
116116
else
117117
{
118-
if (_cachedReadsets.contains(m))
119-
{
120-
_cachedReadsets.remove(m);
121-
}
118+
_cachedReadsets.remove(m);
122119
}
123120

124121
_cachedReadsets.add(m);

0 commit comments

Comments
 (0)