34from __future__
import print_function
38from optparse
import OptionParser
42from lalburst
import cs_gamma
43from lalburst
import git_version
49LAMBDA_OMEGA_R = 8.5e-5
56 parser = OptionParser(
57 version =
"Name: %%prog\n%s" % git_version.verbose_msg
59 parser.add_option(
"-a",
"--frequency", type=
"float", help=
"Lowest frequency.")
60 parser.add_option(
"-b",
"--Gmustart", type=
"float", help=
"Lowest Gmu.")
61 parser.add_option(
"-c",
"--Gmuend", type=
"float", help=
"Largest Gmu.")
62 parser.add_option(
"-d",
"--nGmu", type=
"int", help=
"Nubmer of Gmu bins to do.")
63 parser.add_option(
"-e",
"--epsilonstart", type=
"float", help=
"Lowest epsilon")
64 parser.add_option(
"-f",
"--epsilonend", type=
"float", help=
"Largest epsilon.")
65 parser.add_option(
"-g",
"--nepsilon", type=
"int", help=
"Number of epsilon bins to do")
66 parser.add_option(
"-i",
"--index", type=
"float", help=
"Index for alpha as function of Gmu")
67 parser.add_option(
"-m",
"--efficiency-file", type=
"string", help=
"File with efficiency values and errors.")
68 options, filenames = parser.parse_args()
70 required_options = [
"efficiency_file",
"frequency",
"Gmustart",
"Gmuend",
"nGmu",
"epsilonstart",
"epsilonend",
"nepsilon",
"index"]
71 missing_options = [option
for option
in required_options
if getattr(options, option)
is None]
73 raise ValueError(
"missing required option(s) %s" %
", ".join(
"--%s" % option.replace(
"_",
"-")
for option
in missing_options))
74 assert options.nGmu >= 2
75 assert options.nepsilon >= 2
77 return options, (filenames
or [
None])
87amp, eff, Deff = numpy.loadtxt(ops.efficiency_file, dtype=
"double", unpack=
True)
90outfile = open(
"gamma.dat",
'w')
91outfile.write(
'% p n epsilon Gmu gammaAverage gammaMin gammaMax\n')
92for i
in range(ops.nepsilon):
93 epsilon = math.exp(math.log(ops.epsilonstart) + i * (math.log(ops.epsilonend) - math.log(ops.epsilonstart)) / (ops.nepsilon - 1))
94 for j
in range(ops.nGmu):
95 Gmu = math.exp(math.log(ops.Gmustart) + j * (math.log(ops.Gmuend) - math.log(ops.Gmustart)) / (ops.nGmu - 1))
96 print(
"%.1f%%: Gmu=%10.4g, epsilon=%10.4g, p=%4.2g\r" % (100.0 * (i * ops.nGmu + j) / (ops.nepsilon * ops.nGmu), Gmu, epsilon, P), end=
' ', file=sys.stderr)
98 alpha = epsilon * (LOOPS_RAD_POWER * Gmu)**ops.index
100 zofA = cs_gamma.findzofA(Gmu, alpha, amp)
101 dRdz = cs_gamma.finddRdz(Gmu, alpha, ops.frequency, LOOPS_RAD_POWER, zofA)
103 Dlnz = numpy.log(zofA[1:]) - numpy.log(zofA[:-1])
105 gammaAverage = scipy.integrate.simps(eff[:-1] * zofA[:-1] * dRdz[:-1] * -Dlnz) * CUSPS_PER_LOOP / P
106 gammaMin = scipy.integrate.simps(numpy.clip(eff[:-1] - Deff[:-1], 0.0, 1.0) * zofA[:-1] * dRdz[:-1] * -Dlnz) * CUSPS_PER_LOOP / P
107 gammaMax = scipy.integrate.simps(numpy.clip(eff[:-1] + Deff[:-1], 0.0, 1.0) * zofA[:-1] * dRdz[:-1] * -Dlnz) * CUSPS_PER_LOOP / P
109 outfile.write(
"%.17g %.17g %.17g %.17g %.17g %.17g %.17g\n" % (P, ops.index, epsilon, Gmu, gammaAverage, gammaMin, gammaMax))
110print(
"100.0%%: Gmu=%10.4g, epsilon=%10.4g, p=%4.2g" % (Gmu, epsilon, P), file=sys.stderr)