api/c/indigo/indigo.h (512 lines of code) (raw):
/****************************************************************************
* Copyright (C) from 2009 to Present EPAM Systems.
*
* This file is part of Indigo toolkit.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
#ifndef __indigo__
#define __indigo__
#include <stdint.h>
#if defined(_WIN32) && !defined(__MINGW32__)
#define qword unsigned __int64
#else
#define qword unsigned long long
#endif
#ifndef EXPORT_SYMBOL
#ifdef _WIN32
#define EXPORT_SYMBOL __declspec(dllexport)
#elif (defined __GNUC__ || defined __APPLE__)
#define EXPORT_SYMBOL __attribute__((visibility("default")))
#else
#define EXPORT_SYMBOL
#endif
#endif
#ifndef CEXPORT
#ifndef __cplusplus
#define CEXPORT EXPORT_SYMBOL
#else
#define CEXPORT extern "C" EXPORT_SYMBOL
#endif
#endif
#ifndef __byte_typedef__
#define __byte_typedef__
typedef unsigned char byte;
#endif
/* All integer and float functions return -1 on error. */
/* All string functions return zero pointer on error. */
/* Almost all string functions return the same pointer on success;
you should not free() it, but rather strdup() it if you want to keep it. */
/* System */
CEXPORT const char* indigoVersion();
CEXPORT const char* indigoVersionInfo();
// Allocate a new session. Each session has its own
// set of objects created and options set up.
CEXPORT qword indigoAllocSessionId();
// Switch to another session. The session, if was not allocated
// previously, is allocated automatically and initialized with
// empty set of objects and default options.
CEXPORT void indigoSetSessionId(qword id);
// Release session. The memory used by the released session
// is not freed, but the number will be reused on
// further allocations.
CEXPORT void indigoReleaseSessionId(qword id);
// Get the last error message
CEXPORT const char* indigoGetLastError(void);
typedef void (*INDIGO_ERROR_HANDLER)(const char* message, void* context);
CEXPORT void indigoSetErrorHandler(INDIGO_ERROR_HANDLER handler, void* context);
// Free an object
CEXPORT int indigoFree(int handle);
// Clone an object
CEXPORT int indigoClone(int object);
// Count object currently allocated
CEXPORT int indigoCountReferences(void);
// Deallocate all the objects in the current session
CEXPORT int indigoFreeAllObjects();
/* Options */
CEXPORT int indigoSetOption(const char* name, const char* value);
CEXPORT int indigoSetOptionInt(const char* name, int value);
CEXPORT int indigoSetOptionBool(const char* name, int value);
CEXPORT int indigoSetOptionFloat(const char* name, float value);
CEXPORT int indigoSetOptionColor(const char* name, float r, float g, float b);
CEXPORT int indigoSetOptionXY(const char* name, int x, int y);
CEXPORT int indigoResetOptions();
CEXPORT const char* indigoGetOption(const char* name);
CEXPORT int indigoGetOptionInt(const char* name, int* value);
CEXPORT int indigoGetOptionBool(const char* name, int* value);
CEXPORT int indigoGetOptionFloat(const char* name, float* value);
CEXPORT int indigoGetOptionColor(const char* name, float* r, float* g, float* b);
CEXPORT int indigoGetOptionXY(const char* name, int* x, int* y);
CEXPORT const char* indigoGetOptionType(const char* name);
/* Basic input-output */
// indigoRead*** return a new reader object.
// indigoLoad*** return a new reader object which already
// contains all the data and does not depend on the given
// string/buffer. All these functions are low-level and
// rarely needed to anyone.
CEXPORT int indigoReadFile(const char* filename);
CEXPORT int indigoReadString(const char* str);
CEXPORT int indigoLoadString(const char* str);
CEXPORT int indigoReadBuffer(const char* buffer, int size);
CEXPORT int indigoLoadBuffer(const char* buffer, int size);
// indigoWrite*** return a new writer object.
CEXPORT int indigoWriteFile(const char* filename);
CEXPORT int indigoWriteBuffer(void);
// Closes the file output stream but does not delete the object
CEXPORT int indigoClose(int output);
/* Iterators */
/* Iterators work in the following way:
*
* int item, iter = indigoIterate***(...)
*
* if (iter == -1)
* {
* fprintf(stderr, "%s", indigoGetLastError());
* return;
* }
*
* while (item = indigoNext(iter))
* {
* if (item == -1)
* {
* fprintf(stderr, "%s", indigoGetLastError());
* break;
* }
*
* printf("on item #%d\n", indigoIndex(item));
*
* // do something with item
*
* indigoFree(item);
* }
* indigoFree(iter);
*/
// Obtains the next element, returns zero if there is no next element
CEXPORT int indigoNext(int iter);
// Does not obtain the next element, just tells if there is one
CEXPORT int indigoHasNext(int iter);
// Returns the index of the element
CEXPORT int indigoIndex(int item);
// Removes the item from its container (usually a molecule)
CEXPORT int indigoRemove(int item);
/* Molecules, query molecules, SMARTS */
CEXPORT const char* indigoGetOriginalFormat(int item);
CEXPORT int indigoCreateMolecule(void);
CEXPORT int indigoCreateQueryMolecule(void);
CEXPORT int indigoLoadStructureFromString(const char* string, const char* params);
CEXPORT int indigoLoadStructureFromBuffer(const byte* string, int bufferSize, const char* params);
CEXPORT int indigoLoadStructureFromFile(const char* filename, const char* params);
CEXPORT int indigoLoadMolecule(int source);
CEXPORT int indigoLoadMoleculeFromString(const char* string);
CEXPORT int indigoLoadMoleculeFromFile(const char* filename);
CEXPORT int indigoLoadMoleculeFromBuffer(const char* buffer, int size);
CEXPORT int indigoLoadQueryMolecule(int source);
CEXPORT int indigoLoadQueryMoleculeFromString(const char* string);
CEXPORT int indigoLoadQueryMoleculeFromFile(const char* filename);
CEXPORT int indigoLoadQueryMoleculeFromBuffer(const char* buffer, int size);
CEXPORT int indigoLoadSmarts(int source);
CEXPORT int indigoLoadSmartsFromString(const char* string);
CEXPORT int indigoLoadSmartsFromFile(const char* filename);
CEXPORT int indigoLoadSmartsFromBuffer(const char* buffer, int size);
CEXPORT int indigoLoadMonomerLibrary(int source);
CEXPORT int indigoLoadMonomerLibraryFromString(const char* string);
CEXPORT int indigoLoadMonomerLibraryFromFile(const char* filename);
CEXPORT int indigoLoadMonomerLibraryFromBuffer(const char* buffer, int size);
CEXPORT int indigoLoadKetDocument(int source);
CEXPORT int indigoLoadKetDocumentFromString(const char* string);
CEXPORT int indigoLoadKetDocumentFromFile(const char* filename);
CEXPORT int indigoLoadKetDocumentFromBuffer(const char* buffer, int size);
CEXPORT int indigoLoadSequence(int source, const char* seq_type, int library);
CEXPORT int indigoLoadSequenceFromString(const char* string, const char* seq_type, int library);
CEXPORT int indigoLoadSequenceFromFile(const char* filename, const char* seq_type, int library);
CEXPORT int indigoLoadFasta(int source, const char* seq_type, int library);
CEXPORT int indigoLoadFastaFromString(const char* string, const char* seq_type, int library);
CEXPORT int indigoLoadFastaFromFile(const char* filename, const char* seq_type, int library);
CEXPORT int indigoLoadIdt(int source, int library);
CEXPORT int indigoLoadIdtFromString(const char* string, int library);
CEXPORT int indigoLoadIdtFromFile(const char* filename, int library);
CEXPORT int indigoLoadHelm(int source, int library);
CEXPORT int indigoLoadHelmFromString(const char* string, int library);
CEXPORT int indigoLoadHelmFromFile(const char* filename, int library);
CEXPORT int indigoSaveMolfile(int molecule, int output);
CEXPORT int indigoSaveMolfileToFile(int molecule, const char* filename);
CEXPORT const char* indigoMolfile(int molecule);
CEXPORT int indigoSaveSequence(int molecule, int output, int library);
CEXPORT int indigoSaveSequenceToFile(int molecule, const char* filename, int library);
CEXPORT const char* indigoSequence(int molecule, int library);
CEXPORT int indigoSaveSequence3Letter(int molecule, int output, int library);
CEXPORT int indigoSaveSequence3LetterToFile(int molecule, const char* filename, int library);
CEXPORT const char* indigoSequence3Letter(int molecule, int library);
CEXPORT int indigoSaveFasta(int molecule, int output, int library);
CEXPORT int indigoSaveFastaToFile(int molecule, const char* filename, int library);
CEXPORT const char* indigoFasta(int molecule, int library);
CEXPORT int indigoSaveIdt(int molecule, int output, int library);
CEXPORT int indigoSaveIdtToFile(int molecule, const char* filename, int library);
CEXPORT const char* indigoIdt(int molecule, int library);
CEXPORT int indigoSaveHelm(int molecule, int output, int library);
CEXPORT int indigoSaveHelmToFile(int molecule, const char* filename, int library);
CEXPORT const char* indigoHelm(int molecule, int library);
CEXPORT int indigoSaveJsonToFile(int item, const char* filename);
CEXPORT int indigoSaveJson(int item, int output);
// accepts molecules and reactions (but not query ones)
CEXPORT int indigoSaveCml(int object, int output);
CEXPORT int indigoSaveCmlToFile(int object, const char* filename);
CEXPORT const char* indigoCml(int object);
CEXPORT const char* indigoCdxBase64(int object);
// accepts molecules and reactions
CEXPORT int indigoSaveCdxml(int object, int output);
CEXPORT int indigoSaveCdx(int item, int output);
CEXPORT const char* indigoCdxml(int item);
CEXPORT int indigoSaveCdxmlToFile(int object, const char* filename);
CEXPORT int indigoSaveCdxToFile(int item, const char* filename);
CEXPORT const char* indigoCdxml(int object);
// the output must be a file or a buffer, but not a string
// (because MDLCT data usually contains zeroes)
CEXPORT int indigoSaveMDLCT(int item, int output);
CEXPORT const char* indigoJson(int object);
/*
Converts a chemical name into a corresponding structure
Returns -1 if parsing fails or no structure is found
Parameters:
name - a name to parse
params - a string containing parsing options or nullptr if no options are changed
*/
CEXPORT int indigoNameToStructure(const char* name, const char* params);
/* Reactions, query reactions */
/*
* Reaction centers
*/
enum
{
INDIGO_RC_NOT_CENTER = -1,
INDIGO_RC_UNMARKED = 0,
INDIGO_RC_CENTER = 1,
INDIGO_RC_UNCHANGED = 2,
INDIGO_RC_MADE_OR_BROKEN = 4,
INDIGO_RC_ORDER_CHANGED = 8
};
CEXPORT int indigoLoadReaction(int source);
CEXPORT int indigoLoadReactionFromString(const char* string);
CEXPORT int indigoLoadReactionFromFile(const char* filename);
CEXPORT int indigoLoadReactionFromBuffer(const char* buffer, int size);
CEXPORT int indigoLoadQueryReaction(int source);
CEXPORT int indigoLoadQueryReactionFromString(const char* string);
CEXPORT int indigoLoadQueryReactionFromFile(const char* filename);
CEXPORT int indigoLoadQueryReactionFromBuffer(const char* buffer, int size);
CEXPORT int indigoLoadReactionSmarts(int source);
CEXPORT int indigoLoadReactionSmartsFromString(const char* string);
CEXPORT int indigoLoadReactionSmartsFromFile(const char* filename);
CEXPORT int indigoLoadReactionSmartsFromBuffer(const char* buffer, int size);
CEXPORT int indigoCreateReaction(void);
CEXPORT int indigoCreateQueryReaction(void);
CEXPORT int indigoAddReactant(int reaction, int molecule);
CEXPORT int indigoAddProduct(int reaction, int molecule);
CEXPORT int indigoAddCatalyst(int reaction, int molecule);
CEXPORT int indigoCountReactants(int reaction);
CEXPORT int indigoCountProducts(int reaction);
CEXPORT int indigoCountCatalysts(int reaction);
// Counts reactants, products, and catalysts.
CEXPORT int indigoCountMolecules(int reaction);
CEXPORT int indigoGetMolecule(int reaction, int index);
CEXPORT int indigoIterateReactants(int reaction);
CEXPORT int indigoIterateProducts(int reaction);
CEXPORT int indigoIterateCatalysts(int reaction);
// Returns an iterator for reactants, products, and catalysts.
CEXPORT int indigoIterateMolecules(int reaction);
CEXPORT int indigoIterateReactions(int reaction);
CEXPORT int indigoSaveRxnfile(int reaction, int output);
CEXPORT int indigoSaveRxnfileToFile(int reaction, const char* filename);
CEXPORT const char* indigoRxnfile(int reaction);
// Method for query optimizations for faster substructure search
// (works for both query molecules and query reactions)
CEXPORT int indigoOptimize(int query, const char* options);
// Methods for structure normalization
// It neutrailzes charges, resolves 5-valence Nitrogen, removes hydrogens and etc.
// Default options is empty.
CEXPORT int indigoNormalize(int structure, const char* options);
// Method for molecule and query standardizing
// It stadrdize charges, stereo and etc.
CEXPORT int indigoStandardize(int item);
// Method for structure ionization at specified pH and pH tollerance
CEXPORT int indigoIonize(int item, float pH, float pH_toll);
// Method for building PKA model
CEXPORT int indigoBuildPkaModel(int max_level, float threshold, const char* filename);
CEXPORT float* indigoGetAcidPkaValue(int item, int atom, int level, int min_level);
CEXPORT float* indigoGetBasicPkaValue(int item, int atom, int level, int min_level);
// Automatic reaction atom-to-atom mapping
// mode is one of the following (separated by a space):
// "discard" : discards the existing mapping entirely and considers only
// the existing reaction centers (the default)
// "keep" : keeps the existing mapping and maps unmapped atoms
// "alter" : alters the existing mapping, and maps the rest of the
// reaction but may change the existing mapping
// "clear" : removes the mapping from the reaction.
//
// "ignore_charges" : do not consider atom charges while searching
// "ignore_isotopes" : do not consider atom isotopes while searching
// "ignore_valence" : do not consider atom valence while searching
// "ignore_radicals" : do not consider atom radicals while searching
CEXPORT int indigoAutomap(int reaction, const char* mode);
// Returns mapping number. It might appear that there is more them
// one atom with the same number in AAM
// Value 0 means no mapping number has been specified.
CEXPORT int indigoGetAtomMappingNumber(int reaction, int reaction_atom);
CEXPORT int indigoSetAtomMappingNumber(int reaction, int reaction_atom, int number);
// Getters and setters for reacting centers
CEXPORT int indigoGetReactingCenter(int reaction, int reaction_bond, int* rc);
CEXPORT int indigoSetReactingCenter(int reaction, int reaction_bond, int rc);
// Clears all reaction AAM information
CEXPORT int indigoClearAAM(int reaction);
// Corrects reacting centers according to AAM
CEXPORT int indigoCorrectReactingCenters(int reaction);
/* Accessing a molecule */
enum
{
INDIGO_ABS = 1,
INDIGO_OR = 2,
INDIGO_AND = 3,
INDIGO_EITHER = 4,
INDIGO_UP = 5,
INDIGO_DOWN = 6,
INDIGO_CIS = 7,
INDIGO_TRANS = 8,
INDIGO_CHAIN = 9,
INDIGO_RING = 10,
INDIGO_ALLENE = 11,
INDIGO_SINGLET = 101,
INDIGO_DOUBLET = 102,
INDIGO_TRIPLET = 103,
};
// Returns an iterator for all atoms of the given
// molecule, including r-sites and pseudoatoms.
CEXPORT int indigoIterateAtoms(int molecule);
CEXPORT int indigoIteratePseudoatoms(int molecule);
CEXPORT int indigoIterateRSites(int molecule);
CEXPORT int indigoIterateStereocenters(int molecule);
CEXPORT int indigoIterateAlleneCenters(int molecule);
CEXPORT int indigoIterateRGroups(int molecule);
CEXPORT int indigoCountRGroups(int molecule);
CEXPORT int indigoCopyRGroups(int molecule_from, int molecule_to);
CEXPORT int indigoIsPseudoatom(int atom);
CEXPORT int indigoIsRSite(int atom);
CEXPORT int indigoIsTemplateAtom(int atom);
// returns INDIGO_{ABS,OR,AND,EITHER}
// or zero if the atom is not a stereoatom
CEXPORT int indigoStereocenterType(int atom);
CEXPORT int indigoChangeStereocenterType(int atom, int type);
CEXPORT int indigoStereocenterGroup(int atom);
CEXPORT int indigoSetStereocenterGroup(int atom, int group);
// returns 4 integers with atom indices that defines stereocenter pyramid
CEXPORT const int* indigoStereocenterPyramid(int atom);
CEXPORT int indigoSingleAllowedRGroup(int rsite);
CEXPORT int indigoAddStereocenter(int atom, int type, int v1, int v2, int v3, int v4);
// Applicable to an R-Group, but not to a molecule
CEXPORT int indigoIterateRGroupFragments(int rgroup);
// Applicable to an R-Group and to a molecule
// Returns maximal order of attachment points
CEXPORT int indigoCountAttachmentPoints(int item);
CEXPORT int indigoIterateAttachmentPoints(int item, int order);
CEXPORT const char* indigoSymbol(int atom);
CEXPORT int indigoDegree(int atom);
// Returns zero if the charge is ambiguous
// If the charge is nonambiguous, returns 1 and writes *charge
CEXPORT int indigoGetCharge(int atom, int* charge);
// Same as indigoGetCharge
CEXPORT int indigoGetExplicitValence(int atom, int* valence);
CEXPORT int indigoSetExplicitValence(int atom, int valence);
// Returns a number of element from the periodic table.
// Returns zero on ambiguous atom.
// Can not be applied to pseudo-atoms and R-sites.
CEXPORT int indigoAtomicNumber(int atom);
// Returns zero on unspecified or ambiguous isotope
CEXPORT int indigoIsotope(int atom);
// Not applicable to query molecules.
CEXPORT int indigoValence(int atom);
// Return atom hybridization
// S = 1,
// SP = 2,
// SP2 = 3,
// SP3 = 4,
// SP3D = 5,
// SP3D2 = 6,
// SP3D3 = 7,
// SP3D4 = 8,
// SP2D = 9
CEXPORT int indigoGetHybridization(int atom);
// Returns zero if valence of the atom is wrong
CEXPORT int indigoCheckValence(int atom);
// Returns one if atom or bond belongs Query or has any query feature
CEXPORT int indigoCheckQuery(int item);
// Returns one if structure contains RGroup features (RSites, RGroups or attachment points
CEXPORT int indigoCheckRGroups(int item);
// Returns check result for Indigo object as text file for requested properties as JSON
CEXPORT const char* indigoCheck(const char* item, const char* check_flags, const char* load_params);
// Returns check result for Indigo object for requested properties as JSON
CEXPORT const char* indigoCheckObj(int item, const char* check_flags);
// Returns check result for structure against requested properties
CEXPORT const char* indigoCheckStructure(const char* structure, const char* props);
// Applicable to atoms, query atoms, and molecules. Can fail
// (return zero) on query atoms where the number of hydrogens
// is not definitely known. Otherwise, returns one and writes *hydro.
CEXPORT int indigoCountHydrogens(int item, int* hydro);
// Applicable to non-query molecules and atoms.
CEXPORT int indigoCountImplicitHydrogens(int item);
// On success, returns always the same pointer to a 3-element array;
// you should not free() it, but rather memcpy() it if you want to keep it.
CEXPORT float* indigoXYZ(int atom);
CEXPORT int indigoSetXYZ(int atom, float x, float y, float z);
CEXPORT int indigoClearXYZ(int molecule);
CEXPORT int indigoCountSuperatoms(int molecule);
CEXPORT int indigoCountDataSGroups(int molecule);
CEXPORT int indigoCountRepeatingUnits(int molecule);
CEXPORT int indigoCountMultipleGroups(int molecule);
CEXPORT int indigoCountGenericSGroups(int molecule);
CEXPORT int indigoIterateDataSGroups(int molecule);
CEXPORT int indigoIterateSuperatoms(int molecule);
CEXPORT int indigoIterateGenericSGroups(int molecule);
CEXPORT int indigoIterateRepeatingUnits(int molecule);
CEXPORT int indigoIterateMultipleGroups(int molecule);
CEXPORT int indigoIterateTGroups(int molecule);
CEXPORT int indigoIterateSGroups(int molecule);
CEXPORT int indigoGetSuperatom(int molecule, int index);
CEXPORT int indigoGetDataSGroup(int molecule, int index);
CEXPORT int indigoGetGenericSGroup(int molecule, int index);
CEXPORT int indigoGetMultipleGroup(int molecule, int index);
CEXPORT int indigoGetRepeatingUnit(int molecule, int index);
CEXPORT const char* indigoDescription(int data_sgroup);
CEXPORT const char* indigoData(int data_sgroup);
CEXPORT int indigoAddDataSGroup(int molecule, int natoms, int* atoms, int nbonds, int* bonds, const char* description, const char* data);
CEXPORT int indigoAddSuperatom(int molecule, int natoms, int* atoms, const char* name);
CEXPORT int indigoSetDataSGroupXY(int sgroup, float x, float y, const char* options);
CEXPORT int indigoSetSGroupData(int sgroup, const char* data);
CEXPORT int indigoSetSGroupCoords(int sgroup, float x, float y);
CEXPORT int indigoSetSGroupDescription(int sgroup, const char* description);
CEXPORT int indigoSetSGroupFieldName(int sgroup, const char* name);
CEXPORT int indigoSetSGroupQueryCode(int sgroup, const char* querycode);
CEXPORT int indigoSetSGroupQueryOper(int sgroup, const char* queryoper);
CEXPORT int indigoSetSGroupDisplay(int sgroup, const char* option);
CEXPORT int indigoSetSGroupLocation(int sgroup, const char* option);
CEXPORT int indigoSetSGroupTag(int sgroup, const char* tag);
CEXPORT int indigoSetSGroupTagAlign(int sgroup, int tag_align);
CEXPORT int indigoSetSGroupDataType(int sgroup, const char* type);
CEXPORT int indigoSetSGroupXCoord(int sgroup, float x);
CEXPORT int indigoSetSGroupYCoord(int sgroup, float y);
CEXPORT int indigoCreateSGroup(const char* type, int mapping, const char* name);
CEXPORT const char* indigoGetSGroupClass(int sgroup);
CEXPORT const char* indigoGetSGroupName(int sgroup);
CEXPORT int indigoSetSGroupClass(int sgroup, const char* sgclass);
CEXPORT int indigoSetSGroupName(int sgroup, const char* sgname);
CEXPORT int indigoGetSGroupNumCrossBonds(int sgroup);
CEXPORT int indigoAddSGroupAttachmentPoint(int sgroup, int aidx, int lvidx, const char* apid);
CEXPORT int indigoDeleteSGroupAttachmentPoint(int sgroup, int index);
CEXPORT int indigoGetSGroupDisplayOption(int sgroup);
CEXPORT int indigoSetSGroupDisplayOption(int sgroup, int option);
CEXPORT int indigoGetSGroupSeqId(int sgroup);
CEXPORT float* indigoGetSGroupCoords(int sgroup);
CEXPORT int indigoGetSGroupMultiplier(int sgroup);
CEXPORT int indigoSetSGroupMultiplier(int sgroup, int multiplier);
CEXPORT const char* indigoGetRepeatingUnitSubscript(int sgroup);
CEXPORT int indigoGetRepeatingUnitConnectivity(int sgroup);
CEXPORT int indigoSetSGroupBrackets(int sgroup, int brk_style, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
CEXPORT int indigoFindSGroups(int item, const char* property, const char* value);
CEXPORT int indigoGetSGroupType(int item);
CEXPORT int indigoGetSGroupIndex(int item);
CEXPORT int indigoGetSGroupOriginalId(int sgroup);
CEXPORT int indigoSetSGroupOriginalId(int sgroup, int original);
CEXPORT int indigoGetSGroupParentId(int sgroup);
CEXPORT int indigoSetSGroupParentId(int sgroup, int parent);
CEXPORT int indigoAddTemplate(int molecule, int templates, const char* tname);
CEXPORT int indigoRemoveTemplate(int molecule, const char* tname);
CEXPORT int indigoFindTemplate(int molecule, const char* tname);
CEXPORT const char* indigoGetTGroupClass(int tgroup);
CEXPORT const char* indigoGetTGroupName(int tgroup);
CEXPORT const char* indigoGetTGroupAlias(int tgroup);
CEXPORT int indigoTransformSCSRtoCTAB(int item);
CEXPORT int indigoTransformCTABtoSCSR(int molecule, int templates);
CEXPORT int indigoResetCharge(int atom);
CEXPORT int indigoResetExplicitValence(int atom);
CEXPORT int indigoResetIsotope(int atom);
CEXPORT int indigoSetAttachmentPoint(int atom, int order);
CEXPORT int indigoClearAttachmentPoints(int item);
CEXPORT int indigoRemoveConstraints(int item, const char* type);
CEXPORT int indigoAddConstraint(int item, const char* type, const char* value);
CEXPORT int indigoAddConstraintNot(int item, const char* type, const char* value);
CEXPORT int indigoAddConstraintOr(int atom, const char* type, const char* value);
CEXPORT int indigoResetStereo(int item);
CEXPORT int indigoInvertStereo(int item);
CEXPORT int indigoCountAtoms(int molecule);
CEXPORT int indigoCountBonds(int molecule);
CEXPORT int indigoCountPseudoatoms(int molecule);
CEXPORT int indigoCountRSites(int molecule);
CEXPORT int indigoIterateBonds(int molecule);
// Returns 1/2/3 if the bond is a single/double/triple bond
// Returns 4 if the bond is an aromatic bond
// Returns zero if the bond is ambiguous (query bond)
CEXPORT int indigoBondOrder(int bond);
// Returns INDIGO_{UP/DOWN/EITHER/CIS/TRANS},
// or zero if the bond is not a stereobond
CEXPORT int indigoBondStereo(int bond);
// Returns INDIGO_{CHAIN/RING},
CEXPORT int indigoTopology(int bond);
// Returns an iterator whose elements can be treated as atoms.
// At the same time, they support indigoBond() call.
CEXPORT int indigoIterateNeighbors(int atom);
// Applicable exclusively to the "atom neighbors iterator".
// Returns a bond to the neighbor atom.
CEXPORT int indigoBond(int nei);
// Accessing atoms and bonds by index
CEXPORT int indigoGetAtom(int molecule, int idx);
CEXPORT int indigoGetBond(int molecule, int idx);
CEXPORT int indigoSource(int bond);
CEXPORT int indigoDestination(int bond);
CEXPORT int indigoClearCisTrans(int handle);
CEXPORT int indigoClearStereocenters(int handle);
CEXPORT int indigoCountStereocenters(int molecule);
CEXPORT int indigoClearAlleneCenters(int molecule);
CEXPORT int indigoCountAlleneCenters(int molecule);
CEXPORT int indigoResetSymmetricCisTrans(int handle);
CEXPORT int indigoResetSymmetricStereocenters(int handle);
CEXPORT int indigoMarkEitherCisTrans(int handle);
CEXPORT int indigoMarkStereobonds(int handle);
CEXPORT int indigoValidateChirality(int handle);
// Accepts a symbol from the periodic table (like "C" or "Br"),
// or a pseudoatom symbol, like "Pol". Returns the added atom.
CEXPORT int indigoAddAtom(int molecule, const char* symbol);
// Set a new atom instead of specified
CEXPORT int indigoResetAtom(int atom, const char* symbol);
CEXPORT const char* indigoGetTemplateAtomClass(int atom);
CEXPORT int indigoSetTemplateAtomClass(int atom, const char* name);
// Accepts Rsite name "R" (or just ""), "R1", "R2" or list with names "R1 R3"
CEXPORT int indigoAddRSite(int molecule, const char* name);
CEXPORT int indigoSetRSite(int atom, const char* name);
CEXPORT int indigoSetCharge(int atom, int charge);
CEXPORT int indigoSetIsotope(int atom, int isotope);
// If the radical is nonambiguous, returns 1 and writes *electrons
CEXPORT int indigoGetRadicalElectrons(int atom, int* electrons);
// If the radical is nonambiguous, returns 1 and writes *radical
CEXPORT int indigoGetRadical(int atom, int* radical);
CEXPORT int indigoSetRadical(int atom, int radical);
CEXPORT int indigoResetRadical(int atom);
// Used for hacks with aromatic molecules; not recommended to use
// in other situations
CEXPORT int indigoSetImplicitHCount(int atom, int impl_h);
// Accepts two atoms (source and destination) and the order of the new bond
// (1/2/3/4 = single/double/triple/aromatic). Returns the added bond.
CEXPORT int indigoAddBond(int source, int destination, int order);
CEXPORT int indigoSetBondOrder(int bond, int order);
CEXPORT int indigoMerge(int where_to, int what);
/* Highlighting */
// Access atoms and bonds
CEXPORT int indigoHighlight(int item);
// Access atoms, bonds, molecules, and reactions
CEXPORT int indigoUnhighlight(int item);
// Access atoms and bonds
CEXPORT int indigoIsHighlighted(int item);
/* Selection */
// Access atoms and bonds
CEXPORT int indigoSelect(int item);
// Access atoms, bonds, molecules, and reactions
CEXPORT int indigoUnselect(int item);
// Access atoms and bonds
CEXPORT int indigoIsSelected(int item);
/* Connected components of molecules */
CEXPORT int indigoCountComponents(int molecule);
CEXPORT int indigoComponentIndex(int atom);
CEXPORT int indigoIterateComponents(int molecule);
// Returns a 'molecule component' object, which can not be used as a
// [query] molecule, but supports the indigo{Count,Iterate}{Atoms,Bonds} calls,
// and also the indigoClone() call, which returns a [query] molecule.
CEXPORT int indigoComponent(int molecule, int index);
/* Smallest Set of Smallest Rings */
CEXPORT int indigoCountSSSR(int molecule);
CEXPORT int indigoIterateSSSR(int molecule);
CEXPORT int indigoIterateSubtrees(int molecule, int min_atoms, int max_atoms);
CEXPORT int indigoIterateRings(int molecule, int min_atoms, int max_atoms);
CEXPORT int indigoIterateEdgeSubmolecules(int molecule, int min_bonds, int max_bonds);
/* Calculation on molecules */
CEXPORT int indigoCountHeavyAtoms(int molecule);
CEXPORT int indigoGrossFormula(int molecule);
CEXPORT double indigoMolecularWeight(int molecule);
CEXPORT double indigoMostAbundantMass(int molecule);
CEXPORT double indigoMonoisotopicMass(int molecule);
CEXPORT const char* indigoMassComposition(int molecule);
CEXPORT double indigoTPSA(int molecule, int includeSP);
CEXPORT int indigoNumRotatableBonds(int molecule);
CEXPORT int indigoNumHydrogenBondAcceptors(int molecule);
CEXPORT int indigoNumHydrogenBondDonors(int molecule);
CEXPORT double indigoLogP(int molecule);
CEXPORT double indigoMolarRefractivity(int molecule);
CEXPORT double indigoPka(int molecule);
CEXPORT const char* indigoCanonicalSmiles(int molecule);
CEXPORT const char* indigoLayeredCode(int molecule);
CEXPORT int64_t indigoHash(int chemicalObject);
CEXPORT const int* indigoSymmetryClasses(int molecule, int* count_out);
CEXPORT int indigoHasCoord(int molecule);
CEXPORT int indigoHasZCoord(int molecule);
CEXPORT int indigoIsChiral(int molecule);
CEXPORT int indigoCheckChirality(int molecule);
CEXPORT int indigoCheck3DStereo(int molecule);
CEXPORT int indigoCheckStereo(int molecule);
CEXPORT int indigoIsPossibleFischerProjection(int molecule, const char* options);
CEXPORT int indigoCreateSubmolecule(int molecule, int nvertices, int* vertices);
CEXPORT int indigoCreateEdgeSubmolecule(int molecule, int nvertices, int* vertices, int nedges, int* edges);
CEXPORT int indigoGetSubmolecule(int molecule, int nvertices, int* vertices);
CEXPORT int indigoRemoveAtoms(int molecule, int nvertices, int* vertices);
CEXPORT int indigoRemoveBonds(int molecule, int nbonds, int* bonds);
// Determines and applies the best transformation to the given molecule
// so that the specified atoms move as close as possible to the desired
// positions. The size of desired_xyz is equal to 3 * natoms.
// The return value is the root-mean-square measure of the difference
// between the desired and obtained positions.
CEXPORT float indigoAlignAtoms(int molecule, int natoms, int* atom_ids, float* desired_xyz);
/* Things that work for both molecules and reactions */
CEXPORT int indigoAromatize(int item);
CEXPORT int indigoDearomatize(int item);
CEXPORT int indigoFoldHydrogens(int item);
CEXPORT int indigoUnfoldHydrogens(int item);
CEXPORT int indigoFoldUnfoldHydrogens(int item);
CEXPORT int indigoLayout(int object);
CEXPORT int indigoClean2d(int object);
CEXPORT const char* indigoSmiles(int item);
CEXPORT const char* indigoSmarts(int item);
CEXPORT const char* indigoCanonicalSmarts(int item);
// Returns a "mapping" if there is an exact match, zero otherwise
// The flags string consists of space-separated flags.
// The more flags, the more restrictive matching is done.
// "ELE": Distribution of electrons: bond types, atom charges, radicals, valences
// "MAS": Atom isotopes
// "STE": Stereochemistry: chiral centers, stereogroups, and cis-trans bonds
// "FRA": Connected fragments: disallows match of separate ions in salts
// "ALL": All of the above
// By default (with null or empty flags string) all flags are on.
CEXPORT int indigoExactMatch(int item1, int item2, const char* flags);
// "beg" and "end" refer to the two ends of the tautomeric chain. Allowed
// elements are separated by commas. '1' at the beginning means an aromatic
// atom, while '0' means an aliphatic atom.
CEXPORT int indigoSetTautomerRule(int id, const char* beg, const char* end);
CEXPORT int indigoRemoveTautomerRule(int id);
CEXPORT int indigoClearTautomerRules();
CEXPORT const char* indigoName(int handle);
CEXPORT int indigoSetName(int handle, const char* name);
// You should not free() the obtained buffer, but rather memcpy() it if you want to keep it
CEXPORT int indigoSerialize(int handle, byte** buf, int* size);
CEXPORT int indigoUnserialize(const byte* buf, int size);
// Applicable to molecules/reactions obtained from SDF or RDF files,
// and to their clones, and to their R-Group deconvolutions.
CEXPORT int indigoHasProperty(int handle, const char* prop);
CEXPORT const char* indigoGetProperty(int handle, const char* prop);
// Applicable to newly created or cloned molecules/reactions,
// and also to molecules/reactions obtained from SDF or RDF files.
// If the property with the given name does not exist, it is created automatically.
CEXPORT int indigoSetProperty(int item, const char* prop, const char* value);
// Does not raise an error if the given property does not exist
CEXPORT int indigoRemoveProperty(int item, const char* prop);
// Returns an iterator that one can pass to indigoName() to
// know the name of the property. The value of the property can be
// obtained via indigoGetProperty() call to the object
CEXPORT int indigoIterateProperties(int handle);
// Clears all properties of the molecule
CEXPORT int indigoClearProperties(int handle);
// Accepts a molecule or reaction (but not query molecule or query reaction).
// Returns a string describing the first encountered mistake with valence.
// Returns an empty string if the input molecule/reaction is fine.
CEXPORT const char* indigoCheckBadValence(int handle);
// Accepts a molecule or reaction (but not query molecule or query reaction).
// Returns a string describing the first encountered mistake with ambiguous H counter.
// Returns an empty string if the input molecule/reaction is fine.
CEXPORT const char* indigoCheckAmbiguousH(int handle);
/* Fingerprints */
// Returns a 'fingerprint' object, which can then be passed to:
// indigoToString() -- to get hexadecimal representation
// indigoToBuffer() -- to get raw byte data
// indigoSimilarity() -- to calculate similarity with another fingerprint
// The following fingerprint types are available:
// "sim" -- "Similarity fingerprint", useful for calculating
// similarity measures (the default)
// "sub" -- "Substructure fingerprint", useful for substructure screening
// "sub-res" -- "Resonance substructure fingerprint", useful for resonance
// substructure screening
// "sub-tau" -- "Tautomer substructure fingerprint", useful for tautomer
// substructure screening
// "full" -- "Full fingerprint", which has all the mentioned
// fingerprint types included
CEXPORT int indigoFingerprint(int item, const char* type);
// Counts the nonzero (i.e. one) bits in a fingerprint
CEXPORT int indigoCountBits(int fingerprint);
// Counts the number of the coinincident in two fingerprints
CEXPORT int indigoCommonBits(int fingerprint1, int fingerprint2);
// Return one bits string for the fingerprint object
CEXPORT const char* indigoOneBitsList(int fingerprint);
// Returns a 'fingerprint' object with data from 'buffer'
CEXPORT int indigoLoadFingerprintFromBuffer(const byte* buffer, int size);
// Constructs a 'fingerprint' object from a normalized array of double descriptors
CEXPORT int indigoLoadFingerprintFromDescriptors(const double* arr, int arr_len, int size, double density);
// Accepts two molecules, two reactions, or two fingerprints.
// Returns the similarity measure between them.
// Metrics: "tanimoto", "tversky", "tversky <alpha> <beta>", "euclid-sub" or "normalized-edit"
// Zero pointer or empty string defaults to "tanimoto".
// "tversky" without numbers defaults to alpha = beta = 0.5
CEXPORT float indigoSimilarity(int item1, int item2, const char* metrics);
/* Working with SDF/RDF/SMILES/CML/CDX files */
CEXPORT int indigoIterateSDF(int reader);
CEXPORT int indigoIterateRDF(int reader);
CEXPORT int indigoIterateSmiles(int reader);
CEXPORT int indigoIterateCML(int reader);
CEXPORT int indigoIterateCDX(int reader);
CEXPORT int indigoIterateSDFile(const char* filename);
CEXPORT int indigoIterateRDFile(const char* filename);
CEXPORT int indigoIterateSmilesFile(const char* filename);
CEXPORT int indigoIterateCMLFile(const char* filename);
CEXPORT int indigoIterateCDXFile(const char* filename);
// Applicable to items returned by SDF/RDF iterators.
// Returns the content of SDF/RDF item.
CEXPORT const char* indigoRawData(int item);
// Applicable to items returned by SDF/RDF iterators.
// Returns the offset in the SDF/RDF file.
CEXPORT int indigoTell(int handle);
CEXPORT long long indigoTell64(int handle);
// Saves the molecule to an SDF output stream
CEXPORT int indigoSdfAppend(int output, int item);
// Saves the molecule to a multiline SMILES output stream
CEXPORT int indigoSmilesAppend(int output, int item);
// Similarly for RDF files, except that the header should be written first
CEXPORT int indigoRdfHeader(int output);
CEXPORT int indigoRdfAppend(int output, int item);
// Similarly for CML files, except that they have both header and footer
CEXPORT int indigoCmlHeader(int output);
CEXPORT int indigoCmlAppend(int output, int item);
CEXPORT int indigoCmlFooter(int output);
// Create saver objects that can be used to save molecules or reactions
// Supported formats: 'sdf', 'smi' or 'smiles', 'cml', 'rdf'
// Format argument is case-insensitive
// Saver should be closed with indigoClose function
CEXPORT int indigoCreateSaver(int output, const char* format);
CEXPORT int indigoCreateFileSaver(const char* filename, const char* format);
// Append object to a specified saver stream
CEXPORT int indigoAppend(int saver, int object);
/* Arrays */
CEXPORT int indigoCreateArray();
// Note: a clone of the object is added, not the object itself
CEXPORT int indigoArrayAdd(int arr, int object);
CEXPORT int indigoAt(int item, int index);
CEXPORT int indigoCount(int item);
CEXPORT int indigoClear(int arr);
CEXPORT int indigoIterateArray(int arr);
/* Substructure matching */
// Returns a new 'matcher' object
// 'mode' is reserved for future use; currently its value is ignored
CEXPORT int indigoSubstructureMatcher(int target, const char* mode);
// Ignore target atom in the substructure matcher
CEXPORT int indigoIgnoreAtom(int matcher, int atom_object);
// Ignore target atom in the substructure matcher
CEXPORT int indigoUnignoreAtom(int matcher, int atom_object);
// Clear list of ignored target atoms in the substructure matcher
CEXPORT int indigoUnignoreAllAtoms(int matcher);
// Returns a new 'match' object on success, zero on fail
// matcher is an matcher object returned by indigoSubstructureMatcher
CEXPORT int indigoMatch(int matcher, int query);
// Counts the number of embeddings of the query structure into the target
CEXPORT int indigoCountMatches(int matcher, int query);
// Counts the number of embeddings of the query structure into the target
// If number of embeddings is more then limit then limit is returned
CEXPORT int indigoCountMatchesWithLimit(int matcher, int query, int embeddings_limit);
// Returns substructure matches iterator
CEXPORT int indigoIterateMatches(int matcher, int query);
// Accepts a 'match' object obtained from indigoMatchSubstructure.
// Returns a new molecule which has the query highlighted.
CEXPORT int indigoHighlightedTarget(int match);
// Accepts an atom from the query, not an atom index.
// You can use indigoGetAtom() to obtain the atom by its index.
// Returns the corresponding target atom, not an atom index. If query
// atom doesn't match particular atom in the target (R-group or explicit
// hydrogen) then return value is zero.
// You can use indigoIndex() to obtain the index of the returned atom.
CEXPORT int indigoMapAtom(int handle, int atom);
// Accepts a bond from the query, not a bond index.
// You can use indigoGetBond() to obtain the bond by its index.
// Returns the corresponding target bond, not a bond index. If query
// bond doesn't match particular bond in the target (R-group or explicit
// hydrogen) then return value is zero.
// You can use indigoIndex() to obtain the index of the returned bond.
CEXPORT int indigoMapBond(int handle, int bond);
// Accepts a molecule from the query reaction, not a molecule index.
// You can use indigoGetMolecule() to obtain the bond by its index.
// Returns the corresponding target molecule, not a reaction index. If query
// molecule doesn't match particular molecule in the target then return
// value is zero.
// You can use indigoIndex() to obtain the index of the returned molecule.
CEXPORT int indigoMapMolecule(int handle, int molecule);
// Accepts a molecule and options for tautomer enumeration algorithms
// Returns an iterator object over the molecules that are tautomers of this molecule.
CEXPORT int indigoIterateTautomers(int molecule, const char* options);
/* Scaffold detection */
// Returns zero if no common substructure is found.
// Otherwise, it returns a new object, which can be
// (i) treated as a structure: the maximum (by the number of rings) common
// substructure of the given structures.
// (ii) passed to indigoAllScaffolds()
CEXPORT int indigoExtractCommonScaffold(int structures, const char* options);
// Returns an array of all possible scaffolds.
// The input parameter is the value returned by indigoExtractCommonScaffold().
CEXPORT int indigoAllScaffolds(int extracted);
/* R-Group deconvolution */
// Returns a ``decomposition'' object that can be passed to
// indigoDecomposedMoleculeScaffold() and
// indigoIterateDecomposedMolecules()
CEXPORT int indigoDecomposeMolecules(int scaffold, int structures);
// Returns a scaffold molecule with r-sites marking the place
// for substituents to add to form the structures given above.
CEXPORT int indigoDecomposedMoleculeScaffold(int decomp);
// Returns an iterator which corresponds to the given collection of structures.
// indigoDecomposedMoleculeHighlighted() and
// indigoDecomposedMoleculeWithRGroups() are applicable to the
// values returned by the iterator.
CEXPORT int indigoIterateDecomposedMolecules(int decomp);
// Returns a molecule with highlighted scaffold
CEXPORT int indigoDecomposedMoleculeHighlighted(int decomp);
// Returns a query molecule with r-sites and "R1=...", "R2=..."
// substituents defined. The 'scaffold' part of the molecule
// is identical to the indigoDecomposedMoleculeScaffold()
CEXPORT int indigoDecomposedMoleculeWithRGroups(int decomp);
/*
* Decomposition Iteration API
*/
// Returns a 'decomposition' object
CEXPORT int indigoCreateDecomposer(int scaffold);
// Returns a 'decomposition' item
CEXPORT int indigoDecomposeMolecule(int decomp, int mol);
// Returns decomposition iterator
CEXPORT int indigoIterateDecompositions(int deco_item);
// Adds the input decomposition to a full scaffold
CEXPORT int indigoAddDecomposition(int decomp, int q_match);
/* R-Group convolution */
CEXPORT int indigoGetFragmentedMolecule(int elem, const char* options);
CEXPORT int indigoRGroupComposition(int molecule, const char* options);
/*
* Abbreviations
*/
CEXPORT int indigoExpandAbbreviations(int molecule);
/* Other */
CEXPORT const char* indigoToString(int handle);
CEXPORT const char* indigoToBase64String(int handle);
CEXPORT int indigoToBuffer(int handle, char** buf, int* size);
/* Reaction products enumeration */
// Accepts a query reaction with markd R-sites, and array of arrays
// of substituents corresponding to the R-Sites. Returns an array of
// reactions with R-Sites replaced by the actual substituents.
CEXPORT int indigoReactionProductEnumerate(int reaction, int monomers);
CEXPORT int indigoTransform(int reaction, int monomers);
CEXPORT int indigoTransformHELMtoSCSR(int monomer);
/* Debug functionality */
// Returns internal type of an object
CEXPORT const char* indigoDbgInternalType(int object);
// Internal breakpoint
CEXPORT void indigoDbgBreakpoint(void);
// Methods that returns profiling infromation in a human readable format
CEXPORT const char* indigoDbgProfiling(int /*bool*/ whole_session);
// Reset profiling counters either for the current state or for the whole session
CEXPORT int indigoDbgResetProfiling(int /*bool*/ whole_session);
// Methods that returns profiling counter value for a particular counter
CEXPORT qword indigoDbgProfilingGetCounter(const char* name, int /*bool*/ whole_session);
#endif