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 pappso::tims.

◆ 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 
110  auto pref = m_preferedFileReaderTypeMap.find(m_fileFormat);
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:44

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: