source: util/src/GetPdb.c@ 4737be

NanoCreator_WORKING
Last change on this file since 4737be was ef87ee, checked in by Frederik Heber <heber@…>, 16 years ago

Added versioning to each executable.

  • credits to Ralf Wildenhues for writing the Makefile.am code
  • version.c section added to Makefile.am (pcp, molecuilder and util)
  • src/version.h to each pcp, molecuilder and util
  • each of the executables includes version.h and prints version in main()

Signed-off-by: Frederik Heber <heber@…>

  • Property mode set to 100644
File size: 3.4 KB
Line 
1/*
2 Project: CP
3 Jan Hamaekers
4 1999
5
6 File: GetPdb.c
7*/
8
9#include<stdlib.h>
10#include<stdio.h>
11#include<math.h>
12
13#include"mergesort.h"
14#include "version.h"
15
16struct Coord {
17 double coord[3];
18 int Z;
19};
20double GetKey(void *C) { return(((struct Coord*)C)->Z); }
21
22
23
24
25void GetPdb(FILE *source, FILE *target, int max) {
26 struct Coord **sequence;
27 int i;
28 int dummyint,dummyint2;
29 char atomchar;
30 char dummystr[80];
31 double center[3][2] = {{0.,0.},{0.,0.},{0.,0.}};
32 double Bohr = 0.52919;
33
34 fprintf(stdout, "%s\n", ESPACKVersion);
35
36 sequence = (struct Coord **)
37 malloc(sizeof(struct Coord*)*max);
38 for (i=0; i < max; i++) {
39 sequence[i] = (struct Coord *)
40 malloc(sizeof(struct Coord));
41 fscanf(source,"%s %i %c %i %lg %lg %lg",dummystr,&dummyint,&atomchar,&dummyint2, &sequence[i]->coord[0], &sequence[i]->coord[1], &sequence[i]->coord[2]);
42 if (i==0) {
43 center[0][0] = sequence[i]->coord[0];
44 center[0][1] = sequence[i]->coord[0];
45 center[1][0] = sequence[i]->coord[1];
46 center[1][1] = sequence[i]->coord[1];
47 center[2][0] = sequence[i]->coord[2];
48 center[2][1] = sequence[i]->coord[2];
49 switch (atomchar) {
50 case 'H':
51 sequence[i]->Z = 1;
52 break;
53 case 'B':
54 sequence[i]->Z = 5;
55 break;
56 case 'N':
57 sequence[i]->Z = 7;
58 break;
59 }
60 } else {
61 if (sequence[i]->coord[0] < center[0][0]) center[0][0] = sequence[i]->coord[0];
62 if (sequence[i]->coord[0] > center[0][1]) center[0][1] = sequence[i]->coord[0];
63 if (sequence[i]->coord[1] < center[1][0]) center[1][0] = sequence[i]->coord[1];
64 if (sequence[i]->coord[1] > center[1][1]) center[1][1] = sequence[i]->coord[1];
65 if (sequence[i]->coord[2] < center[2][0]) center[2][0] = sequence[i]->coord[2];
66 if (sequence[i]->coord[2] > center[2][1]) center[2][1] = sequence[i]->coord[2];
67 switch (atomchar) {
68 case 'H':
69 sequence[i]->Z = 1;
70 break;
71 case 'B':
72 sequence[i]->Z = 5;
73 break;
74 case 'N':
75 sequence[i]->Z = 7;
76 break;
77 }
78 }
79 }
80 naturalmergesort((void **)sequence,0,max-1,&GetKey);
81 fprintf(target,"Lattice in Bohr\n%g %g, %g %g, %g %g\nCenter in Angstroem %g %g %g\n",center[0][0]/Bohr,center[0][1]/Bohr,center[1][0]/Bohr,center[1][1]/Bohr,center[2][0]/Bohr,center[2][1]/Bohr, (center[0][0]+center[0][1])/2,(center[1][0]+center[1][1])/2 , (center[2][0]+center[2][1])/2);
82 dummyint = 0;
83 dummyint2 = 0;
84 for (i =0;i < max;i++) {
85 if (sequence[i]->Z != dummyint) {
86 fprintf(target,"Atom: Following Z(%i) BeforeMax(%i)\n",sequence[i]->Z,dummyint2);
87 dummyint2=0;
88 }
89 dummyint2++;
90 dummyint = sequence[i]->Z;
91 fprintf(target,"%g %g %g\n", sequence[i]->coord[0], sequence[i]->coord[1], sequence[i]->coord[2]);
92 free(sequence[i]);
93 }
94 free(sequence);
95 fprintf(target,"Atom: BeforeMax(%i)\n",dummyint2);
96}
97
98int main(int argc, char** argv) {
99 int max;
100 FILE *source;
101 FILE *target;
102 if(argc < 4) {
103 fprintf(stderr,"Not enough arguments\nUsage: GetPdb source target nmax\n");
104 exit(1);
105 }
106 source = fopen(argv[1], "r");
107 if(source == 0) {
108 fprintf(stderr,"Could not open source\n");
109 exit(1);
110 }
111 target = fopen(argv[2], "w");
112 if(target == 0) {
113 fprintf(stderr,"Could not open target\n");
114 exit(1);
115 }
116 max = atoi(argv[3]);
117 fprintf(stderr,"Input: source: %s \ntarget: %s\nmax %i\n", argv[1], argv[2],max);
118 GetPdb(source,target,max);
119 fclose(source);
120 fclose(target);
121 return 0;
122}
Note: See TracBrowser for help on using the repository browser.