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...
 

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()

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

Definition at line 224 of file msfileaccessor.cpp.

225 {
226 
227  QFile file(ms_run_id.get()->getFileName());
228  if(!file.exists())
229  throw(ExceptionNotFound(
230  QObject::tr("unable to build a reader : file %1 not found.")
231  .arg(QFileInfo(ms_run_id.get()->getFileName()).absoluteFilePath())));
232 
233  MzFormat file_format = ms_run_id.get()->getMzFormat();
234 
235  if(file_format == MzFormat::xy)
236  {
237  qDebug() << "Returning a XyMsRunReader.";
238 
239  return std::make_shared<XyMsRunReader>(ms_run_id);
240  }
241  else if(file_format == MzFormat::unknown)
242  {
243  throw(PappsoException(
244  QObject::tr("unable to build a reader for %1 : unknown file format")
245  .arg(QFileInfo(ms_run_id.get()->getFileName()).absoluteFilePath())));
246  }
247  else if(file_format == MzFormat::brukerTims)
248  {
249  qDebug() << "by default, build a TimsMsRunReader.";
250  return std::make_shared<TimsMsRunReader>(ms_run_id);
251  }
252  else
253  {
254  qDebug() << "Returning a PwizMsRunReader .";
255 
256  return std::make_shared<PwizMsRunReader>(ms_run_id);
257  }
258 }
MzFormat
Definition: types.h:107
@ xy
(x,y) format
@ unknown
unknown format

References pappso::brukerTims, 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.

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

313 {
314  return m_fileReaderType;
315 }

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

263 {
264  qDebug() << "GGGGGGGGG1";
265  std::vector<MsRunIdCstSPtr> run_list = getMsRunIds();
266  MsRunReaderSPtr reader_sp;
267  qDebug() << "GGGGGGGGG";
268  for(MsRunIdCstSPtr &original_run_id : run_list)
269  {
270  if(original_run_id.get()->getRunId() == run_id)
271  {
272  MsRunId new_run_id(*original_run_id.get());
273  new_run_id.setXmlId(xml_id);
274 
275  return msRunReaderSp(std::make_shared<MsRunId>(new_run_id));
276  }
277  }
278 
279  if((run_id.isEmpty()) && (run_list.size() == 1))
280  {
281  MsRunId new_run_id(*run_list[0].get());
282  new_run_id.setXmlId(xml_id);
283 
284  return msRunReaderSp(std::make_shared<MsRunId>(new_run_id));
285  }
286 
287 
288  if(reader_sp == nullptr)
289  {
290  throw(
291  ExceptionNotFound(QObject::tr("run id %1 not found in file %2")
292  .arg(run_id)
293  .arg(QFileInfo(m_fileName).absoluteFilePath())));
294  }
295  return reader_sp;
296 }
MsRunReaderSPtr msRunReaderSp(MsRunIdCstSPtr ms_run_id)
std::vector< MsRunIdCstSPtr > getMsRunIds()
std::shared_ptr< MsRunReader > MsRunReaderSPtr
Definition: msrunreader.h:151
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 299 of file msfileaccessor.cpp.

301 {
302  auto ret = m_preferedFileReaderTypeMap.insert(
303  std::pair<MzFormat, FileReaderType>(format, reader_type));
304  if(!ret.second)
305  {
306  // replace
307  ret.first->second = reader_type;
308  }
309 }

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

Referenced by getMsRunIds(), and setPreferedFileReaderType().

◆ m_xmlPrefix

const QString pappso::MsFileAccessor::m_xmlPrefix
private

Definition at line 84 of file msfileaccessor.h.

Referenced by buildTimsMsRunReaderMs2SPtr(), and getMsRunIds().


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