int propertyValue = Integer.MAX_VALUE;
BitSet propertyBitSet = null;
int bitsetComparator = tokOperator;
int bitsetBaseValue = comparisonValue;
int atomCount = viewer.getAtomCount();
ModelSet modelSet = viewer.getModelSet();
Atom[] atoms = modelSet.atoms;
int imax = -1;
int imin = 0;
int iModel = -1;
int[] cellRange = null;
int nOps = 0;
BitSet bs;
// preliminary setup
switch (tokWhat) {
case Token.symop:
switch (bitsetComparator) {
case Token.opGE:
case Token.opGT:
imax = Integer.MAX_VALUE;
break;
}
break;
case Token.atomindex:
try {
switch (tokOperator) {
case Token.opLT:
return BitSetUtil.newBitSet(0, comparisonValue);
case Token.opLE:
return BitSetUtil.newBitSet(0, comparisonValue + 1);
case Token.opGE:
return BitSetUtil.newBitSet(comparisonValue, atomCount);
case Token.opGT:
return BitSetUtil.newBitSet(comparisonValue + 1, atomCount);
case Token.opEQ:
return (comparisonValue < atomCount ? BitSetUtil.newBitSet(
comparisonValue, comparisonValue + 1) : new BitSet());
case Token.opNE:
default:
bs = BitSetUtil.setAll(atomCount);
if (comparisonValue >= 0)
bs.clear(comparisonValue);
return bs;
}
} catch (Exception e) {
return new BitSet();
}
}
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;
/*