Wrapped clipping op information
The clipping op extra information being kept by this walker was specific to the walker, not to the read clipper. Created a wrapper ReadClipperWithData class that keeps the extra information and leaves the ReadClipper slim. (this is a quick commit to unbreak the build, performing integration tests and will make further commits if necessary)
This commit is contained in:
parent
8a51732049
commit
6ae3f9e322
|
|
@ -54,7 +54,7 @@ import java.util.regex.Pattern;
|
||||||
* with poor quality scores, that match particular sequences, or that were generated by particular machine cycles.
|
* with poor quality scores, that match particular sequences, or that were generated by particular machine cycles.
|
||||||
*/
|
*/
|
||||||
@Requires({DataSource.READS})
|
@Requires({DataSource.READS})
|
||||||
public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.ClippingData> {
|
public class ClipReadsWalker extends ReadWalker<ClipReadsWalker.ReadClipperWithData, ClipReadsWalker.ClippingData> {
|
||||||
@Output
|
@Output
|
||||||
PrintStream out;
|
PrintStream out;
|
||||||
|
|
||||||
|
|
@ -99,6 +99,22 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
||||||
*/
|
*/
|
||||||
List<Pair<Integer, Integer>> cyclesToClip = null;
|
List<Pair<Integer, Integer>> cyclesToClip = null;
|
||||||
|
|
||||||
|
public class ReadClipperWithData extends ReadClipper {
|
||||||
|
private ClippingData data;
|
||||||
|
|
||||||
|
public ReadClipperWithData(SAMRecord read) {
|
||||||
|
super(read);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClippingData getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(ClippingData data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The initialize function.
|
* The initialize function.
|
||||||
*/
|
*/
|
||||||
|
|
@ -180,12 +196,12 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
||||||
* @param read the read itself, as a SAMRecord
|
* @param read the read itself, as a SAMRecord
|
||||||
* @return the ReadClipper object describing what should be done to clip this read
|
* @return the ReadClipper object describing what should be done to clip this read
|
||||||
*/
|
*/
|
||||||
public ReadClipper map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) {
|
public ReadClipperWithData map(ReferenceContext ref, SAMRecord read, ReadMetaDataTracker metaDataTracker) {
|
||||||
if ( onlyDoRead == null || read.getReadName().equals(onlyDoRead) ) {
|
if ( onlyDoRead == null || read.getReadName().equals(onlyDoRead) ) {
|
||||||
if ( clippingRepresentation == ClippingRepresentation.HARDCLIP_BASES ) {
|
if ( clippingRepresentation == ClippingRepresentation.HARDCLIP_BASES ) {
|
||||||
read = ReadUtils.replaceSoftClipsWithMatches(read);
|
read = ReadUtils.replaceSoftClipsWithMatches(read);
|
||||||
}
|
}
|
||||||
ReadClipper clipper = new ReadClipper(read);
|
ReadClipperWithData clipper = new ReadClipperWithData(read);
|
||||||
|
|
||||||
//
|
//
|
||||||
// run all three clipping modules
|
// run all three clipping modules
|
||||||
|
|
@ -205,7 +221,7 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
||||||
*
|
*
|
||||||
* @param clipper
|
* @param clipper
|
||||||
*/
|
*/
|
||||||
private void clipSequences(ReadClipper clipper) {
|
private void clipSequences(ReadClipperWithData clipper) {
|
||||||
if (sequencesToClip != null) { // don't bother if we don't have any sequences to clip
|
if (sequencesToClip != null) { // don't bother if we don't have any sequences to clip
|
||||||
SAMRecord read = clipper.getRead();
|
SAMRecord read = clipper.getRead();
|
||||||
|
|
||||||
|
|
@ -223,8 +239,12 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
||||||
if (found) {
|
if (found) {
|
||||||
int start = match.start();
|
int start = match.start();
|
||||||
int stop = match.end() - 1;
|
int stop = match.end() - 1;
|
||||||
ClippingOp op = new ClippingOp(ClippingOp.ClippingType.MATCHES_CLIP_SEQ, start, stop, stc.seq);
|
//ClippingOp op = new ClippingOp(ClippingOp.ClippingType.MATCHES_CLIP_SEQ, start, stop, stc.seq);
|
||||||
|
ClippingOp op = new ClippingOp(start, stop);
|
||||||
clipper.addOp(op);
|
clipper.addOp(op);
|
||||||
|
ClippingData data = new ClippingData(sequencesToClip);
|
||||||
|
data.incSeqClippedBases(stc.seq, op.getLength());
|
||||||
|
clipper.setData(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -252,7 +272,7 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
||||||
*
|
*
|
||||||
* @param clipper
|
* @param clipper
|
||||||
*/
|
*/
|
||||||
private void clipCycles(ReadClipper clipper) {
|
private void clipCycles(ReadClipperWithData clipper) {
|
||||||
if (cyclesToClip != null) {
|
if (cyclesToClip != null) {
|
||||||
SAMRecord read = clipper.getRead();
|
SAMRecord read = clipper.getRead();
|
||||||
|
|
||||||
|
|
@ -270,8 +290,12 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
||||||
int start = startStop.first;
|
int start = startStop.first;
|
||||||
int stop = startStop.second;
|
int stop = startStop.second;
|
||||||
|
|
||||||
ClippingOp op = new ClippingOp(ClippingOp.ClippingType.WITHIN_CLIP_RANGE, start, stop, null);
|
//ClippingOp op = new ClippingOp(ClippingOp.ClippingType.WITHIN_CLIP_RANGE, start, stop, null);
|
||||||
|
ClippingOp op = new ClippingOp(start, stop);
|
||||||
clipper.addOp(op);
|
clipper.addOp(op);
|
||||||
|
ClippingData data = new ClippingData(sequencesToClip);
|
||||||
|
data.incNRangeClippedBases(op.getLength());
|
||||||
|
clipper.setData(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -291,7 +315,7 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
||||||
*
|
*
|
||||||
* @param clipper
|
* @param clipper
|
||||||
*/
|
*/
|
||||||
private void clipBadQualityScores(ReadClipper clipper) {
|
private void clipBadQualityScores(ReadClipperWithData clipper) {
|
||||||
SAMRecord read = clipper.getRead();
|
SAMRecord read = clipper.getRead();
|
||||||
int readLen = read.getReadBases().length;
|
int readLen = read.getReadBases().length;
|
||||||
byte[] quals = read.getBaseQualities();
|
byte[] quals = read.getBaseQualities();
|
||||||
|
|
@ -311,7 +335,12 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
||||||
if (clipPoint != -1) {
|
if (clipPoint != -1) {
|
||||||
int start = read.getReadNegativeStrandFlag() ? 0 : clipPoint;
|
int start = read.getReadNegativeStrandFlag() ? 0 : clipPoint;
|
||||||
int stop = read.getReadNegativeStrandFlag() ? clipPoint : readLen - 1;
|
int stop = read.getReadNegativeStrandFlag() ? clipPoint : readLen - 1;
|
||||||
clipper.addOp(new ClippingOp(ClippingOp.ClippingType.LOW_Q_SCORES, start, stop, null));
|
//clipper.addOp(new ClippingOp(ClippingOp.ClippingType.LOW_Q_SCORES, start, stop, null));
|
||||||
|
ClippingOp op = new ClippingOp(start, stop);
|
||||||
|
clipper.addOp(op);
|
||||||
|
ClippingData data = new ClippingData(sequencesToClip);
|
||||||
|
data.incNQClippedBases(op.getLength());
|
||||||
|
clipper.setData(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -325,7 +354,7 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
||||||
return new ClippingData(sequencesToClip);
|
return new ClippingData(sequencesToClip);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ClippingData reduce(ReadClipper clipper, ClippingData data) {
|
public ClippingData reduce(ReadClipperWithData clipper, ClippingData data) {
|
||||||
if ( clipper == null )
|
if ( clipper == null )
|
||||||
return data;
|
return data;
|
||||||
|
|
||||||
|
|
@ -340,23 +369,8 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
||||||
data.nTotalBases += clipper.getRead().getReadLength();
|
data.nTotalBases += clipper.getRead().getReadLength();
|
||||||
if (clipper.wasClipped()) {
|
if (clipper.wasClipped()) {
|
||||||
data.nClippedReads++;
|
data.nClippedReads++;
|
||||||
for (ClippingOp op : clipper.getOps()) {
|
|
||||||
switch (op.type) {
|
|
||||||
case LOW_Q_SCORES:
|
|
||||||
data.incNQClippedBases(op.getLength());
|
|
||||||
break;
|
|
||||||
case WITHIN_CLIP_RANGE:
|
|
||||||
data.incNRangeClippedBases(op.getLength());
|
|
||||||
break;
|
|
||||||
case MATCHES_CLIP_SEQ:
|
|
||||||
data.incSeqClippedBases((String) op.extraInfo, op.getLength());
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new IllegalStateException("Unexpected Clipping operator type " + op);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
data.addData(clipper.getData());
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -417,6 +431,16 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
||||||
seqClipCounts.put(seq, seqClipCounts.get(seq) + n);
|
seqClipCounts.put(seq, seqClipCounts.get(seq) + n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addData (ClippingData data) {
|
||||||
|
nTotalReads += data.nTotalReads;
|
||||||
|
nTotalBases += data.nTotalBases;
|
||||||
|
nClippedReads += data.nClippedReads;
|
||||||
|
nClippedBases += data.nClippedBases;
|
||||||
|
nQClippedBases += data.nQClippedBases;
|
||||||
|
nRangeClippedBases += data.nRangeClippedBases;
|
||||||
|
nSeqClippedBases += data.nSeqClippedBases;
|
||||||
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder s = new StringBuilder();
|
StringBuilder s = new StringBuilder();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue