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
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