Esempio n. 1
0
RDKit::RWMol* MolpherMol::MolpherMolImpl::asRDMol(bool include_locks) const {
    RDKit::RWMol* ret = new RDKit::RWMol(*(rd_mol), true, -1);
    if (include_locks) {
        std::map<std::string, std::vector<int>> locks_map;
        auto atoms = getAtoms();
        for (int atm_idx = 0; atm_idx != atoms.size(); atm_idx++) {
            auto atm = atoms[atm_idx];
            if (atm->isLocked()) {
                auto atm_locks(MolpherAtom::lockingMaskToString(atm->getLockingMask()));
                for (auto lock : atm_locks) {
                    if (locks_map.find(lock) == locks_map.end()) {
                        locks_map[lock] = std::vector<int>();
                    }
                    locks_map[lock].push_back(atm_idx+1);
                }
            }
        }

        for (auto pair : locks_map) {
            std::ostringstream oss;
            std::copy(pair.second.begin(), pair.second.end()-1,
                      std::ostream_iterator<int>(oss, ","));
            oss << pair.second.back();
            ret->setProp("MOLPHER_" + pair.first, oss.str());
        }
    }
    return ret;
}
Esempio n. 2
0
void Group::align(QList<Vec> const& current)
{
   AtomList atoms(getAtoms());
   int nAtoms(atoms.size());
   if (current.size() != nAtoms) {
      QMsgBox::warning(0, "IQmol", "Coordinate mismatch in Group alignment");
      return;
   }

   QList<double> weights;
   QList<Vec> reference;
   AtomList::iterator atom;
   for (atom = atoms.begin(); atom != atoms.end(); ++atom) {
       reference.append((*atom)->getTranslation());
       weights.append((*atom)->getMass());
   }

   Util::Align align(reference, current, weights);
   if (!align.computeAlignment()) {
      QMsgBox::warning(0, "IQmol", "Alignment failed in Group::align");
      return;
   }

   setRotation(align.rotation());
   setTranslation(align.translation());
}
Esempio n. 3
0
/**
 * @brief constructor: gets Display vars and registers us
 */
