cpptraj icon indicating copy to clipboard operation
cpptraj copied to clipboard

Track lipid insertion into membrane protein system

Open H-EKE opened this issue 4 months ago • 12 comments

Hi @drroe ,

I’ve simulated an ion channel protein and observed that some lipids enter the protein and remain inside for a period of time. I’d like to track these lipid insertion events and perform some statistics on them.

So far, I’ve tried the following CPPTRAJ script:

parm structure.pdb
trajin prod1/output.xtc 1 2500 10
strip :SOD,CLA,TIP3,TIP
autoimage
rms fit :;59-91,96-130,137-172,181-207,229-274,292-329,335-367&^5 mass
bounds :;59-91,96-130,137-172,181-207,229-274,292-329,335-367&^5 dx 0.5 name MyGrid out boundaries.dat 
average average.pdb pdb :;59-91,96-130,137-172,181-207,229-274,292-329,335-367&^5 
createcrd MyCoords
run
crdaction MyCoords grid ligand-grid.xplor data MyGrid :POP

However, the output includes a lot of noise from membrane lipids, making it difficult to isolate those that actually enter the channel.

Is there a better approach to quantify lipid insertion into the protein? I considered defining a center of mass and calculating distances to track lipids entering a defined region, but I’m unsure if that’s the most straightforward method.

Any suggestions would be appreciated!

H-EKE avatar Jul 25 '25 13:07 H-EKE

Hi, sorry for the delay. It's an interesting problem.

What exactly are the residue ranges? Are they protein residues or lipid residues (or a mix of both)?

It might be easier for me to come up with something if you could send me a topology and a frame (or a few) so I could visualize the system. If you don't want to attach it here feel free to email it to me.

drroe avatar Jul 29 '25 20:07 drroe

Hi @drroe

Thanks for your reply! Those residues correspond to the transmembrane domain of the protein. Of course, I can send you a Psf file and a few frames by mail. What should I put as the subject of the email so that you know it’s me? :)

H-EKE avatar Jul 29 '25 20:07 H-EKE

What should I put as the subject of the email so that you know it’s me?

Just use the same subject as the title of this issue - I'll let you know when I get it. Thanks!

drroe avatar Jul 29 '25 23:07 drroe

Thanks for the files.

So I have a partial solution so far, working on more. Here is an annotated script that will generate some grid densities for the protein and lipids based on aligning the system on the protein.

# Load topology/trajectory
parm 15461_dyn_754.psf
trajin 15462_trj_754.xtc
# Remove water/ions/box info
strip :SOD,CLA,TIP3,TIP parmout strip.parm7 nobox
# Center and align on the protein
center ^5 origin
align ^5&!@H= mass first
# Create an average structure of the protein
average Avg.mol2 ^5
# Create grids for the protein/POPC
bounds ^5 name Protein dx 0.5 offset 2
bounds :POPC name Popc dx 0.5 offset 2 
# Create stripped and aligned output trajectory
trajout strip.aligned.dcd
# Save the stripped and aligned coords
createcrd MyCrd
run
# Create grids for the protein and POPC from aligned coords
crdaction MyCrd grid protein.dx data Protein ^5
crdaction MyCrd grid popc.dx data Popc :POPC

Try that and let me know how that works. I'll keep thinking of ways to quantify insertion in the meantime.

drroe avatar Jul 30 '25 17:07 drroe

So one thing I thought of that you can do is to grid the POPC and Protein on grids with identical dimensions. Then you can multiply the two grids, and you'll only get densities where voxels in both grids have some density.

# Load topology/trajectory
parm 15461_dyn_754.psf
trajin 15462_trj_754.xtc
# Remove water/ions/box info
strip :SOD,CLA,TIP3,TIP parmout strip.parm7 nobox
# Center and align on the protein
center ^5 origin
align ^5&!@H= mass first
# Create an average structure of the protein
average Avg.mol2 ^5
# Create grids for the protein/POPC
#bounds ^5 name Protein dx 0.5 offset 2
bounds :POPC name Protein dx 0.5 offset 2
bounds :POPC name Popc dx 0.5 offset 2 
# Create stripped and aligned output trajectory
trajout strip.aligned.dcd
# Save the stripped and aligned coords
createcrd MyCrd
run
# Create grids for the protein and POPC from aligned coords
crdaction MyCrd grid protein.dx data Protein ^5
crdaction MyCrd grid popc.dx data Popc :POPC
Mult = Protein * Popc
writedata Mult.dx Mult

