diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java index 55c9c376f690c7d529fd91f4446885a0a00a96df..ba7a4ea5f330345ddd8615ae5a77748f08435663 100644 --- a/uk/ac/sanger/artemis/components/alignment/BamView.java +++ b/uk/ac/sanger/artemis/components/alignment/BamView.java @@ -125,8 +125,10 @@ public class BamView extends JPanel implements DisplayAdjustmentListener, SelectionChangeListener { private static final long serialVersionUID = 1L; - private Hashtable<String, File> bamIndexFileHash = null; + private List<SAMRecord> readsInView; + private Hashtable<String, SAMFileReader> samFileReaderHash = new Hashtable<String, SAMFileReader>(); + private Hashtable<String, Integer> seqLengths = new Hashtable<String, Integer>(); private Hashtable<String, Integer> offsetLengths; private Vector<String> seqNames = new Vector<String>(); @@ -300,52 +302,33 @@ public class BamView extends JPanel */ private File getBamIndexFile(String bam) throws IOException { - if(bamIndexFileHash == null) - bamIndexFileHash = new Hashtable<String, File>(); - File bamIndexFile = null; - if(!bamIndexFileHash.containsKey(bam+".bai")) - { - if(bam.startsWith("http")) - { - final URL urlBamIndexFile = new URL(bam+".bai"); - InputStream is = urlBamIndexFile.openStream(); - - // Create temp file. - bamIndexFile = File.createTempFile( - urlBamIndexFile.getFile().replaceAll("[\\/\\s]", "_"), ".bai"); - bamIndexFile.deleteOnExit(); - - FileOutputStream out = new FileOutputStream(bamIndexFile); - int c; - while ((c = is.read()) != -1) - out.write(c); - out.flush(); - out.close(); - is.close(); - - System.out.println("create... "+bamIndexFile.getAbsolutePath()); - } - else - bamIndexFile = new File(bam+".bai"); - bamIndexFileHash.put(bam+".bai", bamIndexFile); - } - else - { - Enumeration<String> names = bamIndexFileHash.keys(); - while(names.hasMoreElements()) - { - String name = names.nextElement(); - if(name.equals(bam+".bai")) - { - bamIndexFile = bamIndexFileHash.get(name); - break; - } - } - } + if (bam.startsWith("http")) + { + final URL urlBamIndexFile = new URL(bam + ".bai"); + InputStream is = urlBamIndexFile.openStream(); + + // Create temp file. + bamIndexFile = File.createTempFile(urlBamIndexFile.getFile().replaceAll( + "[\\/\\s]", "_"), ".bai"); + bamIndexFile.deleteOnExit(); + + FileOutputStream out = new FileOutputStream(bamIndexFile); + int c; + while ((c = is.read()) != -1) + out.write(c); + out.flush(); + out.close(); + is.close(); + + System.out.println("create... " + bamIndexFile.getAbsolutePath()); + } + else + bamIndexFile = new File(bam + ".bai"); + return bamIndexFile; } - + /** * Get the SAM file reader. * @param bam @@ -354,17 +337,25 @@ public class BamView extends JPanel */ private SAMFileReader getSAMFileReader(final String bam) throws IOException { - File bamIndexFile = getBamIndexFile(bam);; + if(samFileReaderHash.containsKey(bam)) + return samFileReaderHash.get(bam); + + File bamIndexFile = getBamIndexFile(bam); + final SAMFileReader samFileReader; if(!bam.startsWith("http")) { File bamFile = new File(bam); - return new SAMFileReader(bamFile, bamIndexFile); + samFileReader = new SAMFileReader(bamFile, bamIndexFile); } else { final URL urlBamFile = new URL(bam); - return new SAMFileReader(urlBamFile, bamIndexFile, true); + samFileReader = new SAMFileReader(urlBamFile, bamIndexFile, true); } + samFileReader.setValidationStringency(ValidationStringency.SILENT); + samFileReaderHash.put(bam, samFileReader); + + return samFileReader; } private void readHeaderPicard() throws IOException @@ -382,7 +373,7 @@ public class BamView extends JPanel readGroups.get(i).getSequenceLength()); seqNames.add(readGroups.get(i).getSequenceName()); } - inputSam.close(); + //inputSam.close(); } @@ -399,7 +390,7 @@ public class BamView extends JPanel final SAMFileReader inputSam = getSAMFileReader(bam); //final SAMFileReader inputSam = new SAMFileReader(bamFile, indexFile); - inputSam.setValidationStringency(ValidationStringency.SILENT); + if(concatSequences) { @@ -435,7 +426,7 @@ public class BamView extends JPanel iterateOverBam(inputSam, refName, start, end, bamIndex); } - inputSam.close(); + //inputSam.close(); //System.out.println("readFromBamPicard "+start+".."+end); //System.out.println("Reads in view ... "+readsInView.size()); } @@ -474,8 +465,8 @@ public class BamView extends JPanel if(samRecordMapQPredicate == null || samRecordMapQPredicate.testPredicate(samRecord)) { - if(multipleBAM) - samRecord.setAttribute("FL", bamIndex); + //if(multipleBAM) + // samRecord.setAttribute("FL", bamIndex); readsInView.add(samRecord); } } @@ -616,7 +607,6 @@ public class BamView extends JPanel changeToStackView = true; } - Collections.sort(readsInView, new SAMRecordComparator()); if ((!isStackView && !isStrandStackView) || pixPerBase * 1.08f >= ALIGNMENT_PIX_PER_BASE) {