31 #include "pteros/core/selection.h"
32 #include "pteros/core/logging.h"
33 #include "pteros/core/utilities.h"
43 std::string whole_str;
45 std::string head_marker_str;
47 std::string tail_marker_str;
49 std::string mid_marker_str;
51 std::vector<std::string> tail_carbons_str;
59 friend class LipidMembrane;
60 friend class PerSpeciesProperties;
62 LipidMolecule(
const Selection& lip_mol,
const LipidSpecies& sp,
int ind, LipidMembrane* parent);
64 void add_to_group(
int gr);
68 Selection head_marker_sel;
69 Selection tail_marker_sel;
70 Selection mid_marker_sel;
73 std::vector<LipidTail> tails;
76 Eigen::Vector3f normal;
80 Eigen::Vector3f dipole;
84 Eigen::Vector3f smoothed_mid_xyz;
86 float gaussian_curvature;
90 std::vector<int> neib;
95 LipidMembrane* membr_ptr;
101 Eigen::Vector3f head_marker, tail_marker, mid_marker, pos_saved;
108 LipidTail(
const Selection& lipid_sel,
const std::string& tail_sel_str);
109 void compute(
const LipidMolecule& lipid);
110 int size()
const {
return carbon_offsets.size();}
113 Eigen::ArrayXf order;
115 Eigen::ArrayXf dihedrals;
117 Eigen::VectorXi carbon_offsets;
121 class PerSpeciesProperties {
123 PerSpeciesProperties(LipidMembrane* ptr);
128 Eigen::Vector2f area;
131 Eigen::Vector2f tilt;
133 Eigen::Vector2f total_dipole;
135 Eigen::Vector2f projected_dipole;
137 Eigen::Vector2f coord_number;
139 Eigen::Vector2f trans_dihedrals_ratio;
141 Eigen::Vector2f gaussian_curvature;
142 Eigen::Vector2f mean_curvature;
144 std::vector<Eigen::ArrayXf> order;
146 std::map<std::string,float> around;
149 void add_data(
const LipidMolecule& lip);
151 void post_process(
float num_frames);
154 std::string summary();
157 void save_order_to_file(
const std::string& fname);
158 void save_around_to_file(
const std::string& fname);
162 bool order_initialized;
163 LipidMembrane* membr_ptr;
169 LipidGroup(LipidMembrane* ptr,
int id);
171 void reset(){ lip_ids.clear(); }
172 void add_lipid_id(
int i){lip_ids.push_back(i);}
173 void process_frame();
177 std::string summary();
178 std::string properties_table();
179 void save_properties_table_to_file(
const std::string& fname);
182 float num_lipids, num_frames;
183 Eigen::Vector2f trans_dihedrals_ratio;
185 std::map<std::string,PerSpeciesProperties> species_properties;
191 std::vector<int> lip_ids;
193 LipidMembrane* membr_ptr;
197 class LipidMembrane {
199 LipidMembrane(System *sys,
const std::vector<LipidSpecies>& species,
int ngroups);
203 void compute_properties(
float d = 2.0,
204 bool use_external_normal =
false,
205 Vector3f_const_ref external_pivot = Eigen::Vector3f::Zero(),
206 Vector3i_const_ref external_dist_dim = Eigen::Vector3i::Ones());
208 void compute_averages();
209 void write_averages(std::string path=
".");
211 std::vector<LipidMolecule> lipids;
212 std::vector<LipidGroup> groups;
214 std::vector<std::string> species_names;
217 std::shared_ptr<spdlog::logger> log;
219 Selection all_mid_sel;