Pteros  2.0
Molecular modeling library for human beings!
All Classes Functions Variables Friends Pages
bilayer.h
1 /*
2  * This file is a part of
3  *
4  * ============================================
5  * ### Pteros molecular modeling library ###
6  * ============================================
7  *
8  * https://github.com/yesint/pteros
9  *
10  * (C) 2009-2021, Semen Yesylevskyy
11  *
12  * All works, which use Pteros, should cite the following papers:
13  *
14  * 1. Semen O. Yesylevskyy, "Pteros 2.0: Evolution of the fast parallel
15  * molecular analysis library for C++ and python",
16  * Journal of Computational Chemistry, 2015, 36(19), 1480–1488.
17  * doi: 10.1002/jcc.23943.
18  *
19  * 2. Semen O. Yesylevskyy, "Pteros: Fast and easy to use open-source C++
20  * library for molecular analysis",
21  * Journal of Computational Chemistry, 2012, 33(19), 1632–1636.
22  * doi: 10.1002/jcc.22989.
23  *
24  * This is free software distributed under Artistic License:
25  * http://www.opensource.org/licenses/artistic-license-2.0.php
26  *
27 */
28 
29 
30 
31 
32 
33 
34 #ifndef BILAYER_H
35 #define BILAYER_H
36 
37 #include "pteros/core/system.h"
38 #include "pteros/core/selection.h"
39 #include "pteros/core/distance_search.h"
40 
41 namespace pteros {
42 
43 struct Bilayer_point_info {
45  int monolayer;
47  float surf_dist1, surf_dist2;
49  float center_dist;
51  Eigen::Vector3f normal;
53  Eigen::Vector3f center;
55  float thickness;
57  Eigen::Vector3f proj1, proj2;
59  std::shared_ptr<Selection> spot1_ptr, spot2_ptr;
60  void print();
61 };
62 
63 class Bilayer {
64 public:
65  Bilayer(){};
66  Bilayer(Selection& sel, std::string head_marker_atom, float d = 2.0);
67  void create(Selection& sel, std::string head_marker_atom, float d = 2.0);
69  Bilayer_point_info point_info(Eigen::Vector3f& point);
70 protected:
71  Selection* bilayer_ptr;
72  Selection mono1,mono2; // Monolayers
73  std::vector<Selection> surf; // Marker surfaces
74  int spot_size;
75 };
76 
77 /*
78 float point_in_membrane(Eigen::Vector3f& point, Selection& head_markers, float d,
79  const Eigen::Vector3i& pbc_dims = Eigen::Vector3i::Ones());
80 */
81 }
82 
83 #endif
84 
85 
86 
87