}
displayedPhylogenyMightHaveChanged( true );
}
- else if ( e.getSource() == _show_domain_architectures ) {
+ else if ( e.getSource() == _show_domain_architectures ) {
search0();
search1();
displayedPhylogenyMightHaveChanged( true );
}
+
else if ( ( tp != null ) && ( tp.getPhylogeny() != null ) ) {
if ( e.getSource() == getDisplayAsPhylogramCb() ) {
setDrawPhylogram( getDisplayAsPhylogramCb().isSelected() );
}
else if ( e.getSource() == _decr_domain_structure_evalue_thr ) {
_mainpanel.getCurrentTreePanel().decreaseDomainStructureEvalueThresholdExp();
+ search0();
+ search1();
displayedPhylogenyMightHaveChanged( true );
}
else if ( e.getSource() == _incr_domain_structure_evalue_thr ) {
_mainpanel.getCurrentTreePanel().increaseDomainStructureEvalueThresholdExp();
+ search0();
+ search1();
displayedPhylogenyMightHaveChanged( true );
}
else if ( e.getSource() == _search_tf_0 ) {
isShowDomainArchitectures() ) );
}
else {
+ final TreePanel tp = getMainPanel().getCurrentTreePanel();
+
+
nodes.addAll( PhylogenyMethods.searchData( query,
tree,
getOptions().isSearchCaseSensitive(),
!getOptions().isMatchWholeTermsOnly(),
getOptions().isSearchWithRegex(),
- isShowDomainArchitectures() ) );
+ isShowDomainArchitectures(),
+ tp != null ? Math.pow( 10, tp.getDomainStructureEvalueThresholdExp() ) : 0 ) );
}
}
if ( getOptions().isInverseSearchResult() ) {
isShowDomainArchitectures() ) );
}
else {
+ final TreePanel tp = getMainPanel().getCurrentTreePanel();
nodes.addAll( PhylogenyMethods.searchData( query,
tree,
getOptions().isSearchCaseSensitive(),
!getOptions().isMatchWholeTermsOnly(),
getOptions().isSearchWithRegex(),
- isShowDomainArchitectures() ) );
+ isShowDomainArchitectures(),
+ tp != null ? Math.pow( 10, tp.getDomainStructureEvalueThresholdExp() ) : 0 ) );
}
}
if ( getOptions().isInverseSearchResult() ) {
}\r
}\r
\r
+ \r
+ private static enum NDF {\r
+ NN( "NN" ),\r
+ TC( "TC" ),\r
+ CN( "CN" ),\r
+ TS( "TS" ),\r
+ TI( "TI" ),\r
+ SY( "SY" ),\r
+ SN( "SN" ),\r
+ GN( "GN" ),\r
+ SS( "SS" ),\r
+ SA( "SA" ),\r
+ DO( "DO" ),\r
+ AN( "AN" ),\r
+ XR( "XR" ),\r
+ BC( "BC" ),\r
+ MS( "MS" );\r
+ \r
+ private final String _text;\r
+\r
+ NDF( final String text ) {\r
+ _text = text;\r
+ }\r
+\r
+ public static NDF fromString( final String text ) {\r
+ for( NDF n : NDF.values() ) {\r
+ if ( text.startsWith( n._text ) ) {\r
+ return n;\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ \r
public static List<PhylogenyNode> searchData( final String query,\r
final Phylogeny phy,\r
final boolean case_sensitive,\r
final boolean partial,\r
final boolean regex,\r
- final boolean search_domains ) {\r
+ final boolean search_domains,\r
+ final double domains_confidence_threshold ) {\r
final List<PhylogenyNode> nodes = new ArrayList<PhylogenyNode>();\r
if ( phy.isEmpty() || ( query == null ) ) {\r
return nodes;\r
if ( ForesterUtil.isEmpty( query ) ) {\r
return nodes;\r
}\r
+\r
+ String my_query = query;\r
+ NDF ndf = null;\r
+\r
+ if ( my_query.length() > 2 && my_query.indexOf( ":" ) == 2 ) {\r
+ ndf = NDF.fromString( my_query );\r
+ if ( ndf != null ) {\r
+ my_query = my_query.substring( 3 );\r
+ }\r
+ }\r
+ \r
+ \r
for( final PhylogenyNodeIterator iter = phy.iteratorPreorder(); iter.hasNext(); ) {\r
final PhylogenyNode node = iter.next();\r
boolean match = false;\r
- if ( match( node.getName(), query, case_sensitive, partial, regex ) ) {\r
+ \r
+ \r
+ if ( ( ndf == null || ndf == NDF.NN ) && match( node.getName(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
}\r
- else if ( node.getNodeData().isHasTaxonomy()\r
- && match( node.getNodeData().getTaxonomy().getTaxonomyCode(), query, case_sensitive, partial, regex ) ) {\r
+ else if ( ( ndf == null || ndf == NDF.TC ) && node.getNodeData().isHasTaxonomy()\r
+ && match( node.getNodeData().getTaxonomy().getTaxonomyCode(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
}\r
- else if ( node.getNodeData().isHasTaxonomy()\r
- && match( node.getNodeData().getTaxonomy().getCommonName(), query, case_sensitive, partial, regex ) ) {\r
+ else if ( ( ndf == null || ndf == NDF.CN ) && node.getNodeData().isHasTaxonomy()\r
+ && match( node.getNodeData().getTaxonomy().getCommonName(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
}\r
- else if ( node.getNodeData().isHasTaxonomy()\r
+ else if ( ( ndf == null || ndf == NDF.TS ) && node.getNodeData().isHasTaxonomy()\r
&& match( node.getNodeData().getTaxonomy().getScientificName(),\r
- query,\r
+ my_query,\r
case_sensitive,\r
partial,\r
regex ) ) {\r
match = true;\r
}\r
- else if ( node.getNodeData().isHasTaxonomy()\r
+ else if ( ( ndf == null || ndf == NDF.TI ) &&\r
+ node.getNodeData().isHasTaxonomy()\r
&& ( node.getNodeData().getTaxonomy().getIdentifier() != null )\r
&& match( node.getNodeData().getTaxonomy().getIdentifier().getValue(),\r
- query,\r
+ my_query,\r
case_sensitive,\r
partial,\r
regex ) ) {\r
match = true;\r
}\r
- else if ( node.getNodeData().isHasTaxonomy() && !node.getNodeData().getTaxonomy().getSynonyms().isEmpty() ) {\r
+ else if ( \r
+ ( ndf == null || ndf == NDF.SY ) &&\r
+ node.getNodeData().isHasTaxonomy() && !node.getNodeData().getTaxonomy().getSynonyms().isEmpty() ) {\r
final List<String> syns = node.getNodeData().getTaxonomy().getSynonyms();\r
I: for( final String syn : syns ) {\r
- if ( match( syn, query, case_sensitive, partial, regex ) ) {\r
+ if ( match( syn, my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break I;\r
}\r
}\r
}\r
- if ( !match && node.getNodeData().isHasSequence()\r
- && match( node.getNodeData().getSequence().getName(), query, case_sensitive, partial, regex ) ) {\r
+ if ( !match && ( ndf == null || ndf == NDF.SN ) &&\r
+ node.getNodeData().isHasSequence()\r
+ && match( node.getNodeData().getSequence().getName(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
}\r
- if ( !match && node.getNodeData().isHasSequence()\r
- && match( node.getNodeData().getSequence().getGeneName(), query, case_sensitive, partial, regex ) ) {\r
+ if ( !match && ( ndf == null || ndf == NDF.GN ) &&\r
+ node.getNodeData().isHasSequence()\r
+ && match( node.getNodeData().getSequence().getGeneName(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
}\r
- if ( !match && node.getNodeData().isHasSequence()\r
- && match( node.getNodeData().getSequence().getSymbol(), query, case_sensitive, partial, regex ) ) {\r
+ if ( !match && ( ndf == null || ndf == NDF.SS ) &&\r
+ \r
+ node.getNodeData().isHasSequence()\r
+ && match( node.getNodeData().getSequence().getSymbol(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
}\r
- if ( !match\r
- && node.getNodeData().isHasSequence()\r
+ if ( !match && ( ndf == null || ndf == NDF.SA ) &&\r
+ \r
+ \r
+ node.getNodeData().isHasSequence()\r
&& ( node.getNodeData().getSequence().getAccession() != null )\r
&& match( node.getNodeData().getSequence().getAccession().getValue(),\r
- query,\r
+ my_query,\r
case_sensitive,\r
partial,\r
regex ) ) {\r
match = true;\r
}\r
- if ( search_domains && !match && node.getNodeData().isHasSequence()\r
+ if ( !match && ( (ndf == null && search_domains ) || ndf == NDF.DO ) && node.getNodeData().isHasSequence()\r
&& ( node.getNodeData().getSequence().getDomainArchitecture() != null ) ) {\r
final DomainArchitecture da = node.getNodeData().getSequence().getDomainArchitecture();\r
I: for( int i = 0; i < da.getNumberOfDomains(); ++i ) {\r
- if ( match( da.getDomain( i ).getName(), query, case_sensitive, partial, regex ) ) {\r
+ if ( ( da.getDomain( i ).getConfidence() <= domains_confidence_threshold ) && ( match( da.getDomain( i ).getName(), my_query, case_sensitive, partial, regex ) ) ) {\r
match = true;\r
break I;\r
}\r
}\r
}\r
- if ( !match && node.getNodeData().isHasSequence()\r
+ if ( \r
+ !match && ( ndf == null || ndf == NDF.AN ) &&\r
+ node.getNodeData().isHasSequence()\r
&& ( node.getNodeData().getSequence().getAnnotations() != null ) ) {\r
for( final Annotation ann : node.getNodeData().getSequence().getAnnotations() ) {\r
- if ( match( ann.getDesc(), query, case_sensitive, partial, regex ) ) {\r
+ if ( match( ann.getDesc(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break;\r
}\r
- if ( match( ann.getRef(), query, case_sensitive, partial, regex ) ) {\r
+ if ( match( ann.getRef(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break;\r
}\r
}\r
}\r
- if ( !match && node.getNodeData().isHasSequence()\r
+ if ( !match && ( ndf == null || ndf == NDF.XR ) &&\r
+ node.getNodeData().isHasSequence()\r
&& ( node.getNodeData().getSequence().getCrossReferences() != null ) ) {\r
for( final Accession x : node.getNodeData().getSequence().getCrossReferences() ) {\r
- if ( match( x.getComment(), query, case_sensitive, partial, regex ) ) {\r
+ if ( match( x.getComment(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break;\r
}\r
- if ( match( x.getSource(), query, case_sensitive, partial, regex ) ) {\r
+ if ( match( x.getSource(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break;\r
}\r
- if ( match( x.getValue(), query, case_sensitive, partial, regex ) ) {\r
+ if ( match( x.getValue(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break;\r
}\r
}\r
}\r
//\r
- if ( !match && ( node.getNodeData().getBinaryCharacters() != null ) ) {\r
+ if ( !match && ( ndf == null || ndf == NDF.BC ) &&\r
+ ( node.getNodeData().getBinaryCharacters() != null ) ) {\r
Iterator<String> it = node.getNodeData().getBinaryCharacters().getPresentCharacters().iterator();\r
I: while ( it.hasNext() ) {\r
- if ( match( it.next(), query, case_sensitive, partial, regex ) ) {\r
+ if ( match( it.next(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break I;\r
}\r
}\r
it = node.getNodeData().getBinaryCharacters().getGainedCharacters().iterator();\r
I: while ( it.hasNext() ) {\r
- if ( match( it.next(), query, case_sensitive, partial, regex ) ) {\r
+ if ( match( it.next(), my_query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break I;\r
}\r