Residue* PeptideBuilder::createResidue_(const String& type, const int id) { Residue* res = new Residue(type, String(id)); PDBAtom* nitrogen = new PDBAtom(PTE[Element::N], "N"); PDBAtom* carbona = new PDBAtom(PTE[Element::C], "CA"); PDBAtom* carbon = new PDBAtom(PTE[Element::C], "C"); // put CA into the starting position carbona->setPosition(Vector3( 0.00, 0.00, 0.0)); // insert N and C nitrogen->setPosition(Vector3(-1 * BOND_LENGTH_N_CA, 0.00, 0.00)); carbon->setPosition (Vector3(BOND_LENGTH_C_CA * (cos(Constants::PI * 71./180.)), 0.00, BOND_LENGTH_C_CA * (sin(Constants::PI * 71. / 180.)))); // insert atomes into residue/chain/protein res->insert(*nitrogen); res->insert(*carbona); res->insert(*carbon); // flag as an amino acid res->setProperty(Residue::PROPERTY__AMINO_ACID); // create the bonds nitrogen->createBond(*carbona)->setOrder(Bond::ORDER__SINGLE); carbona->createBond(*carbon)->setOrder(Bond::ORDER__SINGLE); return res; }
void PeptideBuilder::peptide_(Residue& resold, Residue& resnew) { PDBAtom* poxygen = new PDBAtom(PTE[Element::O], "O"); // dynamic_cast<PDBAtom*>(resold->getAtom("C")); ????? PDBAtom* pcarbon = getAtomByName_(resold, "C"); PDBAtom* pcarbona = getAtomByName_(resold, "CA"); PDBAtom* pnitrogen_n = getAtomByName_(resnew, "N"); Vector3 CA_C_axis =(pcarbon->getPosition() - pcarbona->getPosition()).normalize(); Vector3 C_NN_axis =(pnitrogen_n->getPosition() - pcarbon->getPosition()).normalize(); Matrix4x4 mat; mat.setRotation(Angle(Constants::PI), CA_C_axis); Vector3 newpos = mat * C_NN_axis; // newpos = mat * newpos; newpos = newpos.normalize() * BOND_LENGTH_C_O + pcarbon->getPosition(); //newpos= pcarbon->getPosition(); poxygen->setPosition(newpos); //set C-O-bond (pcarbon->createBond(*poxygen))->setOrder(Bond::ORDER__DOUBLE); resold.insert(*poxygen); //----------set hydrogen. We can't do this for proline, // since in this case, this hydrogen doesn't exist if (!is_proline_) { PDBAtom* phydrogen = new PDBAtom(PTE[Element::H], "H"); pcarbon = getAtomByName_(resold, "C"); pnitrogen_n = getAtomByName_(resnew, "N"); poxygen = getAtomByName_(resold, "O"); newpos = (pcarbon->getPosition() - poxygen->getPosition()).normalize(); newpos = newpos * BOND_LENGTH_N_H + pnitrogen_n->getPosition(); phydrogen->setPosition(newpos); phydrogen->createBond(*pnitrogen_n)->setOrder(Bond::ORDER__SINGLE);; resnew.insert(*phydrogen); } return; }