Fixed a bug in the pdb-writing code.
[gromacs.git] / src / tools / recomb.c
blobce827e3951ec8858b046a0886335ebccc22c4e4f
1 /*
2 * $Id$
3 *
4 * This source code is part of
5 *
6 * G R O M A C S
7 *
8 * GROningen MAchine for Chemical Simulations
9 *
10 * VERSION 3.1
11 * Copyright (c) 1991-2001, University of Groningen, The Netherlands
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * If you want to redistribute modifications, please consider that
18 * scientific software is very special. Version control is crucial -
19 * bugs must be traceable. We will be happy to consider code for
20 * inclusion in the official distribution, but derived work must not
21 * be called official GROMACS. Details are found in the README & COPYING
22 * files - if they are missing, get the official version at www.gromacs.org.
24 * To help us fund GROMACS development, we humbly ask that you cite
25 * the papers on the package - you can find them in the top README file.
27 * For more info, check our website at http://www.gromacs.org
29 * And Hey:
30 * Green Red Orange Magenta Azure Cyan Skyblue
32 static char *SRCID_recomb_c = "$Id$";
33 #include "recomb.h"
34 #include "futil.h"
35 #include "wgms.h"
36 #include "smalloc.h"
38 real *read_gammaf(char *fn,int nframes)
40 FILE *in;
41 real *gf;
42 double y;
43 int i;
45 snew(gf,nframes);
46 in=ffopen(fn,"r");
47 for(i=0; (i<nframes); i++) {
48 fscanf(in,"%lf",&y);
49 gf[i]=y;
51 fclose(in);
52 fprintf(stderr,"Succesfully read gamma\n");
53 return gf;
56 void recombine(char *base,char *gammaf,int nskip,
57 int nframes,int nev,int natoms,
58 rvec *ev[],real *evprj[],
59 rvec yav[],atom_id all_index[])
61 static char *format=
62 "Recombined projection of Gamma trj (EV %d) in Cartesian Space\n";
63 FILE *out;
64 rvec *xxx,*evptr;
65 real *gamma;
66 real prj;
67 char buf[256];
68 int i,j,n;
69 real gt;
71 gamma=read_gammaf(gammaf,nframes);
72 snew(xxx,natoms);
73 for(n=0; (n<nev); n++) {
74 sprintf(buf,"%s%d",base,n+1);
75 out=ffopen(buf,"w");
76 fprintf(out,format,n+1);
77 fprintf(stderr,format,n+1);
78 evptr=ev[n];
80 for(j=0; (j<nframes); j++) {
81 if ((j % 50) == 0)
82 fprintf(stderr,"\r frame %d",j);
83 if ((nskip == 0) || ((j % nskip) == 0)) {
84 gt=1.0/gamma[j];
85 prj=evprj[n][j];
86 for(i=0; (i<natoms); i++) {
87 xxx[i][XX]=(yav[i][XX]+prj*evptr[i][XX])*gt;
88 xxx[i][YY]=(yav[i][YY]+prj*evptr[i][YY])*gt;
89 xxx[i][ZZ]=(yav[i][ZZ]+prj*evptr[i][ZZ])*gt;
91 write_gms_ndx(out,natoms,all_index,xxx,NULL);
94 fclose(out);
95 fprintf(stderr,"\r");
97 fprintf(stderr,"\n");
98 sfree(xxx);
99 sfree(gamma);