Open vishlashkari opened 2 weeks ago
mamba install mdanalysisdata
). This works for me:
In [1]: from MDAnalysisData import datasets
In [2]: adk = datasets.fetch_adk_equilibrium()
In [3]: import MDAnalysis as mda
In [4]: u = mda.Universe(adk.topology, adk.trajectory) ~/anaconda3/envs/mda311/lib/python3.11/site-packages/MDAnalysis/coordinates/DCD.py:165: DeprecationWarning: DCDReader currently makes independent timesteps by copying self.ts while other readers update self.ts inplace. This behavior will be changed in 3.0 to be the same as other readers. Read more at https://github.com/MDAnalysis/mdanalysis/issues/3889 to learn if this change in behavior might affect you. warnings.warn("DCDReader currently makes independent timesteps"
In [5]: u.trajectory Out[5]: <DCDReader ~/MDAnalysis_data/adk_equilibrium/1ake_007-nowater-core-dt240ps.dcd with 4187 frames of 3341 atoms>
In [6]: frames = [ts.frame for ts in u.trajectory[10::10]]
In [7]: print(frames, u.trajectory.frame) [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, 710, 720, 730, 740, 750, 760, 770, 780, 790, 800, 810, 820, 830, 840, 850, 860, 870, 880, 890, 900, 910, 920, 930, 940, 950, 960, 970, 980, 990, 1000, 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1100, 1110, 1120, 1130, 1140, 1150, 1160, 1170, 1180, 1190, 1200, 1210, 1220, 1230, 1240, 1250, 1260, 1270, 1280, 1290, 1300, 1310, 1320, 1330, 1340, 1350, 1360, 1370, 1380, 1390, 1400, 1410, 1420, 1430, 1440, 1450, 1460, 1470, 1480, 1490, 1500, 1510, 1520, 1530, 1540, 1550, 1560, 1570, 1580, 1590, 1600, 1610, 1620, 1630, 1640, 1650, 1660, 1670, 1680, 1690, 1700, 1710, 1720, 1730, 1740, 1750, 1760, 1770, 1780, 1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870, 1880, 1890, 1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020, 2030, 2040, 2050, 2060, 2070, 2080, 2090, 2100, 2110, 2120, 2130, 2140, 2150, 2160, 2170, 2180, 2190, 2200, 2210, 2220, 2230, 2240, 2250, 2260, 2270, 2280, 2290, 2300, 2310, 2320, 2330, 2340, 2350, 2360, 2370, 2380, 2390, 2400, 2410, 2420, 2430, 2440, 2450, 2460, 2470, 2480, 2490, 2500, 2510, 2520, 2530, 2540, 2550, 2560, 2570, 2580, 2590, 2600, 2610, 2620, 2630, 2640, 2650, 2660, 2670, 2680, 2690, 2700, 2710, 2720, 2730, 2740, 2750, 2760, 2770, 2780, 2790, 2800, 2810, 2820, 2830, 2840, 2850, 2860, 2870, 2880, 2890, 2900, 2910, 2920, 2930, 2940, 2950, 2960, 2970, 2980, 2990, 3000, 3010, 3020, 3030, 3040, 3050, 3060, 3070, 3080, 3090, 3100, 3110, 3120, 3130, 3140, 3150, 3160, 3170, 3180, 3190, 3200, 3210, 3220, 3230, 3240, 3250, 3260, 3270, 3280, 3290, 3300, 3310, 3320, 3330, 3340, 3350, 3360, 3370, 3380, 3390, 3400, 3410, 3420, 3430, 3440, 3450, 3460, 3470, 3480, 3490, 3500, 3510, 3520, 3530, 3540, 3550, 3560, 3570, 3580, 3590, 3600, 3610, 3620, 3630, 3640, 3650, 3660, 3670, 3680, 3690, 3700, 3710, 3720, 3730, 3740, 3750, 3760, 3770, 3780, 3790, 3800, 3810, 3820, 3830, 3840, 3850, 3860, 3870, 3880, 3890, 3900, 3910, 3920, 3930, 3940, 3950, 3960, 3970, 3980, 3990, 4000, 4010, 4020, 4030, 4040, 4050, 4060, 4070, 4080, 4090, 4100, 4110, 4120, 4130, 4140, 4150, 4160, 4170, 4180] 0
Expected behavior
Slice trajectories as described in the userguide. Eventual goal is to concatenate / combine a bunch of .dcd trajectories (load all at once) and do analysis on every 10th frame, so basically exactly #3075
Use existing workaround to slice individual trajectories into new dcds and then concatenate those.
Actual behavior
File ~\AppData\Local\anaconda3\envs\mdanalysis\Lib\site-packages\MDAnalysis\coordinates\base.py:211, in FrameIteratorSliced.iter(self) 209 def iter(self): 210 for i in range(self.start, self.stop, self.step): --> 211 yield self.trajectory[i] 212 self.trajectory.rewind()
File ~\AppData\Local\anaconda3\envs\mdanalysis\Lib\site-packages\MDAnalysis\coordinates\base.py:833, in ProtoReader.getitem(self, frame) 831 if isinstance(frame, numbers.Integral): 832 frame = self._apply_limits(frame) --> 833 return self._read_frame_withaux(frame) 834 elif isinstance(frame, (list, np.ndarray)): 835 if len(frame) != 0 and isinstance(frame[0], (bool, np.bool)): 836 # Avoid having list of bools
File ~\AppData\Local\anaconda3\envs\mdanalysis\Lib\site-packages\MDAnalysis\coordinates\base.py:865, in ProtoReader._read_frame_with_aux(self, frame) 863 def _read_frame_with_aux(self, frame): 864 """Move to frame, updating ts with trajectory, transformations and auxiliary data.""" --> 865 ts = self._read_frame(frame) # pylint: disable=assignment-from-no-return 866 for aux in self.aux_list: 867 ts = self._auxs[aux].update_ts(ts)
File ~\AppData\Local\anaconda3\envs\mdanalysis\Lib\site-packages\MDAnalysis\coordinates\DCD.py:198, in DCDReader._read_frame(self, i) 196 """read frame i""" 197 self._frame = i - 1 --> 198 self._file.seek(i) 199 return self._read_next_timestep()
File ~\AppData\Local\anaconda3\envs\mdanalysis\Lib\site-packages\MDAnalysis\lib\formats\libdcd.pyx:400, in MDAnalysis.lib.formats.libdcd.DCDFile.seek()
OSError: DCD seek failed with DCD error=Normal EOF
for ts in u.trajectory: print(ts.frame)
u = mda.Universe('test.pdb', 'test.dcd') fiter = u.trajectory[10::10] frames = [ts.frame for ts in fiter] print(frames, u.trajectory.frame)
Out: ... OSError: DCD seek failed with DCD error=Normal EOF
u = mda.Universe('test.pdb', 'test.dcd') for ts in u.trajectory[::10]: print(ts.frame)
Out: ... OSError: DCD seek failed with DCD error=Normal EOF
In: u.trajectory[938] Out: < Timestep 938 with unit cell dimensions [132.12038 120.366974 119.66685 90. 90. 90. ] >
In: u.trajectory[939] Out: ... OSError: DCD seek failed with DCD error=Normal EOF
u = mda.Universe("test.pdb", "test.dcd") ag = u.select_atoms('all') with mda.Writer('out.dcd', ag.n_atoms) as w: for ts in u.trajectory: if ts.frame % 10 == 0: # Write every 10th frame w.write(ag.atoms) print(ts.frame) print('Done')
u = mda.Universe("test.pdb", "test.dcd", "test.dcd") ag = u.select_atoms('all') with mda.Writer('out.dcd', ag.n_atoms) as w: for ts in u.trajectory: if ts.frame % 10 == 0: # Write every 10th frame w.write(ag.atoms) print(ts.frame) print('Done')