Skip to content

Commit 2e95098

Browse files
author
Sebastian Benjamin
committed
Merge branch 'discvr-23.7' into 23.3_fb_ux_tweaks
2 parents c3ecf61 + c1c68ec commit 2e95098

File tree

18 files changed

+104
-61
lines changed

18 files changed

+104
-61
lines changed

.github/workflows/branch_release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515

1616
steps:
1717
- name: Checkout
18-
uses: actions/checkout@v2
18+
uses: actions/checkout@v3
1919

2020
- name: Create branches and PRs
2121
uses: LabKey/gitHubActions/branch-release@develop

.github/workflows/merge_release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717

1818
steps:
1919
- name: Checkout
20-
uses: actions/checkout@v2
20+
uses: actions/checkout@v3
2121

2222
- name: Merge PR
2323
uses: LabKey/gitHubActions/merge-release@develop

OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapConnectionWrapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ private LdapConnection getConnection() throws LdapException
9595
{
9696
try
9797
{
98-
LdapConnection connection = _pool.makeObject();
98+
LdapConnection connection = _pool.makeObject().getObject();
9999
connection.bind();
100100

101101
if (!connection.isConnected())

OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapSyncRunner.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.labkey.openldapsync.ldap;
22

3-
import org.apache.commons.lang.StringUtils;
3+
import org.apache.commons.lang3.StringUtils;
44
import org.apache.directory.api.ldap.model.exception.LdapException;
55
import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
66
import org.apache.directory.api.ldap.model.name.Dn;
@@ -347,7 +347,7 @@ private String getNameForGroup(LdapEntry group) throws LdapException
347347
//concatenate to the group name if the field is not empty
348348
if (StringUtils.trimToNull(_settings.getGroupNameSuffix()) != null)
349349
{
350-
//Note: do not trim the suffix, as this allows the admin to provide leading whitespace. for example: the suffix " (LDAP)" would result in "MyGroup (LDAP)"
350+
// Note: do not trim the suffix, as this allows the admin to provide leading whitespace. for example: the suffix " (LDAP)" would result in "MyGroup (LDAP)"
351351
groupName = groupName.concat(_settings.getGroupNameSuffix());
352352
}
353353

SequenceAnalysis/build.gradle

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ repositories {
2323
configurations.all {
2424
resolutionStrategy {
2525
force "com.sun.activation:jakarta.activation:${activationVersion}"
26-
force "javax.xml.bind:jaxb-api:2.3.0" // CONSIDER: Exclude jaxb-api? It's essentially the same jar as jakarta.xml.bind-api (below)
2726
// NOTE: this should be kept in sync with mcc module:
2827
force "jakarta.xml.bind:jakarta.xml.bind-api:${jaxbVersion}"
2928
}
@@ -61,8 +60,8 @@ dependencies {
6160
),
6261
{
6362
// Exclude activation jars from webapp to avoid classloader conflicts with <tomcat>/lib/javax.activation.jar
64-
exclude group: 'jakarta.activation', module: 'jakarta.activation-api'
6563
exclude group: 'com.sun.activation', module: 'jakarta.activation'
64+
exclude group: 'javax.activation', module: 'javax.activation-api'
6665
}
6766
)
6867

@@ -79,8 +78,8 @@ dependencies {
7978
),
8079
{
8180
// Exclude activation jars from webapp to avoid classloader conflicts with <tomcat>/lib/javax.activation.jar
82-
exclude group: 'jakarta.activation', module: 'jakarta.activation-api'
8381
exclude group: 'com.sun.activation', module: 'jakarta.activation'
82+
exclude group: 'javax.activation', module: 'javax.activation-api'
8483
}
8584
)
8685

@@ -116,7 +115,7 @@ dependencies {
116115
BuildUtils.addExternalDependency(
117116
project,
118117
new ExternalDependency(
119-
"com.github.broadinstitute:picard:2.27.4",
118+
"com.github.broadinstitute:picard:3.0.0",
120119
"Picard Tools Lib",
121120
"PicardTools",
122121
"https://github.com/broadinstitute/picard",
@@ -189,19 +188,18 @@ if (project.findProject(BuildUtils.getTestProjectPath(project.gradle)) != null &
189188
}
190189
}
191190

192-
project.task("copyJars",
193-
type: Copy,
194-
group: "Build",
195-
description: "Copy commons-math3 JAR to module's lib directory",
191+
project.tasks.register("copyJars", Copy)
196192
{ CopySpec copy ->
193+
copy.group = "Build"
194+
copy.description = "Copy commons-math3 JAR to module's lib directory"
195+
197196
copy.setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE)
198197
copy.from(project.configurations.external)
199198
copy.into new File("${project.labkey.explodedModuleLibDir}")
200199
copy.include {
201200
"**commons-math3-**.jar"
202201
}
203202
}
204-
)
205203

206-
project.tasks.module.dependsOn(project.tasks.copyJars)
207-
project.tasks.copyJars.mustRunAfter(project.tasks.populateExplodedLib)
204+
project.tasks.named('module').configure { dependsOn(project.tasks.copyJars) }
205+
project.tasks.named('copyJars').configure { mustRunAfter(project.tasks.populateExplodedLib) }

SequenceAnalysis/pipeline_code/sequence_tools_install.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -865,12 +865,13 @@ then
865865
install ./cutadapt-1.8.1/bin/_preamble.py ${LKTOOLS_DIR}/_preamble.py
866866
cp -R ./cutadapt-1.8.1/cutadapt ${LKTOOLS_DIR}/cutadapt
867867
else
868-
$PIP_EXE install --user cutadapt
868+
$PIP_EXE install --user cutadapt==4.2
869869
$PIP_EXE show cutadapt
870870
$PIP_EXE install --user pyinstaller
871871
$PIP_EXE show pyinstaller
872872
~/.local/bin/pyinstaller --onefile --clean ~/.local/bin/cutadapt
873873
cp ./dist/cutadapt ${LKTOOLS_DIR}/cutadapt
874+
${LKTOOLS_DIR}/cutadapt -h
874875
fi
875876
else
876877
echo "Already installed"

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1952,23 +1952,23 @@ public enum TYPE
19521952

19531953
public String getJobName()
19541954
{
1955-
return getNewJsonObject().optString("jobName");
1955+
return getJsonObject().optString("jobName");
19561956
}
19571957

19581958
public String getDescription()
19591959
{
1960-
return getNewJsonObject().optString("description");
1960+
return getJsonObject().optString("description");
19611961
}
19621962

19631963
public TYPE getType()
19641964
{
1965-
return !getNewJsonObject().has("type") ? null : TYPE.valueOf(getNewJsonObject().getString("type"));
1965+
return !getJsonObject().has("type") ? null : TYPE.valueOf(getJsonObject().getString("type"));
19661966
}
19671967

19681968
public JSONObject getJobParameters()
19691969
{
1970-
// Return clone so we dont mutate it:
1971-
return new JSONObject(getNewJsonObject().optJSONObject("jobParameters").toMap());
1970+
// Return clone so we don't mutate it:
1971+
return new JSONObject(getJsonObject().optJSONObject("jobParameters").toMap());
19721972
}
19731973

19741974
public JSONArray getReadsetIds()

SequenceAnalysis/src/org/labkey/sequenceanalysis/query/SequenceAnalysisCustomizer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ private void addFileSetCol(AbstractTableInfo ti)
8585
String name = "fileSets";
8686
if (ti.getColumn(name) == null)
8787
{
88-
SQLFragment sql = new SQLFragment("(SELECT ").append(ti.getSqlDialect().getGroupConcat(new SQLFragment("s.name"), true, true, "','")).append(" FROM sequenceanalysis.analysisSetMembers m JOIN sequenceanalysis.analysisSets s ON (s.rowid = m.analysisSet) WHERE m.outputFileId = " + ExprColumn.STR_TABLE_ALIAS + ".rowId)");
88+
SQLFragment sql = new SQLFragment("(SELECT ").append(ti.getSqlDialect().getGroupConcat(new SQLFragment("s.name"), true, true, ",")).append(" FROM sequenceanalysis.analysisSetMembers m JOIN sequenceanalysis.analysisSets s ON (s.rowid = m.analysisSet) WHERE m.outputFileId = " + ExprColumn.STR_TABLE_ALIAS + ".rowId)");
8989
ExprColumn newCol = new ExprColumn(ti, name, sql, JdbcType.VARCHAR, ti.getColumn("rowId"));
9090
newCol.setLabel("File Sets");
9191
newCol.setDisplayColumnFactory(new FileSetDisplayColumnFactory());

SequenceAnalysis/src/org/labkey/sequenceanalysis/query/SequenceAnalysisUserSchema.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ private TableInfo createAnalysesTable(TableInfo sourceTable, ContainerFilter cf)
134134
{
135135
String chr = sourceTable.getSqlDialect().isPostgreSQL() ? "chr" : "char";
136136
SQLFragment sql = new SQLFragment("(SELECT ").
137-
append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("rd.category"), true, true, chr + "(10)")).
137+
append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("rd.category"), true, true, new SQLFragment(chr + "(10)"))).
138138
append(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_OUTPUTFILES + " rd WHERE rd.analysis_id = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)");
139139
ExprColumn newCol = new ExprColumn(ret, "outputFileTypes", sql, JdbcType.VARCHAR, sourceTable.getColumn("rowid"));
140140
newCol.setLabel("Output File Types");
@@ -189,7 +189,7 @@ private TableInfo createOutputFiles(TableInfo sourceTable, ContainerFilter cf)
189189
if (ret.getColumn("analysisSets") == null)
190190
{
191191
String chr = sourceTable.getSqlDialect().isPostgreSQL() ? "chr" : "char";
192-
SQLFragment sql = new SQLFragment("(SELECT ").append(ret.getSqlDialect().getGroupConcat(new SQLFragment("a.name"), true, true, chr + "(10)")).append(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_ANALYSIS_SET_MEMBERS + " asm JOIN " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_ANALYSIS_SETS + " a ON (asm.analysisSet = a.rowid) WHERE asm.dataid = " + ExprColumn.STR_TABLE_ALIAS + ".dataid)");
192+
SQLFragment sql = new SQLFragment("(SELECT ").append(ret.getSqlDialect().getGroupConcat(new SQLFragment("a.name"), true, true, new SQLFragment(chr + "(10)"))).append(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_ANALYSIS_SET_MEMBERS + " asm JOIN " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_ANALYSIS_SETS + " a ON (asm.analysisSet = a.rowid) WHERE asm.dataid = " + ExprColumn.STR_TABLE_ALIAS + ".dataid)");
193193
ExprColumn newCol = new ExprColumn(ret, "analysisSets", sql, JdbcType.VARCHAR, sourceTable.getColumn("rowid"));
194194
newCol.setURL(DetailsURL.fromString("/query/executeQuery.view?schemaName=sequenceanalysis&query.queryName=analysisSetMembers&query.dataid~eq=${dataid}", ret.getContainer().isWorkbook() ? ret.getContainer().getParent() : ret.getContainer()));
195195
newCol.setLabel("Analyses Using This File");
@@ -283,14 +283,14 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
283283
newCol.setLabel("Total Files");
284284
ret.addColumn(newCol);
285285

286-
SQLFragment sql2 = new SQLFragment("(SELECT ").append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("d.Name"), true, true, "','")).append(new SQLFragment(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_READ_DATA + " rd JOIN exp.data d ON (d.RowId = rd.fileId1 OR d.RowId = rd.fileId2) WHERE rd.readset = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)"));
286+
SQLFragment sql2 = new SQLFragment("(SELECT ").append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("d.Name"), true, true, ",")).append(new SQLFragment(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_READ_DATA + " rd JOIN exp.data d ON (d.RowId = rd.fileId1 OR d.RowId = rd.fileId2) WHERE rd.readset = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)"));
287287
ExprColumn newCol2 = new ExprColumn(ret, "fileNames", sql2, JdbcType.VARCHAR, sourceTable.getColumn("rowid"));
288288
newCol2.setURL(DetailsURL.fromString("/query/executeQuery.view?schemaName=sequenceanalysis&query.queryName=readData&query.readset~eq=${rowid}"));
289289
newCol2.setLabel("File Names");
290290
newCol2.setDescription("This will display a comma-separated list of all file names with reads. This can be useful for SRA submissions.");
291291
ret.addColumn(newCol2);
292292

