本文整理汇总了C++中OBMol::ConvertDativeBonds方法的典型用法代码示例。如果您正苦于以下问题:C++ OBMol::ConvertDativeBonds方法的具体用法?C++ OBMol::ConvertDativeBonds怎么用?C++ OBMol::ConvertDativeBonds使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OBMol
的用法示例。
在下文中一共展示了OBMol::ConvertDativeBonds方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: WriteChemObject
//.........这里部分代码省略.........
int nbits = 0;
const char* p = pConv->IsOption("N");
if(p)
nbits = atoi(p);
string fpid; //fingerprint type
p=pConv->IsOption("f");
if(p)
fpid=p;
//Prepare name without path
string datafilename = pConv->GetInFilename();
if(datafilename.empty())
{
obErrorLog.ThrowError(__FUNCTION__, "No datafile!", obError);
return false;
}
string::size_type pos = datafilename.find_last_of("/\\");
if(pos!=string::npos)
datafilename=datafilename.substr(pos+1);
nmols = pConv->NumInputObjects();
if(nmols>0)
clog << "\nIt contains " << nmols << " molecules" << flush;
if(nmols>500000)
{
istream* is = pConv->GetInStream();
streampos origpos = is->tellg();
is->seekg(0,ios_base::end);
long long filesize = is->tellg();
if(filesize > 4294967295u)
{
obErrorLog.ThrowError(__FUNCTION__, "The datafile must not be larger than 4GB", obError);
return false;
}
is->seekg(origpos);
}
sw.Start();
if(update)
{
fsi = new FastSearchIndexer(pidx, pOs, nmols);//using existing index
//Seek to position in datafile of last of old objects
LastSeekpos = *(pidx->seekdata.end()-1);
pConv->GetInStream()->seekg(LastSeekpos);
}
else
fsi = new FastSearchIndexer(datafilename, pOs, fpid, nbits, nmols);
obErrorLog.StopLogging();
}
//All passes provide an object for indexing
OBBase* pOb = pConv->GetChemObject();
OBMol* pmol = dynamic_cast<OBMol*> (pOb);
if(pmol)
pmol->ConvertDativeBonds();//use standard form for dative bonds
streampos seekpos = pConv->GetInPos();
if(!update || seekpos>LastSeekpos)
{
fsi->Add(pOb, seekpos );
if(pConv->GetOutputIndex()==400 && nmols>1000)
{
clog << " Estimated completion time ";
double secs = sw.Elapsed() * nmols / 400; //
streamsize op = clog.precision(0);
if(secs>150)
clog << secs/60 << " minutes" << endl;
else
clog << secs << " seconds" << endl;
clog.precision(op);
}
}
else
//Don't index old objects during update. Don't increment pConv->Index.
pConv->SetOutputIndex(pConv->GetOutputIndex()-1);
if(pConv->IsLast())
{
//Last pass
delete fsi; //saves index file
if(NewOstreamUsed)
delete pOs;
//return to starting conditions
fsi=NULL;
obErrorLog.StartLogging();
double secs = sw.Elapsed();
if(secs>150)
clog << "\n It took " << secs/60 << " minutes" << endl;
else
clog << "\n It took " << secs << " seconds" << endl;
}
delete pOb;
return true;
}
示例2: GroupContributions
double OBGroupContrib::GroupContributions(OBMol &mol)
{
vector<vector<int> > _mlist; // match list for atom typing
vector<vector<int> >::iterator j;
vector<pair<OBSmartsPattern*, double> >::iterator i;
vector<double> atomValues(mol.NumAtoms(), 0.0);
OBMol tmpmol;
tmpmol = mol;
tmpmol.ConvertDativeBonds();
// atom contributions
//cout << "atom contributions:" << endl;
for (i = _contribsHeavy.begin(); i != _contribsHeavy.end(); ++i) {
if (i->first->Match(tmpmol)) {
_mlist = i->first->GetMapList();
for (j = _mlist.begin(); j != _mlist.end(); ++j) {
atomValues[(*j)[0] - 1] = i->second;
//cout << (*j)[0] << " = " << i->first->GetSMARTS() << " : " << i->second << endl;
}
}
}
vector<double> hydrogenValues(tmpmol.NumAtoms(), 0.0);
//hydrogenValues.resize(tmpmol.NumAtoms());
// hydrogen contributions
//cout << "hydrogen contributions:" << endl;
for (i = _contribsHydrogen.begin(); i != _contribsHydrogen.end(); ++i) {
if (i->first->Match(tmpmol)) {
_mlist = i->first->GetMapList();
for (j = _mlist.begin(); j != _mlist.end(); ++j) {
int Hcount = tmpmol.GetAtom((*j)[0])->GetValence() - tmpmol.GetAtom((*j)[0])->GetHvyValence();
hydrogenValues[(*j)[0] - 1] = i->second * Hcount;
//cout << (*j)[0] << " = " << i->first->GetSMARTS() << " : " << i->second << endl;
}
}
}
// total atomic and hydrogen contribution
double total = 0.0;
for (unsigned int index = 0; index < tmpmol.NumAtoms(); index++) {
if (tmpmol.GetAtom(index+1)->IsHydrogen())
continue;
total += atomValues[index];
total += hydrogenValues[index];
}
/*
FOR_ATOMS_OF_MOL (a, tmpmol)
cout << "hydrogens on atom " << a->GetIdx() << ": " << a->GetValence() - a->GetHvyValence() << endl;
for (int index = 0; index < tmpmol.NumAtoms(); index++)
cout << "atom " << index << ": " << atomValues[index] << endl;
for (int index = 0; index < tmpmol.NumAtoms(); index++)
cout << "hydrogen " << index << ": " << hydrogenValues[index] << endl;
*/
return total;
}
示例3: ObtainTarget
bool FastSearchFormat::ObtainTarget(OBConversion* pConv, OBMol& patternMol, const string& indexname)
{
//Obtains an OBMol
// either from the SMARTS string in the -s option
// or by converting the file in the -S option
//or, if neither option is provided, displays information on the index file.
stringstream smiles(stringstream::out);
ifstream patternstream;
OBConversion PatternConv(&patternstream,&smiles);
const char* p = pConv->IsOption("s",OBConversion::GENOPTIONS);
string txt;
if(p)
{
// Use the -s option
txt=p;
stringstream smarts(txt, stringstream::in);
OBConversion Convsm(&smarts);
if(!Convsm.SetInFormat("smi")) return false;
Convsm.Read(&patternMol);
//erase -s option in GeneralOptions since it will be rewritten
pConv->RemoveOption("s",OBConversion::GENOPTIONS);
if(patternMol.Empty())
{
obErrorLog.ThrowError(__FUNCTION__,
"Could not make a molecule from " + smarts.str()
+ "\nThis needs to be valid SMILES when using fastsearch."
"You can use the more versatile SMARTS in a normal substructure search." , obError);
return false;
}
}
else
{
// or Make OBMol from file in -S option or -aS option
p = pConv->IsOption("S",OBConversion::GENOPTIONS);
if(!p)
p = pConv->IsOption("S",OBConversion::INOPTIONS);//for GUI mainly
}
if(!p)
{
//neither -s or -S options provided. Output info rather than doing search
const FptIndexHeader& header = fs.GetIndexHeader();
string id(header.fpid);
if(id.empty())
id = "default";
clog << indexname << " is an index of\n " << header.datafilename
<< ".\n It contains " << header.nEntries
<< " molecules. The fingerprint type is " << id << " with "
<< OBFingerprint::Getbitsperint() * header.words << " bits.\n"
<< "Typical usage for a substructure search:\n"
<< "babel indexfile.fs -osmi -sSMILES" << endl;
return false;
}
if(p && patternMol.Empty())
{
txt=p;
string::size_type pos = txt.find_last_of('.');
if(pos==string::npos)
{
obErrorLog.ThrowError(__FUNCTION__, "Filename of pattern molecule in -S option must have an extension", obError);
return false;
}
patternstream.open(txt.c_str());
if(!patternstream)
{
stringstream errorMsg;
errorMsg << "Cannot open " << txt << endl;
obErrorLog.ThrowError(__FUNCTION__, errorMsg.str(), obError);
return false;
}
PatternConv.SetOneObjectOnly();
if(PatternConv.SetInFormat(txt.substr(pos+1).c_str()))
PatternConv.Read(&patternMol);
}
if(patternMol.Empty())
{
obErrorLog.ThrowError(__FUNCTION__, "Cannot derive a molecule from the -s or -S options", obWarning);
return false;
}
patternMol.ConvertDativeBonds();//use standard form for dative bonds
//Convert to SMILES and generate a -s option for use in the final filtering
if(!PatternConv.SetOutFormat("smi"))
return false;
PatternConv.Write(&patternMol);
//remove name to leave smiles string
string smilesstr(smiles.str());
string::size_type pos = smilesstr.find_first_of(" \t\r\n");
if(pos!=string::npos)
smilesstr = smilesstr.substr(0,pos);
pConv->AddOption("s", OBConversion::GENOPTIONS, smilesstr.c_str());
return true;
//.........这里部分代码省略.........