/*
* International Union of Pure and Applied Chemistry (IUPAC)
* International Chemical Identifier (InChI)
* Version 1
* Software version 1.01
* July 21, 2006
* Developed at NIST
*/
#ifndef __INCHIMAKE_H__
#define __INCHIMAKE_H__
/***********************************************************************/
/* replace all ' ' delimiters with ',' */
#define ITEM_DELIMETER ","
#define EXTRA_SPACE ""
#define COMMA_EXTRA_SPACE ","
#define LEN_EXTRA_SPACE 0
/**********************************************************************************************/
/* nCtMode for output INChI */
#define CT_MODE_NO_ORPHANS 1 /* no orphans, that CT should have only atoms with neighbors */
#define CT_MODE_ABC_NUMBERS 2
#define CT_MODE_ATOM_COUNTS 4
#define CT_MODE_PREDECESSORS 8
#define CT_MODE_EQL_H_TOGETHER 16
#define CT_MODE_ABC_NUM_CLOSURES 32 /* in CT_MODE_ABC_NUMBERS output AB1AC2AB instead of AB-AC-A-B */
/*************** Macros for retrieving requested INChI and INChI_Aux *****************************/
/* S->pINChI[TAUT_YES] has info: */
#define HAS_T(S) (S->pINChI[TAUT_YES] && S->pINChI[TAUT_YES]->nNumberOfAtoms)
/* S->pINChI[TAUT_NON] has info: */
#define HAS_N(S) (S->pINChI[TAUT_NON] && S->pINChI[TAUT_NON]->nNumberOfAtoms)
/* S->pINChI[TAUT_YES] has tautomeric info: */
#define HAS_TT(S) (S->pINChI[TAUT_YES] && S->pINChI[TAUT_YES]->nNumberOfAtoms && S->pINChI[TAUT_YES]->lenTautomer>0)
/* S->pINChI[TAUT_YES] has non-taitomeric info: */
#define HAS_TN(S) (S->pINChI[TAUT_YES] && S->pINChI[TAUT_YES]->nNumberOfAtoms && !S->pINChI[TAUT_YES]->lenTautomer)
/* S->pINChI[TAUT_NON] has non-tautomeric info: */
#define HAS_NN(S) (S->pINChI[TAUT_NON] && S->pINChI[TAUT_NON]->nNumberOfAtoms && !S->pINChI[TAUT_NON]->lenTautomer)
#define GET_II(M,S) ((M==OUT_N1)? (HAS_TN(S)? TAUT_YES : HAS_NN(S)? TAUT_NON : -1): \
(M==OUT_T1 || M==OUT_TN)? (HAS_T(S) ? TAUT_YES : HAS_N(S) ? TAUT_NON : -1): \
(M==OUT_NN)? (HAS_NN(S)? TAUT_NON : HAS_TN(S)? TAUT_YES : -1): \
(M==OUT_NT)? ((HAS_TT(S) && HAS_NN(S)) ? TAUT_NON : -1) : -1)
/*********************************/
/* Equivalence flags definitions */
/*********************************/
/* What is equal (ii = INChI_ITEM) */
#define iiSTEREO 0x0001 /* stereo (sp2 or sp3) */
#define iiSTEREO_INV 0x0002 /* inverted stereo (sp3) */
#define iiNUMB 0x0004 /* numbering or inverted stereo numbering */
#define iiEQU 0x0008 /* equivalence info */
/* derived:
(iiSTEREO_INV | iiNUMB) = numbering of inverted stereo
*/
/* Additional info to what is equal (INCHI_ITEM_TYPE = iit) */
#define iitISO 0x0010 /* Isotopic */
#define iitNONTAUT 0x0020 /* Non-tautomeric */
/* derived:
(iitISO | iitNONTAUT) = isotopic non-tautomeric
*/
/* Where is the equivalent item located (INChI_ITEM_EQUAL_TO = iiEq2) */
#define iiEq2NONTAUT 0x0040 /* non-tautomeric */
#define iiEq2ISO 0x0080 /* isotopic */
#define iiEq2INV 0x0100 /* equal to inverted (stereo sp3) or to numbering of inverted stereo */
#define iiEmpty 0x0200 /* item is empty while in the preceding layer the item is not empty */
/*********************** Printing strings external declarations *******************************/
extern const char sCompDelim[];
#ifndef INCHI_ALL_CPP
#ifdef __cplusplus
extern "C" {
#endif
#endif
/**********************************************************************************************/
int FillOutINChI( INChI *pINChI, INChI_Aux *pINChI_Aux,
int num_atoms, int num_at_tg, int num_removed_H,
sp_ATOM *at, inp_ATOM *norm_at, CANON_STAT *pCS, int bTautomeric,
INCHI_MODE nUserMode, char *pStrErrStruct );
int MakeHillFormulaString( char *szHillFormula, char *szLinearCT, int nLen_szLinearCT, int *bOverflow);
int bHasOrigInfo( ORIG_INFO *OrigInfo, int num_atoms );
int EqlOrigInfo( INChI_Aux *a1, INChI_Aux *a2 );
int MakeAbcNumber( char *szString, int nStringLen, const char *szLeadingDelim, int nValue );
int MakeDecNumber( char *szString, int nStringLen, const char *szLeadingDelim, int nValue );
int MakeCtStringNew( AT_NUMB *LinearCT, int nLenCT, int bAddDelim,
S_CHAR *nNum_H, int num_atoms,
char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow);
int MakeCtStringOld( AT_NUMB *LinearCT, int nLenCT, int bAddDelim,
char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow);
int MakeCtString( AT_NUMB *LinearCT, int nLenCT, int bAddDelim,
S_CHAR *nNum_H, int num_atoms, /* both parameters are not used here */
char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow);
int MakeTautString( AT_NUMB *LinearCT, int nLenCT, int bAddDelim,
char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow);
int MakeEquString( AT_NUMB *LinearCT, int nLenCT, int bAddDelim,
char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow);
int MakeIsoAtomString( INChI_IsotopicAtom *IsotopicAtom, int nNumberOfIsotopicAtoms,
char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow);
int MakeIsoTautString( INChI_IsotopicTGroup *IsotopicTGroup, int nNumberOfIsotopicTGroups,
char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow);
int MakeIsoHString( int num_iso_H[], char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow);
int MakeStereoString( AT_NUMB *at1, AT_NUMB *at2, S_CHAR *parity, int bAddDelim, int nLenCT,
char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow);
int MakeCRVString( ORIG_INFO *OrigInfo, int nLenCT, int bAddDelim,
char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow);
int MakeMult( int mult, const char *szTailingDelim, char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow);
int MakeDelim( const char *szTailingDelim, char *szLinearCT, int nLen_szLinearCT, int *bOverflow);
int MakeEqStr( const char *szTailingDelim, int mult, char *szLinearCT, int nLen_szLinearCT, int *bOverflow);
int MakeHString( int bAddDelim, S_CHAR *LinearCT, int nLenCT,
char *szLinearCT, int nLen_szLinearCT, int nCtMode, int *bOverflow );
AT_NUMB *GetDfsOrder4CT( AT_NUMB *LinearCT, int nLenCT, S_CHAR *nNum_H, int num_atoms, int nCtMode );
const char *EquString( int EquVal );
int str_HillFormula(INCHI_SORT *pINChISort, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int num_components, int bUseMulipliers);
int str_HillFormula2(INCHI_SORT *pINChISort /* non-taut */, INCHI_SORT *pINChISort2 /* taut */,
char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int num_components, int bUseMulipliers);
int str_Connections(INCHI_SORT *pINChISort, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int ATOM_MODE, int num_components, int bUseMulipliers);
int str_H_atoms(INCHI_SORT *pINChISort, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int ATOM_MODE, int TAUT_MODE,
int num_components, int bUseMulipliers);
int str_Charge2(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int num_components,
int bSecondNonTautPass, int bOmitRepetitions, int bUseMulipliers);
int str_Sp2(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components,
int bSecondNonTautPass, int bOmitRepetitions, int bUseMulipliers);
int str_IsoSp2(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components,
int bSecondNonTautPass, int bOmitRepetitions, int bUseMulipliers);
int str_Sp3(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components, int bRelRac,
int bSecondNonTautPass, int bOmitRepetitions, int bUseMulipliers);
int str_IsoSp3(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components, int bRelRac,
int bSecondNonTautPass, int bOmitRepetitions, int bUseMulipliers);
int str_StereoAbsInv(INCHI_SORT *pINChISort, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int num_components);
int str_IsoStereoAbsInv(INCHI_SORT *pINChISort, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int num_components);
int str_IsoAtoms(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components, int bAbcNumbers,
int bSecondNonTautPass, int bOmitRepetitions, int bUseMulipliers);
int str_FixedH_atoms(INCHI_SORT *pINChISort, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int ATOM_MODE, int num_components, int bUseMulipliers);
int str_AuxNumb(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components,
int bSecondNonTautPass, int bOmitRepetitions);
int str_AuxEqu(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components,
int bSecondNonTautPass, int bOmitRepetitions, int bUseMulipliers);
int str_AuxTgroupEqu(INCHI_SORT *pINChISort, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components, int bUseMulipliers);
int str_AuxIsoTgroupEqu(INCHI_SORT *pINChISort, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components, int bOmitRepetitions, int bUseMulipliers);
int str_AuxInvSp3(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components,
int bSecondNonTautPass, int bOmitRepetitions, int bUseMulipliers);
int str_AuxInvSp3Numb(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components,
int bSecondNonTautPass, int bOmitRepetitions);
int str_AuxIsoNumb(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components,
int bSecondNonTautPass, int bOmitRepetitions);
int str_AuxIsoEqu(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components,
int bSecondNonTautPass, int bOmitRepetitions, int bUseMulipliers);
int str_AuxInvIsoSp3(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components,
int bSecondNonTautPass, int bOmitRepetitions, int bUseMulipliers);
int str_AuxInvIsoSp3Numb(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components,
int bSecondNonTautPass, int bOmitRepetitions);
int str_AuxChargeRadVal(INCHI_SORT *pINChISort, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int bOutType, int TAUT_MODE, int num_components, int bUseMulipliers);
int bin_AuxTautTrans(INCHI_SORT *pINChISort, INCHI_SORT *pINChISort2,
AT_NUMB **pTrans_n, AT_NUMB **pTrans_s, int bOutType, int num_components);
int str_AuxTautTrans(AT_NUMB *nTrans_n, AT_NUMB *nTrans_s, char *pStr, int nStrLen, int tot_len,
int *bOverflow, int TAUT_MODE, int num_components);
int CompareTautNonIsoPartOfINChI( const INChI *i1, const INChI *i2 );
#ifndef INCHI_ALL_CPP
#ifdef __cplusplus
}
#endif
#endif
#endif /*__INCHIMAKE_H__*/
syntax highlighted by Code2HTML, v. 0.9.1