X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Fsurfacing%2FDomainParsimonyCalculator.java;h=4b7303d97fc03a29750f66505cf439a7903c85e4;hb=1312aecb21aaad33a1e3c0015afc10962195ea34;hp=18e08794fb65bf182ee13ea90efcb2d2327a135f;hpb=ffc6085cfd61eabca43b39c0423881b6f4fa7706;p=jalview.git diff --git a/forester/java/src/org/forester/surfacing/DomainParsimonyCalculator.java b/forester/java/src/org/forester/surfacing/DomainParsimonyCalculator.java index 18e0879..4b7303d 100644 --- a/forester/java/src/org/forester/surfacing/DomainParsimonyCalculator.java +++ b/forester/java/src/org/forester/surfacing/DomainParsimonyCalculator.java @@ -36,6 +36,7 @@ import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; +import org.forester.application.surfacing; import org.forester.evoinference.matrix.character.BasicCharacterStateMatrix; import org.forester.evoinference.matrix.character.CharacterStateMatrix; import org.forester.evoinference.matrix.character.CharacterStateMatrix.BinaryStates; @@ -46,7 +47,10 @@ import org.forester.phylogeny.Phylogeny; import org.forester.phylogeny.PhylogenyNode; import org.forester.phylogeny.data.BinaryCharacters; import org.forester.phylogeny.iterators.PhylogenyNodeIterator; -import org.forester.surfacing.BinaryDomainCombination.DomainCombinationType; +import org.forester.protein.BinaryDomainCombination; +import org.forester.protein.BinaryDomainCombination.DomainCombinationType; +import org.forester.protein.DomainId; +import org.forester.species.Species; import org.forester.util.ForesterUtil; public final class DomainParsimonyCalculator { @@ -211,11 +215,10 @@ public final class DomainParsimonyCalculator { setTotalLosses( fitch.getTotalLosses() ); setTotalUnchanged( fitch.getTotalUnchanged() ); } - - private void executeFitchParsimonyOnSecondaryFeatures( - final boolean use_last, - final boolean randomize, - final long random_number_seed ) { + + private void executeFitchParsimonyOnSecondaryFeatures( final boolean use_last, + final boolean randomize, + final long random_number_seed ) { reset(); if ( use_last ) { System.out.println( " Fitch parsimony: use_last = true" ); @@ -228,21 +231,19 @@ public final class DomainParsimonyCalculator { fitch.setUseLast( use_last ); fitch.setReturnGainLossMatrix( true ); fitch.setReturnInternalStates( true ); - final Map> map = getDomainIdToSecondaryFeaturesMap(); final Map newmap = new HashMap(); final Iterator>> it = map.entrySet().iterator(); - while (it.hasNext()) { - final Map.Entry> pair = (Map.Entry>)it.next(); + while ( it.hasNext() ) { + final Map.Entry> pair = it.next(); if ( pair.getValue().size() != 1 ) { - throw new IllegalArgumentException( pair.getKey().getId() + " mapps to " + pair.getValue().size() + " items" ); + throw new IllegalArgumentException( pair.getKey().getId() + " mapps to " + pair.getValue().size() + + " items" ); } newmap.put( pair.getKey(), ( String ) pair.getValue().toArray()[ 0 ] ); } - - CharacterStateMatrix states =createMatrixOfSecondaryFeatureBinaryDomainCombinationPresenceOrAbsence( getGenomeWideCombinableDomainsList(), - newmap ); - + final CharacterStateMatrix states = createMatrixOfSecondaryFeatureBinaryDomainCombinationPresenceOrAbsence( getGenomeWideCombinableDomainsList(), + newmap ); fitch.execute( getPhylogeny(), states ); setGainLossMatrix( fitch.getGainLossMatrix() ); setBinaryInternalStatesMatrix( fitch.getInternalStatesMatrix() ); @@ -255,7 +256,7 @@ public final class DomainParsimonyCalculator { public void executeFitchParsimonyOnBinaryDomainCombintion( final boolean use_last ) { executeFitchParsimony( false, use_last, false, 0 ); } - + public void executeFitchParsimonyOnBinaryDomainCombintionOnSecondaryFeatures( final boolean use_last ) { executeFitchParsimonyOnSecondaryFeatures( use_last, false, 0 ); } @@ -545,7 +546,6 @@ public final class DomainParsimonyCalculator { return new DomainParsimonyCalculator( phylogeny, gwcd_list, domain_id_to_secondary_features_map ); } - /** * For folds instead of Pfam-domains, for example * @@ -618,10 +618,9 @@ public final class DomainParsimonyCalculator { } return matrix; } - - + public static CharacterStateMatrix createMatrixOfSecondaryFeatureBinaryDomainCombinationPresenceOrAbsence( final List gwcd_list, - final Map domain_id_to_second_features_map) { + final Map domain_id_to_second_features_map ) { if ( gwcd_list.isEmpty() ) { throw new IllegalArgumentException( "genome wide combinable domains list is empty" ); } @@ -632,26 +631,25 @@ public final class DomainParsimonyCalculator { final SortedSet all_binary_combinations_mapped = new TreeSet(); final Set[] binary_combinations_per_genome_mapped = new HashSet[ number_of_identifiers ]; int identifier_index = 0; + final SortedSet no_mappings = new TreeSet(); for( final GenomeWideCombinableDomains gwcd : gwcd_list ) { binary_combinations_per_genome_mapped[ identifier_index ] = new HashSet(); for( final BinaryDomainCombination bc : gwcd.toBinaryDomainCombinations() ) { - - if ( !domain_id_to_second_features_map.containsKey( bc.getId0() ) ) { - throw new IllegalArgumentException( "no mapping found for " + bc.getId0() ); - } - if ( !domain_id_to_second_features_map.containsKey( bc.getId1() ) ) { - throw new IllegalArgumentException( "no mapping found for " + bc.getId1() ); - } - - - final BinaryDomainCombination mapped_bc = new BasicBinaryDomainCombination( domain_id_to_second_features_map.get( bc.getId0()) , - domain_id_to_second_features_map.get( bc.getId1()) ); + final BinaryDomainCombination mapped_bc = mapBinaryDomainCombination( domain_id_to_second_features_map, + bc, + no_mappings ); all_binary_combinations_mapped.add( mapped_bc ); binary_combinations_per_genome_mapped[ identifier_index ].add( mapped_bc ); } ++identifier_index; } - + if ( !no_mappings.isEmpty() ) { + ForesterUtil.programMessage( surfacing.PRG_NAME, "No mappings for the following (" + no_mappings.size() + + "):" ); + for( final String id : no_mappings ) { + ForesterUtil.programMessage( surfacing.PRG_NAME, id ); + } + } final int number_of_characters = all_binary_combinations_mapped.size(); final CharacterStateMatrix matrix = new BasicCharacterStateMatrix( number_of_identifiers, number_of_characters ); @@ -690,10 +688,29 @@ public final class DomainParsimonyCalculator { } return matrix; } - - - - + + private static BinaryDomainCombination mapBinaryDomainCombination( final Map domain_id_to_second_features_map, + final BinaryDomainCombination bc, + final SortedSet no_mappings ) { + String id0 = ""; + String id1 = ""; + if ( !domain_id_to_second_features_map.containsKey( bc.getId0() ) ) { + no_mappings.add( bc.getId0().getId() ); + id0 = bc.getId0().getId(); + } + else { + id0 = domain_id_to_second_features_map.get( bc.getId0() ); + } + if ( !domain_id_to_second_features_map.containsKey( bc.getId1() ) ) { + no_mappings.add( bc.getId1().getId() ); + id1 = bc.getId1().getId(); + } + else { + id1 = domain_id_to_second_features_map.get( bc.getId1() ); + } + return new BasicBinaryDomainCombination( id0, id1 ); + } + public static CharacterStateMatrix createMatrixOfBinaryDomainCombinationPresenceOrAbsence( final List gwcd_list ) { if ( gwcd_list.isEmpty() ) { throw new IllegalArgumentException( "genome wide combinable domains list is empty" ); @@ -817,8 +834,6 @@ public final class DomainParsimonyCalculator { return matrix; } - - private static int getStateSumDeltaOnNode( final String node_identifier, final CharacterStateMatrix gain_loss_matrix, final GainLossStates state ) {