| #include "stride.h" |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| void CorrectAsn(char *Asn, int Length, char SecStrType, char EditChar, int MaxLength) |
| { |
|
|
| int NStr = 0, Res, Flag = 0, Bound[MAX_ASSIGN][2], i; |
|
|
| for( Res=0; Res<Length; Res++ ) { |
| if( Asn[Res] == SecStrType && Flag == 0 ) { |
| Flag = 1; |
| Bound[NStr][0] = Res; |
| } |
| else |
| if( Asn[Res] != SecStrType && Flag == 1 ) { |
| Flag = 0; |
| Bound[NStr++][1] = Res-1; |
| } |
| } |
|
|
| for( i=0; i<NStr; i++ ) |
| if( Bound[i][1]-Bound[i][0]+1 <= MaxLength ) |
| for( Res=Bound[i][0]; Res<=Bound[i][1]; Res++ ) |
| Asn[Res] = EditChar; |
| } |
|
|
| void CorrectAsnDouble(char *Asn1, char *Asn2, char *KnownAsn, int Length, |
| char SecStrType, char EditChar) |
| { |
|
|
| register int Res; |
|
|
| for( Res=0; Res<Length; Res++ ) |
| if( (Asn1[Res] == SecStrType || Asn2[Res] == SecStrType) && KnownAsn[Res] != SecStrType && |
| ( (Res == 0 && Asn1[Res+1] != SecStrType && Asn2[Res+1] != SecStrType) || |
| (Res == Length-1 && Asn1[Res-1] != SecStrType && Asn2[Res-1] != SecStrType) || |
| (Res > 0 && Res < Length-1 && |
| Asn1[Res-1] != SecStrType && Asn2[Res-1] != SecStrType && |
| Asn1[Res+1] != SecStrType && Asn2[Res+1] != SecStrType) ) ) |
| Asn1[Res] = Asn2[Res] = EditChar; |
| |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| int Difference(char *TestAsn, char *KnownAsn, int Length, char SecStrType, QUALITY *Qual) |
| { |
| register int Res; |
|
|
| Qual->TP = Qual->TN = Qual->FP = Qual->FN = 0; |
|
|
| for( Res=0; Res<Length; Res++ ) { |
| if( KnownAsn[Res] != 'X' ) { |
|
|
| if( KnownAsn[Res] == SecStrType && TestAsn[Res] == SecStrType ) Qual->TP++; |
| else |
| if( KnownAsn[Res] != SecStrType && TestAsn[Res] != SecStrType ) Qual->TN++; |
| else |
| if( KnownAsn[Res] != SecStrType && TestAsn[Res] == SecStrType ) Qual->FP++; |
| else |
| if( KnownAsn[Res] == SecStrType && TestAsn[Res] != SecStrType ) Qual->FN++; |
| } |
| } |
|
|
| if( Qual->TP == 0 && Qual->TN == 0 && Qual->FP == 0 && Qual->FN == 0 ) { |
| Qual->Perc = 0.0; |
| return(FAILURE); |
| } |
|
|
| Qual->Perc = |
| ((float)Qual->TP+(float)Qual->TN)/ |
| ((float)Qual->TP+(float)Qual->TN+(float)Qual->FP+(float)Qual->FN); |
|
|
| return(SUCCESS); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| float PercentCorrect(char *TestAsn, char *KnownAsn, int Length) |
| { |
| int Res, Count=0;; |
|
|
| for( Res=0; Res<Length; Res++ ) |
| if( KnownAsn[Res] == TestAsn[Res] ) |
| Count++; |
|
|
| return( ((float)Count/(float)Length) ); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| int AssessCorr(QUALITY *Qual) |
| { |
|
|
| float TP, TN, FP, FN; |
|
|
| if( (Qual->TP == 0 && Qual->FN == 0) || (Qual->TP == 0 && Qual->FP == 0) ) return(FAILURE); |
| else { |
| TP = (float)Qual->TP; |
| TN = (float)Qual->TN; |
| FP = (float)Qual->FP; |
| FN =(float)Qual->FN; |
|
|
| Qual->Corr = (TP*TN - FN*FP)/sqrt((TN+FN)*(TN+FP)*(TP+FN)*(TP+FP)); |
|
|
| return(SUCCESS); |
| } |
| } |
|
|
| int AssessPerc(QUALITY *Qual) |
| { |
|
|
| float TP, TN, FP, FN; |
|
|
| TP = (float)Qual->TP; |
| TN = (float)Qual->TN; |
| FP = (float)Qual->FP; |
| FN =(float)Qual->FN; |
|
|
| Qual->Perc = (TP+TN)/(TP+TN+FP+FN); |
|
|
| return(SUCCESS); |
| } |
|
|
| void ExcludeObvious(char *Asn1, char *Asn2, char *KnownAsn, int Length) |
| { |
| register int i; |
|
|
| for( i=0; i<Length; i++ ) |
| if( Asn1[i] == Asn2[i] ) { |
| KnownAsn[i] = 'X'; |
| Asn1[i] = 'X'; |
| Asn2[i] = 'X'; |
| } |
| } |
|
|
|
|
|
|