aimsdata  4.7.0
Neuroimaging data handling
bundles.h
Go to the documentation of this file.
1 /* Copyright (c) 1995-2005 CEA
2  *
3  * This software and supporting documentation were developed by
4  * CEA/DSV/SHFJ
5  * 4 place du General Leclerc
6  * 91401 Orsay cedex
7  * France
8  *
9  * This software is governed by the CeCILL license version 2 under
10  * French law and abiding by the rules of distribution of free software.
11  * You can use, modify and/or redistribute the software under the
12  * terms of the CeCILL license version 2 as circulated by CEA, CNRS
13  * and INRIA at the following URL "http://www.cecill.info".
14  *
15  * As a counterpart to the access to the source code and rights to copy,
16  * modify and redistribute granted by the license, users are provided only
17  * with a limited warranty and the software's author, the holder of the
18  * economic rights, and the successive licensors have only limited
19  * liability.
20  *
21  * In this respect, the user's attention is drawn to the risks associated
22  * with loading, using, modifying and/or developing or reproducing the
23  * software by the user in light of its specific status of free software,
24  * that may mean that it is complicated to manipulate, and that also
25  * therefore means that it is reserved for developers and experienced
26  * professionals having in-depth computer knowledge. Users are therefore
27  * encouraged to load and test the software's suitability as regards their
28  * requirements in conditions enabling the security of their systems and/or
29  * data to be ensured and, more generally, to use and operate it in the
30  * same conditions as regards security.
31  *
32  * The fact that you are presently reading this means that you have had
33  * knowledge of the CeCILL license version 2 and that you accept its terms.
34  */
35 
36 #ifndef AIMS_FIBERS_BUNDLES_H
37 #define AIMS_FIBERS_BUNDLES_H
38 
39 #include <aims/curve/curve.h>
40 #include <aims/mesh/surface.h>
41 #include <aims/vector/vector.h>
42 #include <aims/resampling/motion.h>
43 #include <aims/io/motionR.h>
44 #include <aims/roi/roiIterator.h>
45 #include <graph/graph/graph.h>
46 #include <cartobase/smart/rcptr.h>
49 #include <fstream>
50 #include <vector>
51 #include <map>
52 #include <string>
53 
54 
55 namespace aims
56 {
57 
58 
59  //----------//
60  // Bundle //
61 //----------//
62 
63 class Bundle : public std::vector< aims::Polyline >
64 {
65 };
66 
67 
68  //-----------//
69  // Bundles //
70 //-----------//
71 
72 class Bundles : public std::map< std::string, Bundle >
73 {
74 };
75 
76 
77  //------------------------------------------------//
78  // Froward classes, smart pointers and typedefs //
79 //------------------------------------------------//
80 
81 class Bundle;
82 class BundleListener;
84 
88 
90 
91 
92  //-------------//
93  // FiberInfo //
94 //-------------//
95 
96 class FiberInfo
97 {
98 public:
99 
100  inline FiberInfo();
101  inline FiberInfo( int id );
102  inline int id() const;
103 
104 protected:
105 
106  int _id;
107 };
108 
109 
110  //--------------//
111  // BundleInfo //
112 //--------------//
113 
115 {
116 public:
117 
118  inline BundleInfo();
119  inline BundleInfo( const std::string &name );
120  inline BundleInfo( int id );
121  inline BundleInfo( int id, const std::string &name );
122  inline int id() const;
123  inline std::string name() const;
124 
125 protected:
126 
127  int _id;
128  std::string _name;
129 };
130 
131 
132  //------------------//
133  // BundleListener //
134 //------------------//
135 
153 {
154 protected:
155 
156  friend class BundleProducer;
157 
158  virtual void bundleStarted( const BundleProducer &, const BundleInfo & ) ;
159  virtual void bundleTerminated( const BundleProducer &, const BundleInfo & );
160  virtual void fiberStarted( const BundleProducer &, const BundleInfo &,
161  const FiberInfo & );
162  virtual void fiberTerminated( const BundleProducer &, const BundleInfo &,
163  const FiberInfo & );
164  virtual void newFiberPoint( const BundleProducer &, const BundleInfo &,
165  const FiberInfo &, const FiberPoint & );
166  virtual void noMoreBundle( const BundleProducer & );
167 
168 public:
169  virtual ~BundleListener();
170 };
171 
172 
173  //------------------//
174  // BundleProducer //
175 //------------------//
176 
186 {
187 public:
188 
189  void addBundleListener( BundleListener & );
190 
191 protected:
192 
193  void startBundle( const BundleInfo & );
194  void terminateBundle( const BundleInfo & );
195  void startFiber( const BundleInfo &, const FiberInfo & );
196  void terminateFiber( const BundleInfo &, const FiberInfo & );
197  void addFiberPoint( const BundleInfo &, const FiberInfo &,
198  const FiberPoint & );
199  void noMoreBundle();
200 
201 private:
202 
203  typedef std::vector< BundleListener * > BundleListenerList;
204  BundleListenerList _bundleListeners;
205 };
206 
207 
208 
209  //----------------//
210  // BundleWriter //
211 //----------------//
212 
213 // WARNING : This class should be a real writer in aimsdata but I prefer to
214 // keep it here until the format is a bit more stable.
215 
222 class BundleWriter : public virtual BundleListener, public carto::PropertySet
223 {
224 public:
225 
226  BundleWriter();
228  void setFileString( const std::string &fileName );
229  virtual ~BundleWriter();
230 
231  typedef std::vector< FiberPoint > FiberPoints;
232 
233  virtual void bundleStarted( const BundleProducer &, const BundleInfo & );
234  virtual void bundleTerminated( const BundleProducer &, const BundleInfo & );
235  virtual void fiberStarted( const BundleProducer &, const BundleInfo &,
236  const FiberInfo & );
237  virtual void fiberTerminated( const BundleProducer &, const BundleInfo &,
238  const FiberInfo & );
239  virtual void newFiberPoint( const BundleProducer &, const BundleInfo &,
240  const FiberInfo &, const FiberPoint & );
241  virtual void noMoreBundle( const BundleProducer & );
242  virtual void checkStreams();
243  virtual void addFiber( const BundleProducer &, const BundleInfo &,
244  const FiberInfo &, FiberPoint*, int &);
245 
246 protected:
247  int _ascii;
248  std::string _fileName;
250  std::ofstream _dataFile;
253  FiberPoints _fiberPoints;
254 };
255 
256 
257 
258  //----------------//
259  // BundleReader //
260 //----------------//
261 
262 // WARNING : This class should be a real writer in aimsdata but I prefer to
263 // keep it here until the format is a bit more stable.
264 
273 {
274 public:
275 
276  BundleReader( const std::string &fileName );
277  virtual ~BundleReader();
278 
281  void read();
282  virtual carto::Object readHeader();
283 
284 protected:
285 
286  virtual void bundleStarted( const BundleProducer &, const BundleInfo & );
287  virtual void bundleTerminated( const BundleProducer &, const BundleInfo & );
288  virtual void fiberStarted( const BundleProducer &, const BundleInfo &,
289  const FiberInfo & );
290  virtual void fiberTerminated( const BundleProducer &, const BundleInfo &,
291  const FiberInfo & );
292  virtual void newFiberPoint( const BundleProducer &, const BundleInfo &,
293  const FiberInfo &, const FiberPoint & );
294  virtual void noMoreBundle( const BundleProducer & );
295 
296 private:
297 
298  std::string _fileName;
299 };
300 
301 
302  //----------------------//
303  // BundleFormatReader //
304 //----------------------//
305 
306 // WARNING : This class should be a real writer in aimsdata but I prefer to
307 // keep it here until the format is a bit more stable.
308 
312 {
313 public:
314 
316  virtual ~BundleFormatReader();
317 
318  virtual void read() = 0;
319  virtual carto::Object readHeader();
320 
321 private:
322 
323  std::string _fileName;
324 };
325 
326 
332 {
333 public:
334 
335  ConnectomistBundlesReader( const std::string &fileName );
336  virtual ~ConnectomistBundlesReader();
337 
338  virtual void read();
339  virtual carto::Object readHeader();
340 
341 private:
342 
343  std::string _fileName;
344 };
345 
346 
347  //-----------------//
348  // BundleToGraph //
349 //-----------------//
350 
360  virtual public carto::PropertySet
361 {
362 public:
363 
364  BundleToGraph();
365  BundleToGraph( Graph & );
366  virtual ~BundleToGraph();
367 
368  inline const carto::rc_ptr< Graph > &getGraph() const;
369 
370 protected:
371 
372  virtual void bundleStarted( const BundleProducer &, const BundleInfo & );
373  virtual void bundleTerminated( const BundleProducer &, const BundleInfo & );
374  virtual void fiberStarted( const BundleProducer &, const BundleInfo &,
375  const FiberInfo & );
376  virtual void fiberTerminated( const BundleProducer &, const BundleInfo &,
377  const FiberInfo & );
378  virtual void newFiberPoint( const BundleProducer &, const BundleInfo &,
379  const FiberInfo &, const FiberPoint & );
380  virtual void noMoreBundle( const BundleProducer & );
381  virtual void parametersValueChanged();
382  void parameterChangedSlot( const carto::Object &, const std::string &,
383  const carto::Object & );
384  void shuffleBundle();
385 
389  float _width;
391  std::vector< Point2df > _section;
392  std::vector<int> _boundingbox_min;
393  std::vector<int> _boundingbox_max;
397 
403 };
404 
405 
406 
407  //-----------------------//
408  // BundleToGraphWriter //
409 //-----------------------//
410 
412 {
413 public:
414 
415  inline virtual ~BundleToGraphWriter();
416 
417  void setFileString( const std::string & );
418 
419 protected:
420 
421  virtual void noMoreBundle( const BundleProducer & );
422 
423 private:
424 
425  std::string _fileName;
426 };
427 
428 
429  //------------------//
430  // BundleROISplit //
431 //------------------//
432 
434 {
435 public:
436 
438  bool keepOriginalBundle = false );
439  virtual ~BundleROISplit();
440 
441 protected:
442 
443  virtual void bundleStarted( const BundleProducer &, const BundleInfo & );
444  virtual void bundleTerminated( const BundleProducer &, const BundleInfo & );
445  virtual void fiberStarted( const BundleProducer &, const BundleInfo &,
446  const FiberInfo & );
447  virtual void fiberTerminated( const BundleProducer &, const BundleInfo &,
448  const FiberInfo & );
449  virtual void newFiberPoint( const BundleProducer &, const BundleInfo &,
450  const FiberInfo &, const FiberPoint & );
451  virtual void noMoreBundle( const BundleProducer & );
452 
453 private:
454 
456 
457  typedef std::vector< FiberPoint > FiberPoints;
458  typedef std::vector< FiberPoints > Fibers;
459 
460  std::map< std::string, std::map< std::pair<int,int>, Fibers > >
461  _result;
462 
463  int _currentLabel;
464  int _lastLabel;
465  FiberPoints _currentPoints;
466  bool _keepOriginalBundle;
467 };
468 
469 
470 
471  //-------------------//
472  // BundleROISelect //
473 //-------------------//
474 
476 {
477 public:
478 
480  const std::string &,
481  float defaultROIMinimumOverlap = 0 );
482  virtual ~BundleROISelect();
483 
484 protected:
485 
486  virtual void bundleStarted( const BundleProducer &, const BundleInfo & );
487  virtual void bundleTerminated( const BundleProducer &, const BundleInfo & );
488  virtual void fiberStarted( const BundleProducer &, const BundleInfo &,
489  const FiberInfo & );
490  virtual void fiberTerminated( const BundleProducer &, const BundleInfo &,
491  const FiberInfo & );
492  virtual void newFiberPoint( const BundleProducer &, const BundleInfo &,
493  const FiberInfo &, const FiberPoint & );
494  virtual void noMoreBundle( const BundleProducer & );
495 
496 private:
497 
499 
500  typedef std::vector< FiberPoint > FiberPoints;
501 
502  std::vector< uint32_t > _crossedROI;
503  FiberPoints _currentPoints;
504  std::map< std::string, std::vector< FiberPoints > > _result;
505 
506  struct SelectionRule
507  {
508  std::string name;
509  uint32_t min, max;
510  std::vector< bool > mustBeCrossed;
511  };
512  std::vector< SelectionRule > _selectionRules;
513  float _defaultROIMinimumOverlap;
514 };
515 
516 
517 
518  //----------------//
519  // BundleMotion //
520 //----------------//
521 
523 {
524 public:
525 
526  BundleMotion( const std::string & );
527  BundleMotion( const Motion & );
528  virtual ~BundleMotion();
529 
530 protected:
531 
532  virtual void bundleStarted( const BundleProducer &, const BundleInfo & );
533  virtual void bundleTerminated( const BundleProducer &, const BundleInfo & );
534  virtual void fiberStarted( const BundleProducer &, const BundleInfo &,
535  const FiberInfo & );
536  virtual void fiberTerminated( const BundleProducer &, const BundleInfo &,
537  const FiberInfo & );
538  virtual void newFiberPoint( const BundleProducer &, const BundleInfo &,
539  const FiberInfo &, const FiberPoint & );
540  virtual void noMoreBundle( const BundleProducer & );
541 
542 private:
543 
544  Motion _motion;
545 };
546 
547 
548  //------------------//
549  // CurveSelection //
550 //------------------//
551 
553 {
554 public:
555 
556  CurveSelection( const double &minimumLength );
557  virtual ~CurveSelection();
558 
559 protected:
560 
561  typedef std::vector< FiberPoint > FiberPoints;
562 
563  virtual void bundleStarted( const BundleProducer &, const BundleInfo & );
564  virtual void bundleTerminated( const BundleProducer &, const BundleInfo & );
565  virtual void fiberStarted( const BundleProducer &, const BundleInfo &,
566  const FiberInfo & );
567  virtual void fiberTerminated( const BundleProducer &, const BundleInfo &,
568  const FiberInfo & );
569  virtual void newFiberPoint( const BundleProducer &, const BundleInfo &,
570  const FiberInfo &, const FiberPoint & );
571  virtual void noMoreBundle( const BundleProducer & );
572 
573 private:
574 
575  double _minimumLength;
576  double _currentLength;
577  FiberPoints _currentPoints;
578 };
579 
580 
581  //--------------------//
582  // CurveOrientation //
583 //--------------------//
584 
586 {
587 public:
588 
590  virtual ~CurveOrientation();
591 
592 protected:
593 
594  typedef std::vector< FiberPoint > FiberPoints;
595 
596  virtual void bundleStarted( const BundleProducer &, const BundleInfo & );
597  virtual void bundleTerminated( const BundleProducer &, const BundleInfo & );
598  virtual void fiberStarted( const BundleProducer &, const BundleInfo &,
599  const FiberInfo & );
600  virtual void fiberTerminated( const BundleProducer &, const BundleInfo &,
601  const FiberInfo & );
602  virtual void newFiberPoint( const BundleProducer &, const BundleInfo &,
603  const FiberInfo &, const FiberPoint & );
604  virtual void noMoreBundle( const BundleProducer & );
605 
606 private:
607 
608  FiberPoint _beginSum;
610  FiberPoints _currentPoints;
611 };
612 
613 
614 
615 
616  //-------------//
617  // FiberInfo //
618 //-------------//
619 
620 //-----------------------------------------------------------------------------
622 {}
623 
624 
625 //-----------------------------------------------------------------------------
626 inline FiberInfo::FiberInfo( int id ) :
627  _id( id )
628 {}
629 
630 
631 //-----------------------------------------------------------------------------
632 inline int FiberInfo::id() const
633 {
634  return _id;
635 }
636 
637 
638 
639  //--------------//
640  // BundleInfo //
641 //--------------//
642 
643 //-----------------------------------------------------------------------------
645 {}
646 
647 
648 //-----------------------------------------------------------------------------
649 inline BundleInfo::BundleInfo( const std::string &name ) :
650  _name( name )
651 {}
652 
653 
654 //-----------------------------------------------------------------------------
655 inline BundleInfo::BundleInfo( int id ) :
656  _id( id )
657 {}
658 
659 
660 //-----------------------------------------------------------------------------
661 inline BundleInfo::BundleInfo( int id, const std::string &name ) :
662  _id( id ), _name( name )
663 {}
664 
665 
666 //-----------------------------------------------------------------------------
667 inline std::string BundleInfo::name() const
668 {
669  return _name;
670 }
671 
672 
673 //-----------------------------------------------------------------------------
674 inline int BundleInfo::id() const
675 {
676  return _id;
677 }
678 
679 
680 
681  //-----------------//
682  // BundleToGraph //
683 //-----------------//
684 
685 //-----------------------------------------------------------------------------
687 {
688  return _rcptrMeshResult;
689 }
690 
691 
692  //-----------------------//
693  // BundleToGraphWriter //
694 //-----------------------//
695 
696 //-----------------------------------------------------------------------------
698 {
699 }
700 
701 } // namespace comist
702 
703 #endif // ifndef AIMS_FIBERS_BUNDLES_H
std::string _name
Definition: bundles.h:128
carto::rc_ptr< AimsSurfaceTriangle > _currentMesh
Definition: bundles.h:400
float _minimumLength
Definition: bundles.h:388
std::vector< FiberPoint > FiberPoints
Definition: bundles.h:594
std::string name() const
Definition: bundles.h:667
Graph * _meshResult
Definition: bundles.h:386
std::vector< FiberPoint > FiberPoints
Definition: bundles.h:231
Reads a bundles file, and emits events while walking through its data.
Definition: bundles.h:272
Serial processing of bundles.
Definition: bundles.h:152
T max(const Volume< T > &vol)
carto::rc_ptr< AimsTimeSurface< 2, Void > > _currentLines
Definition: bundles.h:401
bool _normalsAsFiberStartPos
Definition: bundles.h:394
std::vector< Fiber > Fibers
Definition: bundleRegroup.h:51
Point3df _relatveFiberStartPos
Definition: bundles.h:395
The class for EcatSino data write operation.
Definition: border.h:42
carto::rc_ptr< Graph > _rcptrMeshResult
Definition: bundles.h:387
std::vector< int > _boundingbox_max
Definition: bundles.h:393
carto::rc_ptr< BundleListener > RBundleListener
Definition: bundles.h:86
virtual ~BundleToGraphWriter()
Definition: bundles.h:697
Connectomist .bundles format reader.
Definition: bundles.h:331
std::ofstream _dataFile
Definition: bundles.h:250
T min(const Volume< T > &vol)
Vertex * _currentVertex
Definition: bundles.h:398
float Scalar_t
Definition: curve.h:54
int _firstFiberInBundle
Definition: bundles.h:251
const carto::rc_ptr< Graph > & getGraph() const
Definition: bundles.h:686
bool _autoFiberStartPos
Definition: bundles.h:396
Virtual base class for bundles/fibers file formats support.
Definition: bundles.h:311
std::vector< Point2df > _section
Definition: bundles.h:391
Serial processing of bundles.
Definition: bundles.h:185
std::string _fileName
Definition: bundles.h:248
size_t _current_fibers_count
Definition: bundles.h:402
FiberPoints _fiberPoints
Definition: bundles.h:253
int id() const
Definition: bundles.h:674
std::vector< FiberPoint > FiberPoints
Definition: bundles.h:561
int _writtenFibersCount
Definition: bundles.h:252
int id() const
Definition: bundles.h:632
aims::Polyline _currentCurve
Definition: bundles.h:399
Writes bundles information to a bundles file.
Definition: bundles.h:222
carto::rc_ptr< BundleProducer > RBundleProducer
Definition: bundles.h:87
int _numPointsInMeshSection
Definition: bundles.h:390
carto::rc_ptr< Bundle > RBundle
Definition: bundles.h:83
carto::Object _header
Definition: bundles.h:249
Affine 3D transformation.
Bundles structure building as a Graph.
Definition: bundles.h:359
aims::Polyline::Point_t FiberPoint
Definition: bundles.h:89
std::vector< int > _boundingbox_min
Definition: bundles.h:392