Documents/NamdSample/namd210b/lib/replica/FEP_wca/wham/extract-repul.cpp (88 lines of code) (raw):

// Code written by Lei Huang for wham post-process of FEP data in NAMD #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_N_WIN (128) int n_Win, nLine[MAX_N_WIN]; double rcut2[MAX_N_WIN]; inline int Get_Index_rcut(double rcut); int main(int argc, char *argv[]) { FILE *fIn, *fOut[MAX_N_WIN]; int ReadItem, i, Idx; double fTmp=0.0, rCut_1, rCut_2, lambda, dE; char szEType[256], szOutput[256], szLine[256], *ReadLine; if(argc != 3) { printf("Usage: rcut_2_list data_file\nThe output will be repu_*.wham.\n"); exit(1); } fIn = fopen(argv[1], "r"); if(fIn == NULL) { printf("Fail to open file: %s\nQuit\n", argv[1]); exit(1); } n_Win=0; while(1) { ReadItem = fscanf(fIn, "%lf", &(rcut2[n_Win])); if(ReadItem == 1) { nLine[n_Win] = 0; n_Win++; } else { break; } } fclose(fIn); fIn = fopen(argv[2], "r"); if(fIn == NULL) { printf("Fail to open file: %s\nQuit\n", argv[2]); exit(1); } for(i=0; i<n_Win; i++) { sprintf(szOutput, "repu_%d.wham", i); fOut[i] = fopen(szOutput, "w"); if(fOut[i] == NULL) { printf("Fail to open file: %s for write.\nQuit\n", szOutput); exit(1); } } // d_Cut = rcut2[1]-rcut2[0]; // d_Cut_Inv = 1.0/d_Cut; while(1) { if(feof(fIn)) { break; } ReadLine = fgets(szLine, 128, fIn); if(ReadLine == NULL) { break; } ReadItem = sscanf(szLine, "%s%lf%lf%lf%lf", szEType, &rCut_1, &rCut_2, &lambda, &dE); if(ReadItem == 5) { if(strcmp(szEType, "FEP_WCA_REP")==0) { // Idx = (int)(rCut2*d_Cut_Inv + 0.1) - 1; Idx = Get_Index_rcut(rCut_2); if(Idx < 0) { printf("Error: unrecognized rcut2 %lf\n", rCut_2); } else { fprintf(fOut[Idx], "%.4lf %.4lf\n", lambda, dE); nLine[Idx]++; } } } // else { // break; // } } fclose(fIn); for(i=0; i<n_Win; i++) { fclose(fOut[i]); } printf("Window rcut2 #_data\n"); for(i=0; i<n_Win; i++) { printf(" %6d %6.4lf %7d\n", i+1, rcut2[i], nLine[i]); } return 0; } inline int Get_Index_rcut(double rcut) { for(int i=0; i<n_Win; i++) { // if(fabs(rcut2[i]-rcut) < 2.0E-4) { if(rcut2[i] == rcut) { return i; } } return -1; }