2ea912df686bcfc79f521af4025d53a945819583
[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         keep_datasets=False,
12     ):
13         super(GromacsPipeline, self).__init__(name, description)
14
15         self.optionsHolder = Options.PyOptionsHolder()
16
17         self.modules = []
18         self.options = []
19
20         for module, options in modules:
21             if not isinstance(module, TrajectoryAnalysis.TrajectoryAnalysisModule):
22                 info_name = module + "Info"
23                 if not hasattr(TrajectoryAnalysis, info_name):
24                     raise ValueError("There is no module named {}".format(name))
25
26                 module = getattr(TrajectoryAnalysis, info_name).create()
27
28             options_list = [name] + shlex.split(options)
29
30             if keep_datasets:
31                 for i in range(module.datasetCount()):
32                     module.datasetFromIndex(i).requestStorage(-1)
33
34             self.modules.append(module)
35             self.options.append(options_list)
36
37     def initOptions(self, options, settings):
38         settings.setHelpText(self.description())
39
40     def getBatch(self):
41         return self.modules
42
43     def getArgv(self, i):
44         return self.options[i]
45
46     def initAnalysis(self, settings, top):
47         pass
48
49     def analyzeFrame(self, frnr, frame, pbc, data):
50         pass
51
52     def finishAnalysis(self, nframes):
53         pass
54
55     def writeOutput(self):
56         pass
57
58     def run(self, argv):
59         if argv is None:
60             argv = sys.argv
61
62         TrajectoryAnalysis.runAsMain(self, argv)
63
64 def runPipeline(argv=None, *args, **kwargs):
65     pipeline = GromacsPipeline(*args, **kwargs)
66     pipeline.run(argv)
67
68     return pipeline