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  }