5 // Functions that provide visible feedback to the user
\r
6 // that progress is being made.
\r
8 static unsigned g_uIter = 0; // Main MUSCLE iteration 1, 2..
\r
9 static unsigned g_uLocalMaxIters = 0; // Max iters
\r
10 static FILE *g_fProgress = stderr; // Default to standard error
\r
11 static char g_strFileName[32]; // File name
\r
12 static time_t g_tLocalStart; // Start time
\r
13 static char g_strDesc[32]; // Description
\r
14 static bool g_bWipeDesc = false;
\r
15 static int g_nPrevDescLength;
\r
16 static unsigned g_uTotalSteps;
\r
18 double GetCheckMemUseMB()
\r
20 unsigned MB = (unsigned) GetMemUseMB();
\r
21 if (0 == g_uMaxMB || MB <= g_uMaxMB)
\r
23 fprintf(stderr, "\n\n*** MAX MEMORY %u MB EXCEEDED***\n", g_uMaxMB);
\r
24 fprintf(stderr, "Memory allocated so far %u MB, physical RAM %u MB\n",
\r
25 MB, (unsigned) GetRAMSizeMB());
\r
26 fprintf(stderr, "Use -maxmb <n> option to increase limit, where <n> is in MB.\n");
\r
27 SaveCurrentAlignment();
\r
28 exit(EXIT_FatalError);
\r
32 const char *ElapsedTimeAsStr()
\r
34 time_t Now = time(0);
\r
35 unsigned long ElapsedSecs = (unsigned long) (Now - g_tLocalStart);
\r
36 return SecsToStr(ElapsedSecs);
\r
39 const char *MemToStr(double MB)
\r
45 static double MaxMB = 0;
\r
46 static double RAMMB = 0;
\r
49 RAMMB = GetRAMSizeMB();
\r
53 double Pct = (MaxMB*100.0)/RAMMB;
\r
56 sprintf(Str, "%.0f MB(%.0f%%)", MaxMB, Pct);
\r
60 void SetInputFileName(const char *pstrFileName)
\r
62 NameFromPath(pstrFileName, g_strFileName, sizeof(g_strFileName));
\r
65 void SetSeqStats(unsigned uSeqCount, unsigned uMaxL, unsigned uAvgL)
\r
70 fprintf(g_fProgress, "%s %u seqs, max length %u, avg length %u\n",
\r
71 g_strFileName, uSeqCount, uMaxL, uAvgL);
\r
73 Log("%u seqs, max length %u, avg length %u\n",
\r
74 uSeqCount, uMaxL, uAvgL);
\r
79 time(&g_tLocalStart);
\r
82 unsigned long GetStartTime()
\r
84 return (unsigned long) g_tLocalStart;
\r
87 void SetIter(unsigned uIter)
\r
97 void SetMaxIters(unsigned uMaxIters)
\r
99 g_uLocalMaxIters = uMaxIters;
\r
102 void SetProgressDesc(const char szDesc[])
\r
104 strncpy(g_strDesc, szDesc, sizeof(g_strDesc));
\r
105 g_strDesc[sizeof(g_strDesc) - 1] = 0;
\r
108 static void Wipe(int n)
\r
110 for (int i = 0; i < n; ++i)
\r
111 fprintf(g_fProgress, " ");
\r
114 void Progress(const char *szFormat, ...)
\r
121 double MB = GetCheckMemUseMB();
\r
125 va_start(ArgList, szFormat);
\r
126 vsprintf(szStr, szFormat, ArgList);
\r
128 fprintf(g_fProgress, "%8.8s %12s %s",
\r
129 ElapsedTimeAsStr(),
\r
133 fprintf(g_fProgress, "\n");
\r
134 fflush(g_fProgress);
\r
137 void Progress(unsigned uStep, unsigned uTotalSteps)
\r
144 double dPct = ((uStep + 1)*100.0)/uTotalSteps;
\r
145 double MB = GetCheckMemUseMB();
\r
146 fprintf(g_fProgress, "%8.8s %12s Iter %3u %6.2f%% %s",
\r
147 ElapsedTimeAsStr(),
\r
155 int n = g_nPrevDescLength - (int) strlen(g_strDesc);
\r
157 g_bWipeDesc = false;
\r
160 fprintf(g_fProgress, "\r");
\r
162 g_uTotalSteps = uTotalSteps;
\r
165 void ProgressStepsDone()
\r
171 double MB = GetCheckMemUseMB();
\r
172 Log("Elapsed time %8.8s Peak memory use %12s Iteration %3u %s\n",
\r
173 ElapsedTimeAsStr(),
\r
182 Progress(g_uTotalSteps - 1, g_uTotalSteps);
\r
183 fprintf(g_fProgress, "\n");
\r
184 g_bWipeDesc = true;
\r
185 g_nPrevDescLength = (int) strlen(g_strDesc);
\r