| 28 |
#define LATTICEFIGUREOFMERIT_HH_ |
#define LATTICEFIGUREOFMERIT_HH_ |
| 29 |
|
|
| 30 |
#include "../utility_data_structure/nrutil_nr.hh" |
#include "../utility_data_structure/nrutil_nr.hh" |
| 31 |
#include "../utility_data_structure/SymMat43.hh" |
#include "../utility_data_structure/SymMatNplus1N.hh" |
| 32 |
#include "../utility_data_structure/VecDat3.hh" |
#include "../utility_data_structure/VecDat3.hh" |
| 33 |
#include "../utility_func/transform_sym_matrix.hh" |
#include "../utility_func/transform_sym_matrix.hh" |
| 34 |
#include "../utility_func/lattice_constant.hh" |
#include "../utility_func/lattice_constant.hh" |
| 35 |
#include "../utility_func/chToDouble.hh" |
#include "../utility_func/chToDouble.hh" |
| 36 |
#include "../utility_lattice_reduction/matrix_4by4.hh" |
#include "../utility_lattice_reduction/matrix_NbyN.hh" |
| 37 |
#include "../bravais_lattice/enumBravaisLattice.hh" |
#include "../centring_type/enumCentringType.hh" |
| 38 |
#include "../point_group/enumPointGroup.hh" |
#include "../point_group/enumPointGroup.hh" |
| 39 |
#include "../laue_group/LaueGroup.hh" |
#include "../laue_group/LaueGroup.hh" |
| 40 |
#include "../zparam/ZParawError.hh" |
#include "../zparam/ZParawError.hh" |
| 42 |
#include "../bravais_type/BravaisType.hh" |
#include "../bravais_type/BravaisType.hh" |
| 43 |
#include "enumSortCriterion.hh" |
#include "enumSortCriterion.hh" |
| 44 |
#include "HKL_Q.hh" |
#include "HKL_Q.hh" |
| 45 |
#include "lattice_symmetry.hh" |
#include "check_equiv.hh" |
| 46 |
|
|
| 47 |
|
|
| 48 |
class SetOfFigureOfMerit |
// Class for outputting information about a lattice in index file. |
| 49 |
|
class LatticeFigureOfMerit |
| 50 |
{ |
{ |
| 51 |
private: |
friend inline bool operator<(const LatticeFigureOfMerit& lhs, const LatticeFigureOfMerit& rhs); |
|
Int4 m_num_ref_figure_of_merit; |
|
|
Int4 m_num_q_observed; |
|
|
Double m_num_total_hkl; |
|
|
// Int4 m_num_total_hkl_disc; |
|
|
Double m_figure_of_merit_Wolff; |
|
|
Double m_figure_of_merit_Wu; |
|
|
// Double m_normalized_figure_of_merit_Wolff; |
|
|
Double m_reversed_figure_of_merit; |
|
|
|
|
|
// Double m_figure_of_merit_Wolff_original; |
|
|
// Double m_figure_of_merit_Wu_original; |
|
|
|
|
|
static string putStrFigureOfMeritWolff(const Int4& num_ref_fom){ return putLabel(SCM) + num2str(num_ref_fom); }; |
|
|
static string putStrFigureOfMeritWu(const Int4& num_ref_fom){ return putLabel(SCWuM) + num2str(num_ref_fom); }; |
|
|
// static string putStrNormalizedFigureOfMeritWolff(const Int4& num_ref_fom){ return putLabel(SCNormM) + num2str(num_ref_fom); }; |
|
|
static string putStrReversedFigureOfMeritWolff(const Int4& num_ref_fom){ return putLabel(SCRevM) + num2str(num_ref_fom); }; |
|
|
static string putStrSymmetricFigureOfMeritWolff(const Int4& num_ref_fom){ return putLabel(SCSymM) + num2str(num_ref_fom); }; |
|
|
|
|
|
// static string putStrFigureOfMeritWolff_Original(const Int4& num_ref_fom){ return "M" + num2str(num_ref_fom) + "(Original)"; }; |
|
|
// static string putStrFigureOfMeritWu_Original(const Int4& num_ref_fom){ return "Mwu" + num2str(num_ref_fom) + "(Original)"; }; |
|
| 52 |
|
|
| 53 |
public: |
public: |
| 54 |
SetOfFigureOfMerit(){ this->reset(); } |
class SetOfFigureOfMerit |
|
~SetOfFigureOfMerit(){} |
|
|
|
|
|
inline void reset() |
|
| 55 |
{ |
{ |
| 56 |
m_num_ref_figure_of_merit = 0; |
private: |
| 57 |
m_num_q_observed = 0; |
Int4 m_num_ref_figure_of_merit; |
| 58 |
m_num_total_hkl = 0.0; |
Int4 m_num_q_observed; |
| 59 |
// m_num_total_hkl_disc = 0; |
Double m_num_total_hkl; |
| 60 |
m_figure_of_merit_Wolff = 0.0; |
Double m_figure_of_merit_Wolff; |
| 61 |
m_figure_of_merit_Wu = 0.0; |
Double m_figure_of_merit_Wu; |
| 62 |
// m_normalized_figure_of_merit_Wolff = 0.0; |
Double m_reversed_figure_of_merit; |
| 63 |
m_reversed_figure_of_merit = 0.0; |
|
| 64 |
|
static string putStrFigureOfMeritWolff(const Int4& num_ref_fom){ return putLabel(SCM) + num2str(num_ref_fom); }; |
| 65 |
|
static string putStrFigureOfMeritWu(const Int4& num_ref_fom){ return putLabel(SCWuM) + num2str(num_ref_fom); }; |
| 66 |
|
static string putStrReversedFigureOfMeritWolff(const Int4& num_ref_fom){ return putLabel(SCRevM) + num2str(num_ref_fom); }; |
| 67 |
|
static string putStrSymmetricFigureOfMeritWolff(const Int4& num_ref_fom){ return putLabel(SCSymM) + num2str(num_ref_fom); }; |
| 68 |
|
|
| 69 |
|
public: |
| 70 |
|
SetOfFigureOfMerit(){ this->reset(); } |
| 71 |
|
~SetOfFigureOfMerit(){} |
| 72 |
|
|
| 73 |
|
inline void reset() |
| 74 |
|
{ |
| 75 |
|
m_num_ref_figure_of_merit = 0; |
| 76 |
|
m_num_q_observed = 0; |
| 77 |
|
m_num_total_hkl = 0.0; |
| 78 |
|
m_figure_of_merit_Wolff = 0.0; |
| 79 |
|
m_figure_of_merit_Wu = 0.0; |
| 80 |
|
m_reversed_figure_of_merit = 0.0; |
| 81 |
|
} |
| 82 |
|
|
| 83 |
|
inline Int4& putNumberOfReflectionsForFigureOfMerit() { return m_num_ref_figure_of_merit; }; |
| 84 |
|
inline Int4& putNumQobsAssociatedWithCloseHKL() { return m_num_q_observed; }; |
| 85 |
|
inline Double& putContinuousNumberOfHKLInRange() { return m_num_total_hkl; }; |
| 86 |
|
|
| 87 |
|
inline const Int4& putNumQobsAssociatedWithCloseHKL() const { return m_num_q_observed; }; |
| 88 |
|
inline const Int4& putNumberOfReflectionsForFigureOfMerit() const { return m_num_ref_figure_of_merit; }; |
| 89 |
|
inline const Double& putContinuousNumberOfHKLInRange() const { return m_num_total_hkl; }; |
| 90 |
|
|
| 91 |
|
inline Double& putFigureOfMeritWolff() { return m_figure_of_merit_Wolff; }; |
| 92 |
|
inline Double& putFigureOfMeritWu() { return m_figure_of_merit_Wu; }; |
| 93 |
|
inline Double& putReversedFigureOfMerit() { return m_reversed_figure_of_merit; }; |
| 94 |
|
|
| 95 |
|
inline const Double& putFigureOfMeritWolff() const { return m_figure_of_merit_Wolff; }; |
| 96 |
|
inline const Double& putFigureOfMeritWu() const { return m_figure_of_merit_Wu; }; |
| 97 |
|
inline const Double& putReversedFigureOfMerit() const { return m_reversed_figure_of_merit; }; |
| 98 |
|
|
| 99 |
|
inline string putLabel_FigureOfMeritWolff() const { return putStrFigureOfMeritWolff(m_num_ref_figure_of_merit); }; |
| 100 |
|
inline string putLabel_FigureOfMeritWu() const { return putStrFigureOfMeritWu(m_num_ref_figure_of_merit); }; |
| 101 |
|
inline string putLabel_ReversedFigureOfMeritWolff() const { return putStrReversedFigureOfMeritWolff(m_num_ref_figure_of_merit); }; |
| 102 |
|
inline string putLabel_SymmetricFigureOfMeritWolff() const { return putStrSymmetricFigureOfMeritWolff(m_num_ref_figure_of_merit); }; |
| 103 |
|
|
| 104 |
// m_figure_of_merit_Wolff_original = 0.0; |
inline Double putSymmetricFigureOfMerit() const { return m_reversed_figure_of_merit * m_figure_of_merit_Wolff; }; |
| 105 |
// m_figure_of_merit_Wu_original = 0.0; |
}; |
|
} |
|
|
|
|
|
inline Int4& putNumberOfReflectionsForFigureOfMerit() { return m_num_ref_figure_of_merit; }; |
|
|
inline Int4& putNumQobsAssociatedWithCloseHKL() { return m_num_q_observed; }; |
|
|
inline Double& putContinuousNumberOfHKLInRange() { return m_num_total_hkl; }; |
|
|
// inline Int4& putDiscreteNumberOfHKLInRange() { return m_num_total_hkl_disc; }; |
|
|
|
|
|
inline const Int4& putNumQobsAssociatedWithCloseHKL() const { return m_num_q_observed; }; |
|
|
inline const Int4& putNumberOfReflectionsForFigureOfMerit() const { return m_num_ref_figure_of_merit; }; |
|
|
inline const Double& putContinuousNumberOfHKLInRange() const { return m_num_total_hkl; }; |
|
|
// inline const Int4& putDiscreteNumberOfHKLInRange() const { return m_num_total_hkl_disc; }; |
|
|
|
|
|
inline Double& putFigureOfMeritWolff() { return m_figure_of_merit_Wolff; }; |
|
|
inline Double& putFigureOfMeritWu() { return m_figure_of_merit_Wu; }; |
|
|
// inline Double& putNormalizedFigureOfMeritWolff() { return m_normalized_figure_of_merit_Wolff; }; |
|
|
inline Double& putReversedFigureOfMerit() { return m_reversed_figure_of_merit; }; |
|
|
|
|
|
inline const Double& putFigureOfMeritWolff() const { return m_figure_of_merit_Wolff; }; |
|
|
inline const Double& putFigureOfMeritWu() const { return m_figure_of_merit_Wu; }; |
|
|
// inline const Double& putNormalizedFigureOfMeritWolff() const { return m_normalized_figure_of_merit_Wolff; }; |
|
|
inline const Double& putReversedFigureOfMerit() const { return m_reversed_figure_of_merit; }; |
|
|
|
|
|
inline string putLabel_FigureOfMeritWolff() const { return putStrFigureOfMeritWolff(m_num_ref_figure_of_merit); }; |
|
|
inline string putLabel_FigureOfMeritWu() const { return putStrFigureOfMeritWu(m_num_ref_figure_of_merit); }; |
|
|
// inline string putLabel_NormalizedFigureOfMeritWolff() const { return putStrNormalizedFigureOfMeritWolff(m_num_ref_figure_of_merit); }; |
|
|
inline string putLabel_ReversedFigureOfMeritWolff() const { return putStrReversedFigureOfMeritWolff(m_num_ref_figure_of_merit); }; |
|
|
inline string putLabel_SymmetricFigureOfMeritWolff() const { return putStrSymmetricFigureOfMeritWolff(m_num_ref_figure_of_merit); }; |
|
|
|
|
|
inline Double putSymmetricFigureOfMerit() const { return m_reversed_figure_of_merit * m_figure_of_merit_Wolff; }; |
|
|
|
|
|
// inline Double& putFigureOfMeritWolff_Original() { return m_figure_of_merit_Wolff_original; }; |
|
|
// inline const Double& putFigureOfMeritWolff_Original() const { return m_figure_of_merit_Wolff_original; }; |
|
|
// inline Double& putFigureOfMeritWu_Original() { return m_figure_of_merit_Wu_original; }; |
|
|
// inline const Double& putFigureOfMeritWu_Original() const { return m_figure_of_merit_Wu_original; }; |
|
|
}; |
|
|
|
|
|
|
|
|
// Class for outputting information about a lattice in index file. |
|
|
class LatticeFigureOfMerit |
|
|
{ |
|
|
friend inline bool operator<(const LatticeFigureOfMerit& lhs, const LatticeFigureOfMerit& rhs); |
|
| 106 |
|
|
| 107 |
private: |
private: |
| 108 |
static const NRMat<Int4> m_tmat_prim_to_face; |
static const NRMat<Int4> m_tmat_prim_to_face; |
| 117 |
// m_S_optimized.second * m_S_optimized.first * Transpose(m_S_optimized.second) is obtuse. |
// m_S_optimized.second * m_S_optimized.first * Transpose(m_S_optimized.second) is obtuse. |
| 118 |
SymMat43_Double m_S_optimized; |
SymMat43_Double m_S_optimized; |
| 119 |
|
|
| 120 |
// The inverse of m_S_red is Minkowski-reduced. |
// The inverse of m_S_red is Buerger-reduced. |
| 121 |
SymMat<Double> m_S_red; |
SymMat<Double> m_S_red; |
| 122 |
|
|
| 123 |
Double m_determ_S_red; |
Double m_determ_S_red; |
| 125 |
SetOfFigureOfMerit m_figures_of_merit; |
SetOfFigureOfMerit m_figures_of_merit; |
| 126 |
|
|
| 127 |
// Sets m_S_red from m_S_optimized. |
// Sets m_S_red from m_S_optimized. |
| 128 |
// On output, trans_mat gives the matrix such that trans_mat * m_S_red * transpose(trans_mat) equals the original m_S_optimized. |
// On output, trans_mat gives the matrix such that trans_mat * m_S_red * transpose(trans_mat) = m_S_optimized.first. |
| 129 |
void setInverseOfMinkowskiReducedForm(NRMat<Int4>& trans_mat); |
void setInverseOfBuergerReducedForm(NRMat<Int4>& trans_mat); |
| 130 |
|
|
| 131 |
|
// Returns unit-cell parameters with other centrings using m_S_red. |
| 132 |
|
void putEquivalentLatticeConstantsDegreeWithOtherCentring(const eABCaxis& abc_axis, |
| 133 |
|
const eRHaxis& rh_axis, |
| 134 |
|
const Double& resol, |
| 135 |
|
vector< pair< eBravaisType, SymMat<Double> > >& ans) const; |
| 136 |
|
|
| 137 |
protected: |
protected: |
| 138 |
static const Double m_cv2; |
static const Double m_cv2; |
| 144 |
const SymMat43_Double& S_red); |
const SymMat43_Double& S_red); |
| 145 |
virtual ~LatticeFigureOfMerit(){}; |
virtual ~LatticeFigureOfMerit(){}; |
| 146 |
|
|
| 147 |
void putMillerIndicesInRange(const Double& qrange_begin, const Double& qrange_end, |
void putMillerIndicesInRange(const Double& qrange_end, |
| 148 |
vector<HKL_Q>& cal_hkl_tray) const; |
vector<HKL_Q>& cal_hkl_tray) const; |
| 149 |
|
|
| 150 |
|
void setDeWolffFigureOfMerit(const Int4& num_ref_figure_of_merit, const vector<QData>& qdata); |
| 151 |
|
|
| 152 |
void setWuFigureOfMerit(const Int4& num_ref_figure_of_merit, const vector<QData>& qdata, |
void setWuFigureOfMerit(const Int4& num_ref_figure_of_merit, const vector<QData>& qdata, |
| 153 |
const Double& min_thred_num_hkl, |
const Double& min_thred_num_hkl, |
| 154 |
const Double& max_thred_num_hkl); |
const Double& max_thred_num_hkl); |
| 158 |
void setFigureOfMerit(const Int4& num_ref_figure_of_merit, const vector<QData>& qdata, |
void setFigureOfMerit(const Int4& num_ref_figure_of_merit, const vector<QData>& qdata, |
| 159 |
vector< VecDat3<Int4> >& closest_hkl_tray, |
vector< VecDat3<Int4> >& closest_hkl_tray, |
| 160 |
Vec_BOOL& Q_observed_flag); |
Vec_BOOL& Q_observed_flag); |
| 161 |
|
|
| 162 |
inline void setFigureOfMerit(const Int4& num_ref_figure_of_merit, const vector<QData>& qdata) |
inline void setFigureOfMerit(const Int4& num_ref_figure_of_merit, const vector<QData>& qdata) |
| 163 |
{ |
{ |
| 164 |
vector< VecDat3<Int4> > closest_hkl_tray; |
vector< VecDat3<Int4> > closest_hkl_tray; |
| 181 |
// Output information on the lattice. |
// Output information on the lattice. |
| 182 |
void printLatticeInformation(const eABCaxis& abc_axis, |
void printLatticeInformation(const eABCaxis& abc_axis, |
| 183 |
const eRHaxis& rh_axis, |
const eRHaxis& rh_axis, |
| 184 |
|
const Double& resol, |
| 185 |
const Int4& label_start0, |
const Int4& label_start0, |
| 186 |
ostream* os) const; |
ostream* os) const; |
| 187 |
|
|
| 223 |
inline const Double& putCriticalValueSquare() const { return m_cv2; }; |
inline const Double& putCriticalValueSquare() const { return m_cv2; }; |
| 224 |
|
|
| 225 |
inline const ePointGroup& enumLaueGroup() const { return m_brat.enumLaueGroup(); }; |
inline const ePointGroup& enumLaueGroup() const { return m_brat.enumLaueGroup(); }; |
| 226 |
inline const eBravaisLattice& enumBravaisLattice() const { return m_brat.enumBravaisLattice(); }; |
inline const eCentringType& enumCentringType() const { return m_brat.enumCentringType(); }; |
| 227 |
inline const eCrystalSystem& enumCrystalSystem() const { return m_brat.enumCrystalSystem(); }; |
inline const eBravaisType& enumBravaisType() const { return m_brat.enumBravaisType(); }; |
| 228 |
inline const BravaisType& putBravaisType() const { return m_brat; }; |
inline const BravaisType& putBravaisType() const { return m_brat; }; |
| 229 |
|
|
| 230 |
// The returned matrix is Minkowski-reduced matrix equivalent with m_S_red_optimized. |
// The returned matrix is Buerger-reduced matrix equivalent with m_S_red_optimized. |
| 231 |
inline const SymMat<Double>& putInverseOfMinkowskiReducedForm() const { return m_S_red; }; |
inline const SymMat<Double>& putInverseOfBuergerReducedForm() const { return m_S_red; }; |
| 232 |
|
|
|
// inline const SymMat<Double>& putOptimizedForm() const { return m_S_red_optimized.first; }; |
|
| 233 |
inline const SymMat43_Double& putOptimizedForm() const { return m_S_optimized; }; |
inline const SymMat43_Double& putOptimizedForm() const { return m_S_optimized; }; |
| 234 |
inline SymMat<Double> putSellingReducedForm() const { return transform_sym_matrix(m_S_optimized.second, m_S_optimized.first); }; |
inline SymMat<Double> putSellingReducedForm() const { return transform_sym_matrix(m_S_optimized.second, m_S_optimized.first); }; |
| 235 |
|
|
| 237 |
inline const SetOfFigureOfMerit& putFiguresOfMerit() const { return m_figures_of_merit; }; |
inline const SetOfFigureOfMerit& putFiguresOfMerit() const { return m_figures_of_merit; }; |
| 238 |
|
|
| 239 |
// Put-functions (Returns a non-constant reference.) |
// Put-functions (Returns a non-constant reference.) |
| 240 |
inline SetOfFigureOfMerit& putFiguresOfMerit() { return m_figures_of_merit; }; |
// Returns almost equivalent unit-cell parameters of different centring-types. |
| 241 |
|
void putEquivalentLatticeConstantsDegreeWithOtherCentring(const eABCaxis& abc_axis, |
| 242 |
|
const eRHaxis& rh_axis, |
| 243 |
|
const Double& resol, |
| 244 |
|
vector< pair< eBravaisType, pair< VecDat3<Double>, VecDat3<Double> > > >& ans) const; |
| 245 |
|
|
| 246 |
static bool cmpFOMdeWolff(const LatticeFigureOfMerit& lhs, const LatticeFigureOfMerit& rhs) |
static bool cmpFOMdeWolff(const LatticeFigureOfMerit& lhs, const LatticeFigureOfMerit& rhs) |
| 247 |
{ |
{ |
| 253 |
return lhs.m_figures_of_merit.putFigureOfMeritWu() > rhs.m_figures_of_merit.putFigureOfMeritWu(); |
return lhs.m_figures_of_merit.putFigureOfMeritWu() > rhs.m_figures_of_merit.putFigureOfMeritWu(); |
| 254 |
} |
} |
| 255 |
|
|
|
// static bool cmpFOM(const LatticeFigureOfMerit& lhs, const LatticeFigureOfMerit& rhs) |
|
|
// { |
|
|
// return lhs.m_figures_of_merit.putNormalizedFigureOfMeritWolff() > rhs.m_figures_of_merit.putNormalizedFigureOfMeritWolff(); |
|
|
// } |
|
|
|
|
| 256 |
static bool cmpFOMReversed(const LatticeFigureOfMerit& lhs, const LatticeFigureOfMerit& rhs) |
static bool cmpFOMReversed(const LatticeFigureOfMerit& lhs, const LatticeFigureOfMerit& rhs) |
| 257 |
{ |
{ |
| 258 |
return lhs.m_figures_of_merit.putReversedFigureOfMerit() > rhs.m_figures_of_merit.putReversedFigureOfMerit(); |
return lhs.m_figures_of_merit.putReversedFigureOfMerit() > rhs.m_figures_of_merit.putReversedFigureOfMerit(); |
| 263 |
return lhs.m_figures_of_merit.putSymmetricFigureOfMerit() > rhs.m_figures_of_merit.putSymmetricFigureOfMerit(); |
return lhs.m_figures_of_merit.putSymmetricFigureOfMerit() > rhs.m_figures_of_merit.putSymmetricFigureOfMerit(); |
| 264 |
} |
} |
| 265 |
|
|
|
// static bool cmpFOMdeWolff_Original(const LatticeFigureOfMerit& lhs, const LatticeFigureOfMerit& rhs) |
|
|
// { |
|
|
// return lhs.m_figures_of_merit.putFigureOfMeritWolff_Original() > rhs.m_figures_of_merit.putFigureOfMeritWolff_Original(); |
|
|
// } |
|
|
// |
|
|
// static bool cmpFOMWu_Original(const LatticeFigureOfMerit& lhs, const LatticeFigureOfMerit& rhs) |
|
|
// { |
|
|
// return lhs.m_figures_of_merit.putFigureOfMeritWu_Original() > rhs.m_figures_of_merit.putFigureOfMeritWu_Original(); |
|
|
// } |
|
|
|
|
|
|
|
| 266 |
// For GUI |
// For GUI |
| 267 |
const BravaisType &getref_m_brat() const {return m_brat;} |
const BravaisType &getref_m_brat() const {return m_brat;} |
| 268 |
BravaisType &getref_m_brat() {return m_brat;} |
BravaisType &getref_m_brat() {return m_brat;} |
| 300 |
const eABCaxis& axis1, |
const eABCaxis& axis1, |
| 301 |
const eRHaxis& axis2, VecDat3<Double>& length_axis, VecDat3<Double>& angle_axis) const |
const eRHaxis& axis2, VecDat3<Double>& length_axis, VecDat3<Double>& angle_axis) const |
| 302 |
{ |
{ |
| 303 |
putLatticeConstantsDegree( m_brat, this->putInverseOfMinkowskiReducedForm(), |
putLatticeConstantsDegree( m_brat, this->putInverseOfBuergerReducedForm(), |
| 304 |
axis1, axis2, length_axis, angle_axis ); |
axis1, axis2, length_axis, angle_axis ); |
| 305 |
} |
} |
| 306 |
|
|
| 322 |
|
|
| 323 |
inline void LatticeFigureOfMerit::reduceLatticeConstants(NRMat<Int4>& trans_mat) |
inline void LatticeFigureOfMerit::reduceLatticeConstants(NRMat<Int4>& trans_mat) |
| 324 |
{ |
{ |
| 325 |
setInverseOfMinkowskiReducedForm(trans_mat); |
setInverseOfBuergerReducedForm(trans_mat); |
| 326 |
m_S_optimized.first = m_S_red; |
m_S_optimized.first = m_S_red; |
| 327 |
m_S_optimized.second = mprod(m_S_optimized.second, trans_mat); |
m_S_optimized.second = mprod(m_S_optimized.second, trans_mat); |
| 328 |
} |
} |
| 355 |
return lhs.m_determ_S_red < rhs.m_determ_S_red; |
return lhs.m_determ_S_red < rhs.m_determ_S_red; |
| 356 |
} |
} |
| 357 |
|
|
| 358 |
void putTransformMatrixToMinkowskiReduced(const SymMat<Double>& S, NRMat<Int4>& trans_mat); |
void putTransformMatrixToBuergerReduced(const SymMat<Double>& S, NRMat<Int4>& trans_mat); |
| 359 |
|
|
| 360 |
#endif /*LATTICEFIGUREOFMERIT_HH_*/ |
#endif /*LATTICEFIGUREOFMERIT_HH_*/ |