Skip to content
Snippets Groups Projects
BamView.java 61.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • tjc's avatar
    tjc committed
        {
          laststart = -1;
          lastend = -1;
          this.startBase = event.getStart();
          this.endBase   = event.getEnd();
    
          int width = feature_display.getMaxVisibleBases();
          setZoomLevel(width);
          repaint();
        }
        else
        {
          setDisplay(event.getStart(), 
              event.getStart()+feature_display.getMaxVisibleBases(), event);
          repaint();
        }
      }
      
      public void selectionChanged(SelectionChangeEvent event)
      {
        repaint();
    
    tjc's avatar
    tjc committed
      private class Ruler extends JPanel
    
    tjc's avatar
    tjc committed
      {
    
    tjc's avatar
    tjc committed
        private static final long serialVersionUID = 1L;
    
    tjc's avatar
    tjc committed
        int start;
        int end;
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
        public Ruler()
        {
          super();
    
          setPreferredSize(new Dimension(mainPanel.getWidth(), 15));
    
    tjc's avatar
    tjc committed
          setBackground(Color.white);
          setFont(getFont().deriveFont(11.f));
        }
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
        public void paintComponent(Graphics g)
        {
          super.paintComponent(g);
          Graphics2D g2 = (Graphics2D)g;
          drawBaseScale(g2, start, end, 12);
        }
    
    tjc's avatar
    tjc committed
    
        private void drawBaseScale(Graphics2D g2, int start, int end, int ypos)
        {
          int startMark = (((int)(start/10))*10)+1;
    
    
          if(end > getSequenceLength())
            end = getSequenceLength();
          
    
    tjc's avatar
    tjc committed
          for(int i=startMark; i<end; i+=10)
          {
    
    tjc's avatar
    tjc committed
            int xpos = (i-start)*ALIGNMENT_PIX_PER_BASE;
    
    tjc's avatar
    tjc committed
            g2.drawString(Integer.toString(i), xpos, ypos);
            
            xpos+=(ALIGNMENT_PIX_PER_BASE/2);
            g2.drawLine(xpos, ypos+1, xpos, ypos+5);
          }
        }
    
    tjc's avatar
    tjc committed
      }
      
    
      /**
      * Popup menu listener
      */
      class PopupListener extends MouseAdapter
      {
    
        public void mouseClicked(MouseEvent e)
        {
    
          
          if(e.getClickCount() > 1)
            getSelection().clear(); 
          else if(e.getButton() == MouseEvent.BUTTON1)
            highlightSAMRecord = mouseOverSAMRecord;
    
          else
            highlightRange(e, MouseEvent.BUTTON2_DOWN_MASK);
    
        }
        
        public void mousePressed(MouseEvent e)
        {
          maybeShowPopup(e);
        }
    
        public void mouseReleased(MouseEvent e)
        {
    
          maybeShowPopup(e);
        }
    
        private void maybeShowPopup(MouseEvent e)
        {
          if(e.isPopupTrigger())
    
    tjc's avatar
    tjc committed
          {
            if(popup == null)
            {
              popup = new JPopupMenu();
              createViewMenu(popup);
            }
    
            
            if(gotoMateMenuItem != null)
              popup.remove(gotoMateMenuItem);
            
            if( mouseOverSAMRecord != null && 
                mouseOverSAMRecord.getReadPairedFlag() &&
               !mouseOverSAMRecord.getMateUnmappedFlag() )
            {
              final SAMRecord thisSAMRecord = mouseOverSAMRecord;
              gotoMateMenuItem = new JMenuItem("Go to mate of : "+
                  thisSAMRecord.getReadName());
              gotoMateMenuItem.addActionListener(new ActionListener()
              {
    			public void actionPerformed(ActionEvent e) 
    			{
    			  String name = thisSAMRecord.getMateReferenceName();
    			  if(name.equals("="))
    			    name = thisSAMRecord.getReferenceName();
    			  int offset = getSequenceOffset(name);
    			  if(feature_display != null)
    			    feature_display.makeBaseVisible(
    			        thisSAMRecord.getMateAlignmentStart()+offset);
    			  else
    			    scrollBar.setValue(
    			        thisSAMRecord.getMateAlignmentStart()+offset-
    			        (nbasesInView/2));
    			  
    			  highlightSAMRecord = thisSAMRecord; 
    			}  
              });
              popup.add(gotoMateMenuItem);
            }
    
            popup.show(e.getComponent(),
                    e.getX(), e.getY());
    
    tjc's avatar
    tjc committed
          }
    
      
      class PairedRead
      {
        SAMRecord sam1;
        SAMRecord sam2;
      }
    
    tjc's avatar
    tjc committed
      public static void main(String[] args)
      {
        String bam = args[0];
    
    tjc's avatar
    tjc committed
        int nbasesInView = 1000;
    
    tjc's avatar
    tjc committed
        String reference = null;
        
    
    tjc's avatar
    tjc committed
        for(int i=0;i<args.length; i++)
        {
          if(args[i].equals("-a"))
            bam = args[++i];
          else if(args[i].equals("-r"))
            reference = args[++i];
          else if(args[i].equals("-v"))
            nbasesInView = Integer.parseInt(args[++i]);
          else if(args[i].equals("-s"))
            System.setProperty("samtoolDir", args[++i]);
          else if(args[i].startsWith("-h"))
          { 
            System.out.println("-h\t show help");
            
            System.out.println("-a\t BAM/SAM file to display");
            System.out.println("-r\t reference file (optional)");
            System.out.println("-v\t number of bases to display in the view (optional)");
    
            /*System.out.println("-s\t samtool directory");*/
    
    tjc's avatar
    tjc committed
    
            System.exit(0);
          }
        }
    
    
        final BamView view = new BamView(bam, reference, nbasesInView);
    
        JFrame frame = new JFrame("BamView");
    
    tjc's avatar
    tjc committed
        
    
        // translucent
        //frame.getRootPane().putClientProperty("Window.alpha", new Float(0.9f));
    
    
    tjc's avatar
    tjc committed
        frame.addWindowFocusListener(new WindowFocusListener()
        {
          public void windowGainedFocus(WindowEvent e)
          {
            view.requestFocus();
          }
          public void windowLostFocus(WindowEvent e){}
        });
        
    
    tjc's avatar
    tjc committed
        view.addJamToPanel((JPanel)frame.getContentPane(), frame, false, null);
    
    tjc's avatar
    tjc committed
        frame.pack();
    
    tjc's avatar
    tjc committed
        view.jspView.getVerticalScrollBar().setValue(
            view.jspView.getVerticalScrollBar().getMaximum());
    
        frame.setVisible(true);
    
    tjc's avatar
    tjc committed
      }
    
    tjc's avatar
    tjc committed
    }