const Real ROUND_TO_ZERO_SLOPE = 0.02;
const int ROUND_TO_ZERO_POINTS = 4;
-extern bool debug_beam_quanting_flag;
-
static Real
shrink_extra_weight (Real x, Real fac)
{
#if DEBUG_QUANTING
SCM inspect_quants = me->get_property ("inspect-quants");
- if (debug_beam_quanting_flag
+ if (to_boolean (me->get_paper ()->lookup_variable (ly_symbol2scm ("debug-beam-quanting")))
&& ly_c_pair_p (inspect_quants))
{
Drul_array<Real> ins = ly_scm2interval (inspect_quants);
#endif
me->set_property ("positions",
- ly_interval2scm (Drul_array<Real> (qscores[best_idx].yl,
- qscores[best_idx].yr)));
+ ly_interval2scm (Drul_array<Real> (qscores[best_idx].yl,
+ qscores[best_idx].yr)));
#if DEBUG_QUANTING
- if (debug_beam_quanting_flag)
+ if (to_boolean (me->get_paper ()->lookup_variable (ly_symbol2scm ("debug-beam-quanting"))))
{
qscores[best_idx].score_card_ += to_string ("i%d", best_idx);
// debug quanting
me->set_property ("quant-score",
- scm_makfrom0str (qscores[best_idx].score_card_.to_str0 ()));
+ scm_makfrom0str (qscores[best_idx].score_card_.to_str0 ()));
}
#endif
Real extra_demerit = SECONDARY_BEAM_DEMERIT / (beam_counts[LEFT] >? beam_counts[RIGHT]);
- /*
- Inside the staff, inter quants are forbidden.
- */
- Real dem = 0.0;
Direction d = LEFT;
- do
- {
- if (fabs (y[d]) <= (radius + 0.5) && fabs (my_modf (y[d]) - 0.5) < BEAM_EPS)
- dem += INTER_QUANT_PENALTY;
- }
- while ((flip (&d))!= LEFT);
-
+ Real dem = 0.0;
+
do
{
for (int j = 1; j <= beam_counts[d]; j++)
{
- /*
- see if the outer staffline falls in a beam-gap
-
- This test is too weak; we should really check all lines.
- */
Direction stem_dir = dirs[d];
/*
borderline cases. If we do 2.0, then the upper outer line
will be in the gap of the (2,sit) quant, leading to a
false demerit.
- */
- Real gap1 = y[d] - stem_dir * ((j-1) * beam_translation + thickness / 2 - slt/2.2 );
+ */
+ Real gap1 = y[d] - stem_dir * ((j-1) * beam_translation + thickness / 2 - slt/2.2 );
Real gap2 = y[d] - stem_dir * (j * beam_translation - thickness / 2 + slt/2.2);
Interval gap;
for (Real k = - radius ;
k <= radius + BEAM_EPS; k += 1.0)
if (gap.contains (k))
- dem += extra_demerit;
+ {
+ Real dist = fabs (gap[UP]-k) <? fabs (gap[DOWN] - k);
+
+ /*
+ this parameter is tuned to grace-stem-length.ly
+ */
+ Real fixed_demerit = 0.4;
+
+ dem += extra_demerit
+ * (fixed_demerit +
+ (1-fixed_demerit) * (dist / gap.length())* 2);
+ }
}
}
while ((flip (&d))!= LEFT);