+ staff_radius = Staff_symbol_referencer::staff_radius (beam);
+ edge_beam_counts = Drul_array<int>
+ (Stem::beam_multiplicity (stems[0]).length () + 1,
+ Stem::beam_multiplicity (stems.back ()).length () + 1);
+
+ // TODO - why are we dividing by staff_space?
+ beam_translation = Beam::get_beam_translation (beam) / staff_space;
+
+ d = LEFT;
+ do
+ {
+ quant_range[d].set_full ();
+ if (!edge_stems[d])
+ continue;
+
+ Real stem_offset = edge_stems[d]->relative_coordinate (common[Y_AXIS], Y_AXIS)
+ - beam->relative_coordinate (common[Y_AXIS], Y_AXIS);
+ Interval heads = Stem::head_positions (edge_stems[d]) * 0.5 * staff_space;
+
+ Direction ed = edge_dirs[d];
+ heads.widen (0.5 * staff_space
+ + (edge_beam_counts[d] - 1) * beam_translation + beam_thickness * .5);
+ quant_range[d][-ed] = heads[ed] + stem_offset;
+ }
+ while (flip (&d) != LEFT);
+
+ init_collisions (collisions);
+}
+
+Beam_scoring_problem::Beam_scoring_problem (Grob *me, Drul_array<Real> ys)
+{
+ beam = me;
+ unquanted_y = ys;