BALL  1.4.2
 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. More...
 
virtual ~AssignBondOrderProcessor ()
 Destructor. More...
 
Processor-related methods
virtual bool start ()
 Processor method which is called before the operator()-call. More...
 
void clear ()
 
virtual Processor::Result operator() (AtomContainer &ac)
 
virtual bool finish ()
 Processor method which is called after the operator()-call. More...
 
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 More...
 

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. More...
 
bool evaluation_mode_
 Processor is in an evaluation mode. Default is false. More...
 
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 88 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 391 of file assignBondOrderProcessor.h.

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

Returns a nonmutable pointer to the original Molecule as AtomContainer.

Definition at line 395 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 362 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 386 of file assignBondOrderProcessor.h.

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

Definition at line 450 of file assignBondOrderProcessor.h.

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

Definition at line 649 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 467 of file assignBondOrderProcessor.h.

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

Definition at line 613 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 414 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 621 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 433 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 639 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::hasValidOptions ( )
inline

Checks the options.

Definition at line 515 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 100 of file assignBondOrderProcessor.h.

friend class BondOrderAssignment
friend

Definition at line 93 of file assignBondOrderProcessor.h.

friend class BondOrderAssignmentStrategy
friend

Definition at line 98 of file assignBondOrderProcessor.h.

friend class BranchAndBoundBondOrderStrategy
friend

Definition at line 101 of file assignBondOrderProcessor.h.

friend class FPTBondOrderStrategy
friend

Definition at line 102 of file assignBondOrderProcessor.h.

friend class ILPBondOrderStrategy
friend

Definition at line 103 of file assignBondOrderProcessor.h.

friend class KGreedyBondOrderStrategy
friend

Definition at line 104 of file assignBondOrderProcessor.h.

friend class PartialBondOrderAssignment
friend

Definition at line 92 of file assignBondOrderProcessor.h.

friend class PQ_Entry_
friend

Definition at line 95 of file assignBondOrderProcessor.h.

Member Data Documentation

AtomContainer* BALL::AssignBondOrderProcessor::ac_
protected

Definition at line 723 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::add_missing_hydrogens_
protected

Definition at line 741 of file assignBondOrderProcessor.h.

float BALL::AssignBondOrderProcessor::alpha_
protected

Definition at line 729 of file assignBondOrderProcessor.h.

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

Definition at line 770 of file assignBondOrderProcessor.h.

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

Definition at line 688 of file assignBondOrderProcessor.h.

float BALL::AssignBondOrderProcessor::atom_type_normalization_factor_
protected

Definition at line 713 of file assignBondOrderProcessor.h.

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

Definition at line 763 of file assignBondOrderProcessor.h.

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

Definition at line 760 of file assignBondOrderProcessor.h.

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

Definition at line 759 of file assignBondOrderProcessor.h.

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

Definition at line 761 of file assignBondOrderProcessor.h.

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

Definition at line 659 of file assignBondOrderProcessor.h.

float BALL::AssignBondOrderProcessor::bond_length_normalization_factor_
protected

Definition at line 716 of file assignBondOrderProcessor.h.

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

Definition at line 773 of file assignBondOrderProcessor.h.

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

Definition at line 665 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::compute_also_connectivity_
protected

Definition at line 744 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::compute_also_non_optimal_solutions_
protected

Definition at line 738 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::evaluation_mode_
protected

Processor is in an evaluation mode. Default is false.

Definition at line 655 of file assignBondOrderProcessor.h.

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

Definition at line 703 of file assignBondOrderProcessor.h.

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

Definition at line 662 of file assignBondOrderProcessor.h.

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

Definition at line 668 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::last_applied_solution_
protected

Definition at line 720 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::max_bond_order_
protected

Definition at line 726 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::max_number_of_solutions_
protected

Definition at line 732 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::max_penalty_
protected

Definition at line 735 of file assignBondOrderProcessor.h.

int BALL::AssignBondOrderProcessor::num_of_free_bonds_
protected

Definition at line 700 of file assignBondOrderProcessor.h.

Size BALL::AssignBondOrderProcessor::num_of_virtual_bonds_
protected

Definition at line 684 of file assignBondOrderProcessor.h.

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

Definition at line 678 of file assignBondOrderProcessor.h.

Options BALL::AssignBondOrderProcessor::options

the processor's options

Definition at line 530 of file assignBondOrderProcessor.h.

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

Definition at line 758 of file assignBondOrderProcessor.h.

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

Definition at line 706 of file assignBondOrderProcessor.h.

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

Definition at line 710 of file assignBondOrderProcessor.h.

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

Definition at line 781 of file assignBondOrderProcessor.h.

Timer BALL::AssignBondOrderProcessor::timer_
protected

Definition at line 775 of file assignBondOrderProcessor.h.

Position BALL::AssignBondOrderProcessor::total_num_of_bonds_
protected

Definition at line 697 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::use_fine_penalty_
protected

Definition at line 747 of file assignBondOrderProcessor.h.

bool BALL::AssignBondOrderProcessor::valid_
protected

Processor is in a useable valid state.

Definition at line 652 of file assignBondOrderProcessor.h.

Bond* BALL::AssignBondOrderProcessor::virtual_bond_
protected

Definition at line 692 of file assignBondOrderProcessor.h.

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

Definition at line 687 of file assignBondOrderProcessor.h.

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

Definition at line 681 of file assignBondOrderProcessor.h.