entry : featureStore.entrySet())
{
String type = entry.getKey();
if (!entry.getValue().isEmpty() && isOntologyTerm(type, soTerm))
{
types.add(type);
}
}
return types;
}
/**
* Answers true if the given type matches one of the specified terms (or is a
* sub-type of one in the Sequence Ontology), or if no terms are supplied.
* Answers false if filter terms are specified and the given term does not
* match any of them.
*
* @param type
* @param soTerm
* @return
*/
protected boolean isOntologyTerm(String type, String... soTerm)
{
if (soTerm == null || soTerm.length == 0)
{
return true;
}
SequenceOntologyI so = SequenceOntologyFactory.getInstance();
for (String term : soTerm)
{
if (type.equals(term) || so.isA(type, term))
{
return true;
}
}
return false;
}
/**
* {@inheritDoc}
*/
@Override
public float getMinimumScore(String type, boolean positional)
{
return featureStore.containsKey(type)
? featureStore.get(type).getMinimumScore(positional)
: Float.NaN;
}
/**
* {@inheritDoc}
*/
@Override
public float getMaximumScore(String type, boolean positional)
{
return featureStore.containsKey(type)
? featureStore.get(type).getMaximumScore(positional)
: Float.NaN;
}
/**
* A convenience method to sort features by start position ascending (if on
* forward strand), or end position descending (if on reverse strand)
*
* @param features
* @param forwardStrand
*/
public static void sortFeatures(List extends IntervalI> features,
final boolean forwardStrand)
{
Collections.sort(features,
forwardStrand ? IntervalI.COMPARE_BEGIN_ASC_END_DESC
: IntervalI.COMPARE_END_DESC);
}
/**
* {@inheritDoc} This method is 'semi-optimised': it only inspects features
* for types that include the specified group, but has to inspect every
* feature of those types for matching feature group. This is efficient unless
* a sequence has features that share the same type but are in different
* groups - an unlikely case.
*
* For example, if RESNUM feature is created with group = PDBID, then features
* would only be retrieved for those sequences associated with the target
* PDBID (group).
*/
@Override
public List getFeaturesForGroup(boolean positional,
String group, String... type)
{
List result = new ArrayList<>();
for (FeatureStore featureSet : varargToTypes(type))
{
if (featureSet.getFeatureGroups(positional).contains(group))
{
result.addAll(featureSet.getFeaturesForGroup(positional, group));
}
}
return result;
}
/**
* {@inheritDoc}
*/
@Override
public boolean shiftFeatures(int fromPosition, int shiftBy)
{
boolean modified = false;
for (FeatureStore fs : featureStore.values())
{
modified |= fs.shiftFeatures(fromPosition, shiftBy);
}
return modified;
}
/**
* {@inheritDoc}
*/
@Override
public void deleteAll()
{
featureStore.clear();
}
}