Constellation: Connectivity-based Structural Parcellation


bundleTools.h
Go to the documentation of this file.
1#ifndef CONSTELLATION_BUNDLETOOLS_H
2#define CONSTELLATION_BUNDLETOOLS_H
3
5#include <aims/sparsematrix/sparseMatrix.h>
8#include <aims/mesh/texture.h>
9#include <aims/data/data.h>
10
11
12//---------------------
13// ListenedFiberInfo
14//---------------------
15
16namespace constel {
17
19
21 {
22 public:
25 int id() const;
26 void setCurvilinearAbscissa(float value);
31 const constel::QuickMap & fiberIntersectionNeighDistMap,
32 int meshIntersectionMeshId);
33 const std::vector<constel::QuickMap> &
44 void setAntFiberPointMeshClosestPointIndex(std::size_t meshVertex_index);
47
48 protected:
49 int _id;
57 /* nb of intersection per mesh
58 _fiberMeshIntersectionNb[i] = fiber intersection nb with mesh i
59 ith mesh added to the BundleInteractionReader by addBundleListener */
60 std::vector<std::size_t> _fiberMeshIntersectionNbVector;
61 };
62
63
64 //---------------------------
65 // BundleInteractionReader
66 //---------------------------
101
102
103 //------------------------
104 // MemAntBundleListener
105 //------------------------
106 // always at the end of the BundleListenerList
107 // (of the associated BundleInteractionReader
108 // just records the point as being the previous one for the next one
110 public:
113 const aims::BundleInfo &,
114 const aims::FiberInfo &,
115 const aims::FiberPoint &);
117
118 private:
119 BundleInteractionReader * _bundleInteractionReader;
120 };
121
122
123 //--------------------------------------
124 // AfficheAntFiberPointBundleListener
125 //--------------------------------------
127 public:
129 BundleInteractionReader &bundleInteractionReader);
131 const aims::BundleInfo &,
132 const aims::FiberInfo &,
133 const aims::FiberPoint &);
135
136 private:
137 BundleInteractionReader * _bundleInteractionReader;
138 };
139
140
141 //-------------------------------------
142 // CurvilinearAbscissaBundleListener
143 //-------------------------------------
145 {
146 public:
148 BundleInteractionReader &bundleInteractionReader);
149 virtual void fiberStarted(const aims::BundleProducer &,
150 const aims::BundleInfo &,
151 const aims::FiberInfo &);
153 const aims::BundleInfo &,
154 const aims::FiberInfo &,
155 const aims::FiberPoint &);
157
158 private:
159 BundleInteractionReader * _bundleInteractionReader;
160
161 protected:
164 };
165
166
167 //----------------------------------
168 // MeshIntersectionBundleListener
169 //----------------------------------
171 public:
173 const AimsSurfaceTriangle &aimsMesh,
174 BundleInteractionReader &bundleInteractionReader,
175 double meshDistanceThreshold = 0.,
176 double meshClosestPointMaxDistance = 1., bool verbose = false);
177 virtual void fiberStarted(const aims::BundleProducer &,
178 const aims::BundleInfo &,
179 const aims::FiberInfo &);
181 const aims::BundleInfo &,
182 const aims::FiberInfo &);
184 const aims::BundleInfo &,
185 const aims::FiberInfo &,
186 const aims::FiberPoint &);
187 virtual void noMoreBundle(const aims::BundleProducer &);
188 void setMeshIdentity(int meshIdentity);
190
191 protected:
198
200 //For computing closest point to meshes in a fast computation time:
202 std::vector<QuickMap>
204
205 //For intersection computing:
209 //variables for count:
210 std::size_t _fiberPointCount;
211 };
212
213
214 //---------------------------------------------
215 // MeshIntersectionNoSmoothingBundleListener
216 //---------------------------------------------
217
219 : public aims::BundleListener
220 {
221 public:
223 const AimsSurfaceTriangle &aimsMesh,
224 BundleInteractionReader &bundleInteractionReader,
225 double meshClosestPointMaxDistance = 7., bool verbose = false);
226 virtual void fiberStarted(const aims::BundleProducer &,
227 const aims::BundleInfo &,
228 const aims::FiberInfo &);
230 const aims::BundleInfo &,
231 const aims::FiberInfo &);
233 const aims::BundleInfo &,
234 const aims::FiberInfo &,
235 const aims::FiberPoint &);
236 virtual void noMoreBundle(const aims::BundleProducer &);
237 void setMeshIdentity(int meshIdentity);
239
240 protected:
246
248 //For computing closest point to meshes in a fast computation time:
250
251 //For intersection computing:
255 //variables for count:
256 std::size_t _fiberPointCount;
257 std::size_t _fiberCount;
258 };
259
260
261 //---------------------------------------------------
262 // MeshIntersectionNoSmoothingFasterBundleListener
263 //---------------------------------------------------
264 // idem MeshIntersectionNoSmoothingBundleListener but before looking for an
265 // intersection, test if the fiberPoints are in the input rois mask
266 // (ribbon around the input Mesh, given by _roisMask)
267
270 public:
272 const AimsSurfaceTriangle &aimsMesh, AimsData<short> &roisMask,
273 BundleInteractionReader &bundleInteractionReader,
274 double meshClosestPointMaxDistance = 7., bool verbose = false);
275 virtual void fiberStarted(const aims::BundleProducer &,
276 const aims::BundleInfo &,
277 const aims::FiberInfo &);
279 const aims::BundleInfo &,
280 const aims::FiberInfo &);
282 const aims::BundleInfo &,
283 const aims::FiberInfo &,
284 const aims::FiberPoint &);
285 virtual void noMoreBundle(const aims::BundleProducer &);
286 void setMeshIdentity(int meshIdentity);
288
289 protected:
292 };
293
294
295 //---------------------------------------
296 // SavingMeshIntersectionBundleListener
297 //---------------------------------------
299 {
300 public:
302 BundleInteractionReader &bundleInteractionReader,
303 const std::string &fileName);
305 const aims::BundleInfo &,
306 const aims::FiberInfo &);
308
309 private:
310 BundleInteractionReader * _bundleInteractionReader;
311
312 protected:
313 std::string _fileName;//fiber names according to intersection points
314 std::fstream _file;
315 };
316
317
318 //---------------------------------------
319 // MeshIntersectionMatrixBundleListener
320 //---------------------------------------
321 // for one mesh first, of meshId = 0
323 public:
325 BundleInteractionReader &bundleInteractionReader, int meshIdentity,
326 unsigned meshVertexNb, const std::string &file_name = "",
327 const std::string &matrixRowsBundleNames_file_name = "",
328 int bundlesNb = 1);
330 const aims::BundleInfo &);
332 const aims::BundleInfo &,
333 const aims::FiberInfo &);
334 virtual void noMoreBundle(const aims::BundleProducer &bundleProducer);
336
337 private:
338 BundleInteractionReader * _bundleInteractionReader;
339 int _meshIdentity;
340 unsigned _meshVertexNb;
341 aims::SparseMatrix _meshIntersectionsMatrix;
342 std::string _file_name;
343 std::string _matrixRowsBundleNames_file_name;
344 std::fstream _matrixRowsBundleNames_file;
345 int _bundlesNb;
346 int _bundlesCount;
347 };
348
349
350 //--------------------------------------------------
351 // MeshIntersectionMatrixWithLengthBundleListener
352 //--------------------------------------------------
353 // for one mesh first, of meshId = 0, and one bundles per region
354 // (basal ganglia for exemple)
355 // idem MeshIntersectionMatrixBundleListener, but each connectivity value is
356 // weighted with the fiber tract length
358 : public aims::BundleListener {
359 public:
361 BundleInteractionReader &bundleInteractionReader, int meshIdentity,
362 unsigned meshVertexNb, const std::string &file_name = "",
363 const std::string &matrixRowsBundleNames_file_name = "",
364 int bundlesNb = 1);
366 const aims::BundleInfo &);
368 const aims::BundleInfo &,
369 const aims::FiberInfo &);
370 virtual void noMoreBundle(const aims::BundleProducer &bundleProducer);
372
373
374 private:
375 BundleInteractionReader * _bundleInteractionReader;
376 int _meshIdentity;
377 unsigned _meshVertexNb;
378 aims::SparseMatrix _meshIntersectionsMatrix;
379 std::string _file_name;
380 std::string _matrixRowsBundleNames_file_name;
381 std::fstream _matrixRowsBundleNames_file;
382 int _bundlesNb;
383 int _bundlesCount;
384 };
385
386
387 //-------------------------------
388 // MeshConnectionBundleListener
389 //-------------------------------
390 // for one mesh first, of meshId = 0
392 public:
394 BundleInteractionReader &bundleInteractionReader, int meshIdentity,
395 bool verbose = false);
397 const aims::BundleInfo &,
398 const aims::FiberInfo &);
399 boost::shared_ptr<constel::BundleConnections>
401 {return _bundleMeshConnections;}
402 boost::shared_ptr<constel::ConnectionsLength>
404 {return _bundleMeshConnectionsLength;}
405 std::vector< double >
407 {return _bundleMeshConnectionsWeights;}
409
410
411 private:
412 BundleInteractionReader * _bundleInteractionReader;
413 int _meshIdentity;
414 bool _verbose;
415 boost::shared_ptr<constel::BundleConnections> _bundleMeshConnections;
416 boost::shared_ptr<constel::ConnectionsLength> _bundleMeshConnectionsLength;
417 std::vector< double > _bundleMeshConnectionsWeights;
418 unsigned _bundleMeshConnectionsCount;
419 };
420
421
422 //------------------------------------------
423 // MeshHistoLengthConnectionBundleListener
424 //------------------------------------------
425 //for one mesh first, of meshId = 0
427 : public aims::BundleListener {
428 public:
430 BundleInteractionReader &bundleInteractionReader, int meshIdentity,
431 unsigned meshVertexNb, int connectionLengthMin,
432 int connectionLengthMax, double meshDistanceThreshold = 0.);
434 const aims::BundleInfo &,
435 const aims::FiberInfo &);
436 boost::shared_ptr<AimsData< float > >
438 {return _meshConnectionsHistoLength_ptr;}
440
441
442 private:
443 BundleInteractionReader * _bundleInteractionReader;
444 int _meshIdentity;
445 unsigned _bundleMeshConnectionsCount;
446 unsigned _meshVertexNb;
447
448 //For histogram creation:
449 boost::shared_ptr<AimsData< float > > _meshConnectionsHistoLength_ptr;
450 AimsData< float > &_meshConnectionsHistoLength;
451 int _connectionLengthMin;
452 // correspond to mm, corresponding to a python histogram,
453 // with bins = range(_connectionLengthMin,_connectionLengthMax+1)
454 int _connectionLengthMax;
455
456 //For smoothing:
457 double _meshDistanceThreshold;
458 double _two_pi;
459 double _square_sigma;
460 };
461
462
463 //------------------------------------------------------
464 // FiberNameAccordingToMeshIntersectionBundleListener
465 //------------------------------------------------------
467 : public aims::BundleListener
468 {
469 public:
471 BundleInteractionReader &bundleInteractionReader,
472 const std::string &fileName);
474 const aims::BundleInfo &,
475 const aims::FiberInfo &);
477
478 private:
479 BundleInteractionReader * _bundleInteractionReader;
480
481 protected:
482 std::string _fileName; //fiber names according to intersection points
483 std::fstream _file;
484 };
485
486
487 //------------------------------------------------------------
488 // FiberNameAccordingToMeshTextureIntersectionBundleListener
489 //------------------------------------------------------------
491 : public aims::BundleListener {
492 public:
494 BundleInteractionReader &bundleInteractionReader,
495 const TimeTexture<short> &labeled_tex, const std::string &fileName);
496 virtual void fiberStarted(const aims::BundleProducer &,
497 const aims::BundleInfo &,
498 const aims::FiberInfo &);
500 const aims::BundleInfo &,
501 const aims::FiberInfo &,
502 const aims::FiberPoint &);
504 const aims::BundleInfo &,
505 const aims::FiberInfo &);
507
508 private:
509 BundleInteractionReader * _bundleInteractionReader;
510
511 protected:
512 std::string _fileName; //fiber names according to intersection points
513 std::fstream _file;
516 };
517
518
519 //-----------------------------------------------
520 // SubSamplerFromMeshIntersectionBundleListener
521 //-----------------------------------------------
524 {
525 public:
527 BundleInteractionReader &bundleInteractionReader, int step);
528 virtual void bundleStarted(const aims::BundleProducer &bundleProducer,
529 const aims::BundleInfo &bundleInfo);
531 const aims::BundleInfo &);
532 virtual void fiberStarted(const aims::BundleProducer &bundleProducer,
533 const aims::BundleInfo &bundleInfo,
534 const aims::FiberInfo &fiberInfo);
535 virtual void newFiberPoint(const aims::BundleProducer &bundleProducer,
536 const aims::BundleInfo &bundleInfo,
537 const aims::FiberInfo &fiberInfo,
538 const aims::FiberPoint &point);
540 const aims::BundleInfo &,
541 const aims::FiberInfo &);
542 virtual void noMoreBundle(const aims::BundleProducer &bundleProducer);
544
545 private:
546 BundleInteractionReader * _bundleInteractionReader;
547
548 protected:
552 std::vector<std::string> _names;
553 int _step;
554 std::size_t _fiberPointCount;
555 };
556
557} //namespace constel
558#endif // ifndef CONSTELLATION_BUNDLETOOLS_H
virtual void newFiberPoint(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &, const aims::FiberPoint &)
AfficheAntFiberPointBundleListener(BundleInteractionReader &bundleInteractionReader)
(2022/10/10 reverse engineering, Denis) This class is a BundleReader with an additional protected var...
Definition bundleTools.h:77
friend class MeshHistoLengthConnectionBundleListener
Definition bundleTools.h:89
friend class CurvilinearAbscissaBundleListener
Definition bundleTools.h:85
friend class MeshIntersectionMatrixBundleListener
Definition bundleTools.h:95
friend class SubSamplerFromMeshIntersectionBundleListener
Definition bundleTools.h:91
friend class MeshIntersectionMatrixWithLengthBundleListener
Definition bundleTools.h:96
friend class MeshIntersectionNoSmoothingBundleListener
Definition bundleTools.h:93
ListenedFiberInfo _listenedFiberInfo
Definition bundleTools.h:99
friend class MeshIntersectionNoSmoothingFasterBundleListener
Definition bundleTools.h:94
friend class FiberNameAccordingToMeshTextureIntersectionBundleListener
Definition bundleTools.h:92
friend class MeshIntersectionBundleListener
Definition bundleTools.h:86
BundleInteractionReader(const std::string &fileName)
friend class FiberNameAccordingToMeshIntersectionBundleListener
Definition bundleTools.h:90
friend class SavingMeshIntersectionBundleListener
Definition bundleTools.h:87
friend class AfficheAntFiberPointBundleListener
Definition bundleTools.h:84
friend class MeshConnectionBundleListener
Definition bundleTools.h:88
virtual void fiberStarted(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
CurvilinearAbscissaBundleListener(BundleInteractionReader &bundleInteractionReader)
virtual void newFiberPoint(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &, const aims::FiberPoint &)
virtual void fiberTerminated(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
FiberNameAccordingToMeshIntersectionBundleListener(BundleInteractionReader &bundleInteractionReader, const std::string &fileName)
FiberNameAccordingToMeshTextureIntersectionBundleListener(BundleInteractionReader &bundleInteractionReader, const TimeTexture< short > &labeled_tex, const std::string &fileName)
virtual void fiberTerminated(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
virtual void fiberStarted(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
virtual void newFiberPoint(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &, const aims::FiberPoint &)
std::vector< int > getFiberMeshIntersectionMeshIdentityVector() const
Definition bundleTools.h:38
const std::vector< constel::QuickMap > & getFiberIntersectionNeighDistMapVector() const
Definition bundleTools.h:34
void pushBackMeshIntersectionNeighbourhood(const constel::QuickMap &fiberIntersectionNeighDistMap, int meshIntersectionMeshId)
std::vector< QuickMap > _fiberIntersectionNeighDistMapVector
Definition bundleTools.h:54
std::vector< float > _fiberMeshIntersectionCurvilinearAbscissaVector
Definition bundleTools.h:55
void setAntFiberPointMeshClosestPointIndex(std::size_t meshVertex_index)
std::vector< std::size_t > _fiberMeshIntersectionNbVector
Definition bundleTools.h:60
std::vector< int > _fiberMeshIntersectionMeshIdentityVector
Definition bundleTools.h:56
aims::FiberPoint _antFiberPoint
Definition bundleTools.h:51
bool getAntFiberPointExistingMeshIntersection() const
Definition bundleTools.h:42
void setCurvilinearAbscissa(float value)
float getCurvilinearAbscissa() const
Definition bundleTools.h:27
std::size_t _antFiberPointMeshClosestPoint_index
Definition bundleTools.h:53
void setAntFiberPointExistingMeshIntersection(bool intersect)
void setAntFiberPoint(aims::FiberPoint antFiberPoint)
std::size_t getAntFiberPointMeshClosestPointIndex() const
Definition bundleTools.h:45
aims::FiberPoint getAntFiberPoint() const
Definition bundleTools.h:29
std::vector< float > getFiberMeshIntersectionCurvilinearAbscissaVector() const
Definition bundleTools.h:36
virtual void newFiberPoint(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &, const aims::FiberPoint &)
MemAntBundleListener(BundleInteractionReader &bundleInteractionReader)
virtual void fiberTerminated(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
boost::shared_ptr< constel::BundleConnections > getBundleMeshConnections() const
boost::shared_ptr< constel::ConnectionsLength > getBundleMeshConnectionsLength() const
std::vector< double > getBundleMeshConnectionsWeights() const
MeshConnectionBundleListener(BundleInteractionReader &bundleInteractionReader, int meshIdentity, bool verbose=false)
virtual void fiberTerminated(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
boost::shared_ptr< AimsData< float > > getBundleMeshConnectionsHistoLength() const
MeshHistoLengthConnectionBundleListener(BundleInteractionReader &bundleInteractionReader, int meshIdentity, unsigned meshVertexNb, int connectionLengthMin, int connectionLengthMax, double meshDistanceThreshold=0.)
PolygonsByVertexIndex _meshPolygonsByVertex_Index
virtual void fiberTerminated(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
virtual void fiberStarted(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
virtual void noMoreBundle(const aims::BundleProducer &)
std::vector< QuickMap > _meshDistanceThresholdNeighborhoodByVertex
void setMeshIdentity(int meshIdentity)
MeshIntersectionBundleListener(const AimsSurfaceTriangle &aimsMesh, BundleInteractionReader &bundleInteractionReader, double meshDistanceThreshold=0., double meshClosestPointMaxDistance=1., bool verbose=false)
const AimsSurfaceTriangle & _aimsMesh
virtual void newFiberPoint(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &, const aims::FiberPoint &)
BundleInteractionReader * _bundleInteractionReader
virtual void noMoreBundle(const aims::BundleProducer &bundleProducer)
virtual void bundleStarted(const aims::BundleProducer &, const aims::BundleInfo &)
MeshIntersectionMatrixBundleListener(BundleInteractionReader &bundleInteractionReader, int meshIdentity, unsigned meshVertexNb, const std::string &file_name="", const std::string &matrixRowsBundleNames_file_name="", int bundlesNb=1)
virtual void fiberTerminated(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
virtual void bundleStarted(const aims::BundleProducer &, const aims::BundleInfo &)
virtual void fiberTerminated(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
MeshIntersectionMatrixWithLengthBundleListener(BundleInteractionReader &bundleInteractionReader, int meshIdentity, unsigned meshVertexNb, const std::string &file_name="", const std::string &matrixRowsBundleNames_file_name="", int bundlesNb=1)
virtual void noMoreBundle(const aims::BundleProducer &bundleProducer)
virtual void noMoreBundle(const aims::BundleProducer &)
virtual void fiberStarted(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
virtual void newFiberPoint(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &, const aims::FiberPoint &)
virtual void fiberTerminated(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
MeshIntersectionNoSmoothingBundleListener(const AimsSurfaceTriangle &aimsMesh, BundleInteractionReader &bundleInteractionReader, double meshClosestPointMaxDistance=7., bool verbose=false)
virtual void newFiberPoint(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &, const aims::FiberPoint &)
virtual void noMoreBundle(const aims::BundleProducer &)
virtual void fiberTerminated(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
MeshIntersectionNoSmoothingFasterBundleListener(const AimsSurfaceTriangle &aimsMesh, AimsData< short > &roisMask, BundleInteractionReader &bundleInteractionReader, double meshClosestPointMaxDistance=7., bool verbose=false)
virtual void fiberStarted(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
virtual void fiberTerminated(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
SavingMeshIntersectionBundleListener(BundleInteractionReader &bundleInteractionReader, const std::string &fileName)
virtual void bundleStarted(const aims::BundleProducer &bundleProducer, const aims::BundleInfo &bundleInfo)
SubSamplerFromMeshIntersectionBundleListener(BundleInteractionReader &bundleInteractionReader, int step)
virtual void newFiberPoint(const aims::BundleProducer &bundleProducer, const aims::BundleInfo &bundleInfo, const aims::FiberInfo &fiberInfo, const aims::FiberPoint &point)
virtual void noMoreBundle(const aims::BundleProducer &bundleProducer)
virtual void fiberStarted(const aims::BundleProducer &bundleProducer, const aims::BundleInfo &bundleInfo, const aims::FiberInfo &fiberInfo)
virtual void bundleTerminated(const aims::BundleProducer &, const aims::BundleInfo &)
virtual void fiberTerminated(const aims::BundleProducer &, const aims::BundleInfo &, const aims::FiberInfo &)
aims::Polyline::Point_t FiberPoint
KDTree::KDTree< 3, std::pair< uint, Point3df >, Bracket_accessor_PointIndex< Point3df > > KDTree
Definition tildefs.h:46
std::vector< std::pair< std::size_t, double > > QuickMap
std::vector< std::set< unsigned > > PolygonsByVertexIndex
std::vector< Fiber > Fibers
Definition bundleSet.h:9
std::vector< Point > Fiber
Definition bundleSet.h:8
std::vector< Fibers > BundlesSet
Definition bundleSet.h:10
AIMSDATA_API AimsTimeSurface< 3, Void > AimsSurfaceTriangle