Loading [MathJax]/extensions/tex2jax.js
LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
checksum.py
Go to the documentation of this file.
1import hashlib
2import zlib
3import pickle
4
5import lsst.afw.image as afwImage
6
7__all__ = ["checksum", ]
8
9# Image types to support
10exposureTypes = (afwImage.ExposureF, afwImage.ExposureD,)
11maskedImageTypes = (afwImage.MaskedImageF, afwImage.MaskedImageD,)
12decoratedImageTypes = (afwImage.DecoratedImageF, afwImage.DecoratedImageD,)
13imageTypes = (afwImage.ImageF, afwImage.ImageD, afwImage.ImageI,)
14
15PROTOCOL = 2 # Pickling protocol
16
17# Functions for creating the checksum
18sumFunctions = {
19 "CRC32": lambda obj: zlib.crc32(pickle.dumps(obj, PROTOCOL)),
20 "MD5": lambda obj: hashlib.md5(pickle.dumps(obj, PROTOCOL)).hexdigest(),
21}
22
23
24def checksum(obj, header=None, sumType="MD5"):
25 """!Calculate a checksum of an object
26
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.
29
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
34 """
35 assert sumType in sumFunctions, "Unknown sumType: %s" % (sumType,)
36 func = sumFunctions[sumType]
37
38 results = {}
39
40 if isinstance(obj, exposureTypes):
41 obj = obj.getMaskedImage()
42 if isinstance(obj, decoratedImageTypes):
43 obj = obj.getImage()
44
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)
51 else:
52 results[sumType] = func(obj)
53
54 if header is not None:
55 for k, v in results.items():
56 header.add(k, v)
57
58 return results
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
def checksum(obj, header=None, sumType="MD5")
Calculate a checksum of an object.
Definition: checksum.py:24