/*
* Eoulsan development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public License version 2.1 or
* later and CeCILL-C. This should be distributed with the code.
* If you do not have a copy, see:
*
* http://www.gnu.org/licenses/lgpl-2.1.txt
* http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.txt
*
* Copyright for this code is held jointly by the Genomic platform
* of the Institut de Biologie de l'École normale supérieure and
* the individual authors. These should be listed in @author doc
* comments.
*
* For more information on the Eoulsan project and its aims,
* or to join the Eoulsan Google group, visit the home page
* at:
*
* http://outils.genomique.biologie.ens.fr/eoulsan
*
*/
package fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import htsjdk.samtools.SAMLineParser;
import htsjdk.samtools.SAMRecord;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import fr.ens.biologie.genomique.eoulsan.EoulsanException;
import fr.ens.biologie.genomique.eoulsan.bio.GenomeDescription;
import fr.ens.biologie.genomique.eoulsan.bio.SAMUtils;
import fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters.QualityReadAlignmentsFilter;
/**
* This class is a JUnit test class to test the class
* QualityReadAlignmentsFilter.java.
* @author Claire Wallon
*/
public class QualityReadAlignmentsFilterTest {
private String recordSE1, recordSE2;
private String recordPE1, recordPE2, recordPE3, recordPE4;
private String recordPE5, recordPE6, recordPE7, recordPE8;
private SAMRecord samRecordSE1, samRecordSE2;
private SAMRecord samRecordPE1, samRecordPE2, samRecordPE3, samRecordPE4;
private SAMRecord samRecordPE5, samRecordPE6, samRecordPE7, samRecordPE8;
private List<SAMRecord> records;
private QualityReadAlignmentsFilter filter;
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
// recordSE1 quality score: 0
this.recordSE1 =
"HWI-EAS285_0001_'':1:1:1259:6203#0/1\t4\t*\t0\t0\t*\t*\t0\t0\t"
+ "CGGCCGGACCGACCCCGTNGGGGTCCGACAANNNNNNNNNNNNNNCACANGNACGNNGCANANCCAACCCGAGCGT"
+ "\tGGGFGBGGGEGGGGGDD?#A=>B3BA=BD###############################################\tXM:i:0";
// recordSE2 quality score: 55
this.recordSE2 = "HWI-EAS285_0001_'':1:1:1260:13682#0/1\t0\tchr16\t"
+ "23360177\t55\t76M\t*\t0\t0\t"
+ "ATTTGCGACAGGTAGTTTNAAATCTGTGACTNNNNNNNNNNNNNNAGTGNCNTTCNNCGTNGNCACTGACGTCACT"
+ "\tGGGGFGGGGFCECEEBCB#ACCCCCGGFGGA##############AA=A#A#A?A##A=?#9#8?CCB>CGEGGGA\tXA:i:1\tMD:Z:18A12G0A0G0T0G0C0T0A0T0A0G0G0A0A4T1T3T0A3G1G13\tNM:i:21";
// recordPE1 and recordPE2 paired
// recordPE1 quality score: 0
this.recordPE1 =
"HWI-1KL110:37:C0BE6ACXX:7:1101:1379:2189 1:Y:0:GCCAAT\t77\t*\t0\t0\t*\t*\t0\t0"
+ "\tGTTTNNNNNNNTNNNNNNTCAAACACNNNNNNNNTATAAATTTCAAAAAATGTTGCATATACTTGAAGTTCTAGNTTNNNNNNNNNNNNNTNCTTCAGCAT"
+ "\t<<<@#######4######32@@@?@@########00<=????????????????????@@@@@??????????############################\tXM:i:0";
// recordPE2 quality score: 0
this.recordPE2 =
"HWI-1KL110:37:C0BE6ACXX:7:1101:1379:2189 2:Y:0:GCCAAT\t141\t*\t0\t0\t*\t*\t0\t0"
+ "\tNNGGAAAGANNNNNGANNGNNNNNNNNNNATTTATGCANNAGNNGCTCGCGATGTNTNTTTNNNNNNNAAGAAGCCAAACTATAAGAAACTAGAACTTCAA"
+ "\t##1=DDFFH#####33##3##########12BGHIJJJ##07##.7BGEGEEFFD#,#,;?#######,,8?BDDDDDDDDDDDDDDDDDDDDDDDDDDDD\tXM:i:0";
// recordPE3 and recordPE4 paired
// recordPE3 quality score: 12
this.recordPE3 =
"HWI-1KL110:37:C0BE6ACXX:7:1101:1668:2230\t99\tchr12\t76732159\t12\t101M\t=\t76732246\t188"
+ "\tCTTTCCATTCAGCTCACTGATGACCTTGTTGAGCCGATCATCGACCGCTTCGATGCCCACGCTGTCTAGTATTTTCTTGATGTCTTTGGCGCTAGGAGAGG"
+ "\tCCCFFFFFHHHHHJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ@GIIIJJJJJJJHHHHHFFDDDDDEDDDFFFEDDDDDDDEDEDDDDDDDDDDDDDBDD\tXA:i:0\tMD:Z:43T20C36\tNM:i:2";
// recordPE4 quality score: 60
this.recordPE4 =
"HWI-1KL110:37:C0BE6ACXX:7:1101:1668:2230\t147\tchr12\t76732246\t60\t101M\t=\t76732159\t-188"
+ "\tGGCGCTAGGAGAGGAGTTGCCCCCGAGGGCGGCCAGCAGGTAAGAGGCGACGTAGCGCATGTCGGCTGCGGGGGACAGACCTCACGCGTGCGACCTCGGCG"
+ "\tBDBDDDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBDDDDBDDDDDDDFFFHHJJJJJJJJJHFJJIHGJJJJHHHHHFFFFFCCC\tXA:i:1\tMD:Z:100A0\tNM:i:1";
// recordPE5 and recordPE6 paired
// recordPE5 quality score: 74
this.recordPE5 =
"HWI-1KL110:37:C0BE6ACXX:7:1101:1617:2229\t99\tchr4\t129192614\t74\t101M\t=\t129192649\t136"
+ "\tCTTTTTGCCCTCCTGTGGATTCTCCCATCAGCCATTTGGTCTTACTCTTAAGGCCAGTTGAAGATGGTCCCTTACGGTTTCCCAAGTTAGGTTAGTGATGT"
+ "\tCCCFFFFFHHHHHJJHJIJJJIJJJJJJJJJIJJJJJJIIHIJJJJIJJJJJJJJJJIJJJJJIJJJHIJJJJHHEHDFFFEEEEDDDEDDCCDDCDEEDC\tXA:i:1\tMD:Z:5C95\tNM:i:1";
// recordPE6 quality score: 43
this.recordPE6 =
"HWI-1KL110:37:C0BE6ACXX:7:1101:1617:2229\t147\tchr4\t129192649\t43\t101M\t=\t129192614\t-136"
+ "\tTTGGTCTTACTCTTAAGGCCAGTTGAAGATGGTCCCTTACGGTTTCCCAAGTTAGGTTAGTGATGTGAGATGCCCTGTCCCTACCTCCTTCCCGAGCCCCG"
+ "\tDDDDDCDCADDDDDDDDDDDDDDEEDDDDDDDDDDDDDBDEEFFFFHHHHEHIEJJJIGJIIGGIIJIJJIIJJJJIHJHGD?JIHJJHFHHGFFFFFCCC\tXA:i:2\tMD:Z:87T12A0\tNM:i:2";
// recordPE7 and recordPE8 paired
// recordPE7 quality score: 89
this.recordPE7 =
"HWI-1KL110:37:C0BE6ACXX:7:1101:1802:2241\t99\tchr15\t74592687\t89\t101M\t=\t74592729\t143"
+ "\tCCAGCCTTAGCGCCTGGTGCCTCCATCATGGCTAAAGCATGGGCCGTGGGGACACTGACGACTAGAAGGGAAGGGGCAAGGGAAATTCCAAGCAGTACATT"
+ "\tCCCFFFFFHHHHHJJJJFHHJJJJJJJJJJJJJJJJHIJJJJIJJJFHJJJHHHFFFFFDDDDDDDDDDDDDDDB>BDDDDDDDDDDDDEDDDDDCCCDED\tXA:i:0\tMD:Z:101\tNM:i:0";
// recordPE8 quality score: 212
this.recordPE8 =
"HWI-1KL110:37:C0BE6ACXX:7:1101:1802:2241\t147\tchr15\t74592729\t212\t101M\t=\t74592687\t-143"
+ "\tGCCGTGGGGACACTGACGACTAGAAGGGAAGGGGCAAGGGAAATTCCAAGCAGTACATTACAGGCAGAGAGCCATAACAGTGAGCAGGCTGAGGCTCGTTG"
+ "\tDDDDDDDDEDDDDDDDDEEEEFFFFFHHHHHJJJJJJJJJJJJJJJJJJHHJIIFIGIIHIJJJJJIHIJJJJJJJIJJJJJJJJJJJHHHHHFFFFFCCC\tXA:i:0\tMD:Z:101\tNM:i:0";
final GenomeDescription desc = new GenomeDescription();
desc.addSequence("chr4", 155630120);
desc.addSequence("chr12", 121257530);
desc.addSequence("chr15", 103494974);
desc.addSequence("chr16", 98319150);
SAMLineParser parser = new SAMLineParser(SAMUtils.newSAMFileHeader(desc));
this.samRecordSE1 = parser.parseLine(this.recordSE1);
this.samRecordSE2 = parser.parseLine(this.recordSE2);
this.samRecordPE1 = parser.parseLine(this.recordPE1);
this.samRecordPE2 = parser.parseLine(this.recordPE2);
this.samRecordPE3 = parser.parseLine(this.recordPE3);
this.samRecordPE4 = parser.parseLine(this.recordPE4);
this.samRecordPE5 = parser.parseLine(this.recordPE5);
this.samRecordPE6 = parser.parseLine(this.recordPE6);
this.samRecordPE7 = parser.parseLine(this.recordPE7);
this.samRecordPE8 = parser.parseLine(this.recordPE8);
this.records = new ArrayList<>();
this.filter = new QualityReadAlignmentsFilter();
this.filter.setParameter("threshold", "50");
}
/**
* Test method for {fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters.
* QualityReadAlignmentsFilter#setParameter(java.lang.String,
* java.lang.String)}.
*/
@Test
public void testSetParameter() {
try {
this.filter.setParameter("threshold", "100");
assertTrue(true);
} catch (EoulsanException e) {
assertTrue(false);
}
try {
this.filter.setParameter("threshold", "-2");
assertTrue(false);
} catch (EoulsanException e) {
assertTrue(true);
}
try {
this.filter.setParameter("ko", "2");
assertTrue(false);
} catch (EoulsanException e) {
assertTrue(true);
}
}
/**
* Test method for {fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters.
* QualityReadAlignmentsFilter#init()}.
*/
@Test
public void testInit() {
try {
this.filter.init();
assertTrue(true);
} catch (Exception e) {
assertTrue(false);
}
}
/**
* Test method for {fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters.
* QualityReadAlignmentsFilter#getName()}.
*/
@Test
public void testGetName() {
assertEquals("quality", this.filter.getName());
assertFalse("ko".equals(this.filter.getName()));
}
/**
* Test method for {fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters.
* QualityReadAlignmentsFilter#getDescription()}.
*/
@Test
public void testGetDescription() {
assertEquals(
"With this filter, the alignments are filtered by their quality score.",
this.filter.getDescription());
assertFalse("ko".equals(this.filter.getName()));
}
/**
* Test method for {fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters.
* QualityReadAlignmentsFilter#filterReadAlignments(java.util.List, boolean)}.
*/
@Test
public void testFilterReadAlignments() {
// single-end mode
this.records.add(this.samRecordSE1);
assertEquals(1, this.records.size());
this.filter.filterReadAlignments(this.records);
assertEquals(0, this.records.size());
this.records.add(this.samRecordSE2);
assertEquals(1, this.records.size());
this.filter.filterReadAlignments(this.records);
assertEquals(1, this.records.size());
this.records.add(this.samRecordSE1);
this.records.add(this.samRecordSE2);
assertEquals(3, this.records.size());
this.filter.filterReadAlignments(this.records);
assertEquals(2, this.records.size());
this.records.clear();
// paired-end mode
this.records.add(this.samRecordPE1);
this.records.add(this.samRecordPE2);
assertEquals(2, this.records.size());
this.filter.filterReadAlignments(this.records);
assertEquals(0, this.records.size());
this.records.add(this.samRecordPE3);
this.records.add(this.samRecordPE4);
assertEquals(2, this.records.size());
this.filter.filterReadAlignments(this.records);
assertEquals(0, this.records.size());
this.records.add(this.samRecordPE5);
this.records.add(this.samRecordPE6);
assertEquals(2, this.records.size());
this.filter.filterReadAlignments(this.records);
assertEquals(0, this.records.size());
this.records.add(this.samRecordPE7);
this.records.add(this.samRecordPE8);
assertEquals(2, this.records.size());
this.filter.filterReadAlignments(this.records);
assertEquals(2, this.records.size());
}
/**
* Test method for {fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters.
* QualityReadAlignmentsFilter#QualityReadAlignmentsFilter()}.
*/
@Test
public void testQualityReadAlignmentsFilter() {
QualityReadAlignmentsFilter filterTest = new QualityReadAlignmentsFilter();
assertNotNull(filterTest);
}
}