Skip to content

Commit

Permalink
Refs #11006. Removing comments, performance improvements.
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Wedel committed Mar 1, 2015
1 parent d03774c commit 556d2d9
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 666 deletions.
245 changes: 46 additions & 199 deletions Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/PointGroup.h
Expand Up @@ -16,6 +16,46 @@

namespace Mantid {
namespace Geometry {

class MANTID_GEOMETRY_DLL IndexPermutation {
public:
IndexPermutation(const Kernel::IntMatrix &matrix) : m_factors() {
for (size_t i = 0; i < matrix.numRows(); ++i) {
m_factors.push_back(IndexSum(i, matrix[i]));
}
}

Kernel::V3D getPermutation(const Kernel::V3D &hkl) const {
Kernel::V3D hklPrime(0, 0, 0);
for (auto it = m_factors.begin(); it != m_factors.end(); ++it) {
hklPrime[(*it).getIndex()] = (*it).transformed(hkl);
}

return hklPrime;
}

private:
class IndexSum {
public:
IndexSum(size_t index, const int *matrixRow)
: m_index(index), m_f1(static_cast<double>(matrixRow[0])),
m_f2(static_cast<double>(matrixRow[1])),
m_f3(static_cast<double>(matrixRow[2])) {}

size_t getIndex() const { return m_index; }

double transformed(const Kernel::V3D &hkl) const {
return m_f1 * hkl[0] + m_f2 * hkl[1] + m_f3 * hkl[2];
}

private:
size_t m_index;
double m_f1, m_f2, m_f3;
};

std::vector<IndexSum> m_factors;
};

/** A class containing the Point Groups for a crystal.
*
* @author Vickie Lynch
Expand Down Expand Up @@ -48,220 +88,27 @@ class MANTID_GEOMETRY_DLL PointGroup : public Group {
CrystalSystem crystalSystem() const { return Cubic; }

/// Return true if the hkls are in same group
bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
bool isEquivalent(const Kernel::V3D &hkl, const Kernel::V3D &hkl2) const;

/// Returns a vector with all equivalent hkls
std::vector<Kernel::V3D> getEquivalents(const Kernel::V3D &hkl) const;
/// Returns the same hkl for all equivalent hkls
Kernel::V3D getReflectionFamily(const Kernel::V3D &hkl) const;

void init() { }

protected:
bool groupHasNoTranslations(const Group &group) const;

std::set<Kernel::V3D> getEquivalentSet(const Kernel::V3D &hkl) const;

std::string m_symbolHM;
std::string m_name;
};

//------------------------------------------------------------------------
/** -1 (Triclinic) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue1 : public PointGroup {
public:
PointGroupLaue1();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
virtual void init();
};
//------------------------------------------------------------------------
/** 1 2/m 1 (Monoclinic, unique axis b) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue2 : public PointGroup {
public:
PointGroupLaue2();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
virtual void init();
};
//------------------------------------------------------------------------
/** 1 1 2/m (Monoclinic, unique axis c) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue3 : public PointGroup {
public:
PointGroupLaue3();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
virtual void init();
};
//------------------------------------------------------------------------
/** mmm (Orthorombic) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue4 : public PointGroup {
public:
PointGroupLaue4();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
virtual void init();
};
//------------------------------------------------------------------------
/** 4/m (Tetragonal) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue5 : public PointGroup {
public:
PointGroupLaue5();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
virtual void init();
};
//------------------------------------------------------------------------
/** 4/mmm (Tetragonal) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue6 : public PointGroup {
public:
PointGroupLaue6();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
virtual void init();
};
//------------------------------------------------------------------------
/** -3 (Trigonal - Hexagonal) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue7 : public PointGroup {
public:
PointGroupLaue7();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
virtual void init();
};
//------------------------------------------------------------------------
/** -3m1 (Trigonal - Rhombohedral) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue8 : public PointGroup {
public:
PointGroupLaue8();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
virtual void init();
};
//------------------------------------------------------------------------
/** -31m (Trigonal - Rhombohedral) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue9 : public PointGroup {
public:
PointGroupLaue9();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
virtual void init();
};
//------------------------------------------------------------------------
/** 6/m (Hexagonal) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue10 : public PointGroup {
public:
PointGroupLaue10();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
virtual void init();
};
//------------------------------------------------------------------------
/** 6/mmm (Hexagonal) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue11 : public PointGroup {
public:
PointGroupLaue11();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
std::vector<Kernel::V3D> getEquivalentSet(const Kernel::V3D &hkl) const;

virtual void init();
};
void createPermutationsFromOperations();

//------------------------------------------------------------------------
/** m-3 (Cubic) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue12 : public PointGroup {
public:
PointGroupLaue12();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
std::vector<IndexPermutation> m_permutations;

virtual void init();
std::string m_symbolHM;
std::string m_name;
};

//------------------------------------------------------------------------
/** m-3m (Cubic) PointGroup
class MANTID_GEOMETRY_DLL PointGroupLaue13 : public PointGroup {
public:
PointGroupLaue13();
/// Name of the point group
virtual std::string getName() const;
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(const Kernel::V3D &hkl,
const Kernel::V3D &hkl2) const;
virtual PointGroup::CrystalSystem crystalSystem() const;
virtual void init();
};
*/
/// Shared pointer to a PointGroup
typedef boost::shared_ptr<PointGroup> PointGroup_sptr;

Expand Down

0 comments on commit 556d2d9

Please sign in to comment.