peptideBuilder.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: peptideBuilder.h,v 1.7.18.1 2007/03/25 21:25:28 oliver Exp $
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      // Sheet angles ???
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   } // namespace Peptides
00180 
00181 } // namespace BALL
00182 
00183 #endif // BALL_STRUCTURE_PEPTIDEBUILDER_H