|
def | load_standard_lists (self, path) |
|
def | additional_setup (self, path) |
|
def | build_lists (self, path) |
|
def | validation_histograms (self, path) |
|
def | __description__ (self) |
|
def | __category__ (self) |
|
def | __authors__ (self) |
|
def | __contact__ (self) |
|
def | code (self) |
|
def | __call__ (self, path, *udstOutput=None, validation=None) |
|
def | postskim_path (self) |
|
def | skim_event_cuts (self, cut, *path) |
|
def | flag (self) |
|
def | initialise_skim_flag (self, path) |
|
def | update_skim_flag (self, path) |
|
def | get_skim_list_names (self) |
|
def | __str__ (self) |
|
def | __name__ (self) |
|
def | set_skim_logging (self) |
|
def | output_udst (self, path) |
|
def | apply_hlt_hadron_cut_if_required (self, path) |
|
**Channel**: :math:`e^+ e^- \\to \\tau^+ \\tau^-`
**Criteria**:
Ntrk = 2
1. Number of good tracks = 2, net charge < 2
2. ``visibleEnergyOfEventCMS < 10 GeV and E_ECLtrk < 6 GeV`` and ``missingMomentumOfEvent_theta < 2.6180``
3. ``visibleEnergyOfEventCMS > 3 GeV or max P_t > 1 GeV``
4. max. opening angle < 178 deg.
Ntrk = 3,4
1. Number of good tracks = 3 or 4, net charge < 2
2. ``visibleEnergyOfEventCMS < 10.5 GeV and E_ECLtrk < 6 GeV``
3. ``visibleEnergyOfEventCMS > 3 GeV or max P_t > 1 GeV``
4. max. opening angle < 178 deg.
5. Event divided by thrust axis; No. good tracks in tag side = 1 or 3
6. ``M_tag < 1.8 GeV`` and ``M_sig < 2.3 GeV``
Ntrk = 5,6
1. Number of good tracks = 5 or 6, net charge < 2
2. Event divided by thrust axis; No. good tracks in tag side = 1 or 3
3. ``M_tag < 1.8 GeV`` and ``M_sig < 2.3 GeV``
Definition at line 209 of file taupair.py.
def additional_setup |
( |
|
self, |
|
|
|
path |
|
) |
| |
Set particle lists and variables for TauGeneric skim.
**Output particle lists**: ``pi+:tauskim, gamma:tauskim, pi+:S1/S2, gamma:S1/S2``
**Variables**:
* ``nGoodTracks``: number of good tracks in an event
* ``netCharge``: total net charge of good tracks
* ``nTracksS1/nTracksS2:`` number of good tracks in each hemisphere ``S1/S2`` divided by thrust axis
* ``invMS1/invMS2``: invariant mass of particles in each hemisphere
* ``maxPt``: maximum Pt amoung good tracks
* ``E_ECLtrk``: total ECL energy of good tracks
Reimplemented from BaseSkim.
Definition at line 248 of file taupair.py.
248 def additional_setup(self, path):
250 Set particle lists and variables for TauGeneric skim.
252 **Output particle lists**: ``pi+:tauskim, gamma:tauskim, pi+:S1/S2, gamma:S1/S2``
256 * ``nGoodTracks``: number of good tracks in an event
257 * ``netCharge``: total net charge of good tracks
258 * ``nTracksS1/nTracksS2:`` number of good tracks in each hemisphere ``S1/S2`` divided by thrust axis
259 * ``invMS1/invMS2``: invariant mass of particles in each hemisphere
260 * ``maxPt``: maximum Pt amoung good tracks
261 * ``E_ECLtrk``: total ECL energy of good tracks
265 trackCuts =
"-3.0 < dz < 3.0 and dr < 1.0"
267 gammaCuts =
"E > 0.15"
268 gammaCuts +=
" and -0.8660 < cosTheta < 0.9563"
269 ma.cutAndCopyList(
"pi+:tauskim",
"pi+:all", trackCuts, path=path)
270 ma.cutAndCopyList(
"gamma:tauskim",
"gamma:all", gammaCuts, path=path)
273 ma.buildEventShape([
"pi+:tauskim",
"gamma:tauskim"],
274 allMoments=
False, foxWolfram=
False, cleoCones=
False,
275 sphericity=
False, jets=
False, path=path)
276 ma.buildEventKinematics([
"pi+:tauskim",
"gamma:tauskim"], path=path)
279 ma.cutAndCopyList(
"pi+:S1",
"pi+:tauskim",
"cosToThrustOfEvent > 0", path=path)
280 ma.cutAndCopyList(
"pi+:S2",
"pi+:tauskim",
"cosToThrustOfEvent < 0", path=path)
281 ma.cutAndCopyList(
"gamma:S1",
"gamma:tauskim",
"cosToThrustOfEvent > 0", path=path)
282 ma.cutAndCopyList(
"gamma:S2",
"gamma:tauskim",
"cosToThrustOfEvent < 0", path=path)
284 vm.addAlias(
"nGoodTracks",
"nParticlesInList(pi+:tauskim)")
285 vm.addAlias(
"netCharge",
"formula(countInList(pi+:tauskim, charge == 1) - countInList(pi+:tauskim, charge == -1))")
286 vm.addAlias(
"nTracksS1",
"nParticlesInList(pi+:S1)")
287 vm.addAlias(
"nTracksS2",
"nParticlesInList(pi+:S2)")
288 vm.addAlias(
"invMS1",
"invMassInLists(pi+:S1, gamma:S1)")
289 vm.addAlias(
"invMS2",
"invMassInLists(pi+:S2, gamma:S2)")
291 vm.addAlias(
"maxPt",
"maxPtInList(pi+:tauskim)")
292 vm.addAlias(
"E_ECLtrk",
"formula(totalECLEnergyOfParticlesInList(pi+:tauskim))")
293 vm.addAlias(
"maxOp",
"useCMSFrame(maxOpeningAngleInList(pi+:tauskim))")
def skim_event_cuts |
( |
|
self, |
|
|
|
cut, |
|
|
* |
path |
|
) |
| |
|
inherited |
Apply event-level cuts in a skim-safe way.
Parameters:
cut (str): Event-level cut to be applied.
path (basf2.Path): Skim path to be processed.
Returns:
ConditionalPath (basf2.Path): Path on which the rest of this skim should be
processed. On this path, only events which passed the event-level cut
will be processed further.
.. Tip::
If running this function in `BaseSkim.additional_setup` or
`BaseSkim.build_lists`, redefine the ``path`` to the path returned by
`BaseSkim.skim_event_cuts`, *e.g.*
.. code-block:: python
def build_lists(self, path):
path = self.skim_event_cuts("nTracks>4", path=path)
# rest of skim list building...
.. Note::
The motivation for using this function over `applyEventCuts` is that
`applyEventCuts` completely removes events from processing. If we combine
multiple skims in a single steering file (which is done in production), and
the first has a set of event-level cuts, then all the remaining skims will
never even see those events.
Internally, this function creates a new path, which is only processed for
events passing the event-level cut. To avoid issues around particles not
being available on the main path (leading to noisy error logs), we need to
add the rest of the skim to this path. So this new path is assigned to the
attribute ``BaseSkim._ConditionalPath``, and ``BaseSkim.__call__`` will run
all remaining methods on this path.
Definition at line 716 of file skimExpertFunctions.py.
def update_skim_flag |
( |
|
self, |
|
|
|
path |
|
) |
| |
|
inherited |
Add the module `skimExpertFunctions.InitialiseSkimFlag` to the path, which
initialises flag for this skim to zero.
.. Warning::
If a conditional path has been created before this, then this function
*must* run on the conditional path, since the skim lists are not guaranteed
to exist for all events on the main path.
Reimplemented in CombinedSkim.
Definition at line 783 of file skimExpertFunctions.py.