
com.actelion.research.chem.sar.ExitVector Maven / Gradle / Ivy
package com.actelion.research.chem.sar;
public class ExitVector {
private int mAtom,mIndex,mSeenBondOrders,mTopicity;
private boolean mAtomIsQueryAtom,mEmptySubstituentSeen,mSubstituentVaries;
private String mConstantSubstituent;
private int mRGroupNo;
/**
* @param atom index of canonical core structure (if is bond bridge atom) or of original query structure
* @param atomIsQueryAtom
* @param index number to distinguish multiple exit vectors at same core atom (0-based)
* @param topicity -1 (no topicity) or 0 or 1
*/
public ExitVector(int atom, boolean atomIsQueryAtom, int index, int topicity) {
mAtom = atom;
mAtomIsQueryAtom = atomIsQueryAtom;
mIndex = index;
mTopicity = topicity;
}
public int getQueryAtom() {
return mAtomIsQueryAtom ? mAtom : -1;
}
/**
* @param queryToCoreAtom
* @return the root atom index for the core structure
*/
public int getCoreAtom(int[] queryToCoreAtom) {
return mAtomIsQueryAtom ? queryToCoreAtom[mAtom] : mAtom;
}
public int getIndex() {
return mIndex;
}
public int getTopicity() {
return mTopicity;
}
public int getRGroupNo() {
return mRGroupNo;
}
public void setRGroupNo(int no) {
mRGroupNo = no;
}
public boolean substituentVaries() {
return mSubstituentVaries;
}
public String getConstantSubstituent() {
return mConstantSubstituent;
}
public boolean hasSeenBondOrder(int bondOrder) {
return (mSeenBondOrders & (1 << bondOrder)) != 0;
}
/**
* This method is called with all substituents at this exit vector position.
* After being called with all substituents from all molecules within the same scaffold
* or scaffols group, it accumulated the knowledge, whether this exit vector is always
* unsubstituted, carries always the same substituent, or carries multiple different
* substituents.
* @param substituent
*/
protected void checkSubstituent(String substituent, int bondOrder) {
mSeenBondOrders |= (1 << bondOrder);
if (!mSubstituentVaries) {
if (substituent == null) {
mEmptySubstituentSeen = true;
if (mConstantSubstituent != null)
mSubstituentVaries = true;
}
else {
if (mEmptySubstituentSeen)
mSubstituentVaries = true;
else if (mConstantSubstituent == null)
mConstantSubstituent = substituent;
else if (!mConstantSubstituent.equals(substituent))
mSubstituentVaries = true;
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy