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); }
/*>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++; } }