Class NMRCalculation

java.lang.Object
org.jmol.quantum.NMRCalculation
All Implemented Interfaces:
JmolNMRInterface

public class NMRCalculation extends Object implements JmolNMRInterface
  • Field Details

  • Constructor Details

    • NMRCalculation

      public NMRCalculation()
  • Method Details

    • setViewer

      public JmolNMRInterface setViewer(Viewer vwr)
      Specified by:
      setViewer in interface JmolNMRInterface
    • getQuadrupolarConstant

      public float getQuadrupolarConstant(Tensor efg)
      Description copied from interface: JmolNMRInterface
      Quadrupolar constant, directly proportional to Vzz and dependent on the quadrupolar moment of the isotope considered
      Specified by:
      getQuadrupolarConstant in interface JmolNMRInterface
      Returns:
      float value
    • getInteractionTensorList

      private javajs.util.Lst<Tensor> getInteractionTensorList(String type, javajs.util.BS bsA)
      Returns a list of tensors that are of the specified type and have both atomIndex1 and atomIndex2 in bsA. If there is just one atom specified, then the list is "all tensors involving this atom". We have to use atom sites, because interaction tensors are not duplicated.
      Parameters:
      type -
      bsA -
      Returns:
      list of Tensors
    • getAtomSiteBS

      private javajs.util.BS getAtomSiteBS(javajs.util.BS bsA)
      Interaction tensors are not repeated for every possible combination. They are just for the base atom set. These are identified as a.atomIndex == models[b.modelIndex].firstAtomIndex + b.atomSite - 1
      Parameters:
      bsA -
      Returns:
      new bs in terms of atom sites
    • getUniqueTensorSet

      public javajs.util.BS getUniqueTensorSet(javajs.util.BS bsAtoms)
      Description copied from interface: JmolNMRInterface
      An attempt to find unique atoms using tensors.
      Specified by:
      getUniqueTensorSet in interface JmolNMRInterface
      Returns:
      bitset of atoms
    • getJCouplingHz

      public float getJCouplingHz(Atom a1, Atom a2, String type, Tensor isc)
    • getIsoOrAnisoHz

      public float getIsoOrAnisoHz(boolean isIso, Atom a1, Atom a2, String units, Tensor isc)
      Description copied from interface: JmolNMRInterface
      If t is null, then a1, a2, and type are used to find the appropriate tensor.
      Specified by:
      getIsoOrAnisoHz in interface JmolNMRInterface
      Returns:
      0 if not found
    • getISCtype

      private String getISCtype(Atom a1, String type)
    • getDipolarConstantHz

      public float getDipolarConstantHz(Atom a1, Atom a2)
      Specified by:
      getDipolarConstantHz in interface JmolNMRInterface
      Returns:
      desired constant
    • getDipolarCouplingHz

      public float getDipolarCouplingHz(Atom a1, Atom a2, javajs.util.V3 vField)
      Specified by:
      getDipolarCouplingHz in interface JmolNMRInterface
      Returns:
      projected value
    • getIsotopeData

      private double getIsotopeData(Atom a, int iType)
      Get magnetogyricRatio (gamma/10^7 rad s^-1 T^-1) and quadrupoleMoment (Q/10^-2 fm^2) for a given isotope or for the default isotope of an element.
      Parameters:
      a -
      iType -
      Returns:
      g or Q
    • getData

      private void getData()
      Creates the data set necessary for doing NMR calculations. Values are retrievable using getProperty "nmrInfo" "Xx"; each entry is float[+/-isotopeNumber, g, Q], where [0] < 0 for the default value.
    • getInfo

      public Object getInfo(String what)
      Specified by:
      getInfo in interface JmolNMRInterface
      Parameters:
      what - "C" or "14C" or "all"
      Returns:
      list of double[isotopeNumber,g,Q] if no isotope number is given, or a single double[] if it does.
    • getChemicalShift

      public float getChemicalShift(Atom atom)
      Description copied from interface: JmolNMRInterface
      If shift reference has not been set, it defaults to 0 and just displays the negative of magnetic shielding
      Specified by:
      getChemicalShift in interface JmolNMRInterface
      Returns:
      value
    • getMagneticShielding

      public float getMagneticShielding(Atom atom)
      Specified by:
      getMagneticShielding in interface JmolNMRInterface
    • getState

      public boolean getState(javajs.util.SB sb)
      Specified by:
      getState in interface JmolNMRInterface
    • setChemicalShiftReference

      public boolean setChemicalShiftReference(String element, float value)
      Specified by:
      setChemicalShiftReference in interface JmolNMRInterface
    • getTensorInfo

      public javajs.util.Lst<Object> getTensorInfo(String tensorType, String infoType, javajs.util.BS bs)
      Specified by:
      getTensorInfo in interface JmolNMRInterface
    • getMinDistances

      public Map<String,Integer> getMinDistances(MeasurementData md)
      Specified by:
      getMinDistances in interface JmolNMRInterface
    • calcJKarplus

      public static double calcJKarplus(double theta)
    • getInitialJValue

      private static double getInitialJValue(int nNonH, double theta)
    • getIncrementalJValue

      private static double getIncrementalJValue(int nNonH, String element, javajs.util.V3 sA_cA, javajs.util.V3 v21, javajs.util.V3 v23, double theta, int f)
    • getSubSign

      private static int getSubSign(javajs.util.V3 sA_cA, javajs.util.V3 v21, javajs.util.V3 v23, int f)
      Look for sign of (v23 x v21).dot.(sA_cA). But note that for the second carbon, we must reverse this.
      Parameters:
      sA_cA - C to sub
      v21 - C to H
      v23 - C to other C
      f - 1 for carbon A; -1 for carbon B
      Returns:
      f or -f (+1 or -1)
    • calc3JHHOnly

      private static double calc3JHHOnly(String[][] subElements, javajs.util.V3[][] subVectors, javajs.util.V3 v21, javajs.util.V3 v34, javajs.util.V3 v23, double theta, boolean is23Double)
      Parameters:
      subElements - int[2][3] with element names
      subVectors - V3[2][4] with vectors TO these substituents from their respective centers
      v21 - vector from cA to hA
      v34 - vector from cB to hB
      v23 - vector from cA to cB
      theta - dihedral angle hA-cA-cB-hB
      is23Double -
      Returns:
      estimated coupling constant
    • calc3JCH

      public static double calc3JCH(String CHequation, double theta, boolean is23Double)
      Parameters:
      CHequation - 'was' Simple equation for 3JCH, from Wasylishen and Schaefer Can J Chem (1973) 51 961 used in Kozerski et al. J Chem Soc Perkin 2, (1997) 1811 'tva' Tvaroska and Taravel Adv. Carbohydrate Chem. Biochem. (1995) 51, 15-61 'ayd' Aydin and Guether Mag. Res. Chem. (1990) 28, 448-457
      theta - dihedral
      is23Double -
      Returns:
      3JCH prediction
    • calcNOE

      public static double[] calcNOE(Viewer viewer, Atom atom1, Atom atom2)
    • calc2or3JorNOE

      public static double[] calc2or3JorNOE(Viewer viewer, Atom[] atoms, String CHEquation, int mode)
      Calculate a 2-bond (geminal) or 3-bond (vicinal) coupling constant or an NOE;
      Parameters:
      viewer -
      atoms - required Atom[4]; can be just two atoms, then in atom[0] and atom[4]
      CHEquation - 'none' or 'was' or 'tva' or 'ayd'
      mode -
      Returns:
      [theta, jvalue, atom2.i, atom3.i] for 3JHH; [theta, jvalue, center.i] for 2JHH; [distance, noe] for NOE
    • getCalcType

      public static int getCalcType(Atom[] atoms, String[] elementsToFill, int mode)
    • calc2JHH

      private static double[] calc2JHH(Atom h1, Atom c, Atom h2)
    • calcNOEImpl

      private static double[] calcNOEImpl(Viewer viewer, Atom atom1, Atom atom2)
    • getNOEorJHH

      public double[] getNOEorJHH(Atom[] atoms, int mode)
      Specified by:
      getNOEorJHH in interface JmolNMRInterface