CCL Home Page
Up Directory CCL rdpcmod.c
/****
This file is part of the Babel Program
Copyright (C) 1992-96 W. Patrick Walters and Matthew T. Stahl 
All Rights Reserved 
All Rights Reserved 
All Rights Reserved 
All Rights Reserved 

For more information please contact:

babel@mercury.aichem.arizona.edu
-------------------------------------------------------------------------------
FILE : rdpcmod.c
AUTHOR(S) : Abby Parrill
DATE : 6-94
PURPOSE : Read a pcmodel file into the UMS

*****/

#include "bbltyp.h"
#include "bblmacs.h"

int read_pcmodel(FILE *file1, ums_type *mol)
{
  char pcmod_line[BUFF_SIZE];
  int i;        /* dummy variable for undesired sections in record */
  char temp[BUFF_SIZE];    /* temporary storage for pcmodel atom type */
  int column;
  
  while (fgets(pcmod_line, sizeof(pcmod_line), file1) != NULL)
  {
    if (strstr(pcmod_line,"NA"))
      break;
  }
  sscanf(pcmod_line, "%*s %d", &Atoms);
  initialize_ums(&mol);    

  column = locate_input_type("PCM");
  while (fgets(pcmod_line, sizeof(pcmod_line), file1) != NULL)
  {
    if (EQn(pcmod_line, "AT", 2))        /* find atom records */
    {
      sscanf(pcmod_line,"%*s %d ",&i);
      get_token(temp,pcmod_line,",: \n\t",3);
      Atomic_number(i) = get_input_type(i,column,temp,Type(i),dummy);    
      get_token(temp,pcmod_line,",: \n\t",4);
      X(i) = atof(temp);
      get_token(temp,pcmod_line,",: \n\t",5);
      Y(i) = atof(temp);
      get_token(temp,pcmod_line,",: \n\t",6);
      Z(i) = atof(temp);
      get_pcmod_bonds(pcmod_line,mol,i);
    }
    if (strchr(pcmod_line,'}'))
    {
      break;
    }
  }
  build_connection_table(mol);
  
  return(TRUE);
}

void get_pcmod_bonds(char *the_line, ums_type *mol, int i)
{
  char *start, *old_start;
  int done = FALSE;
  char delims[] = ", \t\n";
  int tokens,j,k;
  char temp[BUFF_SIZE];
  
  start = strchr(the_line,'B');
  old_start = start;
  old_start++;
  while ((start != '\0') && (!done))
  {
    switch(*start)
    {
    case 'S'  :
    case 'C'  :
    case '\n' :
      *start = '\0';
      done = TRUE;
      break;
    default   :
      start++;
    }
  }
  tokens = count_tokens(old_start,delims);
  Valence(i) = tokens/2;
  k = 0;
  for (j = 1; j < (2 * Valence(i)); j+=2)
  {
    get_token(temp,old_start,delims,j);
    Connection(i,k) = atoi(temp);
    get_token(temp,old_start,delims,j+1);
    BO(i,k) = atoi(temp);
    k++;
  }
}
  




Modified: Tue Jan 21 17:00:00 1997 GMT
Page accessed 4622 times since Sat Apr 17 21:36:47 1999 GMT