46 String chopped = score_name;
49 chopped = chopped.
chop(6);
51 const std::set<String>& possible_types = type_to_str_[type];
52 return possible_types.find(chopped) != possible_types.end();
60 score_type = score_type.
chop(6);
63 score_type.erase(std::remove_if(score_type.begin(), score_type.end(),
64 [](
unsigned char c) { return c ==
'-' || c ==
'_' || c ==
' '; }),
67 const std::map<String, ScoreType> s_to_type =
69 {
"raw", ScoreType::RAW},
70 {
"rawevalue", ScoreType::RAW_EVAL},
71 {
"qvalue", ScoreType::QVAL},
72 {
"fdr", ScoreType::FDR},
73 {
"falsediscoveryrate", ScoreType::FDR},
74 {
"pep", ScoreType::PEP},
75 {
"posteriorerrorprobability", ScoreType::PEP},
76 {
"posteriorprobabilty", ScoreType::PP},
80 if (
auto it = s_to_type.find(score_type); it != s_to_type.end())
87 OPENMS_PRETTY_FUNCTION,
String(
"Unknown score type ") + score_type);
99 return type_to_better_[score_type];
129 template <
typename IDType>
132 for (
auto hit_it =
id.getHits().begin();
133 hit_it !=
id.getHits().end(); ++hit_it, ++counter)
135 if (!hit_it->metaValueExists(new_score_))
137 std::stringstream msg;
138 msg <<
"Meta value '" << new_score_ <<
"' not found for " << *hit_it;
140 OPENMS_PRETTY_FUNCTION, msg.str());
143 const String& old_score_meta = (old_score_.empty() ?
id.getScoreType() :
145 const DataValue& dv = hit_it->getMetaValue(old_score_meta);
153 if (fabs((
double(dv) - hit_it->getScore()) * 2.0 /
154 (
double(dv) + hit_it->getScore())) > tolerance_)
156 hit_it->setMetaValue(old_score_meta +
"~", hit_it->getScore());
161 hit_it->setMetaValue(old_score_meta, hit_it->getScore());
163 hit_it->setScore(hit_it->getMetaValue(new_score_));
165 id.setScoreType(new_score_type_);
166 id.setHigherScoreBetter(higher_better_);
195 template<
class IDType>
198 if (
id.empty())
return;
199 String t = findScoreType(
id[0], type);
202 String msg =
"First encountered ID does not have the requested score type.";
204 OPENMS_PRETTY_FUNCTION, msg);
206 else if (t ==
id[0].getScoreType())
215 new_score_type_ = t.
chop(6);
223 if (type != ScoreType::RAW && higher_better_ != type_to_better_[type])
225 OPENMS_LOG_WARN <<
"Requested non-raw score type does not match the expected score direction. Correcting!\n";
226 higher_better_ = type_to_better_[type];
230 switchScores(i, counter);
240 for (
const auto& f : cmap)
242 const auto& ids = f.getPeptideIdentifications();
245 new_type = findScoreType(ids[0], type);
246 if (new_type == ids[0].getScoreType())
257 if (new_type.empty())
259 String msg =
"First encountered ID does not have the requested score type.";
261 OPENMS_PRETTY_FUNCTION, msg);
266 new_score_type_ = new_type.
chop(6);
270 new_score_type_ = new_type;
272 new_score_ = new_type;
274 if (type != ScoreType::RAW && higher_better_ != type_to_better_[type])
276 OPENMS_LOG_WARN <<
"Requested non-raw score type does not match the expected score direction. Correcting!\n";
277 higher_better_ = type_to_better_[type];
280 const auto switchScoresSingle = [&counter,
this](
PeptideIdentification& id){switchScores(
id,counter);};
309 template <
typename IDType>
312 const String& curr_score_type =
id.getScoreType();
313 const std::set<String>& possible_types = type_to_str_[type];
314 if (possible_types.find(curr_score_type) != possible_types.end())
316 OPENMS_LOG_INFO <<
"Requested score type already set as main score: " + curr_score_type +
"\n";
317 return curr_score_type;
321 if (
id.getHits().empty())
323 OPENMS_LOG_WARN <<
"Identification entry used to check for alternative score was empty.\n";
326 const auto& hit =
id.getHits()[0];
327 for (
const auto& poss_str : possible_types)
329 if (hit.metaValueExists(poss_str))
333 else if (hit.metaValueExists(poss_str +
"_score"))
335 return poss_str +
"_score";
338 OPENMS_LOG_WARN <<
"Score of requested type not found in the UserParams of the checked ID object.\n";
347 const double tolerance_ = 1e-6;
356 std::map<ScoreType, std::set<String>> type_to_str_ =
359 {ScoreType::RAW, {
"svm",
"MS:1001492",
"XTandem",
"OMSSA",
"SEQUEST:xcorr",
"Mascot",
"mvh",
"hyperscore",
"ln(hyperscore)"}},
365 {ScoreType::RAW_EVAL, {
"expect",
"SpecEValue",
"E-Value",
"evalue",
"MS:1002053",
"MS:1002257"}},
366 {ScoreType::PP, {
"Posterior Probability"}},
367 {ScoreType::PEP, {
"Posterior Error Probability",
"pep",
"MS:1001493"}},
368 {ScoreType::FDR, {
"FDR",
"fdr",
"false discovery rate"}},
369 {ScoreType::QVAL, {
"q-value",
"qvalue",
"MS:1001491",
"q-Value",
"qval"}}
373 std::map<ScoreType, bool> type_to_better_ =
375 {ScoreType::RAW,
true},
376 {ScoreType::RAW_EVAL,
false},
377 {ScoreType::PP,
true},
378 {ScoreType::PEP,
false},
379 {ScoreType::FDR,
false},
380 {ScoreType::QVAL,
false}
#define OPENMS_LOG_WARN
Macro if a warning, a piece of information which should be read by the user, should be logged.
Definition: LogStream.h:444
#define OPENMS_LOG_INFO
Macro if a information, e.g. a status should be reported.
Definition: LogStream.h:449
A container for consensus elements.
Definition: ConsensusMap.h:66
Class to hold strings, numeric values, lists of strings and lists of numeric values.
Definition: DataValue.h:33
bool isEmpty() const
Test if the value is empty.
Definition: DataValue.h:362
A base class for all classes handling default parameters.
Definition: DefaultParamHandler.h:66
Definition: IDScoreSwitcherAlgorithm.h:25
static ScoreType getScoreType(String score_type)
Gets a ScoreType enum from a given score name score_name.
Definition: IDScoreSwitcherAlgorithm.h:56
String findScoreType(IDType &id, IDScoreSwitcherAlgorithm::ScoreType type)
Searches for a specified score type within an identification object and its meta values.
Definition: IDScoreSwitcherAlgorithm.h:310
bool isScoreTypeHigherBetter(ScoreType score_type)
Determines whether a higher score type is better given a ScoreType enum.
Definition: IDScoreSwitcherAlgorithm.h:97
void switchToGeneralScoreType(ConsensusMap &cmap, ScoreType type, Size &counter, bool unassigned_peptides_too=true)
Definition: IDScoreSwitcherAlgorithm.h:237
void switchScores(IDType &id, Size &counter)
Switches the main scores of all hits in an identification object based on the new scoring settings.
Definition: IDScoreSwitcherAlgorithm.h:130
std::vector< String > getScoreTypeNames()
ScoreType
Definition: IDScoreSwitcherAlgorithm.h:34
void switchToGeneralScoreType(std::vector< IDType > &id, ScoreType type, Size &counter)
Switches the scoring type of identification objects to a general score type.
Definition: IDScoreSwitcherAlgorithm.h:196
void updateMembers_() override
This method is used to update extra member variables at the end of the setParameters() method.
IDScoreSwitcherAlgorithm()
String new_score_
will be set according to the algorithm parameters
Definition: IDScoreSwitcherAlgorithm.h:350
bool higher_better_
will be set according to the algorithm parameters
Definition: IDScoreSwitcherAlgorithm.h:353
bool isScoreType(const String &score_name, const ScoreType &type)
Checks if the given score_name is of ScoreType type.
Definition: IDScoreSwitcherAlgorithm.h:44
void applyFunctionOnPeptideIDs(T &&f, bool include_unassigned=true)
applies a function on all PeptideIDs or only assigned ones
Definition: MapUtilities.h:42
Represents the peptide hits for a spectrum.
Definition: PeptideIdentification.h:39
A more convenient string class.
Definition: String.h:34
String chop(Size n) const
Returns a substring where n characters were removed from the end of the string.
String & toLower()
Converts the string to lowercase.
bool hasSuffix(const String &string) const
true if String ends with string, false otherwise
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:97
const double c
Definition: Constants.h:188
Main OpenMS namespace.
Definition: openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19