Skip to content

Commit 087eda9

Browse files
committed
Add support for standalone nimble run, and allow SRA to merge multiple input ReadData into one ReadData per accession
1 parent 66dfdc4 commit 087eda9

File tree

9 files changed

+841
-534
lines changed

9 files changed

+841
-534
lines changed

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

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,15 @@ public class ReadDataImpl implements ReadData
3939
private Integer _runId;
4040
private boolean _archived = false;
4141
private String sra_accession;
42-
private Integer _totalReads;
4342

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

4645
public ReadDataImpl()
4746
{
4847

4948
}
5049

50+
@Override
5151
public Integer getRowid()
5252
{
5353
return _rowid;
@@ -58,6 +58,7 @@ public void setRowid(Integer rowid)
5858
_rowid = rowid;
5959
}
6060

61+
@Override
6162
public Integer getReadset()
6263
{
6364
return _readset;
@@ -68,6 +69,7 @@ public void setReadset(Integer readset)
6869
_readset = readset;
6970
}
7071

72+
@Override
7173
public String getPlatformUnit()
7274
{
7375
return _platformUnit;
@@ -78,6 +80,7 @@ public void setPlatformUnit(String platformUnit)
7880
_platformUnit = platformUnit;
7981
}
8082

83+
@Override
8184
public String getCenterName()
8285
{
8386
return _centerName;
@@ -88,6 +91,7 @@ public void setCenterName(String centerName)
8891
_centerName = centerName;
8992
}
9093

94+
@Override
9195
public Date getDate()
9296
{
9397
return _date;
@@ -98,6 +102,7 @@ public void setDate(Date date)
98102
_date = date;
99103
}
100104

105+
@Override
101106
public Integer getFileId1()
102107
{
103108
return _fileId1;
@@ -108,6 +113,7 @@ public void setFileId1(Integer fileId1)
108113
_fileId1 = fileId1;
109114
}
110115

116+
@Override
111117
public Integer getFileId2()
112118
{
113119
return _fileId2;
@@ -118,11 +124,13 @@ public void setFileId2(Integer fileId2)
118124
_fileId2 = fileId2;
119125
}
120126

127+
@Override
121128
public String getDescription()
122129
{
123130
return _description;
124131
}
125132

133+
@Override
126134
public Integer getRunId()
127135
{
128136
return _runId;
@@ -138,6 +146,7 @@ public void setDescription(String description)
138146
_description = description;
139147
}
140148

149+
@Override
141150
public String getContainer()
142151
{
143152
return _container;
@@ -148,6 +157,7 @@ public void setContainer(String container)
148157
_container = container;
149158
}
150159

160+
@Override
151161
public Date getCreated()
152162
{
153163
return _created;
@@ -158,6 +168,7 @@ public void setCreated(Date created)
158168
_created = created;
159169
}
160170

171+
@Override
161172
public Integer getCreatedBy()
162173
{
163174
return _createdBy;
@@ -168,6 +179,7 @@ public void setCreatedBy(Integer createdBy)
168179
_createdBy = createdBy;
169180
}
170181

182+
@Override
171183
public Date getModified()
172184
{
173185
return _modified;
@@ -178,6 +190,7 @@ public void setModified(Date modified)
178190
_modified = modified;
179191
}
180192

193+
@Override
181194
public Integer getModifiedBy()
182195
{
183196
return _modifiedBy;
@@ -188,12 +201,14 @@ public void setModifiedBy(Integer modifiedBy)
188201
_modifiedBy = modifiedBy;
189202
}
190203

204+
@Override
191205
@Transient
192206
public File getFile1()
193207
{
194208
return getFile(1, _fileId1);
195209
}
196210

211+
@Override
197212
@Transient
198213
public File getFile2()
199214
{
@@ -206,41 +221,30 @@ public void setFile(File f, int fileIdx)
206221
}
207222

