Skip to content

IterateOverSMARTSSpecifiedAtomsInASystem

dstoeckel edited this page Mar 16, 2015 · 4 revisions

How can I iterate over specific atoms in a System?

Iterate over specific atoms in a System using the Selector:

C++

#include <BALL/KERNEL/selector.h>

...
BALL::System system;
...
system.deselect();
BALL::Selector select("SMARTS([$([#6D3](~[#8D1])(~[#8D1]))])");
system.apply(select);
List<BALL::Atom*> selected_atoms = select.getSelectedAtoms();
List<BALL::Atom*>::iterator it = selected_atoms.begin();					
for ( ; it != selected_atoms.end(); ++it)
{
   std::cout << (*it)->getElement().getAtomicNumber() << std::endl;
}
system.deselect();

Note: Never try to add or remove atoms from the System while using the Iterator! Your programm will crash!

Python

import BALL
s = getSystem(0)
select = BALL.Selector("SMARTS(N-H)")
s.apply(select)

print len(select.getSelectedAtoms())

for atom in select.getSelectedAtoms():
	print atom.getPosition()
	
#update BALLView
getMainControl().update(s)

Clone this wiki locally