Получите больше метаданных из исследования Нейротрансмиттер с использованием Allen SDK - PullRequest
0 голосов
/ 24 февраля 2019

Я загружаю все изображения из исследования нейротрансмиттеров атласа мозга Аллена, используя этот сценарий:


from allensdk.api.queries.image_download_api import ImageDownloadApi
from allensdk.config.manifest import Manifest
import pandas as pd
import os


#getting transmitter study
#product id from http://api.brain-map.org/api/v2/data/query.json?criteria=model::Product

nt_datasets = image_api.get_section_data_sets_by_product([27])

#an instance of Image Api for downloading
image_api = ImageDownloadApi()


for index, row in df_nt.iterrows(): 
    #get section dataset id
    section_dataset_id= row['id']

    #each section dataset id has multiple image sections    
    section_images = pd.DataFrame( 
        image_api.section_image_query(
        section_data_set_id=section_dataset_id)
    )

    for section_image_id in section_images['id'].tolist():
        file_path = os.path.join('/path/to/save/dir/', 
                                 str(section_image_id) + '.jpg' )
        Manifest.safe_make_parent_dirs(file_path)
        image_api.download_section_image(section_image_id, 
                                         file_path=file_path,
                                         downsample=downsample)

Этот сценарий загружает предположительно все доступные эксперименты ISH.Тем не менее, мне интересно, что было бы лучшим способом получить больше метаданных следующим образом:

1) тип эксперимента ISH , известный как "ген" (например, является ли изображениеокрашивается MBP, Nissl или т. д.).Показано в красном круге ниже.

image1

2) Структура и соответствие изображению атласа (аннотации, например, чтобы увидеть, к какой части мозга относится сечениепринадлежит).Я думаю, что это может быть получено с tree_search, но не знаю как.Показанный в красных кругах ниже от двух разных веб-страниц на сайте Аллена.

image2

3) масштаб изображения, например, насколько большой один пиксель в загруженном изображении (например, 0,001х0,001 мм).Я бы потребовал это для анализа изображений в отношении МРТ, например.Ниже показано красным кружком.

image3

Вся вышеприведенная информация так или иначе доступна на веб-сайте, мой вопрос заключается в том, можете ли вы помочь мне сделать это программно через SDK .

РЕДАКТИРОВАТЬ:

Также было бы здорово загружать пятна "Nissl" программно, так как они не отображаются с использованием вышеупомянутой итерации цикла.Изображение показано ниже.

enter image description here

1 Ответ

0 голосов
/ 24 февраля 2019

Чтобы получить доступ к этой информации, вам нужно сформулировать несколько сложный запрос API.

from allensdk.api.queries.rma_api import RmaApi

api = RmaApi()

data_set_id = 146586401

data = api.model_query('SectionDataSet', 
                       criteria='[id$eq%d]' % data_set_id, 
                       include='section_images,treatments,probes(gene),specimen(structure)')

print("gene symbol: %s" % data[0]['probes'][0]['gene']['acronym'])
print("treatment name: %s" % data[0]['treatments'][0]['name'])
print("specimen location: %s" % data[0]['specimen']['structure']['name'])
print("section xy resolution: %f um" % data[0]['section_images'][0]['resolution'])
gene symbol: MBP
treatment name: ISH
specimen location: Cingulate Cortex
section xy resolution: 1.008000 um

Без глубокого погружения в модель данных API, SectionDataSets имеют составляющую SectionImages, Treatments, Probes и источник Specimens.Probes target Genes и Specimens могут быть связаны с Structure.Запрос загружает всю эту информацию для одного SectionDataSet во вложенный словарь.

Я не помню, как найти экстент блока образца.Я обновлю ответ, если найду его.

...