Skip to content

assadiab/AquaSteep

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


Projet de Minimisation d'Énergie Moléculaire

Ce projet a pour objectif de minimiser l'énergie potentielle d'une molécule d'eau en utilisant une approche de descente de gradient, avec deux méthodes possibles pour le calcul du gradient. L'approche analytique repose sur des expressions mathématiques exactes du gradient, permettant une optimisation plus rapide et précise. L'approche numérique, quant à elle, utilise des différences finies pour approximer le gradient et s'avère utile lorsque les expressions analytiques ne sont pas disponibles.

L'optimisation est réalisée à l'aide de l'algorithme de Steepest Descent, qui met à jour les coordonnées atomiques en suivant la direction opposée au gradient de l'énergie, avec un pas d'apprentissage ajustable. En ajustant les longueurs de liaison et les angles de la molécule d'eau, cette méthode permet d'atteindre une configuration stable, correspondant à un minimum d'énergie potentielle.

Fonctionnalités

Ce projet inclut les fonctions suivantes :

  • extract_coord_pdb(pdbfile: str) : Extrait les coordonnées atomiques d'un fichier PDB.
  • calc_len_angle(coordinates: np.ndarray) : Calcule les longueurs de liaison et les angles entre les atomes de la molécule.
  • calc_pot_energy(len1: float, len2: float, angle: float) : Calcule l'énergie potentielle de la molécule basée sur les longueurs de liaison et les angles.
  • minimize_energy_analytical(pdbfile: str) : Effectue la minimisation d'énergie en utilisant un algorithme de descente de gradient.
  • calculate_gradient_analytical(coordinates: np.ndarray) : Calcule le gradient analytique de l'énergie par rapport aux coordonnées atomiques.
  • save_history(history: dict, filename: str = "history.txt") : Sauvegarde l'historique des itérations et des coordonnées dans un fichier.
  • write_pdb(history: dict) : Écrit les coordonnées atomiques minimisées dans un fichier PDB.
  • generate_vmd_script() : Génère un script VMD pour visualiser la molécule.
  • plot_angle(ax, origin, angle, size=50, unit="points", **kwargs) : Ajoute une annotation d'angle à un graphique 3D.
  • plot_molecule_3d(pdbfile: str, minimized_pdb: str) : Trace la molécule en 3D avant et après minimisation avec des annotations de longueurs de liaison et d'angles.
  • plot_energies(history: dict) : Trace l'évolution des énergies au cours de la minimisation.
  • generate_vmd_movie(directory : str ) : Génère un film VMD à partir des coordonnées atomiques.

Prérequis

Pour exécuter ce projet, vous devez avoir Python installé sur votre machine ainsi que les packages suivants :

  • Python (version 3.x recommandée) : Langage de programmation nécessaire pour exécuter le script.
  • numpy : Pour les opérations mathématiques et la manipulation des tableaux.
  • matplotlib : Pour tracer les graphiques.
  • tqdm : Pour la barre de progression
  • Pillow (PIL)
  • ffmpeg (encoder x264) : Pour la gestion des images et vidéos

Si Python n'est pas installé, vous pouvez le télécharger depuis le site officiel : Python.org.

Vous pouvez installer les packages requis en utilisant pip :

pip install numpy matplotlib tqdm Pillow
conda install ffmpeg
brew install ffmpeg

Navigation Unix et Utilisation de VMD

Navigation Unix

Pour naviguer dans le système de fichiers Unix et exécuter les scripts, vous pouvez utiliser les commandes suivantes :

  • Lister les fichiers et dossiers : ls
  • Changer de répertoire : cd <nom_du_dossier>
  • Afficher le contenu d'un fichier : cat <nom_du_fichier> ou less <nom_du_fichier>
  • Exécuter un script Python : python <nom_du_script>.py

Utilisation de VMD

VMD (Visual Molecular Dynamics) est un logiciel de visualisation moléculaire. Voici comment l'utiliser sur différents systèmes d'exploitation :

MacOS/Linux

  1. Téléchargement et Installation :

    • Téléchargez VMD depuis le site officiel : VMD Download.
    • Suivez les instructions d'installation fournies pour votre système d'exploitation.
  2. Lancer VMD :

    • Ouvrez un terminal et naviguez jusqu'au répertoire où VMD est installé.
    • Lancez VMD en utilisant la commande : vmd
  3. Charger un fichier PDB :

    • Dans VMD, utilisez la commande mol new <nom_du_fichier>.pdb pour charger le fichier PDB généré.

Windows

  1. Téléchargement et Installation :

    • Téléchargez VMD depuis le site officiel : VMD Download.
    • Suivez les instructions d'installation fournies pour Windows.
  2. Lancer VMD :

    • Double-cliquez sur l'icône VMD ou recherchez "VMD" dans le menu Démarrer et lancez l'application.
  3. Charger un fichier PDB :

    • Dans VMD, utilisez la commande mol new <nom_du_fichier>.pdb pour charger le fichier PDB généré.

Exemples d'utilisation

Exemple 1 : One water molecule energy minimisation

La minimisation peut être effectuée en utilisant l'approche numérique ou l'approche analytique, en fonction de la méthode souhaitée :

python mini_numerical.py data/water_bis.pdb threshold

OU

python mini_analytical.py data/water_bis.pdb threshold

L'utilisateur peut spécifier une valeur pour le seuil du GRMS (threshold). Si aucune valeur n'est fournie, la valeur par défaut de 0.5 kcal/mol/Å sera utilisée.

Le fichier PDB water_bis.pdb contient un exemple de coordonnées pour la molécule d'eau. Le fichier doit être au format suivant :

ATOM      1  O   TIP3 A   1     -0.765  -0.097   0.010  1.00     0           O  
ATOM      2  H   TIP3 A   1     -0.222   0.691   0.024  1.00     0           H  
ATOM      3  H   TIP3 A   1     -2.138  -0.819  -0.035  1.00     0           H  
CONECT    1    2    3

A l'issue vous obtiendez :

  1. Des informations sur les coordonnées initiales et finales, les longueurs de liaison, les angles, et l'énergie potentielle avant et après minimisation.
  2. Un fichier visualize.vmd dans le dossier results, que vous pouvez utiliser pour visualiser la molécule dans VMD.
  3. Une visualisation 3D de la molécule avant et après minimisation enregistré sous results/molecule_3d_plot.png.
  4. Le graphique de l'évolution des énergies au cours de la minimisation enregistré sous results/energy_plot.png.
  5. Le film et le gif de la minimisation enregistré sous results/minimisation.mp4

Vous pouvez modifier différents paramètres de minimisation dans le programme principal du script. Voici à quoi ils correspondent :

  • h:Petite valeur utilisée pour le calcul du gradient numérique.
  • step_size: Taille du pas pour la mise à jour des coordonnées pendant la minimisation.
  • threshold: Seuil de convergence pour la racine carrée moyenne du gradient (GRMS). L'optimisation s'arrête lorsque la GRMS est inférieure à ce seuil.
  • max_iterations:Nombre maximal d'itérations autorisé pour éviter les boucles infinies.
  • k_bond: Constante de force pour le calcul de l'énergie de liaison.
  • i_eq:Distance d'équilibre pour les longueurs de liaison.
  • k_angle: Constante de force pour le calcul de l'énergie angulaire.
  • theta_eq: Angle d'équilibre en degrés.

Résultats attendus (méthode analytique)

L'ensemble des résultats seront présents dans un dossier result suivi du nom du fichier pdb.

Seuil GRMS par défaut : 0.5 kcal/mol/A

--- Avant Minimisation ---

Coordonnées extraites :
[[-0.765 -0.097  0.01 ]
 [-0.222  0.691  0.024]
 [-2.138 -0.819 -0.035]]

 Longueur O-H1 : 0.9571 Ã…
 Longueur O-H2 : 1.5519 Ã…
 Angle H1-O-H2 : 152.3008 degrés
 Énergie potentielle : 1.9740e+02 kcal/mol

 Gradient numérique : 
[[ 403.66750508  402.73478699   -4.11878468]
 [  91.10193458  -86.72423754    5.97888125]
 [-494.78405398 -316.02983441   -1.86009639]]

--- Après Minimisation ---

Nombre d'itérations : 802
Énergie potentielle : 3.19e-03 kcal/mol
GRMS : 4.95074e-01 kcal/(mol·Å)
Angle après minimisation : 104.9240 degrés
Longueur de liaison l1  : 0.9578 Ã…
Longueur de liaison l2  : 0.9580 Ã…
Plot des énergies enregistré sous : results_water_bis/energy_plot.png

--- Sauvegarde des résultats ---

Historique sauvegardé dans : results_water_bis/history.txt
Fichier PDB généré : minimized.pdb
Script VMD généré : results_water_bis/visualize.vmd
Graphique enregistré sous : results_water_bis/3D_plot.png
Fichier Multi-PDB généré : results_water_bis/multi_minimized.pdb

--- Création du Movie --

Script VMD généré : results_water_bis/movie.vmd
Exécution de VMD pour capturer les frames...
Conversion des images TGA en PNG...
Conversion TGA -> PNG: 100%|██████████████████████████████████████████████████| 803/803 [00:08<00:00, 89.32image/s]
Conversion TGA -> PNG terminée.
Génération de la vidéo MP4...
Encodage vidéo: 100%|█████████████████████████████████████████████████████████| 100/100 [00:00<00:00, 213.47%/s]
Vidéo générée : results_water_bis/minimization.mp4
Génération du GIF...
Encodage GIF: 100%|███████████████████████████████████████████████████████████| 100/100 [00:02<00:00, 44.77%/s]
GIF généré : results_water_bis/minimization.gif
Suppression des frames : results_water_bis/frames

Minimisation et génération des fichiers terminées avec succès !

Courbe de l'évolution des énergies au cours de la minimisation

Modélisation 3D de la molécule d'eau avant et après minimisation

GIF du processus de minimisation

---

About

💧📉 Minimization of water molecule energy using steepest descent algorithm.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages