7 Create a left/right LUT from a table of true left/right counts for each pattern.
8 (see generateTrueLRTable.py)
10 Condition for left/right:
12 left: nBkg <= b * nTotal and nLeft > p * nMC + 3 * sqrt(p * (1 - p) * nMC)
13 right: nBkg <= b * nTotal and nRight > p * nMC + 3 * sqrt(p * (1 - p) * nMC)
19 innerTrueLRTable = np.loadtxt(
'innerTrueLRTable_Bkg1.0_1.dat')
20 outerTrueLRTable = np.loadtxt(
'outerTrueLRTable_Bkg1.0_1.dat')
22 innerTrueLRTable += np.loadtxt(
'innerTrueLRTable_Bkg1.0_%d.dat' % i)
23 outerTrueLRTable += np.loadtxt(
'outerTrueLRTable_Bkg1.0_%d.dat' % i)
30 innerLUTFilename =
"innerLUT_Bkg_p%.2f_b%.2f.coe" % (p, b)
31 outerLUTFilename =
"outerLUT_Bkg_p%.2f_b%.2f.coe" % (p, b)
34 def isValidInnerPattern(pattern):
37 (1 << 4) + (1 << 5) + (1 << 6),
38 (1 << 7) + (1 << 8) + (1 << 9) + (1 << 10),
39 (1 << 11) + (1 << 12) + (1 << 13) + (1 << 14) + (1 << 15)]
42 if pattern & masks[i]:
47 def isValidOuterPattern(pattern):
48 masks = [(1 << 1) + (1 << 2) + (1 << 3),
52 (1 << 9) + (1 << 10) + (1 << 11)]
55 if pattern & masks[i]:
60 def createLUT(TrueLRTable, inner):
61 LUT = np.zeros(len(TrueLRTable))
63 for pattern, trueLR
in enumerate(TrueLRTable):
66 if not isValidInnerPattern(pattern):
69 if not isValidOuterPattern(pattern):
71 if trueLR[2] > b * np.sum(trueLR):
74 threshold = p * np.sum(trueLR[:2]) + 3 * np.sqrt(p * (1 - p) * np.sum(trueLR[:2]))
75 if trueLR[0] > threshold:
77 elif trueLR[1] > threshold:
84 innerLUT = createLUT(innerTrueLRTable, inner=
True)
85 outerLUT = createLUT(outerTrueLRTable, inner=
False)
88 innerLUTFile = open(innerLUTFilename,
'w')
89 innerLUTFile.write(
"memory_initialization_radix=10;\n")
90 innerLUTFile.write(
"memory_initialization_vector=\n")
91 innerLUTFile.write(
",\n".join(
"%d" % i
for i
in innerLUT))
92 innerLUTFile.write(
";\n\n")
94 outerLUTFile = open(outerLUTFilename,
'w')
95 outerLUTFile.write(
"memory_initialization_radix=10;\n")
96 outerLUTFile.write(
"memory_initialization_vector=\n")
97 outerLUTFile.write(
",\n".join(
"%d" % i
for i
in outerLUT))
98 outerLUTFile.write(
";\n\n")