Skip to content

Commit 56d4582

Browse files
committed
adding quality method to fastq variant
1 parent a960941 commit 56d4582

2 files changed

Lines changed: 95 additions & 0 deletions

File tree

biojava3-sequencing/src/main/java/org/biojava3/sequencing/io/fastq/FastqVariant.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,20 @@ public int qualityScore(final char c)
5151
return ((int) c) - 33;
5252
}
5353

54+
@Override
55+
public char quality(final int qualityScore)
56+
{
57+
if (qualityScore < minimumQualityScore())
58+
{
59+
throw new IllegalArgumentException("qualityScore must be greater than or equal to minimumQualityScore()");
60+
}
61+
if (qualityScore > maximumQualityScore())
62+
{
63+
throw new IllegalArgumentException("qualityScore must be less than or equal to maximumQualityScore()");
64+
}
65+
return (char) (qualityScore + 33);
66+
}
67+
5468
@Override
5569
public double errorProbability(final int qualityScore)
5670
{
@@ -79,6 +93,20 @@ public int qualityScore(final char c)
7993
return ((int) c) - 64;
8094
}
8195

96+
@Override
97+
public char quality(final int qualityScore)
98+
{
99+
if (qualityScore < minimumQualityScore())
100+
{
101+
throw new IllegalArgumentException("qualityScore must be greater than or equal to minimumQualityScore()");
102+
}
103+
if (qualityScore > maximumQualityScore())
104+
{
105+
throw new IllegalArgumentException("qualityScore must be less than or equal to maximumQualityScore()");
106+
}
107+
return (char) (qualityScore + 64);
108+
}
109+
82110
@Override
83111
public double errorProbability(final int qualityScore)
84112
{
@@ -108,6 +136,20 @@ public int qualityScore(final char c)
108136
return ((int) c) - 64;
109137
}
110138

139+
@Override
140+
public char quality(final int qualityScore)
141+
{
142+
if (qualityScore < minimumQualityScore())
143+
{
144+
throw new IllegalArgumentException("qualityScore must be greater than or equal to minimumQualityScore()");
145+
}
146+
if (qualityScore > maximumQualityScore())
147+
{
148+
throw new IllegalArgumentException("qualityScore must be less than or equal to maximumQualityScore()");
149+
}
150+
return (char) (qualityScore + 64);
151+
}
152+
111153
@Override
112154
public double errorProbability(final int qualityScore)
113155
{
@@ -210,6 +252,16 @@ public boolean isIllumina()
210252
*/
211253
public abstract int qualityScore(char c);
212254

255+
/**
256+
* Convert the specified quality score to a quality in ASCII format.
257+
*
258+
* @since 3.0.6
259+
* @param qualityScore quality score, must be <code>&gt;= minimumQualityScore()</code>
260+
* and <code>&lt;= maximumQualityScore()</code>
261+
* @return the quality in ASCII format converted from the specified quality score
262+
*/
263+
public abstract char quality(int qualityScore);
264+
213265
/**
214266
* Convert the specified quality in ASCII format to an error probability.
215267
*

biojava3-sequencing/src/test/java/org/biojava3/sequencing/io/fastq/FastqVariantTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,47 @@ public void testParseFastqVariant()
6868
assertEquals(FASTQ_SANGER, parseFastqVariant("FASTQ_SANGER"));
6969
assertEquals(FASTQ_SANGER, parseFastqVariant("fastq-sanger"));
7070
}
71+
72+
public void testQualityLessThanMinimumQualityScore()
73+
{
74+
for (FastqVariant variant : values())
75+
{
76+
try
77+
{
78+
variant.quality(variant.minimumQualityScore() - 1);
79+
fail("expected IllegalArgumentException");
80+
}
81+
catch (IllegalArgumentException e)
82+
{
83+
// expected
84+
}
85+
}
86+
}
87+
88+
public void testQualityMoreThanMaximumQualityScore()
89+
{
90+
for (FastqVariant variant : values())
91+
{
92+
try
93+
{
94+
variant.quality(variant.maximumQualityScore() + 1);
95+
fail("expected IllegalArgumentException");
96+
}
97+
catch (IllegalArgumentException e)
98+
{
99+
// expected
100+
}
101+
}
102+
}
103+
104+
public void testQualityQualityScoreRoundTrip()
105+
{
106+
for (FastqVariant variant : values())
107+
{
108+
for (int i = variant.minimumQualityScore(); i < (variant.maximumQualityScore() + 1); i++)
109+
{
110+
assertEquals(i, variant.qualityScore(variant.quality(i)));
111+
}
112+
}
113+
}
71114
}

0 commit comments

Comments
 (0)