ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/openbabel/amberformat.cpp
Revision: 3057
Committed: Thu Oct 19 20:49:05 2006 UTC (17 years, 11 months ago) by gezelter
File size: 3639 byte(s)
Log Message:
updated OpenBabel to version 2.0.2

File Contents

# User Rev Content
1 tim 2445 /**********************************************************************
2     Copyright (C) 2000 by OpenEye Scientific Software, Inc.
3     Some portions Copyright (C) 2001-2005 by Geoffrey R. Hutchison
4     Some portions Copyright (C) 2004 by Chris Morley
5    
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation version 2 of the License.
9    
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13     GNU General Public License for more details.
14     ***********************************************************************/
15    
16 gezelter 3057 #include "mol.hpp"
17     #include "obconversion.hpp"
18     #include "obmolecformat.hpp"
19 tim 2445
20     using namespace std;
21     namespace OpenBabel
22     {
23    
24 gezelter 3057 class AmberPrepFormat : public OBMoleculeFormat
25     {
26     public:
27     //Register this format type ID
28     AmberPrepFormat()
29     {
30     OBConversion::RegisterFormat("prep",this);
31     }
32    
33     virtual const char* Description() //required
34     {
35     return
36     "Amber Prep format\n \
37     Read Options e.g. -as\n\
38     s Output single bonds only\n\
39     b Disable bonding entirely\n\n";
40     };
41    
42     virtual const char* SpecificationURL()
43     {return "http://amber.scripps.edu/doc/prep.html";};
44    
45     //Flags() can return be any the following combined by | or be omitted if none apply
46     // NOTREADABLE READONEONLY NOTWRITABLE WRITEONEONLY
47     virtual unsigned int Flags()
48     {
49     return NOTWRITABLE;
50     };
51    
52     ////////////////////////////////////////////////////
53     /// The "API" interface functions
54     virtual bool ReadMolecule(OBBase* pOb, OBConversion* pConv);
55     };
56    
57     //Make an instance of the format class
58     AmberPrepFormat theAmberPrepFormat;
59    
60     /////////////////////////////////////////////////////////////////
61 tim 2445 bool AmberPrepFormat::ReadMolecule(OBBase* pOb, OBConversion* pConv)
62     {
63    
64     OBMol* pmol = dynamic_cast<OBMol*>(pOb);
65     if(pmol==NULL)
66     return false;
67    
68     //Define some references so we can use the old parameter names
69     istream &ifs = *pConv->GetInStream();
70     OBMol &mol = *pmol;
71     const char* title = pConv->GetTitle();
72    
73     char buffer[BUFF_SIZE];
74     string str,str1;
75     OBAtom *atom;
76     OBInternalCoord *coord;
77     vector<string> vs;
78     vector<OBInternalCoord*> internals;
79    
80     mol.BeginModify();
81    
82     while (ifs.getline(buffer,BUFF_SIZE))
83     {
84     tokenize(vs,buffer);
85     if (vs.size() == 10)
86     {
87     atom = mol.NewAtom();
88     coord = new OBInternalCoord();
89     if (mol.NumAtoms() > 1)
90     coord->_a = mol.GetAtom(atoi(vs[4].c_str()));
91     if (mol.NumAtoms() > 2)
92     coord->_b = mol.GetAtom(atoi(vs[5].c_str()));
93     if (mol.NumAtoms() > 3)
94     coord->_c = mol.GetAtom(atoi(vs[6].c_str()));
95     coord->_dst = atof(vs[7].c_str());
96     coord->_ang = atof(vs[8].c_str());
97     coord->_tor = atof(vs[9].c_str());
98     internals.push_back(coord);
99    
100     atom->SetAtomicNum(etab.GetAtomicNum(vs[1].c_str()));
101    
102     if (!ifs.getline(buffer,BUFF_SIZE))
103     break;
104     tokenize(vs,buffer);
105     }
106     }
107    
108     if (internals.size() > 0)
109     InternalToCartesian(internals,mol);
110    
111     if (!pConv->IsOption("b",OBConversion::INOPTIONS))
112     mol.ConnectTheDots();
113     if (!pConv->IsOption("s",OBConversion::INOPTIONS) && !pConv->IsOption("b",OBConversion::INOPTIONS))
114     mol.PerceiveBondOrders();
115    
116     mol.EndModify();
117     mol.SetTitle(title);
118     return(true);
119     }
120    
121     } //namespace OpenBabel