diff --git a/Code/Mantid/Framework/Geometry/CMakeLists.txt b/Code/Mantid/Framework/Geometry/CMakeLists.txt index ebca772966b9ef736b20af219f20199c8774370f..728d7896d36581e1250df6ce03354723ed1afaf7 100644 --- a/Code/Mantid/Framework/Geometry/CMakeLists.txt +++ b/Code/Mantid/Framework/Geometry/CMakeLists.txt @@ -193,6 +193,7 @@ set ( TEST_FILES test/ComponentParserTest.h test/ComponentTest.h test/ConeTest.h + test/ConventionalCellTest.h test/ConvexPolygonTest.h test/CylinderTest.h test/DetectorGroupTest.h @@ -203,9 +204,6 @@ set ( TEST_FILES test/IMDDimensionFactoryTest.h test/IMDDimensionTest.h test/IndexingUtilsTest.h - test/ReducedCellTest.h - test/ConventionalCellTest.h - test/ScalarUtilsTest.h test/InstrumentDefinitionParserTest.h test/InstrumentRayTracerTest.h test/InstrumentTest.h @@ -217,8 +215,8 @@ set ( TEST_FILES test/MDHistoDimensionBuilderTest.h test/MDHistoDimensionTest.h test/MDImplicitFunctionTest.h + test/MDPlaneImplicitFunctionTest.h test/MDPlaneTest.h - test/MDPlaneImplicitFunctionTest.h test/MapSupportTest.h test/MaterialTest.h test/MathSupportTest.h @@ -238,10 +236,12 @@ set ( TEST_FILES test/ParameterMapTest.h test/ParametrizedComponentTest.h test/PlaneTest.h + test/PointGroupTest.h test/PolygonEdgeTest.h test/QuadrilateralTest.h test/RectangularDetectorPixelTest.h test/RectangularDetectorTest.h + test/ReducedCellTest.h test/ReferenceFrameTest.h test/ReflectionConditionTest.h test/RotCounterTest.h @@ -252,6 +252,7 @@ set ( TEST_FILES test/RulesSurfPointTest.h test/RulesTest.h test/RulesUnionTest.h + test/ScalarUtilsTest.h test/ShapeFactoryTest.h test/SphereTest.h test/SurfaceFactoryTest.h diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/PointGroup.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/PointGroup.h index d523bde9a65a567e70893af4cd218b81ee7fb946..fb6e5551f7040770e2d8cea5730865b303f874e9 100644 --- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/PointGroup.h +++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/PointGroup.h @@ -134,7 +134,12 @@ namespace Geometry virtual std::string getName() { return "-31m (Trigonal - Rhombohedral)"; } /// Return true if the hkls are equivalent. virtual bool isEquivalent(V3D hkl, V3D hkl2) - { double h=hkl[0];double k=hkl[1];double l=hkl[2]; return (hkl2 == V3D(h,k,l)) || (hkl2 == V3D(-k,h-k,l)) || (hkl2 == V3D(-h+k,-h,l)) || (hkl2 == V3D(k,h,-l)) || (hkl2 == V3D(h-k,-k,-l)) || (hkl2 == V3D(-h,-h+k,-l)) || (hkl2 == V3D(-h,-k,-l)) || (hkl2 == V3D(k,-h+k,-l)) || (hkl2 == V3D(h-k,h,-l)) || (hkl2 == V3D(-k,-h,l)) || (hkl2 == V3D(-h+k,k,l)) || (hkl2 == V3D(h,h-k,l)); } + { double h=hkl[0];double k=hkl[1];double l=hkl[2]; + return (hkl2 == V3D(h,k,l)) || (hkl2 == V3D(-k,h-k,l)) || (hkl2 == V3D(-h+k,-h,l)) + || (hkl2 == V3D(-k,-h,-l)) || (hkl2 == V3D(-h+k,k,-l)) || (hkl2 == V3D(h,h-k,-l)) + || (hkl2 == V3D(-h,-k,-l)) || (hkl2 == V3D(k,-h+k,-l)) || (hkl2 == V3D(h-k,h,-l)) + || (hkl2 == V3D(k,h,l)) || (hkl2 == V3D(h-k,-k,l)) || (hkl2 == V3D(-h,-h+k,l)); + } }; //------------------------------------------------------------------------ diff --git a/Code/Mantid/Framework/Geometry/test/PointGroupTest.h b/Code/Mantid/Framework/Geometry/test/PointGroupTest.h new file mode 100644 index 0000000000000000000000000000000000000000..cae8f5ebb404d77526e6d5e0b76d80e3bc0b4999 --- /dev/null +++ b/Code/Mantid/Framework/Geometry/test/PointGroupTest.h @@ -0,0 +1,108 @@ +#ifndef MANTID_GEOMETRY_POINTGROUPTEST_H_ +#define MANTID_GEOMETRY_POINTGROUPTEST_H_ + +#include <cxxtest/TestSuite.h> +#include "MantidKernel/Timer.h" +#include "MantidKernel/Strings.h" +#include "MantidKernel/System.h" +#include <iostream> +#include <iomanip> + +#include "MantidGeometry/Crystal/PointGroup.h" +#include "/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/stdarg.h" + +using namespace Mantid; +using namespace Mantid::Geometry; + +class PointGroupTest : public CxxTest::TestSuite +{ +public: + + void check_point_group(std::string name, V3D hkl, size_t numEquiv, V3D * equiv) + { + std::vector<PointGroup_sptr> pgs = getAllPointGroups(); + for (size_t i=0; i<pgs.size(); i++) + { + if (pgs[i]->getName().substr(0, name.size()) == name) + { + for (size_t j=0; j<numEquiv; j++) + { + //std::cout << j << std::endl; + if (!pgs[i]->isEquivalent(hkl, equiv[j])) + { + TSM_ASSERT( name + " : " + hkl.toString() + " is not equivalent to " + equiv[j].toString(), false); + } + } + return; + } + } + TSM_ASSERT("Point group not found", false); + } + + void test_all_point_groups() + { + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,-3)}; + check_point_group("-1", V3D(1,2,3), 2, equiv); } + { V3D equiv[] = {V3D(1,2,3), V3D(-1,-2,-3), V3D(-1,2,-3), V3D(1,-2,3) }; + check_point_group("1 2/m 1", V3D(1,2,3), 4, equiv); } + { V3D equiv[] = {V3D(1,2,3), V3D(-1,-2,3), V3D(-1,-2,-3), V3D(1,2,-3) }; + check_point_group("1 1 2/m", V3D(1,2,3), 4, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3), V3D(-1,2,-3), V3D(1,-2,-3), V3D(-1,-2,-3), V3D(1,2,-3), V3D(1,-2,3), V3D(-1,2,3)}; + check_point_group("mmm", V3D(1,2,3), 8, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3), V3D(-2,1,3), V3D(2,-1,3), V3D(-1,-2,-3), V3D(1,2,-3), V3D(2,-1,-3), V3D(-2,1,-3)}; + check_point_group("4/m", V3D(1,2,3), 8, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3), V3D(-2,1,3), V3D(2,-1,3), V3D(-1,2,-3), V3D(1,-2,-3), V3D(2,1,-3), V3D(-2,-1,-3), V3D(-1,-2,-3), V3D(1,2,-3), V3D(2,-1,-3), V3D(-2,1,-3), V3D(1,-2,3), V3D(-1,2,3),V3D(-2,-1,3), V3D(2,1,3)}; + check_point_group("4/mmm", V3D(1,2,3), 16, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3), V3D(-1+2,-1,3), V3D(-1,-2,-3), V3D(2,-1+2,-3), V3D(1-2,1,-3)}; + check_point_group("-3", V3D(1,2,3), 6, equiv); } + { V3D equiv[] = { + V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3), + V3D(-2,-1,-3),V3D(-1+2,2,-3),V3D(1,1-2,-3), + V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3), + V3D(2,1,3),V3D(1-2,-2,3),V3D(-1,-1+2,3)}; + check_point_group("-31m", V3D(1,2,3), 12, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3),V3D(2,1,-3),V3D(1-2,-2,-3),V3D(-1,-1+2,-3),V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3),V3D(-2,-1,3),V3D(-1+2,2,3),V3D(1,1-2,3)}; + check_point_group("-3m1", V3D(1,2,3), 12, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3),V3D(-1,-2,3),V3D(2,-1+2,3),V3D(1-2,1,3),V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3),V3D(1,2,-3),V3D(-2,1-2,-3),V3D(-1+2,-1,-3)}; + check_point_group("6/m", V3D(1,2,3), 12, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3),V3D(-1,-2,3),V3D(2,-1+2,3),V3D(1-2,1,3),V3D(2,1,-3),V3D(1-2,-2,-3),V3D(-1,-1+2,-3),V3D(-2,-1,-3),V3D(-1+2,2,-3),V3D(1,1-2,-3),V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3),V3D(1,2,-3),V3D(-2,1-2,-3),V3D(-1+2,-1,-3),V3D(-2,-1,3),V3D(-1+2,2,3),V3D(1,1-2,3),V3D(2,1,3),V3D(1-2,-2,3),V3D(-1,-1+2,3)}; + check_point_group("6/mmm", V3D(1,2,3), 24, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-1,2,-3),V3D(1,-2,-3),V3D(3,1,2),V3D(3,-1,-2),V3D(-3,-1,2),V3D(-3,1,-2),V3D(2,3,1),V3D(-2,3,-1),V3D(2,-3,-1),V3D(-2,-3,1),V3D(-1,-2,-3),V3D(1,2,-3),V3D(1,-2,3),V3D(-1,2,3),V3D(-3,-1,-2),V3D(-3,1,2),V3D(3,1,-2),V3D(3,-1,2),V3D(-2,-3,-1),V3D(2,-3,1),V3D(-2,3,1),V3D(2,3,-1)}; + check_point_group("m-3", V3D(1,2,3), 24, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-1,2,-3),V3D(1,-2,-3),V3D(3,1,2),V3D(3,-1,-2),V3D(-3,-1,2),V3D(-3,1,-2),V3D(2,3,1),V3D(-2,3,-1),V3D(2,-3,-1),V3D(-2,-3,1),V3D(2,1,-3),V3D(-2,-1,-3),V3D(2,-1,3),V3D(-2,1,3),V3D(1,3,-2),V3D(-1,3,2),V3D(-1,-3,-2),V3D(1,-3,2),V3D(3,2,-1),V3D(3,-2,1),V3D(-3,2,1),V3D(-3,-2,-1),V3D(-1,-2,-3),V3D(1,2,-3),V3D(1,-2,3),V3D(-1,2,3),V3D(-3,-1,-2),V3D(-3,1,2),V3D(3,1,-2),V3D(3,-1,2),V3D(-2,-3,-1),V3D(2,-3,1),V3D(-2,3,1),V3D(2,3,-1),V3D(-2,-1,3),V3D(2,1,3),V3D(-2,1,-3),V3D(2,-1,-3),V3D(-1,-3,2),V3D(1,-3,-2),V3D(1,3,2),V3D(-1,3,-2),V3D(-3,-2,1),V3D(-3,2,-1),V3D(3,-2,-1),V3D(3,2,1)}; + check_point_group("m-3m", V3D(1,2,3), 48, equiv); } + + if (false) + { + { V3D equiv[] = {V3D(1,2,3)}; + check_point_group("1", V3D(1,2,3), 1, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,2,-3)}; + check_point_group("2", V3D(1,2,3), 2, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(1,2,-3)}; + check_point_group("m", V3D(1,2,3), 2, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-1,2,-3),V3D(1,-2,-3),}; + check_point_group("222", V3D(1,2,3), 4, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(1,-2,3),V3D(-1,2,3),}; + check_point_group("mm2", V3D(1,2,3), 4, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3),}; + check_point_group("4", V3D(1,2,3), 4, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(2,-1,-3),V3D(-2,1,-3),}; + check_point_group("-4", V3D(1,2,3), 4, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3), V3D(-1,2,-3),V3D(1,-2,-3),V3D(2,1,-3),V3D(-2,-1,-3),}; + check_point_group("422", V3D(1,2,3), 8, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3), V3D(1,-2,3),V3D(-1,2,3),V3D(-2,-1,3),V3D(2,1,3),}; + check_point_group("4mm", V3D(1,2,3), 8, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3), V3D(1,-2,3),V3D(-1,2,3),V3D(-2,-1,3),V3D(2,1,3),}; + check_point_group("4mm", V3D(1,2,3), 8, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(2,-1,-3),V3D(-2,1,-3), V3D(-1,2,-3),V3D(1,-2,-3),V3D(-2,-1,3),V3D(2,1,3),}; + check_point_group("-42m", V3D(1,2,3), 8, equiv); } + { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(2,-1,-3),V3D(-2,1,-3), V3D(1,-2,3),V3D(-1,2,3),V3D(2,1,-3),V3D(-2,-1,-3),}; + check_point_group("-4m2", V3D(1,2,3), 8, equiv); } + } + } + + +}; + + +#endif /* MANTID_GEOMETRY_POINTGROUPTEST_H_ */