Taxinines i taxol contra el càncer

He estudiat i descarregat la proteïna amb codi PDB, buscant "protein bank" al navegador.

La meva proteïna és l'Aurora-A, també anomenada Aurka en anglès. El seu codi PDB és 1MQ4. L'Aurora-A és una proteïna quinasa serina/treonina que té un paper crucial en la regulació del cicle cel·lular iformació del fus mitòtic que separa els cromosomes durant la mitosi especialment en la mitosi, pero també és d'interès en la investigació del càncer perquè la seva sobreexpressió o activació anòmala s'ha associat amb diversos tipus d'aquesta enfermetat mortal. S'estan estudiant inhibidors de l'Aurora-A com a potencials teràpies anticanceroses.

Buscant articles a Google Scholar, he trobat aquest, que parla de l'efecte de l'Aurora kinase A als càncers de tipus gastrointestinals, en el qual he extret aquestes conclusions: AURKA (la proteïna, que te diversos nomenclatures) està sobreexpressada en diversos càncers gastrointestinals i regula no només el cicle cel·lular i la mitosi com habia dit abans, sinó que també certes vies de senyalització oncogènica clau, cosa que la converteix en un objectiu pterapèutic atractiu, encara que els inhibidors d'AURKA han avançat més lentament en els assajos clínics de càncer gastrointestinal en comparació amb altres tipus de càncer, s'estan realitzant altres assajos clínics diferents per provar aquests inhibidors en combinació amb quimioteràpies convencionals, cosa que s'espera que proporcioni informació clínica important sobre com aplicar aquesta proteïna en càncers gastrointestinals. S'està investigant també si Aurora-A pot intervenir de manera positiva a altres tipus de càncers com els gàstrics, esofàgics i pancreàtics. Bàsicament la investigació futura ha de centrar-se en comprendre millor el paper d'AURKA en la senyalització del càncer i desenvolupar teràpies personalitzades basades en els seus inhibidors.

El que volem és bloquejar la proteïna per tal que no pugui unir-se amb una molècula de càncer i no pugui distribuir-la per les cèl·lules i reprodueixi la malaltia. També volem mesurar l'energia d'unió en kcal/mol. Quant més negativa sigui l'energia en kcal/mol, més bona serà la molècula com a anticancerígen, ja que s'unirà menys.

Hem utilitzat el software SwissDock per a posar la proteïna i les taxinines i obtenir la figura 3D dels enllaços i les dades numèriques.

