DCCM for ensemble NMA

Issue #80 resolved
Lars Skjærven created an issue

we should probably take a new look at how we calculate the DCCMs for the eNMA object. In the current version nma.pdbs() returns only the 10 lowest frequency modes, which is also what is used (and the only accessible) in function dccm.nma(). Normally you want much more than only the softest modes when calculating the dccm.

m <- nma(read.pdb("1hel"))
cij1 <- dccm.nma(m, nmodes=10)
cij2 <- dccm.nma(m, nmodes= NULL)
plot(cij1)
plot(cij2)

quite a difference.. the way I see it, we have two options. 1) do the DCCM calcuation for each structure inside nma.pdbs() - and add an argument dccm=TRUE, 2) store more eigenvectors in the returing eNMA object. option 1) would make the function even more complex, and 2) would probably be too memory intensive. or is this an easy task for bigmemory?

At the moment I did implement option 1), so that:

modes = nma.pdbs(pdbs, dccm=TRUE)
modes$dccm

what do you think?

Comments (5)

  1. Xinqiu Yao

    Hi,

    I usually use nma.pdbs(full=TRUE) and then call dccm.enma(). I assumed the returned "all.dccm" was calculated with all modes. Isn't it true?

  2. Lars Skjærven reporter

    you're right. when full=TRUE all modes are included, and thus also in the dccm calculation. for many large structures full=TRUE can be memory intensive though, since it stores both eigen and 'modes' vectors. but you didn't have problems with memory associated to this? perhaps it's a rare problem only with my many and large groel structures. perhaps just adjusting up the number of modes to be stored in U.subspace matrix is the way to go..

  3. Xinqiu Yao

    I don't have problems possibly because of the small system size in my case. I think bigmemory could be a solution to return large U.subspace (or even the entire U array). One problem is 3D array is not directly supported by bigmemory (wrong?). Another choice is ff package, which does similar tasks to bigmemory but supports arrays. I will check out more details and see what we can do.

  4. Lars Skjærven reporter

    I will start with just expanding the U.subspace to include all modes by default, and let the user set a lower number of modes if needed. seems to work, and the memory issues should be gone now with some garbage collecting through function gc(). I'll also fix the dccm.enma() which is what started this confusion.

  5. Log in to comment