- 论坛徽章:
- 0
|
唉,弄不出来。我还是那C++自己处理吧,由原始序列直接处理,分享下代码:
#include "stdio.h"
#include"stdlib.h"
#include"math.h"
#include"string.h"
#include"ctype.h"
#include"conio.h"
void main()
{
char a[300000],b[16][3]={"AA","AC","AG","AT","CA","CC","CG","CT","GA","GC","GG","GT","TA","TC","TG","TT"},c[3]={'\0','\0','\0'};
FILE *fp1,*fp2;
long int i,j, k=0,m=0;
double d[16]={0.0},e[4]={0.0},n=2.0,g=0.0,D2=0,f[16]={0.0};
fp1=fopen("F:\\计算D2的序列.txt","r");
fp2=fopen("F:\\D2值.txt","w");
do
{
fgets(a,300000,fp1);
if(a[0]=='@')
break;
if((a[0]!='>')&&(a[0]!='>'))
{ for(i=0;i<16;i++)
d[i]=0.0;
for(i=0;i<4;i++)
e[i]=0.0;
g=0.0;
D2=0;
m=0;
for(i=0;i<300000;i++)
{
if(a[i]=='\n')
{
//fprintf(fp2,"%s",a);
m=i;
break;
}
if(a[i]=='A')
e[0]++;
if(a[i]=='C')
e[1]++;
if(a[i]=='G')
e[2]++;
if(a[i]=='T')
e[3]++;
c[0]=a[i];
c[1]=a[i+1];
//fprintf(fp2,"%s\n",c);
for(j=0;j<16;j++)
{
if(strcmp(b[j],c)==0)
{
d[j]++;
break;
}
}
c[0]='\0';
c[1]='\0';
}
fprintf(fp2,"%d\n",m);
for(i=0;i<4;i++)
{
e[i]=e[i]/m;
fprintf(fp2,"%f\t",e[i]);
}
fprintf(fp2,"\n");
c[0]=a[m-1];
c[1]=a[0];
// fprintf(fp2,"%s\n",c);
for(j=0;j<16;j++)
{
if(strcmp(b[j],c)==0)
{
d[j]++;
// fprintf(fp2,"%d\n",j);
break;
}
}
c[0]='\0';
c[1]='\0';
for(i=0;i<16;i++)
{ d[i]=d[i]/m;
fprintf(fp2,"%f\t",d[i]);
}
fprintf(fp2,"\n");
D2=0;
fprintf(fp2,"%f\n",D2);
k=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
g=((d[k]-e[i]*e[j])*(d[k]-e[i]*e[j]))/(e[i]*e[j]);
fprintf(fp2,"%f\t",g);
D2+=g;
fprintf(fp2,"%f\n",D2);
k++;
}
D2=D2/log(n);
fprintf(fp2,"%f\n",D2);
k=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
f[k]=(d[k]/(e[i]*e[j]))-1;
fprintf(fp2,"%f\n",f[k]);
k++;
}
}
}
while(a[0]!='@');
//for(i=0;i<10;i++)
//fprintf(fp2,"%ld ",c[i]);
fclose(fp1);
fclose(fp2);
}
|
|