From 78daaf6e5b1464ce377c1294980243d9ab35fca2 Mon Sep 17 00:00:00 2001 From: Frank Haverland Date: Fri, 24 Jun 2022 14:58:00 +0200 Subject: [PATCH 1/3] fix -1 on the last digital digit if using digital100 model --- .../ClassFlowCNNGeneral.cpp | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp index 2a486c11..c158d512 100644 --- a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp +++ b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp @@ -10,7 +10,7 @@ static const char* TAG = "flow_analog"; -bool debugdetailgeneral = false; +bool debugdetailgeneral = true; ClassFlowCNNGeneral::ClassFlowCNNGeneral(ClassFlowAlignment *_flowalign, t_CNNType _cnntype) : ClassFlowImage(NULL, TAG) { @@ -31,6 +31,7 @@ ClassFlowCNNGeneral::ClassFlowCNNGeneral(ClassFlowAlignment *_flowalign, t_CNNTy string ClassFlowCNNGeneral::getReadout(int _analog = 0, bool _extendedResolution, int prev) { string result = ""; + if (GENERAL[_analog]->ROI.size() == 0) return result; @@ -67,6 +68,7 @@ string ClassFlowCNNGeneral::getReadout(int _analog = 0, bool _extendedResolution if ((CNNType == DoubleHyprid10) || (CNNType == Digital100)) { + float zahl = GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float; if (zahl >= 0) // NaN? { @@ -77,12 +79,15 @@ string ClassFlowCNNGeneral::getReadout(int _analog = 0, bool _extendedResolution result = std::to_string(ergebnis_vorkomma) + std::to_string(ergebnis_nachkomma); prev = ergebnis_vorkomma; + + } else { prev = ZeigerEval(GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float, prev); // prev = ZeigerEvalHybrid(GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float, prev, prev); result = std::to_string(prev); + } } else @@ -162,6 +167,7 @@ int ClassFlowCNNGeneral::ZeigerEvalHybrid(float zahl, float zahl_vorgaenger, int { int ergebnis_nachkomma = ((int) floor(zahl * 10)) % 10; int ergebnis_vorkomma = ((int) floor(zahl) + 10) % 10; + if (debugdetailgeneral) LogFile.WriteToFile("ClassFlowCNNGeneral::ZeigerEvalHybrid parameter: " + std::to_string(zahl) + ", " + std::to_string(zahl_vorgaenger) + ", " + std::to_string(eval_vorgaenger)); if (eval_vorgaenger < 0) // keine Vorzahl vorhanden !!! --> Runde die Zahl @@ -188,6 +194,8 @@ int ClassFlowCNNGeneral::ZeigerEvalHybrid(float zahl, float zahl_vorgaenger, int } else // bleibt nur >= 9.5 --> noch kein Nulldurchgang --> 2.8 --> 2, und 3.1 --> 2 { + if (debugdetailgeneral) LogFile.WriteToFile("ClassFlowCNNGeneral::ZeigerEvalHybrid kein Nulldurchgang: " + std::to_string(ergebnis_vorkomma) + ", " + std::to_string(ergebnis_nachkomma)); + if (ergebnis_nachkomma > 5) return ergebnis_vorkomma; else @@ -238,17 +246,21 @@ int ClassFlowCNNGeneral::ZeigerEval(float zahl, int ziffer_vorgaenger) if (ziffer_vorgaenger == -1) return ergebnis_vorkomma % 10; + // Ist die aktuelle Stelle schon umgesprungen und die Vorstelle noch nicht? + // Akt.: 2.1, Vorstelle = 0.9 => 1.9 ergebnis_rating = ergebnis_nachkomma - ziffer_vorgaenger; - if (ergebnis_nachkomma >= 5) + // Keine Ahnung was der Code macht. Bei Übergang Analog zu Digital verursacht er + // eine -1 auf der kleinsten Digitalstelle. + /*if (ergebnis_nachkomma >= 5) ergebnis_rating-=5; else - ergebnis_rating+=5; + ergebnis_rating+=5;*/ ergebnis = (int) round(zahl); if (ergebnis_rating < 0) ergebnis-=1; if (ergebnis == -1) ergebnis+=10; - + ergebnis = (ergebnis + 10) % 10; return ergebnis; } From bda2913a3241abb36d4c88965c67b48ddbc57063 Mon Sep 17 00:00:00 2001 From: Frank Haverland Date: Fri, 24 Jun 2022 14:59:51 +0200 Subject: [PATCH 2/3] cleanup, disable debugging --- code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp index c158d512..8fbb5ead 100644 --- a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp +++ b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp @@ -10,7 +10,7 @@ static const char* TAG = "flow_analog"; -bool debugdetailgeneral = true; +bool debugdetailgeneral = false; ClassFlowCNNGeneral::ClassFlowCNNGeneral(ClassFlowAlignment *_flowalign, t_CNNType _cnntype) : ClassFlowImage(NULL, TAG) { @@ -167,7 +167,6 @@ int ClassFlowCNNGeneral::ZeigerEvalHybrid(float zahl, float zahl_vorgaenger, int { int ergebnis_nachkomma = ((int) floor(zahl * 10)) % 10; int ergebnis_vorkomma = ((int) floor(zahl) + 10) % 10; - if (debugdetailgeneral) LogFile.WriteToFile("ClassFlowCNNGeneral::ZeigerEvalHybrid parameter: " + std::to_string(zahl) + ", " + std::to_string(zahl_vorgaenger) + ", " + std::to_string(eval_vorgaenger)); if (eval_vorgaenger < 0) // keine Vorzahl vorhanden !!! --> Runde die Zahl @@ -194,8 +193,6 @@ int ClassFlowCNNGeneral::ZeigerEvalHybrid(float zahl, float zahl_vorgaenger, int } else // bleibt nur >= 9.5 --> noch kein Nulldurchgang --> 2.8 --> 2, und 3.1 --> 2 { - if (debugdetailgeneral) LogFile.WriteToFile("ClassFlowCNNGeneral::ZeigerEvalHybrid kein Nulldurchgang: " + std::to_string(ergebnis_vorkomma) + ", " + std::to_string(ergebnis_nachkomma)); - if (ergebnis_nachkomma > 5) return ergebnis_vorkomma; else From ef244667020154706042e306567341fd09432017 Mon Sep 17 00:00:00 2001 From: Frank Haverland Date: Sun, 26 Jun 2022 13:44:55 +0200 Subject: [PATCH 3/3] revert comment out in ZeigerEval use ZeigerEvalHybrid instead of ZeigerEval in DoubleHyprid10/Digital100 branch --- .../ClassFlowCNNGeneral.cpp | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp index 8fbb5ead..f84b2645 100644 --- a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp +++ b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp @@ -34,13 +34,15 @@ string ClassFlowCNNGeneral::getReadout(int _analog = 0, bool _extendedResolution if (GENERAL[_analog]->ROI.size() == 0) return result; + if (debugdetailgeneral) LogFile.WriteToFile("ClassFlowCNNGeneral::getReadout _analog=" + std::to_string(_analog) + ", _extendedResolution=" + std::to_string(_extendedResolution) + ", prev=" + std::to_string(prev)); if (CNNType == Analogue) { float zahl = GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float; int ergebnis_nachkomma = ((int) floor(zahl * 10) + 10) % 10; - + prev = ZeigerEval(GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float, prev); + if (debugdetailgeneral) LogFile.WriteToFile("ClassFlowCNNGeneral::getReadout(analog) zahl=" + std::to_string(zahl) + ", ergebnis_nachkomma=" + std::to_string(ergebnis_nachkomma) + ", prev=" + std::to_string(prev)); result = std::to_string(prev); if (_extendedResolution && (CNNType != Digital)) @@ -79,15 +81,17 @@ string ClassFlowCNNGeneral::getReadout(int _analog = 0, bool _extendedResolution result = std::to_string(ergebnis_vorkomma) + std::to_string(ergebnis_nachkomma); prev = ergebnis_vorkomma; - + if (debugdetailgeneral) LogFile.WriteToFile("ClassFlowCNNGeneral::getReadout(dig100-ext) ergebnis_vorkomma=" + std::to_string(ergebnis_vorkomma) + ", ergebnis_nachkomma=" + std::to_string(ergebnis_nachkomma) + ", prev=" + std::to_string(prev)); + } else { - prev = ZeigerEval(GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float, prev); -// prev = ZeigerEvalHybrid(GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float, prev, prev); +// prev = ZeigerEval(GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float, prev); + prev = ZeigerEvalHybrid(GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float, prev, prev); result = std::to_string(prev); - + if (debugdetailgeneral) LogFile.WriteToFile("ClassFlowCNNGeneral::getReadout(dig100) prev=" + std::to_string(prev)); + } } else @@ -239,6 +243,7 @@ int ClassFlowCNNGeneral::ZeigerEval(float zahl, int ziffer_vorgaenger) int ergebnis_nachkomma = ((int) floor(zahl * 10) + 10) % 10; int ergebnis_vorkomma = ((int) floor(zahl) + 10) % 10; int ergebnis, ergebnis_rating; + if (debugdetailgeneral) LogFile.WriteToFile("ClassFlowCNNGeneral::ZeigerEval erg_v=" + std::to_string(ergebnis_vorkomma) + ", erg_n=" + std::to_string(ergebnis_nachkomma) + ", ziff_v=" + std::to_string(ziffer_vorgaenger)); if (ziffer_vorgaenger == -1) return ergebnis_vorkomma % 10; @@ -246,12 +251,11 @@ int ClassFlowCNNGeneral::ZeigerEval(float zahl, int ziffer_vorgaenger) // Ist die aktuelle Stelle schon umgesprungen und die Vorstelle noch nicht? // Akt.: 2.1, Vorstelle = 0.9 => 1.9 ergebnis_rating = ergebnis_nachkomma - ziffer_vorgaenger; - // Keine Ahnung was der Code macht. Bei Übergang Analog zu Digital verursacht er - // eine -1 auf der kleinsten Digitalstelle. - /*if (ergebnis_nachkomma >= 5) + + if (ergebnis_nachkomma >= 5) ergebnis_rating-=5; else - ergebnis_rating+=5;*/ + ergebnis_rating+=5; ergebnis = (int) round(zahl); if (ergebnis_rating < 0) ergebnis-=1;