7 __all__ = [
"checksum", ]
10 exposureTypes = (afwImage.ExposureF, afwImage.ExposureD,)
11 maskedImageTypes = (afwImage.MaskedImageF, afwImage.MaskedImageD,)
12 decoratedImageTypes = (afwImage.DecoratedImageF, afwImage.DecoratedImageD,)
13 imageTypes = (afwImage.ImageF, afwImage.ImageD, afwImage.ImageI,)
19 "CRC32":
lambda obj: zlib.crc32(pickle.dumps(obj, PROTOCOL)),
20 "MD5":
lambda obj: hashlib.md5(pickle.dumps(obj, PROTOCOL)).hexdigest(),
25 """!Calculate a checksum of an object
27 We have special handling for images (e.g., breaking a MaskedImage into
28 its various components), but the object may be any picklable type.
30 @param obj Object for which to calculate the checksum
31 @param header FITS header (PropertyList) to update with checksum values, or None
32 @param sumType Type of checksum to calculate
33 @return dict with header keyword,value pairs
35 assert sumType
in sumFunctions,
"Unknown sumType: %s" % (sumType,)
36 func = sumFunctions[sumType]
40 if isinstance(obj, exposureTypes):
41 obj = obj.getMaskedImage()
42 if isinstance(obj, decoratedImageTypes):
45 if isinstance(obj, maskedImageTypes):
46 results[sumType +
"_IMAGE"] = func(obj.getImage())
47 results[sumType +
"_MASK"] = func(obj.getMask())
48 results[sumType +
"_VARIANCE"] = func(obj.getVariance())
49 elif isinstance(obj, imageTypes):
50 results[sumType +
"_IMAGE"] = func(obj)
52 results[sumType] = func(obj)
54 if header
is not None:
55 for k, v
in results.items():