[1]:
import tables
import numpy as np
import matplotlib.pyplot as plt

DRS4 time sampling files#

HDF5 format#

[2]:
file = "../../../test_data/real/service/PixelCalibration/Cat-A/drs4_time_sampling_from_FF/20191124/pro/time_calibration.Run01625.0000.h5"
hdf5_f=tables.open_file(file, "r")
hdf5_f
[2]:
File(filename=../../../test_data/real/service/PixelCalibration/Cat-A/drs4_time_sampling_from_FF/20191124/pro/time_calibration.Run01625.0000.h5, title=np.str_('DRS4 time correction file'), mode='r', root_uep='/', filters=Filters(complevel=0, shuffle=False, bitshuffle=False, fletcher32=False, least_significant_digit=None))
/ (RootGroup) np.str_('DRS4 time correction file')
/fan (Array(np.int64(2), np.int64(1855), np.int64(16))) np.str_('')
  atom := Float64Atom(shape=(), dflt=np.float64(0.0))
  maindim := 0
  flavor := np.str_('numpy')
  byteorder := 'little'
  chunkshape := None
/fbn (Array(np.int64(2), np.int64(1855), np.int64(16))) np.str_('')
  atom := Float64Atom(shape=(), dflt=np.float64(0.0))
  maindim := 0
  flavor := np.str_('numpy')
  byteorder := 'little'
  chunkshape := None

data#

[3]:
# Data used for calibration are:
# - fan : baseline to be subtracted per channel/pixel/capacitor (2, 1855, 4096)
# - fbn : spike to be subtracted, per channel/pixel/spike-type (2, 1855, 3)

fan = hdf5_f.root.fan
fbn = hdf5_f.root.fbn
print(fan.shape)
np.array(fan)
(np.int64(2), np.int64(1855), np.int64(16))
[3]:
array([[[ 4.66838366e+01,  7.84005347e-01, -1.24891142e-01, ...,
         -7.70001014e-03, -2.68429155e-02,  2.37796146e-02],
        [ 4.62239672e+01,  3.77843085e-01,  1.65900728e-01, ...,
          5.51706957e-02,  1.70310565e-02,  5.49935283e-02],
        [ 4.78149744e+01,  4.38758590e-01,  9.55097829e-02, ...,
         -1.58118562e-02,  1.24440432e-02, -6.88512574e-03],
        ...,
        [ 4.46634307e+01,  4.00128871e-01,  1.88213911e-01, ...,
          1.28111119e-02, -2.76051794e-03, -1.13856743e-03],
        [ 4.28549040e+01,  5.25075495e-01,  3.27044193e-01, ...,
          4.47137227e-02, -1.28659908e-02,  1.17646827e-02],
        [ 4.37697422e+01,  9.66917458e-01,  1.23332897e-01, ...,
         -5.96123847e-02, -3.70436398e-02,  2.10753446e-02]],

       [[ 4.72300334e+01, -6.94735345e-03,  3.03494670e-01, ...,
         -2.14449456e-02,  1.10874097e-02, -6.24232806e-02],
        [ 4.76021422e+01, -1.55636421e-01,  2.19632759e-01, ...,
         -1.01534066e-02, -1.38361747e-03,  3.77441866e-02],
        [ 4.91503845e+01, -1.06240950e+00, -7.06074140e-02, ...,
          1.25076451e-02, -2.90852626e-02, -1.71207132e-02],
        ...,
        [ 4.52552690e+01, -9.60023808e-01,  5.77178740e-02, ...,
          2.16251338e-02,  3.26090790e-03,  4.03090129e-02],
        [ 4.38629100e+01,  2.04322195e+00,  2.00060760e-01, ...,
         -2.40326456e-02,  6.85995403e-03, -6.11115694e-02],
        [ 4.42727855e+01,  4.23063488e-01,  5.65776218e-01, ...,
          4.05171738e-02, -4.02163240e-03, -4.61417993e-02]]],
      shape=(2, 1855, 16))
[4]:

_=plt.hist(np.median(fan,axis=2)[0],bins=50,alpha=0.5,range=[-0.13,0.13], label="fan HG") _=plt.hist(np.median(fbn,axis=2)[0],bins=50,alpha=0.5,range=[-0.13,0.13], label="fbn LG") plt.yscale('log') plt.legend()
[4]:
<matplotlib.legend.Legend at 0x7f45869d0fd0>
../../_images/user-guide_notebooks_read_DRS4_time_sampling_6_1.png

meta-data#

