/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ import jalview.analysis.*; import jalview.datamodel.*; import jalview.gui.AlignFrame; import jalview.gui.AlignViewport; import java.util.BitSet; import jalview.gui.JvOptionPane; import groovy.swing.SwingBuilder; def toselect = getFeatureInput(); // change this to select the desired feature type def nal=0; def nfeat=0; def nseq=0; for (ala in Jalview.getAlignFrames()) { def al = ala.viewport.alignment; if (al!=null) { BitSet bs = new BitSet(); SequenceI[] seqs = al.getSequencesArray(); for (sq in seqs) { def tfeat=0; if (sq!=null) { SequenceFeature[] sf = sq.getSequenceFeatures(); for (sfpos in sf) { if (sfpos!=null && sfpos.getType().equals(toselect)) { tfeat++; int i=sq.findIndex(sfpos.getBegin()); int ist=sq.findIndex(sq.getStart()); if (ial.getWidth()) { j = al.getWidth(); } for (; i<=j; i++) { bs.set(i-1); } } } } if (tfeat>0) { nseq++; nfeat+=tfeat; } } if (bs.cardinality()>0) { nal ++; ColumnSelection cs = ala.viewport.getColumnSelection(); if (cs == null) { cs = new ColumnSelection(); } for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) { cs.addElement(i); } ala.viewport.setColumnSelection(cs); ala.alignPanel.paintAlignment(true, true); ala.statusBar.setText("Marked "+bs.cardinality()+" columns containing features of type "+toselect) } else { ala.statusBar.setText("No features of type "+toselect+" found."); } } } return "Found a total of ${nfeat} features across ${nseq} sequences in ${nal} alignments."; String getFeatureInput(){ def swingBuilder = new SwingBuilder(); def response = JvOptionPane.showInputDialog( null, 'Select columns by feature by type','Enter type of feature', JvOptionPane.OK_OPTION) return response }