29 #include "../../../pappsomspp/pappsoexception.h"
30 #include "../../../pappsomspp/exception/exceptionnotimplemented.h"
32 #include <QDataStream>
41 : m_timsBinFile(timsBinFile.absoluteFilePath())
44 if((timsCompressionType != 1) && (timsCompressionType != 2))
47 QObject::tr(
"compression type %1 not handled by this library")
48 .arg(timsCompressionType));
53 QObject::tr(
"No TIMS binary file name specified"));
56 if(!file.open(QIODevice::ReadOnly))
59 QObject::tr(
"ERROR opening TIMS binary file %1 for read")
60 .arg(timsBinFile.absoluteFilePath()));
66 : m_timsBinFile(other.m_timsBinFile)
95 if(mp_fileLinear !=
nullptr)
97 mp_fileLinear->close();
100 mp_fileLinear =
nullptr;
103 m_linearAccessRawDataChunckList.resize(0);
111 const std::vector<pappso::TimsFrameRecord> &frame_record_list)
119 QObject::tr(
"ERROR opening TIMS binary file %1 for read")
133 if(mp_fileRandom ==
nullptr)
135 mp_fileRandom =
new QFile(m_timsBinFile);
136 if(!mp_fileRandom->open(QIODevice::ReadOnly))
139 QObject::tr(
"ERROR opening TIMS binary file %1 for read")
140 .arg(m_timsBinFile));
143 return mp_fileRandom;
149 const std::vector<pappso::TimsFrameRecord> &frame_record_list)
152 qDebug() <<
"frameId:" << frameId;
176 if(chunck.getFrameId() == frameId)
190 QObject::tr(
"ERROR reading TIMS binary file %1 with linear QFile: "
193 .arg(error.
qwhat()));
200 bool seekpos_ok = p_file->seek(frame_record_list[frameId].tims_offset);
204 QObject::tr(
"ERROR reading TIMS frame %1 TIMS binary file %2: "
205 "m_timsBinFile.seek(%3) failed")
208 .arg(frame_record_list[frameId].tims_offset));
215 p_file, frameId, frame_record_list);
221 QObject::tr(
"ERROR reading TIMS binary file %1 with random QFile: "
224 .arg(error.
qwhat()));
232 const std::vector<pappso::TimsFrameRecord> &frame_record_list)
235 for(std::size_t i = 0; i < m_linearForwardThreshold; i++)
237 auto it = std::min_element(
238 m_linearAccessRawDataChunckList.begin(),
239 m_linearAccessRawDataChunckList.end(),
241 return a.getFrameId() < b.getFrameId();
245 if(m_lastFrameId >= frame_record_list.size())
247 it->readTimsFrame(mp_fileLinear, m_lastFrameId, frame_record_list);
264 auto decompressed_size2 =
268 if(decompressed_size2 == ZSTD_CONTENTSIZE_UNKNOWN)
271 QObject::tr(
"ERROR TimsBinDec::getTimsFrameFromRawDataChunck "
272 "reading TIMS frame %1 TIMS binary file %2: "
273 " decompressed_size2 == ZSTD_CONTENTSIZE_UNKNOWN, "
280 if(decompressed_size2 == ZSTD_CONTENTSIZE_ERROR)
284 QObject::tr(
"ERROR TimsBinDec::getTimsFrameFromRawDataChunck "
285 "reading TIMS frame %1 TIMS binary file %2: "
286 " decompressed_size2 == ZSTD_CONTENTSIZE_ERROR, "
292 qDebug() <<
" decompressed_size2=" << decompressed_size2;
304 std::size_t decompressed_size =
311 if(decompressed_size != decompressed_size2)
314 QObject::tr(
"ERROR TimsBinDec::getTimsFrameFromRawDataChunck "
315 "reading TIMS frame %1 TIMS binary file %2: "
316 "decompressed_size != decompressed_size2")
319 .arg(decompressed_size)
320 .arg(decompressed_size2));
326 std::make_shared<TimsFrame>(raw_data_chunck.
getFrameId(),
336 frame_sptr = std::make_shared<TimsFrameType1>(
348 std::make_shared<TimsFrame>(raw_data_chunck.
getFrameId(),
365 std::size_t start_frame_id,
366 std::size_t chunk_deque_size,
367 const std::vector<pappso::TimsFrameRecord> &frame_record_list)
370 m_linearAccessRawDataChunckList.resize(chunk_deque_size);
371 m_firstFrameId = start_frame_id;
372 m_lastFrameId = start_frame_id;
374 QFile *p_file = mp_fileLinear;
375 if(p_file ==
nullptr)
380 bool seekpos_ok = p_file->seek(frame_record_list[start_frame_id].tims_offset);
384 QObject::tr(
"ERROR reading TIMS frame %1 TIMS binary file %2: "
385 "m_timsBinFile.seek(%3) failed")
388 .arg(frame_record_list[start_frame_id].tims_offset));
396 chunck.readTimsFrame(p_file, start_frame_id, frame_record_list);
397 m_lastFrameId = start_frame_id;
406 "ERROR in TimsBinDec::startLinearRead reading TIMS binary file %1:\n "
407 " start_frame_id=%2 m_firstFrameId=%3 m_lastFrameId=%4 "
413 .arg(error.
qwhat()));
virtual const QString & qwhat() const
std::size_t m_firstFrameId
std::size_t m_decompressMemoryBufferSize
TimsFrameSPtr getTimsFrameSPtrByOffset(std::size_t frameId, const std::vector< pappso::TimsFrameRecord > &frame_record_list)
void startLinearRead(std::size_t start_frame_id, std::size_t chunk_deque_size, const std::vector< pappso::TimsFrameRecord > &frame_record_list)
populate a fifo buffer with TimsFrameRawDataChunck accelerates inputs from file
QFile * getQfileRandom()
open one QFile handler for random read
std::size_t m_linearForwardThreshold
void closeLinearRead()
close file access and flush cache
std::size_t m_lastFrameId
std::size_t m_linearAccessRawDataChunckDequeSize
QFile * getQfileLinear(std::size_t frameId, const std::vector< pappso::TimsFrameRecord > &frame_record_list)
open one QFile handler for linear read
std::vector< TimsFrameRawDataChunck > m_linearAccessRawDataChunckList
int m_timsCompressionType
void moveLinearReadForward(const std::vector< pappso::TimsFrameRecord > &frame_record_list)
TimsBinDec(const QFileInfo &timsBinFile, int timsCompressionType)
TimsFrameSPtr getTimsFrameFromRawDataChunck(const TimsFrameRawDataChunck &raw_data_chunck)
TimsFrameRawDataChunck m_randemAccessFrameRawDataChunck
char * mpa_decompressMemoryBuffer
std::size_t getFrameId() const
quint32 getCompressedSize() const
quint32 getFrameNumberOfScans() const
bool readTimsFrame(QFile *p_file, std::size_t frameId, const std::vector< pappso::TimsFrameRecord > &frame_record_list)
char * getMemoryBuffer() const
quint32 getFrameLength() const
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
std::shared_ptr< TimsFrame > TimsFrameSPtr
binary file handler of Bruker's TimsTof raw data
stores raw binary tims frame
handle a single Bruker's TimsTof frame type 1 compression