#include <symmetry.h>
Inheritance diagram for EMAN::RandomOrientationGenerator:
Public Member Functions | |
RandomOrientationGenerator () | |
virtual | ~RandomOrientationGenerator () |
virtual string | get_name () const |
Return "random". | |
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 vector< Transform > | gen_orientations (const Symmetry3D *const sym) const |
Generate random orientations in the asymmetric unit of the symmetry. | |
virtual int | get_orientations_tally (const Symmetry3D *const sym, const float &delta) const |
This function returns how many orientations will be generated for a given delta (angular spacing) It should general do this by simulating the function gen_orientations. | |
Static Public Member Functions | |
OrientationGenerator * | NEW () |
Factory support function NEW. | |
Static Public Attributes | |
const string | NAME = "rand" |
The name of this class - used to access it from factories etc. | |
Private Member Functions | |
RandomOrientationGenerator (const RandomOrientationGenerator &) | |
Disallow copy construction. | |
RandomOrientationGenerator & | operator= (const RandomOrientationGenerator &) |
Disallow assignment. |
For points distributed in the unit sphere, just use the CSym type with nysm = 1. (i.e. c1 symmetry)
Definition at line 1100 of file symmetry.h.
|
Definition at line 1103 of file symmetry.h. 01103 {}
|
|
Definition at line 1104 of file symmetry.h. 01104 {}
|
|
Disallow copy construction.
|
|
Generate random orientations in the asymmetric unit of the symmetry.
Implements EMAN::OrientationGenerator. Definition at line 504 of file symmetry.cpp. References EMAN::Util::get_frand(), EMAN::Symmetry3D::get_nsym(), InvalidParameterException, EMAN::Symmetry3D::is_c_sym(), EMAN::Symmetry3D::is_in_asym_unit(), phi, EMAN::Symmetry3D::reduce(), EMAN::Dict::set_default(), t, x, and y. 00505 { 00506 int n = params.set_default("n", 0); 00507 00508 if ( n <= 0 ) throw InvalidParameterException("You must specify a positive, non zero n for the Random Orientation Generator"); 00509 00510 bool phitoo = params.set_default("phitoo", false); 00511 bool inc_mirror = params.set_default("inc_mirror", false); 00512 00513 vector<Transform> ret; 00514 00515 int i = 0; 00516 Dict d("type","eman"); 00517 while ( i < n ){ 00518 float u1 = Util::get_frand(-1.0f,1.0f); 00519 float u2 = Util::get_frand(-1.0f,1.0f); 00520 float s = u1*u1 + u2*u2; 00521 if ( s > 1.0f ) continue; 00522 float alpha = 2.0f*sqrtf(1.0f-s); 00523 float x = alpha * u1; 00524 float y = alpha * u2; 00525 float z = 2.0f*s-1.0f; 00526 00527 float altitude = (float)EMConsts::rad2deg*acos(z); 00528 float azimuth = (float)EMConsts::rad2deg*atan2(y,x); 00529 00530 float phi = 0.0f; 00531 if ( phitoo ) phi = Util::get_frand(0.0f,359.9999f); 00532 00533 d["az"] = azimuth; d["phi"] = phi; d["alt"] = altitude; 00534 Transform t(d); 00535 00536 if ( !(sym->is_c_sym() && sym->get_nsym() == 1)) t = sym->reduce(t); //reduce doesn't make sense for C1 symmetry 00537 00538 if ( !sym->is_in_asym_unit(altitude,azimuth,inc_mirror) ){ 00539 // is_in_asym_unit has returned the wrong value! 00540 // FIXME 00541 // cout << "warning, there is an unresolved issue - email D Woolford" << endl; 00542 } 00543 ret.push_back(t); 00544 i++; 00545 } 00546 return ret; 00547 }
|
|
Get a description.
Implements EMAN::FactoryBase. Definition at line 1122 of file symmetry.h. 01122 { return "Generate random orientations within an asymmetric unit"; }
|
|
Return "random".
Implements EMAN::FactoryBase. Definition at line 1117 of file symmetry.h. 01117 { return NAME; }
|
|
This function returns how many orientations will be generated for a given delta (angular spacing) It should general do this by simulating the function gen_orientations.
Implements EMAN::OrientationGenerator. Definition at line 1146 of file symmetry.h. 01146 { (void)sym; (void)delta; return 0; }
|
|
Get a dictionary containing the permissable parameters of this class.
Reimplemented from EMAN::OrientationGenerator. Definition at line 1128 of file symmetry.h. References EMAN::TypeDict::put(). 01129 { 01130 TypeDict d; 01131 d.put("n", EMObject::INT, "The number of orientations to generate."); 01132 d.put("inc_mirror", EMObject::BOOL, "Indicates whether or not to include the mirror portion of the asymmetric unit. Default is false."); 01133 d.put("phitoo", EMObject::BOOL, "Makes phi random as well"); 01134 return d; 01135 }
|
|
Factory support function NEW.
Definition at line 1109 of file symmetry.h. 01110 { 01111 return new RandomOrientationGenerator(); 01112 }
|
|
Disallow assignment.
|
|
The name of this class - used to access it from factories etc.
Definition at line 49 of file symmetry.cpp. |