Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1from lsst.afw.fits.fitsLib import MemFileManager, ImageWriteOptions, ImageCompressionOptions 

2 

3import lsst.afw.table 

4import lsst.afw.image 

5 

6 

7def reduceToFits(obj): 

8 """Pickle to FITS 

9 

10 Intended to be used by the ``__reduce__`` method of a class. 

11 

12 Parameters 

13 ---------- 

14 obj 

15 any object with a ``writeFits`` method taking a 

16 `~lsst.afw.fits.MemFileManager` and possibly an 

17 `~lsst.afw.fits.ImageWriteOptions`. 

18 

19 Returns 

20 ------- 

21 reduced : `tuple` [callable, `tuple`] 

22 a tuple in the format returned by `~object.__reduce__` 

23 """ 

24 manager = MemFileManager() 

25 options = ImageWriteOptions(ImageCompressionOptions(ImageCompressionOptions.NONE)) 

26 table = getattr(obj, 'table', None) 

27 if isinstance(table, lsst.afw.table.BaseTable): 

28 # table objects don't take `options` 

29 obj.writeFits(manager) 

30 else: 

31 # MaskedImage and Exposure both require options for each plane (image, mask, variance) 

32 if isinstance(obj, (lsst.afw.image.MaskedImage, lsst.afw.image.Exposure)): 

33 obj.writeFits(manager, options, options, options) 

34 else: 

35 obj.writeFits(manager, options) 

36 size = manager.getLength() 

37 data = manager.getData() 

38 return (unreduceFromFits, (obj.__class__, data, size)) 

39 

40 

41def unreduceFromFits(cls, data, size): 

42 """Unpickle from FITS 

43 

44 Unpack data produced by `reduceToFits`. This method is used by the 

45 pickling framework and should not need to be called from user code. 

46 

47 Parameters 

48 ---------- 

49 cls : `type` 

50 the class of object to unpickle. Must have a class-level ``readFits`` 

51 method taking a `~lsst.afw.fits.MemFileManager`. 

52 data : `bytes` 

53 an in-memory representation of the object, compatible with 

54 `~lsst.afw.fits.MemFileManager` 

55 size : `int` 

56 the length of `data` 

57 

58 Returns 

59 ------- 

60 unpickled : ``cls`` 

61 the object represented by ``data`` 

62 """ 

63 manager = MemFileManager(size) 

64 manager.setData(data, size) 

65 return cls.readFits(manager)