OpenWalnut  1.2.5
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
WDataSetDTI.h
1 //---------------------------------------------------------------------------
2 //
3 // Project: OpenWalnut ( http://www.openwalnut.org )
4 //
5 // Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS
6 // For more information see http://www.openwalnut.org/copying
7 //
8 // This file is part of OpenWalnut.
9 //
10 // OpenWalnut is free software: you can redistribute it and/or modify
11 // it under the terms of the GNU Lesser General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // OpenWalnut is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public License
21 // along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>.
22 //
23 //---------------------------------------------------------------------------
24 
25 #ifndef WDATASETDTI_H
26 #define WDATASETDTI_H
27 
28 #include <boost/shared_ptr.hpp>
29 
30 #include "../common/math/WTensorSym.h"
31 #include "WDataSetSingle.h"
32 #include "WExportDataHandler.h"
33 
34 /**
35  * Represents a Diffusion-Tensor-Image dataset. Diffusion tensors are symmetric matrices.
36  */
38 {
39 public:
40  /**
41  * Creates a new DTI dataset out of a value set and a grid.
42  *
43  * \param newValueSet Valueset having vectors of dimension 6.
44  * \param newGrid
45  */
46  WDataSetDTI( boost::shared_ptr< WValueSetBase > newValueSet, boost::shared_ptr< WGrid > newGrid );
47 
48  /**
49  * Destructs this dataset.
50  */
51  ~WDataSetDTI();
52 
53  /**
54  * Creates a copy (clone) of this instance but allows to change the valueset. Unlike copy construction, this is a very useful function if you
55  * want to keep the dynamic type of your dataset even if you just have a WDataSetSingle.
56  *
57  * \param newValueSet the new valueset.
58  *
59  * \return the clone
60  */
61  virtual WDataSetSingle::SPtr clone( boost::shared_ptr< WValueSetBase > newValueSet ) const;
62 
63  /**
64  * Creates a copy (clone) of this instance but allows to change the grid. Unlike copy construction, this is a very useful function if you
65  * want to keep the dynamic type of your dataset even if you just have a WDataSetSingle.
66  *
67  * \param newGrid the new grid.
68  *
69  * \return the clone
70  */
71  virtual WDataSetSingle::SPtr clone( boost::shared_ptr< WGrid > newGrid ) const;
72 
73  /**
74  * Creates a copy (clone) of this instance. Unlike copy construction, this is a very useful function if you
75  * want to keep the dynamic type of your dataset even if you just have a WDataSetSingle.
76  *
77  * \return the clone
78  */
79  virtual WDataSetSingle::SPtr clone() const;
80 
81  /**
82  * Retrieves the i'th tensor.
83  *
84  * \warning Here is dynamical allocation used inside, this may be a problem when used with multithreading.
85  *
86  * \param index The position of the tensor to retrieve
87  *
88  * \return The new constructed symmetrical matrix as tensor.
89  */
90  WTensorSym< 2, 3, float > getTensor( size_t index ) const;
91 
92 protected:
93  /**
94  * The prototype as singleton.
95  */
96  static boost::shared_ptr< WPrototyped > m_prototype;
97 
98 private:
99 };
100 
101 #endif // WDATASETDTI_H