#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 1165 of file symmetry.h.
|
Definition at line 1168 of file symmetry.h. 01168 {}
|
|
Definition at line 1169 of file symmetry.h. 01169 {}
|
|
Disallow copy construction.
|
|
Generate random orientations in the asymmetric unit of the symmetry.
Implements EMAN::OrientationGenerator. Definition at line 510 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. 00511 { 00512 int n = params.set_default("n", 0); 00513 00514 if ( n <= 0 ) throw InvalidParameterException("You must specify a positive, non zero n for the Random Orientation Generator"); 00515 00516 bool phitoo = params.set_default("phitoo", false); 00517 bool inc_mirror = params.set_default("inc_mirror", false); 00518 00519 vector<Transform> ret; 00520 00521 int i = 0; 00522 Dict d("type","eman"); 00523 while ( i < n ){ 00524 float u1 = Util::get_frand(-1.0f,1.0f); 00525 float u2 = Util::get_frand(-1.0f,1.0f); 00526 float s = u1*u1 + u2*u2; 00527 if ( s > 1.0f ) continue; 00528 float alpha = 2.0f*sqrtf(1.0f-s); 00529 float x = alpha * u1; 00530 float y = alpha * u2; 00531 float z = 2.0f*s-1.0f; 00532 00533 float altitude = (float)EMConsts::rad2deg*acos(z); 00534 float azimuth = (float)EMConsts::rad2deg*atan2(y,x); 00535 00536 float phi = 0.0f; 00537 if ( phitoo ) phi = Util::get_frand(0.0f,359.9999f); 00538 00539 d["az"] = azimuth; d["phi"] = phi; d["alt"] = altitude; 00540 Transform t(d); 00541 00542 if ( !(sym->is_c_sym() && sym->get_nsym() == 1)) t = sym->reduce(t); //reduce doesn't make sense for C1 symmetry 00543 00544 if ( !sym->is_in_asym_unit(altitude,azimuth,inc_mirror) ){ 00545 // is_in_asym_unit has returned the wrong value! 00546 // FIXME 00547 // cout << "warning, there is an unresolved issue - email D Woolford" << endl; 00548 } 00549 ret.push_back(t); 00550 i++; 00551 } 00552 return ret; 00553 }
|
|
Get a description.
Implements EMAN::FactoryBase. Definition at line 1187 of file symmetry.h. 01187 { return "Generate random orientations within an asymmetric unit"; }
|
|
Return "random".
Implements EMAN::FactoryBase. Definition at line 1182 of file symmetry.h. 01182 { 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 1211 of file symmetry.h. 01211 { (void)sym; (void)delta; return 0; }
|
|
Get a dictionary containing the permissable parameters of this class.
Reimplemented from EMAN::OrientationGenerator. Definition at line 1193 of file symmetry.h. References EMAN::TypeDict::put(). 01194 { 01195 TypeDict d; 01196 d.put("n", EMObject::INT, "The number of orientations to generate."); 01197 d.put("inc_mirror", EMObject::BOOL, "Indicates whether or not to include the mirror portion of the asymmetric unit. Default is false."); 01198 d.put("phitoo", EMObject::BOOL, "Makes phi random as well"); 01199 return d; 01200 }
|
|
Factory support function NEW.
Definition at line 1174 of file symmetry.h. 01175 { 01176 return new RandomOrientationGenerator(); 01177 }
|
|
Disallow assignment.
|
|
The name of this class - used to access it from factories etc.
Definition at line 50 of file symmetry.cpp. |