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.
|
||||
*/
|
||||
@Requires({DataSource.READS})
|
||||
public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.ClippingData> {
|
||||
public class ClipReadsWalker extends ReadWalker<ClipReadsWalker.ReadClipperWithData, ClipReadsWalker.ClippingData> {
|
||||
@Output
|
||||
PrintStream out;
|
||||
|
||||
|
|
@ -99,6 +99,22 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
|||
*/
|
||||
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.
|
||||
*/
|
||||
|
|
@ -180,12 +196,12 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
|||
* @param read the read itself, as a SAMRecord
|
||||
* @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 ( clippingRepresentation == ClippingRepresentation.HARDCLIP_BASES ) {
|
||||
read = ReadUtils.replaceSoftClipsWithMatches(read);
|
||||
}
|
||||
ReadClipper clipper = new ReadClipper(read);
|
||||
ReadClipperWithData clipper = new ReadClipperWithData(read);
|
||||
|
||||
//
|
||||
// run all three clipping modules
|
||||
|
|
@ -205,7 +221,7 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
|||
*
|
||||
* @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
|
||||
SAMRecord read = clipper.getRead();
|
||||
|
||||
|
|
@ -223,8 +239,12 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
|||
if (found) {
|
||||
int start = match.start();
|
||||
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);
|
||||
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
|
||||
*/
|
||||
private void clipCycles(ReadClipper clipper) {
|
||||
private void clipCycles(ReadClipperWithData clipper) {
|
||||
if (cyclesToClip != null) {
|
||||
SAMRecord read = clipper.getRead();
|
||||
|
||||
|
|
@ -270,8 +290,12 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
|||
int start = startStop.first;
|
||||
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);
|
||||
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
|
||||
*/
|
||||
private void clipBadQualityScores(ReadClipper clipper) {
|
||||
private void clipBadQualityScores(ReadClipperWithData clipper) {
|
||||
SAMRecord read = clipper.getRead();
|
||||
int readLen = read.getReadBases().length;
|
||||
byte[] quals = read.getBaseQualities();
|
||||
|
|
@ -311,7 +335,12 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
|||
if (clipPoint != -1) {
|
||||
int start = read.getReadNegativeStrandFlag() ? 0 : clipPoint;
|
||||
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);
|
||||
}
|
||||
|
||||
public ClippingData reduce(ReadClipper clipper, ClippingData data) {
|
||||
public ClippingData reduce(ReadClipperWithData clipper, ClippingData data) {
|
||||
if ( clipper == null )
|
||||
return data;
|
||||
|
||||
|
|
@ -340,23 +369,8 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
|||
data.nTotalBases += clipper.getRead().getReadLength();
|
||||
if (clipper.wasClipped()) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
@ -417,6 +431,16 @@ public class ClipReadsWalker extends ReadWalker<ReadClipper, ClipReadsWalker.Cli
|
|||
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() {
|
||||
StringBuilder s = new StringBuilder();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue