Check the retention rate and the number of candidates for a given set of particle lists.
The module stores its results in the static variable "summary".
To monitor the effect of every module of an initial path, this module should be added after
each module of the path. A function was written (`skim.utils.retention.pathWithRetentionCheck`) to do it:
>>> path = pathWithRetentionCheck(particle_lists, path)
After the path processing, the result of the RetentionCheck can be printed with
>>> RetentionCheck.print_results()
or plotted with (check the corresponding documentation)
>>> RetentionCheck.plot_retention(...)
and the summary dictionary can be accessed through
>>> RetentionCheck.summary
Authors:
Cyrille Praz, Slavomira Stefkova
Parameters:
module_name (str): name of the module after which the retention rate is measured
module_number (int): index of the module after which the retention rate is measured
particle_lists (list(str)): list of particle list names which will be tracked by the module
Definition at line 24 of file retention.py.
def plot_retention |
( |
|
cls, |
|
|
|
particle_list, |
|
|
|
plot_title = "" , |
|
|
|
save_as = None , |
|
|
|
module_name_max_length = 80 |
|
) |
| |
Plot the result of the RetentionCheck for a given particle list.
Example of use (to be put after process(path)):
>>> RetentionCheck.plot_retention('B+:semileptonic','skim:feiSLBplus','retention_plots/plot.pdf')
Parameters:
particle_list (str): particle list name
title (str): plot title (overwritten by the -o argument in basf2)
save_as (str): output filename (overwritten by the -o argument in basf2)
module_name_max_length (int): if the module name length is higher than this value, do not display the full name
Definition at line 160 of file retention.py.
160 def plot_retention(cls, particle_list, plot_title="", save_as=None, module_name_max_length=80):
161 """ Plot the result of the RetentionCheck for a given particle list.
163 Example of use (to be put after process(path)):
165 >>> RetentionCheck.plot_retention('B+:semileptonic','skim:feiSLBplus','retention_plots/plot.pdf')
169 particle_list (str): particle list name
170 title (str): plot title (overwritten by the -o argument in basf2)
171 save_as (str): output filename (overwritten by the -o argument in basf2)
172 module_name_max_length (int): if the module name length is higher than this value, do not display the full name
177 at_least_one_entry =
False
178 for module, results
in cls.summary.items():
180 if particle_list
not in results.keys():
181 b2.B2WARNING(particle_list +
" is not present in the results of the RetentionCheck for the module {}."
185 if results[particle_list][
'retention_rate'] > 0
or at_least_one_entry:
186 at_least_one_entry =
True
187 if len(module) > module_name_max_length
and module_name_max_length > 3:
188 module = module[:module_name_max_length - 3] +
"..."
189 module_name.append(module)
190 retention.append(100 * (results[particle_list][
'retention_rate']))
192 if not at_least_one_entry:
193 b2.B2WARNING(particle_list +
" seems to have a zero retention rate when created (if created).")
197 bars = plt.barh(module_name, retention, label=particle_list, color=(0.67, 0.15, 0.31, 0.6))
200 yval = bar.get_width()
201 plt.text(0.5, bar.get_y() + bar.get_height() / 2.0 + 0.1, str(round(yval, 3)))
203 plt.gca().invert_yaxis()
204 plt.xticks(rotation=45)
206 plt.axvline(x=10.0, linewidth=1, linestyle=
"--", color=
'k', alpha=0.5)
207 plt.xlabel(
'Retention Rate [%]')
208 plt.legend(loc=
'lower right')
210 if save_as
or cls.output_override:
211 if cls.output_override:
212 plot_title = (cls.output_override).split(
".")[0]
213 save_as = plot_title +
'.pdf'
215 os.makedirs(os.path.dirname(save_as), exist_ok=
True)
216 plt.title(plot_title)
217 plt.savefig(save_as, bbox_inches=
"tight")
218 b2.B2RESULT(
"Retention rate results for list {} saved in {}."
219 .format(particle_list, os.getcwd() +
"/" + save_as))