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