XfitMan::XfitMan()
{
#if 0
    getAtoms();
#endif
    root = QX11Info::appRootWindow();
#if 0
    screencount = ScreenCount(QX11Info::display());
#endif
}
Esempio n. 4
0
int Surface3D::findZmin(int zBegin) {
    for (auto z = m_surfaces2D.cbegin() + zBegin; z != m_surfaces2D.cend(); ++z)
        for (auto y = z->cbegin() + 2; y != z->cend() - 1; ++y) {
            auto const yEnd = y->cend();

            for (auto x = y->cbegin() + 2; x != yEnd - 1; ++x)

                for (auto const& atom : x->getAtoms())
                    if (!atom.deleted) {
                        return static_cast<int>(z - m_surfaces2D.cbegin());
                    }
        }

    return zBegin;
}
Esempio n. 5
0
void Residue::find_atom_named(string name, Atom * a)
{
  // This method assumes that all atoms in a residue has unique names!

  vector<Atom*> atoms = getAtoms();

  for(vector<Atom*>::iterator atom = atoms.begin(); atom != atoms.end(); atom++)
    if((*atom)->name==name)
      {
	*a = **atom;
	return;
      }

  return;
}
Esempio n. 6
0
const Ptr<ImageAtom>& ImageMolecule::getAnchor() const throw (std::logic_error)
{

  if (atoms_.empty())
  {
    throw logic_error("The molecule is empty!");
  }

  //if the anchor has not been set then just return the begining of
  //atoms
  if (anchor_.empty())
    return *getAtoms().begin();

  return anchor_;
}
Esempio n. 7
0
void Soup::set_sybyl_atom_types()
{

  // Setup sybyl atom types
  sybyl_types.clear();
  ifstream in;
  char line[256];
  string s;
  in.open("parameters/sybyl_types.txt");

  if(! in.is_open())
    {
      cout << "Error:File 'parameters/sybyl_types.txt' could not be found\n";
      exit(0);
    }

  while(!in.eof())
    {
      in.getline(line,256);
      //cout<<line<<endl;
      s = string(line);
      
      if (s.size()>3)
	{
	  string key = s.substr(0,8);
	  for(unsigned int i=0; i<key.size(); )
	    if(string(key,i,1) ==" ")
	      key = key.erase(i, 1);
	    else
	      i++;

	  string atom_name = s.substr(8,14);

	  for(unsigned int i=0; i<atom_name.size(); )
	    if(string(atom_name,i,1) ==" ")
	      atom_name = atom_name.erase(i, 1);
	    else
	      i++;


	  sybyl_types[key]= atom_name.c_str();
	  
	  //	  cout<<"Atom "<<key<<" has the sybyl type "<< sybyl_types[key]<<endl;
	}
      

   }

  vector<Atom*> atoms = getAtoms();
  vector<Atom*>::iterator it = atoms.begin();
  
  while(it != atoms.end())
    {
      if((*it)->residue == "HIE" || (*it)->residue == "HID" )
	(*it)->residue = "HIS";
      if((*it)->residue == "CYX")
	(*it)->residue = "CYS";
      
      if ((*it)->name=="O''")
	(*it)->name="OXT";
      if ((*it)->name=="O'")
	(*it)->name="O";
  
      string k = (*it)->residue+"-"+(*it)->name;
      (*it)->generic_key = k;

      if ((*it)->sybyl_type=="" && (*it)->element != "H")
	(*it)->sybyl_type = sybyl_types[k];
      //cout<<"KEY:"<<k<<" gives: "<<(*it)->sybyl_type << "   in"<< name<<endl;
      
      
      it++;
    }

  sybyl_types_assigned=true;  
  return;

}
Esempio n. 8
0
void ExtLang::build(const Lang &lang,ulen map_atom_count)
 {
  original_atom_count=lang.getAtomCount();
  
  // atoms
  {
   ulen len=LenAdd(lang.getAtomCount(),lang.getRuleCount());
   
   auto atoms=createAtoms(len);
   
   ulen index=0;
   
   for(auto &atom : lang.getAtoms() )
     {
      atoms->index=index++;
      atoms->name=pool.dup(atom.name);
      
      atoms->map_index=atom.map_index;
      
      ++atoms;
     }
   
   for(auto &rule : lang.getRules() )
     {
      atoms->index=index++;
      atoms->name=pool.cat(StrLen("@",1),rule.ret->name,StrLen("::",2),rule.name);
      
      atoms->map_index=rule.map_index+map_atom_count;
      
      ++atoms;
     }
  }
  
  // synts
  {
   ulen len=lang.getSyntCount();
   
   auto synts=createSynts(len);
   
   for(auto &synt : lang.getSynts() )
     {
      synts->index=synt.index;
      synts->name=pool.dup(synt.name);
      
      synts->is_lang=synt.is_lang;
      
      synts->map_index=synt.map_index;
      
      synts->rules.len=synt.rules.len;
     
      ++synts;
     }
  }
  
  // rules
  {
   ulen len=lang.getRuleCount();
   
   auto rules=createRules(len);
   
   auto atoms=getAtoms();
   auto synts=getSynts();
   
   ulen delta=original_atom_count;
   
   for(auto &rule : lang.getRules() )
     {
      rules->index=rule.index;
      rules->name=pool.dup(rule.name);
      
      rules->map_index=rule.map_index;
      
      rules->ret=&(synts[rule.ret->index]);
      
      auto args=createElements(*rules,LenAdd(rule.args.len,1));
      
      for(auto element : rule.args )
        {
         element.apply( [=] (const AtomDesc *atom) { args->ptr=&(atoms[atom->index]); } , 
                        [=] (const SyntDesc *synt) { args->ptr=&(synts[synt->index]); } );
        
         ++args;
        }
      
      args->ptr=&(atoms[rule.index+delta]);
     
      ++rules;
     }
  }
  
  // synts.rules
  {
   auto synts=this->synts;
   
   auto *ptr=rules.ptr;
   
   for(; +synts ;++synts)
     {
      ulen len=synts->rules.len;
      
      synts->rules.ptr=ptr;
      
      ptr+=len;
     }
  }
  
  pool.shrink_extra();
 }