Aquí estan les imatges sobre quin compost és més actiu sobre la proteïna 1MQ4 (vaig fer les captures sense el nom del compost adalt, anava a fer-les de nou amb el nom però ja no tinc els correus del SwissDock, igualment estan ordenades: Taxol, Taxinina A, B, E, H, J, K, L i M. El compost més actiu que m'ha donat es el taxol, com en la majoria de casos.


Amb un colab també he fet tres gràfics de la desviació estandard, les energies d'unió i un general, respectivament:


Grafic1 Grafic2 Imatge mitjanes

Abans de posar el codi expliquem que està fet amb Google Colab, una biblioteca on es pot triar un entorn d'execució Python o R i GPU o CPU, entrant a Edit-Notebook settings. La GPU és la unitat de processament gràfic i la CPU és la unitat de processament del computador. La GPU és més útil en DeepLearning, perquè permet processament simultani de codi. La CPU pot tenir diversos nuclis, però és més lenta en DeepLearning o visió per ordinador, per exemple.

Si vull descarregar el Google Colab ho puc fer i es descarregarà en format ipnyb, que significa Interactive Python Notebook. Aquest tipus d'arxiu es pot obrir amb un entorn Jupyter, que es pot instal·lar a l'ordinador descarregant Anaconda. Hi ha dues versions de Jupyter: Jupyter Notebook i Jupyter Lab, que es poden instal·lar localment en el PC i tenen el mateix aspecte i funcionalitat que Google Colab. Aquest entorn té l'avantatge i inconvenient que utilitza totes les capacitats de l'ordinador.


# Has de pujar els diferents arxius i penjar cancel quan acabis, posar els noms en català (en aquest exemple: Taxinina A, etc)
# Després has d'escriure el codi PDB de la teva proteïna (en el meu cas 1MQ4)
# Instal·lem les biblioteques de Python que utilitzarem al codi de més abaix; pandas ens permet treballar amb arxius csv més fàcilment, matplotlib ens permet dibuixar gràfics, io ens permet pujar i baixar arxius (input i output) i numpy, que és la biblioteca numèrica principal de Python.
# Els signes d'exclamació o "bang" en anglès (!) indiquen que s'executi com si estigués en un terminal o shell (CMD). Per exemple, !pwd (print working directory) serveix per a saber en quin directori estic treballant al moment (carpeta, arxiu, disc...) o !cd que vol dir change directory, !ls que vol dir que em fagi un llistat dins del directori on estigui... !ls -l vol dir que té el paràmetre "long", és a dir que no només em digui els arxius sinó que també em digui els permisos dels arxius, que poden ser r (read, llegible), w (write, escribible), x (executable) de forma que per exemple un arxiu dirà: "arxiu.csv rwxrw-r--". Això significa que el super usuari o administrador té tots els permisos (rwd), un usuari normal només podrà llegir i escriure (rw-) i un convidat només podrà llegir l'arxiu (r--). Per canviar permisos utilitzem la instrucció "chmod" que significa "change mode" i vol dir que per exemple un arxiu que no podíem llegir, aplicant aquesta instrucció ara podrem executar-lo, llegir i escriure. La lletra r té un valor 1, la w un valor 2 i la lletra x un valor 4. Quan escric "chmod 777" es transforma en "rwxrwxrwx", és a dir, tan siguis administrador, usuari o convidat tindràs tots els permisos (les tres primeres lletres són de l'administrador, les tres segones de l'usuari i les tres últimes del convidat). Si poso "chmod 543" (5=4+1=permís administrador, 4=4=permís usuari, 3=1+2=permís convidat) sortirà "r-x--xrw-", que vol dir que l'administrador podrà llegir i executar, l'usuari només executar i el convidat podrà llegir i escriure. !ls -a significa veure tots els arxius (all), i !ls -la buscarà tots els arxius, inclosos els ocults i mostrarà els seus permisos. "!mkdir" vol dir make directory amb el nom que posem a continuació, és a dir, "!mkdir noudirectori" crea un directori amb el nom "noudirectori". "!rm deltaG.csv" esborrarà l'arxiu "deltaG.csv", ja que "rm" vol dir remove. Es poden posar dues admiracions (!!) que el que farien es executar a la cel·la i mostrar la sortida.
!pip install pandas matplodlib io numpy 

from google.colab import files
import pandas as pd
import matplotlib.pyplot as plt
import io
import numpy as np

# Initialize an empty list to store DataFrame objects. És un dataframe de pandas.
dfs = []


# Upload CSV files one by one
print("Upload CSV files one by one. Press Cancel to stop uploading.")

while True:
    uploaded_files = files.upload() # El files.upload pertany a la biblioteca google.colab (import files). Estem accedint al mètode upload que pertany a files de la biblioteca de colab.
    if len(uploaded_files) == 0:
        break
    for filename, contents in uploaded_files.items():
        # Read CSV file as DataFrame and append it to the list
        df = pd.read_csv(io.StringIO(contents.decode('utf-8')), header=None)
        # Add a column to identify the compound
        df['Compound'] = f'Compound {chr(ord("A") + len(dfs))}'
        dfs.append(df)

# Concatenate DataFrames vertically
combined_df = pd.concat(dfs, ignore_index=True)

# Transpose the DataFrame so that rows become columns
transposed_df = combined_df.set_index('Compound').T

# Save the transposed DataFrame to a new CSV file
transposed_csv_path = 'transposed_data.csv'
transposed_df.to_csv(transposed_csv_path)

# Prompt the user to enter real chemical names for each compound
real_names_mapping = {}
for i, df_name in enumerate(transposed_df.columns):
    real_name = input(f"Enter the real chemical name for {df_name}: ")
    real_names_mapping[df_name] = real_name

# Prompt the user to enter the last word of the graph title
graph_title_suffix = input("Enter the last word of the graph title: ").strip()

# Create a customized boxplot for compounds
plt.figure(figsize=(8, 6))

# Set colors
box_color = 'blue'
median_color = 'orange'
whisker_color = 'green'
cap_color = 'purple'

# Create a boxplot
boxprops = dict(color=box_color)
medianprops = dict(color=median_color)
whiskerprops = dict(color=whisker_color)
capprops = dict(color=cap_color)
boxplot = transposed_df.boxplot(vert=False, return_type='dict', boxprops=boxprops, medianprops=medianprops, whiskerprops=whiskerprops, capprops=capprops)

# Overlay individual data points
for df_name in transposed_df.columns:
    y = np.random.normal(list(transposed_df.columns).index(df_name) + 1, 0.1, size=len(transposed_df[df_name]))
    plt.scatter(transposed_df[df_name], y, alpha=0.5, s=10)

# Set ticks and labels
plt.yticks(np.arange(1, len(transposed_df.columns) + 1), [real_names_mapping[col] for col in transposed_df.columns])

plt.xlabel("Energia d'unió (kcal/mol)")
plt.ylabel("Lligands")
plt.title(f"Acoblament molecular amb proteïna PDB {graph_title_suffix}")
plt.grid(True)
plt.axvline(x=0, color='red', linestyle='--')  # Add line at 0 for reference
plt.tight_layout()

# Save the plot as an image file
plot_image_path = 'boxplot.png'
plt.savefig(plot_image_path)

# Download the transposed CSV file and the plot image
files.download(transposed_csv_path)
files.download(plot_image_path)

# Print paths to the saved files
print("Transposed data saved to:", transposed_csv_path)
print("Plot image saved to:", plot_image_path)