aboutsummaryrefslogtreecommitdiffstats
path: root/fg21sim/products.py
diff options
context:
space:
mode:
authorAaron LI <aaronly.me@outlook.com>2016-11-21 10:07:59 +0800
committerAaron LI <aaronly.me@outlook.com>2016-11-21 10:07:59 +0800
commitbc2dee6824c9507b7f73b29c0c78f6d38ac76240 (patch)
treeec35c3a7fde15d97b1305a4da242972d7db30cab /fg21sim/products.py
parente958263d6c04b35d4b5b90b42898ca024b43cb01 (diff)
downloadfg21sim-bc2dee6824c9507b7f73b29c0c78f6d38ac76240.tar.bz2
products.py: Add method "add_product()" to add one single product.
Also update the "add_component()" method to use "add_product()"
Diffstat (limited to 'fg21sim/products.py')
-rw-r--r--fg21sim/products.py56
1 files changed, 45 insertions, 11 deletions
diff --git a/fg21sim/products.py b/fg21sim/products.py
index 44db09b..6ffc542 100644
--- a/fg21sim/products.py
+++ b/fg21sim/products.py
@@ -120,6 +120,48 @@ class Products:
# Frequencies currently not set
return None
+ def add_product(self, comp_id, freq_id, filepath):
+ """
+ Add one single simulation product to the manifest.
+
+ The metadata (file path, size and MD5 checksum) of simulation
+ products are stored in the manifest.
+
+ Parameters
+ ----------
+ comp_id : str
+ ID of the component to be added.
+ freq_id : int
+ Frequency ID
+ filepath : str
+ File path of the product (HEALPix maps).
+
+ Raises
+ ------
+ ManifestError :
+ * The attribute ``self.manifestfile`` is not set.
+ """
+ if self.manifestfile is None:
+ raise ManifestError("'self.manifestfile' is not set")
+ #
+ frequencies = self.frequencies["frequencies"]
+ if comp_id not in self.manifest.keys():
+ # Initialize the manifest array for this component
+ self.manifest[comp_id] = [{} for i in range(len(frequencies))]
+ #
+ curdir = os.path.dirname(self.manifestfile)
+ self.manifest[comp_id][freq_id] = {
+ "frequency": frequencies[freq_id],
+ "healpix": {
+ # Relative path to the HEALPix map file from this manifest
+ "path": os.path.relpath(filepath, curdir),
+ # File size in bytes
+ "size": os.path.getsize(filepath),
+ "md5": hashlib.md5(filepath).hexdigest(),
+ }
+ }
+ logger.info("Added one product to the manifest: {0}".format(filepath))
+
def add_component(self, comp_id, paths):
"""
Add a simulation component to the manifest.
@@ -136,6 +178,7 @@ class Products:
The number of the paths must equal to the number of frequencies.
Raises
+ ------
ManifestError :
* The attribute ``self.manifestfile`` is not set.
* Number of input paths dose NOT equal to number of frequencies
@@ -148,17 +191,8 @@ class Products:
raise ManifestError("Number of paths (%d) != " % len(paths) +
"number of frequencies")
#
- curdir = os.path.dirname(self.manifestfile)
- self.manifest[comp_id] = [{
- "frequency": freq,
- "healpix": {
- # Relative path to the HEALPix map file from this manifest
- "path": os.path.relpath(fp, curdir),
- # File size in bytes
- "size": os.path.getsize(fp),
- "md5": hashlib.md5(fp).hexdigest(),
- }
- } for freq, fp in zip(frequencies, paths)]
+ for freq_id, filepath in enumerate(paths):
+ self.add_product(comp_id, freq_id, filepath)
logger.info("Added component '{0}' to the manifest".format(comp_id))
def checksum(self, comp_id=None, freq_id=None):