spacetelescope / imexam

imexam is a python tool for simple image examination, and plotting, with similar functionality to IRAF's imexamine
http://imexam.readthedocs.io
BSD 3-Clause "New" or "Revised" License
74 stars 45 forks source link

TypeError: 'float' object is not callable #193

Open mschwamb opened 4 years ago

mschwamb commented 4 years ago

For a Aperture sum, with radius region_size g Return curve of growth plot r Return the radial profile plot

I am getting errors when I do the three above utilities. The other utilities in imexam seem to work just fine. I'm using python 3 and a jupyter notebook. I've displayed an image reduced with the Gemin DRAGONS pacakge.

import imexam

viewer=imexam.connect() # startup a new DS9 window

viewer.load_fits('N20191112S0096_sourcesDetected.fits') # load a fits image into it

viewer.imexam()

When I type r:

Current image /Users/mschwamb/Research/playground/N20191112S0096_sourcesDetected.fits xc=1419.887294 yc=839.575413


TypeError Traceback (most recent call last)

in ----> 1 viewer.imexam() ~/anaconda3/lib/python3.7/site-packages/imexam/connect.py in imexam(self) 150 self._run_event_imexam() 151 else: --> 152 self._run_imexam() 153 else: 154 warnings.warn("No valid image loaded in viewer") ~/anaconda3/lib/python3.7/site-packages/imexam/connect.py in _run_imexam(self) 266 self._check_slice() 267 self.exam.do_option( --> 268 x, y, current_key) 269 except KeyError: 270 print( ~/anaconda3/lib/python3.7/site-packages/imexam/imexamine.py in do_option(self, x, y, key) 189 """ 190 self.log.debug("pressed: {0}, {1:s}".format(key, self.imexam_option_funcs[key][0].__name__)) --> 191 self.imexam_option_funcs[key][0](x, y, self._data) 192 193 def get_options(self): ~/anaconda3/lib/python3.7/site-packages/imexam/imexamine.py in radial_profile(self, x, y, data, form, genplot, fig) 1058 # The bkg sum with the circular aperture is then 1059 # the mean local background times the circular apreture area. -> 1060 annulus_area = annulus_apertures.area() 1061 sky_per_pix = float(bkgflux_table['aperture_sum'] / 1062 annulus_area) TypeError: 'float' object is not callable I'm not sure what's the issue or how to fix it. I'm happy to share the image if that would be helpful for debugging.
hjmcc commented 4 years ago

I have the same bug in the the profile or aperture photometry tools, using python=3.6 or 3.7. I am also using anaconda (on mac). Shame, this seemed like a good replacement for that IRAF tool!

In [12]: imexam.__version__
Out[12]: '0.8.1'
~/anaconda3/envs/py36-astropy/lib/python3.6/site-packages/imexam/imexamine.py in radial_profile(self, x, y, data, form, genplot, fig)
   1058             # The bkg sum with the circular aperture is then
   1059             # the mean local background times the circular apreture area.
-> 1060             annulus_area = annulus_apertures.area()
   1061             sky_per_pix = float(bkgflux_table['aperture_sum'] /
   1062                                 annulus_area)

TypeError: 'float' object is not callable
hjmcc commented 4 years ago

Also trying with the development version produces the same errors: (pip install git+https://github.com/spacetelescope/imexam.git)

hjmcc commented 4 years ago

It seems there was a change to the photutils.aperture API in version 0.7 (.area() was switched to an attribute and not a method). Switching back to version 0.6 doesn't fix the problem. Changing the code to .area from .area() doesn't work for me unfortunately (another bug pops up).

sosey commented 4 years ago

sorry, I've been swamped with other work lately. I'm sure this can be fixed, I'll try and take a look soon, but thank you for reporting the issues.

hjmcc commented 4 years ago

No worries, thanks for making this tool available, it is very helpful !

For info, in fact switching to .area from .area() fixes two of the three aperture sum tasks, 'a' and 'g', the error now given with 'r' is

~/anaconda3/envs/py37-astropy/lib/python3.7/site-packages/imexam/connect.py in imexam(self)
    150                 self._run_event_imexam()
    151             else:
--> 152                 self._run_imexam()
    153         else:
    154             warnings.warn("No valid image loaded in viewer")

~/anaconda3/envs/py37-astropy/lib/python3.7/site-packages/imexam/connect.py in _run_imexam(self)
    266                                     self._check_slice()
    267                                 self.exam.do_option(
--> 268                                     x, y, current_key)
    269                 except KeyError:
    270                     print(

~/anaconda3/envs/py37-astropy/lib/python3.7/site-packages/imexam/imexamine.py in do_option(self, x, y, key)
    189         """
    190         self.log.debug("pressed: {0}, {1:s}".format(key, self.imexam_option_funcs[key][0].__name__))
--> 191         self.imexam_option_funcs[key][0](x, y, self._data)
    192
    193     def get_options(self):

~/anaconda3/envs/py37-astropy/lib/python3.7/site-packages/imexam/imexamine.py in radial_profile(self, x, y, data, form, genplot, fig)
   1068             self.log.info("Background per pixel: {0:f}".format(sky_per_pix))
   1069
-> 1070             flux -= sky_per_pix
   1071
   1072             if getdata:

UFuncTypeError: Cannot cast ufunc 'subtract' output from dtype('float64') to dtype('uint16') with casting rule 'same_kind'
sosey commented 4 years ago

try the code from this PR: https://github.com/spacetelescope/imexam/pull/195 and let me know if it's working for you. I tried it with 0.6.dev28+g5fc8f449 and 0.7.1

mschwamb commented 4 years ago

I updated with pip install --upgrade imexam and tried again and still having the same issue.

pjpessi commented 4 years ago

Hi, I get this same error when in python 3.6.10 I run viewer.imexam() and press a. It says you are 'calling' a float, so maybe there are () instead of [ ] somewhere?


TypeError Traceback (most recent call last)

in ----> 1 viewer.imexam() /opt/anaconda3/envs/python3/lib/python3.6/site-packages/imexam/connect.py in imexam(self) 150 self._run_event_imexam() 151 else: --> 152 self._run_imexam() 153 else: 154 warnings.warn("No valid image loaded in viewer") /opt/anaconda3/envs/python3/lib/python3.6/site-packages/imexam/connect.py in _run_imexam(self) 266 self._check_slice() 267 self.exam.do_option( --> 268 x, y, current_key) 269 except KeyError: 270 print( /opt/anaconda3/envs/python3/lib/python3.6/site-packages/imexam/imexamine.py in do_option(self, x, y, key) 189 """ 190 self.log.debug("pressed: {0}, {1:s}".format(key, self.imexam_option_funcs[key][0].__name__)) --> 191 self.imexam_option_funcs[key][0](x, y, self._data) 192 193 def get_options(self): /opt/anaconda3/envs/python3/lib/python3.6/site-packages/imexam/imexamine.py in aper_phot(self, x, y, data, fig) 566 # The bkg sum with the circular aperture is then 567 # then mean local background tims the circular apreture area. --> 568 aperture_area = apertures.area() 569 annulus_area = annulus_apertures.area() 570 TypeError: 'float' object is not callable
pjpessi commented 4 years ago

Same issue when running plots.curve_of_growth(j[0],j[1],data,genplot=False)

/opt/anaconda3/envs/python3/lib/python3.6/site-packages/imexam/imexamine.py in curve_of_growth(self, x, y, data, genplot, fig) 1233 aper_flux, annulus_sky, skysub_flux = self._aperture_phot( 1234 centerx, centery, data, radsize=rad, sky_inner=inner, -> 1235 skywidth=width, method="exact", subpixels=subpixels) 1236 radius.append(rad) 1237 if self.curve_of_growth_pars["background"][0]:

/opt/anaconda3/envs/python3/lib/python3.6/site-packages/imexam/imexamine.py in _aperture_phot(self, x, y, data, radsize, sky_inner, skywidth, method, subpixels) 1334 # circular aperture is then 1335 # then mean local background times the circular apreture area. -> 1336 aperture_area = apertures.area() 1337 annulus_area = annulus_apertures.area() 1338

TypeError: 'float' object is not callable

patkel commented 4 years ago

Hi, this problem can be fixed by removing the parentheses after area. i.e., area() -> area

sosey commented 4 years ago

This code was fixed in #195 and is on the master branch, but I haven't had a chance to make a formal release, so there isn't a new pip release. I'll try and get to a release soon, but until then you can install straight from the repo:

pip uninstall imexam pip install git+https://github.com/spacetelescope/imexam.git

pjpessi commented 4 years ago

Installing imexam with pip somehow breaks my xpa installation. I wrote the error below. It would be nice to have this version available to install with conda. I guess I will wait until then.


NameError Traceback (most recent call last) ~/anaconda3/envs/py3/lib/python3.6/site-packages/imexam/util.py in list_active_ds9(verbose) 81 try: ---> 82 sessions = xpa.get(b"xpans").decode().strip().split("\n") 83 if ((sessions is None or len(sessions) < 1) and verbose):

NameError: name 'xpa' is not defined

During handling of the above exception, another exception occurred:

NameError Traceback (most recent call last)

in ----> 1 viewer=imexam.connect("ds9") ~/anaconda3/envs/py3/lib/python3.6/site-packages/imexam/connect.py in __init__(self, target, path, viewer, wait_time, quit_window, port) 94 path=path, 95 wait_time=wait_time, ---> 96 quit_ds9_on_del=quit_window) 97 self._event_driven_exam = False # use the imexam loop 98 ~/anaconda3/envs/py3/lib/python3.6/site-packages/imexam/ds9_viewer.py in __init__(self, target, path, wait_time, quit_ds9_on_del) 206 if target: 207 # check to see if the target exists --> 208 active = util.list_active_ds9(False) 209 if target in list(active): 210 self._xpa_name = target ~/anaconda3/envs/py3/lib/python3.6/site-packages/imexam/util.py in list_active_ds9(verbose) 90 for line in sessions: 91 print(line) ---> 92 except (ValueError, xpa.XpaException): 93 print("No active sessions registered") 94 NameError: name 'xpa' is not defined