130 static BOOL HasText(
char *ptr,
char *hasWords,
char *notWords);
131 static int SetStrucType(
char *ptr);
132 static REAL GetNumberAfterColon(
char *ptr);
133 static BOOL FindNextNumber(
char *buffer, FILE *fp,
int nlines,
int nskip,
134 int ncheck,
REAL *value);
135 static void ReadData(
char *buffer,
REAL *resolution,
REAL *RFactor,
136 REAL *FreeR,
int *StrucType);
198 return(
blGetExptlPDB(fp, resolution, RFactor, &FreeR, StrucType));
295 *resolution = (
REAL)0.0;
296 *RFactor = (
REAL)0.0;
305 while(fgets(buffer,
MAXBUFF,fp))
311 if(!strncmp(buffer,
"ATOM ",6))
314 ReadData(buffer, resolution, RFactor, FreeR, StrucType);
320 return ((*resolution > 0.0) ||
351 REAL *FreeR,
int *StrucType)
357 *resolution = (
REAL)0.0;
358 *RFactor = (
REAL)0.0;
370 ReadData(buffer, resolution, RFactor, FreeR, StrucType);
377 return ((*resolution > 0.0) ||
418 return(
"X-ray crystal structure");
427 return(
"Electron Diffraction");
430 return(
"Fiber Diffraction");
433 return(
"Solid State NMR");
436 return(
"Neutron Scattering");
439 return(
"Electron Miscroscopy");
442 return(
"Solution Scattering");
445 return(
"Infra-red Spectroscopy");
448 return(
"Powder Diffraction");
451 return(
"Fluorescence Transfer");
462 static REAL GetNumberAfterColon(
char *ptr)
467 if((colon = strchr(ptr,
':'))!=
NULL)
470 sscanf(colon,
"%lf", &val);
478 static BOOL HasText(
char *ptr,
char *hasWords,
char *notWords)
497 if(!strcmp(word1, word2))
506 if(nFound != nRequired)
522 if(!strcmp(word1, word2))
533 static int SetStrucType(
char *ptr)
535 if(strstr(ptr,
"DIFFRACTION"))
537 if(strstr(ptr,
"X-RAY"))
541 else if(strstr(ptr,
"FIBER"))
545 else if(strstr(ptr,
"NEUTRON"))
549 else if(strstr(ptr,
"POWDER"))
554 else if(strstr(ptr,
"ELECTRON"))
556 if(strstr(ptr,
"CRYSTALLOGRAPHY"))
560 else if(strstr(ptr,
"MICROSCOPY"))
565 else if(strstr(ptr,
"SOLUTION"))
567 if(strstr(ptr,
"NMR"))
571 else if(strstr(ptr,
"SCATTERING"))
576 else if(strstr(ptr,
"SOLID-STATE"))
578 if(strstr(ptr,
"NMR"))
583 else if(strstr(ptr,
"SPECTROSCOPY"))
585 if(strstr(ptr,
"INFRARED"))
590 else if(strstr(ptr,
"FLUORESCENCE"))
592 if(strstr(ptr,
"TRANSFER"))
673 InAllDataBlock =
FALSE;
680 *resolution = (
REAL)0.0;
681 *RFactor = (
REAL)0.0;
691 for(PassNumber = 0; PassNumber<5; PassNumber++)
698 while(fgets(buffer,
MAXBUFF,fp))
704 if(!strncmp(buffer,
"ATOM ",6))
708 if(!strncmp(buffer,
"REMARK",6))
716 if(((ptr = strstr(buffer,
"RESOL"))!=
NULL) &&
717 (strstr(buffer,
"TITL ") ==
NULL) &&
718 (strstr(buffer,
"REMARK 2")))
724 if(strstr(ptr,
"NOT"))
731 if(!FindNextNumber(ptr,fp,1,10,62,resolution))
742 if(HaveResol && !ResNotApplic)
750 if(!strncmp(buffer,
"REMARK 3",10))
753 "FIT/AGREEMENT OF MODEL WITH ALL DATA") ||
755 "DATA USED IN REFINEMENT"))
757 InAllDataBlock =
TRUE;
759 else if(InAllDataBlock)
761 if((ptr=strstr(buffer,
762 "R VALUE (WORKING + TEST"))
765 if(FindNextNumber(ptr,fp,0,50,65,RFactor))
768 *RFactor = (
REAL)0.0;
775 if(FindNextNumber(ptr,fp,0,50,65,RFactor))
778 *RFactor = (
REAL)0.0;
787 if(FindNextNumber(ptr,fp,0,50,65,FreeR))
793 if(strstr(buffer,
"NUMBER OF NON-HYDROGEN")!=
NULL)
794 InAllDataBlock =
FALSE;
802 if((ptr=strstr(buffer,
" R-FAC")) !=
NULL ||
803 (ptr=strstr(buffer,
" R FAC")) !=
NULL ||
804 (ptr=strstr(buffer,
" R =")) !=
NULL ||
805 (ptr=strstr(buffer,
" R-VAL")) !=
NULL ||
806 (ptr=strstr(buffer,
" R VAL")) !=
NULL)
808 if(FindNextNumber(ptr,fp,1,10,62,RFactor))
811 *RFactor = (
REAL)0.0;
819 if((ptr=strstr(buffer,
"R-FAC")) !=
NULL ||
820 (ptr=strstr(buffer,
"R FAC")) !=
NULL ||
821 (ptr=strstr(buffer,
"R-VAL")) !=
NULL ||
822 (ptr=strstr(buffer,
"R VAL")) !=
NULL)
824 if(FindNextNumber(ptr,fp,1,10,62,RFactor))
827 *RFactor = (
REAL)0.0;
832 if((ptr=strstr(buffer,
"VALUE")) !=
NULL)
838 if((ptr > buffer) && (*(ptr-1) !=
'-'))
840 if(FindNextNumber(ptr,fp,1,10,62,RFactor))
843 *RFactor = (
REAL)0.0;
849 if((ptr=strstr(buffer,
"FACTOR")) !=
NULL)
851 if(FindNextNumber(ptr,fp,1,10,62,RFactor))
854 *RFactor = (
REAL)0.0;
868 if(*RFactor > (
REAL)0.5 || *RFactor < (
REAL)0.0)
869 *RFactor = (
REAL)0.0;
876 if(HaveRFac && HaveFreeR)
904 if(ResNotApplic || HaveRFac)
909 if ( ResNotApplic || !HaveResol )
911 REAL FindRecord = 0.0,
924 if(FindNextNumber(buffer, fp, 0, 0, 71, &FindRecord))
927 if(strstr(buffer+10,
"REMARK"))
929 if(!FindNextNumber(buffer+10, fp, 0, 10, 71, &FindRefRecord))
930 FindRefRecord = (-1);
934 while(fgets(buffer,
MAXBUFF,fp))
936 if(!strncmp(buffer,
"ATOM ",6))
break;
937 if(!strncmp(buffer,
"EXPDTA",6))
939 if(strstr(buffer,
"NMR"))
945 else if (strstr (buffer,
"ELECTRON MICROSCOPY"))
952 if(!strncmp(buffer,
"REMARK",6))
954 if(FindNextNumber(buffer, fp, 0, 0, 71, &ThisRecord))
956 if(((
int)FindRecord == (
int)ThisRecord) ||
957 ((
int)FindRefRecord == (
int)ThisRecord))
959 if(strstr(buffer,
"MODEL")||
960 strstr(buffer,
"NON-EXP"))
965 if(strstr(buffer,
"NMR"))
975 if(strstr(buffer,
"EXPERIMENT"))
977 if(strstr(buffer,
"MODEL"))
982 else if(strstr(buffer,
"NMR"))
987 else if(strstr(buffer,
"X-RAY"))
1036 static BOOL FindNextNumber(
char *buffer, FILE *fp,
int nlines,
int nskip,
1037 int ncheck,
REAL *value)
1050 for(ptr=buffer; *ptr; ptr++)
1053 if(*ptr ==
' ' || *ptr ==
'\t')
1057 ( valbuff[i-1] ==
'.' || valbuff[i-1] ==
',' ) )
1058 valbuff[i-1] =
'\0';
1060 if((sscanf(valbuff,
"%lf",value)) == 1)
1072 valbuff[i++] = *ptr;
1081 for(j=0; j<nskip; j++)
1085 while(((ch = (
int)fgetc(fp)) != EOF) && (linecount < nlines))
1090 if(++chcount == ncheck)
1092 while((ch = (
int)fgetc(fp)) != EOF && ch !=
'\n');
1093 if(ch == EOF)
break;
1102 for(j=0; j<nskip; j++)
1110 if(ch ==
' ' || ch ==
'\t' || ch ==
'\n')
1114 if((sscanf(valbuff,
"%lf",value)) == 1)
1146 static void ReadData(
char *buffer,
REAL *resolution,
REAL *RFactor,
1147 REAL *FreeR,
int *StrucType)
1152 if(!strncmp(buffer,
"REMARK",6))
1160 if(sscanf(word,
"%d", &remarkType))
1165 if(*resolution == 0.0)
1168 if(!strncmp(word,
"RESOLUTION", 10))
1171 if(!sscanf(word,
"%lf", resolution))
1181 if(HasText(ptr,
"R VALUE WORKING",
"FREE"))
1183 *RFactor = GetNumberAfterColon(ptr);
1189 if(HasText(ptr,
"FREE R VALUE",
"TEST ERROR"))
1191 *FreeR = GetNumberAfterColon(ptr);
1202 if(HasText(ptr,
"EXPERIMENT TYPE",
NULL))
1205 if((colon = strchr(ptr,
':'))!=
NULL)
1208 *StrucType = SetStrucType(colon);
1265 else if(!strncmp(buffer,
"EXPDTA", 6))
1272 if((semiColon=strchr(ptr,
';'))!=
NULL)
1277 *StrucType = SetStrucType(ptr);
1284 int main(
int argc,
char **argv)
1287 REAL resol, RFactor, FreeR;
1290 fp = fopen(argv[1],
"r");
1291 GetExptl(fp, &resol, &RFactor, &FreeR, &StrucType);
1293 printf(
"PDB: %s\n",argv[1]);
1294 printf(
"Resol: %f\n",resol);
1295 printf(
"RFactor: %f\n",RFactor);
1296 printf(
"Free R: %f\n",FreeR);
#define STRUCTURE_TYPE_MODEL
#define STRUCTURE_TYPE_NMR
BOOL blGetResolWholePDB(WHOLEPDB *wpdb, REAL *resolution, REAL *RFactor, int *StrucType)
int main(int argc, char **argv)
Include file for PDB routines.
#define STRUCTURE_TYPE_SSNMR
BOOL blGetExptlOld(FILE *fp, REAL *resolution, REAL *RFactor, REAL *FreeR, int *StrucType)
BOOL blGetExptlPDB(FILE *fp, REAL *resolution, REAL *RFactor, REAL *FreeR, int *StrucType)
#define STRUCTURE_TYPE_XTAL
#define STRUCTURE_TYPE_EM
#define STRUCTURE_TYPE_SOLSCAT
char * blReportStructureType(int StrucType)
#define STRUCTURE_TYPE_UNKNOWN
#define STRUCTURE_TYPE_POWDER
BOOL blGetResolPDB(FILE *fp, REAL *resolution, REAL *RFactor, int *StrucType)
#define STRUCTURE_TYPE_NEUTRON
char * blGetWord(char *buffer, char *word, int maxsize)
#define STRUCTURE_TYPE_FRET
BOOL blGetExptlWholePDB(WHOLEPDB *wpdb, REAL *resolution, REAL *RFactor, REAL *FreeR, int *StrucType)
#define STRUCTURE_TYPE_ELECTDIFF
#define STRUCTURE_TYPE_IR
#define STRUCTURE_TYPE_FIBER