diff --git a/dev/dump_eppr78_parameters.py b/dev/dump_eppr78_parameters.py new file mode 100644 index 00000000..1b6dc179 --- /dev/null +++ b/dev/dump_eppr78_parameters.py @@ -0,0 +1,75 @@ +import os +import json +from itertools import combinations +from thermo import Chemical +from thermo.group_contribution.group_contribution_base import smarts_fragment_priority +from thermo.group_contribution.ppr78 import EPPR78_GROUPS_LIST, PPR78_kij +from chemicals.identifiers import dippr_compounds, sorted_CAS_key + +# Load DIPPR compounds +dippr_cmpds = dippr_compounds() +# Or just use the compounds used in making the mehod +dippr_cmpds = ['n-BUTANE', '2,2-DIMETHYLBUTANE', '2,3-DIMETHYLBUTANE', 'NEOPENTANE', 'ETHANE', 'n-HEXANE', 'ISOBUTANE', 'ISOPENTANE', 'METHANE', '2-METHYLPENTANE', '3-METHYLPENTANE', 'n-PENTANE', 'PROPANE', '2,2-DIMETHYLHEXANE', '2,3-DIMETHYLHEXANE', '2,4-DIMETHYLHEXANE', '2,5-DIMETHYLHEXANE', '3,3-DIMETHYLHEXANE', '3,4-DIMETHYLHEXANE', '2,2-DIMETHYLPENTANE', '2,3-DIMETHYLPENTANE', '2,4-DIMETHYLPENTANE', '3,3-DIMETHYLPENTANE', '3-ETHYLHEXANE', '3-ETHYLPENTANE', 'n-HEPTANE', '2-METHYL-3-ETHYLPENTANE', '3-METHYL-3-ETHYLPENTANE', '2-METHYLHEPTANE', '3-METHYLHEPTANE', '4-METHYLHEPTANE', '2-METHYLHEXANE', '3-METHYLHEXANE', 'n-OCTANE', '2,2,3,3-TETRAMETHYLBUTANE', '2,2,3-TRIMETHYLBUTANE', '2,2,3-TRIMETHYLPENTANE', '2,2,4-TRIMETHYLPENTANE', '2,3,3-TRIMETHYLPENTANE', '2,3,4-TRIMETHYLPENTANE', '3,3-DIETHYLPENTANE', '2,2-DIMETHYL-3-ETHYLPENTANE', '2,4-DIMETHYL-3-ETHYLPENTANE', '2,2-DIMETHYLHEPTANE', '2,6-DIMETHYLHEPTANE', '3-ETHYLHEPTANE', '2-METHYLOCTANE', '3-METHYLOCTANE', '4-METHYLOCTANE', 'n-NONANE', '2,2,3,3-TETRAMETHYLPENTANE', '2,2,3,4-TETRAMETHYLPENTANE', '2,2,4,4-TETRAMETHYLPENTANE', '2,3,3,4-TETRAMETHYLPENTANE', '2,2,5-TRIMETHYLHEXANE', '2,4,4-TRIMETHYLHEXANE', 'n-DECANE', '2-METHYLNONANE', '3-METHYLNONANE', '4-METHYLNONANE', '5-METHYLNONANE', '3,3,5-TRIMETHYLHEPTANE', '2,2,3,3-TETRAMETHYLHEXANE', '2,2-DIMETHYLOCTANE', '2,3-DIMETHYLOCTANE', '2,4-DIMETHYLOCTANE', '2,5-DIMETHYLOCTANE', '2,6-DIMETHYLOCTANE', '2,7-DIMETHYLOCTANE', 'n-DODECANE', 'n-TETRADECANE', 'n-TRIDECANE', 'n-UNDECANE', 'n-DOCOSANE', 'n-EICOSANE', 'n-HENEICOSANE', 'n-HEPTADECANE', 'n-HEXADECANE', 'n-NONADECANE', 'n-OCTADECANE', 'n-PENTADECANE', 'n-TETRACOSANE', 'n-TRICOSANE', 'n-PENTACOSANE', 'n-HEXACOSANE', 'n-HEPTACOSANE', 'n-OCTACOSANE', 'n-NONACOSANE', 'n-TRIACONTANE', 'SQUALANE', 'n-DOTRIACONTANE', 'n-HEXATRIACONTANE', '2,2,5,5-TETRAMETHYLHEXANE', '2,2,4,4,6,8,8-HEPTAMETHYLNONANE', '3-METHYLUNDECANE', 'CYCLOPROPANE', 'CYCLOBUTANE', 'n-BUTYLCYCLOPENTANE', 'CYCLOPENTANE', '1,1-DIMETHYLCYCLOPENTANE', 'cis-1,2-DIMETHYLCYCLOPENTANE', 'trans-1,2-DIMETHYLCYCLOPENTANE', 'cis-1,3-DIMETHYLCYCLOPENTANE', 'trans-1,3-DIMETHYLCYCLOPENTANE', 'ETHYLCYCLOPENTANE', 'ISOPROPYLCYCLOPENTANE', 'METHYLCYCLOPENTANE', '1-METHYL-1-ETHYLCYCLOPENTANE', 'n-PROPYLCYCLOPENTANE', 'ISOPROPYLCYCLOHEXANE', 'CYCLOHEXANE', 'n-PROPYLCYCLOHEXANE', 'n-BUTYLCYCLOHEXANE', 'sec-BUTYLCYCLOHEXANE', 'tert-BUTYLCYCLOHEXANE', '1,1-DIMETHYLCYCLOHEXANE', 'cis-1,2-DIMETHYLCYCLOHEXANE', 'trans-1,2-DIMETHYLCYCLOHEXANE', 'cis-1,3-DIMETHYLCYCLOHEXANE', 'trans-1,3-DIMETHYLCYCLOHEXANE', 'cis-1,4-DIMETHYLCYCLOHEXANE', 'trans-1,4-DIMETHYLCYCLOHEXANE', 'ETHYLCYCLOHEXANE', 'METHYLCYCLOHEXANE', '1-trans-3,5-TRIMETHYLCYCLOHEXANE', 'n-DECYLCYCLOHEXANE', 'CYCLOHEPTANE', 'CYCLOOCTANE', 'cis-DECAHYDRONAPHTHALENE', 'trans-DECAHYDRONAPHTHALENE', 'DIAMANTANE', 'alpha-PINENE', 'beta-PINENE', 'ADAMANTANE', 'BICYCLOHEXYL', '1,2,3,4-TETRAMETHYLCYCLOHEXANE', '1,1-DIETHYLCYCLOHEXANE', 'trans-1,4-DIETHYLCYCLOHEXANE', '1,3-DIMETHYLADAMANTANE', '1-BUTENE', 'cis-2-BUTENE', 'trans-2-BUTENE', '2,3-DIMETHYL-1-BUTENE', '2,3-DIMETHYL-2-BUTENE', '3,3-DIMETHYL-1-BUTENE', '2-ETHYL-1-BUTENE', 'ETHYLENE', '1-HEXENE', 'cis-2-HEXENE', 'trans-2-HEXENE', 'cis-3-HEXENE', 'trans-3-HEXENE', 'ISOBUTENE', '2-METHYL-1-BUTENE', '3-METHYL-1-BUTENE', '2-METHYL-2-BUTENE', '2-METHYL-1-PENTENE', '3-METHYL-1-PENTENE', '4-METHYL-1-PENTENE', '4-METHYL-cis-2-PENTENE', '4-METHYL-trans-2-PENTENE', '2-METHYL-2-PENTENE', '3-METHYL-cis-2-PENTENE', '3-METHYL-trans-2-PENTENE', '1-PENTENE', 'cis-2-PENTENE', 'trans-2-PENTENE', 'PROPYLENE', '1-HEPTENE', 'cis-3-HEPTENE', 'cis-2-HEPTENE', 'trans-2-HEPTENE', '2-ETHYL-1-PENTENE', '4-METHYL-1-HEXENE', '3-METHYL-1-HEXENE', '2-METHYL-1-HEXENE', '3-ETHYL-1-PENTENE', 'trans-3-HEPTENE', '2,3,3-TRIMETHYL-1-BUTENE', '2-ETHYL-1-HEXENE', 'cis-2-OCTENE', 'cis-3-OCTENE', 'cis-4-OCTENE', '1-OCTENE', 'trans-2-OCTENE', 'trans-3-OCTENE', 'trans-4-OCTENE', '2,4,4-TRIMETHYL-1-PENTENE', '2,4,4-TRIMETHYL-2-PENTENE', '2,3-DIMETHYL-1-HEXENE', '2-METHYL-1-HEPTENE', '1-DECENE', '1-DODECENE', '1-HEXADECENE', '1-HEPTADECENE', '1-NONENE', '1-TRIDECENE', '1-TETRADECENE', '1-PENTADECENE', '1-NONADECENE', '1-EICOSENE', '1-OCTADECENE', '1-UNDECENE', 'CYCLOOCTENE', '1,2-BUTADIENE', '1,3-BUTADIENE', 'trans,trans-2,4-HEXADIENE', '1,5-HEXADIENE', '1,2-HEXADIENE', '1,4-HEXADIENE', 'ISOPRENE', '3-METHYL-1,2-BUTADIENE', 'cis-1,3-PENTADIENE', '1,2-PENTADIENE', 'trans-1,3-PENTADIENE', '1,4-PENTADIENE', '2,3-PENTADIENE', 'PROPADIENE', 'cis,trans-2,4-HEXADIENE', '2,3-DIMETHYL-1,3-BUTADIENE', '2,5-DIMETHYL-1,5-HEXADIENE', '2,5-DIMETHYL-2,4-HEXADIENE', '1,5-CYCLOOCTADIENE', '1,3-CYCLOHEXADIENE', '1,4-CYCLOHEXADIENE', 'CYCLOHEPTENE', 'CYCLOHEXENE', 'CYCLOPENTADIENE', 'DICYCLOPENTADIENE', 'METHYLCYCLOPENTADIENE', 'CYCLOPENTENE', '1-METHYLCYCLOPENTENE', '3-METHYLCYCLOPENTENE', '4-METHYLCYCLOPENTENE', 'VINYLCYCLOHEXENE', '2-NORBORNENE', 'CAMPHENE', 'alpha-PHELLANDRENE', 'beta-PHELLANDRENE', 'alpha-TERPINENE', 'gamma-TERPINENE', 'd-LIMONENE', 'TERPINOLENE', '1-PHENYLINDENE', 'VINYLNORBORNENE', '1-TRIACONTENE', '3-ETHYL-1-HEXENE', '4-METHYL-1-HEPTENE', '1-TETRACONTENE', 'cis-2-NONENE', 'trans-2-NONENE', '6-METHYL-1-HEPTENE', 'trans-2-EICOSENE', 'trans-2-PENTADECENE', '3-METHYL-1,4-PENTADIENE', '1,5,9-CYCLODODECATRIENE', 'trans-1,3-HEXADIENE', 'trans-2-METHYL-1,3-PENTADIENE', '1,9-DECADIENE', '1,3,5,7-CYCLOOCTATETRAENE', 'METHYLNORBORNENE', 'ETHYLNORBORNENE', '5-ETHYLIDENE-2-NORBORNENE', '5-METHYL-1-HEXENE', '2-METHYL-1-OCTENE', '1-METHYL-4-VINYLCYCLOHEXENE', '7-METHYL-1-OCTENE', '2-METHYL-1-NONENE', '8-METHYL-1-NONENE', 'cis-2-DECENE', 'trans-2-DECENE', 'cis-2-DODECENE', 'trans-2-DODECENE', 'BENZENE', 'CUMENE', 'ETHYLBENZENE', 'alpha-METHYLSTYRENE', 'o-METHYLSTYRENE', 'cis-1-PROPENYLBENZENE', 'n-PROPYLBENZENE', 'm-METHYLSTYRENE', 'STYRENE', 'TOLUENE', '1,2,3-TRIMETHYLBENZENE', '1,2,4-TRIMETHYLBENZENE', 'MESITYLENE', 'm-XYLENE', 'o-XYLENE', 'p-XYLENE', '1,2,3,4-TETRAMETHYLBENZENE', 'p-ISOPROPENYLSTYRENE', 'n-BUTYLBENZENE', 'CYCLOHEXYLBENZENE', 'm-DIETHYLBENZENE', 'o-DIETHYLBENZENE', 'DIPHENYLMETHANE', '1-METHYL-2-n-PROPYLBENZENE', '1-METHYL-3-n-PROPYLBENZENE', '1-METHYL-4-n-PROPYLBENZENE', 'sec-BUTYLBENZENE', '5-ETHYL-m-XYLENE', '3-ETHYL-o-XYLENE', '4-ETHYL-o-XYLENE', '2-ETHYL-m-XYLENE', '2-ETHYL-p-XYLENE', '4-ETHYL-m-XYLENE', 'tert-BUTYLBENZENE', 'n-DODECYLBENZENE', '1,1-DIPHENYLETHANE', 'm-CYMENE', 'n-DECYLBENZENE', 'o-CYMENE', 'n-TRIDECYLBENZENE', 'p-CYMENE', 'TRIPHENYLETHYLENE', 'p-DIETHYLBENZENE', 'n-HEXYLBENZENE', 'n-HEPTYLBENZENE', 'n-OCTYLBENZENE', 'n-NONYLBENZENE', 'ISOBUTYLBENZENE', 'n-UNDECYLBENZENE', '2-PHENYLBUTENE-1', 'o-ETHYLTOLUENE', 'm-DIVINYLBENZENE', 'm-ETHYLTOLUENE', 'p-ETHYLTOLUENE', 'cis-2-PHENYLBUTENE-2', 'trans-2-PHENYLBUTENE-2', 'n-PENTYLBENZENE', 'o-TERPHENYL', 'm-TERPHENYL', 'p-TERPHENYL', 'p-tert-BUTYLSTYRENE', '4-ISOBUTYLSTYRENE', 'p-tert-BUTYL ETHYLBENZENE', '1,2,4,5-TETRAMETHYLBENZENE', '1,2,3,5-TETRAMETHYLBENZENE', '1,2-DIPHENYLETHANE', 'trans-STILBENE', 'cis-STILBENE', 'm-DIISOPROPYLBENZENE', 'p-DIISOPROPYLBENZENE', 'TETRAPHENYLETHYLENE', 'n-TETRADECYLBENZENE', 'n-PENTADECYLBENZENE', 'n-HEXADECYLBENZENE', 'n-HEPTADECYLBENZENE', 'n-OCTADECYLBENZENE', 'BIPHENYL', 'ACENAPHTHENE', 'FLUORANTHENE', '1-n-BUTYLNAPHTHALENE', '1-n-PENTYLNAPHTHALENE', '1-PHENYLNAPHTHALENE', '1-ETHYLNAPHTHALENE', '2,6-DIETHYLNAPHTHALENE', '1-n-DECYLNAPHTHALENE', '2-ETHYLNAPHTHALENE', '1-n-HEXYLNAPHTHALENE', '1-METHYLNAPHTHALENE', '2-METHYLNAPHTHALENE', '2,6-DIMETHYLNAPHTHALENE', '2,7-DIMETHYLNAPHTHALENE', 'NAPHTHALENE', '2,3-DIMETHYL-2,3-DIPHENYLBUTANE', '1-n-NONYLNAPHTHALENE', '1-n-PROPYLNAPHTHALENE', '1-n-HEXYL-1,2,3,4-TETRAHYDRONAPHTHALENE', '2,4-DIPHENYL-4-METHYLPENTENE-1', 'TRIPHENYLMETHANE', 'TETRAPHENYLMETHANE', '1,1,2-TRIPHENYLETHANE', '1,1,2,2-TETRAPHENYLETHANE', 'ANTHRACENE', 'PHENANTHRENE', 'CHRYSENE', 'PYRENE', 'INDANE', 'ACENAPHTHALENE', 'FLUORENE', 'INDENE', '1-METHYLINDENE', '1,2,3-TRIMETHYLINDENE', '2-METHYLINDENE', '1,4-DI-tert-BUTYLBENZENE', '1,3,5-TRI-tert-BUTYLBENZENE', '1,3,5-TRIISOPROPYLBENZENE', 'PENTAMETHYLBENZENE', '1,2,4-TRIETHYLBENZENE', 'HEXAMETHYLBENZENE', '1,2,3-TRIETHYLBENZENE', '1,2,3,5-TETRAETHYLBENZENE', 'PENTAETHYLBENZENE', 'HEXAETHYLBENZENE', '1-(4-ETHYLPHENYL)-2-PHENYLETHANE', '1,2-DIMETHYL-3-PROPYLBENZENE', '1,2,3-TRIMETHYL-4-ETHYLBENZENE', '1,2,4-TRIMETHYL-3-ETHYLBENZENE', '1,2,4-TRIMETHYL-5-ETHYLBENZENE', '1-(4-ETHYLPHENYL)-2-(4-ETHYLPHENYL)ETHANE', 'o-ETHYLSTYRENE', 'm-ETHYLSTYRENE', 'p-ETHYLSTYRENE', '4-METHYLPHENANTHRENE', 'BENZANTHRACENE', 'NAPHTHACENE', '1-ETHYL-2-ISOPROPYLBENZENE', '1,3,5-TRIETHYLBENZENE', 'n-BUTYL MERCAPTAN', 'ETHYL MERCAPTAN', 'n-OCTYL MERCAPTAN', 'n-HEPTYL MERCAPTAN', 'n-HEXYL MERCAPTAN', 'METHYL MERCAPTAN', 'n-PENTYL MERCAPTAN', 'tert-BUTYL MERCAPTAN', 'sec-BUTYL MERCAPTAN', 'ISOPROPYL MERCAPTAN', 'n-PROPYL MERCAPTAN', 'tert-OCTYL MERCAPTAN', 'n-NONYL MERCAPTAN', 'n-DODECYL MERCAPTAN', 'ISOBUTYL MERCAPTAN', 'n-DECYL MERCAPTAN', 'UNDECYL MERCAPTAN', 'tert-DODECYL MERCAPTAN', 'PHENYL MERCAPTAN', 'CYCLOHEXYL MERCAPTAN', 'BENZYL MERCAPTAN', '1,2-ETHANEDITHIOL', 'CARBON DIOXIDE', 'HYDROGEN', 'HYDROGEN SULFIDE', 'NITROGEN', 'WATER', 'CO', 'Ar', 'O2'] + +# Temperature for all calculations +T = 298.15 # K + +# Dictionary to store results +results = {"data": {}} + +# Track successful fragmentations +successful_chemicals = {} + +# First pass - identify all chemicals that fragment successfully +for cas in dippr_cmpds: + try: + chem = Chemical(cas) + if chem.Tc is None or chem.Pc is None or chem.omega is None or chem.rdkitmol is None: + continue + assignment, _, _, success, _ = smarts_fragment_priority( + catalog=EPPR78_GROUPS_LIST, + rdkitmol=chem.rdkitmol + ) + + if success: + groups = {EPPR78_GROUPS_LIST[i-1].group: v for i, v in assignment.items()} + successful_chemicals[chem.CAS] = { + 'groups': groups, + 'Tc': chem.Tc, + 'Pc': chem.Pc, + 'omega': chem.omega + } + + except Exception as e: + print(e) + continue + +# Second pass - calculate kij for all valid pairs +for (cas1, data1), (cas2, data2) in combinations(successful_chemicals.items(), 2): + kij = PPR78_kij( + T=T, + molecule1_groups=data1['groups'], + molecule2_groups=data2['groups'], + Tc1=data1['Tc'], + Pc1=data1['Pc'], + omega1=data1['omega'], + Tc2=data2['Tc'], + Pc2=data2['Pc'], + omega2=data2['omega'], + version='extended' + ) + + # Store result in the format shown + key = ' '.join(sorted_CAS_key([cas1, cas2])) + results["data"][key] = { + "kij": round(kij, 4), + } +# Save results +output_path = os.path.join(os.path.dirname(__file__), '..', 'thermo', 'Interaction Parameters/eppr78_common.json') +os.makedirs(os.path.dirname(output_path), exist_ok=True) + +with open(output_path, 'w') as f: + json.dump(results, f) + +print(f"Successfully processed {len(successful_chemicals)} chemicals") +print(f"Generated {len(results['data'])} interaction parameters") \ No newline at end of file diff --git a/tests/Data/EPPR_known_fraagmentations.csv b/tests/Data/EPPR_known_fraagmentations.csv new file mode 100644 index 00000000..0f9c1c0d --- /dev/null +++ b/tests/Data/EPPR_known_fraagmentations.csv @@ -0,0 +1,440 @@ +CAS Name CH3 CH2 CH C CH4 C2H6 CHaro Caro Cfused_aromatic CH2cyclic CHcyclic CO2 N2 H2S SH H2O C2H4 CH2CHalkenic Calkenic CHCcycloalkenic H2 C2F6 CF3 CF2 CF2CFdouble C2H4F2 C2H2F4 CO He Ar SO2 O2 NO COS NH3 NO2N2O4 N2O C2H2 HC≡C C≡C +106-97-8 n-BUTANE 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +75-83-2 2,2-DIMETHYLBUTANE 4 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +79-29-8 2,3-DIMETHYLBUTANE 4 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +463-82-1 NEOPENTANE 4 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +74-84-0 ETHANE 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +110-54-3 n-HEXANE 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +75-28-5 ISOBUTANE 3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +78-78-4 ISOPENTANE 3 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +74-82-8 METHANE 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +107-83-5 2-METHYLPENTANE 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +96-14-0 3-METHYLPENTANE 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +109-66-0 n-PENTANE 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +74-98-6 PROPANE 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +590-73-8 2,2-DIMETHYLHEXANE 4 3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +584-94-1 2,3-DIMETHYLHEXANE 4 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +589-43-5 2,4-DIMETHYLHEXANE 4 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +592-13-2 2,5-DIMETHYLHEXANE 4 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +563-16-6 3,3-DIMETHYLHEXANE 4 3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +583-48-2 3,4-DIMETHYLHEXANE 4 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +590-35-2 2,2-DIMETHYLPENTANE 4 2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +565-59-3 2,3-DIMETHYLPENTANE 4 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +108-08-7 2,4-DIMETHYLPENTANE 4 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +562-49-2 3,3-DIMETHYLPENTANE 4 2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +619-99-8 3-ETHYLHEXANE 3 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +617-78-7 3-ETHYLPENTANE 3 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +142-82-5 n-HEPTANE 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +609-26-7 2-METHYL-3-ETHYLPENTANE 4 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1067-08-9 3-METHYL-3-ETHYLPENTANE 4 3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +592-27-8 2-METHYLHEPTANE 3 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +589-81-1 3-METHYLHEPTANE 3 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +589-53-7 4-METHYLHEPTANE 3 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +591-76-4 2-METHYLHEXANE 3 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +589-34-4 3-METHYLHEXANE 3 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +111-65-9 n-OCTANE 2 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +594-82-1 2,2,3,3-TETRAMETHYLBUTANE 6 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +464-06-2 2,2,3-TRIMETHYLBUTANE 5 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +564-02-3 2,2,3-TRIMETHYLPENTANE 5 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +540-84-1 2,2,4-TRIMETHYLPENTANE 5 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +560-21-4 2,3,3-TRIMETHYLPENTANE 5 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +565-75-3 2,3,4-TRIMETHYLPENTANE 5 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1067-20-5 3,3-DIETHYLPENTANE 4 4 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +16747-32-3 2,2-DIMETHYL-3-ETHYLPENTANE 5 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1068-87-7 2,4-DIMETHYL-3-ETHYLPENTANE 5 1 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1071-26-7 2,2-DIMETHYLHEPTANE 4 4 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1072-05-5 2,6-DIMETHYLHEPTANE 4 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +15869-80-4 3-ETHYLHEPTANE 3 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3221-61-2 2-METHYLOCTANE 3 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2216-33-3 3-METHYLOCTANE 3 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2216-34-4 4-METHYLOCTANE 3 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +111-84-2 n-NONANE 2 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7154-79-2 2,2,3,3-TETRAMETHYLPENTANE 6 1 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186-53-4 2,2,3,4-TETRAMETHYLPENTANE 6 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1070-87-7 2,2,4,4-TETRAMETHYLPENTANE 6 1 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +16747-38-9 2,3,3,4-TETRAMETHYLPENTANE 6 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3522-94-9 2,2,5-TRIMETHYLHEXANE 5 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +16747-30-1 2,4,4-TRIMETHYLHEXANE 5 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +124-18-5 n-DECANE 2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +871-83-0 2-METHYLNONANE 3 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1465084 3-METHYLNONANE 3 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +17301-94-9 4-METHYLNONANE 3 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +15869-85-9 5-METHYLNONANE 3 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7154-80-5 3,3,5-TRIMETHYLHEPTANE 5 3 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +13475-81-5 2,2,3,3-TETRAMETHYLHEXANE 6 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +15869-87-1 2,2-DIMETHYLOCTANE 4 5 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7146-60-3 2,3-DIMETHYLOCTANE 4 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +4032-94-4 2,4-DIMETHYLOCTANE 4 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +15869-89-3 2,5-DIMETHYLOCTANE 4 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2051-30-1 2,6-DIMETHYLOCTANE 4 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1072-16-8 2,7-DIMETHYLOCTANE 4 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +112-40-3 n-DODECANE 2 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +629-59-4 n-TETRADECANE 2 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +629-50-5 n-TRIDECANE 2 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1120-21-4 n-UNDECANE 2 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +629-97-0 n-DOCOSANE 2 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +112-95-8 n-EICOSANE 2 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +629-94-7 n-HENEICOSANE 2 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +629-78-7 n-HEPTADECANE 2 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +544-76-3 n-HEXADECANE 2 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +629-92-5 n-NONADECANE 2 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +593-45-3 n-OCTADECANE 2 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +629-62-9 n-PENTADECANE 2 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +646-31-1 n-TETRACOSANE 2 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +638-67-5 n-TRICOSANE 2 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +629-99-2 n-PENTACOSANE 2 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +630-01-3 n-HEXACOSANE 2 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +593-49-7 n-HEPTACOSANE 2 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +630-02-4 n-OCTACOSANE 2 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +630-03-5 n-NONACOSANE 2 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +638-68-6 n-TRIACONTANE 2 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +111-01-3 SQUALANE 8 16 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +544-85-4 n-DOTRIACONTANE 2 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +630-06-8 n-HEXATRIACONTANE 2 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1071-81-4 2,2,5,5-TETRAMETHYLHEXANE 6 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +4390-04-09 2,2,4,4,6,8,8-HEPTAMETHYLNONANE 9 3 1 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1002-43-3 3-METHYLUNDECANE 3 8 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +75-19-4 CYCLOPROPANE 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +287-23-0 CYCLOBUTANE 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2040-95-1 n-BUTYLCYCLOPENTANE 1 3 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +287-92-3 CYCLOPENTANE 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1638-26-2 1,1-DIMETHYLCYCLOPENTANE 2 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1192-18-3 cis-1,2-DIMETHYLCYCLOPENTANE 2 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +822-50-4 trans-1,2-DIMETHYLCYCLOPENTANE 2 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2532-58-3 cis-1,3-DIMETHYLCYCLOPENTANE 2 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1759-58-6 trans-1,3-DIMETHYLCYCLOPENTANE 2 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1640-89-7 ETHYLCYCLOPENTANE 1 1 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3875-51-2 ISOPROPYLCYCLOPENTANE 2 0 1 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +96-37-7 METHYLCYCLOPENTANE 1 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +16747-50-5 1-METHYL-1-ETHYLCYCLOPENTANE 2 1 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2040-96-2 n-PROPYLCYCLOPENTANE 1 2 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +696-29-7 ISOPROPYLCYCLOHEXANE 2 1 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +110-82-7 CYCLOHEXANE 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1678-92-8 n-PROPYLCYCLOHEXANE 1 2 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1678-93-9 n-BUTYLCYCLOHEXANE 1 3 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1883929 sec-BUTYLCYCLOHEXANE 2 1 1 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3178-22-1 tert-BUTYLCYCLOHEXANE 3 0 0 1 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +590-66-9 1,1-DIMETHYLCYCLOHEXANE 2 0 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +112134 cis-1,2-DIMETHYLCYCLOHEXANE 2 0 0 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +6876-23-9 trans-1,2-DIMETHYLCYCLOHEXANE 2 0 0 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +638-04-0 cis-1,3-DIMETHYLCYCLOHEXANE 2 0 0 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +112195 trans-1,3-DIMETHYLCYCLOHEXANE 2 0 0 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +624-29-3 cis-1,4-DIMETHYLCYCLOHEXANE 2 0 0 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +112227 trans-1,4-DIMETHYLCYCLOHEXANE 2 0 0 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1678-91-7 ETHYLCYCLOHEXANE 1 1 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +108-87-2 METHYLCYCLOHEXANE 1 0 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1795-26-2 1-trans-3,5-TRIMETHYLCYCLOHEXANE 3 0 0 0 0 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1795-16-0 n-DECYLCYCLOHEXANE 1 9 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +291-64-5 CYCLOHEPTANE 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +292-64-8 CYCLOOCTANE 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +493-01-6 cis-DECAHYDRONAPHTHALENE 0 0 0 0 0 0 0 0 0 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +493-02-7 trans-DECAHYDRONAPHTHALENE 0 0 0 0 0 0 0 0 0 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2292-79-7 DIAMANTANE 0 0 0 0 0 0 0 0 0 6 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +80-56-8 alpha-PINENE 3 0 0 0 0 0 0 0 0 2 3 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +127-91-3 beta-PINENE 2 0 0 0 0 0 0 0 0 3 3 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +281-23-2 ADAMANTANE 0 0 0 0 0 0 0 0 0 6 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +92-51-3 BICYCLOHEXYL 0 0 0 0 0 0 0 0 0 10 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3726-45-2 1,2,3,4-TETRAMETHYLCYCLOHEXANE 4 0 0 0 0 0 0 0 0 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +78-01-3 1,1-DIETHYLCYCLOHEXANE 2 2 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +13990-93-7 trans-1,4-DIETHYLCYCLOHEXANE 2 2 0 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +702-79-4 1,3-DIMETHYLADAMANTANE 2 0 0 0 0 0 0 0 0 6 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +106-98-9 1-BUTENE 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +590-18-1 cis-2-BUTENE 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +624-64-6 trans-2-BUTENE 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +563-78-0 2,3-DIMETHYL-1-BUTENE 3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +563-79-1 2,3-DIMETHYL-2-BUTENE 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +558-37-2 3,3-DIMETHYL-1-BUTENE 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +760-21-4 2-ETHYL-1-BUTENE 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +74-85-1 ETHYLENE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +592-41-6 1-HEXENE 1 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7688-21-3 cis-2-HEXENE 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +4050-45-7 trans-2-HEXENE 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2097470 cis-3-HEXENE 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +13269-52-8 trans-3-HEXENE 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +115-11-7 ISOBUTENE 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +563-46-2 2-METHYL-1-BUTENE 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +563-45-1 3-METHYL-1-BUTENE 2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +513-35-9 2-METHYL-2-BUTENE 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +763-29-1 2-METHYL-1-PENTENE 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +760-20-3 3-METHYL-1-PENTENE 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +691-37-2 4-METHYL-1-PENTENE 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +691-38-3 4-METHYL-cis-2-PENTENE 3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +674-76-0 4-METHYL-trans-2-PENTENE 3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +625-27-4 2-METHYL-2-PENTENE 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +922-62-3 3-METHYL-cis-2-PENTENE 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +616-12-6 3-METHYL-trans-2-PENTENE 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +109-67-1 1-PENTENE 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +627-20-3 cis-2-PENTENE 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +646-04-8 trans-2-PENTENE 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +115-07-1 PROPYLENE 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +592-76-7 1-HEPTENE 1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2097503 cis-3-HEPTENE 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +6443-92-1 cis-2-HEPTENE 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +14686-13-6 trans-2-HEPTENE 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3404-71-5 2-ETHYL-1-PENTENE 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3769-23-1 4-METHYL-1-HEXENE 2 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3404-61-3 3-METHYL-1-HEXENE 2 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1531866 2-METHYL-1-HEXENE 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +780984 3-ETHYL-1-PENTENE 2 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +14686-14-7 trans-3-HEPTENE 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +594-56-9 2,3,3-TRIMETHYL-1-BUTENE 4 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1632-16-2 2-ETHYL-1-HEXENE 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2097322 cis-2-OCTENE 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +14850-22-7 cis-3-OCTENE 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7642-15-1 cis-4-OCTENE 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +111-66-0 1-OCTENE 1 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +13389-42-9 trans-2-OCTENE 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +14919-01-8 trans-3-OCTENE 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +14850-23-8 trans-4-OCTENE 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +107-39-1 2,4,4-TRIMETHYL-1-PENTENE 4 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +107-40-4 2,4,4-TRIMETHYL-2-PENTENE 5 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +16746-86-4 2,3-DIMETHYL-1-HEXENE 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +15870-10-7 2-METHYL-1-HEPTENE 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +872-05-9 1-DECENE 1 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +112-41-4 1-DODECENE 1 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +629-73-2 1-HEXADECENE 1 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +6765-39-5 1-HEPTADECENE 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +124-11-8 1-NONENE 1 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2437-56-1 1-TRIDECENE 1 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1120-36-1 1-TETRADECENE 1 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +13360-61-7 1-PENTADECENE 1 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +18435-45-5 1-NONADECENE 1 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +567040 1-EICOSENE 1 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +112-88-9 1-OCTADECENE 1 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +821-95-4 1-UNDECENE 1 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +931-88-4 CYCLOOCTENE 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +590-19-2 1,2-BUTADIENE 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +106-99-0 1,3-BUTADIENE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +5194-51-4 trans,trans-2,4-HEXADIENE 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +592-42-7 1,5-HEXADIENE 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +592-44-9 1,2-HEXADIENE 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +592-45-0 1,4-HEXADIENE 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +78-79-5 ISOPRENE 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +598-25-4 3-METHYL-1,2-BUTADIENE 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1574-41-0 cis-1,3-PENTADIENE 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +591-95-7 1,2-PENTADIENE 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2004-70-8 trans-1,3-PENTADIENE 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +591-93-5 1,4-PENTADIENE 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +591-96-8 2,3-PENTADIENE 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +463-49-0 PROPADIENE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +5194-50-3 cis,trans-2,4-HEXADIENE 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +513-81-5 2,3-DIMETHYL-1,3-BUTADIENE 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +627-58-7 2,5-DIMETHYL-1,5-HEXADIENE 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +764-13-6 2,5-DIMETHYL-2,4-HEXADIENE 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +111-78-4 1,5-CYCLOOCTADIENE 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +592-57-4 1,3-CYCLOHEXADIENE 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +628-41-1 1,4-CYCLOHEXADIENE 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +628-92-2 CYCLOHEPTENE 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +110-83-8 CYCLOHEXENE 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +542-92-7 CYCLOPENTADIENE 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +77-73-6 DICYCLOPENTADIENE 0 0 0 0 0 0 0 0 0 2 4 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +26519-91-5 METHYLCYCLOPENTADIENE 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +142-29-0 CYCLOPENTENE 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +693-89-0 1-METHYLCYCLOPENTENE 1 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1120-62-3 3-METHYLCYCLOPENTENE 1 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1759-81-5 4-METHYLCYCLOPENTENE 1 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +100-40-3 VINYLCYCLOHEXENE 0 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +498-66-8 2-NORBORNENE 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +79-92-5 CAMPHENE 2 0 0 0 0 0 0 0 0 3 3 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +99-83-2 alpha-PHELLANDRENE 3 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +555-10-2 beta-PHELLANDRENE 2 0 1 0 0 0 0 0 0 2 1 0 0 0 0 0 0 1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +99-86-5 alpha-TERPINENE 3 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +99-85-4 gamma-TERPINENE 3 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +5989-27-5 d-LIMONENE 2 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +586-62-9 TERPINOLENE 3 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1961-96-2 1-PHENYLINDENE 0 0 0 0 0 0 9 3 0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3048-64-4 VINYLNORBORNENE 0 0 0 0 0 0 0 0 0 2 3 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +18435-53-5 1-TRIACONTENE 1 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3404-58-8 3-ETHYL-1-HEXENE 2 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +13151-05-8 4-METHYL-1-HEPTENE 2 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +61868-18-6 1-TETRACONTENE 1 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +6434-77-1 cis-2-NONENE 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +6434-78-2 trans-2-NONENE 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +5026-76-6 6-METHYL-1-HEPTENE 2 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +42448-85-1 trans-2-EICOSENE 2 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +74392-36-2 trans-2-PENTADECENE 2 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1115-08-8 3-METHYL-1,4-PENTADIENE 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +706-31-0 1,5,9-CYCLODODECATRIENE 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +20237-34-7 trans-1,3-HEXADIENE 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +926-54-5 trans-2-METHYL-1,3-PENTADIENE 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1647-16-1 1,9-DECADIENE 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +629-20-9 1,3,5,7-CYCLOOCTATETRAENE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +694-92-8 METHYLNORBORNENE 1 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +15403-89-1 ETHYLNORBORNENE 1 1 0 0 0 0 0 0 0 2 3 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +16219-75-3 5-ETHYLIDENE-2-NORBORNENE 1 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3524-73-0 5-METHYL-1-HEXENE 2 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +4588-18-5 2-METHYL-1-OCTENE 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +17699-86-4 1-METHYL-4-VINYLCYCLOHEXENE 1 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +13151-06-9 7-METHYL-1-OCTENE 2 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2980-71-4 2-METHYL-1-NONENE 2 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +26741-24-2 8-METHYL-1-NONENE 2 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +20348-51-0 cis-2-DECENE 2 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +20063-97-2 trans-2-DECENE 2 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7206-26-0 cis-2-DODECENE 2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7206-13-5 trans-2-DODECENE 2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +71-43-2 BENZENE 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +98-82-8 CUMENE 2 0 1 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +100-41-4 ETHYLBENZENE 1 1 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +98-83-9 alpha-METHYLSTYRENE 1 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +611-15-4 o-METHYLSTYRENE 1 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +766-90-5 cis-1-PROPENYLBENZENE 1 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +103-65-1 n-PROPYLBENZENE 1 2 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +100-80-1 m-METHYLSTYRENE 1 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +100-42-5 STYRENE 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +108-88-3 TOLUENE 1 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +526-73-8 1,2,3-TRIMETHYLBENZENE 3 0 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +95-63-6 1,2,4-TRIMETHYLBENZENE 3 0 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +108-67-8 MESITYLENE 3 0 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +108-38-3 m-XYLENE 2 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +95-47-6 o-XYLENE 2 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +106-42-3 p-XYLENE 2 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +488-23-3 1,2,3,4-TETRAMETHYLBENZENE 4 0 0 0 0 0 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +16262-48-9 p-ISOPROPENYLSTYRENE 1 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +104-51-8 n-BUTYLBENZENE 1 3 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +827-52-1 CYCLOHEXYLBENZENE 0 0 0 0 0 0 5 1 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +141-93-5 m-DIETHYLBENZENE 2 2 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +135-01-3 o-DIETHYLBENZENE 2 2 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +101-81-5 DIPHENYLMETHANE 0 1 0 0 0 0 10 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1074-17-5 1-METHYL-2-n-PROPYLBENZENE 2 2 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1074-43-7 1-METHYL-3-n-PROPYLBENZENE 2 2 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1074-55-1 1-METHYL-4-n-PROPYLBENZENE 2 2 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +135-98-8 sec-BUTYLBENZENE 2 1 1 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +934-74-7 5-ETHYL-m-XYLENE 3 1 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +933-98-2 3-ETHYL-o-XYLENE 3 1 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +934-80-5 4-ETHYL-o-XYLENE 3 1 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2870-04-4 2-ETHYL-m-XYLENE 3 1 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1758-88-9 2-ETHYL-p-XYLENE 3 1 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +874-41-9 4-ETHYL-m-XYLENE 3 1 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +98-06-6 tert-BUTYLBENZENE 3 0 0 1 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +123-01-3 n-DODECYLBENZENE 1 11 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +612-00-0 1,1-DIPHENYLETHANE 1 0 1 0 0 0 10 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +535-77-3 m-CYMENE 3 0 1 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +104-72-3 n-DECYLBENZENE 1 9 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +527-84-4 o-CYMENE 3 0 1 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +123-02-4 n-TRIDECYLBENZENE 1 12 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +99-87-6 p-CYMENE 3 0 1 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +58-72-0 TRIPHENYLETHYLENE 0 0 0 0 0 0 15 3 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +105-05-5 p-DIETHYLBENZENE 2 2 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1077-16-3 n-HEXYLBENZENE 1 5 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1078-71-3 n-HEPTYLBENZENE 1 6 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2189-60-8 n-OCTYLBENZENE 1 7 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1081-77-2 n-NONYLBENZENE 1 8 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +538-93-2 ISOBUTYLBENZENE 2 1 1 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +6742-54-7 n-UNDECYLBENZENE 1 10 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2039-93-2 2-PHENYLBUTENE-1 1 1 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +611-14-3 o-ETHYLTOLUENE 2 1 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +108-57-6 m-DIVINYLBENZENE 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +620-14-4 m-ETHYLTOLUENE 2 1 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +622-96-8 p-ETHYLTOLUENE 2 1 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +768-00-3 cis-2-PHENYLBUTENE-2 2 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +767-99-7 trans-2-PHENYLBUTENE-2 2 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +538-68-1 n-PENTYLBENZENE 1 4 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +84-15-1 o-TERPHENYL 0 0 0 0 0 0 14 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +92-06-8 m-TERPHENYL 0 0 0 0 0 0 14 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +92-94-4 p-TERPHENYL 0 0 0 0 0 0 14 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1746-23-2 p-tert-BUTYLSTYRENE 3 0 0 1 0 0 4 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +63444-56-4 4-ISOBUTYLSTYRENE 2 1 1 0 0 0 4 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7364-19-4 p-tert-BUTYL ETHYLBENZENE 4 1 0 1 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +95-93-2 1,2,4,5-TETRAMETHYLBENZENE 4 0 0 0 0 0 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +527-53-7 1,2,3,5-TETRAMETHYLBENZENE 4 0 0 0 0 0 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +103-29-7 1,2-DIPHENYLETHANE 0 2 0 0 0 0 10 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +103-30-0 trans-STILBENE 0 0 0 0 0 0 10 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +645-49-8 cis-STILBENE 0 0 0 0 0 0 10 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +99-62-7 m-DIISOPROPYLBENZENE 4 0 2 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +100-18-5 p-DIISOPROPYLBENZENE 4 0 2 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +632-51-9 TETRAPHENYLETHYLENE 0 0 0 0 0 0 20 4 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1459-10-5 n-TETRADECYLBENZENE 1 13 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2131-18-2 n-PENTADECYLBENZENE 1 14 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1459-09-2 n-HEXADECYLBENZENE 1 15 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +14752-75-1 n-HEPTADECYLBENZENE 1 16 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +929727 n-OCTADECYLBENZENE 1 17 0 0 0 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +92-52-4 BIPHENYL 0 0 0 0 0 0 10 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +83-32-9 ACENAPHTHENE 0 0 0 0 0 0 6 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +206-44-0 FLUORANTHENE 0 0 0 0 0 0 10 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1634-09-9 1-n-BUTYLNAPHTHALENE 1 3 0 0 0 0 7 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +86-89-5 1-n-PENTYLNAPHTHALENE 1 4 0 0 0 0 7 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +605-02-7 1-PHENYLNAPHTHALENE 0 0 0 0 0 0 12 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1127-76-0 1-ETHYLNAPHTHALENE 1 1 0 0 0 0 7 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +59919-41-4 2,6-DIETHYLNAPHTHALENE 2 2 0 0 0 0 6 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +26438-27-7 1-n-DECYLNAPHTHALENE 1 9 0 0 0 0 7 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +939-27-5 2-ETHYLNAPHTHALENE 1 1 0 0 0 0 7 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2876-53-1 1-n-HEXYLNAPHTHALENE 1 5 0 0 0 0 7 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +90-12-0 1-METHYLNAPHTHALENE 1 0 0 0 0 0 7 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +91-57-6 2-METHYLNAPHTHALENE 1 0 0 0 0 0 7 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +581-42-0 2,6-DIMETHYLNAPHTHALENE 2 0 0 0 0 0 6 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +582-16-1 2,7-DIMETHYLNAPHTHALENE 2 0 0 0 0 0 6 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +91-20-3 NAPHTHALENE 0 0 0 0 0 0 8 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1889-67-4 2,3-DIMETHYL-2,3-DIPHENYLBUTANE 4 0 0 2 0 0 10 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +26438-26-6 1-n-NONYLNAPHTHALENE 1 8 0 0 0 0 7 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2765-18-6 1-n-PROPYLNAPHTHALENE 1 2 0 0 0 0 7 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +66325-11-9 1-n-HEXYL-1,2,3,4-TETRAHYDRONAPHTHALENE 1 5 0 0 0 0 4 2 0 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +6362-80-7 2,4-DIPHENYL-4-METHYLPENTENE-1 2 1 0 1 0 0 10 2 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +519-73-3 TRIPHENYLMETHANE 0 0 1 0 0 0 15 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +630-76-2 TETRAPHENYLMETHANE 0 0 0 1 0 0 20 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1520-42-9 1,1,2-TRIPHENYLETHANE 0 1 1 0 0 0 15 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +632-50-8 1,1,2,2-TETRAPHENYLETHANE 0 0 2 0 0 0 20 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +120-12-7 ANTHRACENE 0 0 0 0 0 0 10 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85-01-8 PHENANTHRENE 0 0 0 0 0 0 10 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +218-01-9 CHRYSENE 0 0 0 0 0 0 12 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +129-00-0 PYRENE 0 0 0 0 0 0 10 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +496-11-7 INDANE 0 0 0 0 0 0 4 2 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +208-96-8 ACENAPHTHALENE 0 0 0 0 0 0 6 2 2 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +86-73-7 FLUORENE 0 0 0 0 0 0 8 4 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +95-13-6 INDENE 0 0 0 0 0 0 4 2 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +767-59-9 1-METHYLINDENE 1 0 0 0 0 0 4 2 0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +4773-83-5 1,2,3-TRIMETHYLINDENE 3 0 0 0 0 0 4 2 0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2177-47-1 2-METHYLINDENE 1 0 0 0 0 0 4 2 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1012-72-2 1,4-DI-tert-BUTYLBENZENE 6 0 0 2 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1460-02-2 1,3,5-TRI-tert-BUTYLBENZENE 9 0 0 3 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +717-74-8 1,3,5-TRIISOPROPYLBENZENE 6 0 3 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +700-12-9 PENTAMETHYLBENZENE 5 0 0 0 0 0 1 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +877-44-1 1,2,4-TRIETHYLBENZENE 3 3 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +87-85-4 HEXAMETHYLBENZENE 6 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +42205-08-3 1,2,3-TRIETHYLBENZENE 3 3 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +38842-05-6 1,2,3,5-TETRAETHYLBENZENE 4 4 0 0 0 0 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +605-01-6 PENTAETHYLBENZENE 5 5 0 0 0 0 1 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +604-88-6 HEXAETHYLBENZENE 6 6 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7439-15-8 1-(4-ETHYLPHENYL)-2-PHENYLETHANE 1 3 0 0 0 0 9 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +17059-44-8 1,2-DIMETHYL-3-PROPYLBENZENE 3 2 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +61827-86-9 1,2,3-TRIMETHYL-4-ETHYLBENZENE 4 1 0 0 0 0 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +61827-87-0 1,2,4-TRIMETHYL-3-ETHYLBENZENE 4 1 0 0 0 0 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +17851-27-3 1,2,4-TRIMETHYL-5-ETHYLBENZENE 4 1 0 0 0 0 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +51526-06-8 1-(4-ETHYLPHENYL)-2-(4-ETHYLPHENYL)ETHANE 2 4 0 0 0 0 8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7564-63-8 o-ETHYLSTYRENE 1 1 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7525-62-4 m-ETHYLSTYRENE 1 1 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +3454-07-07 p-ETHYLSTYRENE 1 1 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +832-64-4 4-METHYLPHENANTHRENE 1 0 0 0 0 0 9 1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +56-55-3 BENZANTHRACENE 0 0 0 0 0 0 12 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +92-24-0 NAPHTHACENE 0 0 0 0 0 0 12 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +18970-44-0 1-ETHYL-2-ISOPROPYLBENZENE 3 1 1 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +102-25-0 1,3,5-TRIETHYLBENZENE 3 3 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +109-79-5 n-BUTYL MERCAPTAN 1 3 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +75-08-1 ETHYL MERCAPTAN 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +111-88-6 n-OCTYL MERCAPTAN 1 7 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1639-09-4 n-HEPTYL MERCAPTAN 1 6 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +111-31-9 n-HEXYL MERCAPTAN 1 5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +74-93-1 METHYL MERCAPTAN 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +110-66-7 n-PENTYL MERCAPTAN 1 4 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +75-66-1 tert-BUTYL MERCAPTAN 3 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +513-53-1 sec-BUTYL MERCAPTAN 2 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +75-33-2 ISOPROPYL MERCAPTAN 2 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +107-03-9 n-PROPYL MERCAPTAN 1 2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +141-59-3 tert-OCTYL MERCAPTAN 5 1 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1455-21-6 n-NONYL MERCAPTAN 1 8 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +112-55-0 n-DODECYL MERCAPTAN 1 11 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +513-44-0 ISOBUTYL MERCAPTAN 2 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +143-10-2 n-DECYL MERCAPTAN 1 9 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +5332-52-5 UNDECYL MERCAPTAN 1 10 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +25103-58-6 tert-DODECYL MERCAPTAN 3 8 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +108-98-5 PHENYL MERCAPTAN 0 0 0 0 0 0 5 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1569-69-3 CYCLOHEXYL MERCAPTAN 0 0 0 0 0 0 0 0 0 5 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +100-53-8 BENZYL MERCAPTAN 0 1 0 0 0 0 5 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +540-63-6 1,2-ETHANEDITHIOL 0 2 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +124-38-9 CARBON DIOXIDE 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1333-74-0 HYDROGEN 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +2148878 HYDROGEN SULFIDE 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7727-37-9 NITROGEN 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +7732-18-5 WATER 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +630-08-0 CO 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 +7440-37-1 Ar 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 +7782-44-7 O2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 diff --git a/tests/Data/joback_log_good_sorted.txt b/tests/Data/joback_log_good_sorted.txt index dc7650b3..e564f14c 100644 --- a/tests/Data/joback_log_good_sorted.txt +++ b/tests/Data/joback_log_good_sorted.txt @@ -2321,7 +2321,6 @@ Did not match all atoms present 110690-43-2 CCOCN1C=C(C(=O)N(C1=O)C(=O)C2=CC(=CC Did not match all atoms present 1107-00-2 C1=CC2=C(C=C1C(C3=CC4=C(C=C3)C(=O)OC4=O)(C(F)(F)F)C(F)(F)F)C(=O)OC2=O {16: 6, 28: 4, 4: 3, 14: 6} Did not match all atoms present 1107-69-3 C/C(=N\NC1=C(C=C(C=C1)[N+](=O)[O-])[N+](=O)[O-])/C=N/NC2=C(C=C(C=C2)[N+](=O)[O-])[N+](=O)[O-] {1: 1, 34: 2, 38: 4, 6: 1, 7: 1, 14: 6, 31: 2} Did not match all atoms present 110720-66-6 [C@@H]([C@H](C(=O)[O-])O)(C(=O)[O-])O.[Ca+2] {24: 2, 3: 2, 20: 2} -Did not match all atoms present 11073-85-1 [Ge].[Te] {} Did not match all atoms present 110735-99-4 C(COC(=O)CC(C(=O)OCCC(C(C(C(C(C(F)(F)F)(F)F)(F)F)(F)F)(F)F)(F)F)S(=O)(=O)[O-])C(C(C(C(C(C(F)(F)F)(F)F)(F)F)(F)F)(F)F)(F)F.[Na+] {2: 5, 3: 1, 4: 12, 16: 26, 28: 2, 29: 3} Did not match all atoms present 110736-41-9 O.O.O.[Fe].[Fe] {} Did not match all atoms present 11075-28-8 C1=CC=C2C(=C1)C(=O)C3=C(C=CC(=C3C2=O)NCC(CCl)O)NCC(CCl)O {2: 4, 3: 2, 14: 6, 17: 2, 20: 2, 25: 2, 31: 2} diff --git a/tests/test_chemical.py b/tests/test_chemical.py index a6e01c54..90a3c8ac 100644 --- a/tests/test_chemical.py +++ b/tests/test_chemical.py @@ -292,7 +292,7 @@ def test_H_Chemical(): @pytest.mark.meta_Chemical @pytest.mark.deprecated def test_all_chemicals(): - for i in pubchem_db.CAS_index.values(): + for i in pubchem_db: c = Chemical(i.CASs) print(i.CASs) diff --git a/tests/test_functional_groups.py b/tests/test_functional_groups.py index 5625e091..5e45ecb5 100644 --- a/tests/test_functional_groups.py +++ b/tests/test_functional_groups.py @@ -934,7 +934,7 @@ def test_is_amide(): "Cobalt(II) sulfate", "CoO", "Copper(I) bromide", "Copper(I) chloride", "Copper(I) fluoride", "Copper(II) azide", "Copper(II) bromide", "Copper(II) carbonate", "Copper(II) chloride", "Copper(II) nitrate", "Copper(II) oxide", "Copper(II) sulfate", "Copper(II) sulfide", "Copper(I) oxide", "Copper(I) sulfate", "Copper(I) sulfide", "Copper oxychloride", "Cr", "Cr2O3", "CrO2", "CrO3", "Cs", "Cu", "Cu2O", "CuO", "Curium(III) oxide", - "Cyanogen", "Cyanogen bromide", "Cyanogen chloride", "Cyanogen iodide", "Diammonium phosphate", "Diborane", "Diboron tetrafluoride", + "Cyanogen", "Cyanogen bromide", "Cyanogen chloride", "Cyanogen iodide", "Diammonium phosphate", "Diboron tetrafluoride", "Dichlorine heptoxide", "Dichlorine monoxide", "Dichlorine tetroxide (chlorine perchlorate)", "Dichlorosilane", "Dimagnesium phosphate", "Dinitrogen pentoxide (nitronium nitrate)", "Dinitrogen tetrafluoride", "Dinitrogen tetroxide", "Dinitrogen trioxide", "Diphosphorus tetrafluoride", "Diphosphorus tetraiodide", "Disilane", "Disulfur decafluoride", "Dy", "Dy2O3", "Dysprosium(III) chloride", "Er", "Er2O3", "Erbium(III) chloride", "Es", diff --git a/tests/test_heat_capacity.py b/tests/test_heat_capacity.py index 996a0f32..eab33fc4 100644 --- a/tests/test_heat_capacity.py +++ b/tests/test_heat_capacity.py @@ -874,6 +874,7 @@ def test_JANAF_fit_carbon_exists(): @pytest.mark.slow @pytest.mark.fuzz +@pytest.mark.meta_T_dept def test_locked_integral(): obj = HeatCapacityGas(load_data=False, CASRN="7732-18-5", similarity_variable=0.16652530518537598, MW=18.01528, extrapolation="linear", method="POLY_FIT", @@ -888,6 +889,7 @@ def test_locked_integral(): @pytest.mark.slow @pytest.mark.fuzz +@pytest.mark.meta_T_dept def test_locked_integral_over_T(): obj = HeatCapacityGas(load_data=False, CASRN="7732-18-5", similarity_variable=0.16652530518537598, MW=18.01528, extrapolation="linear", method="POLY_FIT", poly_fit=(50.0, 1000.0, [5.543665000518528e-22, -2.403756749600872e-18, 4.2166477594350336e-15, -3.7965208514613565e-12, 1.823547122838406e-09, -4.3747690853614695e-07, 5.437938301211039e-05, -0.003220061088723078, 33.32731489750759])) @@ -899,3 +901,12 @@ def to_int(T): quad_ans = quad(to_int, T1, T2)[0] analytical_ans = obj.T_dependent_property_integral_over_T(T1, T2) assert_close(quad_ans, analytical_ans, rtol=1e-5) + +@pytest.mark.meta_T_dept +def test_heat_capacity_interp1d_removed_extrapolation_method_compatibility(): + EtOH = HeatCapacityGas(CASRN='64-17-5', similarity_variable=0.1953615, MW=46.06844, extrapolation='interp1d', method='POLING_POLY') + assert_close(EtOH(EtOH.Tmin - 10), 37.421995400002054) + assert_close(EtOH(EtOH.Tmax + 10), 142.81153700770574) + EtOH = HeatCapacityGas(CASRN='64-17-5', similarity_variable=0.1953615, MW=46.06844, extrapolation='interp1d|interp1d', method='POLING_POLY') + assert_close(EtOH(EtOH.Tmin - 10), 37.421995400002054) + assert_close(EtOH(EtOH.Tmax + 10), 142.81153700770574) \ No newline at end of file diff --git a/tests/test_ppr78.py b/tests/test_ppr78.py new file mode 100644 index 00000000..d8759d61 --- /dev/null +++ b/tests/test_ppr78.py @@ -0,0 +1,784 @@ +'''Chemical Engineering Design Library (ChEDL). Utilities for process modeling. +Copyright (C) 2024, Caleb Bell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +''' +from math import * + +import pytest +from fluids.numerics import * + +from thermo import Chemical +from chemicals.identifiers import int_to_CAS +from thermo.group_contribution.group_contribution_base import smarts_fragment_priority +from thermo.group_contribution.ppr78 import EPPR78_GROUPS_LIST, EPPR78_GROUPS_BY_ID, PPR78_kij, PPR78_kijs, PPR78_GROUP_IDS, PPR78_GROUPS_LIST, PPR78_INTERACTIONS, PPR78_GROUPS_BY_ID +import os +import pandas as pd +folder = os.path.join(os.path.dirname(__file__), 'Data') +try: + import rdkit + from rdkit import Chem +except: + rdkit = None + +def test_ppr78_kij_propane_butane(): + """ + Test PPR78_kij function against the example calculation from the paper for + propane(1)/n-butane(2) system at T = 303.15 K. + + Values taken from: + Jaubert, J.-N., and Fabrice Mutelet. "VLE Predictions with the Peng-Robinson + Equation of State and Temperature Dependent Kij Calculated through a Group + Contribution Method." Fluid Phase Equilibria 224, no. 2 (2004): 285-304. + """ + # Test conditions from paper + T = 303.15 # K + + # Molecule group compositions + molecule1_groups = { + "CH3": 2, # propane has 2 CH3 groups + "CH2": 1 # propane has 1 CH2 group + } + + molecule2_groups = { + "CH3": 2, # n-butane has 2 CH3 groups + "CH2": 2 # n-butane has 2 CH2 groups + } + + # Critical properties and acentric factors from paper + Tc1 = 369.83 # K (propane) + Pc1 = 42.48e5 # Pa + omega1 = 0.152 + + Tc2 = 425.12 # K (n-butane) + Pc2 = 37.96e5 # Pa + omega2 = 0.200 + + # Calculate kij + kij = PPR78_kij(T, molecule1_groups, molecule2_groups, + Tc1, Pc1, omega1, Tc2, Pc2, omega2) + + # Expected value from paper + expected_kij = 0.0028 + + # Test with reasonable tolerance due to potential rounding differences + assert_close(kij, expected_kij, atol=0.00005) + + # Check group fractions + alpha_11 = 2/3 # CH3 fraction in propane + alpha_12 = 1/3 # CH2 fraction in propane + alpha_21 = 1/2 # CH3 fraction in butane + alpha_22 = 1/2 # CH2 fraction in butane + + # Calculate fractions from our function inputs for verification + calc_alpha_11 = molecule1_groups["CH3"] / sum(molecule1_groups.values()) + calc_alpha_12 = molecule1_groups["CH2"] / sum(molecule1_groups.values()) + calc_alpha_21 = molecule2_groups["CH3"] / sum(molecule2_groups.values()) + calc_alpha_22 = molecule2_groups["CH2"] / sum(molecule2_groups.values()) + + # Verify group fractions + assert_close(calc_alpha_11, alpha_11, rtol=1e-10) + assert_close(calc_alpha_12, alpha_12, rtol=1e-10) + assert_close(calc_alpha_21, alpha_21, rtol=1e-10) + assert_close(calc_alpha_22, alpha_22, rtol=1e-10) + +def test_ppr78_kijs_matrix(): + """ + Test PPR78_kijs matrix calculation for a propane/n-butane/n-pentane system. + """ + T = 303.15 # K + + # Molecule group compositions + groups = [ + {"CH3": 2, "CH2": 1}, # propane + {"CH3": 2, "CH2": 2}, # n-butane + {"CH3": 2, "CH2": 3}, # n-pentane + ] + + # Critical properties and acentric factors + Tcs = [369.83, 425.12, 469.70] # K + Pcs = [42.48e5, 37.96e5, 33.70e5] # Pa + omegas = [0.152, 0.200, 0.252] + + # Calculate full kij matrix + kij_matrix = PPR78_kijs(T, groups, Tcs, Pcs, omegas) + + # Test matrix properties + assert len(kij_matrix) == 3, "Matrix should be 3x3" + assert all(len(row) == 3 for row in kij_matrix), "Matrix should be square" + + assert_close2d(kij_matrix, [[0.0, 0.0027994360072542274, 0.006933513208806096], + [0.0027994360072542274, 0.0, 0.000827218293750849], + [0.006933513208806096, 0.000827218293750849, 0.0]], + rtol=1e-7) + +def readable_assignment_PPR78(assignment): + return {PPR78_GROUPS_BY_ID[i].group : v for i, v in assignment.items()} +def readable_assignment_EPPR78(assignment): + return {EPPR78_GROUPS_BY_ID[i].group : v for i, v in assignment.items()} + +@pytest.mark.rdkit +@pytest.mark.skipif(rdkit is None, reason="requires rdkit") +def test_table_2_2005_paper_compounds(): + '''Jaubert, Jean-Noël, Stéphane Vitu, Fabrice Mutelet, and Jean-Pierre Corriou. + "Extension of the PPR78 Model (Predictive 1978, Peng-Robinson EOS with Temperature + Dependent Kij Calculated through a Group Contribution Method) to Systems Containing + Aromatic Compounds." Fluid Phase Equilibria 237, no. 1-2 (October 25, 2005): + 193-211. doi:10.1016/j.fluid.2005.09.003. + ''' + rdkitmol = Chemical('nitrogen').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'N2': 1} + assert success + rdkitmol = Chemical('carbon dioxide').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CO2': 1} + assert success + + rdkitmol = Chemical('hydrogen sulfide').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'H2S': 1} + assert success + + + rdkitmol = Chemical('methane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH4': 1} + assert success + + + # Ethane - should use the specific C2H6 group + rdkitmol = Chemical('ethane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'C2H6': 1} + assert success + + # Propane - should be CH3-CH2-CH3 + rdkitmol = Chemical('propane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 2, 'CH2': 1} + assert success + + # n-Butane - should be CH3-CH2-CH2-CH3 + rdkitmol = Chemical('butane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 2, 'CH2': 2} + assert success + + + # n-Pentane (CH3-CH2-CH2-CH2-CH3) + rdkitmol = Chemical('pentane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 2, 'CH2': 3} + assert success + + # 2-Methyl butane (iso-pentane) (CH3-CH(CH3)-CH2-CH3) + rdkitmol = Chemical('2-methylbutane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 3, 'CH': 1, 'CH2': 1} + assert success + + # 2,2-Dimethyl propane (neo-pentane) ((CH3)4-C) + rdkitmol = Chemical('2,2-dimethylpropane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 4, 'C': 1} + assert success + + # n-Hexane (CH3-CH2-CH2-CH2-CH2-CH3) + rdkitmol = Chemical('hexane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 2, 'CH2': 4} + assert success + + # 2-Methyl pentane (CH3-CH(CH3)-CH2-CH2-CH3) + rdkitmol = Chemical('2-methylpentane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 3, 'CH': 1, 'CH2': 2} + assert success + + # 3-Methyl pentane (CH3-CH2-CH(CH3)-CH2-CH3) + rdkitmol = Chemical('3-methylpentane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 3, 'CH': 1, 'CH2': 2} + assert success + + # 2,2-Dimethyl butane (CH3-C(CH3)2-CH2-CH3) + rdkitmol = Chemical('2,2-dimethylbutane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 4, 'C': 1, 'CH2': 1} + assert success + + # 2,3-Dimethyl butane (CH3-CH(CH3)-CH(CH3)-CH3) + rdkitmol = Chemical('2,3-dimethylbutane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 4, 'CH': 2} + assert success + + # Benzene (C6H6) + rdkitmol = Chemical('benzene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 6} + assert success + + # n-Heptane (CH3-CH2-CH2-CH2-CH2-CH2-CH3) + rdkitmol = Chemical('heptane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 2, 'CH2': 5} + assert success + + # 3-Methyl hexane (CH3-CH2-CH(CH3)-CH2-CH2-CH3) + rdkitmol = Chemical('3-methylhexane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 3, 'CH': 1, 'CH2': 3} + assert success + + # 2,3-Dimethyl pentane (CH3-CH(CH3)-CH(CH3)-CH2-CH3) + rdkitmol = Chemical('2,3-dimethylpentane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 4, 'CH': 2, 'CH2': 1} + assert success + + # 2,4-Dimethyl pentane (CH3-CH(CH3)-CH2-CH(CH3)-CH3) + rdkitmol = Chemical('2,4-dimethylpentane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 4, 'CH': 2, 'CH2': 1} + assert success + + # 2,2,3-Trimethyl butane (CH3-C(CH3)2-CH(CH3)-CH3) + rdkitmol = Chemical('2,2,3-trimethylbutane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 5, 'CH': 1, 'C': 1} + assert success + + # 2,2,4-Trimethyl pentane (iso-octane) (CH3-C(CH3)2-CH2-CH(CH3)-CH3) + rdkitmol = Chemical('2,2,4-trimethylpentane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 5, 'CH': 1, 'C': 1, 'CH2': 1} + assert success + + # Methyl benzene (toluene) (C6H5-CH3) + rdkitmol = Chemical('toluene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 5, 'Caro': 1, 'CH3': 1} + assert success + + # n-Octane (CH3-(CH2)6-CH3) + rdkitmol = Chemical('octane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 2, 'CH2': 6} + assert success + + # 2,2,5-Trimethyl hexane (CH3-CH2-CH2-CH(CH3)-C(CH3)2-CH3) + rdkitmol = Chemical('2,2,5-trimethylhexane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 5, 'CH': 1, 'C': 1, 'CH2': 2} + assert success + + # Ethyl benzene (C6H5-CH2-CH3) + rdkitmol = Chemical('ethylbenzene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 5, 'Caro': 1, 'CH2': 1, 'CH3': 1} + assert success + + # 1,4-Dimethyl benzene (para-xylene) + rdkitmol = Chemical('p-xylene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 4, 'Caro': 2, 'CH3': 2} + assert success + + # 1,3-Dimethyl benzene (meta-xylene) + rdkitmol = Chemical('m-xylene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 4, 'Caro': 2, 'CH3': 2} + assert success + + # 1,2-Dimethyl benzene (ortho-xylene) + rdkitmol = Chemical('o-xylene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 4, 'Caro': 2, 'CH3': 2} + assert success + + # n-Propyl benzene (C6H5-CH2-CH2-CH3) + rdkitmol = Chemical('propylbenzene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 5, 'Caro': 1, 'CH2': 2, 'CH3': 1} + assert success + + # Isopropyl benzene (cumene) (C6H5-CH(CH3)2) + rdkitmol = Chemical('isopropylbenzene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 5, 'Caro': 1, 'CH': 1, 'CH3': 2} + assert success + + # 1,3,5-Trimethyl benzene (mesitylene) + rdkitmol = Chemical('1,3,5-trimethylbenzene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 3, 'Caro': 3, 'CH3': 3} + assert success + + # 1,2,4-Trimethyl benzene + rdkitmol = Chemical('1,2,4-trimethylbenzene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 3, 'Caro': 3, 'CH3': 3} + assert success + + # Naphthalene (C10H8) + rdkitmol = Chemical('naphthalene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 8, 'Cfused_aromatic': 2} + assert success + + # n-Nonane (CH3-(CH2)7-CH3) + rdkitmol = Chemical('nonane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 2, 'CH2': 7} + assert success + + # 2,2-Dimethyl heptane (CH3-CH2-CH2-CH2-CH2-C(CH3)2-CH3) + rdkitmol = Chemical('2,2-dimethylheptane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 4, 'C': 1, 'CH2': 4} + assert success + + # Butyl benzene (C6H5-CH2-CH2-CH2-CH3) + rdkitmol = Chemical('butylbenzene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 5, 'Caro': 1, 'CH2': 3, 'CH3': 1} + assert success + + # Tertiobutyl benzene (C6H5-C(CH3)3) + rdkitmol = Chemical('t-butylbenzene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 5, 'Caro': 1, 'C': 1, 'CH3': 3} + assert success + + # 1-Methyl naphthalene + rdkitmol = Chemical('1-methylnaphthalene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 7, 'Cfused_aromatic': 2, 'Caro': 1, 'CH3': 1} + assert success + + # Long chain n-alkanes + alkanes = { + 'decane': {'CH3': 2, 'CH2': 8}, + 'dodecane': {'CH3': 2, 'CH2': 10}, + 'tridecane': {'CH3': 2, 'CH2': 11}, + 'tetradecane': {'CH3': 2, 'CH2': 12}, + 'pentadecane': {'CH3': 2, 'CH2': 13}, + 'hexadecane': {'CH3': 2, 'CH2': 14}, + 'heptadecane': {'CH3': 2, 'CH2': 15} + } + + for name, expected in alkanes.items(): + rdkitmol = Chemical(name).rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == expected + assert success + + # Phenanthrene (C14H10) + rdkitmol = Chemical('phenanthrene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 10, 'Cfused_aromatic': 4} + assert success + + +@pytest.mark.rdkit +@pytest.mark.skipif(rdkit is None, reason="requires rdkit") +def test_extension_naphtenic(): + '''Vitu, Stéphane, Jean-Noël Jaubert, and Fabrice Mutelet. "Extension of the PPR78 Model + (Predictive 1978, Peng–Robinson EOS with Temperature Dependent Kij Calculated through + a Group Contribution Method) to Systems Containing Naphtenic Compounds." + Fluid Phase Equilibria 243, no. 1-2 (May 10, 2006): 9-28. doi:10.1016/j.fluid.2006.02.004. + ''' + # 1,2,3-Trimethyl benzene + rdkitmol = Chemical('1,2,3-trimethylbenzene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 3, 'Caro': 3, 'CH3': 3} + assert success + + # 2,2,4,4,6,8,8-Heptamethyl nonane + rdkitmol = Chemical('2,2,4,4,6,8,8-heptamethylnonane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 9, 'CH': 1, 'C': 3, 'CH2': 3} + assert success + + # 3,4-Dimethyl hexane + rdkitmol = Chemical('3,4-dimethylhexane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 4, 'CH': 2, 'CH2': 2} + assert success + + # 3-Methyl pentane (already covered in previous tests, but including for completeness) + rdkitmol = Chemical('3-methylpentane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 3, 'CH': 1, 'CH2': 2} + assert success + + # 4-Methyl heptane + rdkitmol = Chemical('4-methylheptane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 3, 'CH': 1, 'CH2': 4} + assert success + + # Biphenyl (phenyl benzene) + rdkitmol = Chemical('biphenyl').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 10, 'Caro': 2} + assert success + + # Cis-decalin + rdkitmol = Chemical('cis-decalin').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH2cyclic': 8, 'CHcyclic': 2} + assert success + + # Cycloheptane + rdkitmol = Chemical('cycloheptane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH2cyclic': 7} + assert success + + # Cyclohexane + rdkitmol = Chemical('cyclohexane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH2cyclic': 6} + assert success + + # Cyclooctane + rdkitmol = Chemical('cyclooctane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH2cyclic': 8} + assert success + + # Cyclopentane + rdkitmol = Chemical('cyclopentane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH2cyclic': 5} + assert success + + # Ethyl cyclohexane + rdkitmol = Chemical('ethylcyclohexane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH2cyclic': 5, 'CHcyclic': 1, 'CH2': 1, 'CH3': 1} + assert success + + # Methyl cyclohexane + rdkitmol = Chemical('methylcyclohexane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH2cyclic': 5, 'CHcyclic': 1, 'CH3': 1} + assert success + + # Methyl cyclopentane + rdkitmol = Chemical('methylcyclopentane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH2cyclic': 4, 'CHcyclic': 1, 'CH3': 1} + assert success + + # n-Butyl benzene + rdkitmol = Chemical('butylbenzene').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CHaro': 5, 'Caro': 1, 'CH2': 3, 'CH3': 1} + assert success + + # n-Propyl cyclohexane + rdkitmol = Chemical('propylcyclohexane').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH2cyclic': 5, 'CHcyclic': 1, 'CH2': 2, 'CH3': 1} + assert success + + # Tetralin (1,2,3,4-tetrahydronaphthalene) + rdkitmol = Chemical('tetralin').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'Cfused_aromatic': 2, 'CHaro': 4, 'CH2cyclic': 4} + assert success + + # Trans-decalin + rdkitmol = Chemical('trans-decalin').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH2cyclic': 8, 'CHcyclic': 2} + assert success + +@pytest.mark.rdkit +@pytest.mark.skipif(rdkit is None, reason="requires rdkit") +def test_SH_group(): + """Privat, Romain, Jean-Noël Jaubert, and Fabrice Mutelet. "Addition of + the Sulfhydryl Group (-SH) to the PPR78 Model (Predictive 1978, + Peng-Robinson EOS with Temperature Dependent kIj Calculated through + a Group Contribution Method)." The Journal of Chemical + Thermodynamics 40, no. 9 (September 1, 2008): 1331-41. + """ + # Methyl mercaptan (CH3-SH) + rdkitmol = Chemical('methanethiol').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 1, 'SH': 1} + assert success + + # Ethyl mercaptan (CH3-CH2-SH) + rdkitmol = Chemical('ethanethiol').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 1, 'CH2': 1, 'SH': 1} + assert success + + # Propyl mercaptan (CH3-CH2-CH2-SH) + rdkitmol = Chemical('propane-1-thiol').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 1, 'CH2': 2, 'SH': 1} + assert success + + # Butyl mercaptan (CH3-CH2-CH2-CH2-SH) + rdkitmol = Chemical('butane-1-thiol').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 1, 'CH2': 3, 'SH': 1} + assert success + + # Isopropyl mercaptan (CH3-CH(CH3)-SH) + rdkitmol = Chemical('propane-2-thiol').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 2, 'CH': 1, 'SH': 1} + assert success + + # Secbutyl mercaptan (CH3-CH2-CH(CH3)-SH) + rdkitmol = Chemical('butane-2-thiol').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 2, 'CH2': 1, 'CH': 1, 'SH': 1} + assert success + + # Isobutyl mercaptan (CH3-CH(CH3)-CH2-SH) + rdkitmol = Chemical('2-methylpropane-1-thiol').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 2, 'CH': 1, 'CH2': 1, 'SH': 1} + assert success + + # Tertbutyl mercaptan ((CH3)3C-SH) + rdkitmol = Chemical('2-methylpropane-2-thiol').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=PPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 3, 'C': 1, 'SH': 1} + assert success + + +@pytest.mark.rdkit +@pytest.mark.skipif(rdkit is None, reason="requires rdkit") +def test_temperature_variation_argon_fluoranthene(): + """Test temperature dependence for Argon/Fluoranthene system.""" + # Test temperatures and expected values + T_k_pairs = [ + (150.00, 0.0329), + (298.99, 0.1241), + (400.00, 0.1149) + ] + + # Create Chemical objects once + argon = Chemical('Ar') + fluoranthene = Chemical('fluoranthene') + + # Get group contributions + groups1, _, _, success1, _ = smarts_fragment_priority(catalog=EPPR78_GROUPS_LIST, rdkitmol=argon.rdkitmol) + + # Convert assignments to readable format + groups1_readable = readable_assignment_EPPR78(groups1) + + # At time of test creation own fragmentation is different + groups2_readable = {'Cfused_aromatic': 6, 'CHaro': 10} + + for T, k_expected in T_k_pairs: + kij = PPR78_kij(T, + groups1_readable, + groups2_readable, + 150.86, 48.98E5, 0, + 905, 26.1E5, 0.587526, + version='extended') + + assert abs(kij - k_expected) < 0.0001, f"At T={T}K: Expected kij={k_expected}, got {kij}" + + +@pytest.mark.rdkit +@pytest.mark.skipif(rdkit is None, reason="requires rdkit") +def test_naphthacene_ethanedithiol(): + """Test for Naphthacene/1,2-Ethanedithiol system using extended PPR78 model. + Value verified against author's reference calculator.""" + T = 298.15 # K + + # Create Chemical objects + naphthacene = Chemical('naphthacene') + ethanedithiol = Chemical('1,2-ethanedithiol') + + # Get group contributions from Chemical objects using EPPR78_GROUPS_LIST + groups1, _, _, success1, _ = smarts_fragment_priority(catalog=EPPR78_GROUPS_LIST, rdkitmol=naphthacene.rdkitmol) + groups2, _, _, success2, _ = smarts_fragment_priority(catalog=EPPR78_GROUPS_LIST, rdkitmol=ethanedithiol.rdkitmol) + + assert success1 and success2, "Group contribution analysis failed" + + # Calculate kij using properties from Chemical objects + kij = PPR78_kij(T, + readable_assignment_EPPR78(groups1), + readable_assignment_EPPR78(groups2), + naphthacene.Tc, naphthacene.Pc, naphthacene.omega, + ethanedithiol.Tc, ethanedithiol.Pc, ethanedithiol.omega, + version='extended') + + assert abs(kij - 0.1185) < 0.0001, f"Expected kij=0.1185, got {kij}" + +# Test known assignments from the author's spreadsheet + +@pytest.mark.rdkit +@pytest.mark.skipif(rdkit is None, reason="requires rdkit") +def test_known_fragmentations(): + """Test all known molecular fragmentations against computed ones.""" + + # Propyl mercaptan (CH3-CH2-CH2-SH) + rdkitmol = Chemical('107-03-9').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=EPPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_PPR78(assignment) == {'CH3': 1, 'CH2': 2, 'SH': 1} + assert success + + rdkitmol = Chemical('CYCLOOCTENE').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=EPPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_EPPR78(assignment) == {'CH2cyclic': 6, 'CHCcycloalkenic': 2} + assert success + rdkitmol = Chemical('INDENE').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=EPPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_EPPR78(assignment) == {'CHaro': 4, 'Caro': 2, 'CH2cyclic': 1, 'CHCcycloalkenic': 2} + assert success + rdkitmol = Chemical('NAPHTHACENE').rdkitmol + assignment, _, _, success, status = smarts_fragment_priority(catalog=EPPR78_GROUPS_LIST, rdkitmol=rdkitmol) + assert readable_assignment_EPPR78(assignment) == {'CHaro': 12, 'Cfused_aromatic': 6} + assert success + + # CAS numbers of molecules with known/acceptable differences in fragmentation + FRAGMENTATION_EXCEPTIONS = [ + "696-29-7", # ISOPROPYLCYCLOHEXANE + "79-92-5", # CAMPHENE + "555-10-2", # beta-PHELLANDRENE + "586-62-9", # TERPINOLENE + "1961-96-2", # 1-PHENYLINDENE + "16219-75-3", # 5-ETHYLIDENE-2-NORBORNENE + "83-32-9", # ACENAPHTHENE + "66325-11-9", # 1-n-HEXYL-1,2,3,4-TETRAHYDRONAPHTHALENE + "496-11-7", # INDANE + "208-96-8", # ACENAPHTHALENE + "86-73-7", # FLUORENE + "95-13-6", # INDENE + "767-59-9", # 1-METHYLINDENE + "4773-83-5", # 1,2,3-TRIMETHYLINDENE + "2177-47-1", # 2-METHYLINDENE + "25103-58-6", # tert-DODECYL MERCAPTAN + "206-44-0", + ] + # FRAGMENTATION_EXCEPTIONS = [] + + + # Load known fragmentations + df = pd.read_csv(os.path.join(folder, 'EPPR_known_fraagmentations.csv'), sep='\t') + + # Clean up column names - remove any whitespace + df.columns = df.columns.str.strip() + + # Convert CAS and Name columns to strings, strip whitespace + df['CAS'] = df['CAS'].astype(str).str.strip() + df['Name'] = df['Name'].astype(str).str.strip() + + # Dictionary to store test results + failures = [] + molecule_differences = {} + + # Iterate through each molecule + for idx, row in df.iterrows(): + CAS = row['CAS'] + if '-' not in CAS: + CAS = int_to_CAS(int(CAS)) + name = row['Name'] + + try: + # Create a dictionary of expected non-zero groups + expected_groups = {col: count for col, count in row.items() + if col not in ['CAS', 'Name'] and count != 0} + + # Get molecular structure and compute fragments + try: + mol = Chemical(CAS).rdkitmol + except: + mol = Chemical(name).rdkitmol + assignment, _, _, success, status = smarts_fragment_priority( + catalog=EPPR78_GROUPS_LIST, + rdkitmol=mol + ) + + # Convert assignment IDs to group names + computed_groups = readable_assignment_EPPR78(assignment) + + if not success: + failures.append({ + 'cas': CAS, + 'name': name, + 'error': f"Failed to compute fragments: {status}" + }) + continue + + # Compare all groups and record differences + all_groups = set(expected_groups.keys()) | set(computed_groups.keys()) + differences = {} + for group in all_groups: + expected = expected_groups.get(group, 0) + computed = computed_groups.get(group, 0) + if expected != computed: + differences[group] = { + 'expected': expected, + 'computed': computed + } + + if differences: + if CAS in FRAGMENTATION_EXCEPTIONS: + continue + molecule_differences[f"{name} ({CAS})"] = { + 'expected_structure': expected_groups, + 'computed_structure': computed_groups, + 'differences': differences + } + + except Exception as e: + failures.append({ + 'cas': CAS, + 'name': name, + 'error': str(e) + }) + + # Prepare detailed error messages + failure_message = "" + if failures: + failure_details = [f"{f['name']} ({f['cas']}): {f['error']}" for f in failures] + failure_message = f"{len(failures)} molecules failed fragment computation:\n" + "\n".join(failure_details) + + difference_message = "" + if molecule_differences: + diff_details = [] + for mol_name, diff in molecule_differences.items(): + diff_details.append(f"\n{mol_name}:") + diff_details.append("Expected structure:") + diff_details.append(str(diff['expected_structure'])) + diff_details.append("Computed structure:") + diff_details.append(str(diff['computed_structure'])) + diff_details.append("Differences:") + for group, vals in diff['differences'].items(): + diff_details.append(f" {group}: expected={vals['expected']}, computed={vals['computed']}") + + difference_message = f"{len(molecule_differences)} molecules have structural differences:\n" + "\n".join(diff_details) + + # Assert with detailed messages + assert not failures, failure_message + assert not molecule_differences, difference_message \ No newline at end of file diff --git a/thermo/electrochem.py b/thermo/electrochem.py index d03e716c..b38025a6 100644 --- a/thermo/electrochem.py +++ b/thermo/electrochem.py @@ -749,8 +749,6 @@ def Laliberte_heat_capacity_mix(T, ws, a1s, a2s, a3s, a4s, a5s, a6s): Temperature of fluid [K] ws : array Weight fractions of fluid components other than water - CASRNs : array - CAS numbers of the fluid components other than water Returns ------- @@ -798,7 +796,7 @@ def Laliberte_heat_capacity(T, ws, CASRNs): Temperature of fluid [K] ws : array Weight fractions of fluid components other than water - CASRNs : array + CASRNs : list[str] CAS numbers of the fluid components other than water Returns diff --git a/thermo/group_contribution/group_contribution_base.py b/thermo/group_contribution/group_contribution_base.py index 2741e089..0213115c 100644 --- a/thermo/group_contribution/group_contribution_base.py +++ b/thermo/group_contribution/group_contribution_base.py @@ -204,6 +204,21 @@ def smarts_fragment_priority(catalog, rdkitmol=None, smi=None): hits = list(hits) else: hits = list(rdkitmol.GetSubstructMatches(patt)) + if not hits and len(obj.atoms) == 1 and 'H' in obj.atoms: + hits = list(rdkitmol_Hs.GetSubstructMatches(patt)) + # Special handling for H2 molecule + if hits: + # If this is a hydrogen-only group (like H2) and the molecule has only H atoms + num_atoms = rdkitmol_Hs.GetNumAtoms() + if num_atoms == H_count and H_count == obj.atoms['H']: + # For H2, return all expected values + counts = {key: 1} # One instance of this group (H2) + group_assignments = {key: [()]} # Empty tuple as there are no heavy atoms + matched_atoms = set() # No heavy atoms to match + success = True + status = 'OK' + return counts, group_assignments, matched_atoms, success, status + if hits: all_matches[key] = hits counts[key] = len(hits) diff --git a/thermo/group_contribution/ppr78.py b/thermo/group_contribution/ppr78.py new file mode 100644 index 00000000..97f59d40 --- /dev/null +++ b/thermo/group_contribution/ppr78.py @@ -0,0 +1,988 @@ +'''Chemical Engineering Design Library (ChEDL). Utilities for process modeling. +Copyright (C) 2024 Caleb Bell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +This module contains an implementation of the PPR78 +group-contribution method. +This functionality requires the RDKit library to work. + +.. contents:: :local: + +.. autofunction:: thermo.group_contribution.PPR78_kij +.. autofunction:: thermo.group_contribution.PPR78_kijs + +''' +__all__ = ['PPR78_kij', 'PPR78_kijs', 'PPR78_GROUP_IDS', 'PPR78_INTERACTIONS', 'PPR78_GROUPS'] + +from thermo.unifac import priority_from_atoms +from math import sqrt +from fluids.constants import R + +SINGLE_BOND = 'single' +DOUBLE_BOND = 'double' +TRIPLE_BOND = 'triple ' +AROMATIC_BOND = 'aromatic' + +GROUP_ID_COUNTER = 1 + + + +class PPR78GroupContribution: + __slots__ = ('group', 'group_id', 'atoms', 'bonds', 'smarts', 'priority', 'hydrogen_from_smarts', 'smart_rdkit') + + def __init__(self, group, atoms=None, bonds=None, smarts=None, priority=None, hydrogen_from_smarts=False): + global GROUP_ID_COUNTER + self.group = group + self.atoms = atoms + self.bonds = bonds + self.smarts = smarts + self.priority = priority + self.group_id = GROUP_ID_COUNTER + self.hydrogen_from_smarts = hydrogen_from_smarts + self.smart_rdkit = None + GROUP_ID_COUNTER += 1 + + def __repr__(self): + return f"GroupContribution(group={self.group!r}, atoms={self.atoms!r}, bonds={self.bonds!r})" + +PPR78_GROUPS_BY_ID = {} +PPR78_GROUPS = {} +# The order of these statements is sensitive +PPR78_GROUPS['CH3'] = PPR78GroupContribution('CH3', smarts='[CX4;H3]', atoms={'C': 1, 'H': 3}, bonds={}) +PPR78_GROUPS['CH2'] = PPR78GroupContribution('CH2', smarts='[CX4;H2]', atoms={'C': 1, 'H': 2}, bonds={}) +PPR78_GROUPS['CH'] = PPR78GroupContribution('CH', smarts='[CX4;H1]', atoms={'C': 1, 'H': 1}, bonds={}) +PPR78_GROUPS['C'] = PPR78GroupContribution('C', smarts='[CX4;H0]', atoms={'C': 1, 'H': 0}, bonds={}) +# Specifically methane +PPR78_GROUPS['CH4'] = PPR78GroupContribution('CH4', atoms={'C': 1, 'H': 4}, bonds={}, smarts='[CX4H4]') +# Specifically ethane +PPR78_GROUPS['C2H6'] = PPR78GroupContribution('C2H6', atoms={'C': 2, 'H': 6}, bonds={}, smarts='[CH3X4]-[CH3X4]') +# messy ones, did some examples with all of these and they did make sense to me +PPR78_GROUPS['CHaro'] = PPR78GroupContribution('CHaro', atoms={'C': 1, 'H': 1}, bonds={AROMATIC_BOND: 2}, smarts='[cH]') +PPR78_GROUPS['Caro'] = PPR78GroupContribution('Caro', atoms={'C': 1}, bonds={AROMATIC_BOND: 2}, smarts='[c]') +PPR78_GROUPS['Cfused_aromatic'] = PPR78GroupContribution('Cfused_aromatic', atoms={'C': 1}, bonds={AROMATIC_BOND: 3}, smarts='[cR2]', priority=10000) +PPR78_GROUPS['CH2cyclic'] = PPR78GroupContribution('CH2cyclic', atoms={'C': 1, 'H': 2}, bonds={}, smarts='[CH2R]') +PPR78_GROUPS['CHcyclic'] = PPR78GroupContribution('CHcyclic', atoms={'C': 1, 'H': 1}, bonds={}, smarts='[CHR]') +# CO2, N2, H2S from PSRK +PPR78_GROUPS['CO2'] = PPR78GroupContribution('CO2', atoms={'C': 1, 'O': 2}, bonds={DOUBLE_BOND: 2}, smarts='[CX2H0](=[OX1H0])=[OX1H0]') +PPR78_GROUPS['N2'] = PPR78GroupContribution('N2', atoms={'N': 2}, bonds={TRIPLE_BOND: 1}, smarts='N#N') +PPR78_GROUPS['H2S'] = PPR78GroupContribution('H2S', atoms={'S': 1, 'H': 2}, bonds={}, smarts='[SH2]') + +PPR78_GROUPS['SH'] = PPR78GroupContribution('SH', atoms={'S': 1, 'H': 1}, bonds={}, smarts='[S;H1]') + +# Populate PPR78_GROUPS_BY_ID for easy lookup +for group in PPR78_GROUPS.values(): + if group.priority is None: + if group.atoms is not None: + group.priority = priority_from_atoms(group.atoms, group.bonds) + PPR78_GROUPS_BY_ID[group.group_id] = group + + +GROUP_ID_COUNTER = 1 +EPPR78_GROUPS_BY_ID = {} +EPPR78_GROUPS = {} +# The order of these statements is sensitive +EPPR78_GROUPS['CH3'] = PPR78GroupContribution('CH3', smarts='[CX4;H3]', atoms={'C': 1, 'H': 3}, bonds={}) +EPPR78_GROUPS['CH2'] = PPR78GroupContribution('CH2', smarts='[CX4;H2]', atoms={'C': 1, 'H': 2}, bonds={}) +EPPR78_GROUPS['CH'] = PPR78GroupContribution('CH', smarts='[CX4;H1]', atoms={'C': 1, 'H': 1}, bonds={}) +EPPR78_GROUPS['C'] = PPR78GroupContribution('C', smarts='[CX4;H0]', atoms={'C': 1, 'H': 0}, bonds={}) +EPPR78_GROUPS['CH4'] = PPR78GroupContribution('CH4', atoms={'C': 1, 'H': 4}, bonds={}, smarts='[CX4H4]') +EPPR78_GROUPS['C2H6'] = PPR78GroupContribution('C2H6', atoms={'C': 2, 'H': 6}, bonds={}, smarts='[CH3X4]-[CH3X4]') +EPPR78_GROUPS['CHaro'] = PPR78GroupContribution('CHaro', atoms={'C': 1, 'H': 1}, bonds={AROMATIC_BOND: 2}, smarts='[cH]') +EPPR78_GROUPS['Caro'] = PPR78GroupContribution('Caro', atoms={'C': 1}, bonds={AROMATIC_BOND: 2}, smarts='[c]') +EPPR78_GROUPS['Cfused_aromatic'] = PPR78GroupContribution('Cfused_aromatic', atoms={'C': 1}, bonds={AROMATIC_BOND: 3}, + smarts=[ #ACENAPHTHENE has 2 fused groups, FLUORANTHENE has 6, NAPHTHACENE, 6, and INDENE 0. FLUORENE is supposed to have 0, this finds 2 + '[c;r4,r5,r6,r7,r8;H0;R2,R3,R4,R5,R6;a;$([c;r4,r5,r6,r7,r8;H0;R2,R3,R4,R5,R6;a]([c;r4,r5,r6,r7,r8;H0;R2,R3,R4,R5,R6;a])([c;r4,r5,r6,r7,r8;R1,R2,R3,R4,R5,R6;a])([c;r4,r5,r6,r7,r8;R1,R2,R3,R4,R5,R6;a]))]', + ], priority=10000) +EPPR78_GROUPS['CH2cyclic'] = PPR78GroupContribution('CH2cyclic', atoms={'C': 1, 'H': 2}, bonds={}, smarts='[CH2R]') +# CHcyclic is not also Ccyclic - major difference +EPPR78_GROUPS['CHcyclic'] = PPR78GroupContribution('CHcyclic', atoms={'C': 1, 'H': 1}, bonds={}, smarts='[C;H1,H0;R]', hydrogen_from_smarts=True) +EPPR78_GROUPS['CO2'] = PPR78GroupContribution('CO2', atoms={'C': 1, 'O': 2}, bonds={DOUBLE_BOND: 2}, smarts='[CX2H0](=[OX1H0])=[OX1H0]') +EPPR78_GROUPS['N2'] = PPR78GroupContribution('N2', atoms={'N': 2}, bonds={TRIPLE_BOND: 1}, smarts='N#N') +EPPR78_GROUPS['H2S'] = PPR78GroupContribution('H2S', atoms={'S': 1, 'H': 2}, bonds={}, smarts='[SH2]') +EPPR78_GROUPS['SH'] = PPR78GroupContribution('SH', atoms={'S': 1, 'H': 1}, bonds={}, smarts='[S;H1]') + +# Water +EPPR78_GROUPS['H2O'] = PPR78GroupContribution('H2O', + atoms={'O': 1, 'H': 2}, + bonds={}, + smarts='[OH2]') + +# Ethylene +EPPR78_GROUPS['C2H4'] = PPR78GroupContribution('C2H4', + atoms={'C': 2, 'H': 4}, + bonds={DOUBLE_BOND: 1}, priority=10000, + smarts='[CH2]=[CH2]') + +# Combined alkenic CH2/CH group +EPPR78_GROUPS['CH2CHalkenic'] = PPR78GroupContribution('CH2CHalkenic', + atoms={'C': 1, 'H': 1}, # Average values + bonds={DOUBLE_BOND: 1}, hydrogen_from_smarts=True, + smarts=['[C;!R;H1,H2;$(C=[C])]'], + priority=1000) + +# Alkenic carbon without hydrogen +EPPR78_GROUPS['Calkenic'] = PPR78GroupContribution('Calkenic', + atoms={'C': 1}, + bonds={DOUBLE_BOND: 1}, + smarts='[C;!R;H0;$(C=[C])]') + +# Combined cycloalkenic CH/C group +EPPR78_GROUPS['CHCcycloalkenic'] = PPR78GroupContribution('CHCcycloalkenic', + atoms={'C': 1, 'H': 0.5}, # Average values + bonds={DOUBLE_BOND: 1}, hydrogen_from_smarts=True, + smarts=['[C;R;H1,H0;$(C=[C])]'], + priority=5000) + +# Hydrogen molecule +EPPR78_GROUPS['H2'] = PPR78GroupContribution('H2', + atoms={'H': 2}, + bonds={SINGLE_BOND: 1}, + smarts='[H][H]', hydrogen_from_smarts=True) + +# Fluorinated compounds +EPPR78_GROUPS['C2F6'] = PPR78GroupContribution('C2F6', + atoms={'C': 2, 'F': 6}, + bonds={SINGLE_BOND: 7}, # 1 C-C + 6 C-F + smarts='[C;X4;H0;F3]-[C;X4;H0;F3]') + +EPPR78_GROUPS['CF3'] = PPR78GroupContribution('CF3', + atoms={'C': 1, 'F': 3}, + bonds={}, + smarts='[C;X4;H0;F3]') + +EPPR78_GROUPS['CF2'] = PPR78GroupContribution('CF2', + atoms={'C': 1, 'F': 2}, + bonds={}, + smarts='[C;X4;H0;F2]') + +# Combined fluorinated alkenic CF2/CF group +EPPR78_GROUPS['CF2CFdouble'] = PPR78GroupContribution('CF2CFdouble', + atoms={'C': 1, 'F': 1.5}, # Average values + bonds={DOUBLE_BOND: 1}, + smarts=['[C;H0;F2]=[C]', '[C;H0;F1]=[C]'], + priority=1000) + +# Partially fluorinated ethanes +EPPR78_GROUPS['C2H4F2'] = PPR78GroupContribution('C2H4F2', + atoms={'C': 2, 'H': 4, 'F': 2}, + bonds={SINGLE_BOND: 7}, # 1 C-C + 4 C-H + 2 C-F + smarts='[C;X4;H2;F1]-[C;X4;H2;F1]') + +EPPR78_GROUPS['C2H2F4'] = PPR78GroupContribution('C2H2F4', + atoms={'C': 2, 'H': 2, 'F': 4}, + bonds={SINGLE_BOND: 7}, # 1 C-C + 2 C-H + 4 C-F + smarts='[C;X4;H1;F2]-[C;X4;H1;F2]') + +# Carbon monoxide +EPPR78_GROUPS['CO'] = PPR78GroupContribution('CO', + atoms={'C': 1, 'O': 1}, + bonds={TRIPLE_BOND: 1}, + smarts='[C]#[O]') + +# Noble gases +EPPR78_GROUPS['He'] = PPR78GroupContribution('He', + atoms={'He': 1}, + bonds={}, + smarts='[He]') + +EPPR78_GROUPS['Ar'] = PPR78GroupContribution('Ar', + atoms={'Ar': 1}, + bonds={}, + smarts='[Ar]') + +# Sulfur dioxide +EPPR78_GROUPS['SO2'] = PPR78GroupContribution('SO2', + atoms={'S': 1, 'O': 2}, + bonds={DOUBLE_BOND: 2}, + smarts='[SX4](=[OX1])(=[OX1])') + +# Oxygen molecule +EPPR78_GROUPS['O2'] = PPR78GroupContribution('O2', + atoms={'O': 2}, + bonds={DOUBLE_BOND: 1}, + smarts='[O]=[O]') + +# Nitric oxide +EPPR78_GROUPS['NO'] = PPR78GroupContribution('NO', + atoms={'N': 1, 'O': 1}, + bonds={DOUBLE_BOND: 1}, + smarts='[N]=[O]') + +# Carbonyl sulfide +EPPR78_GROUPS['COS'] = PPR78GroupContribution('COS', + atoms={'C': 1, 'O': 1, 'S': 1}, + bonds={DOUBLE_BOND: 2}, + smarts='[O]=[C]=[S]') + +# Ammonia +EPPR78_GROUPS['NH3'] = PPR78GroupContribution('NH3', + atoms={'N': 1, 'H': 3}, + bonds={}, + smarts='[NH3]') + +# Combined NO2/N2O4 group +EPPR78_GROUPS['NO2N2O4'] = PPR78GroupContribution('NO2N2O4', + atoms={'N': 1.5, 'O': 2}, # Average values + bonds={DOUBLE_BOND: 1, SINGLE_BOND: 1}, + smarts=['[N](=[O])[O]', '[N]([O])[O]-[N]([O])[O]'], + priority=1000) + +# Nitrous oxide +EPPR78_GROUPS['N2O'] = PPR78GroupContribution('N2O', + atoms={'N': 2, 'O': 1}, + bonds={DOUBLE_BOND: 2}, + smarts='[N]=[N]=[O]') + +# Acetylene +EPPR78_GROUPS['C2H2'] = PPR78GroupContribution('C2H2', + atoms={'C': 2, 'H': 2}, + bonds={TRIPLE_BOND: 1}, + smarts='[CH]#[CH]') + +# Terminal acetylenic group +EPPR78_GROUPS['HC≡C'] = PPR78GroupContribution('HC≡C', + atoms={'C': 1, 'H': 1}, + bonds={TRIPLE_BOND: 1}, + smarts='[CH]#[C]') + +# Internal acetylenic group +EPPR78_GROUPS['C≡C'] = PPR78GroupContribution('C≡C', + atoms={'C': 1}, + bonds={TRIPLE_BOND: 1}, + smarts='[C]#[C]') + +# Populate EPPR78_GROUPS_BY_ID for easy lookup +for group in EPPR78_GROUPS.values(): + if group.priority is None: + if group.atoms is not None: + group.priority = priority_from_atoms(group.atoms, group.bonds) + EPPR78_GROUPS_BY_ID[group.group_id] = group + +# format A, B value indexed by tuple of groups +PPR78_INTERACTIONS = {} +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['CH3'])] = (0.0, 0.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['CH2'])] = (74.81, 165.7) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['CH'])] = (261.5, 388.8) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['C'])] = (396.7, 804.3) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['CH4'])] = (32.94, -35.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['C2H6'])] = (8.579, -29.51) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['CHaro'])] = (90.25, 146.1) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['Caro'])] = (62.80, 41.86) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['Cfused_aromatic'])] = (62.80, 41.86) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['CH2cyclic'])] = (40.38, 95.90) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['CHcyclic'])] = (98.48, 231.6) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['CO2'])] = (164.0, 269.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['N2'])] = (52.74, 87.19) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['H2S'])] = (158.4, 241.2) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH3'], PPR78_GROUPS['SH'])] = (799.9, 2109.0) + +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['CH2'])] = (0.0, 0.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['CH'])] = (51.47, 79.61) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['C'])] = (88.53, 315.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['CH4'])] = (36.72, 108.4) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['C2H6'])] = (31.23, 84.76) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['CHaro'])] = (29.78, 58.17) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['Caro'])] = (3.775, 144.8) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['Cfused_aromatic'])] = (3.775, 144.8) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['CH2cyclic'])] = (12.78, 28.37) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['CHcyclic'])] = (-54.90, -319.5) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['CO2'])] = (136.9, 254.6) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['N2'])] = (82.28, 202.8) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['H2S'])] = (134.6, 138.3) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2'], PPR78_GROUPS['SH'])] = (459.5, 627.3) + +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['CH'])] = (0.0, 0.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['C'])] = (-305.7, -250.8) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['CH4'])] = (145.2, 301.6) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['C2H6'])] = (174.3, 352.1) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['CHaro'])] = (103.3, 191.8) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['Caro'])] = (6.177, -33.97) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['Cfused_aromatic'])] = (6.177, -33.97) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['CH2cyclic'])] = (101.9, -90.93) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['CHcyclic'])] = (-226.5, -51.47) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['CO2'])] = (184.3, 762.1) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['N2'])] = (365.4, 521.9) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['H2S'])] = (193.9, 307.8) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH'], PPR78_GROUPS['SH'])] = (425.5, 514.7) + +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['C'])] = (0.0, 0.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['CH4'])] = (263.9, 531.5) +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['C2H6'])] = (333.2, 203.8) +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['CHaro'])] = (158.9, 613.2) +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['Caro'])] = (79.61, -326.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['Cfused_aromatic'])] = (79.61, -326.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['CH2cyclic'])] = (177.1, 601.9) +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['CHcyclic'])] = (17.84, -109.5) +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['CO2'])] = (287.9, 346.2) +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['N2'])] = (263.9, 772.6) +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['H2S'])] = (305.1, -143.1) +PPR78_INTERACTIONS[(PPR78_GROUPS['C'], PPR78_GROUPS['SH'])] = (682.9, 1544.0) + +PPR78_INTERACTIONS[(PPR78_GROUPS['CH4'], PPR78_GROUPS['CH4'])] = (0.0, 0.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH4'], PPR78_GROUPS['C2H6'])] = (13.04, 6.863) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH4'], PPR78_GROUPS['CHaro'])] = (67.26, 167.5) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH4'], PPR78_GROUPS['Caro'])] = (139.3, 464.3) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH4'], PPR78_GROUPS['Cfused_aromatic'])] = (139.3, 464.3) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH4'], PPR78_GROUPS['CH2cyclic'])] = (36.37, 26.42) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH4'], PPR78_GROUPS['CHcyclic'])] = (40.15, 255.3) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH4'], PPR78_GROUPS['CO2'])] = (137.3, 194.2) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH4'], PPR78_GROUPS['N2'])] = (37.90, 37.2) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH4'], PPR78_GROUPS['H2S'])] = (181.2, 288.9) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH4'], PPR78_GROUPS['SH'])] = (706.0, 1483.0) + +PPR78_INTERACTIONS[(PPR78_GROUPS['C2H6'], PPR78_GROUPS['C2H6'])] = (0.0, 0.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['C2H6'], PPR78_GROUPS['CHaro'])] = (41.18, 50.79) +PPR78_INTERACTIONS[(PPR78_GROUPS['C2H6'], PPR78_GROUPS['Caro'])] = (-3.088, 13.04) +PPR78_INTERACTIONS[(PPR78_GROUPS['C2H6'], PPR78_GROUPS['Cfused_aromatic'])] = (-3.088, 13.04) +PPR78_INTERACTIONS[(PPR78_GROUPS['C2H6'], PPR78_GROUPS['CH2cyclic'])] = (8.579, 76.86) +PPR78_INTERACTIONS[(PPR78_GROUPS['C2H6'], PPR78_GROUPS['CHcyclic'])] = (10.29, -52.84) +PPR78_INTERACTIONS[(PPR78_GROUPS['C2H6'], PPR78_GROUPS['CO2'])] = (135.5, 239.5) +PPR78_INTERACTIONS[(PPR78_GROUPS['C2H6'], PPR78_GROUPS['N2'])] = (61.59, 84.92) +PPR78_INTERACTIONS[(PPR78_GROUPS['C2H6'], PPR78_GROUPS['H2S'])] = (157.2, 217.1) + +PPR78_INTERACTIONS[(PPR78_GROUPS['CHaro'], PPR78_GROUPS['CHaro'])] = (0.0, 0.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['CHaro'], PPR78_GROUPS['Caro'])] = (-13.38, 20.25) +PPR78_INTERACTIONS[(PPR78_GROUPS['CHaro'], PPR78_GROUPS['Cfused_aromatic'])] = (-13.38, 20.25) +PPR78_INTERACTIONS[(PPR78_GROUPS['CHaro'], PPR78_GROUPS['CH2cyclic'])] = (29.17, 69.32) +PPR78_INTERACTIONS[(PPR78_GROUPS['CHaro'], PPR78_GROUPS['CHcyclic'])] = (-26.42, -789.2) +PPR78_INTERACTIONS[(PPR78_GROUPS['CHaro'], PPR78_GROUPS['CO2'])] = (102.6, 161.3) +PPR78_INTERACTIONS[(PPR78_GROUPS['CHaro'], PPR78_GROUPS['N2'])] = (185.2, 490.6) +PPR78_INTERACTIONS[(PPR78_GROUPS['CHaro'], PPR78_GROUPS['H2S'])] = (21.96, 13.04) +PPR78_INTERACTIONS[(PPR78_GROUPS['CHaro'], PPR78_GROUPS['SH'])] = (285.5, 392.0) + +PPR78_INTERACTIONS[(PPR78_GROUPS['Caro'], PPR78_GROUPS['Caro'])] = (0.0, 0.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['Caro'], PPR78_GROUPS['Cfused_aromatic'])] = (0.0, 0.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['Caro'], PPR78_GROUPS['CH2cyclic'])] = (34.31, 95.39) +PPR78_INTERACTIONS[(PPR78_GROUPS['Caro'], PPR78_GROUPS['CHcyclic'])] = (-105.7, -286.5) +PPR78_INTERACTIONS[(PPR78_GROUPS['Caro'], PPR78_GROUPS['CO2'])] = (110.1, 637.6) +PPR78_INTERACTIONS[(PPR78_GROUPS['Caro'], PPR78_GROUPS['N2'])] = (284.0, 1892.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['Caro'], PPR78_GROUPS['H2S'])] = (1.029, -8.579) +PPR78_INTERACTIONS[(PPR78_GROUPS['Caro'], PPR78_GROUPS['SH'])] = (1072.0, 1094.0) + +PPR78_INTERACTIONS[(PPR78_GROUPS['Cfused_aromatic'], PPR78_GROUPS['CH2cyclic'])] = (34.31, 95.39) +PPR78_INTERACTIONS[(PPR78_GROUPS['Cfused_aromatic'], PPR78_GROUPS['CHcyclic'])] = (-105.7, -286.5) +PPR78_INTERACTIONS[(PPR78_GROUPS['Cfused_aromatic'], PPR78_GROUPS['CO2'])] = (267.3, 444.4) +PPR78_INTERACTIONS[(PPR78_GROUPS['Cfused_aromatic'], PPR78_GROUPS['N2'])] = (718.1, 1892.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['Cfused_aromatic'], PPR78_GROUPS['H2S'])] = (1.029, -8.579) +PPR78_INTERACTIONS[(PPR78_GROUPS['Cfused_aromatic'], PPR78_GROUPS['SH'])] = (1072.0, 1094.0) + +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2cyclic'], PPR78_GROUPS['CHcyclic'])] = (-50.10, -891.1) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2cyclic'], PPR78_GROUPS['CO2'])] = (130.1, 225.8) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2cyclic'], PPR78_GROUPS['N2'])] = (179.5, 546.6) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2cyclic'], PPR78_GROUPS['H2S'])] = (120.8, 163.0) +PPR78_INTERACTIONS[(PPR78_GROUPS['CH2cyclic'], PPR78_GROUPS['SH'])] = (446.1, 549.0) + +PPR78_INTERACTIONS[(PPR78_GROUPS['CHcyclic'], PPR78_GROUPS['CO2'])] = (91.28, 82.01) +PPR78_INTERACTIONS[(PPR78_GROUPS['CHcyclic'], PPR78_GROUPS['N2'])] = (100.9, 249.8) +PPR78_INTERACTIONS[(PPR78_GROUPS['CHcyclic'], PPR78_GROUPS['H2S'])] = (-16.13, -147.6) +PPR78_INTERACTIONS[(PPR78_GROUPS['CHcyclic'], PPR78_GROUPS['SH'])] = (411.8, -308.8) + +PPR78_INTERACTIONS[(PPR78_GROUPS['CO2'], PPR78_GROUPS['N2'])] = (98.42, 221.4) +PPR78_INTERACTIONS[(PPR78_GROUPS['CO2'], PPR78_GROUPS['H2S'])] = (134.9, 201.4) +# PPR78_INTERACTIONS[(PPR78_GROUPS['CO2'], PPR78_GROUPS['SH'])] = (None, None) # N.A. + +PPR78_INTERACTIONS[(PPR78_GROUPS['N2'], PPR78_GROUPS['H2S'])] = (319.5, 550.1) +# PPR78_INTERACTIONS[(PPR78_GROUPS['N2'], PPR78_GROUPS['SH'])] = (None, None) # N.A. + +PPR78_INTERACTIONS[(PPR78_GROUPS['H2S'], PPR78_GROUPS['SH'])] = (-77.21, 156.1) + + + +PPR78_GROUP_IDS = [k.group_id for k in PPR78_GROUPS.values()] +PPR78_GROUPS_LIST = list(PPR78_GROUPS.values()) + +EPPR78_GROUP_IDS = [k.group_id for k in EPPR78_GROUPS.values()] +EPPR78_GROUPS_LIST = list(EPPR78_GROUPS.values()) + + +EPPR78_INTERACTIONS = {} +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CH2'])] = (65.5, 105.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CH'])] = (214.9, 294.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['CH'])] = (39.0, 41.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['C'])] = (431.6, 575.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['C'])] = (134.5, 183.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['C'])] = (-86.1, 85.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CH4'])] = (28.5, 20.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['CH4'])] = (37.7, 74.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['CH4'])] = (131.4, 157.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['CH4'])] = (309.5, 35.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['C2H6'])] = (3.8, 8.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['C2H6'])] = (29.9, 65.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['C2H6'])] = (156.1, 96.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['C2H6'])] = (388.1, -224.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['C2H6'])] = (10.0, 13.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CHaro'])] = (98.8, 136.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['CHaro'])] = (25.0, 64.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['CHaro'])] = (56.6, 129.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['CHaro'])] = (170.5, 284.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['CHaro'])] = (67.3, 167.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['CHaro'])] = (41.2, 50.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['Caro'])] = (103.6, 103.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['Caro'])] = (5.1, -7.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['Caro'])] = (48.7, -89.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['Caro'])] = (128.3, 189.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['Caro'])] = (106.7, 190.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['Caro'])] = (67.9, 210.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['Caro'])] = (-16.5, 16.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['Cfused_aromatic'])] = (624.9, 774.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['Cfused_aromatic'])] = (-17.8, -4.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['Cfused_aromatic'])] = (249.1, 408.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['Cfused_aromatic'])] = (52.5, 251.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['Cfused_aromatic'])] = (-328.0, -569.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CH2cyclic'])] = (43.6, 60.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['CH2cyclic'])] = (8.6, 27.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['CH2cyclic'])] = (73.1, 71.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['CH2cyclic'])] = (208.6, 294.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['CH2cyclic'])] = (34.0, 5.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['CH2cyclic'])] = (12.7, 73.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['CH2cyclic'])] = (28.8, 65.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['CH2cyclic'])] = (37.4, 53.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['CH2cyclic'])] = (140.7, 277.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CHcyclic'])] = (293.4, 170.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['CHcyclic'])] = (63.5, -74.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['CHcyclic'])] = (-120.8, 18.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['CHcyclic'])] = (25.0, 81.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['CHcyclic'])] = (188.0, 473.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['CHcyclic'])] = (118.0, -212.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['CHcyclic'])] = (129.0, 36.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['CHcyclic'])] = (-99.2, -193.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['CHcyclic'])] = (-99.2, -193.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['CHcyclic'])] = (139.0, 35.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CO2'])] = (144.8, 401.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['CO2'])] = (141.4, 237.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['CO2'])] = (191.8, 380.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['CO2'])] = (377.5, 162.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['CO2'])] = (136.6, 214.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['CO2'])] = (136.2, 235.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['CO2'])] = (98.5, 253.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['CO2'])] = (154.4, 374.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['CO2'])] = (331.1, 276.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['CO2'])] = (144.1, 354.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHcyclic'], EPPR78_GROUPS['CO2'])] = (216.2, -132.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['N2'])] = (38.1, 88.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['N2'])] = (83.7, 188.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['N2'])] = (383.6, 375.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['N2'])] = (341.8, 635.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['N2'])] = (30.9, 37.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['N2'])] = (61.6, 84.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['N2'])] = (185.3, 490.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['N2'])] = (343.8, 1712.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['N2'])] = (702.4, 1888.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['N2'])] = (179.5, 546.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHcyclic'], EPPR78_GROUPS['N2'])] = (331.5, 389.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['N2'])] = (113.9, 212.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['H2S'])] = (159.6, 227.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['H2S'])] = (136.6, 124.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['H2S'])] = (192.5, 562.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['H2S'])] = (330.8, -297.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['H2S'])] = (190.1, 307.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['H2S'])] = (157.2, 217.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['H2S'])] = (21.3, 6.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['H2S'])] = (9.6, -36.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['H2S'])] = (9.6, -36.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['H2S'])] = (117.4, 166.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHcyclic'], EPPR78_GROUPS['H2S'])] = (71.4, -127.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['H2S'])] = (135.2, 199.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['H2S'])] = (319.5, 550.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['SH'])] = (789.6, 1829.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['SH'])] = (439.9, 504.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['SH'])] = (374.0, 520.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['SH'])] = (685.9, 1546.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['SH'])] = (701.7, 1318.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['SH'])] = (277.6, 449.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['SH'])] = (1002.0, -736.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['SH'])] = (1002.0, -736.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['SH'])] = (493.1, 832.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHcyclic'], EPPR78_GROUPS['SH'])] = (463.2, -337.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2S'], EPPR78_GROUPS['SH'])] = (-157.8, 153.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['H2O'])] = (3557.4, 11194.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['H2O'])] = (4324.3, 12126.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['H2O'])] = (971.4, 567.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['H2O'])] = (2277.1, 4719.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['H2O'])] = (2333.4, 5147.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['H2O'])] = (2267.5, 6218.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['H2O'])] = (543.5, 411.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['H2O'])] = (1340.3, -65.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['H2O'])] = (4210.7, 13031.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHcyclic'], EPPR78_GROUPS['H2O'])] = (244.0, -60.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['H2O'])] = (559.3, 277.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['H2O'])] = (2573.6, 5490.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2S'], EPPR78_GROUPS['H2O'])] = (603.9, 599.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['SH'], EPPR78_GROUPS['H2O'])] = (30.9, -113.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['C2H4'])] = (7.9, 35.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['C2H4'])] = (59.7, 82.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['C2H4'])] = (147.9, -55.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['C2H4'])] = (366.8, -219.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['C2H4'])] = (19.2, 33.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['C2H4'])] = (7.5, 20.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['C2H4'])] = (25.7, 78.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['C2H4'])] = (97.8, 67.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['C2H4'])] = (209.7, 3818.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['C2H4'])] = (35.3, 52.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHcyclic'], EPPR78_GROUPS['C2H4'])] = (297.2, -647.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['C2H4'])] = (73.1, 106.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['C2H4'])] = (45.3, 92.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2O'], EPPR78_GROUPS['C2H4'])] = (1650.2, 1660.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CH2CHalkenic'])] = (48.7, 44.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['CH2CHalkenic'])] = (9.6, 50.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['CH2CHalkenic'])] = (84.8, 193.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['CH2CHalkenic'])] = (181.2, 419.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['CH2CHalkenic'])] = (48.7, 68.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['CH2CHalkenic'])] = (26.8, -5.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['CH2CHalkenic'])] = (10.0, 19.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['CH2CHalkenic'])] = (-48.4, 27.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['CH2CHalkenic'])] = (669.8, 589.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['CH2CHalkenic'])] = (-15.4, 24.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHcyclic'], EPPR78_GROUPS['CH2CHalkenic'])] = (260.1, 134.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['CH2CHalkenic'])] = (60.7, 183.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['CH2CHalkenic'])] = (59.7, 227.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2O'], EPPR78_GROUPS['CH2CHalkenic'])] = (2243.5, 5199.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H4'], EPPR78_GROUPS['CH2CHalkenic'])] = (14.8, 11.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['Calkenic'])] = (102.6, 260.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['Calkenic'])] = (64.9, 51.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['Calkenic'])] = (91.6, 54.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['Calkenic'])] = (-16.5, 61.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['Calkenic'])] = (343.1, 880.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['Calkenic'])] = (159.6, 140.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['Calkenic'])] = (74.8, -266.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['Calkenic'])] = (541.5, 94.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H4'], EPPR78_GROUPS['Calkenic'])] = (-518.2, 6814.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['Calkenic'])] = (24.7, 121.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CHCcycloalkenic'])] = (47.0, 169.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['CHCcycloalkenic'])] = (34.3, 51.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['CHCcycloalkenic'])] = (3.8, 1.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['CHCcycloalkenic'])] = (242.9, -7.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['CHCcycloalkenic'])] = (31.9, 69.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHcyclic'], EPPR78_GROUPS['CHCcycloalkenic'])] = (151.3, 2.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['CHCcycloalkenic'])] = (87.8, 66.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H4'], EPPR78_GROUPS['CHCcycloalkenic'])] = (-98.8, 1809.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['CHCcycloalkenic'])] = (14.1, -12.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Calkenic'], EPPR78_GROUPS['CHCcycloalkenic'])] = (23.7, 87.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['H2'])] = (174.0, 239.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['H2'])] = (155.4, 240.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['H2'])] = (326.0, 287.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['H2'])] = (548.3, 2343.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['H2'])] = (156.1, 93.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['H2'])] = (137.6, 150.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['H2'])] = (288.9, 189.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['H2'])] = (400.1, 1201.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['H2'])] = (602.9, 1463.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['H2'])] = (236.1, 192.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHcyclic'], EPPR78_GROUPS['H2'])] = (-51.8, 34.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['H2'])] = (261.1, 300.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['H2'])] = (65.2, 70.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2S'], EPPR78_GROUPS['H2'])] = (145.8, 823.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2O'], EPPR78_GROUPS['H2'])] = (830.8, -137.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H4'], EPPR78_GROUPS['H2'])] = (151.3, 165.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['H2'])] = (175.7, 373.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Calkenic'], EPPR78_GROUPS['H2'])] = (621.4, 873.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHCcycloalkenic'], EPPR78_GROUPS['H2'])] = (460.8, 2167.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['C2F6'])] = (119.1, 118.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['C2F6'])] = (105.0, 130.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['C2F6'])] = (96.1, 123.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['C2F6'])] = (126.6, 241.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['C2F6'])] = (124.9, 219.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CF3'])] = (123.2, 133.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['CF3'])] = (195.6, 199.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['CF3'])] = (531.5, -1945.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['CF3'])] = (413.1, 975.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['CF3'])] = (87.2, 143.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['CF3'])] = (680.1, 421.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['CF3'])] = (733.0, 866.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['CF3'])] = (216.2, 343.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['CF3'])] = (156.5, -116.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H4'], EPPR78_GROUPS['CF3'])] = (453.0, -611.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['CF3'])] = (155.4, 154.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHCcycloalkenic'], EPPR78_GROUPS['CF3'])] = (1231.9, -495.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2F6'], EPPR78_GROUPS['CF3'])] = (-14.5, -87.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CF2'])] = (58.3, 65.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['CF2'])] = (58.3, 68.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['CF2'])] = (-122.8, 458.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['CF2'])] = (479.0, 1430.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['CF2'])] = (79.3, 15.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['CF2'])] = (-31.6, 43.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['CF2'])] = (-8.9, 5.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['CF2'])] = (42.6, -68.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['CF2'])] = (125.2, 340.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['CF2'])] = (155.4, 154.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CF2CFdouble'])] = (-12.3, 16.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['CF2CFdouble'])] = (95.5, -231.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['CF2CFdouble'])] = (-274.3, -411.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['CF2CFdouble'])] = (78.6, -108.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['CF2CFdouble'])] = (36.2, 63.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H4'], EPPR78_GROUPS['CF2CFdouble'])] = (-132.7, 548.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['CF2CFdouble'])] = (88.2, 12.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2F6'], EPPR78_GROUPS['CF2CFdouble'])] = (55.9, -193.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CF3'], EPPR78_GROUPS['CF2CFdouble'])] = (17.5, -93.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['C2H4F2'])] = (128.3, 292.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['C2H4F2'])] = (107.1, 119.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['C2H4F2'])] = (143.8, 15.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['C2H4F2'])] = (48.7, 751.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['C2H4F2'])] = (76.9, -145.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CF3'], EPPR78_GROUPS['C2H4F2'])] = (113.2, 247.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CF2'], EPPR78_GROUPS['C2H4F2'])] = (120.1, 264.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['C2H2F4'])] = (158.5, 356.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['C2H2F4'])] = (86.5, -40.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['C2H2F4'])] = (121.5, -44.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['C2H2F4'])] = (72.4, -305.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['C2H2F4'])] = (29.5, 89.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['C2H2F4'])] = (64.5, -41.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2F6'], EPPR78_GROUPS['C2H2F4'])] = (60.7, 217.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CF3'], EPPR78_GROUPS['C2H2F4'])] = (28.1, 8.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CF2'], EPPR78_GROUPS['C2H2F4'])] = (229.9, 259.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H4F2'], EPPR78_GROUPS['C2H2F4'])] = (-4.1, 4.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['CO'])] = (91.2, 94.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['CO'])] = (44.0, 45.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['CO'])] = (14.4, 20.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['CO'])] = (15.4, 33.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['CO'])] = (153.4, 153.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['CO'])] = (125.8, -231.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['CO'])] = (197.0, -238.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['CO'])] = (113.1, 143.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['CO'])] = (87.8, 190.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['CO'])] = (23.3, -25.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2S'], EPPR78_GROUPS['CO'])] = (278.6, 404.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2O'], EPPR78_GROUPS['CO'])] = (715.1, -89.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H4'], EPPR78_GROUPS['CO'])] = (84.6, -7.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2'], EPPR78_GROUPS['CO'])] = (75.8, 74.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['He'])] = (416.3, 513.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['He'])] = (520.5, 673.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['He'])] = (728.1, 750.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['He'])] = (394.5, 378.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['He'])] = (581.3, 517.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['He'])] = (753.6, 590.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['He'])] = (753.6, 590.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Cfused_aromatic'], EPPR78_GROUPS['He'])] = (753.6, 590.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['He'])] = (685.9, 559.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['He'])] = (204.7, 222.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H4'], EPPR78_GROUPS['He'])] = (569.6, 536.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['He'])] = (644.3, 687.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2'], EPPR78_GROUPS['He'])] = (138.7, 95.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO'], EPPR78_GROUPS['He'])] = (260.1, 259.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['Ar'])] = (11.3, 55.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['Ar'])] = (113.6, 231.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['Ar'])] = (185.8, 634.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C'], EPPR78_GROUPS['Ar'])] = (899.0, 4654.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['Ar'])] = (16.0, 24.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['Ar'])] = (43.8, 53.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['Ar'])] = (195.6, 361.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['Ar'])] = (1268.7, 18665.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['Ar'])] = (177.7, 86.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['Ar'])] = (6.5, 8.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2O'], EPPR78_GROUPS['Ar'])] = (1197.2, 1211.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['Ar'])] = (203.0, -11.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2'], EPPR78_GROUPS['Ar'])] = (128.2, 102.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO'], EPPR78_GROUPS['Ar'])] = (4.0, 8.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['He'], EPPR78_GROUPS['Ar'])] = (243.1, 305.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['SO2'])] = (322.2, 201.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['SO2'])] = (55.9, -28.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['SO2'])] = (-70.0, 233.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['SO2'])] = (205.9, 323.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['SO2'])] = (37.1, -23.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['SO2'])] = (-196.6, -397.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['SO2'])] = (54.9, 59.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['SO2'])] = (282.4, 362.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2O'], EPPR78_GROUPS['SO2'])] = (374.4, 148.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['SO2'])] = (26.8, 26.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Calkenic'], EPPR78_GROUPS['SO2'])] = (-141.7, -151.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Ar'], EPPR78_GROUPS['SO2'])] = (299.9, 354.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['O2'])] = (86.1, 87.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['O2'])] = (107.4, 200.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['O2'])] = (233.3, 404.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['O2'])] = (216.2, 3826.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['O2'])] = (181.2, 281.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHcyclic'], EPPR78_GROUPS['O2'])] = (102.3, 987.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['O2'])] = (154.4, 109.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['O2'])] = (2.4, 4.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2O'], EPPR78_GROUPS['O2'])] = (1376.0, 1609.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Ar'], EPPR78_GROUPS['O2'])] = (4.8, 7.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['SO2'], EPPR78_GROUPS['O2'])] = (339.9, 665.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['NO'])] = (-27.5, 50.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['NO'])] = (5.1, 48.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['NO'])] = (258.7, 100.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO'], EPPR78_GROUPS['NO'])] = (309.2, 28.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Ar'], EPPR78_GROUPS['NO'])] = (110.8, 155.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['SO2'], EPPR78_GROUPS['NO'])] = (172.3, 1343.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['COS'])] = (44.6, -95.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['COS'])] = (83.0, 165.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2S'], EPPR78_GROUPS['COS'])] = (101.9, 98.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['NH3'])] = (436.1, 958.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['NH3'])] = (585.7, 1011.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2O'], EPPR78_GROUPS['NH3'])] = (-550.1, -1404.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2'], EPPR78_GROUPS['NH3'])] = (701.7, 931.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Ar'], EPPR78_GROUPS['NH3'])] = (630.0, 1794.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['NO2N2O4'])] = (124.9, 241.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['NO2N2O4'])] = (263.5, 256.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Ar'], EPPR78_GROUPS['NO2N2O4'])] = (278.6, 274.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['O2'], EPPR78_GROUPS['NO2N2O4'])] = (271.1, 362.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH4'], EPPR78_GROUPS['N2O'])] = (74.8, 107.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['N2O'])] = (3.8, 14.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['N2'], EPPR78_GROUPS['N2O'])] = (101.6, 230.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2O'], EPPR78_GROUPS['N2O'])] = (568.9, -144.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['O2'], EPPR78_GROUPS['N2O'])] = (120.1, 105.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['C2H2'])] = (-6.9, 41.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['C2H2'])] = (421.0, 1193.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H6'], EPPR78_GROUPS['C2H2'])] = (137.9, 168.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['C2H2'])] = (29.2, 123.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2O'], EPPR78_GROUPS['C2H2'])] = (436.8, -200.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['C2H2'])] = (165.4, 39.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H4F2'], EPPR78_GROUPS['C2H2'])] = (-58.7, 303.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['NH3'], EPPR78_GROUPS['C2H2'])] = (-56.3, -1.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['HC≡C'])] = (306.1, 1167.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['HC≡C'])] = (303.3, 316.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['HC≡C'])] = (206.9, 3975.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['HC≡C'])] = (96.1, 148.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['HC≡C'])] = (176.0, -459.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['HC≡C'])] = (496.2, 496.2) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHcyclic'], EPPR78_GROUPS['HC≡C'])] = (863.7, 863.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CO2'], EPPR78_GROUPS['HC≡C'])] = (60.1, -81.0) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['H2O'], EPPR78_GROUPS['HC≡C'])] = (-2395.5, -11671.4) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['HC≡C'])] = (134.5, 568.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Calkenic'], EPPR78_GROUPS['HC≡C'])] = (212.8, -2182.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['C2H2'], EPPR78_GROUPS['HC≡C'])] = (122.5, 247.8) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH3'], EPPR78_GROUPS['C≡C'])] = (72.1, 1219.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2'], EPPR78_GROUPS['C≡C'])] = (488.0, 826.6) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH'], EPPR78_GROUPS['C≡C'])] = (4.5, -245.3) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CHaro'], EPPR78_GROUPS['C≡C'])] = (403.9, 403.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Caro'], EPPR78_GROUPS['C≡C'])] = (518.5, 518.5) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2cyclic'], EPPR78_GROUPS['C≡C'])] = (845.9, 845.9) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['CH2CHalkenic'], EPPR78_GROUPS['C≡C'])] = (255.6, 676.7) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['Calkenic'], EPPR78_GROUPS['C≡C'])] = (-874.3, 1040.1) +EPPR78_INTERACTIONS[(EPPR78_GROUPS['HC≡C'], EPPR78_GROUPS['C≡C'])] = (-497.6, -824.2) + + +ZERO_PARAMETER = (0.0, 0.0) + +for interactions_dict, groups_dict in [(PPR78_INTERACTIONS, PPR78_GROUPS), + (EPPR78_INTERACTIONS, EPPR78_GROUPS)]: + groups = list(groups_dict.values()) + for group1 in groups: + for group2 in groups: + key = (group1, group2) + reverse_key = (group2, group1) + # Symmetrize: if key exists but reverse_key does not, copy the value + if key in interactions_dict and reverse_key not in interactions_dict: + interactions_dict[reverse_key] = interactions_dict[key] + # Missing parameters are zero + if key not in interactions_dict and reverse_key not in interactions_dict: + interactions_dict[key] = ZERO_PARAMETER + interactions_dict[reverse_key] = ZERO_PARAMETER + +PPR78_INTERACTIONS_BY_STR = {} +for (group1, group2), value in PPR78_INTERACTIONS.items(): + PPR78_INTERACTIONS_BY_STR[(group1.group, group2.group)] = value + +EPPR78_INTERACTIONS_BY_STR = {} +for (group1, group2), value in EPPR78_INTERACTIONS.items(): + EPPR78_INTERACTIONS_BY_STR[(group1.group, group2.group)] = value + +def PPR78_kij(T, molecule1_groups, molecule2_groups, Tc1, Pc1, omega1, Tc2, Pc2, omega2, version='original'): + r'''Calculate binary interaction parameter kij(T) between two molecules using the PPR78 method. + + This function implements the PPR78 (Predictive Peng-Robinson 1978) method to calculate + the binary interaction parameter kij between two molecules, including the calculation + of their equation of state parameters. + + .. math:: + k_{ij}(T) = \frac{ + -\frac{1}{2} \left[ \sum_{k=1}^{N_g} \sum_{l=1}^{N_g} \left( \alpha_{ik} - \alpha_{jk} \right) \left( \alpha_{il} - \alpha_{jl} \right) A_{kl} \times \left( \frac{298.15}{T/K} \right) \left( \frac{B_{kl}}{A_{kl}} - 1 \right) \right] - \left( \frac{\sqrt{a_i(T)}}{b_i} - \frac{\sqrt{a_j(T)}}{b_j} \right)^2 + }{ + 2 \sqrt{\frac{a_i(T) \cdot a_j(T)}{b_i \cdot b_j}} + } + + .. math:: + b_i = 0.0777960739 \frac{RT_{c,i}}{P_{c,i}} + + .. math:: + a_i = 0.457235529 \frac{R^2T_{c,i}^2}{P_{c,i}} \left[1 + m_i\left(1 - \sqrt{\frac{T}{T_{c,i}}}\right)\right]^2 + + .. math:: + m_i = \begin{cases} + 0.37464 + 1.54226\omega_i - 0.26992\omega_i^2 & \text{if } \omega_i \leq 0.491 \\ + 0.379642 + 1.48503\omega_i - 0.164423\omega_i^2 + 0.016666\omega_i^3 & \text{if } \omega_i > 0.491 + \end{cases} + + Parameters + ---------- + T : float + Temperature [K] + molecule1_groups : dict + Dictionary of group counts for molecule 1 {group: count} + molecule2_groups : dict + Dictionary of group counts for molecule 2 {group: count} + Tc1 : float + Critical temperature of molecule 1 [K] + Pc1 : float + Critical pressure of molecule 1 [Pa] + omega1 : float + Acentric factor of molecule 1 [-] + Tc2 : float + Critical temperature of molecule 2 [K] + Pc2 : float + Critical pressure of molecule 2 [Pa] + omega2 : float + Acentric factor of molecule 2 [-] + version : str, optional + Version of the method to use ('original' or 'extended'), defaults to 'original' + + Returns + ------- + float + Binary interaction parameter kij [-] + + Examples + -------- + >>> # Example for methane-ethane system using original PPR78 + >>> PPR78_kij(298.15, {"CH3": 1}, {"CH3": 2}, Tc1=190.564, Pc1=4599200, omega1=0.01142, Tc2=305.322, Pc2=4872200, omega2=0.0995) + -0.009617659 + + >>> # Same system using extended PPR78 + >>> PPR78_kij(298.15, {"CH3": 1}, {"CH3": 2}, Tc1=190.564, Pc1=4599200, omega1=0.01142, Tc2=305.322, Pc2=4872200, omega2=0.0995, version='extended') + -0.009617659 + ''' + if version not in ('original', 'extended'): + raise ValueError("version must be either 'original' or 'extended'") + + # Select the appropriate interaction parameters based on version + interactions = EPPR78_INTERACTIONS_BY_STR if version == 'extended' else PPR78_INTERACTIONS_BY_STR + + OMEGA_A = 0.4572355289213821893834601962251837888504 + OMEGA_B = 0.0777960739038884559718447100373331839711 + + # Calculate m parameters based on acentric factors + def calculate_m(omega): + if omega <= 0.491: + return 0.37464 + 1.54226*omega - 0.26992*omega**2 + else: + return 0.379642 + 1.48503*omega - 0.164423*omega**2 + 0.016666*omega**3 + + # Calculate b parameters + bi_1 = OMEGA_B * (R * Tc1 / Pc1) + bi_2 = OMEGA_B * (R * Tc2 / Pc2) + + # Calculate a parameters + m1 = calculate_m(omega1) + m2 = calculate_m(omega2) + + ai_T1 = (OMEGA_A * R**2 * Tc1**2 / Pc1) * (1 + m1 * (1 - sqrt(T/Tc1)))**2 + ai_T2 = (OMEGA_A * R**2 * Tc2**2 / Pc2) * (1 + m2 * (1 - sqrt(T/Tc2)))**2 + + # Calculate group fractions + total_groups1 = sum(molecule1_groups.values()) + total_groups2 = sum(molecule2_groups.values()) + + alpha_i = {group: count/total_groups1 for group, count in molecule1_groups.items()} + alpha_j = {group: count/total_groups2 for group, count in molecule2_groups.items()} + + # Calculate first term (group contribution) + term1 = 0.0 + for group_k in set(alpha_i.keys()) | set(alpha_j.keys()): + for group_l in set(alpha_i.keys()) | set(alpha_j.keys()): + alpha_ik = alpha_i.get(group_k, 0.0) + alpha_jk = alpha_j.get(group_k, 0.0) + alpha_il = alpha_i.get(group_l, 0.0) + alpha_jl = alpha_j.get(group_l, 0.0) + + A_kl, B_kl = interactions[(group_k, group_l)] + + if A_kl != 0: + delta_k = alpha_ik - alpha_jk + delta_l = alpha_il - alpha_jl + term1 += delta_k * delta_l * A_kl * (298.15/T)**(B_kl/A_kl - 1) + term1 *= -0.5 + term1 *= 1e6 + + # Calculate second term (EOS parameters) + sqrt_ai_T1 = sqrt(ai_T1) + sqrt_ai_T2 = sqrt(ai_T2) + term2 = ((sqrt_ai_T1/bi_1) - (sqrt_ai_T2/bi_2))**2 + + # Calculate denominator + denominator = 2 * sqrt(ai_T1 * ai_T2)/(bi_1 * bi_2) + + # Final calculation + kij_value = (term1 - term2)/denominator + return kij_value + +def PPR78_kijs(T, groups, Tcs, Pcs, omegas, version='original'): + r"""Calculate the binary interaction parameter (kij) matrix for a mixture of components + at a specified temperature using the PPR78 method. + + Parameters + ---------- + T : float + System temperature [K] + groups : list[dict] + List of dictionaries containing group counts for each component + Each dict has format {group_name: count} + Tcs : list[float] + Critical temperatures for each component [K] + Pcs : list[float] + Critical pressures for each component [Pa] + omegas : list[float] + Acentric factors for each component [-] + version : str, optional + Version of the method to use ('original' or 'extended'), defaults to 'original' + + Returns + ------- + list[list[float]] + Square matrix of kij values where matrix[i][j] gives the interaction + parameter between components i and j + + Examples + -------- + >>> # Calculate kij matrix for methane-ethane-propane mixture using original PPR78 + >>> groups = [ + ... {"CH3": 1}, # methane + ... {"CH3": 2}, # ethane + ... {"CH3": 2, "CH2": 1} # propane + ... ] + >>> Tc = [190.564, 305.322, 369.83] + >>> Pc = [4599200, 4872200, 4248000] + >>> omega = [0.01142, 0.0995, 0.1523] + >>> matrix = PPR78_kijs(298.15, groups, Tc, Pc, omega) + """ + if version not in ('original', 'extended'): + raise ValueError("version must be either 'original' or 'extended'") + + n_components = len(groups) + kij_matrix = [[0.0 for _ in range(n_components)] for _ in range(n_components)] + + # Calculate upper triangle + for i in range(n_components): + for j in range(i+1, n_components): + kij = PPR78_kij( + T, + groups[i], + groups[j], + Tcs[i], + Pcs[i], + omegas[i], + Tcs[j], + Pcs[j], + omegas[j], + version=version + ) + # Set both (i,j) and (j,i) due to symmetry + kij_matrix[i][j] = kij + kij_matrix[j][i] = kij + + return kij_matrix \ No newline at end of file diff --git a/thermo/utils/t_dependent_property.py b/thermo/utils/t_dependent_property.py index 67d3af4f..ec6285ea 100644 --- a/thermo/utils/t_dependent_property.py +++ b/thermo/utils/t_dependent_property.py @@ -4264,6 +4264,9 @@ def extrapolation(self): @extrapolation.setter def extrapolation(self, extrapolation): + # backwards compatibility + if extrapolation is not None: + extrapolation = extrapolation.replace('interp1d', 'linear') self._extrapolation = extrapolation if extrapolation is None: self.extrapolation_split = False