📄 flog.cpp
字号:
// $util\flog.cpp 1.5 milbo$ filter ms logs and print summary// Warning: this is raw research code -- expect it to be quite messy.// milbo petaluma aug 05//-----------------------------------------------------------------------------// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// A copy of the GNU General Public License is available at// http://www.r-project.org/Licenses///-----------------------------------------------------------------------------#include "all.hpp"#define BASE_SHAPE_LEV CONF_nLevs#define NLEVS (CONF_nLevs+1) // +1 for storing StartShape stats like any other levelstatic int ngLine = 0; // line number in log file#define NLINE 5000 // big enough for extended lines from msstatic char sgLine[NLINE]; // current line in log filestatic char sgImageDir[SLEN]; // directory used for imagesstatic char sgFname[SLEN]; // current filenamestatic int igPrefix;static char cgPrefix0, cgPrefix1;static int ngMaxLev = -100, ngMinLev = 100, igLev = 100;static int ngDone[2]; // [2] for two prefixesstatic int ngFilePrefixChange[2]; // index when we changed from one file prefix to anotherstatic char cgFilePrefix[2];static double gFit[NLEVS][2]; // average fitstatic double gVal0[CONF_nMaxMatDim]; // specific values for Fit for igPrefix==0static double gVal1[CONF_nMaxMatDim]; // specific values for Fit for igPrefix==1static int igVal0, igVal1; // reference into gFitValstatic int ngWorseVal, ngBetterVal; // number of pass 2 Fits Worse than (same as) pass 1static double gLEyeFit[NLEVS][2];static double gLEyeVal0[CONF_nMaxMatDim]; // specific values for Fit for igPrefix==0static double gLEyeVal1[CONF_nMaxMatDim]; // specific values for Fit for igPrefix==1static int igLEyeVal0, igLEyeVal1; // reference into gLEyeValstatic int ngWorseLEyeVal, ngBetterLEyeVal; // number of pass 2 Fits Worse than (same as) pass 1static double gREyeFit[NLEVS][2];static double gREyeVal0[CONF_nMaxMatDim]; // specific values for Fit for igPrefix==0static double gREyeVal1[CONF_nMaxMatDim]; // specific values for Fit for igPrefix==1static int igREyeVal0, igREyeVal1; // reference into gREyeValstatic int ngWorseREyeVal, ngBetterREyeVal; // number of pass 2 Fits Worse than (same as) pass 1static double gMouthFit[NLEVS][2];static double gMouthVal0[CONF_nMaxMatDim]; // specific values for Fit for igPrefix==0static double gMouthVal1[CONF_nMaxMatDim]; // specific values for Fit for igPrefix==1static int igMouthVal0, igMouthVal1; // reference into gFitMouthValstatic int ngWorseMouthVal, ngBetterMouthVal; // number of pass 2 Fits Worse than (same as) pass 1static double gPointFit[NLEVS][2];static double gPointVal0[CONF_nMaxMatDim]; // specific values for Fit for igPrefix==0static double gPointVal1[CONF_nMaxMatDim]; // specific values for Fit for igPrefix==1static int igPointVal0, igPointVal1; // reference into gPointValstatic int ngWorsePointVal, ngBetterPointVal; // number of pass 2 Fits Worse than (same as) pass 1static int igPoint = -1;static int ngFit[NLEVS][2];static int ngLEyeFit[NLEVS][2];static int ngREyeFit[NLEVS][2];static int ngMouthFit[NLEVS][2];static int ngPointFit[NLEVS][2];static double gMax[NLEVS][2];static int ngMax[NLEVS][2];static double gTime[2];static bool fgIgnore = false;//-----------------------------------------------------------------------------static CheckThatAllNsMatch (void){int N = ngFit[0][0];#if 1 // it's no longer an error if we don't match at all levelsfor (int iLev = ngMinLev; iLev >= ngMinLev; iLev--)#elsefor (int iLev = ngMaxLev; iLev >= ngMinLev; iLev--)#endif { if (ngFit[iLev][0] != N) lprintf("Err: Fit N[iLev %d][0] %d != N[iLev 0][0] %d\n", iLev, ngFit[iLev][0], N); if (ngLEyeFit[0][0] && ngLEyeFit[iLev][0] != N) lprintf("Err: LEyeFit N[%d][0] %d != %d\n", iLev, ngLEyeFit[iLev][0], N); if (ngREyeFit[0][0] && ngREyeFit[iLev][0] != N) lprintf("Err: REyeFit N[%d][0] %d != %d\n", iLev, ngREyeFit[iLev][0], N); if (ngMouthFit[0][0] && ngMouthFit[iLev][0] != N) lprintf("Err: MouthFit N[%d][0] %d != %d\n", iLev, ngMouthFit[iLev][0], N); if (ngPointFit[0][0] && ngPointFit[iLev][0] != N) lprintf("Err: PointFit N[%d][0] %d != %d\n", iLev, ngPointFit[iLev][0], N); if (cgPrefix1 && ngFit[iLev][1] != N) lprintf("Err: Fit N[iLev %d][Prefix 1] %d != ngFit[iLev 0][Prefix 0] %d\n", iLev, ngFit[iLev][1], N); if (ngMax[iLev][0] != N) lprintf("Err: nMax N[%d][0] %d != %d\n", iLev, ngMax[iLev][0], N); if (cgPrefix1 && ngMax[iLev][1] != N) lprintf("Err: nMax N[%d][1] %d != %d\n", iLev, ngMax[iLev][1], N); }}//-----------------------------------------------------------------------------static void CheckSameNbrResults (void){if (cgPrefix1) { if (igVal0 != igVal1) Err("Different number of Fit results for prefix %c (%d) and prefix %c (%d)", cgPrefix0, igVal0, cgPrefix1, igVal1); if (igLEyeVal0 != igLEyeVal1) Err("Different number of LEyeFit results for prefix %c (%d) and prefix %c (%d)", cgPrefix0, igLEyeVal0, cgPrefix1, igLEyeVal1); if (igREyeVal0 != igREyeVal1) Err("Different number of REyeFit results for prefix %c (%d) and prefix %c (%d)", cgPrefix0, igREyeVal0, cgPrefix1, igREyeVal1); if (igMouthVal0 != igMouthVal1) Err("Different number of MouthFit results for prefix %c (%d) and prefix %c (%d)", cgPrefix0, igMouthVal0, cgPrefix1, igMouthVal1); if (igPointVal0 != igPointVal1) Err("Different number of PointFit results for prefix %c (%d) and prefix %c (%d)", cgPrefix0, igPointVal0, cgPrefix1, igPointVal1); if (ngDone[0] != igVal0) lprintf("Err: ngDone[0] %d != %d\n", ngDone[0], igVal0); if (ngDone[1] != igVal1) lprintf("Err: ngDone[1] %d != %d\n", ngDone[1], igVal1); if (ngFilePrefixChange[0] != ngFilePrefixChange[0]) // different number of XM2VTS and BioId files in testset A and testset B? lprintf("Err: ngFilePrefixChange[0] %d != %d\n", ngFilePrefixChange[0], ngFilePrefixChange[1]); }if (igLEyeVal0 && igLEyeVal0 != igVal0) Err("Different number of LEyeFit results %d and Fit results %d\n", igLEyeVal0, igVal0);if (igREyeVal0 && igREyeVal0 != igVal0) Err("Different number of REyeFit results %d and Fit results %d\n", igREyeVal0, igVal0);if (igMouthVal0 && igMouthVal0 != igVal0) Err("Different number of MouthFit results %d and Fit results %d\n", igMouthVal0, igVal0);if (igPointVal0 && igPointVal0 != igVal0) Err("Different number of PointFit results %d and Fit results %d\n", igPointVal0, igVal0);}//-----------------------------------------------------------------------------static inline double Sqrt (double x){if (!fIeeeNormal(x)) SysErr("Sqrt: %g not IEEE normal", x);if (x < 0) SysErr("Sqrt: %g less than zero", x);return sqrt(x);}//-----------------------------------------------------------------------------//// N=25 A SDev B SDev PairedT TProb ChangeAtoB BetterB WorseB Base// Fit 4.73 0.90 4.71 0.94 0.10 0.393 -0.5% 52% 24% 4.8// Max 15.69 15.59 -0.6%// LEyeFit 3.76 1.58 3.76 1.58 -0.00 0.395 0.1% 44% 32% 5.2// REyeFit 3.76 1.58 3.76 1.58 -0.00 0.395 0.1% 44% 32% 5.1// MouthFit 3.85 1.15 3.82 1.21 0.08 0.393 -0.8% 36% 44% 4.9// Point57 1.85 1.15 0.82 1.21 0.08 0.393 -0.8% 36% 44% 2.3// Time 0.30 0.27 -8.5%static void ShowSummaryTotals (char sHeader[], int iStart, int iEnd, bool fFullRange){char sPrefix[SLEN];if (fFullRange) sPrefix[0] = 0;else sprintf(sPrefix, "%s", sHeader);double Fit0, Dev0;CheckSameNbrResults();int n = iEnd-iStart;MeanAndVariance(Fit0, Dev0, &gVal0[iStart], n);Dev0 = Sqrt(Dev0);double Max0 = gMax[0][0] / n;double StudentsT, TProb;double Fit1 = 0, Dev1 = 0, Max1 = 0;if (n) { MeanAndVariance(Fit1, Dev1, &gVal1[iStart], n); Dev1 = Sqrt(Dev1); StudentsTPairedSampleTest(StudentsT, TProb, &gVal0[iStart], &gVal1[iStart], n); Max1 = gMax[0][1] / ngFit[0][1]; }double Time0 = 0;if (ngDone[0]) Time0 = gTime[0] / ngDone[0];double Time1 = 0;if (ngDone[1]) Time1 = gTime[1] / ngDone[1];lprintf("\n%-6.6sN=%2.2d%s %c SDev %c %s ", sHeader, n, (n > 99? "": " "), (cgPrefix0? cgPrefix0: ' '), (cgPrefix1? cgPrefix1: ' '), (cgPrefix1? "SDev": " "));if (ngFit[0][1]) lprintf(" PairedT TProb Change%cto%c", (cgPrefix1? cgPrefix1: '1'), (cgPrefix0? cgPrefix0: '0'));if (fFullRange && ngFit[0][1]) lprintf(" Better%c Worse%c", (cgPrefix0? cgPrefix0: '0'), (cgPrefix1? cgPrefix1: '1'));if (fFullRange) lprintf(" Base ChangeBaseTo%c", (cgPrefix0? cgPrefix0: '0'));lprintf("\n");lprintf("%sFit %8.3f %8.3f ", sPrefix, Fit0, Dev0);if (Fit1 != 0) lprintf("%8.3f %8.3f ", Fit1, Dev1); else lprintf(" ");if (ngFit[0][1]) { lprintf("%8.2f %8.3f ", StudentsT, TProb); lprintf(" %5.1f%%", 100 * (Fit1 - Fit0)/Fit0); }if (fFullRange) { if (ngFit[0][1]) lprintf(" %4d%% %4d%% ", (100 * ngBetterVal) / igVal0, (100 * ngWorseVal) / igVal0); lprintf(" %8.3f %5.1f%%", gFit[BASE_SHAPE_LEV][0]/ngFit[0][0], 100 * (gFit[BASE_SHAPE_LEV][0] - gFit[0][0]) / gFit[0][0]); }lprintf("\n");if (ngLEyeFit[0][0]) { MeanAndVariance(Fit0, Dev0, &gLEyeVal0[iStart], n); Dev0 = Sqrt(Dev0); Fit1 = 0, Dev1 = 0; if (n) { MeanAndVariance(Fit1, Dev1, &gLEyeVal1[iStart], n); Dev1 = Sqrt(Dev1); StudentsTPairedSampleTest(StudentsT, TProb, &gLEyeVal0[iStart], &gLEyeVal1[iStart], n); } lprintf("%sLEyeFit %8.3f %8.3f ", sPrefix, Fit0, Dev0); if (Fit1 != 0) lprintf("%8.3f %8.3f ", Fit1, Dev1); else lprintf(" "); if (n && Fit0 != 0 && ngLEyeFit[0][1]) { lprintf("%8.2f %7.3f ", StudentsT, TProb); lprintf(" %5.1f%%", 100 * (Fit1 - Fit0)/Fit0); } if (fFullRange) { if (ngLEyeFit[0][1]) lprintf(" %4d%% %4d%% ", (100 * ngBetterLEyeVal) / igLEyeVal0, (100 * ngWorseLEyeVal) / igLEyeVal0); lprintf(" %8.3f %5.1f%%", gLEyeFit[BASE_SHAPE_LEV][0] / ngLEyeFit[BASE_SHAPE_LEV][0], 100 * (gLEyeFit[BASE_SHAPE_LEV][0] - gLEyeFit[0][0]) / gLEyeFit[0][0]); } lprintf("\n"); }if (ngREyeFit[0][0]) { MeanAndVariance(Fit0, Dev0, &gREyeVal0[iStart], n); Dev0 = Sqrt(Dev0); Fit1 = 0, Dev1 = 0; if (n) { MeanAndVariance(Fit1, Dev1, &gREyeVal1[iStart], n); Dev1 = Sqrt(Dev1); StudentsTPairedSampleTest(StudentsT, TProb, &gREyeVal0[iStart], &gREyeVal1[iStart], n); } lprintf("%sREyeFit %8.3f %8.3f ", sPrefix, Fit0, Dev0); if (Fit1 != 0) lprintf("%8.3f %8.3f ", Fit1, Dev1); else lprintf(" "); if (n && Fit0 != 0&& ngREyeFit[0][1]) { lprintf("%8.2f %7.3f ", StudentsT, TProb); lprintf(" %5.1f%%", 100 * (Fit1 - Fit0)/Fit0); } if (fFullRange) { if (ngREyeFit[0][1]) lprintf(" %4d%% %4d%% ", (100 * ngBetterREyeVal) / igREyeVal0, (100 * ngWorseREyeVal) / igREyeVal0); lprintf(" %8.3f %5.1f%%", gREyeFit[BASE_SHAPE_LEV][0] / ngREyeFit[BASE_SHAPE_LEV][0], 100 * (gREyeFit[BASE_SHAPE_LEV][0] - gREyeFit[0][0]) / gREyeFit[0][0]); } lprintf("\n"); }if (ngMouthFit[0][0]) { MeanAndVariance(Fit0, Dev0, &gMouthVal0[iStart], n); Dev0 = Sqrt(Dev0); Fit1 = 0, Dev1 = 0; if (n) { MeanAndVariance(Fit1, Dev1, &gMouthVal1[iStart], n); Dev1 = Sqrt(Dev1); StudentsTPairedSampleTest(StudentsT, TProb, &gMouthVal0[iStart], &gMouthVal1[iStart], n); } lprintf("%sMouthFit %8.3f %8.3f ", sPrefix, Fit0, Dev0); if (Fit1 != 0) lprintf("%8.3f %8.3f ", Fit1, Dev1); else lprintf(" "); if (n && Fit0 != 0 && ngMouthFit[0][1]) { lprintf("%8.2f %7.3f ", StudentsT, TProb); lprintf(" %5.1f%%", 100 * (Fit1 - Fit0)/Fit0); } if (fFullRange) { if (ngMouthFit[0][1]) lprintf(" %4d%% %4d%% ", (100 * ngBetterMouthVal) / igMouthVal0, (100 * ngWorseMouthVal) / igMouthVal0); lprintf(" %8.3f %5.1f%%", gMouthFit[BASE_SHAPE_LEV][0] / ngMouthFit[BASE_SHAPE_LEV][0], 100 * (gMouthFit[BASE_SHAPE_LEV][0] - gMouthFit[0][0]) / gMouthFit[0][0]); } lprintf("\n"); }if (fFullRange) { if (ngPointFit[0][0]) { MeanAndVariance(Fit0, Dev0, &gPointVal0[iStart], n); Dev0 = Sqrt(Dev0); Fit1 = 0, Dev1 = 0; if (n) { MeanAndVariance(Fit1, Dev1, &gPointVal1[iStart], n); Dev1 = Sqrt(Dev1); StudentsTPairedSampleTest(StudentsT, TProb, &gPointVal0[iStart], &gPointVal1[iStart], n); } lprintf("PointFit%-2d%7.3f %8.3f ", igPoint, Fit0, Dev0); if (Fit1 != 0) lprintf("%8.3f %8.3f ", Fit1, Dev1); else lprintf(" "); if (n && Fit0 != 0 && ngPointFit[0][1]) { lprintf("%8.2f %7.3f ", StudentsT, TProb); lprintf(" %5.1f%%", 100 * (Fit1 - Fit0)/Fit0); } if (ngPointFit[0][1]) lprintf(" %4d%% %4d%% ", (100 * ngBetterPointVal) / igPointVal0, (100 * ngWorsePointVal) / igPointVal0); lprintf(" %8.3f %5.1f%%", gPointFit[BASE_SHAPE_LEV][0] / ngPointFit[BASE_SHAPE_LEV][0], 100 * (gPointFit[BASE_SHAPE_LEV][0] - gPointFit[0][0]) / gPointFit[0][0]); lprintf("\n"); } lprintf("Max %8.3f ", Max0); // we only keep the max value for the entire range so this has to be ifed by fFullRange if (Max1 != 0) lprintf("%8.3f ", Max1); else lprintf(" "); if (cgPrefix1 && Max0 != 0) lprintf(" %5.1f%%", 100 * (Max1 - Max0)/Max0); lprintf("\n"); lprintf("[Time %8.2f ", Time0); if (Time1 != 0) lprintf("%8.2f ", Time1); else lprintf(" "); if (cgPrefix1 && Time0 != 0) lprintf(" %6.1f%%", 100 * (Time1 - Time0)/Time0); lprintf("]\n"); }}//-----------------------------------------------------------------------------static void ShowFullTotals (void){SysErr("ShowFullTotals not yet implemented");}//-----------------------------------------------------------------------------static void ShowTotals (bool fFull){if (fFull) ShowFullTotals();else { if (ngFit[0][1] && ngFit[0][1] != ngFit[0][0]) SysErr("ngFit[0][1] %d != ngFit[0][0] %d", ngFit[0][1], ngFit[0][0]); if (ngLEyeFit[0][0]) { ASSERT(ngFit[0][0] == ngLEyeFit[0][0]); ASSERT(ngFit[0][1] == ngLEyeFit[0][1]); } if (ngREyeFit[0][0]) { ASSERT(ngFit[0][0] == ngREyeFit[0][0]); ASSERT(ngFit[0][1] == ngREyeFit[0][1]); } if (ngMouthFit[0][0]) { ASSERT(ngFit[0][0] == ngMouthFit[0][0]); ASSERT(ngFit[0][1] == ngMouthFit[0][1]); } if (ngPointFit[0][0]) { ASSERT(ngFit[0][0] == ngPointFit[0][0]); ASSERT(ngFit[0][1] == ngPointFit[0][1]); } if (ngFilePrefixChange[0] > 0) { char sHeader[SLEN]; sprintf(sHeader, "%c", cgFilePrefix[0]); ShowSummaryTotals(sHeader, 0, ngFilePrefixChange[0], false); sprintf(sHeader, "%c", cgFilePrefix[1]); ShowSummaryTotals(sHeader, ngFilePrefixChange[0], ngFit[0][0], false); } ShowSummaryTotals("ALL", 0, ngFit[0][0], true); }}//-----------------------------------------------------------------------------static void SetPrefix (char s[]){char c = s[0];if (c == 0) Err("Line %d: Zero length string passed to SetPrefix\n%s", ngLine, sgLine);if (c == cgPrefix0) { if (igPrefix == 1) // going from 1 back to 0? CheckSameNbrResults(); igPrefix = 0; }else if (c == cgPrefix1) igPrefix = 1;else if (cgPrefix0 == 0) { cgPrefix0 = c; igPrefix = 0; }else if (cgPrefix1 == 0) { cgPrefix1 = c; igPrefix = 1; }else lprintf("Line %d: ignored unknown prefix (prefixes are %c %c) %s", ngLine, cgPrefix0, cgPrefix1, sgLine);}//-----------------------------------------------------------------------------void InitGlobals (void){igPrefix = cgPrefix0 = cgPrefix1 = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -