libpappsomspp
Library for mass spectrometry
pappso::MsFileAccessor Class Reference

#include <msfileaccessor.h>

Public Member Functions

 MsFileAccessor (const QString &file_name, const QString &xml_prefix)
 
 MsFileAccessor (const MsFileAccessor &other)
 
virtual ~MsFileAccessor ()
 
const QString & getFileName () const
 
MzFormat getFileFormat () const
 get the raw format of mz data More...
 
FileReaderType getFileReaderType () const
 get the file reader type More...
 
void setPreferedFileReaderType (MzFormat format, FileReaderType reader_type)
 given an mz format, explicitly set the prefered reader More...
 
FileReaderType getPreferedFileReaderType (MzFormat format)
 
std::vector< MsRunIdCstSPtrgetMsRunIds ()
 
MsRunReaderSPtr msRunReaderSp (MsRunIdCstSPtr ms_run_id)
 
MsRunReaderSPtr getMsRunReaderSPtrByRunId (const QString &run_id, const QString &xml_id)
 get an msrun reader by finding the run_id in file More...
 
TimsMsRunReaderMs2SPtr buildTimsMsRunReaderMs2SPtr ()
 if possible, builds directly a dedicated Tims TOF tdf file reader More...
 

Static Public Member Functions

static MsRunReaderSPtr buildMsRunReaderSPtr (MsRunIdCstSPtr ms_run_id)
 get an MsRunReader directly from a valid MsRun ID More...
 
static MsRunReaderSPtr buildMsRunReaderSPtr (MsRunIdCstSPtr ms_run_id, pappso::FileReaderType prefered_file_reader_type)
 get an MsRunReader directly from a valid MsRun ID More...
 

Private Attributes

QString m_fileName
 
const QString m_xmlPrefix
 
MzFormat m_fileFormat = MzFormat::unknown
 
FileReaderType m_fileReaderType
 
std::map< MzFormat, FileReaderTypem_preferedFileReaderTypeMap
 

Detailed Description

Definition at line 26 of file msfileaccessor.h.

Constructor & Destructor Documentation

◆ MsFileAccessor() [1/2]

pappso::MsFileAccessor::MsFileAccessor ( const QString &  file_name,
const QString &  xml_prefix 
)

Definition at line 31 of file msfileaccessor.cpp.

33 : m_fileName(file_name), m_xmlPrefix(xml_prefix)
34{
35 QFile file(file_name);
36 if(!file.exists())
37 throw(ExceptionNotFound(QObject::tr("File %1 not found.")
38 .arg(QFileInfo(file_name).absoluteFilePath())));
39}
const QString m_xmlPrefix

◆ MsFileAccessor() [2/2]

pappso::MsFileAccessor::MsFileAccessor ( const MsFileAccessor other)

Definition at line 42 of file msfileaccessor.cpp.

43 : m_fileName(other.m_fileName),
44 m_xmlPrefix(other.m_xmlPrefix),
45 m_fileFormat(other.m_fileFormat),
46 m_fileReaderType(other.m_fileReaderType)
47{
48}
FileReaderType m_fileReaderType

◆ ~MsFileAccessor()

pappso::MsFileAccessor::~MsFileAccessor ( )
virtual

Definition at line 50 of file msfileaccessor.cpp.

51{
52}

Member Function Documentation

◆ buildMsRunReaderSPtr() [1/2]

MsRunReaderSPtr pappso::MsFileAccessor::buildMsRunReaderSPtr ( MsRunIdCstSPtr  ms_run_id)
static

get an MsRunReader directly from a valid MsRun ID

no need to check the file format or filename : all is already part of the msrunid

Parameters
ms_run_idmsrun identifier
Returns
msrun reader shared pointer

Definition at line 286 of file msfileaccessor.cpp.

287{
289}
static MsRunReaderSPtr buildMsRunReaderSPtr(MsRunIdCstSPtr ms_run_id)
get an MsRunReader directly from a valid MsRun ID

References buildMsRunReaderSPtr(), and pappso::tims.

Referenced by buildMsRunReaderSPtr().

◆ buildMsRunReaderSPtr() [2/2]

MsRunReaderSPtr pappso::MsFileAccessor::buildMsRunReaderSPtr ( MsRunIdCstSPtr  ms_run_id,
pappso::FileReaderType  prefered_file_reader_type 
)
static

get an MsRunReader directly from a valid MsRun ID

no need to check the file format or filename : all is already part of the msrunid

Parameters
ms_run_idmsrun identifier
prefered_file_reader_typethe prefered file reader type to use (depending on the mz format)
Returns
msrun reader shared pointer

Definition at line 292 of file msfileaccessor.cpp.

294{
295 QFile file(ms_run_id.get()->getFileName());
296 if(!file.exists())
297 throw(ExceptionNotFound(
298 QObject::tr("unable to build a reader : file %1 not found.")
299 .arg(QFileInfo(ms_run_id.get()->getFileName()).absoluteFilePath())));
300
301 MzFormat file_format = ms_run_id.get()->getMzFormat();
302
303 if(file_format == MzFormat::xy)
304 {
305 // qDebug() << "Returning a XyMsRunReader.";
306
307 return std::make_shared<XyMsRunReader>(ms_run_id);
308 }
309 else if(file_format == MzFormat::unknown)
310 {
311 throw(PappsoException(
312 QObject::tr("unable to build a reader for %1 : unknown file format")
313 .arg(QFileInfo(ms_run_id.get()->getFileName()).absoluteFilePath())));
314 }
315
316 else if(file_format == MzFormat::brukerTims)
317 {
318 if(prefered_file_reader_type == pappso::FileReaderType::tims)
319 {
320 return std::make_shared<TimsMsRunReader>(ms_run_id);
321 }
322 else if(prefered_file_reader_type == pappso::FileReaderType::tims_ms2)
323 {
324 return std::make_shared<TimsMsRunReaderMs2>(ms_run_id);
325 }
326
327 // qDebug() << "by default, build a TimsMsRunReader.";
328 return std::make_shared<TimsMsRunReader>(ms_run_id);
329 }
330 else
331 {
332 // qDebug() << "Returning a PwizMsRunReader .";
333
334 return std::make_shared<PwizMsRunReader>(ms_run_id);
335 }
336}
MzFormat
Definition: types.h:120
@ xy
(x,y) format
@ unknown
unknown format

References pappso::brukerTims, pappso::tims, pappso::tims_ms2, pappso::unknown, and pappso::xy.

◆ buildTimsMsRunReaderMs2SPtr()

TimsMsRunReaderMs2SPtr pappso::MsFileAccessor::buildTimsMsRunReaderMs2SPtr ( )

if possible, builds directly a dedicated Tims TOF tdf file reader

Definition at line 193 of file msfileaccessor.cpp.

194{
195 // try TimsData reader
196 QString tims_dir = m_fileName;
197 if(!QFileInfo(tims_dir).isDir())
198 {
199 tims_dir = QFileInfo(m_fileName).absolutePath();
200 }
201 TimsMsFileReader tims_file_reader(tims_dir);
202
203 std::vector<MsRunIdCstSPtr> ms_run_ids =
204 tims_file_reader.getMsRunIds(m_xmlPrefix);
205
206 if(ms_run_ids.size())
207 {
208 // qDebug() << "Might well be handled using the Bruker code";
210 m_fileFormat = tims_file_reader.getFileFormat();
211 m_fileName = tims_dir;
212
213 return std::make_shared<TimsMsRunReaderMs2>(ms_run_ids.front());
214 }
215 else
216 {
217 throw(ExceptionNotPossible(
218 QObject::tr("Unable to read mz data directory %1 with TimsTOF reader.")
219 .arg(tims_dir)));
220 }
221}

References pappso::TimsMsFileReader::getFileFormat(), pappso::TimsMsFileReader::getMsRunIds(), m_fileFormat, m_fileName, m_fileReaderType, m_xmlPrefix, and pappso::tims_ms2.

◆ getFileFormat()

MzFormat pappso::MsFileAccessor::getFileFormat ( ) const

get the raw format of mz data

Definition at line 63 of file msfileaccessor.cpp.

64{
65 return m_fileFormat;
66}

References m_fileFormat.

Referenced by pappso::TandemWrapperRun::convertOrginalMsData2mzXmlData().

◆ getFileName()

const QString & pappso::MsFileAccessor::getFileName ( ) const

Definition at line 56 of file msfileaccessor.cpp.

57{
58 return m_fileName;
59}

References m_fileName.

◆ getFileReaderType()

FileReaderType pappso::MsFileAccessor::getFileReaderType ( ) const

get the file reader type

Definition at line 186 of file msfileaccessor.cpp.

187{
188 return m_fileReaderType;
189}

References m_fileReaderType.

◆ getMsRunIds()

std::vector< MsRunIdCstSPtr > pappso::MsFileAccessor::getMsRunIds ( )

Definition at line 70 of file msfileaccessor.cpp.