293-
SQLFragment sql3 = new SQLFragment("(SELECT ").append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("rd.sra_accession"), true, true, "','")).append(new SQLFragment(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_READ_DATA + " rd WHERE rd.readset = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)"));
293+
SQLFragment sql3 = new SQLFragment("(SELECT ").append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("rd.sra_accession"), true, true, ",")).append(new SQLFragment(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_READ_DATA + " rd WHERE rd.readset = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)"));
294294
ExprColumn newCol3 = new ExprColumn(ret, "sraRuns", sql3, JdbcType.VARCHAR, sourceTable.getColumn("rowid"));
295295
newCol3.setURL(DetailsURL.fromString("/query/executeQuery.view?schemaName=sequenceanalysis&query.queryName=readData&query.readset~eq=${rowid}"));
296296
newCol3.setLabel("SRA Runs");
@@ -327,7 +327,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
327327
if (ret.getColumn("distinctGenomes") == null)
328328
{
329329
String chr = ret.getSqlDialect().isPostgreSQL() ? "chr" : "char";
330-
SQLFragment sql = new SQLFragment("(SELECT ").append(ret.getSqlDialect().getGroupConcat(new SQLFragment("l.name"), true, true, (chr + "(10)"))).append(new SQLFragment(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_ANALYSES + " a JOIN " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_REF_LIBRARIES + " l ON (a.library_id = l.rowid) WHERE a.readset = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)"));
330+
SQLFragment sql = new SQLFragment("(SELECT ").append(ret.getSqlDialect().getGroupConcat(new SQLFragment("l.name"), true, true, new SQLFragment(chr + "(10)"))).append(new SQLFragment(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_ANALYSES + " a JOIN " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_REF_LIBRARIES + " l ON (a.library_id = l.rowid) WHERE a.readset = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)"));
331331
ExprColumn newCol = new ExprColumn(ret, "distinctGenomes", sql, JdbcType.VARCHAR, sourceTable.getColumn("rowid"));
332332
newCol.setLabel("Genomes With Alignments For Readset");
333333
newCol.setWidth("200");
@@ -351,7 +351,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
351351
{
352352
String chr = sourceTable.getSqlDialect().isPostgreSQL() ? "chr" : "char";
353353
SQLFragment sql = new SQLFragment("(SELECT ").
354-
append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("rd.category"), true, true, chr + "(10)")).
354+
append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("rd.category"), true, true, new SQLFragment(chr + "(10)"))).
355355
append(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_OUTPUTFILES + " rd WHERE rd.readset = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)");
356356
ExprColumn newCol = new ExprColumn(ret, "outputFileTypes", sql, JdbcType.VARCHAR, sourceTable.getColumn("rowid"));
357357
newCol.setLabel("Output File Types");
@@ -390,7 +390,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
390390

391391
if (ret.getColumn("runIds") == null)
392392
{
393-
SQLFragment sql = new SQLFragment("(SELECT ").append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("rd.runId"), true, true, "','")).append(" FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_READ_DATA + " rd WHERE rd.readset = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)");
393+
SQLFragment sql = new SQLFragment("(SELECT ").append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("rd.runId"), true, true, ",")).append(" FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_READ_DATA + " rd WHERE rd.readset = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)");
394394
ExprColumn newCol = new ExprColumn(ret, "runIds", sql, JdbcType.VARCHAR, sourceTable.getColumn("rowid"));
395395
newCol.setLabel("Run(s)");
396396

@@ -400,7 +400,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
400400

401401
if (ret.getColumn("jobIds") == null)
402402
{
403-
SQLFragment sql = new SQLFragment("(SELECT ").append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("runs.jobId"), true, true, "','")).append(" FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_READ_DATA + " rd JOIN exp.experimentrun runs ON (rd.runId = runs.rowId) WHERE rd.readset = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)");
403+
SQLFragment sql = new SQLFragment("(SELECT ").append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("runs.jobId"), true, true, ",")).append(" FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_READ_DATA + " rd JOIN exp.experimentrun runs ON (rd.runId = runs.rowId) WHERE rd.readset = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)");
404404
ExprColumn newCol = new ExprColumn(ret, "jobIds", sql, JdbcType.VARCHAR, sourceTable.getColumn("rowid"));
405405
newCol.setLabel("Job(s)");
406406

@@ -453,7 +453,7 @@ private TableInfo createRefSequencesTable(TableInfo sourceTable)
453453
{
454454
SharedDataTable<?> ret = new SharedDataTable<>(this, sourceTable);
455455
String chr = sourceTable.getSqlDialect().isPostgreSQL() ? "chr" : "char";
456-
SQLFragment sql = new SQLFragment("(SELECT ").append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("r.name"), true, true, chr + "(10)")).append(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_REF_LIBRARY_MEMBERS + " rm JOIN " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_REF_LIBRARIES + " r ON (rm.library_id = r.rowid) WHERE rm.ref_nt_id = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)");
456+
SQLFragment sql = new SQLFragment("(SELECT ").append(sourceTable.getSqlDialect().getGroupConcat(new SQLFragment("r.name"), true, true, new SQLFragment(chr + "(10)"))).append(" as expr FROM " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_REF_LIBRARY_MEMBERS + " rm JOIN " + SequenceAnalysisSchema.SCHEMA_NAME + "." + SequenceAnalysisSchema.TABLE_REF_LIBRARIES + " r ON (rm.library_id = r.rowid) WHERE rm.ref_nt_id = " + ExprColumn.STR_TABLE_ALIAS + ".rowid)");
457457
ExprColumn newCol = new ExprColumn(ret, "genomes", sql, JdbcType.VARCHAR, sourceTable.getColumn("rowid"));
458458
newCol.setLabel("Genome(s) Using Sequence");
459459
newCol.setWidth("200");

SequenceAnalysis/src/org/labkey/sequenceanalysis/run/analysis/AASnpByCodonAggregator.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import htsjdk.samtools.SAMRecord;
1919
import htsjdk.samtools.reference.ReferenceSequence;
2020
import org.apache.logging.log4j.Logger;
21-
import org.apache.logging.log4j.LogManager;
2221
import org.labkey.api.data.Container;
2322
import org.labkey.api.data.DbScope;
2423
import org.labkey.api.data.SimpleFilter;
@@ -31,7 +30,6 @@
3130
import org.labkey.api.sequenceanalysis.model.AnalysisModel;
3231
import org.labkey.api.util.Pair;
3332
import org.labkey.sequenceanalysis.SequenceAnalysisSchema;
34-
import org.labkey.sequenceanalysis.api.picard.CigarPositionIterable;
3533
import org.labkey.sequenceanalysis.run.util.AASnp;
3634
import org.labkey.sequenceanalysis.run.util.NTSnp;
3735

0 commit comments

Comments
 (0)