]> git.donarmstrong.com Git - mothur.git/blob - mothur.cpp
testing mpi
[mothur.git] / mothur.cpp
1 /*
2  *  interface.cpp
3  *  
4  *
5  *  Created by Pat Schloss on 8/14/08.
6  *  Copyright 2008 Patrick D. Schloss. All rights reserved.
7  *
8  */
9  
10 #include "mothur.h"
11 #include "engine.hpp"
12 #include "globaldata.hpp"
13 #include "mothurout.h"
14
15
16 /**************************************************************************************************/
17
18 GlobalData* GlobalData::_uniqueInstance = 0;
19 CommandFactory* CommandFactory::_uniqueInstance = 0;
20 MothurOut* MothurOut::_uniqueInstance = 0;
21
22 /***********************************************************************/
23 volatile int ctrlc_pressed = 0;
24 void ctrlc_handler ( int sig ) {
25         MothurOut* m = MothurOut::getInstance();
26     ctrlc_pressed = 1;
27         m->control_pressed = ctrlc_pressed;
28         
29         if (m->executing) { //if mid command quit execution, else quit mothur
30                 m->mothurOutEndLine(); m->mothurOut("quitting command...");  m->mothurOutEndLine();
31         }else{
32                 m->mothurOut("quitting mothur");  m->mothurOutEndLine();
33                 exit(1);
34         }
35 }
36 /***********************************************************************/
37 int main(int argc, char *argv[]){
38         MothurOut* m = MothurOut::getInstance();
39         try {
40                 
41                 signal(SIGINT, ctrlc_handler );
42                                 
43                 time_t ltime = time(NULL); /* calendar time */  
44                 string logFileName = "mothur." + toString(ltime) + ".logfile";
45                 
46                 m->setFileName(logFileName);
47                 
48                 //version
49                 #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
50                         system("clear");
51                         #if defined (__APPLE__) || (__MACH__)
52                                 m->mothurOutJustToLog("Mac version");
53                                 m->mothurOutEndLine(); m->mothurOutEndLine();
54                         #else
55                                 m->mothurOutJustToLog("Linux version");
56                                 >m->mothurOutEndLine(); m->mothurOutEndLine();
57                         #endif
58
59                 #else
60                         system("CLS");
61                         m->mothurOutJustToLog("Windows version");
62                         m->mothurOutEndLine(); m->mothurOutEndLine();
63                 #endif          
64                 
65                 #ifdef USE_READLINE
66                         m->mothurOutJustToLog("Using ReadLine");
67                         m->mothurOutEndLine(); m->mothurOutEndLine();
68                 #endif
69                 
70                 //header
71                 m->mothurOut("mothur v.1.8");
72                 m->mothurOutEndLine();          
73                 m->mothurOut("Last updated: 2/02/2010");
74                 m->mothurOutEndLine();  
75                 m->mothurOutEndLine();          
76                 m->mothurOut("by");
77                 m->mothurOutEndLine();          
78                 m->mothurOut("Patrick D. Schloss");
79                 m->mothurOutEndLine();
80                 m->mothurOutEndLine();                  
81                 m->mothurOut("Department of Microbiology & Immunology");
82                 m->mothurOutEndLine();  
83                 m->mothurOut("University of Michigan");
84                 m->mothurOutEndLine();                  
85                 m->mothurOut("pschloss@umich.edu");
86                 m->mothurOutEndLine();          
87                 m->mothurOut("http://www.mothur.org");
88                 m->mothurOutEndLine();
89                 m->mothurOutEndLine();
90                 m->mothurOut("When using, please cite:");
91                 m->mothurOutEndLine();
92                 m->mothurOut("Schloss, P.D., et al., Introducing mothur: Open-source, platform-independent, community-supported software for describing and comparing microbial communities. Appl Environ Microbiol, 2009. 75(23):7537-41.");
93                 m->mothurOutEndLine();  
94                 m->mothurOutEndLine();          
95                 m->mothurOut("Distributed under the GNU General Public License");
96                 m->mothurOutEndLine();
97                 m->mothurOutEndLine();                  
98                 m->mothurOut("Type 'help()' for information on the commands that are available");
99                 m->mothurOutEndLine();
100                 m->mothurOutEndLine();                  
101                 m->mothurOut("Type 'quit()' to exit program");
102                 m->mothurOutEndLine();  
103                 
104                 #ifdef USE_MPI
105                         m->mothurOutJustToLog("Using MPI\n");
106                         MPI_Init(&argc, &argv); 
107                 #endif
108                                 
109                 //srand(54321);
110                 srand( (unsigned)time( NULL ) );
111                 
112                 Engine* mothur;
113                 bool bail = 0;
114                 string input;
115
116                 if(argc>1){
117                         input = argv[1];
118
119                         if (input[0] == '#') {
120                                 m->mothurOutJustToLog("Script Mode");
121                                 m->mothurOutEndLine(); m->mothurOutEndLine();
122
123                                 mothur = new ScriptEngine(argv[0], argv[1]);
124                         }else{
125                                 m->mothurOutJustToLog("Batch Mode");
126                                 m->mothurOutEndLine(); m->mothurOutEndLine();
127                                 
128                                 mothur = new BatchEngine(argv[0], argv[1]);
129                         }
130                 }
131                 else{
132                         m->mothurOutJustToLog("Interactive Mode");
133                         m->mothurOutEndLine(); m->mothurOutEndLine();
134                         
135                         mothur = new InteractEngine(argv[0]);   
136                 }
137                 
138                 while(bail == 0)        {       bail = mothur->getInput();      }
139                 
140                 string outputDir = mothur->getOutputDir();
141                 string newlogFileName = outputDir + logFileName;
142         
143                 //need this because m->mothurOut makes the logfile, but doesn't know where to put it
144                 rename(logFileName.c_str(), newlogFileName.c_str()); //logfile with timestamp
145                 
146                 delete mothur;
147                 
148                 #ifdef USE_MPI
149                         MPI_Finalize();
150                 #endif
151                 
152                 return 0;
153         }
154         catch(exception& e) {
155                 m->errorOut(e, "mothur", "main");
156                 exit(1);
157         }
158 }
159
160 /**************************************************************************************************/
161