diff --git a/platforms/kaapana-platform/platform-installation/install_platform.sh b/platforms/kaapana-platform/platform-installation/install_platform.sh index 1fe7288a..690d91ac 100755 --- a/platforms/kaapana-platform/platform-installation/install_platform.sh +++ b/platforms/kaapana-platform/platform-installation/install_platform.sh @@ -1,627 +1,625 @@ #!/bin/bash set -euf -o pipefail # if unusual home dir of user: sudo dpkg-reconfigure apparmor PROJECT_NAME="kaapana-platform" # name of the platform Helm chart DEFAULT_VERSION="0.1.1-vdev" # version of the platform Helm chart DEV_MODE="true" # dev-mode -> containers will always be re-downloaded after pod-restart CONTAINER_REGISTRY_URL="" # eg 'dktk-jip-registry.dkfz.de' -> URL for the Docker registry (has to be 'local' for build-mode 'local' and the username for build-mode 'dockerhub') CONTAINER_REGISTRY_PROJECT="" # eg '/kaapana' -> The slash (/) in front of the project is important!! # Project of the Docker registry (not all have seperated projects then it shuould be empty-> '') # For build-mode 'local' and 'dockerhub' this should also be empty CHART_REGISTRY_URL="https://dktk-jip-registry.dkfz.de/chartrepo" # eg https://xx.xx.xx.xx/chartrepo -> URL for the chart repository CHART_REGISTRY_PROJECT="kaapana-public" # project name for the Helm charts FAST_DATA_DIR="/home/kaapana" # Directory on the server, where stateful application-data will be stored (databases, processing tmp data etc.) SLOW_DATA_DIR="/home/kaapana" # Directory on the server, where the DICOM images will be stored (can be slower) HTTP_PORT=80 # not working yet -> has to be 80 HTTPS_PORT=443 # not working yet -> has to be 443 DICOM_PORT=11112 # configure DICOM receiver port PULL_POLICY_PODS="IfNotPresent" PULL_POLICY_JOBS="IfNotPresent" PULL_POLICY_OPERATORS="IfNotPresent" DEV_PORTS="false" GPU_SUPPORT="false" if [ "$DEV_MODE" == "true" ]; then PULL_POLICY_PODS="Always" PULL_POLICY_JOBS="Always" PULL_POLICY_OPERATORS="Always" fi if [ -z ${http_proxy+x} ] || [ -z ${https_proxy+x} ]; then http_proxy="" https_proxy="" fi CHART_PATH="" declare -a NEEDED_REPOS=("$CHART_REGISTRY_PROJECT") script_name=`basename "$0"` # check if stdout is a terminal... if test -t 1; then # see if it supports colors... ncolors=$(tput colors) if test -n "$ncolors" && test $ncolors -ge 8; then BOLD="$(tput bold)" underline="$(tput smul)" standout="$(tput smso)" NC="$(tput sgr0)" BLACK="$(tput setaf 0)" RED="$(tput setaf 1)" GREEN="$(tput bold)$(tput setaf 2)" YELLOW="$(tput bold)$(tput setaf 3)" BLUE="$(tput bold)$(tput setaf 4)" MAGENTA="$(tput bold)$(tput setaf 5)" CYAN="$(tput bold)$(tput setaf 6)" WHITE="$(tput bold)$(tput setaf 7)" fi fi function import_containerd { echo "Starting image import into containerd..." while true; do read -e -p "Should all locally built Docker containers be deleted after the import?" -i " no" yn case $yn in [Yy]* ) echo -e "${GREEN}Local containers will be removed from Docker after the upload to microk8s${NC}" && DEL_CONTAINERS="true"; break;; [Nn]* ) echo -e "${YELLOW}Containers will be kept${NC}" && DEL_CONTAINERS="false"; break;; * ) echo "Please answer yes or no.";; esac done containerd_imgs=( $(microk8s ctr images ls -q) ) docker images --filter=reference="local/*" | tr -s ' ' | cut -d " " -f 1,2 | tr ' ' ':' | tail -n +2 | while read IMAGE; do hash=$(docker images --no-trunc --quiet $IMAGE) echo "" if [[ " ${containerd_imgs[*]} " == *"$hash"* ]]; then echo "Container $IMAGE already found: $hash" else echo "Not found: generating tar-file: '$IMAGE'" docker save $IMAGE > ./image.tar if [ $? -eq 0 ]; then echo "ok" else echo "Failed!" exit 1 fi echo "Import image into containerd..." microk8s ctr image import image.tar if [ $? -eq 0 ]; then echo "ok" else echo "Failed!" exit 1 fi echo "Remove tmp image.tar file..." rm image.tar if [ $? -eq 0 ]; then echo "ok" else echo "Failed!" exit 1 fi fi if [ "$DEL_CONTAINERS" = "true" ];then echo -e "Deleting Docker-image: $IMAGE" docker rmi $IMAGE echo "deleted." fi done if [ "$DEL_CONTAINERS" = "true" ];then echo -e "Deleting all remaining Docker-images..." docker system prune --all --force echo "done" fi echo "All images successfully imported!" } function get_domain { DOMAIN=$(hostname -f) if [ ! "$QUIET" = "true" ];then echo -e "" echo -e "${YELLOW}Please enter the domain (FQDN) of the server.${NC}" > /dev/stderr; echo -e "${YELLOW}The suggestion could be incorrect!${NC}" > /dev/stderr; echo -e "${YELLOW}The IP address should work as well (not recommended - will not work with valid certificates.)${NC}" > /dev/stderr; read -e -p "**** server domain (FQDN): " -i "$DOMAIN" DOMAIN else echo -e "${GREEN}QUIET: true -> DOMAIN: $DOMAIN ${NC}" > /dev/stderr; fi if [ -z "$DOMAIN" ]; then echo -e "${RED}DOMAIN not set!"; > /dev/stderr; echo -e "Please restart the process. ${NC}"; > /dev/stderr; exit 1 else echo -e "${GREEN}Server domain (FQDN): $DOMAIN ${NC}" > /dev/stderr; # Probably no necessary, can be removed in the future! # if [[ $DOMAIN =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then # echo "${YELLOW}Detected an IP address as server domain, adding the IP: $DOMAIN to no_proxy" # INSERTLINE="no_proxy=$no_proxy,$DOMAIN" # grep -q '\bno_proxy\b.*\b'${DOMAIN}'\b' /etc/environment || sed -i '/no_proxy=/d' /etc/environment # grep -q '\bno_proxy\b.*\b'${DOMAIN}'\b' /etc/environment && echo "$DOMAIN already part of no_proxy ...." || sh -c "echo '$INSERTLINE' >> /etc/environment" # fi fi } function delete_deployment { echo -e "${YELLOW}Uninstalling releases${NC}" helm ls --reverse -A | awk 'NR > 1 { print "-n "$2, $1}' | xargs -L1 helm delete echo -e "${YELLOW}Waiting until everything is terminated...${NC}" WAIT_UNINSTALL_COUNT=100 for idx in $(seq 0 $WAIT_UNINSTALL_COUNT) do sleep 3 DEPLOYED_NAMESPACES=$(/bin/bash -i -c "kubectl get namespaces | grep -E --line-buffered 'flow-jobs|flow|base|monitoring|store' | cut -d' ' -f1") TERMINATING_PODS=$(/bin/bash -i -c "kubectl get pods --all-namespaces | grep -E --line-buffered 'Terminating' | cut -d' ' -f1") UNINSTALL_TEST=$DEPLOYED_NAMESPACES$TERMINATING_PODS if [ -z "$UNINSTALL_TEST" ]; then break fi done if [ "$idx" -eq "$WAIT_UNINSTALL_COUNT" ]; then echo "${RED}Something went wrong while uninstalling please check manually if there are still namespaces or pods floating around. Everything must be delete before the installation:${NC}" echo "${RED}kubectl get pods -A${NC}" echo "${RED}kubectl get namespaces${NC}" echo "${RED}Once everything is delete you can reinstall the platform!${NC}" exit 1 fi - delete_helm_repos - echo -e "${GREEN}#################################### UNINSTALLATION DONE ############################################${NC}" } - function update_extensions { echo -e "${GREEN}Downloading all kaapanaworkflows, kaapanaapplications and kaapanaint to $HOME/.extensions${NC}" - set +euf updates_output=$(helm repo update) set -euf if echo "$updates_output" | grep -q 'failed to'; then echo -e "${RED}Update failed!${NC}" echo -e "${RED}You seem to have no internet connection!${NC}" echo "$updates_output" exit 1 else mkdir -p $HOME/.extensions find $HOME/.extensions/ -type f -delete + set +euf helm search repo --devel -l -r '(kaapanaworkflow|kaapanaapplication|kaapanaint)' -o json | jq -r '.[] | "\(.name) --version \(.version)"' | xargs -L1 helm pull -d $HOME/.extensions/ + set -euf echo -e "${GREEN}Update OK!${NC}" fi } function shell_update_extensions { if [ ! "$QUIET" = "true" ];then echo -e "${YELLOW}Which pull-docker-chart version should be used? ${NC}"; echo -e "${YELLOW}If you have no idea, press enter and accept the default. ${NC}"; read -e -p "${YELLOW}version: ${NC}" -i $DEFAULT_VERSION chart_version; else chart_version=$DEFAULT_VERSION fi update_extensions helm pull -d $HOME/.extensions/ --version=$chart_version $CHART_REGISTRY_PROJECT/pull-docker-chart } function install_chart { if [ ! -z "$CHART_PATH" ]; then CHART_REGISTRY_URL="local" CHART_REGISTRY_PROJECT="local" else add_helm_repos fi if [ -z "$CHART_REGISTRY_URL" ] || [ -z "$CHART_REGISTRY_PROJECT" ] || [ -z "$CONTAINER_REGISTRY_URL" ]; then echo 'CHART_REGISTRY_URL, CHART_REGISTRY_PROJECT, CONTAINER_REGISTRY_URL, CONTAINER_REGISTRY_PROJECT need to be set! -> please adjust the install_platform.sh script!' echo 'ABORT' exit 1 fi if [ ! "$CONTAINER_REGISTRY_URL" = "local" ];then check_credentials else REGISTRY_USERNAME="" REGISTRY_PASSWORD="" import_containerd fi if [ ! "$QUIET" = "true" ];then while true; do read -e -p "Enable GPU support?" -i " no" yn case $yn in [Yy]* ) echo -e "${GREEN}ENABLING GPU SUPPORT${NC}" && GPU_SUPPORT="true"; break;; [Nn]* ) echo -e "${YELLOW}SET NO GPU SUPPORT${NC}" && GPU_SUPPORT="false"; break;; * ) echo "Please answer yes or no.";; esac done else echo -e "${YELLOW}QUIET-MODE active!${NC}" fi echo -e "${YELLOW}GPU_SUPPORT: $GPU_SUPPORT ${NC}" get_domain if [ ! "$QUIET" = "true" ];then echo -e "" read -e -p "${YELLOW}Which $PROJECT_NAME version do you want to install?: ${NC}" -i $DEFAULT_VERSION chart_version; else chart_version=$DEFAULT_VERSION fi if [ ! -z "$CHART_PATH" ]; then echo -e "${YELLOW}Installing $PROJECT_NAME: version $chart_version${NC}" echo -e "${YELLOW}Chart-tgz-path $CHART_PATH${NC}" helm install $CHART_PATH \ --set global.version="$chart_version" \ --set global.hostname="$DOMAIN" \ --set global.dev_ports="$DEV_PORTS" \ --set global.dev_mode="$DEV_MODE" \ --set global.dicom_port="$DICOM_PORT" \ --set global.http_port="$HTTP_PORT" \ --set global.https_port="$HTTPS_PORT" \ --set global.fast_data_dir="$FAST_DATA_DIR" \ --set global.slow_data_dir="$SLOW_DATA_DIR" \ --set global.home_dir="$HOME" \ --set global.pull_policy_jobs="$PULL_POLICY_JOBS" \ --set global.pull_policy_operators="$PULL_POLICY_OPERATORS" \ --set global.pull_policy_pods="$PULL_POLICY_PODS" \ --set global.credentials.registry_username="$REGISTRY_USERNAME" \ --set global.credentials.registry_password="$REGISTRY_PASSWORD" \ --set global.gpu_support=$GPU_SUPPORT \ --set global.http_proxy=$http_proxy \ --set global.https_proxy=$https_proxy \ --set global.registry_url=$CONTAINER_REGISTRY_URL \ --set global.registry_project=$CONTAINER_REGISTRY_PROJECT \ --set global.chart_registry_project=$CHART_REGISTRY_PROJECT \ --name-template $PROJECT_NAME else update_extensions helm pull -d $HOME/.extensions/ --version=$chart_version $CHART_REGISTRY_PROJECT/pull-docker-chart echo -e "${YELLOW}Installing $CHART_REGISTRY_PROJECT/$PROJECT_NAME version: $chart_version${NC}" helm install --devel --version $chart_version $CHART_REGISTRY_PROJECT/$PROJECT_NAME \ --set global.version="$chart_version" \ --set global.hostname="$DOMAIN" \ --set global.dev_ports="$DEV_PORTS" \ --set global.dev_mode="$DEV_MODE" \ --set global.dicom_port="$DICOM_PORT" \ --set global.http_port="$HTTP_PORT" \ --set global.https_port="$HTTPS_PORT" \ --set global.fast_data_dir="$FAST_DATA_DIR" \ --set global.slow_data_dir="$SLOW_DATA_DIR" \ --set global.home_dir="$HOME" \ --set global.pull_policy_jobs="$PULL_POLICY_JOBS" \ --set global.pull_policy_operators="$PULL_POLICY_OPERATORS" \ --set global.pull_policy_pods="$PULL_POLICY_PODS" \ --set global.credentials.registry_username="$REGISTRY_USERNAME" \ --set global.credentials.registry_password="$REGISTRY_PASSWORD" \ --set global.gpu_support=$GPU_SUPPORT \ --set global.http_proxy=$http_proxy \ --set global.https_proxy=$https_proxy \ --set global.registry_url=$CONTAINER_REGISTRY_URL \ --set global.registry_project=$CONTAINER_REGISTRY_PROJECT \ --set global.chart_registry_project=$CHART_REGISTRY_PROJECT \ --name-template $PROJECT_NAME fi print_installation_done REGISTRY_USERNAME="" REGISTRY_PASSWORD="" } function upgrade_chart { if [ ! "$QUIET" = "true" ];then read -e -p "${YELLOW}Which version should be deployed?: ${NC}" -i $DEFAULT_VERSION chart_version; else chart_version=$DEFAULT_VERSION fi echo "${YELLOW}Upgrading release: $CHART_REGISTRY_PROJECT/$PROJECT_NAME${NC}" echo "${YELLOW}version: $chart_version${NC}" helm upgrade $PROJECT_NAME $CHART_REGISTRY_PROJECT/$PROJECT_NAME --devel --version $chart_version --set global.version="$chart_version" --reuse-values print_installation_done } function check_credentials { while true; do if [ ! -v REGISTRY_USERNAME ] || [ ! -v REGISTRY_PASSWORD ]; then echo -e "${YELLOW}Please enter the credentials for the Container-Registry!${NC}" read -p '**** username: ' REGISTRY_USERNAME read -s -p '**** password: ' REGISTRY_PASSWORD else echo -e "${GREEN}Credentials found!${NC}" break fi done } function add_helm_repos { echo -e "Adding needed helm projects..." for i in "${NEEDED_REPOS[@]}" do echo -e "${YELLOW}Adding project $i.${NC}" helm repo add $i $CHART_REGISTRY_URL/$i done helm repo update } function delete_helm_repos { # helm repo ls |cut -f 1 | tail -n +2 | xargs -L1 helm repo rm # delete all repos echo -e "Deleting needed helm projects..." for i in "${NEEDED_REPOS[@]}" do echo -e "${YELLOW}Deleting project $i.${NC}" helm repo remove $i done } function install_certs { echo -e "Checking if Kubectl is installed..." command -v microk8s.kubectl >/dev/null 2>&1 || { echo -e >&2 "${RED}Kubectl has to be installed for this script - but it's not installed. Aborting.${NC}"; exit 1; } echo -e "${GREEN}OK!${NC}" echo -e "Checking if correct Kubectl config is in place..." microk8s.kubectl get pods --all-namespaces if [ $? -eq 0 ]; then echo -e "${GREEN}Server connection - OK!${NC}" else echo -e "${RED}Kubectl could not communicate with the server.${NC}" echo -e "${RED}Have a look at the output, ${NC}" echo -e "${RED}Check if the correct server certificate file is in place @ ~/.kube/config, ${NC}" echo -e "${RED}Check if the IP address in the certificate matches the IP address of the server ${NC}" echo -e "${RED}and try again.${NC}" exit 1 fi if [ ! -f ./tls.key ] || [ ! -f ./tls.crt ]; then echo -e "${RED}tls.key or tls.crt could not been found in this directory.${NC}" echo -e "${RED}Please rename and copy the files first!${NC}" exit 1 else echo -e "files found!" echo -e "Creating cluster secret ..." microk8s.kubectl delete secret certificate -n kube-system microk8s.kubectl create secret tls certificate --namespace kube-system --key ./tls.key --cert ./tls.crt gatekeeper_pod=$(microk8s.kubectl get pods -n kube-system |grep louketo | awk '{print $1;}') echo "gatekeeper pod: $gatekeeper_pod" microk8s.kubectl -n kube-system delete pod $gatekeeper_pod fi echo -e "${GREEN}DONE${NC}" } function prefetch_extensions { helm repo update if [ ! "$QUIET" = "true" ];then read -e -p "${YELLOW}Which prefetch-extensions-chart version should be use? If you have no idea, press enter and accept the default: ${NC}" -i $DEFAULT_VERSION chart_version; else chart_version=$DEFAULT_VERSION fi echo -e "Prefetching all extension docker container" release_name=prefetch-extensions-chart-$(echo $(uuidgen --hex) | cut -c1-10) helm install --devel --version $chart_version $CHART_REGISTRY_PROJECT/prefetch-extensions-chart \ --set global.pull_policy_jobs="$PULL_POLICY_JOBS" \ --set global.registry_url=$CONTAINER_REGISTRY_URL \ --set global.registry_project=$CONTAINER_REGISTRY_PROJECT \ --name-template $release_name \ --wait \ --atomic \ --timeout 60m0s sleep 10 helm delete $release_name echo -e "${GREEN}OK!${NC}" } function print_installation_done { echo -e "${GREEN}Installation finished." echo -e "Please wait till all components have been downloaded and started." echo -e "You can check the progress with:" echo -e "watch microk8s.kubectl get pods --all-namespaces" echo -e "When all pod are in the \"running\" or \"completed\" state,${NC}" if [ -v DOMAIN ];then echo -e "${GREEN}you can visit: https://$DOMAIN/" echo -e "You should be welcomed by the login page." echo -e "Initial credentials:" echo -e "username: kaapana" echo -e "password: kaapana ${NC}" fi } ### MAIN programme body: if [ "$EUID" -eq 0 ];then echo -e "${RED}Please run the script without root privileges!${NC}"; # exit 1 else echo -e "${YELLOW}USER: $USER ${NC}"; fi SIZE=`df -k --output=size "/var/snap" | tail -n1` if [[ $SIZE -lt 81920 ]]; then echo -e "${RED}Your disk space is too small to install the system.${NC}"; echo -e "${RED}There should be at least 80 GiBytes available @ /var/snap ${NC}"; else SIZE=`df -h --output=size "/var/snap" | tail -n1` echo -e "${GREEN}Check disk space: ok${NC}"; echo -e "${GREEN}SIZE: $SIZE ${NC}"; fi; ### Parsing command line arguments: usage="$(basename "$0") _Flag: --prefetch-extensions prefetch containers needed for the extensions _Flag: --update-extensions Updates the extensions saved to ~/.extensions _Flag: --install-certs set new HTTPS-certificates for the platform _Flag: --quiet, meaning non-interactive operation _Argument: --chart-path [path-to-chart-tgz] _Argument: --username [Docker regsitry username] _Argument: --password [Docker regsitry password] _Argument: --port [Set main https-port] _Argument: --version [version] where version is one of the available platform releases: 0.1.0 --> latest Kaapana release $DEFAULT_VERSION --> latest development version ${NC}" QUIET=NA POSITIONAL=() while [[ $# -gt 0 ]] do key="$1" case $key in -v|--version) DEFAULT_VERSION="$2" shift # past argument shift # past value ;; -u|--username) REGISTRY_USERNAME="$2" echo -e "${GREEN}SET REGISTRY_USERNAME! $REGISTRY_USERNAME ${NC}"; shift # past argument shift # past value ;; -p|--password) REGISTRY_PASSWORD="$2" echo -e "${GREEN}SET REGISTRY_PASSWORD!${NC}"; shift # past argument shift # past value ;; --port) HTTPS_PORT="$2" echo -e "${GREEN}SET PORT!${NC}"; shift # past argument shift # past value ;; --chart-path) CHART_PATH="$2" echo -e "${GREEN}SET CHART_PATH: $CHART_PATH !${NC}"; shift # past argument shift # past value ;; --quiet) QUIET=true shift # past argument ;; --install-certs) install_certs exit 0 ;; --update-extensions) shell_update_extensions exit 0 ;; --prefetch-extensions) prefetch_extensions exit 0 ;; *) # unknown option echo -e "${RED}unknow parameter: $key ${NC}" echo -e "${YELLOW}$usage${NC}" exit 1 ;; esac done echo -e "${YELLOW}Check if helm is available...${NC}" if ! [ -x "$(command -v helm)" ]; then echo -e "${RED}############### Helm not available! ###############${NC}" echo -e "${YELLOW} Install server dependencies first! ${NC}" exit 1 else echo -e "${GREEN}ok${NC}" fi echo -e "${YELLOW}Update helm repos...${NC}" set +euf updates_output=$(helm repo update) set -euf if echo "$updates_output" | grep -q 'failed to'; then echo -e "${RED}updates failed!${NC}" echo "$updates_output" exit 1 else echo -e "${GREEN}updates ok${NC}" fi echo -e "${YELLOW}Get helm deployments...${NC}" deployments=$(helm ls |cut -f1 |tail -n +2) echo "Current deployments: " echo $deployments if [[ $deployments == *"$PROJECT_NAME"* ]] && [[ ! $QUIET = true ]];then echo -e "${YELLOW}$PROJECT_NAME already deployed!${NC}" PS3='select option: ' options=("Upgrade" "Re-install" "Uninstall" "Quit") select opt in "${options[@]}" do case $opt in "Upgrade") echo -e "${YELLOW}Starting upgrade...${NC}" upgrade_chart break ;; "Re-install") echo -e "${YELLOW}Starting re-installation...${NC}" delete_deployment install_chart break ;; "Uninstall") echo -e "${YELLOW}Starting Uninstallation...${NC}" delete_deployment exit 0 ;; "Quit") echo -e "${YELLOW}abort.${NC}" exit 0 ;; *) echo "invalid option $REPLY";; esac done elif [[ $deployments == *"$PROJECT_NAME"* ]] && [[ $QUIET = true ]];then echo -e "${RED}Project already deplyed!${NC}" echo -e "${RED}abort.${NC}" exit 1 else echo -e "${GREEN}No previous deployment found -> installation${NC}" install_chart fi diff --git a/services/kaapana-core/louketo-proxy/louketo-proxy-chart/templates/louketo_deployment.yaml b/services/kaapana-core/louketo-proxy/louketo-proxy-chart/templates/louketo_deployment.yaml index b50d3763..7faca653 100755 --- a/services/kaapana-core/louketo-proxy/louketo-proxy-chart/templates/louketo_deployment.yaml +++ b/services/kaapana-core/louketo-proxy/louketo-proxy-chart/templates/louketo_deployment.yaml @@ -1,57 +1,57 @@ --- apiVersion: apps/v1 kind: Deployment metadata: name: louketo namespace: kube-system spec: replicas: 1 selector: matchLabels: app-name: louketo template: metadata: labels: app-name: louketo spec: initContainers: - name: init image: {{ .Values.global.registry_url }}{{ .Values.global.registry_project }}/service_checker:1.1 imagePullPolicy: {{ .Values.global.pull_policy_pods }} env: - name: WAIT value: "keycloak,keycloak-service.kube-system.svc,443" - name: DELAY value: "3" - name: TIMEOUT value: "10" containers: - name: louketo-container image: {{ .Values.global.registry_url }}{{ .Values.global.registry_project }}/louketo-proxy:0.1.0 imagePullPolicy: {{ .Values.global.pull_policy_pods }} args: ["--config","/app/louketo.cfg"] ports: - name: http containerPort: 8080 - name: https containerPort: 8443 resources: requests: - memory: 20Mi - limits: memory: 50Mi + limits: + memory: 150Mi volumeMounts: - name: config-file mountPath: /app - name: ssl-config mountPath: /ssl volumes: - name: ssl-config secret: secretName: certificate - name: config-file configMap: name: louketo-config imagePullSecrets: - name: registry-secret --- diff --git a/workflows/airflow-components/dags/dag_nnunet_inference.py b/workflows/airflow-components/dags/dag_nnunet_inference.py index 9985c2a0..6d510a06 100644 --- a/workflows/airflow-components/dags/dag_nnunet_inference.py +++ b/workflows/airflow-components/dags/dag_nnunet_inference.py @@ -1,265 +1,194 @@ from airflow.utils.log.logging_mixin import LoggingMixin from airflow.utils.dates import days_ago from datetime import timedelta from airflow.models import DAG from datetime import datetime from nnunet.NnUnetOperator import NnUnetOperator +from nnunet.getTasks import get_tasks from kaapana.operators.ResampleOperator import ResampleOperator from nnunet.GetTaskModelOperator import GetTaskModelOperator from nnunet.LocalSegCheckOperator import LocalSegCheckOperator # from nnunet.GetContainerModelOperator import GetContainerModelOperator from kaapana.operators.DcmConverterOperator import DcmConverterOperator from kaapana.operators.DcmSendOperator import DcmSendOperator from kaapana.operators.Itk2DcmSegOperator import Itk2DcmSegOperator from kaapana.operators.LocalGetInputDataOperator import LocalGetInputDataOperator from kaapana.operators.LocalWorkflowCleanerOperator import LocalWorkflowCleanerOperator -import json -import os -from os.path import join, basename, dirname, normpath, exists - -af_home_path = "/root/airflow" -installed_models_path = join(af_home_path, "models", "nnUNet") -tasks_json_path = join(af_home_path, "dags", "nnunet", "nnunet_tasks.json") - -with open(tasks_json_path) as f: - tasks = json.load(f) - -available_tasks = [*{k: v for (k, v) in tasks.items() - if "supported" in tasks[k] and tasks[k]["supported"]}] -installed_models_available = [basename(normpath(f.path)) for f in os.scandir( - installed_models_path) if f.is_dir() and "ensembles" not in f.name] - -for installed_model in installed_models_available: - model_path = join(installed_models_path, installed_model) - installed_task_dirs = [basename(normpath(f.path)) - for f in os.scandir(model_path) if f.is_dir()] - for installed_task in installed_task_dirs: - if installed_task not in tasks: - print( - f"################### Adding task: {installed_task}: {installed_model}") - model_info_path = join( - model_path, installed_task, installed_model, "dataset.json") - if exists(model_info_path): - print(f"Found dataset.json at {model_info_path}") - with open(model_info_path) as f: - model_info = json.load(f) - else: - print(f"Could not find dataset.json at {model_info_path}") - model_info = { - "description": "N/A", - "labels": None, - "licence": "N/A", - "modality": { - "0": "CT" - }, - "model": [ - "3d_lowres" - ], - "name": "Task530_Training", - "network_trainer": "nnUNetTrainerV2", - "numTest": 0, - "numTraining": 1, - "reference": "nnUNet", - "relase": "N/A", - "shuffle_seed": [ - 0 - ], - "supported": true, - "tensorImageSize": "3D" - } - - available_tasks.append(installed_task) - available_tasks.sort() - tasks[installed_task] = { - "description": model_info["description"], - "model": [], - "input-mode": model_info["input-mode"], - "input": model_info["input"], - "body_part": model_info["body_part"], - "targets": model_info["targets"], - "supported": model_info["supported"], - "info": model_info["info"], - "url": model_info["url"], - "task_url": model_info["task_url"] - } - if installed_model not in tasks[installed_task]['model']: - tasks[installed_task]['model'].append(installed_model) - tasks[installed_task]['model'].sort() - +available_pretrained_task_names, installed_tasks, all_selectable_tasks = get_tasks() ui_forms = { "publication_form": { "type": "object", "properties": { "title": { "title": "Title", "default": "Automated Design of Deep Learning Methods\n for Biomedical Image Segmentation", "type": "string", "readOnly": True, }, "authors": { "title": "Authors", "default": "Fabian Isensee, Paul F. Jäger, Simon A. A. Kohl, Jens Petersen, Klaus H. Maier-Hein", "type": "string", "readOnly": True, }, "link": { "title": "DOI", "default": "https://arxiv.org/abs/1904.08128", "description": "DOI", "type": "string", "readOnly": True, }, "confirmation": { "title": "Accept", "default": False, "type": "boolean", "readOnly": True, "required": True, } } }, "workflow_form": { "type": "object", "properties": { "task": { "title": "Tasks available", "description": "Select one of the available tasks.", "type": "string", - "enum": available_tasks, + "enum": sorted(list(all_selectable_tasks.keys())), "required": True }, "description": { "title": "Task Description", "description": "Description of the task.", "type": "string", "readOnly": True, "dependsOn": [ "task" ] }, "task_url": { "title": "Website", "description": "Website to the task.", "type": "string", "readOnly": True, "dependsOn": [ "task" ] }, "input": { "title": "Input Modalities", "description": "Expected input modalities.", "type": "string", "readOnly": True, "dependsOn": [ "task" ] }, "body_part": { "title": "Body Part", "description": "Body part, which needs to be present in the image.", "type": "string", "readOnly": True, "dependsOn": [ "task" ] }, "targets": { "title": "Segmentation Targets", "type": "string", "readOnly": True, "dependsOn": [ "task" ] }, "model": { "title": "Pre-trained models", "description": "Select one of the available models.", "type": "string", "default": "3d_lowres", "required": True, - "enum": installed_models_available, + "enum": [], "dependsOn": [ "task" ] }, "single_execution": { "title": "single execution", "description": "Should each series be processed separately?", "type": "boolean", "default": True, "readOnly": False, } } } } args = { 'ui_visible': True, - 'ui_dag_info': tasks, + 'ui_dag_info': all_selectable_tasks, 'ui_forms': ui_forms, 'owner': 'kaapana', 'start_date': days_ago(0), 'retries': 0, 'retry_delay': timedelta(seconds=60) } dag = DAG( dag_id='nnunet-predict', default_args=args, concurrency=10, max_active_runs=10, schedule_interval=None ) get_input = LocalGetInputDataOperator( dag=dag, parallel_downloads=5, check_modality=True ) get_task_model = GetTaskModelOperator(dag=dag) # get_task_model = GetContainerModelOperator(dag=dag) dcm2nifti = DcmConverterOperator( dag=dag, input_operator=get_input, output_format='nii.gz' ) nnunet_predict = NnUnetOperator( dag=dag, mode="inference", input_modality_operators=[dcm2nifti], inf_preparation=True, inf_threads_prep=1, inf_threads_nifti=1 ) resample_seg = ResampleOperator( dag=dag, input_operator=nnunet_predict, original_img_operator=dcm2nifti, operator_out_dir=nnunet_predict.operator_out_dir ) check_seg = LocalSegCheckOperator( dag=dag, abort_on_error=True, move_data=False, input_operators=[nnunet_predict, dcm2nifti] ) alg_name = nnunet_predict.image.split("/")[-1].split(":")[0] nrrd2dcmSeg_multi = Itk2DcmSegOperator( dag=dag, input_operator=get_input, segmentation_operator=nnunet_predict, input_type="multi_label_seg", multi_label_seg_name=alg_name, skip_empty_slices=True, alg_name=alg_name ) dcmseg_send_multi = DcmSendOperator(dag=dag, input_operator=nrrd2dcmSeg_multi) clean = LocalWorkflowCleanerOperator(dag=dag, clean_workflow_dir=False) get_input >> get_task_model >> dcm2nifti >> nnunet_predict >> resample_seg >> check_seg >> nrrd2dcmSeg_multi >> dcmseg_send_multi >> clean diff --git a/workflows/airflow-components/dags/dag_nnunet_install_model.py b/workflows/airflow-components/dags/dag_nnunet_model_install.py similarity index 80% rename from workflows/airflow-components/dags/dag_nnunet_install_model.py rename to workflows/airflow-components/dags/dag_nnunet_model_install.py index 08fc2667..55166753 100644 --- a/workflows/airflow-components/dags/dag_nnunet_install_model.py +++ b/workflows/airflow-components/dags/dag_nnunet_model_install.py @@ -1,74 +1,83 @@ from airflow.utils.log.logging_mixin import LoggingMixin from airflow.utils.dates import days_ago from datetime import timedelta from airflow.models import DAG from kaapana.operators.LocalGetInputDataOperator import LocalGetInputDataOperator from kaapana.operators.LocalGetRefSeriesOperator import LocalGetRefSeriesOperator from kaapana.operators.LocalWorkflowCleanerOperator import LocalWorkflowCleanerOperator from kaapana.operators.Bin2DcmOperator import Bin2DcmOperator +from nnunet.GetTaskModelOperator import GetTaskModelOperator + ui_forms = { "workflow_form": { "type": "object", "properties": { "combination_method": { "title": "method", "description": "Select the method for model merging.", - "enum": ["averaging","test2","test3"], + "enum": ["averaging", "test2", "test3"], "default": 'averaging', "required": True }, "input": { "title": "Input Modality", "default": "OT", "description": "Expected input modality.", "type": "string", "readOnly": True, }, } } } args = { 'ui_visible': True, 'ui_forms': ui_forms, 'owner': 'kaapana', 'start_date': days_ago(0), 'retries': 0, 'retry_delay': timedelta(seconds=60) } dag = DAG( - dag_id='nnunet-install-model', + dag_id='nnunet-model-install', default_args=args, concurrency=1, max_active_runs=1, schedule_interval=None ) get_input = LocalGetInputDataOperator( dag=dag, check_modality=True, parallel_downloads=5 ) get_ref_ct_series_from_seg = LocalGetRefSeriesOperator( dag=dag, input_operator=get_input, search_policy="study_uid", expected_file_count="all", modality="OT", parallel_downloads=5, ) - dcm2bin = Bin2DcmOperator( dag=dag, input_operator=get_ref_ct_series_from_seg, name="extract-binary", file_extensions="*.dcm" ) +extract_model = GetTaskModelOperator( + dag=dag, + name="install-model-zip", + input_operator=dcm2bin, + mode="install_zip" +) +clean = LocalWorkflowCleanerOperator( + dag=dag, + clean_workflow_dir=True +) -#clean = LocalWorkflowCleanerOperator(dag=dag,clean_workflow_dir=True) - -get_input >> get_ref_ct_series_from_seg >> dcm2bin #>> clean +get_input >> get_ref_ct_series_from_seg >> dcm2bin >> extract_model >> clean diff --git a/workflows/airflow-components/dags/dag_nnunet_model_uninstall.py b/workflows/airflow-components/dags/dag_nnunet_model_uninstall.py new file mode 100644 index 00000000..163210db --- /dev/null +++ b/workflows/airflow-components/dags/dag_nnunet_model_uninstall.py @@ -0,0 +1,46 @@ +from airflow.utils.dates import days_ago +from datetime import timedelta +from airflow.models import DAG +from nnunet.GetTaskModelOperator import GetTaskModelOperator +from nnunet.getTasks import get_tasks + +available_pretrained_task_names, installed_tasks, all_selectable_tasks = get_tasks() + +ui_forms = { + "workflow_form": { + "type": "object", + "properties": { + "task": { + "title": "Installed nnUnet Tasks", + "description": "Select one of the installed tasks.", + "type": "string", + "enum": sorted(list(installed_tasks.keys())), + "required": True + } + } + } +} +args = { + 'ui_visible': True, + 'ui_forms': ui_forms, + 'owner': 'kaapana', + 'start_date': days_ago(0), + 'retries': 0, + 'retry_delay': timedelta(seconds=60) +} + +dag = DAG( + dag_id='nnunet-model-uninstall', + default_args=args, + concurrency=1, + max_active_runs=1, + schedule_interval=None +) + +delete_model = GetTaskModelOperator( + dag=dag, + name="uninstall-nnunet-task", + mode="uninstall" +) + +delete_model diff --git a/workflows/airflow-components/dags/dag_nnunet_training.py b/workflows/airflow-components/dags/dag_nnunet_training.py index fb6f8bf4..29bd5fee 100644 --- a/workflows/airflow-components/dags/dag_nnunet_training.py +++ b/workflows/airflow-components/dags/dag_nnunet_training.py @@ -1,306 +1,308 @@ import pydicom import random -from datetime import datetime -from datetime import timedelta +from datetime import datetime, timedelta from airflow.models import DAG from airflow.utils.dates import days_ago from airflow.utils.log.logging_mixin import LoggingMixin from airflow.api.common.experimental import pool as pool_api from kaapana.operators.DcmConverterOperator import DcmConverterOperator from kaapana.operators.DcmSeg2ItkOperator import DcmSeg2ItkOperator from kaapana.operators.DcmSendOperator import DcmSendOperator from kaapana.operators.LocalGetInputDataOperator import LocalGetInputDataOperator from kaapana.operators.LocalGetRefSeriesOperator import LocalGetRefSeriesOperator from kaapana.operators.Bin2DcmOperator import Bin2DcmOperator from kaapana.operators.Pdf2DcmOperator import Pdf2DcmOperator from kaapana.operators.ZipUnzipOperator import ZipUnzipOperator from kaapana.operators.ResampleOperator import ResampleOperator from kaapana.operators.LocalWorkflowCleanerOperator import LocalWorkflowCleanerOperator from nnunet.NnUnetOperator import NnUnetOperator from nnunet.LocalSegCheckOperator import LocalSegCheckOperator TASK_NAME = f"Task{random.randint(100,999):03}_Training" seg_filter = "" prep_modalities = "CT" train_network = "3d_lowres" train_network_trainer = "nnUNetTrainerV2" ae_title = "nnUnet-results" study_uid = pydicom.uid.generate_uid() gpu_count_pool = pool_api.get_pool(name="GPU_COUNT") gpu_count = int(gpu_count_pool.slots) if gpu_count_pool is not None else 1 cpu_count_pool = pool_api.get_pool(name="CPU") prep_threads = int(cpu_count_pool.slots//8) if cpu_count_pool is not None else 4 prep_threads = 2 if prep_threads < 2 else prep_threads prep_threads = 9 if prep_threads > 9 else prep_threads -timestamp = datetime.now().strftime("%d.%m.%Y %H:%M") - ui_forms = { "publication_form": { "type": "object", "properties": { "title": { "title": "Title", "default": "Automated Design of Deep Learning Methods\n for Biomedical Image Segmentation", "type": "string", "readOnly": True, }, "authors": { "title": "Authors", "default": "Fabian Isensee, Paul F. Jäger, Simon A. A. Kohl, Jens Petersen, Klaus H. Maier-Hein", "type": "string", "readOnly": True, }, "link": { "title": "DOI", "default": "https://arxiv.org/abs/1904.08128", "description": "DOI", "type": "string", "readOnly": True, }, "confirmation": { "title": "Accept", "default": False, "type": "boolean", "readOnly": True, "required": True, } } }, "workflow_form": { "type": "object", "properties": { "task": { "title": "TASK_NAME", "description": "Specify a name for the training task", "type": "string", "default": TASK_NAME, "required": True }, "train_network": { "title": "Network", "default": train_network, "description": "2d, 3d_lowres, 3d_fullres or 3d_cascade_fullres", "enum": ["2d", "3d_lowres", "3d_fullres", "3d_cascade_fullres"], "type": "string", "readOnly": False, "required": True }, "train_network_trainer": { "title": "Network-trainer", "default": train_network_trainer, "description": "nnUNetTrainerV2 or nnUNetTrainerV2CascadeFullRes", "type": "string", "readOnly": False, }, "prep_modalities": { "title": "Modalities", "default": prep_modalities, "description": "eg 'CT' or 'CT,PET' etc.", "type": "string", "readOnly": False, }, "seg_filter": { "title": "Seg", "default": seg_filter, "description": "Select organ for multi-label DICOM SEGs: eg 'liver' or 'spleen,liver'", "type": "string", "readOnly": False, }, "shuffle_seed": { "title": "Shuffle seed", "default": 0, "description": "Set a seed.", "type": "integer", "readOnly": False, }, "test_percentage": { "title": "Test percentage", "default": 0, "description": "Set % of data for the test-set.", "type": "integer", "readOnly": False, }, "training_description": { "title": "Training description", "default": "nnUnet Segmentation", "description": "Specify a version.", "type": "string", "readOnly": False, }, # "version": { # "title": "Version", # "default": "0.0.1-alpha", # "description": "Specify a version.", # "type": "string", # "readOnly": False, # }, # "training_reference": { # "title": "Training reference", # "default": "nnUNet", # "description": "Set a reference.", # "type": "string", # "readOnly": False, # }, "input": { "title": "Input Modality", "default": "SEG", "description": "Expected input modality.", "type": "string", "readOnly": True, }, } } } args = { 'ui_visible': True, 'ui_forms': ui_forms, 'owner': 'kaapana', 'start_date': days_ago(0), 'retries': 1, 'retry_delay': timedelta(seconds=30) } dag = DAG( dag_id='nnunet-training', default_args=args, concurrency=gpu_count, max_active_runs=1, schedule_interval=None ) get_input = LocalGetInputDataOperator( dag=dag, check_modality=True, parallel_downloads=5 ) dcm2nifti_seg = DcmSeg2ItkOperator( dag=dag, input_operator=get_input, output_format="nii.gz", seg_filter=seg_filter, parallel_id='seg', delete_input_on_success=True ) get_ref_ct_series_from_seg = LocalGetRefSeriesOperator( dag=dag, input_operator=get_input, search_policy="reference_uid", parallel_downloads=5, modality=None, delete_input_on_success=True ) dcm2nifti_ct = DcmConverterOperator( dag=dag, input_operator=get_ref_ct_series_from_seg, parallel_id='ct', output_format='nii.gz', delete_input_on_success=True ) resample_seg = ResampleOperator( dag=dag, input_operator=dcm2nifti_seg, original_img_operator=dcm2nifti_ct, operator_out_dir=dcm2nifti_seg.operator_out_dir, delete_input_on_success=False ) check_seg = LocalSegCheckOperator( dag=dag, abort_on_error=True, move_data=False, input_operators=[dcm2nifti_seg, dcm2nifti_ct], delete_input_on_success=False ) nnunet_preprocess = NnUnetOperator( dag=dag, mode="preprocess", input_modality_operators=[dcm2nifti_ct], prep_label_operators=[dcm2nifti_seg], prep_modalities=prep_modalities.split(","), prep_processes_low=prep_threads+1, prep_processes_full=prep_threads, prep_preprocess=True, prep_check_integrity=True, prep_copy_data=True, + prep_exit_on_issue=True, retries=0, delete_input_on_success=True ) nnunet_train = NnUnetOperator( dag=dag, mode="training", train_max_epochs=1, input_operator=nnunet_preprocess, train_network=train_network, train_network_trainer=train_network_trainer, train_fold='all', retries=0, delete_input_on_success=True ) pdf2dcm = Pdf2DcmOperator( dag=dag, input_operator=nnunet_train, study_uid=study_uid, aetitle=ae_title, - pdf_title=f"Training Report nnUNet {timestamp}", + pdf_title=f"Training Report nnUNet {TASK_NAME} {datetime.now().strftime('%d.%m.%Y %H:%M')}", delete_input_on_success=False ) dcmseg_send_pdf = DcmSendOperator( dag=dag, parallel_id="pdf", level="batch", ae_title=ae_title, input_operator=pdf2dcm, delete_input_on_success=True ) zip_model = ZipUnzipOperator( dag=dag, target_filename=f"nnunet_model_{train_network}.zip", - whitelist_files="model_latest.model.pkl,model_latest.model,model_final_checkpoint.model,model_final_checkpoint.model.pkl,dataset.json,*.png,*.txt,*.pdf", + whitelist_files="model_latest.model.pkl,model_latest.model,model_final_checkpoint.model,model_final_checkpoint.model.pkl,dataset.json,training_log*.json,plans.pkl,*.png,*.pdf", subdir="results/nnUNet", mode="zip", batch_level=True, input_operator=nnunet_train, delete_input_on_success=False ) bin2dcm = Bin2DcmOperator( dag=dag, name="model2dicom", + manufacturer="Kaapana", + manufacturer_model="nnUNet", + patient_id=f"{TASK_NAME}", + study_id=f"{TASK_NAME}", study_uid=study_uid, - study_description="DICOM encoded nnUNet model", - study_id="Kaapana nnUNet model", + study_description=f"nnUNet {TASK_NAME} model", + series_description=f"nnUNet model {datetime.now().strftime('%d.%m.%Y %H:%M')}", size_limit=100, input_operator=zip_model, file_extensions="*.zip", delete_input_on_success=True ) dcmseg_send_int = DcmSendOperator( dag=dag, level="batch", ae_title=ae_title, input_operator=bin2dcm, delete_input_on_success=True ) clean = LocalWorkflowCleanerOperator(dag=dag, clean_workflow_dir=False) get_input >> dcm2nifti_seg >> resample_seg >> check_seg >> nnunet_preprocess get_input >> get_ref_ct_series_from_seg >> dcm2nifti_ct >> resample_seg >> check_seg >> nnunet_preprocess >> nnunet_train -nnunet_train >> pdf2dcm >> dcmseg_send_pdf +nnunet_train >> pdf2dcm >> dcmseg_send_pdf >> clean nnunet_train >> zip_model >> bin2dcm >> dcmseg_send_int >> clean diff --git a/workflows/airflow-components/dags/nnunet/GetTaskModelOperator.py b/workflows/airflow-components/dags/nnunet/GetTaskModelOperator.py index 1788a9cb..805ec7d0 100644 --- a/workflows/airflow-components/dags/nnunet/GetTaskModelOperator.py +++ b/workflows/airflow-components/dags/nnunet/GetTaskModelOperator.py @@ -1,63 +1,64 @@ from kaapana.kubetools.volume_mount import VolumeMount from kaapana.kubetools.volume import Volume from kaapana.kubetools.resources import Resources as PodResources - from kaapana.operators.KaapanaBaseOperator import KaapanaBaseOperator, default_registry, default_project from datetime import timedelta import os - class GetTaskModelOperator(KaapanaBaseOperator): execution_timeout = timedelta(minutes=240) def __init__(self, dag, + name="get-task-model", task_id=None, zip_file=False, + mode="install_pretrained", env_vars={}, execution_timeout=execution_timeout, *args, **kwargs ): envs = { "MODELDIR": "/models", + "MODE": str(mode), "ZIP_FILE": str(zip_file) } env_vars.update(envs) if task_id is not None: env_vars["TASK"] = task_id data_dir = os.getenv('DATADIR', "") models_dir = os.path.join(os.path.dirname(data_dir), "models") volume_mounts = [] volumes = [] volume_mounts.append(VolumeMount( 'models', mount_path='/models', sub_path=None, read_only=False)) volume_config = { 'hostPath': { 'type': 'DirectoryOrCreate', 'path': models_dir } } volumes.append(Volume(name='models', configs=volume_config)) super().__init__( dag=dag, image="{}{}/nnunet-get-models:0.1.1-vdev".format(default_registry, default_project), - name="get-task-model", + name=name, image_pull_secrets=["registry-secret"], volumes=volumes, volume_mounts=volume_mounts, execution_timeout=execution_timeout, env_vars=env_vars, enable_proxy=True, host_network=True, ram_mem_mb=1000, *args, **kwargs ) diff --git a/workflows/airflow-components/dags/nnunet/NnUnetOperator.py b/workflows/airflow-components/dags/nnunet/NnUnetOperator.py index ef2ea147..874ce941 100644 --- a/workflows/airflow-components/dags/nnunet/NnUnetOperator.py +++ b/workflows/airflow-components/dags/nnunet/NnUnetOperator.py @@ -1,125 +1,127 @@ from kaapana.kubetools.volume_mount import VolumeMount from kaapana.kubetools.volume import Volume from kaapana.kubetools.resources import Resources as PodResources from kaapana.operators.KaapanaBaseOperator import KaapanaBaseOperator, default_registry, default_project from datetime import timedelta import os import json class NnUnetOperator(KaapanaBaseOperator): execution_timeout = timedelta(days=5) task_dict = {} def __init__(self, dag, mode, # preprocess, training, inference,export-model,install-model input_modality_operators=[], prep_processes_low=8, prep_processes_full=6, prep_label_operators=[], prep_modalities=[], prep_preprocess=True, prep_check_integrity=True, prep_use_nifti_labels=True, prep_copy_data=False, + prep_exit_on_issue=True, train_fold="all", train_network="3d_lowres", train_network_trainer="nnUNetTrainerV2", train_continue=False, train_npz=False, train_strict=True, train_max_epochs=1000, inf_preparation=True, inf_threads_prep=1, inf_threads_nifti=1, env_vars={}, parallel_id=None, execution_timeout=execution_timeout, *args, **kwargs ): envs = { "MODE": str(mode), "INPUT_MODALITY_DIRS": ",".join(str(operator.operator_out_dir) for operator in input_modality_operators), "PREP_TL": str(prep_processes_low), "PREP_TF": str(prep_processes_full), "PREP_LABEL_DIRS": ",".join(str(operator.operator_out_dir) for operator in prep_label_operators), "PREP_MODALITIES": ",".join(str(modality) for modality in prep_modalities), "PREP_PREPROCESS": str(prep_preprocess), "PREP_CHECK_INTEGRITY": str(prep_check_integrity), "PREP_USE_NIFITI_LABELS": str(prep_use_nifti_labels), + "PREP_EXIT_ON_ISSUE": str(prep_exit_on_issue), "PREP_COPY_DATA": str(prep_copy_data), "TRAIN_FOLD": str(train_fold), "TRAIN_NETWORK": train_network, "TRAIN_NETWORK_TRAINER": train_network_trainer, "TRAIN_CONTINUE": str(train_continue), "TRAIN_MAX_EPOCHS": str(train_max_epochs), "TRAIN_NPZ": str(train_npz), "TRAIN_STRICT": str(train_strict), "INF_THREADS_PREP": str(inf_threads_prep), "INF_THREADS_NIFTI": str(inf_threads_nifti), "INF_PREPARATION": str(inf_preparation), "TENSORBOARD_DIR": '/tensorboard', } env_vars.update(envs) data_dir = os.getenv('DATADIR', "") models_dir = os.path.join(os.path.dirname(data_dir), "models") volume_mounts = [] volumes = [] volume_mounts.append(VolumeMount( 'models', mount_path='/models', sub_path=None, read_only=False)) volume_config = { 'hostPath': { 'type': 'DirectoryOrCreate', 'path': models_dir } } volumes.append(Volume(name='models', configs=volume_config)) volume_mounts.append(VolumeMount( 'dshm', mount_path='/dev/shm', sub_path=None, read_only=False)) volume_config = { 'emptyDir': { 'medium': 'Memory', } } volumes.append(Volume(name='dshm', configs=volume_config)) pod_resources = PodResources(request_memory=None, request_cpu=None, limit_memory=None, limit_cpu=None, limit_gpu=None) training_operator = False gpu_mem_mb = None if mode == "training" or mode == "inference": pod_resources = PodResources(request_memory=None, request_cpu=None, limit_memory=None, limit_cpu=None, limit_gpu=1) gpu_mem_mb = 6000 if mode == "training": gpu_mem_mb = None training_operator = True parallel_id = parallel_id if parallel_id is not None else mode super().__init__( dag=dag, image="{}{}/nnunet:1.6.5-vdev".format(default_registry, default_project), name="nnunet", parallel_id=parallel_id, image_pull_secrets=["registry-secret"], volumes=volumes, volume_mounts=volume_mounts, execution_timeout=execution_timeout, ram_mem_mb=None, ram_mem_mb_lmt=None, pod_resources=pod_resources, training_operator=training_operator, gpu_mem_mb=gpu_mem_mb, env_vars=env_vars, *args, **kwargs ) diff --git a/workflows/airflow-components/dags/nnunet/getTasks.py b/workflows/airflow-components/dags/nnunet/getTasks.py new file mode 100644 index 00000000..bae18d7d --- /dev/null +++ b/workflows/airflow-components/dags/nnunet/getTasks.py @@ -0,0 +1,81 @@ +import json +import os +from glob import glob +from os.path import join, basename, dirname, normpath, exists + + +def get_dataset_json(model_path, installed_task): + dataset_json_path = join(model_path, installed_task, "**", "dataset.json") + dataset_json_path = glob(dataset_json_path, recursive=True) + if len(dataset_json_path) > 0 and exists(dataset_json_path[-1]): + dataset_json_path = dataset_json_path[-1] + print(f"Found dataset.json at {dataset_json_path[-1]}") + with open(dataset_json_path) as f: + dataset_json = json.load(f) + else: + dataset_json = {} + + targets = [] + if "labels" in dataset_json: + for key, label in dataset_json["labels"].items(): + if key == "0" and label == "Clear Label": + continue + targets.append(label) + else: + targets.append("N/A") + dataset_json["targets"] = targets + + input_modalty_list = [] + if "modality" in dataset_json: + for key, input_modalty in dataset_json["modality"].items(): + input_modalty_list.append(input_modalty) + else: + input_modalty_list.append("N/A") + dataset_json["input"] = input_modalty_list + + return dataset_json + + +def get_available_pretrained_tasks(af_home_path): + tasks_json_path = join(af_home_path, "dags", "nnunet", "nnunet_tasks.json") + with open(tasks_json_path) as f: + tasks = json.load(f) + available_pretrained_task_names = [*{k: v for (k, v) in tasks.items() if "supported" in tasks[k] and tasks[k]["supported"]}] + return tasks, available_pretrained_task_names + + +def get_installed_tasks(af_home_path): + installed_tasks = {} + installed_models_path = join(af_home_path, "models", "nnUNet") + installed_models = [basename(normpath(f.path)) for f in os.scandir(installed_models_path) if f.is_dir() and "ensembles" not in f.name] + for installed_model in installed_models: + model_path = join(installed_models_path, installed_model) + installed_tasks_dirs = [basename(normpath(f.path)) for f in os.scandir(model_path) if f.is_dir()] + for installed_task in installed_tasks_dirs: + if installed_task not in installed_tasks: + dataset_json = get_dataset_json(model_path=model_path, installed_task=installed_task) + installed_tasks[installed_task] = { + "description": dataset_json["description"] if "description" in dataset_json else "N/A", + "model": [], + "input-mode": dataset_json["input-mode"] if "input-mode" in dataset_json else "all", + "input": dataset_json["input"], + "body_part": dataset_json["description"] if "description" in dataset_json else "N/A", + "targets": dataset_json["targets"], + "supported": True, + "info": dataset_json["info"] if "info" in dataset_json else "N/A", + "url": dataset_json["url"] if "url" in dataset_json else "N/A", + "task_url": dataset_json["task_url"] if "task_url" in dataset_json else "N/A" + } + if installed_model not in installed_tasks[installed_task]["model"]: + installed_tasks[installed_task]["model"].append(installed_model) + installed_tasks[installed_task]["model"].sort() + return installed_tasks + +def get_tasks(): + af_home_path = "/root/airflow" + tasks, available_pretrained_task_names = get_available_pretrained_tasks(af_home_path=af_home_path) + installed_tasks = get_installed_tasks(af_home_path=af_home_path) + all_selectable_tasks = installed_tasks.copy() + all_selectable_tasks.update(tasks) + + return available_pretrained_task_names, installed_tasks, all_selectable_tasks diff --git a/workflows/airflow-components/plugins/kaapana/operators/Bin2DcmOperator.py b/workflows/airflow-components/plugins/kaapana/operators/Bin2DcmOperator.py index e6639413..bf4201df 100644 --- a/workflows/airflow-components/plugins/kaapana/operators/Bin2DcmOperator.py +++ b/workflows/airflow-components/plugins/kaapana/operators/Bin2DcmOperator.py @@ -1,48 +1,55 @@ import os import pydicom from datetime import timedelta from kaapana.kubetools.volume_mount import VolumeMount from kaapana.kubetools.volume import Volume from kaapana.kubetools.resources import Resources as PodResources from kaapana.operators.KaapanaBaseOperator import KaapanaBaseOperator, default_registry, default_project + class Bin2DcmOperator(KaapanaBaseOperator): execution_timeout = timedelta(minutes=10) def __init__(self, dag, file_extensions="*.zip", size_limit=100, - study_description="Kaapana Bin2Dcm", patient_id="", + manufacturer="KAAPANA", + manufacturer_model="bin2dcm", + study_description=None, + series_description=None, study_id="bin2dcm", study_uid=pydicom.uid.generate_uid(), name="bin2dcm", env_vars={}, execution_timeout=execution_timeout, *args, **kwargs ): envs = { "EXTENSIONS": file_extensions, "SIZE_LIMIT_MB": str(size_limit), + "STUDY_ID": str(study_id), "STUDY_UID": str(study_uid), "STUDY_DESCRIPTION": str(study_description), + "SERIES_DESCRIPTION": str(series_description), "PATIENT_ID": str(patient_id), - "STUDY_ID": str(study_id) + "MANUFACTURER": str(manufacturer), + "MANUFACTURER_MODEL": str(manufacturer_model) } env_vars.update(envs) super().__init__( dag=dag, image="{}{}/bin2dcm:3.6.4-vdev".format(default_registry, default_project), name=name, image_pull_secrets=["registry-secret"], execution_timeout=execution_timeout, keep_parallel_id=False, env_vars=env_vars, ram_mem_mb=5000, *args, **kwargs ) diff --git a/workflows/dag-installer/nnunet/Dockerfile.shapemodel b/workflows/dag-installer/nnunet/Dockerfile.shapemodel index aac2dd44..df374dd5 100644 --- a/workflows/dag-installer/nnunet/Dockerfile.shapemodel +++ b/workflows/dag-installer/nnunet/Dockerfile.shapemodel @@ -1,9 +1,11 @@ FROM local-only/dag-installer:0.1.0 LABEL IMAGE="dag-nnunet" LABEL VERSION="1.6.5-vdev" LABEL CI_IGNORE="False" COPY dags/nnunet /tmp/dags/nnunet +COPY dags/dag_nnunet_model_install.py /tmp/dags/ +COPY dags/dag_nnunet_model_uninstall.py /tmp/dags/ COPY dags/dag_nnunet_inference.py /tmp/dags/ COPY dags/dag_nnunet_training.py /tmp/dags/ diff --git a/workflows/processing-container/dcmqi/Dockerfile b/workflows/processing-container/dcmqi/Dockerfile index 09f765e3..74514d34 100644 --- a/workflows/processing-container/dcmqi/Dockerfile +++ b/workflows/processing-container/dcmqi/Dockerfile @@ -1,25 +1,25 @@ FROM python:3 LABEL IMAGE="dcmqi" LABEL VERSION="v1.2.3-vdev" LABEL CI_IGNORE="False" # set work directory WORKDIR /dcmqi COPY files/requirements.txt ./ RUN pip3 install -r ./requirements.txt #Release 1.0.4 RUN curl -L -O https://github.com/QIICR/dcmqi/releases/download/v1.2.3/dcmqi-1.2.3-linux.tar.gz RUN tar xzvf dcmqi-1.2.3-linux.tar.gz #COPY files/create_segmentation_json.py . -COPY files/code_lookup_table.csv . +COPY files/code_lookup_table.json . COPY files/itkimage2segimage.py . COPY files/segimage2itkimage.py . COPY files/tid1500writer.py . COPY files/convert.sh . RUN chmod +x convert.sh ENTRYPOINT ["/bin/bash", "./convert.sh"] \ No newline at end of file diff --git a/workflows/processing-container/dcmqi/files/code_lookup_table.csv b/workflows/processing-container/dcmqi/files/code_lookup_table.csv index dad223a5..de842042 100644 --- a/workflows/processing-container/dcmqi/files/code_lookup_table.csv +++ b/workflows/processing-container/dcmqi/files/code_lookup_table.csv @@ -1,398 +1,452 @@ Coding Scheme Designator;Code Value;Code Meaning;Body Part Examined;SNOMED-RT ID (Retired);FMA Code Value;UMLS Concept UniqueID SCT;818981001;Abdomen;ABDOMEN;;; SCT;818982008;Abdomen and Pelvis;ABDOMENPELVIS;;; SCT;7832008;Abdominal aorta;ABDOMINALAORTA;T-42500;; SCT;85856004;Acromioclavicular joint;ACJOINT;T-15420;; SCT;23451007;Adrenal gland;ADRENAL;T-B3000;; SCT;77012006;Amniotic fluid;AMNIOTICFLUID;T-F1320;; SCT;70258002;Ankle joint;ANKLE;T-15750;; SCT;128585006;Anomalous pulmonary vein;;T-48503;; SCT;128553008;Antecubital vein;ANTECUBITALV;T-49215;; SCT;194996006;Anterior cardiac vein;ANTCARDIACV;T-48403;; SCT;60176003;Anterior cerebral artery;ACA;T-45540;50028; SCT;8012006;Anterior communicating artery;ANTCOMMA;T-45530;; SCT;17388009;Anterior spinal artery;ANTSPINALA;T-45730;; SCT;68053000;Anterior tibial artery;ANTTIBIALA;T-47700;; SCT;53505006;Anus;;T-59900;; SCT;110612005;Anus, rectum and sigmoid colon;ANUSRECTUMSIGMD;T-59490;; SCT;15825003;Aorta;AORTA;T-42000;; SCT;57034009;Aortic arch;AORTICARCH;T-42300;; SCT;128551005;Aortic fistula;;D3-81922;; SCT;128564006;Apex of left ventricle;;T-32602;; SCT;86598002;Apex of Lung;;T-280A0;; SCT;128565007;Apex of right ventricle;;T-32502;; SCT;66754008;Appendix;APPENDIX;T-59200;; SCT;51114001;Artery;ARTERY;T-41000;; SCT;54247002;Ascending aorta;ASCAORTA;T-42100;; SCT;9040008;Ascending colon;ASCENDINGCOLON;T-59420;; SCT;59652004;Atrium;;T-32100;; SCT;91470000;Axilla;AXILLA;T-D8104;; SCT;67937003;Axillary Artery;AXILLARYA;T-47100;; SCT;68705008;Axillary vein;AXILLARYV;T-49110;; SCT;72107004;Azygos vein;AZYGOSVEIN;T-48340;; SCT;77568009;Back;BACK;T-D2100;; SCT;128981007;Baffle;;A-00203;; SCT;59011009;Basilar artery;BASILARA;T-45800;; SCT;28273000;Bile duct;BILEDUCT;T-60610;; SCT;89837001;Bladder;BLADDER;T-74000;; SCT;110837003;Bladder and urethra;BLADDERURETHRA;T-DD123;; SCT;91830000;Body conduit;;T-D00AB;; SCT;72001000;Bone of lower limb;;T-12700;; SCT;371195002;Bone of upper limb;;T-D0821;; SCT;128548003;Boyd's perforating vein;;T-49424;; SCT;17137000;Brachial artery;BRACHIALA;T-47160;; SCT;20115005;Brachial vein;BRACHIALV;T-49350;; SCT;12738006;Brain;BRAIN;T-A0100;; SCT;76752008;Breast;BREAST;T-04000;; SCT;34411009;Broad ligament;;T-D6500;; SCT;955009;Bronchus;BRONCHUS;T-26000;; SCT;60819002;Buccal region of face;;T-D1206;; SCT;46862004;Buttock;BUTTOCK;T-D2600;; SCT;80144004;Calcaneus;CALCANEUS;T-12770;; SCT;53840002;Calf of leg;CALF;T-D9440;; SCT;2334006;Calyx;;T-72100;; SCT;69105007;Carotid Artery;CAROTID;T-45010;; SCT;21479005;Carotid bulb;BULB;T-45170;50094; SCT;57850000;Celiac artery;CELIACA;T-46400;50737; SCT;20699002;Cephalic vein;CEPHALICV;T-49240;; SCT;113305005;Cerebellum;CEREBELLUM;T-A6000;; SCT;88556005;Cerebral artery;CEREBRALA;T-45510;; SCT;372073000;Cerebral hemisphere;CEREBHEMISPHERE;T-A010F;; SCT;122494005;Cervical spine;CSPINE;T-11501;; SCT;297171002;Cervico-thoracic spine;CTSPINE;T-D00F7;; SCT;71252005;Cervix;CERVIX;T-83200;; SCT;60819002;Cheek;CHEEK;T-D1206;; SCT;43799004;Chest;CHEST;;; SCT;416775004;Chest, Abdomen and Pelvis;CHESTABDPELVIS;R-FAB56;; SCT;416550000;Chest and Abdomen;CHESTABDOMEN;R-FAB55;; SCT;80621003;Choroid plexus;CHOROIDPLEXUS;T-A1900;61934; SCT;11279006;Circle of Willis;CIRCLEOFWILLIS;T-45520;; SCT;51299004;Clavicle;CLAVICLE;T-12310;; SCT;64688005;Coccyx;COCCYX;T-11BF0;; SCT;71854001;Colon;COLON;T-59300;; SCT;253276007;Common atrium;;D4-31005;; SCT;79741001;Common bile duct;COMMONBILEDUCT;T-64500;;C0009437 SCT;32062004;Common carotid artery;CCA;T-45100;; SCT;181347005;Common femoral artery;CFA;T-47402;323778; SCT;397363009;Common femoral vein;CFV;G-035B;323829; SCT;73634005;Common iliac artery;COMILIACA;T-46710;; SCT;46027005;Common iliac vein;COMILIACV;T-48920;; SCT;45503006;Common ventricle;;D4-31120;; SCT;128555001;Congenital coronary artery fistula to left atrium;;D4-32504;; SCT;128556000;Congenital coronary artery fistula to left ventricle;;D4-32506;; SCT;128557009;Congenital coronary artery fistula to right atrium;;D4-32509;; SCT;128558004;Congenital coronary artery fistula to right ventricle;;D4-32510;; SCT;111289009;Pulmonary arteriovenous fistula;;D3-40208;; SCT;28726007;Cornea;CORNEA;T-AA200;; SCT;41801008;Coronary artery;CORONARYARTERY;T-43000;; SCT;90219004;Coronary sinus;CORONARYSINUS;T-48410;; SCT;128320002;Cranial venous system;;T-A0191;; SCT;32672002;Descending aorta;DESCAORTA;T-42400;; SCT;32622004;Descending colon;DESCENDINGCOLON;T-59460;; SCT;128554002;Dodd's perforating vein;;T-49429;; SCT;38848004;Duodenum;DUODENUM;T-58200;; SCT;117590005;Ear;EAR;T-AB001;; SCT;16953009;Elbow joint;ELBOW;T-15430;; SCT;51114001;Endo-arterial;ENDOARTERIAL;T-41000;; SCT;80891009;Endo-cardiac;ENDOCARDIAC;T-32000;; SCT;32849002;Endo-esophageal;ENDOESOPHAGEAL;T-56000;; SCT;2739003;Endometrium;ENDOMETRIUM;T-83400;; SCT;53342003;Endo-nasal;ENDONASAL;T-21300;; SCT;18962004;Endo-nasopharyngeal;ENDONASOPHARYNYX;T-23050;; SCT;34402009;Endo-rectal;ENDORECTAL;T-59600;; SCT;64033007;Endo-renal;ENDORENAL;T-71000;; SCT;87953007;Endo-ureteric;ENDOURETERIC;T-73000;; SCT;13648007;Endo-urethral;ENDOURETHRAL;T-75000;; SCT;76784001;Endo-vaginal;ENDOVAGINAL;T-82000;; SCT;59820001;Endo-vascular;ENDOVASCULAR;T-40000;; SCT;29092000;Endo-venous;ENDOVENOUS;T-48000;; SCT;48367006;Endo-vesical;ENDOVESICAL;T-74250;; SCT;38266002;Entire body;WHOLEBODY;T-D0010;; SCT;87644002;Epididymis;EPIDIDYMIS;T-95000;18255; SCT;27947004;Epigastric region;EPIGASTRIC;T-D4200;; SCT;32849002;Esophagus;ESOPHAGUS;T-56000;; SCT;110861005;Esophagus, stomach and duodenum;;T-DD163;; SCT;84301002;External auditory canal;EAC;T-AB200;; SCT;22286001;External carotid artery;ECA;T-45200;; SCT;113269004;External iliac artery;EXTILIACA;T-46910;; SCT;63507001;External iliac vein;EXTILIACV;T-48930;; SCT;71585003;External jugular vein;EXTJUGV;T-48160;13110;C0226543 SCT;66019005;Extremity;EXTREMITY;T-D0300;; SCT;81745001;Eye;EYE;T-AA000;; SCT;80243003;Eyelid;EYELID;T-AA810;; SCT;371398005;Eye region;;T-D0801;; SCT;89545001;Face;FACE;T-D1200;; SCT;23074001;Facial artery;FACIALA;T-45240;; SCT;91397008;Facial bones;;T-11196;; SCT;7657000;Femoral artery;FEMORALA;T-47400;; SCT;83419000;Femoral vein;FEMORALV;T-49410;; SCT;71341001;Femur;FEMUR;T-12710;; ;;Fetal arm;FETALARM;;; ;;Fetal digit;FETALDIGIT;;; ;;Fetal heart;FETALHEART;;63931; ;;Fetal leg;FETALLEG;;; ;;Fetal pole;FETALPOLE;;; SCT;87342007;Fibula;FIBULA;T-12750;; SCT;7569003;Finger;FINGER;T-D8800;; SCT;58602004;Flank;FLANK;T-D2310;; SCT;79361005;Fontanel of skull;FONTANEL;T-15200;; SCT;56459004;Foot;FOOT;T-D9700;; SCT;14975008;Forearm;FOREARM;T-D8500;; SCT;35918002;Fourth ventricle;4THVENTRICLE;T-A1820;; SCT;28231008;Gallbladder;GALLBLADDER;T-63000;; SCT;110568007;Gastric vein;GASTRICV;T-48820;; SCT;128559007;Genicular artery;GENICULARA;T-47490;; SCT;300571009;Gestational sac;GESTSAC;F-03FC9;; SCT;46862004;Gluteal region;GLUTEAL;T-D2600;; SCT;5928000;Great cardiac vein;;T-48420;; SCT;60734001;Great saphenous vein;GSV;T-49530;21376; SCT;85562004;Hand;HAND;T-D8700;; SCT;69536005;Head;HEAD;T-D1100;; SCT;774007;Head and Neck;HEADNECK;T-D1000;; SCT;80891009;Heart;HEART;T-32000;; SCT;76015000;Hepatic artery;HEPATICA;T-46420;; SCT;8993003;Hepatic vein;HEPATICV;T-48720;; SCT;24136001;Hip joint;HIP;T-15710;; SCT;85050009;Humerus;HUMERUS;T-12410;; SCT;128560002;Hunterian perforating vein;;T-4942A;; SCT;11708003;Hypogastric region;HYPOGASTRIC;T-D4240;; SCT;81502006;Hypopharynx;HYPOPHARYNX;T-55300;; SCT;34516001;Ileum;ILEUM;T-58600;; SCT;299716001;Iliac and/or femoral artery;;T-41068;; SCT;10293006;Iliac artery;ILIACA;T-46700;; SCT;244411005;Iliac vein;ILIACV;T-4940E;; SCT;22356005;Ilium;ILIUM;T-12340;; SCT;195416006;Inferior cardiac vein;;T-484A4;; SCT;51249003;Inferior left pulmonary vein;;T-48540;; SCT;33795007;Inferior mesenteric artery;INFMESA;T-46520;; SCT;113273001;Inferior right pulmonary vein;;T-48520;; SCT;64131007;Inferior vena cava;INFVENACAVA;T-48710;; SCT;26893007;Inguinal region;INGUINAL;T-D7000;; SCT;12691009;Innominate artery;INNOMINATEA;T-46010;; SCT;8887007;Innominate vein;INNOMINATEV;T-48620;; SCT;361078006;Internal Auditory Canal;IAC;T-AB959;; SCT;86117002;Internal carotid artery;ICA;T-45300;; SCT;90024005;Internal iliac artery;INTILIACA;T-46740;; SCT;12123001;Internal jugular vein;INTJUGULARV;T-48170;; SCT;69327007;Internal mammary artery;INTMAMMARYA;T-46200;; SCT;818987002;Intra-abdominopelvic;;;; SCT;131183008;Intra-articular;;G-A15A;; SCT;1101003;Intracranial;INTRACRANIAL;T-D1400;; SCT;32849002;Intra-esophageal;;T-56000;; SCT;816989007;Intra-pelvic;;;; SCT;43799004;Intra-thoracic;;;; SCT;661005;Jaw region;JAW;T-D1213;; SCT;21306003;Jejunum;JEJUNUM;T-58400;; SCT;39352004;Joint;JOINT;T-15001;; SCT;128563000;Juxtaposed atrial appendage;;D4-31052;; SCT;64033007;Kidney;KIDNEY;T-71000;; SCT;72696002;Knee;KNEE;T-D9200;; SCT;59749000;Lacrimal artery;LACRIMALA;T-45410;; SCT;128979005;Lacrimal artery of right eye;;T-45416;; SCT;14742008;Large intestine;LARGEINTESTINE;T-59000;; SCT;4596009;Larynx;LARYNX;T-24100;; SCT;66720007;Lateral Ventricle;LATVENTRICLE;T-A1650;78448; SCT;82471001;Left atrium;LATRIUM;T-32300;; SCT;33626005;Left auricular appendage;;T-32310;; SCT;113270003;Left femoral artery;LFEMORALA;T-47420;; SCT;273202007;Left hepatic vein;LHEPATICV;T-48727;14339; SCT;133945003;Left hypochondriac region;LHYPOCHONDRIAC;T-D4211;; SCT;85119005;Left inguinal region;LINGUINAL;T-D7020;; SCT;68505006;Left lower quadrant of abdomen;LLQ;T-D4140;; SCT;133943005;Left lumbar region;LLUMBAR;T-D2340;; SCT;70253006;Left portal vein;LPORTALV;T-48814;15415; SCT;50408007;Left pulmonary artery;LPULMONARYA;T-44400;; SCT;86367003;Left upper quadrant of abdomen;LUQ;T-D4130;; SCT;87878005;Left ventricle;LVENTRICLE;T-32600;; SCT;70238003;Left ventricle inflow;;T-32640;; SCT;13418002;Left ventricle outflow tract;;T-32650;; SCT;113264009;Lingual artery;LINGUALA;T-45230;; SCT;10200004;Liver;LIVER;T-62000;; SCT;19100000;Lower inner quadrant of breast;;T-04003;; SCT;30021000;Lower leg;LEG;T-D9400;; SCT;61685007;Lower limb;;T-D9000;; SCT;33564002;Lower outer quadrant of breast;;T-04005;; SCT;34635009;Lumbar artery;LUMBARA;T-46960;; SCT;52612000;Lumbar region;LUMBAR;T-D2300;; SCT;122496007;Lumbar spine;LSPINE;T-11503;; SCT;297173004;Lumbo-sacral spine;LSSPINE;T-D00F9;; SCT;91747007;Lumen of blood vessel;LUMEN;T-40230;; SCT;39607008;Lung;LUNG;T-28000;; SCT;91609006;Mandible;JAW;T-11180;; SCT;59066005;Mastoid bone;MASTOID;T-11133;; SCT;70925003;Maxilla;MAXILLA;T-11170;; SCT;72410000;Mediastinum;MEDIASTINUM;T-D3300;; SCT;86570000;Mesenteric artery;MESENTRICA;T-46500;; SCT;128583004;Mesenteric vein;MESENTRICV;T-4884A;; SCT;17232002;Middle cerebral artery;MCA;T-45600;50079; SCT;273099000;Middle hepatic vein;MIDHEPATICV;T-48726;14340; SCT;243977002;Morisons pouch;MORISONSPOUCH;T-D4434;; SCT;123851003;Mouth;MOUTH;T-D0662;; SCT;102292000;Muscle of lower limb;;T-14668;; SCT;30608006;Muscle of upper limb;;T-13600;; SCT;74386004;Nasal bone;;T-11149;; SCT;360955006;Nasopharynx;NASOPHARYNX;T-2300C;; SCT;45048000;Neck;NECK;T-D1600;; SCT;416319003;Neck, Chest, Abdomen and Pelvis;NECKCHESTABDPELV;R-FAB54;; SCT;416152001;Neck, Chest and Abdomen;NECKCHESTABDOMEN;R-FAB53;; SCT;417437006;Neck and Chest;NECKCHEST;R-FAB52;; SCT;45206002;Nose;NOSE;T-21000;; SCT;31145008;Occipital artery;OCCPITALA;T-45250;; SCT;32114007;Occipital vein;OCCIPTALV;T-48214;; SCT;113346000;Omental bursa;;T-D4450;; SCT;27398004;Omentum;;T-D4600;; SCT;53549008;Ophthalmic artery;OPHTHALMICA;T-45400;; SCT;55024004;Optic canal;OPTICCANAL;T-11102;; SCT;363654007;Orbital structure;ORBIT;T-D14AE;; SCT;15497006;Ovary;OVARY;T-87000;; SCT;15776009;Pancreas;PANCREAS;T-65000;; SCT;69930009;Pancreatic duct;PANCREATICDUCT;T-65010;; SCT;110621006;Pancreatic duct and bile duct systems;;T-65600;; SCT;2095001;Paranasal sinus;;T-22000;; SCT;91691001;Parasternal;PARASTERNAL;T-D3136;; SCT;111002;Parathyroid;PARATHYROID;T-B7000;; SCT;45289007;Parotid gland;PAROTID;T-61100;; SCT;64234005;Patella;PATELLA;T-12730;; SCT;83330001;Patent ductus arteriosus;;D4-32012;; SCT;816092008;Pelvis;PELVIS;;; SCT;416631005;Pelvis and lower extremities;;R-FAB58;; SCT;282044005;Penile artery;PENILEA;T-46807;66318; SCT;18911002;Penis;PENIS;T-91000;; SCT;38864007;Perineum;PERINEUM;T-D2700;; SCT;8821006;Peroneal artery;PERONEALA;T-47630;; DCM;113681;Phantom;;;; SCT;54066008;Pharynx;PHARYNX;T-55000;; SCT;312535008;Pharynx and larynx;PHARYNXLARYNX;T-20101;; SCT;78067005;Placenta;PLACENTA;T-F1100;; SCT;43899006;Popliteal artery;POPLITEALA;T-47500;; SCT;32361000;Popliteal fossa;POPLITEALFOSSA;T-D9310;; SCT;56849005;Popliteal vein;POPLITEALV;T-49650;44327; SCT;32764006;Portal vein;PORTALV;T-48810;66645; SCT;70382005;Posterior cerebral artery;PCA;T-45900;50583; SCT;43119007;Posterior communicating artery;POSCOMMA;T-45320;; SCT;128569001;Posterior medial tributary;;T-49535;; SCT;13363002;Posterior tibial artery;POSTIBIALA;T-47600;; SCT;14944004;Primitive aorta;;T-F7001;; SCT;91707000;Primitive pulmonary artery;;T-F7040;; SCT;31677005;Profunda femoris artery;PROFFEMA;T-47440;20741; SCT;23438002;Profunda femoris vein;PROFFEMV;T-49660;51041; SCT;41216001;Prostate;PROSTATE;T-92000;; SCT;81040000;Pulmonary artery;PULMONARYA;T-44000;; SCT;128584005;Pulmonary artery conduit;;D4-33142;; SCT;128586007;Pulmonary chamber of cor triatriatum;;T-32190;; SCT;122972007;Pulmonary vein;PULMONARYV;T-48581;; SCT;128566008;Pulmonary vein confluence;;D4-33512;; SCT;128567004;Pulmonary venous atrium;;D4-33514;; SCT;45631007;Radial artery;RADIALA;T-47300;; SCT;62413002;Radius;RADIUS;T-12420;; SCT;110535000;Radius and ulna;RADIUSULNA;T-12403;; SCT;53843000;Rectouterine pouch;CULDESAC;T-D6407;; SCT;34402009;Rectum;RECTUM;T-59600;; SCT;2841007;Renal artery;RENALA;T-46600;; SCT;25990002;Renal pelvis;;T-72000;; SCT;56400007;Renal vein;RENALV;T-48740;; SCT;82849001;Retroperitoneum;RETROPERITONEUM;T-D4900;; SCT;113197003;Rib;RIB;T-11300;; SCT;73829009;Right atrium;RATRIUM;T-32200;; SCT;68300000;Right auricular appendage;;T-32210;; SCT;69833005;Right femoral artery;RFEMORALA;T-47410;; SCT;272998002;Right hepatic vein;RHEPATICV;T-48725;14338; SCT;133946002;Right hypochondriac region;RHYPOCHONDRIAC;T-D4212;; SCT;37117007;Right inguinal region;RINGUINAL;T-D7010;; SCT;48544008;Right lower quadrant of abdomen;RLQ;T-D4120;; SCT;133944004;Right lumbar region;RLUMBAR;T-D2342;; SCT;73931004;Right portal vein;RPORTALV;T-48813;15414; SCT;78480002;Right pulmonary artery;RPULMONARYA;T-44200;; SCT;50519007;Right upper quadrant of abdomen;RUQ;T-D4110;; SCT;53085002;Right ventricle;RVENTRICLE;T-32500;; SCT;8017000;Right ventricle inflow;;T-32540;; SCT;44627009;Right ventricle outflow tract;;T-32550;; SCT;39723000;Sacroiliac joint;SIJOINT;T-15680;; SCT;54735007;Sacrum;SSPINE;T-11AD0;; SCT;128587003;Saphenofemoral junction;SFJ;T-D930A;; SCT;362072009;Saphenous vein;SAPHENOUSV;T-4940B;;C0036186 SCT;41695006;Scalp;SCALP;T-D1160;; SCT;79601000;Scapula;SCAPULA;T-12280;; SCT;18619003;Sclera;SCLERA;T-AA110;; SCT;20233005;Scrotum;SCROTUM;T-98000;; SCT;42575006;Sella turcica;SELLA;T-D1460;; SCT;64739004;Seminal vesicle;SEMVESICLE;T-93000;19386; SCT;58742003;Sesamoid bones of foot;SESAMOID;T-12980;; SCT;16982005;Shoulder;SHOULDER;T-D2220;; SCT;60184004;Sigmoid colon;SIGMOID;T-59470;; SCT;89546000;Skull;SKULL;T-11100;; SCT;30315005;Small intestine;SMALLINTESTINE;T-58000;; SCT;2748008;Spinal cord;SPINALCORD;T-A7010;; SCT;421060004;Spine;SPINE;T-D04FF;; SCT;78961009;Spleen;SPLEEN;T-C3000;; SCT;22083002;Splenic artery;SPLENICA;T-46460;; SCT;35819009;Splenic vein;SPLENICV;T-48890;; SCT;7844006;Sternoclavicular joint;SCJOINT;T-15610;; SCT;56873002;Sternum;STERNUM;T-11210;; SCT;69695003;Stomach;STOMACH;T-57000;; SCT;36765005;Subclavian artery;SUBCLAVIANA;T-46100;; SCT;9454009;Subclavian vein;SUBCLAVIANV;T-48330;; SCT;19695001;Subcostal;SUBCOSTAL;T-D4210;; SCT;5713008;Submandibular area;;T-D1603;; SCT;54019009;Submandibular gland;SUBMANDIBULAR;T-61300;; SCT;170887008;Submental;;T-D161E;; SCT;5076001;Subxiphoid;;T-D3213;; SCT;181349008;Superficial femoral artery;SFA;T-47403;323777; SCT;397364003;Superficial femoral vein;SFV;G-035A;; SCT;15672000;Superficial temporal artery;;T-45270;; SCT;43863001;Superior left pulmonary vein;LSUPPULMONARYV;T-48530;; SCT;42258001;Superior mesenteric artery;SMA;T-46510;; SCT;8629005;Superior right pulmonary vein;RSUPPULMONARYV;T-48510;; SCT;72021004;Superior thyroid artery;SUPTHYROIDA;T-45210;; SCT;48345005;Superior vena cava;SVC;T-48610;; SCT;77621008;Supraclavicular region of neck;SUPRACLAVICULAR;T-D1620;; SCT;11708003;Suprapubic region;SUPRAPUBIC;T-D4240;; SCT;26493002;Suprasternal notch;;T-11218;; SCT;128589000;Systemic collateral artery to lung;;T-44007;; SCT;128568009;Systemic venous atrium;;D4-33516;; SCT;27949001;Tarsal joint;;T-15770;; SCT;53620006;Temporomandibular joint;TMJ;T-15290;; SCT;40689003;Testis;TESTIS;T-94000;; SCT;42695009;Thalamus;THALAMUS;T-A4000;62007; SCT;68367000;Thigh;THIGH;T-D9100;; SCT;49841001;Third ventricle;3RDVENTRICLE;T-A1740;; SCT;113262008;Thoracic aorta;THORACICAORTA;T-42070;; SCT;122495006;Thoracic spine;TSPINE;T-11502;; SCT;297172009;Thoraco-lumbar spine;TLSPINE;T-D00F8;; SCT;43799004;Thorax;THORAX;;; SCT;76505004;Thumb;THUMB;T-D8810;; SCT;9875009;Thymus;THYMUS;T-C8000;; SCT;69748006;Thyroid;THYROID;T-B6000;; SCT;12611008;Tibia;TIBIA;T-12740;; SCT;110536004;Tibia and fibula;TIBIAFIBULA;T-12701;; SCT;29707007;Toe;TOE;T-D9800;; SCT;21974007;Tongue;TONGUE;T-53000;; SCT;44567001;Trachea;TRACHEA;T-25000;; SCT;110726009;Trachea and bronchus;TRACHEABRONCHUS;T-DD006;; SCT;485005;Transverse colon;TRANSVERSECOLON;T-59440;; SCT;61959006;Truncus arteriosus communis;;D4-31400;; SCT;57850000;Truncus coeliacus;;T-46400;; SCT;23416004;Ulna;ULNA;T-12430;; SCT;44984001;Ulnar artery;ULNARA;T-47200;; SCT;50536004;Umbilical artery;UMBILICALA;T-F1810;; SCT;90290004;Umbilical region;UMBILICAL;T-D4230;; SCT;284639000;Umbilical vein;UMBILICALV;T-48832;; SCT;40983000;Upper arm;ARM;T-D8200;; SCT;77831004;Upper inner quadrant of breast;;T-04002;; SCT;53120007;Upper limb;;T-D8000;; SCT;76365002;Upper outer quadrant of breast;;T-04004;; SCT;431491007;Upper urinary tract;UPRURINARYTRACT;T-7000B;; SCT;87953007;Ureter;URETER;T-73000;; SCT;13648007;Urethra;URETHRA;T-75000;; SCT;35039007;Uterus;UTERUS;T-83000;; SCT;110639002;Uterus and fallopian tubes;;T-88920;; SCT;76784001;Vagina;VAGINA;T-82000;; SCT;118375008;Vascular graft;;A-04140;; SCT;29092000;Vein;VEIN;T-48000;; SCT;34340008;Venous network;;T-48003;; SCT;21814001;Ventricle;;T-32400;; SCT;85234005;Vertebral artery;VERTEBRALA;T-45700;; SCT;110517009;Vertebral column and cranium;;T-11011;; SCT;45292006;Vulva;VULVA;T-81000;; SCT;74670003;Wrist joint;WRIST;T-15460;; -SCT;13881006;Zygoma;ZYGOMA;T-11166;; \ No newline at end of file +SCT;13881006;Zygoma;ZYGOMA;T-11166;; +RACOON;1.3.6.1.4.1.41130.1.644.9.1;Lung ULL;upper lobe left;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.1;Lung ULL;Left upper lobe;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.2;Lung LLL;lower lobe left;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.2;Lung LLL;Left lower lobe;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.3;Lung ULR;upper lobe right;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.3;Lung ULR;Right upper lobe;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.4;Lung MLR;middle lobe right;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.4;Lung MLR;Right middle lobe;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.5;Lung LLR;lower lobe right;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.5;Lung LLR;Right lower lobe;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.6;Lung ALL;accessory lobe left;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.6;Lung ALL;Left accessory lobe;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.7;Lung ALR;accessory lobe right, auch z.B. Lobus V. azygos;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.7;Lung ALR;Right accessory lobe, auch z.B. Lobus V. azygos;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.8;Lung Left;left lung as whole;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.8;Lung Left;lung as whole left;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.9;Lung Right;right lung as whole;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.9;Lung Right;Lung as whole right;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.10;Trachea and mediastinal Bronchi;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.11;Intrapulmonary Bronchi;Luftwege;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.12;Vessels;Gefäße;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.13;Mediastinum/Hilus;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.21;Collapsed lung;Ate- und Dystelektasen durch Bronchusverschluss und Kompression;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.22;Cons Non-Tumor-Associated;Pneumonie, Granulome;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.23;Cons Nec Non-Tumor-Associated;Pneumonische Einschmelzung;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.24;Cons Tumor-Associated;Raumforderungen, Metastasen, Noduli;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.25;Cons Nec Tumor-Associated;Tumornekroseareale;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.26;Cons undefined dignity;Konsolidierung / Herd ohne Dignitätsaussage;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.27;Parenchymal calcification;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.28;GGO;Milchglasareal;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.29;Emphysema;Emphysem inkl. Bullae;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.30;Reticulation interlobular;"Zunehmender Fibrose-Schweregrad; interlobulär auch interstitielles Ödem";;; +RACOON;1.3.6.1.4.1.41130.1.644.9.31;Reticulation intralobular;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.32;Reticulation w/ architectural destruction;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.33;Reticulation Honey-combing;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.34;Cavity thick-walled;Kavernen, Lungenabszesse, Aspergillome;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.35;Cavity thin-walled;Pneumozysten, Pneumatozelen;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.41;Bronchus normal ventilated;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.42;Bronchus normal obstructed;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.43;Bronchus ectatic ventilated;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.44;Bronchus ectatic obstructed;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.45;Bronchus Tree-in-bud;Bronchiolitis-Zeichen;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.51;Pulmonary Embolus;sichtbarer pulmonalarterieller Embolus;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.61;Pleural thickening;Pleuraplaques, Tumor;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.62;Pleural Effusion;Pleuraergüsse;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.63;Pneumothorax;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.71;Pericardial Effusion;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.72;Enlarged LN mediastinal;nur Lymphknoten KAD > 10 mm;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.73;Enlarged LN hilar right;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.73;Right enlarged LN hilar;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.74;Enlarged LN hilar left;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.74;Left enlarged LN hilar;;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.81;Material intrapleural;Fremdmaterial innerhalb der Grenzen der Pleura parietalis;;; +RACOON;1.3.6.1.4.1.41130.1.644.9.82;Material extrapleural;;;; \ No newline at end of file diff --git a/workflows/processing-container/dcmqi/files/code_lookup_table.json b/workflows/processing-container/dcmqi/files/code_lookup_table.json index 32d533ba..54d9b605 100644 --- a/workflows/processing-container/dcmqi/files/code_lookup_table.json +++ b/workflows/processing-container/dcmqi/files/code_lookup_table.json @@ -1,3575 +1,4061 @@ [ - { - "Coding Scheme Designator": "SCT", - "Code Value": 818981001, - "Code Meaning": "Abdomen", - "Body Part Examined": "ABDOMEN", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 818982008, - "Code Meaning": "Abdomen and Pelvis", - "Body Part Examined": "ABDOMENPELVIS", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 7832008, - "Code Meaning": "Abdominal aorta", - "Body Part Examined": "ABDOMINALAORTA", - "SNOMED-RT ID (Retired)": "T-42500", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 85856004, - "Code Meaning": "Acromioclavicular joint", - "Body Part Examined": "ACJOINT", - "SNOMED-RT ID (Retired)": "T-15420", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 23451007, - "Code Meaning": "Adrenal gland", - "Body Part Examined": "ADRENAL", - "SNOMED-RT ID (Retired)": "T-B3000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 77012006, - "Code Meaning": "Amniotic fluid", - "Body Part Examined": "AMNIOTICFLUID", - "SNOMED-RT ID (Retired)": "T-F1320", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 70258002, - "Code Meaning": "Ankle joint", - "Body Part Examined": "ANKLE", - "SNOMED-RT ID (Retired)": "T-15750", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128585006, - "Code Meaning": "Anomalous pulmonary vein", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-48503", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128553008, - "Code Meaning": "Antecubital vein", - "Body Part Examined": "ANTECUBITALV", - "SNOMED-RT ID (Retired)": "T-49215", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 194996006, - "Code Meaning": "Anterior cardiac vein", - "Body Part Examined": "ANTCARDIACV", - "SNOMED-RT ID (Retired)": "T-48403", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 60176003, - "Code Meaning": "Anterior cerebral artery", - "Body Part Examined": "ACA", - "SNOMED-RT ID (Retired)": "T-45540", - "FMA Code Value": 50028, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 8012006, - "Code Meaning": "Anterior communicating artery", - "Body Part Examined": "ANTCOMMA", - "SNOMED-RT ID (Retired)": "T-45530", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 17388009, - "Code Meaning": "Anterior spinal artery", - "Body Part Examined": "ANTSPINALA", - "SNOMED-RT ID (Retired)": "T-45730", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 68053000, - "Code Meaning": "Anterior tibial artery", - "Body Part Examined": "ANTTIBIALA", - "SNOMED-RT ID (Retired)": "T-47700", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 53505006, - "Code Meaning": "Anus", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-59900", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 110612005, - "Code Meaning": "Anus, rectum and sigmoid colon", - "Body Part Examined": "ANUSRECTUMSIGMD", - "SNOMED-RT ID (Retired)": "T-59490", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 15825003, - "Code Meaning": "Aorta", - "Body Part Examined": "AORTA", - "SNOMED-RT ID (Retired)": "T-42000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 57034009, - "Code Meaning": "Aortic arch", - "Body Part Examined": "AORTICARCH", - "SNOMED-RT ID (Retired)": "T-42300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128551005, - "Code Meaning": "Aortic fistula", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D3-81922", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128564006, - "Code Meaning": "Apex of left ventricle", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-32602", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 86598002, - "Code Meaning": "Apex of Lung", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-280A0", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128565007, - "Code Meaning": "Apex of right ventricle", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-32502", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 66754008, - "Code Meaning": "Appendix", - "Body Part Examined": "APPENDIX", - "SNOMED-RT ID (Retired)": "T-59200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 51114001, - "Code Meaning": "Artery", - "Body Part Examined": "ARTERY", - "SNOMED-RT ID (Retired)": "T-41000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 54247002, - "Code Meaning": "Ascending aorta", - "Body Part Examined": "ASCAORTA", - "SNOMED-RT ID (Retired)": "T-42100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 9040008, - "Code Meaning": "Ascending colon", - "Body Part Examined": "ASCENDINGCOLON", - "SNOMED-RT ID (Retired)": "T-59420", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 59652004, - "Code Meaning": "Atrium", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-32100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 91470000, - "Code Meaning": "Axilla", - "Body Part Examined": "AXILLA", - "SNOMED-RT ID (Retired)": "T-D8104", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 67937003, - "Code Meaning": "Axillary Artery", - "Body Part Examined": "AXILLARYA", - "SNOMED-RT ID (Retired)": "T-47100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 68705008, - "Code Meaning": "Axillary vein", - "Body Part Examined": "AXILLARYV", - "SNOMED-RT ID (Retired)": "T-49110", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 72107004, - "Code Meaning": "Azygos vein", - "Body Part Examined": "AZYGOSVEIN", - "SNOMED-RT ID (Retired)": "T-48340", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 77568009, - "Code Meaning": "Back", - "Body Part Examined": "BACK", - "SNOMED-RT ID (Retired)": "T-D2100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128981007, - "Code Meaning": "Baffle", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "A-00203", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 59011009, - "Code Meaning": "Basilar artery", - "Body Part Examined": "BASILARA", - "SNOMED-RT ID (Retired)": "T-45800", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 28273000, - "Code Meaning": "Bile duct", - "Body Part Examined": "BILEDUCT", - "SNOMED-RT ID (Retired)": "T-60610", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 89837001, - "Code Meaning": "Bladder", - "Body Part Examined": "BLADDER", - "SNOMED-RT ID (Retired)": "T-74000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 110837003, - "Code Meaning": "Bladder and urethra", - "Body Part Examined": "BLADDERURETHRA", - "SNOMED-RT ID (Retired)": "T-DD123", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 91830000, - "Code Meaning": "Body conduit", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D00AB", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 72001000, - "Code Meaning": "Bone of lower limb", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-12700", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 371195002, - "Code Meaning": "Bone of upper limb", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D0821", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128548003, - "Code Meaning": "Boyd's perforating vein", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-49424", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 17137000, - "Code Meaning": "Brachial artery", - "Body Part Examined": "BRACHIALA", - "SNOMED-RT ID (Retired)": "T-47160", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 20115005, - "Code Meaning": "Brachial vein", - "Body Part Examined": "BRACHIALV", - "SNOMED-RT ID (Retired)": "T-49350", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 12738006, - "Code Meaning": "Brain", - "Body Part Examined": "BRAIN", - "SNOMED-RT ID (Retired)": "T-A0100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 76752008, - "Code Meaning": "Breast", - "Body Part Examined": "BREAST", - "SNOMED-RT ID (Retired)": "T-04000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 34411009, - "Code Meaning": "Broad ligament", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D6500", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 955009, - "Code Meaning": "Bronchus", - "Body Part Examined": "BRONCHUS", - "SNOMED-RT ID (Retired)": "T-26000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 60819002, - "Code Meaning": "Buccal region of face", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D1206", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 46862004, - "Code Meaning": "Buttock", - "Body Part Examined": "BUTTOCK", - "SNOMED-RT ID (Retired)": "T-D2600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 80144004, - "Code Meaning": "Calcaneus", - "Body Part Examined": "CALCANEUS", - "SNOMED-RT ID (Retired)": "T-12770", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 53840002, - "Code Meaning": "Calf of leg", - "Body Part Examined": "CALF", - "SNOMED-RT ID (Retired)": "T-D9440", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 2334006, - "Code Meaning": "Calyx", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-72100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 69105007, - "Code Meaning": "Carotid Artery", - "Body Part Examined": "CAROTID", - "SNOMED-RT ID (Retired)": "T-45010", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 21479005, - "Code Meaning": "Carotid bulb", - "Body Part Examined": "BULB", - "SNOMED-RT ID (Retired)": "T-45170", - "FMA Code Value": 50094, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 57850000, - "Code Meaning": "Celiac artery", - "Body Part Examined": "CELIACA", - "SNOMED-RT ID (Retired)": "T-46400", - "FMA Code Value": 50737, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 20699002, - "Code Meaning": "Cephalic vein", - "Body Part Examined": "CEPHALICV", - "SNOMED-RT ID (Retired)": "T-49240", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 113305005, - "Code Meaning": "Cerebellum", - "Body Part Examined": "CEREBELLUM", - "SNOMED-RT ID (Retired)": "T-A6000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 88556005, - "Code Meaning": "Cerebral artery", - "Body Part Examined": "CEREBRALA", - "SNOMED-RT ID (Retired)": "T-45510", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 372073000, - "Code Meaning": "Cerebral hemisphere", - "Body Part Examined": "CEREBHEMISPHERE", - "SNOMED-RT ID (Retired)": "T-A010F", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 122494005, - "Code Meaning": "Cervical spine", - "Body Part Examined": "CSPINE", - "SNOMED-RT ID (Retired)": "T-11501", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 297171002, - "Code Meaning": "Cervico-thoracic spine", - "Body Part Examined": "CTSPINE", - "SNOMED-RT ID (Retired)": "T-D00F7", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 71252005, - "Code Meaning": "Cervix", - "Body Part Examined": "CERVIX", - "SNOMED-RT ID (Retired)": "T-83200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 60819002, - "Code Meaning": "Cheek", - "Body Part Examined": "CHEEK", - "SNOMED-RT ID (Retired)": "T-D1206", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 43799004, - "Code Meaning": "Chest", - "Body Part Examined": "CHEST", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 416775004, - "Code Meaning": "Chest, Abdomen and Pelvis", - "Body Part Examined": "CHESTABDPELVIS", - "SNOMED-RT ID (Retired)": "R-FAB56", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 416550000, - "Code Meaning": "Chest and Abdomen", - "Body Part Examined": "CHESTABDOMEN", - "SNOMED-RT ID (Retired)": "R-FAB55", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 80621003, - "Code Meaning": "Choroid plexus", - "Body Part Examined": "CHOROIDPLEXUS", - "SNOMED-RT ID (Retired)": "T-A1900", - "FMA Code Value": 61934, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 11279006, - "Code Meaning": "Circle of Willis", - "Body Part Examined": "CIRCLEOFWILLIS", - "SNOMED-RT ID (Retired)": "T-45520", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 51299004, - "Code Meaning": "Clavicle", - "Body Part Examined": "CLAVICLE", - "SNOMED-RT ID (Retired)": "T-12310", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 64688005, - "Code Meaning": "Coccyx", - "Body Part Examined": "COCCYX", - "SNOMED-RT ID (Retired)": "T-11BF0", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 71854001, - "Code Meaning": "Colon", - "Body Part Examined": "COLON", - "SNOMED-RT ID (Retired)": "T-59300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 253276007, - "Code Meaning": "Common atrium", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-31005", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 79741001, - "Code Meaning": "Common bile duct", - "Body Part Examined": "COMMONBILEDUCT", - "SNOMED-RT ID (Retired)": "T-64500", - "FMA Code Value": "", - "UMLS Concept UniqueID": "C0009437" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 32062004, - "Code Meaning": "Common carotid artery", - "Body Part Examined": "CCA", - "SNOMED-RT ID (Retired)": "T-45100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 181347005, - "Code Meaning": "Common femoral artery", - "Body Part Examined": "CFA", - "SNOMED-RT ID (Retired)": "T-47402", - "FMA Code Value": 323778, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 397363009, - "Code Meaning": "Common femoral vein", - "Body Part Examined": "CFV", - "SNOMED-RT ID (Retired)": "G-035B", - "FMA Code Value": 323829, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 73634005, - "Code Meaning": "Common iliac artery", - "Body Part Examined": "COMILIACA", - "SNOMED-RT ID (Retired)": "T-46710", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 46027005, - "Code Meaning": "Common iliac vein", - "Body Part Examined": "COMILIACV", - "SNOMED-RT ID (Retired)": "T-48920", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 45503006, - "Code Meaning": "Common ventricle", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-31120", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128555001, - "Code Meaning": "Congenital coronary artery fistula to left atrium", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-32504", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128556000, - "Code Meaning": "Congenital coronary artery fistula to left ventricle", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-32506", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128557009, - "Code Meaning": "Congenital coronary artery fistula to right atrium", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-32509", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128558004, - "Code Meaning": "Congenital coronary artery fistula to right ventricle", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-32510", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 111289009, - "Code Meaning": "Pulmonary arteriovenous fistula", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D3-40208", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 28726007, - "Code Meaning": "Cornea", - "Body Part Examined": "CORNEA", - "SNOMED-RT ID (Retired)": "T-AA200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 41801008, - "Code Meaning": "Coronary artery", - "Body Part Examined": "CORONARYARTERY", - "SNOMED-RT ID (Retired)": "T-43000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 90219004, - "Code Meaning": "Coronary sinus", - "Body Part Examined": "CORONARYSINUS", - "SNOMED-RT ID (Retired)": "T-48410", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128320002, - "Code Meaning": "Cranial venous system", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-A0191", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 32672002, - "Code Meaning": "Descending aorta", - "Body Part Examined": "DESCAORTA", - "SNOMED-RT ID (Retired)": "T-42400", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 32622004, - "Code Meaning": "Descending colon", - "Body Part Examined": "DESCENDINGCOLON", - "SNOMED-RT ID (Retired)": "T-59460", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128554002, - "Code Meaning": "Dodd's perforating vein", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-49429", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 38848004, - "Code Meaning": "Duodenum", - "Body Part Examined": "DUODENUM", - "SNOMED-RT ID (Retired)": "T-58200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 117590005, - "Code Meaning": "Ear", - "Body Part Examined": "EAR", - "SNOMED-RT ID (Retired)": "T-AB001", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 16953009, - "Code Meaning": "Elbow joint", - "Body Part Examined": "ELBOW", - "SNOMED-RT ID (Retired)": "T-15430", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 51114001, - "Code Meaning": "Endo-arterial", - "Body Part Examined": "ENDOARTERIAL", - "SNOMED-RT ID (Retired)": "T-41000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 80891009, - "Code Meaning": "Endo-cardiac", - "Body Part Examined": "ENDOCARDIAC", - "SNOMED-RT ID (Retired)": "T-32000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 32849002, - "Code Meaning": "Endo-esophageal", - "Body Part Examined": "ENDOESOPHAGEAL", - "SNOMED-RT ID (Retired)": "T-56000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 2739003, - "Code Meaning": "Endometrium", - "Body Part Examined": "ENDOMETRIUM", - "SNOMED-RT ID (Retired)": "T-83400", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 53342003, - "Code Meaning": "Endo-nasal", - "Body Part Examined": "ENDONASAL", - "SNOMED-RT ID (Retired)": "T-21300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 18962004, - "Code Meaning": "Endo-nasopharyngeal", - "Body Part Examined": "ENDONASOPHARYNYX", - "SNOMED-RT ID (Retired)": "T-23050", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 34402009, - "Code Meaning": "Endo-rectal", - "Body Part Examined": "ENDORECTAL", - "SNOMED-RT ID (Retired)": "T-59600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 64033007, - "Code Meaning": "Endo-renal", - "Body Part Examined": "ENDORENAL", - "SNOMED-RT ID (Retired)": "T-71000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 87953007, - "Code Meaning": "Endo-ureteric", - "Body Part Examined": "ENDOURETERIC", - "SNOMED-RT ID (Retired)": "T-73000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 13648007, - "Code Meaning": "Endo-urethral", - "Body Part Examined": "ENDOURETHRAL", - "SNOMED-RT ID (Retired)": "T-75000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 76784001, - "Code Meaning": "Endo-vaginal", - "Body Part Examined": "ENDOVAGINAL", - "SNOMED-RT ID (Retired)": "T-82000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 59820001, - "Code Meaning": "Endo-vascular", - "Body Part Examined": "ENDOVASCULAR", - "SNOMED-RT ID (Retired)": "T-40000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 29092000, - "Code Meaning": "Endo-venous", - "Body Part Examined": "ENDOVENOUS", - "SNOMED-RT ID (Retired)": "T-48000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 48367006, - "Code Meaning": "Endo-vesical", - "Body Part Examined": "ENDOVESICAL", - "SNOMED-RT ID (Retired)": "T-74250", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 38266002, - "Code Meaning": "Entire body", - "Body Part Examined": "WHOLEBODY", - "SNOMED-RT ID (Retired)": "T-D0010", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 87644002, - "Code Meaning": "Epididymis", - "Body Part Examined": "EPIDIDYMIS", - "SNOMED-RT ID (Retired)": "T-95000", - "FMA Code Value": 18255, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 27947004, - "Code Meaning": "Epigastric region", - "Body Part Examined": "EPIGASTRIC", - "SNOMED-RT ID (Retired)": "T-D4200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 32849002, - "Code Meaning": "Esophagus", - "Body Part Examined": "ESOPHAGUS", - "SNOMED-RT ID (Retired)": "T-56000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 110861005, - "Code Meaning": "Esophagus, stomach and duodenum", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-DD163", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 84301002, - "Code Meaning": "External auditory canal", - "Body Part Examined": "EAC", - "SNOMED-RT ID (Retired)": "T-AB200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 22286001, - "Code Meaning": "External carotid artery", - "Body Part Examined": "ECA", - "SNOMED-RT ID (Retired)": "T-45200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 113269004, - "Code Meaning": "External iliac artery", - "Body Part Examined": "EXTILIACA", - "SNOMED-RT ID (Retired)": "T-46910", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 63507001, - "Code Meaning": "External iliac vein", - "Body Part Examined": "EXTILIACV", - "SNOMED-RT ID (Retired)": "T-48930", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 71585003, - "Code Meaning": "External jugular vein", - "Body Part Examined": "EXTJUGV", - "SNOMED-RT ID (Retired)": "T-48160", - "FMA Code Value": 13110, - "UMLS Concept UniqueID": "C0226543" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 66019005, - "Code Meaning": "Extremity", - "Body Part Examined": "EXTREMITY", - "SNOMED-RT ID (Retired)": "T-D0300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 81745001, - "Code Meaning": "Eye", - "Body Part Examined": "EYE", - "SNOMED-RT ID (Retired)": "T-AA000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 80243003, - "Code Meaning": "Eyelid", - "Body Part Examined": "EYELID", - "SNOMED-RT ID (Retired)": "T-AA810", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 371398005, - "Code Meaning": "Eye region", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D0801", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 89545001, - "Code Meaning": "Face", - "Body Part Examined": "FACE", - "SNOMED-RT ID (Retired)": "T-D1200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 23074001, - "Code Meaning": "Facial artery", - "Body Part Examined": "FACIALA", - "SNOMED-RT ID (Retired)": "T-45240", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 91397008, - "Code Meaning": "Facial bones", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-11196", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 7657000, - "Code Meaning": "Femoral artery", - "Body Part Examined": "FEMORALA", - "SNOMED-RT ID (Retired)": "T-47400", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 83419000, - "Code Meaning": "Femoral vein", - "Body Part Examined": "FEMORALV", - "SNOMED-RT ID (Retired)": "T-49410", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 71341001, - "Code Meaning": "Femur", - "Body Part Examined": "FEMUR", - "SNOMED-RT ID (Retired)": "T-12710", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "", - "Code Value": "", - "Code Meaning": "Fetal arm", - "Body Part Examined": "FETALARM", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "", - "Code Value": "", - "Code Meaning": "Fetal digit", - "Body Part Examined": "FETALDIGIT", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "", - "Code Value": "", - "Code Meaning": "Fetal heart", - "Body Part Examined": "FETALHEART", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": 63931, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "", - "Code Value": "", - "Code Meaning": "Fetal leg", - "Body Part Examined": "FETALLEG", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "", - "Code Value": "", - "Code Meaning": "Fetal pole", - "Body Part Examined": "FETALPOLE", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 87342007, - "Code Meaning": "Fibula", - "Body Part Examined": "FIBULA", - "SNOMED-RT ID (Retired)": "T-12750", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 7569003, - "Code Meaning": "Finger", - "Body Part Examined": "FINGER", - "SNOMED-RT ID (Retired)": "T-D8800", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 58602004, - "Code Meaning": "Flank", - "Body Part Examined": "FLANK", - "SNOMED-RT ID (Retired)": "T-D2310", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 79361005, - "Code Meaning": "Fontanel of skull", - "Body Part Examined": "FONTANEL", - "SNOMED-RT ID (Retired)": "T-15200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 56459004, - "Code Meaning": "Foot", - "Body Part Examined": "FOOT", - "SNOMED-RT ID (Retired)": "T-D9700", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 14975008, - "Code Meaning": "Forearm", - "Body Part Examined": "FOREARM", - "SNOMED-RT ID (Retired)": "T-D8500", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 35918002, - "Code Meaning": "Fourth ventricle", - "Body Part Examined": "4THVENTRICLE", - "SNOMED-RT ID (Retired)": "T-A1820", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 28231008, - "Code Meaning": "Gallbladder", - "Body Part Examined": "GALLBLADDER", - "SNOMED-RT ID (Retired)": "T-63000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 110568007, - "Code Meaning": "Gastric vein", - "Body Part Examined": "GASTRICV", - "SNOMED-RT ID (Retired)": "T-48820", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128559007, - "Code Meaning": "Genicular artery", - "Body Part Examined": "GENICULARA", - "SNOMED-RT ID (Retired)": "T-47490", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 300571009, - "Code Meaning": "Gestational sac", - "Body Part Examined": "GESTSAC", - "SNOMED-RT ID (Retired)": "F-03FC9", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 46862004, - "Code Meaning": "Gluteal region", - "Body Part Examined": "GLUTEAL", - "SNOMED-RT ID (Retired)": "T-D2600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 5928000, - "Code Meaning": "Great cardiac vein", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-48420", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 60734001, - "Code Meaning": "Great saphenous vein", - "Body Part Examined": "GSV", - "SNOMED-RT ID (Retired)": "T-49530", - "FMA Code Value": 21376, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 85562004, - "Code Meaning": "Hand", - "Body Part Examined": "HAND", - "SNOMED-RT ID (Retired)": "T-D8700", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 69536005, - "Code Meaning": "Head", - "Body Part Examined": "HEAD", - "SNOMED-RT ID (Retired)": "T-D1100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 774007, - "Code Meaning": "Head and Neck", - "Body Part Examined": "HEADNECK", - "SNOMED-RT ID (Retired)": "T-D1000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 80891009, - "Code Meaning": "Heart", - "Body Part Examined": "HEART", - "SNOMED-RT ID (Retired)": "T-32000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 76015000, - "Code Meaning": "Hepatic artery", - "Body Part Examined": "HEPATICA", - "SNOMED-RT ID (Retired)": "T-46420", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 8993003, - "Code Meaning": "Hepatic vein", - "Body Part Examined": "HEPATICV", - "SNOMED-RT ID (Retired)": "T-48720", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 24136001, - "Code Meaning": "Hip joint", - "Body Part Examined": "HIP", - "SNOMED-RT ID (Retired)": "T-15710", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 85050009, - "Code Meaning": "Humerus", - "Body Part Examined": "HUMERUS", - "SNOMED-RT ID (Retired)": "T-12410", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128560002, - "Code Meaning": "Hunterian perforating vein", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-4942A", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 11708003, - "Code Meaning": "Hypogastric region", - "Body Part Examined": "HYPOGASTRIC", - "SNOMED-RT ID (Retired)": "T-D4240", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 81502006, - "Code Meaning": "Hypopharynx", - "Body Part Examined": "HYPOPHARYNX", - "SNOMED-RT ID (Retired)": "T-55300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 34516001, - "Code Meaning": "Ileum", - "Body Part Examined": "ILEUM", - "SNOMED-RT ID (Retired)": "T-58600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 299716001, - "Code Meaning": "Iliac and/or femoral artery", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-41068", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 10293006, - "Code Meaning": "Iliac artery", - "Body Part Examined": "ILIACA", - "SNOMED-RT ID (Retired)": "T-46700", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 244411005, - "Code Meaning": "Iliac vein", - "Body Part Examined": "ILIACV", - "SNOMED-RT ID (Retired)": "T-4940E", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 22356005, - "Code Meaning": "Ilium", - "Body Part Examined": "ILIUM", - "SNOMED-RT ID (Retired)": "T-12340", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 195416006, - "Code Meaning": "Inferior cardiac vein", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-484A4", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 51249003, - "Code Meaning": "Inferior left pulmonary vein", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-48540", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 33795007, - "Code Meaning": "Inferior mesenteric artery", - "Body Part Examined": "INFMESA", - "SNOMED-RT ID (Retired)": "T-46520", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 113273001, - "Code Meaning": "Inferior right pulmonary vein", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-48520", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 64131007, - "Code Meaning": "Inferior vena cava", - "Body Part Examined": "INFVENACAVA", - "SNOMED-RT ID (Retired)": "T-48710", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 26893007, - "Code Meaning": "Inguinal region", - "Body Part Examined": "INGUINAL", - "SNOMED-RT ID (Retired)": "T-D7000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 12691009, - "Code Meaning": "Innominate artery", - "Body Part Examined": "INNOMINATEA", - "SNOMED-RT ID (Retired)": "T-46010", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 8887007, - "Code Meaning": "Innominate vein", - "Body Part Examined": "INNOMINATEV", - "SNOMED-RT ID (Retired)": "T-48620", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 361078006, - "Code Meaning": "Internal Auditory Canal", - "Body Part Examined": "IAC", - "SNOMED-RT ID (Retired)": "T-AB959", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 86117002, - "Code Meaning": "Internal carotid artery", - "Body Part Examined": "ICA", - "SNOMED-RT ID (Retired)": "T-45300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 90024005, - "Code Meaning": "Internal iliac artery", - "Body Part Examined": "INTILIACA", - "SNOMED-RT ID (Retired)": "T-46740", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 12123001, - "Code Meaning": "Internal jugular vein", - "Body Part Examined": "INTJUGULARV", - "SNOMED-RT ID (Retired)": "T-48170", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 69327007, - "Code Meaning": "Internal mammary artery", - "Body Part Examined": "INTMAMMARYA", - "SNOMED-RT ID (Retired)": "T-46200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 818987002, - "Code Meaning": "Intra-abdominopelvic", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 131183008, - "Code Meaning": "Intra-articular", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "G-A15A", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 1101003, - "Code Meaning": "Intracranial", - "Body Part Examined": "INTRACRANIAL", - "SNOMED-RT ID (Retired)": "T-D1400", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 32849002, - "Code Meaning": "Intra-esophageal", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-56000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 816989007, - "Code Meaning": "Intra-pelvic", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 43799004, - "Code Meaning": "Intra-thoracic", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 661005, - "Code Meaning": "Jaw region", - "Body Part Examined": "JAW", - "SNOMED-RT ID (Retired)": "T-D1213", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 21306003, - "Code Meaning": "Jejunum", - "Body Part Examined": "JEJUNUM", - "SNOMED-RT ID (Retired)": "T-58400", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 39352004, - "Code Meaning": "Joint", - "Body Part Examined": "JOINT", - "SNOMED-RT ID (Retired)": "T-15001", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128563000, - "Code Meaning": "Juxtaposed atrial appendage", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-31052", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 64033007, - "Code Meaning": "Kidney", - "Body Part Examined": "KIDNEY", - "SNOMED-RT ID (Retired)": "T-71000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 72696002, - "Code Meaning": "Knee", - "Body Part Examined": "KNEE", - "SNOMED-RT ID (Retired)": "T-D9200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 59749000, - "Code Meaning": "Lacrimal artery", - "Body Part Examined": "LACRIMALA", - "SNOMED-RT ID (Retired)": "T-45410", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128979005, - "Code Meaning": "Lacrimal artery of right eye", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-45416", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 14742008, - "Code Meaning": "Large intestine", - "Body Part Examined": "LARGEINTESTINE", - "SNOMED-RT ID (Retired)": "T-59000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 4596009, - "Code Meaning": "Larynx", - "Body Part Examined": "LARYNX", - "SNOMED-RT ID (Retired)": "T-24100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 66720007, - "Code Meaning": "Lateral Ventricle", - "Body Part Examined": "LATVENTRICLE", - "SNOMED-RT ID (Retired)": "T-A1650", - "FMA Code Value": 78448, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 82471001, - "Code Meaning": "Left atrium", - "Body Part Examined": "LATRIUM", - "SNOMED-RT ID (Retired)": "T-32300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 33626005, - "Code Meaning": "Left auricular appendage", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-32310", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 113270003, - "Code Meaning": "Left femoral artery", - "Body Part Examined": "LFEMORALA", - "SNOMED-RT ID (Retired)": "T-47420", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 273202007, - "Code Meaning": "Left hepatic vein", - "Body Part Examined": "LHEPATICV", - "SNOMED-RT ID (Retired)": "T-48727", - "FMA Code Value": 14339, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 133945003, - "Code Meaning": "Left hypochondriac region", - "Body Part Examined": "LHYPOCHONDRIAC", - "SNOMED-RT ID (Retired)": "T-D4211", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 85119005, - "Code Meaning": "Left inguinal region", - "Body Part Examined": "LINGUINAL", - "SNOMED-RT ID (Retired)": "T-D7020", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 68505006, - "Code Meaning": "Left lower quadrant of abdomen", - "Body Part Examined": "LLQ", - "SNOMED-RT ID (Retired)": "T-D4140", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 133943005, - "Code Meaning": "Left lumbar region", - "Body Part Examined": "LLUMBAR", - "SNOMED-RT ID (Retired)": "T-D2340", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 70253006, - "Code Meaning": "Left portal vein", - "Body Part Examined": "LPORTALV", - "SNOMED-RT ID (Retired)": "T-48814", - "FMA Code Value": 15415, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 50408007, - "Code Meaning": "Left pulmonary artery", - "Body Part Examined": "LPULMONARYA", - "SNOMED-RT ID (Retired)": "T-44400", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 86367003, - "Code Meaning": "Left upper quadrant of abdomen", - "Body Part Examined": "LUQ", - "SNOMED-RT ID (Retired)": "T-D4130", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 87878005, - "Code Meaning": "Left ventricle", - "Body Part Examined": "LVENTRICLE", - "SNOMED-RT ID (Retired)": "T-32600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 70238003, - "Code Meaning": "Left ventricle inflow", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-32640", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 13418002, - "Code Meaning": "Left ventricle outflow tract", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-32650", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 113264009, - "Code Meaning": "Lingual artery", - "Body Part Examined": "LINGUALA", - "SNOMED-RT ID (Retired)": "T-45230", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 10200004, - "Code Meaning": "Liver", - "Body Part Examined": "LIVER", - "SNOMED-RT ID (Retired)": "T-62000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 19100000, - "Code Meaning": "Lower inner quadrant of breast", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-04003", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 30021000, - "Code Meaning": "Lower leg", - "Body Part Examined": "LEG", - "SNOMED-RT ID (Retired)": "T-D9400", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 61685007, - "Code Meaning": "Lower limb", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D9000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 33564002, - "Code Meaning": "Lower outer quadrant of breast", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-04005", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 34635009, - "Code Meaning": "Lumbar artery", - "Body Part Examined": "LUMBARA", - "SNOMED-RT ID (Retired)": "T-46960", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 52612000, - "Code Meaning": "Lumbar region", - "Body Part Examined": "LUMBAR", - "SNOMED-RT ID (Retired)": "T-D2300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 122496007, - "Code Meaning": "Lumbar spine", - "Body Part Examined": "LSPINE", - "SNOMED-RT ID (Retired)": "T-11503", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 297173004, - "Code Meaning": "Lumbo-sacral spine", - "Body Part Examined": "LSSPINE", - "SNOMED-RT ID (Retired)": "T-D00F9", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 91747007, - "Code Meaning": "Lumen of blood vessel", - "Body Part Examined": "LUMEN", - "SNOMED-RT ID (Retired)": "T-40230", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 39607008, - "Code Meaning": "Lung", - "Body Part Examined": "LUNG", - "SNOMED-RT ID (Retired)": "T-28000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 91609006, - "Code Meaning": "Mandible", - "Body Part Examined": "JAW", - "SNOMED-RT ID (Retired)": "T-11180", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 59066005, - "Code Meaning": "Mastoid bone", - "Body Part Examined": "MASTOID", - "SNOMED-RT ID (Retired)": "T-11133", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 70925003, - "Code Meaning": "Maxilla", - "Body Part Examined": "MAXILLA", - "SNOMED-RT ID (Retired)": "T-11170", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 72410000, - "Code Meaning": "Mediastinum", - "Body Part Examined": "MEDIASTINUM", - "SNOMED-RT ID (Retired)": "T-D3300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 86570000, - "Code Meaning": "Mesenteric artery", - "Body Part Examined": "MESENTRICA", - "SNOMED-RT ID (Retired)": "T-46500", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128583004, - "Code Meaning": "Mesenteric vein", - "Body Part Examined": "MESENTRICV", - "SNOMED-RT ID (Retired)": "T-4884A", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 17232002, - "Code Meaning": "Middle cerebral artery", - "Body Part Examined": "MCA", - "SNOMED-RT ID (Retired)": "T-45600", - "FMA Code Value": 50079, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 273099000, - "Code Meaning": "Middle hepatic vein", - "Body Part Examined": "MIDHEPATICV", - "SNOMED-RT ID (Retired)": "T-48726", - "FMA Code Value": 14340, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 243977002, - "Code Meaning": "Morisons pouch", - "Body Part Examined": "MORISONSPOUCH", - "SNOMED-RT ID (Retired)": "T-D4434", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 123851003, - "Code Meaning": "Mouth", - "Body Part Examined": "MOUTH", - "SNOMED-RT ID (Retired)": "T-D0662", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 102292000, - "Code Meaning": "Muscle of lower limb", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-14668", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 30608006, - "Code Meaning": "Muscle of upper limb", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-13600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 74386004, - "Code Meaning": "Nasal bone", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-11149", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 360955006, - "Code Meaning": "Nasopharynx", - "Body Part Examined": "NASOPHARYNX", - "SNOMED-RT ID (Retired)": "T-2300C", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 45048000, - "Code Meaning": "Neck", - "Body Part Examined": "NECK", - "SNOMED-RT ID (Retired)": "T-D1600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 416319003, - "Code Meaning": "Neck, Chest, Abdomen and Pelvis", - "Body Part Examined": "NECKCHESTABDPELV", - "SNOMED-RT ID (Retired)": "R-FAB54", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 416152001, - "Code Meaning": "Neck, Chest and Abdomen", - "Body Part Examined": "NECKCHESTABDOMEN", - "SNOMED-RT ID (Retired)": "R-FAB53", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 417437006, - "Code Meaning": "Neck and Chest", - "Body Part Examined": "NECKCHEST", - "SNOMED-RT ID (Retired)": "R-FAB52", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 45206002, - "Code Meaning": "Nose", - "Body Part Examined": "NOSE", - "SNOMED-RT ID (Retired)": "T-21000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 31145008, - "Code Meaning": "Occipital artery", - "Body Part Examined": "OCCPITALA", - "SNOMED-RT ID (Retired)": "T-45250", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 32114007, - "Code Meaning": "Occipital vein", - "Body Part Examined": "OCCIPTALV", - "SNOMED-RT ID (Retired)": "T-48214", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 113346000, - "Code Meaning": "Omental bursa", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D4450", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 27398004, - "Code Meaning": "Omentum", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D4600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 53549008, - "Code Meaning": "Ophthalmic artery", - "Body Part Examined": "OPHTHALMICA", - "SNOMED-RT ID (Retired)": "T-45400", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 55024004, - "Code Meaning": "Optic canal", - "Body Part Examined": "OPTICCANAL", - "SNOMED-RT ID (Retired)": "T-11102", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 363654007, - "Code Meaning": "Orbital structure", - "Body Part Examined": "ORBIT", - "SNOMED-RT ID (Retired)": "T-D14AE", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 15497006, - "Code Meaning": "Ovary", - "Body Part Examined": "OVARY", - "SNOMED-RT ID (Retired)": "T-87000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 15776009, - "Code Meaning": "Pancreas", - "Body Part Examined": "PANCREAS", - "SNOMED-RT ID (Retired)": "T-65000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 69930009, - "Code Meaning": "Pancreatic duct", - "Body Part Examined": "PANCREATICDUCT", - "SNOMED-RT ID (Retired)": "T-65010", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 110621006, - "Code Meaning": "Pancreatic duct and bile duct systems", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-65600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 2095001, - "Code Meaning": "Paranasal sinus", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-22000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 91691001, - "Code Meaning": "Parasternal", - "Body Part Examined": "PARASTERNAL", - "SNOMED-RT ID (Retired)": "T-D3136", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 111002, - "Code Meaning": "Parathyroid", - "Body Part Examined": "PARATHYROID", - "SNOMED-RT ID (Retired)": "T-B7000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 45289007, - "Code Meaning": "Parotid gland", - "Body Part Examined": "PAROTID", - "SNOMED-RT ID (Retired)": "T-61100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 64234005, - "Code Meaning": "Patella", - "Body Part Examined": "PATELLA", - "SNOMED-RT ID (Retired)": "T-12730", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 83330001, - "Code Meaning": "Patent ductus arteriosus", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-32012", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 816092008, - "Code Meaning": "Pelvis", - "Body Part Examined": "PELVIS", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 416631005, - "Code Meaning": "Pelvis and lower extremities", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "R-FAB58", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 282044005, - "Code Meaning": "Penile artery", - "Body Part Examined": "PENILEA", - "SNOMED-RT ID (Retired)": "T-46807", - "FMA Code Value": 66318, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 18911002, - "Code Meaning": "Penis", - "Body Part Examined": "PENIS", - "SNOMED-RT ID (Retired)": "T-91000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 38864007, - "Code Meaning": "Perineum", - "Body Part Examined": "PERINEUM", - "SNOMED-RT ID (Retired)": "T-D2700", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 8821006, - "Code Meaning": "Peroneal artery", - "Body Part Examined": "PERONEALA", - "SNOMED-RT ID (Retired)": "T-47630", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "DCM", - "Code Value": 113681, - "Code Meaning": "Phantom", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 54066008, - "Code Meaning": "Pharynx", - "Body Part Examined": "PHARYNX", - "SNOMED-RT ID (Retired)": "T-55000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 312535008, - "Code Meaning": "Pharynx and larynx", - "Body Part Examined": "PHARYNXLARYNX", - "SNOMED-RT ID (Retired)": "T-20101", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 78067005, - "Code Meaning": "Placenta", - "Body Part Examined": "PLACENTA", - "SNOMED-RT ID (Retired)": "T-F1100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 43899006, - "Code Meaning": "Popliteal artery", - "Body Part Examined": "POPLITEALA", - "SNOMED-RT ID (Retired)": "T-47500", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 32361000, - "Code Meaning": "Popliteal fossa", - "Body Part Examined": "POPLITEALFOSSA", - "SNOMED-RT ID (Retired)": "T-D9310", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 56849005, - "Code Meaning": "Popliteal vein", - "Body Part Examined": "POPLITEALV", - "SNOMED-RT ID (Retired)": "T-49650", - "FMA Code Value": 44327, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 32764006, - "Code Meaning": "Portal vein", - "Body Part Examined": "PORTALV", - "SNOMED-RT ID (Retired)": "T-48810", - "FMA Code Value": 66645, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 70382005, - "Code Meaning": "Posterior cerebral artery", - "Body Part Examined": "PCA", - "SNOMED-RT ID (Retired)": "T-45900", - "FMA Code Value": 50583, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 43119007, - "Code Meaning": "Posterior communicating artery", - "Body Part Examined": "POSCOMMA", - "SNOMED-RT ID (Retired)": "T-45320", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128569001, - "Code Meaning": "Posterior medial tributary", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-49535", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 13363002, - "Code Meaning": "Posterior tibial artery", - "Body Part Examined": "POSTIBIALA", - "SNOMED-RT ID (Retired)": "T-47600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 14944004, - "Code Meaning": "Primitive aorta", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-F7001", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 91707000, - "Code Meaning": "Primitive pulmonary artery", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-F7040", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 31677005, - "Code Meaning": "Profunda femoris artery", - "Body Part Examined": "PROFFEMA", - "SNOMED-RT ID (Retired)": "T-47440", - "FMA Code Value": 20741, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 23438002, - "Code Meaning": "Profunda femoris vein", - "Body Part Examined": "PROFFEMV", - "SNOMED-RT ID (Retired)": "T-49660", - "FMA Code Value": 51041, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 41216001, - "Code Meaning": "Prostate", - "Body Part Examined": "PROSTATE", - "SNOMED-RT ID (Retired)": "T-92000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 81040000, - "Code Meaning": "Pulmonary artery", - "Body Part Examined": "PULMONARYA", - "SNOMED-RT ID (Retired)": "T-44000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128584005, - "Code Meaning": "Pulmonary artery conduit", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-33142", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128586007, - "Code Meaning": "Pulmonary chamber of cor triatriatum", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-32190", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 122972007, - "Code Meaning": "Pulmonary vein", - "Body Part Examined": "PULMONARYV", - "SNOMED-RT ID (Retired)": "T-48581", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128566008, - "Code Meaning": "Pulmonary vein confluence", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-33512", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128567004, - "Code Meaning": "Pulmonary venous atrium", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-33514", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 45631007, - "Code Meaning": "Radial artery", - "Body Part Examined": "RADIALA", - "SNOMED-RT ID (Retired)": "T-47300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 62413002, - "Code Meaning": "Radius", - "Body Part Examined": "RADIUS", - "SNOMED-RT ID (Retired)": "T-12420", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 110535000, - "Code Meaning": "Radius and ulna", - "Body Part Examined": "RADIUSULNA", - "SNOMED-RT ID (Retired)": "T-12403", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 53843000, - "Code Meaning": "Rectouterine pouch", - "Body Part Examined": "CULDESAC", - "SNOMED-RT ID (Retired)": "T-D6407", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 34402009, - "Code Meaning": "Rectum", - "Body Part Examined": "RECTUM", - "SNOMED-RT ID (Retired)": "T-59600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 2841007, - "Code Meaning": "Renal artery", - "Body Part Examined": "RENALA", - "SNOMED-RT ID (Retired)": "T-46600", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 25990002, - "Code Meaning": "Renal pelvis", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-72000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 56400007, - "Code Meaning": "Renal vein", - "Body Part Examined": "RENALV", - "SNOMED-RT ID (Retired)": "T-48740", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 82849001, - "Code Meaning": "Retroperitoneum", - "Body Part Examined": "RETROPERITONEUM", - "SNOMED-RT ID (Retired)": "T-D4900", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 113197003, - "Code Meaning": "Rib", - "Body Part Examined": "RIB", - "SNOMED-RT ID (Retired)": "T-11300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 73829009, - "Code Meaning": "Right atrium", - "Body Part Examined": "RATRIUM", - "SNOMED-RT ID (Retired)": "T-32200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 68300000, - "Code Meaning": "Right auricular appendage", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-32210", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 69833005, - "Code Meaning": "Right femoral artery", - "Body Part Examined": "RFEMORALA", - "SNOMED-RT ID (Retired)": "T-47410", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 272998002, - "Code Meaning": "Right hepatic vein", - "Body Part Examined": "RHEPATICV", - "SNOMED-RT ID (Retired)": "T-48725", - "FMA Code Value": 14338, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 133946002, - "Code Meaning": "Right hypochondriac region", - "Body Part Examined": "RHYPOCHONDRIAC", - "SNOMED-RT ID (Retired)": "T-D4212", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 37117007, - "Code Meaning": "Right inguinal region", - "Body Part Examined": "RINGUINAL", - "SNOMED-RT ID (Retired)": "T-D7010", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 48544008, - "Code Meaning": "Right lower quadrant of abdomen", - "Body Part Examined": "RLQ", - "SNOMED-RT ID (Retired)": "T-D4120", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 133944004, - "Code Meaning": "Right lumbar region", - "Body Part Examined": "RLUMBAR", - "SNOMED-RT ID (Retired)": "T-D2342", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 73931004, - "Code Meaning": "Right portal vein", - "Body Part Examined": "RPORTALV", - "SNOMED-RT ID (Retired)": "T-48813", - "FMA Code Value": 15414, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 78480002, - "Code Meaning": "Right pulmonary artery", - "Body Part Examined": "RPULMONARYA", - "SNOMED-RT ID (Retired)": "T-44200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 50519007, - "Code Meaning": "Right upper quadrant of abdomen", - "Body Part Examined": "RUQ", - "SNOMED-RT ID (Retired)": "T-D4110", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 53085002, - "Code Meaning": "Right ventricle", - "Body Part Examined": "RVENTRICLE", - "SNOMED-RT ID (Retired)": "T-32500", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 8017000, - "Code Meaning": "Right ventricle inflow", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-32540", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 44627009, - "Code Meaning": "Right ventricle outflow tract", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-32550", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 39723000, - "Code Meaning": "Sacroiliac joint", - "Body Part Examined": "SIJOINT", - "SNOMED-RT ID (Retired)": "T-15680", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 54735007, - "Code Meaning": "Sacrum", - "Body Part Examined": "SSPINE", - "SNOMED-RT ID (Retired)": "T-11AD0", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128587003, - "Code Meaning": "Saphenofemoral junction", - "Body Part Examined": "SFJ", - "SNOMED-RT ID (Retired)": "T-D930A", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 362072009, - "Code Meaning": "Saphenous vein", - "Body Part Examined": "SAPHENOUSV", - "SNOMED-RT ID (Retired)": "T-4940B", - "FMA Code Value": "", - "UMLS Concept UniqueID": "C0036186" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 41695006, - "Code Meaning": "Scalp", - "Body Part Examined": "SCALP", - "SNOMED-RT ID (Retired)": "T-D1160", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 79601000, - "Code Meaning": "Scapula", - "Body Part Examined": "SCAPULA", - "SNOMED-RT ID (Retired)": "T-12280", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 18619003, - "Code Meaning": "Sclera", - "Body Part Examined": "SCLERA", - "SNOMED-RT ID (Retired)": "T-AA110", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 20233005, - "Code Meaning": "Scrotum", - "Body Part Examined": "SCROTUM", - "SNOMED-RT ID (Retired)": "T-98000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 42575006, - "Code Meaning": "Sella turcica", - "Body Part Examined": "SELLA", - "SNOMED-RT ID (Retired)": "T-D1460", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 64739004, - "Code Meaning": "Seminal vesicle", - "Body Part Examined": "SEMVESICLE", - "SNOMED-RT ID (Retired)": "T-93000", - "FMA Code Value": 19386, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 58742003, - "Code Meaning": "Sesamoid bones of foot", - "Body Part Examined": "SESAMOID", - "SNOMED-RT ID (Retired)": "T-12980", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 16982005, - "Code Meaning": "Shoulder", - "Body Part Examined": "SHOULDER", - "SNOMED-RT ID (Retired)": "T-D2220", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 60184004, - "Code Meaning": "Sigmoid colon", - "Body Part Examined": "SIGMOID", - "SNOMED-RT ID (Retired)": "T-59470", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 89546000, - "Code Meaning": "Skull", - "Body Part Examined": "SKULL", - "SNOMED-RT ID (Retired)": "T-11100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 30315005, - "Code Meaning": "Small intestine", - "Body Part Examined": "SMALLINTESTINE", - "SNOMED-RT ID (Retired)": "T-58000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 2748008, - "Code Meaning": "Spinal cord", - "Body Part Examined": "SPINALCORD", - "SNOMED-RT ID (Retired)": "T-A7010", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 421060004, - "Code Meaning": "Spine", - "Body Part Examined": "SPINE", - "SNOMED-RT ID (Retired)": "T-D04FF", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 78961009, - "Code Meaning": "Spleen", - "Body Part Examined": "SPLEEN", - "SNOMED-RT ID (Retired)": "T-C3000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 22083002, - "Code Meaning": "Splenic artery", - "Body Part Examined": "SPLENICA", - "SNOMED-RT ID (Retired)": "T-46460", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 35819009, - "Code Meaning": "Splenic vein", - "Body Part Examined": "SPLENICV", - "SNOMED-RT ID (Retired)": "T-48890", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 7844006, - "Code Meaning": "Sternoclavicular joint", - "Body Part Examined": "SCJOINT", - "SNOMED-RT ID (Retired)": "T-15610", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 56873002, - "Code Meaning": "Sternum", - "Body Part Examined": "STERNUM", - "SNOMED-RT ID (Retired)": "T-11210", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 69695003, - "Code Meaning": "Stomach", - "Body Part Examined": "STOMACH", - "SNOMED-RT ID (Retired)": "T-57000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 36765005, - "Code Meaning": "Subclavian artery", - "Body Part Examined": "SUBCLAVIANA", - "SNOMED-RT ID (Retired)": "T-46100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 9454009, - "Code Meaning": "Subclavian vein", - "Body Part Examined": "SUBCLAVIANV", - "SNOMED-RT ID (Retired)": "T-48330", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 19695001, - "Code Meaning": "Subcostal", - "Body Part Examined": "SUBCOSTAL", - "SNOMED-RT ID (Retired)": "T-D4210", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 5713008, - "Code Meaning": "Submandibular area", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D1603", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 54019009, - "Code Meaning": "Submandibular gland", - "Body Part Examined": "SUBMANDIBULAR", - "SNOMED-RT ID (Retired)": "T-61300", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 170887008, - "Code Meaning": "Submental", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D161E", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 5076001, - "Code Meaning": "Subxiphoid", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D3213", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 181349008, - "Code Meaning": "Superficial femoral artery", - "Body Part Examined": "SFA", - "SNOMED-RT ID (Retired)": "T-47403", - "FMA Code Value": 323777, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 397364003, - "Code Meaning": "Superficial femoral vein", - "Body Part Examined": "SFV", - "SNOMED-RT ID (Retired)": "G-035A", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 15672000, - "Code Meaning": "Superficial temporal artery", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-45270", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 43863001, - "Code Meaning": "Superior left pulmonary vein", - "Body Part Examined": "LSUPPULMONARYV", - "SNOMED-RT ID (Retired)": "T-48530", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 42258001, - "Code Meaning": "Superior mesenteric artery", - "Body Part Examined": "SMA", - "SNOMED-RT ID (Retired)": "T-46510", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 8629005, - "Code Meaning": "Superior right pulmonary vein", - "Body Part Examined": "RSUPPULMONARYV", - "SNOMED-RT ID (Retired)": "T-48510", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 72021004, - "Code Meaning": "Superior thyroid artery", - "Body Part Examined": "SUPTHYROIDA", - "SNOMED-RT ID (Retired)": "T-45210", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 48345005, - "Code Meaning": "Superior vena cava", - "Body Part Examined": "SVC", - "SNOMED-RT ID (Retired)": "T-48610", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 77621008, - "Code Meaning": "Supraclavicular region of neck", - "Body Part Examined": "SUPRACLAVICULAR", - "SNOMED-RT ID (Retired)": "T-D1620", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 11708003, - "Code Meaning": "Suprapubic region", - "Body Part Examined": "SUPRAPUBIC", - "SNOMED-RT ID (Retired)": "T-D4240", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 26493002, - "Code Meaning": "Suprasternal notch", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-11218", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128589000, - "Code Meaning": "Systemic collateral artery to lung", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-44007", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 128568009, - "Code Meaning": "Systemic venous atrium", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-33516", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 27949001, - "Code Meaning": "Tarsal joint", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-15770", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 53620006, - "Code Meaning": "Temporomandibular joint", - "Body Part Examined": "TMJ", - "SNOMED-RT ID (Retired)": "T-15290", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 40689003, - "Code Meaning": "Testis", - "Body Part Examined": "TESTIS", - "SNOMED-RT ID (Retired)": "T-94000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 42695009, - "Code Meaning": "Thalamus", - "Body Part Examined": "THALAMUS", - "SNOMED-RT ID (Retired)": "T-A4000", - "FMA Code Value": 62007, - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 68367000, - "Code Meaning": "Thigh", - "Body Part Examined": "THIGH", - "SNOMED-RT ID (Retired)": "T-D9100", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 49841001, - "Code Meaning": "Third ventricle", - "Body Part Examined": "3RDVENTRICLE", - "SNOMED-RT ID (Retired)": "T-A1740", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 113262008, - "Code Meaning": "Thoracic aorta", - "Body Part Examined": "THORACICAORTA", - "SNOMED-RT ID (Retired)": "T-42070", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 122495006, - "Code Meaning": "Thoracic spine", - "Body Part Examined": "TSPINE", - "SNOMED-RT ID (Retired)": "T-11502", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 297172009, - "Code Meaning": "Thoraco-lumbar spine", - "Body Part Examined": "TLSPINE", - "SNOMED-RT ID (Retired)": "T-D00F8", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 43799004, - "Code Meaning": "Thorax", - "Body Part Examined": "THORAX", - "SNOMED-RT ID (Retired)": "", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 76505004, - "Code Meaning": "Thumb", - "Body Part Examined": "THUMB", - "SNOMED-RT ID (Retired)": "T-D8810", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 9875009, - "Code Meaning": "Thymus", - "Body Part Examined": "THYMUS", - "SNOMED-RT ID (Retired)": "T-C8000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 69748006, - "Code Meaning": "Thyroid", - "Body Part Examined": "THYROID", - "SNOMED-RT ID (Retired)": "T-B6000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 12611008, - "Code Meaning": "Tibia", - "Body Part Examined": "TIBIA", - "SNOMED-RT ID (Retired)": "T-12740", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 110536004, - "Code Meaning": "Tibia and fibula", - "Body Part Examined": "TIBIAFIBULA", - "SNOMED-RT ID (Retired)": "T-12701", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 29707007, - "Code Meaning": "Toe", - "Body Part Examined": "TOE", - "SNOMED-RT ID (Retired)": "T-D9800", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 21974007, - "Code Meaning": "Tongue", - "Body Part Examined": "TONGUE", - "SNOMED-RT ID (Retired)": "T-53000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 44567001, - "Code Meaning": "Trachea", - "Body Part Examined": "TRACHEA", - "SNOMED-RT ID (Retired)": "T-25000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 110726009, - "Code Meaning": "Trachea and bronchus", - "Body Part Examined": "TRACHEABRONCHUS", - "SNOMED-RT ID (Retired)": "T-DD006", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 485005, - "Code Meaning": "Transverse colon", - "Body Part Examined": "TRANSVERSECOLON", - "SNOMED-RT ID (Retired)": "T-59440", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 61959006, - "Code Meaning": "Truncus arteriosus communis", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "D4-31400", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 57850000, - "Code Meaning": "Truncus coeliacus", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-46400", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 23416004, - "Code Meaning": "Ulna", - "Body Part Examined": "ULNA", - "SNOMED-RT ID (Retired)": "T-12430", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 44984001, - "Code Meaning": "Ulnar artery", - "Body Part Examined": "ULNARA", - "SNOMED-RT ID (Retired)": "T-47200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 50536004, - "Code Meaning": "Umbilical artery", - "Body Part Examined": "UMBILICALA", - "SNOMED-RT ID (Retired)": "T-F1810", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 90290004, - "Code Meaning": "Umbilical region", - "Body Part Examined": "UMBILICAL", - "SNOMED-RT ID (Retired)": "T-D4230", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 284639000, - "Code Meaning": "Umbilical vein", - "Body Part Examined": "UMBILICALV", - "SNOMED-RT ID (Retired)": "T-48832", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 40983000, - "Code Meaning": "Upper arm", - "Body Part Examined": "ARM", - "SNOMED-RT ID (Retired)": "T-D8200", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 77831004, - "Code Meaning": "Upper inner quadrant of breast", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-04002", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 53120007, - "Code Meaning": "Upper limb", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-D8000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 76365002, - "Code Meaning": "Upper outer quadrant of breast", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-04004", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 431491007, - "Code Meaning": "Upper urinary tract", - "Body Part Examined": "UPRURINARYTRACT", - "SNOMED-RT ID (Retired)": "T-7000B", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 87953007, - "Code Meaning": "Ureter", - "Body Part Examined": "URETER", - "SNOMED-RT ID (Retired)": "T-73000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 13648007, - "Code Meaning": "Urethra", - "Body Part Examined": "URETHRA", - "SNOMED-RT ID (Retired)": "T-75000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 35039007, - "Code Meaning": "Uterus", - "Body Part Examined": "UTERUS", - "SNOMED-RT ID (Retired)": "T-83000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 110639002, - "Code Meaning": "Uterus and fallopian tubes", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-88920", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 76784001, - "Code Meaning": "Vagina", - "Body Part Examined": "VAGINA", - "SNOMED-RT ID (Retired)": "T-82000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 118375008, - "Code Meaning": "Vascular graft", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "A-04140", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 29092000, - "Code Meaning": "Vein", - "Body Part Examined": "VEIN", - "SNOMED-RT ID (Retired)": "T-48000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 34340008, - "Code Meaning": "Venous network", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-48003", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 21814001, - "Code Meaning": "Ventricle", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-32400", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 85234005, - "Code Meaning": "Vertebral artery", - "Body Part Examined": "VERTEBRALA", - "SNOMED-RT ID (Retired)": "T-45700", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 110517009, - "Code Meaning": "Vertebral column and cranium", - "Body Part Examined": "", - "SNOMED-RT ID (Retired)": "T-11011", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 45292006, - "Code Meaning": "Vulva", - "Body Part Examined": "VULVA", - "SNOMED-RT ID (Retired)": "T-81000", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 74670003, - "Code Meaning": "Wrist joint", - "Body Part Examined": "WRIST", - "SNOMED-RT ID (Retired)": "T-15460", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - }, - { - "Coding Scheme Designator": "SCT", - "Code Value": 13881006, - "Code Meaning": "Zygoma", - "Body Part Examined": "ZYGOMA", - "SNOMED-RT ID (Retired)": "T-11166", - "FMA Code Value": "", - "UMLS Concept UniqueID": "" - } - ] \ No newline at end of file + { + "Coding Scheme Designator": "SCT", + "Code Value": "818981001", + "Code Meaning": "Abdomen", + "Body Part Examined": "ABDOMEN", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "818982008", + "Code Meaning": "Abdomen and Pelvis", + "Body Part Examined": "ABDOMENPELVIS", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "7832008", + "Code Meaning": "Abdominal aorta", + "Body Part Examined": "ABDOMINALAORTA", + "SNOMED-RT ID (Retired)": "T-42500", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "85856004", + "Code Meaning": "Acromioclavicular joint", + "Body Part Examined": "ACJOINT", + "SNOMED-RT ID (Retired)": "T-15420", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "23451007", + "Code Meaning": "Adrenal gland", + "Body Part Examined": "ADRENAL", + "SNOMED-RT ID (Retired)": "T-B3000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "77012006", + "Code Meaning": "Amniotic fluid", + "Body Part Examined": "AMNIOTICFLUID", + "SNOMED-RT ID (Retired)": "T-F1320", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "70258002", + "Code Meaning": "Ankle joint", + "Body Part Examined": "ANKLE", + "SNOMED-RT ID (Retired)": "T-15750", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128585006", + "Code Meaning": "Anomalous pulmonary vein", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-48503", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128553008", + "Code Meaning": "Antecubital vein", + "Body Part Examined": "ANTECUBITALV", + "SNOMED-RT ID (Retired)": "T-49215", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "194996006", + "Code Meaning": "Anterior cardiac vein", + "Body Part Examined": "ANTCARDIACV", + "SNOMED-RT ID (Retired)": "T-48403", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "60176003", + "Code Meaning": "Anterior cerebral artery", + "Body Part Examined": "ACA", + "SNOMED-RT ID (Retired)": "T-45540", + "FMA Code Value": 50028, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "8012006", + "Code Meaning": "Anterior communicating artery", + "Body Part Examined": "ANTCOMMA", + "SNOMED-RT ID (Retired)": "T-45530", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "17388009", + "Code Meaning": "Anterior spinal artery", + "Body Part Examined": "ANTSPINALA", + "SNOMED-RT ID (Retired)": "T-45730", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "68053000", + "Code Meaning": "Anterior tibial artery", + "Body Part Examined": "ANTTIBIALA", + "SNOMED-RT ID (Retired)": "T-47700", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "53505006", + "Code Meaning": "Anus", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-59900", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "110612005", + "Code Meaning": "Anus, rectum and sigmoid colon", + "Body Part Examined": "ANUSRECTUMSIGMD", + "SNOMED-RT ID (Retired)": "T-59490", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "15825003", + "Code Meaning": "Aorta", + "Body Part Examined": "AORTA", + "SNOMED-RT ID (Retired)": "T-42000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "57034009", + "Code Meaning": "Aortic arch", + "Body Part Examined": "AORTICARCH", + "SNOMED-RT ID (Retired)": "T-42300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128551005", + "Code Meaning": "Aortic fistula", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D3-81922", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128564006", + "Code Meaning": "Apex of left ventricle", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-32602", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "86598002", + "Code Meaning": "Apex of Lung", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-280A0", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128565007", + "Code Meaning": "Apex of right ventricle", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-32502", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "66754008", + "Code Meaning": "Appendix", + "Body Part Examined": "APPENDIX", + "SNOMED-RT ID (Retired)": "T-59200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "51114001", + "Code Meaning": "Artery", + "Body Part Examined": "ARTERY", + "SNOMED-RT ID (Retired)": "T-41000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "54247002", + "Code Meaning": "Ascending aorta", + "Body Part Examined": "ASCAORTA", + "SNOMED-RT ID (Retired)": "T-42100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "9040008", + "Code Meaning": "Ascending colon", + "Body Part Examined": "ASCENDINGCOLON", + "SNOMED-RT ID (Retired)": "T-59420", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "59652004", + "Code Meaning": "Atrium", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-32100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "91470000", + "Code Meaning": "Axilla", + "Body Part Examined": "AXILLA", + "SNOMED-RT ID (Retired)": "T-D8104", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "67937003", + "Code Meaning": "Axillary Artery", + "Body Part Examined": "AXILLARYA", + "SNOMED-RT ID (Retired)": "T-47100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "68705008", + "Code Meaning": "Axillary vein", + "Body Part Examined": "AXILLARYV", + "SNOMED-RT ID (Retired)": "T-49110", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "72107004", + "Code Meaning": "Azygos vein", + "Body Part Examined": "AZYGOSVEIN", + "SNOMED-RT ID (Retired)": "T-48340", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "77568009", + "Code Meaning": "Back", + "Body Part Examined": "BACK", + "SNOMED-RT ID (Retired)": "T-D2100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128981007", + "Code Meaning": "Baffle", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "A-00203", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "59011009", + "Code Meaning": "Basilar artery", + "Body Part Examined": "BASILARA", + "SNOMED-RT ID (Retired)": "T-45800", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "28273000", + "Code Meaning": "Bile duct", + "Body Part Examined": "BILEDUCT", + "SNOMED-RT ID (Retired)": "T-60610", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "89837001", + "Code Meaning": "Bladder", + "Body Part Examined": "BLADDER", + "SNOMED-RT ID (Retired)": "T-74000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "110837003", + "Code Meaning": "Bladder and urethra", + "Body Part Examined": "BLADDERURETHRA", + "SNOMED-RT ID (Retired)": "T-DD123", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "91830000", + "Code Meaning": "Body conduit", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D00AB", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "72001000", + "Code Meaning": "Bone of lower limb", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-12700", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "371195002", + "Code Meaning": "Bone of upper limb", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D0821", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128548003", + "Code Meaning": "Boyd's perforating vein", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-49424", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "17137000", + "Code Meaning": "Brachial artery", + "Body Part Examined": "BRACHIALA", + "SNOMED-RT ID (Retired)": "T-47160", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "20115005", + "Code Meaning": "Brachial vein", + "Body Part Examined": "BRACHIALV", + "SNOMED-RT ID (Retired)": "T-49350", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "12738006", + "Code Meaning": "Brain", + "Body Part Examined": "BRAIN", + "SNOMED-RT ID (Retired)": "T-A0100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "76752008", + "Code Meaning": "Breast", + "Body Part Examined": "BREAST", + "SNOMED-RT ID (Retired)": "T-04000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "34411009", + "Code Meaning": "Broad ligament", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D6500", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "955009", + "Code Meaning": "Bronchus", + "Body Part Examined": "BRONCHUS", + "SNOMED-RT ID (Retired)": "T-26000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "60819002", + "Code Meaning": "Buccal region of face", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D1206", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "46862004", + "Code Meaning": "Buttock", + "Body Part Examined": "BUTTOCK", + "SNOMED-RT ID (Retired)": "T-D2600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "80144004", + "Code Meaning": "Calcaneus", + "Body Part Examined": "CALCANEUS", + "SNOMED-RT ID (Retired)": "T-12770", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "53840002", + "Code Meaning": "Calf of leg", + "Body Part Examined": "CALF", + "SNOMED-RT ID (Retired)": "T-D9440", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "2334006", + "Code Meaning": "Calyx", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-72100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "69105007", + "Code Meaning": "Carotid Artery", + "Body Part Examined": "CAROTID", + "SNOMED-RT ID (Retired)": "T-45010", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "21479005", + "Code Meaning": "Carotid bulb", + "Body Part Examined": "BULB", + "SNOMED-RT ID (Retired)": "T-45170", + "FMA Code Value": 50094, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "57850000", + "Code Meaning": "Celiac artery", + "Body Part Examined": "CELIACA", + "SNOMED-RT ID (Retired)": "T-46400", + "FMA Code Value": 50737, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "20699002", + "Code Meaning": "Cephalic vein", + "Body Part Examined": "CEPHALICV", + "SNOMED-RT ID (Retired)": "T-49240", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "113305005", + "Code Meaning": "Cerebellum", + "Body Part Examined": "CEREBELLUM", + "SNOMED-RT ID (Retired)": "T-A6000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "88556005", + "Code Meaning": "Cerebral artery", + "Body Part Examined": "CEREBRALA", + "SNOMED-RT ID (Retired)": "T-45510", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "372073000", + "Code Meaning": "Cerebral hemisphere", + "Body Part Examined": "CEREBHEMISPHERE", + "SNOMED-RT ID (Retired)": "T-A010F", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "122494005", + "Code Meaning": "Cervical spine", + "Body Part Examined": "CSPINE", + "SNOMED-RT ID (Retired)": "T-11501", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "297171002", + "Code Meaning": "Cervico-thoracic spine", + "Body Part Examined": "CTSPINE", + "SNOMED-RT ID (Retired)": "T-D00F7", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "71252005", + "Code Meaning": "Cervix", + "Body Part Examined": "CERVIX", + "SNOMED-RT ID (Retired)": "T-83200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "60819002", + "Code Meaning": "Cheek", + "Body Part Examined": "CHEEK", + "SNOMED-RT ID (Retired)": "T-D1206", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "43799004", + "Code Meaning": "Chest", + "Body Part Examined": "CHEST", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "416775004", + "Code Meaning": "Chest, Abdomen and Pelvis", + "Body Part Examined": "CHESTABDPELVIS", + "SNOMED-RT ID (Retired)": "R-FAB56", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "416550000", + "Code Meaning": "Chest and Abdomen", + "Body Part Examined": "CHESTABDOMEN", + "SNOMED-RT ID (Retired)": "R-FAB55", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "80621003", + "Code Meaning": "Choroid plexus", + "Body Part Examined": "CHOROIDPLEXUS", + "SNOMED-RT ID (Retired)": "T-A1900", + "FMA Code Value": 61934, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "11279006", + "Code Meaning": "Circle of Willis", + "Body Part Examined": "CIRCLEOFWILLIS", + "SNOMED-RT ID (Retired)": "T-45520", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "51299004", + "Code Meaning": "Clavicle", + "Body Part Examined": "CLAVICLE", + "SNOMED-RT ID (Retired)": "T-12310", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "64688005", + "Code Meaning": "Coccyx", + "Body Part Examined": "COCCYX", + "SNOMED-RT ID (Retired)": "T-11BF0", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "71854001", + "Code Meaning": "Colon", + "Body Part Examined": "COLON", + "SNOMED-RT ID (Retired)": "T-59300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "253276007", + "Code Meaning": "Common atrium", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-31005", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "79741001", + "Code Meaning": "Common bile duct", + "Body Part Examined": "COMMONBILEDUCT", + "SNOMED-RT ID (Retired)": "T-64500", + "FMA Code Value": null, + "UMLS Concept UniqueID": "C0009437" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "32062004", + "Code Meaning": "Common carotid artery", + "Body Part Examined": "CCA", + "SNOMED-RT ID (Retired)": "T-45100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "181347005", + "Code Meaning": "Common femoral artery", + "Body Part Examined": "CFA", + "SNOMED-RT ID (Retired)": "T-47402", + "FMA Code Value": 323778, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "397363009", + "Code Meaning": "Common femoral vein", + "Body Part Examined": "CFV", + "SNOMED-RT ID (Retired)": "G-035B", + "FMA Code Value": 323829, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "73634005", + "Code Meaning": "Common iliac artery", + "Body Part Examined": "COMILIACA", + "SNOMED-RT ID (Retired)": "T-46710", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "46027005", + "Code Meaning": "Common iliac vein", + "Body Part Examined": "COMILIACV", + "SNOMED-RT ID (Retired)": "T-48920", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "45503006", + "Code Meaning": "Common ventricle", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-31120", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128555001", + "Code Meaning": "Congenital coronary artery fistula to left atrium", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-32504", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128556000", + "Code Meaning": "Congenital coronary artery fistula to left ventricle", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-32506", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128557009", + "Code Meaning": "Congenital coronary artery fistula to right atrium", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-32509", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128558004", + "Code Meaning": "Congenital coronary artery fistula to right ventricle", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-32510", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "111289009", + "Code Meaning": "Pulmonary arteriovenous fistula", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D3-40208", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "28726007", + "Code Meaning": "Cornea", + "Body Part Examined": "CORNEA", + "SNOMED-RT ID (Retired)": "T-AA200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "41801008", + "Code Meaning": "Coronary artery", + "Body Part Examined": "CORONARYARTERY", + "SNOMED-RT ID (Retired)": "T-43000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "90219004", + "Code Meaning": "Coronary sinus", + "Body Part Examined": "CORONARYSINUS", + "SNOMED-RT ID (Retired)": "T-48410", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128320002", + "Code Meaning": "Cranial venous system", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-A0191", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "32672002", + "Code Meaning": "Descending aorta", + "Body Part Examined": "DESCAORTA", + "SNOMED-RT ID (Retired)": "T-42400", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "32622004", + "Code Meaning": "Descending colon", + "Body Part Examined": "DESCENDINGCOLON", + "SNOMED-RT ID (Retired)": "T-59460", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128554002", + "Code Meaning": "Dodd's perforating vein", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-49429", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "38848004", + "Code Meaning": "Duodenum", + "Body Part Examined": "DUODENUM", + "SNOMED-RT ID (Retired)": "T-58200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "117590005", + "Code Meaning": "Ear", + "Body Part Examined": "EAR", + "SNOMED-RT ID (Retired)": "T-AB001", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "16953009", + "Code Meaning": "Elbow joint", + "Body Part Examined": "ELBOW", + "SNOMED-RT ID (Retired)": "T-15430", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "51114001", + "Code Meaning": "Endo-arterial", + "Body Part Examined": "ENDOARTERIAL", + "SNOMED-RT ID (Retired)": "T-41000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "80891009", + "Code Meaning": "Endo-cardiac", + "Body Part Examined": "ENDOCARDIAC", + "SNOMED-RT ID (Retired)": "T-32000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "32849002", + "Code Meaning": "Endo-esophageal", + "Body Part Examined": "ENDOESOPHAGEAL", + "SNOMED-RT ID (Retired)": "T-56000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "2739003", + "Code Meaning": "Endometrium", + "Body Part Examined": "ENDOMETRIUM", + "SNOMED-RT ID (Retired)": "T-83400", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "53342003", + "Code Meaning": "Endo-nasal", + "Body Part Examined": "ENDONASAL", + "SNOMED-RT ID (Retired)": "T-21300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "18962004", + "Code Meaning": "Endo-nasopharyngeal", + "Body Part Examined": "ENDONASOPHARYNYX", + "SNOMED-RT ID (Retired)": "T-23050", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "34402009", + "Code Meaning": "Endo-rectal", + "Body Part Examined": "ENDORECTAL", + "SNOMED-RT ID (Retired)": "T-59600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "64033007", + "Code Meaning": "Endo-renal", + "Body Part Examined": "ENDORENAL", + "SNOMED-RT ID (Retired)": "T-71000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "87953007", + "Code Meaning": "Endo-ureteric", + "Body Part Examined": "ENDOURETERIC", + "SNOMED-RT ID (Retired)": "T-73000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "13648007", + "Code Meaning": "Endo-urethral", + "Body Part Examined": "ENDOURETHRAL", + "SNOMED-RT ID (Retired)": "T-75000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "76784001", + "Code Meaning": "Endo-vaginal", + "Body Part Examined": "ENDOVAGINAL", + "SNOMED-RT ID (Retired)": "T-82000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "59820001", + "Code Meaning": "Endo-vascular", + "Body Part Examined": "ENDOVASCULAR", + "SNOMED-RT ID (Retired)": "T-40000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "29092000", + "Code Meaning": "Endo-venous", + "Body Part Examined": "ENDOVENOUS", + "SNOMED-RT ID (Retired)": "T-48000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "48367006", + "Code Meaning": "Endo-vesical", + "Body Part Examined": "ENDOVESICAL", + "SNOMED-RT ID (Retired)": "T-74250", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "38266002", + "Code Meaning": "Entire body", + "Body Part Examined": "WHOLEBODY", + "SNOMED-RT ID (Retired)": "T-D0010", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "87644002", + "Code Meaning": "Epididymis", + "Body Part Examined": "EPIDIDYMIS", + "SNOMED-RT ID (Retired)": "T-95000", + "FMA Code Value": 18255, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "27947004", + "Code Meaning": "Epigastric region", + "Body Part Examined": "EPIGASTRIC", + "SNOMED-RT ID (Retired)": "T-D4200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "32849002", + "Code Meaning": "Esophagus", + "Body Part Examined": "ESOPHAGUS", + "SNOMED-RT ID (Retired)": "T-56000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "110861005", + "Code Meaning": "Esophagus, stomach and duodenum", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-DD163", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "84301002", + "Code Meaning": "External auditory canal", + "Body Part Examined": "EAC", + "SNOMED-RT ID (Retired)": "T-AB200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "22286001", + "Code Meaning": "External carotid artery", + "Body Part Examined": "ECA", + "SNOMED-RT ID (Retired)": "T-45200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "113269004", + "Code Meaning": "External iliac artery", + "Body Part Examined": "EXTILIACA", + "SNOMED-RT ID (Retired)": "T-46910", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "63507001", + "Code Meaning": "External iliac vein", + "Body Part Examined": "EXTILIACV", + "SNOMED-RT ID (Retired)": "T-48930", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "71585003", + "Code Meaning": "External jugular vein", + "Body Part Examined": "EXTJUGV", + "SNOMED-RT ID (Retired)": "T-48160", + "FMA Code Value": 13110, + "UMLS Concept UniqueID": "C0226543" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "66019005", + "Code Meaning": "Extremity", + "Body Part Examined": "EXTREMITY", + "SNOMED-RT ID (Retired)": "T-D0300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "81745001", + "Code Meaning": "Eye", + "Body Part Examined": "EYE", + "SNOMED-RT ID (Retired)": "T-AA000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "80243003", + "Code Meaning": "Eyelid", + "Body Part Examined": "EYELID", + "SNOMED-RT ID (Retired)": "T-AA810", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "371398005", + "Code Meaning": "Eye region", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D0801", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "89545001", + "Code Meaning": "Face", + "Body Part Examined": "FACE", + "SNOMED-RT ID (Retired)": "T-D1200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "23074001", + "Code Meaning": "Facial artery", + "Body Part Examined": "FACIALA", + "SNOMED-RT ID (Retired)": "T-45240", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "91397008", + "Code Meaning": "Facial bones", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-11196", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "7657000", + "Code Meaning": "Femoral artery", + "Body Part Examined": "FEMORALA", + "SNOMED-RT ID (Retired)": "T-47400", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "83419000", + "Code Meaning": "Femoral vein", + "Body Part Examined": "FEMORALV", + "SNOMED-RT ID (Retired)": "T-49410", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "71341001", + "Code Meaning": "Femur", + "Body Part Examined": "FEMUR", + "SNOMED-RT ID (Retired)": "T-12710", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "", + "Code Value": "", + "Code Meaning": "Fetal arm", + "Body Part Examined": "FETALARM", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "", + "Code Value": "", + "Code Meaning": "Fetal digit", + "Body Part Examined": "FETALDIGIT", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "", + "Code Value": "", + "Code Meaning": "Fetal heart", + "Body Part Examined": "FETALHEART", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": 63931, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "", + "Code Value": "", + "Code Meaning": "Fetal leg", + "Body Part Examined": "FETALLEG", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "", + "Code Value": "", + "Code Meaning": "Fetal pole", + "Body Part Examined": "FETALPOLE", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "87342007", + "Code Meaning": "Fibula", + "Body Part Examined": "FIBULA", + "SNOMED-RT ID (Retired)": "T-12750", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "7569003", + "Code Meaning": "Finger", + "Body Part Examined": "FINGER", + "SNOMED-RT ID (Retired)": "T-D8800", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "58602004", + "Code Meaning": "Flank", + "Body Part Examined": "FLANK", + "SNOMED-RT ID (Retired)": "T-D2310", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "79361005", + "Code Meaning": "Fontanel of skull", + "Body Part Examined": "FONTANEL", + "SNOMED-RT ID (Retired)": "T-15200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "56459004", + "Code Meaning": "Foot", + "Body Part Examined": "FOOT", + "SNOMED-RT ID (Retired)": "T-D9700", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "14975008", + "Code Meaning": "Forearm", + "Body Part Examined": "FOREARM", + "SNOMED-RT ID (Retired)": "T-D8500", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "35918002", + "Code Meaning": "Fourth ventricle", + "Body Part Examined": "4THVENTRICLE", + "SNOMED-RT ID (Retired)": "T-A1820", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "28231008", + "Code Meaning": "Gallbladder", + "Body Part Examined": "GALLBLADDER", + "SNOMED-RT ID (Retired)": "T-63000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "110568007", + "Code Meaning": "Gastric vein", + "Body Part Examined": "GASTRICV", + "SNOMED-RT ID (Retired)": "T-48820", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128559007", + "Code Meaning": "Genicular artery", + "Body Part Examined": "GENICULARA", + "SNOMED-RT ID (Retired)": "T-47490", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "300571009", + "Code Meaning": "Gestational sac", + "Body Part Examined": "GESTSAC", + "SNOMED-RT ID (Retired)": "F-03FC9", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "46862004", + "Code Meaning": "Gluteal region", + "Body Part Examined": "GLUTEAL", + "SNOMED-RT ID (Retired)": "T-D2600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "5928000", + "Code Meaning": "Great cardiac vein", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-48420", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "60734001", + "Code Meaning": "Great saphenous vein", + "Body Part Examined": "GSV", + "SNOMED-RT ID (Retired)": "T-49530", + "FMA Code Value": 21376, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "85562004", + "Code Meaning": "Hand", + "Body Part Examined": "HAND", + "SNOMED-RT ID (Retired)": "T-D8700", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "69536005", + "Code Meaning": "Head", + "Body Part Examined": "HEAD", + "SNOMED-RT ID (Retired)": "T-D1100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "774007", + "Code Meaning": "Head and Neck", + "Body Part Examined": "HEADNECK", + "SNOMED-RT ID (Retired)": "T-D1000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "80891009", + "Code Meaning": "Heart", + "Body Part Examined": "HEART", + "SNOMED-RT ID (Retired)": "T-32000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "76015000", + "Code Meaning": "Hepatic artery", + "Body Part Examined": "HEPATICA", + "SNOMED-RT ID (Retired)": "T-46420", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "8993003", + "Code Meaning": "Hepatic vein", + "Body Part Examined": "HEPATICV", + "SNOMED-RT ID (Retired)": "T-48720", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "24136001", + "Code Meaning": "Hip joint", + "Body Part Examined": "HIP", + "SNOMED-RT ID (Retired)": "T-15710", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "85050009", + "Code Meaning": "Humerus", + "Body Part Examined": "HUMERUS", + "SNOMED-RT ID (Retired)": "T-12410", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128560002", + "Code Meaning": "Hunterian perforating vein", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-4942A", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "11708003", + "Code Meaning": "Hypogastric region", + "Body Part Examined": "HYPOGASTRIC", + "SNOMED-RT ID (Retired)": "T-D4240", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "81502006", + "Code Meaning": "Hypopharynx", + "Body Part Examined": "HYPOPHARYNX", + "SNOMED-RT ID (Retired)": "T-55300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "34516001", + "Code Meaning": "Ileum", + "Body Part Examined": "ILEUM", + "SNOMED-RT ID (Retired)": "T-58600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "299716001", + "Code Meaning": "Iliac and/or femoral artery", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-41068", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "10293006", + "Code Meaning": "Iliac artery", + "Body Part Examined": "ILIACA", + "SNOMED-RT ID (Retired)": "T-46700", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "244411005", + "Code Meaning": "Iliac vein", + "Body Part Examined": "ILIACV", + "SNOMED-RT ID (Retired)": "T-4940E", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "22356005", + "Code Meaning": "Ilium", + "Body Part Examined": "ILIUM", + "SNOMED-RT ID (Retired)": "T-12340", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "195416006", + "Code Meaning": "Inferior cardiac vein", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-484A4", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "51249003", + "Code Meaning": "Inferior left pulmonary vein", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-48540", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "33795007", + "Code Meaning": "Inferior mesenteric artery", + "Body Part Examined": "INFMESA", + "SNOMED-RT ID (Retired)": "T-46520", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "113273001", + "Code Meaning": "Inferior right pulmonary vein", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-48520", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "64131007", + "Code Meaning": "Inferior vena cava", + "Body Part Examined": "INFVENACAVA", + "SNOMED-RT ID (Retired)": "T-48710", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "26893007", + "Code Meaning": "Inguinal region", + "Body Part Examined": "INGUINAL", + "SNOMED-RT ID (Retired)": "T-D7000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "12691009", + "Code Meaning": "Innominate artery", + "Body Part Examined": "INNOMINATEA", + "SNOMED-RT ID (Retired)": "T-46010", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "8887007", + "Code Meaning": "Innominate vein", + "Body Part Examined": "INNOMINATEV", + "SNOMED-RT ID (Retired)": "T-48620", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "361078006", + "Code Meaning": "Internal Auditory Canal", + "Body Part Examined": "IAC", + "SNOMED-RT ID (Retired)": "T-AB959", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "86117002", + "Code Meaning": "Internal carotid artery", + "Body Part Examined": "ICA", + "SNOMED-RT ID (Retired)": "T-45300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "90024005", + "Code Meaning": "Internal iliac artery", + "Body Part Examined": "INTILIACA", + "SNOMED-RT ID (Retired)": "T-46740", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "12123001", + "Code Meaning": "Internal jugular vein", + "Body Part Examined": "INTJUGULARV", + "SNOMED-RT ID (Retired)": "T-48170", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "69327007", + "Code Meaning": "Internal mammary artery", + "Body Part Examined": "INTMAMMARYA", + "SNOMED-RT ID (Retired)": "T-46200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "818987002", + "Code Meaning": "Intra-abdominopelvic", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "131183008", + "Code Meaning": "Intra-articular", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "G-A15A", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "1101003", + "Code Meaning": "Intracranial", + "Body Part Examined": "INTRACRANIAL", + "SNOMED-RT ID (Retired)": "T-D1400", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "32849002", + "Code Meaning": "Intra-esophageal", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-56000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "816989007", + "Code Meaning": "Intra-pelvic", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "43799004", + "Code Meaning": "Intra-thoracic", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "661005", + "Code Meaning": "Jaw region", + "Body Part Examined": "JAW", + "SNOMED-RT ID (Retired)": "T-D1213", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "21306003", + "Code Meaning": "Jejunum", + "Body Part Examined": "JEJUNUM", + "SNOMED-RT ID (Retired)": "T-58400", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "39352004", + "Code Meaning": "Joint", + "Body Part Examined": "JOINT", + "SNOMED-RT ID (Retired)": "T-15001", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128563000", + "Code Meaning": "Juxtaposed atrial appendage", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-31052", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "64033007", + "Code Meaning": "Kidney", + "Body Part Examined": "KIDNEY", + "SNOMED-RT ID (Retired)": "T-71000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "72696002", + "Code Meaning": "Knee", + "Body Part Examined": "KNEE", + "SNOMED-RT ID (Retired)": "T-D9200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "59749000", + "Code Meaning": "Lacrimal artery", + "Body Part Examined": "LACRIMALA", + "SNOMED-RT ID (Retired)": "T-45410", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128979005", + "Code Meaning": "Lacrimal artery of right eye", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-45416", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "14742008", + "Code Meaning": "Large intestine", + "Body Part Examined": "LARGEINTESTINE", + "SNOMED-RT ID (Retired)": "T-59000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "4596009", + "Code Meaning": "Larynx", + "Body Part Examined": "LARYNX", + "SNOMED-RT ID (Retired)": "T-24100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "66720007", + "Code Meaning": "Lateral Ventricle", + "Body Part Examined": "LATVENTRICLE", + "SNOMED-RT ID (Retired)": "T-A1650", + "FMA Code Value": 78448, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "82471001", + "Code Meaning": "Left atrium", + "Body Part Examined": "LATRIUM", + "SNOMED-RT ID (Retired)": "T-32300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "33626005", + "Code Meaning": "Left auricular appendage", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-32310", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "113270003", + "Code Meaning": "Left femoral artery", + "Body Part Examined": "LFEMORALA", + "SNOMED-RT ID (Retired)": "T-47420", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "273202007", + "Code Meaning": "Left hepatic vein", + "Body Part Examined": "LHEPATICV", + "SNOMED-RT ID (Retired)": "T-48727", + "FMA Code Value": 14339, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "133945003", + "Code Meaning": "Left hypochondriac region", + "Body Part Examined": "LHYPOCHONDRIAC", + "SNOMED-RT ID (Retired)": "T-D4211", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "85119005", + "Code Meaning": "Left inguinal region", + "Body Part Examined": "LINGUINAL", + "SNOMED-RT ID (Retired)": "T-D7020", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "68505006", + "Code Meaning": "Left lower quadrant of abdomen", + "Body Part Examined": "LLQ", + "SNOMED-RT ID (Retired)": "T-D4140", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "133943005", + "Code Meaning": "Left lumbar region", + "Body Part Examined": "LLUMBAR", + "SNOMED-RT ID (Retired)": "T-D2340", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "70253006", + "Code Meaning": "Left portal vein", + "Body Part Examined": "LPORTALV", + "SNOMED-RT ID (Retired)": "T-48814", + "FMA Code Value": 15415, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "50408007", + "Code Meaning": "Left pulmonary artery", + "Body Part Examined": "LPULMONARYA", + "SNOMED-RT ID (Retired)": "T-44400", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "86367003", + "Code Meaning": "Left upper quadrant of abdomen", + "Body Part Examined": "LUQ", + "SNOMED-RT ID (Retired)": "T-D4130", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "87878005", + "Code Meaning": "Left ventricle", + "Body Part Examined": "LVENTRICLE", + "SNOMED-RT ID (Retired)": "T-32600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "70238003", + "Code Meaning": "Left ventricle inflow", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-32640", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "13418002", + "Code Meaning": "Left ventricle outflow tract", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-32650", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "113264009", + "Code Meaning": "Lingual artery", + "Body Part Examined": "LINGUALA", + "SNOMED-RT ID (Retired)": "T-45230", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "10200004", + "Code Meaning": "Liver", + "Body Part Examined": "LIVER", + "SNOMED-RT ID (Retired)": "T-62000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "19100000", + "Code Meaning": "Lower inner quadrant of breast", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-04003", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "30021000", + "Code Meaning": "Lower leg", + "Body Part Examined": "LEG", + "SNOMED-RT ID (Retired)": "T-D9400", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "61685007", + "Code Meaning": "Lower limb", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D9000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "33564002", + "Code Meaning": "Lower outer quadrant of breast", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-04005", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "34635009", + "Code Meaning": "Lumbar artery", + "Body Part Examined": "LUMBARA", + "SNOMED-RT ID (Retired)": "T-46960", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "52612000", + "Code Meaning": "Lumbar region", + "Body Part Examined": "LUMBAR", + "SNOMED-RT ID (Retired)": "T-D2300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "122496007", + "Code Meaning": "Lumbar spine", + "Body Part Examined": "LSPINE", + "SNOMED-RT ID (Retired)": "T-11503", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "297173004", + "Code Meaning": "Lumbo-sacral spine", + "Body Part Examined": "LSSPINE", + "SNOMED-RT ID (Retired)": "T-D00F9", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "91747007", + "Code Meaning": "Lumen of blood vessel", + "Body Part Examined": "LUMEN", + "SNOMED-RT ID (Retired)": "T-40230", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "39607008", + "Code Meaning": "Lung", + "Body Part Examined": "LUNG", + "SNOMED-RT ID (Retired)": "T-28000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "91609006", + "Code Meaning": "Mandible", + "Body Part Examined": "JAW", + "SNOMED-RT ID (Retired)": "T-11180", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "59066005", + "Code Meaning": "Mastoid bone", + "Body Part Examined": "MASTOID", + "SNOMED-RT ID (Retired)": "T-11133", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "70925003", + "Code Meaning": "Maxilla", + "Body Part Examined": "MAXILLA", + "SNOMED-RT ID (Retired)": "T-11170", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "72410000", + "Code Meaning": "Mediastinum", + "Body Part Examined": "MEDIASTINUM", + "SNOMED-RT ID (Retired)": "T-D3300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "86570000", + "Code Meaning": "Mesenteric artery", + "Body Part Examined": "MESENTRICA", + "SNOMED-RT ID (Retired)": "T-46500", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128583004", + "Code Meaning": "Mesenteric vein", + "Body Part Examined": "MESENTRICV", + "SNOMED-RT ID (Retired)": "T-4884A", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "17232002", + "Code Meaning": "Middle cerebral artery", + "Body Part Examined": "MCA", + "SNOMED-RT ID (Retired)": "T-45600", + "FMA Code Value": 50079, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "273099000", + "Code Meaning": "Middle hepatic vein", + "Body Part Examined": "MIDHEPATICV", + "SNOMED-RT ID (Retired)": "T-48726", + "FMA Code Value": 14340, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "243977002", + "Code Meaning": "Morisons pouch", + "Body Part Examined": "MORISONSPOUCH", + "SNOMED-RT ID (Retired)": "T-D4434", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "123851003", + "Code Meaning": "Mouth", + "Body Part Examined": "MOUTH", + "SNOMED-RT ID (Retired)": "T-D0662", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "102292000", + "Code Meaning": "Muscle of lower limb", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-14668", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "30608006", + "Code Meaning": "Muscle of upper limb", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-13600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "74386004", + "Code Meaning": "Nasal bone", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-11149", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "360955006", + "Code Meaning": "Nasopharynx", + "Body Part Examined": "NASOPHARYNX", + "SNOMED-RT ID (Retired)": "T-2300C", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "45048000", + "Code Meaning": "Neck", + "Body Part Examined": "NECK", + "SNOMED-RT ID (Retired)": "T-D1600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "416319003", + "Code Meaning": "Neck, Chest, Abdomen and Pelvis", + "Body Part Examined": "NECKCHESTABDPELV", + "SNOMED-RT ID (Retired)": "R-FAB54", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "416152001", + "Code Meaning": "Neck, Chest and Abdomen", + "Body Part Examined": "NECKCHESTABDOMEN", + "SNOMED-RT ID (Retired)": "R-FAB53", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "417437006", + "Code Meaning": "Neck and Chest", + "Body Part Examined": "NECKCHEST", + "SNOMED-RT ID (Retired)": "R-FAB52", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "45206002", + "Code Meaning": "Nose", + "Body Part Examined": "NOSE", + "SNOMED-RT ID (Retired)": "T-21000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "31145008", + "Code Meaning": "Occipital artery", + "Body Part Examined": "OCCPITALA", + "SNOMED-RT ID (Retired)": "T-45250", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "32114007", + "Code Meaning": "Occipital vein", + "Body Part Examined": "OCCIPTALV", + "SNOMED-RT ID (Retired)": "T-48214", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "113346000", + "Code Meaning": "Omental bursa", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D4450", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "27398004", + "Code Meaning": "Omentum", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D4600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "53549008", + "Code Meaning": "Ophthalmic artery", + "Body Part Examined": "OPHTHALMICA", + "SNOMED-RT ID (Retired)": "T-45400", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "55024004", + "Code Meaning": "Optic canal", + "Body Part Examined": "OPTICCANAL", + "SNOMED-RT ID (Retired)": "T-11102", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "363654007", + "Code Meaning": "Orbital structure", + "Body Part Examined": "ORBIT", + "SNOMED-RT ID (Retired)": "T-D14AE", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "15497006", + "Code Meaning": "Ovary", + "Body Part Examined": "OVARY", + "SNOMED-RT ID (Retired)": "T-87000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "15776009", + "Code Meaning": "Pancreas", + "Body Part Examined": "PANCREAS", + "SNOMED-RT ID (Retired)": "T-65000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "69930009", + "Code Meaning": "Pancreatic duct", + "Body Part Examined": "PANCREATICDUCT", + "SNOMED-RT ID (Retired)": "T-65010", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "110621006", + "Code Meaning": "Pancreatic duct and bile duct systems", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-65600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "2095001", + "Code Meaning": "Paranasal sinus", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-22000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "91691001", + "Code Meaning": "Parasternal", + "Body Part Examined": "PARASTERNAL", + "SNOMED-RT ID (Retired)": "T-D3136", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "111002", + "Code Meaning": "Parathyroid", + "Body Part Examined": "PARATHYROID", + "SNOMED-RT ID (Retired)": "T-B7000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "45289007", + "Code Meaning": "Parotid gland", + "Body Part Examined": "PAROTID", + "SNOMED-RT ID (Retired)": "T-61100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "64234005", + "Code Meaning": "Patella", + "Body Part Examined": "PATELLA", + "SNOMED-RT ID (Retired)": "T-12730", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "83330001", + "Code Meaning": "Patent ductus arteriosus", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-32012", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "816092008", + "Code Meaning": "Pelvis", + "Body Part Examined": "PELVIS", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "416631005", + "Code Meaning": "Pelvis and lower extremities", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "R-FAB58", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "282044005", + "Code Meaning": "Penile artery", + "Body Part Examined": "PENILEA", + "SNOMED-RT ID (Retired)": "T-46807", + "FMA Code Value": 66318, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "18911002", + "Code Meaning": "Penis", + "Body Part Examined": "PENIS", + "SNOMED-RT ID (Retired)": "T-91000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "38864007", + "Code Meaning": "Perineum", + "Body Part Examined": "PERINEUM", + "SNOMED-RT ID (Retired)": "T-D2700", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "8821006", + "Code Meaning": "Peroneal artery", + "Body Part Examined": "PERONEALA", + "SNOMED-RT ID (Retired)": "T-47630", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "DCM", + "Code Value": "113681", + "Code Meaning": "Phantom", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "54066008", + "Code Meaning": "Pharynx", + "Body Part Examined": "PHARYNX", + "SNOMED-RT ID (Retired)": "T-55000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "312535008", + "Code Meaning": "Pharynx and larynx", + "Body Part Examined": "PHARYNXLARYNX", + "SNOMED-RT ID (Retired)": "T-20101", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "78067005", + "Code Meaning": "Placenta", + "Body Part Examined": "PLACENTA", + "SNOMED-RT ID (Retired)": "T-F1100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "43899006", + "Code Meaning": "Popliteal artery", + "Body Part Examined": "POPLITEALA", + "SNOMED-RT ID (Retired)": "T-47500", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "32361000", + "Code Meaning": "Popliteal fossa", + "Body Part Examined": "POPLITEALFOSSA", + "SNOMED-RT ID (Retired)": "T-D9310", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "56849005", + "Code Meaning": "Popliteal vein", + "Body Part Examined": "POPLITEALV", + "SNOMED-RT ID (Retired)": "T-49650", + "FMA Code Value": 44327, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "32764006", + "Code Meaning": "Portal vein", + "Body Part Examined": "PORTALV", + "SNOMED-RT ID (Retired)": "T-48810", + "FMA Code Value": 66645, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "70382005", + "Code Meaning": "Posterior cerebral artery", + "Body Part Examined": "PCA", + "SNOMED-RT ID (Retired)": "T-45900", + "FMA Code Value": 50583, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "43119007", + "Code Meaning": "Posterior communicating artery", + "Body Part Examined": "POSCOMMA", + "SNOMED-RT ID (Retired)": "T-45320", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128569001", + "Code Meaning": "Posterior medial tributary", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-49535", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "13363002", + "Code Meaning": "Posterior tibial artery", + "Body Part Examined": "POSTIBIALA", + "SNOMED-RT ID (Retired)": "T-47600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "14944004", + "Code Meaning": "Primitive aorta", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-F7001", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "91707000", + "Code Meaning": "Primitive pulmonary artery", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-F7040", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "31677005", + "Code Meaning": "Profunda femoris artery", + "Body Part Examined": "PROFFEMA", + "SNOMED-RT ID (Retired)": "T-47440", + "FMA Code Value": 20741, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "23438002", + "Code Meaning": "Profunda femoris vein", + "Body Part Examined": "PROFFEMV", + "SNOMED-RT ID (Retired)": "T-49660", + "FMA Code Value": 51041, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "41216001", + "Code Meaning": "Prostate", + "Body Part Examined": "PROSTATE", + "SNOMED-RT ID (Retired)": "T-92000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "81040000", + "Code Meaning": "Pulmonary artery", + "Body Part Examined": "PULMONARYA", + "SNOMED-RT ID (Retired)": "T-44000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128584005", + "Code Meaning": "Pulmonary artery conduit", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-33142", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128586007", + "Code Meaning": "Pulmonary chamber of cor triatriatum", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-32190", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "122972007", + "Code Meaning": "Pulmonary vein", + "Body Part Examined": "PULMONARYV", + "SNOMED-RT ID (Retired)": "T-48581", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128566008", + "Code Meaning": "Pulmonary vein confluence", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-33512", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128567004", + "Code Meaning": "Pulmonary venous atrium", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-33514", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "45631007", + "Code Meaning": "Radial artery", + "Body Part Examined": "RADIALA", + "SNOMED-RT ID (Retired)": "T-47300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "62413002", + "Code Meaning": "Radius", + "Body Part Examined": "RADIUS", + "SNOMED-RT ID (Retired)": "T-12420", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "110535000", + "Code Meaning": "Radius and ulna", + "Body Part Examined": "RADIUSULNA", + "SNOMED-RT ID (Retired)": "T-12403", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "53843000", + "Code Meaning": "Rectouterine pouch", + "Body Part Examined": "CULDESAC", + "SNOMED-RT ID (Retired)": "T-D6407", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "34402009", + "Code Meaning": "Rectum", + "Body Part Examined": "RECTUM", + "SNOMED-RT ID (Retired)": "T-59600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "2841007", + "Code Meaning": "Renal artery", + "Body Part Examined": "RENALA", + "SNOMED-RT ID (Retired)": "T-46600", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "25990002", + "Code Meaning": "Renal pelvis", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-72000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "56400007", + "Code Meaning": "Renal vein", + "Body Part Examined": "RENALV", + "SNOMED-RT ID (Retired)": "T-48740", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "82849001", + "Code Meaning": "Retroperitoneum", + "Body Part Examined": "RETROPERITONEUM", + "SNOMED-RT ID (Retired)": "T-D4900", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "113197003", + "Code Meaning": "Rib", + "Body Part Examined": "RIB", + "SNOMED-RT ID (Retired)": "T-11300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "73829009", + "Code Meaning": "Right atrium", + "Body Part Examined": "RATRIUM", + "SNOMED-RT ID (Retired)": "T-32200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "68300000", + "Code Meaning": "Right auricular appendage", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-32210", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "69833005", + "Code Meaning": "Right femoral artery", + "Body Part Examined": "RFEMORALA", + "SNOMED-RT ID (Retired)": "T-47410", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "272998002", + "Code Meaning": "Right hepatic vein", + "Body Part Examined": "RHEPATICV", + "SNOMED-RT ID (Retired)": "T-48725", + "FMA Code Value": 14338, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "133946002", + "Code Meaning": "Right hypochondriac region", + "Body Part Examined": "RHYPOCHONDRIAC", + "SNOMED-RT ID (Retired)": "T-D4212", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "37117007", + "Code Meaning": "Right inguinal region", + "Body Part Examined": "RINGUINAL", + "SNOMED-RT ID (Retired)": "T-D7010", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "48544008", + "Code Meaning": "Right lower quadrant of abdomen", + "Body Part Examined": "RLQ", + "SNOMED-RT ID (Retired)": "T-D4120", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "133944004", + "Code Meaning": "Right lumbar region", + "Body Part Examined": "RLUMBAR", + "SNOMED-RT ID (Retired)": "T-D2342", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "73931004", + "Code Meaning": "Right portal vein", + "Body Part Examined": "RPORTALV", + "SNOMED-RT ID (Retired)": "T-48813", + "FMA Code Value": 15414, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "78480002", + "Code Meaning": "Right pulmonary artery", + "Body Part Examined": "RPULMONARYA", + "SNOMED-RT ID (Retired)": "T-44200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "50519007", + "Code Meaning": "Right upper quadrant of abdomen", + "Body Part Examined": "RUQ", + "SNOMED-RT ID (Retired)": "T-D4110", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "53085002", + "Code Meaning": "Right ventricle", + "Body Part Examined": "RVENTRICLE", + "SNOMED-RT ID (Retired)": "T-32500", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "8017000", + "Code Meaning": "Right ventricle inflow", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-32540", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "44627009", + "Code Meaning": "Right ventricle outflow tract", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-32550", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "39723000", + "Code Meaning": "Sacroiliac joint", + "Body Part Examined": "SIJOINT", + "SNOMED-RT ID (Retired)": "T-15680", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "54735007", + "Code Meaning": "Sacrum", + "Body Part Examined": "SSPINE", + "SNOMED-RT ID (Retired)": "T-11AD0", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128587003", + "Code Meaning": "Saphenofemoral junction", + "Body Part Examined": "SFJ", + "SNOMED-RT ID (Retired)": "T-D930A", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "362072009", + "Code Meaning": "Saphenous vein", + "Body Part Examined": "SAPHENOUSV", + "SNOMED-RT ID (Retired)": "T-4940B", + "FMA Code Value": null, + "UMLS Concept UniqueID": "C0036186" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "41695006", + "Code Meaning": "Scalp", + "Body Part Examined": "SCALP", + "SNOMED-RT ID (Retired)": "T-D1160", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "79601000", + "Code Meaning": "Scapula", + "Body Part Examined": "SCAPULA", + "SNOMED-RT ID (Retired)": "T-12280", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "18619003", + "Code Meaning": "Sclera", + "Body Part Examined": "SCLERA", + "SNOMED-RT ID (Retired)": "T-AA110", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "20233005", + "Code Meaning": "Scrotum", + "Body Part Examined": "SCROTUM", + "SNOMED-RT ID (Retired)": "T-98000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "42575006", + "Code Meaning": "Sella turcica", + "Body Part Examined": "SELLA", + "SNOMED-RT ID (Retired)": "T-D1460", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "64739004", + "Code Meaning": "Seminal vesicle", + "Body Part Examined": "SEMVESICLE", + "SNOMED-RT ID (Retired)": "T-93000", + "FMA Code Value": 19386, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "58742003", + "Code Meaning": "Sesamoid bones of foot", + "Body Part Examined": "SESAMOID", + "SNOMED-RT ID (Retired)": "T-12980", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "16982005", + "Code Meaning": "Shoulder", + "Body Part Examined": "SHOULDER", + "SNOMED-RT ID (Retired)": "T-D2220", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "60184004", + "Code Meaning": "Sigmoid colon", + "Body Part Examined": "SIGMOID", + "SNOMED-RT ID (Retired)": "T-59470", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "89546000", + "Code Meaning": "Skull", + "Body Part Examined": "SKULL", + "SNOMED-RT ID (Retired)": "T-11100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "30315005", + "Code Meaning": "Small intestine", + "Body Part Examined": "SMALLINTESTINE", + "SNOMED-RT ID (Retired)": "T-58000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "2748008", + "Code Meaning": "Spinal cord", + "Body Part Examined": "SPINALCORD", + "SNOMED-RT ID (Retired)": "T-A7010", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "421060004", + "Code Meaning": "Spine", + "Body Part Examined": "SPINE", + "SNOMED-RT ID (Retired)": "T-D04FF", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "78961009", + "Code Meaning": "Spleen", + "Body Part Examined": "SPLEEN", + "SNOMED-RT ID (Retired)": "T-C3000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "22083002", + "Code Meaning": "Splenic artery", + "Body Part Examined": "SPLENICA", + "SNOMED-RT ID (Retired)": "T-46460", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "35819009", + "Code Meaning": "Splenic vein", + "Body Part Examined": "SPLENICV", + "SNOMED-RT ID (Retired)": "T-48890", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "7844006", + "Code Meaning": "Sternoclavicular joint", + "Body Part Examined": "SCJOINT", + "SNOMED-RT ID (Retired)": "T-15610", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "56873002", + "Code Meaning": "Sternum", + "Body Part Examined": "STERNUM", + "SNOMED-RT ID (Retired)": "T-11210", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "69695003", + "Code Meaning": "Stomach", + "Body Part Examined": "STOMACH", + "SNOMED-RT ID (Retired)": "T-57000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "36765005", + "Code Meaning": "Subclavian artery", + "Body Part Examined": "SUBCLAVIANA", + "SNOMED-RT ID (Retired)": "T-46100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "9454009", + "Code Meaning": "Subclavian vein", + "Body Part Examined": "SUBCLAVIANV", + "SNOMED-RT ID (Retired)": "T-48330", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "19695001", + "Code Meaning": "Subcostal", + "Body Part Examined": "SUBCOSTAL", + "SNOMED-RT ID (Retired)": "T-D4210", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "5713008", + "Code Meaning": "Submandibular area", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D1603", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "54019009", + "Code Meaning": "Submandibular gland", + "Body Part Examined": "SUBMANDIBULAR", + "SNOMED-RT ID (Retired)": "T-61300", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "170887008", + "Code Meaning": "Submental", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D161E", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "5076001", + "Code Meaning": "Subxiphoid", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D3213", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "181349008", + "Code Meaning": "Superficial femoral artery", + "Body Part Examined": "SFA", + "SNOMED-RT ID (Retired)": "T-47403", + "FMA Code Value": 323777, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "397364003", + "Code Meaning": "Superficial femoral vein", + "Body Part Examined": "SFV", + "SNOMED-RT ID (Retired)": "G-035A", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "15672000", + "Code Meaning": "Superficial temporal artery", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-45270", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "43863001", + "Code Meaning": "Superior left pulmonary vein", + "Body Part Examined": "LSUPPULMONARYV", + "SNOMED-RT ID (Retired)": "T-48530", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "42258001", + "Code Meaning": "Superior mesenteric artery", + "Body Part Examined": "SMA", + "SNOMED-RT ID (Retired)": "T-46510", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "8629005", + "Code Meaning": "Superior right pulmonary vein", + "Body Part Examined": "RSUPPULMONARYV", + "SNOMED-RT ID (Retired)": "T-48510", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "72021004", + "Code Meaning": "Superior thyroid artery", + "Body Part Examined": "SUPTHYROIDA", + "SNOMED-RT ID (Retired)": "T-45210", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "48345005", + "Code Meaning": "Superior vena cava", + "Body Part Examined": "SVC", + "SNOMED-RT ID (Retired)": "T-48610", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "77621008", + "Code Meaning": "Supraclavicular region of neck", + "Body Part Examined": "SUPRACLAVICULAR", + "SNOMED-RT ID (Retired)": "T-D1620", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "11708003", + "Code Meaning": "Suprapubic region", + "Body Part Examined": "SUPRAPUBIC", + "SNOMED-RT ID (Retired)": "T-D4240", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "26493002", + "Code Meaning": "Suprasternal notch", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-11218", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128589000", + "Code Meaning": "Systemic collateral artery to lung", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-44007", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "128568009", + "Code Meaning": "Systemic venous atrium", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-33516", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "27949001", + "Code Meaning": "Tarsal joint", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-15770", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "53620006", + "Code Meaning": "Temporomandibular joint", + "Body Part Examined": "TMJ", + "SNOMED-RT ID (Retired)": "T-15290", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "40689003", + "Code Meaning": "Testis", + "Body Part Examined": "TESTIS", + "SNOMED-RT ID (Retired)": "T-94000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "42695009", + "Code Meaning": "Thalamus", + "Body Part Examined": "THALAMUS", + "SNOMED-RT ID (Retired)": "T-A4000", + "FMA Code Value": 62007, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "68367000", + "Code Meaning": "Thigh", + "Body Part Examined": "THIGH", + "SNOMED-RT ID (Retired)": "T-D9100", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "49841001", + "Code Meaning": "Third ventricle", + "Body Part Examined": "3RDVENTRICLE", + "SNOMED-RT ID (Retired)": "T-A1740", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "113262008", + "Code Meaning": "Thoracic aorta", + "Body Part Examined": "THORACICAORTA", + "SNOMED-RT ID (Retired)": "T-42070", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "122495006", + "Code Meaning": "Thoracic spine", + "Body Part Examined": "TSPINE", + "SNOMED-RT ID (Retired)": "T-11502", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "297172009", + "Code Meaning": "Thoraco-lumbar spine", + "Body Part Examined": "TLSPINE", + "SNOMED-RT ID (Retired)": "T-D00F8", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "43799004", + "Code Meaning": "Thorax", + "Body Part Examined": "THORAX", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "76505004", + "Code Meaning": "Thumb", + "Body Part Examined": "THUMB", + "SNOMED-RT ID (Retired)": "T-D8810", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "9875009", + "Code Meaning": "Thymus", + "Body Part Examined": "THYMUS", + "SNOMED-RT ID (Retired)": "T-C8000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "69748006", + "Code Meaning": "Thyroid", + "Body Part Examined": "THYROID", + "SNOMED-RT ID (Retired)": "T-B6000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "12611008", + "Code Meaning": "Tibia", + "Body Part Examined": "TIBIA", + "SNOMED-RT ID (Retired)": "T-12740", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "110536004", + "Code Meaning": "Tibia and fibula", + "Body Part Examined": "TIBIAFIBULA", + "SNOMED-RT ID (Retired)": "T-12701", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "29707007", + "Code Meaning": "Toe", + "Body Part Examined": "TOE", + "SNOMED-RT ID (Retired)": "T-D9800", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "21974007", + "Code Meaning": "Tongue", + "Body Part Examined": "TONGUE", + "SNOMED-RT ID (Retired)": "T-53000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "44567001", + "Code Meaning": "Trachea", + "Body Part Examined": "TRACHEA", + "SNOMED-RT ID (Retired)": "T-25000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "110726009", + "Code Meaning": "Trachea and bronchus", + "Body Part Examined": "TRACHEABRONCHUS", + "SNOMED-RT ID (Retired)": "T-DD006", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "485005", + "Code Meaning": "Transverse colon", + "Body Part Examined": "TRANSVERSECOLON", + "SNOMED-RT ID (Retired)": "T-59440", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "61959006", + "Code Meaning": "Truncus arteriosus communis", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "D4-31400", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "57850000", + "Code Meaning": "Truncus coeliacus", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-46400", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "23416004", + "Code Meaning": "Ulna", + "Body Part Examined": "ULNA", + "SNOMED-RT ID (Retired)": "T-12430", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "44984001", + "Code Meaning": "Ulnar artery", + "Body Part Examined": "ULNARA", + "SNOMED-RT ID (Retired)": "T-47200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "50536004", + "Code Meaning": "Umbilical artery", + "Body Part Examined": "UMBILICALA", + "SNOMED-RT ID (Retired)": "T-F1810", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "90290004", + "Code Meaning": "Umbilical region", + "Body Part Examined": "UMBILICAL", + "SNOMED-RT ID (Retired)": "T-D4230", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "284639000", + "Code Meaning": "Umbilical vein", + "Body Part Examined": "UMBILICALV", + "SNOMED-RT ID (Retired)": "T-48832", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "40983000", + "Code Meaning": "Upper arm", + "Body Part Examined": "ARM", + "SNOMED-RT ID (Retired)": "T-D8200", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "77831004", + "Code Meaning": "Upper inner quadrant of breast", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-04002", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "53120007", + "Code Meaning": "Upper limb", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-D8000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "76365002", + "Code Meaning": "Upper outer quadrant of breast", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-04004", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "431491007", + "Code Meaning": "Upper urinary tract", + "Body Part Examined": "UPRURINARYTRACT", + "SNOMED-RT ID (Retired)": "T-7000B", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "87953007", + "Code Meaning": "Ureter", + "Body Part Examined": "URETER", + "SNOMED-RT ID (Retired)": "T-73000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "13648007", + "Code Meaning": "Urethra", + "Body Part Examined": "URETHRA", + "SNOMED-RT ID (Retired)": "T-75000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "35039007", + "Code Meaning": "Uterus", + "Body Part Examined": "UTERUS", + "SNOMED-RT ID (Retired)": "T-83000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "110639002", + "Code Meaning": "Uterus and fallopian tubes", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-88920", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "76784001", + "Code Meaning": "Vagina", + "Body Part Examined": "VAGINA", + "SNOMED-RT ID (Retired)": "T-82000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "118375008", + "Code Meaning": "Vascular graft", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "A-04140", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "29092000", + "Code Meaning": "Vein", + "Body Part Examined": "VEIN", + "SNOMED-RT ID (Retired)": "T-48000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "34340008", + "Code Meaning": "Venous network", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-48003", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "21814001", + "Code Meaning": "Ventricle", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-32400", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "85234005", + "Code Meaning": "Vertebral artery", + "Body Part Examined": "VERTEBRALA", + "SNOMED-RT ID (Retired)": "T-45700", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "110517009", + "Code Meaning": "Vertebral column and cranium", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "T-11011", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "45292006", + "Code Meaning": "Vulva", + "Body Part Examined": "VULVA", + "SNOMED-RT ID (Retired)": "T-81000", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "74670003", + "Code Meaning": "Wrist joint", + "Body Part Examined": "WRIST", + "SNOMED-RT ID (Retired)": "T-15460", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "SCT", + "Code Value": "13881006", + "Code Meaning": "Zygoma", + "Body Part Examined": "ZYGOMA", + "SNOMED-RT ID (Retired)": "T-11166", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.1", + "Code Meaning": "Lung ULL", + "Body Part Examined": "upper lobe left", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.1", + "Code Meaning": "Lung ULL", + "Body Part Examined": "Left upper lobe", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.2", + "Code Meaning": "Lung LLL", + "Body Part Examined": "lower lobe left", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.2", + "Code Meaning": "Lung LLL", + "Body Part Examined": "Left lower lobe", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.3", + "Code Meaning": "Lung ULR", + "Body Part Examined": "upper lobe right", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.3", + "Code Meaning": "Lung ULR", + "Body Part Examined": "Right upper lobe", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.4", + "Code Meaning": "Lung MLR", + "Body Part Examined": "middle lobe right", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.4", + "Code Meaning": "Lung MLR", + "Body Part Examined": "Right middle lobe", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.5", + "Code Meaning": "Lung LLR", + "Body Part Examined": "lower lobe right", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.5", + "Code Meaning": "Lung LLR", + "Body Part Examined": "Right lower lobe", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.6", + "Code Meaning": "Lung ALL", + "Body Part Examined": "accessory lobe left", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.6", + "Code Meaning": "Lung ALL", + "Body Part Examined": "Left accessory lobe", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.7", + "Code Meaning": "Lung ALR", + "Body Part Examined": "accessory lobe right, auch z.B. Lobus V. azygos", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.7", + "Code Meaning": "Lung ALR", + "Body Part Examined": "Right accessory lobe, auch z.B. Lobus V. azygos", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.8", + "Code Meaning": "Lung Left", + "Body Part Examined": "left lung as whole", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.8", + "Code Meaning": "Lung Left", + "Body Part Examined": "lung as whole left", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.9", + "Code Meaning": "Lung Right", + "Body Part Examined": "right lung as whole", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.9", + "Code Meaning": "Lung Right", + "Body Part Examined": "Lung as whole right", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.10", + "Code Meaning": "Trachea and mediastinal Bronchi", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.11", + "Code Meaning": "Intrapulmonary Bronchi", + "Body Part Examined": "Luftwege", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.12", + "Code Meaning": "Vessels", + "Body Part Examined": "Gefäße", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.13", + "Code Meaning": "Mediastinum/Hilus", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.21", + "Code Meaning": "Collapsed lung", + "Body Part Examined": "Ate- und Dystelektasen durch Bronchusverschluss und Kompression", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.22", + "Code Meaning": "Cons Non-Tumor-Associated", + "Body Part Examined": "Pneumonie, Granulome", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.23", + "Code Meaning": "Cons Nec Non-Tumor-Associated", + "Body Part Examined": "Pneumonische Einschmelzung", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.24", + "Code Meaning": "Cons Tumor-Associated", + "Body Part Examined": "Raumforderungen, Metastasen, Noduli", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.25", + "Code Meaning": "Cons Nec Tumor-Associated", + "Body Part Examined": "Tumornekroseareale", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.26", + "Code Meaning": "Cons undefined dignity", + "Body Part Examined": "Konsolidierung / Herd ohne Dignitätsaussage", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.27", + "Code Meaning": "Parenchymal calcification", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.28", + "Code Meaning": "GGO", + "Body Part Examined": "Milchglasareal", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.29", + "Code Meaning": "Emphysema", + "Body Part Examined": "Emphysem inkl. Bullae", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.30", + "Code Meaning": "Reticulation interlobular", + "Body Part Examined": "Zunehmender Fibrose-Schweregrad; interlobulär auch interstitielles Ödem", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.31", + "Code Meaning": "Reticulation intralobular", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.32", + "Code Meaning": "Reticulation w/ architectural destruction", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.33", + "Code Meaning": "Reticulation Honey-combing", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.34", + "Code Meaning": "Cavity thick-walled", + "Body Part Examined": "Kavernen, Lungenabszesse, Aspergillome", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.35", + "Code Meaning": "Cavity thin-walled", + "Body Part Examined": "Pneumozysten, Pneumatozelen", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.41", + "Code Meaning": "Bronchus normal ventilated", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.42", + "Code Meaning": "Bronchus normal obstructed", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.43", + "Code Meaning": "Bronchus ectatic ventilated", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.44", + "Code Meaning": "Bronchus ectatic obstructed", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.45", + "Code Meaning": "Bronchus Tree-in-bud", + "Body Part Examined": "Bronchiolitis-Zeichen", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.51", + "Code Meaning": "Pulmonary Embolus", + "Body Part Examined": "sichtbarer pulmonalarterieller Embolus", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.61", + "Code Meaning": "Pleural thickening", + "Body Part Examined": "Pleuraplaques, Tumor", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.62", + "Code Meaning": "Pleural Effusion", + "Body Part Examined": "Pleuraergüsse", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.63", + "Code Meaning": "Pneumothorax", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.71", + "Code Meaning": "Pericardial Effusion", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.72", + "Code Meaning": "Enlarged LN mediastinal", + "Body Part Examined": "nur Lymphknoten KAD > 10 mm", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.73", + "Code Meaning": "Enlarged LN hilar right", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.73", + "Code Meaning": "Right enlarged LN hilar", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.74", + "Code Meaning": "Enlarged LN hilar left", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.74", + "Code Meaning": "Left enlarged LN hilar", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.81", + "Code Meaning": "Material intrapleural", + "Body Part Examined": "Fremdmaterial innerhalb der Grenzen der Pleura parietalis", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + }, + { + "Coding Scheme Designator": "RACOON", + "Code Value": "1.3.6.1.4.1.41130.1.644.9.82", + "Code Meaning": "Material extrapleural", + "Body Part Examined": "", + "SNOMED-RT ID (Retired)": "", + "FMA Code Value": null, + "UMLS Concept UniqueID": "" + } + ] \ No newline at end of file diff --git a/workflows/processing-container/dcmqi/files/itkimage2segimage.py b/workflows/processing-container/dcmqi/files/itkimage2segimage.py index 974cd551..830914c5 100644 --- a/workflows/processing-container/dcmqi/files/itkimage2segimage.py +++ b/workflows/processing-container/dcmqi/files/itkimage2segimage.py @@ -1,368 +1,382 @@ import os import sys import json import glob import re import math import random import pandas as pd import numpy as np from matplotlib import cm import subprocess import pydicom processed_count = 0 + +def find_code_meaning(tag): + result = None + for entry in code_lookup_table: + if tag.lower() in entry["Code Meaning"].lower(): + result = entry + break + elif tag in entry["Body Part Examined"].lower(): + result = entry + break + + if result == None: + raise AssertionError(f"Could not find the tag: '{tag}' in the lookup table!") + + return result + + def process_seg_info(seg_info, series_description): split_seg_info = seg_info.split('@') if len(split_seg_info) > 1: code_meaning = f'{split_seg_info[-1].capitalize()}_{split_seg_info[0].capitalize()}' else: code_meaning = f'{split_seg_info[0].capitalize()}' series_description_code_meaning = f'{code_meaning}' if series_description != "": return code_meaning, series_description else: return code_meaning, series_description_code_meaning def create_segment_attribute(segment_algorithm_type, segment_algorithm_name, code_meaning, color, labelID=1): try: search_key = code_meaning.split("_")[0].lower() print("Searching coding-scheme for code-meaning: {}".format(code_meaning)) print("Search-key: {}".format(search_key)) - coding_scheme = code_lookup_table.loc[search_key] + coding_scheme = find_code_meaning(tag=search_key) except KeyError: raise AssertionError( f'The specified code meaning {code_meaning.lower()} does not exist. Check here for available code names: http://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html#chapter_L from Table L-1.') segment_attribute = {} segment_attribute["labelID"] = labelID segment_attribute["SegmentAlgorithmType"] = segment_algorithm_type segment_attribute["SegmentAlgorithmName"] = segment_algorithm_name segment_attribute["recommendedDisplayRGBValue"] = color segment_attribute["SegmentedPropertyCategoryCodeSequence"] = { "CodeValue": str(coding_scheme['Code Value']), "CodingSchemeDesignator": coding_scheme['Coding Scheme Designator'], "CodeMeaning": code_meaning } segment_attribute["SegmentedPropertyTypeCodeSequence"] = { "CodeValue": str(coding_scheme['Code Value']), "CodingSchemeDesignator": coding_scheme['Coding Scheme Designator'], "CodeMeaning": code_meaning } segment_attribute["SegmentedPropertyTypeModifierCodeSequence"] = { "CodeValue": str(coding_scheme['Code Value']), "CodingSchemeDesignator": coding_scheme['SNOMED-RT ID (Retired)'] if not math.isnan else "unkown", "CodeMeaning": code_meaning } return segment_attribute def adding_aetitle(element_input_dir, output_dcm_file, seg_infos): dcm_files = sorted(glob.glob(os.path.join(element_input_dir, "*.dcm*"), recursive=True)) if len(dcm_files) == 0: print("No dicom file found!") exit(1) dcm_file = dcm_files[0] print("dcm-file: {}".format(dcm_file)) try: aetitle = pydicom.dcmread(dcm_file)[0x0012, 0x0020].value except KeyError: aetitle = 'DCMTKUndefined' print('ae title', aetitle) dcmseg_file = pydicom.dcmread(output_dcm_file) dcmseg_file.add_new([0x012, 0x020], 'LO', aetitle) # Clinical Trial Protocol ID bpe = "" for seg_info in seg_infos: if bpe != "": bpe += " " split_seg_info = seg_info.split('@') bpe += f'{split_seg_info[-1].capitalize()}-{split_seg_info[0].capitalize()}' if len(split_seg_info) > 1 else f'{split_seg_info[0].capitalize()}' dcmseg_file.add_new([0x0018, 0x0015], 'LO', bpe) # Body Part Examined dcmseg_file.save_as(output_dcm_file) # Example: https://github.com/QIICR/dcmqi/blob/master/doc/examples/seg-example.json # SegmentedPropertyCategoryCodeSequence: Sequence defining the general category of the property the segment represents: https://dicom.innolitics.com/ciods/rt-structure-set/rt-roi-observations/30060080/00620003 # SegmentedPropertyTypeCodeSequence: https://dicom.innolitics.com/ciods/segmentation/segmentation-image/00620002/0062000f # Note # "Property" is used in the sense of meaning "what the segmented voxels represent", whether it be a physical or biological object, be real or conceptual, having spatial, temporal or functional extent or not. I.e., it is what the segment "is" (as opposed to some feature, attribute, quality, or characteristic of it, like color or shape or size). # Only a single Item shall be included in this Sequence. # http://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html#chapter_L print("Started: 'itkimage2segimage' ") DCMQI = '/dcmqi/dcmqi-1.2.3-linux/bin/' # os.environ['BATCH_NAME'] = 'batch' # os.environ['OPERATOR_IN_DIR'] = 'input' # os.environ['WORKFLOW_DIR'] = '/home/klaus/private_data/jip-data/dcmqi/nnunet_test-200727123756236842/' # # Case 1 single label segs with seg info # os.environ['INPUT_TYPE'] = 'single_label_segs' # os.environ['OPERATOR_IMAGE_LIST_INPUT_DIR'] = 'nnunet-predict_case1' # os.environ['OPERATOR_OUT_DIR'] = 'nrrd2dcmseg_case1' # os.environ['SINGLE_LABEL_SEG_INFO'] = 'right@kidney' # # Case 2 single label seg info from file name # os.environ['INPUT_TYPE'] = 'single_label_segs' # os.environ['OPERATOR_IMAGE_LIST_INPUT_DIR'] = 'nnunet-predict_case2' # os.environ['OPERATOR_OUT_DIR'] = 'nrrd2dcmseg_case2' # os.environ['SINGLE_LABEL_SEG_INFO'] = 'from_file_name' # # Case 3 Multiple single labels with creating of multi seg # os.environ['INPUT_TYPE'] = 'single_label_segs' # os.environ['OPERATOR_IMAGE_LIST_INPUT_DIR'] = 'nnunet-predict_case3' # os.environ['OPERATOR_OUT_DIR'] = 'nrrd2dcmseg_case3' # os.environ['SINGLE_LABEL_SEG_INFO'] = 'from_file_name' # os.environ['CREATE_MULIT_LABEL_DCM_FROM_SINGLE_LABEL_SEGS'] = 'True' # # Case 4 Multi label label segs input # os.environ['INPUT_TYPE'] = 'multi_label_seg' # os.environ['OPERATOR_IMAGE_LIST_INPUT_DIR'] = 'nnunet-predict_case4' # os.environ['OPERATOR_OUT_DIR'] = 'nrrd2dcmseg_case4' # os.environ['MULTI_LABEL_SEG_INFO_JSON'] = 'layer_info' # os.environ['MULTI_LABEL_SEG_NAME'] = 'example multilabel' # If input type is set to "multi_label_seg" you must create a json inside the OPERATOR_IMAGE_LIST_INPUT_DIR that contains the parts as follows: {"seg_info": ["spleen", "right@kidney"]} input_type = os.environ.get('INPUT_TYPE') # multi_label_seg or single_label_segs multi_label_seg_name = os.environ.get('MULTI_LABEL_SEG_NAME', 'multi-label') # Name used for multi-label segmentation object, if it will be created segment_algorithm_name = os.environ.get('ALGORITHM_NAME', 'kaapana') segment_algorithm_type = os.environ.get('ALGORITHM_TYPE', 'AUTOMATIC') content_creator_name = os.environ.get('CREATOR_NAME', 'kaapana') series_description = os.environ.get('SERIES_DISCRIPTION', '') series_number = os.environ.get('SERIES_NUMBER', '300') instance_number = os.environ.get('INSTANCE_NUMBER', '1') skip_empty_slices = True if os.environ.get('SKIP_EMPTY_SLICES', 'false').lower() == "true" else False get_seg_info_from_file = False if input_type == 'multi_label_seg': multi_label_seg_info_json = os.environ.get('MULTI_LABEL_SEG_INFO_JSON', 'seg_info.json') # name of json file that contain the parts as follows e.g. {"seg_info": ["spleen", "right@kidney"]} if multi_label_seg_info_json == "": multi_label_seg_info_json = "seg_info.json" elif input_type == 'single_label_segs': single_label_seg_info = os.environ.get('SINGLE_LABEL_SEG_INFO') # SINGLE_LABEL_SEG_INFO must be either "from_file_name" or a e.g. "right@kidney" create_multi_label_dcm_from_single_label_segs = os.environ.get('CREATE_MULIT_LABEL_DCM_FROM_SINGLE_LABEL_SEGS', 'false') # true or false if single_label_seg_info == '': raise AssertionError('SINGLE_LABEL_SEG_INFO must be either "from_file_name" or a e.g. "right@kidney"]}') elif single_label_seg_info == 'from_file_name': print('Seg info will be taken from file name') get_seg_info_from_file = True else: print(f'Taking {single_label_seg_info} as seg info') else: raise NameError('Input_type must be either multi_label_seg or single_label_segs') -code_lookup_table = pd.read_csv('code_lookup_table.csv', sep=';') -code_lookup_table = code_lookup_table[~code_lookup_table['Code Value'].apply(math.isnan)] -code_lookup_table['Code Meaning'] = code_lookup_table['Code Meaning'].str.lower() -code_lookup_table['Code Meaning'] = code_lookup_table['Code Meaning'].str.replace(" ", "-") -code_lookup_table = code_lookup_table.set_index('Code Meaning') -code_lookup_table['Code Value'] = code_lookup_table['Code Value'].apply(int) +code_lookup_table_path = "code_lookup_table.json" +with open(code_lookup_table_path) as f: + code_lookup_table = json.load(f) batch_folders = [f for f in glob.glob(os.path.join('/', os.environ['WORKFLOW_DIR'], os.environ['BATCH_NAME'], '*'))] print("Found {} batches".format(len(batch_folders))) for batch_element_dir in batch_folders: print("process: {}".format(batch_element_dir)) element_input_dir = os.path.join(batch_element_dir, os.environ['OPERATOR_IN_DIR']) input_image_list_input_dir = os.path.join(batch_element_dir, os.environ['OPERATOR_IMAGE_LIST_INPUT_DIR']) element_output_dir = os.path.join(batch_element_dir, os.environ['OPERATOR_OUT_DIR']) if not os.path.exists(element_output_dir): os.makedirs(element_output_dir) segmentation_paths = [] for endings in ('*.nii', '*.nii.gz', '*.nrrd'): segmentation_paths.extend(glob.glob(f'{input_image_list_input_dir}/{endings}')) if len(segmentation_paths) == 0: print("Could not find valid segmentation file in {}".format(input_image_list_input_dir)) print("Supported: '*.nii', '*.nii.gz', '*.nrrd'") print("abort!") exit(1) segmentation_information = { "@schema": "https://raw.githubusercontent.com/qiicr/dcmqi/master/doc/schemas/seg-schema.json#" } segmentation_information["ContentCreatorName"] = content_creator_name segmentation_information["SeriesNumber"] = series_number segmentation_information["InstanceNumber"] = instance_number if input_type == 'single_label_segs': print("input_type == 'single_label_segs'") segment_attributes = [] for idx, seg_filepath in enumerate(segmentation_paths): print(f"process idx: {idx} - {seg_filepath}") seg_filename = os.path.basename(seg_filepath) m = re.compile(r'(.*?)(\.nii.gz|\.nii|\.nrrd)').search(seg_filename) rootname = m.groups()[-2] if get_seg_info_from_file is True: single_label_seg_info = rootname code_meaning, segmentation_information["SeriesDescription"] = process_seg_info(single_label_seg_info, series_description) segment_attribute = create_segment_attribute(segment_algorithm_type, segment_algorithm_name, code_meaning, np.round( np.array(cm.get_cmap('gist_ncar', 20)(random.randint(0, 19))[:3])*255).astype(int).tolist()) if create_multi_label_dcm_from_single_label_segs.lower() == 'true': segment_attributes.append([segment_attribute]) segmentation_information["segmentAttributes"] = [[segment_attribute]] meta_data_file = f"{input_image_list_input_dir}/{rootname}.json" with open(meta_data_file, "w") as write_file: json.dump(segmentation_information, write_file, indent=4, sort_keys=True) # Creating dcm_object output_dcm_file = f"{element_output_dir}/{rootname}.dcm" print("Starting dcmqi-subprocess for: {}".format(output_dcm_file)) - try: - dcmqi_command = [ - f"{DCMQI}/itkimage2segimage", - "--inputImageList", seg_filepath, - "--inputMetadata", meta_data_file, - "--outputDICOM", output_dcm_file, - "--inputDICOMDirectory", element_input_dir - ] - print('Executing', " ".join(dcmqi_command)) - resp = subprocess.check_output(dcmqi_command, stderr=subprocess.STDOUT) - print(resp) - except subprocess.CalledProcessError as e: - if skip_empty_slices: - try: - print(f'The image seems to have empty slices, we will skip them! This might make the segmentation no usable anymore for MITK. Error: {e.output}') - dcmqi_command = [ - f"{DCMQI}/itkimage2segimage", - "--skip", - "--inputImageList", seg_filepath, - "--inputMetadata", meta_data_file, - "--outputDICOM", output_dcm_file, - "--inputDICOMDirectory", element_input_dir - ] - print('Executing', " ".join(dcmqi_command)) - resp = subprocess.check_output(dcmqi_command, stderr=subprocess.STDOUT) - print(resp) - except subprocess.CalledProcessError as e: - raise AssertionError(f'Something weng wrong while creating the single-label-dcm object {e.output}') - else: + if skip_empty_slices: + try: + dcmqi_command = [ + f"{DCMQI}/itkimage2segimage", + "--skip", + "--inputImageList", seg_filepath, + "--inputMetadata", meta_data_file, + "--outputDICOM", output_dcm_file, + "--inputDICOMDirectory", element_input_dir + ] + print('Executing', " ".join(dcmqi_command)) + resp = subprocess.check_output(dcmqi_command, stderr=subprocess.STDOUT) + print(resp) + except subprocess.CalledProcessError as e: + raise AssertionError(f'Something weng wrong while creating the single-label-dcm object {e.output}') + else: + try: + dcmqi_command = [ + f"{DCMQI}/itkimage2segimage", + "--inputImageList", seg_filepath, + "--inputMetadata", meta_data_file, + "--outputDICOM", output_dcm_file, + "--inputDICOMDirectory", element_input_dir + ] + print('Executing', " ".join(dcmqi_command)) + resp = subprocess.check_output(dcmqi_command, stderr=subprocess.STDOUT) + print(resp) + except subprocess.CalledProcessError as e: + print(f'The image seems to have empty slices, we will skip them! This might make the segmentation no usable anymore for MITK. Error: {e.output}') raise AssertionError(f'Something weng wrong while creating the single-label-dcm object {e.output}') adding_aetitle(element_input_dir, output_dcm_file, seg_infos=[single_label_seg_info]) processed_count += 1 elif input_type == 'multi_label_seg': print("input_type == 'multi_label_seg'") json_path = os.path.join(input_image_list_input_dir, multi_label_seg_info_json) with open(json_path) as f: data = json.load(f) print('Loaded seg_info', data) if "seg_info" not in data: print("Could not find key 'seg_info' in json-file: {}".format(json_path)) print("Abort!") exit(1) if "algorithm" in data: series_description = "{}-{}".format(segment_algorithm_name, data["algorithm"]) segment_attributes = [[]] label_counts = len(data['seg_info']) colors = [np.round(np.array(cm.get_cmap('gist_ncar', label_counts)(idx)[:3])*255).astype(int).tolist() for idx in range(label_counts)] random.shuffle(colors) for idx, single_label_seg_info in enumerate(data['seg_info']): print(f"process: {single_label_seg_info}: {idx}") code_meaning, segmentation_information["SeriesDescription"] = process_seg_info(single_label_seg_info, series_description) segment_attribute = create_segment_attribute(segment_algorithm_type, segment_algorithm_name, code_meaning, colors[idx], labelID=idx+1) segment_attributes[0].append(segment_attribute) if input_type == 'multi_label_seg' or create_multi_label_dcm_from_single_label_segs.lower() == 'true': _, segmentation_information["SeriesDescription"] = process_seg_info(multi_label_seg_name, series_description) segmentation_information["segmentAttributes"] = segment_attributes meta_data_file = f"{input_image_list_input_dir}/{multi_label_seg_name.lower()}.json" with open(meta_data_file, "w") as write_file: print("Writing JSON:: {}".format(meta_data_file)) json.dump(segmentation_information, write_file, indent=4, sort_keys=True) output_dcm_file = f"{element_output_dir}/{multi_label_seg_name.lower()}.dcm" print("Output SEG.dcm file:: {}".format(output_dcm_file)) print("Starting dcmqi-subprocess for: {}".format(output_dcm_file)) - try: - dcmqi_command = [ - f"{DCMQI}/itkimage2segimage", - "--inputImageList", ",".join(segmentation_paths), - "--inputMetadata", meta_data_file, - "--outputDICOM", output_dcm_file, - "--inputDICOMDirectory", element_input_dir - ] - print('Executing', " ".join(dcmqi_command)) - resp = subprocess.check_output(dcmqi_command, stderr=subprocess.STDOUT) - print(resp) - except subprocess.CalledProcessError as e: - if skip_empty_slices: - try: - print(f'The image seems to have emtpy slices, we will skip them! This might make the segmentation no usable anymore for MITK. Error: {e.output}') - dcmqi_command = [ - f"{DCMQI}/itkimage2segimage", - "--skip", - "--inputImageList", ",".join(segmentation_paths), - "--inputMetadata", meta_data_file, - "--outputDICOM", output_dcm_file, - "--inputDICOMDirectory", element_input_dir - ] - print('Executing', " ".join(dcmqi_command)) - resp = subprocess.check_output(dcmqi_command, stderr=subprocess.STDOUT) - print(resp) - except subprocess.CalledProcessError as e: - raise AssertionError(f'Something weng wrong while creating the multi-label-dcm object {e.output}') - else: + if skip_empty_slices: + try: + dcmqi_command = [ + f"{DCMQI}/itkimage2segimage", + "--skip", + "--inputImageList", ",".join(segmentation_paths), + "--inputMetadata", meta_data_file, + "--outputDICOM", output_dcm_file, + "--inputDICOMDirectory", element_input_dir + ] + print('Executing', " ".join(dcmqi_command)) + resp = subprocess.check_output(dcmqi_command, stderr=subprocess.STDOUT) + print(resp) + except subprocess.CalledProcessError as e: + raise AssertionError(f'Something weng wrong while creating the multi-label-dcm object {e.output}') + else: + try: + dcmqi_command = [ + f"{DCMQI}/itkimage2segimage", + "--inputImageList", ",".join(segmentation_paths), + "--inputMetadata", meta_data_file, + "--outputDICOM", output_dcm_file, + "--inputDICOMDirectory", element_input_dir + ] + print('Executing', " ".join(dcmqi_command)) + resp = subprocess.check_output(dcmqi_command, stderr=subprocess.STDOUT) + print(resp) + except subprocess.CalledProcessError as e: + print(f'The image seems to have emtpy slices, we will skip them! This might make the segmentation no usable anymore for MITK. Error: {e.output}') raise AssertionError(f'Something weng wrong while creating the multi-label-dcm object {e.output}') adding_aetitle(element_input_dir, output_dcm_file, seg_infos=data['seg_info']) processed_count += 1 print("#") print("#") print("#") print("#") print(f"# Processed file_count: {processed_count}") print("#") print("#") if processed_count == 0: print("#") print("##################################################") print("#") print("################# ERROR #######################") print("#") print("# ----> NO FILES HAVE BEEN PROCESSED!") print("#") print("##################################################") print("#") exit(1) else: print("# DONE #") diff --git a/workflows/processing-container/dcmtk-bin2dcm/files/start.py b/workflows/processing-container/dcmtk-bin2dcm/files/start.py index 5219c574..3a1bc488 100644 --- a/workflows/processing-container/dcmtk-bin2dcm/files/start.py +++ b/workflows/processing-container/dcmtk-bin2dcm/files/start.py @@ -1,415 +1,428 @@ import sys import os import glob import pydicom import binascii import pathlib from datetime import datetime from xml.dom import minidom import xml.etree.ElementTree as et from subprocess import PIPE, run converter_count = 0 def combine_split_files(split_files_dir,delete_parts=True): input_files = sorted(glob.glob(os.path.join(split_files_dir, "*.part*"))) input_files = [i for i in input_files if "part" in i.split(".")[-1]] suffixes = ''.join(pathlib.Path(input_files[0].split(".part")[0]).suffixes) final_filename = f"{input_files[0].split('---')[0]}{suffixes}" my_cmd = ['cat'] + input_files with open(final_filename, "w") as outfile: output = run(my_cmd, stdout=outfile) if output.returncode != 0: print(f"# Could not combine split files for {final_filename}!") print(output) exit(1) else: print(f"# Successfully created {final_filename}!") if delete_parts: for part_file in input_files: os.remove(part_file) return final_filename def split_file(file_path, size_limit): command = ["split", "-b", f"{size_limit}M", file_path, f"{file_path}.part"] output = run(command, stdout=PIPE, stderr=PIPE, universal_newlines=True, timeout=60) if output.returncode != 0: print("# Could not convert dicom to xml!") print(output) exit(1) part_files = sorted(glob.glob(f"{file_path}.part*")) return part_files def xml_to_dicom(target_dir, delete_xml=True): global converter_count xml_files = sorted(glob.glob(os.path.join(target_dir, "*.xml"))) dicom_list = [] for xml_path in xml_files: dcm_path = xml_path.replace("xml", "dcm") print("#") print(f"# convert XML to DICOM: {xml_path} -> {dcm_path}") command = ["xml2dcm", xml_path, dcm_path] output = run(command, stdout=PIPE, stderr=PIPE, universal_newlines=True, timeout=320) if output.returncode != 0: print("# Could not convert XML to DICOM!") print(output) exit(1) else: print("# DICOM created!") dicom_list.append(dcm_path) if delete_xml: os.remove(xml_path) converter_count += 1 return dicom_list def dicom_to_xml(dicom_dir, target_dir): dcm_files = sorted(glob.glob(os.path.join(dicom_dir, "*.dcm"))) if len(dcm_files) == 0: print("#") print(f"# No DICOM file found at {dicom_dir} !") print("# ABORT") print("#") exit(1) generated_xml_list = [] for dcm_file in dcm_files: xml_path = dcm_file.replace(os.path.dirname(dcm_file),target_dir).replace("dcm","xml") print("#") print(f"# convert DICOM to XML: {dcm_file} -> {xml_path}") command = ["dcm2xml", "+Eh", "+Wb", "--load-all", dcm_file, xml_path] print("#") print(f"# command: {command}") print("#") output = run(command, stdout=PIPE, stderr=PIPE, universal_newlines=True, timeout=320) if output.returncode != 0: print("# Could not convert dicom to xml!") print(output) exit(1) else: print("# XML created!") generated_xml_list.append(xml_path) return generated_xml_list def xml_to_binary(target_dir,delete_xml=True): global converter_count xml_files = sorted(glob.glob(os.path.join(target_dir, "*.xml"))) print("#") print("# starting xml_to_binary") print(f"# xml-dir: {target_dir}") print("#") for xml_file in xml_files: context = et.iterparse(xml_file, events=("start", "end")) context = iter(context) ev, root = next(context) filename = None hex_data = None expected_file_count = None for ev, el in context: if ev == 'start' and el.tag == 'element' and el.attrib['name'] == "ImageComments": filename = el.text print(f"# Found filename: {filename}") expected_file_count = int(filename.split(".")[0].split("---")[1]) if len(xml_files) != expected_file_count: print("# ERROR!!") print("#") print(f"# Expected {expected_file_count} files -> found {len(xml_files)}") print("# Abort") print("#") exit(1) filename = filename.replace("---1","") root.clear() elif ev == 'end' and el.tag == 'element' and el.attrib['tag'] == "7fe0,0010" and el.attrib['name'] == "PixelData": hex_data = el.text.strip().replace("\\", "") print("# Found Hex-Data!") root.clear() elif ev == 'end' and el.tag == 'pixel-item' and el.attrib['binary'] == "yes": hex_data = el.text.strip().replace("\\", "") print("# Found Hex-Data!") root.clear() if filename is None or hex_data is None or expected_file_count is None: print("# Could not extract needed data!") print("#") print(f"# filename: {filename}") print(f"# hex_data: {hex_data}") print("#") exit(1) switched_hex = "" for x in range(0,len(hex_data),4): switched_hex+=hex_data[x+2:x+4]+hex_data[x:x+2] binary_path = os.path.join(os.path.dirname(xml_file), filename) binstr = binascii.unhexlify(switched_hex) with open(binary_path, "wb") as f: f.write(binstr) print(f"# Successfully extracted file: {filename} !") if delete_xml: os.remove(xml_file) if expected_file_count > 1: combine_split_files(split_files_dir=target_dir) converter_count += 1 def generate_xml(binary_path, target_dir, template_path="/template.xml"): if not os.path.exists(target_dir): os.makedirs(target_dir) - series_uid = pydicom.uid.generate_uid() + study_date = datetime.now().strftime("%Y%m%d") + study_time = datetime.now().strftime("%H%M%S") + study_datetime = datetime.now().strftime("%Y%m%d%H%M%S") # YYYYMMDDHHMMSS + print(f"# study_date: {study_date}") + print(f"# study_time: {study_time}") study_id = os.getenv("STUDY_ID", "") study_uid = os.getenv("STUDY_UID", pydicom.uid.generate_uid()) - study_description = os.getenv("STUDY_DESCRIPTION", "") + study_description = os.getenv("STUDY_DESCRIPTION", "None") + study_description = study_description if study_description.lower() != "none" else f"bin2dcm {study_datetime}" + + series_uid = pydicom.uid.generate_uid() + series_description = os.getenv("SERIES_DESCRIPTION", "None") + series_description = series_description if series_description.lower() != "none" else f"bin2dcm {study_datetime}" patient_name = os.getenv("PATIENT_NAME", "") patient_id = os.getenv("PATIENT_ID", "") + manufacturer = os.getenv("MANUFACTURER", "KAAPANA") + manufacturer_model_name = os.getenv("MANUFACTURER_MODEL", "bin2dcm") + protocol_name = os.getenv("PROTOCOL_NAME", "Bin2Dcm") size_limit = int(os.getenv("SIZE_LIMIT_MB", "100")) - study_date = datetime.now().strftime("%Y%m%d") - study_time = datetime.now().strftime("%H%M%S") - study_datetime = datetime.now().strftime("%Y%m%d%H%M%S") # YYYYMMDDHHMMSS - print(f"# study_date: {study_date}") - print(f"# study_time: {study_time}") xml_output_list = [] binary_file_size = os.path.getsize(binary_path) >> 20 binary_path_list = [binary_path] if size_limit != 0 and binary_file_size > size_limit: binary_path_list = split_file(file_path=binary_path, size_limit=size_limit) split_part_count = len(binary_path_list) full_filename = os.path.basename(binary_path) series_uid = pydicom.uid.generate_uid() for i in range(0,len(binary_path_list)): binary_path = binary_path_list[i] sopInstanceUID = pydicom.uid.generate_uid() version_uid = pydicom.uid.generate_uid() filename = os.path.basename(binary_path) new_filename = filename.split('.')[0]+f"---{split_part_count}{''.join(pathlib.Path(filename).suffixes)}" xml_output_path = os.path.join(target_dir, f"{new_filename}.xml") xml_template = minidom.parse(template_path) # with open(binary_path, 'rb') as f: # hex_data = f.read().hex("\\") # xml_template.getElementsByTagName('pixel-item')[0].firstChild.data = hex_data elements = xml_template.getElementsByTagName('element') for element in elements: el_name = element.attributes['name'].value if el_name == "PatientName": pass # element.firstChild.data = patient_id elif el_name == "InstanceCreationDate" or el_name == "StudyDate" or el_name == "ContentDate": element.firstChild.data = study_date elif el_name == "InstanceCreationTime" or el_name == "StudyTime" or el_name == "ContentTime": element.firstChild.data = study_time elif el_name == "AcquisitionDateTime": element.firstChild.data = study_datetime elif el_name == "StudyInstanceUID": element.firstChild.data = study_uid elif el_name == "StudyID": element.firstChild.data = study_id elif el_name == "PatientID": element.firstChild.data = patient_id - elif el_name == "PATIENT_NAME": + elif el_name == "PatientName": element.firstChild.data = patient_name + elif el_name == "Manufacturer": + element.firstChild.data = manufacturer + + elif el_name == "ManufacturerModelName": + element.firstChild.data = manufacturer_model_name + elif el_name == "SeriesNumber": element.firstChild.data = "1" elif el_name == "ImageComments": element.firstChild.data = new_filename - elif el_name == "SeriesDescription": - element.firstChild.data = "" - elif el_name == "ProtocolName": element.firstChild.data = protocol_name elif el_name == "InstanceNumber" or el_name == "ReferencedFrameNumber": element.firstChild.data = str(i) elif el_name == "CreatorVersionUID": element.firstChild.data = "" elif el_name == "StudyDescription": element.firstChild.data = study_description + + elif el_name == "SeriesDescription": + element.firstChild.data = series_description elif el_name == "SeriesInstanceUID": element.firstChild.data = series_uid elif el_name == "MediaStorageSOPInstanceUID" or el_name == "SOPInstanceUID": element.firstChild.data = sopInstanceUID elif el_name == "file": element.firstChild.data = binary_path if el_name != "file" and 'len' in element.attributes and len(element.childNodes) > 0: element.attributes['len'].value = str(len(element.firstChild.data)) element.attributes['vm'].value = "1" print(f"# {el_name}: {element.firstChild.data} : {element.attributes['len'].value}") print("# Generated XML from template -> export file...") with open(xml_output_path, "w") as xml_file: xml_template.writexml(xml_file) xml_output_list.append(xml_output_path) return xml_output_list # START binary_file_extensions = os.getenv("EXTENSIONS", "*.zip").split(",") batch_folders = [f for f in glob.glob(os.path.join('/', os.environ['WORKFLOW_DIR'], os.environ['BATCH_NAME'], '*'))] for batch_element_dir in batch_folders: element_input_dir = os.path.join(batch_element_dir, os.getenv("OPERATOR_IN_DIR", "")) element_output_dir = os.path.join(batch_element_dir, os.getenv("OPERATOR_OUT_DIR", "")) binaries_found = [] for extension in binary_file_extensions: binaries_found.extend(glob.glob(os.path.join(element_input_dir, extension))) if len(binaries_found) == 0: print("############### No binaries found at {} ".format(element_input_dir)) print("############### Extensions: {} ".format(binary_file_extensions)) continue if not os.path.exists(element_output_dir): os.makedirs(element_output_dir) if ".dcm" in binaries_found[0]: print("# --> identified DICOM --> execute dcm2binary") print("#") print("# --> extract xml") extracted_xml = dicom_to_xml(dicom_dir=element_input_dir, target_dir=element_output_dir) print("#") print("# --> get_binary_from_xml") xml_to_binary(target_dir=element_output_dir) print("#") else: for binary in binaries_found: print("##################################################") print("#") print("# Found file: {}".format(binary)) print("#") print(f"# --> generate_xml -> {element_output_dir}") generated_xml_list = generate_xml(binary_path=binary, target_dir=element_output_dir) print("#") print("# --> xml_to_dicom") dcm_path_list = xml_to_dicom(target_dir=element_output_dir) print("#") print("##################################################") print("#") print("# Searching for files on batch-level....") print("#") print("##################################################") print("#") batch_input_dir = os.path.join('/', os.environ['WORKFLOW_DIR'], os.environ['OPERATOR_IN_DIR']) batch_output_dir = os.path.join('/', os.environ['WORKFLOW_DIR'], os.environ['OPERATOR_OUT_DIR']) print(f"# batch_input_dir: {batch_input_dir}") print(f"# batch_output_dir: {batch_output_dir}") # if "bcm2bin" in batch_output_dir: # batch_output_dir="/data/dcm2bin" # print(f"# batch_output_dir: {batch_output_dir}") binaries_found = [] for extension in binary_file_extensions: binaries_found.extend(glob.glob(os.path.join(batch_input_dir, extension))) if not os.path.exists(batch_output_dir) and len(binaries_found) != 0: os.makedirs(batch_output_dir) if len(binaries_found) == 0: print("############### No binaries found at {} ".format(batch_input_dir)) print("############### Extensions: {} ".format(binary_file_extensions)) elif ".dcm" in binaries_found[0]: print("# --> identified DICOM --> execute dcm2binary") print("#") print("# --> extract xml") extracted_xml = dicom_to_xml(dicom_dir=batch_input_dir, target_dir=batch_output_dir) print("#") print("# --> get_binary_from_xml") xml_to_binary(target_dir=batch_output_dir) print("#") else: for binary in binaries_found: print("##################################################") print("#") print("# Found file: {}".format(binary)) print("#") print(f"# --> generate_xml -> {batch_output_dir}") generated_xml_list = generate_xml(binary_path=binary, target_dir=batch_output_dir) print("#") print("# --> xml_to_dicom") dcm_path_list = xml_to_dicom(target_dir=batch_output_dir) print("#") if converter_count == 0: print("#") print("##################################################") print("#") print("################# ERROR #######################") print("#") print("# ----> NO FILES HAVE BEEN CONVERTED!") print("#") print("##################################################") print("#") exit(1) print("#") print("#") print("##################################################") print("#") print("################## DONE ########################") print("#") print("##################################################") print("#") print("#") diff --git a/workflows/processing-container/dcmtk-bin2dcm/files/template.xml b/workflows/processing-container/dcmtk-bin2dcm/files/template.xml index 16c7cddf..49a7b4d7 100644 --- a/workflows/processing-container/dcmtk-bin2dcm/files/template.xml +++ b/workflows/processing-container/dcmtk-bin2dcm/files/template.xml @@ -1,44 +1,45 @@ 204 1.2.840.10008.5.1.4.1.1.66 replace 1.2.840.10008.1.2.1 1.2.276.0.7230010.3.0.3.6.4 OFFIS_DCMTK_362 1.2.840.10008.5.1.4.1.1.66 replace ISO_IR 100 replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace OT -KAAPANA +replace +replace replace replace replace replace replace diff --git a/workflows/processing-container/nnunet/nnunet-get-models/files/process.py b/workflows/processing-container/nnunet/nnunet-get-models/files/process.py index 9378fd3c..9c52a060 100644 --- a/workflows/processing-container/nnunet/nnunet-get-models/files/process.py +++ b/workflows/processing-container/nnunet/nnunet-get-models/files/process.py @@ -1,234 +1,264 @@ import sys import os import urllib.request import zipfile import time import glob from datetime import datetime from pathlib import Path +from shutil import rmtree +from os.path import join, basename, normpath processed_count = 0 max_retries = 3 max_hours_since_creation = 3 models_dir = os.path.join(os.getenv('MODELDIR', "/models"), "nnUNet") task_ids = os.getenv('TASK', "NONE") task_ids = None if task_ids == "NONE" else task_ids model = os.getenv('MODEL', "NONE") model = None if model == "NONE" else model -zip_file = os.getenv('ZIP_FILE', "NONE") -zip_file = False if zip_file == "NONE" or zip_file.lower() != "true" else True +mode = os.getenv('MODE', "install_pretrained") Path(models_dir).mkdir(parents=True, exist_ok=True) def check_dl_running(model_path_dl_running, model_path, wait=True): if os.path.isfile(model_path_dl_running): hours_since_creation = int((datetime.now() - datetime.fromtimestamp(os.path.getmtime(model_path_dl_running))).total_seconds()/3600) if hours_since_creation > max_hours_since_creation: print("Download lock-file present! -> waiting until it is finished!") print("File older than {} hours! -> removing and triggering download!".format(max_hours_since_creation)) delete_file(model_path_dl_running) return False print("Download already running -> waiting until it is finished!") while not os.path.isdir(model_path) and wait: time.sleep(15) return True else: print("Download not running -> download!") return False def delete_file(target_file): try: os.remove(target_file) except Exception as e: print(e) pass - -if zip_file: +print("------------------------------------") +print(f"-- MODE: {mode}") +print("------------------------------------") +if mode == "install_zip": print("------------------------------------") print("# Search for model-zip-files...") print("------------------------------------") zip_files = [] batch_folders = [f for f in glob.glob(os.path.join('/', os.environ['WORKFLOW_DIR'], os.environ['BATCH_NAME'], '*'))] for batch_element_dir in batch_folders: zip_dir_path = os.path.join(batch_element_dir, os.environ['OPERATOR_IN_DIR']) zip_files = glob.glob(os.path.join(zip_dir_path, "*.zip"), recursive=True) if len(zip_files) == 0: print("# No zip-files could be found on batch-element-level") break elif len(zip_files) != 1: print("# More than one zip-files were found -> unexpected -> abort.") exit(1) try: target_file = zip_files[0] print(f"# Unzipping {target_file} -> {models_dir}") with zipfile.ZipFile(target_file, "r") as zip_ref: zip_ref.extractall(models_dir) processed_count += 1 except Exception as e: print("Could not extract model: {}".format(target_file)) print("Target dir: {}".format(models_dir)) print("Abort.") print('MSG: ' + str(e)) exit(1) - + if processed_count == 0: print("# Searching for zip-files on batch-level...") batch_input_dir = os.path.join('/', os.environ['WORKFLOW_DIR'], os.environ['OPERATOR_IN_DIR']) zip_files = glob.glob(os.path.join(batch_input_dir, "*.zip"), recursive=True) if len(zip_files) == 0: print("# No zip-files could be found on batch-level") exit(1) elif len(zip_files) != 1: print("# More than one zip-files were found -> unexpected -> abort.") exit(1) try: target_file = zip_files[0] with zipfile.ZipFile(target_file, "r") as zip_ref: zip_ref.extractall(models_dir) processed_count += 1 except Exception as e: print("Could not extract model: {}".format(target_file)) print("Target dir: {}".format(models_dir)) print("Abort.") print('MSG: ' + str(e)) exit(1) print("# successfully extracted model into model-dir.") print("# DONE") exit(0) -else: +elif mode == "install_pretrained": if task_ids is None: print("No ENV 'TASK' found!") print("Abort.") exit(1) if model is None: model = "2d" if task_ids == "all": print("Downloading all nnUnet-task-models...") task_ids = [ # "Task001_BrainTumour", "Task002_Heart", "Task003_Liver", "Task004_Hippocampus", # "Task005_Prostate", "Task006_Lung", "Task007_Pancreas", "Task008_HepaticVessel", "Task009_Spleen", "Task010_Colon", "Task017_AbdominalOrganSegmentation", "Task024_Promise", "Task027_ACDC", "Task029_LITS", # "Task035_ISBILesionSegmentation", # "Task038_CHAOS_Task_3_5_Variant2", "Task048_KiTS_clean", "Task055_SegTHOR", # "Task061_CREMI", # "Task075_Fluo_C3DH_A549_ManAndSim", # "Task076_Fluo_N3DH_SIM", # "Task089_Fluo-N2DH-SIM_thickborder_time" ] else: task_ids = [task_ids] for task_id in task_ids: model_path = os.path.join(models_dir, model, task_id) print("Check if model already present: {}".format(model_path)) print("TASK: {}".format(task_id)) print("MODEL: {}".format(model)) if os.path.isdir(model_path): print("Model {} found!".format(task_id)) continue print("Model not present: {}".format(model_path)) model_path_dl_running = os.path.join(models_dir, "dl_{}.txt".format(task_id)) wait = True if len(task_ids) == 1 else False if check_dl_running(model_path_dl_running=model_path_dl_running, model_path=model_path, wait=wait): continue file_name = "{}.zip".format(task_id) model_url = "https://zenodo.org/record/4003545/files/{}?download=1".format(file_name) output_dir = os.path.join('/', os.getenv("WORKFLOW_DIR", "tmp"), os.getenv("OPERATOR_OUT_DIR", "")) if not os.path.exists(output_dir): os.makedirs(output_dir) try_count = 0 target_file = os.path.join(output_dir, file_name) while not os.path.isfile(target_file) and try_count < max_retries: print("Try: {} - Start download: {}".format(try_count, model_url)) try_count += 1 try: Path(model_path_dl_running).touch() urllib.request.urlretrieve(model_url, target_file) except Exception as e: print("Could not download model: {}".format(model_url)) print("Abort.") print('MSG: ' + str(e)) delete_file(target_file) if try_count >= max_retries: print("------------------------------------") print("Max retries reached!") print("Skipping...") print("------------------------------------") delete_file(model_path_dl_running) continue print("------------------------------------") print("Task-model zip-file found!") print("------------------------------------") print("Start extraction: {}".format(target_file)) print("------------------------------------") print("Target-dir: {}".format(models_dir)) print("------------------------------------") try: with zipfile.ZipFile(target_file, "r") as zip_ref: zip_ref.extractall(models_dir) except Exception as e: print("Could not extract model: {}".format(zipfile)) print("Target dir: {}".format(models_dir)) print("Abort.") print('MSG: ' + str(e)) delete_file(target_file) delete_file(model_path_dl_running) continue delete_file(model_path_dl_running) print("------------------------------------") print("------------------------------------") print("Check if all models are now present: {}".format(model_path)) print("------------------------------------") for task_id in task_ids: model_path = os.path.join(models_dir, model, task_id) if os.path.isdir(model_path): print("Model {} found!".format(task_id)) print("------------------------------------") continue else: print("------------------------------------") print("------------------------------------") print("------------ ERROR! -------------") print("------------------------------------") print("Model NOT found: {}".format(model_path)) print("------------------------------------") print("------------------------------------") exit(1) print("All models successfully downloaded and extracted!") + +elif mode == "uninstall": + if task_ids is None: + print("No ENV 'TASK' found!") + print("Abort.") + exit(1) + + print(f"Un-installing TASK: {task_ids}") + installed_models = [basename(normpath(f.path)) for f in os.scandir(models_dir) if f.is_dir()] + + for installed_model in installed_models: + model_path = join(models_dir, installed_model) + installed_tasks_dirs = [basename(normpath(f.path)) for f in os.scandir(model_path) if f.is_dir()] + for installed_task in installed_tasks_dirs: + if installed_task.lower() == task_ids.lower(): + task_path = join(models_dir,installed_model,installed_task) + print(f"Removing: {task_path}") + rmtree(task_path) +else: + print("------------------------------------") + print("------------ ERROR! -------------") + print("------------------------------------") + print(f"---- Mode not supported: {mode} ---- ") + print("------------------------------------") + print("------------------------------------") + exit(1) + print("DONE") exit(0) diff --git a/workflows/processing-container/nnunet/nnunet/files/create_dataset.py b/workflows/processing-container/nnunet/nnunet/files/create_dataset.py index 26eb497c..04887797 100644 --- a/workflows/processing-container/nnunet/nnunet/files/create_dataset.py +++ b/workflows/processing-container/nnunet/nnunet/files/create_dataset.py @@ -1,290 +1,334 @@ import sys import os import glob import json import shutil from pathlib import Path import random import pydicom import nibabel as nib import numpy as np from collections import OrderedDict task_name = os.getenv("TASK", "") licence = os.getenv("LICENCE", "N/A") version = os.getenv("VERSION", "N/A") training_name = task_name training_description = os.getenv("TRAINING_DESCRIPTION", "nnUNet training") training_reference = os.getenv("TRAINING_REFERENCE", "nnUNet") shuffle_seed = int(os.getenv("SHUFFLE_SEED", "0")), network_trainer = os.getenv("TRAIN_NETWORK_TRAINER", "N/A") model_architecture = os.getenv("TRAIN_NETWORK", "UNKNOWN") # -> model 2d,3d_lowres etc test_percentage = int(os.getenv("TEST_PERCENTAGE", "0")) copy_target_data = True if os.getenv("PREP_COPY_DATA", "False").lower() == "true" else False tensor_size = os.getenv("TENSOR_SIZE", "3D") input_modalities = os.getenv("PREP_MODALITIES", "") input_label_dirs = os.getenv("PREP_LABEL_DIRS", "") +exit_on_issue = True if os.getenv("PREP_EXIT_ON_ISSUE", "True").lower() == "true" else False input_modality_dirs = os.getenv("INPUT_MODALITY_DIRS", "") batch_dir = os.path.join('/', os.environ["WORKFLOW_DIR"], os.environ["BATCH_NAME"]) operator_out_dir = os.path.join('/', os.environ["WORKFLOW_DIR"], os.environ["OPERATOR_OUT_DIR"]) task_dir = os.path.join(operator_out_dir, "nnUNet_raw_data", os.environ["TASK"]) use_nifti_labels = True if os.getenv("PREP_USE_NIFITI_LABELS", "False").lower() == "true" else False - if input_label_dirs == "" or input_modalities == "" or input_modality_dirs == "": print("#") print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") print("# ") print("# Needed Env not set!") print(f"# LABEL_DIRS: {input_label_dirs}") print(f"# MODALITY_DIRS: {input_modality_dirs}") print(f"# PREP_MODALITIES: {input_modalities}") print("# ") print("# -> ABORT!") print("# ") print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") print("# ") exit(1) Path(task_dir).mkdir(parents=True, exist_ok=True) print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") print("# ") print("# Starting DatasetCreateOperator:") print("# ") print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") series_list = [f.path for f in os.scandir(batch_dir) if f.is_dir()] series_list.sort() modality = {} input_modalities = input_modalities.split(",") input_label_dirs = input_label_dirs.split(",") input_modality_dirs = input_modality_dirs.split(",") for i in range(0, len(input_modalities)): modality[f"{i}"] = input_modalities[i] label_extraction_dirs = {} for input_series in series_list: label_extraction_dirs[input_series] = [] for input_label_dir in input_label_dirs: label_extraction_dirs[input_series].append(input_label_dir) template_dataset_json = { "name": training_name, "shuffle_seed": shuffle_seed, "network_trainer": network_trainer, "model": [model_architecture], "description": training_description, "reference": training_reference, "licence": licence, - "relase": version, + "release": version, "tensorImageSize": tensor_size, "modality": modality, "labels": None, "numTraining": 0, "numTest": 0, "training": [], "test": [] } series_count = len(series_list) test_count = round((series_count/100)*test_percentage) train_count = series_count - test_count template_dataset_json["numTraining"] = train_count template_dataset_json["numTest"] = test_count print("# ") print(f"# All series count: {series_count}") print(f"# Train-datset-size: {train_count}") print(f"# Test-datset-size: {test_count}") print("# ") print(f"# copy_target_data: {copy_target_data}") print(f"# use_nifti_labels: {use_nifti_labels}") print("# ") if len(modality) != len(input_modality_dirs): print("# ") print("# len(modality) != len(input_operators)") print("# You have to specify {} input_operators!".format(len(modality))) print("# Expected modalities:") print(json.dumps(modality, indent=4, sort_keys=False)) print("# ") print("# ") exit(1) if (train_count + test_count) != series_count: print("# Something went wrong! -> dataset-splits != series-count!") exit(1) print("# Using shuffle-seed: {}".format(shuffle_seed)) random.seed(shuffle_seed) random.shuffle(series_list) print("# ") train_series = series_list[:train_count] test_series = series_list[train_count:] count = 0 + labels = { "0": "Clear Label", } - print("# Preparing all train series: {}".format(len(train_series))) for series in train_series: - imagesTr_path=os.path.join(task_dir, "imagesTr") + imagesTr_path = os.path.join(task_dir, "imagesTr") base_file_path = f"{os.path.basename(series)}.nii.gz" for i in range(0, len(input_modality_dirs)): modality_nifti_dir = os.path.join(series, input_modality_dirs[i]) - modality_nifti = glob.glob(os.path.join(modality_nifti_dir, "*.nii.gz"), recursive=True) + modality_nifti = glob.glob(os.path.join( + modality_nifti_dir, "*.nii.gz"), recursive=True) if len(modality_nifti) != 1: print("# ") print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") print("# ") print("# Error with training image-file!") print("# Found {} files at: {}".format(len(modality_nifti), modality_nifti_dir)) print("# Expected exactly one file! -> abort.") print("# ") print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") print("# ") exit(1) modality_nifti = modality_nifti[0] - target_modality_path = os.path.join(imagesTr_path, base_file_path.replace(".nii.gz", f"_{i:04}.nii.gz")) - Path(os.path.dirname(target_modality_path)).mkdir(parents=True, exist_ok=True) + target_modality_path = os.path.join( + imagesTr_path, base_file_path.replace(".nii.gz", f"_{i:04}.nii.gz")) + Path(os.path.dirname(target_modality_path)).mkdir( + parents=True, exist_ok=True) if copy_target_data: shutil.copy2(modality_nifti, target_modality_path) else: shutil.move(modality_nifti, target_modality_path) target_seg_path = os.path.join(task_dir, "labelsTr", base_file_path) seg_nifti_list = [] for label_dir in input_label_dirs: - seg_niftis = glob.glob(os.path.join(series, label_dir, "*.nii.gz"), recursive=True) + seg_niftis = glob.glob(os.path.join( + series, label_dir, "*.nii.gz"), recursive=True) seg_nifti_list.extend(seg_niftis) print(f"# Found {len(seg_nifti_list)} seg NIFTIs -> start merging") example_img = nib.load(seg_nifti_list[0]) combined = np.zeros_like(example_img.get_fdata().astype(int)) + + labels_found = [] for seg_nifti in seg_nifti_list: - nii_array=nib.load(seg_nifti).get_fdata().astype(int) - combined=np.maximum(combined,nii_array) + nii_array = nib.load(seg_nifti).get_fdata().astype(int) + combined = np.maximum(combined, nii_array) if use_nifti_labels: nifti_labels = list(np.unique(nii_array)) if 0 in nifti_labels: nifti_labels.remove(0) else: print("#") print(f"# Couldn't find a 'Clear Label' 0 in NIFTI: {seg_nifti}") print("#") exit(1) if len(nifti_labels) != 1: print("#") print(f"# More than one label found in NIFTI: {seg_nifti}") print(f"# Single label segmentation NIFTIs expected -> error") print("# ") exit(1) count = nifti_labels[0] else: count += 1 - + + dict_key = f"{count}" - label_tag=seg_nifti.split("--")[-1].split(".")[0].replace("_"," ") - labels[dict_key] = label_tag - print(f"# merged {seg_nifti.split('/')[-1]}") - print(f"# -> label: {dict_key} -> {label_tag}") + label_tag = seg_nifti.split("--")[-1].split(".")[0].replace("_", " ") + if count not in labels_found: + if dict_key in labels and label_tag != labels[dict_key]: + print("#") + print("###################### WARNING ###################### ") + print("#") + print(f"# Label {dict_key} has already been found and the tag differs!") + print(f"# Existing label: {dict_key}: {labels[dict_key]}") + print(f"# New label: {dict_key}: {label_tag}") + print("#") + if exit_on_issue: + print("# ABORT!") + print("#") + print("##################################################### ") + print("#") + exit(1) + print("##################################################### ") + print("#") - combined = nib.Nifti1Image(combined, example_img.affine, example_img.header) + labels[dict_key] = label_tag + print(f"# merged {seg_nifti.split('/')[-1]}") + print(f"# -> label: {dict_key} -> {label_tag}") + + else: + print("#") + print("###################### ERROR ###################### ") + print("#") + print(f"# Label {dict_key} already exists !") + print("# Labels:") + print(json.dumps(labels, indent=4, sort_keys=False)) + print("#") + print("# ") + exit(1) + + labels_found.append(count) + + combined = nib.Nifti1Image( + combined, example_img.affine, example_img.header) Path(os.path.dirname(target_seg_path)).mkdir(parents=True, exist_ok=True) combined.to_filename(target_seg_path) - + if not copy_target_data: for file_path in seg_nifti_list: os.remove(file_path) template_dataset_json["training"].append( { - "image": os.path.join("./","imagesTr", base_file_path), - "label": os.path.join("./","labelsTr", base_file_path) + "image": os.path.join("./", "imagesTr", base_file_path), + "label": os.path.join("./", "labelsTr", base_file_path) } ) print("# Extracted labels:") print(json.dumps(labels, indent=4, sort_keys=False)) template_dataset_json["labels"] = labels print("# Preparing all test series: {}".format(len(test_series))) for series in test_series: - imagesTr_path=os.path.join(task_dir, "imagesTr") + imagesTr_path = os.path.join(task_dir, "imagesTr") base_file_path = f"{os.path.basename(series)}.nii.gz" for i in range(0, len(input_modality_dirs)): modality_nifti_dir = os.path.join(series, input_modality_dirs[i]) - modality_nifti = glob.glob(os.path.join(modality_nifti_dir, "*.nii.gz"), recursive=True) + modality_nifti = glob.glob(os.path.join( + modality_nifti_dir, "*.nii.gz"), recursive=True) if len(modality_nifti) != 1: print("# ") print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") print("# ") print("# Error with test image-file!") - print("# Found {} files at: {}".format(len(modality_nifti), modality_nifti_dir)) + print("# Found {} files at: {}".format( + len(modality_nifti), modality_nifti_dir)) print("# Expected only one file! -> abort.") print("# ") print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") print("# ") exit(1) modality_nifti = modality_nifti[0] - target_modality_path = os.path.join(imagesTr_path, base_file_path.replace(".nii.gz", f"_{i:04}.nii.gz")) - Path(os.path.dirname(target_modality_path)).mkdir(parents=True, exist_ok=True) + target_modality_path = os.path.join( + imagesTr_path, base_file_path.replace(".nii.gz", f"_{i:04}.nii.gz")) + Path(os.path.dirname(target_modality_path)).mkdir( + parents=True, exist_ok=True) if copy_target_data: shutil.copy2(modality_nifti, target_modality_path) else: shutil.move(modality_nifti, target_modality_path) target_seg_path = os.path.join(task_dir, "labelsTr", base_file_path) seg_nifti_list = [] for label_dir in input_label_dirs: - seg_niftis = glob.glob(os.path.join(series, label_dir, "*.nii.gz"), recursive=True) + seg_niftis = glob.glob(os.path.join( + series, label_dir, "*.nii.gz"), recursive=True) seg_nifti_list.extend(seg_niftis) print(f"# Found {len(seg_nifti_list)} seg NIFTIs -> start merging") example_img = nib.load(seg_nifti_list[0]) combined = np.zeros_like(example_img.get_fdata().astype(int)) for nii_seg in seg_nifti_list: - nii_array=nib.load(nii_seg).get_fdata().astype(int) - combined=np.maximum(combined,nii_array) + nii_array = nib.load(nii_seg).get_fdata().astype(int) + combined = np.maximum(combined, nii_array) print(f"# merged {seg_nifti.split('/')[-1]}") - combined = nib.Nifti1Image(combined, example_img.affine, example_img.header) + combined = nib.Nifti1Image( + combined, example_img.affine, example_img.header) Path(os.path.dirname(target_seg_path)).mkdir(parents=True, exist_ok=True) combined.to_filename(target_seg_path) - + if not copy_target_data: for file_path in seg_nifti_list: os.remove(file_path) template_dataset_json["test"].append( { - "image": os.path.join("./","imagesTr", base_file_path), - "label": os.path.join("./","labelsTr", base_file_path) + "image": os.path.join("./", "imagesTr", base_file_path), + "label": os.path.join("./", "labelsTr", base_file_path) } ) - with open(os.path.join(task_dir, 'dataset.json'), 'w') as fp: json.dump(template_dataset_json, fp, indent=4, sort_keys=False) print("#############################################################") print("#") print("# Dataset preparation done!") print("#") print("#############################################################") diff --git a/workflows/processing-container/nnunet/nnunet/files/create_report.py b/workflows/processing-container/nnunet/nnunet/files/create_report.py index 8593a2a8..240750e6 100644 --- a/workflows/processing-container/nnunet/nnunet/files/create_report.py +++ b/workflows/processing-container/nnunet/nnunet/files/create_report.py @@ -1,55 +1,145 @@ import os import sys import glob +import json import pathlib -import shutil +from os.path import join, basename, dirname, exists from PIL import Image from PIL import ImageFont from PIL import ImageDraw from datetime import datetime + +def create_json_report(log_files, target_path): + for log_file in log_files: + print(f"# Processing log-file: {log_file}..") + dataset_json = None + dataset_json_path = join(dirname(log_file), "dataset.json") + if exists(dataset_json_path): + with open(dataset_json_path) as json_file: + dataset_json = json.load(json_file) + + fold_data = {} + if "fold" in log_file: + fold = basename(dirname(log_file)).replace("fold_", "") + else: + fold = basename(dirname(log_file)) + + print(f"# fold: {fold}..") + fold_data = {"fold": fold} + + if dataset_json != None: + fold_data["name"]=dataset_json["name"] if "name" in dataset_json else "N/A" + fold_data["description"]=dataset_json["description"] if "description" in dataset_json else "N/A" + fold_data["labels"]=dataset_json["labels"] if "labels" in dataset_json else "N/A" + fold_data["licence"]=dataset_json["licence"] if "licence" in dataset_json else "N/A" + fold_data["modality"]=dataset_json["modality"] if "modality" in dataset_json else "N/A" + fold_data["network_trainer"]=dataset_json["network_trainer"] if "network_trainer" in dataset_json else "N/A" + fold_data["numTest"]=dataset_json["numTest"] if "numTest" in dataset_json else "N/A" + fold_data["numTraining"]=dataset_json["numTraining"] if "numTraining" in dataset_json else "N/A" + fold_data["reference"]=dataset_json["reference"] if "reference" in dataset_json else "N/A" + fold_data["release"]=dataset_json["release"] if "release" in dataset_json else "N/A" + fold_data["shuffle_seed"]=dataset_json["shuffle_seed"] if "shuffle_seed" in dataset_json else "N/A" + fold_data["tensorImageSize"]=dataset_json["tensorImageSize"] if "tensorImageSize" in dataset_json else "N/A" + + fold_data["epochs"] = [] + with open(log_file) as f: + content = f.readlines() + + content = [x.strip() for x in content] + epoch_data = {} + for line in content: + if "epoch:" in line: + epoch_data = { + "no": int(line.split(":")[-1].strip()), + } + + elif len(epoch_data) == 0: + if "lr:" in line: + line = line.split(": lr:") + fold_data["starting_timestamp"] = line[0] + fold_data["initial_lr"] = line[-1] + continue + elif "train loss" in line: + epoch_data["train-loss"] = float(line.split(":")[-1].strip()) + elif "validation loss" in line: + epoch_data["validation-loss"] = float( + line.split(":")[-1].strip()) + elif "Average global foreground Dice" in line: + dices = [float(x) for x in line.split(":")[-1].strip().replace("[", "").replace("]", "").split(",")] + if dataset_json != None and len(dataset_json["labels"])-1 == len(dices): + labels_dict = {} + for i in range(0, len(dices)): + labels_dict[dataset_json["labels"][str(i+1)]] = dices[i] + + epoch_data["foreground-dice"] = labels_dict + else: + epoch_data["foreground-dice"] = dices + + elif "lr:" in line: + epoch_data["lr"] = float(line.split(":")[-1].strip()) + elif "This epoch took" in line: + epoch_data["time"] = float(line.split("This epoch took")[-1].strip()[:-2]) + fold_data["epochs"].append(epoch_data) + + report_json_path = join(log_file.replace(".txt", ".json")) + with open(report_json_path, 'w', encoding='utf-8') as f: + json.dump(fold_data, f, indent=4, sort_keys=False) + + report_json_path = join(target_path, basename(log_file).replace(".txt", ".json")) + with open(report_json_path, 'w', encoding='utf-8') as f: + json.dump(fold_data, f, indent=4, sort_keys=False) + + + +# START args_got = sys.argv[1:] if (len(args_got) != 2): print("# Arg0: experiment_path") print("# Arg1: target_path") print("# GOT: ") print(args_got) print("# -> exit") exit(1) else: experiment_path = args_got[0] target_path = args_got[1] print("# ") print("# Starting export report...") print("# ") print(f"# experiment_path: {experiment_path}") print(f"# target_path: {target_path}") print("# ") pathlib.Path(target_path).mkdir(parents=True, exist_ok=True) -progress_images_list = sorted(glob.glob(os.path.join(experiment_path,"**","progress.png"),recursive=True)) +progress_images_list = sorted(glob.glob(join(experiment_path, "**", "progress.png"), recursive=True)) +log_files = sorted(glob.glob(join(experiment_path, "**", "training_log_*.txt*"), recursive=True)) +create_json_report(log_files=log_files, target_path=target_path) + timestamp = datetime.now().strftime("%d_%m_%Y") print(f"# 'progress.png'-list: {progress_images_list} ") print(f"# Timestamp: {timestamp}") # font = ImageFont.truetype("sans-serif.ttf", 16) # img = Image.new('RGB', (0, 400), color = 'white') -im_list=[] +im_list = [] for image_path in progress_images_list: - img_filename=os.path.basename(image_path) + img_filename = basename(image_path) rgba = Image.open(image_path) rgb = Image.new('RGB', rgba.size, (255, 255, 255)) # white background - rgb.paste(rgba, mask=rgba.split()[3]) + rgb.paste(rgba, mask=rgba.split()[3]) draw = ImageDraw.Draw(rgb) - draw.text((0, 0),f"Report: {img_filename}",(0,0,0))#,font=font) + draw.text((0, 0), f"Report: {img_filename}", (0, 0, 0)) # ,font=font) im_list.append(rgb) -pdf1_filename = os.path.join(target_path, f'nnunet_report_{timestamp}.pdf') +pdf1_filename = join(target_path, f'nnunet_report_{timestamp}.pdf') print(f"# Save report pdf at: {pdf1_filename}") -im_list[0].save(pdf1_filename, "PDF" ,resolution=100.0, save_all=True, append_images=im_list[1:]) -print("# saved report.") +im_list[0].save(pdf1_filename, "PDF", resolution=100.0, + save_all=True, append_images=im_list[1:]) + +print("# saved report.") diff --git a/workflows/processing-container/nnunet/nnunet/files/monitoring.py b/workflows/processing-container/nnunet/nnunet/files/monitoring.py index 7b43c1ce..3a16d4bf 100644 --- a/workflows/processing-container/nnunet/nnunet/files/monitoring.py +++ b/workflows/processing-container/nnunet/nnunet/files/monitoring.py @@ -1,164 +1,163 @@ import os import sys import json import glob import pathlib import sched import time import datetime from shutil import copy2 from os.path import join, basename, dirname from tensorboardX import SummaryWriter timeout = 60 args_got = sys.argv[1:] if (len(args_got) != 4): print("# Arg0: experiment_path") print("# Arg1: fold") print("# Arg2: tensorboard_dir_path") print("# Arg3: nnUNet_raw_data_base") print("# GOT: ") print(args_got) print("# -> exit") exit(1) else: experiment_path = args_got[0] fold = args_got[1] tensorboard_dir_path = args_got[2] nnUNet_raw_data_base = args_got[3] print("# ") print("# Starting monitoring....") print("# ") print(f"# experiment_path: {experiment_path}") print(f"# tensorboard_dir_path: {tensorboard_dir_path}") print(f"# nnUNet_raw_data_base: {nnUNet_raw_data_base}") print(f"# fold: {fold}") print("# ") s = sched.scheduler(time.time, time.sleep) writer = None last_written_epoch = -1 last_training_log_file = None experiment_name = f"nnunet-train_{datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d_%H_%M')}" -dataset_json_path = join(nnUNet_raw_data_base, - "nnUNet_raw_data", "**", "dataset.json") +dataset_json_path = join(nnUNet_raw_data_base,"nnUNet_raw_data", "**", "dataset.json") dataset_json_path = glob.glob(dataset_json_path, recursive=True) if len(dataset_json_path) == 1: dataset_json_path = dataset_json_path[0] with open(dataset_json_path) as json_file: dataset_json = json.load(json_file) dataset_json.pop('test', None) dataset_json.pop('training', None) else: print("#") print("#") print("# Could not find dataset.json!") print("#") print("#") dataset_json = None def get_logs(sc): global experiment_name, writer, last_written_epoch, experiment_path, fold, tensorboard_dir_path, timeout, last_training_log_file, dataset_json logs_path = join(experiment_path, "**", "training_log_*.txt*") log_files = sorted(glob.glob(logs_path, recursive=True)) log_files = [ i for i in log_files if "fold" not in i or f"fold_{fold}" in i] if len(log_files) > 0: if log_files[-1] != last_training_log_file: last_training_log_file = log_files[-1] if dataset_json != None: with open(join(dirname(last_training_log_file), "dataset.json"), 'w') as outfile: json.dump(dataset_json, outfile, indent=4, sort_keys=True) # debug_json_path = join(dirname(last_training_log_file), "debug.json") if "fold" in last_training_log_file: fold_no = int(basename(dirname( last_training_log_file)).replace("fold_", "")) experiment_log_path = join( tensorboard_dir_path, experiment_name, f"fold_{fold_no}") print(f"# Fold_No: {fold_no}..") else: experiment_log_path = join( tensorboard_dir_path, experiment_name) pathlib.Path(experiment_log_path).parent.mkdir( parents=True, exist_ok=True) print("# ") print(f"# New log-file found: {last_training_log_file}") print("# ") writer = SummaryWriter(logdir=experiment_log_path) # with open(debug_json_path) as json_file: # debug_info = json.load(json_file) # writer.add_text('Text', 'text logged at step:' + str(n_iter), n_iter) epoch_log_data = [] with open(last_training_log_file) as f: content = f.readlines() content = [x.strip() for x in content] epoch_data = {} for line in content: if "epoch:" in line: epoch_data = { "count": int(line.split(":")[-1].strip()) } epoch_log_data.append(epoch_data) elif len(epoch_data) == 0: continue elif "train loss" in line: epoch_data["train-loss"] = float(line.split(":")[-1].strip()) elif "validation loss" in line: epoch_data["validation-loss"] = float( line.split(":")[-1].strip()) elif "Average global foreground Dice" in line: epoch_data["foreground-dice"] = [float(x) for x in line.split( ":")[-1].strip().replace("[", "").replace("]", "").split(",")] elif "lr:" in line: epoch_data["lr"] = float(line.split(":")[-1].strip()) elif "This epoch took" in line: epoch_data["time"] = float(line.split( "This epoch took")[-1].strip()[:-2]) for epoch in epoch_log_data: if (len(epoch)) != 6 or last_written_epoch >= epoch["count"]: continue writer.add_scalar( 'loss/train', epoch["train-loss"], epoch["count"]) writer.add_scalar('loss/validation', epoch["validation-loss"], epoch["count"]) scalars_dict = {} for i in range(0, len(epoch["foreground-dice"])): label_tag = str(i+1) if dataset_json != None and label_tag in dataset_json["labels"]: label_tag = dataset_json["labels"][label_tag] scalars_dict[label_tag] = epoch["foreground-dice"][i] writer.add_scalar( f'foreground-dice/label_{label_tag}', epoch["foreground-dice"][i], epoch["count"]) # writer.add_scalars("foreground-dice/combined",scalars_dict,epoch["count"]) writer.add_scalar('time', epoch["time"], epoch["count"]) last_written_epoch = epoch["count"] print("# # Tensorboard: Wrote new epoch: {}".format(last_written_epoch)) writer.flush() else: print(f"# No Logs found at: {logs_path}") s.enter(timeout, 1, get_logs, (sc,)) s.enter(60, 1, get_logs, (s,)) s.run() writer.close() diff --git a/workflows/processing-container/nnunet/nnunet/files/preparation.py b/workflows/processing-container/nnunet/nnunet/files/preparation.py index d482167b..1eda781b 100644 --- a/workflows/processing-container/nnunet/nnunet/files/preparation.py +++ b/workflows/processing-container/nnunet/nnunet/files/preparation.py @@ -1,81 +1,87 @@ import os import json import glob import pydicom import shutil import pathlib -from getTaskInfo import get_task_info def write_organs_json(task_organs, batch_element_dir): organs_json = {"seg_info": task_organs} organs_json["algorithm"] = os.getenv("TASK", "N/A").lower() output_dir = os.path.join(batch_element_dir, operator_output_dir, 'seg_info.json') with open(output_dir, 'w') as outfile: json.dump(organs_json, outfile, sort_keys=True, indent=4) if __name__ == "__main__": - print("Starting nnUNet data preparation...") + print("# Starting nnUNet data preparation...") task = os.getenv("TASK", None) input_dirs = os.getenv("INPUT_MODALITY_DIRS", "").split(",") operator_output_dir = os.getenv("OPERATOR_OUT_DIR", None) if operator_output_dir == None: - print("ENV 'OPERATOR_OUT_DIR' not set!") + print("# ENV 'OPERATOR_OUT_DIR' not set!") exit(1) if task == None: - print("Env 'TASK' has to be specified!") - print("Abort!") + print("# Env 'TASK' has to be specified!") + print("# Abort!") exit(1) - task_info = get_task_info(task) - task_body_part = task_info["body_part"] - task_modalities = task_info["modalities"].split(",") - task_protocolls = task_info["protocols"].split(",") - task_organs = task_info["organs"].split(",") + task_body_part = os.getenv("BODY_PART", "ENV NOT FOUND!") + task_modalities = os.getenv("INPUT", "ENV NOT FOUND!").split(",") + task_protocols = os.getenv("PROTOCOLS", "ENV NOT FOUND!").split(",") + task_organs = os.getenv("TARGETS", "ENV NOT FOUND!").split(",") + + print("#") + print("# Configuration found: ") + print("#") + print(f"# task_organs: {task_organs}") + print(f"# task_body_part: {task_body_part}") + print(f"# task_protocols: {task_protocols}") + print(f"# task_modalities: {task_modalities}") + print("#") batches_dir = os.path.join('/', os.environ['WORKFLOW_DIR'], os.environ['BATCH_NAME']) batch_folders = [f for f in glob.glob(os.path.join(batches_dir, '*'))] - print("batches_dir {}".format(batches_dir)) - print("Found {} batches".format(len(batch_folders))) + print("# batches_dir {}".format(batches_dir)) + print("# Found {} batches".format(len(batch_folders))) output_dir = os.path.join('/', os.environ['WORKFLOW_DIR'], operator_output_dir) pathlib.Path(output_dir).mkdir(parents=True, exist_ok=True) for batch_element_dir in batch_folders: write_organs_json(task_organs=task_organs, batch_element_dir=batch_element_dir) - if len(input_dirs) != len(task_protocolls): - print("Wrong input-protocol-count!") - print("Count input operators: {}".format(len(input_dirs))) - print("Count task-protocols needed: {}".format(len(task_protocolls))) - print("Needed protocols: {}".format(task_protocolls)) - print("Abort!") + if len(input_dirs) != len(task_protocols): + print("# Wrong input-protocol-count!") + print("# Count input operators: {}".format(len(input_dirs))) + print("# Count task-protocols needed: {}".format(len(task_protocols))) + print("# Needed protocols: {}".format(task_protocols)) + print("# Abort!") exit(1) protocol_index = 0 for input_nfiti in input_dirs: nifti_dir = os.path.join(batch_element_dir, input_nfiti) nifti_files = sorted(glob.glob(os.path.join(nifti_dir, "*.nii*"), recursive=True)) nifti_count = len(nifti_files) - print("NIFTI_DIR: {}".format(nifti_dir)) - print("NIFTI_COUNT: {}".format(nifti_count)) + print("# NIFTI_DIR: {}".format(nifti_dir)) + print("# NIFTI_COUNT: {}".format(nifti_count)) if nifti_count == 0: - print("#") - print("#") - print("# No NIFTI found!") - print("# Abort!") - print("#") - print("#") + print("# #") + print("# #") + print("# # No NIFTI found!") + print("# # Abort!") + print("# #") + print("# #") exit(1) - for nifti_file in nifti_files: file_name = os.path.basename(nifti_file).split(".nii.gz")[0] target_path = os.path.join(output_dir, "{}_{:04d}.nii.gz".format(file_name, protocol_index)) - print("Copy NIFTI: {} -> {}".format(nifti_file, target_path)) + print("# Copy NIFTI: {} -> {}".format(nifti_file, target_path)) shutil.copyfile(nifti_file, target_path) protocol_index += 1 diff --git a/workflows/processing-container/nnunet/nnunet/files/start_nnunet.sh b/workflows/processing-container/nnunet/nnunet/files/start_nnunet.sh index 14cdddbc..07939a86 100755 --- a/workflows/processing-container/nnunet/nnunet/files/start_nnunet.sh +++ b/workflows/processing-container/nnunet/nnunet/files/start_nnunet.sh @@ -1,430 +1,440 @@ #bin/bash set -e export OMP_THREAD_LIMIT=1 export OMP_NUM_THREADS=1 TASK_NUM=$(echo "$TASK" | tr -dc '0-9') echo "#######################################################################" echo "#" echo "# Starting nnUNet..." echo "#" echo "# MODE: $MODE"; echo "# TASK: $TASK"; echo "# TASK_NUM: $TASK_NUM"; echo "#" if [ "$MODE" != "training" ] && [ "$MODE" != "inference" ] && [ "$MODE" != "preprocess" ] && [ "$MODE" != "export-model" ] && [ "$MODE" != "zip-model" ] && [ "$MODE" != "install-model" ] && [ "$MODE" != "identify-best" ]; then echo "#" echo "#######################################################################" echo "#" echo "# MODE ($MODE) NOT SUPPORTED"; echo "# OPTIONS: preprocess, training, inference,identify-best,export-model,install-model"; echo "#" echo "#######################################################################" echo "#" exit 1 fi if [ "$MODE" = "preprocess" ]; then export nnUNet_raw_data_base="/$WORKFLOW_DIR/$OPERATOR_OUT_DIR" export nnUNet_preprocessed="$nnUNet_raw_data_base/nnUNet_preprocessed" export RESULTS_FOLDER="$nnUNet_raw_data_base/results" echo "#" echo "# Starting preprocessing..." echo "#" echo "# PREPROCESS: $PREP_PREPROCESS"; echo "# CHECK_INTEGRITY: $PREP_CHECK_INTEGRITY"; echo "#" echo "# OMP_THREAD_LIMIT" $OMP_THREAD_LIMIT echo "# OMP_NUM_THREADS" $OMP_NUM_THREADS echo "# PREP_TL" $PREP_TL echo "# PREP_TF" $PREP_TF echo "#" echo "# NIFTI_DIRS: $INPUT_MODALITY_DIRS"; echo "# LABEL_DIR: $PREP_LABEL_DIRS"; echo "# MODALITIES: $PREP_MODALITIES"; echo "#" echo "# nnUNet_raw_data_base: $nnUNet_raw_data_base"; echo "# nnUNet_preprocessed: $nnUNet_preprocessed"; echo "# RESULTS_FOLDER: $RESULTS_FOLDER"; echo "#" echo "# Starting create_dataset..." echo "#" python3 -u ./create_dataset.py if [ "$PREP_CHECK_INTEGRITY" = "True" ] || [ "$PREP_CHECK_INTEGRITY" = "true" ]; then preprocess_verify="--verify_dataset_integrity" else preprocess_verify="" fi if [ "$PREP_PREPROCESS" = "True" ] || [ "$PREP_PREPROCESS" = "true" ]; then preprocess="" else preprocess="-no_pp" fi echo "# COMMAND: nnUNet_plan_and_preprocess -t $TASK_NUM -tl $PREP_TL -tf $PREP_TF $preprocess $preprocess_verify" echo "#" nnUNet_plan_and_preprocess -t $TASK_NUM -tl $PREP_TL -tf $PREP_TF $preprocess $preprocess_verify echo "#" echo "# Dataset itegrity OK!" echo "#" elif [ "$MODE" = "training" ]; then export nnUNet_raw_data_base="/$WORKFLOW_DIR/$OPERATOR_IN_DIR" export nnUNet_preprocessed="$nnUNet_raw_data_base/nnUNet_preprocessed" export RESULTS_FOLDER="/$WORKFLOW_DIR/$OPERATOR_OUT_DIR/results" # export RESULTS_FOLDER="$nnUNet_raw_data_base/results" TENSORBOARD_DIR="/$WORKFLOW_DIR/$OPERATOR_OUT_DIR/tensorboard" echo "#" echo "# Starting training..." echo "#" echo "# FOLD: $TRAIN_FOLD"; echo "# TASK: $TASK"; echo "# NETWORK: $TRAIN_NETWORK"; echo "# NETWORK_TRAINER: $TRAIN_NETWORK_TRAINER"; echo "#" echo "# nnUNet_raw_data_base: $nnUNet_raw_data_base" echo "# nnUNet_preprocessed: $nnUNet_preprocessed" echo "# RESULTS_FOLDER: $RESULTS_FOLDER" echo "# TENSORBOARD_DIR: $TENSORBOARD_DIR" echo "#" echo "# TRAIN_CONTINUE: $TRAIN_CONTINUE" echo "# TRAIN_NPZ: $TRAIN_NPZ" echo "#" if ! [ -z "${TENSORBOARD_DIR}" ]; then echo "# Starting monitoring:"; python3 -u /src/monitoring.py $RESULTS_FOLDER $TRAIN_FOLD $TENSORBOARD_DIR $nnUNet_raw_data_base & echo "#" fi if [ "$TRAIN_CONTINUE" = "True" ] || [ "$TRAIN_CONTINUE" = "true" ]; then continue="--continue_training" else continue="" fi if [ "$TRAIN_NPZ" = "True" ] || [ "$TRAIN_NPZ" = "true" ]; then npz="--npz" else npz="" fi echo "#" echo "# COMMAND: nnUNet_train $TRAIN_NETWORK $TRAIN_NETWORK_TRAINER $TASK $TRAIN_FOLD $npz $continue" nnUNet_train $TRAIN_NETWORK $TRAIN_NETWORK_TRAINER $TASK $TRAIN_FOLD $npz $continue CREATE_REPORT="True" if [ "$CREATE_REPORT" = "True" ] || [ "$CREATE_REPORT" = "true" ]; then echo "# Starting create_report ..." python3 -u /src/create_report.py $RESULTS_FOLDER "/data/$OPERATOR_OUT_DIR" echo "# Report created." echo "#" fi echo "#" echo "# DONE" elif [ "$MODE" = "inference" ]; then export nnUNet_raw_data_base="/$WORKFLOW_DIR/$OPERATOR_OUT_DIR" export nnUNet_preprocessed="$nnUNet_raw_data_base/nnUNet_preprocessed" export RESULTS_FOLDER="/models" shopt -s globstar BATCH_COUNT=$(find "$BATCHES_INPUT_DIR" -mindepth 1 -maxdepth 1 -type d | wc -l) echo "#" echo "# Starting inference..." echo "#" echo "# THREADS_PREP: $INF_THREADS_PREP"; echo "# THREADS_NIFTI: $INF_THREADS_NIFTI"; echo "# PREPARATION: $INF_PREPARATION"; echo "#" echo "# INPUT_MODALITY_DIRS: $INPUT_MODALITY_DIRS"; echo "#" echo "# WORKFLOW_DIR: $WORKFLOW_DIR" echo "# OPERATOR_OUT_DIR: $OPERATOR_OUT_DIR" echo "#" echo "# nnUNet_raw_data_base: $nnUNet_raw_data_base" echo "# nnUNet_preprocessed: $nnUNet_preprocessed" echo "# RESULTS_FOLDER: $RESULTS_FOLDER" echo "#" echo "# BATCH_COUNT: " $BATCH_COUNT echo "#" if [ $BATCH_COUNT -eq 0 ]; then echo "# No batch-data found -> abort." exit 1 else echo "# Found $BATCH_COUNT batches." fi echo "#"; echo "# Starting batch loop..."; echo "#"; for batch_dir in $BATCHES_INPUT_DIR/* do batch_name=$(basename -- "$batch_dir") echo "# TASK" $TASK echo "# MODEL" $MODEL echo "# INPUT_DIRS" $INPUT_DIRS echo "# batch_dir" $batch_dir echo "# batch_name" $batch_name echo "# MODE" $MODE echo "#" echo "#" operator_input_dir=${batch_dir}/${OPERATOR_IN_DIR} operator_output_dir=${batch_dir}/${OPERATOR_OUT_DIR} mkdir -p $operator_output_dir if [ "$INF_PREPARATION" = "true" ] || [ "$INF_PREPARATION" = "True" ] ; then echo "############# Starting nnUNet file preparation..." python3 -u ./preparation.py if [ $? -eq 0 ]; then echo "# Data preparation successful!" else echo "# Data preparation failed!" exit 1 fi else echo "############# nnUNet file preparation is turned off! (PREPARATION: '$INF_PREPARATION')" find . -name $operator_input_dir\*.nii* -exec cp {} $nnUNet_raw_data_base \; fi echo "############# Starting nnUNet prediction..." - echo "COMMAND: nnUNet_predict -t $TASK -i $nnUNet_raw_data_base -o $operator_output_dir -m $MODEL --num_threads_preprocessing $INF_THREADS_PREP --num_threads_nifti_save $INF_THREADS_NIFTI --disable_tta --mode fast --all_in_gpu False" - nnUNet_predict -t $TASK -i $nnUNet_raw_data_base -o $operator_output_dir -m $MODEL --num_threads_preprocessing $INF_THREADS_PREP --num_threads_nifti_save $INF_THREADS_NIFTI --disable_tta --mode fast --all_in_gpu False + echo "# COMMAND: nnUNet_predict -t $TASK -i $nnUNet_raw_data_base -o $operator_output_dir -m $MODEL --num_threads_preprocessing $INF_THREADS_PREP --num_threads_nifti_save $INF_THREADS_NIFTI --disable_tta --mode fast --all_in_gpu False" + echo "#" + if test $(find /models/nnUNet/$TRAIN_NETWORK/$TASK/ -name all | wc -c) -eq 0 + then + echo "# " + nnUNet_predict -t $TASK -i $nnUNet_raw_data_base -o $operator_output_dir -m $MODEL --num_threads_preprocessing $INF_THREADS_PREP --num_threads_nifti_save $INF_THREADS_NIFTI --disable_tta --mode fast --all_in_gpu False + else + echo "Executing with FOLDS = all" + nnUNet_predict -t $TASK -i $nnUNet_raw_data_base -o $operator_output_dir -m $MODEL -f "all" --num_threads_preprocessing $INF_THREADS_PREP --num_threads_nifti_save $INF_THREADS_NIFTI --disable_tta --mode fast --all_in_gpu False + fi + echo "# " + if [ $? -eq 0 ]; then echo "############# Prediction successful!" else echo "############# Prediction failed!" exit 1 fi done elif [ "$MODE" = "identify-best" ]; then export nnUNet_raw_data_base="/$WORKFLOW_DIR/$OPERATOR_IN_DIR" export nnUNet_preprocessed="$nnUNet_raw_data_base/nnUNet_preprocessed" export RESULTS_FOLDER="/$WORKFLOW_DIR/$OPERATOR_IN_DIR/results" # export RESULTS_FOLDER="$nnUNet_raw_data_base/results" echo "#" echo "# Starting identify-best..." echo "#" echo "#" echo "# nnUNet_raw_data_base: $nnUNet_raw_data_base" echo "# nnUNet_preprocessed: $nnUNet_preprocessed" echo "# RESULTS_FOLDER: $RESULTS_FOLDER" echo "#" echo "# FOLD: $TRAIN_FOLD" echo "# TASK: $TASK" echo "# TRAIN_NETWORK: $TRAIN_NETWORK" echo "# TRAIN_NETWORK_TRAINER: $TRAIN_NETWORK_TRAINER" echo "# model_output_path: $model_output_path" echo "#" echo "#" # models="2d 3d_fullres 3d_lowres 3d_cascade_fullres" if [ "$TRAIN_STRICT" = "True" ] || [ "$TRAIN_STRICT" = "true" ]; then strict="--strict" else strict="" fi echo "# COMMAND: nnUNet_find_best_configuration -m $TRAIN_NETWORK -t $TASK_NUM $strict" nnUNet_find_best_configuration -m $TRAIN_NETWORK -t $TASK_NUM $strict echo "#" echo "# DONE" elif [ "$MODE" = "zip-model" ]; then export nnUNet_raw_data_base="/$WORKFLOW_DIR/$OPERATOR_IN_DIR" export nnUNet_preprocessed="$nnUNet_raw_data_base/nnUNet_preprocessed" export RESULTS_FOLDER="$nnUNet_raw_data_base/results" mkdir -p "/$WORKFLOW_DIR/$OPERATOR_OUT_DIR/" TIMESTAMP=`date +%Y-%m-%d_%H-%M` model_output_path="/$WORKFLOW_DIR/$OPERATOR_OUT_DIR/nnunet_$TASK_$TRAIN_NETWORK_$TIMESTAMP.zip" echo "#" echo "# Starting export-model..." echo "#" echo "#" echo "# nnUNet_raw_data_base: $nnUNet_raw_data_base" echo "# nnUNet_preprocessed: $nnUNet_preprocessed" echo "# RESULTS_FOLDER: $RESULTS_FOLDER" echo "#" echo "# FOLD: $TRAIN_FOLD" echo "# TASK: $TASK" echo "# TRAIN_NETWORK: $TRAIN_NETWORK" echo "# TRAIN_NETWORK_TRAINER: $TRAIN_NETWORK_TRAINER" echo "# model_output_path: $model_output_path" echo "#" echo "# COMMAND: zip -r $model_output_path $RESULTS_FOLDER/nnUNet/" echo "#" zip -r "$model_output_path" "$RESULTS_FOLDER/nnUNet/" echo "# DONE" elif [ "$MODE" = "export-model" ]; then export nnUNet_raw_data_base="/$WORKFLOW_DIR/$OPERATOR_IN_DIR" export nnUNet_preprocessed="$nnUNet_raw_data_base/nnUNet_preprocessed" export RESULTS_FOLDER="$nnUNet_raw_data_base/results" mkdir -p "/$WORKFLOW_DIR/$OPERATOR_OUT_DIR/" model_output_path="/$WORKFLOW_DIR/$OPERATOR_OUT_DIR/nnunet_model_$TRAIN_NETWORK.zip" echo "#" echo "# Starting export-model..." echo "#" echo "#" echo "# nnUNet_raw_data_base: $nnUNet_raw_data_base" echo "# nnUNet_preprocessed: $nnUNet_preprocessed" echo "# RESULTS_FOLDER: $RESULTS_FOLDER" echo "#" echo "# FOLD: $TRAIN_FOLD" echo "# TASK: $TASK" echo "# TRAIN_NETWORK: $TRAIN_NETWORK" echo "# TRAIN_NETWORK_TRAINER: $TRAIN_NETWORK_TRAINER" echo "# model_output_path: $model_output_path" echo "#" echo "#" echo "# COMMAND: nnUNet_export_model_to_zip -t $TASK -m $TRAIN_NETWORK -tr $TRAIN_NETWORK_TRAINER -o $model_output_path " echo "#" echo "# DONE" nnUNet_export_model_to_zip -t $TASK -m $TRAIN_NETWORK -tr $TRAIN_NETWORK_TRAINER -o $model_output_path -f 0 1 2 3 4 elif [ "$MODE" = "install-model" ]; then export nnUNet_raw_data_base="/$WORKFLOW_DIR/$OPERATOR_IN_DIR" export nnUNet_preprocessed="$nnUNet_raw_data_base/nnUNet_preprocessed" export RESULTS_FOLDER="/models" mkdir -p "/$WORKFLOW_DIR/$OPERATOR_OUT_DIR/" model_output_path="/$WORKFLOW_DIR/$OPERATOR_OUT_DIR/nnunet_model_$TRAIN_NETWORK.zip" echo "#" echo "# Starting install-model..." echo "#" echo "#" echo "# nnUNet_raw_data_base: $nnUNet_raw_data_base" echo "# nnUNet_preprocessed: $nnUNet_preprocessed" echo "# RESULTS_FOLDER: $RESULTS_FOLDER" echo "#" echo "# FOLD: $TRAIN_FOLD" echo "# TASK: $TASK" echo "# TRAIN_NETWORK: $TRAIN_NETWORK" echo "# TRAIN_NETWORK_TRAINER: $TRAIN_NETWORK_TRAINER" echo "# model_output_path: $model_output_path" echo "#" echo "#" cd "/$WORKFLOW_DIR/$OPERATOR_IN_DIR" shopt -s nullglob for MODEL_PATH in *.zip; do echo "Found zip-file: $MODEL_PATH" echo "Installing: nnUNet_install_pretrained_model_from_zip $MODEL_PATH" nnUNet_install_pretrained_model_from_zip $MODEL_PATH done echo "#" echo "# DONE" fi; echo "#" echo "#" echo "########################## DONE ##########################" echo "#" echo "#######################################################################" exit 0 # usage: nnUNet_plan_and_preprocess [-h] [-t TASK_NAMES [TASK_NAMES ...]] # [-pl3d PLANNER3D] [-pl2d PLANNER2D] [-no_pp] # [-tl TL] [-tf TF] # [--verify_dataset_integrity] # optional arguments: # -h, --help show this help message and exit # -t TASK_NAMES [TASK_NAMES ...], --TASK_NAMEs TASK_NAMES [TASK_NAMES ...] # List of integers belonging to the task ids you wish to # run experiment planning and preprocessing for. Each of # these ids must, have a matching folder 'TaskXXX_' in # the raw data folder # -pl3d PLANNER3D, --planner3d PLANNER3D # Name of the ExperimentPlanner class for the full # resolution 3D U-Net and U-Net cascade. Default is # ExperimentPlanner3D_v21. Can be 'None', in which case # these U-Nets will not be configured # -pl2d PLANNER2D, --planner2d PLANNER2D # Name of the ExperimentPlanner class for the 2D U-Net. # Default is ExperimentPlanner2D_v21. Can be 'None', in # which case this U-Net will not be configured # -no_pp Set this flag if you dont want to run the # preprocessing. If this is set then this script will # only run the experiment planning and create the plans # file # -tl TL Number of processes used for preprocessing the low # resolution data for the 3D low resolution U-Net. This # can be larger than -tf. Don't overdo it or you will # run out of RAM # -tf TF Number of processes used for preprocessing the full # resolution data of the 2D U-Net and 3D U-Net. Don't # overdo it or you will run out of RAM # --verify_dataset_integrity # set this flag to check the dataset integrity. This is # useful and should be done once for each dataset! # usage: nnUNet_train [-h] [-val] [-c] [-p P] [--use_compressed_data] # [--deterministic] [--npz] [--find_lr] [--valbest] [--fp32] # [--val_folder VAL_FOLDER] # network network_trainer task fold # positional arguments: # network # network_trainer # task can be task name or task id # fold 0, 1, ..., 5 or 'all' # optional arguments: # -h, --help show this help message and exit # -val, --validation_only # use this if you want to only run the validation # -c, --continue_training # use this if you want to continue a training # -p P plans identifier. Only change this if you created a # custom experiment planner # --use_compressed_data # If you set use_compressed_data, the training cases # will not be decompressed. Reading compressed data is # much more CPU and RAM intensive and should only be # used if you know what you are doing # --deterministic Makes training deterministic, but reduces training # speed substantially. I (Fabian) think this is not # necessary. Deterministic training will make you # overfit to some random seed. Don't use that. # --npz if set then nnUNet will export npz files of predicted # segmentations in the validation as well. This is # needed to run the ensembling step so unless you are # developing nnUNet you should enable this # --find_lr not used here, just for fun # --valbest hands off. This is not intended to be used # --fp32 disable mixed precision training and run old school # fp32 # --val_folder VAL_FOLDER # name of the validation folder. No need to use this for # most people