5 #ifndef BALL_STRUCTURE_REDUCEDSURFACE_H
6 #define BALL_STRUCTURE_REDUCEDSURFACE_H
8 #ifndef BALL_MATHC_COMMON_H
12 #ifndef BALL_MATHS_SIMPLEBOX3_H
16 #ifndef BALL_MATHS_CIRCLE3_H
20 #ifndef BALL_MATHS_SPHERE_H
24 #ifndef BALL_MATHS_VECTOR3_H
28 #ifndef BALL_DATATYPE_HASHSET_H
32 #ifndef BALL_DATATYPE_HASHSET_H
36 #ifndef BALL_COMMON_EXCEPTION_H
40 #ifndef BALL_STRUCTURE_RSEDGE_H
44 #ifndef BALL_STRUCTURE_RSFACE_H
48 #ifndef BALL_STRUCTURE_RSVERTEX_H
64 if (
a >
b) std::swap(
a,
b);
69 return (
a == pos.
a) && (
b == pos.
b);
101 if (
a >
b) std::swap(
a,
b);
102 if (
a >
c) std::swap(
a,
c);
103 if (
b >
c) std::swap(
b,
c);
108 return (
a == pos.
a) && (
b == pos.
b) && (
c == pos.
c);
152 struct hash<BALL::SortedPosition2>
158 boost::hash_combine(seed, p.
a);
159 boost::hash_combine(seed, p.
b);
166 struct hash<BALL::SortedPosition3>
172 boost::hash_combine(seed, p.
a);
173 boost::hash_combine(seed, p.
b);
174 boost::hash_combine(seed, p.
c);
184 class SolventExcludedSurface;
186 class SESSingularityCleaner;
187 class TriangulatedSES;
188 class SolventAccessibleSurface;
189 class TriangulatedSAS;
190 class SESTriangulator;
236 ReducedSurface(const ReducedSurface& reduced_surface,
bool = true);
241 ReducedSurface(const std::vector<
TSphere3<
double> >& spheres,
242 const
double& probe_radius);
246 virtual ~ReducedSurface();
256 void operator = (const ReducedSurface& reduced_surface);
261 void set(const ReducedSurface& reduced_surface);
279 Size numberOfAtoms() const;
284 Size numberOfVertices() const;
289 Size numberOfEdges() const;
294 Size numberOfFaces() const;
299 double getProbeRadius() const;
306 throw(Exception::IndexOverflow);
313 throw(Exception::IndexOverflow);
320 throw(Exception::IndexOverflow);
327 throw(Exception::IndexOverflow);
337 void insert(
RSEdge* rsedge);
342 void insert(
RSFace* rsface);
347 double getMaximalRadius() const;
370 TAngle<
double>& angle,
bool check = false) const;
375 throw(Exception::GeneralException,
376 Exception::DivisionByZero,
377 Exception::IndexOverflow);
385 bool canBeCopied(const ReducedSurface& reduced_surface);
389 void copy(const ReducedSurface& reduced_surface);
410 std::vector<
RSEdge*>& rsedge1,
411 std::vector<
RSEdge*>& rsedge2);
426 double probe_radius_;
468 BALL_EXPORT std::ostream& operator << (std::ostream& s, const ReducedSurface& rs);
504 STATUS_ON_SURFACE = 0,
542 throw(Exception::GeneralException,
543 Exception::DivisionByZero,
544 Exception::IndexOverflow);
557 void preProcessing();
561 void getRSComponent()
562 throw(Exception::GeneralException,
563 Exception::DivisionByZero,
564 Exception::IndexOverflow);
569 bool treatFace(
RSFace* face)
570 throw(Exception::GeneralException,
571 Exception::DivisionByZero,
572 Exception::IndexOverflow);
577 bool treatEdge(
RSEdge* edge)
578 throw(Exception::GeneralException,
579 Exception::DivisionByZero,
580 Exception::IndexOverflow);
587 void correct(
Index atom);
591 void extendComponent()
592 throw(Exception::GeneralException,
593 Exception::DivisionByZero,
594 Exception::IndexOverflow);
612 throw(Exception::GeneralException,
613 Exception::DivisionByZero,
614 Exception::IndexOverflow);
633 throw(Exception::DivisionByZero);
645 throw(Exception::DivisionByZero);
657 throw(Exception::DivisionByZero);
720 void findThirdAtom(
Index atom1,
Index atom2, const std::deque<
Index>& third,
735 const std::deque<Index>& neighboursOfTwoAtoms(const
SortedPosition2& pos);
745 void neighboursOfThreeAtoms(Index atom1, Index atom2, Index atom3,
746 std::deque<Index>& output_list);
757 double getCircleExtremum(const
TCircle3<
double>& circle,
784 bool getCircles(Index atom1, Index atom2,
TCircle3<
double>& circle1,
840 void correctProbePosition(
Position atom);
852 void insert(
RSEdge* edge);
856 void insert(
RSFace* face);
869 std::vector< std::deque<Index> > neighbours_;
897 #endif // BALL_STRUCTURE_REDUCEDSURFACE_H
#define BALL_CREATE(name)
SortedPosition3(Position a1, Position a2, Position a3)
size_t operator()(const BALL::SortedPosition3 &p) const
BALL_EXPORT AtomList atoms(const AtomContainer &fragment, const String &expression=String())
bool operator==(const SortedPosition3 &pos) const
bool operator<(const SortedPosition3 &pos) const
SortedPosition2(Position a1, Position a2)
bool operator==(const SortedPosition2 &pos) const
bool operator<(const SortedPosition2 &pos) const
size_t operator()(const BALL::SortedPosition2 &p) const
HashMap class based on the STL map (containing serveral convenience functions)