drroe avatar Jul 30 '25 18:07 drroe

Dear @drroe

Thanks for your fast reply!

Just a small question

bounds ^5 name Protein dx 0.5 offset 2
bounds :POPC name Protein dx 0.5 offset 2
bounds :POPC name Popc dx 0.5 offset 2 

This should not be

bounds ^5 name Protein dx 0.5 offset 2
bounds :POPC name Protein dx 0.5 offset 2

If yes, I tried to run it but I go the following warning

TIME: Total action execution time: 0.4008 seconds.
  [crdaction MyCrd grid popc.dx data Popc :POPC]
        Using set 'MyCrd'
----- MyCrd (1-562, 1) -----
        OpenDx: Grid will be created using bin corners.
    GRID:
        No offset will be applied to points.
        Grid will not move.
        Calculating positive density.
                -=Grid Dims=-        X        Y        Z
                        Bins:      258      267      176
                      Origin: -63.3293 -65.2381 -38.0119
                     Spacing:      0.5      0.5      0.5
                      Center:  1.17071  1.51188  5.98811
                Box: Orthorhombic ABC={129 133.5 88} abg={90 90 90}
        Grid will be printed to file popc.dx
        Grid data set: 'Popc'
        Mask expression: [:POPC]
        Pseudo-PDB will be printed to STDOUT
        Mask [:POPC] corresponds to 29748 atoms.
 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Complete.
    GRID: No normalization.
        Grid max is 29748
        Writing PDB of grid points > 80.00% of grid max.
ATOM      1  XX GRID     1      -0.079   0.012   0.238  1.00  0.00              
HETATM    2  XX  XXX     2     -63.329 -65.238 -38.012  0.00  0.00              
HETATM    3  XX  XXX     2      65.671 -65.238 -38.012  0.00  0.00              
HETATM    4  XX  XXX     2     -63.329  68.262 -38.012  0.00  0.00              
HETATM    5  XX  XXX     2      65.671  68.262 -38.012  0.00  0.00              
HETATM    6  XX  XXX     2     -63.329 -65.238  49.988  0.00  0.00              
HETATM    7  XX  XXX     2      65.671 -65.238  49.988  0.00  0.00              
HETATM    8  XX  XXX     2     -63.329  68.262  49.988  0.00  0.00              
HETATM    9  XX  XXX     2      65.671  68.262  49.988  0.00  0.00              
TIME: Total action execution time: 1.5863 seconds.
  [Mult = Protein * Popc]
Error: Grid operation 'Multiply' requires both grids have same dimensions.
'Mult = Protein * Popc': Invalid command or expression.
        1 errors encountered reading input.
TIME: Total execution time: 6.0839 seconds.
Error: Error(s) occurred during execution.

Could you explain me please why POPC is mentioned twice? Because was not clear to me :|

H-EKE avatar Jul 31 '25 10:07 H-EKE

