com.actelion.research.chem.conf.BondRotationHelper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of openchemlib Show documentation
Show all versions of openchemlib Show documentation
Open Source Chemistry Library
package com.actelion.research.chem.conf;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.List;
import java.util.stream.IntStream;
import com.actelion.research.calc.Matrix;
import com.actelion.research.chem.Coordinates;
import com.actelion.research.chem.StereoMolecule;
import com.actelion.research.chem.phesa.PheSAAlignment;
public class BondRotationHelper {
private StereoMolecule mMol;
private int[] mRotatableBonds;
private boolean[] mIsRotatableBond;
private int[][] mSmallerSideAtomLists;
private int[][] mBiggerSideAtomLists;
private int[][] mTorsionAtoms;
private int[][] mRearAtoms;
private int[] mRotationCenters;
private int[] mRotationCentersBig;
private String[] mTorsionIDs;
public BondRotationHelper(StereoMolecule mol) {
mMol = mol;
initialize();
}
public void initialize() {
int[] disconnectedFragmentNo = new int[mMol.getAllAtoms()];
int disconnectedFragmentCount = mMol.getFragmentNumbers(disconnectedFragmentNo, false, true);
int disconnectedFragmentSize[] = new int[disconnectedFragmentCount];
for (int atom=0; atom rotBonds = new ArrayList();
IntStream.range(0, mIsRotatableBond.length).forEach(e -> {
if(mIsRotatableBond[e])
rotBonds.add(e);
});
mRotatableBonds = rotBonds.stream().mapToInt(i->i).toArray();
mTorsionAtoms = new int[mRotatableBonds.length][];
mRearAtoms = new int[mRotatableBonds.length][];
mSmallerSideAtomLists = new int[mRotatableBonds.length][];
mBiggerSideAtomLists = new int[mRotatableBonds.length][];
mRotationCenters = new int[mRotatableBonds.length];
mRotationCentersBig = new int[mRotatableBonds.length];
mTorsionIDs = new String[mRotatableBonds.length];
for(int i=0;i disconnectedFragmentSize-alkyneAtoms-memberCount) {
memberCount = disconnectedFragmentSize-alkyneAtoms-memberCount;
invert = true;
}
// if invert, then flag all linear alkyne atoms to be avoided
if (invert && alkyneAtoms != 0) {
int spAtom = mRearAtoms[bondIndex][0];
int backAtom = mTorsionAtoms[bondIndex][1];
while (mMol.getAtomPi(spAtom) == 2
&& mMol.getConnAtoms(spAtom) == 2
&& mMol.getAtomicNo(spAtom) < 10) {
isMember[spAtom] = true;
for (int j=0; j<2; j++) {
int connAtom = mMol.getConnAtom(spAtom, j);
if (connAtom != backAtom) {
backAtom = spAtom;
spAtom = connAtom;
break;
}
}
}
}
int memberNo = 0;
int fragmentNo = disconnectedFragmentNo[mTorsionAtoms[bondIndex][1]];
int [] smallerSideAtomList = new int[memberCount];
for (int atom=0; atom bigSideAtoms = new HashSet();
Set smallSideAtoms = new HashSet();
for(int a : smallerSideAtomList)
smallSideAtoms.add(a);
for(int a=0;a
© 2015 - 2025 Weber Informatics LLC | Privacy Policy