Commit fe0c75394f642a4e30cea5981c5f9e82206cbe8e
1 parent
b3a38641
added functions to find average segment length, tortuoisity in a network
Showing
1 changed file
with
67 additions
and
0 deletions
Show diff stats
stim/biomodels/network.h
... | ... | @@ -90,6 +90,7 @@ class network{ |
90 | 90 | return ss.str(); |
91 | 91 | } |
92 | 92 | |
93 | + | |
93 | 94 | }; |
94 | 95 | |
95 | 96 | protected: |
... | ... | @@ -109,6 +110,72 @@ public: |
109 | 110 | return V.size(); |
110 | 111 | } |
111 | 112 | |
113 | + std::vector<vertex> operator*(T s){ | |
114 | + for (unsigned i=0; i< vertices; i ++ ){ | |
115 | + V[i] = V[i] * s; | |
116 | + } | |
117 | + return V; | |
118 | + } | |
119 | + | |
120 | + std::vector<vertex> operator*(vec<T> s){ | |
121 | + for (unsigned i=0; i< vertices; i ++ ){ | |
122 | + for (unsigned dim = 0 ; dim< 3; dim ++){ | |
123 | + V[i][dim] = V[i][dim] * s[dim]; | |
124 | + } | |
125 | + } | |
126 | + return V; | |
127 | + } | |
128 | + | |
129 | + // Returns an average of fiber/edge lengths in the network | |
130 | + double Lengths(){ | |
131 | + stim::vec<T> L;double sumLength = 0; | |
132 | + for(unsigned e = 0; e < E.size(); e++){ //for each edge in the network | |
133 | + L.push_back(E[e].length()); //append the edge length | |
134 | + sumLength = sumLength + E[e].length(); | |
135 | + } | |
136 | + double avg = sumLength / E.size(); | |
137 | + return avg; | |
138 | + } | |
139 | + | |
140 | + | |
141 | + // Returns an average of tortuosities in the network | |
142 | + double Tortuosities(){ | |
143 | + stim::vec<T> t; | |
144 | + 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; | |
151 | + for(unsigned e = 0; e < E.size(); e++){ //for each edge in the network | |
152 | + id1 = E[e][0]; //get the edge starting point | |
153 | + id2 = E[e][E[e].size() - 1]; //get the edge ending point | |
154 | + 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){ | |
166 | + tortuosity = E[e].length()/ distance ; // tortuoisty = edge length / edge displacement | |
167 | + } | |
168 | + else{ | |
169 | + tortuosity = 0;} | |
170 | + t.push_back(tortuosity); | |
171 | + sumTortuosity += tortuosity; | |
172 | + } | |
173 | + double avg = sumTortuosity / E.size(); | |
174 | + //std::cout<<"number of unique branch points"<<daughters.size()<<std::endl; | |
175 | + return avg; | |
176 | + } | |
177 | + | |
178 | + | |
112 | 179 | stim::cylinder<T> get_cylinder(unsigned f){ |
113 | 180 | return E[f]; //return the specified edge (casting it to a fiber) |
114 | 181 | } | ... | ... |