30 #include "../common/WAssert.h"
31 #include "../common/WLimits.h"
32 #include "WDataSetTimeSeries.h"
38 std::vector< float > times )
41 WAssert( !datasets.empty(),
"" );
42 WAssert( datasets.size() == times.size(),
"" );
43 std::vector< boost::shared_ptr< WDataSetScalar const > >::iterator dit;
44 std::vector< float >::iterator tit;
45 boost::shared_ptr< WGridRegular3D > g = boost::shared_dynamic_cast<
WGridRegular3D >( datasets.front()->getGrid() );
47 dataType d = datasets.front()->getValueSet()->getDataType();
50 for( dit = datasets.begin(), tit = times.begin(); dit != datasets.end() && tit != times.end(); ++dit, ++tit )
53 WAssert( g == boost::shared_dynamic_cast< WGridRegular3D >( ( *dit )->getGrid() ),
"" );
55 WAssert( d == ( *dit )->getValueSet()->getDataType(),
"" );
56 WAssert( ( *dit )->getValueSet()->dimension() == 1,
"" );
57 WAssert( ( *dit )->getValueSet()->order() == 0,
"" );
69 for( std::size_t k = 1; k <
m_dataSets.size(); ++k )
73 throw WException( std::string(
"There are multiple time slices at the same point in time!" ) );
84 return std::string(
"WDataSetTimeSeries" );
89 return std::string(
"A time series." );
105 return f !=
m_dataSets.end() && f->second == time;
117 return time - lb <= ub - time ? lb : ub;
123 if( f !=
m_dataSets.end() && f->second == time )
127 return boost::shared_ptr< WDataSetScalar const >();
135 return boost::shared_ptr< WDataSetScalar const >();
139 if( lb == time || ub == time )
145 boost::shared_ptr< WValueSetBase > vs;
146 switch(
m_dataSets.front().first->getValueSet()->getDataType() )
149 vs = calcInterpolatedValueSet< uint8_t >( lb, ub, time );
152 vs = calcInterpolatedValueSet< int8_t >( lb, ub, time );
155 vs = calcInterpolatedValueSet< uint16_t >( lb, ub, time );
158 vs = calcInterpolatedValueSet< int16_t >( lb, ub, time );
161 vs = calcInterpolatedValueSet< uint32_t >( lb, ub, time );
163 case W_DT_SIGNED_INT:
164 vs = calcInterpolatedValueSet< int32_t >( lb, ub, time );
167 vs = calcInterpolatedValueSet< uint64_t >( lb, ub, time );
170 vs = calcInterpolatedValueSet< int64_t >( lb, ub, time );
173 vs = calcInterpolatedValueSet< float >( lb, ub, time );
176 vs = calcInterpolatedValueSet< double >( lb, ub, time );
179 throw WException( std::string(
"Unsupported datatype in WDataSetTimeSeries::calcDataSetAtTime()" ) );
183 ds->setFileName( name );
189 return t0.second < t1.second;
194 return t0 < t1.second;
199 return t0.second < t1;
205 float t = -std::numeric_limits< float >::infinity();
206 if( f !=
m_dataSets.end() && f->second == time )
221 float t = std::numeric_limits< float >::infinity();