}
}
bs = new BitSet(atomCount);
for (int i = 0; i < atomCount; ++i) {
boolean match = false;
Atom atom = atoms[i];
switch (tokWhat) {
default:
propertyValue = Atom.atomPropertyInt(atom, tokWhat);
break;
case Token.configuration:
// these are all-inclusive; no need to do a by-atom comparison
return BitSetUtil.copy(viewer.getConformation(-1, comparisonValue - 1,
false));
case Token.symop:
propertyBitSet = atom.getAtomSymmetry();
if (propertyBitSet == null)
continue;
if (atom.getModelIndex() != iModel) {
iModel = atom.getModelIndex();
cellRange = modelSet.getModelCellRange(iModel);
nOps = modelSet.getModelSymmetryCount(iModel);
}
if (bitsetBaseValue >= 200) {
if (cellRange == null)
continue;
/*
* symop>=1000 indicates symop*1000 + lattice_translation(555) for
* this the comparision is only with the translational component; the
* symop itself must match thus: select symop!=1655 selects all
* symop=1 and translation !=655 select symop>=2555 selects all
* symop=2 and translation >555 symop >=200 indicates any symop in the
* specified translation (a few space groups have > 100 operations)
*
* Note that when normalization is not done, symop=1555 may not be in
* the base unit cell. Everything is relative to wherever the base
* atoms ended up, usually in 555, but not necessarily.
*
* The reason this is tied together an atom may have one translation
* for one symop and another for a different one.
*
* Bob Hanson - 10/2006
*/
comparisonValue = bitsetBaseValue % 1000;
int symop = bitsetBaseValue / 1000 - 1;
if (symop < 0) {
match = true;
} else if (nOps == 0 || symop >= 0
&& !(match = propertyBitSet.get(symop))) {
continue;
}
bitsetComparator = Token.none;
if (symop < 0)
propertyValue = atom.getCellTranslation(comparisonValue, cellRange,
nOps);
else
propertyValue = atom.getSymmetryTranslation(symop, cellRange, nOps);
} else if (nOps > 0) {
if (comparisonValue > nOps) {
if (bitsetComparator != Token.opLT
&& bitsetComparator != Token.opLE)
continue;