From 0654d8a28a16cd027f8fa95e7c60357f6b10e3cd Mon Sep 17 00:00:00 2001 From: andrewjpage Date: Tue, 24 Jan 2012 10:23:04 +0000 Subject: [PATCH 1/2] readd test output files --- .gitignore | 2 - ...ment_file_one_line_per_sequence.aln.phylip | 110 ++++++++++++++++++ ...ignment_file_one_line_per_sequence.aln.vcf | 8 ++ 3 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 tests/data/alignment_file_one_line_per_sequence.aln.phylip create mode 100644 tests/data/alignment_file_one_line_per_sequence.aln.vcf diff --git a/.gitignore b/.gitignore index aef3fc7..d63d395 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,2 @@ *.o gubbins -*.phylip -*.vcf diff --git a/tests/data/alignment_file_one_line_per_sequence.aln.phylip b/tests/data/alignment_file_one_line_per_sequence.aln.phylip new file mode 100644 index 0000000..1171765 --- /dev/null +++ b/tests/data/alignment_file_one_line_per_sequence.aln.phylip @@ -0,0 +1,110 @@ +109 5 +2956_6_1 AACGC +2956_6_2 AACGC +2956_6_3 AACGC +2956_6_4 AACGC +2956_6_5 AACGC +2956_6_6 AACGC +3002_8_1 GACGC +3002_8_2 GACGC +3002_8_3 AACGC +3002_8_4 AACGC +3002_8_5 -ACGC +3002_8_6 GACGC +3002_8_7 AACGC +4056_2_10 GACGC +4056_2_11 AACGC +4056_2_1 AACGC +4056_2_12 AACGC +4056_2_2 AACGC +4056_2_3 -ACGC +4056_2_4 GACGT +4056_2_5 AACGC +4056_2_6 AACGC +4056_2_7 AACGC +4056_2_9 AACGC +4056_6_10 AACGC +4056_6_11 AACGC +4056_6_12 AACGC +4056_6_2 AACGC +4056_6_3 AACGC +4056_6_4 AACGC +4056_6_5 AACGC +4056_6_6 AACGC +4056_6_7 AACGC +4056_6_9 AACGC +4056_7_10 AACGC +4056_7_11 AACGC +4056_7_1 AACGC +4056_7_12 AACGC +4056_7_7 AACGC +4056_7_8 AACGC +4056_7_9 AACGC +4056_8_10 AACGC +4056_8_1 AACGC +4056_8_12 AACGC +4056_8_2 AACGC +4056_8_3 AACGC +4056_8_4 AACGC +4056_8_6 GACGC +4056_8_8 AACGC +4056_8_9 AACGC +4075_3_11 AACGC +4075_3_12 AACGC +4075_3_2 AACGC +4075_3_3 AACGC +4075_3_5 AACGC +4075_3_6 AACGC +4075_3_7 AACGC +4075_3_8 AACGC +4075_3_9 AACGC +4370_2_11 AACGC +4370_2_12 AACGC +4370_2_2 AACGC +4370_2_3 AACGC +4370_2_4 AACGC +4370_2_7 AACGC +4370_2_8 AACGC +4370_2_9 AACGC +4370_3_11 AACGC +4370_3_1 AACGC +4370_3_6 AACGC +4370_3_7 AACGC +4370_3_8 AACGC +5174_5_1 GACGC +5174_5_2 AACGC +5174_5_3 AACGC +5174_5_4 AACGC +5174_5_5 AACGC +5174_5_6 AACGC +5174_5_7 GACGC +5174_5_9 GACGC +5174_6_10 GACGC +5174_6_1 AACGC +5174_6_2 AACGC +5174_6_3 AACGC +5174_6_4 AACGC +5174_6_5 AACGC +5174_6_6 AACGC +5174_6_7 AACGC +5174_6_8 AACGC +5174_6_9 AACGC +5174_7_10 AACGC +5174_7_1 GACGC +5174_7_2 AACGC +5174_7_3 AACGC +5174_7_4 AACGC +5174_7_5 AACGC +5174_7_6 AACGC +5174_7_7 AACGC +5174_7_8 AACGC +5174_7_9 AACGC +5174_8_1 AACGC +5174_8_2 AACGC +5174_8_3 AACGC +5174_8_5 GACGC +5174_8_6 AACGC +5174_8_8 AACGC +5174_8_9 AACGC +Vibrio_parahaemolyticus ----- +Vibrio_vulnificus -GGA- diff --git a/tests/data/alignment_file_one_line_per_sequence.aln.vcf b/tests/data/alignment_file_one_line_per_sequence.aln.vcf new file mode 100644 index 0000000..3422500 --- /dev/null +++ b/tests/data/alignment_file_one_line_per_sequence.aln.vcf @@ -0,0 +1,8 @@ +##fileformat=VCFv4.1 +##INFO= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT 2956_6_1 2956_6_2 2956_6_3 2956_6_4 2956_6_5 2956_6_6 3002_8_1 3002_8_2 3002_8_3 3002_8_4 3002_8_5 3002_8_6 3002_8_7 4056_2_10 4056_2_11 4056_2_1 4056_2_12 4056_2_2 4056_2_3 4056_2_4 4056_2_5 4056_2_6 4056_2_7 4056_2_9 4056_6_10 4056_6_11 4056_6_12 4056_6_2 4056_6_3 4056_6_4 4056_6_5 4056_6_6 4056_6_7 4056_6_9 4056_7_10 4056_7_11 4056_7_1 4056_7_12 4056_7_7 4056_7_8 4056_7_9 4056_8_10 4056_8_1 4056_8_12 4056_8_2 4056_8_3 4056_8_4 4056_8_6 4056_8_8 4056_8_9 4075_3_11 4075_3_12 4075_3_2 4075_3_3 4075_3_5 4075_3_6 4075_3_7 4075_3_8 4075_3_9 4370_2_11 4370_2_12 4370_2_2 4370_2_3 4370_2_4 4370_2_7 4370_2_8 4370_2_9 4370_3_11 4370_3_1 4370_3_6 4370_3_7 4370_3_8 5174_5_1 5174_5_2 5174_5_3 5174_5_4 5174_5_5 5174_5_6 5174_5_7 5174_5_9 5174_6_10 5174_6_1 5174_6_2 5174_6_3 5174_6_4 5174_6_5 5174_6_6 5174_6_7 5174_6_8 5174_6_9 5174_7_10 5174_7_1 5174_7_2 5174_7_3 5174_7_4 5174_7_5 5174_7_6 5174_7_7 5174_7_8 5174_7_9 5174_8_1 5174_8_2 5174_8_3 5174_8_5 5174_8_6 5174_8_8 5174_8_9 Vibrio_parahaemolyticus Vibrio_vulnificus +1 824 . A G . . AB . . . . . . . G G . . . G . G . . . . . G . . . . . . . . . . . . . . . . . . . . . . . . . . . G . . . . . . . . . . . . . . . . . . . . . . . . G . . . . . G G G . . . . . . . . . . G . . . . . . . . . . . G . . . . . +1 1277 . A G . . AB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . G +1 1280 . C G . . AB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . G +1 1298 . G A . . AB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A +1 1434 . C T . . AB . . . . . . . . . . . . . . . . . . . . T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . From 413134df5da76f1af363892257669dbcc7625718 Mon Sep 17 00:00:00 2001 From: andrewjpage Date: Tue, 24 Jan 2012 10:23:46 +0000 Subject: [PATCH 2/2] treat N as gap --- alignment_file.c | 4 ++-- parse_phylip.c | 2 +- snp_sites | Bin 23176 -> 23220 bytes tests/check_snp_sites | Bin 32376 -> 32420 bytes vcf.c | 4 ++-- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/alignment_file.c b/alignment_file.c index bbd8cda..d7a8b44 100644 --- a/alignment_file.c +++ b/alignment_file.c @@ -175,12 +175,12 @@ int detect_snps(char reference_sequence[], char filename[], int length_of_genome for(i = 0; i < length_of_genome; i++) { // If there is an indel in the reference sequence, replace with the first proper base you find - if(reference_sequence[i] == '-' && seq->seq.s[i] != '-' ) + if((reference_sequence[i] == '-' && seq->seq.s[i] != '-' ) || (toupper(reference_sequence[i]) == 'N' && seq->seq.s[i] != 'N' )) { reference_sequence[i] = toupper(seq->seq.s[i]); } - if(reference_sequence[i] != '*' && seq->seq.s[i] != '-' && reference_sequence[i] != toupper(seq->seq.s[i])) + if(reference_sequence[i] != '*' && seq->seq.s[i] != '-' && toupper(seq->seq.s[i]) != 'N' && reference_sequence[i] != toupper(seq->seq.s[i])) { reference_sequence[i] = '*'; number_of_snps++; diff --git a/parse_phylip.c b/parse_phylip.c index 62b01c2..898452c 100644 --- a/parse_phylip.c +++ b/parse_phylip.c @@ -52,7 +52,7 @@ int does_column_contain_snps(int snp_column, char reference_base) return 0; } - if(sequences[i][snp_column] != '-' && sequences[i][snp_column] != reference_base) + if(sequences[i][snp_column] != '-' && toupper(sequences[i][snp_column]) != 'N' && sequences[i][snp_column] != reference_base) { return 1; } diff --git a/snp_sites b/snp_sites index d1099b503950a5280a3dd91347c38a116081d7f1..4e4330fb31e49eab94394e7d3cd22a7ddace08f3 100755 GIT binary patch delta 4092 zcmZ{n4Nz3q6@brsyV?bp?5^$t%P#CLEXxABfPwf23M9OmpmB&o{UOCz`{PejBrb6@ zp=h>D*;&>)IW@MKSbsXx)M#xi{#1=bqY1_t8{09RnxrXa*3J@`$fWDfIK=I_@7;xm zw&>ga&b{ZJd(OG%-ut%um~ix%u;WmQ-U_fXA3%TP*nCkqir+YID`gVrKvRT|9DIP&g^RmOL@!v{WEUO!$X=`qTY(1hKvpucsDb)6}Kn-%9ZC z)Hcyug05*ROkdjM*|lLw7t*?8H~iQ$?TG02W3@S_^S+OqkaXc1GwT~kN=_zyk(7K) zx|)wnzXuXO_$AvTk>zZaI`AtQarGc5@YyXBNMM}oI$6)CyN@DkW&nIpbi zjDN7WOgkp_y;_X_vebwRiqVyxWwMWT>Y0Q2#kerNRs3TSo=JCic4Q{4%AK7>%(s!S zG{RK>`As6hJSCS%^501$2DJh}zZ7LlJ2))oCaRHihT~A>Z=Xhr;Ra_|ibk}e(&QsS z={NM9WkxoU$>7~Z?K2hKDdWnEusS2NL}F7?64J5Q;38ct9Z$yq!WXCB0Y z9WmH^iMJiRH#U1eF1JoM?zSj)BT|$l?Et=R^@-aG@S^qc@^scmjh+HB9BkoIrYvpb zQmQO%=h7(7&3aVaX~DLvmBt;k4txh%k1_NU}|LX11e@#*L7}vf1O)bLN!9)tZc~J zDz3B-x7f2y>$zpVO`db(@9jCF1lt=k)nYOV^WnruzF13yCqEOv|9r8 zs*WqHXeb+@Ms^k$S5Ax#QXT!7h2)xJEMaX+2~_ zk!V`$n82r9MRwRGwTwr>)-fiy@QlMIMDd!#R(H|K3Oge8 z-RUrzCbkaYht85G&pB9@Wwrf;5ov^ZIZ`RX;mh6%u_Zy**iBNGR*-Tbve@Z=O_h2 z4I^KpH+MB%vOT$e@xm=Uo%@XN5vJu;ih-M0pI0ZO;V<%9ge$#Y<)M(Vf?aX!KvwV5 zO*T1=r}Ld@MO17oI+n(MjO9Cxmv{>g=?%>Eln5{2e2*h*aTZI>Sm-Zr||7foa>c){JAytgWp0-#mwmZJSqoazS# zKcx>UHg2lQirWgz#-E)HxF2Y=*izf|{nCIuXy3zwGSXTe7-6>a+HEFnwq;5lRKSx3 z=DJ`VcYn4NH}p)UisiG=@&zwcDBjck&N57^(@eJ`zw&i*Jj)~7EO@V=z~0L4O?FvR zEOb@LS2hppF3$Bj^gkp8d3!{HqqxRfl-8A@B#znr8uxhD2p!l^XhwUXfm02q3Tue# z&Xz_DJ>MoTBT_6u=Vur0F7yapc%iVSEQ9Wz|FsbNsJ-iKJ5^$w3U$cFov>j=QL)jW zRSJa1cMDsKN(CeCDasN4fqg~UouOfxtSiPYJ@WHOkwqB^w$n{Qt8En5La?OZwIL3{5kO=&ehof zOF1_Ye~OCi9YIiDgg z&vCvs6W|hK4ZVWa0DMMlAl4H{IqQhos~&3y;=A;vp%+##c9J4RYoMng7r@1NHE|{9 z>wb!ua~=H#S;IL|2GGIzGCA}bXV+r@M>wCMA0d}HHx&VV&iMkQK} zeZu()IeJIoPWXN?K&n=8qMUv|WO1HKshh<)ophdJOcTr^qbe((Y$ Mp?71Gh3$s_0$a#?8~^|S delta 3778 zcmZ{n4^)%a6~N#3CD4FLlRzK|f&764l8_)G$RFcG$5(5s77GGat*yGP*7~nQdvsc~ znP?h9+uc*!^{k4{)8nbyQTamguK;E$VX{}OhInM z5B<@w&s6-L4Rd4`t_B{J&D8il_t~nm(}nwBb=4xhHuL>Y0x8& zfHI@PlaC$(4R#W-&A<^O)Ms1#&C3o#g1i2R&-h?M7u@w*2Rxn;;!jkCZ)Oa0{J?a$ zHsuZeVg>A1uI0-rfKwIo-iokG^(DvmltZ5S5`ST8II3>p_*G?aGs6YzwXOW$z3_n7 z0DsmlEH;EC*gMuO;w@1c3a3t#_FLT3Wu`wt-nL%hv$|AKJ!Nn{+$ZaZlK)>wdhOOQ#>KDV&guRQaSq@?D86%iGI1A z!>>q7DX4YR^K57m5Mse4G1_OY2Ak;$L>?%G<+=jR-MDTzmB~c(5YW}}m)-Eb&Za$T znAG;V8*b?8y{p|cgNXk<`!X@+CV$i}PWQ5qzjC67l14ns4Qp~X^8GIOG{>%eQJ-`t zHooM7%v{U7Q#52@2%qGOL-+^^Loz|3{sr-Qw^Ro)@J1`DLULYIwcGDdsn7hHjndD}QB^|tb+csz~<)O^kLcsw9P{X3&X9hjQZx7?;CBh=(sC#=xV zHm-0IGQ1+RXC(e*Try8j!XMaHeGzxzSGoM0V={7b1vvZm}5?+*8 zmWr8ljnSUgWyrsp8M&a(l%H{sNpiSqD$rh_QmP!!6~UBzGk>%QO7rJ9WX$x5BI;d( zc8ZWceR2;UypW$?lF2Mf(NcXzxREebO*S1Xgn@jIHl8(U$hQk&alR=t>EZZfac?0k zD==khng3N{Yev#|791(C=IAj^Hifv^GBM}Km<_HJ6#9lA$C{7{N-X6%VW_=zLh^ar z@0$?RXD-o#!0ZCebYp7h3Oxc%<{A8sZg|dI4xgBt%7&jnBblIKzEl$u?wg#{@MU!P zuoX61Ox%75T1?vQR$7TMu@Ywrx*c6$aTxUNsQs^{f5A$Z9#mF!WrI2~OLWPuEgoxeTzA+6=Lcx0VkaK!)0UFo+1%tXm>8$Dk;g|MDLMz6OQmU2w*hHv~R+< zoEGKx&_FEWkbfN3I^C*Hyjx zZneUQy6YZ{EF?tYct&-?0ar2C3Gch=jfUJ*rqYQ%3}$yOmk(9$QjJEQTuZThuEQqx zR89*$ZZmfU-f7sI?}^Y`1S7ncr}>5aTk(L$m^G=EpRtzh$rff4B&>+n(>npX zZuox&3z)%^%%ESuxm}KnwYw{T5TP{NSDC73j)Dve;Q`PxEkN2 zf5>=U6(I*1-&Ib?X~ti<@kN~RdGvFIae6f&qm(gdIRR+=qdF#+bvG^KTemLRQGd zAUennoYLZiK*IP6T}>GWs6nR-m_8jdXk~n`l8}vzO}GTz%-%->VtNj3`WOc=%L|O@ z|4swQm^}XBu9M^XbA%IxnAniuxP;R%n52zL!r2lwNw`SDZV6A5a9xsdd@?5~AkUL< zTY_=r2zgY(YbCr{V!utoyCu9=!p}?iFfu5c71NGMlwk>tawIrxD! j%}ynL*Dt`wLaKPV*@<^Bsc*x_Quw&}bojs$UD|&D;IH=@ diff --git a/tests/check_snp_sites b/tests/check_snp_sites index 381f7899f5868b1f415236262a3b49b07e623aef..d82a0ad1ca0b6c43cdafa704443e8ab7005b9d12 100755 GIT binary patch delta 6474 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 delta 6494 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