| [de0af2] | 1 | /*
 | 
|---|
 | 2 |  * ExportGraph.hpp
 | 
|---|
 | 3 |  *
 | 
|---|
 | 4 |  *  Created on: 08.03.2012
 | 
|---|
 | 5 |  *      Author: heber
 | 
|---|
 | 6 |  */
 | 
|---|
 | 7 | 
 | 
|---|
 | 8 | #ifndef EXPORTGRAPH_HPP_
 | 
|---|
 | 9 | #define EXPORTGRAPH_HPP_
 | 
|---|
 | 10 | 
 | 
|---|
 | 11 | // include config.h
 | 
|---|
 | 12 | #ifdef HAVE_CONFIG_H
 | 
|---|
 | 13 | #include <config.h>
 | 
|---|
 | 14 | #endif
 | 
|---|
 | 15 | 
 | 
|---|
| [df5b8c] | 16 | #include <vector>
 | 
|---|
 | 17 | 
 | 
|---|
| [6cabaac] | 18 | #include <boost/shared_ptr.hpp>
 | 
|---|
 | 19 | 
 | 
|---|
| [8652a30] | 20 | #include "Fragmentation/HydrogenSaturation_enum.hpp"
 | 
|---|
 | 21 | #include "Fragmentation/Exporters/ExportGraph.hpp"
 | 
|---|
| [6cabaac] | 22 | #include "Fragmentation/Exporters/HydrogenPool.hpp"
 | 
|---|
 | 23 | #include "Fragmentation/Exporters/SaturatedFragment.hpp"
 | 
|---|
| [8652a30] | 24 | 
 | 
|---|
| [de0af2] | 25 | #include "Fragmentation/Graph.hpp"
 | 
|---|
 | 26 | 
 | 
|---|
| [8652a30] | 27 | class ListOfLocalAtoms_t;
 | 
|---|
 | 28 | class molecule;
 | 
|---|
 | 29 | 
 | 
|---|
| [de0af2] | 30 | /** ExportGraph is an interface definition of a class that takes a fragmented
 | 
|---|
 | 31 |  * system contained in an instance of Graph and exports it to some place else.
 | 
|---|
| [ca8bea] | 32 |  *
 | 
|---|
 | 33 |  * Guidelines are as follows:
 | 
|---|
 | 34 |  * - all derived classes should have their specific properties set by extra
 | 
|---|
 | 35 |  *   setters and not by passing them through the cstor
 | 
|---|
 | 36 |  * - operator() is called without arguments.
 | 
|---|
| [de0af2] | 37 |  */
 | 
|---|
 | 38 | class ExportGraph
 | 
