#include <symmetry.h>
Inheritance diagram for EMAN::HSym:
Public Member Functions | |
HSym () | |
virtual | ~HSym () |
virtual string | get_name () const |
Return HSym::NAME. | |
virtual string | get_desc () const |
Get a description. | |
virtual TypeDict | get_param_types () const |
Get a dictionary containing the permissable parameters of this class Of all the symmetries, helical has the most options. | |
virtual Dict | get_delimiters (const bool inc_mirror=false) const |
Get the altitude and phi angle of the d symmetry, which depends on nysm. | |
virtual Transform | get_sym (const int n) const |
Provides access to the complete set of rotational and translational symmetry operations associated with helical symmetry. | |
virtual int | get_nsym () const |
For symmetries in general this function is supposed to return the number of unique symmetric operations that can be applied for the given Symmetry3D object. | |
virtual int | get_max_csym () const |
Gets the maximum cylcic symmetry exhibited by this object. | |
virtual bool | is_h_sym () const |
Determines whether or not this Symmetry3D is the helical type - returns true. | |
virtual bool | is_in_asym_unit (const float &altitude, const float &azimuth, const bool inc_mirror) const |
A function to be used when generating orientations over portion of the unit sphere defined by parameters returned by get_delimiters. | |
virtual vector< Vec3f > | get_asym_unit_points (bool inc_mirror=false) const |
virtual vector< vector< Vec3f > > | get_asym_unit_triangles (bool inc_mirror) const |
Get triangles that precisely occlude the projection area of the default asymmetric unit. | |
Static Public Member Functions | |
static Symmetry3D * | NEW () |
Factory support function NEW. | |
Static Public Attributes | |
static const string | NAME = "h" |
The name of this class - used to access it from factories etc. Should be "h". | |
Private Member Functions | |
HSym (const HSym &) | |
Disallow copy construction. | |
HSym & | operator= (const HSym &) |
Disallow assignment. |
Definition at line 446 of file symmetry.h.
EMAN::HSym::HSym | ( | ) | [inline] |
virtual EMAN::HSym::~HSym | ( | ) | [inline, virtual] |
EMAN::HSym::HSym | ( | const HSym & | ) | [private] |
Disallow copy construction.
vector< Vec3f > HSym::get_asym_unit_points | ( | bool | inc_mirror = false |
) | const [virtual] |
inc_mirror | whether or not to include the mirror portion of the asymmetric unit |
Implements EMAN::Symmetry3D.
Definition at line 1531 of file symmetry.cpp.
References b, get_delimiters(), EMAN::FactoryBase::params, and EMAN::Dict::set_default().
01532 { 01533 vector<Vec3f> ret; 01534 01535 Dict delim = get_delimiters(inc_mirror); 01536 int nsym = params.set_default("nsym",0); 01537 float az = -(float)delim["az_max"]; 01538 01539 01540 bool tracing_arcs = false; 01541 01542 01543 if ( !tracing_arcs) { 01544 Vec3f a(0,-1,0); 01545 ret.push_back(a); 01546 01547 if ( nsym > 2 ) { 01548 Dict d("type","eman"); 01549 d["phi"] = 0.0f; 01550 d["alt"] = 0.0f; 01551 d["az"] = az; 01552 Vec3f b = Transform(d)*a; 01553 ret.push_back(b); 01554 } 01555 else 01556 { 01557 ret.push_back(Vec3f(1,0,0)); 01558 01559 ret.push_back(Vec3f(0,1,0)); 01560 01561 if ( nsym == 1 ) { 01562 ret.push_back(Vec3f(-1,0,0)); 01563 ret.push_back(a); 01564 } 01565 } 01566 } 01567 return ret; 01568 01569 }
vector< vector< Vec3f > > HSym::get_asym_unit_triangles | ( | bool | inc_mirror | ) | const [virtual] |
Get triangles that precisely occlude the projection area of the default asymmetric unit.
This is used for collision detection in Symmetry3D::reduce
inc_mirror | whether to include the mirror portion of the asymmetric unit |
Implements EMAN::Symmetry3D.
Definition at line 1525 of file symmetry.cpp.
Dict HSym::get_delimiters | ( | const bool | inc_mirror = false |
) | const [virtual] |
Get the altitude and phi angle of the d symmetry, which depends on nysm.
The "alt_max" is always 90 + the "equator_range" variable in the internally stored params The "alt_min" veriable is always 90. The "az_max" is always 360/nsym degrees Helical symmetry argument is the only symmetry not to act on the inc_mirror argument. The current policy is the orientation generator using this symmetry should make its own accomodation for the inclusion of mirror orientations if the symmetry is helical (hence the presence of the is_h_sym function in the Symmetry3D class).
inc_mirror | this parameter is not specifically acted upon in this class |
InvalidValueException | if nsym is less than or equal to zero |
Implements EMAN::Symmetry3D.
Definition at line 1490 of file symmetry.cpp.
References InvalidValueException, EMAN::FactoryBase::params, and EMAN::Dict::set_default().
Referenced by get_asym_unit_points(), and is_in_asym_unit().
01490 { 01491 Dict returnDict; 01492 01493 // Get the parameters of interest 01494 int nsym = params.set_default("nsym",0); 01495 if ( nsym <= 0 ) throw InvalidValueException(nsym,"Error, you must specify a positive non zero nsym"); 01496 01497 float equator_range = params.set_default("equator_range",5.0f); 01498 01499 returnDict["alt_max"] = 90.0f + equator_range; 01500 01501 returnDict["alt_min"] = 90.0f; 01502 01503 returnDict["az_max"] = 360.0f/(float)nsym; 01504 01505 return returnDict; 01506 }
virtual string EMAN::HSym::get_desc | ( | ) | const [inline, virtual] |
Get a description.
Implements EMAN::FactoryBase.
Definition at line 468 of file symmetry.h.
virtual int EMAN::HSym::get_max_csym | ( | ) | const [inline, virtual] |
Gets the maximum cylcic symmetry exhibited by this object.
This is used by OrientationGenerators, and is probably not something a general user would utilize.
Implements EMAN::Symmetry3D.
Definition at line 533 of file symmetry.h.
References EMAN::FactoryBase::params.
00533 { return params["nsym"]; }
virtual string EMAN::HSym::get_name | ( | ) | const [inline, virtual] |
Return HSym::NAME.
Implements EMAN::FactoryBase.
Definition at line 463 of file symmetry.h.
References NAME.
00463 { return NAME; }
virtual int EMAN::HSym::get_nsym | ( | ) | const [inline, virtual] |
For symmetries in general this function is supposed to return the number of unique symmetric operations that can be applied for the given Symmetry3D object.
However, for helical symmetry it is possible that the there are infinitely many symmetric operations. So there is no general answer to return here. So, as a hack, the answer returned is the number of rotional steps (as specified by the "d_az" paramater) that can be applied before surpassing 360 degrees.
InvalidValueException | if d_az (as stored internally in parms) is less than or equal to zero |
Implements EMAN::Symmetry3D.
Definition at line 522 of file symmetry.h.
References EMAN::FactoryBase::params.
00522 { return (int)params["nsym"]; }; // ming, this is the number of helix turns
virtual TypeDict EMAN::HSym::get_param_types | ( | ) | const [inline, virtual] |
Get a dictionary containing the permissable parameters of this class Of all the symmetries, helical has the most options.
This is because different approaches have to taken in regard to defining an asymmetric unit and to returning the set of rotational and translational symmetry operations
Implements EMAN::FactoryBase.
Definition at line 476 of file symmetry.h.
References EMAN::EMObject::FLOAT, EMAN::EMObject::INT, and EMAN::TypeDict::put().
00477 { 00478 TypeDict d; 00479 d.put("nsym", EMObject::INT, "The symmetry number of the helix, around the equator."); 00480 d.put("nstart", EMObject::INT, "The symmetry number of the implicit C symmetry.");//ming add 00481 d.put("equator_range", EMObject::FLOAT, "The amount altitude angles are allowed to vary above and below the equator. Default is 5"); 00482 d.put("tz", EMObject::FLOAT, "The translational distance (along z) between successive identical subunits in angstrom (default a/pix is 1)"); 00483 d.put("daz", EMObject::FLOAT, "The rotational angle (about z) between successive identical subunits in degrees"); 00484 d.put("apix", EMObject::FLOAT, "Angstrom per pixel, default is one."); 00485 return d; 00486 }
Transform HSym::get_sym | ( | const int | n | ) | const [virtual] |
Provides access to the complete set of rotational and translational symmetry operations associated with helical symmetry.
This symmetry operations are generated in a straightforward way from the parameters of this class, specifically the return Transform object has an azimuth of n times the "d_az" (as specified in the parameters of this class), and has a post translation of "tz" in the z direction.
n | the helical symmetry operation number. |
Implements EMAN::Symmetry3D.
Definition at line 1571 of file symmetry.cpp.
References EMAN::FactoryBase::params, EMAN::Dict::set_default(), and EMAN::Transform::set_trans().
01572 { 01573 int nstart=params["nstart"]; 01574 int nsym=params["nsym"]; 01575 int hsym=nsym/nstart; 01576 float apix = params.set_default("apix",1.0f); 01577 float daz= params["daz"]; 01578 float tz=params["tz"]; 01579 float dz=tz/apix; 01580 Dict d("type","eman"); 01581 01582 // courtesy of Phil Baldwin 01583 //d["az"] = (n%nsym) * 360.0f / nsym; 01584 d["az"]=(((int) n/hsym)%nstart)*360.f/nstart+(n%hsym)*daz; 01585 //d["az"] = n * daz; 01586 d["alt"] = 0.0f; 01587 d["phi"] = 0.0f; 01588 Transform ret(d); 01589 ret.set_trans(0,0,(n%hsym)*dz); 01590 return ret; 01591 }
virtual bool EMAN::HSym::is_h_sym | ( | ) | const [inline, virtual] |
Determines whether or not this Symmetry3D is the helical type - returns true.
Reimplemented from EMAN::Symmetry3D.
Definition at line 541 of file symmetry.h.
bool HSym::is_in_asym_unit | ( | const float & | altitude, | |
const float & | azimuth, | |||
const bool | inc_mirror | |||
) | const [virtual] |
A function to be used when generating orientations over portion of the unit sphere defined by parameters returned by get_delimiters.
In platonic symmetry altitude and azimuth alone are not enough to correctly demarcate the asymmetric unit. See the get_delimiters comments.
altitude | the EMAN style altitude of the 3D orientation in degrees | |
azimuth | the EMAN style azimuth of the 3D orientation in degrees | |
inc_mirror | whether or not to include orientations if they are in the mirror portion of the asymmetric unit |
Implements EMAN::Symmetry3D.
Definition at line 1508 of file symmetry.cpp.
References get_delimiters(), EMAN::FactoryBase::params, and EMAN::Dict::set_default().
01509 { 01510 Dict d = get_delimiters(inc_mirror); 01511 float alt_max = d["alt_max"]; 01512 float alt_min = d["alt_min"]; 01513 01514 if (inc_mirror) { 01515 float e = params.set_default("equator_range",5.0f); 01516 alt_min -= e; 01517 } 01518 01519 float az_max = d["az_max"]; 01520 01521 if ( altitude >=alt_min && altitude <= alt_max && azimuth <= az_max && azimuth >= 0 ) return true; 01522 return false; 01523 }
static Symmetry3D* EMAN::HSym::NEW | ( | ) | [inline, static] |
Factory support function NEW.
Definition at line 455 of file symmetry.h.
References HSym().
00456 { 00457 return new HSym(); 00458 }
const string HSym::NAME = "h" [static] |
The name of this class - used to access it from factories etc. Should be "h".
Definition at line 536 of file symmetry.h.
Referenced by get_name().