ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/madProps/GofR.c
(Generate patch)

Comparing trunk/madProps/GofR.c (file contents):
Revision 45 by mmeineke, Tue Jul 23 16:08:35 2002 UTC vs.
Revision 82 by mmeineke, Fri Aug 16 04:05:45 2002 UTC

# Line 12 | Line 12 | void GofR( char* out_prefix, char* atom1, char* atom2,
12   // constant boxSize
13  
14   void GofR( char* out_prefix, char* atom1, char* atom2,
15 <           struct xyz_frame* frames, int nFrames ){
15 >           struct xyz_frame* frames, int nFrames,
16 >           int startFrame, int endFrame ){
17  
18 <  int i,j,k,l;
18 >  int i,j,k;
19  
20    enum g_types { all_all, atom_all, atom_atom };
21    enum g_types the_type;
# Line 36 | Line 37 | void GofR( char* out_prefix, char* atom1, char* atom2,
37    double boxVol;
38    double shortBox;
39  
40 +  double rxj, ryj, rzj;
41    double dx, dy, dz;
42    double distSqr;
43    double dist;
# Line 102 | Line 104 | void GofR( char* out_prefix, char* atom1, char* atom2,
104      for( i=0; i<frames[0].nAtoms; i++ ){
105    
106        if( !strcmp( frames[0].names[i], atom1 ) ) nAtom1++;
107 <      else if( !strcmp( frames[0].names[i], atom2 ) ) nAtom2++;
107 >      if( !strcmp( frames[0].names[i], atom2 ) ) nAtom2++;
108      }
109      
110      if( !nAtom1 ){
# Line 133 | Line 135 | void GofR( char* out_prefix, char* atom1, char* atom2,
135      
136      // calculate the histogram
137  
138 <    for( i=0; i<nFrames; i++){
138 >    for( i=startFrame; i<endFrame; i++){
139        for( j=0; j<(frames[i].nAtoms-1); j++ ){
140 <        for( k=j+1; k< frames[i].nAtoms; k++ ){
140 >        
141 >        if( !strcmp( frames[0].names[j], atom1 ) ){
142 >
143 >          rxj = frames[i].r[j].x;
144 >          ryj = frames[i].r[j].y;
145 >          rzj = frames[i].r[j].z;
146            
147 <          if( !strcmp( frames[0].names[j], atom1 ) ){
147 >          for( k=j+1; k< frames[i].nAtoms; k++ ){
148 >            
149              if( !strcmp( frames[0].names[k], atom2 ) ){
150            
151 <              dx = frames[i].r[j].x - frames[i].r[k].x;
152 <              dy = frames[i].r[j].y - frames[i].r[k].y;
153 <              dz = frames[i].r[j].z - frames[i].r[k].z;
151 >              dx = rxj - frames[i].r[k].x;
152 >              dy = ryj - frames[i].r[k].y;
153 >              dz = rzj - frames[i].r[k].z;
154                
155                map( &dx, &dy, &dz,
156                     frames[i].boxX, frames[i].boxY, frames[i].boxZ );
# Line 155 | Line 163 | void GofR( char* out_prefix, char* atom1, char* atom2,
163                if( bin < GofRBins ) histogram[bin] += 2;
164              }
165            }
166 <
167 <          else if( !strcmp( frames[0].names[j], atom2 ) ){
166 >        }
167 >        
168 >        else if( !strcmp( frames[0].names[j], atom2 ) ){
169 >          
170 >          rxj = frames[i].r[j].x;
171 >          ryj = frames[i].r[j].y;
172 >          rzj = frames[i].r[j].z;
173 >          
174 >          for( k=j+1; k< frames[i].nAtoms; k++ ){
175 >            
176              if( !strcmp( frames[0].names[k], atom1 ) ){
177                
178 <              dx = frames[i].r[j].x - frames[i].r[k].x;
179 <              dy = frames[i].r[j].y - frames[i].r[k].y;
180 <              dz = frames[i].r[j].z - frames[i].r[k].z;
178 >              dx = rxj - frames[i].r[k].x;
179 >              dy = ryj - frames[i].r[k].y;
180 >              dz = rzj - frames[i].r[k].z;
181                
182                map( &dx, &dy, &dz,
183                     frames[i].boxX, frames[i].boxY, frames[i].boxZ );
# Line 237 | Line 253 | void GofR( char* out_prefix, char* atom1, char* atom2,
253      
254      // calculate the histogram
255  
256 <    for( i=0; i<nFrames; i++){
256 >    for( i=startFrame; i<endFrame; i++){
257        for( j=0; j<(frames[i].nAtoms-1); j++ ){
258 <        for( k=j+1; k< frames[i].nAtoms; k++ ){
258 >        
259 >        if( !strcmp( frames[0].names[j], allAtom ) ){
260            
261 <          if( !strcmp( frames[0].names[j], allAtom ) ){
262 <                  
263 <            dx = frames[i].r[j].x - frames[i].r[k].x;
264 <            dy = frames[i].r[j].y - frames[i].r[k].y;
265 <            dz = frames[i].r[j].z - frames[i].r[k].z;
261 >          rxj = frames[i].r[j].x;
262 >          ryj = frames[i].r[j].y;
263 >          rzj = frames[i].r[j].z;
264 >          
265 >          for( k=j+1; k< frames[i].nAtoms; k++ ){
266 >                          
267 >            dx = rxj - frames[i].r[k].x;
268 >            dy = ryj - frames[i].r[k].y;
269 >            dz = rzj - frames[i].r[k].z;
270              
271              map( &dx, &dy, &dz,
272                   frames[i].boxX, frames[i].boxY, frames[i].boxZ );
# Line 257 | Line 278 | void GofR( char* out_prefix, char* atom1, char* atom2,
278              bin = (int)( dist / delR );
279              if( bin < GofRBins ) histogram[bin] += 2;
280            }
281 <          
282 <          else if( !strcmp( frames[0].names[k], allAtom ) ){
281 >        }
282 >          
283 >        else{
284 >          
285 >          rxj = frames[i].r[j].x;
286 >          ryj = frames[i].r[j].y;
287 >          rzj = frames[i].r[j].z;
288 >          
289 >          for( k=j+1; k< frames[i].nAtoms; k++ ){
290              
291 <            dx = frames[i].r[j].x - frames[i].r[k].x;
292 <            dy = frames[i].r[j].y - frames[i].r[k].y;
293 <            dz = frames[i].r[j].z - frames[i].r[k].z;
294 <            
295 <            map( &dx, &dy, &dz,
296 <                 frames[i].boxX, frames[i].boxY, frames[i].boxZ );
297 <            
298 <            distSqr = (dx * dx) + (dy * dy) + (dz * dz);
299 <            dist = sqrt( distSqr );
300 <            
301 <            // add to the appropriate bin
302 <            bin = (int)( dist / delR );
303 <            if( bin < GofRBins ) histogram[bin] += 2;
291 >            if( !strcmp( frames[0].names[k], allAtom ) ){
292 >              
293 >              dx = rxj - frames[i].r[k].x;
294 >              dy = ryj - frames[i].r[k].y;
295 >              dz = rzj - frames[i].r[k].z;
296 >              
297 >              map( &dx, &dy, &dz,
298 >                   frames[i].boxX, frames[i].boxY, frames[i].boxZ );
299 >              
300 >              distSqr = (dx * dx) + (dy * dy) + (dz * dz);
301 >              dist = sqrt( distSqr );
302 >              
303 >              // add to the appropriate bin
304 >              bin = (int)( dist / delR );
305 >              if( bin < GofRBins ) histogram[bin] += 2;
306 >            }
307            }
308          }        
309        }
# Line 318 | Line 349 | void GofR( char* out_prefix, char* atom1, char* atom2,
349      
350      // calculate the histogram
351  
352 <    for( i=0; i<nFrames; i++){
352 >    for( i=startFrame; i<endFrame; i++){
353        for( j=0; j<(frames[i].nAtoms-1); j++ ){
354 +        
355 +        rxj = frames[i].r[j].x;
356 +        ryj = frames[i].r[j].y;
357 +        rzj = frames[i].r[j].z;
358 +        
359          for( k=j+1; k< frames[i].nAtoms; k++ ){
360 <          
361 <          dx = frames[i].r[j].x - frames[i].r[k].x;
362 <          dy = frames[i].r[j].y - frames[i].r[k].y;
363 <          dz = frames[i].r[j].z - frames[i].r[k].z;
364 <          
360 >
361 >          dx = rxj - frames[i].r[k].x;
362 >          dy = ryj - frames[i].r[k].y;
363 >          dz = rzj - frames[i].r[k].z;
364 >                  
365            map( &dx, &dy, &dz,
366                 frames[i].boxX, frames[i].boxY, frames[i].boxZ );
367            
# Line 379 | Line 415 | void GofR( char* out_prefix, char* atom1, char* atom2,
415    fclose( out_file );
416   }
417  
382
383 void map( double *x, double *y, double *z,
384          double boxX, double boxY, double boxZ ){
385  
386  *x -= boxX * copysign(1.0,*x) * floor( fabs( *x/boxX ) + 0.5  );
387  *y -= boxY * copysign(1.0,*y) * floor( fabs( *y/boxY ) + 0.5  );
388  *z -= boxZ * copysign(1.0,*z) * floor( fabs( *z/boxZ ) + 0.5  );
389
390 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines