public static Atom[] findLinkage(final Group group1, final Group group2,
			String nameOfAtomOnGroup1, String nameOfAtomOnGroup2,
			double bondLengthTolerance) {

		Atom[] ret = new Atom[2];

		ret[0] = group1.getAtom(nameOfAtomOnGroup1);
		ret[1] = group2.getAtom(nameOfAtomOnGroup2);

		if (ret[0]==null || ret[1]==null) {
			return null;
		}


		Atom a1 = ret[0];
		Atom a2 = ret[1];

		boolean hasBond =  a1.hasBond(a2);

		if ( hasBond ) {

			return ret;
		}

		// is it a metal ?

		if ( a1.getElement().isMetal() || a2.getElement().isMetal()){

			MetalBondDistance defined = getMetalDistanceCutoff(a1.getElement().name(),a2.getElement().name());

			if ( defined != null) {

				if (hasMetalBond(a1, a2, defined))
					return ret;
				else
					return null;
			}

		}

			// not a metal

			double distance = Calc.getDistance(a1, a2);

			float radiusOfAtom1 = ret[0].getElement().getCovalentRadius();
			float radiusOfAtom2 = ret[1].getElement().getCovalentRadius();

			if (Math.abs(distance - radiusOfAtom1 - radiusOfAtom2)
					> bondLengthTolerance) {
				return null;
			}


		return ret;
	}
public static Atom [ ] findLinkage ( final Group group1 , final Group group2 , String nameOfAtomOnGroup1 , String nameOfAtomOnGroup2 , double bondLengthTolerance ) { Atom [ ] ret = new Atom [ 2 ] ; ret [ 0 ] = group1 . getAtom ( nameOfAtomOnGroup1 ) ; ret [ 1 ] = group2 . getAtom ( nameOfAtomOnGroup2 ) ; if ( ret [ 0 ] == null || ret [ 1 ] == null ) { return null ; } Atom a1 = ret [ 0 ] ; Atom a2 = ret [ 1 ] ; boolean hasBond = a1 . hasBond ( a2 ) ; if ( hasBond ) { return ret ; } if ( a1 . getElement ( ) . isMetal ( ) || a2 . getElement ( ) . isMetal ( ) ) { MetalBondDistance defined = getMetalDistanceCutoff ( a1 . getElement ( ) . name ( ) , a2 . getElement ( ) . name ( ) ) ; if ( defined != null ) { if ( hasMetalBond ( a1 , a2 , defined ) ) return ret ; else return null ; } } double distance = Calc . getDistance ( a1 , a2 ) ; float radiusOfAtom1 = ret [ 0 ] . getElement ( ) . getCovalentRadius ( ) ; float radiusOfAtom2 = ret [ 1 ] . getElement ( ) . getCovalentRadius ( ) ; if ( Math . abs ( distance - radiusOfAtom1 - radiusOfAtom2 ) > bondLengthTolerance ) { return null ; } return ret ; }
Find a linkage between two groups within tolerance of bond length.
@param group1 the first {@link Group}.
@param group2 the second {@link Group}.
@param nameOfAtomOnGroup1 atom name of the first group.
@param nameOfAtomOnGroup2 atom name of the second group.
@param bondLengthTolerance bond length error tolerance.
@return an array of two Atoms that form bond between each other
if found; null, otherwise.