""" Code to compute the line profile due to various transitions.

Context : SRP
Module  : SRPLineProfile.py
Author  : Stefano Covino
Date    : 28/07/2014
E-mail  : stefano.covino@brera.inaf.it
URL:    : http://www.merate.mi.astro.it/~covino
Purpose : Compute the line profile.

Usage   : SRPLineProfile -b [arg1] -l arg2 [-h] [-v] -n arg3 -t arg4 -z arg5
            -b Dumping parameter (>= 0), km s^-1)
            -l Observed wavelength (Angstrom)
            -n Column density (>= 0, cm^-2)
            -t Transition
            -z Redshift (>= 0)
            Line profile computed by Voigt function computation.

History : (03/07/2009) First version.
        : (28/07/2015) python3 porting.
"""

import SRP.SRPSpectroscopy.Transitions as T
from SRP.SRPSpectroscopy.TauVoigt import TauVoigt
from optparse import OptionParser
import math, sys


parser = OptionParser(usage="usage: %prog -b [arg1] -l arg2 [-h] [-v] -n arg3 -t arg4 -z arg5", version="%prog 1.1.0")
parser.add_option("-b", "--b", action="store", nargs=1, type="float", dest="dump", default=0.0, help="Dumping parameter (>= 0), km s^-1)")
parser.add_option("-l", "--lambd", action="store", nargs=1, type="float", dest="lambd", default=0.0, help="Observed wavelength (Angstrom)")
parser.add_option("-n", "--n", action="store", nargs=1, type="float", dest="n", default=0.0, help="Column density (>= 0, cm^-2)")
parser.add_option("-t", "--t", action="store", nargs=1, type="string", dest="tra", help="Transition")
parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="fully describe operations")
parser.add_option("-z", "--z", action="store", nargs=1, type="float", dest="z", default=0.0, help="Redshift (>= 0)")
(options, args) = parser.parse_args()

if not options.tra:
    parser.print_help()
else:
    if not options.tra in list(T.SRPTransitionDict.keys()):
        print("Available transitions: ")
        ll = list(T.SRPTransitionDict.keys())
        ll.sort()
        for entr in ll:
            print(entr)
        if options.verbose:
            print("Transition %s not recognized." % options.tra)
    else:
        if options.lambd > 0.0 and options.z >= 0.0 and options.n > 0.0 and options.dump >= 0.0:
            tau = TauVoigt(options.lambd*1e-8,options.n,options.dump*1e5,options.z,T.SRPTransitionDict[options.tra])
            if options.verbose:
                print("Wavelength       : %.3f Angstrom" % options.lambd)
                print("N                : %g cm^-2" % options.n)
                print("Dumping:         : %g km s^-1" % (options.dump))
                print("redshift         : %.2f" % options.z)
                print("Transition:      : %s" % options.tra)
                print("Absorption factor: %g" % math.e**-tau)
            else:
                print(options.lambd, options.n, options.dump, options.z, options.tra, math.e**-tau)
        else:
            parser.print_help()