71{
72 // qDebug();
73
74 // Try the PwizMsFileReader
75
76 PwizMsFileReader pwiz_ms_file_reader(m_fileName);
77
78 std::vector<MsRunIdCstSPtr> ms_run_ids =
79 pwiz_ms_file_reader.getMsRunIds(m_xmlPrefix);
80 if(ms_run_ids.size())
81 {
82 // qDebug() << "Might well be handled using the Pwiz code.";
83 m_fileFormat = pwiz_ms_file_reader.getFileFormat();
85
86 // But the user might have configured one preferred reader type.
87
89 if(pref != m_preferedFileReaderTypeMap.end())
90 {
91 m_fileReaderType = pref->second;
92 }
93
94 return ms_run_ids;
95 }
96
97 // qDebug() << "The Pwiz reader did not work.";
98
99 // Try the TimsData reader
100
101 QString tims_dir = m_fileName;
102 if(!QFileInfo(tims_dir).isDir())
103 {
104 tims_dir = QFileInfo(m_fileName).absolutePath();
105 }
106
107 TimsMsFileReader tims_file_reader(tims_dir);
108
109 ms_run_ids = tims_file_reader.getMsRunIds(m_xmlPrefix);
110
111 if(ms_run_ids.size())
112 {
113 // qDebug() << "Might well be handled using the Bruker code";
114
115 m_fileName = tims_dir;
116 m_fileFormat = tims_file_reader.getFileFormat();
118
120 if(pref != m_preferedFileReaderTypeMap.end())
121 {
122 m_fileReaderType = pref->second;
123 }
124
125 // qDebug() << "Returning Bruker::tims ms run(s)."
126 // << "with preferred reader type:"
127 // << Utils::fileReaderTypeAsString(m_fileReaderType);
128
129 return ms_run_ids;
130 }
131
132 // qDebug() << "The Tims reader did not work.";
133
134 // At this point try the XyMsFileReader
135
136 XyMsFileReader xy_ms_file_reader(m_fileName);
137
138 ms_run_ids = xy_ms_file_reader.getMsRunIds(m_xmlPrefix);
139
140 if(ms_run_ids.size())
141 {
142 // qDebug() << "Might well be handled using the XY code";
144
145 m_fileFormat = xy_ms_file_reader.getFileFormat();
146
147 return ms_run_ids;
148 }
149
150 // qDebug() << "The XY reader did not work.";
151
152 return ms_run_ids;
153}
std::map< MzFormat, FileReaderType > m_preferedFileReaderTypeMap

References pappso::PwizMsFileReader::getFileFormat(), pappso::TimsMsFileReader::getFileFormat(), pappso::XyMsFileReader::getFileFormat(), pappso::PwizMsFileReader::getMsRunIds(), pappso::TimsMsFileReader::getMsRunIds(), pappso::XyMsFileReader::getMsRunIds(), m_fileFormat, m_fileName, m_fileReaderType, m_preferedFileReaderTypeMap, m_xmlPrefix, pappso::pwiz, pappso::tims, and pappso::xy.

Referenced by pappso::TandemWrapperRun::convertOrginalMsData2mzXmlData(), and getMsRunReaderSPtrByRunId().

◆ getMsRunReaderSPtrByRunId()

MsRunReaderSPtr pappso::MsFileAccessor::getMsRunReaderSPtrByRunId ( const QString &  run_id,
const QString &  xml_id 
)

get an msrun reader by finding the run_id in file

Parameters
run_ididentifier within file of the MSrun
xml_idXML identifier given by the user to identify this MSrun in our experiment (not in the file)

Definition at line 340 of file msfileaccessor.cpp.

342{
343 std::vector<MsRunIdCstSPtr> run_list = getMsRunIds();
344 MsRunReaderSPtr reader_sp;
345 for(MsRunIdCstSPtr &original_run_id : run_list)
346 {
347 if(original_run_id.get()->getRunId() == run_id)
348 {
349 MsRunId new_run_id(*original_run_id.get());
350 new_run_id.setXmlId(xml_id);
351
352 return msRunReaderSp(std::make_shared<MsRunId>(new_run_id));
353 }
354 }
355
356 if((run_id.isEmpty()) && (run_list.size() == 1))
357 {
358 MsRunId new_run_id(*run_list[0].get());
359 new_run_id.setXmlId(xml_id);
360
361 return msRunReaderSp(std::make_shared<MsRunId>(new_run_id));
362 }
363
364
365 if(reader_sp == nullptr)
366 {
367 throw(
368 ExceptionNotFound(QObject::tr("run id %1 not found in file %2")
369 .arg(run_id)
370 .arg(QFileInfo(m_fileName).absoluteFilePath())));
371 }
372 return reader_sp;
373}
MsRunReaderSPtr msRunReaderSp(MsRunIdCstSPtr ms_run_id)
std::vector< MsRunIdCstSPtr > getMsRunIds()
std::shared_ptr< MsRunReader > MsRunReaderSPtr
Definition: msrunreader.h:56
std::shared_ptr< const MsRunId > MsRunIdCstSPtr
Definition: msrunid.h:46

