예제 #1
0
    def test_normalize_nedm_val_ahp_amp(self):
        with open('tests/test_html_data_tables/example_html_table_exp_facts.html', mode='rb') as f:
            exp_fact_table_text = f.read()
        article_ob = m.Article.objects.create(title='asdf', pmid='456')
        data_table_ob = m.DataTable.objects.create(table_html=exp_fact_table_text, article=article_ob)
        data_source_ob = m.DataSource.objects.create(data_table=data_table_ob)

        # create ephys concept maps
        ephys_unit = m.Unit.objects.create(name=u'V', prefix = 'm')
        ahp_amp_ephys_ob = m.EphysProp.objects.create(name='AHP amplitude', units = ephys_unit,
                                                      min_range = 0, max_range = 50)
        ecm = m.EphysConceptMap.objects.create(dt_id='td-68', source=data_source_ob, ephys_prop=ahp_amp_ephys_ob, ref_text = u'blah (mV)')

        neuron_ob = m.Neuron.objects.get_or_create(name='Other')[0]
        ncm = m.NeuronConceptMap.objects.create(dt_id='th-2', source=data_source_ob, neuron=neuron_ob,
                                                neuron_long_name='thalamus parafascicular nucleus')

        input_value = -9
        error_value = 1.0
        nedm = m.NeuronEphysDataMap(neuron_concept_map = ncm, ephys_concept_map = ecm, dt_id = 'td-3',
                                    source = data_source_ob, val = input_value, err = error_value)

        normalized_dict = normalize_nedm_val(nedm)
        expected_value = 9
        expected_error = 1.0
        self.assertEqual(normalized_dict['value'], expected_value)
        self.assertEqual(normalized_dict['error'], expected_error)
예제 #2
0
def normalize_all_nedms():
    """Iterate through all neuroelectro NeuronEphysDataMap objects and normalize for differences in units"""
    nedms = m.NeuronEphysDataMap.objects.filter(neuron_concept_map__times_validated__gt = 0)
    nedms = nedms.exclude(source__data_table__irrelevant_flag = True)

    nedm_count = nedms.count()
    for i,nedm in enumerate(nedms):
        prog(i, nedm_count)
        norm_dict = normalize_nedm_val(nedm)
        # print norm_dict
        # print nedm.val_norm
        if nedm.val_norm is None:
            # if no existing normalized value for nedm in DB
            nedm.val_norm = norm_dict['value']
            nedm.err_norm = norm_dict['error']
            nedm.save()

        elif np.isclose(nedm.val, nedm.val_norm):
            # if there is a normalized value, but it's the same as the unnormalized value
            # so it may need to be updated
            norm_value = norm_dict['value']

            if norm_value is None:
                # can't normalize value but there's an existing one in the database
                # so keep it as long as it's in an appropriate range

                if check_data_val_range(nedm.val_norm, nedm.ephys_concept_map.ephys_prop) is False:
                    print 'deleting pre-normalized value of %s because out of appropriate range for %s ' % (nedm.val_norm, nedm.ephys_concept_map.ephys_prop )
                    nedm.val_norm = None
                    nedm.err_norm = None
                    nedm.save()
                pass
            elif np.isclose(norm_value, nedm.val_norm):
                # new normalized value same as old normalized value, so do nothing
                pass
                # nedm.err_norm = norm_dict['error']
                # nedm.save()
            else:
                # save nedm value
                nedm.val_norm = norm_value
                nedm.err_norm = norm_dict['error']
                nedm.save()
                # normalizing basically failed for some reason
        else:
            # there's a normalized value but it's different from what the algorithm suggests, so it's likely manually added

            # if existing normalized value is out of range
            if check_data_val_range(nedm.val_norm, nedm.ephys_concept_map.ephys_prop) is False:
                print 'deleting pre-normalized value of %s because out of appropriate range for %s ' % (nedm.val_norm, nedm.ephys_concept_map.ephys_prop )
                nedm.val_norm = None
                nedm.err_norm = None
                nedm.save()

            else:
                nedm.err_norm = norm_dict['error']
                nedm.save()
        # after all the checks above, do a final check for if algorithmically normalzied value is in correct range
        annotate_misnormalized_nedm(nedm)
예제 #3
0
def annotate_misnormalized_nedm(nedm):
    ''' if can't algorithmically normalize nedm value to something appropriate, and raw value is out of range,
    leave a note in corresponding ecm in table'''
    norm_dict = normalize_nedm_val(nedm)
    if norm_dict['value'] is None and check_data_val_range(nedm.val, nedm.ephys_concept_map.ephys_prop) is False:
        ecm = nedm.ephys_concept_map
        normalizing_failed_note = 'Parsing failed to normalize ephys data'
        if not ecm.note:
            ecm.note = normalizing_failed_note
            ecm.changed_by = m.get_robot_user()
            ecm.save()
            print 'adding failed normalizing note to %s with data table id %d' % (ecm.ephys_prop, ecm.source.data_table.pk)
def normalizeNedms():
    nedm_list = m.NeuronEphysDataMap.objects.all()
    for nedm in nedm_list:
        if nedm.ephys_concept_map.ephys_prop.id in [8, 1, 13, 27]:
            pass
        elif nedm.val_norm:
            continue
        normalized_dict = normalize_nedm_val(nedm)
        if normalized_dict["value"]:
            nedm.val_norm = normalized_dict["value"]
            nedm.err_norm = normalized_dict["error"]

            # print [nedm.ephys_concept_map.ephys_prop, nedm.ephys_concept_map.ref_text, nedm.val, nedm.val_norm]
            nedm.save()
예제 #5
0
    def test_normalize_nedm_val_ir(self):
        with open('tests/test_html_data_tables/example_html_table_exp_facts.html', mode='rb') as f:
            exp_fact_table_text = f.read()
        article_ob = m.Article.objects.create(title='asdf', pmid='456')
        data_table_ob = m.DataTable.objects.create(table_html=exp_fact_table_text, article=article_ob)
        data_source_ob = m.DataSource.objects.create(data_table=data_table_ob)

        # create ephys concept maps
        ephys_unit = m.Unit.objects.create(name=u'Ω', prefix = 'M')
        ir_ephys_ob = m.EphysProp.objects.create(name='input resistance', units = ephys_unit)
        ecm = m.EphysConceptMap.objects.create(dt_id='td-68', source=data_source_ob, ephys_prop=ir_ephys_ob, ref_text = u'blah (GΩ)')

        neuron_ob = m.Neuron.objects.get_or_create(name='Other')[0]
        ncm = m.NeuronConceptMap.objects.create(dt_id='th-2', source=data_source_ob, neuron=neuron_ob,
                                                neuron_long_name='thalamus parafascicular nucleus')

        input_value = .2
        nedm = m.NeuronEphysDataMap(neuron_concept_map = ncm, ephys_concept_map = ecm, dt_id = 'td-3', source = data_source_ob, val = input_value)

        normalized_dict = normalize_nedm_val(nedm)
        expected_value = 200
        self.assertEqual(normalized_dict['value'], expected_value)