void OBChargeModel::FillChargeVectors(OBMol &mol) { OBAtom *atom; vector<OBAtom*>::iterator itr; m_partialCharges.clear(); m_partialCharges.reserve(mol.NumAtoms()); m_formalCharges.clear(); m_formalCharges.reserve(mol.NumAtoms()); for (atom = mol.BeginAtom(itr);atom;atom = mol.NextAtom(itr)) { m_partialCharges.push_back(atom->GetPartialCharge()); m_formalCharges.push_back((double)(atom->GetFormalCharge())); } }
void ReportFormat::WriteCharges(ostream &ofs,OBMol &mol) { unsigned int i; OBAtom *atom; char buffer[BUFF_SIZE]; for(i = 1;i <= mol.NumAtoms(); i++) { atom = mol.GetAtom(i); snprintf(buffer, BUFF_SIZE, "%4s%4d % 2.10f", OBElements::GetSymbol(atom->GetAtomicNum()), i, atom->GetPartialCharge()); ofs << buffer << "\n"; } }
void WriteCharges(ostream &ofs,OBMol &mol) { unsigned int i; OBAtom *atom; char buffer[BUFF_SIZE]; for(i = 1;i <= mol.NumAtoms(); i++) { atom = mol.GetAtom(i); sprintf(buffer,"%4s%4d % 2.10f", etab.GetSymbol(atom->GetAtomicNum()), i, atom->GetPartialCharge()); ofs << buffer << endl; } }
bool WriteHIN(ostream &ofs,OBMol &mol) { unsigned int i, file_num = 1; string str,str1; char buffer[BUFF_SIZE]; OBAtom *atom; OBBond *bond; vector<OBEdgeBase*>::iterator j; char bond_char; ofs << "mol " << file_num << " " << mol.GetTitle() << endl;; for(i = 1;i <= mol.NumAtoms(); i++) { atom = mol.GetAtom(i); sprintf(buffer,"atom %d - %-3s ** - %8.5f %8.5f %8.5f %8.5f %d ", i, etab.GetSymbol(atom->GetAtomicNum()), atom->GetPartialCharge(), atom->GetX(), atom->GetY(), atom->GetZ(), atom->GetValence()); ofs << buffer; for (bond = atom->BeginBond(j); bond; bond = atom->NextBond(j)) { switch(bond->GetBO()) { case 1 : bond_char = 's'; break; case 2 : bond_char = 'd'; break; case 3 : bond_char = 't'; break; case 5 : bond_char = 'a'; break; default: bond_char = 's'; break; } sprintf(buffer,"%d %c ", (bond->GetNbrAtom(atom))->GetIdx(), bond_char); ofs << buffer; } ofs << endl; } ofs << "endmol " << file_num << endl; return(true); }
bool MOL2Format::WriteMolecule(OBBase* pOb, OBConversion* pConv) { OBMol* pmol = dynamic_cast<OBMol*>(pOb); if(pmol==NULL) return false; //Define some references so we can use the old parameter names ostream &ofs = *pConv->GetOutStream(); OBMol &mol = *pmol; bool ligandsOnly = pConv->IsOption("l", OBConversion::OUTOPTIONS)!=NULL; //The old code follows.... string str,str1; char buffer[BUFF_SIZE],label[BUFF_SIZE]; char rnum[BUFF_SIZE],rlabel[BUFF_SIZE]; ofs << "@<TRIPOS>MOLECULE" << endl; str = mol.GetTitle(); if (str.empty()) ofs << "*****" << endl; else ofs << str << endl; snprintf(buffer, BUFF_SIZE," %d %d 0 0 0", mol.NumAtoms(),mol.NumBonds()); ofs << buffer << endl; ofs << "SMALL" << endl; OBPairData *dp = (OBPairData*)mol.GetData("PartialCharges"); if (dp != NULL) { // Tripos spec says: // NO_CHARGES, DEL_RE, GASTEIGER, GAST_HUCK, HUCKEL, PULLMAN, // GAUSS80_CHARGES, AMPAC_CHARGES, MULLIKEN_CHARGES, DICT_ CHARGES, // MMFF94_CHARGES, USER_CHARGES if (dp->GetValue() == "Mulliken") ofs << "MULLIKEN_CHARGES" << endl; else // should pick from the Tripos types ofs << "GASTEIGER" << endl; } else { // No idea what these charges are... all our code sets "PartialCharges" ofs << "GASTEIGER" << endl; } ofs << "Energy = " << mol.GetEnergy() << endl; if (mol.HasData(OBGenericDataType::CommentData)) { OBCommentData *cd = (OBCommentData*)mol.GetData(OBGenericDataType::CommentData); ofs << cd->GetData(); } ofs << endl; ofs << "@<TRIPOS>ATOM" << endl; OBAtom *atom; OBResidue *res; vector<OBAtom*>::iterator i; vector<int> labelcount; labelcount.resize( etab.GetNumberOfElements() ); ttab.SetFromType("INT"); ttab.SetToType("SYB"); for (atom = mol.BeginAtom(i);atom;atom = mol.NextAtom(i)) { // // Use sequentially numbered atom names if no residues // snprintf(label,BUFF_SIZE, "%s%d", etab.GetSymbol(atom->GetAtomicNum()), ++labelcount[atom->GetAtomicNum()]); strcpy(rlabel,"<1>"); strcpy(rnum,"1"); str = atom->GetType(); ttab.Translate(str1,str); // // Use original atom names if there are residues // if (!ligandsOnly && (res = atom->GetResidue()) ) { // use original atom names defined by residue snprintf(label,BUFF_SIZE,"%s",(char*)res->GetAtomID(atom).c_str()); // make sure that residue name includes its number snprintf(rlabel,BUFF_SIZE,"%s%d",res->GetName().c_str(), res->GetNum()); snprintf(rnum,BUFF_SIZE,"%d",res->GetNum()); } snprintf(buffer,BUFF_SIZE,"%7d%1s%-6s%12.4f%10.4f%10.4f%1s%-5s%4s%1s %-8s%10.4f", atom->GetIdx(),"",label, atom->GetX(),atom->GetY(),atom->GetZ(), "",str1.c_str(), rnum,"",rlabel, atom->GetPartialCharge()); ofs << buffer << endl; } ofs << "@<TRIPOS>BOND" << endl; OBBond *bond; vector<OBBond*>::iterator j; OBSmartsPattern pat; string s1, s2; for (bond = mol.BeginBond(j);bond;bond = mol.NextBond(j)) { s1 = bond->GetBeginAtom()->GetType(); s2 = bond->GetEndAtom()->GetType(); if (bond->IsAromatic() || s1 == "O.co2" || s2 == "O.co2") strcpy(label,"ar"); else if (bond->IsAmide()) strcpy(label,"am"); else snprintf(label,BUFF_SIZE,"%d",bond->GetBO()); snprintf(buffer, BUFF_SIZE,"%6d%6d%6d%3s%2s", bond->GetIdx()+1,bond->GetBeginAtomIdx(),bond->GetEndAtomIdx(), "",label); ofs << buffer << endl; } // NO trailing blank line (PR#1868929). // ofs << endl; return(true); }
bool BGFFormat::WriteMolecule(OBBase* pOb, OBConversion* pConv) { OBMol* pmol = dynamic_cast<OBMol*>(pOb); if(pmol==NULL) return false; //Define some references so we can use the old parameter names ostream &ofs = *pConv->GetOutStream(); OBMol &mol = *pmol; vector<OBAtom*>::iterator i; int max_val; OBAtom *atom; char buffer[BUFF_SIZE]; char elmnt_typ[8], dreid_typ[8], atm_sym[16], max_val_str[8]; mol.Kekulize(); ofs << "BIOGRF 200\n"; snprintf(buffer, BUFF_SIZE, "DESCRP %s\n",mol.GetTitle()); ofs << buffer; snprintf(buffer, BUFF_SIZE, "REMARK BGF file created by Open Babel %s\n",BABEL_VERSION); ofs << "FORCEFIELD DREIDING \n"; // write unit cell if available if (mol.HasData(OBGenericDataType::UnitCell)) { OBUnitCell *uc = (OBUnitCell*)mol.GetData(OBGenericDataType::UnitCell); // e.g. CRYSTX 49.30287 49.23010 25.45631 90.00008 89.99995 57.10041 snprintf(buffer, BUFF_SIZE, "CRYSTX%12.5f%12.5f%12.5f%12.5f%12.5f%12.5f", uc->GetA(), uc->GetB(), uc->GetC(), uc->GetAlpha() , uc->GetBeta(), uc->GetGamma()); ofs << buffer << "\n"; } ofs << "FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5)\n"; ttab.SetFromType("INT"); for (atom = mol.BeginAtom(i);atom;atom = mol.NextAtom(i)) { strncpy(elmnt_typ,etab.GetSymbol(atom->GetAtomicNum()), 7); // make sure to null-terminate elmnt_typ[sizeof(elmnt_typ) - 1] = '0'; ToUpper(elmnt_typ); ttab.SetToType("DRE"); ttab.Translate(dreid_typ,atom->GetType()); ttab.SetToType("HAD"); ttab.Translate(max_val_str,atom->GetType()); max_val = atoi(max_val_str); if (max_val == 0) max_val = 1; snprintf(atm_sym,16,"%s%d",elmnt_typ,atom->GetIdx()); snprintf(buffer,BUFF_SIZE,"%6s %5d %-5s %3s %1s %5s%10.5f%10.5f%10.5f %-5s%3d%2d %8.5f\n", "HETATM", atom->GetIdx(), atm_sym, "RES", "A", "444", atom->GetX(), atom->GetY(), atom->GetZ(), dreid_typ, max_val, 0, atom->GetPartialCharge()); ofs << buffer; } ofs<< "FORMAT CONECT (a6,12i6)\n\n"; OBAtom *nbr; vector<OBBond*>::iterator j; for (atom = mol.BeginAtom(i);atom;atom = mol.NextAtom(i)) if (atom->GetValence()) { snprintf(buffer,BUFF_SIZE,"CONECT%6d",atom->GetIdx()); ofs << buffer; for (nbr = atom->BeginNbrAtom(j);nbr;nbr = atom->NextNbrAtom(j)) { snprintf(buffer,BUFF_SIZE,"%6d",nbr->GetIdx()); ofs << buffer; } ofs << endl; snprintf(buffer,BUFF_SIZE,"ORDER %6d",atom->GetIdx()); ofs << buffer; for (nbr = atom->BeginNbrAtom(j);nbr;nbr = atom->NextNbrAtom(j)) { snprintf(buffer,BUFF_SIZE,"%6d",(*j)->GetBO()); ofs << buffer; } ofs << endl; } ofs << "END" << endl; return(true); }
bool HINFormat::WriteMolecule(OBBase* pOb, OBConversion* pConv) { OBMol* pmol = dynamic_cast<OBMol*>(pOb); if(pmol==NULL) return false; //Define some references so we can use the old parameter names ostream &ofs = *pConv->GetOutStream(); OBMol &mol = *pmol; unsigned int i, file_num = 1; string str,str1; char buffer[BUFF_SIZE]; OBAtom *atom; OBBond *bond; vector<OBBond*>::iterator j; char bond_char; // make sure to escape titles in double quotes // PR#1501694 ofs << "mol " << file_num << " \"" << mol.GetTitle() << "\"\n"; for(i = 1;i <= mol.NumAtoms(); i++) { atom = mol.GetAtom(i); snprintf(buffer, BUFF_SIZE, "atom %d - %-3s ** - %8.5f %8.5f %8.5f %8.5f %d ", i, etab.GetSymbol(atom->GetAtomicNum()), atom->GetPartialCharge(), atom->GetX(), atom->GetY(), atom->GetZ(), atom->GetValence()); ofs << buffer; for (bond = atom->BeginBond(j); bond; bond = atom->NextBond(j)) { switch(bond->GetBO()) { case 1 : bond_char = 's'; break; case 2 : bond_char = 'd'; break; case 3 : bond_char = 't'; break; case 5 : bond_char = 'a'; break; default: bond_char = 's'; break; } if (bond->IsAromatic()) bond_char = 'a'; snprintf(buffer,BUFF_SIZE, "%d %c ", (bond->GetNbrAtom(atom))->GetIdx(), bond_char); ofs << buffer; } ofs << endl; } ofs << "endmol " << file_num << endl; return(true); }