#include #include #include #include // prototypes char conv (int, int); int create_matrix (int, int, const int *, const int *, const float *, int, const float *, int *); int printing_agl (char *, char *, const int *, int, const int *, const int *, const int *, const int *, int *); int proc_matrix (int, const int *, int *, int *, int *, int *); int reading_coords (char *, int, const int *, const float *, int *, int *, int *, int *, int *, float *); int summary_statistic (char *, int, int, const int *, const int *); int error_checking (const float *cell, int from, const char *input, int num_of_inter, const char *output, int to, int type_inter) { if ((type_inter == 0) || (type_inter > 4)) return 11; if ((cell[0] == 0.0) || (cell[1] == 0.0) || (cell[2] == 0.0)) return 12; if ((to == -1) || (from == -1)) return 13; if (num_of_inter == 0) return 14; if (input[0] == '#') return 15; if (output[0] == '#') return 16; return 0; } int printing_head (const char *output, int log, int quiet, const char *input, int from, int to, const float *cell, int type_inter, const int *label_atom, int num_of_inter, const float *crit) { int i; FILE *f_out; f_out = fopen (output, "w"); fprintf (f_out, "statgen ::: V.1.0.0 ::: 2013-07-17\n\n"); fprintf (f_out, "CONFIGURATION\n"); fprintf (f_out, "LOG=%i\nQUIET=%i\n", log, quiet); fprintf (f_out, "MASK=%s\nFIRST=%i\nLAST=%i\n", input, from, to); fprintf (f_out, "CELL=%.4f,%.4f,%.4f\n", cell[0], cell[1], cell[2]); fprintf (f_out, "ATOMS=%i", label_atom[0]); for (i=1; i 0) { crit = (float *) malloc ( 16 * num_of_inter * sizeof (float)); for (i=0; i<16*num_of_inter; i++) crit[i] = 0.0; num_of_inter = 0; } // reading arguments for (i=1; i to) { to += from; from = to - from; to -= from; } step = to - from + 1; i++; } else if ((argv[i][0] == '-') && (argv[i][1] == 'c')) // cell size { sscanf (argv[i+1], "%f,%f,%f", &cell[0], &cell[1], &cell[2]); i++; } else if ((argv[i][0] == '-') && (argv[i][1] == 'a')) // atom types { type_inter = 1; for (j=0; j 1) { printf ("Something wrong (error code: %i)!\nSee 'statgen -h' for more details\n", error); return 1; } // processing // initial variables k = strlen (input); strcpy (filename, input); filename[k] = '.'; filename[k+1] = conv (from, 3); filename[k+2] = conv (from, 2); filename[k+3] = conv (from, 1); filename[k+4] = '\0'; f_inp = fopen (filename, "r"); if (f_inp == NULL) return 1; fscanf (f_inp, "%i", &num_atoms); fclose (f_inp); coords = (float *) malloc (3 * 8 * num_atoms * sizeof (float)); label_mol = (int *) malloc (8 * num_atoms * sizeof (int)); true_label_mol = (int *) malloc (8 * num_atoms * sizeof (int)); type_atoms = (int *) malloc (8 * num_atoms * sizeof (int)); // head printing_head (output, log, quiet, input, from, to, cell, type_inter, label_atom, num_of_inter, crit); // main cycle for (i=from; i