29 #include "../common/WLogger.h"
30 #include "../common/datastructures/WFiber.h"
32 #include "WDataSetFiberVector.h"
55 wlog::error(
"WDataSetFiberVector" ) <<
"During constructing a WDataSetFiberVector out of an empty WDataSetFibers";
59 if( fiberDS->getFilename() !=
"" )
63 size_t numLines = fiberDS->size();
64 const std::vector< size_t >& lineLengths = *fiberDS->getLineLengths();
67 while(
size() < numLines )
70 for(
size_t i = 0; i < lineLengths[
size() ]; ++i )
101 std::sort(
begin(),
end(), hasMorePointsThen );
107 assert( unused.size() ==
size() );
108 for(
size_t i = 0 ; i < unused.size(); ++i )
112 result->push_back(
at( i ) );
125 return "WDataSetFiberVector";
130 return "Contains tracked fiber data.";
145 boost::shared_ptr< std::vector< float > > points(
new std::vector< float > );
146 boost::shared_ptr< std::vector< size_t > > fiberStartIndices(
new std::vector< size_t > );
147 boost::shared_ptr< std::vector< size_t > > fiberLengths(
new std::vector< size_t > );
148 boost::shared_ptr< std::vector< size_t > > pointFiberMapping(
new std::vector< size_t > );
150 fiberStartIndices->reserve(
size() );
151 fiberLengths->reserve(
size() );
159 fiberStartIndices->
push_back( points->size() / 3 );
160 fiberLengths->push_back( fib.
size() );
163 points->push_back( ( *fit )[0] );
164 points->push_back( ( *fit )[1] );
165 points->push_back( ( *fit )[2] );
166 pointFiberMapping->push_back( fiberID );
170 return boost::shared_ptr< WDataSetFibers >(
new WDataSetFibers( points, fiberStartIndices, fiberLengths, pointFiberMapping ) );
173 boost::shared_ptr< WFiber > centerLine( boost::shared_ptr< const WDataSetFiberVector > tracts )
175 if( !tracts || tracts->empty() )
177 return boost::shared_ptr< WFiber >(
new WFiber() );
180 size_t avgTractSize = 0;
183 avgTractSize += cit->size();
185 avgTractSize /= tracts->size();
187 WFiber firstTract( tracts->front() );
189 boost::shared_ptr< WFiber > result(
new WFiber( firstTract ) );
191 for(
size_t tractIndex = 1; tractIndex < tracts->size(); ++tractIndex )
193 WFiber other( tracts->at( tractIndex ) );
195 other.unifyDirectionBy( firstTract );
197 for(
size_t pointIndex = 0; pointIndex < avgTractSize; ++pointIndex )
199 result->at( pointIndex ) += other[ pointIndex ];
203 for(
size_t pointIndex = 0; pointIndex < avgTractSize; ++pointIndex )
205 result->at( pointIndex ) /=
static_cast< double >( tracts->size() );
211 boost::shared_ptr< WFiber > longestLine( boost::shared_ptr< const WDataSetFiberVector > tracts )
213 if( !tracts || tracts->empty() )
215 return boost::shared_ptr< WFiber >(
new WFiber() );
221 for(
size_t tractIndex = 0; tractIndex < tracts->size(); ++tractIndex )
223 if( maxSize < tracts->at( tractIndex ).size() )
225 maxSize = tracts->at( tractIndex ).size();
226 maxIndex = tractIndex;
230 return boost::shared_ptr< WFiber >(
new WFiber( tracts->at( maxIndex ) ) );
233 boost::shared_ptr< WFiber > centerLine( boost::shared_ptr< const WDataSetFibers > tracts )
235 return centerLine( boost::shared_ptr< WDataSetFiberVector >(
new WDataSetFiberVector( tracts ) ) );
238 boost::shared_ptr< WFiber > longestLine( boost::shared_ptr< const WDataSetFibers > tracts )
240 return longestLine( boost::shared_ptr< WDataSetFiberVector >(
new WDataSetFiberVector( tracts ) ) );
WStreamedLogger error(const std::string &source)
Logging an error message.
Represents a simple set of WFibers.
Represents a neural pathway.
virtual ~WDataSetFiberVector()
Destructs WDataSetFiberVector instances.
Base class for all data set types.
vector_type::const_iterator const_iterator
Compares to std::vector type.
const_reference at(size_type index) const
Wrapper around std::vector member function.
const_iterator begin() const
Wrapper around std::vector member function.
void push_back(const value_type &value)
Wrapper around std::vector member function.
void resampleByNumberOfPoints(size_t numPoints)
Resample this line so it has a number of given points afterwards.
static boost::shared_ptr< WPrototyped > m_prototype
The prototype as singleton.
const_iterator end() const
Wrapper around std::vector member function.
void reserve(size_type new_capacity)
Wrapper around std::vector member function.
virtual const std::string getDescription() const
Gets the description for this prototype.
virtual const std::string getName() const
Gets the name of this prototype.
Represents a simple set of WFibers.
void setFilename(const std::string filename)
Set the name of the file that this data set stems from.
boost::shared_ptr< WDataSetFibers > toWDataSetFibers() const
Convert this dataset into WDataSetFibers format for other purposes if needed.
WDataSetFiberVector()
Default constructor for creating an empty fiber vector.
WDataSetFiberVector & operator=(const WDataSetFiberVector &other)
Operator for assigning instances of WDataSetFiberVector.
boost::shared_ptr< WDataSetFiberVector > generateDataSetOutOfUsedFibers(const std::vector< bool > &unused) const
Generates new WDataSetFiberVector out of the used fibers from this dataset.
virtual bool isTexture() const
Determines whether this dataset can be used as a texture.
static boost::shared_ptr< WPrototyped > getPrototype()
Returns a prototype instantiated with the true type of the deriving class.
This is taken from OpenSceneGraph <osg/MixinVector> but copy and pasted in order to reduce dependency...
void assign(size_type count, const value_type &value)
Wrapper around std::vector member function.
void sortDescLength()
Sort fibers descending on their length and update.
size_type size() const
Wrapper around std::vector member function.