From e6dbe789aea03cf92e3648eacbb457879d386da5 Mon Sep 17 00:00:00 2001
From: "alice.boizet_cirad.fr" <alice.boizet@cirad.fr>
Date: Thu, 7 Mar 2024 15:12:21 +0000
Subject: [PATCH] Delete sumulation.vba

---
 sumulation.vba | 3104 ------------------------------------------------
 1 file changed, 3104 deletions(-)
 delete mode 100644 sumulation.vba

diff --git a/sumulation.vba b/sumulation.vba
deleted file mode 100644
index 4ede8ca..0000000
--- a/sumulation.vba
+++ /dev/null
@@ -1,3104 +0,0 @@
-'Simulation module for genetic maps and populations
-
-Function gauss()
-'simulated normally-distributed data
-'use: myvalue = gauss * sd + mean
-
-Dim fac As Double, r As Double, V1 As Double, V2 As Double
-    
-10  V1 = 2 * Rnd - 1
-    V2 = 2 * Rnd - 1
-    r = V1 ^ 2 + V2 ^ 2
-    If (r >= 1) Then GoTo 10
-    fac = Sqr(-2 * Log(r) / r)
-    gauss = V2 * fac
-    
-End Function
-
-Sub testgauss()
-    Dim mean As Variant
-    Dim sd As Variant
-
-    mean = 0
-    sd = 1
-    myvalue = gauss * sd + mean
-    MsgBox myvalue
-End Sub
-
-Public Sub Simulate_Map()
-'For i = 1 To 1000
-Application.StatusBar = "Simulating map..."
-Application.ScreenUpdating = True: DoEvents: Application.ScreenUpdating = False
-ThisWorkbook.Sheets("SimulMap").Activate
-
-Dim SimulatedChromosome As Integer
-Dim NumberOfSimulatedChromosomes As Integer
-Dim SimulatedMarker As Long
-Dim NumberOfSimulatedMarkers As Long
-Dim NumberOfMarkersInThisChromosome As Long
-Dim SimulRow As Long
-Dim SimulatedMapSize As Double
-Dim ChromosomeSize As Double
-Dim MaxVariationPositionRate As Double
-Dim VariationPosition As Double
-Dim SimulatedMarkerPosition As Double
-Dim AverageChromosomeSize As Double
-Dim SimulatedMarkerDensity As Double
-Dim SimulatedChromosomeSizeVariation As Double
-Dim TotalMapSize As Double
-Dim StartChrSize As Double
-Dim GenomeSize As LongLong 'long is max 2,147,483,647
-Dim nbOfMb As LongLong
-Dim bp_cM_ratio As Double
-
-'Map parameters
-NumberOfSimulatedChromosomes = [N9].Value
-SimulatedMapSize = [N10].Value
-SimulatedMarkerDensity = [N11].Value
-SimulatedChromosomeSizeVariation = [N12].Value / 100
-nbOfMb = [j22].Value
-GenomeSize = nbOfMb * 1000000
-bp_cM_ratio = GenomeSize / SimulatedMapSize
-
-If SimulatedMarkerDensity < 0 Then EquallyDispersed = 1
-If [j11] = "yes" Then EquallyDispersed = 2
-
-If EquallyDispersed = 1 Then
-    SimulatedMarkerDensity = 0 - SimulatedMarkerDensity
-ElseIf EquallyDispersed = 0 Then
-    SimulatedMarkerDensity = SimulatedMarkerDensity + SimulatedMarkerDensity * (NumberOfSimulatedChromosomes / 1000)
-    'gives better results than SimulatedMarkerDensity alone
-ElseIf EquallyDispersed = 2 Then
-    If SimulatedMarkerDensity < 0 Then SimulatedMarkerDensity = (0 - SimulatedMarkerDensity)
-End If
-
-MaxVariationPositionRate = [J12]
-
-'Map Simulation
-'Define Chromosome sizes
-AverageChromosomeSize = SimulatedMapSize / NumberOfSimulatedChromosomes
-'ExpectedMarkerNumber = Int(SimulatedMapSize / SimulatedMarkerDensity) + 1
-'ExpectedMarkerNumberPerChromosome = Int(ExpectedMarkerNumber / NumberOfSimulatedChromosomes) + 1
-
-Dim SimulatedMap() As Variant
-ReDim SimulatedMap(1000000, 4)
-
-If [b6] <> "" Then
-    msg = "Are you sure you want to clear this simulated map?"
-    Style = vbYesNo + vbCritical + vbDefaultButton1
-    Title = "Clear results"
-    Ctxt = 1000
-    response = MsgBox(msg, Style, Title)
-    If response = vbYes Then
-        ThisWorkbook.Sheets("SimulMap").Range("B6", "F100005").ClearContents
-        ThisWorkbook.Sheets("SimulMap").Range("N22:N24").ClearContents
-        ThisWorkbook.Sheets("SimulMap").Range("J27:O1000").ClearContents
-        ThisWorkbook.Sheets("SimulMap").Range("R22:R25").ClearContents
-    Else
-        GoTo 1000
-    End If
-End If
-    
-SimulRow = 0
-NumberOfSimulatedMarkers = 0
-TotalMapSize = 0
-
-[K6] = "Simulating chromosomes... "
-Application.ScreenUpdating = True: DoEvents: Application.ScreenUpdating = False
-
-For SimulatedChromosome = 1 To NumberOfSimulatedChromosomes
-
-    StartChrSize = 0
-    Randomize (Rnd)
-    If Rnd > 0.5 Then SimulatedChromosomeSizeVariation = 0 - SimulatedChromosomeSizeVariation
-'    Randomize (Rnd)
-    ChromosomeSize = AverageChromosomeSize + AverageChromosomeSize * (Rnd * SimulatedChromosomeSizeVariation)
-    NumberOfMarkersInThisChromosome = Int(ChromosomeSize / SimulatedMarkerDensity) + 1
-    For SimulatedMarker = 1 To NumberOfMarkersInThisChromosome
-        NumberOfSimulatedMarkers = NumberOfSimulatedMarkers + 1
-        If EquallyDispersed = 1 Then 'fixed positions
-            SimulatedMarkerPosition = (ChromosomeSize / (NumberOfMarkersInThisChromosome - 1)) * (SimulatedMarker - 1)
-        ElseIf EquallyDispersed = 0 Then ' random positions
-            Randomize (Rnd)
-            SimulatedMarkerPosition = Rnd * ChromosomeSize
-        ElseIf EquallyDispersed = 2 Then ' semi-random positions
-            Randomize (Rnd)
-            SimulatedMarkerPosition = (ChromosomeSize / (NumberOfMarkersInThisChromosome - 1)) * (SimulatedMarker - 1)
-            If MaxVariationPositionRate > 0 Then
-                If Rnd > 0.5 Then
-                    VariationPosition = (ChromosomeSize / (NumberOfMarkersInThisChromosome - 1)) * Rnd * MaxVariationPositionRate
-                Else
-                    VariationPosition = 0 - ((ChromosomeSize / (NumberOfMarkersInThisChromosome - 1)) * Rnd * MaxVariationPositionRate)
-                End If
-            Else
-                VariationPosition = 0
-            End If
-            SimulatedMarkerPosition = SimulatedMarkerPosition + VariationPosition
-        End If
-        ''Debug.Print  SimulatedChromosome
-        SimulatedMap(SimulRow, 0) = SimulatedChromosome
-        SimulatedMap(SimulRow, 1) = NumberOfSimulatedMarkers
-        fakeMkphysicalPosition = Int(SimulatedMarkerPosition * bp_cM_ratio)
-'        SimulatedMap(SimulRow, 2) = "Chr" & SimulatedChromosome & "_M" & SimulatedMarker
-        SimulatedMap(SimulRow, 2) = "Chr" & SimulatedChromosome & "_" & fakeMkphysicalPosition
-
-        If SimulatedMarker = 1 Then
-                SimulatedMap(SimulRow, 3) = 0
-        ElseIf SimulatedMarker = NumberOfMarkersInThisChromosome Then
-            SimulatedMap(SimulRow, 3) = ChromosomeSize
-'            SimulatedMap(SimulRow, 3) = Format(ChromosomeSize, "####.00")
-        Else
-            SimulatedMap(SimulRow, 3) = SimulatedMarkerPosition
-'            SimulatedMap(SimulRow, 3) = Format(SimulatedMarkerPosition, "####.00") 'very slow
-        End If
-'        'If SimulatedMarkerPosition > StartChrSize Then StartChrSize = SimulatedMarkerPosition
-        SimulRow = SimulRow + 1
-    Next SimulatedMarker
-    'FinalChromosomeSize = StartChrSize
-    TotalMapSize = TotalMapSize + ChromosomeSize
-    Cells(26 + SimulatedChromosome, 10) = SimulatedChromosome
-    Cells(26 + SimulatedChromosome, 11) = Format(ChromosomeSize, "####.00")
-    Cells(26 + SimulatedChromosome, 12) = NumberOfMarkersInThisChromosome
-    Cells(26 + SimulatedChromosome, 14) = Format(ChromosomeSize / NumberOfMarkersInThisChromosome, "####.000")
-'    chrcM_Mbp = ChromosomeSize / (fakeMkphysicalPosition / 1000000)
-'    Cells(26 + SimulatedChromosome, 15) = Format(chrcM_Mbp, "####.00")
-Next SimulatedChromosome
-
-[K6] = ""
-
-[N22] = TotalMapSize
-[N23] = NumberOfSimulatedMarkers
-[N24] = Format(TotalMapSize / NumberOfSimulatedMarkers, "####.000")
-
-[R22] = [N9]
-[r23] = [N10]
-[R24] = [N11]
-[R25] = [N12]
-
-    Cells(26, 10) = "Chr"
-    Cells(26, 11) = "cM"
-    Cells(26, 12) = "Mk"
-    Cells(26, 14) = "density"
-
-'Application.StatusBar = "Writing map..."
-'Application.ScreenUpdating = True: DoEvents: Application.ScreenUpdating = False
-'ThisWorkbook.Sheets("SimulMap").Activate
-'Range("B6:E100005").Select
-'Selection.ClearContents
-
-ThisWorkbook.Sheets("SimulMap").Range("B6").Resize(NumberOfSimulatedMarkers, 4) = SimulatedMap
-Erase SimulatedMap
-
-'Application.StatusBar = "Sorting map by position..."
-'Application.ScreenUpdating = True: DoEvents: Application.ScreenUpdating = False
-
-Range("B6:E100005").Select
-Selection.Sort Key1:=Range("B6"), Order1:=xlAscending, Key2:=Range("E6") _
-, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
-False, Orientation:=xlTopToBottom
-
-[b6].Select
-
-'Application.StatusBar = "Sorting map by locus number..."
-'Application.ScreenUpdating = True: DoEvents: Application.ScreenUpdating = False
-
-Range("C6:D100000").Select
-Selection.Sort Key1:=Range("C6"), Order1:=xlAscending, Header:=xlGuess, _
-    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
-    
-Range("N22").Select
-Application.ScreenUpdating = True
-'Next i
-1000
-Application.StatusBar = False
-End Sub
-
-
-Public Sub Chr_Start_at_0()
-Application.ScreenUpdating = False
-
-If [b6] <> "" Then
-    msg = "Are you sure you want to do this? All marker positions will be recalculated in order to let chromosomes start at position 0"
-    Style = vbYesNo + vbCritical + vbDefaultButton1
-    Title = "Start at 0"
-    Ctxt = 1000
-    response = MsgBox(msg, Style, Title)
-    If response = vbNo Then
-        GoTo 1000
-    End If
-End If
-
-ThisWorkbook.Sheets("SimulMap").Activate
-
-'first, counts the chr parameters (same than Read_Chr_Simulated)
-Range("B6", Range("B1048576").End(xlUp)).Select
-NbOfRows = Selection.Rows.Count
-
-NumbOfMarkInChrTotal = 0
-TotalMapSize = 0
-NumberOfChr = 0
-For i = 6 To NbOfRows + 6
-    If Cells(i + 1, 2) <> Cells(i, 2) Then 'new chr is detected
-        NumberOfChr = NumberOfChr + 1
-        Cells(26 + Cells(i, 2), 10) = Cells(i, 2) 'chr number
-        ChrSize = Cells(i, 5)
-        Cells(26 + Cells(i, 2), 11) = ChrSize 'chr size
-        TotalMapSize = TotalMapSize + Cells(i, 5)
-        NumbOfMarkInChr = i - 5 - NumbOfMarkInChrTotal
-        Cells(26 + Cells(i, 2), 12) = NumbOfMarkInChr
-        MarkerDensity = ChrSize / NumbOfMarkInChr
-        Cells(26 + Cells(i, 2), 14) = MarkerDensity
-        NumbOfMarkInChrTotal = NumbOfMarkInChrTotal + NumbOfMarkInChr
-    End If
-Next
-[N22] = TotalMapSize
-[N23] = NumbOfMarkInChrTotal
-[N24] = TotalMapSize / NumbOfMarkInChrTotal
-[R22] = NumberOfChr
-
-'second, reformats the marker positions to start at 0
-firstRow = 6
-NbOfProcessedRows = 0
-For chromosome = 1 To NumberOfChr
-    NumbOfMarkInChr = Cells(26 + chromosome, 12)
-    FirstPosition = Cells(NbOfProcessedRows + 6, 5)
-    For mark = 1 To NumbOfMarkInChr
-        Cells(NbOfProcessedRows + mark + 5, 5) = Cells(NbOfProcessedRows + mark + 5, 5) - FirstPosition
-    Next
-    NbOfProcessedRows = NbOfProcessedRows + NumbOfMarkInChr
-Next chromosome
-
-'third, re-reads and writes the chr parameters
-NumbOfMarkInChrTotal = 0
-TotalMapSize = 0
-NumberOfChr = 0
-For i = 6 To NbOfRows + 6
-    If Cells(i + 1, 2) <> Cells(i, 2) Then 'new chr is detected
-        NumberOfChr = NumberOfChr + 1
-        Cells(26 + Cells(i, 2), 10) = Cells(i, 2) 'chr number
-        ChrSize = Cells(i, 5)
-        Cells(26 + Cells(i, 2), 11) = ChrSize 'chr size
-        TotalMapSize = TotalMapSize + Cells(i, 5)
-        NumbOfMarkInChr = i - 5 - NumbOfMarkInChrTotal
-        Cells(26 + Cells(i, 2), 12) = NumbOfMarkInChr
-        MarkerDensity = ChrSize / NumbOfMarkInChr
-        Cells(26 + Cells(i, 2), 14) = MarkerDensity
-        NumbOfMarkInChrTotal = NumbOfMarkInChrTotal + NumbOfMarkInChr
-    End If
-Next
-[N22] = TotalMapSize
-[N23] = NumbOfMarkInChrTotal
-[N24] = TotalMapSize / NumbOfMarkInChrTotal
-[R22] = NumberOfChr
-
-1000 [N22].Select
-Application.CutCopyMode = False
-Application.ScreenUpdating = True
-End Sub
-
-
-Sub Add_Trait_To_Population_In_Data()
-
-Application.ScreenUpdating = False
-Init
-
-popType = Sheets("Data").[D4]
-popsize = Sheets("Data").[D5]
-nbloci = Sheets("Data").[D6]
-NbTraits = Sheets("Data").[D7]
-
-nbHeaders = 15
-
-outcellrow = nbloci + NbTraits + nbHeaders + 1
-
-mkQTL1 = ThisWorkbook.Sheets("SimulMap").[R39]
-NbOfTraitsToAdd = ThisWorkbook.Sheets("SimulMap").[R40]
-
-Dim SimulatedTrait() As Variant
-ReDim SimulatedTrait(1 To NbOfTraitsToAdd, 1 To popsize + 2)
-
-MeanAA_QTL1 = ThisWorkbook.Sheets("SimulMap").[R31]
-MeanAB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R32]
-MeanBB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R33]
-VarCoeffAA_QTL1 = ThisWorkbook.Sheets("SimulMap").[R34]
-VarCoeffAB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R35]
-VarCoeffBB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R36]
-SD_AA_QTL1 = MeanAA_QTL1 * VarCoeffAA_QTL1
-SD_AB_QTL1 = MeanAB_QTL1 * VarCoeffAB_QTL1
-SD_BB_QTL1 = MeanBB_QTL1 * VarCoeffBB_QTL1
-
-Randomize (Rnd)
-
-If popType = "SSD" Or popType = "DH" Then
-    For j = 1 To NbOfTraitsToAdd
-        SimulatedTrait(j, 1) = NbTraits + j
-        SimulatedTrait(j, 2) = "SimulatedTrait_" & NbTraits + j
-        For i = 1 To popsize
-            Genotype = Data(i - 1, mkQTL1 - 1)
-            If Genotype = "A" Then
-                myAAvalue = gauss * SD_AA_QTL1 + MeanAA_QTL1
-                SimulatedTrait(j, i + 2) = Format(myAAvalue, "###.00")
-            ElseIf Genotype = "B" Then
-                myBBvalue = gauss * SD_BB_QTL1 + MeanBB_QTL1
-                SimulatedTrait(j, i + 2) = Format(myBBvalue, "###.00")
-            Else
-                SimulatedTrait(j, i + 2) = "-"
-            End If
-        Next
-    Next
-ElseIf popType = "BC1" Then
-    For j = 1 To NbOfTraitsToAdd
-        SimulatedTrait(j, 1) = NbTraits + j
-        SimulatedTrait(j, 2) = "SimulatedTrait_" & NbTraits + j
-        For i = 1 To popsize
-            Genotype = Data(i - 1, mkQTL1 - 1)
-            If Genotype = "A" Then
-                myAAvalue = gauss * SD_AA_QTL1 + MeanAA_QTL1
-                SimulatedTrait(j, i + 2) = Format(myAAvalue, "###.00")
-            ElseIf Genotype = "H" Then
-                myABvalue = gauss * SD_AB_QTL1 + MeanAB_QTL1
-                SimulatedTrait(j, i + 2) = Format(myABvalue, "###.00")
-            Else
-                SimulatedTrait(j, i + 2) = "-"
-            End If
-        Next
-    Next
-ElseIf popType = "F2" Then
-    For j = 1 To NbOfTraitsToAdd
-        SimulatedTrait(j, 1) = NbTraits + j
-        SimulatedTrait(j, 2) = "SimulatedTrait_" & NbTraits + j
-        For i = 1 To popsize
-            Genotype = Data(i - 1, mkQTL1 - 1)
-            If Genotype = "H" Then
-                myABvalue = gauss * SD_AB_QTL1 + MeanAB_QTL1
-                SimulatedTrait(j, i + 2) = Format(myABvalue, "###.00")
-            ElseIf Genotype = "A" Then
-                myAAvalue = gauss * SD_AA_QTL1 + MeanAA_QTL1
-                SimulatedTrait(j, i + 2) = Format(myAAvalue, "###.00")
-            ElseIf Genotype = "B" Then
-                myBBvalue = gauss * SD_BB_QTL1 + MeanBB_QTL1
-                SimulatedTrait(j, i + 2) = Format(myBBvalue, "###.00")
-            Else
-                SimulatedTrait(j, i + 2) = "-"
-            End If
-        Next
-    Next
-End If
-
-
-Sheets("Data").Activate
-Cells(outcellrow, 1).Resize(NbOfTraitsToAdd, popsize + 2) = SimulatedTrait
-
-Sheets("Data").[D7] = NbTraits + NbOfTraitsToAdd
-End Sub
-
-Sub Add_Random_Trait_To_Population_In_Data()
-
-Application.ScreenUpdating = False
-Init
-
-popType = Sheets("Data").[D4]
-popsize = Sheets("Data").[D5]
-nbloci = Sheets("Data").[D6]
-NbTraits = Sheets("Data").[D7]
-
-nbHeaders = 15
-
-outcellrow = nbloci + NbTraits + nbHeaders + 1
-
-NbOfTraitsToAdd = ThisWorkbook.Sheets("SimulMap").[R43]
-
-Dim SimulatedTrait() As Variant
-ReDim SimulatedTrait(1 To NbOfTraitsToAdd, 1 To popsize + 2)
-
-MeanAA_QTL1 = ThisWorkbook.Sheets("SimulMap").[R31]
-MeanAB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R32]
-MeanBB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R33]
-VarCoeffAA_QTL1 = ThisWorkbook.Sheets("SimulMap").[R34]
-VarCoeffAB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R35]
-VarCoeffBB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R36]
-SD_AA_QTL1 = MeanAA_QTL1 * VarCoeffAA_QTL1
-SD_AB_QTL1 = MeanAB_QTL1 * VarCoeffAB_QTL1
-SD_BB_QTL1 = MeanBB_QTL1 * VarCoeffBB_QTL1
-
-Randomize (Rnd)
-
-For j = 1 To NbOfTraitsToAdd
-    SimulatedTrait(j, 1) = NbTraits + j
-    SimulatedTrait(j, 2) = "RandomTrait_" & NbTraits + j
-    For i = 1 To popsize
-        myvalue = gauss * SD_AA_QTL1 + MeanAA_QTL1
-        SimulatedTrait(j, i + 2) = Format(myvalue, "###.00")
-    Next
-Next
-
-Sheets("Data").Activate
-Cells(outcellrow, 1).Resize(NbOfTraitsToAdd, popsize + 2) = SimulatedTrait
-
-Sheets("Data").[D7] = NbTraits + NbOfTraitsToAdd
-End Sub
-
-Public Sub Read_Simulation_Parameters()
-'only for autobatchmap
-SimulatedPopulationType = VirtualMap(16, 14) 'ONLY BC1 & F2 pops at this stage
-
-SimulatedPopulationSize = VirtualMap(17, 14)
-
-MapFunctionSimul = VirtualMap(18, 14)
-
-ChromosomeSDL1 = VirtualMap(9, 18)
-If ChromosomeSDL1 > 0 Then
-    PositionSDL1 = VirtualMap(10, 18)
-    ViabU = VirtualMap(15, 18) 'differential viability fA/fB for SDL1
-    SDL1AbsoluteNumber = 0
-    For i = 1 To ChromosomeSDL1 - 1
-        SDL1AbsoluteNumber = SDL1AbsoluteNumber + VirtualMap(26 + i, 12)
-    Next
-    SDL1AbsoluteNumber = SDL1AbsoluteNumber + PositionSDL1
-End If
-
-ChromosomeSDL2 = VirtualMap(11, 18)
-If ChromosomeSDL2 > 0 Then
-    PositionSDL2 = VirtualMap(12, 18)
-    ViabV = VirtualMap(17, 18) 'differential viability fA/fB for SDL2
-    SDL2AbsoluteNumber = 0
-    For i = 1 To ChromosomeSDL2 - 1
-        SDL2AbsoluteNumber = SDL2AbsoluteNumber + VirtualMap(26 + i, 12)
-    Next
-    SDL2AbsoluteNumber = SDL2AbsoluteNumber + PositionSDL2
-End If
-
-NumberOfSimulatedTraits = VirtualMap(19, 14)
-NumberOfSimulatedMarkers = VirtualMap(23, 14)
-NumberOfSimulatedChromosomes = VirtualMap(22, 18)
-RandomErrorRate = VirtualMap(18, 10)
-RandomMissingDataRate = VirtualMap(19, 10)
-
-End Sub
-
-Public Sub Simulate_Population_From_Map()
-
-'version for excel 2007+ ONLY
-'On Error GoTo 900
-Dim SegDistortersAreIndependant As Boolean, SDL2ConditionalToSDL1 As Boolean
-Dim genotypeNames() As Variant
-
-Application.ScreenUpdating = False
-
-Read_Parameters
-
-SegDistortersAreIndependant = True
-SDL2ConditionalToSDL1 = False
-
-'QTL1 parameters
-ChrQTL1 = ThisWorkbook.Sheets("SimulMap").[R29]
-MarkerNumberQTL1 = ThisWorkbook.Sheets("SimulMap").[R30]
-MeanAA_QTL1 = ThisWorkbook.Sheets("SimulMap").[R31]
-MeanAB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R32]
-MeanBB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R33]
-VarCoeffAA_QTL1 = ThisWorkbook.Sheets("SimulMap").[R34]
-VarCoeffAB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R35]
-VarCoeffBB_QTL1 = ThisWorkbook.Sheets("SimulMap").[R36]
-SD_AA_QTL1 = MeanAA_QTL1 * VarCoeffAA_QTL1
-SD_AB_QTL1 = MeanAB_QTL1 * VarCoeffAB_QTL1
-SD_BB_QTL1 = MeanBB_QTL1 * VarCoeffBB_QTL1
-Mean_QTL1_for_Random_Backcross = 0.5 * (MeanAA_QTL1 + MeanAB_QTL1)
-SD_AA_QTL1_for_Random_Backcross = Mean_QTL1_for_Random_Backcross * 0.5 * (VarCoeffAA_QTL1 + VarCoeffAB_QTL1)
-Mean_QTL1_for_Random_DH = 0.5 * (MeanAA_QTL1 + MeanBB_QTL1)
-Mean_QTL1_for_Random_F2 = 0.5 * (MeanAA_QTL1 + MeanBB_QTL1)
-
-If AutoBatchMapOn = 0 Then Application.StatusBar = "Starting..."
-
-'Population Parameters
-Sheets("SimulMap").[K6] = "Simulating population... ": Application.ScreenUpdating = True: DoEvents: Application.ScreenUpdating = False
-
-If AutoBatchMapOn = 1 Then
-    NumberOfSimulatedPopulations = 1
-    Read_Simulation_Parameters
-Else
-    ThisWorkbook.Sheets("SimulMap").Activate
-    NumberOfSimulatedPopulations = ThisWorkbook.Sheets("SimulMap").[N15]
-    saveInFiles = ThisWorkbook.Sheets("SimulMap").[O15]
-    VirtualMap = ThisWorkbook.Sheets("SimulMap").UsedRange.Value
-    
-    SimulatedPopulationType = ThisWorkbook.Sheets("SimulMap").[N16] 'ONLY BC1 & F2 pops at this stage
-    If SimulatedPopulationType <> "BC1" And SimulatedPopulationType <> "F2" _
-        And SimulatedPopulationType <> "BC2F1" And SimulatedPopulationType <> "SSD" _
-            Then MsgBox "BC1 or F2 or SSD populations only, sorry.": GoTo 1000
-    SimulatedPopulationSize = ThisWorkbook.Sheets("SimulMap").[N17] 'NOT more than 508 individuals at this stage
-'    If MaxNumberOfColumns = 256 Then
-        If SimulatedPopulationSize > 16382 And NumberOfSimulatedPopulations = 1 Then
-            SimulatedPopulationSize = 1
-            MsgBox "I can't simulate more than 16382 individuals. If you need more individuals, please simulate 2 or more populations; this will generate Mapmaker/EXP compatible files that you can analyze using the BatchMap command."
-        End If
-'    End If
-    
-    ChromosomeSDL1 = ThisWorkbook.Sheets("SimulMap").[R9]
-    If ChromosomeSDL1 > 0 Then
-        PositionSDL1 = ThisWorkbook.Sheets("SimulMap").[R10]
-        ViabU = ThisWorkbook.Sheets("SimulMap").[R15]  'differential viability fA/fB for SDL1 (BC1 or F2) - gametic selection
-        ViabU1 = ThisWorkbook.Sheets("SimulMap").[R16] 'differential viability fAA/fBB for SDL1 (F2) - zygotic selection
-        ViabU2 = ThisWorkbook.Sheets("SimulMap").[R17] 'differential viability fAB/fBB for SDL1 (F2) - zygotic selection
-        ViabU3 = ViabU2 / ViabU1                       'differential viability fAB/fAA for SDL1 (F2) - zygotic selection
-        SDL1AbsoluteNumber = 0
-        For i = 1 To ChromosomeSDL1 - 1
-            SDL1AbsoluteNumber = SDL1AbsoluteNumber + ThisWorkbook.Sheets("SimulMap").Cells(26 + i, 12)
-        Next
-        SDL1AbsoluteNumber = SDL1AbsoluteNumber + PositionSDL1
-    End If
-    
-    ChromosomeSDL2 = ThisWorkbook.Sheets("SimulMap").[R11]
-    If ChromosomeSDL2 > 0 Then
-        PositionSDL2 = ThisWorkbook.Sheets("SimulMap").[R12]
-        ViabV = ThisWorkbook.Sheets("SimulMap").[R18]
-        ViabV1 = ThisWorkbook.Sheets("SimulMap").[R19]
-        ViabV2 = ThisWorkbook.Sheets("SimulMap").[R20]
-        ViabV3 = ViabV2 / ViabV1                        'differential viability fAB/fAA for SDL2 (F2) - zygotic selection
-        SDL2AbsoluteNumber = 0
-        For i = 1 To ChromosomeSDL2 - 1
-            SDL2AbsoluteNumber = SDL2AbsoluteNumber + Cells(26 + i, 12)
-        Next
-        SDL2AbsoluteNumber = SDL2AbsoluteNumber + PositionSDL2
-    End If
-    
-    'F2 options for segregation distortion
-    SelTypeGameticMaleSDL1 = ThisWorkbook.Sheets("SimulMap").[X15]
-    SelTypeGameticFemaleSDL1 = ThisWorkbook.Sheets("SimulMap").[X16]
-    SelTypeZygoticSDL1 = ThisWorkbook.Sheets("SimulMap").[X17]
-    SelTypeGameticMaleSDL2 = ThisWorkbook.Sheets("SimulMap").[X18]
-    SelTypeGameticFemaleSDL2 = ThisWorkbook.Sheets("SimulMap").[X19]
-    SelTypeZygoticSDL2 = ThisWorkbook.Sheets("SimulMap").[X20]
-    
-    NumberOfSimulatedTraits = 1
-    NumberOfSimulatedRandomTraits = ThisWorkbook.Sheets("SimulMap").[N19]
-    
-    nbOfSupPops = 1
-    If NumberOfSimulatedPopulations > 1 And saveInFiles = True Then
-        OperatingSystem = ThisWorkbook.Sheets("hide").Cells(8, 1)
-        OperatingSystem = UCase(Left(OperatingSystem, 3))
-        If OperatingSystem = "WIN" Then
-            FileSaveName = Application.GetSaveAsFilename(Title:="Locate the folder to export the data (Don't rename the MyPop.txt file please): ", InitialFileName:="MyPop.txt", fileFilter:="Text Files (*.txt), *.txt")
-        ElseIf OperatingSystem = "MAC" Then
-            FileSaveName = Application.GetSaveAsFilename(Title:="Locate the folder to export the data (Don't rename the MyPop.txt file please): ", InitialFileName:="MyPop.txt", fileFilter:="TEXT")
-        End If
-        If FileSaveName = False Then GoTo 1000
-        
-        LengthOfPath = Len(FileSaveName)
-        OutputPath = Left(FileSaveName, LengthOfPath - 9)
-        'MsgBox "The output folder will be " & Chr(13) & OutputPath
-    ElseIf NumberOfSimulatedPopulations > 1 And saveInFiles = False Then
-        nbOfSupPops = NumberOfSimulatedPopulations
-        subPopSize = Int(SimulatedPopulationSize / nbOfSupPops)
-        remainderSubPopSize = SimulatedPopulationSize - nbOfSupPops * subPopSize
-        NumberOfSimulatedPopulations = 1
-        
-        ReDim genotypeNames(1 To 1, 1 To SimulatedPopulationSize)
-        outcolsub = 1
-        For subPop = 1 To nbOfSupPops
-            For mygenot = 1 To subPopSize
-                genotypeNames(1, outcolsub) = "pop" & subPop & "_genot" & mygenot
-                outcolsub = outcolsub + 1
-            Next
-        Next
-        If remainderSubPopSize > 0 Then
-            genotnumber = subPopSize + 1
-            For mygenot = nbOfSupPops * subPopSize + 1 To SimulatedPopulationSize
-                genotypeNames(1, mygenot) = "pop" & nbOfSupPops & "_genot" & genotnumber
-                genotnumber = genotnumber + 1
-            Next
-        End If
-        MapFunctionSimul = ThisWorkbook.Sheets("SimulMap").[N18]
-    ElseIf NumberOfSimulatedPopulations = 1 And saveInFiles = False Then
-        ReDim genotypeNames(1 To 1, 1 To SimulatedPopulationSize)
-        For mygenot = 1 To SimulatedPopulationSize
-            genotypeNames(1, mygenot) = "pop1" & "_genot" & mygenot
-        Next
-
-        MapFunctionSimul = ThisWorkbook.Sheets("SimulMap").[N18]
-        
-    End If
-
-    
-    'Reading map parameters
-    Application.StatusBar = "Reading map parameters"
-    
-    'TotalMapSize = [N22]
-    NumberOfSimulatedMarkers = ThisWorkbook.Sheets("SimulMap").[N23]
-    NumberOfSimulatedChromosomes = ThisWorkbook.Sheets("SimulMap").[R22]
-    RandomErrorRate = [j18]
-    RandomMissingDataRate = [j19]
-    
-End If
-'If NumberOfSimulatedPopulations > 1 And AutoBatchMapOn = 0 Then  ' simulate genotypes and write in txt files
-
-Dim SimulatedGenotypes() As Variant
-
-Randomize (Rnd)
-
-For SimulatedPopulation = 1 To NumberOfSimulatedPopulations
-    
-        If AutoBatchMapOn = 0 Then Application.StatusBar = "Simulating population " & SimulatedPopulation & " of " & NumberOfSimulatedPopulations
-        
-        'ReDim SimulatedGenotypes(NumberOfSimulatedMarkers + 1, SimulatedPopulationSize + 1) As Variant
-        ReDim SimulatedGenotypes(NumberOfSimulatedMarkers + 1 + NumberOfSimulatedRandomTraits + 1, SimulatedPopulationSize + 1)
-        
-'BACKCROSS
-        If SimulatedPopulationType = "BC1" Then 'fake, because does not simulate properly the 4 possible gametes. However gives correct RFs (+ or -)
-
-            For SimulatedGenotype = 1 To SimulatedPopulationSize
-10
-                If AutoBatchMapOn = 0 Then Application.StatusBar = "Pop " & SimulatedPopulation & " of " & NumberOfSimulatedPopulations & ": Genot " & SimulatedGenotype & " of " & SimulatedPopulationSize
-                StartRow = 1
-                
-                For chromosome = 1 To NumberOfSimulatedChromosomes
-                
-                    ChrSize = VirtualMap(26 + chromosome, 11)
-                    NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                        MarkerPositionOld = 0
-                        If Rnd > 0.5 Then Genotype = "A" Else Genotype = "H"
-                        SimulatedGenotypes(StartRow, SimulatedGenotype) = Genotype
-                        For Marker = 2 To NbOfMrksInChr
-                        'Application.StatusBar = "Pop " & SimulatedPopulation & " of " & NumberOfSimulatedPopulations & " - Chr " & chromosome & " - Mk " & marker
-        
-                            MarkerPosition = VirtualMap(StartRow + Marker + 4, 5)
-                            IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-                            If MapFunctionSimul = 1 Then
-                                IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-                            ElseIf MapFunctionSimul = 2 Then
-                                temp = 2 * (IntervalWithPreviousMarker / 100)
-                                IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-                            End If
-                            'IntervalWithPreviousMarkerInRF = IntervalWithPreviousMarker / 100
-                            
-                            If Rnd <= IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                                If Genotype = "A" Then
-                                    Genotype = "H"
-                                ElseIf Genotype = "H" Then
-                                    Genotype = "A"
-                                End If
-                            End If
-                            
-                            SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = Genotype
-                            
-                            'simulate non-random trait
-                            If ChrQTL1 = chromosome Then
-                                If Marker = MarkerNumberQTL1 Then
-                                    If Genotype = "A" Then
-                                        myAAvalue = gauss * SD_AA_QTL1 + MeanAA_QTL1
-                                        SimulatedGenotypes(NumberOfSimulatedMarkers + 1, SimulatedGenotype) = Format(myAAvalue, "###.00")
-                                    ElseIf Genotype = "H" Then
-                                        myABvalue = gauss * SD_AB_QTL1 + MeanAB_QTL1
-                                        SimulatedGenotypes(NumberOfSimulatedMarkers + 1, SimulatedGenotype) = Format(myABvalue, "###.00")
-                                    End If
-                                End If
-                            End If
-                            MarkerPositionOld = MarkerPosition
-                        Next 'Marker
-                    StartRow = StartRow + NbOfMrksInChr
-                Next 'chromosome
-                
-                GameteIsDead = 0
-                GameteIsDeadSDL1 = 0
-                GameteIsDeadSDL2 = 0
-                
-                If ChromosomeSDL1 > 0 Then ' there is a segregation distorter
-                    FreqA = ViabU / (1 + ViabU) 'final frequency, 0 to 0.5
-                    'SurvivalA = FreqA * 2 '0 to 1
-                    FreqH = 1 / (1 + ViabU) 'final frequency
-                    'SurvivalH = FreqH * 2
-                    myRandkillSDL1 = Rnd
-                    If ViabU < 1 Then 'selection against AA genotypes or A gametes
-'                        If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "A" And myRandkill > FreqA Then 'you're dead, gamete A!
-                        If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "A" And myRandkillSDL1 > ViabU Then  'you're dead, gamete A!
-                            GameteIsDeadSDL1 = 1
-                        End If
-                    ElseIf ViabU > 1 Then 'selection against H genotypes or B gametes
-'                        If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "H" And myRandkill > FreqH Then  ' you're dead, gamete B!
-                        If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "H" And myRandkillSDL1 > 1 / ViabU Then ' you're dead, gamete B!
-                            GameteIsDeadSDL1 = 1
-                        End If
-                    End If
-                End If
-                
-                If ChromosomeSDL2 > 0 Then ' there is another segregation distorter
-                    FreqA = ViabV / (1 + ViabV) 'final frequency, 0 to 0.5
-                    'SurvivalA = FreqA * 2 '0 to 1
-                    FreqH = 1 / (1 + ViabV) 'final frequency
-                    'SurvivalH = FreqH * 2
-                    myRandkillSDL2 = Rnd
-                    If ViabV < 1 Then 'selection against AA genotypes or A gametes
-                        If SimulatedGenotypes(SDL2AbsoluteNumber, SimulatedGenotype) = "A" And myRandkillSDL2 > ViabV Then  '... you're dead, gamete A!
-                            GameteIsDeadSDL2 = 1
-                        End If
-                    ElseIf ViabV > 1 Then 'selection against H genotypes or B gametes
-                        If SimulatedGenotypes(SDL2AbsoluteNumber, SimulatedGenotype) = "H" And myRandkillSDL2 > 1 / ViabV Then   '... you're dead, gamete B!
-                            GameteIsDeadSDL2 = 1
-                        End If
-                    End If
-                End If
-                
-                If SegDistortersAreIndependant = True Then 'no epistasis
-                    If GameteIsDeadSDL1 = 1 Or GameteIsDeadSDL2 = 1 Then GameteIsDead = 1
-                ElseIf SegDistortersAreIndependant = False Then 'both death required, epistasis
-                    If SDL2ConditionalToSDL1 = True Then
-                        If GameteIsDeadSDL1 = 0 And GameteIsDeadSDL2 = 1 Then GameteIsDead = 1
-                    ElseIf SDL2ConditionalToSDL1 = False Then
-                        If GameteIsDeadSDL1 = 1 And GameteIsDeadSDL2 = 1 Then GameteIsDead = 1
-                    End If
-                End If
-    
-                If GameteIsDead = 1 Then GoTo 10
-                
-                'random traits (normally distributed)
-                For mytrait = 1 To NumberOfSimulatedRandomTraits
-                    myvalue = gauss * SD_AA_QTL1_for_Random_Backcross + Mean_QTL1_for_Random_Backcross
-                    SimulatedGenotypes(NumberOfSimulatedMarkers + NumberOfSimulatedTraits + mytrait, SimulatedGenotype) = Format(myvalue, "###.00")
-'                    SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, SimulatedGenotype) = Format(100 + Rnd * 20, "###.00")
-                Next 'mytrait
-                
-            Next 'SimulatedGenotype
-            
-            If RandomErrorRate > 0 And RandomErrorRate <= 1 Then
-                For SimulatedGenotype = 1 To SimulatedPopulationSize
-                    StartRow = 1
-                    For chromosome = 1 To NumberOfSimulatedChromosomes
-                        NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                        For Marker = 1 To NbOfMrksInChr
-                            If Rnd >= (1 - RandomErrorRate) Then
-                                If SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "A" Then
-                                    SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "H"
-                                ElseIf SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "H" Then
-                                    SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "A"
-                                End If
-                            End If
-                        Next Marker
-                    StartRow = StartRow + NbOfMrksInChr
-                    Next chromosome
-                Next SimulatedGenotype
-            End If
-            
-            If RandomMissingDataRate > 0 And RandomMissingDataRate <= 1 Then
-                For SimulatedGenotype = 1 To SimulatedPopulationSize
-                    StartRow = 1
-                    For chromosome = 1 To NumberOfSimulatedChromosomes
-                        NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                        For Marker = 1 To NbOfMrksInChr
-                            If Rnd >= 1 - RandomMissingDataRate Then
-                                SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "-"
-                            End If
-                        Next Marker
-                    StartRow = StartRow + NbOfMrksInChr
-                    Next chromosome
-                Next SimulatedGenotype
-            End If
-            
-            For mytrait = 1 To NumberOfSimulatedRandomTraits
-                SimulatedGenotypes(NumberOfSimulatedMarkers + NumberOfSimulatedTraits + mytrait, 0) = "RandomQTrait_" & mytrait
-            Next 'mytrait
-
-            SimulatedGenotypes(NumberOfSimulatedMarkers + 1, 0) = "SimulatedQTrait_1"
-            
-            
-'BACKCROSS - RARE
-        ElseIf SimulatedPopulationType = "BC1bizarre" Then 'try to mimic better meiosis behavior
-        
-            For SimulatedGenotype = 1 To SimulatedPopulationSize
-                StartRow = 1
-                For chromosome = 1 To NumberOfSimulatedChromosomes
-                    ChrSize = VirtualMap(26 + chromosome, 11)
-                    NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                        MarkerPositionOld = 0
-                        Marker = StartRow
-                        If Rnd > 0.5 Then Genotype = "A" Else Genotype = "H"
-                        SimulatedGenotypes(Marker, SimulatedGenotype) = Genotype
-                        If Rnd > 0.5 Then 'Recombined Gamete
-                            For Marker = 2 To NbOfMrksInChr
-                                MarkerPosition = VirtualMap(StartRow + Marker + 4, 5)
-                                IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld 'in cM
-                                If MapFunctionSimul = 1 Then
-                                    IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-                                ElseIf MapFunctionSimul = 2 Then
-                                    temp = 2 * (IntervalWithPreviousMarker / 100)
-                                    IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-                                End If
-                                'Randomize (Rnd)
-                                If Rnd > 1 - 2 * IntervalWithPreviousMarkerInRF Then 'a recombination occurred - seems to generate too many 2ble recombinations
-                                    If Genotype = "A" Then
-                                        Genotype = "H"
-                                    ElseIf Genotype = "H" Then
-                                        Genotype = "A"
-                                    End If
-                                End If
-                                SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = Genotype
-                                MarkerPositionOld = MarkerPosition
-                            Next 'Marker
-                        Else 'parental gamete
-                            For Marker = 2 To NbOfMrksInChr
-                                SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = Genotype
-                            Next 'Marker
-                        End If
-                    StartRow = StartRow + NbOfMrksInChr
-                Next 'chromosome
-                
-            Next 'SimulatedGenotype
-        
-        
-'BC2F1
-        ElseIf SimulatedPopulationType = "BC2F1" Then
-'   A FINIR
-
-            BC2FamilySize = 4 ' a mettre en variable
-            
-            BC2PopulationSize = SimulatedPopulationSize * BC2FamilySize
-            For SimulatedGenotype = 1 To SimulatedPopulationSize
-50
-                StartRow = 1
-                For chromosome = 1 To NumberOfSimulatedChromosomes
-                    ChrSize = VirtualMap(26 + chromosome, 11)
-                    NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                        MarkerPositionOld = 0
-                        Marker = StartRow
-                        If Rnd > 0.5 Then Genotype = "A" Else Genotype = "H"
-                        SimulatedGenotypes(Marker, SimulatedGenotype) = Genotype
-                        For Marker = 2 To NbOfMrksInChr
-                            MarkerPosition = VirtualMap(StartRow + Marker + 4, 5)
-                            IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-                            If MapFunctionSimul = 1 Then
-                                IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-                            ElseIf MapFunctionSimul = 2 Then
-                                temp = 2 * (IntervalWithPreviousMarker / 100)
-                                IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-                            End If
-                            If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                                If Genotype = "A" Then
-                                    Genotype = "H"
-                                ElseIf Genotype = "H" Then
-                                    Genotype = "A"
-                                End If
-                            End If
-                            SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = Genotype
-                            MarkerPositionOld = MarkerPosition
-                        Next Marker
-                    StartRow = StartRow + NbOfMrksInChr
-                Next chromosome
-    '        For mytrait = 1 To NumberOfSimulatedRandomTraits
-    '            SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, SimulatedGenotype) = Format(100 + Rnd * 20, "###.00")
-    '        Next mytrait
-            Next SimulatedGenotype
-    '        For mytrait = 1 To NumberOfSimulatedRandomTraits
-    '            SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, 0) = "RandomQTrait_" & mytrait
-    '        Next mytrait
-
-
-
-' F2 POPULATION
-        ElseIf SimulatedPopulationType = "F2" Then
-        
-            For SimulatedGenotype = 1 To SimulatedPopulationSize
-100
-                StartRow = 1
-                Gamete1_Is_Dead = 0
-                Gamete2_Is_Dead = 0
-                Zygote_Is_Dead = 0
-                For chromosome = 1 To NumberOfSimulatedChromosomes
-                    ChrSize = VirtualMap(26 + chromosome, 11)
-                    NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                    MarkerPositionOld = 0
-                    'Randomize (Rnd)
-                    If Rnd > 0.5 Then genotype1 = "A" Else genotype1 = "B"
-                    'Randomize (Rnd)
-                    If Rnd > 0.5 Then genotype2 = "B" Else genotype2 = "A"
-                    Marker = StartRow
-                    If genotype1 = "A" And genotype2 = "A" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "A"
-                    If genotype1 = "B" And genotype2 = "B" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "B"
-                    If genotype1 = "A" And genotype2 = "B" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "H"
-                    If genotype1 = "B" And genotype2 = "A" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "H"
-                    
-                    For Marker = 2 To NbOfMrksInChr
-                        MarkerPosition = VirtualMap(StartRow + Marker + 4, 5)
-                        IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-                        If MapFunctionSimul = 1 Then
-                            IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-                        ElseIf MapFunctionSimul = 2 Then
-                                temp = 2 * (IntervalWithPreviousMarker / 100)
-                                IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-                        End If
-                        
-                        'male gamete
-                        'Randomize (Rnd)
-                        If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                            If genotype1 = "A" Then
-                                genotype1 = "B"
-                            ElseIf genotype1 = "B" Then
-                                genotype1 = "A"
-                            End If
-                        End If
-                        'selection on male gamete (SDL 1)
-                        If SelTypeGameticMaleSDL1 = "x" Then
-                            If chromosome = ChromosomeSDL1 Then
-                                 If Marker = PositionSDL1 Then
-                                        ''Debug.Print "SDL1 - gam sel", ViabU
-                                        myRandkill = Rnd
-                                        If ViabU < 1 Then 'selection against A gametes
-                                            If genotype1 = "A" And myRandkill > ViabU Then 'gamete A dies
-                                                Gamete1_Is_Dead = 1
-                                                ''Debug.Print "killed"
-                                            End If
-                                        ElseIf ViabU > 1 Then 'selection against B gametes
-                                            If genotype1 = "B" And myRandkill > 1 / ViabU Then 'gamete B dies
-                                                Gamete1_Is_Dead = 1
-                                                ''Debug.Print "killed"
-                                            End If
-                                        End If
-                                End If
-                            End If
-                        End If
-                        If SelTypeGameticMaleSDL2 = "x" Then
-                            'selection on male gamete (SDL 2)
-                            If chromosome = ChromosomeSDL2 Then
-                                 If Marker = PositionSDL2 Then
-                                        myRandkill = Rnd
-                                        If ViabV < 1 Then 'selection against A gametes
-                                            If genotype1 = "A" And myRandkill > ViabV Then 'gamete A dies
-                                                Gamete1_Is_Dead = 1
-                                            End If
-                                        ElseIf ViabU > 1 Then 'selection against B gametes
-                                            If genotype1 = "B" And myRandkill > 1 / ViabV Then 'gamete B dies
-                                                Gamete1_Is_Dead = 1
-                                            End If
-                                        End If
-                                End If
-                            End If
-                        End If
-                        'female gamete
-                        If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                            If genotype2 = "A" Then
-                                genotype2 = "B"
-                            ElseIf genotype2 = "B" Then
-                                genotype2 = "A"
-                            End If
-                        End If
-'                        Gamete2_Is_Dead = 0
-                        'selection
-                        If SelTypeGameticFemaleSDL1 = "x" Then
-                            If chromosome = ChromosomeSDL1 Then
-                                 If Marker = PositionSDL1 Then
-                                        myRandkill = Rnd
-                                        If ViabU < 1 Then 'selection against A gametes
-                                            If genotype2 = "A" And myRandkill > ViabU Then 'gamete A dies
-                                                Gamete2_Is_Dead = 1
-                                            End If
-                                        ElseIf ViabU > 1 Then 'selection against B gametes
-                                            If genotype2 = "B" And myRandkill > 1 / ViabU Then 'gamete B dies
-                                                Gamete2_Is_Dead = 1
-                                            End If
-                                        End If
-                                End If
-                            End If
-                        End If
-                        If SelTypeGameticFemaleSDL2 = "x" Then
-                            If chromosome = ChromosomeSDL2 Then
-                                 If Marker = PositionSDL2 Then
-                                        myRandkill = Rnd
-                                        If ViabV < 1 Then 'selection against A gametes
-                                            If genotype2 = "A" And myRandkill > ViabV Then 'gamete A dies
-                                                Gamete2_Is_Dead = 1
-                                            End If
-                                        ElseIf ViabU > 1 Then 'selection against B gametes
-                                            If genotype2 = "B" And myRandkill > 1 / ViabV Then 'gamete B dies
-                                                Gamete2_Is_Dead = 1
-                                            End If
-                                        End If
-                                End If
-                            End If
-                        End If
-                        'mating or selfing
-                        If genotype1 = "A" And genotype2 = "A" Then Genotype = "A"
-                        If genotype1 = "B" And genotype2 = "B" Then Genotype = "B"
-                        If genotype1 = "A" And genotype2 = "B" Then Genotype = "H"
-                        If genotype1 = "B" And genotype2 = "A" Then Genotype = "H"
-                        SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = Genotype
-                        'simulate non-random trait
-                        If ChrQTL1 = chromosome Then
-                            If Marker = MarkerNumberQTL1 Then
-                                If Genotype = "H" Then
-                                    myABvalue = gauss * SD_AB_QTL1 + MeanAB_QTL1
-                                    SimulatedGenotypes(NumberOfSimulatedMarkers + 1, SimulatedGenotype) = Format(myABvalue, "###.00")
-                                ElseIf Genotype = "A" Then
-                                    myAAvalue = gauss * SD_AA_QTL1 + MeanAA_QTL1
-                                    SimulatedGenotypes(NumberOfSimulatedMarkers + 1, SimulatedGenotype) = Format(myAAvalue, "###.00")
-                                ElseIf Genotype = "B" Then
-                                    myBBvalue = gauss * SD_BB_QTL1 + MeanBB_QTL1
-                                    SimulatedGenotypes(NumberOfSimulatedMarkers + 1, SimulatedGenotype) = Format(myBBvalue, "###.00")
-                                End If
-                            End If
-                        End If
-                        MarkerPositionOld = MarkerPosition
-                        
-                    Next Marker
-                    StartRow = StartRow + NbOfMrksInChr
-                    
-                Next chromosome
-                
-                If Gamete1_Is_Dead = 1 Then GoTo 100
-                If Gamete2_Is_Dead = 1 Then GoTo 100
-
-                 'eliminate zygotes
-                
-                If ChromosomeSDL1 > 0 Then ' there is a segregation distorter
-                    myRandkill = Rnd
-                    If ViabU1 < 1 Then 'selection against AA genotype relative to BB genotype
-                        If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "A" And myRandkill > ViabU1 Then  'AA killed
-                            Zygote_Is_Dead = 1
-                        End If
-                    ElseIf ViabU1 > 1 Then 'selection against AA genotype relative to BB genotype
-                        If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "B" And myRandkill > 1 / ViabU1 Then 'sorry, bad luck... you're dead, gamete B!
-                            Zygote_Is_Dead = 1
-                        End If
-                    End If
-                    If ViabU2 < 1 Then 'selection against AB genotype relative to BB genotype
-                        If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "H" And myRandkill > ViabU2 Then  'AA killed
-                            Zygote_Is_Dead = 1
-                        End If
-                    ElseIf ViabU2 > 1 Then 'selection against BB genotype versus AB genotype
-                        If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "B" And myRandkill > 1 / ViabU2 Then 'sorry, bad luck... you're dead, gamete B!
-                            Zygote_Is_Dead = 1
-                        End If
-                    End If
-                    If ViabU3 < 1 Then 'selection against AB genotype relative to AA genotype
-                        If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "H" And myRandkill > ViabU3 Then  'AA killed
-                            Zygote_Is_Dead = 1
-                        End If
-                    ElseIf ViabU3 > 1 Then 'selection against AA genotype versus AB genotype
-                        If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "A" And myRandkill > 1 / ViabU3 Then 'sorry, bad luck... you're dead, gamete B!
-                            Zygote_Is_Dead = 1
-                        End If
-                    End If
-               End If
-                
-                If ChromosomeSDL2 > 0 Then ' there is a segregation distorter
-                    myRandkill = Rnd
-                    If ViabV1 < 1 Then 'selection against AA genotype relative to BB genotype
-                        If SimulatedGenotypes(SDL2AbsoluteNumber, SimulatedGenotype) = "A" And myRandkill > ViabV1 Then  'AA killed
-                            Zygote_Is_Dead = 1
-                        End If
-                    ElseIf ViabV1 > 1 Then 'selection against AA genotype relative to BB genotype
-                        If SimulatedGenotypes(SDL2AbsoluteNumber, SimulatedGenotype) = "B" And myRandkill > 1 / ViabV1 Then 'sorry, bad luck... you're dead, gamete B!
-                            Zygote_Is_Dead = 1
-                        End If
-                    End If
-                    If ViabV2 < 1 Then 'selection against AB genotype relative to BB genotype
-                        If SimulatedGenotypes(SDL2AbsoluteNumber, SimulatedGenotype) = "H" And myRandkill > ViabV2 Then  'AA killed
-                            Zygote_Is_Dead = 1
-                        End If
-                    ElseIf ViabV2 > 1 Then 'selection against BB genotype versus AB genotype
-                        If SimulatedGenotypes(SDL2AbsoluteNumber, SimulatedGenotype) = "B" And myRandkill > 1 / ViabV2 Then 'sorry, bad luck... you're dead, gamete B!
-                            Zygote_Is_Dead = 1
-                        End If
-                    End If
-                    If ViabV3 < 1 Then 'selection against AB genotype relative to AA genotype
-                        If SimulatedGenotypes(SDL2AbsoluteNumber, SimulatedGenotype) = "H" And myRandkill > ViabV3 Then  'AA killed
-                            Zygote_Is_Dead = 1
-                        End If
-                    ElseIf ViabV3 > 1 Then 'selection against AA genotype versus AB genotype
-                        If SimulatedGenotypes(SDL2AbsoluteNumber, SimulatedGenotype) = "A" And myRandkill > 1 / ViabV3 Then 'sorry, bad luck... you're dead, gamete B!
-                            Zygote_Is_Dead = 1
-                        End If
-                    End If
-               End If
-                
-                If Zygote_Is_Dead = 1 Then GoTo 100
-                 'random traits
-                For mytrait = 1 To NumberOfSimulatedRandomTraits
-                    SimulatedGenotypes(NumberOfSimulatedMarkers + NumberOfSimulatedTraits + mytrait, SimulatedGenotype) = Format(100 + Rnd * 20, "###.00")
-                Next mytrait
-                
-            Next SimulatedGenotype
-            
-            SimulatedGenotypes(NumberOfSimulatedMarkers + 1, 0) = "SimulatedQTrait_1"
-            
-             'random traits names
-            For mytrait = 1 To NumberOfSimulatedRandomTraits
-                SimulatedGenotypes(NumberOfSimulatedMarkers + NumberOfSimulatedTraits + mytrait, 0) = "RandomQTrait_" & mytrait
-            Next mytrait
-            
-            If RandomErrorRate > 0 And RandomErrorRate <= 1 Then
-                For SimulatedGenotype = 1 To SimulatedPopulationSize
-                    StartRow = 1
-                    For chromosome = 1 To NumberOfSimulatedChromosomes
-                        NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                        For Marker = 1 To NbOfMrksInChr
-                            If Rnd >= 1 - RandomErrorRate Then
-                                If SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "A" Then
-                                    If Rnd >= (1 / 3) Then
-                                        SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "H"
-                                    Else
-                                        SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "B"
-                                    End If
-                                ElseIf SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "B" Then
-                                    If Rnd >= (1 / 3) Then
-                                        SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "H"
-                                    Else
-                                        SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "A"
-                                    End If
-                                ElseIf SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "H" Then
-                                    If Rnd >= 0.5 Then
-                                        SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "A"
-                                    Else
-                                        SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "B"
-                                    End If
-                                End If
-                            End If
-                        Next Marker
-                    StartRow = StartRow + NbOfMrksInChr
-                    Next chromosome
-                Next SimulatedGenotype
-            End If
-            If RandomMissingDataRate > 0 And RandomMissingDataRate <= 1 Then
-                For SimulatedGenotype = 1 To SimulatedPopulationSize
-                    StartRow = 1
-                    For chromosome = 1 To NumberOfSimulatedChromosomes
-                        NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                        For Marker = 1 To NbOfMrksInChr
-                            If Rnd >= 1 - RandomMissingDataRate Then
-                                SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "-"
-                            End If
-                        Next Marker
-                    StartRow = StartRow + NbOfMrksInChr
-                    Next chromosome
-                Next SimulatedGenotype
-            End If
-
-
-
-'SSD - RIL
-        ElseIf SimulatedPopulationType = "SSD" Then 'it's fake but should work. however does not allow to test for biased estimates
-            For SimulatedGenotype = 1 To SimulatedPopulationSize
-                StartRow = 1
-                For chromosome = 1 To NumberOfSimulatedChromosomes
-                    ChrSize = VirtualMap(26 + chromosome, 11)
-                    NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                        MarkerPositionOld = 0
-                        Marker = StartRow
-                        If Rnd > 0.5 Then Genotype = "A" Else Genotype = "B"
-                        SimulatedGenotypes(Marker, SimulatedGenotype) = Genotype
-                        For Marker = 2 To NbOfMrksInChr
-                            MarkerPosition = VirtualMap(StartRow + Marker + 4, 5)
-                            IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-                            If MapFunctionSimul = 1 Then
-                                myRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-                                myR = 2 * myRF / (1 + 2 * myRF)
-                                IntervalWithPreviousMarkerInRF = myR ' fake conversion of recombination rate in SSD (the 'R')
-                                
-'                                IntervalWithPreviousMarkerInR_MartinAndHospital = 1 ' fake conversion of recombination rate in SSD (the 'R')
-                                
-                            ElseIf MapFunctionSimul = 2 Then
-                                temp = 2 * (IntervalWithPreviousMarker / 100)
-                                myRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-                                myR = 2 * myRF / (1 + 2 * myRF)
-                                IntervalWithPreviousMarkerInRF = myR ' fake conversion of recombination rate in SSD (the 'R')
-                            End If
-                            'Randomize (Rnd)
-                            If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                                If Genotype = "A" Then
-                                    Genotype = "B"
-                                ElseIf Genotype = "B" Then
-                                    Genotype = "A"
-                                End If
-                            End If
-                            SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = Genotype
-                            
-                            'simulate non-random trait
-                            If ChrQTL1 = chromosome Then
-                                If Marker = MarkerNumberQTL1 Then
-                                    If Genotype = "A" Then
-                                        myAAvalue = gauss * SD_AA_QTL1 + MeanAA_QTL1
-                                        SimulatedGenotypes(NumberOfSimulatedMarkers + 1, SimulatedGenotype) = Format(myAAvalue, "###.00")
-                                    ElseIf Genotype = "B" Then
-                                        myBBvalue = gauss * SD_BB_QTL1 + MeanBB_QTL1
-                                        SimulatedGenotypes(NumberOfSimulatedMarkers + 1, SimulatedGenotype) = Format(myBBvalue, "###.00")
-                                    End If
-                                End If
-                            End If
-                            MarkerPositionOld = MarkerPosition
-                        Next Marker
-                    StartRow = StartRow + NbOfMrksInChr
-                Next chromosome
-                
-                For mytrait = 1 To NumberOfSimulatedRandomTraits
-                    SimulatedGenotypes(NumberOfSimulatedMarkers + NumberOfSimulatedTraits + mytrait, SimulatedGenotype) = Format(100 + Rnd * 20, "###.00")
-                Next mytrait
-                
-            Next SimulatedGenotype
-            
-            If RandomErrorRate > 0 And RandomErrorRate <= 1 Then
-                For SimulatedGenotype = 1 To SimulatedPopulationSize
-                    StartRow = 1
-                    For chromosome = 1 To NumberOfSimulatedChromosomes
-                        NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                        For Marker = 1 To NbOfMrksInChr
-                            If Rnd >= 1 - RandomErrorRate Then
-                                If SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "A" Then
-                                    SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "B"
-                                ElseIf SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "B" Then
-                                    SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "A"
-                                End If
-                            End If
-                        Next Marker
-                    StartRow = StartRow + NbOfMrksInChr
-                    Next chromosome
-                Next SimulatedGenotype
-            End If
-            If RandomMissingDataRate > 0 And RandomMissingDataRate <= 1 Then
-                For SimulatedGenotype = 1 To SimulatedPopulationSize
-                    StartRow = 1
-                    For chromosome = 1 To NumberOfSimulatedChromosomes
-                        NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                        For Marker = 1 To NbOfMrksInChr
-                            If Rnd >= 1 - RandomMissingDataRate Then
-                                SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "-"
-                            End If
-                        Next Marker
-                    StartRow = StartRow + NbOfMrksInChr
-                    Next chromosome
-                Next SimulatedGenotype
-            End If
-            SimulatedGenotypes(NumberOfSimulatedMarkers + 1, 0) = "SimulatedQTrait_1"
-            
-            For mytrait = 1 To NumberOfSimulatedRandomTraits
-                SimulatedGenotypes(NumberOfSimulatedMarkers + NumberOfSimulatedTraits + mytrait, 0) = "RandomQTrait_" & mytrait
-            Next 'mytrait
-'        ElseIf SimulatedPopulationType = "SSD" Then
-'
-'        'en cours a finir
-'
-'            NumberOfSelfings = 6 ' Additional selfings after the F2 = S1 so 6 gives an F8
-'
-'            For SimulatedGenotype = 1 To SimulatedPopulationSize
-'                StartRow = 1
-'                For Chromosome = 1 To NumberOfSimulatedChromosomes
-'                    ChrSize = VirtualMap(26 + Chromosome, 11)
-'                    NbOfMrksInChr = VirtualMap(26 + Chromosome, 12)
-'                    MarkerPositionOld = 0
-'                    'Randomize (Rnd)
-'                    If Rnd > 0.5 Then genotype1 = "A" Else genotype1 = "B"
-'                    'Randomize (Rnd)
-'                    If Rnd > 0.5 Then genotype2 = "B" Else genotype2 = "A"
-'                    marker = StartRow
-'                    If genotype1 = "A" And genotype2 = "A" Then SimulatedGenotypes(marker, SimulatedGenotype) = "A"
-'                    If genotype1 = "B" And genotype2 = "B" Then SimulatedGenotypes(marker, SimulatedGenotype) = "B"
-'                    If genotype1 = "A" And genotype2 = "B" Then SimulatedGenotypes(marker, SimulatedGenotype) = "H"
-'                    If genotype1 = "B" And genotype2 = "A" Then SimulatedGenotypes(marker, SimulatedGenotype) = "H"
-'
-'                    For marker = 2 To NbOfMrksInChr
-'                        MarkerPosition = VirtualMap(StartRow + marker + 4, 5)
-'                        IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-'                        If MapFunctionSimul = 1 Then
-'                            IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-'                        ElseIf MapFunctionSimul = 2 Then
-'                                temp = 2 * (IntervalWithPreviousMarker / 100)
-'                                IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-'                        End If
-'                        'gamete 1
-'                        'Randomize (Rnd)
-'                        If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-'                            If genotype1 = "A" Then
-'                                genotype1 = "B"
-'                            ElseIf genotype1 = "B" Then
-'                                genotype1 = "A"
-'                            End If
-'                        End If
-'                        'gamete 2
-'                        'Randomize (Rnd)
-'                        If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-'                            If genotype2 = "A" Then
-'                                genotype2 = "B"
-'                            ElseIf genotype2 = "B" Then
-'                                genotype2 = "A"
-'                            End If
-'                        End If
-'                        If genotype1 = "A" And genotype2 = "A" Then SimulatedGenotypes(StartRow + marker - 1, SimulatedGenotype) = "AA"
-'                        If genotype1 = "B" And genotype2 = "B" Then SimulatedGenotypes(StartRow + marker - 1, SimulatedGenotype) = "BB"
-'                        If genotype1 = "A" And genotype2 = "B" Then SimulatedGenotypes(StartRow + marker - 1, SimulatedGenotype) = "AB"
-'                        If genotype1 = "B" And genotype2 = "A" Then SimulatedGenotypes(StartRow + marker - 1, SimulatedGenotype) = "BA"
-'                        MarkerPositionOld = MarkerPosition
-'                    Next marker
-'
-'                    StartRow = StartRow + NbOfMrksInChr
-'                Next Chromosome
-'
-'                For mytrait = 1 To NumberOfSimulatedRandomTraits
-'                    SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, SimulatedGenotype) = Format(100 + Rnd * 20, "###.00")
-'                Next mytrait
-'
-'                For SelfingGeneration = 1 To NumberOfSelfings
-'                StartRow = 1
-'
-'                    For Chromosome = 1 To NumberOfSimulatedChromosomes
-'                        ChrSize = VirtualMap(26 + Chromosome, 11)
-'                        NbOfMrksInChr = VirtualMap(26 + Chromosome, 12)
-'                        MarkerPositionOld = 0
-'
-'                        If Rnd > 0.5 Then genotype1 = "A" Else genotype1 = "B"
-'
-'                        If Rnd > 0.5 Then genotype2 = "B" Else genotype2 = "A"
-'                        marker = StartRow
-'                        If genotype1 = "A" And genotype2 = "A" Then SimulatedGenotypes(marker, SimulatedGenotype) = "A"
-'                        If genotype1 = "B" And genotype2 = "B" Then SimulatedGenotypes(marker, SimulatedGenotype) = "B"
-'                        If genotype1 = "A" And genotype2 = "B" Then SimulatedGenotypes(marker, SimulatedGenotype) = "H"
-'                        If genotype1 = "B" And genotype2 = "A" Then SimulatedGenotypes(marker, SimulatedGenotype) = "H"
-'
-'                        For marker = 2 To NbOfMrksInChr
-'                            MarkerPosition = VirtualMap(StartRow + marker + 4, 5)
-'                            IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-'                            If MapFunctionSimul = 1 Then
-'                                IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-'                            ElseIf MapFunctionSimul = 2 Then
-'                                    temp = 2 * (IntervalWithPreviousMarker / 100)
-'                                    IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-'                            End If
-'                            'gamete 1
-'                            'Randomize (Rnd)
-'                            If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-'                                If genotype1 = "A" Then
-'                                    genotype1 = "B"
-'                                ElseIf genotype1 = "B" Then
-'                                    genotype1 = "A"
-'                                End If
-'                            End If
-'                            'gamete 2
-'                            'Randomize (Rnd)
-'                            If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-'                                If genotype2 = "A" Then
-'                                    genotype2 = "B"
-'                                ElseIf genotype2 = "B" Then
-'                                    genotype2 = "A"
-'                                End If
-'                            End If
-'                            If genotype1 = "A" And genotype2 = "A" Then SimulatedGenotypes(StartRow + marker - 1, SimulatedGenotype) = "AA"
-'                            If genotype1 = "B" And genotype2 = "B" Then SimulatedGenotypes(StartRow + marker - 1, SimulatedGenotype) = "BB"
-'                            If genotype1 = "A" And genotype2 = "B" Then SimulatedGenotypes(StartRow + marker - 1, SimulatedGenotype) = "AB"
-'                            If genotype1 = "B" And genotype2 = "A" Then SimulatedGenotypes(StartRow + marker - 1, SimulatedGenotype) = "BA"
-'                            MarkerPositionOld = MarkerPosition
-'                        Next marker
-'
-'                        StartRow = StartRow + NbOfMrksInChr
-'                    Next Chromosome
-'
-'                Next SelfingGeneration
-'
-'            Next SimulatedGenotype
-'
-'            For mytrait = 1 To NumberOfSimulatedRandomTraits
-'                SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, 0) = "RandomQTrait_" & mytrait
-'            Next mytrait
-
-
-        End If
-        
-        Application.ScreenUpdating = True: DoEvents: Application.ScreenUpdating = False
-        
-        'Writing results
-       If NumberOfSimulatedPopulations > 1 And AutoBatchMapOn = 0 Then  ' write pop in a .txt file
-       
-            FileSaveName = "SimulPop_" & SimulatedPopulation & ".txt"
-            Open FileSaveName For Output As #1
-            If SimulatedPopulationType = "BC1" Then Print #1, "data type f2 backcross"
-            If SimulatedPopulationType = "F2" Then Print #1, "data type f2 intercross"
-            Print #1, Format(SimulatedPopulationSize, "###"); Spc(1); Format(NumberOfSimulatedMarkers, "###"); Spc(1); "0"
-            For Ligne = 1 To NumberOfSimulatedMarkers
-                NomLocus = VirtualMap(Ligne + 5, 4)
-                TexteLocus = ""
-                For Colonne = 1 To SimulatedPopulationSize
-                    TexteLocus = TexteLocus & SimulatedGenotypes(Ligne, Colonne)
-                Next
-                Print #1, ; "*" & NomLocus; Spc(1); TexteLocus
-            Next
-            Close #1
-            
-        ElseIf AutoBatchMapOn = 1 Then  ' write pop in a array
-            For i = 1 To NumberOfSimulatedMarkers
-                For j = 1 To SimulatedPopulationSize
-                    Data(j - 1, i - 1) = SimulatedGenotypes(i, j) 'stay in memory
-                Next
-            Next
-
-        ElseIf NumberOfSimulatedPopulations = 1 And AutoBatchMapOn = 0 Then  ' write pop in a sheet
-            Application.StatusBar = "Writing results"
-            ClearSimulatedPopulation
-            OutPutSheetName = "SimulPop"
-            'MsgBox SimulatedPopulationSize
-'            If MaxNumberOfColumns = 256 Then
-'                If SimulatedPopulationSize <= 254 And SimulatedPopulationSize <= 508 Then
-'                    ThisWorkbook.Sheets(OutPutSheetName).Range("B15").Resize(NumberOfSimulatedMarkers + 1 + NumberOfSimulatedRandomTraits, SimulatedPopulationSize + 1) = SimulatedGenotypes
-'                ElseIf SimulatedPopulationSize > 254 And SimulatedPopulationSize <= 508 Then
-'                    ThisWorkbook.Sheets(OutPutSheetName).Range("B15").Resize(NumberOfSimulatedMarkers + 1 + NumberOfSimulatedRandomTraits, 255) = SimulatedGenotypes
-'                    ReDim SimulatedGenotypesPlus(NumberOfSimulatedMarkers + 1 + NumberOfSimulatedRandomTraits, SimulatedPopulationSize - 254 + 1) As Variant
-'                    For i = 1 To NumberOfSimulatedMarkers
-'                        For j = 255 To SimulatedPopulationSize
-'                            SimulatedGenotypesPlus(i, j - 254) = SimulatedGenotypes(i, j)
-'                        Next
-'                    Next i
-'                    ThisWorkbook.Sheets("SimulPop+").Range("B15").Resize(NumberOfSimulatedMarkers + 1 + NumberOfSimulatedRandomTraits, SimulatedPopulationSize - 253) = SimulatedGenotypesPlus
-'                End If
-'            ElseIf MaxNumberOfColumns = 16384 Then
-                ThisWorkbook.Sheets(OutPutSheetName).Range("B15").Resize(NumberOfSimulatedMarkers + 1 + NumberOfSimulatedRandomTraits + 1, SimulatedPopulationSize + 1) = SimulatedGenotypes
-'            End If
-            Application.ScreenUpdating = False
-            ThisWorkbook.Sheets("SimulMap").Activate
-            Range("D6").Select
-            Range(Selection, Selection.End(xlDown)).Select
-            Selection.Copy
-            [N22].Select
-            ThisWorkbook.Sheets(OutPutSheetName).Activate
-            Range("B16").Select
-            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
-                :=False, Transpose:=False
-            [c15].Resize(1, SimulatedPopulationSize) = genotypeNames
-            Range("D4") = SimulatedPopulationType
-            Range("D5") = SimulatedPopulationSize
-            Range("D6") = NumberOfSimulatedMarkers
-            Range("D7") = NumberOfSimulatedRandomTraits + 1
-            Range("D8") = nbOfSupPops
-            Range("H4") = "A"
-            Range("H5") = "B"
-            Range("H6") = "C"
-            Range("H7") = "D"
-            Range("H8") = "H"
-            Range("H9") = "-"
-            Range("K4") = "2"
-            [b10] = "Simulated " & SimulatedPopulationType & " data " & Date & " - " & Time
-            Application.CutCopyMode = False
-            [K6] = ""
-            [B15].Select
-        End If
-Next SimulatedPopulation
-
-GoTo 1000
-900
-''Debug.Print  Chromosome
-''Debug.Print  StartRow
-''Debug.Print  marker
-''Debug.Print  SimulatedGenotype
-''Debug.Print  genotype
-''Debug.Print  StartRow + marker - 1
-1000
-'Application.ScreenUpdating = True
-'Next i
-
-If AutoBatchMapOn = 0 Then
-    Sheets("SimulMap").[K6] = ""
-    Application.StatusBar = False
-End If
-
-End Sub
-
-
-
-Public Sub Simulate_Population_From_Map_Save()
-Read_Parameters
-
-'On Error GoTo 900
-Application.ScreenUpdating = False
-If AutoBatchMapOn = 0 Then If AutoBatchMapOn = 0 Then Application.StatusBar = "Starting..."
-
-ThisWorkbook.Sheets("SimulMap").Activate
-
-'Population Parameters
-NumberOfSimulatedPopulations = [N15]
-SimulatedPopulationType = [N16] 'ONLY BC1 & F2 pops at this stage
-If SimulatedPopulationType <> "BC1" And SimulatedPopulationType <> "F2" And SimulatedPopulationType <> "BC2F1" Then MsgBox "BC1 or F2 populations only, sorry.": GoTo 1000
-SimulatedPopulationSize = [N17] 'NOT more than 508 individuals at this stage
-If AutoBatchMapOn = 0 And SimulatedPopulationSize > 508 And NumberOfSimulatedPopulations = 1 Then
-    SimulatedPopulationSize = 508
-    MsgBox "I can't simulate more than 508 individuals. If you need more indivuduals, please simulate 2 or more populations; this will generate Mapmaker/EXP compatible files that you can analyze using the BatchMap command."
-End If
-
-MapFunctionSimul = [N18]
-
-ChromosomeSDL1 = [R9]
-PositionSDL1 = [R10]
-ViabU = [R15] 'differential viability fA/fB for SDL1
-SDL1AbsoluteNumber = 0
-For i = 1 To ChromosomeSDL1 - 1
-    SDL1AbsoluteNumber = SDL1AbsoluteNumber + Cells(26 + i, 12)
-Next
-SDL1AbsoluteNumber = SDL1AbsoluteNumber + PositionSDL1
-
-ChromosomeSDL2 = [R11]
-PositionSDL2 = [R12]
-ViabV = [R17] 'differential viability fA/fB for SDL2
-SDL2AbsoluteNumber = 0
-For i = 1 To ChromosomeSDL2 - 1
-    SDL2AbsoluteNumber = SDL2AbsoluteNumber + Cells(26 + i, 12)
-Next
-SDL2AbsoluteNumber = SDL2AbsoluteNumber + PositionSDL2
-
-NumberOfSimulatedTraits = [N19]
-
-If NumberOfSimulatedPopulations > 1 Then
-    If AutoBatchMapOn = 0 Then
-        OperatingSystem = ThisWorkbook.Sheets("hide").Cells(8, 1)
-        OperatingSystem = UCase(Left(OperatingSystem, 3))
-        If OperatingSystem = "WIN" Then
-            FileSaveName = Application.GetSaveAsFilename(Title:="Locate the folder to export the data (Don't rename the MyPop.txt file please): ", InitialFileName:="MyPop.txt", fileFilter:="Text Files (*.txt), *.txt")
-        ElseIf OperatingSystem = "MAC" Then
-            FileSaveName = Application.GetSaveAsFilename(Title:="Locate the folder to export the data (Don't rename the MyPop.txt file please): ", InitialFileName:="MyPop.txt", fileFilter:="TEXT")
-        End If
-        If FileSaveName = False Then GoTo 1000
-        
-        LengthOfPath = Len(FileSaveName)
-        OutputPath = Left(FileSaveName, LengthOfPath - 9)
-        'MsgBox "The output folder will be " & Chr(13) & OutputPath
-    End If
-End If
-
-'Reading map parameters
-If AutoBatchMapOn = 0 Then Application.StatusBar = "Reading map parameters"
-
-VirtualMap = ThisWorkbook.Sheets("SimulMap").UsedRange.Value
-'TotalMapSize = [N22]
-NumberOfSimulatedMarkers = [N23]
-NumberOfSimulatedChromosomes = [R22]
-
-If NumberOfSimulatedPopulations > 1 And AutoBatchMapOn = 0 Then  ' simulate genotypes and write in txt files
-    For SimulatedPopulation = 1 To NumberOfSimulatedPopulations
-        If AutoBatchMapOn = 0 Then Application.StatusBar = "Simulating population " & SimulatedPopulation & " of " & NumberOfSimulatedPopulations
-        
-        ReDim SimulatedGenotypes(NumberOfSimulatedMarkers + 1, SimulatedPopulationSize + 1) As Variant
-        
-        StartRow = 1
-        
-        If SimulatedPopulationType = "BC1" Then
-            For chromosome = 1 To NumberOfSimulatedChromosomes
-                ChrSize = VirtualMap(26 + chromosome, 11)
-                NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                For SimulatedGenotype = 1 To SimulatedPopulationSize
-                    MarkerPositionOld = 0
-                    'Randomize (Rnd)
-                    If Rnd > 0.5 Then Genotype = "A" Else Genotype = "H"
-                    Marker = StartRow
-                    SimulatedGenotypes(Marker, SimulatedGenotype) = Genotype
-                    For Marker = 2 To NbOfMrksInChr
-                        MarkerPosition = VirtualMap(StartRow + Marker + 4, 5)
-                        IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-                        If MapFunctionSimul = 1 Then
-                            IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-                        ElseIf MapFunctionSimul = 2 Then
-                            temp = 2 * (IntervalWithPreviousMarker / 100)
-                            IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-                        End If
-                        'Randomize (Rnd)
-                        If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                            If Genotype = "A" Then
-                                Genotype = "H"
-                            ElseIf Genotype = "H" Then
-                                Genotype = "A"
-                            End If
-                        End If
-                        SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = Genotype
-                        MarkerPositionOld = MarkerPosition
-                    Next Marker
-                Next SimulatedGenotype
-                StartRow = StartRow + NbOfMrksInChr
-            Next chromosome
-            
-        ElseIf SimulatedPopulationType = "F2" Then
-            For chromosome = 1 To NumberOfSimulatedChromosomes
-                ChrSize = VirtualMap(26 + chromosome, 11)
-                NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                For SimulatedGenotype = 1 To SimulatedPopulationSize
-                    MarkerPositionOld = 0
-                    'Randomize (Rnd)
-                    If Rnd > 0.5 Then genotype1 = "A" Else genotype1 = "B"
-                    'Randomize (Rnd)
-                    If Rnd > 0.5 Then genotype2 = "B" Else genotype2 = "A"
-                    Marker = StartRow
-                    If genotype1 = "A" And genotype2 = "A" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "A"
-                    If genotype1 = "B" And genotype2 = "B" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "B"
-                    If genotype1 = "A" And genotype2 = "B" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "H"
-                    If genotype1 = "B" And genotype2 = "A" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "H"
-                    
-                    For Marker = 2 To NbOfMrksInChr
-                        MarkerPosition = VirtualMap(StartRow + Marker + 4, 5)
-                        IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-                        If MapFunctionSimul = 1 Then
-                            IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-                        ElseIf MapFunctionSimul = 2 Then
-                                temp = 2 * (IntervalWithPreviousMarker / 100)
-                                IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-                        End If
-                        'gamete 1
-                        'Randomize (Rnd)
-                        If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                            If genotype1 = "A" Then
-                                genotype1 = "B"
-                            ElseIf genotype1 = "B" Then
-                                genotype1 = "A"
-                            End If
-                        End If
-                        'gamete 2
-                        'Randomize (Rnd)
-                        If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                            If genotype2 = "A" Then
-                                genotype2 = "B"
-                            ElseIf genotype2 = "B" Then
-                                genotype2 = "A"
-                            End If
-                        End If
-                        If genotype1 = "A" And genotype2 = "A" Then SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "A"
-                        If genotype1 = "B" And genotype2 = "B" Then SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "B"
-                        If genotype1 = "A" And genotype2 = "B" Then SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "H"
-                        If genotype1 = "B" And genotype2 = "A" Then SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "H"
-                        MarkerPositionOld = MarkerPosition
-                    Next Marker
-                Next SimulatedGenotype
-                StartRow = StartRow + NbOfMrksInChr
-            Next chromosome
-        End If
-        
-        'Writing in .txt file
-       
-        FileSaveName = "SimulPop_" & SimulatedPopulation & ".txt"
-        Open FileSaveName For Output As #1
-        If SimulatedPopulationType = "BC1" Then Print #1, "data type f2 backcross"
-        If SimulatedPopulationType = "F2" Then Print #1, "data type f2 intercross"
-        Print #1, Format(SimulatedPopulationSize, "###"); Spc(1); Format(NumberOfSimulatedMarkers, "###"); Spc(1); "0"
-        For Ligne = 1 To NumberOfSimulatedMarkers
-            NomLocus = VirtualMap(Ligne + 5, 4)
-            TexteLocus = ""
-            For Colonne = 1 To SimulatedPopulationSize
-                TexteLocus = TexteLocus & SimulatedGenotypes(Ligne, Colonne)
-            Next
-            Print #1, ; "*" & NomLocus; Spc(1); TexteLocus
-        Next
-        Close #1
-
-    Next SimulatedPopulation
-    
-ElseIf NumberOfSimulatedPopulations = 1 Or AutoBatchMapOn = 1 Then 'if only one population, write in the SimulPop sheet
-    If AutoBatchMapOn = 0 Then Application.StatusBar = "Simulating population"
-    ReDim SimulatedGenotypes(NumberOfSimulatedMarkers + 1 + NumberOfSimulatedTraits, SimulatedPopulationSize + 1) As Variant
-    StartRow = 1
-    
-    If SimulatedPopulationType = "BC1" And ChromosomeSDL1 = 0 Then 'there is no SDL (Segregation Distortion Locus) in the genome
-        For chromosome = 1 To NumberOfSimulatedChromosomes
-            ChrSize = VirtualMap(26 + chromosome, 11)
-            NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-            For SimulatedGenotype = 1 To SimulatedPopulationSize
-                MarkerPositionOld = 0
-                Marker = StartRow
-                If Rnd > 0.5 Then Genotype = "A" Else Genotype = "H"
-                SimulatedGenotypes(Marker, SimulatedGenotype) = Genotype
-                For Marker = 2 To NbOfMrksInChr
-                    MarkerPosition = VirtualMap(StartRow + Marker + 4, 5)
-                    IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-                    If MapFunctionSimul = 1 Then
-                        IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-                    ElseIf MapFunctionSimul = 2 Then
-                        temp = 2 * (IntervalWithPreviousMarker / 100)
-                        IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-                    End If
-                    If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                        If Genotype = "A" Then
-                            Genotype = "H"
-                        ElseIf Genotype = "H" Then
-                            Genotype = "A"
-                        End If
-                    End If
-                    SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = Genotype
-                    MarkerPositionOld = MarkerPosition
-                Next Marker
-                For mytrait = 1 To NumberOfSimulatedTraits
-                    SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, SimulatedGenotype) = Format(100 + Rnd * 20, "###.00")
-                Next mytrait
-            Next SimulatedGenotype
-            StartRow = StartRow + NbOfMrksInChr
-        Next chromosome
-        For mytrait = 1 To NumberOfSimulatedTraits
-            SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, 0) = "RandomQTrait_" & mytrait
-        Next mytrait
-    
-    ElseIf SimulatedPopulationType = "BC2F1" And ChromosomeSDL1 = 0 Then 'there is no SDL (Segregation Distortion Locus) in the genome
-        BC2FamilySize = 4
-        BC2PopulationSize = SimulatedPopulationSize * BC2FamilySize
-        For SimulatedGenotype = 1 To SimulatedPopulationSize
-50
-            StartRow = 1
-            For chromosome = 1 To NumberOfSimulatedChromosomes
-                ChrSize = VirtualMap(26 + chromosome, 11)
-                NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                    MarkerPositionOld = 0
-                    Marker = StartRow
-                    If Rnd > 0.5 Then Genotype = "A" Else Genotype = "H"
-                    SimulatedGenotypes(Marker, SimulatedGenotype) = Genotype
-                    For Marker = 2 To NbOfMrksInChr
-                        MarkerPosition = VirtualMap(StartRow + Marker + 4, 5)
-                        IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-                        If MapFunctionSimul = 1 Then
-                            IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-                        ElseIf MapFunctionSimul = 2 Then
-                            temp = 2 * (IntervalWithPreviousMarker / 100)
-                            IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-                        End If
-                        If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                            If Genotype = "A" Then
-                                Genotype = "H"
-                            ElseIf Genotype = "H" Then
-                                Genotype = "A"
-                            End If
-                        End If
-                        SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = Genotype
-                        MarkerPositionOld = MarkerPosition
-                    Next Marker
-                StartRow = StartRow + NbOfMrksInChr
-            Next chromosome
-'        For mytrait = 1 To NumberOfSimulatedTraits
-'            SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, SimulatedGenotype) = Format(100 + Rnd * 20, "###.00")
-'        Next mytrait
-        Next SimulatedGenotype
-'        For mytrait = 1 To NumberOfSimulatedTraits
-'            SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, 0) = "RandomQTrait_" & mytrait
-'        Next mytrait
-    
-    ElseIf SimulatedPopulationType = "BC1" And ChromosomeSDL1 > 0 Then 'there is a SDL (Segregation Distortion Locus) in the genome
-    ''Debug.Print "zzz"
-        For SimulatedGenotype = 1 To SimulatedPopulationSize
-100
-            StartRow = 1
-            For chromosome = 1 To NumberOfSimulatedChromosomes
-                ChrSize = VirtualMap(26 + chromosome, 11)
-                NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-                MarkerPositionOld = 0
-                Marker = StartRow
-                If Rnd > 0.5 Then Genotype = "A" Else Genotype = "H"
-                SimulatedGenotypes(Marker, SimulatedGenotype) = Genotype
-                For Marker = 2 To NbOfMrksInChr
-                    MarkerPosition = VirtualMap(StartRow + Marker + 4, 5)
-                    IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-                    If MapFunctionSimul = 1 Then
-                        IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-                    ElseIf MapFunctionSimul = 2 Then
-                        temp = 2 * (IntervalWithPreviousMarker / 100)
-                        IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-                    End If
-                    If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                        If Genotype = "A" Then
-                            Genotype = "H"
-                        ElseIf Genotype = "H" Then
-                            Genotype = "A"
-                        End If
-                    End If
-                    SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = Genotype
-                    MarkerPositionOld = MarkerPosition
-                Next Marker
-                StartRow = StartRow + NbOfMrksInChr
-            Next chromosome
-            
-            'fA/fH = u
-            'frequency of A = fA = u /(1+u)
-            'frequency of B = fB = 1 /(1+u)
-            myRandkill = Rnd
-            If ViabU < 1 Then 'selection against AA genotypes or A gametes
-                If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "A" And myRandkill > (ViabU / (1 + ViabU)) Then  'sorry, bad luck... you're dead, gamete A!
-                'kill individual/gamete and simulate again
-                    GoTo 100
-                End If
-            ElseIf ViabU > 1 Then 'selection against H genotypes or B gametes
-                If SimulatedGenotypes(SDL1AbsoluteNumber, SimulatedGenotype) = "H" And myRandkill < (1 / (1 + ViabU)) Then  'sorry, bad luck... you're dead, gamete B!
-                'kill individual/gamete and simulate again
-                    GoTo 100
-                End If
-            End If
-            If ChromosomeSDL2 > 0 Then
-                If ViabV < 1 Then 'selection against AA genotypes or A gametes
-                    If SimulatedGenotypes(SDL2AbsoluteNumber, SimulatedGenotype) = "A" And myRandkill > (ViabV / (1 + ViabV)) Then  'sorry, bad luck... you're dead, gamete A!
-                    'kill individual/gamete and simulate again
-                        GoTo 100
-                    End If
-                ElseIf ViabV > 1 Then 'selection against H genotypes or B gametes
-                    If SimulatedGenotypes(SDL2AbsoluteNumber, SimulatedGenotype) = "H" And myRandkill < (1 / (1 + ViabV)) Then  'sorry, bad luck... you're dead, gamete B!
-                    'kill individual/gamete and simulate again
-                        GoTo 100
-                    End If
-                End If
-            End If
-            For mytrait = 1 To NumberOfSimulatedTraits
-                SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, SimulatedGenotype) = Format(100 + Rnd * 20, "###.00")
-            Next mytrait
-        Next SimulatedGenotype
-        For mytrait = 1 To NumberOfSimulatedTraits
-            SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, 0) = "RandomQTrait_" & mytrait
-        Next mytrait
-    
-    ElseIf SimulatedPopulationType = "F2" Then
-        For chromosome = 1 To NumberOfSimulatedChromosomes
-            ChrSize = VirtualMap(26 + chromosome, 11)
-            NbOfMrksInChr = VirtualMap(26 + chromosome, 12)
-            For SimulatedGenotype = 1 To SimulatedPopulationSize
-                MarkerPositionOld = 0
-                'Randomize (Rnd)
-                If Rnd > 0.5 Then genotype1 = "A" Else genotype1 = "B"
-                'Randomize (Rnd)
-                If Rnd > 0.5 Then genotype2 = "B" Else genotype2 = "A"
-                Marker = StartRow
-                If genotype1 = "A" And genotype2 = "A" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "A"
-                If genotype1 = "B" And genotype2 = "B" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "B"
-                If genotype1 = "A" And genotype2 = "B" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "H"
-                If genotype1 = "B" And genotype2 = "A" Then SimulatedGenotypes(Marker, SimulatedGenotype) = "H"
-                
-                For Marker = 2 To NbOfMrksInChr
-                    MarkerPosition = VirtualMap(StartRow + Marker + 4, 5)
-                    IntervalWithPreviousMarker = MarkerPosition - MarkerPositionOld
-                    If MapFunctionSimul = 1 Then
-                        IntervalWithPreviousMarkerInRF = 0.5 * (1 - Exp(-2 * (IntervalWithPreviousMarker / 100))) ' Haldane inverse function
-                    ElseIf MapFunctionSimul = 2 Then
-                            temp = 2 * (IntervalWithPreviousMarker / 100)
-                            IntervalWithPreviousMarkerInRF = 0.5 * ((Exp(temp) - Exp(-temp)) / (Exp(temp) + Exp(-temp))) 'Kosambi inverse funciton
-                    End If
-                    'gamete 1
-                    'Randomize (Rnd)
-                    If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                        If genotype1 = "A" Then
-                            genotype1 = "B"
-                        ElseIf genotype1 = "B" Then
-                            genotype1 = "A"
-                        End If
-                    End If
-                    'gamete 2
-                    'Randomize (Rnd)
-                    If Rnd > 1 - IntervalWithPreviousMarkerInRF Then  'a recombination occurred
-                        If genotype2 = "A" Then
-                            genotype2 = "B"
-                        ElseIf genotype2 = "B" Then
-                            genotype2 = "A"
-                        End If
-                    End If
-                    If genotype1 = "A" And genotype2 = "A" Then SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "A"
-                    If genotype1 = "B" And genotype2 = "B" Then SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "B"
-                    If genotype1 = "A" And genotype2 = "B" Then SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "H"
-                    If genotype1 = "B" And genotype2 = "A" Then SimulatedGenotypes(StartRow + Marker - 1, SimulatedGenotype) = "H"
-                    MarkerPositionOld = MarkerPosition
-                Next Marker
-            Next SimulatedGenotype
-            For mytrait = 1 To NumberOfSimulatedTraits
-                SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, SimulatedGenotype) = Format(100 + Rnd * 20, "###.00")
-            Next mytrait
-            StartRow = StartRow + NbOfMrksInChr
-        Next chromosome
-        For mytrait = 1 To NumberOfSimulatedTraits
-            SimulatedGenotypes(NumberOfSimulatedMarkers + mytrait, 0) = "RandomQTrait_" & mytrait
-        Next mytrait
-    End If
-    
-    If AutoBatchMapOn = 0 Then
-        Application.StatusBar = "Writing results"
-        ClearSimulatedPopulation
-        OutPutSheetName = "SimulPop"
-        'MsgBox SimulatedPopulationSize
-        If SimulatedPopulationSize <= 254 And SimulatedPopulationSize <= 508 Then
-            ThisWorkbook.Sheets(OutPutSheetName).Range("B15").Resize(NumberOfSimulatedMarkers + 1 + NumberOfSimulatedTraits, SimulatedPopulationSize + 1) = SimulatedGenotypes
-        ElseIf SimulatedPopulationSize > 254 And SimulatedPopulationSize <= 508 Then
-            ThisWorkbook.Sheets(OutPutSheetName).Range("B15").Resize(NumberOfSimulatedMarkers + 1 + NumberOfSimulatedTraits, 255) = SimulatedGenotypes
-            ReDim SimulatedGenotypesPlus(NumberOfSimulatedMarkers + 1 + NumberOfSimulatedTraits, SimulatedPopulationSize - 254 + 1) As Variant
-            For i = 1 To NumberOfSimulatedMarkers
-                For j = 255 To SimulatedPopulationSize
-                    SimulatedGenotypesPlus(i, j - 254) = SimulatedGenotypes(i, j)
-                Next
-            Next i
-            ThisWorkbook.Sheets("SimulPop+").Range("B15").Resize(NumberOfSimulatedMarkers + 1 + NumberOfSimulatedTraits, SimulatedPopulationSize - 253) = SimulatedGenotypesPlus
-        End If
-        Application.ScreenUpdating = False
-        ThisWorkbook.Sheets("SimulMap").Activate
-        Range("D6").Select
-        Range(Selection, Selection.End(xlDown)).Select
-        Selection.Copy
-        [N22].Select
-        ThisWorkbook.Sheets(OutPutSheetName).Activate
-        Range("B16").Select
-        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
-            :=False, Transpose:=False
-            
-        Range("D4") = SimulatedPopulationType
-        Range("D5") = SimulatedPopulationSize
-        Range("D6") = NumberOfSimulatedMarkers
-        Range("D7") = NumberOfSimulatedTraits
-        Range("H4") = "A"
-        Range("H5") = "B"
-        Range("H6") = "C"
-        Range("H7") = "D"
-        Range("H8") = "H"
-        Range("H9") = "-"
-        Range("K4") = "2"
-        If SimulatedPopulationType = "BC1" Then
-            [b10] = "Simulated BC1 data " & Date & " - " & Time
-        ElseIf SimulatedPopulationType = "F2" Then
-            [b10] = "Simulated F2 data " & Date & " - " & Time
-        End If
-        Application.CutCopyMode = False
-        [B15].Select
-    ElseIf AutoBatchMapOn = 1 Then
-'    MsgBox SimulatedPopulationSize
-        For i = 1 To NumberOfSimulatedMarkers
-            For j = 1 To SimulatedPopulationSize
-                Data(j - 1, i - 1) = SimulatedGenotypes(i, j) 'stay in memory
-            Next
-        Next
-        OutPutSheetName = "Data"
-        
-        ThisWorkbook.Sheets(OutPutSheetName).Range("D4") = SimulatedPopulationType
-        ThisWorkbook.Sheets(OutPutSheetName).Range("D5") = SimulatedPopulationSize
-        ThisWorkbook.Sheets(OutPutSheetName).Range("D6") = NumberOfSimulatedMarkers
-        ThisWorkbook.Sheets(OutPutSheetName).Range("D7") = "0"
-        ThisWorkbook.Sheets(OutPutSheetName).Range("H4") = "A"
-        ThisWorkbook.Sheets(OutPutSheetName).Range("H5") = "B"
-        ThisWorkbook.Sheets(OutPutSheetName).Range("H6") = "C"
-        ThisWorkbook.Sheets(OutPutSheetName).Range("H7") = "D"
-        ThisWorkbook.Sheets(OutPutSheetName).Range("H8") = "H"
-        ThisWorkbook.Sheets(OutPutSheetName).Range("H9") = "-"
-        ThisWorkbook.Sheets(OutPutSheetName).Range("K4") = "2"
-    End If
-    
-End If
-
-GoTo 1000
-900
-''Debug.Print  Chromosome
-''Debug.Print  StartRow
-''Debug.Print  marker
-''Debug.Print  SimulatedGenotype
-''Debug.Print  genotype
-''Debug.Print  StartRow + marker - 1
-1000
-'Application.ScreenUpdating = True
-'Next i
-If AutoBatchMapOn = 0 Then Application.StatusBar = False
-End Sub
-
-Public Sub ClearSimulatedPopulation()
-    Application.ScreenUpdating = False
-    ThisWorkbook.Sheets("SimulPop").Activate
-    Range("B15:xfd1048576").ClearContents
-    Range("D4").ClearContents
-    Range("D5").ClearContents
-    Range("D6").ClearContents
-    Range("D7").ClearContents
-    Range("H4").ClearContents
-    Range("H5").ClearContents
-    Range("H6").ClearContents
-    Range("H7").ClearContents
-    Range("H8").ClearContents
-    Range("H9").ClearContents
-    Range("K4").ClearContents
-    [b10].ClearContents
-'    ThisWorkbook.Sheets("SimulPop+").Activate
-'    Range("B15:IV60000").ClearContents
-'    Range("D4").ClearContents
-'    Range("D5").ClearContents
-'    Range("D6").ClearContents
-'    Range("D7").ClearContents
-'    Range("H4").ClearContents
-'    Range("H5").ClearContents
-'    Range("H6").ClearContents
-'    Range("H7").ClearContents
-'    Range("H8").ClearContents
-'    Range("H9").ClearContents
-'    Range("K4").ClearContents
-'    [B13].ClearContents
-    ThisWorkbook.Sheets("SimulPop").Activate
-If AutoBatchMapOn = 0 And ClearAllResultsMode = 0 Then Application.ScreenUpdating = True
-End Sub
-
-
-Public Sub Clear_BatchMap_Results()
-Application.ScreenUpdating = False
-If ThisWorkbook.Sheets("BatchMap").[h8] <> "" Then
-    If ClearAllResultsMode = 0 Then
-        msg = "Are you sure you want to clear the batch results?"
-        Style = vbYesNo + vbCritical + vbDefaultButton1
-        Title = "Clear results"
-        Ctxt = 1000
-        response = MsgBox(msg, Style, Title)
-    End If
-    
-    If response = vbYes Or ClearAllResultsMode = 1 Then
-        If MaxNumberOfColumns = 256 Then
-            ThisWorkbook.Sheets("BatchMap").Range("A5:IV60000").ClearContents
-            ThisWorkbook.Sheets("BatchMap").Range("H5:IV6").Interior.ColorIndex = xlNone
-        Else
-            ThisWorkbook.Sheets("BatchMap").Range("A5:XFD60000").ClearContents
-            ThisWorkbook.Sheets("BatchMap").Range("H5:XFD6").Interior.ColorIndex = xlNone
-        End If
-        ThisWorkbook.Sheets("BatchMap").[D4].ClearContents
-        ThisWorkbook.Sheets("BatchMap").[f4].ClearContents
-        ThisWorkbook.Sheets("BatchMap").Range("C8:G60000").Interior.ColorIndex = xlNone
-        
-    Else
-        GoTo 1000
-    End If
-End If
-'[H8].Select
-1000
-'If AutoBatchMapOn = 0 And ClearAllResultsMode = 0 Then Application.ScreenUpdating = True
-End Sub
-
-Public Sub Clear_BigBatchMap_Results()
-Application.ScreenUpdating = False
-If [c6] <> "" Then
-    If ClearAllResultsMode = 0 Then
-        msg = "Are you sure you want to clear the batch results?"
-        Style = vbYesNo + vbCritical + vbDefaultButton1
-        Title = "Clear results"
-        Ctxt = 1000
-        response = MsgBox(msg, Style, Title)
-    End If
-    If response = vbYes Or ClearAllResultsMode = 1 Then
-        If MaxNumberOfColumns = 256 Then
-            ThisWorkbook.Sheets("BigBatch").Range("A4:IV60000").ClearContents
-        Else
-            ThisWorkbook.Sheets("BigBatch").Range("A4:XFD60000").ClearContents
-        End If
-    Else
-        GoTo 1000
-    End If
-End If
-[c6].Select
-1000
-If AutoBatchMapOn = 0 And ClearAllResultsMode = 0 Then Application.ScreenUpdating = True
-End Sub
-
-Public Sub Compute_Stats_Batch()
-'On Error GoTo 900
-Application.ScreenUpdating = False
-Application.StatusBar = "Computing statistics..."
-
-ThisWorkbook.Sheets("BatchMap").Activate
-'Expected cM values from simulated map
-NumberOfMarkers = ThisWorkbook.Sheets("SimulMap").[N23]
-For i = 2 To NumberOfMarkers
-    ExpectedRelativeDistance = ThisWorkbook.Sheets("SimulMap").Cells(i + 5, 5) - ThisWorkbook.Sheets("SimulMap").Cells(i + 4, 5)
-    ThisWorkbook.Sheets("BatchMap").Cells(i + 6, 6) = ExpectedRelativeDistance
-    If ThisWorkbook.Sheets("SimulMap").Cells(i + 4, 2) <> ThisWorkbook.Sheets("SimulMap").Cells(i + 5, 2) Then 'new chr is detected
-        ThisWorkbook.Sheets("BatchMap").Cells(i + 6, 6).ClearContents
-    End If
-Next i
-
-NumberOfProcessedFiles = [D4]
-'Average etc on batch results
-For i = 1 To NumberOfMarkers
-    mkchr = ThisWorkbook.Sheets("SimulMap").Cells(i + 5, 2)
-    ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 1) = mkchr
-    SumOfDistances = 0
-    MinDist = 1000000
-    MaxDist = 0
-    ExpectedRelativeDistance = ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 6)
-    If ExpectedRelativeDistance <> "" Then
-        For SimPop = 1 To NumberOfProcessedFiles
-            BatchDist = ThisWorkbook.Sheets("BatchMap").Cells(i + 7, SimPop + 7)
-            SumOfDistances = SumOfDistances + BatchDist
-            If BatchDist < MinDist Then MinDist = BatchDist
-            If BatchDist > MaxDist Then MaxDist = BatchDist
-        Next
-        AverageDistance = SumOfDistances / NumberOfProcessedFiles
-        ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 3) = MinDist
-        ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 4) = MaxDist
-        ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 5) = AverageDistance
-        ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 7) = AverageDistance - ExpectedRelativeDistance
-    End If
-Next i
-
-For SimPop = 1 To NumberOfProcessedFiles
-    TotalMapSize = 0
-    For i = 1 To NumberOfMarkers
-        BatchDist = ThisWorkbook.Sheets("BatchMap").Cells(i + 7, SimPop + 7)
-        If BatchDist <> "" Then
-            TotalMapSize = TotalMapSize + BatchDist
-        End If
-    Next
-    ThisWorkbook.Sheets("BatchMap").Cells(5, SimPop + 7) = TotalMapSize
-    ThisWorkbook.Sheets("BatchMap").Cells(6, SimPop + 7) = TotalMapSize / NumberOfMarkers 'mk density
-Next
-     
-SumAverageSize = 0
-SumAverageDensity = 0
-MinSize = 1000000
-MaxSize = 0
-MinDensity = 1000000
-MaxDensity = 0
-
-For SimPop = 1 To NumberOfProcessedFiles
-    Mapsize = ThisWorkbook.Sheets("BatchMap").Cells(5, SimPop + 7)
-    mapdensity = ThisWorkbook.Sheets("BatchMap").Cells(6, SimPop + 7)
-    If Mapsize > MaxSize Then MaxSize = Mapsize
-    If Mapsize < MinSize Then MinSize = Mapsize
-    If mapdensity > MaxDensity Then MaxDensity = mapdensity
-    If mapdensity < MinDensity Then MinDensity = mapdensity
-    SumAverageSize = SumAverageSize + Mapsize
-    SumAverageDensity = SumAverageDensity + mapdensity
-Next
-AverageSize = SumAverageSize / NumberOfProcessedFiles
-AverageDensity = SumAverageDensity / NumberOfProcessedFiles
-
-[C5] = MinSize
-[D5] = MaxSize
-[c6] = MinDensity
-[D6] = MaxDensity
-[E5] = AverageSize
-[E6] = AverageDensity
-
-[G5] = "Total map size"
-[G6] = "Marker density"
-[A7] = "Chr"
-[b7] = "Marker"
-[C7] = "Min"
-[D7] = "Max"
-[E7] = "Average"
-[F7] = "Expected"
-[G7] = "Diff."
-
-Range(Cells(8, 3), Cells(7 + NumberOfMarkers, 7)).Select
-Selection.Interior.ColorIndex = 15
-Range(Cells(5, 8), Cells(6, 256)).Select
-Selection.Interior.ColorIndex = 15
-
-GoTo 1000
-900
-MsgBox "An error occurred."
-1000
-[h8].Select
-Application.StatusBar = False
-'Application.ScreenUpdating = True
-End Sub
-
-Public Sub Compute_Stats_Batch_Chi2()
-'On Error GoTo 900
-Application.ScreenUpdating = False
-Application.StatusBar = "Computing statistics..."
-
-ThisWorkbook.Sheets("BatchMap").Activate
-'Expected cM values from simulated map
-NumberOfMarkers = ThisWorkbook.Sheets("SimulMap").[N23]
-For i = 2 To NumberOfMarkers
-    ExpectedRelativeDistance = ThisWorkbook.Sheets("SimulMap").Cells(i + 5, 5) - ThisWorkbook.Sheets("SimulMap").Cells(i + 4, 5)
-    'keep it or it won't work
-    'ThisWorkbook.Sheets("BatchMap").Cells(i + 6, 6) = ExpectedRelativeDistance
-    If ThisWorkbook.Sheets("SimulMap").Cells(i + 4, 2) <> ThisWorkbook.Sheets("SimulMap").Cells(i + 5, 2) Then 'new chr is detected
-        ThisWorkbook.Sheets("BatchMap").Cells(i + 6, 6).ClearContents
-    End If
-Next i
-
-NumberOfProcessedFiles = ThisWorkbook.Sheets("BatchMap").[D4]
-
-MyBatchresults = ThisWorkbook.Sheets("BatchMap").Range(Cells(1, 1), Cells(NumberOfMarkers + 7, NumberOfProcessedFiles + 7)).Value
-
-'Average etc on batch results
-For i = 1 To NumberOfMarkers
-    mkchr = ThisWorkbook.Sheets("SimulMap").Cells(i + 5, 2)
-    ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 1) = mkchr
-    SumOfChi2 = 0
-    MinChi2 = 1000000
-    MaxChi2 = 0
-    'ExpectedRelativeDistance = ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 6)
-    If ExpectedRelativeDistance <> "" Then
-        For SimPop = 1 To NumberOfProcessedFiles
-            BatchChi2 = MyBatchresults(i + 7, SimPop + 7)
-            SumOfChi2 = SumOfChi2 + BatchChi2
-            If BatchChi2 < MinChi2 Then MinChi2 = BatchChi2
-            If BatchChi2 > MaxChi2 Then MaxChi2 = BatchChi2
-        Next
-        AverageChi2 = SumOfChi2 / NumberOfProcessedFiles
-        ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 3) = MinChi2
-        ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 4) = MaxChi2
-        ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 5) = AverageChi2
-    End If
-Next i
-
-'ranks
-SDL1on = ThisWorkbook.Sheets("SimulMap").[R9]
-SDL2on = ThisWorkbook.Sheets("SimulMap").[R11]
-If SDL1on = 1 Then SDL1number = ThisWorkbook.Sheets("SimulMap").[R10]
-If SDL2on = 1 Then SDL2number = ThisWorkbook.Sheets("SimulMap").[R12]
-'For i = 2 To NumberOfMarkers - 1
-'    ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 6) = 0
-'        'ExpectedRelativeDistance = ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 6)
-'    For SimPop = 1 To NumberOfProcessedFiles
-'        BatchChi2 = MyBatchresults(i + 7, SimPop + 7)
-'        BatchChi2Before = MyBatchresults(i + 6, SimPop + 7)
-'        BatchChi2After = MyBatchresults(i + 8, SimPop + 7)
-'        If BatchChi2 < BatchChi2Before Or BatchChi2 < BatchChi2After Then
-'            ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 6) = ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 6) + 1
-'            If i = SDL1number Or i = SDL2number Then
-'                ThisWorkbook.Sheets("BatchMap").Cells(i + 7, SimPop + 7).Select
-'                Selection.Interior.ColorIndex = 15
-'            End If
-'        End If
-''        If BatchChi2 < BatchChi2Before Then
-''            If i = SDL1number Or i = SDL2number Then
-''                ThisWorkbook.Sheets("BatchMap").Cells(i + 6, 7) = ThisWorkbook.Sheets("BatchMap").Cells(i + 6, 7) + 1
-''                ThisWorkbook.Sheets("BatchMap").Cells(i + 6, SimPop + 7).Select
-''                Selection.Interior.ColorIndex = 15
-''            End If
-''        End If
-''        If BatchChi2 < BatchChi2After Then
-''            If i = SDL1number Or i = SDL2number Then
-''                ThisWorkbook.Sheets("BatchMap").Cells(i + 8, 7) = ThisWorkbook.Sheets("BatchMap").Cells(i + 8, 7) + 1
-''                ThisWorkbook.Sheets("BatchMap").Cells(i + 8, SimPop + 7).Select
-''                Selection.Interior.ColorIndex = 15
-''            End If
-''        End If
-'    Next
-'    ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 6) = 100 * (ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 6) / NumberOfProcessedFiles)
-'    ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 7) = 100 - ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 6)
-''    If i = SDL1number Or i = SDL2number Then
-'''        ThisWorkbook.Sheets("BatchMap").Cells(i + 6, 7) = 100 * (ThisWorkbook.Sheets("BatchMap").Cells(i + 6, 7) / NumberOfProcessedFiles)
-'''        ThisWorkbook.Sheets("BatchMap").Cells(i + 8, 7) = 100 * (ThisWorkbook.Sheets("BatchMap").Cells(i + 8, 7) / NumberOfProcessedFiles)
-''    End If
-'Next i
-
-
-For SimPop = 1 To NumberOfProcessedFiles
-    SDL1isNotaPeak = 0
-    mychi2SDL1 = ThisWorkbook.Sheets("BatchMap").Cells(SDL1number + 7, SimPop + 7)
-    For i = 1 To NumberOfMarkers
-        myChi2 = ThisWorkbook.Sheets("BatchMap").Cells(i + 7, SimPop + 7)
-        If myChi2 > mychi2SDL1 Then
-            'it's a peak, not on SDL1
-            ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 7) = ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 7) + 1
-                ThisWorkbook.Sheets("BatchMap").Cells(i + 7, SimPop + 7).Select
-                Selection.Interior.ColorIndex = 15
-            SDL1isNotaPeak = 1
-        End If
-        Next
-        If SDL1isNotaPeak = 1 Then 'in this pop
-            'SDL1 is not a peak
-            ThisWorkbook.Sheets("BatchMap").Cells(SDL1number + 7, 6) = ThisWorkbook.Sheets("BatchMap").Cells(SDL1number + 7, 6) + 1
-        End If
-Next
-
-For i = 1 To NumberOfMarkers
-    ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 7) = 100 * (ThisWorkbook.Sheets("BatchMap").Cells(i + 7, 7)) / NumberOfProcessedFiles
-Next
-
-ThisWorkbook.Sheets("BatchMap").Cells(SDL1number + 7, 6) = 100 * (ThisWorkbook.Sheets("BatchMap").Cells(SDL1number + 7, 6) / NumberOfProcessedFiles)
-ThisWorkbook.Sheets("BatchMap").Cells(SDL1number + 7, 7) = 100 - ThisWorkbook.Sheets("BatchMap").Cells(SDL1number + 7, 6)
-
-'For SimPop = 1 To NumberOfProcessedFiles
-'    TotalMapSize = 0
-'    For i = 1 To NumberOfMarkers
-'        BatchDist = ThisWorkbook.Sheets("BatchMap").Cells(i + 7, SimPop + 7)
-'        If BatchDist <> "" Then
-'            TotalMapSize = TotalMapSize + BatchDist
-'        End If
-'    Next
-'    ThisWorkbook.Sheets("BatchMap").Cells(5, SimPop + 7) = TotalMapSize
-'    ThisWorkbook.Sheets("BatchMap").Cells(6, SimPop + 7) = TotalMapSize / NumberOfMarkers 'mk density
-'Next
-     
-SumAverageChi2 = 0
-SumAverageDensity = 0
-MinChi2 = 1000000
-MaxChi2 = 0
-MinDensity = 1000000
-MaxDensity = 0
-
-For SimPop = 1 To NumberOfProcessedFiles
-    MapChi2 = ThisWorkbook.Sheets("BatchMap").Cells(5, SimPop + 7)
-    mapdensity = ThisWorkbook.Sheets("BatchMap").Cells(6, SimPop + 7)
-    If MapChi2 > MaxChi2 Then MaxChi2 = MapChi2
-    If MapChi2 < MinChi2 Then MinChi2 = MapChi2
-    If mapdensity > MaxDensity Then MaxDensity = mapdensity
-    If mapdensity < MinDensity Then MinDensity = mapdensity
-    SumAverageChi2 = SumAverageChi2 + MapChi2
-    SumAverageDensity = SumAverageDensity + mapdensity
-Next
-AverageChi2 = SumAverageChi2 / NumberOfProcessedFiles
-AverageDensity = SumAverageDensity / NumberOfProcessedFiles
-
-[C5] = MinChi2
-[D5] = MaxChi2
-[c6] = MinDensity
-[D6] = MaxDensity
-[E5] = AverageChi2
-[E6] = AverageDensity
-
-'[G5] = "Total map size"
-'[G6] = "Marker density"
-[A7] = "Chr"
-[b7] = "Marker"
-[C7] = "Min"
-[D7] = "Max"
-[E7] = "Average"
-[F7] = "% no peak"
-[G7] = "% peak"
-
-Range(Cells(8, 3), Cells(7 + NumberOfMarkers, 7)).Select
-Selection.Interior.ColorIndex = 15
-Range(Cells(5, 8), Cells(6, 256)).Select
-Selection.Interior.ColorIndex = 15
-
-GoTo 1000
-900
-MsgBox "An error occurred."
-1000
-[h8].Select
-Application.StatusBar = False
-'Application.ScreenUpdating = True
-End Sub
-
-Public Sub ShowDistribMapSizesFromBigBatch()
-    FromBigBatch = 1
-    ShowDistributionMapSizes
-    FromBigBatch = 0
-End Sub
-
-Public Sub ShowDistributionMapSizes()
-
-Application.ScreenUpdating = False
-Application.StatusBar = "cleaning..."
-ThisWorkbook.Sheets("Distrib").Activate
-
-NumberOfIntervals = ThisWorkbook.Sheets("Distrib").[M516]
-ThisWorkbook.Sheets("Distrib").Cells.ClearContents
-ThisWorkbook.Sheets("Distrib").Cells.Interior.ColorIndex = xlNone
-    ThisWorkbook.Sheets("Distrib").Cells.Borders(xlDiagonalDown).LineStyle = xlNone
-    ThisWorkbook.Sheets("Distrib").Cells.Borders(xlDiagonalUp).LineStyle = xlNone
-    ThisWorkbook.Sheets("Distrib").Cells.Borders(xlEdgeLeft).LineStyle = xlNone
-    ThisWorkbook.Sheets("Distrib").Cells.Borders(xlEdgeTop).LineStyle = xlNone
-    ThisWorkbook.Sheets("Distrib").Cells.Borders(xlEdgeBottom).LineStyle = xlNone
-    ThisWorkbook.Sheets("Distrib").Cells.Borders(xlEdgeRight).LineStyle = xlNone
-    ThisWorkbook.Sheets("Distrib").Cells.Borders(xlInsideVertical).LineStyle = xlNone
-    ThisWorkbook.Sheets("Distrib").Cells.Borders(xlInsideHorizontal).LineStyle = xlNone
-    
-popType = ThisWorkbook.Sheets("SimulMap").[N16]
-popsize = ThisWorkbook.Sheets("SimulMap").[N17]
-EmapSize = ThisWorkbook.Sheets("SimulMap").[N22]
-
-If FromBigBatch = 0 Then
-    MyBatchMatrix = ThisWorkbook.Sheets("BatchMap").Range("A5:IV6").Value
-    valeurMax = ThisWorkbook.Sheets("BatchMap").[D5]
-    valeurMin = ThisWorkbook.Sheets("BatchMap").[C5]
-    NumberOfValues = ThisWorkbook.Sheets("BatchMap").[D4]
-Else
-    MyBatchMatrix = ThisWorkbook.Sheets("BigBatch").Range("C6:D10010").Value
-    
-    ThisWorkbook.Sheets("BigBatch").Activate
-    NumberOfValues = ThisWorkbook.Sheets("SimulMap").[n3]
-    '
-    Range("C6:D10005").Select
-    Range("D6").Activate
-    Selection.Sort Key1:=Range("D6"), Order1:=xlAscending, Header:=xlGuess, _
-        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
-
-    [D6].Select
-    valeurMin = [D6]
-    valeurMax = Cells(5 + NumberOfValues, 4)
-End If
-
-Application.StatusBar = "writing intervals"
-If NumberOfIntervals = 0 Or NumberOfIntervals = "" Then NumberOfIntervals = 40
-[M516] = NumberOfIntervals
-IntervalSize = Int(valeurMax - valeurMin) / NumberOfIntervals
-
-ReDim VectorFrequencies(1, NumberOfIntervals + 1) As Long
-ReDim VectorBounds(2, NumberOfIntervals + 16) As Double
-
-mininterval = valeurMin
-For Interval = 1 To NumberOfIntervals + 1
-    ThisWorkbook.Sheets("Distrib").Cells(510, Interval + 15) = mininterval
-    VectorBounds(0, Interval + 15) = mininterval
-    maxinterval = mininterval + IntervalSize
-    ThisWorkbook.Sheets("Distrib").Cells(509, Interval + 15) = maxinterval
-    VectorBounds(1, Interval + 15) = maxinterval
-    mininterval = maxinterval
-    'ThisWorkbook.Sheets("Distrib").Cells(515, interval + 15) = "0"
-    VectorFrequencies(0, Interval - 1) = 0
-Next
-
-Application.StatusBar = "counting frequencies"
-For Colonne = 8 To NumberOfValues + 7
-    If FromBigBatch = 0 Then Mapsize = MyBatchMatrix(1, Colonne) Else Mapsize = MyBatchMatrix(Colonne - 7, 2)
-    'ThisWorkbook.Sheets("Distrib").Cells(5, Colonne) = MapSize
-    For Interval = 1 To NumberOfIntervals + 1
-'        If MapSize >= ThisWorkbook.Sheets("Distrib").Cells(510, interval + 15) Then
-'            If MapSize < ThisWorkbook.Sheets("Distrib").Cells(509, interval + 15) Then
-'                VectorFrequencies(0, interval + 15) = VectorFrequencies(0, interval + 15) + 1
-'                ThisWorkbook.Sheets("Distrib").Cells(515, interval + 15) = ThisWorkbook.Sheets("Distrib").Cells(515, interval + 15) + 1
-'            End If
-'        End If
-        If Mapsize >= VectorBounds(0, Interval + 15) Then
-            If Mapsize < VectorBounds(1, Interval + 15) Then
-                VectorFrequencies(0, Interval - 1) = VectorFrequencies(0, Interval - 1) + 1
-            End If
-        End If
-    Next
-Next
-
-[P515].Resize(1, NumberOfIntervals + 1) = VectorFrequencies
-
-Application.StatusBar = "drawing..."
-For Interval = 1 To NumberOfIntervals + 1
-    effectif = VectorFrequencies(0, Interval - 1)
-    For Ligne = 1 To effectif
-        ThisWorkbook.Sheets("Distrib").Cells(500 - Ligne, Interval + 15).Interior.ColorIndex = 25
-    Next Ligne
-Next
-Application.StatusBar = "finishing..."
-
-ThisWorkbook.Sheets("Distrib").Activate
-If FromBigBatch = 0 Then
-    [M517].Formula = "=PERCENTILE(BatchMap!H5:IV5,0.005)": [K517] = "Percent. 0.005"
-    [M518].Formula = "=PERCENTILE(BatchMap!H5:IV5,0.995)": [K518] = "Percent. 0.995"
-    [M519].Formula = "=PERCENTILE(BatchMap!H5:IV5,0.025)": [K519] = "Percent. 0.025"
-    [M520].Formula = "=PERCENTILE(BatchMap!H5:IV5,0.975)": [K520] = "Percent. 0.975"
-    [M521].Formula = "=PERCENTILE(BatchMap!H5:IV5,0.05)": [K521] = "Percent. 0.05"
-    [M522].Formula = "=PERCENTILE(BatchMap!H5:IV5,0.95)": [K522] = "Percent. 0.95"
-    [M523].Formula = "=PERCENTILE(BatchMap!H5:IV5,0.1666)": [K523] = "Percent. 0.167"
-    [M524].Formula = "=PERCENTILE(BatchMap!H5:IV5,0.8333)": [K524] = "Percent. 0.833"
-    [M525].Formula = "=MEDIAN(BatchMap!H5:IV5,0.8333)": [K525] = "Median"
-    [M526].Formula = "=Average(BatchMap!H5:IV5)": [K526] = "Average"
-    
-    ActiveSheet.Shapes("cbDrawAgain").Select
-    Selection.OnAction = "ShowDistributionMapSizes"
-
-    ActiveSheet.Shapes("cbBack").Select
-    Selection.OnAction = "ActiverBatchMap"
-Else
-
-    [M517].Formula = "=PERCENTILE(BigBatch!D6:D60000,0.005)": [K517] = "Percent. 0.005"
-    [M518].Formula = "=PERCENTILE(BigBatch!D6:D60000,0.995)": [K518] = "Percent. 0.995"
-    [M519].Formula = "=PERCENTILE(BigBatch!D6:D60000,0.025)": [K519] = "Percent. 0.025"
-    [M520].Formula = "=PERCENTILE(BigBatch!D6:D60000,0.975)": [K520] = "Percent. 0.975"
-    [M521].Formula = "=PERCENTILE(BigBatch!D6:D60000,0.05)": [K521] = "Percent. 0.05"
-    [M522].Formula = "=PERCENTILE(BigBatch!D6:D60000,0.95)": [K522] = "Percent. 0.95"
-    [M523].Formula = "=PERCENTILE(BigBatch!D6:D60000,0.1666)": [K523] = "Percent. 0.167"
-    [M524].Formula = "=PERCENTILE(BigBatch!D6:D60000,0.8333)": [K524] = "Percent. 0.833"
-    [M525].Formula = "=MEDIAN(BigBatch!D6:D60000,0.5)": [K525] = "Median"
-    [M526].Formula = "=Average(BigBatch!D6:D60000)": [K526] = "Average"
-    
-    ActiveSheet.Shapes("cbDrawAgain").Select
-    Selection.OnAction = "ShowDistribMapSizesFromBigBatch"
-
-    ActiveSheet.Shapes("cbBack").Select
-    Selection.OnAction = "ActiverBigBatchMap"
-    
-End If
-
-[M516] = NumberOfIntervals
-[o516] = "Histogram of map sizes"
-[K516] = "Number of intervals:"
-[o518] = "Based on [P1 x P2] simulated map "
-[o519] = NumberOfValues & " " & popType & " populations of " & popsize & " individuals simulated"
-[o520] = "Expected map size: " & Format(EmapSize, "####.##") & " cM"
-
-1000
-[M516].Select
-Application.StatusBar = False
-
-End Sub
-
-
-Public Sub Draw_Simulated_Map()
-Application.StatusBar = "Starting"
-Application.ScreenUpdating = False
-Dim MyTime
-MyTime = Time
-
-'Init
-'If Probleme = 1 Then GoTo 1000
-
-' Sort_Frameed_Map Macro
-ThisWorkbook.Sheets("SimulMap").Activate
-
-If [b6] = "" Then MsgBox "No simulated map to draw": GoTo 1000
-
-'remise ö z_ro de la feuille de r_sultats ("Draw")
-Application.DisplayAlerts = False
-    ThisWorkbook.Sheets("DrawSimulMap").Delete
-    ThisWorkbook.Sheets("DrawSimulMap0").Select
-    ThisWorkbook.Sheets("DrawSimulMap0").Copy Before:=ThisWorkbook.Sheets(11)
-    ThisWorkbook.Sheets("DrawSimulMap0 (2)").Select
-    ThisWorkbook.Sheets("DrawSimulMap0 (2)").Name = "DrawSimulMap"
-    ThisWorkbook.Sheets("DrawSimulMap0").Activate
-Application.DisplayAlerts = True
-
-ResultSheetName = "DrawSimulMap"
-
-ThisWorkbook.Sheets("SimulMap").Activate
-ThisWorkbook.Sheets("SimulMap").Range("B6", Range("B1048576").End(xlUp)).Select
-NbOfRowsMap = Selection.Rows.Count
-[b6].Select
-
-TotalNumberOfMarkers = NbOfRowsMap
-
-firstRow = 6
-LastRow = firstRow + TotalNumberOfMarkers - 1
-
-Read_Map_Drawing_Parameters
-MyMinLabelsSpacing = MyLabelsSpacing
-
-If EchelleVert = "" Or EchelleVert = 0 Then EchelleVert = Application.InputBox(prompt:="Drawing scale? (Suggestion: choose from 1 to 5)", Title:="Draw Map", Type:=1)
-If EchelleVert = False Then GoTo 1000
-Application.StatusBar = "Resetting window"
-
-Application.StatusBar = "Loading data"
-'VirtualRawData = ThisWorkbook.Sheets("SimulMap").UsedRange.Value
-VirtualRawData = ThisWorkbook.Sheets("SimulMap").Range(Cells(1, 1), Cells(firstRow + TotalNumberOfMarkers, 26)).Value
-ThisWorkbook.Sheets(ResultSheetName).Activate
-
-ChrSpace = MyChromosomeSpacing * 15
-SizeSmallSecondLine = EchelleHorizont
-LargCarte = 7
-
-Xorigin = 0
-Yorigin = 100
-
-MarkerChromosomeOld = 0
-FirstChromosome = ThisWorkbook.Sheets("DrawSimulMap").[b6]
-
-Application.StatusBar = "Drawing map..."
-
-For Row = firstRow To LastRow
-    MarkerChromosome = VirtualRawData(Row, 2)
-    If MarkerChromosome <> MarkerChromosomeOld Then ' new LG
-        Application.StatusBar = "Drawing LG " & MarkerChromosome
-        
-        For Row2 = Row To TotalNumberOfMarkers + firstRow 'look for chr size
-            If VirtualRawData(Row2, 2) <> MarkerChromosome Then
-                ChromosomeSize = VirtualRawData(Row2 - 1, 5)
-                NbOfMarkersInChr = Row2 - Row
-                GoTo 100
-            End If
-        Next Row2
-100
-        If LabelPositionsOption = 2 Then
-            MarkerLabelPositionOld = 0 - Yorigin
-        ElseIf LabelPositionsOption = 1 Then 'even mark label positions
-            MyLabelsSpacing = ChromosomeSize * EchelleVert / (NbOfMarkersInChr - 1)
-            If MyMinLabelsSpacing < MyLabelsSpacing Then MyLabelsSpacing = MyMinLabelsSpacing
-            MarkerLabelPositionOld = 0 - MyLabelsSpacing / EchelleVert
-        End If
-        
-        With ActiveSheet.Shapes.AddLine(Xorigin + (MarkerChromosome - FirstChromosome) * ChrSpace - 16, _
-            Yorigin + 5, _
-            Xorigin + (MarkerChromosome - FirstChromosome) * ChrSpace - 16, _
-            Yorigin + ChromosomeSize * EchelleVert + 5)
-            .Name = "MarkChr_" & MarkerChromosome
-        End With
-        With ActiveSheet.Shapes.AddShape(msoShapeRectangle, Xorigin + (MarkerChromosome - FirstChromosome) * ChrSpace - 16, Yorigin - 20, 100#, MyFontSize + 10)
-            .TextFrame.Characters.Text = "LG " & MarkerChromosome
-            .Fill.Visible = False
-            .Line.Visible = False
-            .Name = "MarkChrName_" & MarkerChromosome
-            .TextFrame.Characters.Font.Name = MyFontName
-            .TextFrame.Characters.Font.Size = MyFontSize + 5
-        End With
-        MarkerChromosomeOld = MarkerChromosome
-    End If
-    
-        MarkerName = VirtualRawData(Row, 4)
-        MarkerPosition = VirtualRawData(Row, 5) ' absolute positions
-        
-        If LabelPositionsOption = 2 Then
-            If MarkerPosition - MarkerLabelPositionOld < MyLabelsSpacing / EchelleVert Then 'if < 5 cm
-                MarkerLabelPosition = MarkerLabelPositionOld + MyLabelsSpacing / EchelleVert
-                MarkerLabelPositionOld = MarkerLabelPosition
-            Else
-                MarkerLabelPosition = MarkerPosition
-                MarkerLabelPositionOld = MarkerLabelPosition
-            End If
-        ElseIf LabelPositionsOption = 1 Then
-            If MarkerPosition - MarkerLabelPositionOld > MyLabelsSpacing Then
-                MarkerLabelPositionOld = MarkerLabelPositionOld + (MarkerPosition - MarkerLabelPositionOld) / 1.5
-            End If
-            MarkerLabelPosition = MarkerLabelPositionOld + MyLabelsSpacing / EchelleVert
-            MarkerLabelPositionOld = MarkerLabelPosition
-        End If
-        MarkerNumber = Row
-        
-        With ActiveSheet.Shapes.AddLine(Xorigin + (MarkerChromosome - FirstChromosome) * ChrSpace - 16, Yorigin + MarkerPosition * EchelleVert + 5, Xorigin + _
-            (MarkerChromosome - FirstChromosome) * ChrSpace - 9, Yorigin + MarkerPosition * EchelleVert + 5)
-            '.Name = "Markline_" & MarkerNumber
-        End With
-        With ActiveSheet.Shapes.AddLine(Xorigin + (MarkerChromosome - FirstChromosome) * ChrSpace - 9, _
-            Yorigin + MarkerPosition * EchelleVert + 5, _
-            Xorigin + (MarkerChromosome - FirstChromosome) * ChrSpace - 2 + SizeSmallSecondLine, _
-            Yorigin + MarkerLabelPosition * EchelleVert + 5)
-            '.Name = "Markline_" & MarkerNumber
-        End With
-        With ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
-            Xorigin + (MarkerChromosome - FirstChromosome) * ChrSpace + SizeSmallSecondLine, _
-            Yorigin + MarkerLabelPosition * EchelleVert, _
-            120#, MyFontSize * 2)
-            .TextFrame.Characters.Text = MarkerName & " (" & Format(MarkerPosition, "###0.0") & ")"
-            .Fill.Visible = False
-            .Line.Visible = False
-            '.TextFrame.Characters.Font.Name = MyfontName
-            '.TextFrame.Characters.Font.Size = MyfontSize
-            .Name = "Mark_" & MarkerNumber
-        End With
-Next Row
-
-Dim MyTime2: MyTime2 = Time: TempsEcoule = MyTime2 - MyTime
-ActiveWindow.Zoom = 100
-'Application.CommandBars("Map Zoom").Visible = True
-ThisWorkbook.Sheets("DrawSimulMap").Activate
-ResetFontIndicator
-ResetFontSize
-1000 Application.StatusBar = False
-
-End Sub
-
-
-Public Sub Read_Chr_Simulated()
-Application.ScreenUpdating = False
-ThisWorkbook.Sheets("SimulMap").Activate
-
-Range("B6", Range("B1048576").End(xlUp)).Select
-NbOfRows = Selection.Rows.Count
-
-Range("J27:N1000").ClearContents
-
-NumbOfMarkInChrTotal = 0
-TotalMapSize = 0
-NumberOfChr = 0
-For i = 6 To NbOfRows + 6
-    If Cells(i + 1, 2) <> Cells(i, 2) Then 'new chr is detected
-        NumberOfChr = NumberOfChr + 1
-        Cells(26 + Cells(i, 2), 10) = Cells(i, 2) 'chr number
-        ChrSize = Cells(i, 5)
-        Cells(26 + Cells(i, 2), 11) = ChrSize 'chr size
-        TotalMapSize = TotalMapSize + Cells(i, 5)
-        NumbOfMarkInChr = i - 5 - NumbOfMarkInChrTotal
-        Cells(26 + Cells(i, 2), 12) = NumbOfMarkInChr
-        MarkerDensity = ChrSize / NumbOfMarkInChr
-        Cells(26 + Cells(i, 2), 14) = MarkerDensity
-        NumbOfMarkInChrTotal = NumbOfMarkInChrTotal + NumbOfMarkInChr
-    End If
-Next
-[N22] = TotalMapSize
-[N23] = NumbOfMarkInChrTotal
-[N24] = TotalMapSize / NumbOfMarkInChrTotal
-[R22] = NumberOfChr
-
-[N22].Select
-Application.ScreenUpdating = True
-End Sub
-
-Public Sub Add_Simulated_To_Map_1()
-Application.ScreenUpdating = False
-    Sheets("SimulMap").Activate
-        Range("B6:F6").Select
-        Range(Selection, Selection.End(xlDown)).Select
-        Copy_Values_MD
-        Range("B6").Select
-    Sheets("CompMap").Activate
-        Range("B6:f1048576").Select
-        Selection.ClearContents
-        Range("B6").Select
-'        ActiveSheet.Paste
-        Paste_Values_MD
-        Range("B6").Select
-End Sub
-
-Public Sub Add_Simulated_To_Map_2()
-Application.ScreenUpdating = False
-    Sheets("SimulMap").Activate
-        Range("B6:F6").Select
-        Range(Selection, Selection.End(xlDown)).Select
-        Copy_Values_MD
-        Range("B6").Select
-    Sheets("CompMap").Activate
-        Range("H6:L1048576").Select
-        Selection.ClearContents
-        Range("H6").Select
-'        ActiveSheet.Paste
-        Paste_Values_MD
-        Range("H6").Select
-End Sub
-
-
-Public Sub BatchMap()
-'Reads a series of mapmaker/EXP compatible data files, computes the map and reports a summary
-'Assumes that the linkage group are already defined and ordered.
-'Needs to have the sequences pasted in My sequences
-'Max 254 genotypes
-
-'On Error GoTo 900
-Dim MyTime
-MyTime = Time
-BatchMode = 1
-AutoBatchMapOn = 0
-
-Application.ScreenUpdating = False
-
-msg = "Are you sure you want to continue? This will clear the previous batch results and the current sequences."
-Style = vbYesNo
-Title = "Confirmation"
-Ctxt = 1000
-response = MsgBox(msg, Style, Title)
-If response = vbNo Then GoTo 1100
-
-If ThisWorkbook.Sheets("SimulMap").[b6] = "" Then MsgBox ("Please simulate a map first"): GoTo 1100
-
-ThisWorkbook.Sheets("Menus").Range("N24:IV1023").ClearContents
-ThisWorkbook.Sheets("Menus").Range("J24:J1023").ClearContents
-
-CopySequencesFromSimulatedMap
-
-nbseq = ThisWorkbook.Sheets("Menus").Cells(23, 19)
-If nbseq = 0 Then
-    MsgBox ("Please simulate a map first")
-    ActiverSimulate
-    GoTo 1100
-End If
-
-Application.StatusBar = "reading Menu"
-MenuMatrix = ThisWorkbook.Sheets("Menus").UsedRange.Value
-
-Read_Mapping_Options
-
-If ThisWorkbook.Sheets("Data").[D4] <> "" And ThisWorkbook.Sheets("Data").[c16] <> "" Then
-    msg = "Do you want to store the data that are in the 'Data' window before importation?"
-        Style = vbYesNo + vbCritical + vbDefaultButton1
-        Title = "Import Mapmaker data"
-        Ctxt = 1000
-        response = MsgBox(msg, Style, Title)
-        If response = vbYes Then Store_Data
-End If
-
-Application.StatusBar = "Erasing current data"
-ThisWorkbook.Sheets("Data").Range("B15:IV60000").ClearContents
-'ThisWorkbook.Sheets("Data+").Range("B15:IV60000").ClearContents
-
-NumberOfFilesToProcess = ThisWorkbook.Sheets("SimulMap").[n3]
-If NumberOfFilesToProcess > MaxNumberOfColumns - 7 Then BigBatchMode = 1 Else BigBatchMode = 0
-
-NbLocus = ThisWorkbook.Sheets("SimulMap").[N23]
-Indiv = ThisWorkbook.Sheets("SimulMap").[N17]
-
-myfilename = Application.GetOpenFilename(Title:="Locate the SimulPop_1.txt file")
-If myfilename = False Then GoTo 1100
-Workbooks.OpenText Filename:=myfilename, DataType:=xlDelimited, Tab:=True, Space:=True, ConsecutiveDelimiter:=True
-
-If BigBatchMode = 0 Then
-    ThisWorkbook.Sheets("BatchMap").Range("A5:IV60000").ClearContents
-    ThisWorkbook.Sheets("BatchMap").[D4].ClearContents
-    ThisWorkbook.Sheets("BatchMap").[f4].ClearContents
-    ThisWorkbook.Sheets("BatchMap").Range("C8:G60000").Interior.ColorIndex = xlNone
-    ThisWorkbook.Sheets("BatchMap").Range("H5:IV6").Interior.ColorIndex = xlNone
-    ReDim BatchResults(NbLocus + 1, NumberOfFilesToProcess) As Variant
-Else
-    ThisWorkbook.Sheets("BigBatch").Range("C6:D60000").ClearContents
-    ReDim BigBatchResults(NumberOfFilesToProcess, 2) As Variant
-End If
-
-LengthOfPath = Len(myfilename)
-OutputPath = Left(myfilename, LengthOfPath - 5)
-myfilename = ActiveWorkbook.Name
-Workbooks(myfilename).Close savechanges:=False
-
-For CurrentPopulation = 1 To NumberOfFilesToProcess
-    'Application.StatusBar = "Population " & CurrentPopulation & ":" ' Importing data file
-    Import_Mapmaker_data_For_Batch
-    Application.StatusBar = "Population " & CurrentPopulation & ": Computing map"
-    ComputeMapForAutoBatch
-    'If BigBatchMode = 0 Then ThisWorkbook.Sheets("BatchMap").Cells(7, CurrentPopulation + 7) = "Pop" & CurrentPopulation
-    If BigBatchMode = 0 Then BatchResults(0, CurrentPopulation - 1) = "Pop" & CurrentPopulation
-Next
-
-If BigBatchMode = 0 Then
-    ThisWorkbook.Sheets("BatchMap").Activate
-    ThisWorkbook.Sheets("BatchMap").[D4] = NumberOfFilesToProcess
-    NumberOfMarkers = ThisWorkbook.Sheets("SimulMap").[N23]
-    ThisWorkbook.Sheets("BatchMap").[f4] = NumberOfMarkers
-    [h7].Resize(NbLocus + 3, NumberOfFilesToProcess) = BatchResults
-    ThisWorkbook.Sheets("SimulMap").Activate
-        Range("D6").Select
-        Range(Selection, Selection.End(xlDown)).Select
-        Selection.Copy
-        [N22].Select
-    ThisWorkbook.Sheets("BatchMap").Activate
-        Range("B8").Select
-        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
-            :=False, Transpose:=False
-            
-    Compute_Stats_Batch
-Else
-    ThisWorkbook.Sheets("BigBatch").Activate
-    [c6].Resize(NumberOfFilesToProcess, 2) = BigBatchResults
-End If
-
-Dim MyTime2
-MyTime2 = Time
-TempsEcoule = MyTime2 - MyTime
-Application.StatusBar = "Batchmap total time was " & Format(TempsEcoule, "h:mm:ss")
-
-GoTo 1000
-900 MsgBox "An error occurred during the BatchMap procedure."
-GoTo 1100
-1000
-BatchMode = 0
-'Application.StatusBar = False
-If BigBatchMode = 0 Then
-    ThisWorkbook.Sheets("BatchMap").Activate
-Else
-    ThisWorkbook.Sheets("BigBatch").Activate
-End If
-
-Beep
-[h8].Select
-1100
-End Sub
-
-
-Public Sub Auto_Batch_Map()
-'Same than BatchMap but simulates populations at the same time so saves CPU time
-'Simulates a series of populations, computes the map and reports a summary
-'Assumes that the linkage groups are already defined and ordered.
-'Needs to have the sequences pasted in My sequences
-
-'On Error GoTo 900
-Dim MyTime
-MyTime = Time
-BatchMode = 1
-AutoBatchMapOn = 1
-
-Application.ScreenUpdating = False
-
-msg = "Are you sure you want to continue? This will clear the previous batch results and the current sequences."
-Style = vbYesNo
-Title = "Confirmation"
-Ctxt = 1000
-response = MsgBox(msg, Style, Title)
-If response = vbNo Then GoTo 1100
-
-If ThisWorkbook.Sheets("SimulMap").[b6] = "" Then MsgBox ("Please simulate a map first"): GoTo 1100
-
-ThisWorkbook.Sheets("Menus").Range("N24:IV1023").ClearContents
-ThisWorkbook.Sheets("Menus").Range("J24:J1023").ClearContents
-
-CopySequencesFromSimulatedMap
-
-nbseq = ThisWorkbook.Sheets("Menus").Cells(23, 19)
-If nbseq = 0 Then
-    MsgBox ("Please simulate a map first")
-    ActiverSimulate
-    GoTo 1100
-End If
-
-Application.StatusBar = "reading Menu "
-    MenuMatrix = ThisWorkbook.Sheets("Menus").UsedRange.Value
-Application.StatusBar = "reading simulation parameters"
-    VirtualMap = ThisWorkbook.Sheets("SimulMap").UsedRange.Value
-    Read_Simulation_Parameters
-    
-If SimulatedPopulationType <> "BC1" And SimulatedPopulationType <> "F2" And SimulatedPopulationType <> "BC2F1" And SimulatedPopulationType <> "SSD" Then MsgBox "BC1 or F2 populations only, sorry.": GoTo 1000
-
-Application.StatusBar = "reading mapping options"
-    Read_Mapping_Options
-
-NumberOfFilesToProcess = ThisWorkbook.Sheets("SimulMap").[n3]
-
-BigBatchMode = 0
-If MaxNumberOfColumns = 256 Then
-    If NumberOfFilesToProcess > 249 Then BigBatchMode = 1 Else BigBatchMode = 0
-End If
-
-NbLocus = ThisWorkbook.Sheets("SimulMap").[N23]
-Indiv = ThisWorkbook.Sheets("SimulMap").[N17]
-
-ReDim Data(Indiv, NbLocus) As Variant
-Application.StatusBar = "Clearing"
-
-If BigBatchMode = 0 Then
-    ThisWorkbook.Sheets("BatchMap").Range("A5:IV60000").ClearContents
-    ThisWorkbook.Sheets("BatchMap").[D4].ClearContents
-    ThisWorkbook.Sheets("BatchMap").[f4].ClearContents
-    ThisWorkbook.Sheets("BatchMap").Range("C8:G60000").Interior.ColorIndex = xlNone
-    ThisWorkbook.Sheets("BatchMap").Range("H5:XFD60000").Interior.ColorIndex = xlNone
-    ReDim BatchResults(NbLocus + 1, NumberOfFilesToProcess) As Variant
-Else
-    ThisWorkbook.Sheets("BigBatch").Range("C6:D60000").ClearContents
-    ReDim BigBatchResults(NumberOfFilesToProcess, 2) As Variant
-End If
-
-For CurrentPopulation = 1 To NumberOfFilesToProcess
-    Application.StatusBar = "Processing population " & CurrentPopulation
-    Simulate_Population_From_Map
-    ComputeMapForAutoBatch
-    'If BigBatchMode = 0 Then ThisWorkbook.Sheets("BatchMap").Cells(7, CurrentPopulation + 7) = "Pop" & CurrentPopulation
-    If BigBatchMode = 0 Then BatchResults(0, CurrentPopulation - 1) = "Pop" & CurrentPopulation
-Next
-
-If BigBatchMode = 0 Then
-    ThisWorkbook.Sheets("BatchMap").Activate
-    [D4] = NumberOfFilesToProcess
-    NumberOfMarkers = ThisWorkbook.Sheets("SimulMap").[N23]
-    [f4] = NumberOfMarkers
-    [h7].Resize(NbLocus + 3, NumberOfFilesToProcess) = BatchResults
-    ThisWorkbook.Sheets("SimulMap").Activate
-        Range("D6").Select
-        Range(Selection, Selection.End(xlDown)).Select
-        Selection.Copy
-        [N22].Select
-    ThisWorkbook.Sheets("BatchMap").Activate
-        Range("B8").Select
-        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
-            :=False, Transpose:=False
-    
-    Compute_Stats_Batch
-Else
-    ThisWorkbook.Sheets("BigBatch").Activate
-    [c6].Resize(NumberOfFilesToProcess, 2) = BigBatchResults
-End If
-
-Dim MyTime2
-MyTime2 = Time
-TempsEcoule = MyTime2 - MyTime
-Application.StatusBar = "Autobatchmap total time was " & Format(TempsEcoule, "h:mm:ss")
-GoTo 1000
-900  MsgBox "An error occurred during the AutoBatchMap procedure."
-GoTo 1100
-1000
-If BigBatchMode = 0 Then
-    ThisWorkbook.Sheets("BatchMap").Activate
-Else
-    ThisWorkbook.Sheets("BigBatch").Activate
-End If
-AutoBatchMapOn = 0
-BigBatchMode = 1
-'Application.StatusBar = False
-Beep
-[h8].Select
-1100
-End Sub
-
-
-Public Sub Auto_Batch_Map_Chi2()
-'Same than BatchMap but simulates populations at the same time so saves CPU time
-'Simulates a series of populations, computes the map and reports a summary
-'Assumes that the linkage groups are already defined and ordered.
-'Needs to have the sequences pasted in My sequences
-
-'On Error GoTo 900
-Dim MyTime
-MyTime = Time
-BatchMode = 1
-AutoBatchMapOn = 1
-
-Application.ScreenUpdating = False
-
-msg = "Are you sure you want to continue? This will clear the previous batch results and the current sequences."
-Style = vbYesNo
-Title = "Confirmation"
-Ctxt = 1000
-response = MsgBox(msg, Style, Title)
-If response = vbNo Then GoTo 1100
-
-If ThisWorkbook.Sheets("SimulMap").[b6] = "" Then MsgBox ("Please simulate a map first"): GoTo 1100
-
-ThisWorkbook.Sheets("Menus").Range("N24:IV1023").ClearContents
-ThisWorkbook.Sheets("Menus").Range("J24:J1023").ClearContents
-
-CopySequencesFromSimulatedMap
-
-nbseq = ThisWorkbook.Sheets("Menus").Cells(23, 19)
-If nbseq = 0 Then
-    MsgBox ("Please simulate a map first")
-    ActiverSimulate
-    GoTo 1100
-End If
-
-Application.StatusBar = "reading Menu "
-    MenuMatrix = ThisWorkbook.Sheets("Menus").UsedRange.Value
-Application.StatusBar = "reading simulation parameters"
-    VirtualMap = ThisWorkbook.Sheets("SimulMap").UsedRange.Value
-    Read_Simulation_Parameters
-    
-If SimulatedPopulationType <> "BC1" And SimulatedPopulationType <> "F2" And SimulatedPopulationType <> "BC2F1" And SimulatedPopulationType <> "SSD" Then MsgBox "BC1 or F2 populations only, sorry.": GoTo 1000
-
-Application.StatusBar = "reading mapping options"
-    Read_Mapping_Options
-
-NumberOfFilesToProcess = ThisWorkbook.Sheets("SimulMap").[n3]
-
-BigBatchMode = 0
-If MaxNumberOfColumns = 256 Then
-    If NumberOfFilesToProcess > 249 Then BigBatchMode = 1 Else BigBatchMode = 0
-End If
-
-NbLocus = ThisWorkbook.Sheets("SimulMap").[N23]
-Indiv = ThisWorkbook.Sheets("SimulMap").[N17]
-
-ReDim Data(Indiv, NbLocus) As Variant
-
-Application.StatusBar = "Clearing"
-
-If BigBatchMode = 0 Then
-    ThisWorkbook.Sheets("BatchMap").Range("A5:IV60000").ClearContents
-    ThisWorkbook.Sheets("BatchMap").[D4].ClearContents
-    ThisWorkbook.Sheets("BatchMap").[f4].ClearContents
-    ThisWorkbook.Sheets("BatchMap").Range("C5:XFD60000").Interior.ColorIndex = xlNone
-    'ThisWorkbook.Sheets("BatchMap").Range("H5:XFD7").Interior.ColorIndex = xlNone
-    ReDim BatchResults(NbLocus + 1, NumberOfFilesToProcess) As Variant
-Else
-    ThisWorkbook.Sheets("BigBatch").Range("C6:D60000").ClearContents
-    ReDim BigBatchResults(NumberOfFilesToProcess, 2) As Variant
-End If
-
-For CurrentPopulation = 1 To NumberOfFilesToProcess
-    Application.StatusBar = "Processing population " & CurrentPopulation
-    Simulate_Population_From_Map
-    'ComputeMapForAutoBatch
-    
-    ComputeChiSquareForAutoBatch
-    
-    'If BigBatchMode = 0 Then ThisWorkbook.Sheets("BatchMap").Cells(7, CurrentPopulation + 7) = "Pop" & CurrentPopulation
-    If BigBatchMode = 0 Then BatchResults(0, CurrentPopulation - 1) = "Pop" & CurrentPopulation
-Next
-
-If BigBatchMode = 0 Then
-    ThisWorkbook.Sheets("BatchMap").Activate
-    [D4] = NumberOfFilesToProcess
-    NumberOfMarkers = ThisWorkbook.Sheets("SimulMap").[N23]
-    [f4] = NumberOfMarkers
-    
-    [h7].Resize(NbLocus + 3, NumberOfFilesToProcess) = BatchResults
-    
-    ThisWorkbook.Sheets("SimulMap").Activate
-        Range("D6").Select
-        Range(Selection, Selection.End(xlDown)).Select
-        Selection.Copy
-        [N22].Select
-    ThisWorkbook.Sheets("BatchMap").Activate
-        Range("B8").Select
-        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
-            :=False, Transpose:=False
-    
-    Compute_Stats_Batch_Chi2
-Else
-    ThisWorkbook.Sheets("BigBatch").Activate
-    [c6].Resize(NumberOfFilesToProcess, 2) = BigBatchResults
-End If
-
-Dim MyTime2
-MyTime2 = Time
-TempsEcoule = MyTime2 - MyTime
-Application.StatusBar = "Autobatchmap total time was " & Format(TempsEcoule, "h:mm:ss")
-GoTo 1000
-900  MsgBox "An error occurred during the AutoBatchMap procedure."
-GoTo 1100
-1000
-If BigBatchMode = 0 Then
-    ThisWorkbook.Sheets("BatchMap").Activate
-Else
-    ThisWorkbook.Sheets("BigBatch").Activate
-End If
-AutoBatchMapOn = 0
-BigBatchMode = 1
-'Application.StatusBar = False
-Beep
-[h8].Select
-1100
-End Sub
-
-- 
GitLab