Pteros  2.0
Molecular modeling library for human beings!
traj_file_reader.h
1 #ifndef TRAJ_FILE_READER_H
2 #define TRAJ_FILE_READER_H
3 
4 #include "pteros/core/logging.h"
5 #include "pteros/analysis/options.h"
6 #include "message_channel.h"
7 #include "data_container.h"
8 #include <thread>
9 
10 namespace pteros {
11 
12 using DataChannel = MessageChannel<std::shared_ptr<pteros::DataContainer> > ;
13 using DataChannel_ptr = std::shared_ptr<DataChannel> ;
14 
15 
16 class Traj_file_reader {
17 public:
18  Traj_file_reader(Options& options, int natoms);
19 
20  bool is_frame_valid(int fr, float t);
21 
22  bool is_end_of_interval(int fr, float t);
23 
24 
25  void run(const std::vector<std::string>& traj_files, const DataChannel_ptr& ch);
26 
27  ~Traj_file_reader();
28 
29  void join();
30 
31  void reader_thread_body(const std::vector<std::string>& traj_files, const DataChannel_ptr &channel);
32 
33 private:
34  int Natoms; // Number of atoms requested in trajectory
35 
36  int log_interval;
37  float custom_start_time;
38  float custom_dt;
39  int first_frame, last_frame;
40  float first_time, last_time;
41  int skip;
42 
43  std::thread t;
44  bool stop_now; // Emergency stop flag
45  std::shared_ptr<spdlog::logger> log;
46 };
47 
48 }
49 
50 #endif // TRAJ_FILE_READER_H