/** Set box from unit cell matrix. */ void Box::SetBox(Matrix_3x3 const& ucell) { Vec3 x_axis = ucell.Row1(); Vec3 y_axis = ucell.Row2(); Vec3 z_axis = ucell.Row3(); box_[0] = x_axis.Normalize(); // A box_[1] = y_axis.Normalize(); // B box_[2] = z_axis.Normalize(); // C box_[3] = y_axis.Angle( z_axis ) * Constants::RADDEG; // alpha box_[4] = x_axis.Angle( z_axis ) * Constants::RADDEG; // beta box_[5] = x_axis.Angle( y_axis ) * Constants::RADDEG; // gamma SetBoxType(); }
void Action_Vector::Principal(Frame const& currentFrame) { Matrix_3x3 Inertia; Vec3 Eval; // Origin is center of atoms in mask_ Vec3 OXYZ = currentFrame.CalculateInertia( mask_, Inertia ); // NOTE: Diagonalize_Sort_Chirality places sorted eigenvectors in rows. Inertia.Diagonalize_Sort_Chirality( Eval, 0 ); // Eval.Print("PRINCIPAL EIGENVALUES"); // Inertia.Print("PRINCIPAL EIGENVECTORS (Rows)"); if ( mode_ == PRINCIPAL_X ) Vec_->AddVxyz( Inertia.Row1(), OXYZ ); // First row = first eigenvector else if ( mode_ == PRINCIPAL_Y ) Vec_->AddVxyz( Inertia.Row2(), OXYZ ); // Second row = second eigenvector else // PRINCIPAL_Z Vec_->AddVxyz( Inertia.Row3(), OXYZ ); // Third row = third eigenvector }