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...
 
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 35 of file msfileaccessor.h.

Constructor & Destructor Documentation

◆ MsFileAccessor() [1/2]

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

Definition at line 29 of file msfileaccessor.cpp.

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

◆ MsFileAccessor() [2/2]

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

Definition at line 40 of file msfileaccessor.cpp.

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

◆ ~MsFileAccessor()

pappso::MsFileAccessor::~MsFileAccessor ( )
virtual

Definition at line 48 of file msfileaccessor.cpp.

49{
50}

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

234{
236}
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 239 of file msfileaccessor.cpp.

241{
242
243 QFile file(ms_run_id.get()->getFileName());
244 if(!file.exists())
245 throw(ExceptionNotFound(
246 QObject::tr("unable to build a reader : file %1 not found.")
247 .arg(QFileInfo(ms_run_id.get()->getFileName()).absoluteFilePath())));
248
249 MzFormat file_format = ms_run_id.get()->getMzFormat();
250
251 if(file_format == MzFormat::xy)
252 {
253 //qDebug() << "Returning a XyMsRunReader.";
254
255 return std::make_shared<XyMsRunReader>(ms_run_id);
256 }
257 else if(file_format == MzFormat::unknown)
258 {
259 throw(PappsoException(
260 QObject::tr("unable to build a reader for %1 : unknown file format")
261 .arg(QFileInfo(ms_run_id.get()->getFileName()).absoluteFilePath())));
262 }
263
264 else if(file_format == MzFormat::brukerTims)
265 {
266 if(prefered_file_reader_type == pappso::FileReaderType::tims)
267 {
268 return std::make_shared<TimsMsRunReader>(ms_run_id);
269 }
270 else if(prefered_file_reader_type == pappso::FileReaderType::tims_ms2)
271 {
272 return std::make_shared<TimsMsRunReaderMs2>(ms_run_id);
273 }
274
275 //qDebug() << "by default, build a TimsMsRunReader.";
276 return std::make_shared<TimsMsRunReader>(ms_run_id);
277 }
278 else
279 {
280 //qDebug() << "Returning a PwizMsRunReader .";
281
282 return std::make_shared<PwizMsRunReader>(ms_run_id);
283 }
284}
MzFormat
Definition: types.h:108
@ 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 146 of file msfileaccessor.cpp.

147{
148
149 // try TimsData reader
150 QString tims_dir = m_fileName;
151 if(!QFileInfo(tims_dir).isDir())
152 {
153 tims_dir = QFileInfo(m_fileName).absolutePath();
154 }
155 TimsMsFileReader tims_file_reader(tims_dir);
156
157 std::vector<MsRunIdCstSPtr> ms_run_ids =
158 tims_file_reader.getMsRunIds(m_xmlPrefix);
159
160 if(ms_run_ids.size())
161 {
162 // qDebug() << "Might well be handled using the Bruker code";
164 m_fileFormat = tims_file_reader.getFileFormat();
165 m_fileName = tims_dir;
166
167 return std::make_shared<TimsMsRunReaderMs2>(ms_run_ids.front());
168 }
169 else
170 {
171 throw(ExceptionNotPossible(
172 QObject::tr("Unable to read mz data directory %1 with TimsTOF reader.")
173 .arg(tims_dir)));
174 }
175}

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

62{
63 return m_fileFormat;
64}

References m_fileFormat.

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

◆ getFileName()

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

Definition at line 54 of file msfileaccessor.cpp.

55{
56 return m_fileName;
57}

References m_fileName.

◆ getFileReaderType()

FileReaderType pappso::MsFileAccessor::getFileReaderType ( ) const

get the file reader type

Definition at line 338 of file msfileaccessor.cpp.

339{
340 return m_fileReaderType;
341}

References m_fileReaderType.

◆ getMsRunIds()

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

Definition at line 68 of file msfileaccessor.cpp.

