12 """ Skim list building functions for the dark sector physics working group """
15 import modularAnalysis
as ma
17 from skim
import BaseSkim, fancy_skim_header
18 from stdCharged
import stdE, stdMu, stdPi, stdK
19 from stdPhotons
import stdPhotons
20 import vertex
as vertex
22 __liaison__ =
"Sascha Dreyer <sascha.dreyer@desy.de>"
23 _VALIDATION_SAMPLE =
"mdst14.root"
29 **Physics channel**: ee → A'γ; A' → invisible
31 Skim list contains single photon candidates for the dark photon to invisible final
34 __authors__ = [
"Sam Cunliffe",
"Chris Hearty"]
35 __contact__ = __liaison__
36 __description__ =
"Single photon skim list for the dark photon analysis."
37 __category__ =
"physics, dark sector"
38 ApplyHLTHadronCut =
False
41 stdPhotons(
"all", path=path, loadPhotonBeamBackgroundMVA=
False)
46 in_tracking_acceptance =
"0.296706 < theta < 2.61799"
48 "gamma:singlePhoton",
"gamma:all",
49 f
"useCMSFrame(E) > 0.5 and {in_tracking_acceptance}", path=path)
53 region_dependent =
" [clusterTheta < 1.65457213 and clusterTheta > 0.77143553] or "
54 region_dependent +=
"[clusterReg == 2 and useCMSFrame(E) > 1.0] or "
55 region_dependent +=
"[clusterReg == 1 and useCMSFrame(E) > 2.0] or "
56 region_dependent +=
"[clusterReg == 3 and useCMSFrame(E) > 2.0] or "
57 region_dependent +=
"[clusterReg == 11 and useCMSFrame(E) > 2.0] or "
58 region_dependent +=
"[clusterReg == 13 and useCMSFrame(E) > 2.0]"
59 ma.applyCuts(
"gamma:singlePhoton", region_dependent, path=path)
62 good_tracks =
'abs(dz) < 2.0 and abs(dr) < 0.5 and pt > 0.15'
64 f
"nParticlesInList(gamma:singlePhoton) == 1 and nCleanedTracks({good_tracks}) == 0",
72 not_in_signal_list =
"isInList(gamma:singlePhoton) < 1"
73 in_time =
"maxWeightedDistanceFromAverageECLTime < 1"
74 ma.cutAndCopyList(
"gamma:to_veto",
"gamma:all",
75 f
"E > 0.55 and {not_in_signal_list}", path=path)
76 ma.rankByHighest(
"gamma:to_veto",
"E", numBest=1, path=path)
77 ma.reconstructDecay(
"vpho:veto -> gamma:singlePhoton gamma:to_veto",
79 veto_additional_in_time_cluster =
'nParticlesInList(vpho:veto) < 1'
85 ma.applyCuts(
"gamma:singlePhoton", veto_additional_in_time_cluster, path=path)
86 return [
"gamma:singlePhoton"]
91 __authors__ = [
"Michael De Nuccio"]
93 "Neutral dark sector skim list for the ALP 3-photon analysis: "
94 ":math:`ee\\to a(\\to\\gamma\\gamma)\\gamma`"
96 __contact__ = __liaison__
97 __category__ =
"physics, dark sector"
98 ApplyHLTHadronCut =
False
101 """Adds the ALP codes to the basf2 pdg instance """
107 An list builder function for the ALP decays. Part of the `ALP3Gamma` skim.
110 path (basf2.Path): the path to add the skim
113 list name of the ALP decays candidates
120 'gamma:cdcAndMinimumEnergy',
121 'E >= 0.1 and theta >= 0.297 and theta <= 2.618',
122 True, path=path, loadPhotonBeamBackgroundMVA=
False
126 ALPchannels = [
'gamma:cdcAndMinimumEnergy gamma:cdcAndMinimumEnergy']
130 for chID, channel
in enumerate(ALPchannels):
131 mode =
'ALP:' + str(chID) +
' -> ' + channel
133 ma.reconstructDecay(mode, ALPcuts, chID, path=path)
135 ALPList.append(
'ALP:' + str(chID))
145 beamcuts =
"InvM >= formula(0.8 * Ecms) and InvM <= formula(1.05 * Ecms) and maxWeightedDistanceFromAverageECLTime <= 2"
147 ALPList = self.
initialALPinitialALP(path=path)
150 ma.fillParticleList(
"gamma:minimumEnergy",
"E >= 0.1",
True, path=path)
155 for chID, channel
in enumerate(ALPList):
156 mode =
"beam:" + str(chID) +
" -> gamma:minimumEnergy " + channel
158 ma.reconstructDecay(mode, beamcuts, chID, path=path)
159 beamList.append(
"beam:" + str(chID))
166 **Physics channel**: :math:`e^{+}e^{-} \\to \\mu^{+}\\mu^{-} \\, +` missing energy.
168 __authors__ = [
"Giacomo De Pietro"]
170 "Dimuon + missing energy skim, needed for :math:`e^{+}e^{-} \\to \\mu^{+}\\mu^{-}"
171 "Z^{\\prime}; \\, Z^{\\prime} \\to \\mathrm{invisible}` and other searches."
173 __contact__ = __liaison__
174 __category__ =
"physics, dark sector"
175 ApplyHLTHadronCut =
False
178 stdMu(
"all", path=path)
182 skim_label =
"forDimuonMissingEnergySkim"
183 dimuon_name =
"Z0:" + skim_label
186 fromIP_cut =
"[abs(dz) < 5.0] and [abs(dr) < 2.0]"
187 muonID_cut =
"[muonID > 0.3]"
189 dimuon_cut =
"[nCleanedTracks(" + fromIP_cut +
") < 4]"
191 dimuon_cut +=
" and [useCMSFrame(pt) > 0.2]"
194 ma.cutAndCopyList(
"mu+:" + skim_label,
"mu+:all", fromIP_cut +
" and " + muonID_cut, path=path)
195 ma.reconstructDecay(dimuon_name +
" -> mu+:" + skim_label +
" mu-:" + skim_label, dimuon_cut, path=path)
198 dimuon_list.append(dimuon_name)
204 __authors__ = [
"Giacomo De Pietro"]
206 "Electron-muon pair + missing energy skim, needed for :math:`e^{+}e^{-} \\to "
207 "e^{\\pm}\\mu^{\\mp} Z^{\\prime}; \\, Z^{\\prime} \\to \\mathrm{invisible}` and other "
210 __contact__ = __liaison__
211 __category__ =
"physics, dark sector"
212 ApplyHLTHadronCut =
False
215 stdE(
"all", path=path)
216 stdMu(
"all", path=path)
220 **Physics channel**: :math:`e^{+}e^{-} \\to e^{\\pm}\\mu^{\\mp} \\, +` missing energy
223 skim_label =
"forElectronMuonMissingEnergySkim"
224 emu_name =
"Z0:" + skim_label
227 fromIP_cut =
"[abs(dz) < 5.0] and [abs(dr) < 2.0]"
228 electronID_cut =
"[electronID > 0.3]"
229 muonID_cut =
"[muonID > 0.3]"
231 theta_cut =
"[0.387 < theta < 2.421]"
233 emu_cut =
"[nCleanedTracks(" + fromIP_cut +
") < 4]"
235 emu_cut +=
" and [useCMSFrame(pt) > 0.2]"
238 ma.cutAndCopyList(
"e+:" + skim_label,
"e+:all", fromIP_cut +
" and " + electronID_cut +
" and " + theta_cut, path=path)
239 ma.cutAndCopyList(
"mu+:" + skim_label,
"mu+:all", fromIP_cut +
" and " + muonID_cut, path=path)
240 ma.reconstructDecay(emu_name +
" -> e+:" + skim_label +
" mu-:" + skim_label, emu_cut, path=path)
243 emu_list.append(emu_name)
249 __authors__ = [
"Ilya Komarov"]
250 __description__ =
"Lepton flavour violating Z' skim, Z' to visible FS."
251 __contact__ = __liaison__
252 __category__ =
"physics, dark sector"
253 ApplyHLTHadronCut =
False
256 stdE(
"all", path=path)
257 stdE(
"loose", path=path)
261 **Physics channel**: ee --> e mu Z'; Z' --> e mu
266 track_cuts =
"abs(dz) < 2.0 and abs(dr) < 0.5"
267 Event_cuts_vis =
"nCleanedTracks(abs(dz) < 2.0 and abs(dr) < 0.5) == 4"
269 ma.cutAndCopyList(
"e+:lfvzp",
"e+:all", track_cuts, path=path)
272 LFVZpVisChannel =
"e+:lfvzp e+:lfvzp e-:lfvzp e-:lfvzp"
274 ma.reconstructDecay(
"vpho:vislfvzp -> " + LFVZpVisChannel, Event_cuts_vis, path=path)
276 lfvzp_list.append(
"vpho:vislfvzp")
279 LFVZpVisChannel =
"e+:lfvzp e+:lfvzp e-:lfvzp"
280 Event_cuts_vis =
"nCleanedTracks(abs(dz) < 2.0 and abs(dr) < 0.5) == 3"
282 ma.reconstructDecay(
"vpho:3tr_vislfvzp -> " + LFVZpVisChannel, Event_cuts_vis, path=path, allowChargeViolation=
True)
284 lfvzp_list.append(
"vpho:3tr_vislfvzp")
287 LFVZpVisChannel =
"e+:lfvzp e+:lfvzp"
288 Event_cuts_vis =
"nCleanedTracks(abs(dz) < 2.0 and abs(dr) < 0.5) == 2"
289 ma.reconstructDecay(
"vpho:2tr_vislfvzp -> " + LFVZpVisChannel, Event_cuts_vis, path=path, allowChargeViolation=
True)
291 lfvzp_list.append(
"vpho:2tr_vislfvzp")
299 **Physics channel**: ee → eγ
302 __authors__ = [
"Sam Cunliffe",
"Torben Ferber"]
304 "Electron-gamma skim list for study of the ee backgrounds at high dark "
305 "photon mass, as part of the dark photon analysis"
307 __contact__ = __liaison__
308 __category__ =
"physics, dark sector, control-channel"
309 ApplyHLTHadronCut =
False
312 stdPhotons(
"all", path=path, loadPhotonBeamBackgroundMVA=
False)
313 stdE(
"all", path=path)
318 internal_skim_label =
"forEGammaSkim"
319 skim_output_label =
"EGammaControl"
323 phys_perf_good_track =
'abs(dr) < 1 and abs(dz) < 3 and pt > 0.15'
324 one_good_track = f
'[nCleanedTracks({phys_perf_good_track}) == 1]'
327 photon_energy_cut =
'0.45'
328 good_photon =
'theta > 0.296706 and theta < 2.61799' +\
329 f
' and useCMSFrame(E) > {photon_energy_cut}'
330 ma.cutAndCopyList(f
'gamma:{internal_skim_label}',
'gamma:all', good_photon, path=path)
331 one_good_photon = f
'[eventCached(nParticlesInList(gamma:{internal_skim_label})) == 1]'
334 event_cuts = f
'{one_good_photon} and {one_good_track}'
338 good_track_w_hie_cluster_match =
'%s and clusterE > 2.0' % phys_perf_good_track
339 ma.cutAndCopyList(f
'e+:{internal_skim_label}',
'e+:all', good_track_w_hie_cluster_match, path=path)
343 f
'vpho:{skim_output_label} -> e+:{internal_skim_label} gamma:{internal_skim_label}',
344 '', 1, allowChargeViolation=
True, path=path)
345 return [f
"vpho:{skim_output_label}"]
351 **Physics channel**: ee → γγ
354 This skim can retain a lot of γγ events.
355 In case this becomes unacceptable, we provide prescale parameters.
356 Prescales are given in standard trigger convention (reciprocal),
357 so prescale of 100 is 1% of events kept, etc.
360 To prescale the higher-energy probe photons by 10%:
362 >>> from skim.WGs.dark import GammaGammaControlKLMDark
363 >>> Skim = GammaGammaControlKLMDark(prescale_high=10)
364 >>> Skim(path) # Add list-building function and uDST output module to path
368 __authors__ = [
"Sam Cunliffe",
"Miho Wakai"]
370 "Gamma gamma skim list for study of the KLM efficiency as part of "
371 "the dark photon analysis"
373 __contact__ = __liaison__
374 __category__ =
"physics, dark sector, control-channel"
375 ApplyHLTHadronCut =
False
378 stdPhotons(
"all", path=path, loadPhotonBeamBackgroundMVA=
False)
380 TestSampleProcess =
"gg"
382 def __init__(self, prescale_high=1, prescale_low=1, **kwargs):
385 prescale_high (int): the prescale for more energetic probe photon
386 prescale_low (int): the prescale for a less energetic probe photon
387 **kwargs: Passed to constructor of `BaseSkim`.
398 if (prescale_high, prescale_low) != (1, 1):
400 "GammaGammaControlKLMDarkList is prescaled. "
401 f
"prescale_high={prescale_high}, prescale_low={prescale_low}"
403 prescale_high = str(float(1.0 / prescale_high))
404 prescale_low = str(float(1.0 / prescale_low))
407 good_tracks =
"abs(dz) < 2.0 and abs(dr) < 0.5 and pt > 0.2"
408 no_good_tracks = f
"nCleanedTracks({good_tracks}) < 1"
413 "gamma:controlKLM",
"gamma:all",
"0.1 < useCMSFrame(clusterE) < 7", path=path)
414 ma.rankByHighest(
"gamma:controlKLM",
"useCMSFrame(clusterE)", numBest=2, path=path)
420 tag_daughter =
"daughterHighest(useCMSFrame(clusterE)) > 4.5"
426 probe_high = f
"[daughterLowest(useCMSFrame(clusterE)) > 4.5] and [eventRandom < {prescale_high}]"
427 probe_low = f
"[daughterLowest(useCMSFrame(clusterE)) < 4.5] and [eventRandom < {prescale_low}]"
428 prescale = f
"[ {probe_high} ] or [ {probe_low} ]"
431 delta_phi_cut =
"abs(daughterDiffOfPhiCMS(0, 1)) > 3.1066860685499065"
434 sum_th =
"daughterSumOf(useCMSFrame(theta))"
435 sum_th_cut = f
"3.1066860685499065 < {sum_th} < 3.1764992386296798"
438 cuts = [no_good_tracks, tag_daughter, prescale, delta_phi_cut, sum_th_cut]
439 cuts =
" and ".join([f
"[ {cut} ]" for cut
in cuts])
442 "vpho:singlePhotonControlKLM -> gamma:controlKLM gamma:controlKLM",
444 return [
"vpho:singlePhotonControlKLM"]
450 **Physics channel**: :math:`e^{+}e^{-} \\to e^{+}e^{-}`
453 This skim is currently deactivated, since the retention rate is too high.
456 __authors__ =
"Giacomo De Pietro"
458 "Dielectron skim, needed for :math:`e^{+}e^{-} \\to A^{\\prime} h^{\\prime};`"
459 ":math:`A^{\\prime} \\to e^{+}e^{-}; \\, h^{\\prime} \\to \\mathrm{invisible}` and other searches."
461 __contact__ = __liaison__
462 __category__ =
"physics, dark sector"
463 ApplyHLTHadronCut =
False
466 stdE(
"all", path=path)
468 TestSampleProcess =
"mumu"
472 skim_label =
"forDielectronMissingEnergySkim"
473 dielectron_name = f
"Z0:{skim_label}"
476 fromIP_cut =
"[abs(dz) < 5.0] and [abs(dr) < 2.0]"
477 electronID_cut =
"[electronID > 0.2]"
479 theta_cut =
"[0.387 < theta < 2.421]"
481 dielectron_cut = f
"[nCleanedTracks({fromIP_cut}) == 2]"
483 dielectron_cut +=
" and [useCMSFrame(pt) > 0.2]"
486 electron_cuts =
" and ".join([fromIP_cut, electronID_cut, theta_cut])
487 ma.cutAndCopyList(f
"e+:{skim_label}",
"e+:all", electron_cuts, path=path)
488 ma.reconstructDecay(f
"{dielectron_name} -> e+:{skim_label} e-:{skim_label}", dielectron_cut, path=path)
491 dielectron_list.append(dielectron_name)
492 return dielectron_list
499 Control sample: :math:`e^{+}e^{-} \\to e^{+}e^{-}V^{0};`"
502 __authors__ =
"Savino Longo"
504 "iDM control sample skim. :math:`e^{+}e^{-} \\to e^{+}e^{-}V^{0};`"
506 __contact__ = __liaison__
507 __category__ =
"physics, dark sector"
508 ApplyHLTHadronCut =
False
511 stdPhotons(
"all", path=path, loadPhotonBeamBackgroundMVA=
False)
512 stdE(
"all", path=path)
517 BhabhaTrackCuts =
'abs(dr)<0.5 and abs(dz)<2 and pt>0.2 and 0.8<clusterEoP<1.2 and p>1.0 and clusterReg==2 and nCDCHits>4'
518 BhabhaSystemCuts =
'4<M<10 and 0.5<pRecoilTheta<2.25'
519 V0TrackCuts =
'nCDCHits>4 and p<3.0'
521 PhotonVetoCuts =
'p>1.0'
523 ma.cutAndCopyList(
"gamma:HighEGammaVeto",
"gamma:all", PhotonVetoCuts, path=path)
524 ma.cutAndCopyList(
"e+:BhabhaTrack",
"e+:all", BhabhaTrackCuts, path=path)
525 ma.cutAndCopyList(
"e+:V0Track",
"e+:all", V0TrackCuts, path=path)
527 ma.reconstructDecay(
"vpho:BhabhaSysyem -> e+:BhabhaTrack e-:BhabhaTrack", BhabhaSystemCuts, path=path)
529 ma.reconstructDecay(
"vpho:V0System -> e+:V0Track e-:V0Track",
'', path=path)
531 ma.applyCuts(
'vpho:V0System', V0Cuts, path=path)
533 ma.reconstructDecay(
'vpho:Total -> vpho:BhabhaSysyem vpho:V0System',
'', path=path)
535 eventCuts = (
'nParticlesInList(gamma:HighEGammaVeto)<1 and '
536 'nParticlesInList(vpho:Total)>0')
540 return [
"vpho:Total"]
546 Skim list contains events with no tracks from IP, no high E tracks and only one high E photon.
548 __authors__ = [
"Savino Longo"]
549 __contact__ = __liaison__
550 __description__ =
"iDM list for the iDM analysis."
551 __category__ =
"physics, dark sector"
552 ApplyHLTHadronCut =
False
555 stdPhotons(
"all", path=path, loadPhotonBeamBackgroundMVA=
False)
556 stdE(
"all", path=path)
560 IPtrack =
'abs(dr) < 0.05'
561 HighEtrack =
'useCMSFrame(p)>3.0'
562 ma.cutAndCopyList(
"e+:TrackFromIP",
"e+:all", IPtrack, path=path)
563 ma.cutAndCopyList(
"e+:HighEnergyTrack",
"e+:all", HighEtrack, path=path)
565 signalPhoton =
"[clusterReg==2 and useCMSFrame(E) > 1.0] or "
566 signalPhoton +=
"[clusterReg == 1 and useCMSFrame(E) > 2.0] or "
567 signalPhoton +=
"[clusterReg == 3 and useCMSFrame(E) > 2.0] or "
568 signalPhoton +=
"[clusterReg == 11 and useCMSFrame(E) > 2.0] or "
569 signalPhoton +=
"[clusterReg == 13 and useCMSFrame(E) > 2.0] "
571 photonVetoHE1 =
'useCMSFrame(p) > 0.6'
572 photonVetoHE3 =
'p>0.5'
574 ma.cutAndCopyList(
"gamma:ISR",
"gamma:all", signalPhoton, path=path)
575 ma.cutAndCopyList(
"gamma:HighEnergyPhotons",
"gamma:all", photonVetoHE1, path=path)
576 ma.cutAndCopyList(
"gamma:MediumEnergyPhotons",
"gamma:all", photonVetoHE3, path=path)
578 idmEventCuts = (
'nParticlesInList(gamma:ISR)==1 and '
579 'nParticlesInList(e+:TrackFromIP)==0 and '
580 'nParticlesInList(e+:HighEnergyTrack) == 0 and '
581 'nParticlesInList(gamma:HighEnergyPhotons) == 1 and '
582 'nParticlesInList(gamma:MediumEnergyPhotons) < 4 and '
583 'HighLevelTrigger == 1')
593 Skim to select B+ decays to a K+ from the IP and a LLP with a vertex displaced from the IR decaying to two charged tracks.
595 __authors__ = [
"Sascha Dreyer"]
596 __contact__ = __liaison__
598 "B+ to K+ LLP analysis skim :math:`e^{+}e^{-} \\to \\Upsilon(4s) \\to [B^{+} \\to K^{+} LLP]B^{-}`"
600 __category__ =
"physics, dark sector"
601 ApplyHLTHadronCut =
False
604 stdPi(
"all", path=path)
605 stdK(
"all", path=path)
606 stdE(
"all", path=path)
607 stdMu(
"all", path=path)
613 minDisplacementCut =
"[dr > 0.05]"
615 ma.reconstructDecay(
"vpho:LLP_e" + btoksLbl +
" -> e+:all e-:all",
"", path=path)
616 ma.reconstructDecay(
"vpho:LLP_mu" + btoksLbl +
" -> mu+:all mu-:all",
"", path=path)
617 ma.reconstructDecay(
"vpho:LLP_pi" + btoksLbl +
" -> pi+:all pi-:all",
"", path=path)
618 ma.reconstructDecay(
"vpho:LLP_K" + btoksLbl +
" -> K+:all K-:all",
"", path=path)
620 ma.copyLists(outputListName=
"vpho:LLP" + btoksLbl,
621 inputListNames=[
"vpho:LLP_e" + btoksLbl,
"vpho:LLP_mu" + btoksLbl,
622 "vpho:LLP_pi" + btoksLbl,
"vpho:LLP_K" + btoksLbl],
625 vertex.treeFit(
"vpho:LLP" + btoksLbl, conf_level=0, updateAllDaughters=
True, path=path)
627 ma.applyCuts(
"vpho:LLP" + btoksLbl, minDisplacementCut, path=path)
629 ipKaon =
"[pt > 0.1] and [abs(dr) < 0.5] and [abs(dz) < 2.0]"
630 ma.cutAndCopyList(
"K+:TrackFromIP" + btoksLbl,
"K+:all", ipKaon, path=path)
632 kinematicCuts =
"[Mbc > 5.20] and [abs(deltaE) < 0.25]"
633 ma.reconstructDecay(
"B+:b" + btoksLbl +
" -> K+:TrackFromIP" + btoksLbl +
" vpho:LLP" + btoksLbl,
634 kinematicCuts, path=path)
636 return [
"B+:b" + btoksLbl]
642 Skim list contains events with at least one displaced vertex and no additional unused tracks from the IP.
644 __authors__ = [
"Patrick Ecker"]
645 __contact__ = __liaison__
646 __description__ =
"Skim for the inelastic Dark Matter with a Dark Higgs analysis."
647 __category__ =
"physics, dark sector"
648 ApplyHLTHadronCut =
False
651 """Adds the particle codes to the basf2 pdg instance """
657 stdE(
"all", path=path)
658 stdMu(
"all", path=path)
664 skim_str =
"InelasticDarkMatterWithDarkHiggs"
665 n_track_event_cut =
"[nCleanedTracks([nCDCHits > 20] and [thetaInCDCAcceptance] and [dr < 0.5] and [abs(dz) < 2]) < 5]"
667 track_requirements =
"[formula(nPXDHits + nSVDHits + nCDCHits) > 20]"
672 f
"[{track_requirements} and {n_track_event_cut}]",
677 f
"[{track_requirements} and {n_track_event_cut}]",
681 decayString=f
"A0:{skim_str} -> mu+:{skim_str} mu-:{skim_str}",
686 list_name=f
"A0:{skim_str}",
688 updateAllDaughters=
True,
692 list_name=f
"A0:{skim_str}",
698 decayString=f
"chi2:{skim_str} -> e+:{skim_str} e-:{skim_str}",
703 list_name=f
"chi2:{skim_str}",
705 updateAllDaughters=
True,
709 list_name=f
"chi2:{skim_str}",
714 dr_cut =
"[daughter(0, dr) > 0.05] or [daughter(1, dr) > 0.05]"
715 vertex_fit_cut =
"[daughter(0, chiProb) > 0.1] or [daughter(1, chiProb) > 0.1]"
717 decayString=f
"beam:{skim_str} -> A0:{skim_str} chi2:{skim_str}",
718 cut=f
"[{dr_cut} and {vertex_fit_cut}]",
722 target_list_name=f
"beam:{skim_str}",
723 fillWithMostLikely=
True,
727 list_name=f
"beam:{skim_str}",
730 "thetaInCDCAcceptance and nCDCHits>20 and dr < 0.5 and abs(dz) < 2",
731 "thetaInCDCAcceptance and E > 0.05")],
736 list_name=f
"beam:{skim_str}",
737 cut=
"roeNeextra(std_roe) < 2.0",
741 return [f
"beam:{skim_str}"]
747 Searching the dark sector through U(1) kinetic mixing.
749 Reconstructed 2 muons to a dark photon.
751 __description__ =
":math:`ee\\to A^{\\prime}A^{\\prime}\\nu_{D}\\nu_{D}\\to \\mu\\mu\\mu\\mu`"
752 __category__ =
"physics, dark sector"
753 __authors__ = [
"Chanyoung LEE"]
754 __contact__ = __liaison__
756 ApplyHLTHadronCut =
False
759 stdMu(
"all", path=path)
762 muon_cuts =
"""[0.8 < muonID_noSVD]
763 and [inKLMAcceptance == 1]
764 and [inCDCAcceptance == 1] and [4 < nCDCHits]"""
766 track_cuts =
"[dr < 0.5] and [abs(dz) < 2]"
768 path = self.
skim_event_cutsskim_event_cuts(f
"4 <= nCleanedTracks({track_cuts}) <= 6", path=path)
770 ma.cutAndCopyList(
"mu+:accepted",
"mu+:all", muon_cuts, path=path)
771 ma.reconstructDecay(decayString=
"vpho:rec -> mu+:accepted mu-:accepted", cut=
"", path=path)
772 ma.reconstructDecay(decayString=
"Upsilon(4S):rec -> vpho:rec vpho:rec", cut=
"", path=path)
774 return [
"Upsilon(4S):rec"]
def build_lists(self, path)
def load_standard_lists(self, path)
def additional_setup(self, path)
def initialALP(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 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 __init__(self, prescale_high=1, prescale_low=1, **kwargs)
def load_standard_lists(self, path)
def additional_setup(self, path)
def addParticlesToPDG(self)
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 skim_event_cuts(self, cut, *path)
def add_particle(name, pdgCode, mass, width, charge, spin, max_width=None, lifetime=0, pythiaID=0)
def treeFit(list_name, conf_level=0.001, massConstraint=[], ipConstraint=False, updateAllDaughters=False, customOriginConstraint=False, customOriginVertex=[0.001, 0, 0.0116], customOriginCovariance=[0.0048, 0, 0, 0, 0.003567, 0, 0, 0, 0.0400], path=None)