29#include "../../../pappsoexception.h"
31#include "../../../peptide/peptideproformaparser.h"
40 if(mpa_cborReader !=
nullptr)
41 delete mpa_cborReader;
48 initCborReader(cborp);
51 if(mpa_cborReader->isMap())
66 for(
auto &it : m_currentPsmProteinRefList)
68 if(!m_proteinMap.getByAccession(it.accession).isTarget)
77 for(
auto &it : m_currentPsmProteinRefList)
79 if(m_proteinMap.getByAccession(it.accession).isTarget)
90 mpa_cborReader->enterContainer();
93 if(m_expectedString ==
"informations")
95 readInformations(monitor);
98 if(m_expectedString ==
"log")
112 if(m_expectedString ==
"parameter_map")
114 readParameterMap(monitor);
123 m_targetFastaFiles.clear();
124 m_decoyFastaFiles.clear();
125 if(m_expectedString ==
"target_fasta_files")
127 mpa_cborReader->readArray(m_targetFastaFiles);
131 if(m_expectedString ==
"decoy_fasta_files")
133 mpa_cborReader->readArray(m_decoyFastaFiles);
136 fastaFilesReady(monitor);
138 if(m_expectedString ==
"protein_map")
140 readProteinMap(monitor);
144 if(m_expectedString ==
"sample_list")
146 sampleListStarted(monitor);
147 mpa_cborReader->enterContainer();
148 while(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
152 mpa_cborReader->leaveContainer();
153 sampleListFinished(monitor);
158 QObject::tr(
"ERROR: expecting sample_list element not %1").arg(m_expectedString));
160 mpa_cborReader->leaveContainer();
161 if(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
173 is_ok = mpa_cborReader->readCborMap(m_cborInformations);
179 qDebug() << m_cborInformations.keys();
180 if(m_cborInformations.value(
"type").toString() !=
"psm")
182 QStringList all_keys;
183 for(
auto it_k : m_cborInformations.keys())
185 all_keys << it_k.toString();
188 QObject::tr(
"ERROR: this file does not contain PSM data but %1 and %2")
189 .arg(m_cborInformations.value(
"type").toString())
190 .arg(all_keys.join(
" ")));
192 informationsReady(monitor);
200 is_ok = mpa_cborReader->readCborArray(m_cborLog);
214 m_cborParameterMap.clear();
215 is_ok = mpa_cborReader->readCborMap(m_cborParameterMap);
221 parameterMapReady(monitor);
227 m_proteinMap.readMap(*mpa_cborReader);
228 proteinMapReady(monitor);
238 mpa_cborReader->enterContainer();
240 qDebug() << m_expectedString;
241 if(m_expectedString ==
"accession")
243 is_ok = mpa_cborReader->decodeString(protein_ref.
accession);
255 qDebug() << m_expectedString;
256 if(m_expectedString ==
"positions")
258 mpa_cborReader->readArray(protein_ref.
positions);
262 mpa_cborReader->leaveContainer();
273 mpa_cborReader->enterContainer();
275 if(m_expectedString ==
"name")
277 if(!mpa_cborReader->decodeString(file.
name))
286 mpa_cborReader->leaveContainer();
296 writer.append(
"name");
297 writer.append(psm_file.
name);
303 const std::vector<PsmFile> &file_list)
306 for(
auto &psm_file : file_list)
308 writePsmFile(writer, psm_file);
319 mpa_cborReader->enterContainer();
322 qDebug() << m_expectedString;
323 if(m_expectedString ==
"name")
325 if(!mpa_cborReader->decodeString(m_currentSampleName))
340 qDebug() << m_expectedString;
341 m_currentIdentificationFileList.clear();
342 if(m_expectedString ==
"identification_file_list")
345 mpa_cborReader->enterContainer();
347 while(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
349 m_currentIdentificationFileList.push_back(readPsmFile(is_ok));
351 mpa_cborReader->leaveContainer();
358 if(m_expectedString ==
"peaklist_file")
361 m_currentPeaklistFile = readPsmFile(is_ok);
368 sampleStarted(monitor);
370 if(m_expectedString ==
"scan_list")
372 mpa_cborReader->enterContainer();
374 while(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
378 mpa_cborReader->leaveContainer();
384 mpa_cborReader->leaveContainer();
386 sampleFinished(monitor);
393 m_cborScanId.clear();
394 mpa_cborReader->enterContainer();
398 qDebug() <<
"scan begin";
401 qDebug() << m_expectedString;
402 if(m_expectedString ==
"id")
404 if(!mpa_cborReader->readCborMap(m_cborScanId))
412 QObject::tr(
"ERROR: expecting id element in scan not %1").arg(m_expectedString));
420 m_cborScanPrecursor.clear();
421 qDebug() << m_expectedString;
422 if(m_expectedString ==
"precursor")
424 if(!mpa_cborReader->readCborMap(m_cborScanPrecursor))
436 qDebug() << m_expectedString;
437 m_cborScanMs2.clear();
438 if(m_expectedString ==
"ms2")
440 if(!mpa_cborReader->readCborMap(m_cborScanMs2))
443 QObject::tr(
"ms2 element in scan is not a cbor map %1 %2:\n%3")
444 .arg(m_currentSampleName)
445 .arg(m_cborScanId.value(
"index").toInteger())
446 .arg(mpa_cborReader->lastError().toString()));
450 scanStarted(monitor);
453 qDebug() << m_expectedString;
454 if(m_expectedString ==
"psm_list")
456 mpa_cborReader->enterContainer();
457 while(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
461 mpa_cborReader->leaveContainer();
464 mpa_cborReader->leaveContainer();
465 qDebug() <<
"scan end";
466 scanFinished(monitor);
474 mpa_cborReader->enterContainer();
477 if(m_expectedString ==
"proforma")
479 if(!mpa_cborReader->decodeString(m_currentPsmProforma))
496 m_currentPsmProteinRefList.clear();
497 qDebug() << m_expectedString;
498 if(m_expectedString ==
"protein_list")
500 mpa_cborReader->enterContainer();
501 while(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
503 m_currentPsmProteinRefList.push_back(readPsmProteinRef(is_ok));
507 QObject::tr(
"ERROR: reading protein_list element in psm-scan"));
510 mpa_cborReader->leaveContainer();
518 m_cborScanPsmEval.clear();
519 if(!getExpectedString())
522 QObject::tr(
"ERROR: expecting eval element in psm-scan %1").arg(m_currentPsmProforma));
524 if(m_expectedString ==
"eval")
526 is_ok = mpa_cborReader->readCborMap(m_cborScanPsmEval);
533 qDebug() << m_expectedString;
536 mpa_cborReader->leaveContainer();
597 if(m_currentPsmProforma.isEmpty())
611 if(m_currentPeaklistFile.name.isEmpty())
615 if(m_cborScanId.isEmpty())
619 if(m_cborScanPrecursor.isEmpty())
623 if(m_cborScanMs2.isEmpty())
628 if(!m_cborScanId.keys().contains(
"index"))
632 if(!m_cborScanMs2.keys().contains(
"mz"))
636 if(!m_cborScanMs2.keys().contains(
"intensity"))
647 if(m_cborScanId.keys().contains(
"native_id"))
649 ms_id.
setNativeId(m_cborScanId.value(
"native_id").toString());
652 std::vector<DataPoint> data_point_vector;
654 for(
auto cbor_mz_value : m_cborScanMs2.value(
"mz").toArray())
656 data_point_vector.push_back(
657 {cbor_mz_value.toDouble(), m_cborScanMs2.value(
"intensity").toArray().at(i).toDouble()});
669 if(m_cborScanPrecursor.keys().contains(
"z"))
671 precursor_ion_data.
charge = m_cborScanPrecursor.value(
"z").toInteger();
673 if(m_cborScanPrecursor.keys().contains(
"mz"))
675 precursor_ion_data.
mz = m_cborScanPrecursor.value(
"mz").toDouble();
677 if(m_cborScanPrecursor.keys().contains(
"intensity"))
679 precursor_ion_data.
intensity = m_cborScanPrecursor.value(
"intensity").toDouble();
682 if(m_cborScanMs2.keys().contains(
"rt"))
684 qualified_mass_spectrum.
setRtInSeconds(m_cborScanMs2.value(
"rt").toDouble());
708 mz_prec = mz_prec * (double)charge;
709 mz_prec -= (
MHPLUS * (double)charge);
void setNativeId(const QString &native_id)
void setSpectrumIndex(std::size_t index)
Class to represent a mass spectrum.
MassSpectrumSPtr makeMassSpectrumSPtr() const
MS run identity MsRunId identifies an MS run with a unique ID (XmlId) and contains eventually informa...
void setSampleName(const QString &name)
set a sample name for this MsRunId
Class representing a fully specified mass spectrum.
void appendPrecursorIonData(const PrecursorIonData &precursor_ion_data)
void setMsLevel(uint ms_level)
Set the mass spectrum level.
QualifiedMassSpectrumSPtr makeQualifiedMassSpectrumSPtr() const
void setMassSpectrumSPtr(MassSpectrumSPtr massSpectrum)
Set the MassSpectrumSPtr.
void setRtInSeconds(pappso_double rt)
Set the retention time in seconds.
pappso::QualifiedMassSpectrumSPtr getCurrentQualifiedMassSpectrumSPtr() const
pappso::PeptideSp getCurrentPsmPeptideSp() const
bool currentProteinRefListContainsTarget() const
virtual void sampleListStarted(pappso::UiMonitorInterface &monitor)
void writePsmFileList(CborStreamWriter &writer, const std::vector< PsmFile > &file_list)
double getPrecursorMass(double mz_prec, uint charge) const
convenient function do compute precusor ion mass
PsmProteinRef readPsmProteinRef(bool &is_ok)
virtual void logReady(pappso::UiMonitorInterface &monitor)
virtual void scanStarted(pappso::UiMonitorInterface &monitor)
virtual void readPsm(pappso::UiMonitorInterface &monitor)
virtual void readLog(pappso::UiMonitorInterface &monitor)
virtual void proteinMapReady(pappso::UiMonitorInterface &monitor)
virtual void sampleStarted(pappso::UiMonitorInterface &monitor)
bool currentProteinRefListContainsDecoy() const
PsmFile readPsmFile(bool &is_ok)
virtual void readParameterMap(pappso::UiMonitorInterface &monitor)
void readCbor(QFile *cborp, pappso::UiMonitorInterface &monitor)
virtual void readScan(pappso::UiMonitorInterface &monitor)
virtual void readInformations(pappso::UiMonitorInterface &monitor)
virtual void scanFinished(pappso::UiMonitorInterface &monitor)
virtual void sampleListFinished(pappso::UiMonitorInterface &monitor)
virtual void psmReady(pappso::UiMonitorInterface &monitor)
virtual ~PsmFileReaderBase()
virtual void informationsReady(pappso::UiMonitorInterface &monitor)
void readRoot(pappso::UiMonitorInterface &monitor)
void writePsmFile(CborStreamWriter &writer, const PsmFile &psm_file)
virtual void fastaFilesReady(pappso::UiMonitorInterface &monitor)
virtual void parameterMapReady(pappso::UiMonitorInterface &monitor)
virtual void readProteinMap(pappso::UiMonitorInterface &monitor)
virtual void readSample(pappso::UiMonitorInterface &monitor)
virtual void sampleFinished(pappso::UiMonitorInterface &monitor)
std::shared_ptr< QualifiedMassSpectrum > QualifiedMassSpectrumSPtr
std::shared_ptr< const Peptide > PeptideSp
std::shared_ptr< const MsRunId > MsRunIdCstSPtr
const pappso_double MHPLUS(1.007276466879)
Base class to read CBOR PSM file.
std::vector< std::size_t > positions