def finalize(self): """Finalizes the calculations (e.g. averaging the total term, output files creations ...). """ if self.architecture == 'monoprocessor': t = self.trajectory else: # Load the whole trajectory set. t = Trajectory(None, self.trajectoryFilename, 'r') comsUniverse = t.universe.__copy__() comsUniverse.removeObject(comsUniverse.objectList()[:]) orderedAtoms = sorted(t.universe.atomList(), key = operator.attrgetter('index')) groups = [Collection([orderedAtoms[ind] for ind in g]) for g in self.group] comp = 1 for g in groups: comAtom = Atom('H', name = 'COM'+str(comp)) comAtom._mass = g.mass() comsUniverse.addObject(comAtom) comp += 1 # traj_new is the filtered trajectory outputFile = Trajectory(comsUniverse, self.output, "w") outputFile.jobinfo = self.information + '\nOutput file written on: %s\n\n' % asctime() # Each time |snapshot| is called, the universe contents i flushed into the output file. snapshot = SnapshotGenerator(comsUniverse,\ actions = [TrajectoryOutput(outputFile, ["configuration","time"], 0, None, 1)]) # Loop over the output frames. for comp in range(self.nFrames): frameIndex = self.frameIndexes[comp] t.universe.setFromTrajectory(t, frameIndex) comsUniverse.setCellParameters(t.universe.cellParameters()) aComp = 0 for at in comsUniverse.atomList(): at.setPosition(self.comsTrajectory[frameIndex][aComp]) aComp += 1 snapshot(data = {'time': self.times[comp]}) # The output COM trajectory is closed. outputFile.close() self.toPlot = None
def finalize(self): """Finalizes the calculations (e.g. averaging the total term, output files creations ...). """ if self.architecture == 'monoprocessor': t = self.trajectory else: # Load the whole trajectory set. t = Trajectory(None, self.trajectoryFilename, 'r') orderedAtoms = sorted(t.universe.atomList(), key = operator.attrgetter('index')) selectedAtoms = Collection([orderedAtoms[ind] for ind in self.subset]) targetAtoms = Collection([orderedAtoms[ind] for ind in self.target]) # traj_new is the filtered trajectory outputFile = Trajectory(targetAtoms, self.output, "w") outputFile.jobinfo = self.information + '\nOutput file written on: %s\n\n' % asctime() # Create the snapshot generator snapshot = SnapshotGenerator(t.universe, actions = [TrajectoryOutput(outputFile, ["configuration"], 0, None, 1)]) # Loop over the output frames. for comp in range(self.nFrames): frameIndex = self.frameIndexes[comp] t.universe.setFromTrajectory(t, frameIndex) for at in targetAtoms: at.setPosition(Vector(self.filteredTrajectory[frameIndex][at.index])) snapshot(data = {'time': self.times[comp]}) outputFile.close() t.close() self.toPlot = None
def finalize(self): """Finalizes the calculations (e.g. averaging the total term, output files creations ...). """ if self.architecture == 'monoprocessor': t = self.trajectory else: # Load the whole trajectory set. t = Trajectory(None, self.trajectoryFilename, 'r') selectedAtoms = Collection() orderedAtoms = sorted(t.universe.atomList(), key=operator.attrgetter('index')) groups = [[ selectedAtoms.addObject(orderedAtoms[index]) for index in atomIndexes ] for atomIndexes in self.group] # Create trajectory outputFile = Trajectory(selectedAtoms, self.output, 'w') # Create the snapshot generator snapshot = SnapshotGenerator( t.universe, actions=[ TrajectoryOutput(outputFile, ["configuration", "time"], 0, None, 1) ]) # The output is written for comp in range(self.nFrames): frameIndex = self.frameIndexes[comp] t.universe.setFromTrajectory(t, frameIndex) for atom in selectedAtoms: atom.setPosition(self.RBT['trajectory'][atom.index][comp, :]) snapshot(data={'time': self.times[comp]}) outputFile.close() outputFile = NetCDFFile(self.output, 'a') outputFile.title = self.__class__.__name__ outputFile.jobinfo = self.information + '\nOutput file written on: %s\n\n' % asctime( ) outputFile.jobinfo += 'Input trajectory: %s\n\n' % self.trajectoryFilename outputFile.createDimension('NFRAMES', self.nFrames) outputFile.createDimension('NGROUPS', self.nGroups) outputFile.createDimension('QUATERNIONLENGTH', 4) # The NetCDF variable that stores the quaternions. QUATERNIONS = outputFile.createVariable( 'quaternion', N.Float, ('NGROUPS', 'NFRAMES', 'QUATERNIONLENGTH')) # The NetCDF variable that stores the centers of mass. COM = outputFile.createVariable('com', N.Float, ('NGROUPS', 'NFRAMES', 'xyz')) # The NetCDF variable that stores the rigid-body fit. FIT = outputFile.createVariable('fit', N.Float, ('NGROUPS', 'NFRAMES')) # Loop over the groups. for comp in range(self.nGroups): aIndexes = self.group[comp] outputFile.jobinfo += 'Group %s: %s\n' % ( comp + 1, [index for index in aIndexes]) QUATERNIONS[comp, :, :] = self.RBT[comp]['quaternions'][:, :] COM[comp, :, :] = self.RBT[comp]['com'][:, :] FIT[comp, :] = self.RBT[comp]['fit'][:] outputFile.close() self.toPlot = None