File: ccc.cpp

package info (click to toggle)
ghemical 1.01-2
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 10,984 kB
  • ctags: 19,443
  • sloc: ansic: 69,073; cpp: 60,583; fortran: 35,324; sh: 5,419; makefile: 506; perl: 91
file content (78 lines) | stat: -rw-r--r-- 1,994 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**********************************************************************
Copyright (C) 1998-2001 by OpenEye Scientific Software, Inc.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
***********************************************************************/

#include "mol.h"
#include "typer.h"

using namespace std;

namespace OpenBabel {

bool ReadCCC(istream &ifs,OBMol &mol,char *title)
{
  char buffer[BUFF_SIZE];
  ifs.getline(buffer,BUFF_SIZE);

  if (strlen(buffer) > 5) mol.SetTitle(&buffer[5]);
  mol.SetEnergy(0.0);

  int natoms;
  ifs.getline(buffer,BUFF_SIZE);
  sscanf(buffer,"%*s%d",&natoms);
  mol.ReserveAtoms(natoms);

  int end,order;
  float x,y,z;
  OBAtom atom;
  Vector v;
  vector<string> vs;
  char element[3];
  element[2] = '\0';
  
  for (int i = 1;i <= natoms;i++)
    {
      if (!ifs.getline(buffer,BUFF_SIZE)) return(false);
      atom.Clear();
      element[0] = buffer[0];
      element[1] = (buffer[1] != ' ') ? buffer[1]:'\0';
      atom.SetAtomicNum(etab.GetAtomicNum(element));
      sscanf(&buffer[15],"%f%f%f",&x,&y,&z);
      v.Set(x,y,z);
      atom.SetVector(v);

      if (!mol.AddAtom(atom)) return(false);
      tokenize(vs,&buffer[60]);
      vector<string>::iterator j;

      for (j = vs.begin();j != vs.end();j++)
	if (!j->empty())
	{
	  //get the bond order
	  switch((char)(*j)[j->size()-1])
	    {
	    case 'S':  order = 1; break;
	    case 'D':  order = 2; break;
	    case 'T':  order = 3; break;
	    default: order = 1;
	    }
	  (*j)[j->size()-1] = ' ';
	  end = atoi(j->c_str());
	  if (i>end)
	    mol.AddBond(i,end,order);
	}
    }

  return(true);
}

}