+ if (ties_conf
+ && ties_conf->size () == 1)
+ {
+ Direction d = LEFT;
+ Drul_array<Grob*> stems (0, 0);
+ do
+ {
+ if (!spec.note_head_drul_[d])
+ continue;
+
+ Grob *stem = unsmob_grob (spec.note_head_drul_[d]->get_object ("stem"));
+ if (stem
+ && Stem::is_normal_stem (stem))
+ stems[d] = stem;
+ }
+ while (flip (&d) != LEFT);
+
+ bool tie_stem_dir_ok = true;
+ bool tie_position_dir_ok = true;
+ if (stems[LEFT] && !stems[RIGHT])
+ tie_stem_dir_ok = conf->dir_ != get_grob_direction (stems[LEFT]);
+ else if (!stems[LEFT] && stems[RIGHT])
+ tie_stem_dir_ok = conf->dir_ != get_grob_direction (stems[RIGHT]);
+ else if (stems[LEFT] && stems[RIGHT]
+ && get_grob_direction (stems[LEFT]) == get_grob_direction (stems[RIGHT]))
+ tie_stem_dir_ok = conf->dir_ != get_grob_direction (stems[LEFT]);
+ else if (spec.position_)
+ tie_position_dir_ok = conf->dir_ == sign (spec.position_);
+
+ if (!tie_stem_dir_ok)
+ ties_conf->add_score (details_.same_dir_as_stem_penalty_, "tie/stem dir");
+ if (!tie_position_dir_ok)
+ ties_conf->add_score (details_.same_dir_as_stem_penalty_, "tie/pos dir");
+ }
+ while (flip (&d) != LEFT);
+
+