1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#include <pbdata/loadpulses/MetricField.hpp>
Field::Field(std::string n, FieldType t)
{
name = n;
type = t;
}
bool Field::operator==(const Field &another) const
{
return (name == another.name && type == another.type);
}
FieldsRequirement::FieldsRequirement(const std::string &m)
{
metric = m;
if (metric == "QualityValue" || metric == "InsertionQV" || metric == "MergeQV" ||
metric == "DeletionQV" || metric == "DeletionTag" || metric == "SubstitutionTag" ||
metric == "SubstitutionQV" || metric == "PreBaseFrames" || metric == "PulseIndex" ||
metric == "Basecall") {
fieldsUseBasFile.push_back(Field(metric, BasField));
} else if (metric == "ClassifierQV") {
fieldsUsePlsFile.push_back(Field(metric, PlsField));
fieldsUsePlsFile.push_back(Field("NumEvent", PlsField));
fieldsUsePlsFile.push_back(Field("PulseIndex", BasField));
} else if (metric == "StartTimeOffset") {
fieldsUsePlsFile.push_back(Field("StartFrame", PlsField));
fieldsUsePlsFile.push_back(Field("NumEvent", PlsField));
fieldsUsePlsFile.push_back(Field("PulseIndex", BasField));
} else if (metric == "StartFramePulse") { // Compute StartFrame from PulseCalls only
fieldsUsePlsFile.push_back(Field("StartFrame", PlsField));
fieldsUsePlsFile.push_back(Field("NumEvent", PlsField));
fieldsUsePlsFile.push_back(Field("PulseIndex", BasField));
} else if (metric == "StartFrameBase") { // Compute StartFrame from BaseCalls only
fieldsUseBasFile.push_back(Field("PreBaseFrames", BasField));
fieldsUseBasFile.push_back(Field("WidthInFrames", BasField));
} else if (metric == "WhenStarted") {
// WhenStarted does not require any field because it only requires an attribute
} else if (metric == "pkmid") {
fieldsUsePlsFile.push_back(Field("MidSignal", PlsField));
fieldsUsePlsFile.push_back(Field("NumEvent", PlsField));
fieldsUsePlsFile.push_back(Field("PulseIndex", BasField));
} else if (metric == "Light") {
fieldsUsePlsFile.push_back(Field("WidthInFrames", PlsField));
fieldsUsePlsFile.push_back(Field("MeanSignal", PlsField));
fieldsUsePlsFile.push_back(Field("NumEvent", PlsField));
fieldsUsePlsFile.push_back(Field("PulseIndex", BasField));
} else if (metric == "PulseWidth" || metric == "WidthInFrames") {
// Both metrics require a field "WidthInFrames", which can be read from
// either bas.h5 or pls.h5.
fieldsUseBasFile.push_back(Field("WidthInFrames", BasField));
fieldsUsePlsFile.push_back(Field("WidthInFrames", PlsField));
fieldsUsePlsFile.push_back(Field("NumEvent", PlsField));
fieldsUsePlsFile.push_back(Field("PulseIndex", BasField));
} else if (metric == "StartFrame") {
// Compute StartFrame from either PulseCalls or BaseCalls
fieldsUseBasFile.push_back(Field("PreBaseFrames", BasField));
fieldsUseBasFile.push_back(Field("WidthInFrames", BasField));
fieldsUsePlsFile.push_back(Field("StartFrame", PlsField));
fieldsUsePlsFile.push_back(Field("NumEvent", PlsField));
fieldsUsePlsFile.push_back(Field("PulseIndex", BasField));
} else if (metric == "IPD") {
// IPD can be obtained from basFile.PreBaseFrames or computed from
// plsFile.WidthInFrames and plsFile.StartFrame. Use the second method if possible
fieldsUseBasFile.push_back(Field("PreBaseFrames", BasField));
fieldsUsePlsFile.push_back(Field("StartFrame", PlsField));
fieldsUsePlsFile.push_back(Field("WidthInFrames", PlsField));
fieldsUsePlsFile.push_back(Field("NumEvent", PlsField));
fieldsUsePlsFile.push_back(Field("PulseIndex", BasField));
} else if (metric == "") {
// No metric, no required fields.
} else {
std::cout << "ERROR, metric [" << metric << "] is not supported." << std::endl;
std::exit(EXIT_FAILURE);
}
}
|