ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/freemol/trunk/src/mengine/src/mengine.c
(Generate patch)
# Line 1 | Line 1
1 + /* NOTICE: this source code file has been modified for use with FreeMOL */
2 +
3 + /*
4 +   Kevin: please remove the "not" below or simply define KEG_DEBUG at
5 +   compile time in order to activate your preferred debug / testing
6 +   behaviors.  This is more robust approach then using comments...
7 + */
8 +
9 + #define not KEG_DEBUG
10 +
11   #define EXTERN
12   #include "pcwin.h"
13   #include "pcmod.h"
14   #include "energies.h"
5 #include "substr.h"
15   #include "pot.h"
16   #include "angles.h"
17  
# Line 23 | Line 32
32   #include <stdlib.h>
33   #include <unistd.h>
34   #include <string.h>
35 < #include <malloc.h>
27 <
28 < EXTERN FILE *pcmoutfile;
35 > //#include <malloc.h>
36  
37   struct t_rotbond {
38      int nbonds, bond[200][2], bond_res[200];
# Line 61 | Line 68
68   void search_rings(int);
69   */
70  
71 +
72 + void usage(void) {
73 +  printf("\nUsage: mengine [-hvdxi] reads sdf on stdin, writes on stdout\n\n"
74 +         "-h\tThis help page\n"
75 +         "-v\tVerbose output\n"
76 +         "-a\tAdd hydrogen atoms; delete existing ones\n"
77 +         "-d\tEvaluate dipole moment\n"
78 +         "-x\tEvaluate XlogP\n"
79 +         "-i\tEvaluate vibrational data\n\n");
80 + }
81 +
82   /* ==================================================== */
83   int main(int argc, char *argv[])
84   {
85      int i;
86 <    char *filename = NULL;
86 >    FILE *infile;
87      char *line = NULL;
88  
89 <    char *outfile = NULL;
90 <    char *mmff94file = NULL;
91 <    char *mmxfile = NULL;
89 >    char *infilename = NULL;
90 >    char *outfilename = NULL;
91 >    char *mmff94filename = NULL;
92 >    char *mmxfilename = NULL;                  
93      char *logfilename = NULL;
94  
95 +    int c;
96      int flags = 0;
77    flags = flags | DO_DIPOLE;
78    flags = flags | DO_XLOGP;
79    flags = flags | DO_VIBRATION;
97  
98 < /*
99 <    filename = strdup("caffeine.sdf");
100 <    outfile = strdup("output.sdf");
101 < */
102 <    mmff94file = strdup("mmff94.prm");
103 <    mmxfile = strdup("mmxconst.prm");
104 <    logfilename= strdup("error.log");
98 >    while ((c = getopt(argc, argv, "e:o:p:c:havdxi")) != -1) {
99 >      switch(c) {
100 >      case 'a':
101 >        flags = flags | DO_ADDH;
102 >        break;
103 >      case 'd':
104 >        flags = flags | DO_DIPOLE;
105 >        break;
106 >      case 'x':
107 >        flags = flags | DO_XLOGP;
108 >        break;
109 >      case 'i':
110 >        flags = flags | DO_VIBRATION;
111 >        break;
112 >      case 'v':
113 >        VERBOSE = 1;
114 >        break;
115 >      case 'h':
116 >        usage();
117 >        exit(-1);
118 >      case 'o':
119 >        outfilename = strdup(optarg);
120 >        break;
121 > #if 0
122 >       // EXTERNAL PARAM FILES STILL NOT WORKING
123 >        // SOON THEY WILL
124 >      case 'p':
125 >        mmff94filename = strdup(optarg);
126 >        break;
127 >      case 'c':
128 >        mmxfilename = strdup(optarg);
129 >        break;
130 > #endif
131 >      case 'e':
132 >        logfilename = strdup(optarg);
133 >        break;
134 >      case '?':
135 >        if (isprint (optopt))
136 >         fprintf (stderr, "Unknown option `-%c'.\n", optopt);
137 >        else
138 >          fprintf (stderr,
139 >                   "Unknown option character `\\x%x'.\n",
140 >                   optopt);
141 >        return 1;
142 >      default:
143 >        abort ();
144 >      }
145 >    }
146 >
147 >    argc -= optind;
148 >    argv += optind;
149 >
150 >    if (argc == 1)
151 >      infilename = strdup(argv[0]);
152 >
153 > #ifdef KEG_DEBUG
154 >    if(!infilename)
155 >      infilename = strdup("caffeine.sdf");
156 >    if(!outfilename)
157 >      outfilename = strdup("output.sdf");
158 > #endif
159 >
160 >    /* default behavior is to use the hardcoded parameter files */
161 >
162 >    if(!mmff94filename) mmff94filename = strdup("|mmff94"); /* hard-coded builtins */
163 >    if(!mmxfilename) mmxfilename = strdup("|mmxconst"); /* hard-coded builtins */
164 >
165 >    /* if no input file provide, then use standard input */
166 >
167 >    if(infilename) {
168 >      infile = fopen(infilename,"rb");
169 >    } else {
170 >      infile = stdin;
171 >    }
172 >
173 >    /* if no output file provided, then use standard output */
174 >
175 >    if(outfilename) {
176 >      pcmoutfile = fopen(outfilename,"wb");
177 >    } else {
178 >      pcmoutfile = stdout;
179 >   }
180 >
181 >    /* if no log file provided, then use standard error */
182 >
183 >    if(logfilename) {
184 >      pcmlogfile = fopen(logfilename,"wb");
185 >    } else {
186 >      pcmlogfile = stderr;
187 >    }
188 >
189 >    /* initialize the system using parameter file */
190  
191 <    pcmoutfile = stdout;
90 <    initialize_pcmodel(mmxfile);
191 >    initialize_pcmodel(mmxfilename);
192      initialize();
193      minim_values.iprint = 0; //FALSE;
194      initialize_gmmx();
195  
196 <    read_gmmxinp(logfilename, outfile, mmff94file, stdin, flags);
196 >    /* run the job */
197  
198 <    fclose(pcmoutfile);
198 >    if (infile) {
199 >      read_gmmxinp(mmff94filename, infile, flags);
200 >    }
201  
202 <    free(mmff94file);
203 <    free(mmxfile);
204 <    free(logfilename);
205 < /*
206 <    free(filename);
207 <    free(outfile);
208 < */
202 >    /* release temporary strings */
203 >
204 >    if(infilename) free(infilename);
205 >    if(outfilename) free(outfilename);
206 >    if(mmff94filename) free(mmff94filename);
207 >    if(mmxfilename) free(mmxfilename);
208 >    if(logfilename) free(logfilename);
209 >
210 >    /* close file handles */
211 >
212 >    if(infile && (infile!=stdin)) fclose(infile);
213 >    if(pcmoutfile && (pcmoutfile!=stdout)) fclose(pcmoutfile);
214 >    if(pcmlogfile && (pcmlogfile!=stderr)) fclose(pcmlogfile);
215  
216      exit(0);
217   }
218 < //
218 >

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines