15 Example script to calculate track isolation variables.
17 For each particle's track in the input charged stable particle list,
18 calculate the minimal distance to the other candidates' tracks at a given detector surface.
28 import stdCharged
as stdc
30 parser = argparse.ArgumentParser(description=__doc__,
31 formatter_class=argparse.RawTextHelpFormatter)
33 parser.add_argument(
"--std_charged_ref", type=str, choices=stdc._chargednames, default=
"pi",
34 help=
"The base name of the reference standard charged particle list\n"
35 "against which to calculate the distance.")
36 parser.add_argument(
"--detectors",
39 default=[
"CDC",
"TOP",
"ARICH",
"ECL",
"KLM"],
40 choices=[
"CDC",
"TOP",
"ARICH",
"ECL",
"KLM"],
41 help=
"List of detectors at whose entry surface track isolation variables will be calculated.\n"
42 "Pass a space-separated list of names.")
43 parser.add_argument(
"-d",
"--debug",
47 choices=list(range(11, 20)),
48 help=
"Run the TrackIsoCalculator module in debug mode. Pass the desired DEBUG level integer.")
53 if __name__ ==
"__main__":
58 args = argparser().parse_args()
61 import modularAnalysis
as ma
62 from variables
import variables
67 path = b2.create_path()
70 ma.inputMdst(filename=b2.find_file(
"mdst14.root",
"validation"), path=path)
73 base_trk_selection =
"[dr < 3] and [abs(dz) < 5] and [thetaInCDCAcceptance] and [pt > 0.1]"
74 ma.fillParticleList(
"mu+:muons", f
"{base_trk_selection} and [muonID > 0.5]", path=path)
78 ref = f
"{args.std_charged_ref}+:presel"
79 ma.fillParticleList(ref, f
"{base_trk_selection}", path=path)
83 trackiso_vars = ma.calculateTrackIsolation(
"mu+:muons",
86 reference_list_name=ref,
87 highest_prob_mass_for_ext=
False)
90 jpsimumu =
"J/psi:mumu -> mu+:muons mu-:muons"
93 "[daughterSumOf(charge) == 0]",
95 jpsi_cut =
" and ".join(jpsi_cuts)
97 ma.reconstructDecay(jpsimumu, jpsi_cut, path=path)
102 trackiso_vars_highestprobmass = ma.calculateTrackIsolation(
"J/psi:mumu -> ^mu+ ^mu-",
105 reference_list_name=ref,
106 highest_prob_mass_for_ext=
True)
108 variables_jpsi = vc.kinematics + [
"daughterDiffOfPhi(0, 1)"]
109 variables_jpsi += vu.create_aliases(variables_jpsi,
"useCMSFrame({variable})",
"CMS")
110 variables_jpsi += vc.inv_mass
111 variables_mu = vc.kinematics + [
"theta",
"phi",
"clusterE"] + trackiso_vars + trackiso_vars_highestprobmass + [
117 "ptInBECLAcceptance",
118 "ptInBKLMAcceptance",
120 "thetaInARICHAcceptance",
121 "thetaInBECLAcceptance",
122 "thetaInBKLMAcceptance",
123 "thetaInCDCAcceptance",
124 "thetaInECLAcceptance",
125 "thetaInEECLAcceptance",
126 "thetaInEKLMAcceptance",
127 "thetaInKLMAcceptance",
128 "thetaInKLMOverlapAcceptance",
129 "thetaInTOPAcceptance"
132 aliases_jpsimumu = vu.create_aliases_for_selected(
134 "^J/psi:mumu -> mu+:muons mu-:muons",
137 aliases_mu = vu.create_aliases_for_selected(
139 "J/psi:mumu -> ^mu+:muons ^mu-:muons",
142 variables.addAlias(
"nReferenceTracks", f
"nCleanedTracks({base_trk_selection})")
143 aliases_event = [
"nReferenceTracks"]
145 variables.printAliases()
148 ma.variablesToNtuple(decayString=
"J/psi:mumu",
149 variables=aliases_event+aliases_jpsimumu+aliases_mu,
151 filename=
"TrackIsolationVariables.root",
156 for m
in path.modules():
157 if "TrackIsoCalculator" in m.name():
158 m.set_log_level(b2.LogLevel.DEBUG)
159 m.set_debug_level(args.debug)
161 path.add_module(
"Progress")