void fingerprint2::DoRings() { //For each complete ring fragment, find its largest chemically identical representation //by rotating and reversing, and insert into the main set of fragments SetItr itr; for(itr=ringset.begin();itr!=ringset.end();++itr) { vector<int> t1(*itr); //temporary copy vector<int> maxring(*itr); //the current largest vector unsigned int i; for(i=0;i<t1.size()/2;++i) { //rotate atoms in ring rotate(t1.begin(),t1.begin()+2,t1.end()); if(t1>maxring) maxring=t1; //reverse the direction around ring vector<int> t2(t1); reverse(t2.begin()+1, t2.end()); if(t2>maxring) maxring=t2; } fragset.insert(maxring); //PrintFpt(maxring,0); } }
void Fingerprint::_doRings(void) { std::set<std::vector<int> >::iterator itr; for (itr = _ringset.begin(); itr != _ringset.end(); ++itr) { std::vector<int> t1(*itr); std::vector<int> maxring(*itr); for (unsigned int i = 0; i < t1.size() / 2; ++i) { rotate(t1.begin(), t1.begin() + 2, t1.end()); if (t1 > maxring) { maxring = t1; } int tmp = t1[0]; t1[0] = 0; _fragset.insert(t1); t1[0] = tmp; std::vector<int> t2(t1); reverse(t2.begin() + 1, t2.end()); if (t2 > maxring) { maxring = t2; } } _fragset.insert(maxring); } }