Exemplo n.º 1
0
Frames CompartmentReportCommon::loadFrames(double start, double end) const
{
    const auto startTime = getStartTime();
    if (start >= getEndTime() || end < startTime || end <= start)
        return Frames();

    const double timestep = getTimestep();
    const size_t startFrame = _getFrameNumber(start);
    end = std::nextafter(end, -INFINITY);
    const size_t count = _getFrameNumber(end) - startFrame + 1;

    Frames frames;

    frames.timeStamps.reset(new std::vector<double>);
    for (size_t i = 0; i < count; ++i)
        frames.timeStamps->push_back(startTime + (i + startFrame) * timestep);

    const auto frameSize = getFrameSize();
    frames.data.reset(new floats(frameSize * count));
    if (frameSize == 0)
        return frames;

    if (!_loadFrames(startFrame, count, frames.data->data()))
        return Frames();

    return frames;
}
Exemplo n.º 2
0
bool CompartmentReportHDF5::writeFrame( const uint32_t gid,
                                        const floats& voltages,
                                        const float timestamp )
{
    lunchbox::ScopedWrite mutex( detail::_hdf5Lock );

    try
    {
        H5::DataSet& dataset = _getDataset( gid );
        const H5::DataSpace& dataFspace = dataset.getSpace();

        const size_t frameNumber = _getFrameNumber( timestamp );
        hsize_t dims[2];
        dataFspace.getSimpleExtentDims( dims );

        // get the correct slab
        const hsize_t dataDim[2] = { 1, dims[1] };
        const hsize_t dataOffset[2] = { frameNumber, 0 };
        dataFspace.selectHyperslab( H5S_SELECT_SET, dataDim, dataOffset );

        // define mspace
        H5::DataSpace dataMspace( 1, &dataDim[1] );

        // Write data to the dataset
        dataset.write( &voltages[0], H5::PredType::NATIVE_FLOAT, dataMspace,
                       dataFspace );
        return true;
    }
    CATCH_HDF5ERRORS
    return false;
}
Exemplo n.º 3
0
floatsPtr CompartmentReportCommon::loadFrame(const double timestamp) const
{
    const size_t size = getFrameSize();
    floatsPtr buffer(new floats(size));
    if (size != 0)
        _loadFrame(_getFrameNumber(timestamp), buffer->data());
    return buffer;
}
Exemplo n.º 4
0
size_t CompartmentReportCommon::getFrameCount() const
{
    if (getStartTime() < getEndTime())
        return _getFrameNumber(getEndTime()) + 1;
    return 0;
}