libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
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
 
FileReaderType getFileReaderType () const
 get the file reader type
 
void setPreferedFileReaderType (MzFormat format, FileReaderType reader_type)
 given an mz format, explicitly set the prefered reader
 
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
 
TimsMsRunReaderMs2SPtr buildTimsMsRunReaderMs2SPtr ()
 if possible, builds directly a dedicated Tims TOF tdf file reader
 

Static Public Member Functions

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

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 287 of file msfileaccessor.cpp.

288{
290}
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 293 of file msfileaccessor.cpp.

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

343{
344 std::vector<MsRunIdCstSPtr> run_list = getMsRunIds();
345 MsRunReaderSPtr reader_sp;
346 for(MsRunIdCstSPtr &original_run_id : run_list)
347 {
348 if(original_run_id.get()->getRunId() == run_id)
349 {
350 MsRunId new_run_id(*original_run_id.get());
351 new_run_id.setXmlId(xml_id);
352
353 return msRunReaderSp(std::make_shared<MsRunId>(new_run_id));
354 }
355 }
356
357 if((run_id.isEmpty()) && (run_list.size() == 1))
358 {
359 MsRunId new_run_id(*run_list[0].get());
360 new_run_id.setXmlId(xml_id);
361
362 return msRunReaderSp(std::make_shared<MsRunId>(new_run_id));
363 }
364
365
366 if(reader_sp == nullptr)
367 {
368 throw(
369 ExceptionNotFound(QObject::tr("run id %1 not found in file %2")
370 .arg(run_id)
371 .arg(QFileInfo(m_fileName).absoluteFilePath())));
372 }
373 return reader_sp;
374}
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 }
255 {
256 // qDebug() << "Returning a TimsFramesMsRunReader.";
257
258 return std::make_shared<TimsFramesMsRunReader>(ms_run_id);
259 }
261 {
262 // qDebug() << "Returning a TimsMsRunReaderMs2.";
263
264 return std::make_shared<TimsMsRunReaderMs2>(ms_run_id);
265 }
267 {
268 if(ms_run_id.get()->getMzFormat() == MzFormat::xy)
269 {
270 return std::make_shared<XyMsRunReader>(ms_run_id);
271 }
272 else
273 {
274 return std::make_shared<PwizMsRunReader>(ms_run_id);
275 }
276 }
277 else
278 {
279 throw PappsoException(QObject::tr("No file format was found."));
280 }
281
282 return nullptr;
283}
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: