BALL  1.4.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Classes | Protected Member Functions | Protected Attributes | Friends | List of all members
BALL::AssignBondOrderProcessor Class Reference

Assignment of bond orders from topology information. More...

#include <BALL/STRUCTURE/assignBondOrderProcessor.h>

Inheritance diagram for BALL::AssignBondOrderProcessor:
BALL::UnaryProcessor< AtomContainer > BALL::UnaryFunctor< AtomContainer, Processor::Result >

Classes

struct  Algorithm
struct  Default
 Default values for options. More...
struct  Option
 Option names. More...

Public Member Functions

Constructors and Destructors
 AssignBondOrderProcessor ()
 Default Constructor.
virtual ~AssignBondOrderProcessor ()
 Destructor.
Processor-related methods
virtual bool start ()
 Processor method which is called before the operator()-call.
void clear ()
virtual Processor::Result operator() (AtomContainer &ac)
virtual bool finish ()
 Processor method which is called after the operator()-call.
Accessors
Size getNumberOfAddedHydrogens (Position i)
Size getNumberOfComputedSolutions ()
AtomContainergetAtomContainer ()
AtomContainer const * getAtomContainer () const
const SystemgetSolution (Position i) throw (Exception::IndexOverflow)
float getTotalCharge (Position i)
float getTotalPenalty (Position i=0)
int getNumberOfNodeExpansions (Position i)
int getQueueSize (Position i)
bool apply (Position i)
void resetBondOrders ()
bool computeNextSolution (bool apply_solution=true)
void setDefaultOptions ()
bool hasValidOptions ()
float evaluatePenalty (AtomContainer *ac)
- Public Member Functions inherited from BALL::UnaryProcessor< AtomContainer >
 UnaryProcessor ()
 UnaryProcessor (const UnaryProcessor &)
virtual ~UnaryProcessor ()

Public Attributes

Public Attributes
Options options
 the processor's options

Protected Member Functions

bool readOptions_ ()
bool readAtomPenalties_ () throw (Exception::FileNotFound())
bool preassignPenaltyClasses_ ()
int getPenaltyClass_ (Atom *atom)
bool precomputeBondLengthPenalties_ ()
float computeVirtualHydrogens_ (Atom *atom)
bool apply_ (BondOrderAssignment &solution)
void storeOriginalConfiguration_ ()
int getQueueSize_ (const BondOrderAssignment &sol)
float getTotalCharge_ (const BondOrderAssignment &sol)
float getTotalPenalty_ (const BondOrderAssignment &sol)
int getNumberOfNodeExpansions_ (const BondOrderAssignment &sol)
 AssignBondOrderProcessor (const AssignBondOrderProcessor &abop)
AssignBondOrderProcessoroperator= (const AssignBondOrderProcessor &abop)

Protected Attributes

bool valid_
 Processor is in a useable valid state.
bool evaluation_mode_
 Processor is in an evaluation mode. Default is false.
std::map< Bond *, short > bond_fixed_
std::vector< Bond * > free_bonds_
HashMap< Bond *, Indexbond_to_index_
std::vector< Bond * > index_to_bond_
HashMap< Atom *, int > number_of_virtual_hydrogens_
std::vector< int > virtual_bond_index_to_number_of_virtual_hydrogens_
Size num_of_virtual_bonds_
vector< Atom * > virtual_bond_index_to_atom_
HashMap< Atom *, int > atom_to_virtual_bond_index_
Bondvirtual_bond_
Position total_num_of_bonds_
int num_of_free_bonds_
std::vector< Positionfixed_val_
vector< BondOrderAssignmentsolutions_
vector< BondOrderAssignmentstarting_configuration_
float atom_type_normalization_factor_
float bond_length_normalization_factor_
int last_applied_solution_
AtomContainerac_
int max_bond_order_
float alpha_
int max_number_of_solutions_
int max_penalty_
bool compute_also_non_optimal_solutions_
bool add_missing_hydrogens_
bool compute_also_connectivity_
bool use_fine_penalty_
vector< int > penalties_
vector< Positionblock_to_start_idx_
vector< Sizeblock_to_length_
vector< int > block_to_start_valence_
vector< std::pair< String,
String > > 
block_definition_
vector< vector< int > > atom_to_block_
HashMap< Bond *, vector< float > > bond_lengths_penalties_
Timer timer_
StringHashMap
< boost::shared_ptr
< BondOrderAssignmentStrategy > > 
strategies_

Friends

class PartialBondOrderAssignment
class BondOrderAssignment
class PQ_Entry_
class BondOrderAssignmentStrategy
class AStarBondOrderStrategy
class BranchAndBoundBondOrderStrategy
class FPTBondOrderStrategy
class ILPBondOrderStrategy
class KGreedyBondOrderStrategy

Additional Inherited Members

- Public Types inherited from BALL::UnaryFunctor< AtomContainer, Processor::Result >
typedef Processor::Result result_type
typedef AtomContainer argument_type
typedef AtomContainerargument_reference
typedef const AtomContainerconst_argument_reference
typedef AtomContainerargument_pointer
typedef const AtomContainerconst_argument_pointer

Detailed Description

Assignment of bond orders from topology information.

Called with default options the processor computes up to Default::MAX_NUMBER_OF_SOLUTIONS many possible bond orders with optimal value and applies the first solution found to the given AtomContainer.

All further optimal solutions can be applied by calling the method apply() . Additional solutions can be computed by calling the method computeNextSolution() (except when using the FPT strategy which currently does not support this behaviour).


Example code:
...
sys.apply(bop);
i = bop.getNumberOfComputedSolutions();
bop.apply(i-1);
...
while (bop.computeNextSolution())
{
i++;
bop.apply(i);
}

Definition at line 92 of file assignBondOrderProcessor.h.

Constructor & Destructor Documentation

BALL::AssignBondOrderProcessor::AssignBondOrderProcessor ( )

Default Constructor.

virtual BALL::AssignBondOrderProcessor::~AssignBondOrderProcessor ( )
virtual

Destructor.

BALL::AssignBondOrderProcessor::AssignBondOrderProcessor ( const AssignBondOrderProcessor abop)
protected

Member Function Documentation

bool BALL::AssignBondOrderProcessor::apply ( Position  i)

Applies the i-th precomputed bond order assignment.

Sets the AtomContainer's bond orders to the ones found in the (already computed!) i-th solution, start counting at 0!

NOTE: All virtual hydrogens added to the processed AtomContainer by a previous call of apply will be deleted by the current call!
Parameters
iindex of the solution whose bond orders should be assigned.
Returns
bool - true if the i-th solution is valid, false otherwise.
bool BALL::AssignBondOrderProcessor::apply_ ( BondOrderAssignment solution)
protected

Applies the given solution.

void BALL::AssignBondOrderProcessor::clear ( )

Clears the data structures.

NOTE: The options remain! Use setDefaultOptions() to clear the options.

bool BALL::AssignBondOrderProcessor::computeNextSolution ( bool  apply_solution = true)

Computes and applies one of the next best solutions.

Ignores the options MAX_NUMBER_OF_SOLUTIONS and COMPUTE_ALSO_NON_OPTIMAL_SOLUTIONS .

Returns
bool - false if no further solution can be found.
float BALL::AssignBondOrderProcessor::computeVirtualHydrogens_ ( Atom atom)
protected

Adds missing hydrogens as virtual hydrogens to the given atom, determines the possible penalty blocks, and returns the maximal possible atom type penalty.

"virtual" means that NO atoms and bonds are added to the original AtomContainer.

Parameters
atomthe atom, to which the virtual hydrogens should be added.
Returns
float - the max possible penalty the atom can get, if hydrogen(s) are added.
See Also
Option::ADD_HYDROGENS
float BALL::AssignBondOrderProcessor::evaluatePenalty ( AtomContainer ac)

Evaluates the AtomContainer's bond orders as specified in the Options and returns the computed penalty.

Parameters
acAtomContainer, whose bond orders should be evaluated.
Returns
float - computed penalty, -1 if current assignment is not valid or includes aromatic bonds.
virtual bool BALL::AssignBondOrderProcessor::finish ( )
virtual

Processor method which is called after the operator()-call.

Reimplemented from BALL::UnaryProcessor< AtomContainer >.

