ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/SHAPES/forcer.cpp
Revision: 1271
Committed: Tue Jun 15 20:20:36 2004 UTC (20 years, 10 months ago) by gezelter
File size: 6002 byte(s)
Log Message:
Major changes for rigidbodies

File Contents

# Content
1 #include <iostream>
2 #include <fstream>
3 #include <string>
4 #include <vector>
5 #include "forcerCmd.h"
6 #include "PDBReader.hpp"
7 #include "RigidBody.hpp"
8
9 #define MK_STR(s) # s
10 #define STR_DEFINE(t, s) t = MK_STR(s)
11 #define CHARMM 1
12 #define AMBER 2
13 #define LJ 3
14 #define GAFF 4
15 #define OPLS 5
16
17 int count_tokens(char *line, char *delimiters);
18 using namespace std;
19
20 class Atype{
21 public:
22 Atype() {
23 mass = 0.0;
24 rpar = 0.0;
25 eps = 0.0;
26 }
27
28 void setMass(double m) {mass = m;}
29 void setRpar(double rp) {rpar = rp;}
30 void setEps(double e) {eps = e;}
31 void setType(char* t) {strcpy(type, t);}
32 double getMass() {return mass;}
33 double getRpar() {return rpar;}
34 double getEps() {return eps;}
35 char *getType() {return type;}
36
37 private:
38 char type[100];
39 double mass;
40 double rpar;
41 double eps;
42 };
43
44 int main(int argc, char* argv[]){
45
46 gengetopt_args_info args_info;
47
48 vector<Atype*> vdwAtypes;
49 vector<Atype*>::iterator i;
50 Atype* at;
51 RigidBody* rb;
52 vector<VDWAtom*> theAtoms;
53 vector<VDWAtom*>::iterator j;
54 VDWAtom* atom;
55
56 double mass, rpar, eps;
57 string fileName;
58 char vdwFileName[2002];
59 char structureFileName[2002];
60 char temp[200];
61 char readLine[500];
62 FILE *vdwFile, *structureFile;
63 char* ffPath_env = "VDW_PATH";
64 char* ffPath;
65 char* eof_test;
66 char* foo;
67 char* myType;
68 char* vType;
69 int lineNum;
70 int nTokens;
71 int FF;
72 short int gotMatch;
73
74 //parse the command line options
75 if (cmdline_parser (argc, argv, &args_info) != 0)
76 exit(1) ;
77
78 if (args_info.input_given){
79 fileName = args_info.input_arg;
80 }
81 else{
82 std::cerr << "Does not have input file name" << endl;
83 exit(1);
84 }
85
86 if (args_info.charmm_given) {
87 FF=CHARMM;
88 strcpy(vdwFileName, "charmm27.vdw");
89 }
90
91 if (args_info.amber_given) {
92 FF=AMBER;
93 strcpy(vdwFileName, "amber99.vdw");
94 }
95
96 if (args_info.lj_given) {
97 FF=LJ;
98 strcpy(vdwFileName, "LJ.vdw");
99 }
100
101 if (args_info.gaff_given) {
102 FF=GAFF;
103 strcpy(vdwFileName, "gaff.vdw");
104 }
105
106 if (args_info.opls_given) {
107 FF=OPLS;
108 strcpy(vdwFileName, "oplsaal.vdw");
109 }
110
111 vdwFile = fopen( vdwFileName, "r" );
112
113 if( vdwFile == NULL ){
114
115 // next see if the force path enviorment variable is set
116
117 ffPath = getenv( ffPath_env );
118 if( ffPath == NULL ) {
119 STR_DEFINE(ffPath, FRC_PATH );
120 }
121
122 strcpy( temp, ffPath );
123 strcat( temp, "/" );
124 strcat( temp, vdwFileName );
125 strcpy( vdwFileName, temp );
126
127 vdwFile = fopen( vdwFileName, "r" );
128
129 if( vdwFile == NULL ){
130
131 printf( "Error opening the vanDerWaals parameter file: %s\n"
132 "Have you tried setting the VDW_PARAM_DIR environment "
133 "variable?\n",
134 vdwFileName );
135 exit(-1);
136 }
137 printf( "VDW file %s opened sucessfully.\n", vdwFileName );
138 lineNum = 0;
139
140 eof_test = fgets( readLine, sizeof(readLine), vdwFile );
141 lineNum++;
142
143 if( eof_test == NULL ){
144 printf("Error in reading Atoms from force file at line %d.\n",
145 lineNum );
146 exit(-1);
147 }
148
149 while( eof_test != NULL ){
150 // toss comment lines
151 if( readLine[0] != '!' && readLine[0] != '#' ){
152
153 nTokens = count_tokens(readLine, " ,;\t");
154 if (nTokens < 4) {
155 printf("Not enough tokens on line %d.\n", lineNum);
156 exit(-1);
157 }
158
159 at = new Atype();
160 foo = strtok(readLine, " ,;\t");
161 at->setType(foo);
162 foo = strtok(NULL, " ,;\t");
163 mass = atof(foo);
164 at->setMass(mass);
165 foo = strtok(NULL, " ,;\t");
166 rpar = atof(foo);
167 at->setRpar(rpar);
168 foo = strtok(NULL, " ,;\t");
169 eps = atof(foo);
170 at->setEps(eps);
171 vdwAtypes.push_back(at);
172 }
173 eof_test = fgets( readLine, sizeof(readLine), vdwFile );
174 lineNum++;
175 }
176
177 fclose( vdwFile );
178 }
179 printf("%d Atom Types read from VDW file\n", vdwAtypes.size());
180
181 // Now, open and parse the input file!
182
183 strcpy(structureFileName, fileName.c_str() );
184
185 PDBReader* PDBread = new PDBReader();
186 PDBread->setPDBfile(structureFileName);
187 theAtoms = PDBread->getAtomList();
188 printf("Found %d atoms\n", theAtoms.size());
189
190 for( j = theAtoms.begin(); j != theAtoms.end(); ++j){
191 atom = *j;
192 myType = atom->getType();
193 gotMatch = 0;
194
195 for( i = vdwAtypes.begin(); i != vdwAtypes.end(); ++i){
196 at = *i;
197 vType = at->getType();
198
199 if (!strcasecmp(myType, vType)) {
200 atom->setMass(at->getMass());
201 atom->setRpar(at->getRpar());
202 atom->setEps(at->getEps());
203 gotMatch = 1;
204 }
205 }
206 if (!gotMatch) {
207 printf("No matches found for %s, ", myType);
208 myType = atom->getBase();
209 printf("trying with BaseType %s\n", myType);
210 for( i = vdwAtypes.begin(); i != vdwAtypes.end(); ++i){
211 at = *i;
212 vType = at->getType();
213 if (!strcasecmp(myType, vType)) {
214 atom->setMass(at->getMass());
215 atom->setRpar(at->getRpar());
216 atom->setEps(at->getEps());
217 gotMatch = 1;
218 }
219 }
220 }
221
222 if (!gotMatch) {
223 printf("No matches found with BaseType!\n");
224 }
225 }
226
227 rb = new RigidBody();
228 for( j = theAtoms.begin(); j != theAtoms.end(); ++j){
229 rb->addAtom(*j);
230 }
231
232 //GridBuilder gb = new GridBuilder();
233 //gb->findAxesAndOrigin(theAtoms);
234 //gb->launchProbe(FF, sigmaGrid, sGrid, epsGrid);
235
236
237 }
238
239 int count_tokens(char *line, char *delimiters) {
240 /* PURPOSE: RETURN A COUNT OF THE NUMBER OF TOKENS ON THE LINE. */
241
242 char *working_line; /* WORKING COPY OF LINE. */
243 int ntokens; /* NUMBER OF TOKENS FOUND IN LINE. */
244 char *strtok_ptr; /* POINTER FOR STRTOK. */
245
246 strtok_ptr= working_line= strdup(line);
247
248 ntokens=0;
249 while (strtok(strtok_ptr,delimiters)!=NULL)
250 {
251 ntokens++;
252 strtok_ptr=NULL;
253 }
254
255 free(working_line);
256 return(ntokens);
257 }