Commit abce2443c2a7839a7cd8436912960114f5fce426
1 parent
10b95d6e
average branching index of the network statistic added
Showing
1 changed file
with
59 additions
and
17 deletions
Show diff stats
stim/biomodels/network.h
@@ -126,6 +126,18 @@ public: | @@ -126,6 +126,18 @@ public: | ||
126 | return V; | 126 | return V; |
127 | } | 127 | } |
128 | 128 | ||
129 | + // Returns an average of branching index in the network | ||
130 | + | ||
131 | + double BranchingIndex(){ | ||
132 | + double B=0; | ||
133 | + for(unsigned v=0; v < V.size(); v ++){ | ||
134 | + B += ((V[v].e[0].size()) + (V[v].e[1].size())); | ||
135 | + } | ||
136 | + B = B / V.size(); | ||
137 | + return B; | ||
138 | + | ||
139 | + } | ||
140 | + | ||
129 | // Returns an average of fiber/edge lengths in the network | 141 | // Returns an average of fiber/edge lengths in the network |
130 | double Lengths(){ | 142 | double Lengths(){ |
131 | stim::vec<T> L;double sumLength = 0; | 143 | stim::vec<T> L;double sumLength = 0; |
@@ -142,26 +154,11 @@ public: | @@ -142,26 +154,11 @@ public: | ||
142 | double Tortuosities(){ | 154 | double Tortuosities(){ |
143 | stim::vec<T> t; | 155 | stim::vec<T> t; |
144 | stim::vec<T> id1, id2; // starting and ending vertices of the edge | 156 | stim::vec<T> id1, id2; // starting and ending vertices of the edge |
145 | - //std::vector< stim::vec<T> > vert; // list of visited vertices | ||
146 | - //std::vector<stim::vec<T>>::iterator it; //create an iterator for searching the id2vert array | ||
147 | - //std::vector<unsigned> daughters; // to count number of daughter vessels at branch points | ||
148 | - //stim::vec<T> visitedVert; | ||
149 | - //unsigned visited; | ||
150 | double distance;double tortuosity;double sumTortuosity = 0; | 157 | double distance;double tortuosity;double sumTortuosity = 0; |
151 | for(unsigned e = 0; e < E.size(); e++){ //for each edge in the network | 158 | for(unsigned e = 0; e < E.size(); e++){ //for each edge in the network |
152 | id1 = E[e][0]; //get the edge starting point | 159 | id1 = E[e][0]; //get the edge starting point |
153 | id2 = E[e][E[e].size() - 1]; //get the edge ending point | 160 | id2 = E[e][E[e].size() - 1]; //get the edge ending point |
154 | distance = (id1 - id2).len(); //displacement between the starting and ending points | 161 | distance = (id1 - id2).len(); //displacement between the starting and ending points |
155 | - //it = find(vert.begin(), vert.end(), id1); //look for the first node has a daughter vessel already | ||
156 | - //visitedVert = std::distance(vert.begin(), it); //index where it already exists | ||
157 | - //if(visitedVert == id1){ | ||
158 | - // visited += 1; | ||
159 | - // daughters[e] = visited; | ||
160 | - //} | ||
161 | - //else{ | ||
162 | - // vert.push_back(id1); | ||
163 | - // daughters[e] = 1; | ||
164 | - //} | ||
165 | if(distance > 0){ | 162 | if(distance > 0){ |
166 | tortuosity = E[e].length()/ distance ; // tortuoisty = edge length / edge displacement | 163 | tortuosity = E[e].length()/ distance ; // tortuoisty = edge length / edge displacement |
167 | } | 164 | } |
@@ -171,7 +168,6 @@ public: | @@ -171,7 +168,6 @@ public: | ||
171 | sumTortuosity += tortuosity; | 168 | sumTortuosity += tortuosity; |
172 | } | 169 | } |
173 | double avg = sumTortuosity / E.size(); | 170 | double avg = sumTortuosity / E.size(); |
174 | - //std::cout<<"number of unique branch points"<<daughters.size()<<std::endl; | ||
175 | return avg; | 171 | return avg; |
176 | } | 172 | } |
177 | 173 | ||
@@ -228,7 +224,7 @@ public: | @@ -228,7 +224,7 @@ public: | ||
228 | if(it == id2vert.end()){ //if i[1] hasn't already been used | 224 | if(it == id2vert.end()){ //if i[1] hasn't already been used |
229 | vertex new_vertex = new_edge[I-1]; //create a new vertex, assign it a position | 225 | vertex new_vertex = new_edge[I-1]; //create a new vertex, assign it a position |
230 | new_vertex.e[1].push_back(E.size()); //add the current edge as incoming | 226 | new_vertex.e[1].push_back(E.size()); //add the current edge as incoming |
231 | - new_edge.v[1] = V.size(); | 227 | + new_edge.v[1] = V.size(); //add the new vertex to the edge |
232 | V.push_back(new_vertex); //add the new vertex to the vertex list | 228 | V.push_back(new_vertex); //add the new vertex to the vertex list |
233 | id2vert.push_back(i[1]); //add the ID to the ID->vertex conversion list | 229 | id2vert.push_back(i[1]); //add the ID to the ID->vertex conversion list |
234 | } | 230 | } |
@@ -427,6 +423,52 @@ public: | @@ -427,6 +423,52 @@ public: | ||
427 | count += atoi(file_contents[count + 1].c_str()) + 2; // Skip number of edge ids + 2 to point to the next vertex | 423 | count += atoi(file_contents[count + 1].c_str()) + 2; // Skip number of edge ids + 2 to point to the next vertex |
428 | } | 424 | } |
429 | } // end load_txt function | 425 | } // end load_txt function |
426 | + | ||
427 | + // strTxt returns a string of edges | ||
428 | + std::string | ||
429 | + strTxt(std::vector< stim::vec<T> > p) | ||
430 | + { | ||
431 | + std::stringstream ss; | ||
432 | + std::stringstream oss; | ||
433 | + for(unsigned int i = 0; i < p.size(); i++){ | ||
434 | + ss.str(std::string()); | ||
435 | + for(unsigned int d = 0; d < 3; d++){ | ||
436 | + ss<<c[i][d]; | ||
437 | + } | ||
438 | + ss < "\n" | ||
439 | + } | ||
440 | + return ss.str(); | ||
441 | + } | ||
442 | + // removes specified character from string | ||
443 | + void removeCharsFromString(std::string &str, char* charsToRemove ) { | ||
444 | + for ( unsigned int i = 0; i < strlen(charsToRemove); ++i ) { | ||
445 | + str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() ); | ||
446 | + } | ||
447 | + } | ||
448 | + //exports network to txt file | ||
449 | + void | ||
450 | + to_txt(std::string filename) | ||
451 | + { | ||
452 | + std::ofstream ofs; | ||
453 | + ofs.open(filename, std::ofstream::out | std::ofstream::app); | ||
454 | + int num; | ||
455 | + ofs << (E.size()).str() << "\n"; | ||
456 | + for(unsigned int i = 0; i < E.size(); i++) | ||
457 | + { | ||
458 | + std::string str; | ||
459 | + ofs << (E[i].size()).str() << "\n"; | ||
460 | + str = E[i].strTxt(); | ||
461 | + ofs << str << "\n"; | ||
462 | + } | ||
463 | + for(int i = 0; i < V.size(); i++) | ||
464 | + { | ||
465 | + std::string str; | ||
466 | + str = V[i].str(); | ||
467 | + removeCharsFromString(str, "[],"); | ||
468 | + ofs << str << "\n"; | ||
469 | + } | ||
470 | + ofs.close(); | ||
471 | + } | ||
430 | }; //end stim::network class | 472 | }; //end stim::network class |
431 | }; //end stim namespace | 473 | }; //end stim namespace |
432 | #endif | 474 | #endif |