AtomContainer* BALL::AssignBondOrderProcessor::getAtomContainer ( )
inline

Returns a pointer to the original Molecule as AtomContainer.

Definition at line 395 of file assignBondOrderProcessor.h.

AtomContainer const* BALL::AssignBondOrderProcessor::getAtomContainer ( ) const
inline

Returns a nonmutable pointer to the original Molecule as AtomContainer.

Definition at line 399 of file assignBondOrderProcessor.h.

Size BALL::AssignBondOrderProcessor::getNumberOfAddedHydrogens ( Position  i)
inline

Returns the number of added hydrogens in solution i.

NOTE: Hydrogens can only be added using the Option::ADD_HYDROGENS-option.

Returns
Size - number of hydrogens added in assignment solution i.
See Also
Option::ADD_HYDROGENS

Definition at line 366 of file assignBondOrderProcessor.h.

Size BALL::AssignBondOrderProcessor::getNumberOfComputedSolutions ( )
inline

Returns the number of already computed solutions.

NOTE: Having applied the operator with option Option Algorithm::A_STAR this method returns the number of optimal solutions+1!

Returns
Size - number of already computed solutions.
See Also
Option::COMPUTE_ALSO_NON_OPTIMAL_SOLUTIONS
Option::MAX_NUMBER_OF_SOLUTIONS

Definition at line 390 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::getNumberOfNodeExpansions ( Position  i)
inline

Definition at line 454 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::getNumberOfNodeExpansions_ ( const BondOrderAssignment sol)
inlineprotected

Definition at line 653 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::getPenaltyClass_ ( Atom atom)
protected

Finds the first matching SMARTS-expression in the penalty-vector and returns its index.

Return values
int-1 if there is no matching expression
int BALL::AssignBondOrderProcessor::getQueueSize ( Position  i)
inline

Definition at line 471 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::getQueueSize_ ( const BondOrderAssignment sol)
inlineprotected

Definition at line 617 of file assignBondOrderProcessor.h.

const System& BALL::AssignBondOrderProcessor::getSolution ( Position  i) throw (Exception::IndexOverflow)

Returns a reference to the original system to which solution i was applied.

NOTE: This method has the same effect as calling apply(i)!

Parameters
iindex of the solution, whose bond order assignment should be applied.
Returns
const System& - the original system with bond order assignment of solution i. If i is invalid, an Exception is thrown.
float BALL::AssignBondOrderProcessor::getTotalCharge ( Position  i)
inline

Returns the total charge of solution i.

NOTE: This method is still experimental.

Parameters
iindex of the solution, whose charge should be computed.
Returns
float - total charge of solution i.

Definition at line 418 of file assignBondOrderProcessor.h.

float BALL::AssignBondOrderProcessor::getTotalCharge_ ( const BondOrderAssignment sol)
inlineprotected

Returns the total charge of a solution.

Parameters
solsolution, whose charge should be computed.
Returns
float - total charge of the given solution.

Definition at line 625 of file assignBondOrderProcessor.h.

float BALL::AssignBondOrderProcessor::getTotalPenalty ( Position  i = 0)
inline

Returns the total penalty of solution i.

Parameters
iindex of the solution, whose penalty should be returned.
Returns
float - total penalty of solution i.

Definition at line 437 of file assignBondOrderProcessor.h.

float BALL::AssignBondOrderProcessor::getTotalPenalty_ ( const BondOrderAssignment sol)
inlineprotected

Returns the total penalty of the given solution.

Parameters
solsolution, whose penalty should be returned.
Returns
float - total penalty of solution i.
See Also
Option::BOND_LENGTH_WEIGHTING;

Definition at line 643 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::hasValidOptions ( )
inline

Checks the options.

Definition at line 519 of file assignBondOrderProcessor.h.

virtual Processor::Result BALL::AssignBondOrderProcessor::operator() ( AtomContainer ac)
virtual

Operator () for the processor

Called with Default-options the processor computes all possible bond order assignments with optimal atomic penalty value and applies the first solution to the given AtomContainer.

NOTE: Having used the Algorithm::A_STAR-option (default) the method getNumberOfComputedSolutions() will return the number of optimal solutions+1!

Parameters
acthe AtomContainer to which the processor is applied.

