+ public void setAllowDomainsToBeIgnored( final boolean allow_domains_to_be_ignored ) {
+ forceRecalculation();
+ _allow_domains_to_be_ignored = allow_domains_to_be_ignored;
+ }
+
+ void setDomainIdsToIgnore( final Set<String> domain_ids_to_ignore ) {
+ forceRecalculation();
+ _domain_ids_to_ignore = domain_ids_to_ignore;
+ }
+
+ private void forceRecalculation() {
+ _all_domains = null;
+ _shared_domains = null;
+ _domains_specific_to_0 = null;
+ _domains_specific_to_1 = null;
+ _all_binary_domain_combinations = null;
+ _shared_binary_domain_combinations = null;
+ _binary_domain_combinations_specific_to_0 = null;
+ _binary_domain_combinations_specific_to_1 = null;
+ }
+
+ private Set<BinaryDomainCombination> getBinaryDomainCombinationsSpecificToGenome( final boolean specific_to_genome_0 ) {
+ final Set<BinaryDomainCombination> specific = new HashSet<BinaryDomainCombination>();
+ final Set<BinaryDomainCombination> bc0 = getCombinableDomainsGenome0().toBinaryDomainCombinations();
+ final Set<BinaryDomainCombination> bc1 = getCombinableDomainsGenome1().toBinaryDomainCombinations();
+ if ( specific_to_genome_0 ) {
+ for( final BinaryDomainCombination binary_domain_combination0 : bc0 ) {
+ if ( !bc1.contains( binary_domain_combination0 ) ) {
+ specific.add( binary_domain_combination0 );
+ }
+ }
+ }
+ else {
+ for( final BinaryDomainCombination binary_domain_combination1 : bc1 ) {
+ if ( !bc0.contains( binary_domain_combination1 ) ) {
+ specific.add( binary_domain_combination1 );
+ }
+ }
+ }
+ if ( isAllowDomainsToBeIgnored() && !getDomainIdsToIgnore().isEmpty() ) {
+ return pruneBinaryCombinations( specific );
+ }
+ return specific;
+ }
+
+ private GenomeWideCombinableDomains getCombinableDomainsGenome0() {
+ return _combinable_domains_genome_0;
+ }
+
+ private GenomeWideCombinableDomains getCombinableDomainsGenome1() {
+ return _combinable_domains_genome_1;
+ }
+
+ private Set<String> getDomainIdsToIgnore() {
+ return _domain_ids_to_ignore;
+ }
+
+ private Set<String> getDomainsSpecificToGenome( final boolean specific_to_genome_0 ) {
+ final Set<String> specific = new HashSet<String>();
+ final Set<String> d0 = getCombinableDomainsGenome0().getAllDomainIds();
+ final Set<String> d1 = getCombinableDomainsGenome1().getAllDomainIds();
+ if ( specific_to_genome_0 ) {
+ for( final String domain0 : d0 ) {
+ if ( !d1.contains( domain0 ) ) {
+ specific.add( domain0 );
+ }
+ }
+ }
+ else {
+ for( final String domain1 : d1 ) {
+ if ( !d0.contains( domain1 ) ) {
+ specific.add( domain1 );
+ }
+ }
+ }
+ if ( isAllowDomainsToBeIgnored() && !getDomainIdsToIgnore().isEmpty() ) {
+ return pruneDomains( specific );
+ }
+ return specific;
+ }
+