| [4694df] | 1 | /* | 
|---|
|  | 2 | * HomologyContainer.hpp | 
|---|
|  | 3 | * | 
|---|
|  | 4 | *  Created on: Sep 22, 2012 | 
|---|
|  | 5 | *      Author: heber | 
|---|
|  | 6 | */ | 
|---|
|  | 7 |  | 
|---|
|  | 8 | #ifndef HOMOLOGYCONTAINER_HPP_ | 
|---|
|  | 9 | #define HOMOLOGYCONTAINER_HPP_ | 
|---|
|  | 10 |  | 
|---|
|  | 11 |  | 
|---|
|  | 12 | // include config.h | 
|---|
|  | 13 | #ifdef HAVE_CONFIG_H | 
|---|
|  | 14 | #include <config.h> | 
|---|
|  | 15 | #endif | 
|---|
|  | 16 |  | 
|---|
|  | 17 | #include <map> | 
|---|
| [77b350] | 18 | #include <vector> | 
|---|
| [4694df] | 19 |  | 
|---|
| [77b350] | 20 | #include "Fragmentation/Homology/HomologyGraph.hpp" | 
|---|
|  | 21 |  | 
|---|
|  | 22 | class Fragment | 
|---|
|  | 23 | { | 
|---|
|  | 24 | public: | 
|---|
|  | 25 | typedef std::vector<double> position_t; | 
|---|
|  | 26 | typedef std::vector< position_t > positions_t; | 
|---|
|  | 27 | typedef std::vector< double > charges_t; | 
|---|
|  | 28 | typedef std::pair< position_t, double> nucleus_t; | 
|---|
|  | 29 | typedef std::vector< nucleus_t > nuclei_t; | 
|---|
|  | 30 | Fragment() {} | 
|---|
|  | 31 | Fragment(const positions_t &_positions, const charges_t &_charges) {} | 
|---|
|  | 32 | }; | 
|---|
| [4694df] | 33 |  | 
|---|
|  | 34 |  | 
|---|
|  | 35 | /** This class takes all KeySets in a Graph, checks for those that homologues | 
|---|
|  | 36 | * of one another and places them together. | 
|---|
|  | 37 | * | 
|---|
|  | 38 | * This is meant as a storage for key, value pairs, where the key is the KeySet | 
|---|
|  | 39 | * and the value is the energy associated to the fragment this keyset | 
|---|
|  | 40 | * represents. | 
|---|
|  | 41 | * Afterwards this can then be used as training data for a high-dimensional | 
|---|
|  | 42 | * approximation to the Born-Oppenheimer-surface decomposed into lower- | 
|---|
|  | 43 | * dimensional terms in an ANOVA-like fashion. | 
|---|
|  | 44 | * | 
|---|
|  | 45 | */ | 
|---|
|  | 46 | class HomologyContainer | 
|---|
|  | 47 | { | 
|---|
|  | 48 | public: | 
|---|
| [77b350] | 49 | typedef double energy_t; | 
|---|
|  | 50 | typedef std::pair<Fragment, energy_t> value_t; | 
|---|
|  | 51 | typedef std::multimap< HomologyGraph, value_t> container_t; | 
|---|
|  | 52 | typedef std::pair< container_t::const_iterator, container_t::const_iterator> range_t; | 
|---|
|  | 53 | public: | 
|---|
|  | 54 | /** Default Constructor of class HomologyContainer. | 
|---|
|  | 55 | * | 
|---|
|  | 56 | */ | 
|---|
|  | 57 | HomologyContainer() {} | 
|---|
|  | 58 |  | 
|---|
|  | 59 | /** Constructor of class HomologyContainer. | 
|---|
|  | 60 | * | 
|---|
|  | 61 | * @param values values with with to initially fill the container | 
|---|
|  | 62 | */ | 
|---|
|  | 63 | HomologyContainer(const container_t &values) : | 
|---|
|  | 64 | container(values) | 
|---|
|  | 65 | {} | 
|---|
|  | 66 | /** Destructor of class HomologyContainer. | 
|---|
|  | 67 | * | 
|---|
|  | 68 | */ | 
|---|
| [4694df] | 69 | ~HomologyContainer() {} | 
|---|
|  | 70 |  | 
|---|
| [77b350] | 71 | /** Inserter for more graphs along with values. | 
|---|
|  | 72 | * | 
|---|
|  | 73 | * @param values graph and values to insert | 
|---|
|  | 74 | */ | 
|---|
|  | 75 | void insert(const container_t &values) { | 
|---|
|  | 76 | container.insert(values.begin(), values.end()); | 
|---|
|  | 77 | } | 
|---|
|  | 78 |  | 
|---|
|  | 79 | /** Returns iterator range with all contained graphs homologous to the given \a graph. | 
|---|
|  | 80 | * | 
|---|
|  | 81 | * @param graph graph to match | 
|---|
|  | 82 | * @return iterator range with all matches | 
|---|
|  | 83 | */ | 
|---|
|  | 84 | range_t getHomologousGraphs(const HomologyGraph &graph) { | 
|---|
|  | 85 | return container.equal_range(graph); | 
|---|
|  | 86 | } | 
|---|
|  | 87 |  | 
|---|
| [4694df] | 88 | private: | 
|---|
| [77b350] | 89 | //!> multimap containing all homologous graph under same key but each with its value | 
|---|
|  | 90 | container_t container; | 
|---|
| [4694df] | 91 | }; | 
|---|
|  | 92 |  | 
|---|
|  | 93 |  | 
|---|
|  | 94 | #endif /* HOMOLOGYCONTAINER_HPP_ */ | 
|---|