208223
@Override
224+
@Transient
209225
public Integer getTotalReads()
210226
{
211227
if (getFileId1() == null)
212228
{
213229
return null;
214230
}
215231

216-
if (_totalReads == null)
232+
if (PipelineJobService.get().getLocationType() != PipelineJobService.LocationType.WebServer)
217233
{
218-
if (PipelineJobService.get().getLocationType() != PipelineJobService.LocationType.WebServer)
219-
{
220-
throw new IllegalStateException("Cannot call getTotalReads() on the remote server unless this value has been cached");
221-
}
222-
223-
SimpleFilter filter = new SimpleFilter(FieldKey.fromString("dataid"), getFileId1());
224-
filter.addCondition(FieldKey.fromString("readset"), getReadset(), CompareType.EQUAL);
225-
filter.addCondition(FieldKey.fromString("metricvalue"), "Total Reads", CompareType.EQUAL);
226-
TableSelector ts = new TableSelector(SequenceAnalysisSchema.getTable(SequenceAnalysisSchema.TABLE_QUALITY_METRICS), PageFlowUtil.set("metricvalue"), filter, new Sort("-rowid"));
227-
List<Double> values = ts.getArrayList(Double.class);
228-
if (!values.isEmpty())
229-
{
230-
_totalReads = values.get(0).intValue();
231-
}
232-
else
233-
{
234-
_totalReads = 0;
235-
}
234+
throw new IllegalStateException("Cannot call getTotalReads() on the remote server unless this value has been cached");
236235
}
237236

238-
return _totalReads;
239-
}
237+
SimpleFilter filter = new SimpleFilter(FieldKey.fromString("dataid"), getFileId1());
238+
filter.addCondition(FieldKey.fromString("readset"), getReadset(), CompareType.EQUAL);
239+
filter.addCondition(FieldKey.fromString("metricvalue"), "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+
}
240246

241-
public void setTotalReads(Integer totalReads)
242-
{
243-
_totalReads = totalReads;
247+
return 0;
244248
}
245249

246250
@Transient
@@ -288,8 +292,6 @@ public void cacheForRemoteServer()
288292
getFile1();
289293
getFile2();
290294
}
291-
292-
getTotalReads();
293295
}
294296

295297
@Transient

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);

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

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -679,25 +679,8 @@ else if (lane.isEmpty())
679679
actions.add(fqAction);
680680
}
681681

682-
//calculate/cache metrics to save time on server
683682
getJob().setStatus(PipelineJob.TaskStatus.running, "CALCULATING QUALITY METRICS (" + idx + " of " + finalOutputs.size() + ")");
684-
File cachedMetrics = new File(f.getPath() + ".metrics");
685-
if (cachedMetrics.exists())
686-
{
687-
getJob().getLogger().debug("reusing cached metrics file");
688-
}
689-
else
690-
{
691-
Map<String, Object> metricsMap = FastqUtils.getQualityMetrics(f, getJob().getLogger());
692-
getJob().getLogger().debug("saving quality metrics to file: " + cachedMetrics.getPath());
693-
try (CSVWriter writer = new CSVWriter(PrintWriters.getPrintWriter(cachedMetrics), '\t', CSVWriter.NO_QUOTE_CHARACTER))
694-
{
695-
for (String key : metricsMap.keySet())
696-
{
697-
writer.writeNext(new String[]{key, String.valueOf(metricsMap.get(key))});
698-
}
699-
}
700-
}
683+
generateAndWriteMetrics(getJob(), f);
701684
}
702685

703686
if (baseDirectory.list().length == 0)
@@ -725,6 +708,32 @@ else if (lane.isEmpty())
725708
return new RecordedActionSet(actions);
726709
}
727710

711+
public static void generateAndWriteMetrics(PipelineJob job, File f) throws PipelineJobException
712+
{
713+
//calculate/cache metrics to save time on server
714+
File cachedMetrics = new File(f.getPath() + ".metrics");
715+
if (cachedMetrics.exists())
716+
{
717+
job.getLogger().debug("reusing cached metrics file");
718+
}
719+
else
720+
{
721+
Map<String, Object> metricsMap = FastqUtils.getQualityMetrics(f, job.getLogger());
722+
job.getLogger().debug("saving quality metrics to file: " + cachedMetrics.getPath());
723+
try (CSVWriter writer = new CSVWriter(PrintWriters.getPrintWriter(cachedMetrics), '\t', CSVWriter.NO_QUOTE_CHARACTER))
724+
{
725+
for (String key : metricsMap.keySet())
726+
{
727+
writer.writeNext(new String[]{key, String.valueOf(metricsMap.get(key))});
728+
}
729+
}
730+
catch (IOException e)
731+
{
732+
throw new PipelineJobException(e);
733+
}
734+
}
735+
}
736+
728737
private Barcoder getBarcoder() throws PipelineJobException
729738
{
730739
Barcoder barcoder = new Barcoder(getJob().getLogger());

0 commit comments

Comments
 (0)