31 #include <core/common/datastructures/WFiber.h>
32 #include <core/dataHandler/WDataSetFiberVector.h>
34 #include "WCsvConverter.h"
39 if( protonData ==
nullptr || propertyStatus ==
nullptr || colorBar ==
nullptr )
41 throw WException(
"Could not convert CSV data! Proton data, property status or color bar are missing!" );
79 WColor plainColor =
m_propertyStatus->getVisualizationPropertyHandler()->getColorSelection()->get(
true );
87 for( WDataSetCSV::Content::iterator dataRow = data->begin(); dataRow < data->end(); dataRow++ )
98 if(
m_propertyStatus->getVisualizationPropertyHandler()->getEnableClusterSize()->get() &&
130 std::shared_ptr< std::vector<unsigned char> > data(
new std::vector<unsigned char>( 50 * 4 ) );
147 bool clusterEnabled =
m_propertyStatus->getVisualizationPropertyHandler()->getEnableClusterSize()->get();
149 float maxClusterSize = clusterEnabled ?
getClusterSize( maxEdep ) : maxEdep;
150 float minClusterSize = clusterEnabled ?
getClusterSize( minEdep ) : minEdep;
152 for( std::vector< float >::iterator currentEdep = edeps->begin();
153 currentEdep != edeps->end();
156 float clusterSizeNormalized = clusterEnabled ?
getClusterSize( *currentEdep ) : *currentEdep;
157 clusterSizeNormalized = ( clusterSizeNormalized - minClusterSize ) / ( maxClusterSize - minClusterSize );
159 WAssert( clusterSizeNormalized >= 0 && clusterSizeNormalized <= 1,
"The normalized energy deposition must be between 0 and 1" );
161 m_vectors->getSizes()->push_back( clusterSizeNormalized );
163 if(
m_propertyStatus->getVisualizationPropertyHandler()->getColorFromEdep()->get() )
165 clusterSizeNormalized =
static_cast< int >( 49 * clusterSizeNormalized );
167 for(
int i = 0; i < 4; i++ )
169 colorArray->push_back( data->at( clusterSizeNormalized * 4 + i ) / 255.0 );
174 m_colorBar->getProperties()->getProperty(
"Max scale value" )->set( 0.0 );
175 m_colorBar->getProperties()->getProperty(
"Max scale value" )->set( maxClusterSize );
176 m_colorBar->getProperties()->getProperty(
"Min scale value" )->set( minClusterSize );
180 m_colorBar->getProperties()->getProperty(
"Description" )->set( std::string(
"Clustersize " ) );
185 m_colorBar->getProperties()->getProperty(
"Description" )->set( columnName +
" " );
188 bool activated =
m_propertyStatus->getVisualizationPropertyHandler()->getColorFromEdep()->get();
190 m_colorBar->getProperties()->getProperty(
"active" )->toPropBool()->set( activated );
196 if( dataRow->empty() )
205 if( !
m_propertyStatus->getFilterPropertyHandler()->getShowPrimaries()->get() && PrimaryValue == 0 )
210 if( !
m_propertyStatus->getFilterPropertyHandler()->getShowSecondaries()->get() && PrimaryValue != 0 )
227 if( dataRow->at(
m_indexes->getEventID() ) ==
"NULL" )
233 if( eventID < m_propertyStatus->getEventIDLimitationPropertyHandler()->getMinCap()->get() ||
234 eventID >
m_propertyStatus->getEventIDLimitationPropertyHandler()->getMaxCap()->get() )
253 !
m_propertyStatus->getVisualizationPropertyHandler()->getColorFromEdep()->get() )
255 m_vectors->getColors()->push_back( plainColor[0] );
256 m_vectors->getColors()->push_back( plainColor[1] );
257 m_vectors->getColors()->push_back( plainColor[2] );
258 m_vectors->getColors()->push_back( plainColor[3] );
270 if( edep > *maxEdep )
275 if( edep < *minEdep )
280 m_vectors->getEdeps()->push_back( edep );
285 size_t skippedPoints = 0;
286 std::shared_ptr< std::map< size_t, std::shared_ptr< WFiber > > > fibers(
new std::map<
size_t, std::shared_ptr< WFiber > >() );
287 std::shared_ptr< std::map< size_t, SPFloatVector > > colors(
new std::map< size_t, SPFloatVector >() );
289 for(
size_t i = 0; i <
m_vectors->getEventIDs()->size(); i++ )
291 size_t eID =
m_vectors->getEventIDs()->at( i );
294 std::shared_ptr< WFiber > fib;
297 if( fibers->find( eID ) != fibers->end() )
299 fib = fibers->operator[]( eID );
300 col = colors->operator[]( eID );
304 fib = std::shared_ptr< WFiber >(
new WFiber() );
306 fibers->operator[]( eID ) = fib;
307 colors->operator[]( eID ) = col;
310 if( std::find( fib->begin(), fib->end(), pos ) == fib->end() )
312 fib->push_back( pos );
313 col->push_back(
m_vectors->getColors()->at( i * 4 ) );
314 col->push_back(
m_vectors->getColors()->at( i * 4 + 1 ) );
315 col->push_back(
m_vectors->getColors()->at( i * 4 + 2 ) );
316 col->push_back(
m_vectors->getColors()->at( i * 4 + 3 ) );
326 for(
auto it = fibers->begin(); it != fibers->end(); it++ )
328 if( it->second->size() > 1 )
330 newDS->push_back( *( it->second ) );
332 cols->insert( cols->end(), col->begin(), col->end() );
336 m_fibers = newDS->toWDataSetFibers();
337 if(
m_fibers->getVertices()->size() == 0 )
343 m_fibers->addColorScheme( cols,
"Energy deposition",
"Color fibers based on their energy." );
344 m_fibers->setSelectedColorScheme( 3 );
346 if( skippedPoints > 0 )
348 wlog::warn(
"WCsvConverter" ) <<
"Skipped " << skippedPoints <<
" duplicated points for \"WDataSetFibers\".";
356 if(
m_propertyStatus->getVisualizationPropertyHandler()->getSizesFromEdep()->get() )
358 m_points = std::shared_ptr< WDataSetPoints >(
368 m_points = std::shared_ptr < WDataSetPoints >(
380 m_fibers = std::shared_ptr< WDataSetFibers >(
397 bool edep =
m_propertyStatus->getOutputPropertyHandler()->getEnergyDeposition()->get() &&
400 bool eventID =
m_propertyStatus->getOutputPropertyHandler()->getEventID()->get() &&
403 if( edep && eventID )
405 std::tuple< SPFloatVector, SPSizeVector > data = std::make_tuple(
m_vectors->getEdeps(),
m_vectors->getEventIDs() );
410 std::tuple< SPFloatVector > data = std::make_tuple(
m_vectors->getEdeps() );
415 std::tuple< SPSizeVector > data = std::make_tuple(
m_vectors->getEventIDs() );
424 if( dataRow->at(
m_indexes->getEventID() ) ==
"NULL" )
438 std::shared_ptr< WGridRegular3D > newGrid(
new WGridRegular3D( 50, 1, 1, transform ) );
439 std::shared_ptr< WDataSetSingle > newData(
new WDataSetSingle( newValueSet, newGrid ) );
458 return 7.6626f * powf( edep * 40.0f, 0.420307f );
465 return boost::lexical_cast< double >( str );
467 catch(
const boost::bad_lexical_cast &e )
469 std::string errorMessage =
"The selected column has an incorrect format. Received: " + str +
". " +
470 "Required: Numbers are expected. " +
471 std::string( e.what() );
481 return (
int )numAsDouble;
Holds the indexes of the columns and is able to update them.
std::shared_ptr< WConverterIndexes > SPtr
A shared_ptr to this class.
Holds the vectors that store the data for the points and fibers.
std::shared_ptr< WConverterVectors > SPtr
A shared_ptr to this class.
WPropertyStatus::SPtr m_propertyStatus
includes all property groups
std::shared_ptr< WDataSetPoints > getPoints()
Getter.
WModule::SPtr m_colorBar
Stores reference to the given transfer function color bar module.
void addEdepAndSize(WDataSetCSV::Content::iterator dataRow, float *maxEdep, float *minEdep)
Create edep and sizes for point/fiber renderer.
void setTransferFunction(std::shared_ptr< std::vector< unsigned char > > data)
Creates output for transfer function.
void normalizeEdeps(SPFloatVector edeps, SPFloatVector colorArray, float maxEdep, float minEdep)
Normalize energy deposition values to use as RGB values.
std::shared_ptr< std::vector< float > > SPFloatVector
represents a std::shared_ptr to a vector containing a vector of floats.
void addVertex(WDataSetCSV::Content::iterator dataRow)
Create vertex for point/fiber renderer.
std::shared_ptr< std::vector< size_t > > SPSizeVector
represents a std::shared_ptr to a vector containing a vector of size_t.
void addEventID(WDataSetCSV::Content::iterator dataRow)
Create eventID for Fiber renderer.
std::shared_ptr< WDataSetSingle > m_transferFunction
Stores the currently mapped transfer function.
void createOutputPointsAndData()
Create the points and selected data for Point Connector.
std::shared_ptr< WDataSetFibers > m_fibers
Stores information for the fiber display.
WCsvConverter(WProtonData::SPtr protonData, std::shared_ptr< WPropertyStatus > propertyStatus, WModule::SPtr colorBar)
Initializes the vectors, indices and transfer function color bar Calls setOutputFromCSV.
std::shared_ptr< WDataSetPoints > m_points
Stores information for the point renderer.
WProtonData::SPtr m_protonData
Stores information form csv content.
float stringToDouble(std::string str)
checks whether the string is a number (double)
bool checkConditionToPass(WDataSetCSV::Content::iterator dataRow)
checks whether the requirements are fulfilled.
void calculateFibers()
calculate the property of WDataSetFiber (index, length, verticesReverse)
std::shared_ptr< WDataSetPoints > m_pointsAndData
Stores information for the point Conncetor.
int stringToInt(std::string str)
checks whether the string is a number (int)
void setOutputFromCSV()
Create outputs, so it can be displayed by the fiber display and the point renderer.
float getClusterSize(float edep)
Computes the cluster size.
void addColor(WColor plainColor)
Create color for point/Fiber renderer.
bool checkIfOutputIsNull()
the cast value from string to float
std::shared_ptr< WDataSetSingle > getTransferFunction()
Getter.
std::shared_ptr< WDataSetPoints > getPointsAndData()
Getter.
void createOutputPoints()
Create the points for points renderer.
WConverterVectors::SPtr m_vectors
Stores points for point and fiber renderer.
WConverterIndexes::SPtr m_indexes
Stores indexes for fiber renderer.
std::shared_ptr< std::vector< unsigned char > > sampleTransferFunction()
Computes gradient vector from transfer function specified in visualization properties.
void createOutputFibers()
Create the fibers for fiber renderer.
std::shared_ptr< WDataSetFibers > getFibers()
Getter.
std::shared_ptr< std::vector< std::vector< std::string > > > ContentSPtr
represents a pointer to the Content
Represents a simple set of WFibers.
std::shared_ptr< WDataSetFiberVector > SPtr
Short hand for a std::shared_ptr on such classes.
Represents a simple set of WFibers.
Dataset to store a bunch of points without order or topology.
std::shared_ptr< WDataSetPoints > SPtr
Pointer to dataset.
A data set consisting of a set of values based on a grid.
Represents a neural pathway.
A grid that has parallelepiped cells which all have the same proportion.
std::shared_ptr< WModule > SPtr
Shared pointer to a WModule.
This only is a 3d double vector.
std::shared_ptr< WProtonData > SPtr
shared_ptr that points to itself
static std::string getX()
getter
static std::string getY()
getter
static std::string getZ()
getter
static std::string getEdep()
getter
static std::string getPDG()
getter
static std::string getParentId()
getter
static std::string getEventId()
getter
A class that stores a 1D transfer function which consists of a linear interpolation of alpha and colo...
void sample1DTransferFunction(unsigned char *array, int width, double min, double max) const
sample/render the transfer function linearly between min and max in an RGBA texture.
Base Class for all value set types.
const float MIN_FLOAT
Positive minimum float value.
const float MAX_FLOAT
Maximum float value.
WStreamedLogger warn(const std::string &source)
Logging a warning message.