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

Constructor & Destructor Documentation

◆ MsFileAccessor() [1/2]

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

Definition at line 28 of file msfileaccessor.cpp.

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

◆ MsFileAccessor() [2/2]

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

Definition at line 39 of file msfileaccessor.cpp.

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

◆ ~MsFileAccessor()

pappso::MsFileAccessor::~MsFileAccessor ( )
virtual

Definition at line 47 of file msfileaccessor.cpp.

48 {
49 }

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

225 {
227 }
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 230 of file msfileaccessor.cpp.

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

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

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

61 {
62  return m_fileFormat;
63 }

References m_fileFormat.

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

◆ getFileName()

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

Definition at line 53 of file msfileaccessor.cpp.

54 {
55  return m_fileName;
56 }

References m_fileName.

◆ getFileReaderType()

FileReaderType pappso::MsFileAccessor::getFileReaderType ( ) const

get the file reader type

Definition at line 329 of file msfileaccessor.cpp.

330 {
331  return m_fileReaderType;
332 }

References m_fileReaderType.

◆ getMsRunIds()

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

Definition at line 67 of file msfileaccessor.cpp.

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

280 {
281  qDebug() << "GGGGGGGGG1";
282  std::vector<MsRunIdCstSPtr> run_list = getMsRunIds();
283  MsRunReaderSPtr reader_sp;
284  qDebug() << "GGGGGGGGG";
285  for(MsRunIdCstSPtr &original_run_id : run_list)
286  {
287  if(original_run_id.get()->getRunId() == run_id)
288  {
289  MsRunId new_run_id(*original_run_id.get());
290  new_run_id.setXmlId(xml_id);
291 
292  return msRunReaderSp(std::make_shared<MsRunId>(new_run_id));
293  }
294  }
295 
296  if((run_id.isEmpty()) && (run_list.size() == 1))
297  {
298  MsRunId new_run_id(*run_list[0].get());
299  new_run_id.setXmlId(xml_id);
300 
301  return msRunReaderSp(std::make_shared<MsRunId>(new_run_id));
302  }
303 
304 
305  if(reader_sp == nullptr)
306  {
307  throw(
308  ExceptionNotFound(QObject::tr("run id %1 not found in file %2")
309  .arg(run_id)
310  .arg(QFileInfo(m_fileName).absoluteFilePath())));
311  }
312  return reader_sp;
313 }
MsRunReaderSPtr msRunReaderSp(MsRunIdCstSPtr ms_run_id)
std::vector< MsRunIdCstSPtr > getMsRunIds()
std::shared_ptr< MsRunReader > MsRunReaderSPtr
Definition: msrunreader.h:166
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 175 of file msfileaccessor.cpp.

176 {
177  if(m_fileName != ms_run_id->getFileName())
178  throw(ExceptionNotPossible(
179  QObject::tr("The MsRunId instance must have the name file name as the "
180  "MsFileAccessor.")));
181 
183  {
184  qDebug() << "Returning a PwizMsRunReader.";
185 
186  return std::make_shared<PwizMsRunReader>(ms_run_id);
187  }
189  {
190  qDebug() << "Returning a XyMsRunReader.";
191 
192  return std::make_shared<XyMsRunReader>(ms_run_id);
193  }
194 
196  {
197  qDebug() << "Returning a TimsMsRunReader.";
198 
199  return std::make_shared<TimsMsRunReader>(ms_run_id);
200  }
202  {
203  qDebug() << "Returning a TimsMsRunReaderMs2.";
204 
205  return std::make_shared<TimsMsRunReaderMs2>(ms_run_id);
206  }
207 
209  {
210  if(ms_run_id.get()->getMzFormat() == MzFormat::xy)
211  {
212  return std::make_shared<XyMsRunReader>(ms_run_id);
213  }
214  else
215  {
216  return std::make_shared<PwizMsRunReader>(ms_run_id);
217  }
218  }
219 
220  return nullptr;
221 }

References m_fileFormat, m_fileName, m_fileReaderType, pappso::pwiz, pappso::tims, 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 316 of file msfileaccessor.cpp.

318 {
319  auto ret = m_preferedFileReaderTypeMap.insert(
320  std::pair<MzFormat, FileReaderType>(format, reader_type));
321  if(!ret.second)
322  {
323  // replace
324  ret.first->second = reader_type;
325  }
326 }

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

Referenced by getMsRunIds(), and setPreferedFileReaderType().

◆ m_xmlPrefix

const QString pappso::MsFileAccessor::m_xmlPrefix
private

Definition at line 101 of file msfileaccessor.h.

Referenced by buildTimsMsRunReaderMs2SPtr(), and getMsRunIds().


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