public boolean attemptToMergeOtherNodeToThisNode( ENode otherNode ) throws Exception
	{
		if( this.level != otherNode.level )
			throw new Exception("Two nodes must be at same level " + this.level + " " + otherNode.level);
		
		ProbSequence possibleSeq = ProbNW.align(this.probSequence, otherNode.probSequence);
		
		if( possibleSeq.getAverageDistance() <= this.level)
		{
			possibleSeq.setMapCount(this.getProbSequence(), otherNode.getProbSequence());
			this.setProbSequence(possibleSeq);
			for( ENode otherDaughter : otherNode.daughters )
			{
				boolean merged = false;
				
				for( ENode thisDaughter : this.daughters )
				{
					if( ! merged)
					{
						merged = thisDaughter.attemptToMergeOtherNodeToThisNode(otherDaughter);
					}
				}
				
				if( ! merged)
					this.daughters.add(otherDaughter);
			}
			
			return true;
		}
		
		return false;
	}