From 0228875e4a47859b2d11b62928b143ee845b0512 Mon Sep 17 00:00:00 2001
From: Maximilian Schmidt <max.schmidt@fz-juelich.de>
Date: Wed, 11 Apr 2018 10:18:05 +0900
Subject: [PATCH] RE-integrated SLN-R-Fit into scripts, but remove
 SLN_logdensities.R and deactivate SLN Fit for now because of cell density
 data copyright issue

---
 README.md                                     |   2 +-
 .../Schmidt2018/Fig5_cc_laminar_pattern.py    |  14 +
 .../data_multiarea/SLN_logdensities.R         |  14 +
 .../data_multiarea/VisualCortex_Data.py       |  34 ++-
 multiarea_model/data_multiarea/bbAlt.R        | 283 ++++++++++++++++++
 .../raw_data/RData_prepared_logdensities.txt  | 191 ------------
 6 files changed, 334 insertions(+), 204 deletions(-)
 create mode 100644 multiarea_model/data_multiarea/SLN_logdensities.R
 create mode 100644 multiarea_model/data_multiarea/bbAlt.R
 delete mode 100644 multiarea_model/data_multiarea/raw_data/RData_prepared_logdensities.txt

diff --git a/README.md b/README.md
index c1811d0..21b3fb8 100644
--- a/README.md
+++ b/README.md
@@ -191,7 +191,7 @@ In addition, reproducing the figures of [1] requires networkx, python-igraph, py
 
 In addition, Figure 7 of [1] requires installing the `infomap` package to perform the map equation clustering. See <http://www.mapequation.org/code.html> for all necessary information.
 
-The SLN fit in `multiarea_model/data_multiarea/VisualCortex_Data.py` and `figures/Schmidt2018/Fig5_cc_laminar_pattern.py` is currently not possible because of copyright issues.
+The SLN fit in `multiarea_model/data_multiarea/VisualCortex_Data.py` and `figures/Schmidt2018/Fig5_cc_laminar_pattern.py` requires an installation of R and the R library `aod` (<http://cran.r-project.org/package=aod>). Without R installation, both scripts will directly use the resulting values of the fit (see Fig. 5 of [1]).
 
 ## Contributors
 
diff --git a/figures/Schmidt2018/Fig5_cc_laminar_pattern.py b/figures/Schmidt2018/Fig5_cc_laminar_pattern.py
index f9a78d0..b875383 100644
--- a/figures/Schmidt2018/Fig5_cc_laminar_pattern.py
+++ b/figures/Schmidt2018/Fig5_cc_laminar_pattern.py
@@ -3,7 +3,9 @@ import numpy as np
 import json
 import pyx
 import os
+import subprocess
 
+from config import base_path
 from helpers import area_list, population_labels, layer_labels
 from helpers import datapath, raw_datapath
 from scipy import integrate
@@ -141,6 +143,18 @@ if NEURON_DENSITIES_AVAILABLE:
     densities = np.array(data[:, 7], dtype=np.float)
 
     # Call R script to perform SLN fit
+    try:
+        proc = subprocess.Popen(["Rscript",
+                                 os.path.join(datapath, 'SLN_logdensities.R'),
+                                 base_path],
+                                stdout=subprocess.PIPE)
+        out = proc.communicate()[0].decode('utf-8')
+        R_fit = [float(out.split('\n')[1].split(' ')[1]),
+                 float(out.split('\n')[1].split(' ')[3])]
+    except OSError:
+        print("No R installation, taking hard-coded fit parameters.")
+        R_fit = [-0.1516142, -1.5343200]
+
     print("We currently cannot publish the R code because of "
           "copyright issues, there taking hard-coded fit parameters. "
           "See Schmidt et al. (2018) for a full explanation "
diff --git a/multiarea_model/data_multiarea/SLN_logdensities.R b/multiarea_model/data_multiarea/SLN_logdensities.R
new file mode 100644
index 0000000..410fdd1
--- /dev/null
+++ b/multiarea_model/data_multiarea/SLN_logdensities.R
@@ -0,0 +1,14 @@
+library('aod')
+args <- commandArgs(trailingOnly=TRUE)
+source(paste(args,'multiarea_model/data_multiarea/bbAlt.R', sep=""))
+f <- file(paste(args,'multiarea_model/data_multiarea/raw_data/RData_prepared_logdensities.txt', sep=""),'r')
+x <- read.table(f)
+close(f)
+
+
+dens <- data.matrix(x)[,7]
+
+m2.bb <- betabin(cbind(S, I) ~ dens , ~ 1, data = x, "probit", control = list(maxit = 100000))
+h2.bb <- c(coef(m2.bb))
+
+print(h2.bb)
diff --git a/multiarea_model/data_multiarea/VisualCortex_Data.py b/multiarea_model/data_multiarea/VisualCortex_Data.py
index 68b2a42..fd720aa 100644
--- a/multiarea_model/data_multiarea/VisualCortex_Data.py
+++ b/multiarea_model/data_multiarea/VisualCortex_Data.py
@@ -72,19 +72,20 @@ Maximilian Schmidt
 Sacha van Albada
 
 """
-
 import numpy as np
 import re
 import copy
 import json
 import csv
-from scipy import stats
-from scipy import integrate
 import os
+import pandas as pd
 import subprocess
-from nested_dict import nested_dict
+
 from itertools import product
-import pandas as pd
+from config import base_path
+from nested_dict import nested_dict
+from scipy import stats
+from scipy import integrate
 
 
 def process_raw_data():
@@ -193,7 +194,6 @@ def process_raw_data():
                     pass
     else:
         neuronal_density_data = None
-                    
 
     """
     3. Architectural Types
@@ -1327,12 +1327,22 @@ def process_raw_data():
             res = integrate.quad(integrand, -1000., x, args=(0., 1.))[0]
         return res
 
-    # Call R script to perform SLN fit
-    print("We currently cannot publish the R code because of "
-          "copyright issues, therefore taking hard-coded fit parameters. "
-          "See Schmidt et al. (2018) for a full explanation "
-          "of the procedure.")
-    R_fit = [-0.1516142, -1.5343200]
+    if NEURON_DENSITIES_AVAILABLE:
+        # Call R script to perform SLN fit
+        try:
+            proc = subprocess.Popen(["Rscript",
+                                     os.path.join(basepath, 'SLN_logdensities.R'),
+                                     base_path],
+                                    stdout=subprocess.PIPE)
+            out = proc.communicate()[0].decode('utf-8')
+            R_fit = [float(out.split('\n')[1].split(' ')[1]),
+                     float(out.split('\n')[1].split(' ')[3])]
+        except OSError:
+            print("No R installation, taking hard-coded SLN fit parameters.")
+            R_fit = [-0.1516142, -1.5343200]
+    else:
+        print("Neuron densities not available, taking hard-coded SLN fit parameters.")
+        R_fit = [-0.1516142, -1.5343200]
 
     """
     4. Fill missing data with fitted values.
diff --git a/multiarea_model/data_multiarea/bbAlt.R b/multiarea_model/data_multiarea/bbAlt.R
new file mode 100644
index 0000000..5faa0d0
--- /dev/null
+++ b/multiarea_model/data_multiarea/bbAlt.R
@@ -0,0 +1,283 @@
+# Script provided by Kenneth Knoblauch
+betabin <- function (formula, random, data = NULL, link = c("logit", "probit", "cloglog"), 
+    phi.ini = NULL, warnings = FALSE, na.action = na.omit, fixpar = list(), 
+    hessian = TRUE, control = list(maxit = 2000), ...) 
+{
+    CALL <- mf <- match.call(expand.dots = FALSE)
+    tr <- function(string) gsub("^[[:space:]]+|[[:space:]]+$", 
+        "", string)
+    link <- match.arg(link)
+    if (length(formula) != 3) 
+        stop(paste(tr(deparse(formula)), collapse = " "), "is not a valid formula.")
+    else if (substring(deparse(formula)[1], 1, 5) != "cbind") 
+        stop(paste(tr(deparse(formula)), collapse = ""), " is not a valid formula.\n", 
+            "The response must be a matrix of the form cbind(success, failure)")
+    if (length(random) == 3) {
+        form <- deparse(random)
+        warning("The formula for phi (", form, ") contains a response which is ignored.")
+        random <- random[-2]
+    }
+    explain <- as.character(attr(terms(random), "variables"))[-1]
+    if (length(explain) > 1) {
+        warning("The formula for phi contains several explanatory variables (", 
+            paste(explain, collapse = ", "), ").\n", "Only the first one (", 
+            explain[1], ") was considered.")
+        explain <- explain[1]
+    }
+    gf3 <- if (length(explain) == 1) 
+        paste(as.character(formula[3]), explain, sep = " + ")
+    else as.character(formula[3])
+    gf <- formula(paste(formula[2], "~", gf3))
+    if (missing(data)) 
+        data <- environment(gf)
+    mb <- match(c("formula", "data", "na.action"), names(mf), 
+        0)
+    mfb <- mf[c(1, mb)]
+    mfb$drop.unused.levels <- TRUE
+    mfb[[1]] <- as.name("model.frame")
+    names(mfb)[2] <- "formula"
+    mfb <- eval(mfb, parent.frame())
+    mt <- attr(mfb, "terms")
+    modmatrix.b <- if (!is.empty.model(mt)) 
+        model.matrix(mt, mfb)
+    else matrix(, NROW(Y), 0)
+    Y <- model.response(mfb, "numeric")
+    weights <- model.weights(mfb)
+    if (!is.null(weights) && any(weights < 0)) 
+        stop("Negative wts not allowed")
+    n <- rowSums(Y)
+    y <- Y[, 1]
+    if (any(n == 0)) 
+        warning("The data set contains at least one line with weight = 0.\n")
+    mr <- match(c("random", "data", "na.action"), names(mf), 
+        0)
+    mr <- mf[c(1, mr)]
+    mr$drop.unused.levels <- TRUE
+    mr[[1]] <- as.name("model.frame")
+    names(mr)[2] <- "formula"
+    mr <- eval(mr, parent.frame())
+    if (length(explain) == 0) 
+        modmatrix.phi <- model.matrix(object = ~1, data = mr)
+    else {
+        express <- paste("model.matrix(object = ~ -1 + ", explain, 
+            ", data = mr", ", contrasts = list(", explain, " = 'contr.treatment'))", 
+            sep = "")
+        if (is.ordered(data[, match(explain, table = names(mr))])) 
+            warning(explain, " is an ordered factor.\n", "Treatment contrast was used to build model matrix for phi.")
+        modmatrix.phi <- eval(parse(text = express))
+    }
+    fam <- eval(parse(text = paste("binomial(link =", link, ")")))
+    fm <- glm(formula = formula, family = fam, data = data, na.action = na.action)
+    b <- coef(fm)
+    if (any(is.na(b))) {
+        print(nab <- b[is.na(b)])
+        stop("Initial values for the fixed effects contain at least one missing value.")
+    }
+    nb.b <- ncol(modmatrix.b)
+    nb.phi <- ncol(modmatrix.phi)
+    if (!is.null(phi.ini) && !(phi.ini < 1 & phi.ini > 0)) 
+        stop("phi.ini was set to ", phi.ini, ".\nphi.ini should verify 0 < phi.ini < 1")
+    else if (is.null(phi.ini)) 
+        phi.ini <- rep(0.1, nb.phi)
+    param.ini <- c(b, phi.ini)
+    if (!is.null(unlist(fixpar))) 
+        param.ini[fixpar[[1]]] <- fixpar[[2]]
+    minuslogL <- function(param) {
+        if (!is.null(unlist(fixpar))) 
+            param[fixpar[[1]]] <- fixpar[[2]]
+        b <- param[1:nb.b]
+        eta <- as.vector(modmatrix.b %*% b)
+        p <- invlink(eta, type = link)
+        phi <- as.vector(modmatrix.phi %*% param[(nb.b + 1):(nb.b + 
+            nb.phi)])
+        cnd <- phi == 0
+        f1 <- dbinom(x = y[cnd], size = n[cnd], prob = p[cnd], 
+            log = TRUE)
+        n2 <- n[!cnd]
+        y2 <- y[!cnd]
+        p2 <- p[!cnd]
+        phi2 <- phi[!cnd]
+        f2 <- lchoose(n2, y2) + lbeta(p2 * (1 - phi2)/phi2 + 
+            y2, (1 - p2) * (1 - phi2)/phi2 + n2 - y2) - lbeta(p2 * 
+            (1 - phi2)/phi2, (1 - p2) * (1 - phi2)/phi2)
+        fn <- sum(c(f1, f2))
+        if (!is.finite(fn)) 
+            fn <- -1e+20
+        -fn
+    }
+    withWarnings <- function(expr) {
+        myWarnings <- NULL
+        wHandler <- function(w) {
+            myWarnings <<- c(myWarnings, list(w))
+            invokeRestart("muffleWarning")
+        }
+        val <- withCallingHandlers(expr, warning = wHandler)
+        list(value = val, warnings = myWarnings)
+    }
+    reswarn <- withWarnings(optim(par = param.ini, fn = minuslogL, 
+        hessian = hessian, control = control, ...))
+    res <- reswarn$value
+    if (warnings) {
+        if (length(reswarn$warnings) > 0) {
+            v <- unlist(lapply(reswarn$warnings, as.character))
+            tv <- data.frame(message = v, freq = rep(1, length(v)))
+            cat("Warnings during likelihood maximisation:\n")
+            print(aggregate(tv[, "freq", drop = FALSE], list(warning = tv$message), 
+                sum))
+        }
+    }
+    param <- res$par
+    namb <- colnames(modmatrix.b)
+    namphi <- paste("phi", colnames(modmatrix.phi), sep = ".")
+    nam <- c(namb, namphi)
+    names(param) <- nam
+    if (!is.null(unlist(fixpar))) 
+        param[fixpar[[1]]] <- fixpar[[2]]
+    H <- H.singular <- Hr.singular <- NA
+    varparam <- matrix(NA)
+    is.singular <- function(X) qr(X)$rank < nrow(as.matrix(X))
+    if (hessian) {
+        H <- res$hessian
+        if (is.null(unlist(fixpar))) {
+            H.singular <- is.singular(H)
+            if (!H.singular) 
+                varparam <- qr.solve(H)
+            else warning("The hessian matrix was singular.\n")
+        }
+        else {
+            idparam <- 1:(nb.b + nb.phi)
+            idestim <- idparam[-fixpar[[1]]]
+            Hr <- as.matrix(H[-fixpar[[1]], -fixpar[[1]]])
+            H.singular <- is.singular(Hr)
+            if (!H.singular) {
+                Vr <- solve(Hr)
+                dimnames(Vr) <- list(idestim, idestim)
+                varparam <- matrix(rep(NA, NROW(H) * NCOL(H)), 
+                  ncol = NCOL(H))
+                varparam[idestim, idestim] <- Vr
+            }
+        }
+    }
+    else varparam <- matrix(NA)
+    if (any(!is.na(varparam))) 
+        dimnames(varparam) <- list(nam, nam)
+    nbpar <- if (is.null(unlist(fixpar))) 
+        sum(!is.na(param))
+    else sum(!is.na(param[-fixpar[[1]]]))
+    logL.max <- sum(dbinom(x = y, size = n, prob = y/n, log = TRUE))
+    logL <- -res$value
+    dev <- -2 * (logL - logL.max)
+    df.residual <- sum(n > 0) - nbpar
+    iterations <- res$counts[1]
+    code <- res$convergence
+    msg <- if (!is.null(res$message)) 
+        res$message
+    else character(0)
+    if (code != 0) 
+        warning("\nPossible convergence problem. Optimization process code: ", 
+            code, " (see ?optim).\n")
+    new(Class = "glimML", CALL = CALL, link = link, method = "BB", 
+        data = data, formula = formula, random = random, param = param, 
+        varparam = varparam, fixed.param = param[seq(along = namb)], 
+        random.param = param[-seq(along = namb)], logL = logL, 
+        logL.max = logL.max, dev = dev, df.residual = df.residual, 
+        nbpar = nbpar, iterations = iterations, code = code, 
+        msg = msg, singular.hessian = as.numeric(H.singular), 
+        param.ini = param.ini, na.action = na.action)
+}
+
+invlink <- function (x, type = c("cloglog", "log", "logit", "probit")) 
+{
+    switch(type, logit = plogis(x), probit = pnorm(x), log = exp(x), cloglog = 1 - 
+        exp(-exp(x)))
+}
+
+link <- function (x, type = c("cloglog", "log", "logit", "probit")) 
+{
+    switch(type, logit = qlogis(x), probit = qnorm(x), 
+    log = log(x), cloglog = log(-log(1 - x)))
+}
+
+
+pr <- function (object, ...) 
+{
+    .local <- function (object, newdata = NULL, type = c("response", 
+        "link"), se.fit = FALSE, ...) 
+    {
+        type <- match.arg(type)
+        mf <- object@CALL
+        b <- coef(object)
+        f <- object@formula[-2]
+        data <- object@data
+        offset <- NULL
+        if (is.null(newdata)) {
+            mb <- match(c("formula", "data", "na.action"), names(mf), 
+                0)
+            mfb <- mf[c(1, mb)]
+            mfb$drop.unused.levels <- TRUE
+            mfb[[1]] <- as.name("model.frame")
+            names(mfb)[2] <- "formula"
+            mfb <- eval(mfb, parent.frame())
+            mt <- attr(mfb, "terms")
+            Y <- model.response(mfb, "numeric")
+            X <- if (!is.empty.model(mt)) 
+                model.matrix(mt, mfb, contrasts)
+            else matrix(, NROW(Y), 0)
+            offset <- model.offset(mfb)
+        }
+        else {
+            mfb <- model.frame(f, newdata)
+            offset <- model.offset(mfb)
+            X <- model.matrix(object = f, data = newdata)
+        }
+        eta <- as.vector(X %*% b)
+        eta <- if (is.null(offset)) 
+            eta
+        else eta + offset
+        varparam <- object@varparam
+        varb <- as.matrix(varparam[seq(length(b)), seq(length(b))])
+        vareta <- X %*% varb %*% t(X)
+        if (type == "response") {
+            p <- invlink(eta, type = object@link)
+            J <- switch(object@link, logit = diag(p * (1 - p), 
+                nrow = length(p)), probit = diag(dnorm( qnorm(p) ), 
+                nrow = length(p)), cloglog = diag(-(1 - p) * 
+                log(1 - p), nrow = length(p)), log = diag(p, 
+                nrow = length(p)))
+            varp <- J %*% vareta %*% J
+            se.p <- sqrt(diag(varp))
+        }
+        se.eta <- sqrt(diag(vareta))
+        if (!se.fit) 
+            res <- switch(type, response = p, link = eta)
+        else res <- switch(type, response = list(fit = p, se.fit = se.p), 
+            link = list(fit = eta, se.fit = se.eta))
+        res
+    }
+    .local(object, ...)
+}
+
+setMethod(predict, "glimML", pr)
+setMethod(fitted, "glimML", function (object, ...) {
+    mf <- object@CALL
+    mb <- match(c("formula", "data", "na.action"), names(mf), 
+        0)
+    mfb <- mf[c(1, mb)]
+    mfb$drop.unused.levels <- TRUE
+    mfb[[1]] <- as.name("model.frame")
+    names(mfb)[2] <- "formula"
+    mfb <- eval(mfb, parent.frame())
+    mt <- attr(mfb, "terms")
+    Y <- model.response(mfb, "numeric")
+    X <- if (!is.empty.model(mt)) 
+        model.matrix(mt, mfb, contrasts)
+    else matrix(, NROW(Y), 0)
+    offset <- model.offset(mfb)
+    b <- coef(object)
+    eta <- as.vector(X %*% b)
+    eta <- if (is.null(offset)) 
+        eta
+    else eta + offset
+    invlink(eta, type = object@link)
+}
+)
diff --git a/multiarea_model/data_multiarea/raw_data/RData_prepared_logdensities.txt b/multiarea_model/data_multiarea/raw_data/RData_prepared_logdensities.txt
deleted file mode 100644
index e4e522c..0000000
--- a/multiarea_model/data_multiarea/raw_data/RData_prepared_logdensities.txt
+++ /dev/null
@@ -1,191 +0,0 @@
-# Data from Markov, N. T. et al (2014). Anatomy of hierarchy: feedforward and feedback pathways in macaque visual cortex. The Journal of Comparative Neurology, 522(1), 225–59. https://doi.org/10.1002/cne.23458
-
-TO FROM S I TOT DIST DENS Monkey lFLN SLN INJ FLN cSLN 
-228 MT V1 11360 1397 12757 12.5 -0.7590340 M133LH -1.7213724 0.89049149 MT.M133LH 0.01899448 0.39049149
-229 MT V2 75554 4679 80233 13.6 -0.3197489 M133LH -0.9227680 0.94168235 MT.M133LH 0.11946260 0.44168235
-230 MT V3 30730 3552 34282 11 -0.3197489 M133LH -1.2920548 0.89638877 MT.M133LH 0.05104404 0.39638877
-231 MT V3A 19434 3076 22510 8 0.05648670 M133LH -1.4747455 0.86334962 MT.M133LH 0.03351617 0.36334962
-232 MT V4 157420 98416 255836 9.4 -0.0606007 M133LH -0.4191593 0.61531606 MT.M133LH 0.38092600 0.11531606
-235 MT 7A 201 103 304 18.8 0.42911665 M133LH -3.3442474 0.66118421 MT.M133LH 0.00045263 0.16118421
-236 MT LIP 8126 7232 15358 13.2 0.15825217 M133LH -1.6407863 0.52910535 MT.M133LH 0.02286723 0.02910535
-240 MT DP 8240 1596 9836 15.6 0.24116266 M133LH -1.8343025 0.83773891 MT.M133LH 0.01464527 0.33773891
-244 MT STPc 60 1136 1196 19 0.35417007 M133LH -2.7493898 0.05016722 MT.M133LH 0.00178077 -0.4498327
-248 MT FST 11876 29668 41544 8.9 0.41244385 M133LH -1.2086127 0.28586558 MT.M133LH 0.06185677 -0.2141344
-249 MT MST 721 3136 3857 16.2 0.29058445 M133LH -2.2408713 0.18693284 MT.M133LH 0.00574286 -0.3130671
-250 MT TEO 8536 17120 25656 9.7 -0.0261737 M133LH -1.4179320 0.33270969 MT.M133LH 0.03820040 -0.1672903
-255 MT TEpd 1892 7210 9102 16.6 0.27694801 M133LH -1.8679842 0.20786640 MT.M133LH 0.01355238 -0.2921335
-259 MT TH/TF 1044 5278 6322 14.3 0.32588601 M133LH -2.0262665 0.16513761 MT.M133LH 0.00941311 -0.3348623
-281 MT 8l 1028 500 1528 31.8 0.28837606 M133LH -2.6429976 0.67277486 MT.M133LH 0.00227510 0.17277486
-282 MT 8m 172 250 422 31.7 0.28837606 M133LH -3.2018085 0.40758293 MT.M133LH 0.00062833 -0.0924170
-351 TEO V2 3597 242 3839 12.2 -0.2935752 M119LH -1.6087951 0.93696275 TEO.M119LH 0.02461528 0.43696275
-352 TEO V3 16083 3006 19089 11.3 -0.2935752 M119LH -0.9122300 0.84252710 TEO.M119LH 0.12239676 0.34252710
-353 TEO V3A 26 51 77 15.3 0.08266046 M119LH -3.3065225 0.33766233 TEO.M119LH 0.00049371 -0.1623376
-354 TEO V4 26501 13405 39906 9.8 -0.0344269 M119LH -0.5919750 0.66408560 TEO.M119LH 0.25587330 0.16408560
-356 TEO 7A 0 72 72 24.6 0.45529041 M119LH -3.3356807 0 TEO.M119LH 0.00046165 -0.5
-358 TEO LIP 380 852 1232 20.8 0.18442593 M119LH -2.1024025 0.30844155 TEO.M119LH 0.00789946 -0.1915584
-361 TEO DP 48 134 182 21.3 0.26733642 M119LH -2.9329418 0.26373626 TEO.M119LH 0.00116696 -0.2362637
-366 TEO STPc 0 3 3 24.8 0.38034383 M119LH -4.7158919 0 TEO.M119LH 1.92357014 -0.5
-369 TEO FST 4046 6832 10878 7.2 0.43861761 M119LH -1.1564641 0.37194337 TEO.M119LH 0.06974865 -0.1280566
-370 TEO MST 0 91 91 23.1 0.31675821 M119LH -3.2339718 0 TEO.M119LH 0.00058348 -0.5
-371 TEO MT 1614 2191 3805 9.7 0.02617375 M119LH -1.6126585 0.42417871 TEO.M119LH 0.02439728 -0.0758212
-376 TEO TEpd 12615 23462 36077 10.7 0.30312177 M119LH -0.6357828 0.34966876 TEO.M119LH 0.23132213 -0.1503312
-381 TEO TH/TF 54 2222 2276 14.2 0.35205977 M119LH -1.8358409 0.02372583 TEO.M119LH 0.01459348 -0.4762741
-405 TEO 8l 711 238 949 32.3 0.31454982 M119LH -2.2157470 0.74920969 TEO.M119LH 0.00608489 0.24920969
-469 V1 V2 8637 18725 27362 9.3 0.43928511 M88RH -1.3302136 0.31565675 V1.M88RH 0.75137302 -0.1843432
-470 V1 V3 0 136 136 4.5 0.43928511 M88RH -3.6338225 0 V1.M88RH 0.00373462 -0.5
-471 V1 V3A 0 190 190 10.5 0.81552080 M88RH -3.4886078 0 V1.M88RH 0.00521748 -0.5
-472 V1 V4 388 2218 2606 14.8 0.69843339 M88RH -2.3513870 0.14888718 V1.M88RH 0.07156195 -0.3511128
-475 V1 LIP 0 56 56 22.7 0.91728626 M88RH -4.0191734 0 V1.M88RH 0.00153778 -0.5
-477 V1 DP 0 29 29 16.5 1.00019675 M88RH -4.3049634 0 V1.M88RH 0.00079635 -0.5
-479 V1 STPc 3 62 65 29.5 1.11320417 M88RH -3.9544481 0.04615384 V1.M88RH 0.00178492 -0.4538461
-483 V1 FST 0 368 368 16.7 1.17147795 M88RH -3.2015136 0 V1.M88RH 0.01010544 -0.5
-484 V1 MST 0 251 251 23.2 1.04961855 M88RH -3.3676877 0 V1.M88RH 0.00689257 -0.5
-485 V1 MT 279 2571 2850 12.5 0.75903409 M88RH -2.3125165 0.09789473 V1.M88RH 0.07826230 -0.4021052
-486 V1 TEO 24 911 935 14.9 0.73286033 M88RH -2.7965498 0.02566844 V1.M88RH 0.02567552 -0.4743315
-491 V1 TEpd 0 224 224 25.5 1.03598210 M88RH -3.4171134 0 V1.M88RH 0.00615114 -0.5
-495 V1 TH/TF 0 228 228 24.4 1.08492011 M88RH -3.4094266 0 V1.M88RH 0.00626098 -0.5
-500 V1 8l 0 6 6 45.6 1.04741016 M88RH -4.9892102 0 V1.M88RH 0.00016476 -0.5
-501 V1 V2 65943 75360 141303 9.3 0.43928511 M85RH -0.6172100 0.46667798 V1.M85RH 0.70805501 -0.0333220
-502 V1 V3 68 1293 1361 4.5 0.43928511 M85RH -2.6335033 0.04996326 V1.M85RH 0.00681983 -0.4500367
-503 V1 V3A 2 312 314 10.5 0.81552080 M85RH -3.2704318 0.00636942 V1.M85RH 0.00157342 -0.4936305
-504 V1 V4 11402 18726 30128 14.8 0.69843339 M85RH -1.2883911 0.37845193 V1.M85RH 0.15096835 -0.1215480
-506 V1 LIP 0 190 190 22.7 0.91728626 M85RH -3.4886078 0 V1.M85RH 0.00095207 -0.5
-508 V1 DP 2 99 101 16.5 1.00019675 M85RH -3.7630400 0.01980198 V1.M85RH 0.00050610 -0.4801980
-511 V1 STPc 34 353 387 29.5 1.11320417 M85RH -3.1796504 0.08785529 V1.M85RH 0.00193921 -0.4121447
-514 V1 FST 92 1640 1732 16.7 1.17147795 M85RH -2.5288135 0.05311778 V1.M85RH 0.00867887 -0.4468822
-515 V1 MST 36 1262 1298 23.2 1.04961855 M85RH -2.6540867 0.02773497 V1.M85RH 0.00650414 -0.4722650
-516 V1 MT 2572 7872 10444 12.5 0.75903409 M85RH -1.7484945 0.24626579 V1.M85RH 0.05233382 -0.2537342
-517 V1 TEO 933 6689 7622 14.9 0.73286033 M85RH -1.8852925 0.12240881 V1.M85RH 0.03819306 -0.3775911
-522 V1 TEpd 13 800 813 25.5 1.03598210 M85RH -2.8572709 0.01599015 V1.M85RH 0.00407386 -0.4840098
-526 V1 TH/TF 9 685 694 24.4 1.08492011 M85RH -2.9260019 0.01296829 V1.M85RH 0.00347756 -0.4870317
-531 V1 8l 16 49 65 45.6 1.04741016 M85RH -3.9544481 0.24615384 V1.M85RH 0.00032570 -0.2538461
-532 V1 V2 51822 53242 105064 9.3 0.43928511 M85LH -0.7459075 0.49324221 V1.M85LH 0.75233798 -0.0067577
-533 V1 V3 26 847 873 4.5 0.43928511 M85LH -2.8263472 0.02978235 V1.M85LH 0.00625134 -0.4702176
-534 V1 V3A 0 186 186 10.5 0.81552080 M85LH -3.4978485 0 V1.M85LH 0.00133190 -0.5
-535 V1 V4 4851 8410 13261 14.8 0.69843339 M85LH -1.6447851 0.36580951 V1.M85LH 0.09495882 -0.1341904
-537 V1 LIP 0 125 125 22.7 0.91728626 M85LH -3.6704514 0 V1.M85LH 0.00089509 -0.5
-539 V1 DP 0 110 110 16.5 1.00019675 M85LH -3.7259687 0 V1.M85LH 0.00078768 -0.5
-542 V1 STPc 5 236 241 29.5 1.11320417 M85LH -3.3853444 0.02074688 V1.M85LH 0.00172574 -0.4792531
-545 V1 FST 15 1057 1072 16.7 1.17147795 M85LH -2.7371666 0.01399253 V1.M85LH 0.00767633 -0.4860074
-546 V1 MST 10 604 614 23.2 1.04961855 M85LH -2.9791930 0.01628664 V1.M85LH 0.00439670 -0.4837133
-547 V1 MT 2242 5040 7282 12.5 0.75903409 M85LH -1.9051107 0.30788244 V1.M85LH 0.05214464 -0.1921175
-548 V1 TEO 784 4649 5433 14.9 0.73286033 M85LH -2.0323217 0.14430333 V1.M85LH 0.03890440 -0.3556966
-553 V1 TEpd 14 685 699 25.5 1.03598210 M85LH -2.9228842 0.02002861 V1.M85LH 0.00500537 -0.4799713
-557 V1 TH/TF 12 720 732 24.4 1.08492011 M85LH -2.9028503 0.01639344 V1.M85LH 0.00524167 -0.4836065
-560 V1 8l 2 15 17 45.6 1.04741016 M85LH -4.5369125 0.11764705 V1.M85LH 0.00012173 -0.3823529
-561 V1 V2 29516 56616 86132 9.3 0.43928511 M81LH -0.8321969 0.34268332 V1.M81LH 0.76599907 -0.1573166
-562 V1 V3 7 922 929 4.5 0.43928511 M81LH -2.7993457 0.00753498 V1.M81LH 0.00826189 -0.4924650
-563 V1 V3A 0 163 163 10.5 0.81552080 M81LH -3.5551738 0 V1.M81LH 0.00144961 -0.5
-564 V1 V4 1737 11434 13171 14.8 0.69843339 M81LH -1.6477427 0.13188064 V1.M81LH 0.11713386 -0.3681193
-566 V1 LIP 1 127 128 22.7 0.91728626 M81LH -3.6601514 0.0078125 V1.M81LH 0.00113834 -0.4921875
-568 V1 DP 0 20 20 16.5 1.00019675 M81LH -4.4663314 0 V1.M81LH 0.00017786 -0.5
-571 V1 STPc 0 141 141 29.5 1.11320417 M81LH -3.6181423 0 V1.M81LH 0.00125395 -0.5
-574 V1 FST 2 498 500 16.7 1.17147795 M81LH -3.0683914 0.004 V1.M81LH 0.00444665 -0.496
-575 V1 MST 0 1480 1480 23.2 1.04961855 M81LH -2.5970997 0 V1.M81LH 0.01316210 -0.5
-576 V1 MT 496 6194 6690 12.5 0.75903409 M81LH -1.9419353 0.07414050 V1.M81LH 0.05949628 -0.4258594
-577 V1 TEO 0 846 846 14.9 0.73286033 M81LH -2.8399910 0 V1.M81LH 0.00752374 -0.5
-582 V1 TEpd 2 181 183 25.5 1.03598210 M81LH -3.5049103 0.01092896 V1.M81LH 0.00162747 -0.4890710
-586 V1 TH/TF 0 396 396 24.4 1.08492011 M81LH -3.1696662 0 V1.M81LH 0.00352175 -0.5
-590 V1 8l 2 14 16 45.6 1.04741016 M81LH -4.5632414 0.125 V1.M81LH 0.00014229 -0.375
-592 V1 V2 32247 34144 66391 9.3 0.43928511 M121RH -0.9452522 0.48571342 V1.M121RH 0.68302092 -0.0142865
-593 V1 V3 228 692 920 4.5 0.43928511 M121RH -2.8035736 0.24782608 V1.M121RH 0.00946482 -0.2521739
-594 V1 V3A 2 128 130 10.5 0.81552080 M121RH -3.6534181 0.01538461 V1.M121RH 0.00133742 -0.4846153
-595 V1 V4 9075 10757 19832 14.8 0.69843339 M121RH -1.4699949 0.45759378 V1.M121RH 0.20402872 -0.0424062
-597 V1 LIP 7 179 186 22.7 0.91728626 M121RH -3.4978485 0.03763440 V1.M121RH 0.00191354 -0.4623655
-599 V1 DP 0 18 18 16.5 1.00019675 M121RH -4.5120889 0 V1.M121RH 0.00018518 -0.5
-601 V1 STPc 4 148 152 29.5 1.11320417 M121RH -3.5855178 0.02631578 V1.M121RH 0.00156375 -0.4736842
-604 V1 FST 22 634 656 16.7 1.17147795 M121RH -2.9504576 0.03353658 V1.M121RH 0.00674883 -0.4664634
-605 V1 MST 0 186 186 23.2 1.04961855 M121RH -3.4978485 0 V1.M121RH 0.00191354 -0.5
-606 V1 MT 708 4349 5057 12.5 0.75903409 M121RH -2.0634685 0.14000395 V1.M121RH 0.05202567 -0.3599960
-607 V1 TEO 454 1964 2418 14.9 0.73286033 M121RH -2.3839051 0.18775847 V1.M121RH 0.02487603 -0.3122415
-612 V1 TEpd 7 119 126 25.5 1.03598210 M121RH -3.6669909 0.05555555 V1.M121RH 0.00129626 -0.4444444
-616 V1 TH/TF 0 132 132 24.4 1.08492011 M121RH -3.6467875 0 V1.M121RH 0.00135799 -0.5
-618 V1 8l 1 30 31 45.6 1.04741016 M121RH -4.2759997 0.03225806 V1.M121RH 0.00031892 -0.4677419
-619 V2 V1 182752 79527 262279 9.3 -0.4392851 M101LH -0.4787420 0.69678472 V2.M101LH 0.73252878 0.19678472
-620 V2 V3 4414 9887 14301 10.2 0.0 M101LH -1.7421391 0.30864974 V2.M101LH 0.03994179 -0.1913502
-621 V2 V3A 0 399 399 14.9 0.37623569 M101LH -3.2965326 0 V2.M101LH 0.00111438 -0.5
-622 V2 V4 18399 43858 62257 9.4 0.25914828 M101LH -1.1033173 0.29553303 V2.M101LH 0.17387989 -0.2044669
-624 V2 LIP 8 307 315 21.4 0.47800115 M101LH -3.3991950 0.02539682 V2.M101LH 0.00087977 -0.4746031
-627 V2 DP 2 142 144 21.6 0.56091164 M101LH -3.7391430 0.01388888 V2.M101LH 0.00040218 -0.4861111
-630 V2 STPc 0 34 34 28.2 0.67391906 M101LH -4.3660266 0 V2.M101LH 9.49598654 -0.5
-634 V2 FST 40 767 807 16.2 0.73219284 M101LH -2.9906320 0.04956629 V2.M101LH 0.00225390 -0.4504337
-635 V2 MST 5 276 281 23.4 0.61033344 M101LH -3.4487992 0.01779359 V2.M101LH 0.00078481 -0.4822064
-636 V2 MT 3918 9156 13074 13.6 0.31974898 M101LH -1.7810971 0.29967875 V2.M101LH 0.03651486 -0.2003212
-637 V2 TEO 46 1291 1337 12.2 0.29357522 M101LH -2.7713741 0.03440538 V2.M101LH 0.00373415 -0.4655946
-642 V2 TEpd 4 281 285 19.8 0.59669699 M101LH -3.4426607 0.01403508 V2.M101LH 0.00079598 -0.4859649
-646 V2 TH/TF 5 700 705 19 0.64563500 M101LH -3.0493164 0.00709219 V2.M101LH 0.00196902 -0.4929078
-648 V2 8l 4 28 32 40.2 0.60812505 M101LH -4.3923556 0.125 V2.M101LH 8.93739910 -0.375
-649 V2 8m 0 6 6 40.3 0.60812505 M101LH -5.1193543 0 V2.M101LH 1.67576233 -0.5
-650 V2 V1 143448 47865 191313 9.3 -0.4392851 M101RH -0.6157610 0.74980790 V2.M101RH 0.78266472 0.24980790
-651 V2 V3 3159 7431 10590 10.2 0.0 M101RH -1.8726096 0.29830028 V2.M101RH 0.04332386 -0.2016997
-652 V2 V3A 65 853 918 14.9 0.37623569 M101RH -2.9346629 0.07080610 V2.M101RH 0.00375555 -0.4291938
-653 V2 V4 3871 23048 26919 9.4 0.25914828 M101RH -1.4674466 0.14380177 V2.M101RH 0.11012608 -0.3561982
-655 V2 LIP 17 346 363 21.4 0.47800115 M101RH -3.3375989 0.04683195 V2.M101RH 0.00148503 -0.4531680
-658 V2 DP 2 202 204 21.6 0.56091164 M101RH -3.5878754 0.00980392 V2.M101RH 0.00083456 -0.4901960
-661 V2 STPc 0 20 20 28.2 0.67391906 M101RH -4.5964755 0 V2.M101RH 8.18203388 -0.5
-664 V2 FST 47 535 582 16.2 0.73219284 M101RH -3.1325825 0.08075601 V2.M101RH 0.00238097 -0.4192439
-665 V2 MST 5 290 295 23.4 0.61033344 M101RH -3.4276835 0.01694915 V2.M101RH 0.00120684 -0.4830508
-666 V2 MT 2734 7239 9973 13.6 0.31974898 M101RH -1.8986797 0.27414017 V2.M101RH 0.04079971 -0.2258598
-667 V2 TEO 94 1128 1222 12.2 0.29357522 M101RH -2.8104343 0.07692307 V2.M101RH 0.00499922 -0.4230769
-672 V2 TEpd 6 142 148 19.8 0.59669699 M101RH -3.7272438 0.04054054 V2.M101RH 0.00060547 -0.4594594
-676 V2 TH/TF 5 548 553 19 0.64563500 M101RH -3.1547804 0.00904159 V2.M101RH 0.00226233 -0.4909584
-678 V2 8l 12 16 28 40.2 0.60812505 M101RH -4.4503475 0.42857142 V2.M101RH 0.00011454 -0.0714285
-679 V2 8m 0 14 14 40.3 0.60812505 M101RH -4.7513775 0 V2.M101RH 5.72742372 -0.5
-680 V2 V1 110574 34672 145246 9.3 -0.4392851 M103LH -0.7354014 0.76128774 V2.M103LH 0.77549320 0.26128774
-681 V2 V3 699 1258 1957 10.2 0.0 M103LH -2.6059147 0.35717935 V2.M103LH 0.01044875 -0.1428206
-682 V2 V3A 2 171 173 14.9 0.37623569 M103LH -3.6594594 0.01156069 V2.M103LH 0.00092367 -0.4884393
-683 V2 V4 10318 21520 31838 9.4 0.25914828 M103LH -1.3945598 0.32407814 V2.M103LH 0.16998852 -0.1759218
-685 V2 LIP 7 86 93 21.4 0.47800115 M103LH -3.9290226 0.07526881 V2.M103LH 0.00049654 -0.4247311
-688 V2 DP 1 4 5 21.6 0.56091164 M103LH -5.1985355 0.2 V2.M103LH 2.66958541 -0.3
-693 V2 STPc 0 16 16 28.2 0.67391906 M103LH -4.6933855 0 V2.M103LH 8.54267332 -0.5
-696 V2 FST 24 272 296 16.2 0.73219284 M103LH -3.4262138 0.08108108 V2.M103LH 0.00158039 -0.4189189
-697 V2 MST 1 45 46 23.4 0.61033344 M103LH -4.2347477 0.02173913 V2.M103LH 0.00024560 -0.4782608
-698 V2 MT 1299 4297 5596 13.6 0.31974898 M103LH -2.1496278 0.23213009 V2.M103LH 0.02987799 -0.2678699
-699 V2 TEO 33 171 204 12.2 0.29357522 M103LH -3.5878754 0.16176470 V2.M103LH 0.00108919 -0.3382352
-704 V2 TEpd 14 315 329 19.8 0.59669699 M103LH -3.3803096 0.04255319 V2.M103LH 0.00175658 -0.4574468
-708 V2 TH/TF 3 212 215 19 0.64563500 M103LH -3.5650671 0.01395348 V2.M103LH 0.00114792 -0.4860465
-711 V2 8l 4 19 23 40.2 0.60812505 M103LH -4.5357777 0.17391304 V2.M103LH 0.00012280 -0.3260869
-712 V4 V1 1665 8 1673 14.8 -0.6984333 M123LH -2.1413063 0.99521817 V4.M123LH 0.01789036 0.49521817
-713 V4 V2 35964 4775 40739 9.4 -0.2591482 M123LH -0.7547919 0.88279044 V4.M123LH 0.43564599 0.38279044
-714 V4 V3 744 648 1392 12.9 -0.2591482 M123LH -2.2211630 0.53448275 V4.M123LH 0.01488547 0.03448275
-715 V4 V3A 0 14 14 12.4 0.11708740 M123LH -4.2186742 0 V4.M123LH 0.00014971 -0.5
-717 V4 7A 0 4 4 22.8 0.48971736 M123LH -4.7627423 0 V4.M123LH 4.27743439 -0.5
-718 V4 LIP 28 124 152 21.4 0.21885287 M123LH -3.1829587 0.18421052 V4.M123LH 0.00162542 -0.3157894
-720 V4 DP 0 4 4 15 0.30176336 M123LH -4.7627423 0 V4.M123LH 4.27743439 -0.5
-723 V4 STPc 0 8 8 25.7 0.41477077 M123LH -4.4617123 0 V4.M123LH 8.55486878 -0.5
-726 V4 FST 252 1117 1369 15.5 0.47304456 M123LH -2.2283988 0.18407596 V4.M123LH 0.01463951 -0.3159240
-727 V4 MST 0 8 8 23.6 0.35118515 M123LH -4.4617123 0 V4.M123LH 8.55486878 -0.5
-728 V4 MT 4640 4932 9572 9.4 0.06060070 M123LH -1.3837996 0.48474717 V4.M123LH 0.10235900 -0.0152528
-729 V4 TEO 9456 12885 22341 9.8 0.03442694 M123LH -1.0156996 0.42325768 V4.M123LH 0.23890540 -0.0767423
-734 V4 TEpd 1368 5696 7064 16.5 0.33754871 M123LH -1.5157516 0.19365798 V4.M123LH 0.07553949 -0.3063420
-739 V4 TH/TF 26 1226 1252 19.4 0.38648672 M123LH -2.2671979 0.02076677 V4.M123LH 0.01338836 -0.4792332
-743 V4 8l 128 58 186 39.5 0.34897677 M123LH -3.0952893 0.68817204 V4.M123LH 0.00198900 0.18817204
-745 V4 V1 1097 36 1133 14.8 -0.6984333 M121RH -2.3105723 0.96822594 V4.M121RH 0.00820301 0.46822594
-746 V4 V2 46329 1467 47796 9.4 -0.2591482 M121RH -0.6854107 0.96930705 V4.M121RH 0.34604691 0.46930705
-747 V4 V3 4768 1311 6079 12.9 -0.2591482 M121RH -1.5809701 0.78433952 V4.M121RH 0.04401245 0.28433952
-748 V4 V3A 0 7 7 12.4 0.11708740 M121RH -4.5197042 0 V4.M121RH 5.06805676 -0.5
-750 V4 7A 2 21 23 22.8 0.48971736 M121RH -4.0030744 0.08695652 V4.M121RH 0.00016652 -0.4130434
-751 V4 LIP 126 385 511 21.4 0.21885287 M121RH -2.6563814 0.24657534 V4.M121RH 0.00369968 -0.2534246
-753 V4 DP 0 21 21 15 0.30176336 M121RH -4.0425830 0 V4.M121RH 0.00015204 -0.5
-756 V4 STPc 0 18 18 25.7 0.41477077 M121RH -4.1095298 0 V4.M121RH 0.00013032 -0.5
-759 V4 FST 213 1229 1442 15.5 0.47304456 M121RH -2.2058370 0.14771151 V4.M121RH 0.01044019 -0.3522884
-760 V4 MST 2 21 23 23.6 0.35118515 M121RH -4.0030744 0.08695652 V4.M121RH 0.00016652 -0.4130434
-761 V4 MT 4042 5212 9254 9.4 0.06060070 M121RH -1.3984728 0.43678409 V4.M121RH 0.06699971 -0.0632159
-762 V4 TEO 14305 18392 32697 9.8 0.03442694 M121RH -0.8502943 0.43750191 V4.M121RH 0.23672893 -0.0624980
-767 V4 TEpd 3646 6605 10251 16.5 0.33754871 M121RH -1.3540360 0.35567261 V4.M121RH 0.07421807 -0.1443273
-772 V4 TH/TF 7 2073 2080 19.4 0.38648672 M121RH -2.0467389 0.00336538 V4.M121RH 0.01505936 -0.4966346
-775 V4 8l 205 189 394 39.5 0.34897677 M121RH -2.7693060 0.52030456 V4.M121RH 0.00285259 0.02030456
-779 DP V2 18191 1690 19881 21.6 -0.5609116 M89LH -1.1022499 0.91499421 DP.M89LH 0.07902236 0.41499421
-780 DP V3 1172 96 1268 12.9 -0.5609116 M89LH -2.2975689 0.92429022 DP.M89LH 0.00504000 0.42429022
-781 DP V3A 5798 2266 8064 12 -0.1846759 M89LH -1.4941376 0.71899801 DP.M89LH 0.03205253 0.21899801
-782 DP V4 42584 42351 84935 15 -0.3017633 M89LH -0.4716015 0.50137163 DP.M89LH 0.33759693 0.00137163
-785 DP 7A 10229 19451 29680 11.4 0.18795399 M89LH -0.9282242 0.34464285 DP.M89LH 0.11797111 -0.1553571
-786 DP LIP 1871 3212 5083 11.9 -0.0829104 M89LH -1.6945680 0.36808971 DP.M89LH 0.02020374 -0.1319102
-795 DP STPc 0 85 85 15.2 0.11300741 M89LH -3.4712692 0 DP.M89LH 0.00033785 -0.5
-799 DP FST 695 1914 2609 20.2 0.17128119 M89LH -1.9842141 0.26638558 DP.M89LH 0.01037017 -0.2336144
-800 DP MST 3940 9102 13042 13.8 0.04942179 M89LH -1.2853440 0.30210090 DP.M89LH 0.05183892 -0.1978990
-801 DP MT 19664 21198 40862 15.6 -0.2411626 M89LH -0.7893685 0.48122950 DP.M89LH 0.16241697 -0.0187704
-802 DP TEO 13 72 85 21.3 -0.2673364 M89LH -3.4712692 0.15294117 DP.M89LH 0.00033785 -0.3470588
-807 DP TEpd 51 255 306 28.8 0.03578535 M89LH -2.9149667 0.16666666 DP.M89LH 0.00121627 -0.3333333
-812 DP TH/TF 928 3600 4528 33.1 0.08472335 M89LH -1.7447817 0.20494699 DP.M89LH 0.01799775 -0.2950530
-830 DP 8m 251 235 486 41.3 0.04721340 M89LH -2.7140519 0.51646090 DP.M89LH 0.00193173 0.01646090
-- 
GitLab