Source code for magicctapipe.scripts.lst1_magic.create_dl3_index_files
#!/usr/bin/env python
# coding: utf-8
"""
This script creates DL3 index files, i.e., the HDU and observation index
files. They will be saved in the same directory as the input DL3 files.
Usage:
$ python create_dl3_index_files.py
--input-dir dl3
"""
import argparse
import glob
import logging
import time
from pathlib import Path
from lstchain.high_level import create_hdu_index_hdu, create_obs_index_hdu
__all__ = ["create_dl3_index_files"]
logger = logging.getLogger(__name__)
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.INFO)
[docs]
def create_dl3_index_files(input_dir):
"""
Creates DL3 index files.
Parameters
----------
input_dir : str
Path to a directory where input DL3 data files are stored
Raises
------
FileNotFoundError
If any DL3 data files are not found in the input directory
"""
# Find the input files
logger.info(f"\nInput directory: {input_dir}")
file_mask = f"{input_dir}/dl3_*.fits.gz"
input_files = glob.glob(file_mask)
input_files.sort()
if len(input_files) == 0:
raise FileNotFoundError(
"Could not find any DL3 data files in the input directory."
)
logger.info("\nThe following DL3 data files are found:")
file_names = []
for input_file in input_files:
logger.info(input_file)
file_names.append(Path(input_file))
# Create the DL3 index files
logger.info("\nCreating DL3 index files...")
hdu_index_file = f"{input_dir}/hdu-index.fits.gz"
obs_index_file = f"{input_dir}/obs-index.fits.gz"
create_hdu_index_hdu(
file_list=file_names,
hdu_index_file=Path(hdu_index_file),
overwrite=True,
)
create_obs_index_hdu(
file_list=file_names,
obs_index_file=Path(obs_index_file),
overwrite=True,
)
def main():
"""Main function."""
start_time = time.time()
parser = argparse.ArgumentParser()
parser.add_argument(
"--input-dir",
"-i",
dest="input_dir",
type=str,
required=True,
help="Path to a directory where input DL3 files are stored",
)
args = parser.parse_args()
# Create the index files
create_dl3_index_files(args.input_dir)
logger.info("\nDone.")
process_time = time.time() - start_time
logger.info(f"\nProcess time: {process_time:.0f} [sec]\n")
if __name__ == "__main__":
main()