class PerturbBranch : public feasst::PerturbMove

Branching is a complex operation because of the correlation between multiple angles. See BondThreeBody for more information.

Public Functions

void precompute(TrialSelect *select, System *system)

Same as PerturbDistanceAngle, but for two sets of angles/bonds. Also, obtain the angle parameters between the two mobile branch sites.

void place_in_branch(const double distance, const double angle, const double branch_angle, const double extra_angle, System *system, TrialSelect *select, Random *random)

Place second mobile site in branch as described in SelectBranch.

param extra_angle:

Angle formed by the first mobile site and both anchors. Used to check for a planar branch.

void move(const bool is_position_held, System *system, TrialSelect *select, Random *random, Acceptance *acceptance)

Move the selection of the system.