From 2be11b5865d579a3c8f27e31c51a78b23bc59937 Mon Sep 17 00:00:00 2001 From: Jarl Date: Fri, 25 Oct 2019 05:34:49 +0200 Subject: [PATCH] New feature; Json file export (works on most DB; with some lack of bibliographic sources). Peng-Robinson correlation with sympy is provided as a reference case use of pure substance properties (with maple vertification of results). --- .gitignore | 4 + PR.py | 123 +++++++++++++ PR_maple_vertif.mw | 125 +++++++++++++ PR_maple_vertif_MAS.bak | 255 ++++++++++++++++++++++++++ Vizualization_data.py | 52 ++++++ chemical_rate.py | 20 ++ downloader.py | 394 ++++++++++++++++++++++++++++++++++++++-- testScrape.py | 21 ++- 8 files changed, 968 insertions(+), 26 deletions(-) create mode 100644 PR.py create mode 100644 PR_maple_vertif.mw create mode 100644 PR_maple_vertif_MAS.bak create mode 100644 Vizualization_data.py create mode 100644 chemical_rate.py diff --git a/.gitignore b/.gitignore index 053d60d..1c58fb2 100644 --- a/.gitignore +++ b/.gitignore @@ -100,3 +100,7 @@ ENV/ # mypy .mypy_cache/ /.project + + +# Database files (generated by code) +DB/ diff --git a/PR.py b/PR.py new file mode 100644 index 0000000..311d8f1 --- /dev/null +++ b/PR.py @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu May 23 20:09:51 2019 + +@author: jarl +""" + +from sympy import symbols, Symbol, Function, solve, Eq, sympify, init_printing, Matrix, diff, summation, oo, exp, Sum, zeta + + +init_printing() +R, T_c, p_c, V_mc, C_a, C_b = symbols('R T_c p_c V_mc C_a C_b ') + +T, p, V_m, kappa, alfa, a, b = symbols('T p V_m, kappa alpha a b') + +V, n = symbols('V n') + +Z, Z_c, omega = symbols('Z Z_c omega') + +kappa_c = [0]*4 +for i in range(len(kappa_c)): + kappa_c[i] = Symbol("kappa_0c"+str(i)) +#kappa_c1, kappa_c2, kappa_c3, kappa_c4, omega = symbols('kappa_c1 kappa_c2 kappa_c3 kappa_c4 omega') + + + +#V_m = Z*R*T/p + +#C_a = 0.45724 +#C_b = 0.07780 +#R = 8.314 +#kappa_c1 = 0.37464 +#kappa_c2 = 1.54226 +#kappa_c3 = 0.26992 + + + + + +#a = C_a *R**2*T_c**2 /p_c +#b = C_b * R*T_c /p_c + + + + +kappa_PR = kappa_c[0] + kappa_c[1] *omega + kappa_c[2] * omega**2 +alfa_PR = (1+ kappa*(1- (T/T_c)**(sympify(1)/2) ))**2 + + + + +kappa_0_PRSV1 =kappa_c[0] + kappa_c[1] *omega + kappa_c[2] * omega**2 + kappa_c[3] * omega**3 +kappa_1, kappa_2, kappa_3 = symbols("kappa_1 kappa_2 kappa_3") +#kappa_PRSV1 = kappa_0_PRSV1 + kappa_1*(1 + (T/T_c)**(sympify(1)/2) ) * (0.7 - T/T_c ) +kappa_PRSV1 = kappa_0_PRSV1 + kappa_1*(1 + (T/T_c)**0.5 ) * (0.7 - T/T_c ) + +#kappa_PRSV2 = kappa_0_PRSV1 + (kappa_1 + kappa_2*(kappa_3-T/T_c)*(1- (T/T_c)**(sympify(1)/2)) ) * (1 + (T/T_c)**(sympify(1)/2) ) * (0.7 - T/T_c ) +kappa_PRSV2 = kappa_0_PRSV1 + (kappa_1 + kappa_2*(kappa_3-T/T_c)*(1- (T/T_c)**0.5) ) * (1 + (T/T_c)**0.5 ) * (0.7 - T/T_c ) + + + + +Cubic_State = Eq(p, R*T/(V_m-b) - a*alfa/(V_m**2 +2*b*V_m - b**2)) + +PR = Cubic_State.subs(alfa, alfa_PR.subs(kappa, kappa_PR) ) +PRSV1 = Cubic_State.subs(alfa, alfa_PR.subs(kappa, kappa_PRSV1) ) +PRSV2 = Cubic_State.subs(alfa, alfa_PR.subs(kappa, kappa_PRSV2)) + + + +#PR_Z_c = Matrix( solve( PR.subs(p, p_c).subs(T, T_c).subs(V_m, Z_c*R*T_c/p_c ), Z_c) ) +#PR_V_c = Matrix( solve( PR.subs(p, p_c).subs(T, T_c), V_m ) ) + +#V_m_c = PR_Z_c*R*T_c/p_c + +Critical_state_conds_PR = Matrix([ PR , Eq( diff(PR.rhs, V_m), 0) , Eq( diff(PR.rhs, V_m, 2), 0) ]).subs(p, p_c).subs(T, T_c).subs(V_m, V_mc) # .subs(V_m, Z_c*R*T_c/p_c ) + +solve_ab = solve(Critical_state_conds_PR[1:], [a, b] ) + +#PR_sol = PR.subs(a, solve_ab[0][0].evalf() ).subs(b, solve_ab[0][1].evalf() ) +PR_sol = PR.subs(a, solve_ab[0][0] ).subs(b, solve_ab[0][1] ) + + + +V_m_atCrit = Matrix(solve(PR.subs(T, T_c).subs(p, p_c), V_m)) +V_m_atCrit = V_m_atCrit.subs(a, solve_ab[0][0] ).subs(b, solve_ab[0][1] ) + +QA_Critical_Sate = Matrix( [ PR_sol, Eq( diff(PR_sol.rhs, V_m), 0), Eq( diff(PR_sol.rhs, V_m, 2), 0) ] ).subs(T, T_c).subs(V_m, V_mc).subs(p, p_c) +V_cm_sol = solve(QA_Critical_Sate[0], V_mc)[0] + + +#PR_sol2 = PR_sol.subs(V_mc, V_cm_sol ) +#V_m_CubicSol = solve(Cubic_State, V_m)[0].subs(alfa, alfa_PR.subs(kappa, kappa_PR) ).subs(a, solve_ab[0][0] ).subs(b, solve_ab[0][1] ).subs(V_mc, V_cm_sol ) + + +Van_der_Waals_EOS = Eq(p, R*T/(V_m - b) - a/V_m**2 ) + +Redlich_Kwong_EOS = Eq(p, R*T/(V_m -b) - a/(T**0.5 * V_m * (V_m + b))) + +Soave_Redlich_Kwong_EOS = Redlich_Kwong_EOS.subs(a, a*alfa) + + + +n, s, k, z, alpha_Bose = symbols('n s k z alpha_Bose') +#zeta = summation(1/(n**alpha_Bose), (n, 1, oo) ) +Li = summation(z**k/k**(alpha_Bose+1), (k, 1, oo) ) + + +Ideal_Bose_EOS = Eq(p*V_m, R*T* Li/zeta(alpha_Bose) * (T/T_c)**alpha_Bose) + + +rho_0, rho, A, B, v_D, p_CJ, R_1, R_2, e_0, M_W = symbols("rho_0 rho A B v_D p_CJ R_1 R_2 e_0 M_W") + +Jones_Wilkins_Lee_EOS = Eq(p, A*( 1 - omega/R_1/V)*exp(-R_1*V)+B*(1-omega/R_2/V)*exp(-R_2*V) + omega*e_0/V ) + +JWL_EOS_TNT = Jones_Wilkins_Lee_EOS.subs(V, rho_0/rho).subs(rho, M_W/V_m ).subs(rho_0, 1.63E3).subs(A, 373.8E9).subs(B, 3.747E9).subs(R_1, 4.15).subs(R_2, 0.9).subs(omega, 0.35).subs(e_0, 6E9) + + + + + + + diff --git a/PR_maple_vertif.mw b/PR_maple_vertif.mw new file mode 100644 index 0000000..a746107 --- /dev/null +++ b/PR_maple_vertif.mw @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbWlHRiQ2JVEicEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RIj1GJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EsMC4yNzc3Nzc4ZW1GJy8lJ3JzcGFjZUdGTC1JJm1mcmFjR0YkNigtRiM2Jy1GLDYlUSJSRidGL0YyLUY2Ni1RJyZzZG90O0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EmMC4wZW1GJy9GTkZlbi1GLDYlUSJURidGL0YyLyUrZXhlY3V0YWJsZUdGPUY5LUYjNictSSVtc3ViR0YkNiYtRiw2JVEiVkYnRi9GMi1GIzYlLUYsNiVRIm1GJ0YvRjJGL0YyLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvSSttc2VtYW50aWNzR0YkUSdhdG9taWNGJy1GNjYtUSgmbWludXM7RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSwwLjIyMjIyMjJlbUYnL0ZORmNwLUYsNiVRImJGJ0YvRjJGL0YyLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZdcS8lKWJldmVsbGVkR0Y9Rl9wLUZQNigtRiM2Jy1GLDYlUSJhRidGL0YyRlctRiw2JVEmYWxwaGFGJy9GMEY9RjlGam5GOS1GIzYuLUklbXN1cEdGJDYlRl5vLUYjNiYtSSNtbkdGJDYkUSIyRidGOS1GNjYtUSJ+RidGOUY7Rj5GQEZCRkRGRkZIRlpGZm5GL0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdGW3AtRjY2LVEiK0YnRjlGO0Y+RkBGQkZERkZGSEZicEZkcEZkckZXRmVwRldGXm9GX3BGaHItRmByNiVGZXAtRiM2JUZkckYvRjJGW3NGL0YyRmhwRltxRl5xRmBxRmpuRjk= + +L0kicEc2IiwmKihJIlJHRiQiIiJJIlRHRiRGKCwmSSVWX19tR0YkRihJImJHRiQhIiJGLUYoKihJImFHRiRGKEkmYWxwaGFHRiRGKCwoKiRGKyIiI0YoKiZGK0YoRixGKEYzKiRGLEYzRi1GLUYt + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVElZGlmZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYqLUkmbWZyYWNHRiQ2KC1GIzYmLUYsNiVRIlJGJ0YvRjItSSNtb0dGJDYtUScmc2RvdDtGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkovJSlzdHJldGNoeUdGSi8lKnN5bW1ldHJpY0dGSi8lKGxhcmdlb3BHRkovJS5tb3ZhYmxlbGltaXRzR0ZKLyUnYWNjZW50R0ZKLyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGWS1GLDYlUSJURidGL0YyRkYtRiM2Ji1JJW1zdWJHRiQ2Ji1GLDYlUSJWRidGL0YyLUYsNiVRIm1GJ0YvRjIvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy9JK21zZW1hbnRpY3NHRiRRJ2F0b21pY0YnLUZDNi1RKCZtaW51cztGJ0ZGRkhGS0ZNRk9GUUZTRlUvRlhRLDAuMjIyMjIyMmVtRicvRmVuRl5wLUYsNiVRImJGJ0YvRjJGRi8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGaHAvJSliZXZlbGxlZEdGSkZqby1GOzYoLUYjNiYtRiw2JVEiYUYnRi9GMkZCLUYsNiVRJmFscGhhRicvRjBGSkZGRkYtRiM2LS1JJW1zdXBHRiQ2JUZbby1GIzYlLUkjbW5HRiQ2JFEiMkYnRkYtRkM2LVEifkYnRkZGSEZLRk1GT0ZRRlNGVUZXRlpGRi8lMXN1cGVyc2NyaXB0c2hpZnRHRmZvLUZDNi1RIitGJ0ZGRkhGS0ZNRk9GUUZTRlVGXXBGX3BGX3JGQkZgcEZCRltvRmpvRmNyLUZbcjYlRmBwLUYjNiRGX3JGRkZmckZGRmNwRmZwRmlwRltxLUZDNi1RIixGJ0ZGRkgvRkxGMUZNRk9GUUZTRlVGVy9GZW5RLDAuMzMzMzMzM2VtRidGY3ItRlxvNiZGXm8tRiM2JUZhb0YvRjJGZG9GZ28vJStleGVjdXRhYmxlR0ZKRkZGRkZpc0ZG + +LCYqKEkiUkc2IiIiIkkiVEdGJUYmLCZJJVZfX21HRiVGJkkiYkdGJSEiIiEiI0YrKipJImFHRiVGJkkmYWxwaGFHRiVGJiwoKiRGKSIiI0YmKiZGKUYmRipGJkYyKiRGKkYyRitGLCwmRilGMkYqRjJGJkYm + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVElZGlmZkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYoLUYsNiVRIiVGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUY+Ni1RIn5GJ0ZBRkMvRkdGRUZIRkpGTEZORlBGUi9GVkZULUklbXN1YkdGJDYmLUYsNiVRIlZGJ0YvRjItRiM2JS1GLDYlUSJtRidGL0YyRi9GMi8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnL0krbXNlbWFudGljc0dGJFEnYXRvbWljRicvJStleGVjdXRhYmxlR0ZFRkFGQUZob0ZB + +LCgqKEkiUkc2IiIiIkkiVEdGJUYmLCZJJVZfX21HRiVGJkkiYkdGJSEiIiEiJCIiIyoqSSJhR0YlRiZJJmFscGhhR0YlRiYsKCokRilGLUYmKiZGKUYmRipGJkYtKiRGKkYtRitGLCwmRilGLUYqRi1GLSEiIyooRi9GJkYwRiZGMUY2Ri0= + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEmc29sdmVGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2Jy1GNjYmLUYjNjMtSSNtb0dGJDYtUSomdW1pbnVzMDtGJy9GM1Enbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkYvJSlzdHJldGNoeUdGRi8lKnN5bW1ldHJpY0dGRi8lKGxhcmdlb3BHRkYvJS5tb3ZhYmxlbGltaXRzR0ZGLyUnYWNjZW50R0ZGLyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGVS1JJm1mcmFjR0YkNigtRiM2Ki1GLDYlUSJSRidGL0YyLUY/Ni1RMSZJbnZpc2libGVUaW1lcztGJ0ZCRkRGR0ZJRktGTUZPRlEvRlRRJjAuMGVtRicvRldGXm8tRiw2JVEiVEYnRi9GMi8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GJy8lK2V4ZWN1dGFibGVHRkYvJSlyZWFkb25seUdGMS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYnRkItSSVtc3VwR0YkNiUtRjY2JC1GIzYqLUklbXN1YkdGJDYmLUYsNiVRIlZGJ0YvRjItRiw2JVEibUYnRi9GMi8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnL0krbXNlbWFudGljc0dGJFEnYXRvbWljRictRj82LVEoJm1pbnVzO0YnRkJGREZHRklGS0ZNRk9GUUZTRlYtRiw2JVEiYkYnRi9GMkZjb0Zmb0Zob0Zqb0ZCRkItSSNtbkdGJDYkUSIyRidGQi8lMXN1cGVyc2NyaXB0c2hpZnRHRl9xLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0Zkci8lKWJldmVsbGVkR0ZGLUY/Ni1RJyZwbHVzO0YnRkJGREZHRklGS0ZNRk9GUUZTRlYtRlk2KC1GIzYsLUYsNiVRImFGJ0YvRjJGam4tRiw2JVEoJmFscGhhO0YnL0YwRkZGQkZqbi1GNjYkLUYjNiotRiM2KkZpcUZqbkZkcEZjb0Zmb0Zob0Zqb0ZCRmlyLUYjNipGaXFGam5GZnFGY29GZm9GaG9Gam9GQkZjb0Zmb0Zob0Zqb0ZCRkJGY29GZm9GaG9Gam9GQi1GXnA2JS1GNjYkLUYjNiwtRl5wNiVGZHBGaXFGXXJGaXItRiM2LEZpcUZqbkZkcEZqbkZmcUZjb0Zmb0Zob0Zqb0ZCRmNxLUZecDYlRmZxRmlxRl1yRmNvRmZvRmhvRmpvRkJGQkZpcUZdckZfckZickZlckZnci1GPzYtUSI9RidGQkZERkdGSUZLRk1GT0ZRL0ZUUSwwLjI3Nzc3NzhlbUYnL0ZXRl91LUZqcTYkRl9xRkItRj82LVEiLEYnRkJGRC9GSEYxRklGS0ZNRk9GUUZdby9GV1EsMC4zMzMzMzMzZW1GJy1GPzYtUSJ+RidGQkZERkdGSUZLRk1GT0ZRRl1vRl9vLUZZNigtRiM2LEZpcUZqbkZnbkZqbkZgb0Zjb0Zmb0Zob0Zqb0ZCLUZecDYlRmBwLUZqcTYkUSIzRidGQkZdckZfckZickZlckZnckZjcS1GWTYoLUYjNi5GaXFGam5GYHNGam5GY3NGam4tRl5wNiVGZ3NGaXFGXXJGY29GZm9GaG9Gam9GQi1GXnA2JUZhdEZidkZdckZfckZickZlckZnckZpci1GWTYoLUYjNixGaXFGam5GYHNGam5GY3NGY29GZm9GaG9Gam9GQkZfdEZfckZickZlckZnckZbdUZhdUZmb0ZCRkIvJSVvcGVuR1EifGZyRicvJSZjbG9zZUdRInxockYnRmN1LUY2NiYtRiM2J0Zgc0ZjdUZmcUZmb0ZCRkIvRmJ3USJbRicvRmV3USJdRidGZm9GQkZCRmZvRkI= + +NyM3JC9JImFHNiIsJCouSSVWX19tRzYiIiIiSSJSRzYiIiIiSSJURzYiIiIiLCgqJC1JJ1Jvb3RPZkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCoqJEkjX1pHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiIiIiQiIiQqJEkjX1pHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiIiIiMiIiRJI19aRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiIiIkISIiIiIiIiIjIiIqLUknUm9vdE9mRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsKiokSSNfWkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IiIiJCIiJCokSSNfWkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IiIiIyIiJEkjX1pHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiIiIiQhIiIiIiIiIzkhIiIiIiIiIiJJJmFscGhhRzYiISIiLCgqJC1JJ1Jvb3RPZkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCoqJEkjX1pHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiIiIiQiIiQqJEkjX1pHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiIiIiMiIiRJI19aRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiIiIkISIiIiIiIiIjIiIkLUknUm9vdE9mRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsKiokSSNfWkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IiIiJCIiJCokSSNfWkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IiIiIyIiJEkjX1pHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiIiIiQhIiIiIiIiIiQhIiMiIiIhIiIjISIiIiIjL0kiYkc2IiomLUknUm9vdE9mRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiMsKiokSSNfWkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IiIiJCIiJCokSSNfWkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IiIiIyIiJEkjX1pHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiIiIiQhIiIiIiIiIiJJJVZfX21HNiIiIiI= + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEmZXZhbGZGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2JS1GLDYlUSIlRidGL0YyLyUrZXhlY3V0YWJsZUdRJmZhbHNlRicvRjNRJ25vcm1hbEYnRkBGPUZA + +NyM3JC9JImFHNiIsJCoqSSVWX19tRzYiIiIiSSJSRzYiIiIiSSJURzYiIiIiSSZhbHBoYUc2IiEiIiQiKyM+QXVbIiEiKi9JImJHNiIsJEklVl9fbUc2IiQiK2xld0lEISM1 + + + +JSFH + + + \ No newline at end of file diff --git a/PR_maple_vertif_MAS.bak b/PR_maple_vertif_MAS.bak new file mode 100644 index 0000000..c346efc --- /dev/null +++ b/PR_maple_vertif_MAS.bak @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzY7LUkjbWlHRiQ2JVEidUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNi1RKiZjb2xvbmVxO0YnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZMLUY2Ni1RIn5GJ0Y5RjtGPkZARkJGREZGRkgvRktRJjAuMGVtRicvRk5GUy1JI21uR0YkNiRRIjFGJ0Y5LUY2Ni1RIjtGJ0Y5RjsvRj9GMUZARkJGREZGRkhGUkZNRk8tSSVtc3ViR0YkNiYtRiw2JVEiQ0YnRi9GMi1GIzYlLUYsNiVRInlGJ0YvRjJGL0YyLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvSSttc2VtYW50aWNzR0YkUSdhdG9taWNGJ0ZPRjUtRlY2JFEkMC40RidGOUZZRk8tRmhuNiZGam4tRiM2JS1GLDYlUSJ6RidGL0YyRi9GMkZib0Zlb0Y1LUZWNiRRJTAuMDdGJ0Y5RllGTy1GLDYlUSJuRidGL0YyRk9GNUZPLUZWNiRRJDAuNUYnRjlGWS8lK2V4ZWN1dGFibGVHRj1GOQ== + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJ1R0YoIiIiNyNGLg== + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSVDX195R0YoJCIiJSEiIjcjRi4= + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSVDX196R0YoJCIiKCEiIzcjRi4= + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoJCIiJiEiIjcjRi4= + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUklbXN1YkdGJDYmLUkjbWlHRiQ2JVEnJiM5NjM7RicvJSdpdGFsaWNHUSZmYWxzZUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1GIzYlLUYvNiVRInlGJy9GM1EldHJ1ZUYnL0Y2USdpdGFsaWNGJ0Y9Rj8vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy9JK21zZW1hbnRpY3NHRiRRJ2F0b21pY0YnLUkjbW9HRiQ2LVEqJmNvbG9uZXE7RidGNS8lJmZlbmNlR0Y0LyUqc2VwYXJhdG9yR0Y0LyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjQvJShsYXJnZW9wR0Y0LyUubW92YWJsZWxpbWl0c0dGNC8lJ2FjY2VudEdGNC8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRmVuLUklbXN1cEdGJDYlLUkobWZlbmNlZEdGJDYkLUYjNiktSSNtbkdGJDYkUSQwLjVGJ0Y1LUZINi1RJyZzZG90O0YnRjVGS0ZNRk9GUUZTRlVGVy9GWlEmMC4wZW1GJy9GZ25GaG8tRmluNiUtRiw2Ji1GLzYlUSJDRidGPUY/RjhGQUZELUYjNiUtRmFvNiRRIjJGJ0Y1Rj1GPy8lMXN1cGVyc2NyaXB0c2hpZnRHRkNGZG8tRmluNiUtRi82JVEiZEYnRj1GPy1GIzYnRmNwLUZINi1RKCZtaW51cztGJ0Y1RktGTUZPRlFGU0ZVRlcvRlpRLDAuMjIyMjIyMmVtRicvRmduRmNxLUYvNiVRIm5GJ0Y9Rj9GPUY/RmZwLyUrZXhlY3V0YWJsZUdGNEY1RjUtRiM2JUZgb0Y9Rj9GZnBGaHFGNQ== + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSlzaWdtYV9feUdGKCwkKiQqJEkiZEdGKCQiIzohIiIkIiImRjQkIitEclVHRyEjNTcjRi4= + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUkjbWlHRiQ2I1EhRictRiM2Ji1JJW1zdWJHRiQ2Ji1GLDYlUSgmc2lnbWE7RicvJSdpdGFsaWNHUSZmYWxzZUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1GIzYlLUYsNiVRInpGJy9GOFEldHJ1ZUYnL0Y7USdpdGFsaWNGJ0ZCRkQvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy9JK21zZW1hbnRpY3NHRiRRJ2F0b21pY0YnLUkjbW9HRiQ2LVEqJmNvbG9uZXE7RidGOi8lJmZlbmNlR0Y5LyUqc2VwYXJhdG9yR0Y5LyUpc3RyZXRjaHlHRjkvJSpzeW1tZXRyaWNHRjkvJShsYXJnZW9wR0Y5LyUubW92YWJsZWxpbWl0c0dGOS8lJ2FjY2VudEdGOS8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRmpuLUklbXN1cEdGJDYlLUkobWZlbmNlZEdGJDYkLUYjNigtSSNtbkdGJDYkUSQwLjVGJ0Y6LUZNNi1RJyZzZG90O0YnRjpGUEZSRlRGVkZYRlpGZm4vRmluUSYwLjBlbUYnL0Zcb0ZdcC1GXm82JS1GMjYmLUYsNiVRIkNGJ0ZCRkRGPUZGRkktRiM2JC1GZm82JFEiMkYnRjpGOi8lMXN1cGVyc2NyaXB0c2hpZnRHRkhGaW8tRl5vNiUtRiw2JVEiZEYnRkJGRC1GIzYmRmhwLUZNNi1RKCZtaW51cztGJ0Y6RlBGUkZURlZGWEZaRmZuL0ZpblEsMC4yMjIyMjIyZW1GJy9GXG9GaHEtRiw2JVEibkYnRkJGREY6RltxRjpGOi1GIzYkRmVvRjpGW3FGOkYrLyUrZXhlY3V0YWJsZUdGOUY6 + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSlzaWdtYV9fekdGKCwkKiQqJEkiZEdGKCQiIzohIiIkIiImRjQkIitvdXVcXCEjNjcjRi4= + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYuLUklbXN1YkdGJDYmLUkjbWlHRiQ2JVEiUEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUkjbW5HRiQ2JFEiMEYnL0Y2USdub3JtYWxGJ0YyRjUvJS9zdWJzY3JpcHRzaGlmdEdGPS9JK21zZW1hbnRpY3NHRiRRJ2F0b21pY0YnLUkjbW9HRiQ2LVEqJmNvbG9uZXE7RidGPi8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGSy8lKXN0cmV0Y2h5R0ZLLyUqc3ltbWV0cmljR0ZLLyUobGFyZ2VvcEdGSy8lLm1vdmFibGVsaW1pdHNHRksvJSdhY2NlbnRHRksvJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZaLUY7NiRRJTEwMDBGJ0Y+LUZGNi1RIjtGJ0Y+RkkvRk1GNEZORlBGUkZURlYvRllRJjAuMGVtRidGZW4tRkY2LVEifkYnRj5GSUZMRk5GUEZSRlRGVkZeby9GZm5GX28tRi82JVEiUkYnRjJGNUZgb0ZFRmBvLUkmbWZyYWNHRiQ2KC1GOzYkUSMyMEYnRj4tRiM2Jy1GOzYkUSMyNEYnRj4tRkY2LVEnJnNkb3Q7RidGPkZJRkxGTkZQRlJGVEZWRl5vRmNvLUY7NiRRJTM2MDBGJ0Y+RjJGNS8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGXXEvJSliZXZlbGxlZEdGSy8lK2V4ZWN1dGFibGVHRktGPg== + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSVQX18wR0YoIiUrNTcjRi4= + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJSR0YoIyIiIiIlP1Y3I0Yu + + + +JSFH + + + +JSFH + + + +JSFH + + + +JSFH + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYzLUklbXN1YkdGJDYmLUkjbWlHRiQ2JVEiRkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUYvNiVRInBGJ0YyRjVGMkY1LyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvSSttc2VtYW50aWNzR0YkUSdhdG9taWNGJy1JI21vR0YkNi1RKiZjb2xvbmVxO0YnL0Y2USdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGSy8lKXN0cmV0Y2h5R0ZLLyUqc3ltbWV0cmljR0ZLLyUobGFyZ2VvcEdGSy8lLm1vdmFibGVsaW1pdHNHRksvJSdhY2NlbnRHRksvJSdsc3BhY2VHUSwwLjI3Nzc3NzhlbUYnLyUncnNwYWNlR0ZaLUkjbW5HRiQ2JFEkMC41RidGRy1GRDYtUSI7RidGR0ZJL0ZNRjRGTkZQRlJGVEZWL0ZZUSYwLjBlbUYnRmVuLUZENi1RIn5GJ0ZHRklGTEZORlBGUkZURlZGX28vRmZuRmBvLUYsNiZGLi1GIzYlLUYvNiVRImJGJ0YyRjVGMkY1Rj1GQEZDRmduRltvRmFvLUYsNiYtRi82JVEnJiM5NTU7RicvRjNGS0ZHLUYjNiUtRi82JVEibEYnRjJGNUYyRjVGPUZARkMtRmhuNiRRJTEuMTZGJ0ZHLUZENi1RJyZzZG90O0YnRkdGSUZMRk5GUEZSRlRGVkZfb0Zkby1JJW1zdXBHRiQ2JS1GaG42JFEjMTBGJ0ZHLUYjNiYtRkQ2LVEqJnVtaW51czA7RidGR0ZJRkxGTkZQRlJGVEZWL0ZZUSwwLjIyMjIyMjJlbUYnL0ZmbkZpcS1GaG42JFEiOEYnRkdGMkY1LyUxc3VwZXJzY3JpcHRzaGlmdEdGPy8lK2V4ZWN1dGFibGVHRktGRw== + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSVGX19wR0YoJCIiJiEiIjcjRi4= + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSVGX19iR0YoJCIiJiEiIjcjRi4= + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSpsYW1iZGFfX2xHRigkIisrKytnNiEjPDcjRi4= + + + +JSFH + + + +JSFH + + + +JSFH + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYvLUklbXN1YkdGJDYmLUkjbWlHRiQ2JVEiUUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUYvNiVRJHRhdUYnL0YzUSZmYWxzZUYnL0Y2USdub3JtYWxGJ0YyRjUvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy9JK21zZW1hbnRpY3NHRiRRJ2F0b21pY0YnLUkjbW9HRiQ2LVEqJmNvbG9uZXE7RidGPy8lJmZlbmNlR0Y+LyUqc2VwYXJhdG9yR0Y+LyUpc3RyZXRjaHlHRj4vJSpzeW1tZXRyaWNHRj4vJShsYXJnZW9wR0Y+LyUubW92YWJsZWxpbWl0c0dGPi8lJ2FjY2VudEdGPi8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRmVuLUYsNiYtRi82JVEiRkYnRjJGNS1GIzYlLUYvNiVRInBGJ0YyRjVGMkY1RkFGRC1GSDYtUScmc2RvdDtGJ0Y/RktGTUZPRlFGU0ZVRlcvRlpRJjAuMGVtRicvRmduRmZvLUYsNiZGam4tRiM2JS1GLzYlUSJiRidGMkY1RjJGNUZBRkRGYm8tSSZtZnJhY0dGJDYoLUYsNiYtRi82JVEicUYnRjJGNS1GIzYlLUYvNiVRInRGJ0YyRjVGMkY1RkFGRC1GIzYlLUYvNiVRIlBGJ0YyRjVGMkY1LyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZmcS8lKWJldmVsbGVkR0Y+RmJvLUZgcDYoLUYsNiYtRi82JVEnJiM5NTU7RidGPUY/LUYjNiUtRi82JVEibEYnRjJGNUYyRjVGQUZELUYjNidGXXItRkg2LVEiK0YnRj9GS0ZNRk9GUUZTRlVGVy9GWlEsMC4yMjIyMjIyZW1GJy9GZ25GXXMtRiw2JkZfci1GIzYlLUYvNiVRInJGJ0YyRjVGMkY1RkFGREYyRjVGYXFGZHFGZ3FGaXFGYm8tSShtZmVuY2VkR0YkNiQtRiM2KC1JI21uR0YkNiRGY3FGPy1GSDYtUSgmbWludXM7RidGP0ZLRk1GT0ZRRlNGVUZXRlxzRl5zLUYvNiVRJGV4cEYnRj1GPy1GZ3M2JC1GIzYoLUZINi1RKiZ1bWludXMwO0YnRj9GS0ZNRk9GUUZTRlVGV0Zcc0Zecy1GZ3M2JC1GIzYnRl1yRmlyRl9zLyUrZXhlY3V0YWJsZUdGPkY/Rj9GYm9GOkZfdUY/Rj9GX3VGP0Y/Rl91Rj8= + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSdRX190YXVHRigsJCoqSSVxX190R0YoIiIiSSJQR0YoISIiLCYkIisrKytnNiEjPEYxSSpsYW1iZGFfX3JHRihGMUYzLCZGMUYxLUkkZXhwR0YlNiMsJComRjRGMUkkdGF1R0YoRjFGM0YzRjEkIisrKysrSCEjPTcjRi4= + + + +JSFH + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUklbXN1YkdGJDYmLUkjbWlHRiQ2JVEiQUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GLzYlUSR0YXVGJy9GM1EmZmFsc2VGJy9GNlEnbm9ybWFsRicvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy9JK21zZW1hbnRpY3NHRiRRJ2F0b21pY0YnLUkjbW9HRiQ2LVEqJmNvbG9uZXE7RidGPS8lJmZlbmNlR0Y8LyUqc2VwYXJhdG9yR0Y8LyUpc3RyZXRjaHlHRjwvJSpzeW1tZXRyaWNHRjwvJShsYXJnZW9wR0Y8LyUubW92YWJsZWxpbWl0c0dGPC8lJ2FjY2VudEdGPC8lJ2xzcGFjZUdRLDAuMjc3Nzc3OGVtRicvJSdyc3BhY2VHRlktSSZtZnJhY0dGJDYoLUYjNigtRi82JVEiUkYnRjJGNS1GRjYtUScmc2RvdDtGJ0Y9RklGS0ZNRk9GUUZTRlUvRlhRJjAuMGVtRicvRmVuRmJvLUYsNiYtRi82JVEiUUYnRjJGNUY4Rj9GQkZeby1GLDYmLUYvNiVRIlBGJ0YyRjUtRi82JUZBRjJGNUY/RkJGPS1GIzYqLUYvNiVRI3BpRidGO0Y9Rl5vLUYvNiVRInVGJ0YyRjVGXm8tRiw2Ji1GLzYlUSgmc2lnbWE7RidGO0Y9LUYvNiVRInlGJ0YyRjVGP0ZCRl5vLUYsNiZGanAtRi82JVEiekYnRjJGNUY/RkJGPS8lLmxpbmV0aGlja25lc3NHUSIxRicvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGanEvJSliZXZlbGxlZEdGPC1GLzYjUSFGJy8lK2V4ZWN1dGFibGVHRjxGPQ== + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSdBX190YXVHRigsJCouSSVxX190R0YoIiIiSSJQR0YoISIiLCYkIisrKytnNiEjPEYxSSpsYW1iZGFfX3JHRihGMUYzLCZGMUYxLUkkZXhwR0YlNiMsJComRjRGMUkkdGF1R0YoRjFGM0YzRjFJI3BpR0YoRjMqJEkiZEdGKCQiIzpGMyQhIzVGMyQiK1dOKFx6JUY3NyNGLg== + + + +JSFH + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYzLUkjbWlHRiQ2JVEnRG9zYWdlRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2LVEifkYnL0YzUSdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGPS8lKXN0cmV0Y2h5R0Y9LyUqc3ltbWV0cmljR0Y9LyUobGFyZ2VvcEdGPS8lLm1vdmFibGVsaW1pdHNHRj0vJSdhY2NlbnRHRj0vJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZMLUY2Ni1RKiZjb2xvbmVxO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yNzc3Nzc4ZW1GJy9GTkZTRjUtSSZtZnJhY0dGJDYoLUYjNictSSNtbkdGJDYkUSU4LjU0RidGOS1GNjYtUScmc2RvdDtGJ0Y5RjtGPkZARkJGREZGRkhGSkZNLUklbXN1cEdGJDYlLUZlbjYkUSMxMEYnRjktRiM2JS1GZW42JFEiMkYnRjlGL0YyLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJy8lK2V4ZWN1dGFibGVHRj1GOS1GIzYlLUYsNiVRIm1GJ0YvRjJGL0YyLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZlcC8lKWJldmVsbGVkR0Y9RmhuLUklbXN1YkdGJDYmLUYsNiVRIkFGJ0YvRjItRiM2JS1GLDYlUSR0YXVGJy9GMEY9RjlGL0YyLyUvc3Vic2NyaXB0c2hpZnRHRmhvL0krbXNlbWFudGljc0dGJFEnYXRvbWljRidGaG4tRiw2JVEkZl9hRidGL0YyRmhuLUZbcTYmLUYsNiVRIkVGJ0YvRjItRiM2JS1GLDYlUSRlZmZGJ0YvRjJGL0YyRmZxRmhxRmhuLUZbcTYmLUYsNiVRIlRGJ0YvRjItRiM2JS1GLDYlUSJlRidGL0YyRi9GMkZmcUZocUZobi1JKG1mZW5jZWRHRiQ2JC1GIzYoLUZlbjYkRmJwRjktRjY2LVEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSC9GS1EsMC4yMjIyMjIyZW1GJy9GTkZddC1GLDYlUSRleHBGJ0ZlcUY5LUZjczYkLUYjNiYtRjY2LVEqJnVtaW51czA7RidGOUY7Rj5GQEZCRkRGRkZIRlx0Rl50LUZWNigtRiM2Jy1GZW42JFEmMC42OTNGJ0Y5RmhuRmpyRmlvRjktRiM2JUZockYvRjJGYHBGY3BGZnBGaHBGaW9GOUY5RmlvRjlGOUZpb0Y5 + +LV9JLFR5cGVzZXR0aW5nRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSdEb3NhZ2VHRigsJCo4SSJtR0YoISIiSSVxX190R0YoIiIiSSJQR0YoRjEsJiQiKysrK2c2ISM8RjNJKmxhbWJkYV9fckdGKEYzRjEsJkYzRjMtSSRleHBHRiU2IywkKiZGNUYzSSR0YXVHRihGM0YxRjFGM0kjcGlHRihGMSokSSJkR0YoJCIjOkYxJCEjNUYxSSRmX2FHRihGM0knRV9fZWZmR0YoRjNJJVRfX2VHRihGMywmRjNGMy1GPDYjLCQqJkkiVEdGKEYzRkpGMSQhJCRwISIkRjFGMyQiKzJ1IVw0JSEjOTcjRi4= + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEnRG9zYWdlRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLyUrZXhlY3V0YWJsZUdRJmZhbHNlRicvRjNRJ25vcm1hbEYn + +LCQqOEkibUc2IiEiIkklcV9fdEdGJSIiIkkiUEdGJUYmLCYkIisrKytnNiEjPEYoSSpsYW1iZGFfX3JHRiVGKEYmLCZGKEYoLUkkZXhwRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMsJComRipGKEkkdGF1R0YlRihGJkYmRihJI3BpR0YlRiYqJEkiZEdGJSQiIzpGJiQhIzVGJkkkZl9hR0YlRihJJ0VfX2VmZkdGJUYoSSVUX19lR0YlRigsJkYoRigtRjE2IywkKiZJIlRHRiVGKEZCRiYkISQkcCEiJEYmRigkIisydSFcNCUhIzk= + + + +JSFH + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYpLUkjbW5HRiQ2JFElMC4wMUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNi1RJyZzZG90O0YnRi8vJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRjgvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGRy1GLDYkUSkxLjYwOTM0NEYnRi9GMi1JJW1zdXBHRiQ2JS1JKG1mZW5jZWRHRiQ2JC1GIzYnLUYsNiRRJTMwMDBGJ0YvRjItRiw2JFElMTAwMEYnRi8vJStleGVjdXRhYmxlR0Y4Ri9GLy1GIzYlLUYsNiRRJDAuNUYnRi8vJSdpdGFsaWNHUSV0cnVlRicvRjBRJ2l0YWxpY0YnLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0ZlbkYv + +JCIrd2JZKHkjISIp + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkmbWZyYWNHRiQ2KC1JI21uR0YkNiRRIjFGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictRiM2Ji1JI21pR0YkNiVRJXNxcnRGJy8lJ2l0YWxpY0dRJmZhbHNlRidGMi1JKG1mZW5jZWRHRiQ2JC1GIzYlLUYvNiRRJTEwMDBGJ0YyL0Y8USV0cnVlRicvRjNRJ2l0YWxpY0YnRjJGRkZILyUubGluZXRoaWNrbmVzc0dGMS8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZOLyUpYmV2ZWxsZWRHRj0tRjg2I1EhRicvJStleGVjdXRhYmxlR0Y9RjI= + +LCQqJCIjNSMiIiIiIiMjRiYiJCsi + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEmZXZhbGZGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2JS1GLDYlUSIlRidGL0YyLyUrZXhlY3V0YWJsZUdRJmZhbHNlRicvRjNRJ25vcm1hbEYnRkBGPUZA + +JCIrZ3dGaUohIzY= + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVElc3FydEYnLyUnaXRhbGljR1EmZmFsc2VGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictSShtZmVuY2VkR0YkNiQtRiM2JS1JI21uR0YkNiRRJDEwMEYnRjIvJStleGVjdXRhYmxlR0YxRjJGMkY+RjI= + +IiM1 + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkjbW5HRiQ2JFEnMC4zMTYyRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLUkjbW9HRiQ2LVEnJnNkb3Q7RidGLy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGOC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJSdsc3BhY2VHUSYwLjBlbUYnLyUncnNwYWNlR0ZHLUkjbWlHRiQ2JVElc3FydEYnLyUnaXRhbGljR0Y4Ri8tSShtZmVuY2VkR0YkNiQtRiM2JS1GLDYkUSQxMDBGJ0YvLyUrZXhlY3V0YWJsZUdGOEYvRi9GWEYv + +JCImPzskISIl + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUkmbWZyYWNHRiQ2KC1JI21uR0YkNiRRIjFGJy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRictRiM2Ji1JI21pR0YkNiVRJXNxcnRGJy8lJ2l0YWxpY0dRJmZhbHNlRidGMi1JKG1mZW5jZWRHRiQ2JC1GIzYlLUYvNiRRJTEwMDBGJ0YyL0Y8USV0cnVlRicvRjNRJ2l0YWxpY0YnRjJGRkZILyUubGluZXRoaWNrbmVzc0dGMS8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZOLyUpYmV2ZWxsZWRHRj0tSSNtb0dGJDYtUScmc2RvdDtGJ0YyLyUmZmVuY2VHRj0vJSpzZXBhcmF0b3JHRj0vJSlzdHJldGNoeUdGPS8lKnN5bW1ldHJpY0dGPS8lKGxhcmdlb3BHRj0vJS5tb3ZhYmxlbGltaXRzR0Y9LyUnYWNjZW50R0Y9LyUnbHNwYWNlR1EmMC4wZW1GJy8lJ3JzcGFjZUdGYW9GNy1GPzYkLUYjNiUtRi82JFEkMTAwRidGMi8lK2V4ZWN1dGFibGVHRj1GMkYyRltwRjI= + +LCQqJCIjNSMiIiIiIiMjRiZGJA== + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVElZXZhbEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JKG1mZW5jZWRHRiQ2JC1GIzYnLUYsNiVRIiVGJ0YvRjItSSNtb0dGJDYtUSIsRicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0YxLyUpc3RyZXRjaHlHRkUvJSpzeW1tZXRyaWNHRkUvJShsYXJnZW9wR0ZFLyUubW92YWJsZWxpbWl0c0dGRS8lJ2FjY2VudEdGRS8lJ2xzcGFjZUdRJjAuMGVtRicvJSdyc3BhY2VHUSwwLjMzMzMzMzNlbUYnLUkjbW5HRiQ2JFEkMTAwRidGQS8lK2V4ZWN1dGFibGVHRkVGQUZBRmZuRkE= + +LCQqJCIjNSMiIiIiIiMjRiZGJA== + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYmLUkjbWlHRiQ2JVEmZXZhbGZGJy8lJ2l0YWxpY0dRJXRydWVGJy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRictSShtZmVuY2VkR0YkNiQtRiM2JS1JJm1mcmFjR0YkNigtRiM2Ji1GLDYlUSVzcXJ0RicvRjBRJmZhbHNlRicvRjNRJ25vcm1hbEYnLUY2NiQtRiM2JS1JI21uR0YkNiRRIzEwRidGRC8lK2V4ZWN1dGFibGVHRkNGREZERk5GRC1GIzYlRkpGL0YyLyUubGluZXRoaWNrbmVzc0dRIjFGJy8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGJy8lKW51bWFsaWduR0ZXLyUpYmV2ZWxsZWRHRkNGTkZERkRGTkZE + +JCIrZ3dGaUohIzU= + + + +LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUklbXN1cEdGJDYlLUkobWZlbmNlZEdGJDYkLUYjNiUtSSZtZnJhY0dGJDYoLUkjbW5HRiQ2JFEiMUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1GIzYlLUY3NiRRIzEwRidGOi8lJ2l0YWxpY0dRJXRydWVGJy9GO1EnaXRhbGljRicvJS5saW5ldGhpY2tuZXNzR0Y5LyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRksvJSliZXZlbGxlZEdRJmZhbHNlRicvJStleGVjdXRhYmxlR0ZQRjpGOi1GIzYlLUY0NihGNi1GIzYlLUY3NiRRJDEuNUYnRjpGQkZFRkdGSUZMRk5GQkZFLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0ZRRjo= + +JCIrIXBNVzojISM1 + + + +JSFH + + + \ No newline at end of file diff --git a/Vizualization_data.py b/Vizualization_data.py new file mode 100644 index 0000000..77039d1 --- /dev/null +++ b/Vizualization_data.py @@ -0,0 +1,52 @@ +thon# -*- coding: utf-8 -*- +""" +Created on Fri May 24 15:20:18 2019 + +@author: jarl +""" + +from matplotlib import pyplot as plt + +import numpy as np + +from sympy import Symbol + +import os + +import re + +import json + +PC_dir = './DB/Pure Component Properties (Several Properties)' + +json_df = {} +T_c = [] +P_c = [] +V_m_c = [] +R = 8.314 +Z_c = 0.307401 # Symbol('Z_c') + +for fileName in os.listdir(PC_dir): + if fileName[-5:] == '.json': + #json_files.append(fileName) + pf = open(PC_dir + '//' + fileName, 'r') + json_df.update( {fileName[:-5] : json.load(pf) } ) + pf.close() + + +for key in json_df.keys(): + content = json_df[key] + for prop in content.keys(): + if prop == 'Critical Data': + for i in range(len(content[prop]['T [K]'])): + if ( re.match( '\d' , content[prop]['T [K]'][i]) and re.match( '\d' , content[prop]['P [kPa]'][i]) ): + T_c.append( float( content[prop]['T [K]'][i] ) ) + P_c.append( float( content[prop]['P [kPa]'][i]) ) + V_m_c.append( Z_c *R * T_c[-1] / P_c[-1] ) + if prop == "Vapor Pressure" : + np.interp(0.7*) + +plt.figure() +plt.scatter(P_c, T_c) + + diff --git a/chemical_rate.py b/chemical_rate.py new file mode 100644 index 0000000..aeccaab --- /dev/null +++ b/chemical_rate.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +""" +Created on Tue Jun 4 00:11:44 2019 + +@author: jarl +""" + +from sympy import Eq, Symbol, symbols, solve, nsolve, diff, exp, init_printing + + +init_printing() + +kappa, k_B, T, h, DeltaG_react, R = symbols('kappa k_B T hbar DeltaG_react R') + + +k = kappa*k_B*T/h*exp(-DeltaG_react/R/T) + + + + diff --git a/downloader.py b/downloader.py index e252cb6..294d253 100644 --- a/downloader.py +++ b/downloader.py @@ -4,6 +4,7 @@ import re import time import pdb +import json Head = testScrape.DDBST_DB_free(0) @@ -41,10 +42,12 @@ def PCP_dwnld(verbose): table.append(table_temp) elif ChemName != Chem_n: - createFile(ChemName+'_'+CAS_cur+'.tsv',dir_name,table,'\t') + + createFile(str(ChemName)+'_'+str(CAS_cur)+'.tsv',dir_name,table,'\t') + createJsonFile(str(ChemName)+'_'+str(CAS_cur)+'.json',dir_name,table ) if verbose: - print 'Pure component propeties downloaded: ' + ChemName + '; CAS: ' + CAS_cur - print 'Compnent #' + str(subsNum) + ' of ' + Head[1][-1] + print ('Pure component propeties downloaded: ' + str(ChemName) + '; CAS: ' + str(CAS_cur) ) + print ('Compnent #' + str(subsNum) + ' of ' + str(Head[1][-1] )) subsNum += 1 @@ -60,8 +63,8 @@ def PCP_dwnld(verbose): continue # save the last entry - createFile(ChemName+'_'+CAS_cur+'.tsv',dir_name,table,'\t') - + createFile(str(ChemName)+'_'+str(CAS_cur)+'.tsv',dir_name,table,'\t') + createJsonFile(str(ChemName)+'_'+str(CAS_cur)+'.json',dir_name,table) #return table def createFile(fileName, filePath, contentMat, sepStr): @@ -71,7 +74,8 @@ def createFile(fileName, filePath, contentMat, sepStr): dirSplit = re.split('/',filePath) lc = './' for loc in dirSplit: - dirLst = os.walk(lc).next()[1] + os.walk(lc) + dirLst = os.walk(lc).send(None)[1] pathExsits = False @@ -109,10 +113,367 @@ def createFile(fileName, filePath, contentMat, sepStr): except: fileStream.write('SOME_ERROR_OCCOURED_HERE'+sepStr) - print 'createFile: error at writing file' + print ('createFile: error at writing file' ) fileStream.write('\n') fileStream.close() + +def createJsonFile(fileName, filePath, contentMat): + # Task 1: create relevant directories for the intended path + + dirSplit = re.split('/',filePath) + lc = './' + for loc in dirSplit: + os.walk(lc) + dirLst = os.walk(lc).send(None)[1] + + pathExsits = False + + for actDirs in dirLst: + if actDirs == loc: + pathExsits = True # path exsits + else: + continue + + if pathExsits: + lc += loc +'/' + #elif pathExsits == False: + else: + lc += loc + '/' + try: + os.mkdir(lc) + except: + #print 'directory exists!' + #print 'loc = ' + loc + #print 'actDirs = ' + actDirs + '\n\n' + [] + # Task 2 : export json structure to file + fileStream = open(filePath + '/' + fileName, 'w') + json_dict = {} + l = 1 + + if (contentMat[0][0][0] == 'Formula'): # i.e. pure substance data + for i in range(len(contentMat[0][0])): + json_dict.update({contentMat[0][0][i]: contentMat[0][1][i] }) + + for j in range (len(contentMat)): + temp_keys = [] + temp_values = [] + if (contentMat[j][0][0][0:3] == '$$$'): + main_key = contentMat[j][0][0][3:] + for k in range(len(contentMat[j+1][0])): + temp_keys.append( contentMat[j+1][0][k]) + temp_values.append([]) + l = 1 + while (contentMat[j+1][l][0] != 'Number'): + temp_values[k].append( contentMat[j+1][l][k] ) + l += 1 + + # find the references... + temp_keys.append('Reference') + temp_values.append([]) + for p in range(l+1, len(contentMat[j+1])): + temp_values[-1].append([contentMat[j+1][p][0], contentMat[j+1][p][1] ]) + + + temp_dict = {} + for u in range(len(temp_keys)): + temp_dict.update({ temp_keys[u] : temp_values[u] }) + json_dict.update({main_key: temp_dict}) + + else: + continue + + + + + elif (contentMat[0][0][0][0:3] == '$$$' ): # i.e. we have mixture data + ## copy pased code ::: + temp_keys = [] + temp_values = [] + temp_dict = {} + temp_dict2 = {} + i = 0 + DatasetName_index = [] + Component_header_index = [] + Component_index = [] + Constants_index = [] + Table_head_index = [] + Table_data_index = [] + Author_index = [] + #Constant_regex_pat = re.compile('[a-zA-Z]+') + #Table_head_regpat = re.compile('[a-z]{1, 99}\[[a-z]{1, 99}\]') +# while ( i < len(contentMat[0])): +# if (contentMat[0][i][0][:3] == '$$$'): +# main_key = contentMat[0][0][0][3:] +# i += 1 +# elif (contentMat[0][i][0] == 'No.'): +# for j in range(len(contentMat[0][i])): +# k=i + 1 +# temp_keys.append( contentMat[0][i][j]) +# temp_values +# try: +# while ( k < len(contentMat[0]) and int ( contentMat[0][k][0] ) > 0 ): +# temp_values.append(contentMat[0][k][j]) +# k += 1 +# except: +# ## component list is finished... +# +# temp_dict.update({temp_keys[0] : temp_values}) +# +# temp_keys = [] +# temp_values = [] +# #while ( k < len(contentMat[0]) and int ( contentMat[0][k][0] ) ): +# temp_dict2.update({'Components' : temp_dict }) + ## extract constant values: + + dataset_key = '' + dataset = {} + Source_set = [] + + Num_datadict = {} + Num_datadict_keys = [] + Num_datadict_values = [] + + Mix_params_dict = {} + Mix_params_keys = [] + Mix_params_values = [] + + const_dict = {} + const_keys = [] + const_values = [] + + + data_set_name = '' + + + for i in range(len(contentMat)): + for j in range(len(contentMat[i])): + if ( contentMat[i][j][0][0:3] == '$$$'): # find the title of the dataset + DatasetName_index.append([i, j]) + + + if ( j > 0 or i > 0): + # update the json dict of previous data + for k in range(len(Mix_params_keys)): + Mix_params_dict.update({Mix_params_keys[k] : Mix_params_values[k] }) + + for k in range(len(const_keys)): + const_dict.update({const_keys[k]: const_values[k]}) + + for k in range(len(Num_datadict_keys)): + Num_datadict.update({Num_datadict_keys[k] : Num_datadict_values[k] }) + + if (len(Num_datadict_keys) < 0.1): + print("no datadict keys!") + + + dataset.update({"Constants": const_dict}) + dataset.update({"Components": Mix_params_dict}) + dataset.update({"Table": Num_datadict }) + dataset.update({'Source' : Source_set}) + + + json_dict.update({data_set_name : dataset}) + + # rinse and repeat :) + dataset = {} + Num_datadict = {} + Num_datadict_keys = [] + Num_datadict_values = [] + + Mix_params_dict = {} + Mix_params_keys = [] + Mix_params_values = [] + + const_dict = {} + const_keys = [] + const_values = [] + + + + + + data_set_name = contentMat[i][j][0][3:] + + else: + data_set_name = contentMat[i][j][0][3:] + + + elif(contentMat[i][j][0] == 'No.' and re.match( '\d{1,3}', contentMat[i][j+1][0] ) ): # find header of the component list + Component_header_index.append([i, j]) + for k in range( len( contentMat[i][j])): + Mix_params_values.append([]) + Mix_params_keys.append(contentMat[i][j][k]) + elif( len( contentMat[i][j]) == 5 and re.match('^[a-zA-Z]', contentMat[i][j][1] ) and not re.match('^[a-zA-Z]{1,4}\d{0,2} \[.*?\]$', contentMat[i][j][0] ) ): # find component list entries + if( re.match('^\d', contentMat[i][j][2] ) and re.match('^\d{1,5}-\d{1,5}-\d{1,5}$', contentMat[i][j][3] ) ): + Component_index.append([i, j]) + #Mix_params_keys.append(contentMat[i][j][0]) + for k in range( len( contentMat[i][j])): + Mix_params_values[k].append(contentMat[i][j][k]) + + + + + + elif ( re.match( '^[a-zA-Z]{4,99}', contentMat[i][j][0] ) and len(contentMat[i][j]) == 3 and re.match( '^\d{0,99}.\d{0,99}', contentMat[i][j][1] ) and not re.match("\[", contentMat[i][j][0]) and contentMat[i][j][0] != 'Excess Volume [cm3/mol]' and contentMat[i][j][0] != 'Density [g/cm3]' ): # find contant value for the dataset: + if contentMat[i][j][1] != '': + #Constants_index.append([i, j]) + const_keys.append(contentMat[i][j][0]) + const_values.append(contentMat[i][j][1:]) + + elif ( re.match('[a-zA-Z]{1,25}\d{0,2} \[.*?\]$', contentMat[i][j][0] ) or contentMat[i][j][0] == 'Excess Heat Capacity [J/mol*K]' or contentMat[i][j][0] == 'Heat Capacity [J/mol*K]' or contentMat[i][j][0] == 'Excess Volume [cm3/mol]' or contentMat[i][j][0] == 'Excess Volume [cm3/mol]' ): #elif ( re.match( '^[a-zA-Z]{0,99} \[[a-zA-Z]{0,99}\]$' , contentMat[i][j][0] ) ): # find table heading + # the table headings + Table_head_index.append([i, j]) + for k in range(len(contentMat[i][j])): + Num_datadict_keys.append(contentMat[i][j][k]) + #Num_datadict.update({Num_datadict_keys , []}) + Num_datadict_values.append([]) + elif ( len(contentMat[i][j]) == len(Num_datadict_keys) and not re.match('^Source$' , contentMat[i][j][0]) ): #elif ( re.match( '^\d{0,9}.\d{0,9}$' , contentMat[i][j][0] ) or contentMat[i][j][0] == '^' ): # find numerical table entries + Table_data_index.append([i, j]) + for k in range(len(Num_datadict_keys)): + #Num_datadict.update({ Num_datadict_keys[k] : Num_datadict[ Num_datadict_keys[k] ].append(contentMat[i][j][k]) } ) + Num_datadict_values[k].append(contentMat[i][j][k]) + elif (re.match('^Source$' , contentMat[i][j][0]) ): + Author_index.append([i, j]) + elif (re.match('^[a-zA-Z]{1,999999}', contentMat[i][j][0]) and len(contentMat[i][j][0]) > 23 ): + Source_set.append(contentMat[i][j][0]) + + + # save the last entries + for k in range(len(Mix_params_keys)): + Mix_params_dict.update({Mix_params_keys[k] : Mix_params_values[k] }) + + for k in range(len(const_keys)): + const_dict.update({const_keys[k]: const_values[k]}) + + for k in range(len(Num_datadict_keys)): + Num_datadict.update({Num_datadict_keys[k] : Num_datadict_values[k] }) + + if (len(Num_datadict_keys) < 0.1): + print("no datadict keys!") + #if (len(Num_datadict_values[0]) < 0.1): + # print("no values??") + + dataset.update({"Constants": const_dict}) + dataset.update({"Components": Mix_params_dict}) + dataset.update({"Table": Num_datadict }) + dataset.update({'Source' : Source_set}) + + + + json_dict.update({data_set_name : dataset}) + + elif (contentMat[0][0][0][0:3] == 'No.' ): # i.e. we have mixture data + ## copy pased code ::: + temp_keys = [] + temp_values = [] + temp_dict = {} + temp_dict2 = {} + i = 0 + DatasetName_index = [] + Component_header_index = [] + Component_index = [] + Constants_index = [] + Table_head_index = [] + Table_data_index = [] + Author_index = [] + + dataset_key = '' + dataset = {} + Source_set = [] + + Num_datadict = {} + Num_datadict_keys = [] + Num_datadict_values = [] + + Mix_params_dict = {} + Mix_params_keys = [] + Mix_params_values = [] + + const_dict = {} + const_keys = [] + const_values = [] + + + data_set_name = '' + + + for i in range(len(contentMat)): + for j in range(len(contentMat[i])): + if(contentMat[i][j][0] == 'No.' and re.match( '\d{1,3}', contentMat[i][j+1][0] ) ): # find header of the component list + Component_header_index.append([i, j]) + for k in range( len( contentMat[i][j])): + Mix_params_values.append([]) + Mix_params_keys.append(contentMat[i][j][k]) + elif( len( contentMat[i][j]) == 5 and re.match('^[a-zA-Z]', contentMat[i][j][1] ) and not re.match('^[a-zA-Z]{1,4}\d{0,2} \[.*?\]$', contentMat[i][j][0] ) ): # find component list entries + if( re.match('^\d', contentMat[i][j][2] ) and re.match('^\d{1,5}-\d{1,5}-\d{1,5}$', contentMat[i][j][3] ) ): + Component_index.append([i, j]) + #Mix_params_keys.append(contentMat[i][j][0]) + for k in range( len( contentMat[i][j])): + Mix_params_values[k].append(contentMat[i][j][k]) + + + + + + elif ( re.match( '^[a-zA-Z]{4,99}', contentMat[i][j][0] ) and len(contentMat[i][j]) == 3 and re.match( '^\d{0,99}.\d{0,99}', contentMat[i][j][1] ) ): # find contant value for the dataset: + if contentMat[i][j][1] != '': + #Constants_index.append([i, j]) + const_keys.append(contentMat[i][j][0]) + const_values.append(contentMat[i][j][1:]) + + elif ( re.match('^[a-zA-Z]{1,90}\d{0,2} \[.*?\]$', contentMat[i][j][0] ) or contentMat[i][j][0] == "Azeotropic Type" ): #elif ( re.match( '^[a-zA-Z]{0,99} \[[a-zA-Z]{0,99}\]$' , contentMat[i][j][0] ) ): # find table heading + # the table headings + Table_head_index.append([i, j]) + for k in range(len(contentMat[i][j])): + Num_datadict_keys.append(contentMat[i][j][k]) + #Num_datadict.update({Num_datadict_keys , []}) + Num_datadict_values.append([]) + elif ( len(contentMat[i][j]) == len(Num_datadict_keys) and not re.match('^Source$' , contentMat[i][j][0]) ): #elif ( re.match( '^\d{0,9}.\d{0,9}$' , contentMat[i][j][0] ) or contentMat[i][j][0] == '^' ): # find numerical table entries + Table_data_index.append([i, j]) + for k in range(len(Num_datadict_keys)): + #Num_datadict.update({ Num_datadict_keys[k] : Num_datadict[ Num_datadict_keys[k] ].append(contentMat[i][j][k]) } ) + Num_datadict_values[k].append(contentMat[i][j][k]) + elif (re.match('^Source$' , contentMat[i][j][0]) ): + Author_index.append([i, j]) + elif (re.match('^[a-zA-Z]{1,999999}', contentMat[i][j][0]) and len(contentMat[i][j][0]) > 23 ): + Source_set.append(contentMat[i][j][0]) + + + # save the last entries + for k in range(len(Mix_params_keys)): + Mix_params_dict.update({Mix_params_keys[k] : Mix_params_values[k] }) + + for k in range(len(const_keys)): + const_dict.update({const_keys[k]: const_values[k]}) + + for k in range(len(Num_datadict_keys)): + Num_datadict.update({Num_datadict_keys[k] : Num_datadict_values[k] }) + + if (len(Num_datadict_keys) < 0.1): + print("no datadict keys!") + #if (len(Num_datadict_values[0]) < 0.1): + # print("no values??") + + dataset.update({"Constants": const_dict}) + dataset.update({"Components": Mix_params_dict}) + dataset.update({"Table": Num_datadict }) + dataset.update({'Source' : Source_set}) + + + json_dict = dataset + + + + + #json.load + #json. + #json.dump(json_dict, fileStream) + fileStream.write(json.dumps(json_dict, indent=4, sort_keys=True) ) + + + fileStream.close() def mixPropDB_dwnld(url, name, verbose): DB_elems = testScrape.DB(url) @@ -129,8 +490,8 @@ def mixPropDB_dwnld(url, name, verbose): try: content = testScrape.DDBST_table(url) except: - print 'Some error occured for url: ' + url + ' \n broken???' - print 'Skipped ' + str(counter) + ' of ' + str(total_elems) + ' element' + print ('Some error occured for url: ' + url + ' \n broken???') + print ('Skipped ' + str(counter) + ' of ' + str(total_elems) + ' element') counter += 1 continue @@ -152,19 +513,18 @@ def mixPropDB_dwnld(url, name, verbose): inter += 1 - fileTitle += '.tsv' - - createFile(fileTitle, path, [content], '\t') + createFile(fileTitle + '.tsv', path, [content], '\t') + createJsonFile(fileTitle + '.json', path, [content]) if verbose: - print 'Status of Database: ' + name - print str(counter) + ' of ' + str(total_elems) + ' items downloaded' + print ('Status of Database: ' + name) + print (str(counter) + ' of ' + str(total_elems) + ' items downloaded') counter += 1 #time.sleep(10) def AllDB_dwnl(verbose): - for line in Head[2:-1]: + for line in Head[2:-1]:#Head[2:-1]: urlIndex = line[0]; curDir = line[1] if len(urlIndex) == 2: DB_names = [line[2], line[3]] @@ -198,9 +558,9 @@ def slimDB(DBelements): def main(verbose): - PCP_dwnld(verbose) + #PCP_dwnld(verbose) AllDB_dwnl(verbose) - print 'DDBST free database downloaded to ./DB' + print ('DDBST free database downloaded to ./DB') if __name__ == '__main__': diff --git a/testScrape.py b/testScrape.py index 6d3c0fb..e07988d 100644 --- a/testScrape.py +++ b/testScrape.py @@ -1,6 +1,4 @@ -import urllib2 import requests - import re from bs4 import BeautifulSoup @@ -23,6 +21,7 @@ def DDBST_table(DDBST_url): soup = BeautifulSoup(page, 'html.parser') tab = [] + soup.getText for rel_item in soup.find_all(['table','h3']): if re.search('Data Set',rel_item.get_text() ): tab.append(['$$$'+rel_item.get_text()] ) @@ -36,10 +35,14 @@ def DDBST_table(DDBST_url): for elem in line.find_all(['th','td']): # string without whitespace before of after characters # added utf-8 formating to include unusual letters i.e. german letters ect.. - item = elem.get_text().strip().encode('utf-8') + item = elem.get_text().strip('\t').strip(' ') + try: - fetchline.append(item) + if (item != '\xa0'): + fetchline.append(item) + else: + fetchline.append('') except: fetchline.append('PARSING_ERROR_HERE') @@ -49,7 +52,7 @@ def DDBST_table(DDBST_url): return tab def DDBST_DB_free(prnt): - page = urllib2.urlopen(page_main) + page = requests.get(page_main).text soup = BeautifulSoup(page, 'html.parser') tab = soup.find_all('table')[0] res = ['url'] @@ -66,7 +69,7 @@ def DDBST_DB_free(prnt): qlist = [li] for elem in line.find_all(['a','td','th']): - qlist.append( elem.get_text() ) + qlist.append( str( elem.get_text() ) ) res.append(qlist) # end for @@ -79,7 +82,7 @@ def DDBST_DB_free(prnt): def All_links(url): ''' fetches all possible urls from href tags''' - page = urllib2.urlopen(url) + page = requests.get(url).text soup = BeautifulSoup(page, 'html.parser') h = [] for link in soup.find_all('a'): @@ -102,8 +105,8 @@ def DB(DDBST_url): ret_elem = [] for link in soup.find_all('p')[3:-1]: #pdb.set_trace() - header = link.find('a').get('href') - name = link.find('a').getText() + header = str( link.find('a').get('href') ) + name = str ( link.find('a').getText() ) #wspace_iter = [m.start(0) for m in re.finditer(' ', header)] #if wspace_iter: