00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_CONOP_HEURISTIC_BUILDER_HH
00020 #define OST_CONOP_HEURISTIC_BUILDER_HH
00021
00022 #include <set>
00023 #include <map>
00024
00025 #include <ost/mol/chem_class.hh>
00026
00027 #include "builder.hh"
00028
00029 namespace ost { namespace conop {
00030
00031 namespace detail {
00032
00033
00034 class DLLEXPORT_OST_CONOP ConnResEntry {
00035 public:
00036 typedef std::pair<String,String> NamePair;
00037 typedef std::multiset<NamePair> PairSet;
00038 struct TorsionEntry {
00039 String a[4];
00040 String name;
00041 };
00042 typedef std::vector<TorsionEntry> TorsionEntryList;
00043
00044 public:
00045 ConnResEntry(const String& rname="", char single='\0',
00046 const mol::ChemClass& chem_class=mol::ChemClass(mol::ChemClass::Unknown));
00047 int Check(const String& name1, const String& name2) const;
00048 bool HasAtom(const String& name);
00049 void AddAtom(const String& atom) { required_atoms_.push_back(atom); }
00050 void AddConn(const String& n1, const String& n2);
00051 void AddTors(const String& a1, const String& a2,
00052 const String& a3, const String& a4, const String& name);
00053 void SetPrev(const String& n);
00054 const String& GetPrev() const;
00055 void SetNext(const String& n);
00056 const String& GetNext() const;
00057 TorsionEntryList GetTorsionList() const;
00058 char GetOneLetterCode() const {return abbrev_;}
00059 mol::ChemClass GetChemClass() const { return chem_class_; }
00060
00061 std::vector<String> GetReqAtoms() const { return required_atoms_;}
00062 private:
00063 mol::ResidueKey rkey_;
00064 char abbrev_;
00065 mol::ChemClass chem_class_;
00066 PairSet pset_;
00067 String prev_;
00068 String next_;
00069 std::vector<String> required_atoms_;
00070 TorsionEntryList torsion_entry_list_;
00071 };
00072
00073 typedef std::map<mol::ResidueKey,ConnResEntry> ConnResEntryMap;
00074
00075 }
00076
00077 class DLLEXPORT_OST_CONOP HeuristicBuilder: public Builder {
00078 public:
00079 HeuristicBuilder();
00080 virtual ~HeuristicBuilder();
00081
00082 virtual void AssignTorsions(const mol::ChainHandle& ch);
00083
00085
00086
00087
00088 virtual void ConnectAtomsOfResidue(const mol::ResidueHandle& rh);
00089
00090 virtual bool IsResidueComplete(const mol::ResidueHandle& rh);
00091
00092
00094 virtual void ConnectResidueToPrev(const mol::ResidueHandle& rh, const mol::ResidueHandle& prev);
00096 virtual void AssignTorsionsToResidue(const mol::ResidueHandle& residue);
00097
00098 virtual void FillResidueProps(mol::ResidueHandle residue);
00099
00101 virtual void ConnectResidueToNext(const mol::ResidueHandle& rh, const mol::ResidueHandle& next);
00102
00104
00105
00106 std::pair<detail::ConnResEntry,bool> LookupResEntry(const mol::ResidueKey& key);
00107
00108 virtual void FillAtomProps(mol::AtomHandle atom);
00109 protected:
00110 void ConnectivityFromAtomNames(const mol::ResidueHandle& res,
00111 detail::ConnResEntry& centry,
00112 mol::AtomHandleList& unknown_atoms);
00113 private:
00114 detail::ConnResEntryMap emap_;
00115 };
00116
00117
00118 }}
00119
00120 #endif