Loading...
Searching...
No Matches
xymsfilereader.cpp
Go to the documentation of this file.
/////////////////////// StdLib includes
/////////////////////// Qt includes
#include <QDebug>
#include <QFile>
#include <QFileInfo>
/////////////////////// libpwiz includes
#include <pwiz/data/msdata/DefaultReaderList.hpp>
/////////////////////// Local includes
#include "xymsfilereader.h"
#include "pappsomspp/core/utils.h"
#include "pappsomspp/core/types.h"
#include "pappsomspp/core/msrun/msrunid.h"
namespace pappso
{
XyMsFileReader::XyMsFileReader(const QString &file_name)
: MsFileReader{file_name}
{
}
XyMsFileReader::~XyMsFileReader()
{
}
bool
XyMsFileReader::initialize(std::size_t &line_count)
{
// Here we just test all the lines of the file to check that they comply with
// the xy format.
line_count = 0;
QFile file(m_fileName);
if(!file.open(QFile::ReadOnly | QFile::Text))
{
qDebug() << "Failed to open file" << m_fileName;
return 0;
}
QRegularExpressionMatch regExpMatch;
QString line;
bool file_reading_failed = false;
while(!file.atEnd())
{
line = file.readLine();
// We only read a given number of lines from the file, that would be
// enough to check if that file has the right syntax or not.
// if(linesRead >= 2000)
// return true;
if(line.startsWith('#') || line.isEmpty() ||
Utils::endOfLineRegExp.match(line).hasMatch())
continue;
// qDebug() << "Current xy format line:" << line;
if(Utils::xyMassDataFormatRegExp.match(line).hasMatch())
{
++line_count;
continue;
}
else
{
// the first line of the text file may include column titles
if(line_count > 0)
{
file_reading_failed = true;
break;
}
}
}
if(!file_reading_failed && line_count >= 1)
{
m_fileFormat = Enums::MsDataFormat::xy;
return true;
}
m_fileFormat = Enums::MsDataFormat::unknown;
// qDebug() << "m_fileFormat: " << static_cast<int>(m_fileFormat);
return false;
}
Enums::MsDataFormat
XyMsFileReader::getFileFormat()
{
return m_fileFormat;
}
std::vector<MsRunIdCstSPtr>
XyMsFileReader::getMsRunIds(const QString &run_prefix)
{
std::vector<MsRunIdCstSPtr> ms_run_ids;
std::size_t line_count = 0;
if(!initialize(line_count))
return ms_run_ids;
// Finally create the MsRunId with the file name.
MsRunId ms_run_id(m_fileName);
ms_run_id.setMsDataFormat(m_fileFormat);
// We need to set the unambiguous xmlId string.
ms_run_id.setXmlId(
QString("%1%2").arg(run_prefix).arg(Utils::getLexicalOrderedString(0)));
// Craft a meaningful sample name because otherwise all the files loaded from
// text files will have the same sample name and it will be difficult to
// differentiate them.
// Orig version:
// ms_run_id.setRunId("Single spectrum");
// Now the sample name is nothing but the file name without the path.
QFileInfo file_info(m_fileName);
// qDebug() << "file name:" << m_fileName;
QString sample_name = file_info.fileName();
// qDebug() << "sample name:" << sample_name;
ms_run_id.setRunId(sample_name);
// Now set the sample name to the run id:
ms_run_id.setSampleName(ms_run_id.getRunId());
// Now set the sample name to the run id:
ms_run_id.setSampleName(ms_run_id.getRunId());
// qDebug() << __FILE__ << "@" << __LINE__ << __FUNCTION__ << "()"
//<< "Current ms_run_id:" << ms_run_id.toString();
// Finally make a shared pointer out of it and append it to the vector.
ms_run_ids.push_back(std::make_shared<MsRunId>(ms_run_id));
return ms_run_ids;
}
} // namespace pappso
CardanoResultCase::line
@ line
Definition cardano.h:42
pappso::MsFileReader::MsFileReader
MsFileReader(const QString &file_name)
Definition msfilereader.cpp:19
pappso::MsFileReader::m_fileFormat
Enums::MsDataFormat m_fileFormat
Definition msfilereader.h:17
pappso::MsFileReader::m_fileName
QString m_fileName
Definition msfilereader.h:16
pappso::MsRunId
MS run identity MsRunId identifies an MS run with a unique ID (XmlId) and contains eventually informa...
Definition msrunid.h:54
pappso::MsRunId::setMsDataFormat
void setMsDataFormat(Enums::MsDataFormat format)
Definition msrunid.cpp:168
pappso::MsRunId::getRunId
const QString & getRunId() const
Definition msrunid.cpp:140
pappso::MsRunId::setRunId
void setRunId(const QString &run_id)
Definition msrunid.cpp:133
pappso::MsRunId::setXmlId
void setXmlId(const QString &xml_id)
set an XML unique identifier for this MsRunId
Definition msrunid.cpp:147
pappso::MsRunId::setSampleName
void setSampleName(const QString &name)
set a sample name for this MsRunId
Definition msrunid.cpp:77
pappso::Utils::xyMassDataFormatRegExp
static QRegularExpression xyMassDataFormatRegExp
Regular expression matching <numerical value><non-numerical*><numericalvalue>.
Definition utils.h:60
pappso::Utils::getLexicalOrderedString
static const QString getLexicalOrderedString(unsigned int num)
Definition utils.cpp:72
pappso::Utils::endOfLineRegExp
static QRegularExpression endOfLineRegExp
Regular expression that tracks the end of line in text files.
Definition utils.h:69
pappso::XyMsFileReader::getMsRunIds
virtual std::vector< MsRunIdCstSPtr > getMsRunIds(const QString &run_prefix) override
Definition xymsfilereader.cpp:106
pappso::XyMsFileReader::getFileFormat
virtual Enums::MsDataFormat getFileFormat() override
Definition xymsfilereader.cpp:100
pappso::XyMsFileReader::initialize
virtual bool initialize(std::size_t &line_count)
Definition xymsfilereader.cpp:34
pappso::XyMsFileReader::XyMsFileReader
XyMsFileReader(const QString &file_name)
Definition xymsfilereader.cpp:24
pappso::XyMsFileReader::~XyMsFileReader
virtual ~XyMsFileReader()
Definition xymsfilereader.cpp:29
msrunid.h
pappso::Enums::MsDataFormat
MsDataFormat
Definition types.h:148
pappso::Enums::MsDataFormat::xy
@ xy
(x,y) format
Definition types.h:154
pappso::Enums::MsDataFormat::unknown
@ unknown
unknown format
Definition types.h:149
pappso
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition aa.cpp:39
types.h
utils.h
xymsfilereader.h