ExitCodes main_(int, const char**) { //------------------------------------------------------------- // parsing parameters //------------------------------------------------------------- String in = getStringOption_("in"); String out = getStringOption_("out"); String target_qp = getStringOption_("qp_att_acc"); String target_acc = getStringOption_("cv_acc"); String target_run = getStringOption_("name"); String target_file = getStringOption_("run"); String plot_file = getStringOption_("plot"); String tab = getStringOption_("table"); //------------------------------------------------------------- // fetch vocabularies //------------------------------------------------------------ ControlledVocabulary cv; cv.loadFromOBO("PSI-MS", File::find("/CV/psi-ms.obo")); cv.loadFromOBO("QC", File::find("/CV/qc-cv.obo")); //------------------------------------------------------------- // reading input //------------------------------------------------------------ if (target_file != "") { target_run = QFileInfo(QString::fromStdString(target_file)).baseName(); } QcMLFile qcmlfile; if (in != "") { qcmlfile.load(in); } if (target_run == "") { //~ check if only one run in file std::vector<String> nas; qcmlfile.getRunNames(nas); if (nas.size() == 1) { target_run = nas.front(); } else { cerr << "Error: You have to give at least one of the following parameter (in ascending precedence): name, run. Aborting!" << endl; return ILLEGAL_PARAMETERS; } } QFile f(plot_file.c_str()); String plot_b64; if (f.open(QIODevice::ReadOnly)) { QByteArray ba = f.readAll(); f.close(); plot_b64 = String(QString(ba.toBase64())); } QcMLFile::Attachment at; at.cvAcc = target_acc; at.id = String(UniqueIdGenerator::getUniqueId()); at.cvRef = "QC"; //TODO assign right cv reference if (plot_b64 != "" || tab != "") { if (plot_b64 != "") { try { const ControlledVocabulary::CVTerm& term = cv.getTerm(target_acc); at.name = term.name; ///< Name //~ at.unitRef; //TODO MIME type //~ at.unitAcc; } catch (...) { cerr << "Error: You have to give the accession of a existing cv term. Aborting!" << endl; return ILLEGAL_PARAMETERS; } at.binary = plot_b64; } else if (tab != "") { try { const ControlledVocabulary::CVTerm& term = cv.getTerm(target_acc); at.name = term.name; ///< Name //~ at.unitRef; //TODO MIME type //~ at.unitAcc; } catch (...) { cerr << "Error: You have to give the accession of a existing cv term. Aborting!" << endl; return ILLEGAL_PARAMETERS; } CsvFile csv_file(tab); if (csv_file.size()>1) { StringList li; csv_file.getRow(0, li); for (Size i = 0; i < li.size(); ++i) { at.colTypes.push_back(li[i]); } for (UInt i = 1; i < csv_file.size(); ++i) { StringList li; std::vector<String> v; csv_file.getRow(i, li); //TODO throw error if li.size() != at.colTypes.size() for (Size i = 0; i < li.size(); ++i) { v.push_back(li[i]); } at.tableRows.push_back(v); } } } else { cerr << "Error: Nothing valid to attach. Aborting!" << endl; return ILLEGAL_PARAMETERS; } std::vector<String> ids; qcmlfile.existsRunQualityParameter(target_run, target_qp, ids); if (!ids.empty()) { at.qualityRef = ids.front(); qcmlfile.addRunAttachment(target_run, at); } else { qcmlfile.existsSetQualityParameter(target_run, target_qp, ids); if (!ids.empty()) { at.qualityRef = ids.front(); qcmlfile.addSetAttachment(target_run, at); } else { cerr << "Error: You have to give the accession of a existing cv term to attacht to. Aborting!" << endl; return ILLEGAL_PARAMETERS; } } } qcmlfile.store(out); return EXECUTION_OK; }
ExitCodes main_(int, const char**) { //------------------------------------------------------------- // parsing parameters //------------------------------------------------------------- String in = getStringOption_("in"); String csv = getStringOption_("out_csv"); String target_qp = getStringOption_("qp"); String target_run = getStringOption_("name"); String target_file = getStringOption_("run"); //------------------------------------------------------------- // reading input //------------------------------------------------------------ if (target_file != "") { target_run = QFileInfo(QString::fromStdString(target_file)).baseName(); } QcMLFile qcmlfile; qcmlfile.load(in); if (target_run == "") { //~ check if only one run in file std::vector<String> nas; qcmlfile.getRunNames(nas); if (nas.size() == 1) { target_run = nas.front(); } else { cerr << "Error: You have to give at least one of the following parameter (in ascending precedence): name, run. Aborting!" << endl; return ILLEGAL_PARAMETERS; } } String csv_str = ""; if (target_qp == "set id") { if (qcmlfile.existsSet(target_run,true)) { csv_str = qcmlfile.exportIDstats(target_run); } else { cerr << "Error: You have to specify a existing set for this qp. " << target_run << " seems not to exist. Aborting!" << endl; return ILLEGAL_PARAMETERS; } } else { //TODO warn when target_run is empty or not present in qcml csv_str = qcmlfile.exportAttachment(target_run, target_qp); } ofstream fout(csv.c_str()); fout << csv_str << endl; fout.close(); //~ qcmlfile.store(out); return EXECUTION_OK; //~ TODO export table containing all given qp }