00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_STRUCTURE_PEPTIDEBUILDER_H
00008 #define BALL_STRUCTURE_PEPTIDEBUILDER_H
00009
00010 #ifndef BALL_STRUCTURE_PEPTIDES_H
00011 # include <BALL/STRUCTURE/peptides.h>
00012 #endif
00013
00014 namespace BALL
00015 {
00016 class FragmentDB;
00017
00018 namespace Peptides
00019 {
00023 class BALL_EXPORT AminoAcidDescriptor
00024 {
00025 public:
00026
00029 AminoAcidDescriptor();
00030
00037 AminoAcidDescriptor(const String& type, const Angle& phi=Angle(-47.,false),
00038 const Angle& psi=Angle(-58.,false), const Angle& omega=Angle(180.,false));
00040
00043 virtual ~AminoAcidDescriptor();
00044
00047 AminoAcidDescriptor(const AminoAcidDescriptor& aad);
00048
00052 void setAminoAcidType(const String& type);
00053
00056 void setPhi(const Angle& phi);
00057
00060 void setPsi(const Angle& psi);
00061
00064 void setOmega(const Angle& omega);
00065
00068 const String& getType() const;
00069
00072 const Angle& getPhi() const;
00073
00076 const Angle& getPsi() const;
00077
00080 const Angle& getOmega() const;
00081
00082 protected:
00083
00084 String type_;
00085 Angle phi_;
00086 Angle psi_;
00087 Angle omega_;
00088 };
00089
00094 class BALL_EXPORT PeptideBuilder
00095 {
00096 public:
00097
00100 PeptideBuilder();
00101
00106 PeptideBuilder(const std::vector<AminoAcidDescriptor>& sequence);
00107
00110 PeptideBuilder(const String& sequence, const Angle& phi = Angle(-47., false),
00111 const Angle& psi = Angle(-58., false), const Angle& omega = Angle(180., false));
00112
00115 PeptideBuilder(const PeptideBuilder& pc);
00116
00119 virtual ~PeptideBuilder();
00120
00123 void addAminoAcid(const String& type, const Angle& phi=Angle(-47.,false),
00124 const Angle& psi=Angle(-58.,false), const Angle& omega=Angle(180.,false));
00125
00126
00129 void addAminoAcid(const AminoAcidDescriptor& aad);
00130
00133 void setChainName(const String& name);
00134
00137 const String& getChainName() const;
00138
00141 void setProteinName(const String& name);
00142
00145 const String& getProteinName() const;
00146
00149 Protein* construct();
00150
00152 void setFragmentDB(const FragmentDB* db)
00153 ;
00154
00156 const FragmentDB* getFragmentDB() const
00157 ;
00158
00159 protected:
00160 std::vector<AminoAcidDescriptor> sequence_;
00161 String chainname_;
00162 String proteinname_;
00163
00165 bool is_proline_;
00166 FragmentDB* fragment_db_;
00167
00171 Residue* createResidue_(const String& type, const int id);
00172 void insert_(Residue& resnew, Residue& resold);
00173 void transform_(const Angle& phi, const Angle& psi, Residue& resold, Residue& resnew);
00174 void peptide_(Residue& resold, Residue& resnew);
00175 void setOmega_(Residue& resold, Residue& residue, const Angle& omega);
00176 PDBAtom* getAtomByName_(Residue& res, const String& name);
00177 };
00178
00179 }
00180
00181 }
00182
00183 #endif // BALL_STRUCTURE_PEPTIDEBUILDER_H