10from reconstruction
import prepare_cdst_analysis
11import modularAnalysis
as mA
17def make_electron_collection(path_electron):
19 trg_bhabhaskim = path_electron.add_module(
22 "software_trigger_cut&skim&accept_radee",
23 "software_trigger_cut&skim&accept_bhabha_cdc",
27 trg_bhabhaskim.if_value(
"==0", basf2.Path(), basf2.AfterConditionPath.END)
29 prepare_cdst_analysis(path=path_electron)
32 path_electron.add_module(
34 relativeCorrections=
False,
44 mA.fillParticleList(
'e+:calib',
' ', path=path_electron)
52def make_muon_collection(path_muon):
54 prepare_cdst_analysis(path=path_muon)
59 relativeCorrections=
False,
69 goodTrack =
'abs(dr) < 0.5 and abs(dz) < 0.5 and nCDCHits > 0'
70 goodTrack +=
' and clusterE < 0.40 and clusterEoP < 0.40 and inCDCAcceptance==1'
71 goodTrack +=
' and [[isPIDAvailableFrom(KLM) == 0 and clusterE < 0.25] or isPIDAvailableFrom(KLM) == 1]'
74 mA.fillParticleList(
'mu+:calib', goodTrack, path=path_muon)
78 track_cuts +=
'daughterProductOf(charge) < 0'
79 track_cuts +=
' and daughterLowest(clusterE) <= 0.25'
82 track_cuts +=
' and [daughter(0,isPIDAvailableFrom(KLM)) == 1 or daughter(1,isPIDAvailableFrom(KLM)) == 1]'
85 mA.reconstructDecay(
'vpho:mumu -> mu+:calib mu-:calib', track_cuts, path=path_muon)
88 event_cuts =
'[nCleanedTracks('+goodTrack+
') == 2]'
89 mA.applyEventCuts(event_cuts, path=path_muon)
90 radmumulist = [
'vpho:mumu']
93 skimfilter = basf2.register_module(
'SkimFilter')
94 skimfilter.param(
'particleLists', radmumulist)
95 path_muon.add_module(skimfilter)
97 filter_path = basf2.create_path()
98 skimfilter.if_value(
'=1', filter_path, basf2.AfterConditionPath.CONTINUE)
102 mA.cutAndCopyList(
'mu+:cal',
'mu+:calib', cutonPairs, path=filter_path)
105 event_cutscopy =
'[nCleanedTracks('+goodTrack+
') == 2]'
106 mA.applyEventCuts(event_cutscopy, path=filter_path)
115def make_proton_collection(path_hadrons):
118 trg_skim = path_hadrons.add_module(
"TriggerSkim", triggerLines=[
"software_trigger_cut&skim&accept_lambda"])
119 trg_skim.if_value(
"==0", basf2.Path(), basf2.AfterConditionPath.END)
121 prepare_cdst_analysis(path=path_hadrons)
124 path_hadrons.add_module(
126 relativeCorrections=
False,
136 goodProtonTrack =
'dr< 0.50 and abs(dz)<0.50'
137 mA.fillParticleList(
"p+:calib", goodProtonTrack, path=path_hadrons)
145def make_pion_kaon_collection(path_hadrons):
148 trg_skim = path_hadrons.add_module(
151 "software_trigger_cut&skim&accept_dstar_1",
152 "software_trigger_cut&skim&accept_dstar_3"])
154 trg_skim.if_value(
"==0", basf2.Path(), basf2.AfterConditionPath.END)
156 prepare_cdst_analysis(path=path_hadrons)
159 path_hadrons.add_module(
161 relativeCorrections=
False,
171 clean_K =
'dr < 1.00 and abs(dz) < 1.0 and inCDCAcceptance==1 '
172 clean_K +=
' and [[cosTheta<-0.45 or cosTheta >= 0.80] or [[cosTheta>=-0.45 and cosTheta <= 0.80 and pt <= 0.50]'
173 clean_K +=
' or [cosTheta>=-0.45 and cosTheta <= 0.80 and pt > 0.50 and pidProbabilityExpert(321, TOP) > 0.015 ]]]'
176 mA.fillParticleList(
"K+:calib", clean_K, path=path_hadrons)
179 clean_Pi =
'dr < 1.0 and abs(dz) < 1.0 and inCDCAcceptance==1 '
180 clean_Pi +=
' and [[cosTheta<-0.45 or cosTheta > 0.80] or [[cosTheta>=-0.45 and cosTheta <= 0.80 and pt <= 0.50] '
181 clean_Pi +=
' or [cosTheta>=-0.45 and cosTheta <= 0.80 and pt > 0.50 and pidProbabilityExpert(321, TOP) < 0.60 ]]]'
184 mA.fillParticleList(
"pi+:calib", clean_Pi, path=path_hadrons)
188 clean_Dz1 =
'abs(dM) < 0.020'
189 clean_Dz1 +=
' and [daughter(0,nCDCHits) > 30 or daughter(1, nCDCHits) > 30] '
191 mA.reconstructDecay(
'D0:cal1 -> K-:calib pi+:calib', clean_Dz1, path=path_hadrons)
194 clean_Dz2 =
'abs(dM) < 0.020'
195 clean_Dz2 +=
' and [daughter(0,nCDCHits) > 25 or daughter(1, nCDCHits) > 25 or daughter(2, nCDCHits) > 25 '
196 clean_Dz2 +=
' or daughter(3, nCDCHits) > 25] '
197 mA.reconstructDecay(
'D0:cal2 -> K-:calib pi+:calib pi+:calib pi-:calib', clean_Dz2, path=path_hadrons)
201 clean_sPi =
'dr < 1.00 and abs(dz) < 1.00 and p < 1.5 and nCDCHits > 10 and inCDCAcceptance==1'
202 mA.fillParticleList(
"pi+:slow", clean_sPi, path=path_hadrons)
207 clean_Ds =
'useCMSFrame(p) > 1.5 and abs(formula(massDifference(0) - 0.14542)) < 0.00070 '
208 clean_Ds +=
' and abs(dM) < 0.020'
209 mA.reconstructDecay(
'D*+:cal1 -> D0:cal1 pi+:slow', clean_Ds, path=path_hadrons)
212 list_Ds1 = [
'D*+:cal1']
213 skimf_Ds1 = basf2.register_module(
'SkimFilter')
214 skimf_Ds1.param(
'particleLists', list_Ds1)
215 path_hadrons.add_module(skimf_Ds1)
216 fpath_Ds1 = basf2.create_path()
217 skimf_Ds1.if_value(
'=1', fpath_Ds1, basf2.AfterConditionPath.CONTINUE)
220 mA.reconstructDecay(
'D*+:cal2 -> D0:cal2 pi+:slow', clean_Ds, path=path_hadrons)
222 list_Ds2 = [
'D*+:cal2']
223 skimf_Ds2 = basf2.register_module(
'SkimFilter')
224 skimf_Ds2.param(
'particleLists', list_Ds2)
225 path_hadrons.add_module(skimf_Ds2)
226 fpath_Ds2 = basf2.create_path()
227 skimf_Ds2.if_value(
'=1', fpath_Ds2, basf2.AfterConditionPath.CONTINUE)
231 mA.variablesToDaughterExtraInfo(
'D*+:cal1',
'D*+ -> [D0 -> ^K- ^pi+ ] ^pi+', {
'dM':
'l_Ds1dM'}, path=fpath_Ds1)
232 mA.variablesToDaughterExtraInfo(
'D*+:cal1',
'D*+ -> [D0 -> ^K- ^pi+ ] ^pi+', {
'useCMSFrame(p)':
'l_Ds1p'}, path=fpath_Ds1)
233 mA.variablesToDaughterExtraInfo(
'D*+:cal1',
'D*+ -> [D0 -> ^K- ^pi+ ] ^pi+',
234 {
'massDifference(0)':
'l_Ds1mDiff'}, path=fpath_Ds1)
235 mA.variablesToDaughterExtraInfo(
'D*+:cal1',
'D*+ -> [D0 -> ^K- ^pi+ ] ^pi+', {
'daughter(0,dM)':
'l_Ds1_DzdM'}, path=fpath_Ds1)
236 mA.variablesToDaughterExtraInfo(
'D*+:cal1',
237 'D*+ -> [D0 -> ^K- ^pi+ ] ^pi+',
238 {
'daughter(0,daughter(0,nCDCHits))':
'l_Ds1_Dz_Khits'},
240 mA.variablesToDaughterExtraInfo(
'D*+:cal1',
241 'D*+ -> [D0 -> ^K- ^pi+ ] ^pi+',
242 {
'daughter(0,daughter(1,nCDCHits))':
'l_Ds1_Dz_Pihits'},
246 cutonD1var =
"abs(extraInfo(l_Ds1dM)) < 0.02"
247 cutonD1var +=
" and extraInfo(l_Ds1p) > 1.5 "
248 cutonD1var +=
" and abs(formula(extraInfo(l_Ds1mDiff) - 0.14542)) < 0.0010"
249 cutonD1var +=
" and abs(extraInfo(l_Ds1_DzdM)) < 0.02"
250 cutonD1var +=
" and [extraInfo(l_Ds1_Dz_Khits) > 30 or extraInfo(l_Ds1_Dz_Pihits) > 30]"
253 mA.cutAndCopyList(
'K+:dst1',
'K+:calib', cutonD1var, path=fpath_Ds1)
254 mA.cutAndCopyList(
'pi+:dst1',
'pi+:calib', cutonD1var, path=fpath_Ds1)
258 mA.variablesToDaughterExtraInfo(
'D*+:cal2',
'D*+ -> [D0 -> ^K- ^pi+ ^pi+ ^pi-] ^pi+', {
'dM':
'l_Ds2dM'}, path=fpath_Ds2)
259 mA.variablesToDaughterExtraInfo(
'D*+:cal2',
260 'D*+ -> [D0 -> ^K- ^pi+ ^pi+ ^pi-] ^pi+',
261 {
'useCMSFrame(p)':
'l_Ds2p'},
263 mA.variablesToDaughterExtraInfo(
'D*+:cal2',
264 'D*+ -> [D0 -> ^K- ^pi+ ^pi+ ^pi-] ^pi+',
265 {
'massDifference(0)':
'l_Ds2mDiff'},
267 mA.variablesToDaughterExtraInfo(
'D*+:cal2',
268 'D*+ -> [D0 -> ^K- ^pi+ ^pi+ ^pi-] ^pi+',
269 {
'daughter(0,dM)':
'l_Ds2_DzdM'},
271 mA.variablesToDaughterExtraInfo(
'D*+:cal2',
272 'D*+ -> [D0 -> ^K- ^pi+ ^pi+ ^pi-] ^pi+',
273 {
'daughter(0,daughter(0,nCDCHits))':
'l_Ds2_Dz_Khits'},
275 mA.variablesToDaughterExtraInfo(
'D*+:cal2',
276 'D*+ -> [D0 -> ^K- ^pi+ ^pi+ ^pi-] ^pi+',
277 {
'daughter(0,daughter(1,nCDCHits))':
'l_Ds2_Dz_Pi1hits'},
279 mA.variablesToDaughterExtraInfo(
'D*+:cal2',
280 'D*+ -> [D0 -> ^K- ^pi+ ^pi+ ^pi-] ^pi+',
281 {
'daughter(0,daughter(2,nCDCHits))':
'l_Ds2_Dz_Pi2hits'},
283 mA.variablesToDaughterExtraInfo(
'D*+:cal2',
284 'D*+ -> [D0 -> ^K- ^pi+ ^pi+ ^pi-] ^pi+',
285 {
'daughter(0,daughter(3,nCDCHits))':
'l_Ds2_Dz_Pi3hits'},
289 cutonD2var =
"abs(extraInfo(l_Ds2dM)) < 0.02"
290 cutonD2var +=
" and extraInfo(l_Ds2p) > 2.0"
291 cutonD2var +=
" and abs(formula(extraInfo(l_Ds2mDiff) - 0.14542)) < 0.0010"
292 cutonD2var +=
" and abs(extraInfo(l_Ds2_DzdM)) < 0.02"
293 cutonD2var +=
" and [extraInfo(l_Ds2_Dz_Khits) > 25 or extraInfo(l_Ds2_Dz_Pi1hits) > 25 "
294 cutonD2var +=
" or extraInfo(l_Ds2_Dz_Pi2hits) > 25 or extraInfo(l_Ds2_Dz_Pi3hits) > 25]"
297 mA.cutAndCopyList(
'K+:dst2',
'K+:calib', cutonD2var, path=fpath_Ds2)
298 mA.cutAndCopyList(
'pi+:dst2',
'pi+:calib', cutonD2var, path=fpath_Ds2)
300 pion_kaon_list = [
'pi+:dst1',
'pi+:dst2',
'K+:dst1',
'K+:dst2']
302 return pion_kaon_list