1 from __future__
import absolute_import, division, print_function
3 from future
import standard_library
4 standard_library.install_aliases()
12 __all__ = [
"checksum", ]
15 exposureTypes = (afwImage.ExposureF, afwImage.ExposureD,)
16 maskedImageTypes = (afwImage.MaskedImageF, afwImage.MaskedImageD,)
17 decoratedImageTypes = (afwImage.DecoratedImageF, afwImage.DecoratedImageD,)
18 imageTypes = (afwImage.ImageF, afwImage.ImageD, afwImage.ImageI,)
24 "CRC32":
lambda obj: zlib.crc32(pickle.dumps(obj, PROTOCOL)),
25 "MD5":
lambda obj: hashlib.md5(pickle.dumps(obj, PROTOCOL)).hexdigest(),
30 """!Calculate a checksum of an object 32 We have special handling for images (e.g., breaking a MaskedImage into 33 its various components), but the object may be any picklable type. 35 @param obj Object for which to calculate the checksum 36 @param header FITS header (PropertyList) to update with checksum values, or None 37 @param sumType Type of checksum to calculate 38 @return dict with header keyword,value pairs 40 assert sumType
in sumFunctions,
"Unknown sumType: %s" % (sumType,)
41 func = sumFunctions[sumType]
45 if isinstance(obj, exposureTypes):
46 obj = obj.getMaskedImage()
47 if isinstance(obj, decoratedImageTypes):
50 if isinstance(obj, maskedImageTypes):
51 results[sumType +
"_IMAGE"] = func(obj.getImage())
52 results[sumType +
"_MASK"] = func(obj.getMask())
53 results[sumType +
"_VARIANCE"] = func(obj.getVariance())
54 elif isinstance(obj, imageTypes):
55 results[sumType +
"_IMAGE"] = func(obj)
57 results[sumType] = func(obj)
59 if header
is not None:
60 for k, v
in results.items():
def checksum(obj, header=None, sumType="MD5")
Calculate a checksum of an object.
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects...