From 3007ddc5fda58e9859d32d68be51a03c4d34e9f5 Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Tue, 30 Aug 2016 15:02:37 +0200
Subject: [PATCH] add second datasource

---
 .gitignore                                    |    1 +
 docker/runner/config/application.tmpl         |    5 +
 .../eu/hbp/mip/controllers/GroupsApi.java     |   23 +-
 .../eu/hbp/mip/controllers/RequestsApi.java   |    2 +-
 .../java/eu/hbp/mip/controllers/StatsApi.java |   11 +-
 .../eu/hbp/mip/controllers/VariablesApi.java  |   35 +-
 .../hbp/mip/repositories/GroupRepository.java |   11 -
 .../mip/repositories/VariableRepository.java  |   11 -
 src/main/java/eu/hbp/mip/utils/CSVUtil.java   |  217 --
 src/main/resources/data/variables.json        | 2107 +++++++++++++++++
 10 files changed, 2161 insertions(+), 262 deletions(-)
 delete mode 100644 src/main/java/eu/hbp/mip/repositories/GroupRepository.java
 delete mode 100644 src/main/java/eu/hbp/mip/repositories/VariableRepository.java
 delete mode 100644 src/main/java/eu/hbp/mip/utils/CSVUtil.java
 create mode 100644 src/main/resources/data/variables.json

diff --git a/.gitignore b/.gitignore
index 533ab0d6d..7ab25eb2c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ target/
 .DS_Store
 .m2
 *.jar
+src/main/resources/data/
diff --git a/docker/runner/config/application.tmpl b/docker/runner/config/application.tmpl
index f6e1647e4..a60439803 100644
--- a/docker/runner/config/application.tmpl
+++ b/docker/runner/config/application.tmpl
@@ -7,6 +7,11 @@ spring:
     username: {{ default .Env.DB_USER "postgres" }}
     password: {{ .Env.DB_PASSWORD }}
     driver-class-name: org.postgresql.Driver
+  variablesDatasource:
+    url: {{ default .Env.VARIABLES_DB_URL "jdbc:postgresql://172.22.0.1:5433/postgres" }}
+    username: {{ default .Env.VARIABLES_DB_USER "postgres" }}
+    password: {{ .Env.VARIABLES_DB_PASSWORD }}
+    driver-class-name: org.postgresql.Driver
   jpa:
     hibernate:
       dialect: org.hibernate.dialect.PostgreSQL9Dialect
diff --git a/src/main/java/eu/hbp/mip/controllers/GroupsApi.java b/src/main/java/eu/hbp/mip/controllers/GroupsApi.java
index dec89f6c3..571553bcb 100644
--- a/src/main/java/eu/hbp/mip/controllers/GroupsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/GroupsApi.java
@@ -4,19 +4,24 @@
 
 package eu.hbp.mip.controllers;
 
+import com.google.gson.Gson;
+import com.google.gson.stream.JsonReader;
+import eu.hbp.mip.model.Variable;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import eu.hbp.mip.model.Group;
-import eu.hbp.mip.repositories.GroupRepository;
 import org.apache.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
 import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 
 @RestController
@@ -26,18 +31,22 @@ public class GroupsApi {
 
     private static final Logger LOGGER = Logger.getLogger(GroupsApi.class);
 
-    private static final String ROOT_CODE = "root";
+    private static final String VARIABLES_FILE = "data/variables.json";
 
-    @Autowired
-    GroupRepository groupRepository;
 
     @ApiOperation(value = "Get the root group (containing all subgroups)", response = Group.class)
     @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(method = RequestMethod.GET)
-    public ResponseEntity<Group> getTheRootGroup()  {
+    public ResponseEntity<Object> getTheRootGroup()  {
         LOGGER.info("Get root group and its whole sub-groups tree");
 
-        return ResponseEntity.ok(groupRepository.findOne(ROOT_CODE));
+        InputStream is = Variable.class.getClassLoader().getResourceAsStream(VARIABLES_FILE);
+        InputStreamReader isr = new InputStreamReader(is);
+        BufferedReader br = new BufferedReader(isr);
+
+        Object hierarchy = new Gson().fromJson(new JsonReader(br), Object.class);
+
+        return ResponseEntity.ok(hierarchy);
     }
 
 
diff --git a/src/main/java/eu/hbp/mip/controllers/RequestsApi.java b/src/main/java/eu/hbp/mip/controllers/RequestsApi.java
index 116a1ac96..2d55bc4f6 100644
--- a/src/main/java/eu/hbp/mip/controllers/RequestsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/RequestsApi.java
@@ -32,7 +32,7 @@ public class RequestsApi {
     )  {
         LOGGER.info("Post a request");
 
-        return ResponseEntity.ok(null);
+        return ResponseEntity.ok(null);  // TODO: Get data from second datasource
     }
 
 }
diff --git a/src/main/java/eu/hbp/mip/controllers/StatsApi.java b/src/main/java/eu/hbp/mip/controllers/StatsApi.java
index 015929d11..315051856 100644
--- a/src/main/java/eu/hbp/mip/controllers/StatsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/StatsApi.java
@@ -4,14 +4,13 @@
 
 package eu.hbp.mip.controllers;
 
-import eu.hbp.mip.repositories.VariableRepository;
+import eu.hbp.mip.model.GeneralStats;
+import eu.hbp.mip.repositories.ArticleRepository;
+import eu.hbp.mip.repositories.UserRepository;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
-import eu.hbp.mip.model.GeneralStats;
-import eu.hbp.mip.repositories.ArticleRepository;
-import eu.hbp.mip.repositories.UserRepository;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -34,8 +33,6 @@ public class StatsApi {
     @Autowired
     ArticleRepository articleRepository;
 
-    @Autowired
-    VariableRepository variableRepository;
 
     @ApiOperation(value = "Get general statistics", response = GeneralStats.class)
     @ApiResponses(value = {@ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
@@ -47,7 +44,7 @@ public class StatsApi {
 
         stats.setUsers(userRepository.count());
         stats.setArticles(articleRepository.count());
-        stats.setVariables(variableRepository.count());
+        stats.setVariables(0L);  // TODO: compute from adni_merge DB
 
         return ResponseEntity.ok(stats);
     }
diff --git a/src/main/java/eu/hbp/mip/controllers/VariablesApi.java b/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
index 505b90bdb..7849409a9 100644
--- a/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
@@ -5,15 +5,18 @@
 package eu.hbp.mip.controllers;
 
 
-import eu.hbp.mip.repositories.VariableRepository;
-import io.swagger.annotations.*;
+import com.google.gson.Gson;
+import com.google.gson.stream.JsonReader;
 import eu.hbp.mip.model.Value;
 import eu.hbp.mip.model.Variable;
+import io.swagger.annotations.*;
 import org.apache.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.util.List;
 
 import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
@@ -25,8 +28,8 @@ public class VariablesApi {
 
     private static final Logger LOGGER = Logger.getLogger(VariablesApi.class);
 
-    @Autowired
-    VariableRepository variableRepository;
+    private static final String VARIABLES_FILE = "data/variables.json";
+
 
     @ApiOperation(value = "Get variables", response = Variable.class, responseContainer = "List")
     @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
@@ -41,7 +44,7 @@ public class VariablesApi {
     )  {
         LOGGER.info("Get variables");
 
-        return ResponseEntity.ok(variableRepository.findAll());
+        return ResponseEntity.ok(null);  // TODO : findall
     }
 
     @ApiOperation(value = "Get a variable", response = Variable.class)
@@ -52,7 +55,7 @@ public class VariablesApi {
     )  {
         LOGGER.info("Get a variable");
 
-        return ResponseEntity.ok(variableRepository.findOne(code));
+        return ResponseEntity.ok(null); // TODO findOne(code)
     }
 
 
@@ -65,7 +68,23 @@ public class VariablesApi {
     )  {
         LOGGER.info("Get values from a variable");
 
-        return ResponseEntity.ok(variableRepository.findOne(code).getValues());
+        return ResponseEntity.ok(null);  // TODO : findOne(code).getValues()
+    }
+
+    @ApiOperation(value = "Get groups and variables hierarchy", response = Variable.class)
+    @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
+    @RequestMapping(value = "/hierarchy", method = RequestMethod.GET)
+    public ResponseEntity<Object> getAVariable(
+    )  {
+        LOGGER.info("Get groups and variables hierarchy");
+
+        InputStream is = Variable.class.getClassLoader().getResourceAsStream(VARIABLES_FILE);
+        InputStreamReader isr = new InputStreamReader(is);
+        BufferedReader br = new BufferedReader(isr);
+
+        Object hierarchy = new Gson().fromJson(new JsonReader(br), Object.class);
+
+        return ResponseEntity.ok(hierarchy);
     }
 
 
diff --git a/src/main/java/eu/hbp/mip/repositories/GroupRepository.java b/src/main/java/eu/hbp/mip/repositories/GroupRepository.java
deleted file mode 100644
index ab6839f71..000000000
--- a/src/main/java/eu/hbp/mip/repositories/GroupRepository.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package eu.hbp.mip.repositories;
-
-import eu.hbp.mip.model.Group;
-import org.springframework.data.repository.CrudRepository;
-
-/**
- * Created by mirco on 11.07.16.
- */
-
-public interface GroupRepository extends CrudRepository<Group, String> {
-}
diff --git a/src/main/java/eu/hbp/mip/repositories/VariableRepository.java b/src/main/java/eu/hbp/mip/repositories/VariableRepository.java
deleted file mode 100644
index 3a4e7e2f5..000000000
--- a/src/main/java/eu/hbp/mip/repositories/VariableRepository.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package eu.hbp.mip.repositories;
-
-import eu.hbp.mip.model.Variable;
-import org.springframework.data.repository.CrudRepository;
-
-/**
- * Created by mirco on 11.07.16.
- */
-
-public interface VariableRepository extends CrudRepository<Variable, String> {
-}
diff --git a/src/main/java/eu/hbp/mip/utils/CSVUtil.java b/src/main/java/eu/hbp/mip/utils/CSVUtil.java
deleted file mode 100644
index ce56b7935..000000000
--- a/src/main/java/eu/hbp/mip/utils/CSVUtil.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package eu.hbp.mip.utils;
-
-import eu.hbp.mip.repositories.VariableRepository;
-import org.apache.log4j.Logger;
-import eu.hbp.mip.model.Dataset;
-import eu.hbp.mip.model.Query;
-import eu.hbp.mip.model.Variable;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-/**
- * Created by mirco on 29.01.16.
- */
-public class CSVUtil {
-
-    private static final Logger LOGGER = Logger.getLogger(CSVUtil.class);
-
-    private static final String SEPARATOR = ",";
-
-    @Autowired
-    VariableRepository variableRepository;
-
-    public Dataset parseValues(String filename, Query query)
-    {
-        List<String[]> rows = getRows(filename);
-
-        Dataset result = new Dataset();
-        String code = generateDSCode(query);
-        Date date = new Date();
-        List<String> header = new LinkedList<>();
-        List<String> grouping = new LinkedList<>();
-        List<String> variable = new LinkedList<>();
-        Map<String, LinkedList<Object>> data = new HashMap<>();
-
-        List<Variable> covs = new LinkedList<>();
-        List<Variable> grps = new LinkedList<>();
-        List<Variable> vars = new LinkedList<>();
-        List<Variable> all = new LinkedList<>();
-        covs.addAll(query.getCovariables());
-        grps.addAll(query.getGrouping());
-        vars.addAll(query.getVariables());
-        all.addAll(query.getCovariables());
-        all.addAll(query.getGrouping());
-        all.addAll(query.getVariables());
-
-        header.addAll(covs.stream().map(Variable::getCode).collect(Collectors.toList()));
-        grouping.addAll(grps.stream().map(Variable::getCode).collect(Collectors.toList()));
-        variable.addAll(vars.stream().map(Variable::getCode).collect(Collectors.toList()));
-
-        try {
-            InputStream is = Dataset.class.getClassLoader().getResourceAsStream(filename);
-            InputStreamReader isr = new InputStreamReader(is);
-            BufferedReader br = new BufferedReader(isr);
-            String[] firstRow = br.readLine().split(SEPARATOR, -1);
-            br.close();
-            isr.close();
-            is.close();
-
-            for (Variable v : all) {
-                String type = getTypeFromDB(v);
-                String c = v.getCode();
-                int idx = find(c, firstRow);
-                List<Object> l = new LinkedList<>();
-                LinkedList<Object> ll = new LinkedList<>();
-                for (String[] row : rows) {
-                    switch (type) {
-                        case "T": {
-                            String d = null;
-                            String r = row[idx];
-                            if (!r.isEmpty())
-                                d = r;
-                            l.add(d);
-                            break;
-                        }
-                        case "I": {
-                            Integer d;
-                            try {
-                                d = Integer.parseInt(row[idx]);
-                            } catch (NumberFormatException e) {
-                                try {
-                                    d = (int) Double.parseDouble(row[idx]); // Age
-                                    // for
-                                    // example
-                                    // has type
-                                    // I but is
-                                    // double
-                                } catch (NumberFormatException e2) {
-                                    d = null; // No value found
-                                }
-                            }
-                            l.add(d);
-                            break;
-                        }
-                        case "N": {
-                            Double d = null;
-                            try {
-                                d = Double.parseDouble(row[idx]);
-                            } catch (NumberFormatException e) {
-                                // should only happen when no data available ->
-                                // we
-                                // could have check this with
-                                // !row[idx].isEmpty()
-                            }
-                            l.add(d);
-                            break;
-                        }
-                        case "D": {
-                            String d = null; // Formatted (ISO8601) String
-
-                            // instead
-                            // of Date
-                            String r = row[idx];
-                            if (!r.isEmpty())
-                                d = r;
-                            l.add(d);
-                            break;
-                        }
-                        case "B": {
-                            Boolean d;
-                            d = !row[idx].isEmpty();
-                            l.add(d);
-                            break;
-                        }
-                        default: {
-                            String d = null;
-                            String r = row[idx];
-                            if (!r.isEmpty())
-                                d = r;
-                            l.add(d);
-                            break;
-                        }
-                    }
-                }
-                // TODO : should we remove this limit ???
-                if(l.size() > 100)
-                {
-                    ll.addAll(l.subList(0,99));
-                }
-                data.put(c, ll);
-            }
-        } catch (IOException e) {
-            LOGGER.trace(e);
-        }
-        result.setCode(code);
-        result.setDate(date);
-        result.setHeader(header);
-        result.setGrouping(grouping);
-        result.setVariable(variable);
-        result.setData(data);
-
-        return result;
-    }
-
-    private List<String[]> getRows(String filename) {
-        List<String[]> rows = new LinkedList<>();
-        try {
-            InputStream is = CSVUtil.class.getClassLoader().getResourceAsStream(filename);
-            InputStreamReader isr = new InputStreamReader(is);
-            BufferedReader br = new BufferedReader(isr);
-            String[] firstRow = br.readLine().split(SEPARATOR, -1);  // 1st row -> headers
-            for (String line = br.readLine(); line != null; line = br.readLine()) {
-                String[] row = line.split(SEPARATOR, -1);
-                rows.add(row);
-            }
-            br.close();
-            isr.close();
-            is.close();
-        } catch (IOException e) {
-            LOGGER.trace(e);
-            LOGGER.warn("A problem occured while trying to read a CSV file !");
-        }
-
-        return rows;
-    }
-
-    private int find(String code, String[] firstRow) {
-        for (int i = 0; i < firstRow.length; i++) {
-            if (firstRow[i].equals(code))
-                return i;
-        }
-        return -1;
-    }
-
-    private String generateDSCode(Query query) {
-        String prefix = "DS";
-        String queryStr = Integer.toString(query.hashCode());
-        String memId;
-        Pattern p = Pattern.compile("@(\\w+)");
-        Matcher m = p.matcher(queryStr);
-        if (m.find()) {
-            memId = m.group(1);
-        } else {
-            memId = Long.toString(new Date().getTime()); // In case a the regex fails (should not
-            // happen)
-        }
-        return prefix + memId;
-    }
-
-    private String getTypeFromDB(Variable v)
-    {
-        String type = variableRepository.findOne(v.getCode()).getType();
-        if(type == null)
-        {
-            type = "unknown";
-        }
-        return type;
-    }
-
-}
diff --git a/src/main/resources/data/variables.json b/src/main/resources/data/variables.json
new file mode 100644
index 000000000..a59785ddd
--- /dev/null
+++ b/src/main/resources/data/variables.json
@@ -0,0 +1,2107 @@
+{
+  "groups": [
+    {
+      "groups": [
+        {
+          "groups": [
+            {
+              "groups": [
+                {
+                  "groups": [
+                    {
+                      "groups": [],
+                      "variables": [
+                        {
+                          "description": "Right Accumbens Area",
+                          "units": "cm3",
+                          "methodology": "lren-nmm-volumes",
+                          "type": "real",
+                          "label": "Right Accumbens Area",
+                          "code": "RightAccumbensArea",
+                          "length": 20
+                        },
+                        {
+                          "description": "Left Accumbens Area",
+                          "units": "cm3",
+                          "methodology": "lren-nmm-volumes",
+                          "type": "real",
+                          "label": "Left Accumbens Area",
+                          "code": "LeftAccumbensArea",
+                          "length": 20
+                        },
+                        {
+                          "description": "Right Caudate",
+                          "units": "cm3",
+                          "methodology": "lren-nmm-volumes",
+                          "type": "real",
+                          "label": "Right Caudate",
+                          "code": "RightCaudate",
+                          "length": 20
+                        },
+                        {
+                          "description": "Left Caudate",
+                          "units": "cm3",
+                          "methodology": "lren-nmm-volumes",
+                          "type": "real",
+                          "label": "Left Caudate",
+                          "code": "LeftCaudate",
+                          "length": 20
+                        },
+                        {
+                          "description": "Right Pallidum",
+                          "units": "cm3",
+                          "methodology": "lren-nmm-volumes",
+                          "type": "real",
+                          "label": "Right Pallidum",
+                          "code": "RightPallidum",
+                          "length": 20
+                        },
+                        {
+                          "description": "Left Pallidum",
+                          "units": "cm3",
+                          "methodology": "lren-nmm-volumes",
+                          "type": "real",
+                          "label": "Left Pallidum",
+                          "code": "LeftPallidum",
+                          "length": 20
+                        },
+                        {
+                          "description": "Right Putamen",
+                          "units": "cm3",
+                          "methodology": "lren-nmm-volumes",
+                          "type": "real",
+                          "label": "Right Putamen",
+                          "code": "RightPutamen",
+                          "length": 20
+                        },
+                        {
+                          "description": "Left Putamen",
+                          "units": "cm3",
+                          "methodology": "lren-nmm-volumes",
+                          "type": "real",
+                          "label": "Left Putamen",
+                          "code": "LeftPutamen",
+                          "length": 20
+                        }
+                      ],
+                      "label": "Basal Ganglia",
+                      "code": "basal_ganglia"
+                    },
+                    {
+                      "groups": [],
+                      "variables": [
+                        {
+                          "description": "Right Amygdala",
+                          "units": "cm3",
+                          "methodology": "lren-nmm-volumes",
+                          "type": "real",
+                          "label": "Right Amygdala",
+                          "code": "RightAmygdala",
+                          "length": 20
+                        },
+                        {
+                          "description": "Left Amygdala",
+                          "units": "cm3",
+                          "methodology": "lren-nmm-volumes",
+                          "type": "real",
+                          "label": "Left Amygdala",
+                          "code": "LeftAmygdala",
+                          "length": 20
+                        }
+                      ],
+                      "label": "Amygdala",
+                      "code": "amygdala"
+                    }
+                  ],
+                  "label": "Cerebral nuclei",
+                  "code": "cerebral_nuclei"
+                },
+                {
+                  "groups": [],
+                  "variables": [
+                    {
+                      "type": "real",
+                      "description": "Entorhinal UCSF Entorhinal mm3",
+                      "label": "Entorhinal",
+                      "code": "Entorhinal",
+                      "methodology": "adni-merge"
+                    },
+                    {
+                      "description": "Right anterior cingulate gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right anterior cingulate gyrus",
+                      "code": "RightACgGanteriorcingulategyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left anterior cingulate gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left anterior cingulate gyrus",
+                      "code": "LeftACgGanteriorcingulategyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right entorhinal area",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right entorhinal area",
+                      "code": "RightEntentorhinalarea",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left entorhinal area",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left entorhinal area",
+                      "code": "LeftEntentorhinalarea",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right middle cingulate gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right middle cingulate gyrus",
+                      "code": "RightMCgGmiddlecingulategyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left middle cingulate gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left middle cingulate gyrus",
+                      "code": "LeftMCgGmiddlecingulategyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right posterior cingulate gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right posterior cingulate gyrus",
+                      "code": "RightPCgGposteriorcingulategyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left posterior cingulate gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left posterior cingulate gyrus",
+                      "code": "LeftPCgGposteriorcingulategyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right parahippocampal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right parahippocampal gyrus",
+                      "code": "RightPHGparahippocampalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left parahippocampal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left parahippocampal gyrus",
+                      "code": "LeftPHGparahippocampalgyrus",
+                      "length": 20
+                    }
+                  ],
+                  "label": "Limbic",
+                  "code": "limbic"
+                },
+                {
+                  "groups": [],
+                  "variables": [
+                    {
+                      "description": "Right fusiform gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right fusiform gyrus",
+                      "code": "RightFuGfusiformgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left fusiform gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left fusiform gyrus",
+                      "code": "LeftFuGfusiformgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right inferior temporal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right inferior temporal gyrus",
+                      "code": "RightITGinferiortemporalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left inferior temporal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left inferior temporal gyrus",
+                      "code": "LeftITGinferiortemporalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right middle temporal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right middle temporal gyrus",
+                      "code": "RightMTGmiddletemporalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left middle temporal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left middle temporal gyrus",
+                      "code": "LeftMTGmiddletemporalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right planum polare",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right planum polare",
+                      "code": "RightPPplanumpolare",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left planum polare",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left planum polare",
+                      "code": "LeftPPplanumpolare",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right planum temporale",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right planum temporale",
+                      "code": "RightPTplanumtemporale",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left planum temporale",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left planum temporale",
+                      "code": "LeftPTplanumtemporale",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right superior temporal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right superior temporal gyrus",
+                      "code": "RightSTGsuperiortemporalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left superior temporal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left superior temporal gyrus",
+                      "code": "LeftSTGsuperiortemporalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right temporal pole",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right temporal pole",
+                      "code": "RightTMPtemporalpole",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left temporal pole",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left temporal pole",
+                      "code": "LeftTMPtemporalpole",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right transverse temporal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right transverse temporal gyrus",
+                      "code": "RightTTGtransversetemporalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left transverse temporal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left transverse temporal gyrus",
+                      "code": "LeftTTGtransversetemporalgyrus",
+                      "length": 20
+                    }
+                  ],
+                  "label": "Temporal",
+                  "code": "temporal"
+                },
+                {
+                  "groups": [],
+                  "variables": [
+                    {
+                      "description": "Right calcarine cortex",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right calcarine cortex",
+                      "code": "RightCalccalcarinecortex",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left calcarine cortex",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left calcarine cortex",
+                      "code": "LeftCalccalcarinecortex",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right cuneus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right cuneus",
+                      "code": "RightCuncuneus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left cuneus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left cuneus",
+                      "code": "LeftCuncuneus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right inferior occipital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right inferior occipital gyrus",
+                      "code": "RightIOGinferioroccipitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left inferior occipital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left inferior occipital gyrus",
+                      "code": "LeftIOGinferioroccipitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right lingual gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right lingual gyrus",
+                      "code": "RightLiGlingualgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left lingual gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left lingual gyrus",
+                      "code": "LeftLiGlingualgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right middle occipital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right middle occipital gyrus",
+                      "code": "RightMOGmiddleoccipitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left middle occipital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left middle occipital gyrus",
+                      "code": "LeftMOGmiddleoccipitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right occipital pole",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right occipital pole",
+                      "code": "RightOCPoccipitalpole",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left occipital pole",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left occipital pole",
+                      "code": "LeftOCPoccipitalpole",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right occipital fusiform gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right occipital fusiform gyrus",
+                      "code": "RightOFuGoccipitalfusiformgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left occipital fusiform gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left occipital fusiform gyrus",
+                      "code": "LeftOFuGoccipitalfusiformgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right superior occipital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right superior occipital gyrus",
+                      "code": "RightSOGsuperioroccipitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left superior occipital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left superior occipital gyrus",
+                      "code": "LeftSOGsuperioroccipitalgyrus",
+                      "length": 20
+                    }
+                  ],
+                  "label": "Occipital",
+                  "code": "occipital"
+                },
+                {
+                  "groups": [],
+                  "variables": [
+                    {
+                      "description": "Right angular gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right angular gyrus",
+                      "code": "RightAnGangulargyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left angular gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left angular gyrus",
+                      "code": "LeftAnGangulargyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right postcentral gyrus medial segment",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right postcentral gyrus medial segment",
+                      "code": "RightMPoGpostcentralgyrusmedialsegment",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left postcentral gyrus medial segment",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left postcentral gyrus medial segment",
+                      "code": "LeftMPoGpostcentralgyrusmedialsegment",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right precuneus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right precuneus",
+                      "code": "RightPCuprecuneus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left precuneus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left precuneus",
+                      "code": "LeftPCuprecuneus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right postcentral gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right postcentral gyrus",
+                      "code": "RightPoGpostcentralgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left postcentral gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left postcentral gyrus",
+                      "code": "LeftPoGpostcentralgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right supramarginal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right supramarginal gyrus",
+                      "code": "RightSMGsupramarginalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left supramarginal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left supramarginal gyrus",
+                      "code": "LeftSMGsupramarginalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right superior parietal lobule",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right superior parietal lobule",
+                      "code": "RightSPLsuperiorparietallobule",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left superior parietal lobule",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left superior parietal lobule",
+                      "code": "LeftSPLsuperiorparietallobule",
+                      "length": 20
+                    }
+                  ],
+                  "label": "Parietal",
+                  "code": "parietal"
+                },
+                {
+                  "groups": [
+                  ],
+                  "variables": [
+                    {
+                      "description": "Right anterior orbital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right anterior orbital gyrus",
+                      "code": "RightAOrGanteriororbitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left anterior orbital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left anterior orbital gyrus",
+                      "code": "LeftAOrGanteriororbitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right central operculum",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right central operculum",
+                      "code": "RightCOcentraloperculum",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left central operculum",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left central operculum",
+                      "code": "LeftCOcentraloperculum",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right frontal operculum",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right frontal operculum",
+                      "code": "RightFOfrontaloperculum",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left frontal operculum",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left frontal operculum",
+                      "code": "LeftFOfrontaloperculum",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right frontal pole",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right frontal pole",
+                      "code": "RightFRPfrontalpole",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left frontal pole",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left frontal pole",
+                      "code": "LeftFRPfrontalpole",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right gyrus rectus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right gyrus rectus",
+                      "code": "RightGRegyrusrectus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left gyrus rectus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left gyrus rectus",
+                      "code": "LeftGRegyrusrectus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right lateral orbital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right lateral orbital gyrus",
+                      "code": "RightLOrGlateralorbitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left lateral orbital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left lateral orbital gyrus",
+                      "code": "LeftLOrGlateralorbitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right medial frontal cortex",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right medial frontal cortex",
+                      "code": "RightMFCmedialfrontalcortex",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left medial frontal cortex",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left medial frontal cortex",
+                      "code": "LeftMFCmedialfrontalcortex",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right middle frontal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right middle frontal gyrus",
+                      "code": "RightMFGmiddlefrontalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left middle frontal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left middle frontal gyrus",
+                      "code": "LeftMFGmiddlefrontalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right medial orbital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right medial orbital gyrus",
+                      "code": "RightMOrGmedialorbitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left medial orbital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left medial orbital gyrus",
+                      "code": "LeftMOrGmedialorbitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right precentral gyrus medial segment",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right precentral gyrus medial segment",
+                      "code": "RightMPrGprecentralgyrusmedialsegment",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left precentral gyrus medial segment",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left precentral gyrus medial segment",
+                      "code": "LeftMPrGprecentralgyrusmedialsegment",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right superior frontal gyrus medial segment",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right superior frontal gyrus medial segment",
+                      "code": "RightMSFGsuperiorfrontalgyrusmedialsegment",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left superior frontal gyrus medial segment",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left superior frontal gyrus medial segment",
+                      "code": "LeftMSFGsuperiorfrontalgyrusmedialsegment",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right opercular part of the inferior frontal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right opercular part of the inferior frontal gyrus",
+                      "code": "RightOpIFGopercularpartoftheinferiorfrontalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left opercular part of the inferior frontal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left opercular part of the inferior frontal gyrus",
+                      "code": "LeftOpIFGopercularpartoftheinferiorfrontalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right orbital part of the inferior frontal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right orbital part of the inferior frontal gyrus",
+                      "code": "RightOrIFGorbitalpartoftheinferiorfrontalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left orbital part of the inferior frontal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left orbital part of the inferior frontal gyrus",
+                      "code": "LeftOrIFGorbitalpartoftheinferiorfrontalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right parietal operculum",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right parietal operculum",
+                      "code": "RightPOparietaloperculum",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left parietal operculum",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left parietal operculum",
+                      "code": "LeftPOparietaloperculum",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right posterior orbital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right posterior orbital gyrus",
+                      "code": "RightPOrGposteriororbitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left posterior orbital gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left posterior orbital gyrus",
+                      "code": "LeftPOrGposteriororbitalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right precentral gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right precentral gyrus",
+                      "code": "RightPrGprecentralgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left precentral gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left precentral gyrus",
+                      "code": "LeftPrGprecentralgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right subcallosal area",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right subcallosal area",
+                      "code": "RightSCAsubcallosalarea",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left subcallosal area",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left subcallosal area",
+                      "code": "LeftSCAsubcallosalarea",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right superior frontal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right superior frontal gyrus",
+                      "code": "RightSFGsuperiorfrontalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left superior frontal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left superior frontal gyrus",
+                      "code": "LeftSFGsuperiorfrontalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right supplementary motor cortex",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right supplementary motor cortex",
+                      "code": "RightSMCsupplementarymotorcortex",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left supplementary motor cortex",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left supplementary motor cortex",
+                      "code": "LeftSMCsupplementarymotorcortex",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right triangular part of the inferior frontal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right triangular part of the inferior frontal gyrus",
+                      "code": "RightTrIFGtriangularpartoftheinferiorfrontalgyrus",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left triangular part of the inferior frontal gyrus",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left triangular part of the inferior frontal gyrus",
+                      "code": "LeftTrIFGtriangularpartoftheinferiorfrontalgyrus",
+                      "length": 20
+                    }
+                  ],
+                  "label": "Frontal",
+                  "code": "frontal"
+                },
+                {
+                  "groups": [],
+                  "variables": [
+                    {
+                      "description": "Right anterior insula",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right anterior insula",
+                      "code": "RightAInsanteriorinsula",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left anterior insula",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left anterior insula",
+                      "code": "LeftAInsanteriorinsula",
+                      "length": 20
+                    },
+                    {
+                      "description": "Right posterior insula",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right posterior insula",
+                      "code": "RightPInsposteriorinsula",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left posterior insula",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left posterior insula",
+                      "code": "LeftPInsposteriorinsula",
+                      "length": 20
+                    }
+                  ],
+                  "label": "Insula",
+                  "code": "insula"
+                }
+              ],
+              "label": "Grey matter volume",
+              "code": "grey_matter_volume"
+            },
+            {
+              "groups": [
+                {
+                  "groups": [],
+                  "variables": [
+                    {
+                      "type": "real",
+                      "description": "Ventricles UCSF Ventricles mm3. ",
+                      "label": "Ventricles",
+                      "code": "Ventricles",
+                      "methodology": "adni-merge"
+                    }
+                  ],
+                  "label": "Ventricule",
+                  "code": "ventricule"
+                }
+              ],
+              "label": "CSF",
+              "code": "csf"
+            },
+            {
+              "groups": [
+                {
+                  "groups": [],
+                  "variables": [
+                    {
+                      "description": "Right Ventral DC",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Right Ventral DC",
+                      "code": "RightVentralDC",
+                      "length": 20
+                    },
+                    {
+                      "description": "Left Ventral DC",
+                      "units": "cm3",
+                      "methodology": "lren-nmm-volumes",
+                      "type": "real",
+                      "label": "Left Ventral DC",
+                      "code": "LeftVentralDC",
+                      "length": 20
+                    }
+                  ],
+                  "label": "Diencephalon",
+                  "code": "diencephalon"
+                }
+              ],
+              "label": "White matter volume",
+              "code": "white_matter_volume"
+            }
+          ],
+          "label": "Brain anatomy",
+          "code": "brain_anatomy"
+        },
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "real",
+              "description": "Hippocampus UCSF Hippocampus mm3",
+              "label": "Hippocampus",
+              "code": "Hippocampus",
+              "methodology": "adni-merge"
+            },
+            {
+              "type": "real",
+              "description": "WholeBrain UCSF WholeBrain mm3",
+              "label": "Whole Brain",
+              "code": "WholeBrain",
+              "methodology": "adni-merge"
+            },
+            {
+              "type": "real",
+              "description": "Fusiform UCSF Fusiform mm3",
+              "label": "Fusiform",
+              "code": "Fusiform",
+              "methodology": "adni-merge"
+            },
+            {
+              "type": "real",
+              "description": "MidTemp UCSF Med Temp mm3",
+              "label": "MidTemp",
+              "code": "MidTemp",
+              "methodology": "adni-merge"
+            },
+            {
+              "type": "real",
+              "description": "ICV UCSF ICV mm3",
+              "label": "ICV",
+              "code": "ICV",
+              "methodology": "adni-merge"
+            },
+            {
+              "description": "Right Hippocampus",
+              "units": "cm3",
+              "methodology": "lren-nmm-volumes",
+              "type": "real",
+              "label": "Right Hippocampus",
+              "code": "RightHippocampus",
+              "length": 20
+            },
+            {
+              "description": "Left Hippocampus",
+              "units": "cm3",
+              "methodology": "lren-nmm-volumes",
+              "type": "real",
+              "label": "Left Hippocampus",
+              "code": "LeftHippocampus",
+              "length": 20
+            },
+            {
+              "description": "Right Thalamus Proper",
+              "units": "cm3",
+              "methodology": "lren-nmm-volumes",
+              "type": "real",
+              "label": "Right Thalamus Proper",
+              "code": "RightThalamusProper",
+              "length": 20
+            },
+            {
+              "description": "Left Thalamus Proper",
+              "units": "cm3",
+              "methodology": "lren-nmm-volumes",
+              "type": "real",
+              "label": "Left Thalamus Proper",
+              "code": "LeftThalamusProper",
+              "length": 20
+            }
+          ],
+          "label": "Grey matter surface",
+          "code": "grey_matter_surface"
+        }
+      ],
+      "label": "Brain",
+      "code": "brain"
+    },
+    {
+      "groups": [
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "integer",
+              "description": "Visit Number from the baseline",
+              "label": "Visit Number",
+              "code": "VisitNumber",
+              "methodology": "lren-nmm-volumes"
+            },
+            {
+              "type": "integer",
+              "description": "Total Number of Visits since the baseline",
+              "label": "Total Number of Visits",
+              "code": "TotalVisits",
+              "methodology": "lren-nmm-volumes"
+            }
+          ],
+          "label": "number",
+          "code": "number"
+        },
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "real",
+              "description": "Period Time between the EXAMDATE (clinical evaluation) and the scan examdate ",
+              "label": "Period Time",
+              "code": "PeriodTime",
+              "methodology": "lren-nmm-volumes"
+            }
+          ],
+          "label": "period",
+          "code": "period"
+        }
+      ],
+      "label": "visit",
+      "code": "visit"
+    },
+    {
+      "groups": [
+        {
+          "groups": [
+            {
+              "groups": [],
+              "variables": [
+                {
+                  "description": "Apolipoprotein E (APOE) e4 allele: is the strongest risk factor for Late Onset Alzheimer Disease (LOAD). At least one copy of APOE-e4 ",
+                  "methodology": "adni-merge",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "APOE4",
+                  "code": "APOE4"
+                },
+                {
+                  "description": "APOE",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "APOE",
+                  "code": "APOE"
+                },
+                {
+                  "description": "rs3818361_T",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs3818361_T",
+                  "code": "rs3818361_T"
+                },
+                {
+                  "description": "rs744373_C",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs744373_C",
+                  "code": "rs744373_C"
+                },
+                {
+                  "description": "rs190982_G",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs190982_G",
+                  "code": "rs190982_G"
+                },
+                {
+                  "description": "rs1476679_C",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs1476679_C",
+                  "code": "rs1476679_C"
+                },
+                {
+                  "description": "rs11767557_C",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs11767557_C",
+                  "code": "rs11767557_C"
+                },
+                {
+                  "description": "rs11136000_T",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs11136000_T",
+                  "code": "rs11136000_T"
+                },
+                {
+                  "description": "rs610932_A",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs610932_A",
+                  "code": "rs610932_A"
+                },
+                {
+                  "description": "rs3851179_A",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs3851179_A",
+                  "code": "rs3851179_A"
+                },
+                {
+                  "description": "rs17125944_C",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs17125944_C",
+                  "code": "rs17125944_C"
+                },
+                {
+                  "description": "rs10498633_T",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs10498633_T",
+                  "code": "rs10498633_T"
+                },
+                {
+                  "description": "rs3764650_G",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs3764650_G",
+                  "code": "rs3764650_G"
+                },
+                {
+                  "description": "rs3865444_T",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs3865444_T",
+                  "code": "rs3865444_T"
+                },
+                {
+                  "description": "rs2718058_G",
+                  "methodology": "lren-nmm-volumes",
+                  "type": "polynominal",
+                  "enumerations": [
+                  	{ "code": 0, "value": 0 },
+                  	{ "code": 1, "value": 1 },
+                    { "code": 2, "value": 2 }
+                  ],
+                  "label": "rs2718058_G",
+                  "code": "rs2718058_G"
+                }
+              ],
+              "label": "APOE",
+              "code": "APOE"
+            }
+          ],
+          "label": "polymorphism",
+          "code": "polymorphism"
+        }
+      ],
+      "label": "Genetic",
+      "code": "genetic"
+    },
+    {
+      "groups": [
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "polynominal",
+              "enumerations": [
+                  	{ "code": "Married", "value": "Married" },
+                  	{ "code": "Widowed", "value": "Widowed" },
+                    { "code": "Divorced", "value": "Divorced" },
+                    { "code": "Never married", "value": "Never married" },
+                    { "code": "Unknown", "value": "Unknown" }
+                  ],
+              "description": " Participant Marital Status. 1=Married; 2=Widowed; 3=Divorced; 4=Never married; 5=Unknown",
+              "label": "Participant Marital Status",
+              "code": "PTMARRY",
+              "methodology": "adni-merge"
+            }
+          ],
+          "label": "marital",
+          "code": "marital"
+        },
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "polynominal",
+              "enumerations": [
+                  	{ "code": "Am Indian/Alaskan", "value": "American Indian or Alaskan Native" },
+                  	{ "code": "Asian", "value": "Asian" },
+                    { "code": "Hawaiian/Other PI", "value": "Native Hawaiian or Other Pacific Islander" },
+                    { "code": "Black/African American", "value": "Black or African American" },
+                    { "code": "More than one race", "value": "More than one race" },
+                    { "code": "White", "value": "White" },
+                    { "code": "Unknown", "value": "Unknown" }
+                  ],
+              "description": "Race. 1=American Indian or Alaskan Native; 2=Asian; 3=Native Hawaiian or Other Pacific Islander; 4=Black or African American; 5=White; 6=More than one race; 7=Unknown",
+              "label": "Participant Racial Category",
+              "code": "PTRACCAT",
+              "methodology": "adni-merge"
+            }
+          ],
+          "label": "country",
+          "code": "country"
+        },
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "polynominal",
+              "enumerations": [
+                  	{ "code": "Hisp/Latino", "value": "Hispanic or Latino" },
+                  	{ "code": "Not Hisp/Latino", "value": "Not Hispanic or Latino" },
+                    { "code": "Unknown", "value": "Unknown" }
+                  ],
+              "description": "Ethnicity. 1=Hispanic or Latino; 2=Not Hispanic or Latino; 3=Unknown",
+              "label": "Participant Ethnicity",
+              "code": "PTETHCAT",
+              "methodology": "adni-merge"
+            }
+          ],
+          "label": "ethny",
+          "code": "ethny"
+        },
+        {
+          "groups": [],
+          "variables": [
+            {
+              "description": "Participant Education.Education expressed in years",
+              "length": 2,
+              "maxValue": 20.0,
+              "methodology": "adni-merge",
+              "type": "integer",
+              "label": "Participant Education",
+              "minValue": 0.0,
+              "code": "PTEDUCAT"
+            }
+          ],
+          "label": "education",
+          "code": "education"
+        },
+        {
+          "groups": [],
+          "variables": [
+            {
+              "description": "Participant Gender. Gender: refers to the socially constructed characteristics of women and men.",
+              "length": 1,
+              "methodology": "adni-merge",
+              "type": "binominal",
+              "enumerations": [
+                  	{ "code": "Male", "value": "Male" },
+                  	{ "code": "Female", "value": "Female" }
+                  ],
+              "label": "Participant Gender",
+              "code": "PTGENDER"
+            }
+          ],
+          "label": "genre",
+          "code": "genre"
+        },
+        {
+          "groups": [],
+          "variables": [
+            {
+              "description": "Participant Date of Birth. Age (Chronological age): refers to the calendar age. It is the number of years that have elapsed from birth to the exam date.",
+              "length": 3,
+              "maxValue": 130.0,
+              "methodology": "adni-merge",
+              "type": "real",
+              "label": "Age Baseline",
+              "minValue": 0.0,
+              "code": "AGE"
+            },
+            {
+              "description": "Participant Date of Birth. Age (Chronological age): refers to the calendar age. It is the number of years that have elapsed from birth to the exam date.",
+              "length": 3,
+              "maxValue": 130.0,
+              "methodology": "lren-nmm-volumes",
+              "type": "real",
+              "label": "Age",
+              "minValue": 0.0,
+              "code": "Exam-Age"
+            },
+            {
+              "description": "Participant Date of Birth. Age (Chronological age): refers to the calendar age. It is the number of years that have elapsed from birth to the exam date.",
+              "length": 3,
+              "maxValue": 130.0,
+              "methodology": "lren-nmm-volumes",
+              "type": "real",
+              "label": "Age",
+              "minValue": 0.0,
+              "code": "MRI-Age"
+            },
+            {
+              "description": "PTDOBYY",
+              "length": 4,
+              "methodology": "lren-nmm-volumes",
+              "type": "integer",
+              "label": "PTDOBYY",
+              "minValue": 0.0,
+              "code": "PTDOBYY"
+            },
+            {
+              "description": "PTDOBMM",
+              "maxValue": 12.0,
+              "methodology": "lren-nmm-volumes",
+              "type": "integer",
+              "label": "PTDOBMM",
+              "minValue": 0.0,
+              "code": "PTDOBMM"
+            }
+          ],
+          "label": "age",
+          "code": "age"
+        }
+      ],
+      "label": "demographic",
+      "code": "demographic"
+    },
+    {
+      "groups": [
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "polynominal",
+              "enumerations": [
+                  	{ "code": "NL", "value": "NL" },
+                  	{ "code": "LMCI", "value": "LMCI" },
+                    { "code": "EMCI", "value": "EMCI" },
+                    { "code": "AD", "value": "AD" },
+                    { "code": "SMC", "value": "SMC" }
+                  ],
+              "label": "Diagnostic Status Baseline",
+              "description": "Diagnostic status based in clinical/cognitive evaluation (AD, MCI, NC). ADNI1 baseline diagnosis at VISCODE==\"bl,\" 1=NL;2=MCI;3=AD",
+              "code": "DX",
+              "methodology": "adni-merge"
+            },
+            {
+              "type": "polynominal",
+              "enumerations": [
+                  	{ "code": "NL", "value": "NL" },
+                  	{ "code": "LMCI", "value": "LMCI" },
+                    { "code": "EMCI", "value": "EMCI" },
+                    { "code": "AD", "value": "AD" }
+                  ],
+              "label": "GroupBL",
+              "description": "GroupBL",
+              "code": "GroupBL",
+              "methodology": "lren-nmm-volumes"
+            },
+            {
+              "type": "polynominal",
+              "enumerations": [
+                  	{ "code": "NL", "value": "NL" },
+                  	{ "code": "MCI", "value": "MCI" },
+                    { "code": "Dementia", "value": "Dementia" },
+                    { "code": "NL to MCI", "value": "NL to MCI" },
+                    { "code": "MCI to Dementia", "value": "MCI to Dementia" },
+                    { "code": "NL to Dementia", "value": "NL to Dementia" },
+                    { "code": "MCI to NL", "value": "MCI to NL" },
+                    { "code": "Dementia to MCI", "value": "Dementia to MCI" },
+                    { "code": "Dementia to NL", "value": "Dementia to NL" }
+                  ],
+              "label": "Conversion",
+              "description": "Conversion",
+              "code": "Conversion",
+              "methodology": "lren-nmm-volumes"
+            }
+          ],
+          "label": "diagnostic",
+          "code": "diagnostic"
+        },
+        {
+          "groups": [
+            {
+              "groups": [],
+              "variables": [
+                {
+                  "type": "real",
+                  "label": "CDRSB",
+                  "description": "Clinical Dementia Rating. CDR is derived from the scores in each of the six categories (“box scores\"): 1. Memory\n2. Orientation 3. Judgment and Problem Solving 4. Community Affairs 5. Home and Hobbies 6. Personal Care (0, 0.5…5)",
+                  "code": "CDRSB",
+                  "methodology": "adni-merge"
+                }
+              ],
+              "label": "CDRSB",
+              "code": "cdrsb"
+            },
+            {
+              "groups": [],
+              "variables": [
+                {
+                  "type": "integer",
+                  "maxValue": 30,
+                  "minValue": 0,
+                  "label": "FAQ",
+                  "description": "FAQ Total Score (0-30). The FAQ measures activities of daily living. Sum of 10 subscores (0=Normal (0);1=Never did, but could do now (0);2=Never did, would have difficulty now (1);3=Has difficulty, but does by self (1);4=Requires assistance (2);5=Dependent (3)",
+                  "code": "FAQ",
+                  "methodology": "adni-merge"
+                }
+              ],
+              "label": "FAQ",
+              "code": "faq"
+            },
+            {
+              "groups": [],
+              "variables": [
+                {
+                  "type": "integer",
+                  "maxValue": 30,
+                  "minValue": 0,
+                  "label": "MoCA",
+                  "description": "Montreal Cognitive Assessment (MoCA). was designed as a rapid screening instrument for mild cognitive dysfunction. It assesses different cognitive domains: a ttention and concentration, executive functions, memory, language, visuoconstructional skills, conceptual thinking, calculations, and orientation. Time to administer the MoCA is approximately 10 minutes. The total possible score is 30 points; a score of 26 or above is considered normal. This test was not applied in ADNI-I.",
+                  "code": "MOCA",
+                  "methodology": "adni-merge"
+                }
+              ],
+              "label": "MOCA",
+              "code": "moca"
+            },
+            {
+              "groups": [],
+              "variables": [
+                {
+                  "type": "real",
+                  "description": "RAVLT (forgetting). Test of episodic memory. Recall and recognize 15 words after a 30-minute delay interval.",
+                  "label": "RAVLT forgetting",
+                  "code": "RAVLT_forgetting",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "RAVLT (learning). Test of episodic memory. Recall and recognize 15 words after a 30-minute delay interval.",
+                  "label": "RAVLT learning",
+                  "code": "RAVLT_learning",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "maxValue": 100.0,
+                  "minValue": 2.0,
+                  "description": "RAVLT (percent forgetting). Test of episodic memory. Recall and recognize 15 words after a 30-minute delay interval.",
+                  "label": "RAVLT percent forgetting",
+                  "code": "RAVLT_perc_forgetting",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "RAVLT (immediate). Test of episodic memory. Recall 15 words immediately after an intervening interference list",
+                  "label": "RAVLT immediate",
+                  "code": "RAVLT_immediate",
+                  "methodology": "adni-merge"
+                }
+              ],
+              "label": "RAVLT",
+              "code": "ravlt"
+            },
+            {
+              "groups": [],
+              "variables": [
+                {
+                  "type": "integer",
+                  "maxValue": 30,
+                  "minValue": 0,
+                  "label": "MMSE",
+                  "description": "MMSE Total score. Mini-Mental State Examination (MMSE): is a global assessment of cognitive status (Folstein et al., 1975).The MMSE is a fully structured scale that consists of 30 points grouped into seven categories. A perfect score is 30 points; a score of 24 is the recommended, and most frequently used, cutpoint for dementia; a score of 23 or lower indicates dementia. ",
+                  "code": "MMSE",
+                  "methodology": "adni-merge"
+                }
+              ],
+              "label": "MMSE",
+              "code": "mmse"
+            },
+            {
+              "groups": [],
+              "variables": [
+                {
+                  "type": "real",
+                  "label": "ADAS11",
+                  "description": "ADAS Total score-11 items. Classic 70 point total. Excludes Q4 (Delayed Word Recall) and Q14 (Number Cancellation).",
+                  "code": "ADAS11",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "label": "ADAS13",
+                  "description": "ADAS Total score-13 items. 85 point total including Q4 (Delayed Word Recall) and Q14 (Number Cancellation). The ADAS is a brief cognitive test battery that assesses learning and memory, language production, language comprehension, constructional praxis, ideational praxis, and orientation.",
+                  "code": "ADAS13",
+                  "methodology": "adni-merge"
+                }
+              ],
+              "label": "ADAS",
+              "code": "adas"
+            },
+            {
+              "groups": [],
+              "variables": [
+                {
+                  "type": "real",
+                  "description": "Participant ECog - Mem. memory 8 items (memory1-memory8). Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2).",
+                  "label": "EcogPtMem",
+                  "code": "EcogPtMem",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Participant ECog - Lang. language 9 items (lang1-lang9). Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogPtLang",
+                  "code": "EcogPtLang",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Participant ECog - Vis/Spat. visuo-spatial 7 items (visspat1-visspat4, visspat6-visspat8 :visspat5 is a duplicated field (see DATADIC.csv)).Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogPtVisspat",
+                  "code": "EcogPtVisspat",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Participant ECog - Plan. planning 5 items (plan1-plan5). Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogPtPlan",
+                  "code": "EcogPtPlan",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Participant ECog - Organ. organization 6 items (organ1-organ6). Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogPtOrgan",
+                  "code": "EcogPtOrgan",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Participant ECog - Div atten. divided attention 4 items (divatt1-divatt4).Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogPtDivatt",
+                  "code": "EcogPtDivatt",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Participant ECog - Total. total score 39 items. Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogPtTotal",
+                  "code": "EcogPtTotal",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Study Partner ECog - Mem at baseline. memory 8 items (memory1-memory8). Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2).",
+                  "label": "EcogSPMem",
+                  "code": "EcogSPMem",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Study Partner ECog - Lang. language 9 items (lang1-lang9). Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogSPLang",
+                  "code": "EcogSPLang",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Study Partner ECog - Vis/Spat. visuo-spatial 7 items (visspat1-visspat4, visspat6-visspat8 :visspat5 is a duplicated field (see DATADIC.csv)).Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogSPVisspat",
+                  "code": "EcogSPVisspat",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Study Partner ECog - Plan. planning 5 items (plan1-plan5). Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogSPPlan",
+                  "code": "EcogSPPlan",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Study Partner ECog - Organ. organization 6 items (organ1-organ6). Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogSPOrgan",
+                  "code": "EcogSPOrgan",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Study Partner ECog - Div atten. divided attention 4 items (divatt1-divatt4).Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogSPDivatt",
+                  "code": "EcogSPDivatt",
+                  "methodology": "adni-merge"
+                },
+                {
+                  "type": "real",
+                  "description": "Study Partner ECog - Total. total score 39 items. Everyday Cognition-Participant Self Report (Only applied in ADNIGO, 2). ",
+                  "label": "EcogSPTotal",
+                  "code": "EcogSPTotal",
+                  "methodology": "adni-merge"
+                }
+              ],
+              "label": "ECoG",
+              "code": "ecog"
+            }
+          ],
+          "label": "cognition",
+          "code": "cognition"
+        }
+      ],
+      "label": "clinical",
+      "code": "clinical"
+    },
+    {
+      "groups": [
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "real",
+              "description": "MRI Scanner field strength (1.5; 3..)",
+              "label": "",
+              "code": "MRIScanner",
+              "methodology": "lren-nmm-volumes"
+            },
+            {
+              "type": "real",
+              "description": "FLDSTRENG",
+              "label": "FLDSTRENG",
+              "code": "FLDSTRENG",
+              "methodology": "adni-merge"
+            },
+            {
+              "type": "text",
+              "description": "MRI-Code",
+              "label": "MRI-Code",
+              "code": "MRI-Code",
+              "methodology": "lren-nmm-volumes"
+            }
+          ],
+          "label": "machine",
+          "code": "machine"
+        }
+      ],
+      "label": "brain_scan",
+      "code": "brain_scan"
+    },
+    {
+      "groups": [
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "real",
+              "description": "Average FDG-PET of angular, temporal, and posterior cingulate. Most important hypometabolic regions that are indicative of pathological metabolic change in MCI and AD.",
+              "label": "FDG",
+              "code": "FDG",
+              "methodology": "adni-merge"
+            },
+            {
+              "type": "real",
+              "description": "Average PIB SUVR of frontal cortex, anterior cingulate, precuneus cortex, and parietal cortex. ",
+              "label": "PIB",
+              "code": "PIB",
+              "methodology": "adni-merge"
+            },
+            {
+              "type": "real",
+              "description": "AV45 Average AV45 SUVR of frontal, anterior cingulate, precuneus, and parietal cortex\nrelative to the cerebellum",
+              "label": "AV45",
+              "code": "AV45",
+              "methodology": "adni-merge"
+            }
+          ],
+          "label": "PET",
+          "code": "PET"
+        }
+      ],
+      "variables": [
+        {
+          "type": "real",
+          "description": "AV45 Average AV45 SUVR of frontal, anterior cingulate, precuneus, and parietal cortex\nrelative to the cerebellum",
+          "label": "AV45",
+          "code": "AV45",
+          "methodology": "lren-nmm-volumes"
+        }
+      ],
+      "label": "brain_metabolism",
+      "code": "brain_metabolism"
+    },
+    {
+      "groups": [
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "integer",
+              "description": "ADNI Site ID (see https://www.google.com/maps/d/u/0/viewer?mid=1iju64ttr8yCx7ZFTOAz0r3haNbg)",
+              "label": "Site ID",
+              "code": "SITE",
+              "methodology": "adni-merge"
+            }
+          ],
+          "label": "source",
+          "code": "source"
+        },
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "polynominal",
+              "enumerations": [
+                  	{ "code": "ADNI1", "value": "ADNI" },
+                  	{ "code": "ADNIGO", "value": "GO" },
+                    { "code": "ADNI2", "value": "2" }
+                  ],
+              "description": "Protocol under which data was collected (ADNI1, GO or 2)",
+              "label": "Collection Protocol",
+              "code": "COLPROT",
+              "methodology": "adni-merge"
+            },
+            {
+              "type": "polynominal",
+              "enumerations": [
+                  	{ "code": "ADNI1", "value": "ADNI" },
+                  	{ "code": "ADNIGO", "value": "GO" },
+                    { "code": "ADNI2", "value": "2" }
+                  ],
+              "description": "Protocol from which subject methodologyated",
+              "label": "methodology Protocol",
+              "code": "ORIGPROT",
+              "methodology": "adni-merge"
+            }
+          ],
+          "label": "protocol",
+          "code": "protocol"
+        },
+        {
+          "groups": [],
+          "variables": [
+            {
+              "type": "date",
+              "description": "Date of the exam (EXAMDATE). You can extract EXAMDATE from the registry table (REGISTRY.csv) using RID, Phase, and VISCODE.",
+              "label": "Exam Date",
+              "code": "EXAMDATE",
+              "methodology": "adni-merge",
+              "length": 10
+            },
+            {
+              "type": "date",
+              "description": "Scan Exam Date",
+              "label": "Scan Date",
+              "code": "ScanDate",
+              "methodology": "lren-nmm-volumes",
+              "length": 10
+            },
+            {
+              "type": "text",
+              "description": "Visit code ( sc, scmri, bl, m03, m06, m12, m18, m24, etc) sc:screening visit, bl: baseline, m: month. See ADNI2 VISCODE2 Assignment.pdf in ADNI website",
+              "label": "Visit Code",
+              "code": "VISCODE",
+              "methodology": "lren-nmm-volumes"
+            }
+          ],
+          "label": "date",
+          "code": "date"
+        }
+      ],
+      "label": "provenance",
+      "code": "provenance"
+    },
+    {
+      "groups": [],
+      "variables": [
+        {
+          "type": "real",
+          "description": "Roster ID (RID) which you see in every ADNI CSV file. ",
+          "label": "Roster ID",
+          "code": "RID",
+          "methodology": "adni-merge",
+          "length": 38
+        },
+        {
+          "type": "text",
+          "description": "ADNI subject IDs of the form 123_S_5678 ( the last 4 digits correspond to the roster ID (RID) which you see in every CSV file)",
+          "label": "Subject ID (PTID)",
+          "code": "PTID",
+          "methodology": "adni-merge"
+        },
+        {
+          "type": "text",
+          "description": "Visit code ( sc, scmri, bl, m03, m06, m12, m18, m24, etc) sc:screening visit, bl: baseline, m: month. See ADNI2 VISCODE2 Assignment.pdf in ADNI website",
+          "label": "Visit Code",
+          "code": "VISCODE",
+          "methodology": "adni-merge",
+          "length": 20
+        },
+        {
+          "type": "integer",
+          "description": "Months from baseline (to nearest 6 months, as continuous, based on VISCODE)",
+          "label": "Months from baseline (based on VISCODE)",
+          "code": "M",
+          "methodology": "adni-merge"
+        },
+        {
+          "type": "real",
+          "description": "Months from baseline (to nearest 6 months, based on EXAMDATEs)",
+          "label": "Months from baseline (based on EXAMDATE)",
+          "code": "Month",
+          "methodology": "adni-merge"
+        },
+        {
+          "type": "text",
+          "description": "FSVERSION",
+          "label": "FSVERSION",
+          "code": "FSVERSION",
+          "methodology": "adni-merge"
+        },
+        {
+          "type": "text",
+          "description": "update_stamp",
+          "label": "update_stamp",
+          "code": "update_stamp",
+          "methodology": "adni-merge"
+        },
+        {
+          "type": "real",
+          "description": "TIV",
+          "label": "TIV",
+          "code": "TIV",
+          "methodology": "lren-nmm-volumes"
+        }
+      ],
+      "label": "no-group",
+      "code": "no-group"
+    }
+  ],
+  "label": "root",
+  "code": "root"
+}
\ No newline at end of file
-- 
GitLab