Added mol2rtp

This commit is contained in:
arcan1s
2012-12-17 14:39:32 +04:00
parent 3c1eb2d6c8
commit 1db71b4130
2 changed files with 112 additions and 0 deletions

24
mol2rtp/README Normal file
View File

@ -0,0 +1,24 @@
mol2rtp
Version: 1.0
Author: Evgeniy Alexeev aka arcanis
Email: esalexeev@gmail.com
mol2rtp convert *.mol2 file in GROMACS topology
file (*.rtp).
Usage:
mol2rtp [MOL2.FILE] [RTP.FILE]
For example:
mol2rtp exmpl.mol2 exmpl.rtp
NOTE: You must edit molecular mechanics atom types
in output *.rtp-file, because atom types in *.mol2
file don't match GROMACS atom types.
Compile:
gcc mol2rtp.c -o mol2rtp
Dependence:
* gcc
* lib: string.h, stdlib.c, stdio.h

88
mol2rtp/mol2rtp.c Normal file
View File

@ -0,0 +1,88 @@
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main(int argc, char *argv[])
{
int i, j, n_bonds, n_angles, num[2];
char q[256], label[512][4], type[4];
double charge;
FILE *inp, *out;
if (argc == 1)
{
printf ("Error: Parametrs is not enable!\n");
printf ("Usage --help or -h for help\n");
exit(0);
}
if ((argv[1][0] == '-' && argv[1][1] == '-' && argv[1][2] == 'h' && argv[1][3] == 'e' && argv[1][4] == 'l', argv[1][5] == 'p') || (argv[1][0] == '-' && argv[1][1] == 'h'))
{
printf ("mol2rtp convert *.mol2 file in GROMACS topology file *.rtp\n");
printf ("NOTE: You must edit MM atom type in *.rtp file\n");
printf ("Usage: mol2rtp [MOL2.FILE] [RTP.FILE]\n");
printf ("Evgeniy Alexeev aka arcanis\n");
printf ("email: esalexeev@gmail.com\n");
exit(0);
}
else
if (argc == 2)
{
printf ("Error: Parametrs is not enable!\n");
printf ("Usage --help or -h for help\n");
exit(0);
}
printf ("mol2rtp V.1.0\n");
inp = fopen (argv[1], "r+");
if (inp == NULL)
{
printf ("File %s is not found!\n", argv[1]);
exit(0);
}
out = fopen (argv[2], "w+");
fgets (q, 255, inp);
fgets (q, 255, inp);
fscanf (inp, "%i", &n_bonds);
fscanf (inp, "%i", &n_angles);
for (i=0; i<5; i++)
fgets (q, 255, inp);
printf ("Enter molecule name: ");
scanf ("%s", q);
fprintf (out, "[ %s ]\n [ atoms ]\n", q);
for (i=0; i<n_bonds; i++)
{
fgets( q, 255, inp);
charge = atof (&q[69]);
for (j=0; j<4; j++)
{
type[j] = q[j+47];
label[i][j] = q[j+8];
}
fprintf (out, " %c%c%c%c %c%c%c%c %5.2f%5i\n", label[i][0], label[i][1], label[i][2], label[i][3], type[0], type[1], type[2], type[3], charge, i);
}
fprintf (out, " [ bonds ]\n");
fgets (q, 255, inp);
for (i=0; i<n_angles; i++)
{
fscanf (inp, "%i", &j);
fscanf (inp, "%i", &num[0]);
fscanf (inp, "%i", &num[1]);
fscanf (inp, "%i", &j);
fprintf (out, " %c%c%c%c %c%c%c%c\n", label[num[0]-1][0], label[num[0]-1][1], label[num[0]-1][2], label[num[0]-1][3], label[num[1]-1][0], label[num[1]-1][1], label[num[1]-1][2], label[num[1]-1][3]);
}
fclose (inp);
fclose (out);
}