#include #include #include #include #include #include #include using namespace std; //subroutine for converting sequence to base 4 and the output to base 10 representation //returns base 4 value converted to base 10 int strval(string str){ int f=0; int sum=0; string seq (str); for (int i=0; i=0;kk--){ power=power/4; for(int j=0;j<4;j++){ if(number-(j+1)*power<0){ array4[kk]=j; number=number-j*power; break; } } } int zz=0; int tag=0; for(int i=0;i<=n;i++){ if(array4[i]!=0){ tag=i; zz++; } } if(zz==1){ return tag; } if(zz!=1){ return -1; } } //This subroutine returns the base 4 value of the genomic region corresponding to the third fragment of an input sequence (8 nts for k=13) int baseconverter2(int number, int end){ int power=1; int n; for(int i=0;;i++){ if(number-power<0){ n=i-1; break; } power=power*4; } int array4[n]; for(int kk=n;kk>=0;kk--){ power=power/4; for(int j=0;j<4;j++){ if(number-(j+1)*power<0){ array4[kk]=j; number=number-j*power; break; } } } int revisedsum=0; int revisedpower=1; for(int i=0;i=0;kk--){ power=power/4; for(int j=0;j<4;j++){ if(number-(j+1)*power<0){ array4[kk]=j; number=number-j*power; break; } } } for(int i=0;i<=n;i++){ if(array4[i]==0){ base="g"; } if(array4[i]==1){ base="a"; } if(array4[i]==2){ base="t"; } if(array4[i]==3){ base="c"; } wtseq.append(base); } int check=13-wtseq.length(); if (check!=0){ for (int i=0;i>gseq; gseq1.append(gseq); FILE *fp; fp=fopen(gseq1.c_str(),"r"); if(fp!=NULL){ r=1; } } string seqread; string seqread1; int rr=0; while(rr==0){ seqread1="Desktop/galign/Sequence_reads/"; cout<<"Sequence reads file: "; cin>>seqread; seqread1.append(seqread); FILE *fpp; fpp=fopen(seqread1.c_str(),"r"); if(fpp!=NULL){ rr=1; } } string yourname; string yourname1="Desktop/galign/Alignment_results/"; cout<<"Your first name: "; cin>>yourname; yourname1.append(yourname); yourname1.append("_galign.txt"); int k=13; int arraysize=1; for (int i=1; i<=k;i++){ arraysize=4*arraysize; } int *array; array=new int[arraysize]; for (int i=0;i=k){ for (int i=0; i<=test.length()-k; i++){ bit=test.substr(i,k); t=strval(bit); genomearray[j]=t; array[t]=array[t]+1; // cout<=k){ for (int i=0; i<=testt.length()-k; i++){ bit=testt.substr(i,k); t=strval(bit); *(pArray[t]+array3[t])=j+1; array3[t]=array3[t]+1; j++; } testt=testt.substr(testt.length()-k+1,k-1); } } handle2.close(); delete[] array3; //deleting array3 //Now input test read to see if can find it cout<<"Performing alignments..."<15){ continue; } for (int j=1;j<=dif;j++){ ind1=*(pArray[nt]+j-1); if (ind1>length-4*k){ break; } difference=strval(input.substr(2*k,esize))-baseconverter2(genomearray[ind1+2*k-1],esize); if(difference<0){ difference=-difference; } if(genomearray[ind1+k-1]==strval(input.substr(k,k))){ if (difference==0){ for(int pp=ind1;pp<=ind1+input.length()-1;pp++){ wtarray[pp]=wtarray[pp]+1; } positive=1; break; }else{ bcreturn=baseconverter(difference); if (bcreturn>=0){ mutationsite=ind1+2*k+bcreturn; // cout<=0){ mutationsite=ind1+k+bcreturn; // cout<=0){ mutationsite=ind2-k+bcreturn; // cout<=0;i--){ if (input.substr(i,1)=="g"){ reverse=reverse.append("c"); continue; } if(input.substr(i,1)=="a"){ reverse=reverse.append("t"); continue; } if(input.substr(i,1)=="t"){ reverse=reverse.append("a"); continue; } if(input.substr(i,1)=="c"){ reverse=reverse.append("g"); continue; } reverse=reverse.append("N"); } frag=reverse.substr(0,k); nt=strval(frag); dif=pArray[nt+1]-pArray[nt]; if (dif>15){ continue; } for (int j=1;j<=dif;j++){ ind1=*(pArray[nt]+j-1); if (ind1>length-4*k){ break; } difference=strval(reverse.substr(2*k,esize))-baseconverter2(genomearray[ind1+2*k-1],esize); if(difference<0){ difference=-difference; } if(genomearray[ind1+k-1]==strval(reverse.substr(k,k))){ if (difference==0){ // cout<=0){ mutationsite=ind1+2*k-1+bcreturn; // cout<=0){ mutationsite=ind1+k+bcreturn; // cout<=0){ mutationsite=ind2-k+bcreturn; // cout<=16){ file<=16){ // file5<