Reimplemented from BALL::UnaryProcessor< AtomContainer >.

AssignBondOrderProcessor& BALL::AssignBondOrderProcessor::operator= ( const AssignBondOrderProcessor abop)
protected
bool BALL::AssignBondOrderProcessor::preassignPenaltyClasses_ ( )
protected

Assigns every atom of the AtomContainer to which the processor is applied to a block of possible valences and the corresponding penalties.

Return values
bool- false if the AtomContainer to which the processor is applied to has an atom with no matching penalty block.
bool- true otherwise
bool BALL::AssignBondOrderProcessor::precomputeBondLengthPenalties_ ( )
protected

Precomputes for every bond of the AtomContainer, to which the processor is applied to, the possible bond length penalties resulting from deviation of the actual bond length to a standard length for bonds with same atom types and the chosen bond order.

If there is no information for certain atom pairs, penalty 0 is assumed. In case of incomplete information, we assume the missing bond orders to be really unlikely and we set a penalty to 2* max_deviation_found (for this bond).
Return values
bool- false if the AtomContainer is invalid or the processor is in an invalid state
bool- true otherwise
bool BALL::AssignBondOrderProcessor::readAtomPenalties_ ( ) throw (Exception::FileNotFound())
protected

Reads and stores the penalty-INIFile (for example BondOrder.ini).

Returns
bool - false if the INIFile could not be read correctly.
bool BALL::AssignBondOrderProcessor::readOptions_ ( )
protected

Reads, checks and stores the options.

Returns
bool - false if one of the options got an invalid value.
bool - true otherwise
void BALL::AssignBondOrderProcessor::resetBondOrders ( )

Resets all bond orders and assigned hydrogens.

Assigns the original bond order assignments to the AtomContainer we are operating on.

void BALL::AssignBondOrderProcessor::setDefaultOptions ( )

Resets the options to default values.

virtual bool BALL::AssignBondOrderProcessor::start ( )
virtual

Processor method which is called before the operator()-call.

Reimplemented from BALL::UnaryProcessor< AtomContainer >.

void BALL::AssignBondOrderProcessor::storeOriginalConfiguration_ ( )
protected

Stores the original configuration of the AtomContainer.

Friends And Related Function Documentation

friend class AStarBondOrderStrategy
friend

Definition at line 104 of file assignBondOrderProcessor.h.

friend class BondOrderAssignment
friend

Definition at line 97 of file assignBondOrderProcessor.h.

friend class BondOrderAssignmentStrategy
friend

Definition at line 102 of file assignBondOrderProcessor.h.

friend class BranchAndBoundBondOrderStrategy
friend

Definition at line 105 of file assignBondOrderProcessor.h.

friend class FPTBondOrderStrategy
friend

Definition at line 106 of file assignBondOrderProcessor.h.

friend class ILPBondOrderStrategy
friend

Definition at line 107 of file assignBondOrderProcessor.h.

friend class KGreedyBondOrderStrategy
friend

Definition at line 108 of file assignBondOrderProcessor.h.

friend class PartialBondOrderAssignment
friend

Definition at line 96 of file assignBondOrderProcessor.h.

friend class PQ_Entry_
friend

Definition at line 99 of file assignBondOrderProcessor.h.

Member Data Documentation

AtomContainer* BALL::AssignBondOrderProcessor::ac_
protected

Definition at line 727 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::add_missing_hydrogens_
protected

Definition at line 745 of file assignBondOrderProcessor.h.

float BALL::AssignBondOrderProcessor::alpha_
protected

Definition at line 733 of file assignBondOrderProcessor.h.

vector< vector<int> > BALL::AssignBondOrderProcessor::atom_to_block_
protected

Definition at line 774 of file assignBondOrderProcessor.h.

HashMap<Atom*, int> BALL::AssignBondOrderProcessor::atom_to_virtual_bond_index_
protected

Definition at line 692 of file assignBondOrderProcessor.h.

float BALL::AssignBondOrderProcessor::atom_type_normalization_factor_
protected

Definition at line 717 of file assignBondOrderProcessor.h.

vector<std::pair<String, String> > BALL::AssignBondOrderProcessor::block_definition_
protected

