code: static <S extends Sequence<C>, C extends Compound> ProfileProfileAligner<S, C> getProfileProfileAligner(
  			Future<ProfilePair<S, C>> profile1, Future<ProfilePair<S, C>> profile2, ProfileProfileAlignerType type,
  			GapPenalty gapPenalty, SubstitutionMatrix<C> subMatrix) {
  		switch (type) {
  		default:
  		case GLOBAL:
  			return new SimpleProfileProfileAligner<S, C>(profile1, profile2, gapPenalty, subMatrix);
  		case GLOBAL_LINEAR_SPACE:
  		case GLOBAL_CONSENSUS:
  		case LOCAL:
  		case LOCAL_LINEAR_SPACE:
  		case LOCAL_CONSENSUS:
  			// TODO other alignment options (Myers-Miller, consensus, local)
  			throw new UnsupportedOperationException(Alignments.class.getSimpleName() + " does not yet support " +
  					type + " alignment");
  		}
  	}
docs: Factory method which constructs a profile-profile aligner.
  
  @param <S> each {@link Sequence} of an alignment profile is of type S
  @param <C> each element of an {@link AlignedSequence} is a {@link Compound} of type C
  @param profile1 the first {@link Profile} to align
  @param profile2 the second {@link Profile} to align
  @param type chosen type from list of profile-profile alignment routines
  @param gapPenalty the gap penalties used during alignment
  @param subMatrix the set of substitution scores used during alignment
  @return profile-profile aligner