24 #include <unordered_map>
28 #ifndef OPENTIMS_BUILDING_R
29 #include "sqlite/sqlite3.h"
32 #include "zstd/zstd.h"
35 #ifdef OPENTIMS_BUILDING_R
36 #define STRICT_R_HEADERS
47 int tims_sql_callback(
void* out,
int cols,
char** row,
char** colnames);
51 std::unique_ptr<char[]> back_buffer;
58 inline uint32_t back_data(
size_t index)
61 char* bytes =
reinterpret_cast<char*
>(&ret);
63 bytes[0] = bytes0[index];
64 bytes[1] = bytes1[index];
65 bytes[2] = bytes2[index];
66 bytes[3] = bytes3[index];
71 const char *
const tims_bin_frame;
74 friend int tims_sql_callback(
void* out,
int cols,
char** row,
char** colnames);
99 double _intensity_correction,
101 const char* frame_ptr,
105 static TimsFrame TimsFrameFromSql(
char** sql_row,
118 const double intensity_correction;
148 void decompress(
char* decompression_buffer =
nullptr, ZSTD_DCtx* decomp_ctx =
nullptr);
171 uint32_t* intensities,
173 double* inv_ion_mobilities,
174 double* retention_times,
175 ZSTD_DCtx* decomp_ctx =
nullptr);
179 ZSTD_DCtx* decomp_ctx =
nullptr)
185 class BrukerTof2MzConverter;
186 class Tof2MzConverter;
187 class BrukerScan2InvIonMobilityConverter;
188 class Scan2InvIonMobilityConverter;
192 friend class BrukerTof2MzConverter;
193 friend class BrukerScan2InvIonMobilityConverter;
196 const std::string tims_dir_path;
197 mio::mmap_source tims_data_bin;
198 std::unordered_map<uint32_t, TimsFrame> frame_descs;
199 void read_sql(
const std::string& tims_tdf_path);
200 uint32_t _min_frame_id;
201 uint32_t _max_frame_id;
203 std::unique_ptr<char[]> decompression_buffer;
205 std::unique_ptr<uint32_t[]> _scan_ids_buffer;
206 std::unique_ptr<uint32_t[]> _tofs_buffer;
207 std::unique_ptr<uint32_t[]> _intensities_buffer;
209 ZSTD_DCtx* zstd_dctx;
211 #ifndef OPENTIMS_BUILDING_R
215 std::unique_ptr<Tof2MzConverter> tof2mz_converter;
216 std::unique_ptr<Scan2InvIonMobilityConverter> scan2inv_ion_mobility_converter;
220 #ifdef OPENTIMS_BUILDING_R
221 void* setupFromAnalysisList(
const Rcpp::List& analysis_tdf);
225 const std::string& tims_tdf_path,
226 const std::string& tims_data_dir);
228 void set_converter(std::unique_ptr<Tof2MzConverter>&& converter);
229 void set_converter(std::unique_ptr<Scan2InvIonMobilityConverter>&& converter);
243 #ifdef OPENTIMS_BUILDING_R
244 TimsDataHandle(
const std::string& tims_data_dir,
const Rcpp::List& analysis_tdf);
295 bool has_frame(uint32_t frame_id)
const {
return frame_descs.count(frame_id) > 0; };
319 uint32_t* intensities,
321 double* inv_ion_mobilities,
322 double* retention_times);
344 uint32_t* intensities,
346 double* inv_ion_mobilities,
347 double* retention_times)
384 uint32_t* intensities,
386 double* inv_ion_mobilities,
387 double* retention_times);
389 void allocate_buffers();
391 inline void ensure_buffers_allocated() {
if(_scan_ids_buffer)
return; allocate_buffers(); };
405 const std::unique_ptr<uint32_t[]>&
tofs_buffer() {
return _tofs_buffer; };
412 friend int tims_sql_callback(
void* out,
int cols,
char** row,
char** colnames);
size_t no_peaks_in_slice(uint32_t start, uint32_t end, uint32_t step)
Count the peaks in a subset of frames, selected by a slice.
size_t max_peaks_in_frame()
Return the maximal number of peaks in the biggest frame in this dataset.
Definition: opentims.h:49
void save_to_matrix_buffer(uint32_t *buf, ZSTD_DCtx *decomp_ctx=nullptr)
This function is deprecated and intentionally undocumented; do not use.
Definition: opentims.h:178
size_t no_peaks_in_frames(const std::vector< uint32_t > &indexes)
Count the peaks in a subset of frames.
Definition: opentims.h:276
const uint32_t num_peaks
Number of peaks this frame contains (summed across all scans)
Definition: opentims.h:115
const uint32_t msms_type
The MS/MS type of this frame.
Definition: opentims.h:116
const std::unique_ptr< uint32_t[]> & intensities_buffer()
Expermental API - use discouraged.
Definition: opentims.h:408
uint32_t max_frame_id() const
Access the highest id of a valid frame from this dataset.
Definition: opentims.h:292
size_t data_size_bytes() const
Return the size of back buffer needed to store raw TIMS data.
Definition: opentims.h:126
size_t no_peaks_total() const
Returns the total number of MS peaks in this handle.
void extract_frames_slice(uint32_t start, uint32_t end, uint32_t step, uint32_t *result)
This function is deprecated, and left deliberately undocumented; do not use.
const std::unique_ptr< uint32_t[]> & scan_ids_buffer()
Expermental API - use discouraged.
Definition: opentims.h:402
const std::unique_ptr< uint32_t[]> & tofs_buffer()
Expermental API - use discouraged.
Definition: opentims.h:405
void decompress(char *decompression_buffer=nullptr, ZSTD_DCtx *decomp_ctx=nullptr)
Precalculates and memorizes all the information contained within this frame.
void save_to_buffs(uint32_t *frame_ids, uint32_t *scan_ids, uint32_t *tofs, uint32_t *intensities, double *mzs, double *inv_ion_mobilities, double *retention_times, ZSTD_DCtx *decomp_ctx=nullptr)
Retrieve the MS peak data held by the frame.
const uint32_t num_scans
Number of scans this frame contains.
Definition: opentims.h:114
size_t expose_frame(size_t frame_id)
Expermental API - use discouraged.
Definition: opentims.h:190
void extract_frames(const uint32_t *indexes, size_t no_indexes, uint32_t *result)
This function is deprecated, and left deliberately undocumented; do not use.
void print() const
Prints out to stdout a short summary of this frame.
size_t no_peaks_in_frames(const uint32_t indexes[], size_t no_indexes)
Count the peaks in a subset of frames.
void close()
Releases the storage taken by decompress() method, without destroying the frame. Will be called in de...
~TimsDataHandle()
Close and deallocate the TimsTOF data handle (destructor).
const std::unordered_map< uint32_t, TimsFrame > & get_frame_descs()
Access a dictionary containing all the frames from this dataset, keyed by ID.
void extract_frames(const std::vector< uint32_t > &indexes, uint32_t *result)
This function is deprecated, and left deliberately undocumented; do not use.
Definition: opentims.h:303
bool has_frame(uint32_t frame_id) const
Check whether a frame with provided ID exists in the dataset.
Definition: opentims.h:295
uint32_t min_frame_id() const
Access the lowest id of a valid frame from this dataset.
Definition: opentims.h:289
TimsFrame & get_frame(uint32_t frame_no)
Access a single frame by its ID.
const uint32_t id
ID of the frame.
Definition: opentims.h:108
void extract_frames(const std::vector< uint32_t > &indexes, uint32_t *frame_ids, uint32_t *scan_ids, uint32_t *tofs, uint32_t *intensities, double *mzs, double *inv_ion_mobilities, double *retention_times)
Extract a subset of frames, selected by indexes, filling provided buffers with MS peak data.
Definition: opentims.h:340