69{
70 // qDebug();
71
72 // Try the PwizMsFileReader
73
74 PwizMsFileReader pwiz_ms_file_reader(m_fileName);
75
76 std::vector<MsRunIdCstSPtr> ms_run_ids =
77 pwiz_ms_file_reader.getMsRunIds(m_xmlPrefix);
78 if(ms_run_ids.size())
79 {
80 // qDebug() << "Might well be handled using the Pwiz code.";
82
83 m_fileFormat = pwiz_ms_file_reader.getFileFormat();
84
85 return ms_run_ids;
86 }
87
88 // qDebug() << "The Pwiz reader did not work.";
89
90 // Try the TimsData reader
91
92 QString tims_dir = m_fileName;
93 if(!QFileInfo(tims_dir).isDir())
94 {
95 tims_dir = QFileInfo(m_fileName).absolutePath();
96 }
97
98 TimsMsFileReader tims_file_reader(tims_dir);
99
100 ms_run_ids = tims_file_reader.getMsRunIds(m_xmlPrefix);
101
102 if(ms_run_ids.size())
103 {
104 // qDebug() << "Might well be handled using the Bruker code";
106 m_fileFormat = tims_file_reader.getFileFormat();
107 m_fileName = tims_dir;
108
109
111 if(pref != m_preferedFileReaderTypeMap.end())
112 {
113 m_fileReaderType = pref->second;
114 }
115
116 //qDebug() << "Returning Bruker::tims ms run(s).";
117
118 return ms_run_ids;
119 }
120
121 // qDebug() << "The Tims reader did not work.";
122
123 // At this point try the XyMsFileReader
124
125 XyMsFileReader xy_ms_file_reader(m_fileName);
126
127 ms_run_ids = xy_ms_file_reader.getMsRunIds(m_xmlPrefix);
128
129 if(ms_run_ids.size())
130 {
131 // qDebug() << "Might well be handled using the XY code";
133
134 m_fileFormat = xy_ms_file_reader.getFileFormat();
135
136 return ms_run_ids;
137 }
138
139 // qDebug() << "The XY reader did not work.";
140
141 return ms_run_ids;
142}
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 288 of file msfileaccessor.cpp.

290{
291 std::vector<MsRunIdCstSPtr> run_list = getMsRunIds();
292 MsRunReaderSPtr reader_sp;
293 for(MsRunIdCstSPtr &original_run_id : run_list)
294 {
295 if(original_run_id.get()->getRunId() == run_id)
296 {
297 MsRunId new_run_id(*original_run_id.get());
298 new_run_id.setXmlId(xml_id);
299
300 return msRunReaderSp(std::make_shared<MsRunId>(new_run_id));
301 }
302 }
303
304 if((run_id.isEmpty()) && (run_list.size() == 1))
305 {
306 MsRunId new_run_id(*run_list[0].get());
307 new_run_id.setXmlId(xml_id);
308
309 return msRunReaderSp(std::make_shared<MsRunId>(new_run_id));
310 }
311
312
313 if(reader_sp == nullptr)
314 {
315 throw(
316 ExceptionNotFound(QObject::tr("run id %1 not found in file %2")
317 .arg(run_id)
318 .arg(QFileInfo(m_fileName).absoluteFilePath())));
319 }
320 return reader_sp;
321}
MsRunReaderSPtr msRunReaderSp(MsRunIdCstSPtr ms_run_id)
std::vector< MsRunIdCstSPtr > getMsRunIds()
std::shared_ptr< MsRunReader > MsRunReaderSPtr
Definition: msrunreader.h:185
std::shared_ptr< const MsRunId > MsRunIdCstSPtr
Definition: msrunid.h:45

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

◆ msRunReaderSp()

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

Definition at line 179 of file msfileaccessor.cpp.

180{
181 if(m_fileName != ms_run_id->getFileName())
182 throw(ExceptionNotPossible(
183 QObject::tr("The MsRunId instance must have the name file name as the "
184 "MsFileAccessor.")));
185
187 {
188 //qDebug() << "Returning a PwizMsRunReader.";
189
190 return std::make_shared<PwizMsRunReader>(ms_run_id);
191 }
193 {
194 //qDebug() << "Returning a XyMsRunReader.";
195
196 return std::make_shared<XyMsRunReader>(ms_run_id);
197 }
199 {
200 //qDebug() << "Returning a TimsMsRunReader.";
201
202 return std::make_shared<TimsMsRunReader>(ms_run_id);
203 }
205 {
206 //qDebug() << "Returning a TimsFramesMsRunReader.";
207
208 return std::make_shared<TimsFramesMsRunReader>(ms_run_id);
209 }
211 {
212 //qDebug() << "Returning a TimsMsRunReaderMs2.";
213
214 return std::make_shared<TimsMsRunReaderMs2>(ms_run_id);
215 }
217 {
218 if(ms_run_id.get()->getMzFormat() == MzFormat::xy)
219 {
220 return std::make_shared<XyMsRunReader>(ms_run_id);
221 }
222 else
223 {
224 return std::make_shared<PwizMsRunReader>(ms_run_id);
225 }
226 }
227
228 return nullptr;
229}

References m_fileFormat, m_fileName, m_fileReaderType, 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 324 of file msfileaccessor.cpp.

326{
327 auto ret = m_preferedFileReaderTypeMap.insert(
328 std::pair<MzFormat, FileReaderType>(format, reader_type));
329
330 if(!ret.second)
331 {
332 // replace
333 ret.first->second = reader_type;
334 }
335}

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

Definition at line 109 of file msfileaccessor.h.

Referenced by getMsRunIds(), and setPreferedFileReaderType().

◆ m_xmlPrefix

const QString pappso::MsFileAccessor::m_xmlPrefix
private

Definition at line 102 of file msfileaccessor.h.

Referenced by buildTimsMsRunReaderMs2SPtr(), and getMsRunIds().


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