Apply clang-format to source tree
[alexxy/gromacs.git] / src / gromacs / trajectoryanalysis / runnercommon.h
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
4  * Copyright (c) 2010,2011,2012,2013,2014,2015,2016,2019, by the GROMACS development team, led by
5  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
6  * and including many others, as listed in the AUTHORS file in the
7  * top-level source directory and at http://www.gromacs.org.
8  *
9  * GROMACS is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public License
11  * as published by the Free Software Foundation; either version 2.1
12  * of the License, or (at your option) any later version.
13  *
14  * GROMACS is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with GROMACS; if not, see
21  * http://www.gnu.org/licenses, or write to the Free Software Foundation,
22  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
23  *
24  * If you want to redistribute modifications to GROMACS, please
25  * consider that scientific software is very special. Version
26  * control is crucial - bugs must be traceable. We will be happy to
27  * consider code for inclusion in the official distribution, but
28  * derived work must not be called official GROMACS. Details are found
29  * in the README & COPYING files - if they are missing, get the
30  * official version at http://www.gromacs.org.
31  *
32  * To help us fund GROMACS development, we humbly ask that you cite
33  * the research papers on the package. Check out http://www.gromacs.org.
34  */
35 /*! \internal \file
36  * \brief
37  * Declares gmx::TrajectoryAnalysisRunnerCommon.
38  *
39  * \author Teemu Murtola <teemu.murtola@gmail.com>
40  * \ingroup module_trajectoryanalysis
41  */
42 #ifndef GMX_TRAJECTORYANALYSIS_RUNNERCOMMON_H
43 #define GMX_TRAJECTORYANALYSIS_RUNNERCOMMON_H
44
45 #include "gromacs/utility/classhelpers.h"
46
47 struct t_trxframe;
48
49 namespace gmx
50 {
51
52 class IOptionsContainer;
53 class ITopologyProvider;
54 class SelectionCollection;
55 class TimeUnitBehavior;
56 class TopologyInformation;
57 class TrajectoryAnalysisSettings;
58
59 /*! \internal
60  * \brief
61  * Implements common trajectory analysis runner functionality.
62  *
63  * As there is currently only one runner (TrajectoryAnalysisCommandLineRunner),
64  * the division of responsibilities is not yet very clear.
65  *
66  * \ingroup module_trajectoryanalysis
67  */
68 class TrajectoryAnalysisRunnerCommon
69 {
70 public:
71     /*! \brief
72      * Initializes a new runner helper.
73      *
74      * \param    settings  Settings object to use.
75      */
76     explicit TrajectoryAnalysisRunnerCommon(TrajectoryAnalysisSettings* settings);
77     ~TrajectoryAnalysisRunnerCommon();
78
79     //! Returns a topology provider for SelectionOptionBehavior.
80     ITopologyProvider* topologyProvider();
81
82     /*! \brief
83      * Initializes common options for trajectory analysis.
84      *
85      * \param[in,out] options  Options object to add the options to.
86      * \param[in,out] timeUnitBehavior  Time unit behavior to use for adding
87      *    and handling the `-tu` option.
88      */
89     void initOptions(IOptionsContainer* options, TimeUnitBehavior* timeUnitBehavior);
90     //! Processes common option values after they have been parsed.
91     void optionsFinished();
92     //! Load topology information if provided and/or required.
93     void initTopology();
94     /*! \brief
95      * Reads the first frame from the trajectory.
96      *
97      * After this call, frame() returns the first frame.
98      */
99     void initFirstFrame();
100     /*! \brief
101      * Initializes the index in frame() that specifies the atoms contained.
102      *
103      * Can be called after selections have been compiled.
104      */
105     void initFrameIndexGroup();
106     /*! \brief
107      * Reads the next frame from the trajectory.
108      *
109      * \returns false if there were no more frames.
110      *
111      * After this call, frame() returns the newly loaded frame.
112      */
113     bool readNextFrame();
114     /*! \brief
115      * Performs common initialization for the currently loaded frame.
116      *
117      * Currently, makes molecules whole if requested.
118      */
119     void initFrame();
120
121     //! Returns true if input data comes from a trajectory.
122     bool hasTrajectory() const;
123     //! Returns the topology information object.
124     const TopologyInformation& topologyInformation() const;
125     //! Returns the currently loaded frame.
126     t_trxframe& frame() const;
127
128 private:
129     class Impl;
130
131     PrivateImplPointer<Impl> impl_;
132 };
133
134 } // namespace gmx
135
136 #endif