/usr/include/BALL/STRUCTURE/smilesParser.h is in libball1.4-dev 1.4.1+20111206-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | // -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//
#ifndef BALL_STRUCTURE_SMILES_PARSER_H
#define BALL_STRUCTURE_SMILES_PARSER_H
#ifndef BALL_COMMON_H
# include <BALL/common.h>
#endif
#ifndef BALL_KERNEL_ATOM_H
# include <BALL/KERNEL/atom.h>
#endif
#ifndef BALL_KERNEL_BOND_H
# include <BALL/KERNEL/bond.h>
#endif
#ifndef BALL_KERNEL_SYSTEM_H
# include <BALL/KERNEL/system.h>
#endif
namespace BALL
{
/** @name SMILES Parser.
A simple parser for SMILES strings. Output is a system, the atom coordinates
however are all zero! The system contains only connectivity data (topology) of
the molecule. At this time, there's no support in BALL to convert this 2D data
automatically to 3D data.
<br><br>
<b>Status:</b> <b>experimental</b> \par
\ingroup StructureMatching
*/
class BALL_EXPORT SmilesParser
{
public:
enum ZEIsomerType
{
NONE,
Z,
E
};
enum ChiralClass
{
NONCHIRAL,
TH,
AL,
SP,
TB,
OH
};
enum
{
MAX_CONNECTIONS = 100
};
typedef std::pair<ChiralClass, Position> ChiralDef;
class SPAtom;
class SPBond
: public Bond
{
public:
virtual ~SPBond() ;
SPBond(SPAtom* first, SPAtom* second, Index order = 1);
ZEIsomerType getZEType() const;
void setZEType(ZEIsomerType type);
protected:
ZEIsomerType ze_type_;
};
BALL_EXPORT class SPAtom
: public Atom
{
public:
SPAtom(const String& symbol, bool in_brackets);
virtual ~SPAtom() ;
Size getDefaultValence() const;
Size countRealValences() const;
Size getIsotope() const { return isotope_; }
void setIsotope(Size isotope) { isotope_ = isotope; };
Index getFormalCharge() const { return formal_charge_; }
void setFormalCharge(Index charge) { formal_charge_ = charge; }
const ChiralDef& getChirality() const { return chirality_; }
void setChirality(const ChiralDef& chirality) { chirality_ = chirality; }
bool isAromatic() const { return is_aromatic_; }
void setAromatic(bool is_aromatic) { is_aromatic_ = is_aromatic; };
bool isInBrackets() const { return in_brackets_; }
void setInBrackets(bool in_brackets) { in_brackets_ = in_brackets; };
protected:
Size isotope_;
Index formal_charge_;
ChiralDef chirality_;
bool is_aromatic_;
bool in_brackets_;
};
typedef std::list<Position> ConnectionList;
/** @name Constructors and Destructors
*/
//@{
///
SmilesParser();
///
SmilesParser(const SmilesParser& parser);
///
virtual ~SmilesParser();
//@}
/** @name Parsing
*/
//@{
/** Parse a SMILES string.
*/
void parse(const String& s)
throw(Exception::ParseError);
/** Return the parsed system
*/
const System& getSystem() const;
//@}
/** @name Methods required by the underlying YACC parser
*/
//@{
///
SPAtom* createAtom(const String& symbol, bool in_bracket = false);
///
void createBonds(SPAtom* atom, const ConnectionList* list);
///
void createBond(SPAtom* left, SPAtom* right, Index order);
///
void addMissingHydrogens();
//@}
struct State
{
Size char_count;
SmilesParser* current_parser;
const char* buffer;
};
static State state;
protected:
System system_;
std::vector<SPAtom*> connections_;
std::vector<SPAtom*> all_atoms_;
static SmilesParser* current_parser_;
};
} // namespace BALL
#endif // BALL_STRUCTURE_SMILES_PARSER_H
|