Skip to content

Commit

Permalink
Merge tag 'openchemlib-2024.2.2'
Browse files Browse the repository at this point in the history
[maven-release-plugin]  copy for tag openchemlib-2024.2.2
  • Loading branch information
targos committed Feb 22, 2024
2 parents b3b2157 + 401299f commit 8b4a0c3
Show file tree
Hide file tree
Showing 7 changed files with 221 additions and 34 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
Please follow the naming scheme YEAR.MONTH.RELEASE_NO_OF_MONTH
(eg. 2016.4.1 for second release in Apr 2016)
-->
<version>2024.2.1</version>
<version>2024.2.2</version>

<name>OpenChemLib</name>
<description>Open Source Chemistry Library</description>
Expand Down Expand Up @@ -209,7 +209,7 @@
<connection>scm:git:[email protected]:Actelion/openchemlib.git</connection>
<developerConnection>scm:git:[email protected]:Actelion/openchemlib.git</developerConnection>
<url>https://github.com/Actelion/openchemlib</url>
<tag>openchemlib-2024.2.1</tag>
<tag>openchemlib-2024.2.2</tag>
</scm>

<distributionManagement>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
*
*/

@Deprecated
public class SDFileMolecule extends StereoMolecule implements java.io.Serializable
{
static final long serialVersionUID = 0x2003CAFE;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,10 +224,10 @@ public List<ClusterNode> getClusterCenter(int maxDistance){
}

/**
* The distnce histograms are stored in a single array.
* The distance histograms are stored in a single array.
* @param indexAt1
* @param indexAt2
* @param arrHist
* @param arrHist a deep copy is taken.
*/
public void setDistHist(int indexAt1, int indexAt2, byte [] arrHist) {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.actelion.research.chem.descriptor.flexophore;

import com.actelion.research.chem.Molecule3D;
import com.actelion.research.chem.StereoMolecule;
import com.actelion.research.chem.descriptor.flexophore.redgraph.SubGraphIndices;

import java.util.ArrayList;
import java.util.List;

/*
Created by Modest von Korff
16/02/2024
*/
public class PPNodeVizHelper {

public static PPNodeViz createWithoutCoordinates(SubGraphIndices sgi, int indexPPPoint, Molecule3D mol){
int [] arrIndexAtomFrag = sgi.getAtomIndices();
PPNodeViz ppNodeViz = new PPNodeViz();
ppNodeViz.setIndex(indexPPPoint);
for (int index : arrIndexAtomFrag) {
int interactionType = mol.getInteractionAtomType(index);
ppNodeViz.add(interactionType);
ppNodeViz.addIndexOriginalAtom(index);
}
return ppNodeViz;
}
public static List<PPNodeViz> createWithoutCoordinates(List<SubGraphIndices> liSubGraphIndices, Molecule3D mol){
List<PPNodeViz> liPPNodeViz = new ArrayList<>();
for (int i = 0; i < liSubGraphIndices.size(); i++) {
SubGraphIndices sgi = liSubGraphIndices.get(i);
PPNodeViz ppNodeViz = createWithoutCoordinates(sgi, i, mol);
liPPNodeViz.add(ppNodeViz);
}
return liPPNodeViz;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -791,7 +791,7 @@ public void setQuery(IMolDistHist iMolDistHistQuery) {
resetSimilarityArrays = true;

if(!checkAtomTypes(mdhvQuery)) {
throw new RuntimeException("Base contains Invalid atom type for similarity calculation " + mdhvQuery.getMolDistHist().toString() + ".");
throw new RuntimeException("Base contains Invalid atom type for similarity calculation " + mdhvQuery.getMolDistHist().toStringNodes() + ".");
}

deltaNanoQueryBlur += System.nanoTime()-t0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,7 @@
import org.openmolecules.chem.conf.gen.ConformerGenerator;
import org.openmolecules.chem.conf.gen.RigidFragmentCache;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.*;

/**
* CreatorMolDistHistViz
Expand All @@ -61,7 +58,9 @@ public class CreatorMolDistHistViz {
public static final long SEED = 123456789;

// Maximum number of tries to generate conformers with the torsion rule based conformer generator from Thomas Sander
private static final int MAX_NUM_TRIES = 10000;
private static final int MAX_TRIES_CONFORMERS = 10;
private static final int MAX_INITIALIZATION_STAGE = 5;
private static final int MAX_TORSION_SETS = 100000;

private static final int MAX_NUM_ATOMS = 1000;

Expand All @@ -77,13 +76,17 @@ public class CreatorMolDistHistViz {

private ConformerGenerator conformerGenerator;

private int initializationStage;

private int conformationMode;

private long seed;

// for debugging
private boolean onlyOneConformer;

private Exception recentException = null;

private int [] arrIndexAtomNewTmp;

public CreatorMolDistHistViz() {
Expand All @@ -99,6 +102,8 @@ public CreatorMolDistHistViz() {

arrIndexAtomNewTmp = new int[MAX_NUM_ATOMS];

initializationStage = 0;

// System.out.println("CreatorCompleteGraph conformationMode " + conformationMode);

}
Expand Down Expand Up @@ -133,10 +138,105 @@ public MolDistHistViz create(StereoMolecule molOrig) throws Exception {
return mdhv;
}

public ConformerGenerator getConformerGenerator(){
return conformerGenerator;
}

public void resetInitializationStage(){
initializationStage=0;
}
public void incrementInitializationStage(){
initializationStage++;
if(initializationStage>MAX_INITIALIZATION_STAGE){
throw new RuntimeException("Maximum initialization stage exceeded!");
}
}

public boolean canIncrementInitializationStage(){
if(initializationStage<MAX_INITIALIZATION_STAGE){
return true;
}
return false;

}

/**
* If initializing with new molecule call resetInitializationStage() before!
* @param molInPlace
* @return
*/
public boolean initializeConformers(Molecule3D molInPlace){

boolean successfulInitialization = false;

Exception exception = null;

while (!successfulInitialization) {

try {
if (initializationStage == 0) { // default
successfulInitialization = conformerGenerator.initializeConformers(molInPlace, ConformerGenerator.STRATEGY_LIKELY_RANDOM, MAX_TORSION_SETS, false);
} else if (initializationStage == 1) {
conformerGenerator = new ConformerGenerator();
successfulInitialization = conformerGenerator.initializeConformers(molInPlace, ConformerGenerator.STRATEGY_LIKELY_RANDOM, MAX_TORSION_SETS, true);
} else if (initializationStage == 2) {
RigidFragmentCache.getDefaultInstance().clear();
conformerGenerator = new ConformerGenerator();
successfulInitialization = conformerGenerator.initializeConformers(molInPlace, ConformerGenerator.STRATEGY_LIKELY_RANDOM, MAX_TORSION_SETS, true);
} else if (initializationStage == 3) {
RigidFragmentCache.getDefaultInstance().clear();
conformerGenerator = new ConformerGenerator();
successfulInitialization = conformerGenerator.initializeConformers(molInPlace, ConformerGenerator.STRATEGY_LIKELY_RANDOM, MAX_TORSION_SETS, true);
} else if (initializationStage == 4) {
RigidFragmentCache.getDefaultInstance().clear();
conformerGenerator = new ConformerGenerator();
successfulInitialization = conformerGenerator.initializeConformers(molInPlace, ConformerGenerator.STRATEGY_LIKELY_SYSTEMATIC, MAX_TORSION_SETS, true);
} else if (initializationStage == 5) {
RigidFragmentCache.getDefaultInstance().clear();
conformerGenerator = new ConformerGenerator();
successfulInitialization = conformerGenerator.initializeConformers(molInPlace, ConformerGenerator.STRATEGY_ADAPTIVE_RANDOM, MAX_TORSION_SETS, true);
} else if (initializationStage > MAX_INITIALIZATION_STAGE) {
break;
}
} catch (Exception e) {
exception = e;
successfulInitialization=false;
}

if (!successfulInitialization) {
if(canIncrementInitializationStage())
incrementInitializationStage();
else {
successfulInitialization = false;
break;
}
}

// if(initializationStage>0)
// System.out.println("CreatorMolDistHistViz initialization stage " + initializationStage);

public void initializeConformersAndSetAtTypes(Molecule3D molInPlace){
conformerGenerator.initializeConformers(molInPlace, ConformerGenerator.STRATEGY_LIKELY_RANDOM, MAX_NUM_TRIES, false);
}

if(!successfulInitialization && exception!=null){
recentException = exception;
}

return successfulInitialization;
}

public Exception getRecentException() {
return recentException;
}

/**
* If initializing with new molecule call resetInitializationStage() before!
* @param molInPlace
* @return
*/
public boolean initializeConformersAndSetAtTypes(Molecule3D molInPlace){
boolean successfulInitialization = initializeConformers(molInPlace);
InteractionAtomTypeCalculator.setInteractionTypes(molInPlace);
return successfulInitialization;
}

/**
Expand All @@ -149,20 +249,18 @@ public void initializeConformersAndSetAtTypes(Molecule3D molInPlace){
public MolDistHistViz createMultipleConformations(StereoMolecule molOrig, int nConformations) throws Exception {

// int nConformations = DescriptorHandlerFlexophore.NUM_CONFORMATIONS;

resetInitializationStage();
StereoMolecule molStand = molOrig.getCompactCopy();

MoleculeStandardizer.standardize(molStand, MoleculeStandardizer.MODE_GET_PARENT);

molStand.ensureHelperArrays(Molecule.cHelperRings);

Molecule3D molInPlace = new Molecule3D(molStand);

molInPlace.ensureHelperArrays(Molecule.cHelperRings);

conformerGenerator.initializeConformers(molInPlace, ConformerGenerator.STRATEGY_LIKELY_RANDOM, MAX_NUM_TRIES, false);

InteractionAtomTypeCalculator.setInteractionTypes(molInPlace);
boolean successfulInitialization = initializeConformersAndSetAtTypes(molInPlace);

if(!successfulInitialization){
return null;
}

//
// Handle carbon atoms connected to hetero atoms
Expand All @@ -174,8 +272,6 @@ public MolDistHistViz createMultipleConformations(StereoMolecule molOrig, int nC
injectNewSeed();
}

int nAtoms = molInPlace.getAtoms();

List<MultCoordFragIndex> liMultCoordFragIndex = new ArrayList<>();
for (SubGraphIndices subGraphIndices : liSubGraphIndices) {
liMultCoordFragIndex.add(new MultCoordFragIndex(subGraphIndices.getAtomIndices()));
Expand All @@ -191,18 +287,12 @@ public MolDistHistViz createMultipleConformations(StereoMolecule molOrig, int nC

if(DEBUG) {
System.out.println("CreatorCompleteGraph: only one conformer generated.");

System.out.println("Seed " + seed);

System.out.println("Potential conformer count " + nPotentialConformers);

Canonizer can = new Canonizer(molInPlace);

System.out.println(can.getIDCode());
}

onlyOneConformer = true;

}

MolDistHistViz mdhv = create(liMultCoordFragIndex, molViz);
Expand Down Expand Up @@ -274,7 +364,7 @@ public Molecule3D createConformations(Molecule3D molInPlace, List<MultCoordFragI
int ccConformationsGenerated = 0;
Molecule3D molViz = null;
for (int i = 0; i < nConformations; i++) {
boolean conformerGenerated = generateConformerAndSetCoordinates(conformerGenerator, nAtoms, molInPlace);
boolean conformerGenerated = generateConformerAndSetCoordinates(nAtoms, molInPlace);

if(!conformerGenerated){
break;
Expand Down Expand Up @@ -367,6 +457,43 @@ public static MolDistHistViz create(List<MultCoordFragIndex> liMultCoordFragInde

return molDistHistViz;

}
public static MolDistHistViz createWithoutCoordinates(List<SubGraphIndices> liMultCoordFragIndex, Molecule3D molecule3D){

MolDistHistViz molDistHistViz = new MolDistHistViz(liMultCoordFragIndex.size(), molecule3D);

List<PPNodeViz> liPPNodeViz = new ArrayList<>();
for (int i = 0; i < liMultCoordFragIndex.size(); i++) {
SubGraphIndices sgi = liMultCoordFragIndex.get(i);

int [] arrIndexAtomFrag = sgi.getAtomIndices();

PPNodeViz ppNodeViz = new PPNodeViz();
ppNodeViz.setIndex(i);

for (int index : arrIndexAtomFrag) {
int interactionType = molecule3D.getInteractionAtomType(index);
ppNodeViz.add(interactionType);
ppNodeViz.addIndexOriginalAtom(index);
}
liPPNodeViz.add(ppNodeViz);
}

molDistHistViz.set(liPPNodeViz);

byte [] arrHistPercent = new byte [ConstantsFlexophoreGenerator.BINS_HISTOGRAM];
Arrays.fill(arrHistPercent, (byte)1);

for (int i = 0; i < liMultCoordFragIndex.size(); i++) {
for (int j = i+1; j < liMultCoordFragIndex.size(); j++) {
molDistHistViz.setDistHist(i,j,arrHistPercent);
}
}

molDistHistViz.realize();

return molDistHistViz;

}

private static Molecule3D createPharmacophorePoints(Molecule3D molecule3D, List<MultCoordFragIndex> liMultCoordFragIndex) {
Expand Down Expand Up @@ -464,17 +591,35 @@ public MolDistHistViz createFromGivenConformation(StereoMolecule molOrig) {
}

/**
* 08.03.2017 Method set to public for debugging purposes.
* @param conformerGenerator
* @param nAtoms
* @param molInPlace
* @return
*/
public static boolean generateConformerAndSetCoordinates(ConformerGenerator conformerGenerator, int nAtoms, Molecule3D molInPlace){
public boolean generateConformerAndSetCoordinates(int nAtoms, Molecule3D molInPlace){

boolean nextConformerAvailable = false;

Conformer conformer = conformerGenerator.getNextConformer();
while (conformer==null) {
int ccTries=0;
while (conformer == null) {
conformer = conformerGenerator.getNextConformer();
if (conformer == null) {
injectNewSeed();
}
ccTries++;
if (ccTries == MAX_TRIES_CONFORMERS) {
break;
}
}

if(conformer==null && canIncrementInitializationStage()) {
incrementInitializationStage();
initializeConformers(molInPlace);
} else {
break;
}
}

if(conformer != null){

Expand Down
Loading

0 comments on commit 8b4a0c3

Please sign in to comment.