Esempio n. 9
0
TopLang::TopLang(const CondLang &clang)
 {
  Collector<RuleRec> collector;
  DynArray<ulen> map(DoRaw(clang.getSyntCount()));
  
  // atoms
  {
   auto range=clang.getAtoms();
   
   auto atoms=createAtoms(range.len);
   
   for(; +atoms ;++atoms,++range)
     {
      atoms->index=range->index;
      atoms->name=pool.dup(range->name);
      
      atoms->map_index=range->index;
     }
  }
  
  // synts
  {
   auto range=clang.getSynts();
   
   ulen len=0;
   
   for(auto &synt : range ) len=LenAdd(len, Max<ulen>(synt.kinds.len,1) );
   
   auto synts=createSynts(len);
   
   ulen index=0;
   ulen map_index=0;
   
   for(; +range ;++range,++map_index)
     if( +range->kinds )
       {
        map[map_index]=index;
      
        StrLen name=range->name;
        bool is_lang=range->is_lang;
        ulen desc_map_index=range->index;
       
        for(auto &kind : range->kinds )
          {
           synts->rules.len=makeRules(collector,*range,kind.index);
          
           synts->index=index++;
           synts->name=pool.cat(name,StrLen(".",1),kind.name);
         
           synts->is_lang=is_lang;
          
           synts->map_index=desc_map_index;
           synts->kind_index=kind.index;
           
           ++synts;
          }
       }
     else
       {
        map[map_index]=index;
       
        synts->rules.len=makeRules(collector,*range);
      
        synts->index=index++;
        synts->name=pool.dup(range->name);
       
        synts->is_lang=range->is_lang;
        
        synts->map_index=range->index;
        
        ++synts;
       }
  }
  
  // rules
  {
   auto range=collector.flat();
   
   auto rules=createRules(range.len);
   
   auto atoms=getAtoms();
   auto synts=getSynts();
   
   ulen index=0;
   
   for(; +rules ;++rules,++range)
     {
      rules->index=index++;
      rules->name=range->name;
      
      rules->map_index=range->map_index;
      
      auto arange=Range_const(range->args);
      
      auto args=createElements(*rules,arange.len);
      
      for(; +args ;++args,++arange)
        {
         arange->element.apply( [=] (const CondLangBase::AtomDesc *atom) { args->ptr=&(atoms[atom->index]); } , 
                                [=,&map] (const CondLangBase::SyntDesc *synt) { args->ptr=&(synts[map[synt->index]+arange->kind_index]); } );
        }
     }
  }
  
  // synt.rules rules.ret
  {
   auto synts=this->synts;
   auto *ptr=rules.ptr;
   
   for(; +synts ;++synts)
     {
      ulen len=synts->rules.len;
      
      synts->rules.ptr=ptr;
      
      for(auto &rule : Range(ptr,len) ) rule.ret=synts.ptr;
      
      ptr+=len;
     }
  }
  
  pool.shrink_extra();
 }
Esempio n. 10
0
char isCritical(char f[SIZEX][SIZEY], char x, char y) {
	if(getAtoms(f, x, y) == getCapacity(x, y)) {
		return 1;
	}
	return 0;
}
Esempio n. 11
0
BottomLang::BottomLang(const CondLang &clang)
 {
  // atoms
  {
   auto range=clang.getAtoms();
   
   auto atoms=createAtoms(range.len);
   
   for(; +atoms ;++atoms,++range)
     {
      atoms->index=range->index;
      atoms->name=pool.dup(range->name);
     }
  }
  
  // synts
  {
   auto range=clang.getSynts();
   
   auto synts=createSynts(range.len);
   
   for(; +synts ;++synts,++range)
     {
      synts->index=range->index;
      synts->name=pool.dup(range->name);
      
      synts->is_lang=range->is_lang;
     }
  }
  
  // rules
  {
   auto range=clang.getRules();
   
   auto rules=createRules(range.len);
   
   for(; +rules ;++rules,++range)
     {
      rules->index=range->index;
      rules->name=pool.dup(range->name);
     }
  }
  
  // synts.rules
  {
   auto range=clang.getSynts();
   
   auto synts=this->synts;
   
   ulen off=0;
   auto rules=getRules();
   
   for(; +synts ;++synts,++range)
     {
      ulen len=range->rules.len;
      
      synts->rules=rules.part(off,len);
      
      off+=len;
     }
  }
  
  // rules.ret rules.args
  {
   auto range=clang.getRules();
   
   auto rules=this->rules;
   
   auto atoms=getAtoms();
   auto synts=getSynts();
   
   for(; +rules ;++rules,++range)
     {
      rules->ret=&(synts[range->ret->index]);
      
      auto arange=range->args;
      
      auto args=createElements(*rules,arange.len);
      
      for(; +args ;++args,++arange)
        {
         arange->apply( [=] (const CondLangBase::AtomDesc *atom) { args->ptr=&(atoms[atom->index]); } , 
                        [=] (const CondLangBase::SyntDesc *synt) { args->ptr=&(synts[synt->index]); } );
        }
     }
  }
  
  pool.shrink_extra();
 }