00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_KERNEL_STANDARDPREDICATES_H
00008 #define BALL_KERNEL_STANDARDPREDICATES_H
00009
00010 #ifndef BALL_DATATYPE_STRINGHASHMAP_H
00011 # include <BALL/DATATYPE/stringHashMap.h>
00012 #endif
00013
00014 #ifndef BALL_DATATYPE_HASHSET_H
00015 # include <BALL/DATATYPE/hashSet.h>
00016 #endif
00017
00018 #ifndef BALL_KERNEL_BOND_H
00019 # include <BALL/KERNEL/bond.h>
00020 #endif
00021
00022 #ifndef BALL_KERNEL_EXPRESSION_H
00023 # include <BALL/KERNEL/expression.h>
00024 #endif
00025
00026 #ifndef BALL_STRUCTURE_SMARTSMATCHER_H
00027 # include <BALL/STRUCTURE/smartsMatcher.h>
00028 #endif
00029
00030 #ifndef BALL_QSAR_AROMATICITYPROCESSOR_H
00031 # include <BALL/QSAR/aromaticityProcessor.h>
00032 #endif
00033
00034 #ifndef BALL_QSAR_RINGPERCEPTIONPROCESSOR_H
00035 # include <BALL/QSAR/ringPerceptionProcessor.h>
00036 #endif
00037
00038 namespace BALL
00039 {
00040 class Atom;
00041
00049
00054 class BALL_EXPORT TruePredicate
00055 : public ExpressionPredicate
00056 {
00057 public:
00058 BALL_CREATE(TruePredicate)
00059
00060
00064 virtual bool operator () (const Atom& atom) const;
00065 };
00066
00071 class BALL_EXPORT FalsePredicate
00072 : public ExpressionPredicate
00073 {
00074 public:
00075 BALL_CREATE(FalsePredicate)
00076
00077
00081 virtual bool operator () (const Atom& atom) const;
00082 };
00083
00088 class BALL_EXPORT SelectedPredicate
00089 : public ExpressionPredicate
00090 {
00091 public:
00092 BALL_CREATE(SelectedPredicate)
00093
00094
00098 virtual bool operator () (const Atom& atom) const;
00099 };
00100
00105 class BALL_EXPORT AtomNamePredicate
00106 : public ExpressionPredicate
00107 {
00108 public:
00109 BALL_CREATE(AtomNamePredicate)
00110
00111
00115 virtual bool operator () (const Atom& atom) const;
00116 };
00117
00121 class BALL_EXPORT AtomTypePredicate
00122 : public ExpressionPredicate
00123 {
00124 public:
00125 BALL_CREATE(AtomTypePredicate)
00126
00127
00131 virtual bool operator () (const Atom& atom) const;
00132 };
00133
00137 class BALL_EXPORT ElementPredicate
00138 : public ExpressionPredicate
00139 {
00140 public:
00141 BALL_CREATE(ElementPredicate)
00142
00143
00147 virtual bool operator () (const Atom& atom) const;
00148 };
00149
00154 class BALL_EXPORT ResiduePredicate
00155 : public ExpressionPredicate
00156 {
00157 public:
00158 BALL_CREATE(ResiduePredicate)
00159
00160
00164 virtual bool operator () (const Atom& atom) const;
00165 };
00166
00171 class BALL_EXPORT ResidueIDPredicate
00172 : public ExpressionPredicate
00173 {
00174 public:
00175 BALL_CREATE(ResidueIDPredicate)
00176
00177
00181 virtual bool operator () (const Atom& atom) const;
00182 };
00183
00188 class BALL_EXPORT ProteinPredicate
00189 : public ExpressionPredicate
00190 {
00191 public:
00192 BALL_CREATE(ProteinPredicate)
00193
00194
00198 virtual bool operator () (const Atom& atom) const;
00199 };
00200
00205 class BALL_EXPORT ChainPredicate
00206 : public ExpressionPredicate
00207 {
00208 public:
00209 BALL_CREATE(ChainPredicate)
00210
00211
00215 virtual bool operator () (const Atom& atom) const;
00216 };
00217
00222 class BALL_EXPORT SecondaryStructurePredicate
00223 : public ExpressionPredicate
00224 {
00225 public:
00226 BALL_CREATE(SecondaryStructurePredicate)
00227
00228
00232 virtual bool operator () (const Atom& atom) const;
00233 };
00234
00243 class BALL_EXPORT SolventPredicate
00244 : public ExpressionPredicate
00245 {
00246 public:
00247 BALL_CREATE(SolventPredicate)
00248
00249
00253 virtual bool operator () (const Atom& atom) const;
00254 };
00255
00259 class BALL_EXPORT MoleculePredicate
00260 : public ExpressionPredicate
00261 {
00262 public:
00263 BALL_CREATE(MoleculePredicate)
00264
00265
00269 virtual bool operator () (const Atom& atom) const;
00270 };
00271
00276 class BALL_EXPORT BackBonePredicate
00277 : public ExpressionPredicate
00278 {
00279 public:
00280 BALL_CREATE(BackBonePredicate)
00281
00282
00286 virtual bool operator () (const Atom& atom) const;
00287 };
00288
00291 class BALL_EXPORT NucleicAcidPredicate
00292 : public ExpressionPredicate
00293 {
00294 public:
00295 BALL_CREATE(NucleicAcidPredicate)
00296
00297
00301 virtual bool operator () (const Atom& atom) const;
00302 };
00303
00307 class BALL_EXPORT NucleotidePredicate
00308 : public ExpressionPredicate
00309 {
00310 public:
00311 BALL_CREATE(NucleotidePredicate)
00312
00313
00317 virtual bool operator () (const Atom& atom) const;
00318 };
00319
00322 class BALL_EXPORT InRingPredicate
00323 : public ExpressionPredicate
00324 {
00325 public:
00326
00327 BALL_CREATE(InRingPredicate)
00328
00329
00330 InRingPredicate();
00331
00333 InRingPredicate(Size n);
00334
00336 ~InRingPredicate();
00337
00342 virtual bool operator () (const Atom& atom) const;
00343
00344 };
00345
00353 class BALL_EXPORT NumberOfBondsPredicate
00354 : public ExpressionPredicate
00355 {
00356 public:
00357
00359 NumberOfBondsPredicate();
00360
00361 BALL_CREATE(NumberOfBondsPredicate)
00362
00363
00367 virtual bool operator () (const Atom& atom) const;
00368
00369 protected:
00370 bool testPredicate_(const Atom& atom, Bond::Order order) const;
00371 };
00372
00373
00378 class BALL_EXPORT SingleBondsPredicate
00379 : public NumberOfBondsPredicate
00380 {
00381 public:
00382 BALL_CREATE(SingleBondsPredicate)
00383
00384
00388 virtual bool operator () (const Atom& atom) const;
00389 };
00390
00391
00396 class BALL_EXPORT DoubleBondsPredicate
00397 : public NumberOfBondsPredicate
00398 {
00399 public:
00400 BALL_CREATE(DoubleBondsPredicate)
00401
00402
00406 virtual bool operator () (const Atom& atom) const;
00407
00408 };
00409
00410
00415 class BALL_EXPORT TripleBondsPredicate
00416 : public DoubleBondsPredicate
00417 {
00418 public:
00419 BALL_CREATE(TripleBondsPredicate)
00420
00421
00425 virtual bool operator () (const Atom& atom) const;
00426 };
00427
00428
00439 class BALL_EXPORT AromaticBondsPredicate
00440 : public ExpressionPredicate
00441 {
00442 public:
00443 BALL_CREATE(AromaticBondsPredicate)
00444
00445
00449 virtual bool operator () (const Atom& atom) const;
00450
00451 protected:
00452 bool testPredicate_(const Atom& atom) const;
00453 };
00454
00455
00480 class BALL_EXPORT ConnectedToPredicate
00481 : public ExpressionPredicate
00482 {
00483
00484 public:
00485
00486 class BALL_EXPORT CTPNode
00487 {
00488 public:
00489
00490 enum BondType
00491 {
00492 BONDTYPE__UNINITIALISED = 0,
00493 BONDTYPE__ANY = 1,
00494 BONDTYPE__SINGLE = 2,
00495 BONDTYPE__DOUBLE = 3,
00496 BONDTYPE__TRIPLE = 4,
00497 BONDTYPE__QUADRUPLE = 5,
00498 BONDTYPE__AROMATIC = 6
00499 };
00500
00501 typedef std::list<CTPNode*>::iterator Iterator;
00502 typedef std::list<CTPNode*>::const_iterator ConstIterator;
00503
00504
00505
00506 CTPNode();
00507
00508
00509
00510 CTPNode(const CTPNode& node);
00511
00512
00513
00514 virtual ~CTPNode();
00515
00516
00517
00518 virtual void destroy();
00519
00520
00521
00522 void setParent(CTPNode* parent);
00523
00524
00525
00526 CTPNode* getParent() const;
00527
00528
00529
00530 void addChild(CTPNode* child);
00531
00532
00533
00534 void removeChild(CTPNode* child);
00535
00536
00537
00538 ::std::list<CTPNode*>& getChildren();
00539
00540 Iterator begin();
00541
00542 ConstIterator begin() const;
00543
00544 Iterator end();
00545
00546 ConstIterator end() const;
00547
00548
00549
00550 Size getNumberOfChildren() const;
00551
00552
00553
00554 void setBondType(Size type);
00555
00556
00557
00558 void setBondType(char type);
00559
00560
00561
00562 Size getBondType() const;
00563
00564
00565
00566 char getBondTypeChar() const;
00567
00568
00569
00570 String getSymbol() const;
00571
00572
00573
00574 void setSymbol(const String& symbol);
00575
00576
00577
00578 void setFinished();
00579
00580
00581
00582 void unsetFinished();
00583
00584
00585
00586 bool isFinished() const;
00587
00588
00589
00590 void setLinked();
00591
00592
00593
00594 void unsetLinked();
00595
00596
00597
00598 bool isLinked() const;
00599
00600
00601
00602 void linkWith(CTPNode* partner);
00603
00604
00605
00606 const HashSet<CTPNode*>& getLinkSet() const;
00607
00608
00609 private:
00610
00611
00612
00613 String element_symbol_;
00614
00615
00616
00617 Size bond_type_;
00618
00619
00620
00621 std::list<CTPNode*> children_;
00622
00623
00624
00625 CTPNode* parent_;
00626
00627
00628
00629 bool finished_;
00630
00631
00632
00633 bool linked_;
00634
00635
00636
00637 HashSet<CTPNode*> link_set_;
00638
00639
00640
00641 struct greater_
00642 : public binary_function<const CTPNode*, const CTPNode*, bool>
00643 {
00644
00645 bool operator () (const CTPNode* a, const CTPNode* b) const
00646 {
00647 if ((a != 0) && (b != 0))
00648 {
00649 if (a->getSymbol() == "*")
00650 {
00651 return true;
00652 }
00653 else
00654 {
00655 return false;
00656 }
00657 }
00658 else
00659 {
00660 Log.error() << "greater_: got NULL pointers" << std::endl;
00661 return false;
00662 }
00663 }
00664
00665 };
00666
00667 };
00668
00669 public:
00670 BALL_CREATE(ConnectedToPredicate)
00671
00672 ConnectedToPredicate();
00673
00674 ConnectedToPredicate(const ConnectedToPredicate& predicate);
00675
00676 virtual ~ConnectedToPredicate();
00677
00678 virtual void clear();
00679
00684 virtual bool operator () (const Atom& atom) const;
00685
00686 void dump() const;
00687
00688 void dump(const CTPNode* current) const;
00689
00690 virtual void setArgument(const String& argument);
00691
00692 private:
00693
00694
00695 CTPNode* tree_;
00696
00697
00698
00699 HashMap<char, std::pair<CTPNode*, CTPNode*> > link_map_;
00700
00701
00702
00703 char link_mark_;
00704
00705
00706
00707 CTPNode* createNewNode_(CTPNode* node);
00708
00709
00710
00711 CTPNode* parse_();
00712
00713
00714 void cleanUpNodes_(std::vector<CTPNode*>& all_nodes);
00715
00716
00717
00718 CTPNode* parse_(const String& input);
00719
00720 bool bondOrderMatch_(const Bond& bond, const CTPNode& node) const;
00721
00722 bool find_(const Atom& atom, const CTPNode* current,
00723 HashSet<const Bond*>& visited) const;
00724
00725 };
00726
00729 class BALL_EXPORT SpHybridizedPredicate
00730 : public ExpressionPredicate
00731 {
00732 public:
00733 BALL_CREATE(SpHybridizedPredicate)
00734
00735
00739 virtual bool operator () (const Atom& atom) const;
00740 };
00741
00744 class BALL_EXPORT Sp2HybridizedPredicate
00745 : public ExpressionPredicate
00746 {
00747 public:
00748 BALL_CREATE(Sp2HybridizedPredicate)
00749
00750
00754 virtual bool operator () (const Atom& atom) const;
00755 };
00756
00757
00760 class BALL_EXPORT Sp3HybridizedPredicate
00761 : public ExpressionPredicate
00762 {
00763 public:
00764 BALL_CREATE(Sp3HybridizedPredicate)
00765
00766
00770 virtual bool operator () (const Atom& atom) const;
00771 };
00772
00775 class BALL_EXPORT ChargePredicate
00776 : public ExpressionPredicate
00777 {
00778 public:
00779 BALL_CREATE(ChargePredicate)
00780
00781
00790 virtual bool operator () (const Atom& atom) const;
00791 };
00792
00797 class BALL_EXPORT AxialPredicate
00798 : public ExpressionPredicate
00799 {
00800 public:
00801 BALL_CREATE(AxialPredicate)
00802
00803
00812 virtual bool operator () (const Atom& atom) const;
00813 };
00814
00818 class BALL_EXPORT Conformation4C1Predicate
00819 : public ExpressionPredicate
00820 {
00821 public:
00822 BALL_CREATE(Conformation4C1Predicate)
00823
00824
00828 virtual bool operator () (const Atom& atom) const;
00829 };
00830
00833 class BALL_EXPORT RingFinder
00834 {
00835 public:
00836
00837
00838
00840 RingFinder();
00841
00846 RingFinder(Size n);
00847
00849 virtual ~RingFinder();
00850
00853 bool operator () (const Atom& atom);
00854
00857 bool dfs(const Atom& atom, const Size limit);
00858
00863 void setRingSize(Size n);
00864
00867 const HashSet<const Bond*>& getVisitedBonds() const;
00868
00871 const std::vector<const Atom*>& getRingAtoms() const;
00872
00873 private:
00874
00877 const Atom* first_atom_;
00878
00881 Size n_;
00882
00885 bool exact_;
00886
00887
00888
00889 HashSet<const Bond*> visited_bonds_;
00890
00891
00892
00893 std::vector<const Atom*> ring_atoms_;
00894
00895 };
00896
00899 class BALL_EXPORT SMARTSPredicate
00900 : public ExpressionPredicate
00901 {
00902 public:
00903
00905 SMARTSPredicate();
00906
00908 SMARTSPredicate(const SMARTSPredicate& pred);
00909
00911 virtual ~SMARTSPredicate();
00912
00913 BALL_CREATE(SMARTSPredicate)
00914
00915
00919 virtual bool operator () (const Atom& atom) const;
00920
00921 mutable SmartsMatcher matcher_;
00922 mutable Molecule* last_molecule_;
00923 mutable AromaticityProcessor arom_proc_;
00924 mutable RingPerceptionProcessor ring_proc_;
00925
00926 static HashMap<Molecule*, TimeStamp> call_time_map_;
00927 static Molecule dummy_molecule_;
00928 mutable HashSet<Atom*> matches_;
00929 };
00930
00931
00933 }
00934
00935 #endif // BALL_KERNEL_STANDARDPREDICATES_H