For the quanitification I had an idea based on this paper (https://pubs.acs.org/doi/10.1021/acs.jcim.9b01209#_i25)

They could quantify probes binding in the following way

To detect co-solvent binding, we calculated a free energy grid (FEG) that was later used to cluster energy minima and define binding hotspots. Specifically, first, we computed the benzene occupancy by calculating a 3D histogram with 1 Å cubic bins of the location of benzene geometrical centers along our MD simulations. We computed a count matrix of the benzene center of mass and a 1 Å padding around the center. Then, we transformed these occupancies into probabilities by dividing them by the number of MD trajectory frames. Finally, using the Boltzmann equation (eq 1), we transformed the probabilities into free energies

AG=-KbT*ln(N/N0)

where T is the simulation temperature (300 K), kB is the Boltzmann constant in kcal/mol·K, N is the co-solvent occupancy probability, and N0 is the standard occupancy in equilibrium.

Do you think that something similar here could work, since the grid are already there?

H-EKE avatar Jul 31 '25 12:07 H-EKE

Both scripts I posted should run with no issues. Based on the error message you received it looks like you're running an older version of cpptraj. Try using the latest version of cpptraj from GitHub.

drroe avatar Jul 31 '25 12:07 drroe

For the quanitification I had an idea based on this paper (https://pubs.acs.org/doi/10.1021/acs.jcim.9b01209#_i25)

They could quantify probes binding in the following way

To detect co-solvent binding, we calculated a free energy grid (FEG) that was later used to cluster energy minima and define binding hotspots. Specifically, first, we computed the benzene occupancy by calculating a 3D histogram with 1 Å cubic bins of the location of benzene geometrical centers along our MD simulations. We computed a count matrix of the benzene center of mass and a 1 Å padding around the center. Then, we transformed these occupancies into probabilities by dividing them by the number of MD trajectory frames. Finally, using the Boltzmann equation (eq 1), we transformed the probabilities into free energies

AG=-KbT*ln(N/N0)

where T is the simulation temperature (300 K), kB is the Boltzmann constant in kcal/mol·K, N is the co-solvent occupancy probability, and N0 is the standard occupancy in equilibrium.

Do you think that something similar here could work, since the grid are already there?

In theory, that approach could be sound - in fact, it is essentially the same idea behind GIST. However, you would absolutely have to show that the sampling around the protein is converged. It works for things like water because there are so many of them and they move a lot. I'm not sure the same would hold true for lipids, where diffusion is typically orders of magnitude slower. I guess as a first pass you could try this approach on the first half of your trajectory vs the second half to get an idea of what the error bars might look like.

drroe avatar Jul 31 '25 12:07 drroe

Dear @drroe ,

Thanks for your help! I tried with the last version and it worked. However, I still don't understand 😅 why

bounds :POPC name Protein dx 0.5 offset 2
bounds :POPC name Popc dx 0.5 offset 2 

is needed. One in theory, would just need as you wrote before the bounds of the protein and the POPC, right?

# Create grids for the protein/POPC
bounds ^5 name Protein dx 0.5 offset 2
bounds :POPC name Popc dx 0.5 offset 2 
# Create stripped and aligned output trajectory
  1. Regarding the quantification: From what I understood, MDpocket detects cavities using a grid-based method and identifies the atoms or residues lining them. Do you think it would make sense to cluster the grid points based on isovalues to define relevant pocket regions, and then compute a COM using either the lining residues or the atoms from inserted lipids?

H-EKE avatar Aug 03 '25 16:08 H-EKE

Just as a note, I messed up.

# Load topology/trajectory
parm 15461_dyn_754.psf
trajin 15462_trj_754.xtc
# Remove water/ions/box info
strip :SOD,CLA,TIP3,TIP parmout strip.parm7 nobox
# Center and align on the protein
center ^5 origin
align ^5&!@H= mass first
# Create an average structure of the protein
average Avg.mol2 ^5
# Create grids for the protein/POPC
bounds ^5 name Protein dx 0.5 offset 2
bounds :POPC name Popc dx 0.5 offset 2 
# Create stripped and aligned output trajectory
trajout strip.aligned.dcd
# Save the stripped and aligned coords
createcrd MyCrd
run
# Create grids for the protein and POPC from aligned coords
crdaction MyCrd grid protein.dx data Protein ^5
crdaction MyCrd grid popc.dx data Popc :POPC

This script still leading to error regarding the grid, with the last version

CPPTRAJ: Trajectory Analysis. V6.29.13 (GitHub) MPI OpenMP CUDA
    ___  ___  ___  ___
     | \/ | \/ | \/ | 
    _|_/\_|_/\_|_/\_|_

| Running on 1 processes.
| 1 OpenMP threads available.
| Date/time: 08/04/25 17:05:36
| Available memory: 206.303 GB
| CUDA device: NVIDIA A100 80GB PCIe
| Available GPU memory: 84.974 GB
| Compute capability: 8.0

INPUT: Reading input from 'STDIN'
  [parm prod1/structure.psf]
        Reading 'prod1/structure.psf' as Charmm PSF
    Reading Charmm PSF file structure.psf as topology file.
        PSF contains 570230 atoms, 145435 residues.
Warning: Determining bond length parameters from element types for 'structure.psf'.
  [trajin prod1/output.xtc 1 2500]
        Reading 'prod1/output.xtc' as Gromacs XTC
Warning: Trajectory box type is 'Orthorhombic' but topology box type is 'None'.
Warning: Setting topology box information from trajectory.
  [strip :SOD,CLA,TIP3,TIP parmout strip.parm7 nobox]
    STRIP: Stripping atoms in mask [:SOD,CLA,TIP3,TIP]
        Any existing box information will be removed.
        Writing 'stripped' topology file with name 'strip.parm7'
  [center ^5 origin]
    CENTER: Centering coordinates using geometric center of atoms in mask (^5) to
        coordinate origin.
  [align ^5&!@H= mass first]
    ALIGN: Aligning atoms selected by mask '^5&!@H*'
        Reference is first frame (^5&!@H*)
        Fit will be mass-weighted.
  [average Avg.mol2 ^5]
        Writing 'Avg.mol2' as Mol2
    AVERAGE: Averaging over coordinates in mask [^5]
        Start: 1  Stop: Final frame
        Writing averaged coords to file 'Avg.mol2'
  [bounds ^5 name Protein dx 0.5 offset 2]
    BOUNDS: Calculating bounds for atoms in mask [^5]
        Output to 'STDOUT'
        Grid Protein will be created after processing using
          spacings dX= 0.5  dY= 0.5  dZ= 0.5  offset= 2 Bins.
  [bounds :POPC name Popc dx 0.5 offset 2]
    BOUNDS: Calculating bounds for atoms in mask [:POPC]
        Output to 'STDOUT'
        Grid Popc will be created after processing using
          spacings dX= 0.5  dY= 0.5  dZ= 0.5  offset= 2 Bins.
  [trajout strip.aligned.dcd]
        Writing 'strip.aligned.dcd' as Charmm DCD
  [createcrd MyCrd]
    CREATECRD: Saving coordinates from Top structure.psf to "MyCrd"
  [run]
---------- RUN BEGIN -------------------------------------------------

PARAMETER FILES (1 total):
 0: structure.psf, 570230 atoms, 145435 res, box: Orthorhombic, 144375 mol, 142697 solvent

INPUT TRAJECTORIES (1 total):
 0: 'output.xtc' is a GROMACS XTC file, Parm structure.psf (Orthorhombic box) (reading 2500 of 25000)
  Coordinate processing will occur on 2500 frames.

OUTPUT TRAJECTORIES (1 total):
  'strip.aligned.dcd' (2500 frames) is a CHARMM DCD file (coords) Little Endian 32 bit

PARALLEL INFO:
  Process 0 will handle 2500 frames.
.....................................................
ACTION SETUP FOR PARM 'structure.psf' (7 actions):
  0: [strip :SOD,CLA,TIP3,TIP parmout strip.parm7 nobox]
        Stripping 428839 atoms.
        Stripped topology: 141391 atoms, 1990 res, box: None, 930 mol
        Writing topology 0 (structure.psf) to 'strip.parm7' with format Amber Topology
Warning: No angle parameters.
Warning: No dihedral parameters.
Warning: No non-bonded parameters.
        Memory used by full exclusion list: 3.138 MB
        Topology has alternative residue numbering (from e.g PDB, stripping, reordering, etc).
        Topology has chain IDs.
Warning: Topology does not contain tree, join, and/or rotate arrays.
Warning: Missing arrays will not be written. Care should be taken if this
Warning:   topology is used for anything besides analysis or visualization.
Warning: To create an empty array specify the 'writeempty' keyword.
  1: [center ^5 origin]
        Mask [^5] corresponds to 5874 atoms.
  2: [align ^5&!@H= mass first]
        Target mask: [^5&!@H*](2916)
        Reference topology: structure.psf
        Reference mask: [^5&!@H*](2916)
  3: [average Avg.mol2 ^5]
        Mask [^5] corresponds to 5874 atoms.
        Averaging over 5874 atoms.
Warning: Atom selection < total # atoms, stripping parm for averaging only:
  4: [bounds ^5 name Protein dx 0.5 offset 2]
        Mask [^5] corresponds to 5874 atoms.
  5: [bounds :POPC name Popc dx 0.5 offset 2]
        Mask [:POPC] corresponds to 124218 atoms.
  6: [createcrd MyCrd]
        Estimated memory usage (2500 frames): 4.242 GB
.....................................................
ACTIVE OUTPUT TRAJECTORIES (1):
  strip.aligned.dcd (coordinates, time)

BEGIN PARALLEL TRAJECTORY PROCESSING:
 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Complete.
TIME: Rank 0 throughput= 32.3418 frames / second.
TIME: Avg. throughput= 32.3418 frames / second.

ACTION OUTPUT:
    AVERAGE: 2500 frames,  'Avg.mol2' is a Tripos Mol2 file, Parm structure.psf: Writing 1 frames (1-Last, 1)
    BOUNDS: Output to STDOUT
-42.442846 < X < 39.653772      Center= -1.394537  Bins=167
-49.808529 < Y < 37.278336      Center= -6.265096  Bins=177
-95.522603 < Z < 54.457190      Center= -20.532707  Bins=302
    BOUNDS: Output to STDOUT
-185.140591 < X < 190.660556    Center= 2.759983  Bins=754
-205.418658 < Y < 173.070134    Center= -16.174262  Bins=759
-77.947451 < Z < 93.876379      Center= 7.964464  Bins=346
TIME: Analyses took 0.0000 seconds.

DATASETS (15 total):
        Protein "Protein" (float grid), size is 8926818 (35.707 MB)
        Protein[xmin] "Protein[xmin]" (double), size is 1 (0.008 kB)
        Protein[ymin] "Protein[ymin]" (double), size is 1 (0.008 kB)
        Protein[zmin] "Protein[zmin]" (double), size is 1 (0.008 kB)
        Protein[xmax] "Protein[xmax]" (double), size is 1 (0.008 kB)
        Protein[ymax] "Protein[ymax]" (double), size is 1 (0.008 kB)
        Protein[zmax] "Protein[zmax]" (double), size is 1 (0.008 kB)
        Popc "Popc" (float grid), size is 198010956 (792.044 MB)
        Popc[xmin] "Popc[xmin]" (double), size is 1 (0.008 kB)
        Popc[ymin] "Popc[ymin]" (double), size is 1 (0.008 kB)
        Popc[zmin] "Popc[zmin]" (double), size is 1 (0.008 kB)
        Popc[xmax] "Popc[xmax]" (double), size is 1 (0.008 kB)
        Popc[ymax] "Popc[ymax]" (double), size is 1 (0.008 kB)
        Popc[zmax] "Popc[zmax]" (double), size is 1 (0.008 kB)
        MyCrd "MyCrd" (coordinates), size is 2500 (4.242 GB)
    Total data set memory usage is at least 5.069 GB

DATAFILES (2 total):
  STDOUT (Bounds)
  STDOUT (Bounds)

RUN TIMING:
TIME:           Init               : 2.8150 s (  3.45%)
TIME:           Trajectory Process : 77.2994 s ( 94.66%)
TIME:           Data Set Sync      : 0.7150 s (  0.88%)
TIME:           Action Post        : 0.0103 s (  0.01%)
TIME:           Analysis           : 0.0000 s (  0.00%)
TIME:           Data File Write    : 0.0002 s (  0.00%)
TIME:           Other              : 0.8223 s (  0.01%)
TIME:   Run Total 81.6623 s
---------- RUN END ---------------------------------------------------
  [crdaction MyCrd grid protein.dx data Protein ^5]
Warning: 'crdaction' command does not yet use multiple MPI processes.
        Using set 'MyCrd'
----- MyCrd (1-2500, 1) -----
        OpenDx: Grid will be created using bin corners.
    GRID:
        No offset will be applied to points.
        Grid will not move.
        Calculating positive density.
                -=Grid Dims=-        X        Y        Z
                        Bins:      167      177      302
                      Origin: -43.1445 -50.5151 -96.0327
                     Spacing:      0.5      0.5      0.5
                      Center: -1.39454  -6.2651 -20.5327
                Box: Orthorhombic ABC={83.5 88.5 151} abg={90 90 90}
        Grid will be printed to file protein.dx
        Grid data set: 'Protein'
        Mask expression: [^5]
        Pseudo-PDB will be printed to STDOUT
        Mask [^5] corresponds to 5874 atoms.
 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Complete.
    GRID: No normalization.
        Grid max is 299
        Writing PDB of grid points > 80.00% of grid max.
ATOM      1  XX GRID     1      10.105   0.735 -12.783  0.85  0.00              
ATOM      2  XX GRID     2       8.605   0.735 -12.283  0.82  0.00              
ATOM      3  XX GRID     3       3.105  -2.765  -0.783  0.82  0.00              
ATOM      4  XX GRID     4      -2.895   5.735   0.217  0.84  0.00              
ATOM      5  XX GRID     5      -3.895   6.235   1.717  0.87  0.00              
ATOM      6  XX GRID     6       4.605  -3.265   2.717  0.80  0.00              
ATOM      7  XX GRID     7      -5.395   0.235   3.717  0.92  0.00              
ATOM      8  XX GRID     8      -4.395   7.735   4.217  0.85  0.00              
ATOM      9  XX GRID     9      -6.895  -1.265   4.717  0.85  0.00              
ATOM     10  XX GRID    10      -3.895   7.235   4.717  0.82  0.00              
ATOM     11  XX GRID    11      -6.395  -1.265   5.217  0.80  0.00              
ATOM     12  XX GRID    12      -3.395   3.735   6.217  0.84  0.00              
ATOM     13  XX GRID    13       0.105  -6.265   7.717  0.84  0.00              
ATOM     14  XX GRID    14      -1.895   5.735   7.717  0.93  0.00              
ATOM     15  XX GRID    15      -2.895   6.735   7.717  0.89  0.00              
ATOM     16  XX GRID    16      -4.395   5.235   9.717  0.95  0.00              
ATOM     17  XX GRID    17      -4.395   4.235  10.717  0.88  0.00              
ATOM     18  XX GRID    18      -5.895   2.235  14.717  0.82  0.00              
ATOM     19  XX GRID    19      -3.895   6.735  14.717  0.81  0.00              
ATOM     20  XX GRID    20       6.605   1.235  15.217  0.87  0.00              
ATOM     21  XX GRID    21       8.105  -0.265  18.217  0.80  0.00              
ATOM     22  XX GRID    22      -7.395  -1.765  18.717  1.00  0.00              
HETATM   23  XX  XXX    23     -43.145 -50.515 -96.033  0.00  0.00              
HETATM   24  XX  XXX    23      40.355 -50.515 -96.033  0.00  0.00              
HETATM   25  XX  XXX    23     -43.145  37.985 -96.033  0.00  0.00              
HETATM   26  XX  XXX    23      40.355  37.985 -96.033  0.00  0.00              
HETATM   27  XX  XXX    23     -43.145 -50.515  54.967  0.00  0.00              
HETATM   28  XX  XXX    23      40.355 -50.515  54.967  0.00  0.00              
HETATM   29  XX  XXX    23     -43.145  37.985  54.967  0.00  0.00              
HETATM   30  XX  XXX    23      40.355  37.985  54.967  0.00  0.00              
TIME: Total action execution time: 2.4856 seconds.
  [crdaction MyCrd grid popc.dx data Popc :POPC]
Warning: 'crdaction' command does not yet use multiple MPI processes.
        Using set 'MyCrd'
----- MyCrd (1-2500, 1) -----
        OpenDx: Grid will be created using bin corners.
    GRID:
        No offset will be applied to points.
        Grid will not move.
        Calculating positive density.
                -=Grid Dims=-        X        Y        Z
                        Bins:      754      759      346
                      Origin:  -185.74 -205.924 -78.5355
                     Spacing:      0.5      0.5      0.5
                      Center:  2.75998 -16.1743  7.96446
                Box: Orthorhombic ABC={377 379.5 173} abg={90 90 90}
        Grid will be printed to file popc.dx
        Grid data set: 'Popc'
        Mask expression: [:POPC]
        Pseudo-PDB will be printed to STDOUT
        Mask [:POPC] corresponds to 124218 atoms.
 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Complete.
    GRID: No normalization.
        Grid max is 99
        Writing PDB of grid points > 80.00% of grid max.
ATOM      1  XX GRID     1       5.010  20.826  -8.286  0.81  0.00              
ATOM      2  XX GRID     2      -8.490  -8.174  -6.286  0.83  0.00              
ATOM      3  XX GRID     3      -4.990  14.826  -5.786  0.88  0.00              
ATOM      4  XX GRID     4       3.510  17.326  -5.786  0.83  0.00              
ATOM      5  XX GRID     5      -7.490  14.326  -3.786  0.94  0.00              
ATOM      6  XX GRID     6       2.010  16.326  -3.786  0.82  0.00              
ATOM      7  XX GRID     7       2.510  16.326  -3.786  0.86  0.00              
ATOM      8  XX GRID     8       2.510  16.326  -3.286  0.83  0.00              
ATOM      9  XX GRID     9       3.010  16.326  -3.286  1.00  0.00              
ATOM     10  XX GRID    10      10.510  16.826  -2.786  0.86  0.00              
ATOM     11  XX GRID    11       2.510  15.826  -2.286  0.81  0.00              
ATOM     12  XX GRID    12       8.510  15.826  -2.286  0.90  0.00              
ATOM     13  XX GRID    13       1.510  15.826  -1.786  0.82  0.00              
ATOM     14  XX GRID    14       1.510  15.326  -1.286  0.82  0.00              
ATOM     15  XX GRID    15       1.510  15.826  -1.286  0.82  0.00              
ATOM     16  XX GRID    16       1.510  16.326  -1.286  0.83  0.00              
ATOM     17  XX GRID    17     -13.490   9.826   0.714  0.81  0.00              
ATOM     18  XX GRID    18     -12.990  10.326   0.714  0.82  0.00              
ATOM     19  XX GRID    19     -13.490  10.326   1.214  0.87  0.00              
ATOM     20  XX GRID    20     -12.990  10.326   1.214  0.85  0.00              
ATOM     21  XX GRID    21     -13.490  10.826   1.214  0.90  0.00              
ATOM     22  XX GRID    22     -13.990  10.326   1.714  0.90  0.00              
ATOM     23  XX GRID    23     -13.990  10.826   2.214  0.83  0.00              
ATOM     24  XX GRID    24       1.010  18.326   3.714  0.82  0.00              
ATOM     25  XX GRID    25     -14.990   2.326  14.714  0.89  0.00              
ATOM     26  XX GRID    26     -14.990   2.826  15.714  0.82  0.00              
ATOM     27  XX GRID    27     -14.990   3.326  15.714  0.81  0.00              
ATOM     28  XX GRID    28      -3.490  10.826  18.714  0.81  0.00              
ATOM     29  XX GRID    29       5.510  11.326  19.714  0.82  0.00              
HETATM   30  XX  XXX    30    -185.740-205.924 -78.536  0.00  0.00              
HETATM   31  XX  XXX    30     191.260-205.924 -78.536  0.00  0.00              
HETATM   32  XX  XXX    30    -185.740 173.576 -78.536  0.00  0.00              
HETATM   33  XX  XXX    30     191.260 173.576 -78.536  0.00  0.00              
HETATM   34  XX  XXX    30    -185.740-205.924  94.464  0.00  0.00              
HETATM   35  XX  XXX    30     191.260-205.924  94.464  0.00  0.00              
HETATM   36  XX  XXX    30    -185.740 173.576  94.464  0.00  0.00              
HETATM   37  XX  XXX    30     191.260 173.576  94.464  0.00  0.00              
TIME: Total action execution time: 43.8777 seconds.
  [Mult = Protein * Popc]
Error: Grid operation 'Multiply' requires both grids have same dimensions.
'Mult = Protein * Popc': Invalid command or expression.
        1 errors encountered reading input.
Error: Error(s) occurred during execution.
TIME: Total execution time: 138.2211 seconds.

--------------------------------------------------------------------------
Primary job  terminated normally, but 1 process returned
a non-zero exit code. Per user-direction, the job has been aborted.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
mpirun detected that one or more processes exited with non-zero status, thus causing
the job to be terminated. The first process to do so was:

  Process name: [[48975,1],0]
  Exit code:    1
--------------------------------------------------------------------------

Shouldn't one normalize the 2 grids before?

H-EKE avatar Aug 04 '25 15:08 H-EKE

Hi, sorry this fell off of my radar for a bit - I've been crazy busy.

Regarding your error, the issue is that when you want to multiply grids they need to have the same size. You can do this by setting the mask in your bounds command to point to the same thing, e.g.

bounds :POPC name Protein dx 0.5 offset 2
bounds :POPC name Popc dx 0.5 offset 2 

In this case I'm using :POPC to set up the grids for both the lipids and the protein. When you grid, use the mask appropriate to the system, e.g.

crdaction MyCrd grid protein.dx data Protein ^5
crdaction MyCrd grid popc.dx data Popc :POPC

So in this case in the first command CPPTRAJ is gridding molecule 5 onto the grid we set up based on the bounds of :POPC. Does that make sense? Then you can multiply.

Sorry again for the delay.

drroe avatar Sep 25 '25 12:09 drroe