ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/openbabel/transform.cpp
Revision: 2440
Committed: Wed Nov 16 19:42:11 2005 UTC (18 years, 8 months ago) by tim
File size: 3670 byte(s)
Log Message:
adding openbabel

File Contents

# User Rev Content
1 tim 2440 /**********************************************************************
2     transform.cpp - Perform command-line requested transformations
3    
4     Copyright (C) 2004-2005 by Chris Morley
5    
6     This file is part of the Open Babel project.
7     For more information, see <http://openbabel.sourceforge.net/>
8    
9     This program is free software; you can redistribute it and/or modify
10     it under the terms of the GNU General Public License as published by
11     the Free Software Foundation version 2 of the License.
12    
13     This program is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16     GNU General Public License for more details.
17     ***********************************************************************/
18    
19     #include "mol.hpp"
20     #include <iostream>
21    
22     using namespace std;
23     namespace OpenBabel
24     {
25    
26     OBBase* OBMol::DoTransformations(const std::map<std::string, std::string>* pOptions)
27     {
28     // Perform any requested transformations
29     // on a OBMol
30     //The input map has option letters or name as the key and
31     //any associated text as the value.
32     //For normal(non-filter) transforms:
33     // returns a pointer to the OBMol (this) if ok or NULL if not.
34     //For filters returns a pointer to the OBMol (this) if there is a match,
35     //and NULL when not and in addition the OBMol object is deleted NULL.
36    
37     //This is now a virtual function. The OBBase version just returns the OBMol pointer.
38     //This is declared in mol.h
39    
40     //The filter options, s and v allow a obgrep facility.
41     //Used together they must both be true to allow a molecule through.
42    
43     //Parse GeneralOptions
44     if(pOptions->empty())
45     return this;
46    
47     int ret=1;
48     bool smatch=true, vmatch=true;
49    
50     map<string,string>::const_iterator itr;
51    
52     if(pOptions->find("b")!=pOptions->end())
53     ret=ConvertDativeBonds();
54    
55     if(pOptions->find("d")!=pOptions->end())
56     ret=DeleteHydrogens();
57    
58     if(pOptions->find("h")!=pOptions->end())
59     ret=AddHydrogens(false, false);
60    
61     if(pOptions->find("p")!=pOptions->end())
62     ret=AddHydrogens(false, true);
63    
64     if(pOptions->find("c")!=pOptions->end())
65     {
66     Center();
67     ret=1;
68     }
69    
70     itr = pOptions->find("addtotitle"); //Appends text to title
71     if(itr!=pOptions->end())
72     {
73     string title(GetTitle());
74     title += itr->second;
75     SetTitle(title.c_str());
76     ret=1;
77     }
78    
79     itr = pOptions->find("v");
80     if(itr!=pOptions->end())
81     {
82     //inverse match quoted SMARTS string which follows
83     OBSmartsPattern sp;
84     sp.Init(itr->second);
85     vmatch = !sp.Match(*this); //(*pmol) ;
86     }
87    
88     itr = pOptions->find("s");
89     if(itr!=pOptions->end())
90     {
91     //match quoted SMARTS string which follows
92     OBSmartsPattern sp;
93     sp.Init(itr->second.c_str());
94     smatch = sp.Match(*this); //(*pmol) ;
95     }
96    
97     if(!smatch || !vmatch)
98     {
99     //filter failed: delete OBMol and return NULL
100     delete this;
101     return NULL;
102     }
103     else
104     return ret ? this : NULL;
105     }
106    
107     ///////////////////////////////////////////////////
108     const char* OBMol::ClassDescription()
109     {
110     return "For conversions of molecules\n \
111     Additional options :\n \
112     -d Delete Hydrogens\n \
113     -h Add Hydrogens\n \
114     -p Add Hydrogens appropriate for pH\n \
115     -b Convert dative bonds e.g.[N+]([O-])=O to N(=O)=O\n \
116     -c Center Coordinates\n \
117     -j Join all input molecules into a single output molecule\n \
118     -s\"smarts\" Convert only molecules matching SMARTS:\n \
119     -v\"smarts\" Convert only molecules NOT matching SMARTS:\n\n" ;
120     }
121    
122     } //namespace OpenBabel
123    
124     //! \file transform.cpp
125     //! \brief Perform command-line requested transformations for OBMol
126     //! and SMARTS filtering