Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

EMAN::RandomOrientationGenerator Class Reference

Random Orientation Generator - carefully generates uniformly random orientations in any asymmetric unit. More...

#include <symmetry.h>

Inheritance diagram for EMAN::RandomOrientationGenerator:

Inheritance graph
[legend]
Collaboration diagram for EMAN::RandomOrientationGenerator:

Collaboration graph
[legend]
List of all members.

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< Transformgen_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

OrientationGeneratorNEW ()
 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.
RandomOrientationGeneratoroperator= (const RandomOrientationGenerator &)
 Disallow assignment.

Detailed Description

Random Orientation Generator - carefully generates uniformly random orientations in any asymmetric unit.

For points distributed in the unit sphere, just use the CSym type with nysm = 1. (i.e. c1 symmetry)

Author:
David Woolford
Date:
March 2008

Definition at line 1165 of file symmetry.h.


Constructor & Destructor Documentation

EMAN::RandomOrientationGenerator::RandomOrientationGenerator  )  [inline]
 

Definition at line 1168 of file symmetry.h.

01168 {}

virtual EMAN::RandomOrientationGenerator::~RandomOrientationGenerator  )  [inline, virtual]
 

Definition at line 1169 of file symmetry.h.

01169 {}

EMAN::RandomOrientationGenerator::RandomOrientationGenerator const RandomOrientationGenerator  )  [private]
 

Disallow copy construction.


Member Function Documentation

vector< Transform > RandomOrientationGenerator::gen_orientations const Symmetry3D *const   sym  )  const [virtual]
 

Generate random orientations in the asymmetric unit of the symmetry.

Parameters:
sym the symmetry which defines the interesting asymmetric unit
Returns:
a vector of Transform objects containing the set of evenly distributed orientations

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 }

virtual string EMAN::RandomOrientationGenerator::get_desc  )  const [inline, virtual]
 

Get a description.

Returns:
a clear desciption of this class

Implements EMAN::FactoryBase.

Definition at line 1187 of file symmetry.h.

01187 { return "Generate random orientations within an asymmetric unit"; }

virtual string EMAN::RandomOrientationGenerator::get_name  )  const [inline, virtual]
 

Return "random".

Returns:
the unique name of this class

Implements EMAN::FactoryBase.

Definition at line 1182 of file symmetry.h.

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.

Parameters:
sym the symmetry which defines the interesting asymmetric unit
delta the desired angular spacing of the orientations
Returns:
the number of orientations that will be generated using these parameters

Implements EMAN::OrientationGenerator.

Definition at line 1211 of file symmetry.h.

01211 { (void)sym; (void)delta; return 0; }

virtual TypeDict EMAN::RandomOrientationGenerator::get_param_types  )  const [inline, virtual]
 

Get a dictionary containing the permissable parameters of this class.

Returns:
a dictionary containing the permissable parameters of this class parameters are explained in the dictionary itself

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                 }

OrientationGenerator* EMAN::RandomOrientationGenerator::NEW  )  [inline, static]
 

Factory support function NEW.

Returns:
a newly instantiated class of this type

Definition at line 1174 of file symmetry.h.

01175                 {
01176                         return new RandomOrientationGenerator();
01177                 }

RandomOrientationGenerator& EMAN::RandomOrientationGenerator::operator= const RandomOrientationGenerator  )  [private]
 

Disallow assignment.


Member Data Documentation

const string RandomOrientationGenerator::NAME = "rand" [static]
 

The name of this class - used to access it from factories etc.

Definition at line 50 of file symmetry.cpp.


The documentation for this class was generated from the following files:
Generated on Tue Jun 11 13:49:48 2013 for EMAN2 by  doxygen 1.3.9.1