RDKit
Open-source cheminformatics and machine learning.
Loading...
Searching...
No Matches
FilterMatcherBase.h
Go to the documentation of this file.
1// Copyright (c) 2015, Novartis Institutes for BioMedical Research Inc.
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met:
7//
8// * Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// * Redistributions in binary form must reproduce the above
11// copyright notice, this list of conditions and the following
12// disclaimer in the documentation and/or other materials provided
13// with the distribution.
14// * Neither the name of Novartis Institutes for BioMedical Research Inc.
15// nor the names of its contributors may be used to endorse or promote
16// products derived from this software without specific prior written
17// permission.
18//
19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30//
31
32#include <RDGeneral/export.h>
33#ifndef __RD_FILTER_MATCHER_BASE_H__
34#define __RD_FILTER_MATCHER_BASE_H__
35#include <utility>
36
37#include <GraphMol/RDKitBase.h>
39
40#ifdef RDK_USE_BOOST_SERIALIZATION
42#include <boost/archive/text_oarchive.hpp>
43#include <boost/archive/text_iarchive.hpp>
44#include <boost/serialization/assume_abstract.hpp>
45#include <boost/enable_shared_from_this.hpp>
47#endif // RDK_USE_BOOST_SERIALIZATION
48
49namespace RDKit {
50
51class FilterMatcherBase; // Forward declaration
52
53//! Holds the atomPairs matched by the underlying matcher
55 boost::shared_ptr<FilterMatcherBase> filterMatch;
57
58 FilterMatch() : filterMatch(), atomPairs() {}
59 FilterMatch(boost::shared_ptr<FilterMatcherBase> filter,
60 MatchVectType atomPairs)
61 : filterMatch(std::move(filter)), atomPairs(std::move(atomPairs)) {}
62
63 bool operator==(const FilterMatch &rhs) const {
64 return (filterMatch.get() == rhs.filterMatch.get() &&
65 atomPairs == rhs.atomPairs);
66 }
67
68 bool operator!=(const FilterMatch &rhs) const {
69 return !(filterMatch.get() == rhs.filterMatch.get() &&
70 atomPairs == rhs.atomPairs);
71 }
72};
73
76 : public boost::enable_shared_from_this<FilterMatcherBase> {
77 //------------------------------------
78 //! Virtual API for filter matching
79 std::string d_filterName;
80
81 public:
82 FilterMatcherBase(std::string name = DEFAULT_FILTERMATCHERBASE_NAME)
83 : boost::enable_shared_from_this<FilterMatcherBase>(),
84 d_filterName(std::move(name)) {}
85
87 : boost::enable_shared_from_this<FilterMatcherBase>(),
88 d_filterName(rhs.d_filterName) {}
89
90 virtual ~FilterMatcherBase() {}
91
92 virtual bool isValid() const = 0;
93
94 virtual std::string getName() const { return d_filterName; }
95 //------------------------------------
96 //! getMatches
97 /*!
98 Match the filter against a molecule
99
100 \param mol readonly const molecule being searched
101 \param matches output vector of atom index matches found in the molecule
102 */
103
104 virtual bool getMatches(const ROMol &mol,
105 std::vector<FilterMatch> &matchVect) const = 0;
106
107 //------------------------------------
108 //! hasMatches
109 /*!
110 Does the given molecule contain this filter pattern
111
112 \param mol readonly const molecule being searched
113 */
114
115 virtual bool hasMatch(const ROMol &mol) const = 0;
116
117 //------------------------------------
118 //! Clone - deprecated
119 /// Clones the current FilterMatcherBase into one that
120 /// can be passed around safely.
121 virtual boost::shared_ptr<FilterMatcherBase> Clone() const {
123 << "FilterMatcherBase::Clone is deprecated, use copy instead"
124 << std::endl;
125 return copy();
126 }
127
128 //------------------------------------
129 //! copy
130 /// copies the current FilterMatcherBase into one that
131 /// can be passed around safely.
132 virtual boost::shared_ptr<FilterMatcherBase> copy() const = 0;
133
134 private:
135#ifdef RDK_USE_BOOST_SERIALIZATION
136 friend class boost::serialization::access;
137 template <class Archive>
138 void serialize(Archive &ar, const unsigned int version) {
139 RDUNUSED_PARAM(version);
140 ar & d_filterName;
141 }
142#endif
143};
144
145#ifdef RDK_USE_BOOST_SERIALIZATION
147#endif
148} // namespace RDKit
149#endif
#define RDUNUSED_PARAM(x)
Definition Invariant.h:196
pulls in the core RDKit functionality
#define BOOST_LOG(__arg__)
Definition RDLog.h:110
RDKIT_RDGENERAL_EXPORT RDLogger rdWarningLog
virtual boost::shared_ptr< FilterMatcherBase > copy() const =0
virtual bool getMatches(const ROMol &mol, std::vector< FilterMatch > &matchVect) const =0
getMatches
virtual bool isValid() const =0
virtual boost::shared_ptr< FilterMatcherBase > Clone() const
FilterMatcherBase(std::string name=DEFAULT_FILTERMATCHERBASE_NAME)
virtual std::string getName() const
virtual bool hasMatch(const ROMol &mol) const =0
hasMatches
FilterMatcherBase(const FilterMatcherBase &rhs)
#define RDKIT_FILTERCATALOG_EXPORT
Definition export.h:169
Std stuff.
std::vector< std::pair< int, int > > MatchVectType
used to return matches from substructure searching, The format is (queryAtomIdx, molAtomIdx)
bool rdvalue_is(const RDValue_cast_t)
RDKIT_FILTERCATALOG_EXPORT const char * DEFAULT_FILTERMATCHERBASE_NAME
Definition RDLog.h:25
Holds the atomPairs matched by the underlying matcher.
MatchVectType atomPairs
bool operator==(const FilterMatch &rhs) const
FilterMatch(boost::shared_ptr< FilterMatcherBase > filter, MatchVectType atomPairs)
boost::shared_ptr< FilterMatcherBase > filterMatch
bool operator!=(const FilterMatch &rhs) const