Skip to content

Commit 477badb

Browse files
committed
Same optimization has been applied to pileupV2
1 parent 20bc3de commit 477badb

1 file changed

Lines changed: 47 additions & 10 deletions

File tree

MACS3/Signal/PileupV2.py

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,28 @@ def make_PV_from_LR(LR_array: cnp.ndarray,
9191
i: cython.ulong
9292
L: cython.int
9393
R: cython.int
94+
weight: cython.float
9495
PV: cnp.ndarray
96+
LR_l: cnp.ndarray
97+
LR_r: cnp.ndarray
98+
PV_p: cnp.ndarray
99+
PV_v: cnp.ndarray
95100

96101
l_LR = LR_array.shape[0]
97102
l_PV = 2 * l_LR
98103
PV = np.zeros(shape=l_PV, dtype=[('p', 'i4'), ('v', 'f4')])
104+
LR_l = LR_array['l']
105+
LR_r = LR_array['r']
106+
PV_p = PV['p']
107+
PV_v = PV['v']
99108
for i in range(l_LR):
100-
(L, R) = LR_array[i]
101-
PV[i*2] = (L, mapping_func(L, R))
102-
PV[i*2 + 1] = (R, -1.0 * mapping_func(L, R))
109+
L = LR_l[i]
110+
R = LR_r[i]
111+
weight = mapping_func(L, R)
112+
PV_p[i*2] = L
113+
PV_v[i*2] = weight
114+
PV_p[i*2 + 1] = R
115+
PV_v[i*2 + 1] = -1.0 * weight
103116
PV.sort(order='p')
104117
return PV
105118

@@ -123,15 +136,31 @@ def make_PV_from_LRC(LRC_array: cnp.ndarray,
123136
L: cython.int
124137
R: cython.int
125138
C: cython.ushort
139+
weight: cython.float
126140
PV: cnp.ndarray
141+
LRC_l: cnp.ndarray
142+
LRC_r: cnp.ndarray
143+
LRC_c: cnp.ndarray
144+
PV_p: cnp.ndarray
145+
PV_v: cnp.ndarray
127146

128147
l_LRC = LRC_array.shape[0]
129148
l_PV = 2 * l_LRC
130149
PV = np.zeros(shape=l_PV, dtype=[('p', 'i4'), ('v', 'f4')])
150+
LRC_l = LRC_array['l']
151+
LRC_r = LRC_array['r']
152+
LRC_c = LRC_array['c']
153+
PV_p = PV['p']
154+
PV_v = PV['v']
131155
for i in range(l_LRC):
132-
(L, R, C) = LRC_array[i]
133-
PV[i*2] = (L, C*mapping_func(L, R))
134-
PV[i*2 + 1] = (R, -1.0 * C * mapping_func(L, R))
156+
L = LRC_l[i]
157+
R = LRC_r[i]
158+
C = LRC_c[i]
159+
weight = C * mapping_func(L, R)
160+
PV_p[i*2] = L
161+
PV_v[i*2] = weight
162+
PV_p[i*2 + 1] = R
163+
PV_v[i*2 + 1] = -1.0 * weight
135164
PV.sort(order='p')
136165
return PV
137166

@@ -156,21 +185,29 @@ def make_PV_from_PN(P_array: cnp.ndarray, N_array: cnp.ndarray,
156185
L: cython.int
157186
R: cython.int
158187
PV: cnp.ndarray
188+
PV_p: cnp.ndarray
189+
PV_v: cnp.ndarray
159190

160191
l_PN = P_array.shape[0]
161192
assert l_PN == N_array.shape[0]
162193
l_PV = 4 * l_PN
163194
PV = np.zeros(shape=l_PV, dtype=[('p', 'i4'), ('v', 'f4')])
195+
PV_p = PV['p']
196+
PV_v = PV['v']
164197
for i in range(l_PN):
165198
L = P_array[i]
166199
R = L + extsize
167-
PV[i*2] = (L, 1)
168-
PV[i*2 + 1] = (R, -1)
200+
PV_p[i*2] = L
201+
PV_v[i*2] = 1
202+
PV_p[i*2 + 1] = R
203+
PV_v[i*2 + 1] = -1
169204
for i in range(l_PN):
170205
R = N_array[i]
171206
L = R - extsize
172-
PV[(l_PN + i)*2] = (L, 1)
173-
PV[(l_PN + i)*2 + 1] = (R, -1)
207+
PV_p[(l_PN + i)*2] = L
208+
PV_v[(l_PN + i)*2] = 1
209+
PV_p[(l_PN + i)*2 + 1] = R
210+
PV_v[(l_PN + i)*2 + 1] = -1
174211
PV.sort(order='p')
175212
return PV
176213

0 commit comments

Comments
 (0)