#!/usr/bin/env python
# coding=utf-8
# vim: ts=4 sw=4 et
"""
=========================
K40 Intra-DOM Calibration
=========================

Usage:
    k40_calibration.py [options]
    k40_calibration.py (-h | --help)

Options:
    -l LIGIER_IP    The IP of the ligier [default: 127.0.0.1].
    -p LIGIER_PORT  The port of the ligier [default: 5553].
    -d DET_ID       Detector ID.
    -o PLOT_DIR     The directory to save the plot [default: plots].
    -h --help       Show this screen.

"""
# Author: Jonas Reubelt <jreubelt@km3net.de> and Tamas Gal <tgal@km3net.de>
# License: MIT
import os
import km3pipe as kp
import km3pipe.style
from km3modules import k40
from km3modules.common import StatusBar, MemoryObserver, Siphon
from km3modules.plot import IntraDOMCalibrationPlotter

km3pipe.style.use('km3pipe')


def main():
    from docopt import docopt
    args = docopt(__doc__)

    det_id = int(args['-d'])
    plots_path = args['-o']
    ligier_ip = args['-l']
    ligier_port = int(args['-p'])

    det_oid = kp.db.DBManager().get_det_oid(det_id)

    pipe = kp.Pipeline(timeit=True)
    pipe.attach(
        kp.io.ch.CHPump,
        host=ligier_ip,
        port=ligier_port,
        tags='IO_TSL1, IO_MONIT',
        timeout=7 * 60 * 60 * 24,
        max_queue=200000)
    pipe.attach(kp.io.ch.CHTagger)
    pipe.attach(StatusBar, every=50000)
    pipe.attach(MemoryObserver, every=100000)
    pipe.attach(k40.MedianPMTRatesService, only_if='IO_MONIT')
    pipe.attach(kp.io.daq.TimesliceParser)
    pipe.attach(
        k40.TwofoldCounter,
        tmax=10,
        dump_filename=os.path.join(plots_path, 'twofold_counts.p'))
    pipe.attach(Siphon, volume=10 * 60 * 180, flush=True)
    pipe.attach(k40.K40BackgroundSubtractor)
    pipe.attach(k40.IntraDOMCalibrator, ctmin=-1, det_id=det_id)
    pipe.attach(
        IntraDOMCalibrationPlotter,
        det_oid=det_oid,
        data_path=plots_path,
        plots_path=plots_path)
    pipe.attach(k40.ResetTwofoldCounts)
    pipe.drain()


if __name__ == '__main__':
    main()