[5]:
hdf5_f.root._v_attrs
[5]:
/._v_attrs (AttributeSet), 42 attributes:
   [CLASS := np.str_('GROUP'),
    CTA ACTIVITY ID := np.str_('a982ebbd-9ca3-49a6-ace3-6f8f03bd33e7'),
    CTA ACTIVITY NAME := np.str_('create_drs4_time_file'),
    CTA ACTIVITY SOFTWARE NAME := np.str_('lstcam_calib'),
    CTA ACTIVITY SOFTWARE VERSION := np.str_('0.1.dev217+g01a60dd'),
    CTA ACTIVITY START TIME := np.str_('2024-07-15 13:28:22.665'),
    CTA ACTIVITY STOP TIME := np.str_('2024-07-15 13:34:48.514'),
    CTA ACTIVITY TYPE := np.str_('software'),
    CTA CONTACT EMAIL := np.str_('unknown'),
    CTA CONTACT NAME := np.str_('Franca Cassol'),
    CTA CONTACT ORGANIZATION := np.str_('LST Consortium'),
    CTA INSTRUMENT CLASS := np.str_('Camera'),
    CTA INSTRUMENT ID := np.str_('unspecified'),
    CTA INSTRUMENT SITE := np.str_('CTA-North'),
    CTA INSTRUMENT SUBTYPE := np.str_('unspecified'),
    CTA INSTRUMENT TYPE := np.str_('LST'),
    CTA INSTRUMENT VERSION := np.str_('unspecified'),
    CTA PROCESS ID := np.str_(''),
    CTA PROCESS SUBTYPE := np.str_('Calibration'),
    CTA PROCESS TYPE := np.str_('Observation'),
    CTA PRODUCT CREATION TIME := np.str_('2024-07-15 13:34:48.538'),
    CTA PRODUCT DATA ASSOCIATION := np.str_('Telescope'),
    CTA PRODUCT DATA CATEGORY := np.str_('A'),
    CTA PRODUCT DATA LEVELS := np.str_('R1'),
    CTA PRODUCT DATA MODEL NAME := np.str_('Unofficial monitoring R1'),
    CTA PRODUCT DATA MODEL URL := np.str_('unknown'),
    CTA PRODUCT DATA MODEL VERSION := np.str_('1.0'),
    CTA PRODUCT DESCRIPTION := np.str_('DRS4 sampling time coefficients'),
    CTA PRODUCT FORMAT := np.str_(''),
    CTA PRODUCT ID := np.str_('a25b28a5-71a0-4828-8073-92973a30b9e6'),
    CTA REFERENCE VERSION := np.str_('1'),
    CTAPIPE_IO_LST_VERSION := np.str_('0.22.6'),
    CTAPIPE_VERSION := np.str_('0.19.3'),
    LSTCAM_CALIB_VERSION := np.str_('0.1.dev217+g01a60dd'),
    PROV_LOG := np.str_('/fefs/aswg/workspace/franca.cassol/data/real/monitoring/PixelCalibration/Cat-A_ctapipe_v0.17/drs4_time_sampling_from_FF/20191124/v0.1.dev217+g01a60dd/log/time_calibration.Run01625.0000_2024-07-15T13:28:12.provenance.log'),
    PYTABLES_FORMAT_VERSION := np.str_('2.1'),
    RUN_START := np.str_('2019-11-24 22:04:03.000'),
    TEL_ID := np.int64(1),
    TITLE := np.str_('DRS4 time correction file'),
    VERSION := np.str_('1.0'),
    n_events := np.int64(9270),
    n_harm := np.int64(16)]

Fits format#

[6]:
from astropy.io import fits

file = "../../../test_data/real/service/PixelCalibration/Cat-A/drs4_time_sampling_from_FF/20191124/pro/time_calibration.Run01625.0000.fits.gz"
fits_f = fits.open(file)

HDU#

[7]:
fits_f.info()
Filename: ../../../test_data/real/service/PixelCalibration/Cat-A/drs4_time_sampling_from_FF/20191124/pro/time_calibration.Run01625.0000.fits.gz
No.    Name      Ver    Type      Cards   Dimensions   Format
  0  PRIMARY       1 PrimaryHDU      40   ()
  1  FAN           1 ImageHDU        11   (16, 1855, 2)   float64
  2  FBN           1 ImageHDU        11   (16, 1855, 2)   float64

data#

[8]:
fits_f["FAN"].data
[8]:
array([[[ 4.66838366e+01,  7.84005347e-01, -1.24891142e-01, ...,
         -7.70001014e-03, -2.68429155e-02,  2.37796146e-02],
        [ 4.62239672e+01,  3.77843085e-01,  1.65900728e-01, ...,
          5.51706957e-02,  1.70310565e-02,  5.49935283e-02],
        [ 4.78149744e+01,  4.38758590e-01,  9.55097829e-02, ...,
         -1.58118562e-02,  1.24440432e-02, -6.88512574e-03],
        ...,
        [ 4.46634307e+01,  4.00128871e-01,  1.88213911e-01, ...,
          1.28111119e-02, -2.76051794e-03, -1.13856743e-03],
        [ 4.28549040e+01,  5.25075495e-01,  3.27044193e-01, ...,
          4.47137227e-02, -1.28659908e-02,  1.17646827e-02],
        [ 4.37697422e+01,  9.66917458e-01,  1.23332897e-01, ...,
         -5.96123847e-02, -3.70436398e-02,  2.10753446e-02]],

       [[ 4.72300334e+01, -6.94735345e-03,  3.03494670e-01, ...,
         -2.14449456e-02,  1.10874097e-02, -6.24232806e-02],
        [ 4.76021422e+01, -1.55636421e-01,  2.19632759e-01, ...,
         -1.01534066e-02, -1.38361747e-03,  3.77441866e-02],
        [ 4.91503845e+01, -1.06240950e+00, -7.06074140e-02, ...,
          1.25076451e-02, -2.90852626e-02, -1.71207132e-02],
        ...,
        [ 4.52552690e+01, -9.60023808e-01,  5.77178740e-02, ...,
          2.16251338e-02,  3.26090790e-03,  4.03090129e-02],
        [ 4.38629100e+01,  2.04322195e+00,  2.00060760e-01, ...,
         -2.40326456e-02,  6.85995403e-03, -6.11115694e-02],
        [ 4.42727855e+01,  4.23063488e-01,  5.65776218e-01, ...,
          4.05171738e-02, -4.02163240e-03, -4.61417993e-02]]],
      shape=(2, 1855, 16), dtype='>f8')

meta-data#

[9]:
fits_f["PRIMARY"].header
[9]:
SIMPLE  =                    T / conforms to FITS standard
BITPIX  =                    8 / array data type
NAXIS   =                    0 / number of array dimensions
EXTEND  =                    T
HIERARCH CTA REFERENCE VERSION = '1       '
HIERARCH CTA CONTACT EMAIL = 'unknown '
HIERARCH CTA CONTACT NAME = 'Franca Cassol'
HIERARCH CTA CONTACT ORGANIZATION = 'LST Consortium'
HIERARCH CTA PRODUCT CREATION TIME = '2024-09-10 15:47:01.203'
HIERARCH CTA PRODUCT DATA ASSOCIATION = 'Telescope'
HIERARCH CTA PRODUCT DATA CATEGORY = 'A       '
HIERARCH CTA PRODUCT DATA LEVELS = 'R1      '
HIERARCH CTA PRODUCT DATA MODEL NAME = 'Unofficial monitoring R1'
HIERARCH CTA PRODUCT DATA MODEL URL = 'unknown '
HIERARCH CTA PRODUCT DATA MODEL VERSION = '1.0     '
HIERARCH CTA PRODUCT DESCRIPTION = 'DRS4 sampling time coefficients'
HIERARCH CTA PRODUCT FORMAT = ''
HIERARCH CTA PRODUCT ID = '4ffe0465-c8bd-4492-85a1-5238b99bb449'
HIERARCH CTA PROCESS ID = ''
HIERARCH CTA PROCESS SUBTYPE = 'Calibration'
HIERARCH CTA PROCESS TYPE = 'Observation'
HIERARCH CTA ACTIVITY ID = '3e631709-192a-4684-aada-fe80e95a60bc'
HIERARCH CTA ACTIVITY NAME = 'create_drs4_time_file'
HIERARCH CTA ACTIVITY SOFTWARE NAME = 'lstcam_calib'
HIERARCH CTA ACTIVITY SOFTWARE VERSION = '0.1.dev292+g60dda5e'
HIERARCH CTA ACTIVITY START TIME = '2024-09-10 15:41:35.611'
HIERARCH CTA ACTIVITY STOP TIME = '2024-09-10 15:47:01.193'
HIERARCH CTA ACTIVITY TYPE = 'software'
HIERARCH CTA INSTRUMENT CLASS = 'Camera  '
HIERARCH CTA INSTRUMENT ID = 'unspecified'
HIERARCH CTA INSTRUMENT SITE = 'CTA-North'
HIERARCH CTA INSTRUMENT SUBTYPE = 'unspecified'
HIERARCH CTA INSTRUMENT TYPE = 'LST     '
HIERARCH CTA INSTRUMENT VERSION = 'unspecified'
HIERARCH LSTCAM_CALIB_VERSION = '0.1.dev292+g60dda5e'
HIERARCH CTAPIPE_VERSION = '0.19.3  '
HIERARCH CTAPIPE_IO_LST_VERSION = '0.22.6  '
TEL_ID  =                    1
PROV_LOG= '/fefs/aswg/workspace/franca.cassol/data/real/monitoring/PixelCalibr&'
CONTINUE  'ation/Cat-A_ctapipe_v0.17/drs4_time_sampling_from_FF/20191124/v0.1.&'
CONTINUE  'dev292+g60dda5e/log/time_calibration.Run01625.0000_2024-09-10T15:41&'
CONTINUE  ':28.provenance.log'
HIERARCH RUN_START = '2019-11-24 22:04:03.000'
[10]:
fits_f["FAN"].header
[10]:
XTENSION= 'IMAGE   '           / Image extension
BITPIX  =                  -64 / array data type
NAXIS   =                    3 / number of array dimensions
NAXIS1  =                   16
NAXIS2  =                 1855
NAXIS3  =                    2
PCOUNT  =                    0 / number of parameters
GCOUNT  =                    1 / number of groups
EXTNAME = 'FAN     '           / extension name
N_EVENTS=                 9270
N_HARM  =                   16