|
171 | 171 | }, |
172 | 172 | { |
173 | 173 | "cell_type": "code", |
174 | | - "execution_count": 7, |
| 174 | + "execution_count": null, |
175 | 175 | "metadata": {}, |
176 | 176 | "outputs": [], |
177 | | - "source": [ |
178 | | - "def get_mc_counts(pars):\n", |
179 | | - " deltas, factors = pdf.modifications(pars)\n", |
180 | | - " allsum = pyhf.tensorlib.concatenate(\n", |
181 | | - " deltas + [pyhf.tensorlib.astensor(pdf.nominal_rates)]\n", |
182 | | - " )\n", |
183 | | - " nom_plus_delta = pyhf.tensorlib.sum(allsum, axis=0)\n", |
184 | | - " nom_plus_delta = pyhf.tensorlib.reshape(\n", |
185 | | - " nom_plus_delta, (1,) + pyhf.tensorlib.shape(nom_plus_delta)\n", |
186 | | - " )\n", |
187 | | - " allfac = pyhf.tensorlib.concatenate(factors + [nom_plus_delta])\n", |
188 | | - " return pyhf.tensorlib.product(allfac, axis=0)\n", |
189 | | - "\n", |
190 | | - "\n", |
191 | | - "animate_plot_pieces = None\n", |
192 | | - "\n", |
193 | | - "\n", |
194 | | - "def init_plot(fig, ax, par_settings):\n", |
195 | | - " global animate_plot_pieces\n", |
196 | | - "\n", |
197 | | - " nbins = sum(list(pdf.config.channel_nbins.values()))\n", |
198 | | - " x = np.arange(nbins)\n", |
199 | | - " data = np.zeros(nbins)\n", |
200 | | - " items = []\n", |
201 | | - " for i in [3, 2, 1, 0]:\n", |
202 | | - " items.append(ax.bar(x, data, 1, alpha=1.0))\n", |
203 | | - " animate_plot_pieces = (\n", |
204 | | - " items,\n", |
205 | | - " ax.scatter(\n", |
206 | | - " x, workspace.data(pdf, include_auxdata=False), c=\"k\", alpha=1.0, zorder=99\n", |
207 | | - " ),\n", |
208 | | - " )\n", |
209 | | - "\n", |
210 | | - "\n", |
211 | | - "def animate(ax=None, fig=None, **par_settings):\n", |
212 | | - " global animate_plot_pieces\n", |
213 | | - " items, obs = animate_plot_pieces\n", |
214 | | - " pars = pyhf.tensorlib.astensor(pdf.config.suggested_init())\n", |
215 | | - " for k, v in par_settings.items():\n", |
216 | | - " pars[par_name_dict[k]] = v\n", |
217 | | - "\n", |
218 | | - " mc_counts = get_mc_counts(pars)\n", |
219 | | - " rectangle_collection = zip(*map(lambda x: x.patches, items))\n", |
220 | | - "\n", |
221 | | - " for rectangles, binvalues in zip(rectangle_collection, mc_counts[:, 0].T):\n", |
222 | | - " offset = 0\n", |
223 | | - " for sample_index in [3, 2, 1, 0]:\n", |
224 | | - " rect = rectangles[sample_index]\n", |
225 | | - " binvalue = binvalues[sample_index]\n", |
226 | | - " rect.set_y(offset)\n", |
227 | | - " rect.set_height(binvalue)\n", |
228 | | - " offset += rect.get_height()\n", |
229 | | - "\n", |
230 | | - " fig.canvas.draw()\n", |
231 | | - "\n", |
232 | | - "\n", |
233 | | - "def plot(ax=None, order=[3, 2, 1, 0], **par_settings):\n", |
234 | | - " pars = pyhf.tensorlib.astensor(pdf.config.suggested_init())\n", |
235 | | - " for k, v in par_settings.items():\n", |
236 | | - " pars[par_name_dict[k]] = v\n", |
237 | | - "\n", |
238 | | - " mc_counts = get_mc_counts(pars)\n", |
239 | | - " bottom = None\n", |
240 | | - " # nb: bar_data[0] because evaluating only one parset\n", |
241 | | - " for i, sample_index in enumerate(order):\n", |
242 | | - " data = mc_counts[sample_index][0]\n", |
243 | | - " x = np.arange(len(data))\n", |
244 | | - " ax.bar(x, data, 1, bottom=bottom, alpha=1.0)\n", |
245 | | - " bottom = data if i == 0 else bottom + data\n", |
246 | | - " ax.scatter(\n", |
247 | | - " x, workspace.data(pdf, include_auxdata=False), c=\"k\", alpha=1.0, zorder=99\n", |
248 | | - " )" |
249 | | - ] |
| 177 | + "source": "def get_mc_counts(pars):\n deltas, factors = pdf.modifications(pars)\n allsum = pyhf.tensorlib.concatenate(\n deltas + [pyhf.tensorlib.astensor(pdf.nominal_rates)]\n )\n nom_plus_delta = pyhf.tensorlib.sum(allsum, axis=0)\n nom_plus_delta = pyhf.tensorlib.reshape(\n nom_plus_delta, (1,) + pyhf.tensorlib.shape(nom_plus_delta)\n )\n allfac = pyhf.tensorlib.concatenate(factors + [nom_plus_delta])\n return pyhf.tensorlib.product(allfac, axis=0)\n\n\nanimate_plot_pieces = None\n\n\ndef init_plot(fig, ax, par_settings):\n global animate_plot_pieces\n\n nbins = sum(list(pdf.config.channel_nbins.values()))\n x = np.arange(nbins)\n data = np.zeros(nbins)\n items = []\n for i in [3, 2, 1, 0]:\n items.append(ax.bar(x, data, 1, alpha=1.0))\n animate_plot_pieces = (\n items,\n ax.scatter(\n x, workspace.data(pdf, include_auxdata=False), c=\"k\", alpha=1.0, zorder=99\n ),\n )\n\n\ndef animate(ax=None, fig=None, **par_settings):\n global animate_plot_pieces\n items, _ = animate_plot_pieces\n pars = pyhf.tensorlib.astensor(pdf.config.suggested_init())\n for k, v in par_settings.items():\n pars[par_name_dict[k]] = v\n\n mc_counts = get_mc_counts(pars)\n rectangle_collection = zip(*map(lambda x: x.patches, items))\n\n for rectangles, binvalues in zip(rectangle_collection, mc_counts[:, 0].T):\n offset = 0\n for sample_index in [3, 2, 1, 0]:\n rect = rectangles[sample_index]\n binvalue = binvalues[sample_index]\n rect.set_y(offset)\n rect.set_height(binvalue)\n offset += rect.get_height()\n\n fig.canvas.draw()\n\n\ndef plot(ax=None, order=[3, 2, 1, 0], **par_settings):\n pars = pyhf.tensorlib.astensor(pdf.config.suggested_init())\n for k, v in par_settings.items():\n pars[par_name_dict[k]] = v\n\n mc_counts = get_mc_counts(pars)\n bottom = None\n # nb: bar_data[0] because evaluating only one parset\n for i, sample_index in enumerate(order):\n data = mc_counts[sample_index][0]\n x = np.arange(len(data))\n ax.bar(x, data, 1, bottom=bottom, alpha=1.0)\n bottom = data if i == 0 else bottom + data\n ax.scatter(\n x, workspace.data(pdf, include_auxdata=False), c=\"k\", alpha=1.0, zorder=99\n )" |
250 | 178 | }, |
251 | 179 | { |
252 | 180 | "cell_type": "markdown", |
|
0 commit comments