All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openmolecules.chem.conf.gen.TorsionSetStrategyAdaptiveRandom Maven / Gradle / Ivy

There is a newer version: 2024.11.2
Show newest version
/*
 * Copyright 2013-2020 Thomas Sander, openmolecules.org
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 3. Neither the name of the copyright holder nor the names of its contributors
 *    may be used to endorse or promote products derived from this software without
 *    specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
 * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * @author Thomas Sander
 */

package org.openmolecules.chem.conf.gen;

import java.util.Arrays;

public class TorsionSetStrategyAdaptiveRandom extends TorsionSetStrategyRandom {
	private static final int MAX_TRIES_FOR_NEW = 64;
	private boolean mStartWithMostProbable;

	/**
	 * This torsion set strategy produces random sets of torsion indices until a torsion set
	 * collides. Then it updates individual torsion indices of those rotatable bonds
	 * that connect colliding fragments.
	 * Torsion indices are picked either by pure random or with a twisted likelyhood
	 * towards towards those angles, that show higher frequencies in the CSD.
	 * @param conformerGenerator
	 * @param preferLikelyTorsions if set then more frequent torsions are picked with higher probability
	 * @param startWithMostProbable if true then the first torsion set returned contains for every bond the most frequent torsion
	 * @param seed
	 * @return
	 */
	public TorsionSetStrategyAdaptiveRandom(ConformerGenerator conformerGenerator, boolean preferLikelyTorsions, boolean startWithMostProbable, long seed) {
		super(conformerGenerator, preferLikelyTorsions, seed);
		mStartWithMostProbable = startWithMostProbable;
		}

	@Override
	public TorsionSet createTorsionSet(TorsionSet previousTorsionSet) {
		if (previousTorsionSet == null) {
			if (mStartWithMostProbable)
				return createTorsionSet(new int[mRotatableBond.length], new int[mRigidFragment.length]);
			else
				return super.createTorsionSet(null);
			}

		if (previousTorsionSet.getCollisionStrainSum() == 0.0)
			return super.createTorsionSet(previousTorsionSet);

		double[] collisionIntensitySum = getBondAndFragmentCollisionIntensities(previousTorsionSet);
		int[] collidingTorsionIndex = previousTorsionSet.getTorsionIndexes();
		int[] collidingConformerIndex = previousTorsionSet.getConformerIndexes();
		boolean[] indexTried = new boolean[collisionIntensitySum.length];
		for (int count=0; count




© 2015 - 2024 Weber Informatics LLC | Privacy Policy