diff --git a/openchemlib b/openchemlib index 9a3b2027..e30c9f88 160000 --- a/openchemlib +++ b/openchemlib @@ -1 +1 @@ -Subproject commit 9a3b2027e2bd31b0e5352881d503b161a1dc7b43 +Subproject commit e30c9f88bb90c9b1ee688c121ee8ecfb2cc043c4 diff --git a/src/com/actelion/research/gwt/chemlib/com/actelion/research/chem/ExtendedMolecule.java b/src/com/actelion/research/gwt/chemlib/com/actelion/research/chem/ExtendedMolecule.java index 22e88c69..db7c7ae1 100644 --- a/src/com/actelion/research/gwt/chemlib/com/actelion/research/chem/ExtendedMolecule.java +++ b/src/com/actelion/research/gwt/chemlib/com/actelion/research/chem/ExtendedMolecule.java @@ -4118,24 +4118,32 @@ public void validateBondQueryFeatures() { ensureHelperArrays(cHelperRings); for (int bond=0; bond mTables = new HashMap(); - private List mEnergies = new ArrayList(); + public static Map mTables = new HashMap<>(); + private final List mEnergies = new ArrayList<>(); /** @@ -114,25 +105,21 @@ public final class ForceFieldMMFF94 extends AbstractForceField { * See class description of a list of options. */ - public ForceFieldMMFF94(StereoMolecule m, String tablename, - Map options) { + public ForceFieldMMFF94(StereoMolecule m, String tablename, Map options) + throws BadAtomTypeException,BadRingAromException { super(m); mMMFFMol = new com.actelion.research.chem.forcefield.mmff.MMFFMolecule(m); mMol.ensureHelperArrays(StereoMolecule.cHelperRings); Tables table = mTables.get(tablename); double nonBondedThresh = options.containsKey("nonbonded cutoff") - ? ((Double)options.get("nonbonded cutoff")).doubleValue() + ? (Double)options.get("nonbonded cutoff") : 100.0; double dielConst = options.containsKey("dielectric constant") - ? ((Double)options.get("dielectric constant")).doubleValue() : 1.0; - - boolean dielModel = options.containsKey("dielectric model") - ? ((String)options.get("dielectric model")).equals("distance") - : false; - + ? (Double)options.get("dielectric constant") : 1.0; + boolean dielModel = options.containsKey("dielectric model") && (options.get("dielectric model")).equals("distance"); Separation sep = new Separation(mMMFFMol); @@ -174,8 +161,8 @@ public ForceFieldMMFF94(StereoMolecule m, String tablename, * must be a table with this name that has been loaded with * "loadTable()". */ - public ForceFieldMMFF94(StereoMolecule mol, String tablename) { - this(mol, tablename, new HashMap()); + public ForceFieldMMFF94(StereoMolecule mol, String tablename) throws BadAtomTypeException,BadRingAromException { + this(mol, tablename, new HashMap<>()); } /** diff --git a/src/com/actelion/research/gwt/chemlib/com/actelion/research/chem/forcefield/mmff/MMFFMolecule.java b/src/com/actelion/research/gwt/chemlib/com/actelion/research/chem/forcefield/mmff/MMFFMolecule.java index cc4ba25b..539034cf 100644 --- a/src/com/actelion/research/gwt/chemlib/com/actelion/research/chem/forcefield/mmff/MMFFMolecule.java +++ b/src/com/actelion/research/gwt/chemlib/com/actelion/research/chem/forcefield/mmff/MMFFMolecule.java @@ -36,25 +36,24 @@ import com.actelion.research.chem.StereoMolecule; import com.actelion.research.chem.RingCollection; +import java.util.Arrays; + /** * MMFF molecule is a wrapper class for the ExtendedMolecule. It holds some * additional data such as a cache of the atom types, whether the molecule is * valid for MMFF and the ring mmff aromaticity property. */ public final class MMFFMolecule extends StereoMolecule { - private RingBoolean[] mRingArom; - private int[] mAtomTypes; - private int[] mHydrogenMap; + private final RingBoolean[] mRingArom; + private final int[] mAtomTypes; + private final int[] mHydrogenMap; - public MMFFMolecule(StereoMolecule mol) throws BadAtomTypeException, - BadRingAromException - { + public MMFFMolecule(StereoMolecule mol) throws BadAtomTypeException,BadRingAromException { super(mol); mHydrogenMap = getHandleHydrogenMap(); RingCollection rings = getRingSet(); mRingArom = new RingBoolean[rings.getSize()]; - for (int i=0; i maxRMSD ? null : matrix; } - public boolean hasMatchingExitVectors(FragmentGeometry3D geometry, Coordinates[] coords, int permutation, double maxDiversion) { + public boolean hasMatchingExitVectors(FragmentGeometry3D geometry, Coordinates[] coords, int permutation, double maxAngleDivergence) { + maxAngleDivergence *= Math.PI / 180; for (int i = 0; i maxDiversion) + if (v1.getAngle(v2) > maxAngleDivergence) return false; } return true; diff --git a/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/BondQueryFeatureDialogBuilder.java b/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/BondQueryFeatureDialogBuilder.java index 6d452b2d..27dd4560 100644 --- a/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/BondQueryFeatureDialogBuilder.java +++ b/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/BondQueryFeatureDialogBuilder.java @@ -291,49 +291,54 @@ private void setQueryFeatures(int bond) { queryFeatures |= (minAtoms << Molecule.cBondQFBridgeMinShift); queryFeatures |= (atomSpan << Molecule.cBondQFBridgeSpanShift); queryFeatures &= ~Molecule.cBondQFBondTypes; + mMol.setBondType(bond, Molecule.cBondTypeSingle); } else { - // priority in order of bond orders - int bondOrder = -1; - if (mCBSingle.isSelected()) { - mMol.setBondType(bond, Molecule.cBondTypeSingle); - bondOrder = 1; - } - else if (mCBDelocalized.isSelected() && !mMol.isDelocalizedBond(bond)) { - mMol.setBondType(bond, Molecule.cBondTypeDelocalized); - bondOrder = 4; - } - else if (mCBDouble.isSelected()) { - mMol.setBondType(bond, Molecule.cBondTypeDouble); - bondOrder = 2; - } - else if (mCBTriple.isSelected()) { - mMol.setBondType(bond, Molecule.cBondTypeTriple); - bondOrder = 3; - } - else if (mCBMetalLigand.isSelected()) { - mMol.setBondType(bond, Molecule.cBondTypeMetalLigand); - bondOrder = 0; - } + // priority in order of bond orders (except 0) + int bondType = -1; + int selectionCount = 0; - if (mCBSingle.isSelected() && bondOrder != 1) - queryFeatures |= Molecule.cBondQFSingle; - if (mCBDouble.isSelected() && bondOrder != 2) - queryFeatures |= Molecule.cBondQFDouble; - if (mCBTriple.isSelected() && bondOrder != 3) - queryFeatures |= Molecule.cBondQFTriple; - if (mCBQuadruple.isSelected() && bondOrder != 4) - queryFeatures |= Molecule.cBondQFQuadruple; - if (mCBQuintuple.isSelected() && bondOrder != 5) - queryFeatures |= Molecule.cBondQFQuintuple; - if (mCBDelocalized.isSelected() && !mMol.isDelocalizedBond(bond) && bondOrder != 4) - queryFeatures |= Molecule.cBondQFDelocalized; - if (mCBMetalLigand.isSelected() && bondOrder != 0) + if (mCBMetalLigand.isSelected()) { + bondType = Molecule.cBondTypeMetalLigand; queryFeatures |= Molecule.cBondQFMetalLigand; - if (mCBMatchFormalOrder.isSelected()) - queryFeatures |= Molecule.cBondQFMatchFormalOrder; - if (mCBMatchStereo.isSelected()) - queryFeatures |= Molecule.cBondQFMatchStereo; + selectionCount++; + } + if (mCBQuintuple.isSelected()) { + bondType = Molecule.cBondTypeQuintuple; + queryFeatures |= Molecule.cBondQFQuintuple; + selectionCount++; + } + if (mCBQuadruple.isSelected()) { + bondType = Molecule.cBondTypeQuadruple; + queryFeatures |= Molecule.cBondQFQuadruple; + selectionCount++; + } + if (mCBTriple.isSelected()) { + bondType = Molecule.cBondTypeTriple; + queryFeatures |= Molecule.cBondQFTriple; + selectionCount++; + } + if (mCBDouble.isSelected()) { + bondType = Molecule.cBondTypeDouble; + queryFeatures |= Molecule.cBondQFDouble; + selectionCount++; + } + if (mCBDelocalized.isSelected()) { + bondType = Molecule.cBondTypeDelocalized; + queryFeatures |= Molecule.cBondQFDelocalized; + selectionCount++; + } + if (mCBSingle.isSelected()) { + bondType = Molecule.cBondTypeSingle; + queryFeatures |= Molecule.cBondQFSingle; + selectionCount++; + } + + if (bondType != -1) + mMol.setBondType(bond, bondType); // set to the lowest bond order of query options + + if (selectionCount < 2) + queryFeatures = 0; if (mComboBoxRing.getSelectedIndex() != 0) { if (mComboBoxRing.getSelectedIndex() == 1) { diff --git a/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/GenericEditorArea.java b/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/GenericEditorArea.java index b7c8bb87..3e81c7d8 100644 --- a/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/GenericEditorArea.java +++ b/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/GenericEditorArea.java @@ -943,15 +943,19 @@ private void eventHappened(GenericMouseEvent e) { return; } + if (e.getButton() == 1) { + mMouseIsDown = false; + updateCursor(); + mouseReleasedButton1(); + } + } + + if (e.getWhat() == GenericMouseEvent.MOUSE_CLICKED) { if (e.getButton() == 1) { if (e.getClickCount() == 2) { handleDoubleClick(e.getX(), e.getY()); return; } - - mMouseIsDown = false; - updateCursor(); - mouseReleasedButton1(); } } diff --git a/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/GenericEditorToolbar.java b/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/GenericEditorToolbar.java index 3c936add..49762e0d 100644 --- a/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/GenericEditorToolbar.java +++ b/src/com/actelion/research/gwt/chemlib/com/actelion/research/gui/editor/GenericEditorToolbar.java @@ -135,8 +135,8 @@ public void setCurrentTool(int tool) { public void paintContent(GenericDrawContext context) { int background = mToolbarCanvas.getBackgroundRGB(); boolean isDark = (ColorHelper.perceivedBrightness(background) < 0.5); - int highlightBackground = isDark ? ColorHelper.brighter(background, 0.6f) : ColorHelper.darker(background, 0.6f); - int selectedBackground = isDark ? ColorHelper.brighter(background, 0.8f) : ColorHelper.darker(background, 0.8f); + int highlightBackground = isDark ? ColorHelper.brighter(background, 0.3f) : ColorHelper.darker(background, 0.6f); + int selectedBackground = isDark ? ColorHelper.brighter(background, 0.5f) : ColorHelper.darker(background, 0.8f); int sw = mImageNormal.getWidth(); int sh = mImageNormal.getHeight();