Class JniInchiWrapper

java.lang.Object
net.sf.jniinchi.JniInchiWrapper

public class JniInchiWrapper extends Object

JNI Wrapper for International Chemical Identifier (InChI) C++ library.

This class is not intended to be used directly, but should be accessed through subclasses that read data formats and load them into the InChI data structures.

Subclasses should load data through the addAtom, addBond and addParity methods. Once the molecule is fully loaded then the generateInchi method should be called. Ideally this should all take place within the subclass's constructor. The public get methods will all return null until this has happened.

See inchi_api.h.

  • Field Details

    • ID

      private static final String ID
      See Also:
    • VERSION

      private static final String VERSION
      See Also:
    • MAX_LOCK_TIMEOUT

      private static final int MAX_LOCK_TIMEOUT
      Maximum time to wait for a lock (in seconds).
      See Also:
    • IS_WINDOWS

      private static final boolean IS_WINDOWS
      Flag indicating windows or linux.
    • flagChar

      static final String flagChar
      Switch character for passing options. / in windows, - on other systems.
    • libraryLoaded

      private static boolean libraryLoaded
      Records whether native library has been loaded by system.
    • inchiWrapper

      private static JniInchiWrapper inchiWrapper
    • lock

      private static final Lock lock
  • Constructor Details

  • Method Details

    • loadLibrary

      public static void loadLibrary() throws LoadNativeLibraryException
      Loads native library.
      Throws:
      JniInchiException - Library failed to load
      LoadNativeLibraryException
    • checkNativeCodeVersion

      private static void checkNativeCodeVersion()
      Checks the expected native code version has been loaded.
      Throws:
      UnsatisfiedLinkError
    • getWrapper

      private static JniInchiWrapper getWrapper() throws LoadNativeLibraryException
      Throws:
      LoadNativeLibraryException
    • checkOptions

      protected static String checkOptions(List<INCHI_OPTION> ops) throws JniInchiException
      Checks and canonicalises options.
      Parameters:
      ops - List of INCHI_OPTION
      Throws:
      JniInchiException
    • checkOptions

      protected static String checkOptions(String ops) throws JniInchiException
      Checks and canonicalises options.
      Parameters:
      ops - Space delimited string of options to pass to InChI library. Each option may optionally be preceded by a command line switch (/ or -).
      Throws:
      JniInchiException
    • getInchi

      public static JniInchiOutput getInchi(JniInchiInput input) throws JniInchiException

      Generates the InChI for a chemical structure.

      If no InChI creation/stereo modification options are specified then a standard InChI is produced, otherwise the generated InChI will be a non-standard one.

      Valid options:

        Structure perception (compatible with stdInChI):
          /NEWPSOFF   /DoNotAddH   /SNon
        Stereo interpretation (lead to generation of non-standard InChI)
          /SRel /SRac /SUCF /ChiralFlagON /ChiralFlagOFF
        InChI creation options (lead to generation of non-standard InChI)
          /SUU /SLUUD   /FixedH  /RecMet  /KET /15T
       

      Other options:

        /AuxNone    Omit auxiliary information (default: Include)
        /Wnumber    Set time-out per structure in seconds; W0 means unlimited
                    In InChI library the default value is unlimited
        /OutputSDF  Output SDfile instead of InChI
        /WarnOnEmptyStructure
                    Warn and produce empty InChI for empty structure
        /SaveOpt    Save custom InChI creation options (non-standard InChI)
       
      Parameters:
      input -
      Returns:
      Throws:
      JniInchiException
    • getStdInchi

      public static JniInchiOutput getStdInchi(JniInchiInput input) throws JniInchiException

      Calculates the Standard InChI string for a chemical structure.

      The only valid structure perception options are NEWPSOFF/DoNotAddH/SNon. In any other structural perception options are specified then the calculation will fail.

      Parameters:
      input -
      Returns:
      Throws:
      JniInchiException
    • getInchiFromInchi

      public static JniInchiOutput getInchiFromInchi(JniInchiInputInchi input) throws JniInchiException

      Converts an InChI into an InChI for validation purposes (the same as the -InChI2InChI option).

      This method may also be used to filter out specific layers. For instance, /Snon would remove the stereochemical layer; Omitting /FixedH and/or /RecMet would remove Fixed-H or Reconnected layers. In order to keep all InChI layers use options string "/FixedH /RecMet"; option /InChI2InChI is not needed.

      Parameters:
      input -
      Returns:
      Throws:
      JniInchiException
    • getStructureFromInchi

      public static JniInchiOutputStructure getStructureFromInchi(JniInchiInputInchi input) throws JniInchiException
      Generated 0D structure from an InChI string.
      Parameters:
      input -
      Returns:
      Throws:
      JniInchiException
    • getInchiKey

      public static JniInchiOutputKey getInchiKey(String inchi) throws JniInchiException
      Calculates the InChIKey for an InChI string.
      Parameters:
      inchi - source InChI string
      Returns:
      InChIKey output
      Throws:
      JniInchiException
    • checkInchiKey

      public static INCHI_KEY_STATUS checkInchiKey(String key) throws JniInchiException
      Checks whether a string represents valid InChIKey.
      Parameters:
      key -
      Returns:
      Throws:
      JniInchiException
    • checkInchi

      public static INCHI_STATUS checkInchi(String inchi, boolean strict) throws JniInchiException

      Checks if the string represents valid InChI/standard InChI.

      Parameters:
      inchi - source InChI
      strict - if false, just briefly check for proper layout (prefix, version, etc.) The result may not be strict. If true, try to perform InChI2InChI conversion and returns success if a resulting InChI string exactly match source. The result may be 'false alarm' due to imperfectness of
      Throws:
      JniInchiException
    • getInputFromAuxInfo

      public static JniInchiInputData getInputFromAuxInfo(String auxInfo) throws JniInchiException
      Throws:
      JniInchiException
    • getLock

      private static void getLock() throws JniInchiException
      Throws:
      JniInchiException
    • LibInchiGetVersion

      protected static String LibInchiGetVersion()
    • init

      private static void init()
    • GetINCHI

      private JniInchiOutput GetINCHI(JniInchiInput input)
    • GetStdINCHI

      private JniInchiOutput GetStdINCHI(JniInchiInput input)
    • GetINCHIfromINCHI

      private JniInchiOutput GetINCHIfromINCHI(String inchi, String options)
    • GetStructFromINCHI

      private JniInchiOutputStructure GetStructFromINCHI(String inchi, String options)
    • GetINCHIKeyFromINCHI

      private JniInchiOutputKey GetINCHIKeyFromINCHI(String inchi)
    • GetStdINCHIKeyFromStdINCHI

      private JniInchiOutputKey GetStdINCHIKeyFromStdINCHI(String inchi)
    • CheckINCHIKey

      private int CheckINCHIKey(String key)
    • CheckINCHI

      private int CheckINCHI(String inchi, boolean strict)
    • GetINCHIInputFromAuxInfo

      private JniInchiInputData GetINCHIInputFromAuxInfo(String auxInfo, boolean bDoNotAddH, boolean bDiffUnkUndfStereo)