示例#1
0
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);
	}
}
示例#2
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);
   }
}