diff --git a/Phys/StrippingSelections/python/StrippingSelections/StrippingB2OC/Beauty2Charm_Lb2XBuilder.py b/Phys/StrippingSelections/python/StrippingSelections/StrippingB2OC/Beauty2Charm_Lb2XBuilder.py index a288b2f4d0811a7fbb7a5f161c577dcf36445191..2d7c3396e19660aa341cecf2566a5a9bfe0d626e 100644 --- a/Phys/StrippingSelections/python/StrippingSelections/StrippingB2OC/Beauty2Charm_Lb2XBuilder.py +++ b/Phys/StrippingSelections/python/StrippingSelections/StrippingB2OC/Beauty2Charm_Lb2XBuilder.py @@ -20,20 +20,78 @@ from Beauty2Charm_Utils import * #\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\# +class XimBuilder(object): + '''Produces all Xim baryons for the Beauty2Charm module.''' + + def __init__(self, pions, kaons, protons, lambda0, config_Xim): + + #selections written in StrippingBeauty2Charm.py + self.pions = pions + self.kaons = kaons + self.protons = protons + self.lambda0 = lambda0 + self.config_Xim = config_Xim #Xi- selections written in StrippingBeauty2Charm.py + + #Xi- + self.xim_lmd0pim_LL = [self._makeXim2Lmd0Pim("LL")] + self.xim_lmd0pim_DD = [self._makeXim2Lmd0Pim("DD")] + + def _makeXim2Lmd0Pim(self, lmd): + '''Makes Xi- -> Lambda0 Pim + cc''' + dm, units = LoKiCuts.cutValue(self.config_Xim['MASS_WINDOW']) + # Pre vertex fit + comboCuts = [ + "(ADAMASS('Xi-') < %s*%s) " % (dm + 50, units) + ] + comboCuts.append(LoKiCuts(['ADOCA12'], self.config_Xim).code()) + comboCuts = LoKiCuts.combine(comboCuts) + # Post vertex fit + momCuts = [ + "(ADMASS('Xi-') < %s*%s) " % (dm + 40, units) + ] + momCuts = LoKiCuts.combine(momCuts) + cp = CombineParticles( + CombinationCut=comboCuts, + MotherCut=momCuts, + DecayDescriptors=["Xi- -> Lambda0 pi-", "Xi~+ -> Lambda~0 pi+"]) + return Selection( + 'Xim2Lambda0Pim' + lmd + 'Beauty2Charm', + Algorithm=cp, + RequiredSelections= self.lambda0[lmd] + [self.pions]) + +#\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\# class LcBuilder(object): '''Produces all Lambda_c baryons for the Beauty2Charm module.''' - def __init__(self, pions, kaons, protons, lambda0, config, config_pid): + def __init__(self, pions, kaons, protons, lambda0, ks, xim, config, config_Xic0, config_pid): self.pions = pions self.kaons = kaons self.protons = protons self.lambda0 = lambda0 + self.ks = ks + self.xim_lmd0pim_LL = xim.xim_lmd0pim_LL + self.xim_lmd0pim_DD = xim.xim_lmd0pim_DD self.config = config self.pkpi = [self._makeLc2phh()] self.pkk = [self._makeLc2phh("PKK")] self.ppipi = [self._makeLc2phh("PPiPi")] - self.lambdapiLL = [self._makeLc2Lambdapi("LL")] + self.xic_pkpi = [self._makeXic2pKpi()] + self.xic0_pkkpi = [self._makeXic02pKKpi()] + self.omegac0_pkkpi = [self._makeOmegac02pKKpi()] + self.config_Xic0 = config_Xic0 + + # Xic0_XimPip + self.xic0_ximpip_LL = [self._makeXic02XimPip("LL")] + self.xic0_ximpip_DD = [self._makeXic02XimPip("DD")] + # xic0_Lambda0kmpip + self.xic0_lmd0kmpip_LL = [self._makeXic02Lambda0KmPip("LL")] + self.xic0_lmd0kmpip_DD = [self._makeXic02Lambda0KmPip("DD")] + # xic0_PKsKm + self.xic0_pkskm_LL = [self._makeXic02PKsKm("LL")] + self.xic0_pkskm_DD = [self._makeXic02PKsKm("DD")] + + self.lambdapiLL = [self._makeLc2Lambdapi("LL")] self.lambdapiDD = [self._makeLc2Lambdapi("DD")] self.xic_pkpi = [self._makeXic2pKpi()] self.xic0_pkkpi = [self._makeXic02pKKpi()] @@ -240,6 +298,79 @@ class LcBuilder(object): Algorithm=cp, RequiredSelections=[self.pions, self.kaons, self.protons]) + def _makeXic02XimPip(self, lmd): + '''Makes Xi_c0 -> Xi- pi+ + cc''' + dm, units = LoKiCuts.cutValue(self.config_Xic0['MASS_WINDOW']) + comboCuts = [ + "(ADAMASS('Xi_c0') < %s*%s) " % (dm + 50, units) + ] + comboCuts.append(LoKiCuts(['ADOCA12'], self.config_Xic0).code()) + comboCuts = LoKiCuts.combine(comboCuts) + momCuts = [ + "(ADMASS('Xi_c0') < %s*%s) " % (dm + 30, units) + ] + momCuts = LoKiCuts.combine(momCuts) + cp = CombineParticles( + CombinationCut=comboCuts, + MotherCut=momCuts, + DecayDescriptors=["Xi_c0 -> Xi- pi+", "Xi_c~0 -> Xi~+ pi-"]) + used_xim = self.xim_lmd0pim_DD + if "LL" in lmd: + used_xim = self.xim_lmd0pim_LL + else: + pass + return Selection( + 'Xic02XimPip' + lmd + 'Beauty2Charm', + Algorithm=cp, + RequiredSelections=used_xim + [self.pions]) + + def _makeXic02Lambda0KmPip(self, lmd): + '''Makes Xi_c0 -> Lambda0 K- Pi+ + cc''' + dm, units = LoKiCuts.cutValue(self.config_Xic0['MASS_WINDOW']) + comboCuts = [ + "(ADAMASS('Xi_c0') < %s*%s) " % (dm - 50, units) + ] + comboCuts.append(LoKiCuts(['ADOCA12'], self.config_Xic0).code()) + comboCuts.append(LoKiCuts(['ADOCA13'], self.config_Xic0).code()) + comboCuts.append(LoKiCuts(['ADOCA23'], self.config_Xic0).code()) + comboCuts = LoKiCuts.combine(comboCuts) + momCuts = [ + "(ADMASS('Xi_c0') < %s*%s) " % (dm - 70, units) + ] + momCuts = LoKiCuts.combine(momCuts) + cp = CombineParticles( + CombinationCut=comboCuts, + MotherCut=momCuts, + DecayDescriptors=["Xi_c0 -> Lambda0 K- pi+", "Xi_c~0 -> Lambda~0 K+ pi-"]) + return Selection( + 'Xic02Lambda0KmPip' + lmd + 'Beauty2Charm', + Algorithm=cp, + RequiredSelections=self.lambda0[lmd] + [self.kaons] + [self.pions]) + + def _makeXic02PKsKm(self, ks): + '''Makes Xi_c0 -> p Ks K- + cc''' + dm, units = LoKiCuts.cutValue(self.config_Xic0['MASS_WINDOW']) + comboCuts = [ + LoKiCuts(['ASUMPT'], self.config).code(), + "(ADAMASS('Xi_c0') < %s*%s) " % (dm - 90, units) + ] + comboCuts.append(LoKiCuts(['ADOCA12'], self.config_Xic0).code()) + comboCuts.append(LoKiCuts(['ADOCA13'], self.config_Xic0).code()) + comboCuts.append(LoKiCuts(['ADOCA23'], self.config_Xic0).code()) + comboCuts = LoKiCuts.combine(comboCuts) + momCuts = [ + "(ADMASS('Xi_c0') < %s*%s) " % (dm - 110, units), + LoKiCuts(['VCHI2DOF', 'BPVVDCHI2', 'BPVDIRA'], self.config).code() + ] + momCuts = LoKiCuts.combine(momCuts) + cp = CombineParticles( + CombinationCut=comboCuts, + MotherCut=momCuts, + DecayDescriptors=["Xi_c0 -> p+ KS0 K-", "Xi_c~0 -> p~- KS0 K+"]) + return Selection( + 'Xic02PKsKm' + ks + 'Beauty2Charm', + Algorithm=cp, + RequiredSelections=self.ks[ks] + [self.protons, self.kaons]) #\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\# @@ -439,8 +570,6 @@ class LcstarBuilder(object): RequiredSelections=inputs[mode]) - - class XiccBuilder(object): '''Produces Xi_cc baryons for the Beauty2Charm module.''' @@ -851,18 +980,28 @@ class Lb2XBuilder(object): def __init__(self, lc, lcstar, xicc, d, hh, topoPions, topoPions_PID, topoKaons, topoKaons_PID, topoProtons, topoProtons_PID, pions, kaons, ks, - hhh, dst, lambda0, config): + hhh, dst, lambda0, config, config_xibm): self.lc = lc.pkpi self.lc_pkk = lc.pkk self.lc_ppipi = lc.ppipi - self.lc_lambdapiLL = lc.lambdapiLL + self.xic = lc.xic_pkpi + self.xic0 = lc.xic0_pkkpi + self.xic0_ximpip_LL = lc.xic0_ximpip_LL + self.xic0_ximpip_DD = lc.xic0_ximpip_DD + self.xic0_lmd0kmpip_LL = lc.xic0_lmd0kmpip_LL + self.xic0_lmd0kmpip_DD = lc.xic0_lmd0kmpip_DD + self.xic0_pkskm_LL = lc.xic0_pkskm_LL + self.xic0_pkskm_DD = lc.xic0_pkskm_DD + + self.lc_lambdapiLL = lc.lambdapiLL self.lc_lambdapiDD = lc.lambdapiDD self.lcstar2595 = lcstar.lcstar2595 self.lcstar2625 = lcstar.lcstar2625 self.xic = lc.xic_pkpi self.xic0 = lc.xic0_pkkpi - self.omegac0 = lc.omegac0_pkkpi + + self.omegac0 = lc.omegac0_pkkpi self.lc_tight = lc.pkpi_tight_win #tight Lc self.xic_tight = lc.xic_pkpi_tight_win #tight Xic self.xic_tightest = lc.xic_pkpi_tightest_win #tight Xic @@ -892,6 +1031,7 @@ class Lb2XBuilder(object): self.protons_pid = [topoProtons_PID] self.ks = ks self.config = deepcopy(config) + self.config_xibm = config_xibm self.config['AM_MIN'] = '5200*MeV' self.lines = [] # Lb -> Lc+- H-+ (+WS) @@ -925,6 +1065,16 @@ class Lb2XBuilder(object): self._makeXib2LcDK() ### Xb- -> Lc+ Ds- K- Pi+ self._makeXib02LcDsKPi() + ### Xb- -> Xic0 Pim,,Xic0 -> Xim Pip + self._makeXibm2Xic0Pim2XimPipPim("LL") + self._makeXibm2Xic0Pim2XimPipPim("DD") + ### Xb- -> Xic0 Pim,,Xic0 -> Lambda0 Km pip + self._makeXibm2Xic0Pim2Lambda0KmPipPim("LL") + self._makeXibm2Xic0Pim2Lambda0KmPipPim("DD") + ### Xb- -> Xic0 Pim,,Xic0 -> p Ks Km + self._makeXibm2Xic0Pim2PKsKmPim("LL") + self._makeXibm2Xic0Pim2PKsKmPim("DD") + ### B- -> Lc+ Ds- pbar self._makeB2LcDspbar() @@ -1458,6 +1608,87 @@ class Lb2XBuilder(object): self.lines.append(ProtoLine(rs, 1.0)) self.lines.append(ProtoLine(ws, 0.1)) + def _makeXibm2Xic0Pim2XimPipPim(self, lmd): + #Makes Xi_b- -> Xi_c0 pi-, Xi_c0 -> Xi- pi+ + cc + dm, units = LoKiCuts.cutValue(self.config_xibm['MASS_WINDOW']) + comboCuts = [ + "(ADAMASS('Xi_b-') < %s*%s) " % (dm + 100, units) + ] + comboCuts.append(LoKiCuts(['ADOCA12'], self.config_xibm).code()) + comboCuts = LoKiCuts.combine(comboCuts) + momCuts = [ + "(ADMASS('Xi_b-') < %s*%s) " % (dm + 90, units), + ] + momCuts = LoKiCuts.combine(momCuts) + cp = CombineParticles( + CombinationCut=comboCuts, + MotherCut=momCuts, + DecayDescriptors=["Xi_b- -> Xi_c0 pi-", "Xi_b~+ -> Xi_c~0 pi+"]) + used_xic0 = self.xic0_ximpip_DD + if "LL" in lmd: + used_xic0 = self.xic0_ximpip_LL + else: + pass + rs = [Selection( + 'Xibm2Xic0Pim2XimPipPim' + lmd + 'Beauty2Charm', + Algorithm=cp, + RequiredSelections=used_xic0 + self.pions )] + self.lines.append(ProtoLine(rs, 1.0)) + + def _makeXibm2Xic0Pim2Lambda0KmPipPim(self, lmd): + #Makes Xi_b- -> Xi_c0 pi-, Xi_c0 -> Lmd0 K- pi+ + cc + dm, units = LoKiCuts.cutValue(self.config_xibm['MASS_WINDOW']) + comboCuts = [ + "(ADAMASS('Xi_b-') < %s*%s) " % (dm + 100, units) + ] + comboCuts.append(LoKiCuts(['ADOCA12'], self.config_xibm).code()) + comboCuts = LoKiCuts.combine(comboCuts) + momCuts = [ + "(ADMASS('Xi_b-') < %s*%s) " % (dm + 100, units), + ] + momCuts = LoKiCuts.combine(momCuts) + cp = CombineParticles( + CombinationCut=comboCuts, + MotherCut=momCuts, + DecayDescriptors=["Xi_b- -> Xi_c0 pi-", "Xi_b~+ -> Xi_c~0 pi+"]) + used_xic0 = self.xic0_lmd0kmpip_DD + if "LL" in lmd: + used_xic0 = self.xic0_lmd0kmpip_LL + else: + pass + rs = [Selection( + 'Xibm2Xic0Pim2Lambda0KmPipPim' + lmd + 'Beauty2Charm', + Algorithm=cp, + RequiredSelections=used_xic0 + self.pions )] + self.lines.append(ProtoLine(rs, 1.0)) + + def _makeXibm2Xic0Pim2PKsKmPim(self, ks): + #Makes Xi_b- -> Xi_c0 pi-, Xi_c0 -> p Ks K- + cc + dm, units = LoKiCuts.cutValue(self.config_xibm['MASS_WINDOW']) + comboCuts = [ + "(ADAMASS('Xi_b-') < %s*%s) " % (dm + 100, units) + ] + comboCuts.append(LoKiCuts(['ADOCA12'], self.config_xibm).code()) + comboCuts = LoKiCuts.combine(comboCuts) + momCuts = [ + "(ADMASS('Xi_b-') < %s*%s) " % (dm + 100, units), + ] + momCuts = LoKiCuts.combine(momCuts) + cp = CombineParticles( + CombinationCut=comboCuts, + MotherCut=momCuts, + DecayDescriptors=["Xi_b- -> Xi_c0 pi-", "Xi_b~+ -> Xi_c~0 pi+"]) + used_xic0 = self.xic0_pkskm_DD + if "LL" in ks: + used_xic0 = self.xic0_pkskm_LL + else: + pass + rs = [Selection( + 'Xibm2Xic0Pim2PKsKmPim' + ks + 'Beauty2Charm', + Algorithm=cp, + RequiredSelections=used_xic0 + self.pions )] + self.lines.append(ProtoLine(rs, 1.0)) + def _makeXib02XicHHH(self): '''Make RS and WS Xi_b0 -> Xi_c+ HHH (HHH=3pi,Kpipi) + cc.''' pipipi = self.hhh.pipipi diff --git a/Phys/StrippingSelections/python/StrippingSelections/StrippingB2OC/StrippingBeauty2Charm.py b/Phys/StrippingSelections/python/StrippingSelections/StrippingB2OC/StrippingBeauty2Charm.py index e8e66f05fe05303c21c96288e2230e91726116d8..9afb0bdf3d5287adcd28b5a27aa22945eb9466d2 100644 --- a/Phys/StrippingSelections/python/StrippingSelections/StrippingB2OC/StrippingBeauty2Charm.py +++ b/Phys/StrippingSelections/python/StrippingSelections/StrippingB2OC/StrippingBeauty2Charm.py @@ -169,6 +169,32 @@ default_config = { 'ISNOTE_MIN': -999.0, 'PT_VLAPH': '145*MeV' }, + "Xim": { # Cuts made on charged Xi baryon + 'ASUMPT_MIN': '1000*MeV', + 'ADOCA12_MAX': '0.5*mm', + 'VCHI2DOF_MAX': 25, + 'BPVVDCHI2_MIN': 50, + 'BPVDIRA_MIN': 0, + 'MASS_WINDOW': '100*MeV' + }, + "Xic0": { # Cuts made on charged Xic0 baryon + 'ASUMPT_MIN': '1000*MeV', + 'ADOCA12_MAX': '0.5*mm', + 'ADOCA13_MAX': '0.5*mm', + 'ADOCA23_MAX': '0.5*mm', + 'VCHI2DOF_MAX': 20, + 'BPVVDCHI2_MIN': 30, + 'BPVDIRA_MIN': 0.9, + 'MASS_WINDOW': '200*MeV' + }, + "Xibm": { # Cuts made on charged Xibm baryon + 'ASUMPT_MIN': '1000*MeV', + 'ADOCA12_MAX': '0.5*mm', + 'VCHI2DOF_MAX': 20, + 'BPVVDCHI2_MIN': 30, + 'BPVDIRA_MIN': 0, + 'MASS_WINDOW': '200*MeV' + }, "D2X": { # Cuts made on all D's and Lc's used in all lines 'ASUMPT_MIN': '1800*MeV', 'ADOCA12_MAX': '0.5*mm', @@ -1777,7 +1803,13 @@ default_config = { 'StrippingXib02D0LambdaPiPiDDD02KPiBeauty2CharmLine', 'StrippingXib02D0LambdaPiPiDDD02K3PiBeauty2CharmLine', 'StrippingXib2LcKHHHLc2PKPiBeauty2CharmLine', - 'StrippingXib2XicHHHHXic2PKPiBeauty2CharmLine' + 'StrippingXib2XicHHHHXic2PKPiBeauty2CharmLine', + 'StrippingXibm2Xic0Pim2XimPipPimLLBeauty2CharmLine', + 'StrippingXibm2Xic0Pim2XimPipPimDDBeauty2CharmLine', + 'StrippingXibm2Xic0Pim2Lambda0KmPipPimLLBeauty2CharmLine', + 'StrippingXibm2Xic0Pim2Lambda0KmPipPimDDBeauty2CharmLine', + 'StrippingXibm2Xic0Pim2PKsKmPimLLBeauty2CharmLine', + 'StrippingXibm2Xic0Pim2PKsKmPimDDBeauty2CharmLine' ] }, 'WGs': ['B2OC'] @@ -1890,10 +1922,13 @@ class Beauty2CharmConf(LineBuilder): dst = DstarBuilder(d, pions, uppions, pi0, photons, vlaphotons, config['Dstar'], config['PID']) + # Xim -> X + xim = XimBuilder(pions_pid, kaons_pid, protons_pid, lambda0, config['Xim']) # Lc -> X - lc = LcBuilder(pions_pid, kaons_pid, protons_pid, lambda0, config['D2X'], + lc = LcBuilder(pions_pid, kaons_pid, protons_pid, lambda0, ks, xim, config['D2X'], config['Xic0'], config['PID']) - lcstar = LcstarBuilder(lc, pions_pid, config['Lcstar']) + + lcstar = LcstarBuilder(lc, pions_pid, config['Lcstar']) xicc = XiccBuilder(lc, pions_pid, config['D2X']) # Loose Lc, for Xibc lcLoose = LooseLcBuilder(pions_Xc_Xibc, kaons_Xc_Xibc, protons_Xc_Xibc, @@ -1925,7 +1960,7 @@ class Beauty2CharmConf(LineBuilder): lb2x = Lb2XBuilder(lc, lcstar, xicc, d, hh, topoPions, topoPions_PID, topoKaons, topoKaons_PID, topoProtons, topoProtons_PID, pions, kaons, ks, hhh, dst, - lambda0, config['B2X']) + lambda0, config['B2X'], config['Xibm']) self._makeLines(lb2x.lines, config) # Xibc -> Xc hh, LcD0, Xicc h