ExitCodes main_(int, const char**) { //------------------------------------------------------------- // parsing parameters //------------------------------------------------------------- String in = getStringOption_("in"); String out = getStringOption_("out"); String target_run = getStringOption_("name"); String target_file = getStringOption_("run"); StringList qp_accs = getStringList_("qp_accessions"); //------------------------------------------------------------- // reading input //------------------------------------------------------------ if (target_file != "") { target_run = QFileInfo(QString::fromStdString(target_file)).baseName(); } //~ !getFlag_("tables") QcMLFile qcmlfile; qcmlfile.load(in); if (qp_accs.empty()) { qp_accs.push_back("QC:0000044"); qp_accs.push_back("QC:0000047"); qp_accs.push_back("QC:0000022"); qp_accs.push_back("QC:0000038"); qp_accs.push_back("QC:0000049"); } //TODO care for QualityParameter s if (target_run == "") { for (Size i = 0; i < qp_accs.size(); ++i) { qcmlfile.removeAllAttachments(qp_accs[i]); } } else { for (Size i = 0; i < qp_accs.size(); ++i) { qcmlfile.removeAttachment(target_run,qp_accs[i]); } } qcmlfile.store(out); return EXECUTION_OK; }
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 **) { String plot_file = ""; //------------------------------------------------------------- // parsing parameters //------------------------------------------------------------- StringList in_files = getStringList_("in"); String out = getStringOption_("out"); String setname = getStringOption_("setname"); //------------------------------------------------------------- // reading input //------------------------------------------------------------- QcMLFile qcmlfile; for (Size i = 0; i < in_files.size(); ++i) { QcMLFile tmpfile; tmpfile.load(in_files[i]); qcmlfile.merge(tmpfile,setname); } // make #ms2 set stats std::vector<String> ms2nums_strings; qcmlfile.collectSetParameter(setname,"QC:0000015", ms2nums_strings); std::vector<Int> ms2nums; for (std::vector<String>::iterator it = ms2nums_strings.begin(); it != ms2nums_strings.end(); ++it) //transform is too ugly and errorprone { ms2nums.push_back(it->toInt()); } std::sort(ms2nums.begin(), ms2nums.end()); if (ms2nums.size()>0) { std::map<String,String> nums; std::map<String,String> nams; //~ min,q1,q2,q3,max nums["QC:0000043"] = String(ms2nums.front()); nams["QC:0000043"] = "min ms2 number"; nums["QC:0000044"] = String(OpenMS::Math::quantile(ms2nums.begin(), ms2nums.end(),25)); nams["QC:0000044"] = "Q1 ms2 number"; nums["QC:0000045"] = String(OpenMS::Math::quantile(ms2nums.begin(), ms2nums.end(),50)); nams["QC:0000045"] = "Q2 ms2 number"; nums["QC:0000046"] = String(OpenMS::Math::quantile(ms2nums.begin(), ms2nums.end(),75)); nams["QC:0000046"] = "Q3 ms2 number"; nums["QC:0000047"] = String(ms2nums.back()); nams["QC:0000047"] = "max ms2 number"; addBoxPlotQPs(nums, nams, setname, qcmlfile); } // make #id set stats std::vector<String> idnums_strings; qcmlfile.collectSetParameter(setname,"QC:0000020", idnums_strings); std::vector<Int> idnums; for (std::vector<String>::iterator it = idnums_strings.begin(); it != idnums_strings.end(); ++it) //transform is too ugly and errorprone { idnums.push_back(it->toInt()); } std::sort(idnums.begin(), idnums.end()); if (idnums.size()>0) { std::map<String,String> nums; std::map<String,String> nams; //~ min,q1,q2,q3,max nums["QC:0000053"] = String(idnums.front()); nams["QC:0000053"] = "min id numbers"; nums["QC:0000054"] = String(OpenMS::Math::quantile(idnums.begin(), idnums.end(),25)); nams["QC:0000054"] = "Q1 id numbers"; nums["QC:0000055"] = String(OpenMS::Math::quantile(idnums.begin(), idnums.end(),50)); nams["QC:0000055"] = "Q2 id numbers"; nums["QC:0000056"] = String(OpenMS::Math::quantile(idnums.begin(), idnums.end(),75)); nams["QC:0000056"] = "Q3 id numbers"; nums["QC:0000057"] = String(idnums.back()); nams["QC:0000057"] = "max id number"; addBoxPlotQPs(nums, nams, setname, qcmlfile); } 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 }
ExitCodes main_(int, const char**) { //------------------------------------------------------------- // parsing parameters //------------------------------------------------------------- String in = getStringOption_("in"); String out = getStringOption_("out"); String mappi = getStringOption_("mapping"); String tab = getStringOption_("table"); ControlledVocabulary cv; cv.loadFromOBO("PSI-MS", File::find("/CV/psi-ms.obo")); cv.loadFromOBO("QC", File::find("/CV/qc-cv.obo")); //------------------------------------------------------------- // reading input //------------------------------------------------------------ QcMLFile qcmlfile; if (in != "") { qcmlfile.load(in); } if (mappi != "" && tab != "") { CsvFile csv_file(tab); CsvFile map_file(mappi); if (map_file.size()<2) //assumed that first row is the header of table and second row is the according qc { cerr << "Error: You have to give a mapping of your table (first row is the header of table and second row is the according qc). Aborting!" << endl; return ILLEGAL_PARAMETERS; } StringList header,according; map_file.getRow(0, header); map_file.getRow(1, according); if (header.size() != according.size()) { cerr << "Error: You have to give a mapping of your table (first row is the header of table and second row is the according qc). Aborting!" << endl; return ILLEGAL_PARAMETERS; } //~ std::map<String,String> mapping; //~ std::transform( header.begin(), header.end(), according.begin(), std::inserter(mapping, mapping.end() ), std::make_pair<String,String> ); int runset_col = -1; for (Size i = 0; i < according.size(); ++i) { if (!cv.exists(according[i])) { try { const ControlledVocabulary::CVTerm& term = cv.getTermByName(according[i]); header[i] = term.name; according[i] = term.id; } catch (...) { cerr << "Error: You have to specify a correct cv with accession or name in col "<< String(i) <<". Aborting!" << endl; //~ cerr << "Header was: "<< header[i] << " , according value was: " << according[i] << endl; return ILLEGAL_PARAMETERS; } } else { const ControlledVocabulary::CVTerm& term = cv.getTerm(according[i]); header[i] = term.name; } if (header[i] == "raw data file") //TODO add set name as possibility! { runset_col = i; } } if (runset_col < 0) { cerr << "Error: You have to give a mapping of your table - rows to runs/sets. Aborting!" << endl; return ILLEGAL_PARAMETERS; } if (csv_file.size()>1) { StringList li; for (Size i = 1; i < csv_file.size(); ++i) { StringList li; csv_file.getRow(i, li); if (li.size() < according.size()) { cerr << "Error: You have to give a correct mapping of your table - row " << String(i+1) <<" is too short. Aborting!" << endl; return ILLEGAL_PARAMETERS; } std::vector< QcMLFile::QualityParameter > qps; String id; bool set = false; for (Size j = 0; j < li.size(); ++j) { if (j==runset_col) { if (qcmlfile.existsRun(li[j])) //TODO this only works for real run IDs { id = li[j]; } else if (qcmlfile.existsSet(li[j])) //TODO this only works for real set IDs { id = li[j]; set = true; } else { id = li[j]; qcmlfile.registerRun(id,id); //TODO warn that if this was supposed to be a set - now it is not! } } QcMLFile::QualityParameter def; def.name = header[j]; ///< Name def.id = String(UniqueIdGenerator::getUniqueId()); def.cvRef = "QC"; ///< cv reference ('full name') def.cvAcc = according[j]; def.value = li[j]; qps.push_back(def); } if (id!="") { for (std::vector<QcMLFile::QualityParameter>::const_iterator qit = qps.begin(); qit != qps.end(); ++qit) { if (!set) { qcmlfile.addRunQualityParameter(id, *qit); } else { qcmlfile.addSetQualityParameter(id, *qit); } } } } } } qcmlfile.store(out); return EXECUTION_OK; }