+ private void executeFitchParsimony( final boolean on_domain_presence,
+ final boolean use_last,
+ final boolean randomize,
+ final long random_number_seed ) {
+ reset();
+ if ( use_last ) {
+ System.out.println( " Fitch parsimony: use_last = true" );
+ }
+ final FitchParsimony<BinaryStates> fitch = new FitchParsimony<BinaryStates>();
+ fitch.setRandomize( randomize );
+ if ( randomize ) {
+ fitch.setRandomNumberSeed( random_number_seed );
+ }
+ fitch.setUseLast( use_last );
+ fitch.setReturnGainLossMatrix( true );
+ fitch.setReturnInternalStates( true );
+ CharacterStateMatrix<BinaryStates> states = null;
+ if ( on_domain_presence ) {
+ states = createMatrixOfDomainPresenceOrAbsence( getGenomeWideCombinableDomainsList() );
+ }
+ else {
+ states = createMatrixOfBinaryDomainCombinationPresenceOrAbsence( getGenomeWideCombinableDomainsList() );
+ }
+ fitch.execute( getPhylogeny(), states, true );
+ setGainLossMatrix( fitch.getGainLossMatrix() );
+ setBinaryInternalStatesMatrix( fitch.getInternalStatesMatrix() );
+ setCost( fitch.getCost() );
+ setTotalGains( fitch.getTotalGains() );
+ setTotalLosses( fitch.getTotalLosses() );
+ setTotalUnchanged( fitch.getTotalUnchanged() );
+ }
+
+ 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" );
+ }
+ final FitchParsimony<BinaryStates> fitch = new FitchParsimony<BinaryStates>();
+ fitch.setRandomize( randomize );
+ if ( randomize ) {
+ fitch.setRandomNumberSeed( random_number_seed );
+ }
+ fitch.setUseLast( use_last );
+ fitch.setReturnGainLossMatrix( true );
+ fitch.setReturnInternalStates( true );
+ final Map<String, Set<String>> map = getDomainIdToSecondaryFeaturesMap();
+ final Map<String, String> newmap = new HashMap<String, String>();
+ final Iterator<Entry<String, Set<String>>> it = map.entrySet().iterator();
+ while ( it.hasNext() ) {
+ final Map.Entry<String, Set<String>> pair = it.next();
+ if ( pair.getValue().size() != 1 ) {
+ throw new IllegalArgumentException( pair.getKey() + " mapps to " + pair.getValue().size() + " items" );
+ }
+ newmap.put( pair.getKey(), ( String ) pair.getValue().toArray()[ 0 ] );
+ }
+ final CharacterStateMatrix<BinaryStates> states = createMatrixOfSecondaryFeatureBinaryDomainCombinationPresenceOrAbsence( getGenomeWideCombinableDomainsList(),
+ newmap );
+ fitch.execute( getPhylogeny(), states, true );
+ setGainLossMatrix( fitch.getGainLossMatrix() );
+ setBinaryInternalStatesMatrix( fitch.getInternalStatesMatrix() );
+ setCost( fitch.getCost() );
+ setTotalGains( fitch.getTotalGains() );
+ setTotalLosses( fitch.getTotalLosses() );
+ setTotalUnchanged( fitch.getTotalUnchanged() );