+ vector<Stem_info> stem_infos_;
+ vector<Real> chord_start_y_;
+ vector<Interval> head_positions_;
+ vector<Slice> beam_multiplicity_;
+ vector<bool> is_normal_;
+ vector<Real> base_lengths_;
+ vector<Real> stem_xpositions_;
+ vector<Real> stem_ypositions_;
+
+ bool is_xstaff_;
+ bool is_knee_;
+
+ Beam_quant_parameters parameters_;
+
+ Real staff_radius_;
+ Drul_array<int> edge_beam_counts_;
+ Drul_array<Direction> edge_dirs_;
+
+ // Half-open intervals, representing allowed positions for the beam,
+ // starting from close to the notehead to the direction of the stem
+ // end. This is used for quickly weeding out invalid
+ // Beam_configurations.
+ Drul_array<Interval> quant_range_;
+ Real beam_translation_;
+ vector<Beam_collision> collisions_;
+ vector<Beam_segment> segments_;
+
+ vsize first_normal_index ();
+ vsize last_normal_index ();
+
+ void init_instance_variables (Grob *me, Drul_array<Real> ys, bool align_broken_intos);
+ void add_collision (Real x, Interval y, Real factor);
+ void no_visible_stem_positions ();
+ void least_squares_positions ();
+ Real calc_concaveness ();
+ void slope_damping ();
+ void shift_region_to_valid ();
+
+ void one_scorer (Beam_configuration *config) const;
+ Beam_configuration *force_score (SCM inspect_quants,
+ const vector<Beam_configuration *> &configs) const;
+ Real y_at (Real x, Beam_configuration const *c) const;