ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/staticProps/staticProps.cpp
Revision: 803
Committed: Fri Oct 10 17:10:22 2003 UTC (20 years, 9 months ago) by mmeineke
File size: 9325 byte(s)
Log Message:
removed the props directory, and moved everything over to staticProps

File Contents

# User Rev Content
1 mmeineke 803 #include <iostream>
2     #include <stdio.h>
3     #include <stdlib.h>
4     #include <string.h>
5     #include <vector>
6    
7     #include "simError.h"
8     #include "SimSetup.hpp"
9     #include "SimInfo.hpp"
10     #include "Atom.hpp"
11     #include "Integrator.hpp"
12     #include "Thermo.hpp"
13     #include "ReadWrite.hpp"
14    
15     #include "PairCorrList.hpp"
16     #include "AllCorr.hpp"
17    
18     #define VERSION_MAJOR 0
19     #define VERSION_MINOR 1
20    
21     char *programName; /*the name of the program */
22     void usage(void);
23     using namespace std;
24    
25     int main(int argC,char* argV[]){
26    
27     int i,j; // loop counters
28    
29     char* outPrefix; // the output prefix
30    
31     char* conversionCheck;
32     bool conversionError;
33     bool optionError;
34    
35     char currentFlag; // used in parsing the flags
36     bool done = false; // multipurpose boolean
37     bool havePrefix; // boolean for the output prefix
38    
39     bool haveMaxLength;
40     double maxLength;
41    
42     int nBins;
43    
44     vector<PairCorrList> theList;
45     pairCorrEnum pairType;
46    
47     char* pair1;
48     char* pair2;
49    
50     char dumpName[2000];
51     char* endTest;
52     int nameLength;
53     int nFrames;
54     char* inName;
55     SimSetup* startMe;
56     SimInfo* infoArray;
57     DumpReader* reader;
58     AllCorr theCorrs;
59    
60     // first things first, all of the initializations
61    
62     printf("Initializing stuff ....\n");
63     fflush(sdtout);
64     srand48( 1337 ); // the random number generator.
65     initSimError(); // the error handler
66    
67     outPrefix = NULL;
68     inName = NULL;
69    
70     conversionError = false;
71     optionError = false;
72    
73     havePrefix = false;
74     haveMaxLength = false;
75    
76     maxLength = 1.0;
77     nBins = 100;
78    
79     programName = argv[0]; /*save the program name in case we need it*/
80    
81     for( i = 1; i < argC; i++){
82    
83     if(argV[i][0] =='-'){
84    
85     // parse the option
86    
87     if(argV[i][1] == '-' ){
88    
89     // parse long word options
90    
91     if( !strcmp( argV[i], "--gofr" ) ){
92    
93     i++;
94     if( i>=argC ){
95     sprintf( painCave.errMsg,
96     "\n"
97     "not enough arguments for --gofr\n");
98     usage();
99     painCave.isFatal = 1;
100     simError();
101     }
102     pair1 = argV[i];
103    
104     i++;
105     if( i>=argC ){
106     sprintf( painCave.errMsg,
107     "\n"
108     "not enough arguments for --gofr\n");
109     usage();
110     painCave.isFatal = 1;
111     simError();
112     }
113     pair2 = argV[i];
114    
115     pairType = gofr;
116     theList.push_back(PairCorrList( pairType, pair1, pair2 ));
117     }
118    
119     else if( !strcmp( argV[i], "--version") ){
120    
121     printf("\n"
122     "staticProps version %d.%d\n"
123     "\n",
124     VERSION_MAJOR, VERSION_MINOR );
125     exit(0);
126    
127     }
128    
129     else if( !strcmp( argV[i], "--help") ){
130    
131     usage();
132     exit(0);
133     }
134    
135     // anything else is an error
136    
137     else{
138     fprintf( stderr,
139     "Invalid option \"%s\"\n", argV[i] );
140     usage();
141     exit(0);
142     }
143     }
144    
145     else{
146    
147     // parse single character options
148    
149     done =0;
150     j = 1;
151     currentFlag = argV[i][j];
152     while( (currentFlag != '\0') && (!done) ){
153    
154     switch(currentFlag){
155    
156     case 'o':
157     // -o <prefix> => the output prefix.
158    
159     j++;
160     currentFlag = argV[i][j];
161    
162     if( currentFlag != '\0' ) optionError = true;
163    
164     if( optionError ){
165     sprintf( painCave.errMsg,
166     "\n"
167     "The -o flag should end an option sequence.\n"
168     " example: -r <outname> *NOT* -or <outname>\n" );
169     usage();
170     painCave.isFatal = 1;
171     simError();
172     }
173    
174     i++;
175     if( i>=argC ){
176     sprintf( painCave.errMsg,
177     "\n"
178     "not enough arguments for -o\n");
179     usage();
180     painCave.isFatal = 1;
181     simError();
182     }
183    
184     outPrefix = argV[i];
185     if( outPrefix[0] == '-' ) optionError = true;
186    
187     if( optionError ){
188     sprintf( painCave.errMsg,
189     "\n"
190     "\"%s\" is not a valid out prefix/name.\n"
191     "Out prefix/name should not begin with a dash.\n",
192     outPrefix );
193     usage();
194     painCave.isFatal = 1;
195     simError();
196     }
197    
198     havePrefix = true;
199     done = true;
200     break;
201    
202     case 'l':
203     // -l <double> set <double> to the maxLength
204    
205     haveMaxLength = true;
206     j++;
207     currentFlag = argV[i][j];
208    
209     if( currentFlag != '\0' ) optionError = true;
210    
211     if( optionError ){
212     sprintf( painCave.errMsg,
213     "\n"
214     "The -l flag should end an option sequence.\n"
215     " example: -sl <double> *NOT* -ls <double>\n" );
216     usage();
217     painCave.isFatal = 1;
218     simError();
219     }
220    
221     i++;
222     if( i>=argC ){
223     sprintf( painCave.errMsg,
224     "\n"
225     "not enough arguments for -l\n");
226     usage();
227     painCave.isFatal = 1;
228     simError();
229     }
230    
231     maxLength = strtod( argV[i], &conversionCheck);
232     if( conversionCheck == argV[i] ) conversionError = true;
233     if( *conversionCheck != '\0' ) conversionError = true;
234    
235     if( conversionError ){
236     sprintf( painCave.errMsg,
237     "Error converting \"%s\" to a double for maxLength.\n",
238     argV[i] );
239     usage();
240     painCave.isFatal = 1;
241     simError();
242     }
243    
244     done = true;
245    
246     break;
247    
248     case 'n':
249     // -n <int> set <int> to the nBins
250    
251     j++;
252     currentFlag = argV[i][j];
253    
254     if( currentFlag != '\0' ) optionError = true;
255    
256     if( optionError ){
257     sprintf( painCave.errMsg,
258     "\n"
259     "The -n flag should end an option sequence.\n"
260     " example: -sn <int> *NOT* -ns <int>\n" );
261     usage();
262     painCave.isFatal = 1;
263     simError();
264     }
265    
266     i++;
267     if( i>=argC ){
268     sprintf( painCave.errMsg,
269     "\n"
270     "not enough arguments for -n\n");
271     usage();
272     painCave.isFatal = 1;
273     simError();
274     }
275    
276     nBins = strtol( argV[i], &conversionCheck, 10 );
277     if( conversionCheck == argV[i] ) conversionError = true;
278     if( *conversionCheck != '\0' ) conversionError = true;
279    
280     if( conversionError ){
281     sprintf( painCave.errMsg,
282     "Error converting \"%s\" to an int for nBins.\n",
283     argV[i] );
284     usage();
285     painCave.isFatal = 1;
286     simError();
287     }
288    
289     if( nBins < 1 ){
290     sprintf( painCave.errMsg,
291     "nBins error: nBins = %d is less than 1.\n",
292     nBins );
293     usage();
294     painCave.isFatal = 1;
295     simError();
296     }
297    
298     done = true;
299    
300     break;
301    
302     default:
303    
304     sprintf(painCave.errMsg,
305     "\n"
306     "Bad option \"-%c\"\n", currentFlag);
307     usage();
308     painCave.isFatal = 1;
309     simError();
310     }
311     j++;
312     currentFlag = argV[i][j];
313     }
314     }
315     }
316    
317     else{
318    
319     if( inName != NULL ){
320     sprintf( painCave.errMsg,
321     "Error at \"%s\", program does not currently support\n"
322     "more than one input bass file.\n"
323     "\n",
324     argV[i]);
325     usage();
326     painCave.isFatal = 1;
327     simError();
328     }
329    
330     inName = argV[i];
331    
332     }
333     }
334    
335     if( inName == NULL ){
336     sprintf( painCave.errMsg,
337     "Error, bass file is needed to run.\n" );
338     usage();
339     painCave.isFatal = 1;
340     simError();
341     }
342    
343     // make the dump name
344    
345     strcpy( dumpName, inName );
346     nameLength = strlen( dumpName );
347     endTest = &(dumpName[nameLength - 5]);
348     if( !strcmp( endTest, ".bass" ) ){
349     strcpy( endTest, ".dump" );
350     }
351     else if( !strcmp( endTest, ".BASS" ) ){
352     strcpy( endTest, ".dump" );
353     }
354     else{
355     strcat( dumpName, ".dump" );
356     }
357    
358     // count the number of frames in the dump file.
359    
360     printf("Counting the number of frames in \"%s\"... ", dumpName );
361     fflush(stdout);
362    
363     reader = new DumpReader( dumpName );
364     nFrames = reader->getNframes();
365    
366     printf("done.\n"
367     "\tFound %d frames.\n"
368     "\n",
369     nFrames );
370     fflush(stdout);
371    
372     infoArray = new SimInfo[nFrames];
373    
374     printf("Parsing the bass file, and initializing the "
375     "Simulation Frames..." );
376     fflush(stdout);
377    
378     startMe = new SimSetup();
379     startMe->setSimInfo( infoArray, nFrames );
380     startMe->parseFile( inName );
381     startMe->createSim();
382    
383     delete startMe;
384    
385     printf("done.\n");
386     fflush(stdout);
387    
388     printf("Initializing the pair correlations..." );
389     fflush(stdout);
390    
391     if(haveMaxLength)
392     theCorrs.setMaxLength( maxLength );
393    
394     theCorrs.setNbins( nBins );
395     theCorrs.setFrames( infoArray, nFrames, reader );
396     theCorrs.setPairCorrList( theList );
397     theCorrs.initCorrelations( outPrefix );
398    
399     printf("done\n");
400     fflush(stdout);
401    
402     theCorrs.calcCorrelations();
403    
404     return 0 ;
405     }
406    
407    
408     /***************************************************************************
409     * prints out the usage for the command line arguments, then exits.
410     ***************************************************************************/
411    
412     void usage(){
413     (void)fprintf(stdout,
414     "\n"
415     "The proper usage is: %s [options] <input_file>\n"
416     "\n"
417     "Options:\n"
418     "\n"
419     " short:\n"
420     " ------\n"
421     " -o <name> The output prefix\n"
422     " -n <nBins> Set the number of bins in the Histogram.\n"
423     " *Defaults to 100\n"
424     " -l <maxLength> set the maximum value of r\n"
425     " *Defaults to 1/2 smallest length of first frame.\n"
426     " -s Turn on separate output files\n"
427     " *Defaults to single output file.\n"
428     "\n"
429     " long:\n"
430     " -----\n"
431     " --gofr <atom1> <atom2> g(r) for atom1 and atom2\n"
432     " *note: \"_ALL_\" matches all atoms/n"
433     " --version displays the version number\n"
434     " --help displays this help message.\n"
435    
436     "\n"
437     "\n",
438     programName);
439     }