From 30251b3413298439b9e710b93167767463fc45e1 Mon Sep 17 00:00:00 2001 From: c2v2zw4k Date: Mon, 22 May 2023 03:07:53 +0000 Subject: [PATCH] Upload files to 'assets/addons/python/molecules' --- .../addons/python/molecules/energyMolcalc.py | 96 +++++++++++++++++++ .../addons/python/molecules/energyMolcalc1.py | 92 ++++++++++++++++++ assets/addons/python/molecules/mol-gen.py | 36 +++++++ .../addons/python/molecules/molEnergycalc.py | 96 +++++++++++++++++++ assets/addons/python/molecules/molHEgen.py | 15 +++ 5 files changed, 335 insertions(+) create mode 100644 assets/addons/python/molecules/energyMolcalc.py create mode 100644 assets/addons/python/molecules/energyMolcalc1.py create mode 100644 assets/addons/python/molecules/mol-gen.py create mode 100644 assets/addons/python/molecules/molEnergycalc.py create mode 100644 assets/addons/python/molecules/molHEgen.py diff --git a/assets/addons/python/molecules/energyMolcalc.py b/assets/addons/python/molecules/energyMolcalc.py new file mode 100644 index 0000000..f237c5c --- /dev/null +++ b/assets/addons/python/molecules/energyMolcalc.py @@ -0,0 +1,96 @@ +tabela_periodica = { + 'H': {'energia': 4.5}, + 'He': {'energia': 24.6}, + 'Li': {'energia': 5.4}, + 'Be': {'energia': 9.3}, + 'B': {'energia': 8.3}, + 'C': {'energia': 7.5}, + 'N': {'energia': 10.0}, + 'O': {'energia': 12.0}, + 'F': {'energia': 15.0}, + 'Ne': {'energia': 21.6}, + 'Na': {'energia': 5.1}, + 'Mg': {'energia': 7.6}, + 'Al': {'energia': 5.9}, + 'Si': {'energia': 8.2}, + 'P': {'energia': 10.5}, + 'S': {'energia': 10.4}, + 'Cl': {'energia': 12.0}, + 'Ar': {'energia': 15.8}, + 'K': {'energia': 4.3}, + 'Ca': {'energia': 6.1}, + 'Sc': {'energia': 6.6}, + 'Ti': {'energia': 6.8}, + 'V':{'energia' :6.7 }, + 'Cr':{'energia' :6.8 }, + 'Mn':{'energia' :7.4 }, + 'Fe':{'energia' :7.9 }, + 'Co':{'energia' :7.7 }, + 'Ni':{'energia' :7.6 }, + 'Cu':{'energia' :7.7 }, + 'Zn':{'energia' :9.4 }, + 'Ga':{'energia' :5.9 }, + 'Ge':{'energia' :7.9 }, + 'As':{'energia' :9.8 }, + 'Se':{'energia' :9.8 }, + 'Br':{'energia' :11.8 }, + 'Kr':{'energia' :14.0 }, + 'Rb':{'energia' :4.2 }, + 'Sr':{'energia' :5.0 }, + 'Y':{'energia' :6.2 }, + 'Zr':{'energia' :6.6 }, + 'Nb':{'energia' :6.8 }, + 'Mo':{'energia' :7.1 }, + 'Tc':{'energia' :7.3 }, + 'Ru':{'energia' :7.2 }, + 'Rh':{'energia' :7.5 }, + 'Pd':{'energia' :8.3 }, + 'Ag':{'energia' :7.6 }, + 'Cd':{'energia' :8.9 }, + 'In':{'energia' :5.8 }, + 'Sn':{'energia' :7.3 }, + 'Sb':{'energia' :8.6 }, + 'Te':{'energia' :9.0 }, + 'I':{'energia' :10.5 }, + "Xe": {"energy":12} +} + +def calcular_energia_molecula(molecula): + energia_total = 0 + for elemento, quantidade in molecula.items(): + energia_atomo = tabela_periodica[elemento]['energia'] + energia_total += energia_atomo * quantidade + return energia_total + +def converter_smiles_para_molecula(smiles): + molecula = {} + i = 0 + while i < len(smiles): + elemento = '' + quantidade = 1 + if smiles[i].isupper(): + elemento = smiles[i] + i += 1 + if i < len(smiles) and smiles[i].islower(): + elemento += smiles[i] + i += 1 + if i < len(smiles) and smiles[i].isdigit(): + quantidade = int(smiles[i]) + i += 1 + if elemento in molecula: + molecula[elemento] += quantidade + else: + molecula[elemento] = quantidade + return molecula + +# Obter o SMILES da molécula do usuário +smiles = input("Insira o SMILES da molécula: ") + +# Converter o SMILES para uma molécula +molecula = converter_smiles_para_molecula(smiles) + +# Calcular a energia da molécula +energia_molecula = calcular_energia_molecula(molecula) + +# Exibir o resultado +print(f"A energia total da molécula é: {energia_molecula} eV") diff --git a/assets/addons/python/molecules/energyMolcalc1.py b/assets/addons/python/molecules/energyMolcalc1.py new file mode 100644 index 0000000..45adc9f --- /dev/null +++ b/assets/addons/python/molecules/energyMolcalc1.py @@ -0,0 +1,92 @@ +tabela_periodica = { + 'H': {'energia': 4.5}, + 'He': {'energia': 24.6}, + 'Li': {'energia': 5.4}, + 'Be': {'energia': 9.3}, + 'B': {'energia': 8.3}, + 'C': {'energia': 7.5}, + 'N': {'energia': 10.0}, + 'O': {'energia': 12.0}, + 'F': {'energia': 15.0}, + 'Ne': {'energia': 21.6}, + 'Na': {'energia': 5.1}, + 'Mg': {'energia': 7.6}, + 'Al': {'energia': 5.9}, + 'Si': {'energia': 8.2}, + 'P': {'energia': 10.5}, + 'S': {'energia': 10.4}, + 'Cl': {'energia': 12.0}, + 'Ar': {'energia': 15.8}, + 'K': {'energia': 4.3}, + 'Ca': {'energia': 6.1}, + 'Sc': {'energia': 6.6}, + 'Ti': {'energia': 6.8}, + 'V':{'energia' :6.7 }, + 'Cr':{'energia' :6.8 }, + 'Mn':{'energia' :7.4 }, + 'Fe':{'energia' :7.9 }, + 'Co':{'energia' :7.7 }, + 'Ni':{'energia' :7.6 }, + 'Cu':{'energia' :7.7 }, + 'Zn':{'energia' :9.4 }, + 'Ga':{'energia' :5.9 }, + 'Ge':{'energia' :7.9 }, + 'As':{'energia' :9.8 }, + 'Se':{'energia' :9.8 }, + 'Br':{'energia' :11.8 }, + 'Kr':{'energia' :14.0 }, + 'Rb':{'energia' :4.2 }, + 'Sr':{'energia' :5.0 }, + 'Y':{'energia' :6.2 }, + 'Zr':{'energia' :6.6 }, + 'Nb':{'energia' :6.8 }, + 'Mo':{'energia' :7.1 }, + 'Tc':{'energia' :7.3 }, + 'Ru':{'energia' :7.2 }, + 'Rh':{'energia' :7.5 }, + 'Pd':{'energia' :8.3 }, + 'Ag':{'energia' :7.6 }, + 'Cd':{'energia' :8.9 }, + 'In':{'energia' :5.8 }, + 'Sn':{'energia' :7.3 }, + 'Sb':{'energia' :8.6 }, + 'Te':{'energia' :9.0 }, + 'I':{'energia' :10.5 }, + "Xe": {"energy":12} +} + + +def calcular_energia_molecula(molecula): + energia_total = 0 + for elemento, quantidade in molecula.items(): + energia_atomo = tabela_periodica[elemento]['energia'] + energia_total += energia_atomo * quantidade + return energia_total + +def converter_smiles_para_molecula(smiles): + molecula = {} + i = 0 + while i < len(smiles): + elemento = smiles[i] + quantidade = 1 + i += 1 + if i < len(smiles) and smiles[i].isdigit(): + quantidade = int(smiles[i]) + i += 1 + if elemento in molecula: + molecula[elemento] += quantidade + else: + molecula[elemento] = quantidade + return molecula + +# Obter o SMILES da molécula do usuário +smiles = input("Insira o SMILES da molécula: ") + +# Converter o SMILES para uma molécula +molecula = converter_smiles_para_molecula(smiles) + +# Calcular a energia da molécula +energia_molecula = calcular_energia_molecula(molecula) + +# Exibir o resultado +print(f"A energia total da molécula é: {energia_molecula} eV") diff --git a/assets/addons/python/molecules/mol-gen.py b/assets/addons/python/molecules/mol-gen.py new file mode 100644 index 0000000..5a6abbd --- /dev/null +++ b/assets/addons/python/molecules/mol-gen.py @@ -0,0 +1,36 @@ +import random + +# Generate a random molecule name +molecule_name = "CHEMDOOD" + str(random.randint(0, 99999999999)).zfill(11) + +# Generate random atom positions and types +atoms = [] +for _ in range(14): + x = round(random.uniform(-2, 2), 4) + y = round(random.uniform(-2, 2), 4) + z = round(random.uniform(-2, 2), 4) + atom_type = random.choice(["O", "C", "N"]) + atoms.append((x, y, z, atom_type)) + +# Generate random bond connections +bonds = [] +for i in range(1, 15): + num_bonds = random.randint(0, 3) + connected_atoms = random.sample(range(1, 15), num_bonds) + for atom in connected_atoms: + bond_type = random.choice([1, 2]) + if (atom, i, bond_type) not in bonds and (i, atom, bond_type) not in bonds: + bonds.append((i, atom, bond_type)) + +# Generate the final molecule representation +molecule = f"Molecule Name\n {molecule_name} 0 0.00000 0.00000 0\n[Insert Comment Here]\n 14 15 0 0 0 0 0 0 0 0 1 V2000\n" +for i, atom in enumerate(atoms, start=1): + x, y, z, atom_type = atom + molecule += f" {x:8.4f} {y:8.4f} {z:8.4f} {atom_type} 0 0 0 1 0 0 0 0 0 0 0 0\n" +for bond in bonds: + atom1, atom2, bond_type = bond + molecule += f" {atom1:3d} {atom2:3d} {bond_type} 0 0 0 0\n" +molecule += "M END\n> \n07-08-2009\n" + +# Print the generated molecule +print(molecule) diff --git a/assets/addons/python/molecules/molEnergycalc.py b/assets/addons/python/molecules/molEnergycalc.py new file mode 100644 index 0000000..f237c5c --- /dev/null +++ b/assets/addons/python/molecules/molEnergycalc.py @@ -0,0 +1,96 @@ +tabela_periodica = { + 'H': {'energia': 4.5}, + 'He': {'energia': 24.6}, + 'Li': {'energia': 5.4}, + 'Be': {'energia': 9.3}, + 'B': {'energia': 8.3}, + 'C': {'energia': 7.5}, + 'N': {'energia': 10.0}, + 'O': {'energia': 12.0}, + 'F': {'energia': 15.0}, + 'Ne': {'energia': 21.6}, + 'Na': {'energia': 5.1}, + 'Mg': {'energia': 7.6}, + 'Al': {'energia': 5.9}, + 'Si': {'energia': 8.2}, + 'P': {'energia': 10.5}, + 'S': {'energia': 10.4}, + 'Cl': {'energia': 12.0}, + 'Ar': {'energia': 15.8}, + 'K': {'energia': 4.3}, + 'Ca': {'energia': 6.1}, + 'Sc': {'energia': 6.6}, + 'Ti': {'energia': 6.8}, + 'V':{'energia' :6.7 }, + 'Cr':{'energia' :6.8 }, + 'Mn':{'energia' :7.4 }, + 'Fe':{'energia' :7.9 }, + 'Co':{'energia' :7.7 }, + 'Ni':{'energia' :7.6 }, + 'Cu':{'energia' :7.7 }, + 'Zn':{'energia' :9.4 }, + 'Ga':{'energia' :5.9 }, + 'Ge':{'energia' :7.9 }, + 'As':{'energia' :9.8 }, + 'Se':{'energia' :9.8 }, + 'Br':{'energia' :11.8 }, + 'Kr':{'energia' :14.0 }, + 'Rb':{'energia' :4.2 }, + 'Sr':{'energia' :5.0 }, + 'Y':{'energia' :6.2 }, + 'Zr':{'energia' :6.6 }, + 'Nb':{'energia' :6.8 }, + 'Mo':{'energia' :7.1 }, + 'Tc':{'energia' :7.3 }, + 'Ru':{'energia' :7.2 }, + 'Rh':{'energia' :7.5 }, + 'Pd':{'energia' :8.3 }, + 'Ag':{'energia' :7.6 }, + 'Cd':{'energia' :8.9 }, + 'In':{'energia' :5.8 }, + 'Sn':{'energia' :7.3 }, + 'Sb':{'energia' :8.6 }, + 'Te':{'energia' :9.0 }, + 'I':{'energia' :10.5 }, + "Xe": {"energy":12} +} + +def calcular_energia_molecula(molecula): + energia_total = 0 + for elemento, quantidade in molecula.items(): + energia_atomo = tabela_periodica[elemento]['energia'] + energia_total += energia_atomo * quantidade + return energia_total + +def converter_smiles_para_molecula(smiles): + molecula = {} + i = 0 + while i < len(smiles): + elemento = '' + quantidade = 1 + if smiles[i].isupper(): + elemento = smiles[i] + i += 1 + if i < len(smiles) and smiles[i].islower(): + elemento += smiles[i] + i += 1 + if i < len(smiles) and smiles[i].isdigit(): + quantidade = int(smiles[i]) + i += 1 + if elemento in molecula: + molecula[elemento] += quantidade + else: + molecula[elemento] = quantidade + return molecula + +# Obter o SMILES da molécula do usuário +smiles = input("Insira o SMILES da molécula: ") + +# Converter o SMILES para uma molécula +molecula = converter_smiles_para_molecula(smiles) + +# Calcular a energia da molécula +energia_molecula = calcular_energia_molecula(molecula) + +# Exibir o resultado +print(f"A energia total da molécula é: {energia_molecula} eV") diff --git a/assets/addons/python/molecules/molHEgen.py b/assets/addons/python/molecules/molHEgen.py new file mode 100644 index 0000000..db123a6 --- /dev/null +++ b/assets/addons/python/molecules/molHEgen.py @@ -0,0 +1,15 @@ +import random + +def gerar_smiles_molecula(): + simbolos_atomos = ['H', 'C', 'N', 'O', 'F', 'P', 'S', 'Cl'] + comprimento_molecula = random.randint(5, 15) # Determina o comprimento do SMILES da molécula + + smiles = '' + for _ in range(comprimento_molecula): + simbolo = random.choices(simbolos_atomos, weights=[0.2, 0.3, 0.1, 0.1, 0.05, 0.05, 0.05, 0.1])[0] + smiles += simbolo + + return smiles + +smiles_molecula = gerar_smiles_molecula() +print("SMILES da molécula de grande energia gerada: ", smiles_molecula)