Mål: Studenten skal navigere til riktige mapper fra CHARMM-GUI og bekrefte at alle nødvendige filer finnes før kjøring av λ-REMD/FEP.
Kompleks (protein-ligand):
charmm-gui-xxxxxxxx/namd/1-2/complex
Ligand i løsning:
charmm-gui-xxxxxxxx/namd/1-2/ligand
Bytt ut
xxxxxxxxmed ditt faktiske CHARMM-GUI prosjektnummer.
.../complex må inneholde1_mkdir.pl2_mkconf.pl3_job_run.pbs4_sort.pl5_fe.plcalc_fe.plcomplex.crdcomplex.pdbcomplex.psfcomplex.strequ_site_1.inpequ_site_2.inpequ_site_3.inpequ_site_4.inpequ_site_5.inpequ_site_6.inpFEP_remd_relative.namdfep_site.conffep_site_base.namdsort.pystep7_charmm2namd.colvar.str.../ligand må inneholde1_mkdir.pl2_mkconf.pl3_job_run.pbs4_sort.pl5_fe.plcalc_fe.plequ_solv.namdFEP_remd_relative.namdfep_solv.conffep_solv_base.namdligand.pdbligand.psfligand.strsort.py# List innholdet (én fil per linje)
ls -1 charmm-gui-*/namd/1-2/complex
ls -1 charmm-gui-*/namd/1-2/ligand
Mål: Opprette riktig mappestruktur før simuleringen, slik at råutdata og sorterte utdata lagres konsekvent for alle 16 replikaer.
1_mkdir.plKjør skriptet i aktuell katalog (complex og deretter ligand):
# gi kjørerettighet (én gang)
chmod +x 1_mkdir.pl
# kjør
perl 1_mkdir.pl
Dette skriptet oppretter to hovedkataloger:
output_site/ – inneholder rå utdata fra hver replika
output_off/ – inneholder sorterte utdata brukt i analyse
Begge katalogene får 16 undermapper (0-15), som tilsvarer antall replikaer brukt i λ-REMD-simuleringen.
📄 Kildekode
Du kan lese hele skriptet her:
🔗 Fullt skript: /Skript/NAMD/Perl/mkdir
2_mkconf.plMål: Lage konfigurasjonsfiler for hver iterasjon av λ-REMD-simuleringen, slik at simuleringen kan fortsette sømløst fra én kjøring til den neste.
Skriptet 2_mkconf.pl genererer automatisk filene
restart_1.conf → restart_25.conf
Hver fil inneholder referanse til forrige jobbs “restart”-status, slik at simuleringen fortsetter fra riktig punkt.
Sørg for at du kjører skriptet i samme katalog som fep_site.conf.
# Gi kjørerettighet (én gang)
chmod +x 2_mkconf.pl
# Kjør skriptet
perl 2_mkconf.pl
# Kontroller at 25 filer ble opprettet
ls -1 restart_*.conf # skal vise restart_1.conf til restart_x.conf
⚠️ NB! Skripten innholder linjen:
for ($j = 1; $j < X; $j++) {
hvor X styrer hvor mange restart-filer som blir laget.
Du kan endre tallet X til ønsket antall iterasjoner + 1.Eksempel:
for ($j = 1; $j < 11; $j++) → lager 10 restart-filerfor ($j = 1; $j < 6; $j++) → lager 5 restart-filer
Det er ikke nødvendig å lage flere restart-punkter enn du faktisk planlegger å kjøre.
🔗 Fullt skript: /Skript/NAMD/Perl/mkconf
complex-banenMål: CHARMM-GUI genererer vanligvis ikke en konfigurasjonsfil for dihedral-restriksjoner.
For å unngå at NAMD stopper under ekvilibrering, må disse linjene kommenteres ut i filene
equ_site_1.inp til equ_site_6.inp — men kun i katalogen:
Finn og kommenter ut følgende linjer (hvis de finnes) i hver av filene equ_site_1.inp → equ_site_6.inp:
# dihedral restraint
# exec sed -e "s/\$FC/500/g" restraints/dihe.txt > restraints/$outputname.dihe
# extraBonds yes
# extraBondsFile restraints/$outputname.dihe
Du kan se alle seks korrigerte ekvilibreringsfiler her:
💾 Disse filene lagres i wikiens skriptseksjon under:
/Skript/NAMD/equilibration/
restraints-mappeMål: CHARMM-GUI genererer ikke alltid mappen restraints når man arbeider med bilayersystemer.
For at simuleringen skal kjøre uten feil, må denne mappen opprettes manuelt i complex-katalogen.
Gå til riktig katalog og opprett mappen:
cd charmm-gui-*/namd/1-2/complex
mkdir restraints
# Sjekk at mappen finnes:
ls -ld restraints
💡
Mappen trengs kun i complex/, ikke i ligand/.
Den kan stå tom — NAMD krever bare at den eksisterer.
fep_site_base.namd for stabile kjøringerMål: Før du starter minimisering og ekvilibrering, må enkelte innstillinger i konfigurasjonsfilene justeres for å sikre stabile og nøyaktige simuleringer.
Den viktigste endringen gjøres i filen fep_site_base.namd.
rigidBonds?I CHARMM-GUI settes parameteren rigidBonds som standard til water, noe som kun begrenser hydrogenbindinger i vannmolekyler.
Når du bruker et tidssteg (timestep) på 2 femtosekunder (fs), kan dette føre til numeriske ustabiliteter hvis H-bindinger i proteinet og liganden ikke er låst.
Ved å sette:
rigidBonds all
🔗 Fullt skript: /Skript/NAMD/fep_site_base
Mål: Produsere mer komplette .dcd- og .fepout-filer som egner seg til visualisering (VMD/PyMOL) og detaljert analyse. Dette gjøres ved å justere parametere i fep_site.conf og fep_site_base.namd.
.dcd (fep_site.conf)I standardoppsett kan følgende stå i fep_site.conf:
# num_runs should be divisible by runs_per_frame * frames_per_restart
set steps_per_run 100
set num_runs 1000
set runs_per_frame 1000
Problem: Med runs_per_frame 1000 skrives det svært sjelden til .dcd, så du får få frames å visualisere.
Løsning: Senk runs_per_frame (f.eks. 100). Pass samtidig på delbarhetskravet i kommentaren.
🔗 Fullt skript → /Skript/NAMD/fep_site
I FEP_remd_relative.namd settes:
dcdFreq [expr $steps_per_run * $runs_per_frame]
🔗 Fullt skript → /Skript/NAMD/FEP_remd_relative
.fepout (fep_site_base.namd)For å få tettere sampling i .fepout, senk alchOutFreq i fep_site_base.namd:
# Lavere verdi gir tettere sampling i .fepout, for eksempel:
alchOutFreq 100
history / sort.history skrives).alchOutFreq kan føre til svært store utdatafiler.⚠️ NB! Dersom du kun er interessert i den endelige ΔG fra FEP,
laalchOutFreqvære relativt høy for å holde filstørrelsen nede.
.sh-skript (minimering, ekvilibrering, produksjon)Mål: Bruke egne .sh-skript i stedet for CHARMM-GUI sine .pbs, slik at vi får tydelig kontroll på rekkefølge, ressurser og logger for minimering → ekvilibrering → produksjon (FEP/λ-REMD).
I eksempelskriptene under er minimeringen inkludert i
equ_site_1.inp/equ_site_2.inpsom første del av ekvilibreringen, før videre trinn.
.sh i stedet for .pbs?equ_site_1…6) og over restart-iterasjoner for FEP.bash-innstillinger (errexit, nounset), contai ner-bindinger og rene logger per kjøring.Legg kjøre-skriptene i prosjektmappen (f.eks. ved siden av charmm-gui-xxxx/), eller i complex/.
Foreslåtte wikisider for full kilde:
/Skript/NAMD/Bash/namd_equilibration/Skript/NAMD/Bash/namd_fep_remd3_job_run_equilibration.sh)#!/bin/bash
#SBATCH --job-name=xxxxxx
#SBATCH --account=xxxxx
#SBATCH --time=0-12:00:00 # 12 timer er nok for minization and equilibration
#SBATCH --mem-per-cpu=350M # kan økes til 500 MB hvis nødvendig
#SBATCH --nodes=6
#SBATCH --ntasks=192
#SBATCH --ntasks-per-node=32
#SBATCH --cpus-per-task=1
#SBATCH --output=%x.%j.out
#SBATCH --error=%x.%j.e
set -o errexit
set -o nounset
export UCX_TLS=rc,tcp,self
system="site"
FILES=/cluster/work/.../charmm-gui-XXXX/namd
NAMD2=/cluster/work/.../ubuntu2204_mpich421_namd2.sif
COMPLEX=/mnt/1-2/complex
cnt=1
while [ $cnt -le 6 ]; do
srun -n $SLURM_NTASKS --mpi=pmi2 \
apptainer exec --bind $FILES:/mnt $NAMD2 \
namd2 $COMPLEX/equ_site_${cnt}.inp \
| tee equ_site_${cnt}.out > /dev/null
cnt=$((cnt+1))
done
Forklaring av viktige linjer:
#SBATCH ... — SLURM-ressurser: navn, konto, tid, noder, kjerner og loggfiler.
FILES — peker til CHARMM-GUI-mappe; bindes inn i container som /mnt.
NAMD2 — peker til Singularity/SIF-container med NAMD2.
COMPLEX — intern container (/mnt/1-2/complex).
while [ $cnt -le 6 ] — kjører equ_site_1.inp → equ_site_6.inp sekvensielt.
srun ... apptainer exec ... namd2 ... — kjører NAMD via SLURM, i container, med riktig input.
#!/bin/bash
#SBATCH --job-name=xxxxx
#SBATCH --account=xxxxxx
#SBATCH --time=4-00:00:00 # OBS! hver HPC har maks tid for slurm jobs (ca. 5-7 dager)
#SBATCH --mem-per-cpu=350M # kan økes til 500 MB hvis nødvendig
#SBATCH --nodes=6
#SBATCH --ntasks=192
#SBATCH --ntasks-per-node=32
#SBATCH --cpus-per-task=1
#SBATCH --output=%x.%j.out
#SBATCH --error=%x.%j.e
set -o errexit
set -o nounset
export UCX_TLS=rc,tcp,self
system="site"
FILES=/cluster/work/.../charmm-gui-XXXX/namd
NAMD2=/cluster/work/.../ubuntu2204_mpich421_namd2.sif
COMPLEX=/mnt/1-2/complex
# FEP/λ-REMD:
# Running 5 ns (200 ps x 25)
cnt=0
cntmax=24
# NB! du må ikke kjøre alle iterasjoner sammen,
# de må deles for maks jobstid på FOX eller SAGA er sirka 5-7 days
while [ $cnt -le $cntmax ]; do
if [ $cnt -eq 0 ]; then
srun -n $SLURM_NTASKS --mpi=pmi2 apptainer exec --bind $FILES:/mnt $NAMD2 \
namd2 +replicas 16 $COMPLEX/fep_${system}.conf \
--source $COMPLEX/FEP_remd_relative.namd \
+stdout $COMPLEX/output_${system}/%d/job${cnt}.%d.log
else
srun -n $SLURM_NTASKS --mpi=pmi2 apptainer exec --bind $FILES:/mnt $NAMD2 \
namd2 +replicas 16 $COMPLEX/restart_${cnt}.conf \
--source $COMPLEX/FEP_remd_relative.namd \
+stdout $COMPLEX/output_${system}/%d/job${cnt}.%d.log
fi
cnt=$((cnt+1))
done
- Forklaring av viktige linjer:
Kjøring
# Gi kjørerettighet
chmod +x 3_job_run_equilibration.sh 3_job_run_fep_remd.sh
# Ekvilibrering
sbatch 3_job_run_equilibration.sh
# Produksjon (FEP/λ-REMD)
sbatch 3_job_run_fep_remd.sh
Tips: Følg med på SLURM_JOBID-loggene (%x.%j.out/.e) og på per-trinn-/per-replika-loggene i output_site/.
📅 Sist oppdatert: Oktober 2025
👤 Forfatter: Majd Awad
🏫 Farmasøytisk institutt, Universitetet i Oslo