Beispiel #1
0
int main(int argc, char **argv)
{
   PDB *pdb;
   int natoms;
   char *seq;
   FILE *fp;
   fp = fopen("/acrm/data/pdb/pdb1crn.ent", "r");
   pdb=ReadPDB(fp, &natoms);
   
   seq = DoPDB2Seq(pdb, FALSE, FALSE, FALSE);
   return(0);
}
Beispiel #2
0
/*>static WHOLEPDB *ReadWholePDB(FILE *fpin)
   -----------------------------------------
   Input:     FILE      *fpin     File pointer
   Returns:   WHOLEPDB  *         Whole PDB structure containing linked
                                  list to PDB coordinate data

   Reads a PDB file, storing the header and trailer information as
   well as the coordinate data. Can read gzipped files as well as
   uncompressed files.

   Coordinate data is accessed as linked list of type PDB as follows:
   
   WHOLEPDB *wpdb;
   PDB      *p;
   wpdb = ReadWholePDB(fp);
   for(p=wpdb->pdb; p!=NULL; p=p->next)
   {
      ... Do something with p ...
   }

   30.05.02  Original   By: ACRM
   07.03.07 Made into a doXXX routine to add a atomsonly parameter

   TODO FIXME!!!!! Move all this into doReadPDB so that we don't worry 
   about rewinding any more
*/
static WHOLEPDB *doReadWholePDB(FILE *fpin, BOOL atomsonly)
{
   WHOLEPDB *wpdb;
   char     buffer[MAXBUFF];
   FILE     *fp = fpin;
   
#ifdef GUNZIP_SUPPORT
   int      signature[3],
            i,
            ch;
   char     cmd[80];
#endif

   if((wpdb=(WHOLEPDB *)malloc(sizeof(WHOLEPDB)))==NULL)
      return(NULL);

   wpdb->pdb     = NULL;
   wpdb->header  = NULL;
   wpdb->trailer = NULL;
   
#ifdef GUNZIP_SUPPORT
   cmd[0] = '\0';
   
   /* See whether this is a gzipped file                                */
   for(i=0; i<3; i++)
      signature[i] = fgetc(fpin);
   for(i=2; i>=0; i--)
      ungetc(signature[i], fpin);
   if((signature[0] == (int)0x1F) &&
      (signature[1] == (int)0x8B) &&
      (signature[2] == (int)0x08))
   {
      /* It is gzipped so we'll open gunzip as a pipe and send the data
         through that into a temporary file
      */
      cmd[0] = '\0';
      sprintf(cmd,"gunzip >/tmp/readpdb_%d",(int)getpid());
      if((fp = (FILE *)popen(cmd,"w"))==NULL)
      {
         wpdb->natoms = (-1);
         return(NULL);
      }
      while((ch=fgetc(fpin))!=EOF)
         fputc(ch, fp);
      pclose(fp);

      /* We now reopen the temporary file as our PDB input file         */
      sprintf(cmd,"/tmp/readpdb_%d",(int)getpid());
      if((fp = fopen(cmd,"r"))==NULL)
      {
         wpdb->natoms = (-1);
         return(NULL);
      }
   }
#endif   

   /* Read the header from the PDB file                                 */
   while(fgets(buffer,MAXBUFF,fp))
   {
      if(!strncmp(buffer, "ATOM  ", 6) ||
         !strncmp(buffer, "HETATM", 6) ||
         !strncmp(buffer, "MODEL ", 6))
      {
         break;
      }
      if((wpdb->header = StoreString(wpdb->header, buffer))==NULL)
         return(NULL);
   }
   
   /* Read the coordinates                                              */
   rewind(fp);
   if(atomsonly)
   {
      wpdb->pdb = ReadPDBAtoms(fp, &(wpdb->natoms));
   }
   else
   {
      wpdb->pdb = ReadPDB(fp, &(wpdb->natoms));
   }

   /* Read the trailer                                                  */
   rewind(fp);
   while(fgets(buffer,MAXBUFF,fp))
   {
      if(!strncmp(buffer, "CONECT", 6) ||
         !strncmp(buffer, "MASTER", 6) ||
         !strncmp(buffer, "END   ", 6))
      {
         wpdb->trailer = StoreString(wpdb->trailer, buffer);
      }
   }
   
   return(wpdb);
}
void  ParseCommandLine ( const int argc, char *argv[]) {
extern FRAGMENTS * ReadPDB ( char *  ,int) ;
void ReadLIGDEF ( char * filename ) ; 

void help();
int narg;
char filename[MaxLine];
    /** Parse Arguments */
    narg=1;
    while ( narg < argc ) {

      if ( strncmp(argv[narg],"-startres",5) == 0 ) {
        if ( narg++ && narg < argc) { startres=atoi(argv[narg]); }
        else {  break ;  }
      }
      else if (strcmp ( argv[narg], "-hydrogens") == 0 ) {
         options.hydrogens=JIVE_TRUE;
      }
      else if (strncmp ( argv[narg], "-reducemax",10) == 0 ) {
          ReduceMaxRotChange=1;
      }
      else if (strncmp ( argv[narg], "-use_water",10) == 0 ) {
          globals.ignore_water = JIVE_FALSE ;
printf("reading in waters\n");
      }
      else if (strncmp ( argv[narg], "-noreducemax",12) == 0 ) {
          ReduceMaxRotChange=0;
      }
      else if (strncmp ( argv[narg], "-randgroup",10) == 0 ) {
          RandGroup=1;
      }
      else if (strncmp ( argv[narg], "-norandgroup",12) == 0 ) {
          RandGroup=0;
      }
      else if ( strncmp(argv[narg],"-maxrmsdtries",13) == 0 ) {
        if ( narg++ && narg < argc) { MaxRotamerTries=atoi(argv[narg]); }
        else {  break ;  }
      }
      else if ( strncmp(argv[narg],"-nrepeat",8) == 0 ) {
        if ( narg++ && narg < argc) { MaxRepeats=atoi(argv[narg]); }
        else {  break ;  }
      }
      else if ( strncmp(argv[narg],"-nstructures",12) == 0 ) {
        if ( narg++ && narg < argc) { MaxNstructures=atoi(argv[narg]); }
        else {  break ;  }
      }
      else if ( strncmp(argv[narg],"-endres",5) == 0 ) {
        if ( narg++ && narg < argc) { endres=atoi(argv[narg]); }
        else {  break ;  }
      }
      else if ( strncmp(argv[narg],"-all",4) == 0 ) {
         MinBFactor=-10000;
      }
      else if ( strncmp(argv[narg],"-outpdb",7) == 0 ) { 
        Outpdb = 1;
      }
      else if ( strncmp(argv[narg],"-outxyz",7) == 0 ) { 
        Outxyz = 1;
      }
      else if ( strncmp(argv[narg],"-pdb",4) == 0 ) { 
        if ( narg++ && narg < argc) { PDB =ReadPDB(argv[narg],MaxRes); }
      }
      else if ( strncmp(argv[narg],"-bbdscrwl",9) == 0 ) { 
        UsingLovell = 0;
      }
      else if ( strncmp(argv[narg],"-bbdlovell",10) == 0 ) { 
        UsingLovell = 1;
      }
      else if ( strncmp(argv[narg],"-bbdlib",7) == 0 ) { 
        if ( narg++ && narg < argc) {
         strcpy(globals.BbdDir,argv[narg]);
printf("Setting location for BBD to %s\n",globals.BbdDir);
        }
      }
      else if ( strncmp(argv[narg],"-bbdminprob",11) == 0 ) { 
        if ( narg++ && narg < argc) {
          globals.MinRotamerProb=atof(argv[narg]);
        }
      }
      else if ( strncmp(argv[narg],"-file",5) == 0 ) { 
        if ( narg++ && narg < argc) {
         strcpy(globals.BbdDir,argv[narg]);
printf("Setting location for BBD to %s\n",globals.BbdDir);
        }
      }
      else if ( strncmp(argv[narg],"-file",5) == 0 ) { 
        if ( narg++ && narg < argc) {
         strcpy(filename,argv[narg]);
        }
      }
      else if (strncmp ( argv[narg], "-tryharder",10) == 0 ) {
          TryHarder=1;
      }
      else if (strncmp ( argv[narg], "-notryharder",12) == 0 ) {
          TryHarder=0;
      }
      else if (strncmp ( argv[narg], "-tweaklig",8) == 0 ) {
        if ( narg++ && narg < argc) { Tweaklig =DegreeToRadian*atof(argv[narg]); }
        else {  break ;  }
      }
      else if (strncmp ( argv[narg], "-tweakchi",8) == 0 ) {
        if ( narg++ && narg < argc) { Tweakchi =DegreeToRadian*atof(argv[narg]); }
        else {  break ;  }
      }
      else if (strncmp ( argv[narg], "-tweakxyz",8) == 0 ) {
        if ( narg++ && narg < argc) { Tweakxyz =atof(argv[narg]); }
        else {  break ;  }
      }

      else if ( strncmp(argv[narg],"-limit",6) == 0 ) { 
        if ( narg++ && narg < argc) { limit = atoi(argv[narg]); }
      }
      else if ( strncmp(argv[narg],"-bfactor",7) == 0 ) { 
        if ( narg++ && narg < argc) { MinBFactor = atof(argv[narg]); }
      }
      else if ( strncmp(argv[narg],"-residuecentre",8) == 0 ) { 
        if ( narg++ && narg < argc) { CentreResidue = atoi(argv[narg]); }
      }
      else if ( strncmp(argv[narg],"-rotreject",10) == 0 ) { 
        if ( narg++ && narg < argc) { AcceptDistanceThreshold  = (atof(argv[narg])); }
      }
      else if (strncmp ( argv[narg], "-rotamer",8) == 0 ) {
        if ( narg++ && narg < argc) { options.nrotamers= atoi(argv[narg]); }
        else {  break ;  }
        if ( options.nrotamers <0 || options.nrotamers>MaxRotamers ) options.nrotamers = MaxRotamers;
      }
      else if (strncmp ( argv[narg], "-maxligchange",13) == 0 ) {
        if ( narg++ && narg < argc) { MaxNligchange= atoi(argv[narg]); }
        else {  break ;  }
        if ( MaxNligchange <0)  MaxNligchange = 9999;
      }
      else if (strncmp ( argv[narg], "-maxrotchange",13) == 0 ) {
        if ( narg++ && narg < argc) { MaxNrotchange= atoi(argv[narg]); }
        else {  break ;  }
        if ( MaxNrotchange <0)  MaxNrotchange = 9999;
      }
      else if ( strncmp(argv[narg],"-maxrotcombine",14) == 0 ) {
          MaxNrotcombine=1;
      }
      else if ( strncmp(argv[narg],"-vdwthresh",10) == 0 ) {
        if ( narg++ && narg < argc) { VDWThreshold=atof(argv[narg]); }
        else {  break ;  }
      }
      else if ( strncmp(argv[narg],"-rmsdthresh",11) == 0 ) {
        if ( narg++ && narg < argc) { RmsdThreshold=atof(argv[narg]); }
        else {  break ;  }
      }
      else if ( strncmp(argv[narg],"-distthresh",11) == 0 ) { 
        if ( narg++ && narg < argc) { DistanceThreshold  = (atof(argv[narg])); }
      }
      else if (strncmp ( argv[narg], "-rotthresh",10) == 0 ) {
        if ( narg++ && narg < argc) { RotThreshold= atof(argv[narg]); }
        else {  break ;  }
      }
      else if (strncmp ( argv[narg], "-chithresh",10) == 0 ) {
        if ( narg++ && narg < argc) { ChiThreshold= atof(argv[narg]); }
        else {  break ;  }
      }
      else if (strncmp ( argv[narg], "-xyzthresh",10) == 0 ) {
        if ( narg++ && narg < argc) { XYZThreshold= atof(argv[narg]); }
        else {  break ;  }
      }
      else if (strncmp ( argv[narg], "-ligthresh",10) == 0 ) {
        if ( narg++ && narg < argc) { LIGThreshold= atof(argv[narg]); }
        else {  break ;  }
      }
      else if (strcmp ( argv[narg], "-ligdef") == 0 ) {
        if ( narg++ && narg < argc) { ReadLIGDEF(argv[narg]); }
        else {  break ;  }
      }

      else if ( strncmp(argv[narg],"-h",2) == 0 ) { help(); return ; }
      else if ( strncmp(argv[narg],"-v",2) == 0 ) { options.verbose++;}
      else if ( strncmp(argv[narg],"-V",2) == 0 ) { options.verbose++;}
      narg++;
    }


}