Definition at line 767 of file assignBondOrderProcessor.h.

vector<Size> BALL::AssignBondOrderProcessor::block_to_length_
protected

Definition at line 764 of file assignBondOrderProcessor.h.

vector<Position> BALL::AssignBondOrderProcessor::block_to_start_idx_
protected

Definition at line 763 of file assignBondOrderProcessor.h.

vector<int> BALL::AssignBondOrderProcessor::block_to_start_valence_
protected

Definition at line 765 of file assignBondOrderProcessor.h.

std::map<Bond*, short> BALL::AssignBondOrderProcessor::bond_fixed_
protected

Definition at line 663 of file assignBondOrderProcessor.h.

float BALL::AssignBondOrderProcessor::bond_length_normalization_factor_
protected

Definition at line 720 of file assignBondOrderProcessor.h.

HashMap<Bond*, vector<float> > BALL::AssignBondOrderProcessor::bond_lengths_penalties_
protected

Definition at line 777 of file assignBondOrderProcessor.h.

HashMap<Bond*, Index> BALL::AssignBondOrderProcessor::bond_to_index_
protected

Definition at line 669 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::compute_also_connectivity_
protected

Definition at line 748 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::compute_also_non_optimal_solutions_
protected

Definition at line 742 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::evaluation_mode_
protected

Processor is in an evaluation mode. Default is false.

Definition at line 659 of file assignBondOrderProcessor.h.

std::vector<Position> BALL::AssignBondOrderProcessor::fixed_val_
protected

Definition at line 707 of file assignBondOrderProcessor.h.

std::vector<Bond*> BALL::AssignBondOrderProcessor::free_bonds_
protected

Definition at line 666 of file assignBondOrderProcessor.h.

std::vector<Bond*> BALL::AssignBondOrderProcessor::index_to_bond_
protected

Definition at line 672 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::last_applied_solution_
protected

Definition at line 724 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::max_bond_order_
protected

Definition at line 730 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::max_number_of_solutions_
protected

Definition at line 736 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::max_penalty_
protected

Definition at line 739 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::num_of_free_bonds_
protected

Definition at line 704 of file assignBondOrderProcessor.h.

Size BALL::AssignBondOrderProcessor::num_of_virtual_bonds_
protected

Definition at line 688 of file assignBondOrderProcessor.h.

HashMap<Atom*, int> BALL::AssignBondOrderProcessor::number_of_virtual_hydrogens_
protected

Definition at line 682 of file assignBondOrderProcessor.h.

Options BALL::AssignBondOrderProcessor::options

the processor's options

Definition at line 534 of file assignBondOrderProcessor.h.

vector<int> BALL::AssignBondOrderProcessor::penalties_
protected

Definition at line 762 of file assignBondOrderProcessor.h.

vector<BondOrderAssignment> BALL::AssignBondOrderProcessor::solutions_
protected

Definition at line 710 of file assignBondOrderProcessor.h.

vector<BondOrderAssignment> BALL::AssignBondOrderProcessor::starting_configuration_
protected

Definition at line 714 of file assignBondOrderProcessor.h.

StringHashMap<boost::shared_ptr<BondOrderAssignmentStrategy> > BALL::AssignBondOrderProcessor::strategies_
protected

Definition at line 785 of file assignBondOrderProcessor.h.

Timer BALL::AssignBondOrderProcessor::timer_
protected

Definition at line 779 of file assignBondOrderProcessor.h.

Position BALL::AssignBondOrderProcessor::total_num_of_bonds_
protected

Definition at line 701 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::use_fine_penalty_
protected

Definition at line 751 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::valid_
protected

Processor is in a useable valid state.

Definition at line 656 of file assignBondOrderProcessor.h.

Bond* BALL::AssignBondOrderProcessor::virtual_bond_
protected

Definition at line 696 of file assignBondOrderProcessor.h.

vector<Atom*> BALL::AssignBondOrderProcessor::virtual_bond_index_to_atom_
protected

Definition at line 691 of file assignBondOrderProcessor.h.

std::vector<int> BALL::AssignBondOrderProcessor::virtual_bond_index_to_number_of_virtual_hydrogens_
protected

Definition at line 685 of file assignBondOrderProcessor.h.