|---|
 | 39 | {
 | 
|---|
 | 40 | public:
 | 
|---|
| [8652a30] | 41 |   ExportGraph(
 | 
|---|
 | 42 |       const Graph &_graph,
 | 
|---|
 | 43 |       const enum HydrogenTreatment _treatment,
 | 
|---|
| [98a293b] | 44 |       const enum HydrogenSaturation _saturation,
 | 
|---|
 | 45 |       const SaturatedFragment::GlobalSaturationPositions_t &_globalsaturationpositions);
 | 
|---|
| [6cabaac] | 46 |   virtual ~ExportGraph();
 | 
|---|
 | 47 | 
 | 
|---|
 | 48 |   typedef boost::shared_ptr<SaturatedFragment> SaturatedFragment_ptr;
 | 
|---|
 | 49 | 
 | 
|---|
| [c24071] | 50 |   virtual bool operator()()=0;
 | 
|---|
| [de0af2] | 51 | 
 | 
|---|
| [6cabaac] | 52 |   /** Returns a saturated fragment for immediate use only.
 | 
|---|
 | 53 |    *
 | 
|---|
 | 54 |    * An empty KeySet indicates the end of all possible fragments
 | 
|---|
 | 55 |    * A shared_ptr containing NULL indicate an error
 | 
|---|
 | 56 |    *
 | 
|---|
 | 57 |    * \return RAII instance of a saturated fragment, NULL - failure, empty set - end
 | 
|---|
 | 58 |    */
 | 
|---|
 | 59 |   SaturatedFragment_ptr getNextFragment();
 | 
|---|
 | 60 | 
 | 
|---|
 | 61 |   /** Sets the next fragment to the first graph again.
 | 
|---|
 | 62 |    *
 | 
|---|
 | 63 |    */
 | 
|---|
 | 64 |   void reset();
 | 
|---|
| [8652a30] | 65 | 
 | 
|---|
 | 66 | private:
 | 
|---|
 | 67 | 
 | 
|---|
| [6cabaac] | 68 |   /** Helper function to create a fragment from a keyset and note down its in use.
 | 
|---|
 | 69 |    *
 | 
|---|
 | 70 |    * \param _set KeySet to create saturated fragment from
 | 
|---|
 | 71 |    * \return RAII instance of a saturated fragment
 | 
|---|
 | 72 |    */
 | 
|---|
 | 73 |    SaturatedFragment_ptr leaseFragment(const KeySet &_set);
 | 
|---|
 | 74 | 
 | 
|---|
 | 75 |   /** Helper function to create a fragment from a keyset and note down its in use.
 | 
|---|
 | 76 |    *
 | 
|---|
 | 77 |    * \param _ptr RAII instance of a saturated fragment to release again
 | 
|---|
 | 78 |    */
 | 
|---|
 | 79 |   void releaseFragment(SaturatedFragment_ptr &_ptr);
 | 
|---|
 | 80 | 
 | 
|---|
| [06804b] | 81 | //  void prepareMolecule();
 | 
|---|
 | 82 | //  molecule * StoreFragmentFromKeySet(KeySet &Leaflet, bool IsAngstroem);
 | 
|---|
 | 83 | //  int StoreFragmentFromKeySet_Init(molecule *Leaf, KeySet &Leaflet, ListOfLocalAtoms_t &SonList);
 | 
|---|
 | 84 | //  void CreateInducedSubgraphOfFragment(molecule *Leaf, ListOfLocalAtoms_t &SonList, bool IsAngstroem);
 | 
|---|
| [de0af2] | 85 | 
 | 
|---|
| [ca8bea] | 86 | protected:
 | 
|---|
| [6cabaac] | 87 |   //!> empty set to indicate last and one fragment
 | 
|---|
 | 88 |   const KeySet EmptySet;
 | 
|---|
 | 89 | 
 | 
|---|
 | 90 | protected:
 | 
|---|
 | 91 |   //!> set of all KeySets that are leased as saturated fragments
 | 
|---|
 | 92 |   SaturatedFragment::KeySetsInUse_t KeySetsInUse;
 | 
|---|
 | 93 | 
 | 
|---|
 | 94 |   //!> pool containing hydrogens for saturation
 | 
|---|
 | 95 |   HydrogenPool hydrogens;
 | 
|---|
 | 96 | 
 | 
|---|
 | 97 |   //!> graph containing all keysets
 | 
|---|
| [8652a30] | 98 |   const Graph &TotalGraph;
 | 
|---|
 | 99 |   //!> internal list of created molecules
 | 
|---|
| [df5b8c] | 100 |   std::vector<molecule *> BondFragments;
 | 
|---|
| [8652a30] | 101 |   //!> whether to always add already present hydrogens or not
 | 
|---|
 | 102 |   const enum HydrogenTreatment treatment;
 | 
|---|
 | 103 |   //!> whether to saturate dangling bonds or not
 | 
|---|
 | 104 |   const enum HydrogenSaturation saturation;
 | 
|---|
| [6cabaac] | 105 | 
 | 
|---|
| [98a293b] | 106 |   //!> Global information over all atoms with saturation positions to be used per fragment
 | 
|---|
 | 107 |   const SaturatedFragment::GlobalSaturationPositions_t &globalsaturationpositions;
 | 
|---|
 | 108 | 
 | 
|---|
| [6cabaac] | 109 | private:
 | 
|---|
 | 110 |   //!> iterator pointing at the CurrentKeySet to be exported
 | 
|---|
 | 111 |   Graph::const_iterator CurrentKeySet;
 | 
|---|
| [de0af2] | 112 | };
 | 
|---|
 | 113 | 
 | 
|---|
 | 114 | #endif /* EXPORTGRAPH_HPP_ */
 | 
|---|