#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 | |
static OrientationGenerator * | NEW () |
Factory support function NEW. | |
Static Public Attributes | |
static 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.
EMAN::RandomOrientationGenerator::RandomOrientationGenerator | ( | ) | [inline] |
virtual EMAN::RandomOrientationGenerator::~RandomOrientationGenerator | ( | ) | [inline, virtual] |
EMAN::RandomOrientationGenerator::RandomOrientationGenerator | ( | const RandomOrientationGenerator & | ) | [private] |
Disallow copy construction.
vector< Transform > RandomOrientationGenerator::gen_orientations | ( | const Symmetry3D *const | sym | ) | const [virtual] |
Generate random orientations in the asymmetric unit of the symmetry.
sym | the symmetry which defines the interesting asymmetric unit |
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(), EMAN::FactoryBase::params, phi, EMAN::EMConsts::rad2deg, 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 }
virtual string EMAN::RandomOrientationGenerator::get_desc | ( | ) | const [inline, virtual] |
Get a description.
Implements EMAN::FactoryBase.
Definition at line 1187 of file symmetry.h.
virtual string EMAN::RandomOrientationGenerator::get_name | ( | ) | const [inline, virtual] |
Return "random".
Implements EMAN::FactoryBase.
Definition at line 1182 of file symmetry.h.
References NAME.
01182 { return NAME; }
virtual int EMAN::RandomOrientationGenerator::get_orientations_tally | ( | const Symmetry3D *const | sym, | |
const float & | delta | |||
) | const [inline, virtual] |
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.
sym | the symmetry which defines the interesting asymmetric unit | |
delta | the desired angular spacing of the orientations |
Implements EMAN::OrientationGenerator.
Definition at line 1211 of file symmetry.h.
virtual TypeDict EMAN::RandomOrientationGenerator::get_param_types | ( | ) | const [inline, virtual] |
Get a dictionary containing the permissable parameters of this class.
Reimplemented from EMAN::OrientationGenerator.
Definition at line 1193 of file symmetry.h.
References EMAN::EMObject::BOOL, EMAN::EMObject::INT, and 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 }
static OrientationGenerator* EMAN::RandomOrientationGenerator::NEW | ( | ) | [inline, static] |
Factory support function NEW.
Definition at line 1174 of file symmetry.h.
References RandomOrientationGenerator().
01175 { 01176 return new RandomOrientationGenerator(); 01177 }
RandomOrientationGenerator& EMAN::RandomOrientationGenerator::operator= | ( | const RandomOrientationGenerator & | ) | [private] |
Disallow assignment.
const string RandomOrientationGenerator::NAME = "rand" [static] |
The name of this class - used to access it from factories etc.
Definition at line 1209 of file symmetry.h.
Referenced by EMAN::OptimumOrientationGenerator::gen_orientations(), and get_name().