#include <symmetry.h>
Inheritance diagram for EMAN::DSym:
Public Member Functions | |
DSym () | |
virtual | ~DSym () |
virtual string | get_name () const |
Return DSym::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. | |
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 symmetry operations associated with this symmetry. | |
virtual int | get_nsym () const |
Gets the total number of unique roational symmetry operations associated with this symmetry For D symmetry, this is simply 2*nsym. | |
virtual int | get_max_csym () const |
Gets the maximum symmetry of this object. | |
virtual vector< Vec3f > | get_asym_unit_points (bool inc_mirror=false) const |
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 bool | is_d_sym () const |
Returns true - this is indeed a c symmetry object. | |
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 | |
Symmetry3D * | NEW () |
Factory support function NEW. | |
Static Public Attributes | |
const string | NAME = "d" |
The name of this class - used to access it from factories etc. Should be "d". | |
Private Member Functions | |
DSym (const DSym &) | |
Disallow copy construction. | |
DSym & | operator= (const DSym &) |
Disallow assignment. |
Definition at line 340 of file symmetry.h.
|
Definition at line 343 of file symmetry.h. 00343 {};
|
|
Definition at line 344 of file symmetry.h. 00344 {};
|
|
Disallow copy construction.
|
|
Implements EMAN::Symmetry3D. Definition at line 1487 of file symmetry.cpp. References get_delimiters(), EMAN::Dict::set_default(), EMAN::Vec3f, x, and y. Referenced by get_asym_unit_triangles(). 01488 { 01489 Dict delim = get_delimiters(inc_mirror); 01490 01491 vector<Vec3f> ret; 01492 int nsym = params.set_default("nsym",0); 01493 if ( nsym == 1 ) { 01494 if (inc_mirror == false ) { 01495 ret.push_back(Vec3f(0,0,1)); 01496 ret.push_back(Vec3f(0,-1,0)); 01497 ret.push_back(Vec3f(1,0,0)); 01498 ret.push_back(Vec3f(0,1,0)); 01499 } 01500 else { 01501 ret.push_back(Vec3f(0,-1,0)); 01502 ret.push_back(Vec3f(1,0,0)); 01503 ret.push_back(Vec3f(0,1,0)); 01504 ret.push_back(Vec3f(-1,0,0)); 01505 } 01506 } 01507 else if ( nsym == 2 && inc_mirror ) { 01508 ret.push_back(Vec3f(0,0,1)); 01509 ret.push_back(Vec3f(0,-1,0)); 01510 ret.push_back(Vec3f(1,0,0)); 01511 ret.push_back(Vec3f(0,1,0)); 01512 } 01513 else { 01514 float angle = (float)(EMConsts::deg2rad*float(delim["az_max"])); 01515 ret.push_back(Vec3f(0,0,1)); 01516 ret.push_back(Vec3f(0,-1,0)); 01517 float y = -cos(angle); 01518 float x = sin(angle); 01519 ret.push_back(Vec3f(x,y,0)); 01520 } 01521 01522 return ret; 01523 01524 }
|
|
Get triangles that precisely occlude the projection area of the default asymmetric unit. This is used for collision detection in Symmetry3D::reduce
Implements EMAN::Symmetry3D. Definition at line 1432 of file symmetry.cpp. References get_asym_unit_points(), EMAN::Dict::set_default(), v, and EMAN::Vec3f. 01432 { 01433 vector<Vec3f> v = get_asym_unit_points(inc_mirror); 01434 int nsym = params.set_default("nsym",0); 01435 vector<vector<Vec3f> > ret; 01436 if ( (nsym == 1 && inc_mirror == false) || (nsym == 2 && inc_mirror)) { 01437 vector<Vec3f> tmp; 01438 tmp.push_back(v[0]); 01439 tmp.push_back(v[2]); 01440 tmp.push_back(v[1]); 01441 ret.push_back(tmp); 01442 01443 vector<Vec3f> tmp2; 01444 tmp2.push_back(v[2]); 01445 tmp2.push_back(v[0]); 01446 tmp2.push_back(v[3]); 01447 ret.push_back(tmp2); 01448 } 01449 else if (nsym == 1) { 01450 Vec3f z(0,0,1); 01451 vector<Vec3f> tmp; 01452 tmp.push_back(z); 01453 tmp.push_back(v[1]); 01454 tmp.push_back(v[0]); 01455 ret.push_back(tmp); 01456 01457 vector<Vec3f> tmp2; 01458 tmp2.push_back(z); 01459 tmp2.push_back(v[2]); 01460 tmp2.push_back(v[1]); 01461 ret.push_back(tmp2); 01462 01463 vector<Vec3f> tmp3; 01464 tmp3.push_back(z); 01465 tmp3.push_back(v[3]); 01466 tmp3.push_back(v[2]); 01467 ret.push_back(tmp3); 01468 01469 vector<Vec3f> tmp4; 01470 tmp4.push_back(z); 01471 tmp4.push_back(v[0]); 01472 tmp4.push_back(v[3]); 01473 ret.push_back(tmp4); 01474 } 01475 else { 01476 // if v.size() == 3 01477 vector<Vec3f> tmp; 01478 tmp.push_back(v[0]); 01479 tmp.push_back(v[2]); 01480 tmp.push_back(v[1]); 01481 ret.push_back(tmp); 01482 } 01483 01484 return ret; 01485 }
|
|
Get the altitude and phi angle of the d symmetry, which depends on nysm. The "alt_max" is always 90 degrees The "az_max" is 360/nsym degrees of 180/nsym, depending the inc_mirror argument
Implements EMAN::Symmetry3D. Definition at line 1380 of file symmetry.cpp. References InvalidValueException, and EMAN::Dict::set_default(). Referenced by get_asym_unit_points(), and is_in_asym_unit(). 01380 { 01381 Dict returnDict; 01382 01383 // Get the parameters of interest 01384 int nsym = params.set_default("nsym",0); 01385 if ( nsym <= 0 ) throw InvalidValueException(nsym,"Error, you must specify a positive non zero nsym"); 01386 01387 returnDict["alt_max"] = 90.0f; 01388 01389 if ( inc_mirror ) returnDict["az_max"] = 360.0f/(float)nsym; 01390 else returnDict["az_max"] = 180.0f/(float)nsym; 01391 01392 return returnDict; 01393 }
|
|
Get a description.
Implements EMAN::FactoryBase. Definition at line 362 of file symmetry.h. 00362 { return "D 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 404 of file symmetry.h. 00404 { return params["nsym"]; }
|
|
Return DSym::NAME.
Implements EMAN::FactoryBase. Definition at line 357 of file symmetry.h. 00357 { return NAME; }
|
|
Gets the total number of unique roational symmetry operations associated with this symmetry For D symmetry, this is simply 2*nsym.
Implements EMAN::Symmetry3D. Definition at line 397 of file symmetry.h. 00397 { return 2*(int)params["nsym"]; };
|
|
Get a dictionary containing the permissable parameters of this class.
Implements EMAN::FactoryBase. Definition at line 367 of file symmetry.h. References EMAN::TypeDict::put(). 00368 { 00369 TypeDict d; 00370 d.put("nsym", EMObject::INT, "The symmetry number"); 00371 return d; 00372 }
|
|
Provides access to the complete set of rotational symmetry operations associated with this symmetry. The first half symmetry operations returned by this function are all about the z axis (i.e. only azimuth is non zero. The second half of the symmetry operations are replicas of the first half, except that they have an additional 180 degree rotation about x (in EMAN terms, the altitude angle is 180).
Implements EMAN::Symmetry3D. Definition at line 1412 of file symmetry.cpp. References InvalidValueException, and EMAN::Dict::set_default(). 01413 { 01414 int nsym = 2*params.set_default("nsym",0); 01415 if ( nsym <= 0 ) throw InvalidValueException(n,"Error, you must specify a positive non zero nsym"); 01416 01417 Dict d("type","eman"); 01418 // courtesy of Phil Baldwin 01419 if (n >= nsym / 2) { 01420 d["az"] = ( (n%nsym) - nsym/2) * 360.0f / (nsym / 2); 01421 d["alt"] = 180.0f; 01422 d["phi"] = 0.0f; 01423 } 01424 else { 01425 d["az"] = (n%nsym) * 360.0f / (nsym / 2); 01426 d["alt"] = 0.0f; 01427 d["phi"] = 0.0f; 01428 } 01429 return Transform(d); 01430 }
|
|
Returns true - this is indeed a c symmetry object.
Reimplemented from EMAN::Symmetry3D. Definition at line 428 of file symmetry.h. 00428 { return true; }
|
|
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.
Implements EMAN::Symmetry3D. Definition at line 1395 of file symmetry.cpp. References get_delimiters(), and EMAN::Dict::set_default(). 01396 { 01397 Dict d = get_delimiters(inc_mirror); 01398 float alt_max = d["alt_max"]; 01399 float az_max = d["az_max"]; 01400 01401 int nsym = params.set_default("nsym",0); 01402 01403 if ( nsym == 1 && inc_mirror ) { 01404 if (altitude >= 0 && altitude <= alt_max && azimuth <= az_max ) return true; 01405 } 01406 else { 01407 if ( altitude >= 0 && altitude <= alt_max && azimuth <= az_max && azimuth >= 0 ) return true; 01408 } 01409 return false; 01410 }
|
|
Factory support function NEW.
Definition at line 349 of file symmetry.h. 00350 { 00351 return new DSym(); 00352 }
|
|
Disallow assignment.
|
|
The name of this class - used to access it from factories etc. Should be "d".
Definition at line 41 of file symmetry.cpp. |