56 readAlignmentMethodSp();
57 readQuantificationMethodSp();
63 readProjectParameters();
68 m_isMatchBetweenRun = msp_quantificationMethod.get()->getMatchBetweenRun();
73 param.
name =
"mcq_version";
75 m_projectParameters.setProjectParam(param);
77 m_projectParameters.merge(msp_alignmentMethod.get()->getProjectParameters());
78 m_projectParameters.merge(msp_quantificationMethod.get()->getProjectParameters());
84 QJsonObject methods = m_jsonDocument.object().value(
"masschroq_methods").toObject();
89 QJsonObject msrun_list = documentFind(
"identification_data",
"msrun_list").toObject();
91 QJsonObject protein_list = documentFind(
"identification_data",
"protein_list").toObject();
93 QJsonObject peptide_list = documentFind(
"identification_data",
"peptide_list").toObject();
95 QJsonObject msrunpeptide_list =
96 documentFind(
"identification_data",
"msrunpeptide_list").toObject();
102 read_msrun_peptide_observations();
104 QJsonObject actions = m_jsonDocument.object().value(
"actions").toObject();
107 readAction(cbor_output);
140 std::map<QString, QString> msfilepathlist;
141 const QJsonObject msrun_list(documentFind(
"identification_data",
"msrun_list").toObject());
142 auto it = msrun_list.begin();
143 while(it != msrun_list.end())
145 qDebug() << it.key();
146 qDebug() << it.value().toObject().value(
"file");
149 msfilepathlist.insert({it.key(), it.value().toObject().value(
"file").toString()});
156 mapFilenameList = [](
const std::pair<QString, QString> &mapit) {
161 std::vector<pappso::MsRunIdCstSPtr> msrunid_list = file_access.
getMsRunIds();
168 if(msrunid_list.size() == 0)
175 run_reader.get()->setMonoThread(
true);
177 run_reader.get()->releaseDevice();
178 run_reader.get()->setMonoThread(
false);
179 return std::make_shared<pappso::masschroq::MsRunPeptideList>(msrun);
184 m_uiMonitor.appendText(QObject::tr(
"reading %1 msruns").arg(msfilepathlist.size()));
188 std::map<QString, pappso::masschroq::MsRunPeptideListSp> *p_localPtrOnmsrunpeptidelist =
192 [local_monitor, p_localPtrOnmsrunpeptidelist](
194 local_monitor->
setStatus(QObject::tr(
"MS run '%1' from file %2: added ")
198 ->getMsRunReaderSPtr()
206 ->getMsRunReaderSPtr()
212 p_localPtrOnmsrunpeptidelist->insert({msrun.get()
215 ->getMsRunReaderSPtr()
224 QFuture<std::size_t> res = QtConcurrent::mappedReduced<std::size_t>(msfilepathlist.begin(),
225 msfilepathlist.end(),
228 QtConcurrent::OrderedReduce);
229 res.waitForFinished();
231 m_uiMonitor.appendText(
"reading msruns finished");
232 if(m_msfileList.begin()->second.get()->getMsRunSp().get()->hasTimsTofMobilityIndex())
234 m_uiMonitor.appendText(
"ion mobility grid enabled");
235 msp_ionMobilityGrid = std::make_shared<pappso::IonMobilityGrid>();
277 const QJsonObject protein_list(documentFind(
"identification_data",
"protein_list").toObject());
281 auto it = protein_list.begin();
282 while(it != protein_list.end())
284 qDebug() << it.key();
285 qDebug() << it.value().toObject().value(
"description");
291 p_protein = std::make_shared<pappso::masschroq::Protein>(
292 it.key(), it.value().toObject().value(
"description").toString());
297 QObject::tr(
"problem creating protein :\n%1").arg(it.key()));
300 m_proteinMap.insert({p_protein.get()->getId(), p_protein});
310 const QJsonObject peptide_list(documentFind(
"identification_data",
"peptide_list").toObject());
314 auto it = peptide_list.begin();
315 while(it != peptide_list.end())
317 qDebug() << it.key();
318 qDebug() << it.value().toObject().value(
"proforma");
325 std::vector<pappso::masschroq::ProteinSp> protein_list;
326 for(
auto prot_id : it.value().toObject().value(
"proteins").toArray())
328 auto it = m_proteinMap.find(prot_id.toString());
329 if(it != m_proteinMap.end())
331 protein_list.push_back(it->second);
336 QObject::tr(
"protein id %1 not found").arg(prot_id.toString()));
341 peptide_sp = std::make_shared<pappso::masschroq::Peptide>(
344 it.value().toObject().value(
"proforma").toString()),
346 m_peptideStore.push_back(peptide_sp);
347 peptide_sp.get()->setMods(it.value().toObject().value(
"mods").toString());
348 m_peptideMap.insert({peptide_sp.get()->getId(), peptide_sp});
351 QJsonObject json_label_list = it.value().toObject().value(
"label_list").toObject();
354 if(!json_label_list.isEmpty())
357 peptide_sp.get()->setJsonLabelList(json_label_list);
364 QObject::tr(
"problem creating protein :\n%1").arg(it.key()));
376 const QJsonObject msrunpeptide_list(
377 documentFind(
"identification_data",
"msrunpeptide_list").toObject());
378 auto it = msrunpeptide_list.begin();
379 while(it != msrunpeptide_list.end())
381 qDebug() << it.key();
382 QJsonObject jmsrun_peptidelist_object = it.value().toObject();
383 auto it_peptide_obs = jmsrun_peptidelist_object.find(
"peptide_obs");
384 if(it_peptide_obs == jmsrun_peptidelist_object.end())
387 QObject::tr(
"peptide_obs not found in msrunpeptide_list %1").arg(it.key()));
389 QJsonObject json_msrunobs = it_peptide_obs->toObject();
390 auto it_msrun = m_msfileList.find(it.key());
391 if(it_msrun == m_msfileList.end())
397 auto itpep = json_msrunobs.begin();
398 while(itpep != json_msrunobs.end())
400 qDebug() << itpep.key();
401 QJsonArray json_obs_list = itpep.value().toArray();
402 auto it_pepmap = m_peptideMap.find(itpep.key());
403 if(it_pepmap == m_peptideMap.end())
408 qDebug() <<
"json_obs_list.size()=" << json_obs_list.size();
409 for(
auto json_obs_value : json_obs_list)
411 QJsonObject observation = json_obs_value.toObject();
412 qint64 scan = observation.value(
"scan").toInteger();
413 qint64 index = observation.value(
"index").toInteger();
414 QString label = observation.value(
"label").toString();
415 std::uint8_t charge =
416 observation.value(
"precursor").toObject().value(
"charge").toInt();
422 p_label = peptide_sp.get()->getPeptideLabelPtr(label);
426 msrunpep_sp.get()->addPeptideSpectrumIndexObservation(
427 peptide_sp, p_label, index, charge);
432 msrunpep_sp.get()->addPeptideScanNumberObservation(
433 peptide_sp, p_label, scan, charge);
436 peptide_sp.get()->addObservedChargeState(charge);
437 peptide_sp.get()->addObservedInMsRunSp(msrunpep_sp.get()->getMsRunSp());
442 QObject::tr(
"error reading peptide %1 observation scan %2 "
452 if(msp_ionMobilityGrid.get() !=
nullptr)
454 if(peptide_sp.get() !=
nullptr)
456 peptide_sp.get()->populateIonMobilityGrid(msp_ionMobilityGrid.get());
472 if(ni_min_abundance > 0)
480 peptide_sp.get()->computeIsotopologues(ni_min_abundance);
484 QFuture<void> res = QtConcurrent::map<std::vector<pappso::masschroq::PeptideSp>::iterator>(
485 m_peptideStore.begin(), m_peptideStore.end(), mapComputeIsotopologues);
486 m_uiMonitor.appendText(QObject::tr(
"Computing isotopologues %1").arg(ni_min_abundance));
487 res.waitForFinished();
489 m_uiMonitor.appendText(
"Computing isotopologues OK");
497 const QJsonObject group_list(documentFind(
"actions",
"group_list").toObject());
499 auto it_group = group_list.begin();
500 while(it_group != group_list.end())
502 QString
id = it_group.key();
503 QJsonArray json_msrun_list = it_group.value().toArray();
504 std::vector<pappso::masschroq::MsRunPeptideListSp> msrun_list;
505 for(
auto json_msrun : json_msrun_list)
508 auto it_msrun = m_msfileList.find(json_msrun.toString());
509 if(it_msrun == m_msfileList.end())
512 QObject::tr(
"msrun %1 not found").arg(json_msrun.toString()));
514 msrun_list.push_back(it_msrun->second);
517 m_msRunGroupSpList.insert({id, std::make_shared<MsRunGroup>(
id, msrun_list)});
522 QJsonObject align_list;
525 align_list = documentFind(
"actions",
"align_group").toObject();
530 if(!align_list.isEmpty())
535 std::size_t count_q = 1;
536 QStringList group_keys = align_list.keys();
537 for(
auto group_id : group_keys)
539 auto itgroup = m_msRunGroupSpList.find(group_id);
540 if(itgroup == m_msRunGroupSpList.end())
547 align_list.value(group_id).toObject().value(
"alignment_reference").toString();
548 if(!ref_id.isEmpty())
550 itgroup->second.get()->setAlignmentMethodSp(msp_alignmentMethod, ref_id);
552 itgroup->second.get()->setIonMobilityGridSp(msp_ionMobilityGrid);
553 itgroup->second.get()->align(cbor_output, QString(
"a%1").arg(count_q), m_uiMonitor);
560 QVariant quantify_all;
563 quantify_all = documentFind(
"actions",
"quantify_all").toVariant();
568 if(!quantify_all.isNull())
570 if(quantify_all.toBool())
572 double ni_ratio = msp_quantificationMethod.get()->getIsotopeMinimumRatio();
573 computeIsotopologues(ni_ratio);
574 std::size_t count_q = 1;
577 for(
auto &pair_group : m_msRunGroupSpList)
579 pair_group.second.get()->setIonMobilityGridSp(msp_ionMobilityGrid);
580 pair_group.second.get()->quantify(cbor_output,
581 QString(
"q%1").arg(count_q),
584 msp_quantificationMethod,