#!/usr/bin/env python3
# -----------------------------------------------------------------------------
#   Copyright (C): OpenGATE Collaboration
#   This software is distributed under the terms
#   of the GNU Lesser General  Public Licence (LGPL)
#   See LICENSE.md for further details
# -----------------------------------------------------------------------------

import sys
import numpy as np
import gatetools.phsp as phsp
import gatetools as gt
import click
import os
import logging
logger=logging.getLogger(__name__)

CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])
@click.command(context_settings=CONTEXT_SETTINGS)
@click.argument('filename')
@click.option('-n', default=float(1e5), help='Use -1 to read all data')
@gt.add_options(gt.common_options)
def gt_phsp_info(filename, n, **kwargs):
    '''
    \b
    Print information about the given PHSP phase-space file

    \b
    <FILENAME> : input PHSP root/npy file
    '''

    # logger
    gt.logging_conf(**kwargs)

    data, keys, m = phsp.load(filename, n)

    # print info
    print(f'File:        {filename}')
    statinfo = os.stat(filename)
    print(f'Size:        {phsp.humansize(statinfo.st_size)}')
    b, extension = os.path.splitext(filename)
    if (extension == '.root'):
        t = 'root'
    if (extension == '.npy'):
        t = 'npy'
    print(f'Type:        {t} {data.dtype}')
    print(f'Nb values:   {m} ({m:.2e})')
    n = len(data)
    print(f'Read values: {n} ({n:.2e})')
    print(f'Nb of keys:  {len(keys)}')
    print(f'Keys:        ', *keys)

    # stats info per key
    print('{:<10} {:>10} {:>10} {:>10} {:>10}'.format('key', 'min', 'max', 'mean', 'std'))
    i=0
    for k in keys:
        x = data[:,i]
        print('{:10} {:10.3f} {:10.3f} {:10.3f} {:10.3f}'.format(k, np.amin(x), np.amax(x), np.mean(x), np.std(x)))
        i = i+1

# --------------------------------------------------------------------------
if __name__ == '__main__':
    gt_phsp_info()

