Commit 15a53122acf97f9dec5bd77727f2198e7f985590
1 parent
abce2443
Added other simple features
Showing
1 changed file
with
84 additions
and
2 deletions
Show diff stats
stim/biomodels/network.h
@@ -138,6 +138,56 @@ public: | @@ -138,6 +138,56 @@ public: | ||
138 | 138 | ||
139 | } | 139 | } |
140 | 140 | ||
141 | + // Returns number of branch points in thenetwork | ||
142 | + | ||
143 | + unsigned int BranchP(){ | ||
144 | + unsigned int B=0; | ||
145 | + unsigned int c; | ||
146 | + for(unsigned v=0; v < V.size(); v ++){ | ||
147 | + c = ((V[v].e[0].size()) + (V[v].e[1].size())); | ||
148 | + if (c > 2){ | ||
149 | + B += 1;} | ||
150 | + } | ||
151 | + return B; | ||
152 | + | ||
153 | + } | ||
154 | + | ||
155 | + // Returns number of end points (tips) in thenetwork | ||
156 | + | ||
157 | + unsigned int EndP(){ | ||
158 | + unsigned int B=0; | ||
159 | + unsigned int c; | ||
160 | + for(unsigned v=0; v < V.size(); v ++){ | ||
161 | + c = ((V[v].e[0].size()) + (V[v].e[1].size())); | ||
162 | + if (c == 1){ | ||
163 | + B += 1;} | ||
164 | + } | ||
165 | + return B; | ||
166 | + | ||
167 | + } | ||
168 | + | ||
169 | + //// Returns a dictionary with the key as the vertex | ||
170 | + //std::map<std::vector<vertex>,unsigned int> DegreeDict(){ | ||
171 | + // std::map<std::vector<vertex>,unsigned int> dd; | ||
172 | + // unsigned int c = 0; | ||
173 | + // for(unsigned v=0; v < V.size(); v ++){ | ||
174 | + // c = ((V[v].e[0].size()) + (V[v].e[1].size())); | ||
175 | + // dd[V[v]] = c; | ||
176 | + // } | ||
177 | + // return dd; | ||
178 | + //} | ||
179 | + | ||
180 | + //// Return number of branching stems | ||
181 | + //unsigned int Stems(){ | ||
182 | + // unsigned int s = 0; | ||
183 | + // std::map<std::vector<vertex>,unsigned int> dd; | ||
184 | + // dd = DegreeDict(); | ||
185 | + // //for(unsigned v=0; v < V.size(); v ++){ | ||
186 | + // // V[v].e[0]. | ||
187 | + // return s; | ||
188 | + //} | ||
189 | + | ||
190 | + | ||
141 | // Returns an average of fiber/edge lengths in the network | 191 | // Returns an average of fiber/edge lengths in the network |
142 | double Lengths(){ | 192 | double Lengths(){ |
143 | stim::vec<T> L;double sumLength = 0; | 193 | stim::vec<T> L;double sumLength = 0; |
@@ -171,7 +221,39 @@ public: | @@ -171,7 +221,39 @@ public: | ||
171 | return avg; | 221 | return avg; |
172 | } | 222 | } |
173 | 223 | ||
224 | + // Returns average contraction of the network | ||
225 | + double Contractions(){ | ||
226 | + stim::vec<T> t; | ||
227 | + stim::vec<T> id1, id2; // starting and ending vertices of the edge | ||
228 | + double distance;double contraction;double sumContraction = 0; | ||
229 | + for(unsigned e = 0; e < E.size(); e++){ //for each edge in the network | ||
230 | + id1 = E[e][0]; //get the edge starting point | ||
231 | + id2 = E[e][E[e].size() - 1]; //get the edge ending point | ||
232 | + distance = (id1 - id2).len(); //displacement between the starting and ending points | ||
233 | + contraction = distance / E[e].length(); // tortuoisty = edge length / edge displacement | ||
234 | + t.push_back(contraction); | ||
235 | + sumContraction += contraction; | ||
236 | + } | ||
237 | + double avg = sumContraction / E.size(); | ||
238 | + return avg; | ||
239 | + } | ||
174 | 240 | ||
241 | + // returns average fractal dimension of the branches of the network | ||
242 | + double FractalDimensions(){ | ||
243 | + stim::vec<T> t; | ||
244 | + stim::vec<T> id1, id2; // starting and ending vertices of the edge | ||
245 | + double distance;double fract;double sumFractDim = 0; | ||
246 | + for(unsigned e = 0; e < E.size(); e++){ //for each edge in the network | ||
247 | + id1 = E[e][0]; //get the edge starting point | ||
248 | + id2 = E[e][E[e].size() - 1]; //get the edge ending point | ||
249 | + distance = (id1 - id2).len(); //displacement between the starting and ending points | ||
250 | + fract = std::log(distance) / std::log(E[e].length()); // tortuoisty = edge length / edge displacement | ||
251 | + t.push_back(sumFractDim); | ||
252 | + sumFractDim += fract; | ||
253 | + } | ||
254 | + double avg = sumFractDim / E.size(); | ||
255 | + return avg; | ||
256 | + } | ||
175 | stim::cylinder<T> get_cylinder(unsigned f){ | 257 | stim::cylinder<T> get_cylinder(unsigned f){ |
176 | return E[f]; //return the specified edge (casting it to a fiber) | 258 | return E[f]; //return the specified edge (casting it to a fiber) |
177 | } | 259 | } |
@@ -206,7 +288,6 @@ public: | @@ -206,7 +288,6 @@ public: | ||
206 | 288 | ||
207 | //find out if the nodes for this fiber have already been created | 289 | //find out if the nodes for this fiber have already been created |
208 | it = find(id2vert.begin(), id2vert.end(), i[0]); //look for the first node | 290 | it = find(id2vert.begin(), id2vert.end(), i[0]); //look for the first node |
209 | - it_idx = std::distance(id2vert.begin(), it); | ||
210 | if(it == id2vert.end()){ //if i[0] hasn't already been used | 291 | if(it == id2vert.end()){ //if i[0] hasn't already been used |
211 | vertex new_vertex = new_edge[0]; //create a new vertex, assign it a position | 292 | vertex new_vertex = new_edge[0]; //create a new vertex, assign it a position |
212 | new_vertex.e[0].push_back(E.size()); //add the current edge as outgoing | 293 | new_vertex.e[0].push_back(E.size()); //add the current edge as outgoing |
@@ -215,12 +296,12 @@ public: | @@ -215,12 +296,12 @@ public: | ||
215 | id2vert.push_back(i[0]); //add the ID to the ID->vertex conversion list | 296 | id2vert.push_back(i[0]); //add the ID to the ID->vertex conversion list |
216 | } | 297 | } |
217 | else{ //if the vertex already exists | 298 | else{ //if the vertex already exists |
299 | + it_idx = std::distance(id2vert.begin(), it); | ||
218 | V[it_idx].e[0].push_back(E.size()); //add the current edge as outgoing | 300 | V[it_idx].e[0].push_back(E.size()); //add the current edge as outgoing |
219 | new_edge.v[0] = it_idx; | 301 | new_edge.v[0] = it_idx; |
220 | } | 302 | } |
221 | 303 | ||
222 | it = find(id2vert.begin(), id2vert.end(), i[1]); //look for the second ID | 304 | it = find(id2vert.begin(), id2vert.end(), i[1]); //look for the second ID |
223 | - it_idx = std::distance(id2vert.begin(), it); | ||
224 | if(it == id2vert.end()){ //if i[1] hasn't already been used | 305 | if(it == id2vert.end()){ //if i[1] hasn't already been used |
225 | vertex new_vertex = new_edge[I-1]; //create a new vertex, assign it a position | 306 | vertex new_vertex = new_edge[I-1]; //create a new vertex, assign it a position |
226 | new_vertex.e[1].push_back(E.size()); //add the current edge as incoming | 307 | new_vertex.e[1].push_back(E.size()); //add the current edge as incoming |
@@ -229,6 +310,7 @@ public: | @@ -229,6 +310,7 @@ public: | ||
229 | id2vert.push_back(i[1]); //add the ID to the ID->vertex conversion list | 310 | id2vert.push_back(i[1]); //add the ID to the ID->vertex conversion list |
230 | } | 311 | } |
231 | else{ //if the vertex already exists | 312 | else{ //if the vertex already exists |
313 | + it_idx = std::distance(id2vert.begin(), it); | ||
232 | V[it_idx].e[1].push_back(E.size()); //add the current edge as incoming | 314 | V[it_idx].e[1].push_back(E.size()); //add the current edge as incoming |
233 | new_edge.v[1] = it_idx; | 315 | new_edge.v[1] = it_idx; |
234 | } | 316 | } |