References getMsRunIds(), m_fileName, msRunReaderSp(), and pappso::MsRunId::setXmlId().

◆ getPreferedFileReaderType()

FileReaderType pappso::MsFileAccessor::getPreferedFileReaderType ( MzFormat  format)

Definition at line 172 of file msfileaccessor.cpp.

173{
174 auto ret = m_preferedFileReaderTypeMap.find(format);
175
176 if(ret != m_preferedFileReaderTypeMap.end())
177 {
178 return ret->second;
179 }
180
181 return m_fileReaderType;
182}

References m_fileReaderType, and m_preferedFileReaderTypeMap.

Referenced by msRunReaderSp().

◆ msRunReaderSp()

MsRunReaderSPtr pappso::MsFileAccessor::msRunReaderSp ( MsRunIdCstSPtr  ms_run_id)

Definition at line 225 of file msfileaccessor.cpp.

226{
227 // We want to return a MsRunReader that accounts for the configuration that
228 // the user might have set.
229
230 if(m_fileName != ms_run_id->getFileName())
231 throw(ExceptionNotPossible(
232 QObject::tr("The MsRunId instance must have the name file name as the "
233 "MsFileAccessor.")));
234
236 {
237 // qDebug() << "Returning a PwizMsRunReader.";
238
239 return std::make_shared<PwizMsRunReader>(ms_run_id);
240 }
242 {
243 // qDebug() << "Returning a XyMsRunReader.";
244
245 return std::make_shared<XyMsRunReader>(ms_run_id);
246 }
248 {
249 // qDebug() << "Returning a TimsMsRunReader.";
250
251 return std::make_shared<TimsMsRunReader>(ms_run_id);
252 }
254 {
255 // qDebug() << "Returning a TimsFramesMsRunReader.";
256
257 return std::make_shared<TimsFramesMsRunReader>(ms_run_id);
258 }
260 {
261 // qDebug() << "Returning a TimsMsRunReaderMs2.";
262
263 return std::make_shared<TimsMsRunReaderMs2>(ms_run_id);
264 }
266 {
267 if(ms_run_id.get()->getMzFormat() == MzFormat::xy)
268 {
269 return std::make_shared<XyMsRunReader>(ms_run_id);
270 }
271 else
272 {
273 return std::make_shared<PwizMsRunReader>(ms_run_id);
274 }
275 }
276 else
277 {
278 throw PappsoException(QObject::tr("No file format was found."));
279 }
280
281 return nullptr;
282}
FileReaderType getPreferedFileReaderType(MzFormat format)

References getPreferedFileReaderType(), m_fileFormat, m_fileName, pappso::pwiz, pappso::tims, pappso::tims_frames, pappso::tims_ms2, pappso::unknown, and pappso::xy.

Referenced by pappso::TandemWrapperRun::convertOrginalMsData2mzXmlData(), and getMsRunReaderSPtrByRunId().

◆ setPreferedFileReaderType()

void pappso::MsFileAccessor::setPreferedFileReaderType ( MzFormat  format,
FileReaderType  reader_type 
)

given an mz format, explicitly set the prefered reader

Definition at line 157 of file msfileaccessor.cpp.

159{
160 auto ret = m_preferedFileReaderTypeMap.insert(
161 std::pair<MzFormat, FileReaderType>(format, reader_type));
162
163 if(!ret.second)
164 {
165 // replace
166 ret.first->second = reader_type;
167 }
168}

References m_preferedFileReaderTypeMap.

Referenced by pappso::TandemWrapperRun::convertOrginalMsData2mzXmlData().

Member Data Documentation

◆ m_fileFormat

MzFormat pappso::MsFileAccessor::m_fileFormat = MzFormat::unknown
private

◆ m_fileName

QString pappso::MsFileAccessor::m_fileName
private

◆ m_fileReaderType

FileReaderType pappso::MsFileAccessor::m_fileReaderType
private

◆ m_preferedFileReaderTypeMap

std::map<MzFormat, FileReaderType> pappso::MsFileAccessor::m_preferedFileReaderTypeMap
private

◆ m_xmlPrefix

const QString pappso::MsFileAccessor::m_xmlPrefix
private

Definition at line 94 of file msfileaccessor.h.

Referenced by buildTimsMsRunReaderMs2SPtr(), and getMsRunIds().


The documentation for this class was generated from the following files: