github.com/vertgenlab/gonomics@v1.0.0/cmd/DEPRECATED/primateRecon/primateRecon_test.go (about) 1 package main 2 3 import ( 4 "os" 5 "testing" 6 7 "github.com/vertgenlab/gonomics/dna" 8 "github.com/vertgenlab/gonomics/exception" 9 "github.com/vertgenlab/gonomics/fasta" 10 "github.com/vertgenlab/gonomics/fileio" 11 ) 12 13 func TestAllPossibleOneHumanNonGeneric(t *testing.T) { 14 var err error 15 var hum fasta.Fasta = fasta.Fasta{Name: "hg38"} 16 var chi fasta.Fasta = fasta.Fasta{Name: "panTro6"} 17 var bon fasta.Fasta = fasta.Fasta{Name: "panPan2"} 18 var gor fasta.Fasta = fasta.Fasta{Name: "gorGor5"} 19 var ora fasta.Fasta = fasta.Fasta{Name: "ponAbe3"} 20 var species []fasta.Fasta 21 var h, c, b, g, o dna.Base // the values of the human, humanAlt, chimp, ... bases 22 var hBases []dna.Base = []dna.Base{dna.A, dna.N, dna.Gap} 23 var possibleBases []dna.Base = []dna.Base{dna.A, dna.C, dna.G, dna.T, dna.N, dna.Gap} 24 25 // given that human is A or N or Gap, we will now go through all possible combinations 26 for _, h = range hBases { 27 for _, c = range possibleBases { 28 for _, b = range possibleBases { 29 for _, g = range possibleBases { 30 for _, o = range possibleBases { 31 hum.Seq = append(hum.Seq, h) 32 chi.Seq = append(chi.Seq, c) 33 bon.Seq = append(bon.Seq, b) 34 gor.Seq = append(gor.Seq, g) 35 ora.Seq = append(ora.Seq, o) 36 } 37 } 38 } 39 } 40 } 41 42 species = []fasta.Fasta{hum, chi, bon, gor, ora} 43 fasta.Write("testdata/allPossible.oneHuman.fa", species) 44 45 primateRecon("testdata/allPossible.oneHuman.fa", "testdata/out.humanBiasedParsimony.fa", false) 46 if !fileio.AreEqual("testdata/out.humanBiasedParsimony.fa", "testdata/expected.humanBiasedParsimony.fa") { 47 t.Errorf("Error in primateRecon, human biased manual algorithm. Output was not as expected.") 48 } else { 49 err = os.Remove("testdata/out.humanBiasedParsimony.fa") 50 exception.PanicOnErr(err) 51 } 52 53 primateRecon("testdata/allPossible.oneHuman.fa", "testdata/out.ParsimonyMessyToN.fa", true) 54 if !fileio.AreEqual("testdata/out.ParsimonyMessyToN.fa", "testdata/expected.ParsimonyMessyToN.fa") { 55 t.Errorf("Error in primateRecon, human biased manual algorithm. Output was not as expected.") 56 } else { 57 err = os.Remove("testdata/out.ParsimonyMessyToN.fa") 58 exception.PanicOnErr(err) 59 } 60 61 primateReconHcaMle("testdata/allPossible.oneHuman.fa", "testdata/4d.mod", true, false, 0.0, 0, false, "testdata/out.humanBiasedMleNoThreshold.fa") 62 if !fileio.AreEqual("testdata/out.humanBiasedMleNoThreshold.fa", "testdata/expected.humanBiasedMleNoThreshold.fa") { 63 t.Errorf("Error in primateRecon, human biased version nonHumanProb no threshold. Output was not as expected.") 64 } else { 65 err = os.Remove("testdata/out.humanBiasedMleNoThreshold.fa") 66 exception.PanicOnErr(err) 67 } 68 69 primateReconHcaMle("testdata/allPossible.oneHuman.fa", "testdata/4d.mod", true, false, 0.0, 0.99, false, "testdata/out.humanBiasedMle99.fa") 70 if !fileio.AreEqual("testdata/out.humanBiasedMle99.fa", "testdata/expected.humanBiasedMle99.fa") { 71 t.Errorf("Error in primateRecon, human biased version nonHumanProb 99. Output was not as expected.") 72 } else { 73 err = os.Remove("testdata/out.humanBiasedMle99.fa") 74 exception.PanicOnErr(err) 75 } 76 77 primateReconHcaMle("testdata/allPossible.oneHuman.fa", "testdata/4d.mod", true, false, 0.0, 0.8, false, "testdata/out.humanBiasedMle80.fa") 78 if !fileio.AreEqual("testdata/out.humanBiasedMle80.fa", "testdata/expected.humanBiasedMle80.fa") { 79 t.Errorf("Error in primateRecon, human biased version nonHumanProb 80. Output was not as expected.") 80 } else { 81 err = os.Remove("testdata/out.humanBiasedMle80.fa") 82 exception.PanicOnErr(err) 83 } 84 primateReconHcaMle("testdata/allPossible.oneHuman.fa", "testdata/4d.mod", false, true, 0.0, 0.8, false, "testdata/out.chimpBiasedMle80.fa") 85 if !fileio.AreEqual("testdata/out.chimpBiasedMle80.fa", "testdata/expected.chimpBiasedMle80.fa") { 86 t.Errorf("Error in primateRecon, chimp biased version nonChimpProb 80. Output was not as expected.") 87 } else { 88 err = os.Remove("testdata/out.chimpBiasedMle80.fa") 89 exception.PanicOnErr(err) 90 } 91 primateReconHgaMle("testdata/allPossible.oneHuman.fa", "testdata/4d.mod", 0.0, 0.8, false, "testdata/out.gorillaBiasedHgaMle80.fa") 92 if !fileio.AreEqual("testdata/out.gorillaBiasedHgaMle80.fa", "testdata/expected.gorillaBiasedHgaMle80.fa") { 93 t.Errorf("Error in primateRecon, gorilla biased hga version nonBiasProb 80. Output was not as expected.") 94 } else { 95 err = os.Remove("testdata/out.gorillaBiasedHgaMle80.fa") 96 exception.PanicOnErr(err) 97 } 98 primateReconHgaMle("testdata/allPossible.oneHuman.fa", "testdata/4d.mod", 0.0, 0.99, false, "testdata/out.gorillaBiasedHgaMle99.fa") 99 if !fileio.AreEqual("testdata/out.gorillaBiasedHgaMle99.fa", "testdata/expected.gorillaBiasedHgaMle99.fa") { 100 t.Errorf("Error in primateRecon, gorilla biased hga version nonBiasProb 99. Output was not as expected.") 101 } else { 102 err = os.Remove("testdata/out.gorillaBiasedHgaMle99.fa") 103 exception.PanicOnErr(err) 104 err = os.Remove("testdata/allPossible.oneHuman.fa") //we delete allPossible only if all the tests have passed. 105 exception.PanicOnErr(err) 106 } 107 } 108 109 func TestAllPossibleOneHumanGenericNames(t *testing.T) { 110 var err error 111 var hum fasta.Fasta = fasta.Fasta{Name: "human"} 112 var chi fasta.Fasta = fasta.Fasta{Name: "chimp"} 113 var bon fasta.Fasta = fasta.Fasta{Name: "bonobo"} 114 var gor fasta.Fasta = fasta.Fasta{Name: "gorilla"} 115 var ora fasta.Fasta = fasta.Fasta{Name: "orangutan"} 116 var species []fasta.Fasta 117 var h, c, b, g, o dna.Base // the values of the human, humanAlt, chimp, ... bases 118 h = dna.A // human is fixed 119 var possibleBases []dna.Base = []dna.Base{dna.A, dna.C, dna.G, dna.T, dna.N, dna.Gap} 120 121 // given that human is A or N or Gap, we will now go through all possible combinations 122 for _, c = range possibleBases { 123 for _, b = range possibleBases { 124 for _, g = range possibleBases { 125 for _, o = range possibleBases { 126 hum.Seq = append(hum.Seq, h) 127 chi.Seq = append(chi.Seq, c) 128 bon.Seq = append(bon.Seq, b) 129 gor.Seq = append(gor.Seq, g) 130 ora.Seq = append(ora.Seq, o) 131 } 132 } 133 } 134 } 135 136 species = []fasta.Fasta{hum, chi, bon, gor, ora} 137 fasta.Write("testdata/allPossible.oneHuman.fa", species) 138 139 primateReconHcaMle("testdata/allPossible.oneHuman.fa", "testdata/4d.genericNames.mod", true, false, 0.0, 0.99, true, "testdata/out.humanBiasedMle99.genericNames.fa") 140 if !fileio.AreEqual("testdata/out.humanBiasedMle99.genericNames.fa", "testdata/expected.humanBiasedMle99.genericNames.fa") { 141 t.Errorf("Error in primateRecon, human biased version nonHumanProb 99. Output was not as expected.") 142 } else { 143 err = os.Remove("testdata/out.humanBiasedMle99.genericNames.fa") 144 exception.PanicOnErr(err) 145 } 146 } 147 148 func TestAllPossibleTwoHumans(t *testing.T) { 149 var err error 150 var hum fasta.Fasta = fasta.Fasta{Name: "hg38"} 151 var humAlt fasta.Fasta = fasta.Fasta{Name: "hg38alt"} 152 var chi fasta.Fasta = fasta.Fasta{Name: "panTro6"} 153 var bon fasta.Fasta = fasta.Fasta{Name: "panPan2"} 154 var gor fasta.Fasta = fasta.Fasta{Name: "gorGor5"} 155 var ora fasta.Fasta = fasta.Fasta{Name: "ponAbe3"} 156 var species []fasta.Fasta 157 var h, hA, c, b, g, o dna.Base // the values of the human, humanAlt, chimp, ... bases 158 h = dna.A // human is fixed 159 hA = dna.C // humanAlt is fixed 160 var possibleBases []dna.Base = []dna.Base{dna.A, dna.C, dna.G, dna.T, dna.N, dna.Gap} 161 162 // given that human is A and human alt is C, we will now go through all possible combinations 163 for _, c = range possibleBases { 164 for _, b = range possibleBases { 165 for _, g = range possibleBases { 166 for _, o = range possibleBases { 167 hum.Seq = append(hum.Seq, h) 168 humAlt.Seq = append(humAlt.Seq, hA) 169 chi.Seq = append(chi.Seq, c) 170 bon.Seq = append(bon.Seq, b) 171 gor.Seq = append(gor.Seq, g) 172 ora.Seq = append(ora.Seq, o) 173 } 174 } 175 } 176 } 177 178 species = []fasta.Fasta{hum, humAlt, chi, bon, gor, ora} 179 fasta.Write("testdata/allPossible.twoHumans.fa", species) 180 primateReconHcaMle("testdata/allPossible.twoHumans.fa", "testdata/4d.2h.mod", false, false, 0.90, 0.0, false, "testdata/out.unbiased90.fa") 181 if !fileio.AreEqual("testdata/out.unbiased90.fa", "testdata/expected.unbiased90.fa") { 182 t.Errorf("Error in primateRecon, unbiased 90. Output was not as expected.") 183 } else { 184 err = os.Remove("testdata/out.unbiased90.fa") 185 exception.PanicOnErr(err) 186 } 187 primateReconHcaMle("testdata/allPossible.twoHumans.fa", "testdata/4d.2h.mod", false, false, 0.99, 0.0, false, "testdata/out.unbiased99.fa") 188 if !fileio.AreEqual("testdata/out.unbiased99.fa", "testdata/expected.unbiased99.fa") { 189 t.Errorf("Error in primateRecon, unbiased 99. Output was not as expected.") 190 } else { 191 err = os.Remove("testdata/out.unbiased99.fa") 192 exception.PanicOnErr(err) 193 err = os.Remove("testdata/allPossible.twoHumans.fa") 194 exception.PanicOnErr(err) 195 } 196 }