Next version of JABA
[jabaws.git] / binaries / src / muscle / savebest.cpp
1 #include "muscle.h"\r
2 #include "msa.h"\r
3 #include "textfile.h"\r
4 #include <time.h>\r
5 \r
6 MSA *ptrBestMSA;\r
7 static const char *pstrOutputFileName;\r
8 \r
9 void SetOutputFileName(const char *out)\r
10         {\r
11         pstrOutputFileName = out;\r
12         }\r
13 \r
14 void SetCurrentAlignment(MSA &msa)\r
15         {\r
16         ptrBestMSA = &msa;\r
17         }\r
18 \r
19 void SaveCurrentAlignment()\r
20         {\r
21         static bool bCalled = false;\r
22         if (bCalled)\r
23                 {\r
24                 fprintf(stderr,\r
25                   "\nRecursive call to SaveCurrentAlignment, giving up attempt to save.\n");\r
26                 exit(EXIT_FatalError);\r
27                 }\r
28 \r
29         if (0 == ptrBestMSA)\r
30                 {\r
31                 fprintf(stderr, "\nAlignment not completed, cannot save.\n");\r
32                 Log("Alignment not completed, cannot save.\n");\r
33                 exit(EXIT_FatalError);\r
34                 }\r
35 \r
36         if (0 == pstrOutputFileName)\r
37                 {\r
38                 fprintf(stderr, "\nOutput file name not specified, cannot save.\n");\r
39                 exit(EXIT_FatalError);\r
40                 }\r
41 \r
42         fprintf(stderr, "\nSaving current alignment ...\n");\r
43 \r
44         TextFile fileOut(pstrOutputFileName, true);\r
45         ptrBestMSA->ToFASTAFile(fileOut);\r
46 \r
47         fprintf(stderr, "Current alignment saved to \"%s\".\n", pstrOutputFileName);\r
48         Log("Current alignment saved to \"%s\".\n", pstrOutputFileName);\r
49         }\r
50 \r
51 void CheckMaxTime()\r
52         {\r
53         if (0 == g_ulMaxSecs)\r
54                 return;\r
55 \r
56         time_t Now = time(0);\r
57         time_t ElapsedSecs = Now - GetStartTime();\r
58         if (ElapsedSecs <= (time_t) g_ulMaxSecs)\r
59                 return;\r
60 \r
61         Log("Max time %s exceeded, elapsed seconds = %ul\n",\r
62           MaxSecsToStr(), ElapsedSecs);\r
63 \r
64         SaveCurrentAlignment();\r
65         exit(EXIT_Success);\r
66         }\r