f0dbb796620fbe3bb15abc83447ee6669fd2720b
[alexxy/gromacs.git] / src / python / runner / pipeline.py
1
2 from gromacs import Options, TrajectoryAnalysis
3 import sys, shlex
4
5 class GromacsPipeline(TrajectoryAnalysis.TrajectoryAnalysisModule):
6
7     def __init__(self,
8         name="PythonPipeline",
9         description="Pipeline of modules created with Python",
10         modules=[]
11     ):
12         super(GromacsPipeline, self).__init__(name, description)
13
14         self.optionsHolder = Options.PyOptionsHolder()
15
16         self.modules = []
17         self.options = []
18
19         for module, options in modules:
20             if not isinstance(module, TrajectoryAnalysis.TrajectoryAnalysisModule):
21                 info_name = module + "Info"
22                 if not hasattr(TrajectoryAnalysis, info_name):
23                     raise ValueError("There is no module named {}".format(name))
24
25                 module = getattr(TrajectoryAnalysis, info_name).create()
26
27             options_list = [name] + shlex.split(options)
28
29             self.modules.append(module)
30             self.options.append(options_list)
31
32     def initOptions(self, options, settings):
33         options.setDescription(self.description())
34
35     def getBatch(self):
36         return self.modules
37
38     def getArgv(self, i):
39         return self.options[i]
40
41     def initAnalysis(self, settings, top):
42         pass
43
44     def analyzeFrame(self, frnr, frame, pbc, data):
45         pass
46
47     def finishAnalysis(self, nframes):
48         pass
49
50     def writeOutput(self):
51         pass
52
53     def run(self, argv):
54         if argv is None:
55             argv = sys.argv
56
57         TrajectoryAnalysis.runAsMain(self, argv)
58
59 def runPipeline(name="PythonPipeline", description="Pipeline of modules created with Python", modules=[], argv=None):
60     pipeline = GromacsPipeline(name, description, modules)
61     pipeline.run(argv)