+ private static void processMrBayes3Data( final String s, final PhylogenyNode node_to_annotate )
+ throws NHXFormatException {
+ double sd = -1;
+ final Matcher mb_prob_sd_matcher = MB_PROB_SD_PATTERN.matcher( s );
+ if ( mb_prob_sd_matcher.find() ) {
+ try {
+ sd = Double.parseDouble( mb_prob_sd_matcher.group( 1 ) );
+ }
+ catch ( final NumberFormatException e ) {
+ throw new NHXFormatException( "failed to parse probability standard deviation (Mr Bayes output) from \""
+ + s + "\"" );
+ }
+ }
+ final Matcher mb_prob_matcher = MB_PROB_PATTERN.matcher( s );
+ if ( mb_prob_matcher.find() ) {
+ double prob = -1;
+ try {
+ prob = Double.parseDouble( mb_prob_matcher.group( 1 ) );
+ }
+ catch ( final NumberFormatException e ) {
+ throw new NHXFormatException( "failed to parse probability (Mr Bayes output) from \"" + s + "\"" );
+ }
+ if ( prob >= 0.0 ) {
+ if ( sd >= 0.0 ) {
+ node_to_annotate.getBranchData()
+ .addConfidence( new Confidence( prob, "posterior probability", sd ) );
+ }
+ else {
+ node_to_annotate.getBranchData().addConfidence( new Confidence( prob, "posterior probability" ) );
+ }
+ }
+ }
+ final Matcher mb_bl_matcher = MB_BL_PATTERN.matcher( s );
+ if ( mb_bl_matcher.find() ) {
+ double bl = -1;
+ try {
+ bl = Double.parseDouble( mb_bl_matcher.group( 1 ) );
+ }
+ catch ( final NumberFormatException e ) {
+ throw new NHXFormatException( "failed to parse median branch length (Mr Bayes output) from \"" + s
+ + "\"" );
+ }
+ if ( bl >= 0.0 ) {
+ node_to_annotate.setDistanceToParent( bl );
+ }
+ }
+ }
+