diff --git a/INCHI-1-SRC/INCHI_BASE/src/strutil.c b/INCHI-1-SRC/INCHI_BASE/src/strutil.c index 753c5450..8f1f23e8 100644 --- a/INCHI-1-SRC/INCHI_BASE/src/strutil.c +++ b/INCHI-1-SRC/INCHI_BASE/src/strutil.c @@ -4104,2077 +4104,136 @@ int get_iat_number(int el_number) * (Summary) : Type of the element has changed from METAL -> MolInOrg. ******************************************************************************/ const MolecularInorganicsElData MolecularInorganicsArray[] = - { - /* avg norm El No -------- Valence(s) of an ion or neutral atom -------------*/ - /* mw mass exact mw type neg H -2 -1 0 +1 +2 */ - {"H", 1, 1, 1.007825035, 0, 21, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"D", 2, 2, 2.014101778, 0, 21, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"T", 3, 3, 3.016049268, 0, 21, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"He", 4, 4, 4.002600000, 0, 0, 0, {{ - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }}}, - {"Li", 7, 7, 7.016000000, MolInOrg1, 10, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"Be", 9, 9, 9.012180000, MolInOrg1, 15, 0, {{ - 0, - }, - { - 0, - }, - { - 2, - }, - { - 1, - }, - { - 0, - }}}, - {"B", 11, 11, 11.009300000, 0, 20, 0, {{ - 3, - }, - { - 4, - }, - { - 3, - }, - { - 2, - }, - { - 1, - }}}, - {"C", 12, 12, 12.000000000, 0, 25, 0, {{ - 2, - }, - { - 3, - }, - { - 4, - }, - { - 3, - }, - { - 2, - }}}, - {"N", 14, 14, 14.003074000, 0, 30, 0, {{ - 1, - }, - { - 2, - }, - {3, 5}, - { - 4, - }, - { - 3, - }}}, - {"O", 16, 16, 15.994914630, 0, 35, 0, {{ - 0, - }, - { - 1, - }, - { - 2, - }, - { - 3, - 5, - }, - { - 4, - }}}, - {"F", 19, 19, 18.998403220, 0, 40, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 2, - }, - {3, 5}}}, - {"Ne", 20, 20, 19.992440000, 0, 0, 0, {{ - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }}}, - {"Na", 23, 23, 22.989770000, MolInOrg1, 9, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"Mg", 24, 24, 23.985000000, MolInOrg1, 12, 0, {{ - 0, - }, - { - 0, - }, - { - 2, - }, - { - 1, - }, - { - 0, - }}}, - {"Al", 27, 27, 26.981540000, MolInOrg1, 15, 0, {{ - 3, - 5, - }, - { - 4, - }, - { - 3, - }, - { - 2, - }, - { - 1, - }}}, - {"Si", 28, 28, 27.976927100, 0, 18, 0, {{ - 2, - }, - {3, 5}, - { - 4, - }, - { - 3, - }, - { - 2, - }}}, - {"P", 31, 31, 30.973762000, 0, 21, 0, {{ - 1, - 3, - 5, - 7, - }, - { - 2, - 4, - 6, - }, - { - 3, - 5, - }, - { - 4, - }, - { - 3, - }}}, - {"S", 32, 32, 31.972070700, 0, 25, 0, {{ - 0, - }, - { - 1, - 3, - 5, - 7, - }, - {2, 4, 6}, - { - 3, - 5, - }, - { - 4, - }}}, - {"Cl", 35, 35, 34.968852730, 0, 30, 0, {{ - 0, - }, - { - 0, - }, - {1, 3, 5, 7}, - {2, 4, 6}, - { - 3, - 5, - }}}, - {"Ar", 40, 40, 39.962400000, 0, 0, 0, {{ - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }}}, - {"K", 39, 39, 38.963700000, MolInOrg1, 8, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"Ca", 40, 40, 39.962600000, MolInOrg1, 10, 0, {{ - 0, - }, - { - 0, - }, - { - 2, - }, - { - 1, - }, - { - 0, - }}}, - {"Sc", 45, 45, 44.955910000, MolInOrg1, 13, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Ti", 48, 48, 47.947950000, MolInOrg2, 15, 1, {{ - 0, - }, - { - 0, - }, - {3, 4}, - { - 0, - }, - { - 0, - }}}, - {"V", 51, 51, 50.943960000, MolInOrg4, 16, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - 4, - 5, - }, - { - 0, - }, - { - 0, - }}}, - {"Cr", 52, 52, 51.940500000, MolInOrg2, 16, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - 6, - }, - { - 0, - }, - { - 0, - }}}, - {"Mn", 55, 55, 54.938050000, MolInOrg1, 15, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - 4, - 6, - 7, - }, - { - 0, - }, - { - 0, - }}}, - {"Fe", 56, 56, 55.934900000, MolInOrg2, 18, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - 4, - 6, - }, - { - 0, - }, - { - 0, - }}}, - {"Co", 59, 59, 58.933200000, MolInOrg2, 18, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Ni", 59, 58, 57.935300000, MolInOrg1, 18, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Cu", 64, 63, 62.929600000, MolInOrg2, 19, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - 2, - }, - { - 0, - }, - { - 0, - }}}, - {"Zn", 65, 64, 63.929147000, MolInOrg1, 16, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - }, - { - 0, - }, - { - 0, - }}}, - {"Ga", 70, 69, 68.925600000, MolInOrg1, 18, 0, {{ - 3, - 5, - }, - { - 4, - }, - { - 3, - }, - { - 0, - }, - { - 1, - }}}, - {"Ge", 73, 74, 73.921177400, 0, 18, 0, {{ - 2, - 4, - 6, - }, - { - 3, - 5, - }, - { - 4, - }, - { - 3, - }, - { - 0, - }}}, - {"As", 75, 75, 74.921594200, 0, 20, 0, {{ - 1, - 3, - 5, - 7, - }, - { - 2, - 4, - 6, - }, - { - 3, - 5, - }, - { - 4, - }, - { - 3, - }}}, - {"Se", 79, 80, 79.916519600, 0, 24, 0, {{ - 0, - }, - { - 1, - 3, - 5, - 7, - }, - { - 2, - 4, - 6, - }, - { - 3, - 5, - }, - { - 4, - }}}, - {"Br", 80, 79, 78.918336100, 0, 28, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - 3, - 5, - 7, - }, - { - 2, - 4, - 6, - }, - { - 3, - 5, - }}}, - {"Kr", 84, 84, 83.911500000, 0, 0, 0, {{ - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }}}, - {"Rb", 85, 85, 84.911800000, MolInOrg1, 8, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"Sr", 88, 88, 87.905600000, MolInOrg1, 10, 0, {{ - 0, - }, - { - 0, - }, - { - 2, - }, - { - 1, - }, - { - 0, - }}}, - {"Y", 89, 89, 88.905860000, MolInOrg1, 12, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Zr", 91, 90, 89.904700000, MolInOrg1, 14, 1, {{ - 0, - }, - { - 0, - }, - { - 4, - }, - { - 0, - }, - { - 0, - }}}, - {"Nb", 93, 93, 92.906400000, MolInOrg2, 16, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 5, - }, - { - 0, - }, - { - 0, - }}}, - {"Mo", 96, 98, 97.905400000, MolInOrg4, 18, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - 5, - 6, - }, - { - 0, - }, - { - 0, - }}}, - {"Tc", 98, 98, 97.907200000, MolInOrg1, 19, 1, {{ - 0, - }, - { - 0, - }, - { - 7, - }, - { - 0, - }, - { - 0, - }}}, - {"Ru", 101, 102, 101.904300000, MolInOrg2, 22, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - 4, - 6, - }, - { - 0, - }, - { - 0, - }}}, - {"Rh", 103, 103, 102.905500000, MolInOrg2, 22, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - 4, - }, - { - 0, - }, - { - 0, - }}}, - {"Pd", 106, 106, 105.903500000, MolInOrg1, 22, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 4, - }, - { - 0, - }, - { - 0, - }}}, - {"Ag", 108, 107, 106.905100000, MolInOrg1, 19, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"Cd", 112, 114, 113.903400000, MolInOrg1, 17, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - }, - { - 0, - }, - { - 0, - }}}, - {"In", 115, 115, 114.903900000, MolInOrg1, 17, 0, {{ - 3, - 5, - }, - { - 2, - 4, - }, - { - 3, - }, - { - 0, - }, - { - 1, - }}}, - {"Sn", 119, 120, 119.902200000, MolInOrg2, 18, 0, {{ - 2, - 4, - 6, - }, - {3, 5}, - { - 2, - 4, - }, - { - 3, - }, - { - 0, - }}}, - {"Sb", 122, 121, 120.903800000, MolInOrg2, 19, 0, {{ - 1, - 3, - 5, - 7, - }, - { - 2, - 4, - 6, - }, - { - 3, - 5, - }, - { - 2, - 4, - }, - { - 3, - }}}, - {"Te", 128, 130, 129.906200000, 0, 21, 0, {{ - 0, - }, - { - 1, - 3, - 5, - 7, - }, - { - 2, - 4, - 6, - }, - { - 3, - 5, - }, - { - 2, - 4, - }}}, - {"I", 127, 127, 126.904500000, 0, 25, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - 3, - 5, - 7, - }, - {2, 4, 6}, - { - 3, - 5, - }}}, - {"Xe", 131, 132, 131.904100000, 0, 0, 0, {{ - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }}}, - {"Cs", 133, 133, 132.905430000, MolInOrg1, 7, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"Ba", 137, 138, 137.905200000, MolInOrg1, 9, 0, {{ - 0, - }, - { - 0, - }, - { - 2, - }, - { - 1, - }, - { - 0, - }}}, - {"La", 139, 139, 138.906360000, MolInOrg1, 11, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Ce", 140, 140, 139.905400000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - }, - { - 0, - }, - { - 0, - }}}, - {"Pr", 141, 141, 140.907660000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - }, - { - 0, - }, - { - 0, - }}}, - {"Nd", 144, 142, 141.907719000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Pm", 145, 145, 144.912800000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Sm", 150, 152, 151.919700000, MolInOrg2, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Eu", 152, 153, 152.921200000, MolInOrg2, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Gd", 157, 158, 157.924099000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Tb", 159, 159, 158.925350000, MolInOrg2, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - }, - { - 0, - }, - { - 0, - }}}, - {"Dy", 163, 164, 163.929200000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, /* mw rounding uncertain */ - {"Ho", 165, 165, 164.930300000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Er", 167, 166, 165.930300000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Tm", 169, 169, 168.934230000, MolInOrg2, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Yb", 173, 174, 173.938900000, MolInOrg2, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Lu", 175, 175, 174.940800000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Hf", 178, 180, 179.946600000, MolInOrg1, 13, 1, {{ - 0, - }, - { - 0, - }, - { - 4, - }, - { - 0, - }, - { - 0, - }}}, - {"Ta", 181, 181, 180.948010000, MolInOrg1, 15, 1, {{ - 0, - }, - { - 0, - }, - { - 5, - }, - { - 0, - }, - { - 0, - }}}, - {"W", 184, 184, 183.951000000, MolInOrg4, 17, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - 5, - 6, - }, - { - 0, - }, - { - 0, - }}}, - {"Re", 186, 187, 186.955800000, MolInOrg4, 19, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 4, - 6, - 7, - }, - { - 0, - }, - { - 0, - }}}, - {"Os", 190, 192, 191.961500000, MolInOrg3, 22, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - 4, - 6, - }, - { - 0, - }, - { - 0, - }}}, - {"Ir", 192, 193, 192.962900000, MolInOrg2, 22, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 3, - 4, - 6, - }, - { - 0, - }, - { - 0, - }}}, - {"Pt", 195, 195, 194.964800000, MolInOrg1, 22, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - 4, - }, - { - 0, - }, - { - 0, - }}}, - {"Au", 197, 197, 196.966560000, MolInOrg2, 24, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Hg", 201, 202, 201.970617000, MolInOrg2, 19, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - 2, - }, - { - 0, - }, - { - 0, - }}}, - {"Tl", 204, 205, 204.974400000, MolInOrg1, 18, 0, {{ - 3, - 5, - }, - { - 2, - 4, - }, - { - 1, - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Pb", 207, 208, 207.976627000, MolInOrg1, 18, 0, {{ - 2, - 4, - 6, - }, - {3, 5}, - { - 2, - 4, - }, - { - 3, - }, - { - 0, - }}}, - {"Bi", 209, 209, 208.980390000, MolInOrg1, 19, 0, {{ - 1, - 3, - 5, - 7, - }, - { - 2, - 4, - 6, - }, - { - 3, - 5, - }, - { - 2, - 4, - }, - { - 3, - }}}, - {"Po", 209, 209, 208.982400000, MolInOrg2, 20, 0, {{ - 0, - }, - { - 1, - 3, - 5, - 7, - }, - { - 2, - 4, - 6, - }, - { - 3, - 5, - }, - { - 2, - 4, - }}}, - {"At", 210, 210, 209.987100000, 0, 22, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - 3, - 5, - 7, - }, - {2, 4, 6}, - { - 3, - 5, - }}}, - {"Rn", 222, 222, 222.017500000, 0, 0, 0, {{ - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }}}, - {"Fr", 223, 223, 223.019700000, MolInOrg1, 0, 0, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"Ra", 226, 226, 226.025410000, MolInOrg1, 0, 0, {{ - 0, - }, - { - 0, - }, - { - 2, - }, - { - 1, - }, - { - 0, - }}}, - {"Ac", 227, 227, 227.027750000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Th", 232, 232, 232.038050000, MolInOrg2, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - }, - { - 0, - }, - { - 0, - }}}, - {"Pa", 231, 231, 231.035880000, MolInOrg3, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - 5, - }, - { - 0, - }, - { - 0, - }}}, - {"U", 238, 238, 238.050790000, MolInOrg4, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - 5, - 6, - }, - { - 0, - }, - { - 0, - }}}, - {"Np", 237, 237, 237.048170000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - 5, - 6, - }, - { - 0, - }, - { - 0, - }}}, - {"Pu", 244, 244, 244.064200000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - 5, - 6, - }, - { - 0, - }, - { - 0, - }}}, - {"Am", 243, 243, 243.061370000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - 5, - 6, - }, - { - 0, - }, - { - 0, - }}}, - {"Cm", 247, 247, 247.070300000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Bk", 247, 247, 247.070300000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - 4, - }, - { - 0, - }, - { - 0, - }}}, - {"Cf", 251, 251, 251.079600000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Es", 252, 252, 252.082800000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Fm", 257, 257, 257.095100000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Md", 258, 258, 258.098600000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"No", 259, 259, 259.100900000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"Lr", 260, 260, 260.105400000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"Rf", 261, 261, 261.108700000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - - /* - The elements below were added after v. 1.03. - When available, the mass is given for isotope with the longest half-life. - Standard valences given here are just placeholders. - v. 1.04: added elements 105-112. - Ref.: M. E. WIESER AND T. B. COPLEN. - Atomic weights of the elements 2009 (IUPAC Technical Report). - Pure Appl. Chem., Vol. 83, No. 2, pp. 359-396, 2011. - v. 1.05: added elements 114 and 116; - updated data for elements 105-112. - Ref.: J. Meija, T.B. Coplen, M.Berglund et al. - Atomic weights of the elements 2013 (IUPAC Technical Report). - Pure Appl. Chem., Vol. 88, No. 3, pp. 265-291, 2016. - added elements 113, 115, 117, and 118, according to IUPAC provisional recommendations: - Ref.: L. Ohrstrom, J. Reedijk. - Names and Symbols of the Elements with Atomic Numbers 113, 115, 117 and 118. - Pure Appl. Chem., May 1, 2016, Manuscript ID PAC-REC-16-05-01 - http://iupac.org/cms/wp-content/uploads/2016/06/names-and-symbols-of-elements.pdf - */ - - /* 105 dubnium Db ? Like: Ta */ - {"Db", 270, 270, 270.131000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 106 seaborgium Sg ? Like: W */ - {"Sg", 269, 269, 269.129000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 107 bohrium Bh ? Like: Re */ - {"Bh", 270, 270, 270.133000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 108 hassium Hs ? Like: Os */ - {"Hs", 270, 270, 270.134000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 109 meitnerium Mt ? Like: Ir */ - {"Mt", 278, 278, 278.156000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 110 darmstadtium Ds ? Like: Pt */ - {"Ds", 281, 281, 281.165000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 111 roentgenium Rg ? Like: Au */ - {"Rg", 281, 281, 281.166000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 112 copernicium Cn ? Like: Hg */ - {"Cn", 285, 285, 285.177000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 113 nihonium Nh ? Like: ? */ - {"Nh", 278, 278, 278.000000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 114 flerovium Fl ? Like: Pb */ - {"Fl", 289, 289, 289.190000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 115 moscovium Mc ? Like: ? */ - {"Mc", 289, 289, 289.000000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 116 livermorium Lv ? Like: Po */ - {"Lv", 293, 293, 293.204000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 117 tennessine Ts ? Like: ? */ - {"Ts", 297, 297, 297.000000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* 118 oganesson Og ? Like: ? */ - {"Og", 294, 294, 294.000000000, MolInOrg1, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - /* End of added in v. 1.04 - 1.05 */ - {"Zy", 0, 0, 0.000000000, 0, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"Zz", 0, 0, 0.000000000, 0, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, -#ifdef INCHI_ZFRAG - {"Zu", 0, 0, 0.000000000, 0, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - }, - { - 0, - }, - { - 0, - }}}, - {"Zv", 0, 0, 0.000000000, 0, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 2, - }, - { - 0, - }, - { - 0, - }}}, - {"Zw", 0, 0, 0.000000000, 0, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 3, - }, - { - 0, - }, - { - 0, - }}}, - {"Zx", 0, 0, 0.000000000, 0, 0, 1, {{ - 0, - }, - { - 0, - }, - { - 1, - 2, - }, - { - 0, - }, - { - 0, - }}}, -#endif - - {"", 0, 0, 0.000000000, 0, 0, 0, {{ - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }, - { - 0, - }}}, +{ + /* avg norm El No -------- Valence(s) of an ion or neutral atom -------------*/ + /* mw mass exact mw type neg H -2 -1 0 +1 +2 */ + { "H", 1, 1, 1.007825035, 0 , 21, 0, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "D", 2, 2, 2.014101778, 0 , 21, 0, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "T", 3, 3, 3.016049268, 0 , 21, 0, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "He", 4, 4, 4.002600000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, + { "Li", 7, 7, 7.016000000, MolInOrg1, 10, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Be", 9, 9, 9.012180000, MolInOrg1, 15, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "B", 11, 11, 11.009300000, 0 , 20, 0, {{3,}, {4,}, {3,}, {2,}, {1,} }}, + { "C", 12, 12, 12.000000000, 0 , 25, 0, {{2,}, {3,}, {4,}, {3,}, {2,} }}, + { "N", 14, 14, 14.003074000, 0 , 30, 0, {{1,}, {2,}, {3,5,}, {4,}, {3,} }}, + { "O", 16, 16, 15.994914630, 0 , 35, 0, {{0,}, {1,}, {2,}, {3,5,}, {4,} }}, + { "F", 19, 19, 18.998403220, 0 , 40, 0, {{0,}, {0,}, {1,}, {2,}, {3,5,} }}, + { "Ne", 20, 20, 19.992440000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, + { "Na", 23, 23, 22.989770000, MolInOrg1, 9, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Mg", 24, 24, 23.985000000, MolInOrg1, 12, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "Al", 27, 27, 26.981540000, MolInOrg1, 15, 1, {{3,5,}, {4,}, {3,}, {2,}, {1,} }}, + { "Si", 28, 28, 27.976927100, 0 , 18, 0, {{2,}, {3,5,}, {4,}, {3,}, {2,} }}, + { "P", 31, 31, 30.973762000, 0 , 21, 0, {{1,3,5,7,}, {2,4,6,}, {3,5,}, {4,}, {3,} }}, + { "S", 32, 32, 31.972070700, 0 , 25, 0, {{0,}, {1,3,5,7,}, {2,4,6,}, {3,5,}, {4,} }}, + { "Cl", 35, 35, 34.968852730, 0 , 30, 0, {{0,}, {0,}, {1,3,5,7,}, {2,4,6,}, {3,5,} }}, + { "Ar", 40, 40, 39.962400000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, + { "K", 39, 39, 38.963700000, MolInOrg1, 8, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Ca", 40, 40, 39.962600000, MolInOrg1, 10, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "Sc", 45, 45, 44.955910000, MolInOrg1, 13, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Ti", 48, 48, 47.947950000, MolInOrg2, 15, 1, {{0,}, {0,}, {3,4,}, {0,}, {0,} }}, + { "V", 51, 51, 50.943960000, MolInOrg4, 16, 1, {{0,}, {0,}, {2,3,4,5,}, {0,}, {0,} }}, + { "Cr", 52, 52, 51.940500000, MolInOrg2, 16, 1, {{0,}, {0,}, {2,3,6,}, {0,}, {0,} }}, + { "Mn", 55, 55, 54.938050000, MolInOrg1, 15, 1, {{0,}, {0,}, {2,3,4,6,7,},{0,}, {0,} }}, + { "Fe", 56, 56, 55.934900000, MolInOrg2, 18, 1, {{0,}, {0,}, {2,3,4,6,}, {0,}, {0,} }}, + { "Co", 59, 59, 58.933200000, MolInOrg2, 18, 1, {{0,}, {0,}, {2,3,}, {0,}, {0,} }}, + { "Ni", 59, 58, 57.935300000, MolInOrg1, 18, 1, {{0,}, {0,}, {2,3,}, {0,}, {0,} }}, + { "Cu", 64, 63, 62.929600000, MolInOrg2, 19, 1, {{0,}, {0,}, {1,2,}, {0,}, {0,} }}, + { "Zn", 65, 64, 63.929147000, MolInOrg1, 16, 1, {{0,}, {0,}, {2,}, {0,}, {0,} }}, + { "Ga", 70, 69, 68.925600000, MolInOrg1, 18, 1, {{3,5,}, {4,}, {3,}, {0,}, {1,} }}, + { "Ge", 73, 74, 73.921177400, 0 , 18, 0, {{2,4,6,}, {3,5,}, {4,}, {3,}, {0,} }}, + { "As", 75, 75, 74.921594200, 0 , 20, 0, {{1,3,5,7,}, {2,4,6,}, {3,5,}, {4,}, {3,} }}, + { "Se", 79, 80, 79.916519600, 0 , 24, 0, {{0,}, {1,3,5,7,}, {2,4,6,}, {3,5,}, {4,} }}, + { "Br", 80, 79, 78.918336100, 0 , 28, 0, {{0,}, {0,}, {1,3,5,7,}, {2,4,6,}, {3,5,} }}, + { "Kr", 84, 84, 83.911500000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, + { "Rb", 85, 85, 84.911800000, MolInOrg1, 8, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Sr", 88, 88, 87.905600000, MolInOrg1, 10, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "Y", 89, 89, 88.905860000, MolInOrg1, 12, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Zr", 91, 90, 89.904700000, MolInOrg1, 14, 1, {{0,}, {0,}, {4,}, {0,}, {0,} }}, + { "Nb", 93, 93, 92.906400000, MolInOrg2, 16, 1, {{0,}, {0,}, {3,5,}, {0,}, {0,} }}, + { "Mo", 96, 98, 97.905400000, MolInOrg4, 18, 1, {{0,}, {0,}, {3,4,5,6,}, {0,}, {0,} }}, + { "Tc", 98, 98, 97.907200000, MolInOrg1, 19, 1, {{0,}, {0,}, {7,}, {0,}, {0,} }}, + { "Ru", 101, 102, 101.904300000, MolInOrg2, 22, 1, {{0,}, {0,}, {2,3,4,6,}, {0,}, {0,} }}, + { "Rh", 103, 103, 102.905500000, MolInOrg2, 22, 1, {{0,}, {0,}, {2,3,4,}, {0,}, {0,} }}, + { "Pd", 106, 106, 105.903500000, MolInOrg1, 22, 1, {{0,}, {0,}, {2,4,}, {0,}, {0,} }}, + { "Ag", 108, 107, 106.905100000, MolInOrg1, 19, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Cd", 112, 114, 113.903400000, MolInOrg1, 17, 1, {{0,}, {0,}, {2,}, {0,}, {0,} }}, + { "In", 115, 115, 114.903900000, MolInOrg1, 17, 1, {{3,5,}, {2,4,}, {3,}, {0,}, {1,} }}, + { "Sn", 119, 120, 119.902200000, MolInOrg2, 18, 1, {{2,4,6,}, {3,5,}, {2,4,}, {3,}, {0,} }}, + { "Sb", 122, 121, 120.903800000, MolInOrg2, 19, 0, {{1,3,5,7,}, {2,4,6,}, {3,5,}, {2,4,}, {3,} }}, + { "Te", 128, 130, 129.906200000, 0 , 21, 0, {{0,}, {1,3,5,7,}, {2,4,6,}, {3,5,}, {2,4,} }}, + { "I", 127, 127, 126.904500000, 0 , 25, 0, {{0,}, {0,}, {1,3,5,7,}, {2,4,6,}, {3,5,} }}, + { "Xe", 131, 132, 131.904100000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, + { "Cs", 133, 133, 132.905430000, MolInOrg1, 7, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Ba", 137, 138, 137.905200000, MolInOrg1, 9, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "La", 139, 139, 138.906360000, MolInOrg1, 11, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Ce", 140, 140, 139.905400000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,4,}, {0,}, {0,} }}, + { "Pr", 141, 141, 140.907660000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,4,}, {0,}, {0,} }}, + { "Nd", 144, 142, 141.907719000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Pm", 145, 145, 144.912800000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Sm", 150, 152, 151.919700000, MolInOrg2, 0, 1, {{0,}, {0,}, {2,3,}, {0,}, {0,} }}, + { "Eu", 152, 153, 152.921200000, MolInOrg2, 0, 1, {{0,}, {0,}, {2,3,}, {0,}, {0,} }}, + { "Gd", 157, 158, 157.924099000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Tb", 159, 159, 158.925350000, MolInOrg2, 0, 1, {{0,}, {0,}, {3,4,}, {0,}, {0,} }}, + { "Dy", 163, 164, 163.929200000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Ho", 165, 165, 164.930300000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Er", 167, 166, 165.930300000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Tm", 169, 169, 168.934230000, MolInOrg2, 0, 1, {{0,}, {0,}, {2,3,}, {0,}, {0,} }}, + { "Yb", 173, 174, 173.938900000, MolInOrg2, 0, 1, {{0,}, {0,}, {2,3,}, {0,}, {0,} }}, + { "Lu", 175, 175, 174.940800000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Hf", 178, 180, 179.946600000, MolInOrg1, 13, 1, {{0,}, {0,}, {4,}, {0,}, {0,} }}, + { "Ta", 181, 181, 180.948010000, MolInOrg1, 15, 1, {{0,}, {0,}, {5,}, {0,}, {0,} }}, + { "W", 184, 184, 183.951000000, MolInOrg4, 17, 1, {{0,}, {0,}, {3,4,5,6,}, {0,}, {0,} }}, + { "Re", 186, 187, 186.955800000, MolInOrg4, 19, 1, {{0,}, {0,}, {2,4,6,7,}, {0,}, {0,} }}, + { "Os", 190, 192, 191.961500000, MolInOrg3, 22, 1, {{0,}, {0,}, {2,3,4,6,}, {0,}, {0,} }}, + { "Ir", 192, 193, 192.962900000, MolInOrg2, 22, 1, {{0,}, {0,}, {2,3,4,6,}, {0,}, {0,} }}, + { "Pt", 195, 195, 194.964800000, MolInOrg1, 22, 1, {{0,}, {0,}, {2,4,}, {0,}, {0,} }}, + { "Au", 197, 197, 196.966560000, MolInOrg2, 24, 1, {{0,}, {0,}, {1,3,}, {0,}, {0,} }}, + { "Hg", 201, 202, 201.970617000, MolInOrg2, 19, 1, {{0,}, {0,}, {1,2,}, {0,}, {0,} }}, + { "Tl", 204, 205, 204.974400000, MolInOrg1, 18, 1, {{3,5,}, {2,4,}, {1,3,}, {0,}, {0,} }}, + { "Pb", 207, 208, 207.976627000, MolInOrg1, 18, 1, {{2,4,6,}, {3,5,}, {2,4,}, {3,}, {0,} }}, + { "Bi", 209, 209, 208.980390000, MolInOrg1, 19, 1, {{1,3,5,7,}, {2,4,6,}, {3,5,}, {2,4,}, {3,} }}, + { "Po", 209, 209, 208.982400000, MolInOrg2, 20, 1, {{0,}, {1,3,5,7,}, {2,4,6,}, {3,5,}, {2,4,} }}, + { "At", 210, 210, 209.987100000, 0 , 22, 0, {{0,}, {0,}, {1,3,5,7,}, {2,4,6,}, {3,5,} }}, + { "Rn", 222, 222, 222.017500000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, + { "Fr", 223, 223, 223.019700000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Ra", 226, 226, 226.025410000, MolInOrg1, 0, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "Ac", 227, 227, 227.027750000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Th", 232, 232, 232.038050000, MolInOrg2, 0, 1, {{0,}, {0,}, {3,4,}, {0,}, {0,} }}, + { "Pa", 231, 231, 231.035880000, MolInOrg3, 0, 1, {{0,}, {0,}, {3,4,5,}, {0,}, {0,} }}, + { "U", 238, 238, 238.050790000, MolInOrg4, 0, 1, {{0,}, {0,}, {3,4,5,6,}, {0,}, {0,} }}, + { "Np", 237, 237, 237.048170000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,4,5,6,}, {0,}, {0,} }}, + { "Pu", 244, 244, 244.064200000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,4,5,6,}, {0,}, {0,} }}, + { "Am", 243, 243, 243.061370000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,4,5,6,}, {0,}, {0,} }}, + { "Cm", 247, 247, 247.070300000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Bk", 247, 247, 247.070300000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,4,}, {0,}, {0,} }}, + { "Cf", 251, 251, 251.079600000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Es", 252, 252, 252.082800000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Fm", 257, 257, 257.095100000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Md", 258, 258, 258.098600000, MolInOrg1, 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "No", 259, 259, 259.100900000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Lr", 260, 260, 260.105400000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Rf", 261, 261, 261.108700000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Db", 270, 270, 270.131000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Sg", 269, 269, 269.129000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Bh", 270, 270, 270.133000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Hs", 270, 270, 270.134000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Mt", 278, 278, 278.156000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Ds", 281, 281, 281.165000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Rg", 281, 281, 281.166000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Cn", 285, 285, 285.177000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Nh", 278, 278, 278.000000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Fl", 289, 289, 289.190000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Mc", 289, 289, 289.000000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Lv", 293, 293, 293.204000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Ts", 297, 297, 297.000000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Og", 294, 294, 294.000000000, MolInOrg1, 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Zy", 0, 0, 0.000000000, 0 , 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Zz", 0, 0, 0.000000000, 0 , 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Zu", 0, 0, 0.000000000, 0 , 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Zv", 0, 0, 0.000000000, 0 , 0, 1, {{0,}, {0,}, {2,}, {0,}, {0,} }}, + { "Zw", 0, 0, 0.000000000, 0 , 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, + { "Zx", 0, 0, 0.000000000, 0 , 0, 1, {{0,}, {0,}, {1,2,}, {0,}, {0,} }}, + { "", 0, 0, 0.000000000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, }; /**************************************************************************** diff --git a/INCHI-1-SRC/INCHI_BASE/src/util.c b/INCHI-1-SRC/INCHI_BASE/src/util.c index 011884b5..90d3395e 100644 --- a/INCHI-1-SRC/INCHI_BASE/src/util.c +++ b/INCHI-1-SRC/INCHI_BASE/src/util.c @@ -75,24 +75,24 @@ const ELDATA ElData[] = { "D", 2, 2, 2.014101778, 0 , 21, 0, {{0,}, {0,}, {1,}, {0,}, {0,} }}, { "T", 3, 3, 3.016049268, 0 , 21, 0, {{0,}, {0,}, {1,}, {0,}, {0,} }}, { "He", 4, 4, 4.002600000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, - { "Li", 7, 7, 7.016000000, METAL , 10, 0, {{0,}, {0,}, {1,}, {0,}, {0,} }}, - { "Be", 9, 9, 9.012180000, METAL , 15, 0, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "Li", 7, 7, 7.016000000, METAL , 10, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Be", 9, 9, 9.012180000, METAL , 15, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, { "B", 11, 11, 11.009300000, 0 , 20, 0, {{3,}, {4,}, {3,}, {2,}, {1,} }}, { "C", 12, 12, 12.000000000, 0 , 25, 0, {{2,}, {3,}, {4,}, {3,}, {2,} }}, { "N", 14, 14, 14.003074000, 0 , 30, 0, {{1,}, {2,}, {3,5}, {4,}, {3,} }}, { "O", 16, 16, 15.994914630, 0 , 35, 0, {{0,}, {1,}, {2,}, {3,5,}, {4,} }}, { "F", 19, 19, 18.998403220, 0 , 40, 0, {{0,}, {0,}, {1,}, {2,}, {3,5} }}, { "Ne", 20, 20, 19.992440000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, - { "Na", 23, 23, 22.989770000, METAL , 9, 0, {{0,}, {0,}, {1,}, {0,}, {0,} }}, - { "Mg", 24, 24, 23.985000000, METAL , 12, 0, {{0,}, {0,}, {2,}, {1,}, {0,} }}, - { "Al", 27, 27, 26.981540000, METAL , 15, 0, {{3,5,}, {4,}, {3,}, {2,}, {1,} }}, + { "Na", 23, 23, 22.989770000, METAL , 9, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Mg", 24, 24, 23.985000000, METAL , 12, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "Al", 27, 27, 26.981540000, METAL , 15, 1, {{3,5,}, {4,}, {3,}, {2,}, {1,} }}, { "Si", 28, 28, 27.976927100, 0 , 18, 0, {{2,}, {3,5}, {4,}, {3,}, {2,} }}, { "P", 31, 31, 30.973762000, 0 , 21, 0, {{1,3,5,7,}, {2,4,6,}, {3,5,}, {4,}, {3,} }}, { "S", 32, 32, 31.972070700, 0 , 25, 0, {{0,}, {1,3,5,7,}, {2,4,6}, {3,5,}, {4,} }}, { "Cl", 35, 35, 34.968852730, 0 , 30, 0, {{0,}, {0,}, {1,3,5,7}, {2,4,6}, {3,5,} }}, { "Ar", 40, 40, 39.962400000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, - { "K", 39, 39, 38.963700000, METAL , 8, 0, {{0,}, {0,}, {1,}, {0,}, {0,} }}, - { "Ca", 40, 40, 39.962600000, METAL , 10, 0, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "K", 39, 39, 38.963700000, METAL , 8, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Ca", 40, 40, 39.962600000, METAL , 10, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, { "Sc", 45, 45, 44.955910000, METAL , 13, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, { "Ti", 48, 48, 47.947950000, METAL , 15, 1, {{0,}, {0,}, {3,4}, {0,}, {0,} }}, { "V", 51, 51, 50.943960000, METAL , 16, 1, {{0,}, {0,}, {2,3,4,5,}, {0,}, {0,} }}, @@ -103,14 +103,14 @@ const ELDATA ElData[] = { "Ni", 59, 58, 57.935300000, METAL2, 18, 1, {{0,}, {0,}, {2,3,}, {0,}, {0,} }}, { "Cu", 64, 63, 62.929600000, METAL , 19, 1, {{0,}, {0,}, {1,2,}, {0,}, {0,} }}, { "Zn", 65, 64, 63.929147000, METAL , 16, 1, {{0,}, {0,}, {2,}, {0,}, {0,} }}, - { "Ga", 70, 69, 68.925600000, METAL , 18, 0, {{3,5,}, {4,}, {3,}, {0,}, {1,} }}, + { "Ga", 70, 69, 68.925600000, METAL , 18, 1, {{3,5,}, {4,}, {3,}, {0,}, {1,} }}, { "Ge", 73, 74, 73.921177400, 0 , 18, 0, {{2,4,6,}, {3,5,}, {4,}, {3,}, {0,} }}, { "As", 75, 75, 74.921594200, 0 , 20, 0, {{1,3,5,7,}, {2,4,6,}, {3,5,}, {4,}, {3,} }}, { "Se", 79, 80, 79.916519600, 0 , 24, 0, {{0,}, {1,3,5,7,}, {2,4,6,}, {3,5,}, {4,} }}, { "Br", 80, 79, 78.918336100, 0 , 28, 0, {{0,}, {0,}, {1,3,5,7,}, {2,4,6,}, {3,5,} }}, { "Kr", 84, 84, 83.911500000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, - { "Rb", 85, 85, 84.911800000, METAL , 8, 0, {{0,}, {0,}, {1,}, {0,}, {0,} }}, - { "Sr", 88, 88, 87.905600000, METAL , 10, 0, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "Rb", 85, 85, 84.911800000, METAL , 8, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Sr", 88, 88, 87.905600000, METAL , 10, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, { "Y", 89, 89, 88.905860000, METAL , 12, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, { "Zr", 91, 90, 89.904700000, METAL , 14, 1, {{0,}, {0,}, {4,}, {0,}, {0,} }}, { "Nb", 93, 93, 92.906400000, METAL , 16, 1, {{0,}, {0,}, {3,5,}, {0,}, {0,} }}, @@ -121,14 +121,14 @@ const ELDATA ElData[] = { "Pd", 106, 106, 105.903500000, METAL , 22, 1, {{0,}, {0,}, {2,4,}, {0,}, {0,} }}, { "Ag", 108, 107, 106.905100000, METAL , 19, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, { "Cd", 112, 114, 113.903400000, METAL , 17, 1, {{0,}, {0,}, {2,}, {0,}, {0,} }}, - { "In", 115, 115, 114.903900000, METAL , 17, 0, {{3,5,}, {2,4,}, {3,}, {0,}, {1,} }}, - { "Sn", 119, 120, 119.902200000, METAL2, 18, 0, {{2,4,6,}, {3,5}, {2,4,}, {3,}, {0,} }}, + { "In", 115, 115, 114.903900000, METAL , 17, 1, {{3,5,}, {2,4,}, {3,}, {0,}, {1,} }}, + { "Sn", 119, 120, 119.902200000, METAL2, 18, 1, {{2,4,6,}, {3,5}, {2,4,}, {3,}, {0,} }}, { "Sb", 122, 121, 120.903800000, METAL, 19, 0, {{1,3,5,7,}, {2,4,6,}, {3,5,}, {2,4,}, {3,} }}, { "Te", 128, 130, 129.906200000, 0 , 21, 0, {{0,}, {1,3,5,7,}, {2,4,6,}, {3,5,}, {2,4,} }}, { "I", 127, 127, 126.904500000, 0 , 25, 0, {{0,}, {0,}, {1,3,5,7,}, {2,4,6}, {3,5,} }}, { "Xe", 131, 132, 131.904100000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, - { "Cs", 133, 133, 132.905430000, METAL , 7, 0, {{0,}, {0,}, {1,}, {0,}, {0,} }}, - { "Ba", 137, 138, 137.905200000, METAL , 9, 0, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "Cs", 133, 133, 132.905430000, METAL , 7, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Ba", 137, 138, 137.905200000, METAL , 9, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, { "La", 139, 139, 138.906360000, METAL , 11, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, { "Ce", 140, 140, 139.905400000, METAL2, 0, 1, {{0,}, {0,}, {3,4,}, {0,}, {0,} }}, { "Pr", 141, 141, 140.907660000, METAL2, 0, 1, {{0,}, {0,}, {3,4,}, {0,}, {0,} }}, @@ -153,14 +153,14 @@ const ELDATA ElData[] = { "Pt", 195, 195, 194.964800000, METAL2, 22, 1, {{0,}, {0,}, {2,4,}, {0,}, {0,} }}, { "Au", 197, 197, 196.966560000, METAL , 24, 1, {{0,}, {0,}, {1,3,}, {0,}, {0,} }}, { "Hg", 201, 202, 201.970617000, METAL2, 19, 1, {{0,}, {0,}, {1,2,}, {0,}, {0,} }}, - { "Tl", 204, 205, 204.974400000, METAL2, 18, 0, {{3,5,}, {2,4,}, {1,3,}, {0,}, {0,} }}, - { "Pb", 207, 208, 207.976627000, METAL2, 18, 0, {{2,4,6,}, {3,5}, {2,4,}, {3,}, {0,} }}, - { "Bi", 209, 209, 208.980390000, METAL , 19, 0, {{1,3,5,7,}, {2,4,6,}, {3,5,}, {2,4,}, {3,} }}, - { "Po", 209, 209, 208.982400000, METAL2, 20, 0, {{0,}, {1,3,5,7,}, {2,4,6,}, {3,5,}, {2,4,} }}, + { "Tl", 204, 205, 204.974400000, METAL2, 18, 1, {{3,5,}, {2,4,}, {1,3,}, {0,}, {0,} }}, + { "Pb", 207, 208, 207.976627000, METAL2, 18, 1, {{2,4,6,}, {3,5}, {2,4,}, {3,}, {0,} }}, + { "Bi", 209, 209, 208.980390000, METAL , 19, 1, {{1,3,5,7,}, {2,4,6,}, {3,5,}, {2,4,}, {3,} }}, + { "Po", 209, 209, 208.982400000, METAL2, 20, 1, {{0,}, {1,3,5,7,}, {2,4,6,}, {3,5,}, {2,4,} }}, { "At", 210, 210, 209.987100000, 0 , 22, 0, {{0,}, {0,}, {1,3,5,7,}, {2,4,6}, {3,5,} }}, { "Rn", 222, 222, 222.017500000, 0 , 0, 0, {{0,}, {0,}, {0,}, {0,}, {0,} }}, - { "Fr", 223, 223, 223.019700000, METAL , 0, 0, {{0,}, {0,}, {1,}, {0,}, {0,} }}, - { "Ra", 226, 226, 226.025410000, METAL , 0, 0, {{0,}, {0,}, {2,}, {1,}, {0,} }}, + { "Fr", 223, 223, 223.019700000, METAL , 0, 1, {{0,}, {0,}, {1,}, {0,}, {0,} }}, + { "Ra", 226, 226, 226.025410000, METAL , 0, 1, {{0,}, {0,}, {2,}, {1,}, {0,} }}, { "Ac", 227, 227, 227.027750000, METAL , 0, 1, {{0,}, {0,}, {3,}, {0,}, {0,} }}, { "Th", 232, 232, 232.038050000, METAL2, 0, 1, {{0,}, {0,}, {3,4,}, {0,}, {0,} }}, { "Pa", 231, 231, 231.035880000, METAL2, 0, 1, {{0,}, {0,}, {3,4,5,}, {0,}, {0,} }}, diff --git a/INCHI-1-TEST/tests/test_unit/test_implicitHydrogen.cpp b/INCHI-1-TEST/tests/test_unit/test_implicitHydrogen.cpp new file mode 100644 index 00000000..4ed91b3f --- /dev/null +++ b/INCHI-1-TEST/tests/test_unit/test_implicitHydrogen.cpp @@ -0,0 +1,148 @@ +#include + +#include +#include + +extern "C" +{ +#include "../../../INCHI-1-SRC/INCHI_BASE/src/inchi_api.h" +#include "../../../INCHI-1-SRC/INCHI_BASE/src/mode.h" +} + +/* + * Whether InChI fills a bare atom's normal valence with implicit hydrogens is + * governed by the per-element bSkipAddingH flag in the default valence tables + * (ElData in util.c, mirrored by MolecularInorganicsArray in strutil.c). + * + * Only the non-metals, metalloids and noble gases (H/D/T, He, B, C, N, O, F, + * Ne, Si, P, S, Cl, Ar, Ge, As, Se, Br, Kr, Sb, Te, I, Xe, At, Rn) carry + * bSkipAddingH == 0 and therefore receive implicit H; every metal -- main + * group as well as transition -- is flagged to skip H addition, so a bare + * metal atom yields just the element with no attached hydrogens. + * + * These tests pin that behaviour down end-to-end by generating the standard + * InChI for a single, bond-free atom of each element. + */ + +namespace +{ + +struct SingleAtomCase +{ + const char* element; /* atom symbol as written in the molfile */ + const char* expected_inchi; /* expected standard InChI for the lone atom */ + int expected_ret = 0; /* MakeINCHIFromMolfileText return code */ + /* (1 when the saturated hydride disconnects) */ +}; + +/* Generate the standard InChI for one bond-free atom of `element` and assert + it equals `expected_inchi`. The molfile mirrors the minimal single-atom + V2000 layout used elsewhere in the suite. */ +void ExpectSingleAtomInChI(const char* element, const char* expected_inchi, + int expected_ret = 0) +{ + char molblock[256]; + snprintf(molblock, sizeof(molblock), + "\n" + " test\n" + "\n" + " 1 0 0 0 0 0 0 0 0 0999 V2000\n" + " 0.0000 0.0000 0.0000 %-3s 0 0 0 0 0 0 0 0 0 0 0 0\n" + "M END\n", + element); + + char options[] = ""; + inchi_Output output; + inchi_Output* poutput = &output; + memset(poutput, 0, sizeof(*poutput)); + + EXPECT_EQ(MakeINCHIFromMolfileText(molblock, options, poutput), expected_ret) + << "element: " << element; + EXPECT_STREQ(poutput->szInChI, expected_inchi) + << "element: " << element; + + FreeINCHI(poutput); +} + +void ExpectSingleAtomInChI(const SingleAtomCase& c) +{ + ExpectSingleAtomInChI(c.element, c.expected_inchi, c.expected_ret); +} + +} // namespace + +/* Main-group metals: now flagged bSkipAddingH, so no implicit H is added. + Previously these received their normal-valence H (e.g. Na -> "Na.H"). */ +TEST(test_implicitHydrogen, mainGroupMetals_skipImplicitH) +{ + const SingleAtomCase cases[] = { + /* alkali */ {"Li", "InChI=1S/Li"}, {"Na", "InChI=1S/Na"}, + {"K", "InChI=1S/K"}, {"Rb", "InChI=1S/Rb"}, + {"Cs", "InChI=1S/Cs"}, {"Fr", "InChI=1S/Fr"}, + /* alkaline earth */ {"Be", "InChI=1S/Be"}, {"Mg", "InChI=1S/Mg"}, + {"Ca", "InChI=1S/Ca"}, {"Sr", "InChI=1S/Sr"}, + {"Ba", "InChI=1S/Ba"}, {"Ra", "InChI=1S/Ra"}, + /* group 13 */ {"Al", "InChI=1S/Al"}, {"Ga", "InChI=1S/Ga"}, + {"In", "InChI=1S/In"}, {"Tl", "InChI=1S/Tl"}, + /* heavier p-block */ {"Sn", "InChI=1S/Sn"}, {"Pb", "InChI=1S/Pb"}, + {"Bi", "InChI=1S/Bi"}, {"Po", "InChI=1S/Po"}, + }; + + for (const auto& c : cases) + { + ExpectSingleAtomInChI(c); + } +} + +/* Transition / noble metals were always flagged to skip H addition; included + here as a control that their behaviour is unchanged. */ +TEST(test_implicitHydrogen, transitionMetals_skipImplicitH) +{ + const SingleAtomCase cases[] = { + {"Fe", "InChI=1S/Fe"}, {"Cu", "InChI=1S/Cu"}, {"Zn", "InChI=1S/Zn"}, + {"Pt", "InChI=1S/Pt"}, {"Au", "InChI=1S/Au"}, + }; + + for (const auto& c : cases) + { + ExpectSingleAtomInChI(c); + } +} + +/* Non-metals and metalloids keep bSkipAddingH == 0, so a bare atom is still + saturated to its normal valence with implicit H. Note Sb (valence 3) is + reported as the disconnected "Sb.3H". */ +TEST(test_implicitHydrogen, nonmetalsAndMetalloids_addImplicitH) +{ + const SingleAtomCase cases[] = { + {"B", "InChI=1S/BH3/h1H3"}, {"C", "InChI=1S/CH4/h1H4"}, + {"N", "InChI=1S/H3N/h1H3"}, {"O", "InChI=1S/H2O/h1H2"}, + {"F", "InChI=1S/FH/h1H"}, {"Si", "InChI=1S/H4Si/h1H4"}, + {"P", "InChI=1S/H3P/h1H3"}, {"S", "InChI=1S/H2S/h1H2"}, + {"Cl", "InChI=1S/ClH/h1H"}, {"Ge", "InChI=1S/GeH4/h1H4"}, + {"As", "InChI=1S/AsH3/h1H3"}, {"Se", "InChI=1S/H2Se/h1H2"}, + {"Br", "InChI=1S/BrH/h1H"}, {"Sb", "InChI=1S/Sb.3H", 1}, + {"Te", "InChI=1S/H2Te/h1H2"}, {"I", "InChI=1S/HI/h1H"}, + {"At", "InChI=1S/AtH/h1H"}, + }; + + for (const auto& c : cases) + { + ExpectSingleAtomInChI(c); + } +} + +/* Noble gases carry bSkipAddingH == 0 but have a zero normal valence, so no H + is added regardless -- confirming the flag never forces unwanted hydrogens. */ +TEST(test_implicitHydrogen, nobleGases_noImplicitH) +{ + const SingleAtomCase cases[] = { + {"He", "InChI=1S/He"}, {"Ne", "InChI=1S/Ne"}, {"Ar", "InChI=1S/Ar"}, + {"Kr", "InChI=1S/Kr"}, {"Xe", "InChI=1S/Xe"}, {"Rn", "InChI=1S/Rn"}, + }; + + for (const auto& c : cases) + { + ExpectSingleAtomInChI(c); + } +}