13 Skim list building functions for charm analyses.
16 The Hp, Hm and Jm in the function name represent arbitrary charged particles with
17 positive or negative charge. The Hp and Jm in `XToD0_D0ToHpJm`, mean a positive particle
18 and a negative particle that could be either conjugate or non-conjugate. The Hp and Hm
19 in `DstToD0Pi_D0ToHpHmPi0`, mean a positive particle and a negative particle that
23 Although reconstructDecay() would automatically include charged conjugate channel, and D0
24 is not distinguishable from anti-D0 in XToD0 skim, both :math:`D^0 \\to f` and :math:`D^0 \\to \\overline{f}`
25 mode should be written explicitly in XToD0 skim, because later in the DstToD0Pi skim, the D0 decay strings
26 in XToD0 skim would be directly combined with pi+. For example, if one only include D0 -> K+ pi- in XToD0_D0ToHpJm
27 skim, then in DstToD0Pi_D0ToHpJm skim, only the D*+ -> [D0 -> K+ pi-] pi+ would be included, and
28 D*+ -> [D0 -> K- pi+] pi+ would not be included.
31 from functools
import lru_cache
33 import modularAnalysis
as ma
34 from skim
import BaseSkim, fancy_skim_header
35 from stdCharged
import stdE, stdK, stdMu, stdPi, stdPr
36 from stdPhotons
import loadStdSkimPhoton
37 from stdPi0s
import loadStdSkimPi0
38 from stdV0s
import stdKshorts
41 __liaison__ =
"Guanda Gong <gonggd@mail.ustc.edu.cn>"
42 _VALIDATION_SAMPLE =
"mdst14.root"
48 Skims :math:`D^0`'s reconstructed by `XToD0_D0ToHpJm.D0ToHpJm`.
51 __authors__ = [
"Giulia Casarosa"]
52 __description__ =
"Skim list for D0 to two charged FSPs."
53 __contact__ = __liaison__
54 __category__ =
"physics, charm"
56 NoisyModules = [
"ParticleLoader",
"RootOutput"]
57 ApplyHLTHadronCut =
True
67 * :math:`D^{0}\\to \\pi^+ \\pi^-`,
68 * :math:`D^{0}\\to K^+ \\pi^-`,
69 * :math:`D^{0}\\to K^- \\pi^+`,
70 * :math:`D^{0}\\to K^+ K^-`,
72 **Selection Criteria**:
73 * Tracks: ``abs(d0) < 1, abs(z0) < 3, 0.296706 < theta < 2.61799``
74 * ``1.66 < M(D0) < 2.06``
76 * For more details, please check the source code of this skim.
79 * path (basf2.Path): Skim path to be processed.
82 * List of D0 particle list names.
85 mySel =
"abs(d0) < 1 and abs(z0) < 3"
86 mySel +=
" and 0.296706 < theta < 2.61799"
87 ma.fillParticleList(
"pi+:mygood", mySel, path=path)
88 ma.fillParticleList(
"K+:mygood", mySel, path=path)
90 charmcuts =
"1.66 < M < 2.06 and useCMSFrame(p)>2.0"
92 "pi+:mygood pi-:mygood",
93 "K+:mygood pi-:mygood",
94 "K-:mygood pi+:mygood",
95 "K+:mygood K-:mygood",
100 for chID, channel
in enumerate(D0_Channels):
101 ma.reconstructDecay(
"D0:HpJm" + str(chID) +
" -> " + channel, charmcuts, chID, path=path)
102 D0List.append(
"D0:HpJm" + str(chID))
107 """Builds :math:`D^0` skim lists defined in `XToD0_D0ToHpJm.D0ToHpJm`."""
114 Skims :math:`D^0`'s reconstructed by `XToD0_D0ToNeutrals.D0ToNeutrals`.
117 __authors__ = [
"Giulia Casarosa"]
118 __description__ =
"Skim list for D0 to neutral FSPs."
119 __contact__ = __liaison__
120 __category__ =
"physics, charm"
122 NoisyModules = [
"ParticleLoader",
"RootOutput"]
125 loadStdSkimPi0(path=path)
126 stdKshorts(path=path)
136 * :math:`D^{0}\\to \\pi^{0} \\pi^{0}`
137 * :math:`D^{0}\\to K_{S} \\pi^{0}`
138 * :math:`D^{0}\\to K_{S} K_{S}`
140 **Selection Criteria**:
141 * Use :math:`\\pi^{0}` from `stdPi0s.loadStdSkimPi0`
142 * Use :math:`K_{S}` from `stdV0s.stdKshorts`
143 * ``1.66 < M(D0) < 2.06, pcms(D0) > 2.0``
144 * For more details, please check the source code of this skim.
145 * (Maybe in the future, we can add a loose ECL cluster timing cut
146 to :math:`\\pi^{0}` in this skim.)
149 * path (basf2.Path): Skim path to be processed.
152 * List of D0 particle list names.
155 charmcuts =
"1.66 < M < 2.06 and useCMSFrame(p)>2.0"
156 D0_Channels = [
"pi0:skim pi0:skim",
157 "K_S0:merged pi0:skim",
158 "K_S0:merged K_S0:merged",
163 for chID, channel
in enumerate(D0_Channels):
164 ma.reconstructDecay(
"D0:2Nbdy" + str(chID) +
" -> " + channel, charmcuts, chID, path=path)
165 D0List.append(
"D0:2Nbdy" + str(chID))
170 """Builds :math:`D^0` skim lists defined in `XToD0_D0ToNeutrals.D0ToNeutrals`."""
178 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to \\gamma \\gamma`,
179 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to ee`,
180 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to e^+ \\mu^-`,
181 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to e^- \\mu^+`,
182 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to \\mu \\mu`,
183 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to \\pi^+ \\pi^-`,
185 **Selection Criteria**:
186 * Use photons from `stdPhotons.loadStdSkimPhoton`
187 * Use electrons, muons and pions from loose lists in `stdCharged`
188 * ``1.66 < M(D0) < 2.06``
189 * No cut on the slow pion
192 * For more details, please check the source code of this skim.
196 __authors__ = [
"Doris Yangsoo Kim",
"Jaeyeon Kim"]
197 __description__ =
"Skim list for D*+ to pi+ D0, D0 to rare decay."
198 __contact__ = __liaison__
199 __category__ =
"physics, charm"
201 NoisyModules = [
"ParticleLoader",
"RootOutput"]
204 stdE(
"loose", path=path)
205 stdMu(
"loose", path=path)
206 stdPi(
"loose", path=path)
207 loadStdSkimPhoton(path=path)
208 loadStdSkimPi0(path=path)
211 charmcuts =
"1.66 < M < 2.06"
212 Dstcuts =
"0 < Q < 0.02 and 2.0 < useCMSFrame(p)"
214 D0_Channels = [
"gamma:skim gamma:skim",
216 "e+:loose mu-:loose",
217 "e-:loose mu+:loose",
218 "mu+:loose mu-:loose",
219 "pi+:loose pi-:loose"]
222 for chID, channel
in enumerate(D0_Channels):
223 ma.reconstructDecay(
"D0:Rare" + str(chID) +
" -> " + channel, charmcuts, chID, path=path)
224 ma.reconstructDecay(
"D*+:" + str(chID) +
" -> pi+:all D0:Rare" + str(chID),
225 Dstcuts, chID, path=path)
226 DstList.append(
"D*+:" + str(chID))
235 * :math:`D^+_{(S)} \\to K_{S} \\pi^+`,
236 * :math:`D^+_{(S)} \\to K_{S} K^+`,
238 **Selection Criteria**:
239 * Tracks not from :math:`K_{S}`: ``abs(d0) < 1, abs(z0) < 3,
240 0.296706 < theta < 2.61799``
241 * Use :math:`K_{S}` from `stdV0s.stdKshorts` and require
242 ``flightDistance/flightDistanceErr > 2``
243 * ``1.67 < M(D+) < 2.17, pcms(D+) > 2.0``
244 * For more details, please check the source code of this skim.
248 __authors__ = [
"Guanda Gong"]
249 __description__ =
"Skim list for D_(s)+ to Ks h+."
250 __contact__ = __liaison__
251 __category__ =
"physics, charm"
253 NoisyModules = [
"ParticleLoader",
"RootOutput"]
254 ApplyHLTHadronCut =
True
257 stdK(
"all", path=path)
258 stdPi(
"all", path=path)
259 stdKshorts(path=path)
262 mySel =
"abs(d0) < 1 and abs(z0) < 3"
263 mySel +=
" and 0.296706 < theta < 2.61799"
264 ma.fillParticleList(
"pi+:kshp", mySel, path=path)
265 ma.fillParticleList(
"K+:kshp", mySel, path=path)
266 ma.cutAndCopyList(
'K_S0:kshp',
'K_S0:merged',
'formula(flightDistance/flightDistanceErr) > 2', path=path)
268 Dpcuts =
"1.67 < M < 2.17 and useCMSFrame(p) > 2.0"
269 Dp_Channels = [
"K_S0:kshp pi+:kshp",
274 for chID, channel
in enumerate(Dp_Channels):
275 ma.reconstructDecay(
"D+:KsHp" + str(chID) +
" -> " + channel, Dpcuts, chID, path=path)
276 DpList.append(
"D+:KsHp" + str(chID))
285 * :math:`D^+_{(S)} \\to \\pi^+ \\pi^- \\pi^+`,
286 * :math:`D^+_{(S)} \\to \\pi^+ \\pi^- K^+`,
287 * :math:`D^+_{(S)} \\to \\pi^+ K^- K^+`,
288 * :math:`D^+_{(S)} \\to K^+ K^- K^+`,
289 * For :math:`D^+_{(S)} \\to K_{S} h^+`, which includes a :math:`K_{S}` vertex,
290 please check `XToDp_DpToKsHp`
292 **Selection Criteria**:
293 * Use tracks from the loose lists in `stdCharged`
294 * ``1.67 < M(D+) < 2.17, pcms(D+) > 2.0``
295 * For more details, please check the source code of this skim.
299 __authors__ = [
"Aman Sangal"]
300 __description__ =
"Skim list for D_(s)+ to h+ h- j+."
301 __contact__ = __liaison__
302 __category__ =
"physics, charm"
304 NoisyModules = [
"ParticleLoader",
"RootOutput"]
305 ApplyHLTHadronCut =
True
308 stdK(
"loose", path=path)
309 stdPi(
"loose", path=path)
312 Dpcuts =
"1.67 < M < 2.17 and useCMSFrame(p) > 2.0"
314 Dp_Channels = [
"pi+:loose pi-:loose pi+:loose",
315 "pi+:loose pi-:loose K+:loose",
316 "pi+:loose K-:loose K+:loose",
317 "K+:loose K-:loose pi+:loose",
321 for chID, channel
in enumerate(Dp_Channels):
322 ma.reconstructDecay(
"D+:HpHmJp" + str(chID) +
" -> " + channel, Dpcuts, chID, path=path)
323 DpList.append(
"D+:HpHmJp" + str(chID))
332 * :math:`\\Lambda_c^+ \\to p \\pi^- \\pi^+`
333 * :math:`\\Lambda_c^+ \\to p K^- \\pi^+`
334 * :math:`\\Lambda_c^+ \\to p \\pi^- K^+`
335 * :math:`\\Lambda_c^+ \\to p K^- K^+`
337 **Selection Criteria**:
338 * Use tracks from the loose lists in `stdCharged`
339 * ``2.2 < M(Lambda_c) < 2.4, pcms(Lambda_c) > 2.0``
340 * For more details, please check the source code of this skim.
344 __authors__ = [
"Justin Guilliams"]
345 __description__ =
"Skim list for Lambda_c+ -> p K- pi+."
346 __contact__ = __liaison__
347 __category__ =
"physics, charm"
349 NoisyModules = [
"ParticleLoader",
"RootOutput"]
350 ApplyHLTHadronCut =
True
353 stdK(
"all", path=path)
354 stdPi(
"all", path=path)
355 stdPr(
"loose", path=path)
359 LambdacCuts =
"2.2 < M < 2.4 and useCMSFrame(p) > 2.0"
360 LambdacChannels = [
"p+:loose pi-:all pi+:all",
361 "p+:loose K-:all pi+:all",
362 "p+:loose pi-:all K+:all",
363 "p+:loose K-:all K+:all",
367 for chID, channel
in enumerate(LambdacChannels):
368 ma.reconstructDecay(
"Lambda_c+:pHpJm" + str(chID) +
" -> " + channel, LambdacCuts, chID, path=path)
369 LambdacList.append(
"Lambda_c+:pHpJm" + str(chID))
378 * :math:`D^{*+}\\to \\pi^{0} D^{+}, D^+ \\to \\pi^+ \\pi^0`
380 **Selection Criteria**:
381 * Tracks: ``abs(d0) < 1, abs(z0) < 3, 0.296706 < theta < 2.61799``
382 * Use :math:`\\pi^{0}` from `stdPi0s.loadStdSkimPi0`
383 * ``1.67 < M(D+) < 2.07, pcms(D+) > 2.0``
385 * For more details, please check the source code of this skim.
389 __authors__ = [
"Johannes Brand"]
390 __description__ =
"Skim list for D*+ to D+ pi0, D+ to h+ pi0."
391 __contact__ = __liaison__
392 __category__ =
"physics, charm"
394 NoisyModules = [
"ParticleLoader",
"RootOutput"]
397 stdPi(
"all", path=path)
398 loadStdSkimPi0(path=path)
401 mySel =
"abs(d0) < 1 and abs(z0) < 3"
402 mySel +=
" and 0.296706 < theta < 2.61799"
403 ma.fillParticleList(
"pi+:hppi0", mySel, path=path)
405 Dpcuts =
"1.67 < M < 2.07 and useCMSFrame(p) > 2.0"
406 Dp_Channels = [
"pi+:hppi0 pi0:skim",
410 for chID, channel
in enumerate(Dp_Channels):
411 ma.reconstructDecay(
"D+:HpPi0" + str(chID) +
" -> " + channel, Dpcuts, chID, path=path)
412 ma.reconstructDecay(
"D*+:HpPi0" + str(chID) +
" -> D+:HpPi0" + str(chID) +
" pi0:skim",
"0 < Q < 0.018", path=path)
413 DstList.append(
"D*+:HpPi0" + str(chID))
422 * :math:`D^{*+}\\to D^{0} \\pi^+`, where :math:`D^{0}` is reconstructed by `XToD0_D0ToHpJm.D0ToHpJm`
424 **Selection Criteria**:
425 * Apply the cuts in `XToD0_D0ToHpJm`
426 * No cut on the slow pion
428 * For more details, please check the source code of this skim.
432 __authors__ =
"Giulia Casarosa"
433 __description__ =
"Same as `XToD0_D0ToHpJm`, but requiring the D0 is from D*+ -> D0 pi+ process."
434 __contact__ = __liaison__
435 __category__ =
"physics, charm"
437 NoisyModules = [
"ParticleLoader",
"RootOutput"]
438 ApplyHLTHadronCut =
True
441 stdK(
"all", path=path)
442 stdPi(
"all", path=path)
445 D0List = self.
D0ToHpJmD0ToHpJm(path)
447 Dstcuts =
'0 < Q < 0.018'
450 for chID, channel
in enumerate(D0List):
451 ma.reconstructDecay(
'D*+:HpJm' + str(chID) +
' -> D0:HpJm' + str(chID) +
' pi+:all', Dstcuts, chID, path=path)
452 DstList.append(
'D*+:HpJm' + str(chID))
461 * :math:`RS: D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to K^- \\pi^+ \\pi^{0}`
462 * :math:`WS: D^{*-}\\to \\pi^- \\overline{D}^{0}, \\overline{D}^{0}\\to K^- \\pi^+ \\pi^{0}`
464 **Selection Criteria**:
465 * Use tracks from the loose lists in `stdCharged` to reconstruct :math:`D^{0}`
466 * Use :math:`\\pi^{0}` from `stdPi0s.loadStdSkimPi0`
467 * ``1.70 < M(D0) < 2.10``
468 * No cut on the slow pion
469 * ``M(D*)-M(D0) < 0.16``
471 * For more details, please check the source code of this skim.
475 __authors__ = [
"Emma Oxford"]
477 "Skim list for D*+ to pi+ D0, D0 to pi0 and two charged FSPs, where the kinds "
478 "of two charged FSPs are different. The wrong sign(WS) mode, D*- to pi- D0, is "
481 __contact__ = __liaison__
482 __category__ =
"physics, charm"
484 NoisyModules = [
"ParticleLoader",
"RootOutput"]
485 ApplyHLTHadronCut =
True
488 stdK(
"loose", path=path)
489 stdPi(
"loose", path=path)
490 loadStdSkimPi0(path=path)
493 Dstcuts =
"massDifference(0) < 0.160 and useCMSFrame(p) > 2.0"
494 charmcuts =
"1.70 < M < 2.10"
495 ma.cutAndCopyList(
"pi0:myskim",
"pi0:skim",
"", path=path)
499 ma.reconstructDecay(
"D0:HpJmPi0_withPID -> K-:loose pi+:loose pi0:myskim", charmcuts, path=path)
500 ma.reconstructDecay(
"D*+:HpJmPi0RS_withPID -> D0:HpJmPi0_withPID pi+:all", Dstcuts, path=path)
501 ma.reconstructDecay(
"D*-:HpJmPi0WS_withPID -> D0:HpJmPi0_withPID pi-:all", Dstcuts, path=path)
502 ma.copyLists(
"D*+:HpJmPi0_withPID", [
"D*+:HpJmPi0RS_withPID",
"D*+:HpJmPi0WS_withPID"], path=path)
503 DstList.append(
"D*+:HpJmPi0_withPID")
512 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to \\pi^+ \\pi^- \\pi^{0}`
513 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to K^+ K^- \\pi^{0}`
515 **Selection Criteria**:
516 * Use tracks from the loose lists in `stdCharged` to reconstruct D^{0}
517 * Use :math:`\\pi^{0}` from `stdPi0s.loadStdSkimPi0`
518 * ``1.70 < M(D0) < 2.10``
519 * No cut on the slow pion
520 * ``M(D*)-M(D0) < 0.16``
522 * For more details, please check the source code of this skim.
526 __authors__ = [
"Emma Oxford"]
527 __description__ =
"Skim list for D*+ to pi+ D0, D0 to pi0 and two conjugate charged FSPs."
528 __contact__ = __liaison__
529 __category__ =
"physics, charm"
531 NoisyModules = [
"ParticleLoader",
"RootOutput"]
532 ApplyHLTHadronCut =
True
535 stdK(
"loose", path=path)
536 stdPi(
"loose", path=path)
537 loadStdSkimPhoton(path=path)
538 loadStdSkimPi0(path=path)
541 Dstcuts =
"massDifference(0) < 0.160 and useCMSFrame(p) > 2.0"
542 charmcuts =
"1.70 < M < 2.10"
543 ma.cutAndCopyList(
"pi0:myskim",
"pi0:skim",
"", path=path)
545 "pi+:loose pi-:loose pi0:myskim",
546 "K+:loose K-:loose pi0:myskim",
551 for chID, channel
in enumerate(D0_Channels):
553 ma.reconstructDecay(
"D0:HpHmPi0" + str(chID) +
"_withPID" +
" -> " + channel, charmcuts, chID, path=path)
555 "D*+:HpHmPi0" + str(chID) +
"_withPID" +
" -> D0:HpHmPi0" + str(chID) +
"_withPID" +
" pi+:all",
556 Dstcuts, chID, path=path)
557 DstList.append(
"D*+:HpHmPi0" + str(chID) +
"_withPID")
566 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to K_{S} \\pi^+ \\pi^- \\pi^{0}`
568 **Selection Criteria**:
569 * Tracks from :math:`D^{0}`:
570 ``abs(d0) < 1, abs(z0) < 3, 0.296706 < theta < 2.61799``
571 * Use :math:`\\pi^{0}` from `stdPi0s.loadStdSkimPi0`, then require ``0.11 < M(pi0) < 0.15, p(pi0) > 0.25``
572 * ``1.66 < M(D0) < 2.06, pcms(D0) > 2.0``
574 * For more details, please check the source code of this skim.
579 __description__ =
"Skim list for D*+ to pi+ D0, D0 to Ks pi+ pi- pi0."
580 __contact__ = __liaison__
581 __category__ =
"physics, charm"
583 NoisyModules = [
"ParticleLoader",
"RootOutput"]
584 ApplyHLTHadronCut =
True
587 stdPi(
"all", path=path)
588 loadStdSkimPi0(path=path)
589 stdKshorts(path=path)
592 mySel =
"abs(d0) < 1 and abs(z0) < 3"
593 mySel +=
" and 0.296706 < theta < 2.61799"
594 ma.fillParticleList(
"pi+:ksomega", mySel, path=path)
596 ma.cutAndCopyList(
"pi0:mypi0",
"pi0:skim",
"0.11 < M < 0.15 and p > 0.25 ", path=path)
597 ma.reconstructDecay(
"omega:3pi -> pi+:ksomega pi-:ksomega pi0:mypi0",
"", path=path)
599 charmcuts =
"1.66 < M < 2.06 and useCMSFrame(p) > 2.0"
600 ma.reconstructDecay(
"D0:KsOmega -> K_S0:merged omega:3pi", charmcuts, path=path)
603 ma.reconstructDecay(
"D*+:KsOmega -> D0:KsOmega pi+:all",
"0 < Q < 0.018", path=path)
604 DstList.append(
"D*+:KsOmega")
613 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to \\pi^+ \\pi^- \\pi^+ \\pi^-`
614 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to \\pi^+ \\pi^- \\pi^+ K^-`
615 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to \\pi^+ \\pi^- K^+ K^-`
616 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to \\pi^+ K^- K^+ K^-`
618 **Selection Criteria**:
619 * Tracks from :math:`D^{0}`:
620 ``abs(d0) < 1, abs(z0) < 3, 0.296706 < theta < 2.61799``
621 * ``1.66 < M(D0) < 2.06``
622 * No cut on the slow pion
623 * ``Q < 0.022, pcms(D*+) > 2.0``
624 * For more details, please check the source code of this skim.
628 __authors__ = [
"Kavita Lalwani, Chanchal Sharma"]
629 __description__ =
"Skim list for D*+ to K- pi+ pi- pi+."
630 __contact__ = __liaison__
631 __category__ =
"physics, charm"
633 NoisyModules = [
"ParticleLoader",
"RootOutput"]
634 ApplyHLTHadronCut =
True
637 stdPi(
"all", path=path)
638 stdK(
"all", path=path)
641 mySel =
"abs(d0) < 1 and abs(z0) < 3"
642 mySel +=
" and 0.296706 < theta < 2.61799"
643 ma.fillParticleList(
"pi+:hphmhpjm", mySel, path=path)
644 ma.fillParticleList(
"K+:hphmhpjm", mySel, path=path)
647 "pi+:hphmhpjm pi-:hphmhpjm pi+:hphmhpjm pi-:hphmhpjm",
648 "pi+:hphmhpjm pi-:hphmhpjm pi+:hphmhpjm K-:hphmhpjm",
649 "pi+:hphmhpjm pi-:hphmhpjm K+:hphmhpjm K-:hphmhpjm",
650 "pi+:hphmhpjm K-:hphmhpjm K+:hphmhpjm K-:hphmhpjm",
653 D0cuts =
"1.66 < M < 2.06"
654 Dstcuts =
"0 < Q < 0.022 and useCMSFrame(p) > 2.0"
657 for chID, channel
in enumerate(D0_Channels):
658 ma.reconstructDecay(
"D0:HpHmHpJm" + str(chID) +
" -> " + channel, D0cuts, chID, path=path)
660 ma.reconstructDecay(
"D*+:HpHmHpJm" + str(chID) +
" -> pi+:all D0:HpHmHpJm" + str(chID), Dstcuts, chID, path=path)
661 DstList.append(
"D*+:HpHmHpJm" + str(chID))
670 * :math:`D^{*+}\\to \\pi^- D^{0}, D^{0}\\to \\pi^+ \\pi^- \\eta, \\eta\\to \\gamma \\gamma`
671 * :math:`RS: D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to K^- \\pi^+ \\eta, \\eta\\to \\gamma \\gamma`
672 * :math:`WS: D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to K^+ \\pi^- \\eta, \\eta\\to \\gamma \\gamma`
673 * :math:`D^{*+}\\to \\pi^- D^{0}, D^{0}\\to K^+ K^- \\eta, \\eta\\to \\gamma \\gamma`
675 **Selection Criteria**:
676 * Use tracks from the loose lists in `stdCharged` to reconstruct D^{0}
677 * ``0.47 < M(eta) < 0.60, p(eta) > 0.24``
678 * ``1.66 < M(D0) < 2.06, pcms(D0) > 2.0``
679 * No cut on the slow pion
680 * ``M(D*)-M(D0) < 0.16``
681 * For more details, please check the source code of this skim.
687 "Skim list for D*+ to pi+ D0, D0 to eta and two charged FSPs, where the kinds "
688 "of two charged FSPs are different. The wrong sign(WS) mode, D*- to pi- D0, is "
691 __contact__ = __liaison__
692 __category__ =
"physics, charm"
694 NoisyModules = [
"ParticleLoader",
"RootOutput"]
695 ApplyHLTHadronCut =
True
698 stdK(
"loose", path=path)
699 stdPi(
"loose", path=path)
700 loadStdSkimPhoton(path=path)
701 stdKshorts(path=path)
704 Dstcuts =
"massDifference(0) < 0.160 and useCMSFrame(p) > 2.0"
705 charmcuts =
"1.66 < M < 2.06"
706 ma.reconstructDecay(
"eta:myskim -> gamma:loose gamma:loose",
"0.47 < M < 0.60 and p > 0.24", path=path)
708 "pi-:loose pi+:loose eta:myskim",
709 "K-:loose pi+:loose eta:myskim",
710 "pi-:loose K+:loose eta:myskim",
711 "K-:loose K+:loose eta:myskim",
716 for chID, channel
in enumerate(D0_Channels):
718 ma.reconstructDecay(
"D0:HpJmEta" + str(chID) +
" -> " + channel, charmcuts, chID, path=path)
720 "D*+:HpJmEta" + str(chID) +
" -> D0:HpJmEta" + str(chID) +
" pi+:all",
721 Dstcuts, chID, path=path)
722 DstList.append(
"D*+:HpJmEta" + str(chID))
731 * :math:`D^{*+}\\to \\pi^+ D^{0}`, where the :math:`D^{0}` is reconstructed
732 by `XToD0_D0ToNeutrals.D0ToNeutrals`.
734 **Selection Criteria**:
735 * Apply the cuts in `XToD0_D0ToNeutrals`
736 * No cut on the slow pion
738 * For more details, please check the source code of this skim.
742 __authors__ = [
"Giulia Casarosa",
"Emma Oxford"]
743 __description__ =
"Same as `XToD0_D0ToNeutrals`, but requiring that the D0 is from D* decay."
744 __contact__ = __liaison__
745 __category__ =
"physics, charm"
747 NoisyModules = [
"ParticleLoader",
"RootOutput"]
750 stdPi(
"all", path=path)
751 loadStdSkimPi0(path=path)
752 stdKshorts(path=path)
758 Dstcuts =
"0 < Q < 0.02"
761 for chID, channel
in enumerate(D0List):
762 ma.reconstructDecay(
"D*+:2Nbdy" + str(chID) +
" -> pi+:all " + channel, Dstcuts, chID, path=path)
763 DstList.append(
"D*+:2Nbdy" + str(chID))
772 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to K_{S} \\pi^+ \\pi^-`
773 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to K_{S} \\pi^+ K^-`
774 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to K_{S} K^+ \\pi^-`
775 * :math:`D^{*+}\\to \\pi^+ D^{0}, D^{0}\\to K_{S} K^+ K^-`
777 **Selection Criteria**:
778 * Tracks from :math:`D^{0}`:
779 ``abs(d0) < 1, abs(z0) < 3, 0.296706 < theta < 2.61799``
780 * Use :math:`K_{S}` from `stdV0s.stdKshorts`
781 * ``1.66 < M(D0) < 2.06``
782 * No cut on the slow pion
785 * For more details, please check the source code of this skim.
789 __authors__ = [
"Yeqi Chen"]
790 __description__ =
"Skim list for D*+ to pi+ D0, D0 to Ks and two conjugate charged FSPs."
791 __contact__ = __liaison__
792 __category__ =
"physics, charm"
794 NoisyModules = [
"ParticleLoader",
"RootOutput"]
795 ApplyHLTHadronCut =
True
798 stdKshorts(path=path)
801 mySel =
"abs(d0) < 1 and abs(z0) < 3"
802 mySel +=
" and 0.296706 < theta < 2.61799"
803 ma.fillParticleList(
"pi+:hpjmks", mySel, path=path)
804 ma.fillParticleList(
"K+:hpjmks", mySel, path=path)
806 D0cuts =
"1.66 < M < 2.06"
807 Dstcuts =
"0 < Q < 0.022 and useCMSFrame(p) > 2.0"
809 D0_Channels = [
"pi-:hpjmks pi+:hpjmks K_S0:merged",
810 "K-:hpjmks pi+:hpjmks K_S0:merged",
811 "pi-:hpjmks K+:hpjmks K_S0:merged",
812 "K-:hpjmks K+:hpjmks K_S0:merged",
816 for chID, channel
in enumerate(D0_Channels):
817 ma.reconstructDecay(
"D0:HpJmKs" + str(chID) +
" -> " + channel, D0cuts, chID, path=path)
819 ma.reconstructDecay(
"D*+:HpJmKs" + str(chID) +
" -> pi+:all D0:HpJmKs" + str(chID), Dstcuts, chID, path=path)
820 DstList.append(
"D*+:HpJmKs" + str(chID))
828 Cut criteria are not finally decided, and could be changed. Please check the
829 code in the master branch to get up-to-date information.
833 __description__ =
"An special version of `DstToD0Pi_D0ToHpJmPi0` to deal with Early Data."
834 __contact__ = __liaison__
835 __category__ =
"physics, charm"
837 NoisyModules = [
"ParticleLoader",
"RootOutput"]
838 ApplyHLTHadronCut =
True
841 loadStdSkimPhoton(path=path)
842 loadStdSkimPi0(path=path)
845 mySel =
"abs(d0) < 0.5 and abs(z0) < 1.0"
846 mySel +=
" and 0.296706 < theta < 2.61799"
847 ma.fillParticleList(
"pi+:myhjp0", mySel, path=path)
848 ma.fillParticleList(
"K+:myhjp0", mySel, path=path)
850 ma.cutAndCopyList(
"pi0:myhjp0",
"pi0:skim",
"", path=path)
852 D0cuts =
"1.70 < M < 2.10"
853 Dstcuts =
"massDifference(0) < 0.160 and useCMSFrame(p) > 2.0"
855 eventcuts =
"nCleanedTracks(abs(d0) < 0.5 and abs(z0) < 1.0) >= 3"
859 ma.reconstructDecay(
"D0:HpJmPi0 -> K-:myhjp0 pi+:myhjp0 pi0:myhjp0", D0cuts, path=path)
860 ma.reconstructDecay(
"D*+:HpJmPi0RS -> D0:HpJmPi0 pi+:myhjp0", Dstcuts, path=path)
861 ma.reconstructDecay(
"D*-:HpJmPi0WS -> D0:HpJmPi0 pi-:myhjp0", Dstcuts, path=path)
862 ma.copyLists(
"D*+:HpJmPi0", [
"D*+:HpJmPi0RS",
"D*+:HpJmPi0WS"], path=path)
863 DstList.append(
"D*+:HpJmPi0")
871 Cut criteria are not finally decided, and could be changed. Please check the
872 code in the master branch to get up-to-date information.
876 __description__ =
"A special version of `DstToD0Pi_D0ToHpHmPi0` to deal with Early Data."
877 __contact__ = __liaison__
878 __category__ =
"physics, charm"
880 NoisyModules = [
"ParticleLoader",
"RootOutput"]
881 ApplyHLTHadronCut =
True
884 loadStdSkimPi0(path=path)
887 mySel =
"abs(d0) < 0.5 and abs(z0) < 1.0"
888 mySel +=
" and 0.296706 < theta < 2.61799"
889 ma.fillParticleList(
"pi+:myhhp0", mySel, path=path)
890 ma.fillParticleList(
"K+:myhhp0", mySel, path=path)
892 ma.cutAndCopyList(
"pi0:myhhp0",
"pi0:skim",
"", path=path)
894 D0cuts =
"1.70 < M < 2.10"
895 Dstcuts =
"massDifference(0) < 0.160 and useCMSFrame(p) > 2.0"
897 eventcuts =
"nCleanedTracks(abs(d0) < 0.5 and abs(z0) < 1.0) >= 3"
900 D0_Channels = [
"pi+:myhhp0 pi-:myhhp0 pi0:myhhp0",
901 "K+:myhhp0 K-:myhhp0 pi0:myhhp0",
906 for chID, channel
in enumerate(D0_Channels):
907 ma.reconstructDecay(
"D0:HpHmPi0" + str(chID) +
" -> " + channel, D0cuts, chID, path=path)
908 ma.reconstructDecay(
"D*+:HpHmPi0" + str(chID) +
" -> D0:HpHmPi0" + str(chID) +
" pi+:myhhp0",
909 Dstcuts, chID, path=path)
910 DstList.append(
"D*+:HpHmPi0" + str(chID))
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def build_lists(self, path)
def load_standard_lists(self, path)
def skim_event_cuts(self, cut, *path)