X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=sources%2Fncoils%2Fcoils_old.c;fp=sources%2Fncoils%2Fcoils_old.c;h=56cb97d7229653004c5b2a1cebaa744a0894858e;hb=a5e6297d655a784603d499da5a025d5d5fa78783;hp=0000000000000000000000000000000000000000;hpb=df24dcd3c415c000592af419f2c9304a4e05c2ee;p=jpred.git diff --git a/sources/ncoils/coils_old.c b/sources/ncoils/coils_old.c new file mode 100644 index 0000000..56cb97d --- /dev/null +++ b/sources/ncoils/coils_old.c @@ -0,0 +1,911 @@ + +/* Program COILS version 2.1 */ + /* written by J.Lupas, 22 JUN 1993 */ + /* edited on 15 JAN 1994 */ + /* revised and corrected 4 APR 1994 */ + /* incorporates the option to use either the old MTK chart or + the new MTIDK chart AND the choice of weighting positions + a & d more (2.5 times) */ + /* 4 output options: + - probabilities for window sizes 14, 21 & 28 in columns, + - probabilities for window sizes 14, 21 & 28 in rows, + - scores only for a user-input window size, or + - the probabilities above a user-input cutoff. + Requests input and output files from user. */ + /* transferred to c++ by Larry Harvie, harvie@owl.WPI.EDU */ + /* adapted to C by Reinhard Schneider, SCHNEIDER@EMBL-Heidelberg.DE */ +#include +#include +#include +#include + + + typedef FILE *text; + typedef double chartstore[21][8]; + typedef char residuestore[10001]; + typedef double calcstore[4][10001]; + typedef int heptadstore[4][10001]; + + int window; + char inputfile[80],outputfile[80]; + text protein,pickup; + chartstore chartvalue; /* probability values */ + residuestore residue; /* stores amino acid sequence */ + heptadstore heptnum; /* stores heptad position number */ + calcstore calcnumb; /* stores best scores */ + int res_total; /* total no. of residues in protein */ + char junkline[9000]; /* reads opening protein info. */ + char nameprot[9000]; + int nomore; /* in case there's junk after last protein */ + short windows; + double winheight; + char option,chartchar,weightchar; + double ad_weight; + int hept_weight; + calcstore tempcalc; + heptadstore temphept; + char fr14[10001],fr21[10001],fr28[10001]; + int pr14[10001],pr21[10001],pr28[10001]; + +short mod(short x,short y) +{ + double x1=(double) x,y1=(double) y; + + return (short) floor(fmod(x,y)); +} +void Init_newchart() + /* store the probability values for each of the 20 + amino acids to occur in each of the heptad positions */ +{ +chartvalue[1][1]=2.998; chartvalue[1][2]=0.269; chartvalue[1][3]=0.367; +chartvalue[1][4]=3.852; chartvalue[1][5]=0.510; chartvalue[1][6]=0.514; +chartvalue[1][7]=0.562; +chartvalue[2][1]=2.408; chartvalue[2][2]=0.261; chartvalue[2][3]=0.345; +chartvalue[2][4]=0.931; chartvalue[2][5]=0.402; chartvalue[2][6]=0.440; +chartvalue[2][7]=0.289; +chartvalue[3][1]=1.525; chartvalue[3][2]=0.479; chartvalue[3][3]=0.350; +chartvalue[3][4]=0.887; chartvalue[3][5]=0.286; chartvalue[3][6]=0.350; +chartvalue[3][7]=0.362; +chartvalue[4][1]=2.161; chartvalue[4][2]=0.605; chartvalue[4][3]=0.442; +chartvalue[4][4]=1.441; chartvalue[4][5]=0.607; chartvalue[4][6]=0.457; +chartvalue[4][7]=0.570; +chartvalue[5][1]=0.490; chartvalue[5][2]=0.075; chartvalue[5][3]=0.391; +chartvalue[5][4]=0.639; chartvalue[5][5]=0.125; chartvalue[5][6]=0.081; +chartvalue[5][7]=0.038; +chartvalue[6][1]=1.319; chartvalue[6][2]=0.064; chartvalue[6][3]=0.081; +chartvalue[6][4]=1.526; chartvalue[6][5]=0.204; chartvalue[6][6]=0.118; +chartvalue[6][7]=0.096; +chartvalue[7][1]=0.084; chartvalue[7][2]=0.215; chartvalue[7][3]=0.432; +chartvalue[7][4]=0.111; chartvalue[7][5]=0.153; chartvalue[7][6]=0.367; +chartvalue[7][7]=0.125; +chartvalue[8][1]=1.283; chartvalue[8][2]=1.364; chartvalue[8][3]=1.077; +chartvalue[8][4]=2.219; chartvalue[8][5]=0.490; chartvalue[8][6]=1.265; +chartvalue[8][7]=0.903; +chartvalue[9][1]=1.233; chartvalue[9][2]=2.194; chartvalue[9][3]=1.817; +chartvalue[9][4]=0.611; chartvalue[9][5]=2.095; chartvalue[9][6]=1.686; +chartvalue[9][7]=2.027; +chartvalue[10][1]=1.014; chartvalue[10][2]=1.476; +chartvalue[10][3]=1.771; +chartvalue[10][4]=0.114; chartvalue[10][5]=1.667; +chartvalue[10][6]=2.006; +chartvalue[10][7]=1.844; +chartvalue[11][1]=0.590; chartvalue[11][2]=0.646; +chartvalue[11][3]=0.584; +chartvalue[11][4]=0.842; chartvalue[11][5]=0.307; +chartvalue[11][6]=0.611; +chartvalue[11][7]=0.396; +chartvalue[12][1]=0.281; chartvalue[12][2]=3.351; +chartvalue[12][3]=2.998; +chartvalue[12][4]=0.789; chartvalue[12][5]=4.868; +chartvalue[12][6]=2.735; +chartvalue[12][7]=3.812; +chartvalue[13][1]=0.068; chartvalue[13][2]=2.103; +chartvalue[13][3]=1.646; +chartvalue[13][4]=0.182; chartvalue[13][5]=0.664; +chartvalue[13][6]=1.581; +chartvalue[13][7]=1.401; +chartvalue[14][1]=0.311; chartvalue[14][2]=2.290; +chartvalue[14][3]=2.330; +chartvalue[14][4]=0.811; chartvalue[14][5]=2.596; +chartvalue[14][6]=2.155; +chartvalue[14][7]=2.585; +chartvalue[15][1]=1.231; chartvalue[15][2]=1.683; +chartvalue[15][3]=2.157; +chartvalue[15][4]=0.197; chartvalue[15][5]=1.653; +chartvalue[15][6]=2.430; +chartvalue[15][7]=2.065; +chartvalue[16][1]=0.332; chartvalue[16][2]=0.753; +chartvalue[16][3]=0.930; +chartvalue[16][4]=0.424; chartvalue[16][5]=0.734; +chartvalue[16][6]=0.801; +chartvalue[16][7]=0.518; +chartvalue[17][1]=0.197; chartvalue[17][2]=0.543; +chartvalue[17][3]=0.647; +chartvalue[17][4]=0.680; chartvalue[17][5]=0.905; +chartvalue[17][6]=0.643; +chartvalue[17][7]=0.808; +chartvalue[18][1]=0.918; chartvalue[18][2]=0.002; +chartvalue[18][3]=0.385; +chartvalue[18][4]=0.440; chartvalue[18][5]=0.138; +chartvalue[18][6]=0.432; +chartvalue[18][7]=0.079; +chartvalue[19][1]=0.066; chartvalue[19][2]=0.064; +chartvalue[19][3]=0.065; +chartvalue[19][4]=0.747; chartvalue[19][5]=0.006; +chartvalue[19][6]=0.115; +chartvalue[19][7]=0.014; +chartvalue[20][1]=0.004; chartvalue[20][2]=0.108; +chartvalue[20][3]=0.018; +chartvalue[20][4]=0.006; chartvalue[20][5]=0.010; +chartvalue[20][6]=0.004; +chartvalue[20][7]=0.007; +} +void Init_oldchart() +{ + chartvalue[1][1]=3.167; chartvalue[1][2]=0.297; +chartvalue[1][3]=0.398; + chartvalue[1][4]=3.902; chartvalue[1][5]=0.585; +chartvalue[1][6]=0.501; + chartvalue[1][7]=0.483; + chartvalue[2][1]=2.597; chartvalue[2][2]=0.098; +chartvalue[2][3]=0.345; + chartvalue[2][4]=0.894; chartvalue[2][5]=0.514; +chartvalue[2][6]=0.471; + chartvalue[2][7]=0.431; + chartvalue[3][1]=1.665; chartvalue[3][2]=0.403; +chartvalue[3][3]=0.386; + chartvalue[3][4]=0.949; chartvalue[3][5]=0.211; +chartvalue[3][6]=0.342; + chartvalue[3][7]=0.360; + chartvalue[4][1]=2.240; chartvalue[4][2]=0.37; +chartvalue[4][3]=0.480; + chartvalue[4][4]=1.409; chartvalue[4][5]=0.541; +chartvalue[4][6]=0.772; + chartvalue[4][7]=0.663; + chartvalue[5][1]=0.531; chartvalue[5][2]=0.076; +chartvalue[5][3]=0.403; + chartvalue[5][4]=0.662; chartvalue[5][5]=0.189; +chartvalue[5][6]=0.106; + chartvalue[5][7]=0.013; + chartvalue[6][1]=1.417; chartvalue[6][2]=0.090; +chartvalue[6][3]=0.122; + chartvalue[6][4]=1.659; chartvalue[6][5]=0.19; chartvalue[6][6]=0.13; + chartvalue[6][7]=0.1550; + chartvalue[7][1]=0.045; chartvalue[7][2]=0.275; +chartvalue[7][3]=0.578; + chartvalue[7][4]=0.216; chartvalue[7][5]=0.211; +chartvalue[7][6]=0.426; + chartvalue[7][7]=0.156; + chartvalue[8][1]=1.297; chartvalue[8][2]=1.551; +chartvalue[8][3]=1.084; + chartvalue[8][4]=2.612; chartvalue[8][5]=0.377; +chartvalue[8][6]=1.248; + chartvalue[8][7]=0.877; + chartvalue[9][1]=1.375; chartvalue[9][2]=2.639; +chartvalue[9][3]=1.763; + chartvalue[9][4]=0.191; chartvalue[9][5]=1.815; +chartvalue[9][6]=1.961; + chartvalue[9][7]=2.795; + chartvalue[10][1]=0.659; chartvalue[10][2]=1.163; +chartvalue[10][3]=1.210; + chartvalue[10][4]=0.031; chartvalue[10][5]=1.358; +chartvalue[10][6]=1.937; + chartvalue[10][7]=1.798; + chartvalue[11][1]=0.347; chartvalue[11][2]=0.275; +chartvalue[11][3]=0.679; + chartvalue[11][4]=0.395; chartvalue[11][5]=0.294; +chartvalue[11][6]=0.579; + chartvalue[11][7]=0.213; + chartvalue[12][1]=0.262; chartvalue[12][2]=3.496; +chartvalue[12][3]=3.108; + chartvalue[12][4]=0.998; chartvalue[12][5]=5.685; +chartvalue[12][6]=2.494; + chartvalue[12][7]=3.048; + chartvalue[13][1]=0.03; chartvalue[13][2]=2.352; +chartvalue[13][3]=2.268; + chartvalue[13][4]=0.237; chartvalue[13][5]=0.663; +chartvalue[13][6]=1.62; + chartvalue[13][7]=1.448; + chartvalue[14][1]=0.179; chartvalue[14][2]=2.114; +chartvalue[14][3]=1.778; + chartvalue[14][4]=0.631; chartvalue[14][5]=2.55; +chartvalue[14][6]=1.578; + chartvalue[14][7]=2.526; + chartvalue[15][1]=0.835; chartvalue[15][2]=1.475; +chartvalue[15][3]=1.534; + chartvalue[15][4]=0.039; chartvalue[15][5]=1.722; +chartvalue[15][6]=2.456; + chartvalue[15][7]=2.280; + chartvalue[16][1]=0.382; chartvalue[16][2]=0.583; +chartvalue[16][3]=1.052; + chartvalue[16][4]=0.419; chartvalue[16][5]=0.525; +chartvalue[16][6]=0.916; + chartvalue[16][7]=0.628; + chartvalue[17][1]=0.169; chartvalue[17][2]=0.702; +chartvalue[17][3]=0.955; + chartvalue[17][4]=0.654; chartvalue[17][5]=0.791; +chartvalue[17][6]=0.843; + chartvalue[17][7]=0.647; + chartvalue[18][1]=0.824; chartvalue[18][2]=0.022; +chartvalue[18][3]=0.308; + chartvalue[18][4]=0.152; chartvalue[18][5]=0.180; +chartvalue[18][6]=0.156; + chartvalue[18][7]=0.044; + chartvalue[19][1]=0.24; chartvalue[19][2]=0; +chartvalue[19][3]=0.00; + chartvalue[19][4]=0.456; chartvalue[19][5]=0.019; +chartvalue[19][6]=0.00; + chartvalue[19][7]=0.00; + chartvalue[20][1]=0.00; chartvalue[20][2]=0.008; chartvalue[20][3]=0; + chartvalue[20][4]=0.013; chartvalue[20][5]=0.0; chartvalue[20][6]=0; + chartvalue[20][7]=0; +} + + +void Get_info() +{ + char junk; + + printf("COILS version 2.1\n"); + printf("ENTER INPUT FILE: "); + fflush(stdout); + scanf("%s",inputfile); + printf("-->%s\n",inputfile); + protein=fopen(inputfile,"r"); /* modify for reading */ + if (protein==NULL) { + perror("problem"); + printf("'%s' can not be found. Try again after verifying the file name.\n",inputfile); + exit(0); + } /* endif */ + + printf("ENTER OUTPUT FILE: "); + scanf("%s",outputfile); + pickup=fopen(outputfile,"w"); + if (pickup==NULL) { + printf("The system could not open the output file\n"); + printf(". Check the free space on disk\n"); + exit(0); + } /* endif */ + printf("Two scoring matrices are available:\n"); + printf(" 1 - MTK\n"); + printf(" 2 - MTIDK\n"); + printf("Which matix? (1|2) ? "); + chartchar='\0'; + while ((chartchar!='1') && (chartchar!='2') && (chartchar!=(char) 13)) + scanf("%c",&chartchar); + printf("Do you want a weight of 2.5 for positions a & d? (Y|N) ? "); + weightchar='\0'; + while ((weightchar!='n') && (weightchar!='y') && (weightchar!='Y') && +(weightchar!='N') && (weightchar!=(char) 13)) + scanf("%c",&weightchar); + + fprintf(pickup,"COILS version 2.1\n"); + if (chartchar=='2') + { + fprintf(pickup,"using MTIDK matrix.\n"); + Init_newchart(); + } else { + fprintf(pickup,"using MTK matrix.\n"); + Init_oldchart(); + } + if ((weightchar=='y') || (weightchar=='Y')) + { + fprintf(pickup,"weights: a,d=2.5 and b,c,e,f,g=1.0\n"); + hept_weight=10; + ad_weight=2.5; + } else { + fprintf(pickup,"no weights\n"); + hept_weight=7; + ad_weight=1.0; + } + fprintf(pickup,"Input file is %s\n",inputfile); +} +void Select_option() +{ + printf("OUTPUT OPTIONS:\n"); + printf(" p - probabilities in columns\n"); + printf(" a - probabilities in rows, abbreviated to the first digit\n"); + printf(" b - scores (size of the scanning window defined by the user)\n"); + printf(" c - only probabilities above a user-defined cutoff\n"); + printf("ENTER OPTION: "); + while ((option!='a') && (option!='b') && (option!='c') && (option!='A') +&& (option!='B') && (option!='C') && (option!='p') && (option!='P')) { + scanf("%c",&option); + } /* endwhile */ + printf("\n"); + if ((option=='b') || (option=='B')) + { + printf("ENTER WINDOW SIZE: "); + scanf("%d",&window); + } /* end */ + else window=14; +} + + +int checkforend() +{ + int junklen; + char *last4; + int checkforend=0; + + junkline[strlen(junkline)-1]='\0'; + junklen=strlen(junkline); + if (junklen > 0) + { + if (junkline[0] == '>') + checkforend=1; + strcpy(nameprot,junkline); + } + if (junklen > 3) + { + last4=(char *) &(junkline[junklen-4]); + if (strcmp(last4," ..")==0) + { + checkforend=1; + strcpy(nameprot,junkline); + } + } + return checkforend; +} +void Skip_opening_info() + /* Skip opening lines of protein to get to amino acid sequence */ +{ + int endingfound; + + endingfound=checkforend(); + while (!endingfound) + { + if (!feof(protein)) + { + fgets(junkline,9999,protein); + endingfound=checkforend(); + } else { + strcpy(nameprot," "); + fclose(protein); + protein=fopen(inputfile,"r"); + endingfound=1; + } /* endif */ + } /* endwhile */ +} +void Store_residues() + /* stores only the amino acids of the sequence, skipping numbers, +blanks, + and carriage returns and ending with '/' || '*' */ +{ + char tempstore; + int validaa; + + res_total=0; + tempstore=fgetc(protein); + while ((tempstore != '/') && (tempstore != '*') && (!feof(protein))) + { + switch (tempstore & 95) { + case 'L': + case 'I': + case 'V': + case 'M': + case 'F': + case 'Y': + case 'G': + case 'A': + case 'K': + case 'P': + case 'R': + case 'H': + case 'E': + case 'D': + case 'Q': + case 'N': + case 'S': + case 'T': + case 'C': + case 'W': + validaa=1; + break; + default: + validaa=0; + break; + } /* endswitch */ + + if (validaa) + { + res_total=res_total+1; + residue[res_total]=tempstore; + } /* endif */ + tempstore=fgetc(protein); + } /* endwhile */ + if (tempstore == '/') fgets(junkline,9999,protein); /* read other '/' +at end */ +} + + +int Getx(char res) +{ + int X; + + switch (res & (char) 95) { + case 'L': + X=1; break; + case 'I': + X=2; break; + case 'V': + X=3; break; + case 'M': + X=4; break; + case 'F': + X=5; break; + case 'Y': + X=6; break; + case 'G': + X=7; break; + case 'A': + X=8; break; + case 'K': + X=9; break; + case 'R': + X=10; break; + case 'H': + X=11; break; + case 'E': + X=12; break; + case 'D': + X=13; break; + case 'Q': + X=14; break; + case 'N': + X=15; break; + case 'S': + X=16; break; + case 'T': + X=17; break; + case 'C': + X=18; break; + case 'W': + X=19; break; + case 'P': + X=20; break; + default: + X=-1; break; + } /* endswitch */ + return X; +} +void Calculate(int startwindow,int endindex) + /* calculates best scores for each window frame */ +{ + int X,x,y,extras,heptad_pos,window_pos,res_pos; + double root_inverse,scores,misc; + int hept,index,window; + double weight; + int root; + + printf("Calculating...\n"); + index=1; + window=startwindow; + while (index<=endindex) + { + printf("."); + fflush(stdout); + res_pos=0; + root=(window / 7) * hept_weight; + do { + res_pos=res_pos+1; + tempcalc[index][res_pos]=0; + for (heptad_pos=0; heptad_pos<=6; heptad_pos++) /* go through each +residue in each heptad pos */ + { + scores=1.0; + hept=1; + for (window_pos=0;window_pos<=window-1;window_pos++) /* get +values +at all 21 positions */ + { + switch (residue[window_pos + res_pos] & 95){ + case 'L': + x=1; break; + case 'I': + x=2; break; + case 'V': + x=3; break; + case 'M': + x=4; break; + case 'F': + x=5; break; + case 'Y': + x=6; break; + case 'G': + x=7; break; + case 'A': + x=8; break; + case 'K': + x=9; break; + case 'R': + x=10; break; + case 'H': + x=11; break; + case 'E': + x=12; break; + case 'D': + x=13; break; + case 'Q': + x=14; break; + case 'N': + x=15; break; + case 'S': + x=16; break; + case 'T': + x=17; break; + case 'C': + x=18; break; + case 'W': + x=19; break; + case 'P': + x=20; break; + default: + x=-1; break; + } /* endswitch */ + y=(int) fmod((double)(window_pos + res_pos + heptad_pos),7.0); + if (y==0) y=7; + if (window_pos==0) hept=y; + if (y==0) y=7; + if ((y==1) || (y==4)) weight=ad_weight; + else weight=1.0; + root_inverse=1.0/(double) root; + misc=pow(chartvalue[x][y],weight); + scores=scores*(pow(misc,root_inverse)); + } /* end of window_pos loop */ + if (scores>tempcalc[index][res_pos]) + { + tempcalc[index][res_pos]=scores; + temphept[index][res_pos]=(int) fmod((double) (hept-1),7.0); + } + } /* end of heptad_pos loop*/ + } while (res_pos+window != res_total+1); + for (extras=1; extras<=window-1;extras++) + { + tempcalc[index][res_pos+extras]=tempcalc[index][res_pos]; + temphept[index][res_pos+extras]=(int) fmod((double) +(temphept[index][res_pos]+extras),7.0); + } + window=window+7; + index=index+1; + } /* for window sizes 14, 21 & 28 */ + /*maximize loop*/ + index=1; + window=startwindow; + while (index<=endindex) + { + res_pos=0; + do { + res_pos=res_pos+1; + calcnumb[index][res_pos]=tempcalc[index][res_pos]; + heptnum[index][res_pos]=temphept[index][res_pos]; + window_pos=0; + do { + window_pos=window_pos+1; + if (res_pos-window_pos<1) window_pos=window-1; + else + if (tempcalc[index][res_pos-window_pos]>calcnumb[index][res_pos]) + { + calcnumb[index][res_pos]=tempcalc[index][res_pos-window_pos]; + heptnum[index][res_pos]=(int) +fmod((temphept[index][res_pos-window_pos]+window_pos),7.0); + } /* endif */ + } while (window_pos!=window-1); /* enddo */ + } while (res_pos!=res_total); /* enddo */ + index=index+1; + window=window+7; + } + printf("\n"); +} +double Calcprob(double x,double meancc,double stddevcc,double +meangl,double stddevgl,double ratio_gl_cc) +{ + double prob1,prob2,prob3,prob4; + + prob1=(0.5) * pow(((x-meancc) / stddevcc),2.0); + prob2=(0.5) * pow(((x-meangl) / stddevgl),2.0); + prob3=stddevgl * exp(-prob1); + prob4=ratio_gl_cc * stddevcc * exp(-prob2); + return (prob3) / (prob3+prob4); +} +char frame(int heptnum) +{ + switch (heptnum) { + case 0: + return 'a'; break; + case 1: + return 'b'; break; + case 2: + return 'c'; break; + case 3: + return 'd'; break; + case 4: + return 'e'; break; + case 5: + return 'f'; break; + case 6: + return 'g'; break; + } /* endswitch */ + return 'x'; +} +int i_trunc(double n) +{ + return (int) floor(n); +} +void Column_probs(double peakmin) +{ + int res_pos; + char fr14,fr21,fr28; + double prob14,prob21,prob28,old14,old21,old28,xx=1,lastxx=1; + int prevres,color=8,c14=9,c21=15,c28=12; + char t1[]="14",t2[]="21",t3[]="28"; + + fprintf(pickup,"%s\n",nameprot); + fprintf(pickup," Residue Window=14 Window=21 Window=28\n"); + fprintf(pickup," Score Probability Score Probability Score Probability\n"); + prevres=1; + for (res_pos=1;res_pos<=res_total;res_pos++) + { + fr14=frame(heptnum[1][res_pos]); + fr21=frame(heptnum[2][res_pos]); + fr28=frame(heptnum[3][res_pos]); + if (chartchar=='2') + { + if ((weightchar=='y') || (weightchar=='Y')) + { + prob28=Calcprob(calcnumb[3][res_pos],1.74,0.20,0.86,0.18,30); + prob21=Calcprob(calcnumb[2][res_pos],1.79,0.24,0.92,0.22,25); + prob14=Calcprob(calcnumb[1][res_pos],1.89,0.30,1.04,0.27,20); + } else { + prob28=Calcprob(calcnumb[3][res_pos],1.69,0.18,0.80,0.18,30); + prob21=Calcprob(calcnumb[2][res_pos],1.74,0.23,0.86,0.21,25); + prob14=Calcprob(calcnumb[1][res_pos],1.82,0.28,0.95,0.26,20); + } /* end */ + } /* end */ + else + { + if ((weightchar=='y') || (weightchar=='Y')) + { + if (calcnumb[3][res_pos] > 0.0) + prob28=Calcprob(calcnumb[3][res_pos],1.70,0.24,0.79,0.23,30); + else { + prob28=0.0; + fr28='x'; + } /* endif */ + if (calcnumb[2][res_pos] > 0.0) + prob21=Calcprob(calcnumb[2][res_pos],1.76,0.28,0.86,0.26,25); + else { prob21=0.0; fr21='x'; } + if (calcnumb[1][res_pos] > 0.0) + prob14=Calcprob(calcnumb[1][res_pos],1.88,0.34,1.00,0.33,20); + else { prob14=0.0; fr14='x'; } + } /* end */ + else + { + if (calcnumb[3][res_pos] > 0.0) + +prob28=Calcprob(calcnumb[3][res_pos],1.628,0.243,0.770,0.202,30); + else { prob28=0.0; fr28='x'; } + if (calcnumb[2][res_pos] > 0.0) + +prob21=Calcprob(calcnumb[2][res_pos],1.683,0.285,0.828,0.236,25); + else { prob21=0.0; fr21='x'; } + if (calcnumb[1][res_pos] > 0.0) + +prob14=Calcprob(calcnumb[1][res_pos],1.782,0.328,0.936,0.289,20); + else { prob14=0.0; fr14='x'; } + } /* end */ + } + if ((prob14>=peakmin) || (prob21>=peakmin) || (prob28>=peakmin)) + { + if (res_pos-1!=prevres) fprintf(pickup,"...\n"); + prevres=res_pos; + fprintf(pickup,"%5d %c",res_pos,residue[res_pos]); + fprintf(pickup," %c %5.3lf %5.3lf",fr14,calcnumb[1][res_pos],prob14); + fprintf(pickup," %c %5.3lf %5.3lf",fr21,calcnumb[2][res_pos],prob21); + fprintf(pickup," %c %5.3lf %5.3lf",fr28,calcnumb[3][res_pos],prob28); + fprintf(pickup,"\n"); + } + } +} +void Row_probs() +{ + int res_pos,maxline,startpos; + + fprintf(pickup,"%s\n",nameprot); + for (res_pos=1;res_pos<=res_total;res_pos++) + { + fr14[res_pos]=frame(heptnum[1][res_pos]); + fr21[res_pos]=frame(heptnum[2][res_pos]); + fr28[res_pos]=frame(heptnum[3][res_pos]); + if (chartchar=='2') + { + if ((weightchar=='y') || (weightchar=='Y')) + { + +pr14[res_pos]=i_trunc(Calcprob(calcnumb[1][res_pos],1.89,0.30,1.04,0.27,20)*10.0); + +pr21[res_pos]=i_trunc(Calcprob(calcnumb[2][res_pos],1.79,0.24,0.92,0.22,25)*10.0); + +pr28[res_pos]=i_trunc(Calcprob(calcnumb[3][res_pos],1.74,0.20,0.86,0.18,30)*10.0); + } /* end */ + else + { + +pr14[res_pos]=i_trunc(Calcprob(calcnumb[1][res_pos],1.82,0.28,0.95,0.26,20)*10.0); + +pr21[res_pos]=i_trunc(Calcprob(calcnumb[2][res_pos],1.74,0.23,0.86,0.21,25)*10.0); + +pr28[res_pos]=i_trunc(Calcprob(calcnumb[3][res_pos],1.69,0.18,0.80,0.18,30)*10.0); + } /* end */ + } /* end */ + else + { + if ((weightchar=='y') || (weightchar=='Y')) + { + if (calcnumb[3][res_pos] > 0) + +pr28[res_pos]=i_trunc(Calcprob(calcnumb[3][res_pos],1.70,0.24,0.79,0.23,30)*10.0); + else { pr28[res_pos]=0; fr28[res_pos]='x'; } + if (calcnumb[2][res_pos] > 0) + +pr21[res_pos]=i_trunc(Calcprob(calcnumb[2][res_pos],1.76,0.28,0.86,0.26,25)*10.0); + else { pr21[res_pos]=0; fr21[res_pos]='x'; } + if (calcnumb[1][res_pos] > 0) + +pr14[res_pos]=i_trunc(Calcprob(calcnumb[1][res_pos],1.88,0.34,1.00,0.33,20)*10.0); + else { pr14[res_pos]=0; fr14[res_pos]='x'; } + } /* end */ + else + { + if (calcnumb[3][res_pos] > 0) + +pr28[res_pos]=i_trunc(Calcprob(calcnumb[3][res_pos],1.628,0.243,0.770,0.202,30)*10.0); + else { pr28[res_pos]=0; fr28[res_pos]='x'; } + if (calcnumb[2][res_pos] > 0) + +pr21[res_pos]=i_trunc(Calcprob(calcnumb[2][res_pos],1.683,0.285,0.828,0.236,25)*10.0); + else { pr21[res_pos]=0; fr21[res_pos]='x'; } + if (calcnumb[1][res_pos] > 0) + +pr14[res_pos]=i_trunc(Calcprob(calcnumb[1][res_pos],1.782,0.328,0.936,0.289,20)*10.0); + else { pr14[res_pos]=0; fr14[res_pos]='x'; } + } /* end */ + } + if (pr14[res_pos]>9) pr14[res_pos]=9; + if (pr21[res_pos]>9) pr21[res_pos]=9; + if (pr28[res_pos]>9) pr28[res_pos]=9; + } + maxline=60; + startpos=1; + while (startpos+maxline-1 <= res_total) + { + fprintf(pickup,"%d\n",startpos); + fprintf(pickup," . | . | . | . | . | . |\n"); + for (res_pos=startpos;res_pos<=startpos+maxline-1;res_pos++) + fprintf(pickup,"%c",residue[res_pos]); + fprintf(pickup,"\n\n"); + for (res_pos=startpos;res_pos<=startpos+maxline-1;res_pos++) + fprintf(pickup,"%d",pr14[res_pos]); + fprintf(pickup,"\n"); + for (res_pos=startpos;res_pos<=startpos+maxline-1;res_pos++) + fprintf(pickup,"%d",pr21[res_pos]); + fprintf(pickup,"\n"); + for (res_pos=startpos;res_pos<=startpos+maxline-1;res_pos++) + fprintf(pickup,"%d",pr28[res_pos]); + fprintf(pickup,"\n"); + for (res_pos=startpos;res_pos<=startpos+maxline-1;res_pos++) + fprintf(pickup,"%c",fr14[res_pos]); + fprintf(pickup,"\n"); + for (res_pos=startpos;res_pos<=startpos+maxline-1;res_pos++) + fprintf(pickup,"%c",fr21[res_pos]); + fprintf(pickup,"\n"); + for (res_pos=startpos;res_pos<=startpos+maxline-1;res_pos++) + fprintf(pickup,"%c",fr28[res_pos]); + fprintf(pickup,"\n"); + fprintf(pickup,"\n"); + startpos=startpos+60; + } + /* finish up! */ + if (startpos<=res_total) + { + fprintf(pickup,"%d\n",startpos); + fprintf(pickup," . | . | . | . | . | . |\n"); + for (res_pos=startpos;res_pos<=res_total;res_pos++) + fprintf(pickup,"%c",residue[res_pos]); + fprintf(pickup,"\n"); + fprintf(pickup,"\n"); + for (res_pos=startpos;res_pos<=res_total;res_pos++) + fprintf(pickup,"%d",pr14[res_pos]); + fprintf(pickup,"\n"); + for (res_pos=startpos;res_pos<=res_total;res_pos++) + fprintf(pickup,"%d",pr21[res_pos]); + fprintf(pickup,"\n"); + for (res_pos=startpos;res_pos<=res_total;res_pos++) + fprintf(pickup,"%d",pr28[res_pos]); + fprintf(pickup,"\n"); + for (res_pos=startpos;res_pos<=res_total;res_pos++) + fprintf(pickup,"%c",fr14[res_pos]); + fprintf(pickup,"\n"); + for (res_pos=startpos;res_pos<=res_total;res_pos++) + fprintf(pickup,"%c",fr21[res_pos]); + fprintf(pickup,"\n"); + for (res_pos=startpos;res_pos<=res_total;res_pos++) + fprintf(pickup,"%c",fr28[res_pos]); + fprintf(pickup,"\n"); + fprintf(pickup,"\n"); + } +} + + +void Scores_only() +{ + int res_pos; + char fr; + + fprintf(pickup,"%s\n",nameprot); + fprintf(pickup," Residue Frame Score\n"); + for (res_pos=1;res_pos<=res_total;res_pos++) + { + if (calcnumb[1][res_pos] > 0.0) + { + fr=frame(heptnum[1][res_pos]); + fprintf(pickup," %6d %c %c %2.6lf\n",res_pos,residue[res_pos],fr, + calcnumb[1][res_pos]); + } else + fprintf(pickup," %6d %c x %2.6lf\n",res_pos,residue[res_pos], + calcnumb[1][res_pos]); + } +} + +void Calc_print() +{ + double peakmin=0.0; + int num_wind; + + if (res_total >= window) + { + num_wind=3; + if ((option=='a') || (option=='A')) + { + Calculate(window,num_wind); + Row_probs(); + } else + if ((option=='b') || (option=='B')) + { + num_wind=1; + Calculate(window,num_wind); + Scores_only(); + } /* end */ + else + { + if ((option=='c') || (option=='C')) + { + printf("ENTER MINIMUM PROBABILITY (as .##): "); + scanf("%lf",&peakmin); + } + Calculate(window,num_wind); + Column_probs(peakmin); + } + } else + fprintf(pickup,"Protein too short. Length=%d\n",res_total); +} + +main(int argc, char *argv[], char *envp[]) +{ /* Main Program */ + Get_info(); + Select_option(); + fgets(junkline,9999,protein); + + do { + Skip_opening_info(); + if (!nomore) + { + Store_residues(); + Calc_print(); + if (!feof(protein)) fgets(junkline,9999,protein); + } + } while (!feof(protein)); /* enddo */ + fclose(protein); + fclose(pickup); +} +