From 83759ef9a1cf4a9a47e9d655199bccf7e416eff7 Mon Sep 17 00:00:00 2001 From: tcarver <tjc> Date: Mon, 22 Oct 2012 16:47:24 +0100 Subject: [PATCH] add option for creating features from reads on opposite strand - for single strand cDNA --- .../artemis/components/alignment/BamView.java | 15 ++++++--- .../components/alignment/MappedReads.java | 32 +++++++++++-------- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java index be26ccb51..ca938c72d 100644 --- a/uk/ac/sanger/artemis/components/alignment/BamView.java +++ b/uk/ac/sanger/artemis/components/alignment/BamView.java @@ -3916,17 +3916,17 @@ public class BamView extends JPanel if(groupsFrame.getNumberOfGroups() == 1) useGroup.setEnabled(false); - ButtonGroup group = new ButtonGroup(); + final ButtonGroup group = new ButtonGroup(); group.add(useAllBams); group.add(useGroup); - Box xBox = Box.createHorizontalBox(); + final Box xBox = Box.createHorizontalBox(); xBox.add(useAllBams); xBox.add(useGroup); xBox.add(Box.createHorizontalGlue()); c.gridy++; gridPanel.add(xBox, c); - + c.gridy++; gridPanel.add(new JSeparator(), c); c.gridy++; @@ -3934,6 +3934,11 @@ public class BamView extends JPanel c.gridy++; gridPanel.add(minSize, c); + final JCheckBox cbOpposite = new JCheckBox("Assume reads on opposite strand", false); + cbOpposite.setToolTipText("for cDNA experiments when the reads are on the opposite strand"); + c.gridy++; + gridPanel.add(cbOpposite, c); + int status = JOptionPane.showConfirmDialog(feature_display, gridPanel, "Options", JOptionPane.OK_CANCEL_OPTION); @@ -3968,8 +3973,8 @@ public class BamView extends JPanel new MappedReads((String)combo.getSelectedItem(),BamView.this, samFileReaderHash, seqNames, offsetLengths, concatSequences, seqLengths, - (useGroup.isSelected() ? groupsFrame : null), - threshold.getValue(), minSize.getValue(), minBams.getValue(), true); + (useGroup.isSelected() ? groupsFrame : null), threshold.getValue(), + minSize.getValue(), minBams.getValue(), cbOpposite.isSelected(), true); } } diff --git a/uk/ac/sanger/artemis/components/alignment/MappedReads.java b/uk/ac/sanger/artemis/components/alignment/MappedReads.java index 83b75df54..145442b53 100644 --- a/uk/ac/sanger/artemis/components/alignment/MappedReads.java +++ b/uk/ac/sanger/artemis/components/alignment/MappedReads.java @@ -201,6 +201,7 @@ public class MappedReads * @param threshold * @param minSize * @param minBams + * @param readsOnOppositeStrand assume reads are on the opposite strand if true. * @param contained */ public MappedReads( @@ -215,6 +216,7 @@ public class MappedReads final int threshold, final int minSize, final int minBams, + final boolean readsOnOppositeStrand, final boolean contained) { this.refName = refName; @@ -247,7 +249,7 @@ public class MappedReads centerDialog(); final CalculateNewFeatures cmr = new CalculateNewFeatures( - feature_display, refName, groupsFrame, threshold, minSize, minBams); + feature_display, refName, groupsFrame, threshold, minSize, minBams, readsOnOppositeStrand); cmr.start(); dialog.setVisible(true); } @@ -502,6 +504,7 @@ public class MappedReads private int threshold; private int minSize; private int minBams; + private boolean readsOnOppositeStrand; private GroupBamFrame groupsFrame; CalculateNewFeatures(final FeatureDisplay feature_display, @@ -509,7 +512,8 @@ public class MappedReads final GroupBamFrame groupsFrame, final int threshold, final int minSize, - final int minBams) + final int minBams, + final boolean readsOnOppositeStrand) { entryGroup = feature_display.getEntryGroup(); bases = feature_display.getBases(); @@ -518,6 +522,7 @@ public class MappedReads this.threshold = threshold; this.minSize = minSize; this.minBams = minBams; + this.readsOnOppositeStrand = readsOnOppositeStrand; } class MarkerObj @@ -583,7 +588,7 @@ public class MappedReads int concatShift = 0; if(offset > start) concatShift = offset-start; - + cnt = BamUtils.countOverRange(bamList.get(i), samFileReaderHash, name, thisStart, thisEnd, concatShift, cnt, @@ -592,26 +597,24 @@ public class MappedReads } } else - { cnt = BamUtils.countOverRange(bamList.get(i), samFileReaderHash, refSeq, start, stop, 0, cnt, samRecordFlagPredicate, samRecordMapQPredicate); - } - + for(int k=0; k<cnt.length; k++) { final Range r = new Range(start+k, start+k+1); - // find forward strand potential features - fwdStart = findFeatures(cnt[k][0], true, fwdStart, j+k, - r, excluseKeys, fwdMarkers, entryGroup, i); - + fwdStart = findFeatures( + (!readsOnOppositeStrand ? cnt[k][0] : cnt[k][1]), true, + fwdStart, j+k, r, excluseKeys, fwdMarkers, entryGroup, i); + // find reverse strand potential features - revStart = findFeatures(cnt[k][1], false, revStart, j+k, - r, excluseKeys, revMarkers, entryGroup, i); + revStart = findFeatures( + (!readsOnOppositeStrand ? cnt[k][1] : cnt[k][0]), false, + revStart, j+k, r, excluseKeys, revMarkers, entryGroup, i); } - } catch (OutOfRangeException e1) { @@ -620,7 +623,8 @@ public class MappedReads } } - final Entry newEntry = entryGroup.createEntry ("align_"+threshold+"_"+minBams+"_"+minSize); + final Entry newEntry = entryGroup.createEntry ( + "align_"+threshold+"_"+minBams+"_"+minSize+(!readsOnOppositeStrand ? "":"_opp")); createFeatures(fwdMarkers, true, newEntry); createFeatures(revMarkers, false, newEntry); return null; -- GitLab