Фотометрия / Апертурная фотометрия вызывает ошибку «Нетип» - PullRequest
0 голосов
/ 28 апреля 2018

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

b_aperture = SkyCircularAperture(b_position, r= r*u.arcsec)
b_annulus_aperture = SkyCircularAnnulus(b_position, r_in= r_in*  u.arcsec, r_out= r_out* u.arcsec) 
b_ap_pix = b_aperture.to_pixel(w_n)
b_ap_pix_mask= b_ap_pix.to_mask(method='exact')[0]
c_img_data = b_ap_pix_mask.apply(masked_img_aper)

Это прекрасно работает на большинстве изображений, но на некоторых из них срабатывает следующая ошибка;

> <ipython-input-41-d3d69b9fd615> in <module>()
 51         b_ap_pix = b_aperture.to_pixel(w_n)
 52         b_ap_pix_mask= b_ap_pix.to_mask(method='exact')[0]   
 53         c_img_data = b_ap_pix_mask.apply(masked_img_aper)
 55         b_phot_table = aperture_photometry(masked_img_aper, b_aperture, method ='exact', wcs =w_n )
 /Users/aprakash/Library/Enthought/Canopy/edm/envs/User/lib/python3.5/site-packages/photutils/aperture/core.py in apply(self, data, fill_value)
719         """ 
721         return self.cutout(data, fill_value=fill_value) * self.data
722 
TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'}

Эта ошибка обычно возникает, когда переменные не определены, но я проверил, что переменная здесь "masked_img_aper" определена и выглядит как нормальное изображение. Маска "b_ap_pix_mask" также выглядит нормально, как и другие маски на предыдущих изображениях. Итак, я не уверен, что происходит и как это исправить. Мой код выполняется в цикле над тысячами изображений, и это происходит только для нескольких изображений, что разбивает код. Я хотел бы обойти эту проблему (возможно, используя выражение «если») или исправить это.

Я пытался следовать, но это не сработало;

if (isinstance(np.array(b_ap_pix_mask.apply(masked_img_aper)), NoneType) == False;

Любые идеи будут оценены. Лучший, Аби

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Хорошо, я нашел способ обойти эту проблему, используя следующее:

try:
    c_img_data = b_ap_pix_mask.multiply(masked_img_aper)
except:
    print('Error calling b_ap_pix_mask.multiply(), ignoring')
    pass

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

0 голосов
/ 28 апреля 2018

Похоже, это ошибка, которая была исправлена ​​в текущей версии: https://github.com/astropy/photutils/pull/646

...