#include <symmetry.h>
Inheritance diagram for EMAN::TetrahedralSym:
Public Member Functions | |
TetrahedralSym () | |
Constructor calls PlatonicSym::init. | |
virtual | ~TetrahedralSym () |
virtual string | get_name () const |
Return TetrahedralSym::NAME. | |
virtual string | get_desc () const |
Get a description. | |
virtual int | get_max_csym () const |
Gets the maximum symmetry of this object. | |
virtual Transform | get_sym (const int n) const |
This function provides access to the unique rotational symmetries of a tetrahedron. | |
virtual bool | is_in_asym_unit (const float &altitude, const float &azimuth, const bool inc_mirror) const |
In tetrahedral symmetry special consideration must be taken when generating orientations in the asymmetric unit. | |
virtual int | get_nsym () const |
Gets the total number of unique roational symmetry operations associated with this symmetry For tetrahedral symmetry symmetry, this is 12. | |
virtual float | get_az_alignment_offset () const |
Get the azimuth alignment offset required to ensure that orientations align correctly with symmetric axes of the tetrahedron. | |
virtual vector< Vec3f > | get_asym_unit_points (bool inc_mirror=false) const |
virtual bool | is_tet_sym () const |
A function that is used to determine if this is the tetrahedral symmetry object. | |
Static Public Member Functions | |
Symmetry3D * | NEW () |
Factory support function NEW. | |
Static Public Attributes | |
const string | NAME = "tet" |
The name of this class - used to access it from factories etc. Should be "tet". | |
Private Member Functions | |
TetrahedralSym (const TetrahedralSym &) | |
Disallow copy construction. | |
TetrahedralSym & | operator= (const TetrahedralSym &) |
Disallow assignment. |
The tetrahedron has n=m=3; F=4, E=6=nF/2, V=4=nF/m. It is composed of four triangles."
Definition at line 675 of file symmetry.h.
|
Constructor calls PlatonicSym::init.
Definition at line 680 of file symmetry.h. 00680 {init();}
|
|
Definition at line 681 of file symmetry.h. 00681 {}
|
|
Disallow copy construction.
|
|
Reimplemented from EMAN::PlatonicSym. Definition at line 1918 of file symmetry.cpp. References b, EMAN::Dict::end(), get_az_alignment_offset(), EMAN::Vec3< Type >::normalize(), t, and EMAN::Vec3f. 01919 { 01920 vector<Vec3f> ret; 01921 01922 Vec3f b = Vec3f(0,0,1); 01923 ret.push_back(b); 01924 float theta_c_on_two = (float)platonic_params["theta_c_on_two"]; // already in radians 01925 float theta_c = 2*theta_c_on_two; 01926 01927 Vec3f c_on_two = Vec3f(0,-sin(theta_c_on_two),cos(theta_c_on_two)); 01928 Vec3f c = Vec3f(0,-sin(theta_c),cos(theta_c)); 01929 ret.push_back(c_on_two); 01930 float cap_sig = platonic_params["az_max"]; 01931 if ( inc_mirror ) { 01932 Vec3f a = Vec3f(sin(theta_c)*sin(cap_sig),-sin(theta_c)*cos(cap_sig),cos(theta_c)); 01933 01934 Vec3f f = a+b+c; 01935 f.normalize(); 01936 01937 ret.push_back(f); 01938 } 01939 01940 Vec3f a_on_two = Vec3f(sin(theta_c_on_two)*sin(cap_sig),-sin(theta_c_on_two)*cos(cap_sig),cos(theta_c_on_two)); 01941 ret.push_back(a_on_two); 01942 01943 01944 if ( get_az_alignment_offset() != 0 ) { 01945 Dict d("type","eman"); 01946 d["az"] = get_az_alignment_offset(); 01947 d["phi"] = 0.0f; 01948 d["alt"] = 0.0f; 01949 Transform t(d); 01950 for (vector<Vec3f>::iterator it = ret.begin(); it != ret.end(); ++it ) 01951 { 01952 *it = (*it)*t; 01953 } 01954 } 01955 01956 return ret; 01957 }
|
|
Get the azimuth alignment offset required to ensure that orientations align correctly with symmetric axes of the tetrahedron. This offset is directly related to the way the symmetric operations are generated by get_sym. All orientations generated as a result of using the delimiters supplied by this class should by offset by this azimuth to ensure proper alignment with tetrahedral objects in EMAN2 Reimplemented from EMAN::Symmetry3D. Definition at line 1855 of file symmetry.cpp. Referenced by get_asym_unit_points(). 01855 { return 0.0; }
|
|
Get a description.
Implements EMAN::FactoryBase. Definition at line 700 of file symmetry.h. 00700 { return "Tetrahedral symmetry support"; }
|
|
Gets the maximum symmetry of this object. This is used by OrientationGenerators, and is probably not something a general user would utilize.
Implements EMAN::Symmetry3D. Definition at line 706 of file symmetry.h. 00706 { return 3; }
|
|
Return TetrahedralSym::NAME.
Implements EMAN::FactoryBase. Definition at line 694 of file symmetry.h. 00694 { return NAME; }
|
|
Gets the total number of unique roational symmetry operations associated with this symmetry For tetrahedral symmetry symmetry, this is 12.
Implements EMAN::Symmetry3D. Definition at line 736 of file symmetry.h. 00736 { return 12; };
|
|
This function provides access to the unique rotational symmetries of a tetrahedron. In this implementation, the tetrahedral symmetry group has a face along the z-axis. In all, there are 12 (accessed by get_nysm) unique rotational symmetric operations for the tetrahedron. In the terminology defined Append A (titled Symmetry Elements) in the manuscript Baldwin and Penczek, 2007. The Transform Class in SPARX and EMAN2. JSB 157(250-261), Doctor Phil has this to say: "B^3=A^3=1; BABA=1; implies A^2=BAB, ABA=B^2 , AB^2A = B^2AB^2 and 12 words with at most a single A 1 B BB A BA AB BBA BAB ABB BBAB BABB BBABB at most one A is necessary"
Implements EMAN::Symmetry3D. Definition at line 1890 of file symmetry.cpp. 01891 { 01892 // These rotations courtesy of Phil Baldwin 01893 // It has n=m=3; F=4, E=6=nF/2, V=4=nF/m 01894 static double lvl0=0; // There is a face along z 01895 static double lvl1=109.4712; // that is acos(-1/3) // There are 3 faces at this angle 01896 01897 static double TET[36] = {// This is with the face along z 01898 0,lvl0,0, 0,lvl0,120, 0,lvl0,240, 01899 0,lvl1,60, 0,lvl1,180, 0,lvl1,300, 01900 120,lvl1,60, 120,lvl1,180, 120,lvl1,300, 01901 240,lvl1,60, 240,lvl1,180, 240,lvl1,300 01902 }; 01903 // 01904 int idx = n % 12; 01905 // Transform3D ret; 01906 // ret.set_rotation((float)TET[idx * 3 ],(float)TET[idx * 3 + 1], (float)TET[idx * 3 + 2] ); 01907 // return ret; 01908 01909 Dict d("type","eman"); 01910 d["az"] = (float)TET[idx * 3 ]; 01911 d["alt"] = (float)TET[idx * 3 + 1]; 01912 d["phi"] = (float)TET[idx * 3 + 2]; 01913 return Transform(d); 01914 01915 }
|
|
In tetrahedral symmetry special consideration must be taken when generating orientations in the asymmetric unit. This function is a specialization of the functionality in PlatonicSym::is_in_asym_unit
Reimplemented from EMAN::PlatonicSym. Definition at line 1857 of file symmetry.cpp. References EMAN::PlatonicSym::get_delimiters(), and EMAN::PlatonicSym::platonic_alt_lower_bound(). 01858 { 01859 Dict d = get_delimiters(inc_mirror); 01860 float alt_max = d["alt_max"]; 01861 float az_max = d["az_max"]; 01862 01863 if ( altitude >= 0 && altitude <= alt_max && azimuth <= az_max && azimuth >= 0) { 01864 // convert azimuth to radians 01865 float tmpaz = (float)(EMConsts::deg2rad * azimuth); 01866 01867 float cap_sig = platonic_params["az_max"]; 01868 float alt_max = platonic_params["alt_max"]; 01869 if ( tmpaz > ( cap_sig/2.0f ) )tmpaz = cap_sig - tmpaz; 01870 01871 float lower_alt_bound = platonic_alt_lower_bound(tmpaz, alt_max ); 01872 01873 // convert altitude to radians 01874 float tmpalt = (float)(EMConsts::deg2rad * altitude); 01875 if ( lower_alt_bound > tmpalt ) { 01876 if ( !inc_mirror ) { 01877 float upper_alt_bound = platonic_alt_lower_bound( tmpaz, alt_max/2.0f); 01878 // you could change the "<" to a ">" here to get the other mirror part of the asym unit 01879 if ( upper_alt_bound < tmpalt ) return false; 01880 else return true; 01881 } 01882 else return true; 01883 } 01884 return false; 01885 } 01886 else return false; 01887 }
|
|
A function that is used to determine if this is the tetrahedral symmetry object.
Reimplemented from EMAN::Symmetry3D. Definition at line 758 of file symmetry.h. 00758 { return true; }
|
|
Factory support function NEW.
Definition at line 686 of file symmetry.h. 00687 { 00688 return new TetrahedralSym(); 00689 }
|
|
Disallow assignment.
|
|
The name of this class - used to access it from factories etc. Should be "tet".
Definition at line 43 of file symmetry.cpp. |