#! /usr/bin/env python

import sys
import argparse
import mpmath


##################
# xsec functions #
##################

def get_xsec(process, rep, l, sommerfeld, m, v, alphas, alphasommerfeld):
	if process == 'sstoqq':
		if rep == 3:
			return xsec_sstoqq_3(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 6:
			return xsec_sstoqq_6(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 8:
			return xsec_sstoqq_8(l, sommerfeld, m, v, alphas, alphasommerfeld)
		return 0.0

	if process == 'sstogg':
		if rep == 3:
			return xsec_sstogg_3(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 6:
			return xsec_sstogg_6(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 8:
			return xsec_sstogg_8(l, sommerfeld, m, v, alphas, alphasommerfeld)
		return 0.0;

	if process == 'fftoqq':
		if rep == 3:
			return xsec_fftoqq_3(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 6:
			return xsec_fftoqq_6(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 8:
			return xsec_fftoqq_8(l, sommerfeld, m, v, alphas, alphasommerfeld)
		return 0.0

	if process == 'fftogg':
		if rep == 3:
			return xsec_fftogg_3(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 6:
			return xsec_fftogg_6(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 8:
			return xsec_fftogg_8(l, sommerfeld, m, v, alphas, alphasommerfeld)
		return 0.0

	if process == 'vvtoqq':
		if rep == 3:
			return xsec_vvtoqq_3(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 6:
			return xsec_vvtoqq_6(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 8:
			return xsec_vvtoqq_8(l, sommerfeld, m, v, alphas, alphasommerfeld)
		return 0.0

	if process == 'vvtogg':
		if rep == 3:
			return xsec_vvtogg_3(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 6:
			return xsec_vvtogg_6(l, sommerfeld, m, v, alphas, alphasommerfeld)
		if rep == 8:
			return xsec_vvtogg_8(l, sommerfeld, m, v, alphas, alphasommerfeld)
		return 0.0

	return 0.0
	

def xsec_sstoqq_3(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [0.0, ((2.0 / 27.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((-2.0 / 27.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [0.0, ((1.0 / 11664.0) * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + mpmath.power(alphasommerfeld, 2.0))))), ((-1.0 / 46656.0) * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + mpmath.power(alphasommerfeld, 2.0)))) * mpmath.fabs((4.0 + ((1.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_sstoqq_6(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [0.0, ((5.0 / 54.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((-5.0 / 54.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [0.0, ((55.0 / 46656.0) * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0)))))), ((-55.0 / 186624.0) * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_sstoqq_8(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [0.0, ((1.0 / 16.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((-1.0 / 16.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [0.0, ((3.0 / 512.0) * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0)))))), ((-3.0 / 2048.0) * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((9.0 / 4.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))), 0., 0.]
	return sum(wave_list[:l + 1])
	

def xsec_sstogg_3(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((7.0 / 27.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((-40.0 / 81.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((143.0 / 405.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((1.0 / 162.0) * ((-16.0 * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (-5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0))) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((1.0 / 7776.0) * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((768.0 * mpmath.power(v, 2.0)) + (mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * (-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (96.0 + mpmath.power(alphasommerfeld, 2.0))) + (160.0 * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((1.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))) + (512.0 * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((16.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))), ((-1.0 / 151165440.0) * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((7.0 * ((-5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * (1.0 + (-1.0 * mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((82944.0 * mpmath.power(v, 4.0)) + (-720.0 * mpmath.power(v, 2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0)))) + (16384.0 * ((81.0 * mpmath.power(v, 4.0)) + (-45.0 * mpmath.power(v, 2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + (4.0 * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0)))))) + (80.0 * ((5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * (-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((mpmath.power(alphasommerfeld, 2.0) + (-1.0 * mpmath.power(v, 2.0) * (72.0 + mpmath.power(alphasommerfeld, 2.0)))), 2.0)) + (1024.0 * mpmath.power(((-8.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (9.0 + (8.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)))) + (8748.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * (1.0 + (-1.0 * mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * (mpmath.power(alphasommerfeld, 2.0) + (-1.0 * mpmath.power(v, 2.0) * (-144.0 + mpmath.power(alphasommerfeld, 2.0)))) * mpmath.fabs((4.0 + ((1.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (41472.0 * mpmath.power(v, 4.0) * ((5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * (-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((5.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((1.0 / 1296.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (16.0 * mpmath.fabs((24.0 + ((320.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((256.0 / 81.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_sstogg_6(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((155.0 / 108.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((-260.0 / 81.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((911.0 / 324.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((1.0 / 648.0) * ((-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (324.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0))) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((1.0 / 31104.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (3.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-24000.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0)) + (-17952.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0)) + (15552.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0)) + (-6655.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(alphasommerfeld, 2.0)) + (10368.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * mpmath.fabs((2.0 + ((4.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-17248.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * mpmath.fabs((2.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-16000.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * mpmath.fabs((2.0 + ((100.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))), ((-1.0 / 1866240.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-28.0 * mpmath.power(v, 2.0) * ((539.0 * mpmath.power((1.0 + (-1.0 * mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * (4.0 + ((-121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))) * (16.0 + ((-121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)))) + (64.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-36.0 + mpmath.power(alphasommerfeld, 2.0)))) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + mpmath.power(alphasommerfeld, 2.0))))) + ((-8000.0 / 81.0) * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * ((-25.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-36.0 + (25.0 * mpmath.power(alphasommerfeld, 2.0))))) * ((-25.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + (25.0 * mpmath.power(alphasommerfeld, 2.0)))))))) + (-320.0 * mpmath.power(v, 2.0) * ((539.0 * mpmath.power((1.0 + (-1.0 * mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * mpmath.power((2.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))), 2.0)) + (16.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * mpmath.power(((-2.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (9.0 + (2.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)) + ((-2000.0 / 81.0) * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * mpmath.power(((-50.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (9.0 + (50.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)))) + (1485.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-128.0 * mpmath.power(v, 2.0) * ((32.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((243.0 + ((90.0 + (-90.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)) + (2.0 * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((605.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((14641.0 / 1296.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((2000.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((10000.0 / 81.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_sstogg_8(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((27.0 / 32.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((-15.0 / 8.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((261.0 / 160.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((27.0 / 64.0) * (mpmath.power((1.0 + (-1.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) + mpmath.power((1.0 + (-1.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) + (-1.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0))) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((9.0 / 1024.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (3.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-48.0 * mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0)) + (-32.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0)) + (-9.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(alphasommerfeld, 2.0)) + (-32.0 * mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * mpmath.fabs((2.0 + ((9.0 + (-9.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))) + (-16.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * (3.0 + (2.0 * mpmath.fabs((2.0 + ((1.0 + (-1.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))))) + (-32.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * mpmath.fabs((2.0 + ((9.0 / 4.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))), ((-3.0 / 20480.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-28.0 * mpmath.power(v, 2.0) * ((mpmath.power((1.0 + (-1.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * (4.0 + ((9.0 / 4.0) * (-1.0 + mpmath.power(v, -2.0)) * mpmath.power(alphasommerfeld, 2.0))) * (16.0 + ((9.0 / 4.0) * (-1.0 + mpmath.power(v, -2.0)) * mpmath.power(alphasommerfeld, 2.0)))) + (mpmath.power((1.0 + (-1.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * (4.0 + ((-9.0 + (9.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))) * (16.0 + ((-9.0 + (9.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)))) + (-1.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + mpmath.power(alphasommerfeld, 2.0)))) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-4.0 + mpmath.power(alphasommerfeld, 2.0))))))) + (20.0 * mpmath.power(v, -2.0) * ((16.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((mpmath.power(alphasommerfeld, 2.0) + (-1.0 * mpmath.power(v, 2.0) * (2.0 + mpmath.power(alphasommerfeld, 2.0)))), 2.0)) + (16.0 * mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (2.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)) + (mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (8.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)))) + (27.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((9.0 / 4.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-128.0 * mpmath.power(v, 2.0) * ((-1.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((20.0 + (-20.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-1.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((45.0 + (-45.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)) + ((81.0 / 16.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-1.0 * mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + (180.0 * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + (81.0 * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))))), 0., 0.]
	return sum(wave_list[:l + 1])


def xsec_fftoqq_3(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((1.0 / 9.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((-4.0 / 27.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((1.0 / 27.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((-1.0 / 54.0) * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((1.0 / 324.0) * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * (6.0 + mpmath.fabs((2.0 + ((1.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)))))), ((-1.0 / 8957952.0) * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * (mpmath.power(alphasommerfeld, 4.0) + (-2.0 * mpmath.power(v, 2.0) * mpmath.power(alphasommerfeld, 2.0) * (24.0 + mpmath.power(alphasommerfeld, 2.0))) + (mpmath.power(v, 4.0) * (13824.0 + (48.0 * mpmath.power(alphasommerfeld, 2.0)) + mpmath.power(alphasommerfeld, 4.0))) + (1728.0 * mpmath.power(v, 4.0) * mpmath.fabs((24.0 + ((5.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((1.0 / 1296.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_fftoqq_6(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((5.0 / 36.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((-5.0 / 27.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((5.0 / 108.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((-55.0 / 216.0) * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((55.0 / 1296.0) * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * (6.0 + mpmath.fabs((2.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)))))), ((-55.0 / 35831808.0) * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((14641.0 * mpmath.power(alphasommerfeld, 4.0)) + (-242.0 * mpmath.power(v, 2.0) * mpmath.power(alphasommerfeld, 2.0) * (24.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0)))) + (mpmath.power(v, 4.0) * (13824.0 + (5808.0 * mpmath.power(alphasommerfeld, 2.0)) + (14641.0 * mpmath.power(alphasommerfeld, 4.0)))) + (1728.0 * mpmath.power(v, 4.0) * mpmath.fabs((24.0 + ((605.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((14641.0 / 1296.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_fftoqq_8(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((3.0 / 32.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((-1.0 / 8.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((1.0 / 32.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((-9.0 / 64.0) * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((3.0 / 128.0) * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * (6.0 + mpmath.fabs((2.0 + ((9.0 / 4.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)))))), ((-3.0 / 131072.0) * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((243.0 * mpmath.power(alphasommerfeld, 4.0)) + (-18.0 * mpmath.power(v, 2.0) * mpmath.power(alphasommerfeld, 2.0) * (8.0 + (27.0 * mpmath.power(alphasommerfeld, 2.0)))) + (mpmath.power(v, 4.0) * (512.0 + (144.0 * mpmath.power(alphasommerfeld, 2.0)) + (243.0 * mpmath.power(alphasommerfeld, 4.0)))) + (64.0 * mpmath.power(v, 4.0) * mpmath.fabs((24.0 + ((45.0 + (-45.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)) + ((81.0 / 16.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))), 0., 0.]
	return sum(wave_list[:l + 1])


def xsec_fftogg_3(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((7.0 / 54.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((5.0 / 27.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((-23.0 / 90.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((1.0 / 324.0) * ((-16.0 * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (-5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0))) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((1.0 / 34992.0) * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((256.0 * ((-7.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + (7.0 * mpmath.power(alphasommerfeld, 2.0)))))) + (mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * (-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-11.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-1044.0 + (11.0 * mpmath.power(alphasommerfeld, 2.0)))) + (90.0 * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((1.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))) + (288.0 * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((16.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))), ((1.0 / 604661760.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (5.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-99.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-576.0 + mpmath.power(alphasommerfeld, 2.0)))) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + mpmath.power(alphasommerfeld, 2.0))))) + (-360.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * mpmath.power((mpmath.power(alphasommerfeld, 2.0) + (-1.0 * mpmath.power(v, 2.0) * (72.0 + mpmath.power(alphasommerfeld, 2.0)))), 2.0)) + (-10.0 * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * ((5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((mpmath.power(alphasommerfeld, 2.0) + (-1.0 * mpmath.power(v, 2.0) * (72.0 + mpmath.power(alphasommerfeld, 2.0)))), 2.0)) + (1024.0 * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-8.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (9.0 + (8.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)))) + (-2.0 * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((16384.0 * ((81.0 * mpmath.power(v, 4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0)) + (-45.0 * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * mpmath.power(alphasommerfeld, 2.0)) + (4.0 * mpmath.power(alphasommerfeld, 4.0)))) + (5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * (-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * (mpmath.power(alphasommerfeld, 4.0) + (-2.0 * mpmath.power(v, 2.0) * mpmath.power(alphasommerfeld, 2.0) * (-360.0 + mpmath.power(alphasommerfeld, 2.0))) + (mpmath.power(v, 4.0) * (82944.0 + (-720.0 * mpmath.power(alphasommerfeld, 2.0)) + mpmath.power(alphasommerfeld, 4.0))))))) + (-7776.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + mpmath.power(alphasommerfeld, 2.0)))) * mpmath.fabs((4.0 + ((1.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-8640.0 * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * ((5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + mpmath.power(alphasommerfeld, 2.0)))) * mpmath.fabs((4.0 + ((1.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (256.0 * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-4.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + (4.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((16.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))) + (11664.0 * mpmath.power(v, 4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * ((-5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((5.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((1.0 / 1296.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-16.0 * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((320.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((256.0 / 81.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_fftogg_6(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((155.0 / 216.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((85.0 / 108.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((-119.0 / 72.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((1.0 / 1296.0) * ((-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (324.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0))) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((1.0 / 62208.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (3.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((48.0 * ((-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (324.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)))) + (48.0 * ((-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (324.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0))) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0)) + (mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * ((6655.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (7920.0 + (-6655.0 * mpmath.power(alphasommerfeld, 2.0)))))) + (-28.0 * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * ((539.0 * mpmath.power((1.0 + (-1.0 * mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * (4.0 + ((-121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)))) + (-144.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -2.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + mpmath.power(alphasommerfeld, 2.0))))) + ((2000.0 / 9.0) * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -2.0) * ((-25.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + (25.0 * mpmath.power(alphasommerfeld, 2.0)))))))) + (8.0 * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * ((324.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((2.0 + ((4.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((2.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((2.0 + ((100.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))))), ((1.0 / 268738560.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-605.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-576.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0))))) * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0)))))) + (-2200.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (72.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)) + (288.0 * mpmath.power(v, 4.0) * ((539.0 * mpmath.power((1.0 + (-1.0 * mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * (4.0 + ((-121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))) * (16.0 + ((-121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)))) + (64.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-36.0 + mpmath.power(alphasommerfeld, 2.0)))) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + mpmath.power(alphasommerfeld, 2.0))))) + ((-8000.0 / 81.0) * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * ((-25.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-36.0 + (25.0 * mpmath.power(alphasommerfeld, 2.0))))) * ((-25.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + (25.0 * mpmath.power(alphasommerfeld, 2.0)))))))) + (1440.0 * mpmath.power(v, 4.0) * ((539.0 * mpmath.power((1.0 + (-1.0 * mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * mpmath.power((2.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))), 2.0)) + (16.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * mpmath.power(((-2.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (9.0 + (2.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)) + ((-2000.0 / 81.0) * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * mpmath.power(((-50.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (9.0 + (50.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)))) + (-47520.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-960.0 * mpmath.power(v, 2.0) * ((-2304.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + mpmath.power(alphasommerfeld, 2.0)))) * mpmath.fabs((9.0 + ((1.0 + (-1.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))) + (539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (8000.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-25.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + (25.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((100.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))) + (1296.0 * mpmath.power(v, 4.0) * ((32.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((243.0 + ((90.0 + (-90.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)) + (2.0 * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((605.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((14641.0 / 1296.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((2000.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((10000.0 / 81.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_fftogg_8(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((27.0 / 64.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((15.0 / 32.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((-309.0 / 320.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((27.0 / 128.0) * (mpmath.power((1.0 + (-1.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) + mpmath.power((1.0 + (-1.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) + (-1.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0))) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((-9.0 / 512.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-1.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-7.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (7.0 * mpmath.power(alphasommerfeld, 2.0)))) + (2.0 * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((1.0 + (-1.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))))) + (mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-36.0 * mpmath.power(v, 2.0)) + (20.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(v, 2.0)) + (16.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(v, 2.0)) + (-81.0 * mpmath.power(alphasommerfeld, 2.0)) + (18.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(alphasommerfeld, 2.0)) + (63.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(alphasommerfeld, 2.0)) + (81.0 * mpmath.power(v, 2.0) * mpmath.power(alphasommerfeld, 2.0)) + (-18.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(v, 2.0) * mpmath.power(alphasommerfeld, 2.0)) + (-63.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(v, 2.0) * mpmath.power(alphasommerfeld, 2.0)) + (-2.0 * (-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))) * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((9.0 + (-9.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))) + (-2.0 * (-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))) * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((9.0 / 4.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))))), ((3.0 / 327680.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-11.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-64.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))) * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0)))))) + (-40.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (8.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)) + (32.0 * mpmath.power(v, 4.0) * ((mpmath.power((1.0 + (-1.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * (4.0 + ((9.0 / 4.0) * (-1.0 + mpmath.power(v, -2.0)) * mpmath.power(alphasommerfeld, 2.0))) * (16.0 + ((9.0 / 4.0) * (-1.0 + mpmath.power(v, -2.0)) * mpmath.power(alphasommerfeld, 2.0)))) + (mpmath.power((1.0 + (-1.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * (4.0 + ((-9.0 + (9.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))) * (16.0 + ((-9.0 + (9.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)))) + (-1.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + mpmath.power(alphasommerfeld, 2.0)))) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-4.0 + mpmath.power(alphasommerfeld, 2.0))))))) + (-10.0 * ((16.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((mpmath.power(alphasommerfeld, 2.0) + (-1.0 * mpmath.power(v, 2.0) * (2.0 + mpmath.power(alphasommerfeld, 2.0)))), 2.0)) + (16.0 * mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (2.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)) + (mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (8.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)))) + (-96.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((9.0 / 4.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-960.0 * mpmath.power(v, 2.0) * ((4.0 * mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-4.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((9.0 + (-9.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))) + (4.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-4.0 + mpmath.power(alphasommerfeld, 2.0)))) * mpmath.fabs((4.0 + ((1.0 + (-1.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))) + (mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((9.0 / 4.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))) + (144.0 * mpmath.power(v, 4.0) * ((-1.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((20.0 + (-20.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-1.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((45.0 + (-45.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)) + ((81.0 / 16.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-1.0 * mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + (180.0 * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + (81.0 * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))))), 0., 0.]
	return sum(wave_list[:l + 1])


def xsec_vvtoqq_3(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [0.0, ((2.0 / 9.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((2.0 / 243.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [0.0, ((1.0 / 3888.0) * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + mpmath.power(alphasommerfeld, 2.0))))), ((1.0 / 419904.0) * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + mpmath.power(alphasommerfeld, 2.0)))) * mpmath.fabs((4.0 + ((1.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_vvtoqq_6(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [0.0, ((5.0 / 18.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((5.0 / 486.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [0.0, ((55.0 / 15552.0) * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0)))))), ((55.0 / 1679616.0) * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_vvtoqq_8(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [0.0, ((3.0 / 16.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((1.0 / 144.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [0.0, ((9.0 / 512.0) * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0)))))), ((1.0 / 6144.0) * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((9.0 / 4.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))), 0., 0.]
	return sum(wave_list[:l + 1])


def xsec_vvtogg_3(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((133.0 / 243.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((8.0 / 243.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((67.0 / 243.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((19.0 / 1458.0) * ((-16.0 * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (-5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0))) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((1.0 / 209952.0) * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((256.0 * ((-32.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (99.0 + (32.0 * mpmath.power(alphasommerfeld, 2.0)))))) + (mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * (-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-97.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-288.0 + (97.0 * mpmath.power(alphasommerfeld, 2.0)))) + (-1440.0 * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((1.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))) + (-4608.0 * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((16.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))), ((1.0 / 453496320.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (5.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-60.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-576.0 + mpmath.power(alphasommerfeld, 2.0)))) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + mpmath.power(alphasommerfeld, 2.0))))) + (-480.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * mpmath.power((mpmath.power(alphasommerfeld, 2.0) + (-1.0 * mpmath.power(v, 2.0) * (72.0 + mpmath.power(alphasommerfeld, 2.0)))), 2.0)) + (-80.0 * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * ((5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((mpmath.power(alphasommerfeld, 2.0) + (-1.0 * mpmath.power(v, 2.0) * (72.0 + mpmath.power(alphasommerfeld, 2.0)))), 2.0)) + (1024.0 * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-8.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (9.0 + (8.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)))) + (-27.0 * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((16384.0 * ((81.0 * mpmath.power(v, 4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0)) + (-45.0 * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * mpmath.power(alphasommerfeld, 2.0)) + (4.0 * mpmath.power(alphasommerfeld, 4.0)))) + (5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * (-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * (mpmath.power(alphasommerfeld, 4.0) + (-2.0 * mpmath.power(v, 2.0) * mpmath.power(alphasommerfeld, 2.0) * (-360.0 + mpmath.power(alphasommerfeld, 2.0))) + (mpmath.power(v, 4.0) * (82944.0 + (-720.0 * mpmath.power(alphasommerfeld, 2.0)) + mpmath.power(alphasommerfeld, 4.0))))))) + (-972.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + mpmath.power(alphasommerfeld, 2.0)))) * mpmath.fabs((4.0 + ((1.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-1440.0 * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * ((5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + mpmath.power(alphasommerfeld, 2.0)))) * mpmath.fabs((4.0 + ((1.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (256.0 * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-4.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + (4.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((16.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))) + (6912.0 * mpmath.power(v, 4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -2.0) * ((-5.0 * mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp(((-1.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((5.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((1.0 / 1296.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-16.0 * mpmath.power((-1.0 + mpmath.exp(((-4.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((320.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((256.0 / 81.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_vvtogg_6(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((2945.0 / 972.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((-200.0 / 243.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((1103.0 / 972.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((19.0 / 5832.0) * ((-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (324.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0))) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((1.0 / 279936.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (3.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((912.0 * ((-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (324.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)))) + (912.0 * ((-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0)) + (324.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0))) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0)) + (-1045.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0)))))) + (-96.0 * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * ((539.0 * mpmath.power((1.0 + (-1.0 * mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * (4.0 + ((-121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)))) + (-144.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -2.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + mpmath.power(alphasommerfeld, 2.0))))) + ((2000.0 / 9.0) * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -2.0) * ((-25.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + (25.0 * mpmath.power(alphasommerfeld, 2.0)))))))) + (-96.0 * mpmath.power(v, 2.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), -1.0) * ((324.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((2.0 + ((4.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((2.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((2.0 + ((100.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))))), ((1.0 / 151165440.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-275.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-576.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0))))) * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0)))))) + (-2200.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (72.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)) + (2916.0 * mpmath.power(v, 4.0) * ((539.0 * mpmath.power((1.0 + (-1.0 * mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * (4.0 + ((-121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))) * (16.0 + ((-121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)))) + (64.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-36.0 + mpmath.power(alphasommerfeld, 2.0)))) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + mpmath.power(alphasommerfeld, 2.0))))) + ((-8000.0 / 81.0) * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * ((-25.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-36.0 + (25.0 * mpmath.power(alphasommerfeld, 2.0))))) * ((-25.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + (25.0 * mpmath.power(alphasommerfeld, 2.0)))))))) + (8640.0 * mpmath.power(v, 4.0) * ((539.0 * mpmath.power((1.0 + (-1.0 * mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * mpmath.power((2.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))), 2.0)) + (16.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * mpmath.power(((-2.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (9.0 + (2.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)) + ((-2000.0 / 81.0) * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * mpmath.power(((-50.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (9.0 + (50.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)))) + (-4455.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-120.0 * mpmath.power(v, 2.0) * ((-2304.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + mpmath.power(alphasommerfeld, 2.0)))) * mpmath.fabs((9.0 + ((1.0 + (-1.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))) + (539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-121.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-144.0 + (121.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((121.0 / 36.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (8000.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-25.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-9.0 + (25.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((100.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))) + (576.0 * mpmath.power(v, 4.0) * ((32.0 * mpmath.power((-1.0 + mpmath.exp(((2.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((243.0 + ((90.0 + (-90.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)) + (2.0 * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-539.0 * mpmath.power((-1.0 + mpmath.exp(((-11.0 / 6.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((605.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((14641.0 / 1296.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-500.0 * mpmath.power((-1.0 + mpmath.exp(((-10.0 / 3.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((2000.0 / 9.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + ((10000.0 / 81.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))))), 0., 0.]
	return sum(wave_list[:l + 1])

def xsec_vvtogg_8(l, sommerfeld, m, v, alphas, alpha_sommerfeld):
	wave_list = []
	if not sommerfeld:
		wave_list = [((57.0 / 32.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power(alphas, 2.0)), ((-11.0 / 24.0) * mpmath.power(m, -2.0) * mpmath.pi * v * mpmath.power(alphas, 2.0)), ((65.0 / 96.0) * mpmath.power(m, -2.0) * mpmath.pi * mpmath.power(v, 3.0) * mpmath.power(alphas, 2.0)), 0., 0.]
	else:
		wave_list = [((57.0 / 64.0) * (mpmath.power((1.0 + (-1.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) + mpmath.power((1.0 + (-1.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) + (-1.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0))) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld), ((-1.0 / 1024.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-48.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-2.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (11.0 + (2.0 * mpmath.power(alphasommerfeld, 2.0)))) + (-2.0 * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((1.0 + (-1.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))))) + (mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((752.0 * mpmath.power(v, 2.0)) + (-224.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(v, 2.0)) + (-528.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(v, 2.0)) + (-1251.0 * mpmath.power(alphasommerfeld, 2.0)) + (387.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(alphasommerfeld, 2.0)) + (864.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(alphasommerfeld, 2.0)) + (1251.0 * mpmath.power(v, 2.0) * mpmath.power(alphasommerfeld, 2.0)) + (-387.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(v, 2.0) * mpmath.power(alphasommerfeld, 2.0)) + (-864.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power(v, 2.0) * mpmath.power(alphasommerfeld, 2.0)) + (96.0 * (-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))) * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((9.0 + (-9.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))) + (96.0 * (-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))) * mpmath.power(v, 2.0) * mpmath.fabs((2.0 + ((9.0 / 4.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))))), ((1.0 / 61440.0) * mpmath.power(m, -2.0) * mpmath.power(mpmath.pi, 2.0) * mpmath.power(v, -2.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * mpmath.power(alphas, 2.0) * alphasommerfeld * ((-5.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-64.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))) * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0)))))) + (-40.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (8.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)) + (324.0 * mpmath.power(v, 4.0) * ((mpmath.power((1.0 + (-1.0 * mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * (4.0 + ((9.0 / 4.0) * (-1.0 + mpmath.power(v, -2.0)) * mpmath.power(alphasommerfeld, 2.0))) * (16.0 + ((9.0 / 4.0) * (-1.0 + mpmath.power(v, -2.0)) * mpmath.power(alphasommerfeld, 2.0)))) + (mpmath.power((1.0 + (-1.0 * mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)))), -1.0) * (4.0 + ((-9.0 + (9.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))) * (16.0 + ((-9.0 + (9.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)))) + (-1.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, -4.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + mpmath.power(alphasommerfeld, 2.0)))) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-4.0 + mpmath.power(alphasommerfeld, 2.0))))))) + (-60.0 * ((16.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power((mpmath.power(alphasommerfeld, 2.0) + (-1.0 * mpmath.power(v, 2.0) * (2.0 + mpmath.power(alphasommerfeld, 2.0)))), 2.0)) + (16.0 * mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (2.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)) + (mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (8.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))), 2.0)))) + (-9.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.power(v, 2.0) * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((9.0 / 4.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))) + (-120.0 * mpmath.power(v, 2.0) * ((4.0 * mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-4.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((9.0 + (-9.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))) + (4.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-1.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-4.0 + mpmath.power(alphasommerfeld, 2.0)))) * mpmath.fabs((4.0 + ((1.0 + (-1.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0))))) + (mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * ((-9.0 * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, 2.0) * (-16.0 + (9.0 * mpmath.power(alphasommerfeld, 2.0))))) * mpmath.fabs((4.0 + ((9.0 / 4.0) * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0))))))) + (64.0 * mpmath.power(v, 4.0) * ((-1.0 * mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld)) * mpmath.power((-1.0 + mpmath.exp((-1.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((20.0 + (-20.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)) + (mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-1.0 * mpmath.power((-1.0 + mpmath.exp(((-3.0 / 2.0) * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + ((45.0 + (-45.0 * mpmath.power(v, -2.0))) * mpmath.power(alphasommerfeld, 2.0)) + ((81.0 / 16.0) * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))) + (-1.0 * mpmath.power((-1.0 + mpmath.exp((-3.0 * mpmath.pi * mpmath.power(v, -1.0) * mpmath.power((1.0 + (-1.0 * mpmath.power(v, 2.0))), (1.0 / 2.0)) * alphasommerfeld))), -1.0) * mpmath.fabs((24.0 + (180.0 * mpmath.power(v, -2.0) * (-1.0 + mpmath.power(v, 2.0)) * mpmath.power(alphasommerfeld, 2.0)) + (81.0 * mpmath.power(v, -4.0) * mpmath.power((-1.0 + mpmath.power(v, 2.0)), 2.0) * mpmath.power(alphasommerfeld, 4.0))))))))), 0., 0.]
	return sum(wave_list[:l + 1])


###############
# main script #
###############

# argument parser
parser = argparse.ArgumentParser(description='Returns the cross section (in 1/GeV^2) of the annihilation process for a given partial wave.')
parser.add_argument('-p', '--process', action='store', required=True, help='the annihilation process (sstoqq, sstogg, fftoqq, fftogg, vvtoqq or vvtogg)')
parser.add_argument('-r', '--rep', action='store', required=True, help='the color representation of the annihilating particle (3, 6 or 8)')
parser.add_argument('-v', '--vars', nargs=4, required=True, help='the variables the cross section depends on: m, v, alpha_s, alpha_sommerfeld')
parser.add_argument('-s', '--sommerfeld', action='store_true', help='add sommerfeld corrections (default: off)')
parser.add_argument('-l', '--lwave', action='store', default=2, help='corrections up to the lth partial wave (default l = 2)')
parser.add_argument('-e', '--extended', action='store_true', help='Extended logging of the results')
args = parser.parse_args()

# determine the process and representation
process = args.process
if not process in ['sstoqq', 'sstogg', 'fftoqq', 'fftogg', 'vvtoqq', 'vvtogg']:
	print "Process " + process + " is not known, must be sstoqq, sstogg, fftoqq, fftogg, vvtoqq or vvtogg."
	sys.exit(2)
rep = int(args.rep)
if not rep in [3, 6, 8]:
	print "Color representation " + str(rep) + " is not valid, must be 3, 6, or 8."
	sys.exit(2)

# determine variables
m = mpmath.mpf(args.vars[0])
v = mpmath.mpf(args.vars[1])
alphas = mpmath.mpf(args.vars[2])
alphasommerfeld = mpmath.mpf(args.vars[3])

# determine partial wave and sommerfeld
l = int(args.lwave);
sommerfeld = args.sommerfeld

# determine the cross section
xsec = get_xsec(process, rep, l, sommerfeld, m, v, alphas, alphasommerfeld);

# print the result
if args.extended:
	print "Annihilation cross section for " + process + " with color representation " + str(rep)
	print "and m = " + str(m) + ", v = " + str(v) + ", alpha_s = " + str(alphas) + ", alpha_sommerfeld = " + str(alphasommerfeld)
	print "and for l = " + str(l) + " and sommerfeld " + str(sommerfeld) + " equals:"
	print "\t" + mpmath.nstr(xsec, 15)
else:
	print mpmath.nstr(xsec, 15)
