/* * 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.workers.FeatureSetCounterI; import jalview.workers.AlignmentAnnotationFactory; /* * Demonstration of FeatureSetWorker * compute annotation tracks counting number of displayed * features of each type in each column */ /* * discover features on the current view */ def featuresVis=jalview.bin.Jalview.currentAlignFrame.getCurrentView().getFeaturesDisplayed().getVisibleFeatures().toList(); assert 'java.util.ArrayList' == featuresVis.class.name /* * A closure that returns a vector for featuresVis of 1 or 0 for any features of type observed * Argument should be a list of SequenceFeature */ def hasType = { features -> int[] obs=new int[featuresVis.size()]; for (sf in features) { /* * Here we inspect the type of the sequence feature. * You can also test sf.description, sf.score, sf.featureGroup, * sf.strand, sf.phase, sf.begin, sf.end * or sf.getValue(attributeName) for GFF 'column 9' properties */ int pos = 0; for (type in featuresVis) { if (type.equals(sf.type)) { obs[pos]=1; } else { obs[pos]=0; } pos++; } } obs; } /* * Closure to generate a counter for feature types in featuresVis * calls hasType to count types in the int[] count(String res, List feats) method */ def getColumnSetCounter = { [ getNames: { featuresVis as String[] }, getDescriptions: { featuresVis as String[] }, getMinColour: { [0, 255, 255] }, // cyan getMaxColour: { [0, 0, 255] }, // blue count: { res, feats -> hasType.call(feats) } ] as FeatureSetCounterI } /* * and register a FeatuerSetCounter instance */ AlignmentAnnotationFactory.newCalculator(getColumnSetCounter.call())