「view this page in B3 βῆτα server」

Revisions №57054

branch: master 「№57054」
Commited by: Andrew Leaver-Fay
GitHub commit link: 「c7f5e0de21cfe9d2」
Difference from previous tested commit:  code diff
Commit date: 2014-07-11 21:18:47

Reducing the memory use for Rama and Rama2B. This commit brings in modifications to the Ramachandran and Ramachandran2B classes to dramatically reduce the memory usage needed to perform the sampling used by KIC and the next-generation KIC loop modeling protocols. Previously, the Ramachandran table would look at all 36x36 phi/psi bins and write down the phi and psi angles for each bin with a probability above some very small threshold; then it created a very large table with several thousand entries and write down the phi/psi values into that table proportionately. I.e., if one phi/psi bin had 10% probability then if there were 2500 entries in the table, that bin would have its entries written down 250 times. Then, this table could be use to proprotionately draw phi/psi values. The new strategy is to compute the cumulative distribution function for the phi and psi bins, to then draw a random number between 0 and 1, and then to find the phi/psi bin where its CDF value is less than the random number and the next phi/psi bin's CDF value is greater than the random number. This strategy has remarkably little memory overhead; just as much as is needed to store the probabilities in the first place. This brings NGK's memory use down from 5GB+ (since the Rama2B's memory footprint was 20x larger) to basically the same memory overhead as the rest of Rosetta. Thanks to Brian for discussions on how to implement this and to Amelie and Roland for running the loop modeling benchmarks to make sure nothing worsened. All unit tests pass. Integration tests using KIC and next-generation KIC all change.

...