1 /**********************************************************************
2 opisomorph.cpp - Enhanced -s option
3 Copyright (C) 2010 by Chris Morley
4 
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation version 2 of the License.
8 
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU General Public License for more details.
13 ***********************************************************************/
14 #include <openbabel/babelconfig.h>
15 #include <openbabel/op.h>
16 #include <openbabel/mol.h>
17 #include <openbabel/obconversion.h>
18 #include <openbabel/query.h>
19 #include <vector>
20 #include <string>
21 
22 namespace OpenBabel
23 {
24 /**
25 @since version 2.3
26 Adds an OBPairData object to each atom and bond in a substructure.
27 The substructure's atoms are specified in an input parameter, a
28 vector of atom indx; the bonds are those in the molecule that join
29 these atoms. The attribute and value of the OBPairObject (the same
30 for all the added objects) are specified as parameters.
31 **/
32 extern bool AddDataToSubstruct(OBMol* pmol, const std::vector<int>& atomIdxs,
33         const std::string& attribute, const std::string& value);
34 
35 /**
36 @since version 2.3
37 Deletes all atoms except those in @p atomIndxs
38 **/
39 extern bool ExtractSubstruct(OBMol* pmol, const std::vector<int>& atomIdxs);
40 
41 extern bool MakeQueriesFromMolInFile(std::vector<OBQuery*>& queries
42                          , const std::string& filename, int* pnAtoms, bool noH);
43 
44 //*****************************************************
45 class OpNewS : public OBOp
46 {
47 public:
OpNewS(const char * ID)48   OpNewS(const char* ID) : OBOp(ID, false){}
49   const char* Description();
WorksWith(OBBase * pOb)50   virtual bool WorksWith(OBBase* pOb)const{ return dynamic_cast<OBMol*>(pOb)!=nullptr; }
51   virtual bool Do(OBBase* pOb, const char* OptionText, OpMap* pmap, OBConversion*);
GetMatchAtoms()52   std::vector<int> GetMatchAtoms(){ return firstmatch; }
53   virtual bool ProcessVec(std::vector<OBBase*>& vec);//Extra target mols
54 
55 private:
56   std::vector<std::string> vec; //parsed parameter text
57   std::vector<OBBase*> ExtraMols; //extra OBMols passed in via ProcessVec() (FastSearchFormat)
58   OBSmartsPattern sp;  //if SMARTS (and not a filename) supplied
59   std::string xsmarts; //extra SMARTS provided externally via ProcessVec()
60   bool addHydrogens;   //The SMARTS contained one or more #1 to explicitly find hydrogen
61   bool inv;
62   int nPatternAtoms;   //non-zero for exact matches
63   std::vector<OBQuery*> queries; //populated if a filename was supplied
64   OBQuery* query;
65   std::vector<int> firstmatch; //Idxes of first match by SMARTS or OBIsomorphismMapper
66   bool showAll;
67   int nmatches;
68   char comparechar;
69 };
70 
71 } //namespace
72 
73