From 435dca62a3ab6b79647f963031d31c0824939484 Mon Sep 17 00:00:00 2001
From: Salil Joshi <salil@lxplus964.cern.ch>
Date: Tue, 28 Jan 2025 12:27:33 +0100
Subject: [PATCH 1/3] New Production for B02JpsiOmegaKpi decay for RUN I and II
 collision data

---
 B02JpsiOmegaKpi/B02JpsiOmegaKpi.py | 440 +++++++++++++++++++++++++++++
 B02JpsiOmegaKpi/info.yaml          |  50 ++++
 2 files changed, 490 insertions(+)
 create mode 100644 B02JpsiOmegaKpi/B02JpsiOmegaKpi.py
 create mode 100644 B02JpsiOmegaKpi/info.yaml

diff --git a/B02JpsiOmegaKpi/B02JpsiOmegaKpi.py b/B02JpsiOmegaKpi/B02JpsiOmegaKpi.py
new file mode 100644
index 0000000000..bc009da4fb
--- /dev/null
+++ b/B02JpsiOmegaKpi/B02JpsiOmegaKpi.py
@@ -0,0 +1,440 @@
+# Reconstruct B0-> X(3940) K- pi+ with X(3940) -> (Jpsi-> mu+mu-)(omega -> pi+ pi-pi0)
+
+
+from Gaudi.Configuration import *
+from Configurables import DaVinci
+import GaudiKernel.SystemOfUnits as Units
+
+
+DaVinci().TupleFile = "B02JpsiOmegaKpi.root" # A file to store nTuples, such as the Lumi ntuple
+DaVinci().EvtMax = -1 # Number of events
+DaVinci().DataType = "2012" # Default anyway
+DaVinci().Simulation = False
+DaVinci().Lumi = not DaVinci().Simulation
+#DaVinci().DDDBtag="dddb-20120831"
+#DaVinci().CondDBtag="cond-20120831"
+#from Configurables import CondDB
+#CondDB().LatestGlobalTagByDataType ="2012"
+
+from Configurables import LoKi__VoidFilter
+tesFilter1 = LoKi__VoidFilter('TESFilter1', Code = "CONTAINS('/Event/Dimuon/Phys/FullDSTDiMuonJpsi2MuMuDetachedLine/Particles')>0")
+
+# Cuts for Mu
+MuCut = " (PT > 550*MeV)"
+
+# Cuts for JPSI 
+JpsiFilterCut = "(M>3020*MeV) & (M<3135*MeV) & (BPVDLS>5)"
+
+# Cuts fot X
+X3940CombCut = "(AM>3000*MeV) & (AM<5000*MeV)"
+
+KCut = "(PT> 500*MeV) & (TRCHI2DOF < 4 ) & (MIPCHI2DV(PRIMARY)>4) & (PROBNNk > 0.005)"
+
+########cuts on omega
+#OmegaCombCut = "(AM < 830*MeV) & (AM > 740*MeV)"
+OmegaFilterCut = "(M > 712 *MeV) & (M < 852 *MeV)" # mass within 70 mev of omega mass
+
+# Cut on Pion
+PiZcutR = "(M > 110 *MeV) & (M < 160*MeV) & (PT > 500 *MeV)"
+PicutR = "(PT > 300 *MeV ) & (P > 3200 *MeV) & (PROBNNpi > 0.005)"
+
+# Cuts on B
+BMotherCut = "in_range(4950,M,5650) & (VFASPF(VCHI2PDOF) < 20) & (BPVLTIME() > 0.25*ps)"
+BCombinationCut   = "in_range(4900,AM,5700)"
+BMotherCut2 = "in_range(4950,M,5650)"
+
+
+from Configurables import LoKi__Hybrid__TupleTool
+
+#### list of variables for stable particles
+LoKi_track=LoKi__Hybrid__TupleTool("LoKi_track")
+LoKi_track.Variables =  {
+    "ID" : "ID",
+    "PT" : "PT",
+    "P"  : "P",
+    "ETA" : "ETA",
+    "PHI" : "PHI",
+    "GHOSTPROB" : "TRGHOSTPROB",
+    "PROBNNK": "PROBNNk",
+    "PRONNNPI": "PROBNNpi",
+    "IPCHI2" : "MIPCHI2DV(PRIMARY)",
+    "TRCHI2DOF" : "TRCHI2DOF",
+    "RICHPIDSTATUS"   : "PPINFO(LHCb.ProtoParticle.RichPIDStatus, 0.)",
+    }
+
+LoKi_muon=LoKi__Hybrid__TupleTool("LoKi_muon")
+LoKi_muon.Variables =  {
+    "PT" : "PT",
+    "P"  : "P",
+    "ETA": "ETA",
+    "PHI" : "PHI",
+    "PROBNNMU": "PROBNNmu",
+    "GHOSTPROB" : "TRGHOSTPROB",
+    "IPCHI2" : "MIPCHI2DV(PRIMARY)",
+    "TRCHI2DOF" : "TRCHI2DOF",
+    }
+
+#### list of variables for the JPsi
+LoKi_JPsi=LoKi__Hybrid__TupleTool("LoKi_JPsi")
+LoKi_JPsi.Variables =  {
+    "PT" : "PT",
+    "P"  : "P",
+    "ETA" : "ETA",
+    "PHI" : "PHI",
+    "M" : "M",
+    "IPCHI2" : "MIPCHI2DV(PRIMARY)",
+    "VCHI2NDOF" : "VFASPF(VCHI2/VDOF)",
+    }
+
+LoKi_Omega=LoKi__Hybrid__TupleTool("LoKi_Omega")
+LoKi_Omega.Variables =  {
+    "ID" : "ID",
+    "PT" : "PT",
+    "M"  :  "M",
+    "P"  : "P",
+    "ETA" : "ETA",
+    "PHI" : "PHI",
+    "IPCHI2" : "MIPCHI2DV(PRIMARY)",   
+
+}
+
+#### list of variables for the X
+LoKi_X=LoKi__Hybrid__TupleTool("LoKi_X")
+LoKi_X.Variables =  {
+    "ID" : "ID",
+    "PT" : "PT",
+    "P"  : "P",
+    "ETA" : "ETA",
+    "PHI" : "PHI",
+    "BPVLTIME" : "BPVLTIME()",
+    "M" : "M",
+    "VCHI2NDOF" : "VFASPF(VCHI2/VDOF)",
+    "IPCHI2" : "MIPCHI2DV(PRIMARY)",
+
+    }
+
+LoKi_pizero=LoKi__Hybrid__TupleTool("LoKi_pizero")
+LoKi_pizero.Variables =  {
+    "ID" : "ID",
+    "PT" : "PT",
+    "M"  :  "M",
+    "P"  : "P",
+    "ETA" : "ETA",
+    "PHI" : "PHI",
+    "CL"  : "CL",
+    "IPCHI2" : "MIPCHI2DV(PRIMARY)",
+    "COSTHETA_GAMMA1" : "LV01",
+    "COSTHETA_GAMMA2" : "LV02",
+    "Gamma1_PT" : "CHILD ( PT, 1 )",
+    "Gamma2_PT" : "CHILD ( PT, 2 )",
+    "Gamma1_CL" : "CHILD ( CL, 1 )",
+    "Gamma2_CL" : "CHILD ( CL, 2 )",
+    
+}
+
+#### list of variables for the B
+LoKi_B =LoKi__Hybrid__TupleTool("LoKi_B")
+LoKi_B.Variables =  {
+    "ID" : "ID",
+    "PT" : "PT",
+    "P"  : "P",
+    "ETA" : "ETA",
+    "PHI" : "PHI",
+    "BPVLTIME"  : "BPVLTIME()",
+    "M"         : "M",
+    "MM"        : "MM",
+    "VCHI2NDOF"  : "VFASPF(VCHI2/VDOF)",
+    "IPCHI2"        : "MIPCHI2DV(PRIMARY)",
+    "DIRA"                : "BPVDIRA",
+    "FDCHI2"              : "BPVVDCHI2",
+    "FDS"                 : "BPVDLS",
+    # constraint with jpsi
+    "DTFCHI2_JPcon"       : "DTF_CHI2NDOF(True, strings(['J/psi(1S)']))", 
+    "B_M_JPcon"           : "DTF_FUN(M,True,strings(['J/psi(1S)']))",
+    "X_M_JPcon"           : "DTF_FUN(CHILD(M,1),True,strings(['J/psi(1S)']))",
+    "Omega_M_JPcon"       : "DTF_FUN(CHILD(M,1,2),True,strings(['J/psi(1S)']))",
+    "Xpiplus_M_JPcon"     : "DTF_FUN(M12,True,strings(['J/psi(1S)']))",
+    # constraint jpsi pi0
+    "DTFCHI2_JPpi0con"   : "DTF_CHI2NDOF(True, strings(['J/psi(1S)','pi0']))", 
+    "B_M_JPpi0con"       : "DTF_FUN(M,True,strings(['J/psi(1S)','pi0']))",
+    "X_M_JPpi0con"       : "DTF_FUN(CHILD(M,1),True,strings(['J/psi(1S)','pi0']))",
+    "Omega_M_JPpi0con"   : "DTF_FUN(CHILD(M,1,2),True,strings(['J/psi(1S)','pi0']))",
+    "Xpiplus_M_JPpi0con" : "DTF_FUN(M12,True,strings(['J/psi(1S)','pi0']))",
+     # constraint jpsi B0 pi0
+    "DTFCHI2_JPpi0B0con"   : "DTF_CHI2NDOF(True, strings(['J/psi(1S)','pi0','B0']))", 
+    "B_M_JPpi0B0con"       : "DTF_FUN(M,True,strings(['J/psi(1S)','pi0','B0']))",
+    "X_M_JPpi0B0con"       : "DTF_FUN(CHILD(M,1),True,strings(['J/psi(1S)','pi0','B0']))",
+    "Omega_M_JPpi0B0con"   : "DTF_FUN(CHILD(M,1,2),True,strings(['J/psi(1S)','pi0','B0']))",
+    "Xpiplus_M_JPpi0B0con" : "DTF_FUN(M12,True,strings(['J/psi(1S)','pi0','B0']))",
+ }
+
+
+
+tupletools = ["TupleToolEventInfo"]
+
+
+# get classes to build the SelectionSequence
+
+from PhysSelPython.Wrappers import AutomaticData, Selection, SelectionSequence
+from Configurables import CombineParticles, FilterDesktop
+from StandardParticles import (StdLooseMuons, StdAllLooseMuons, StdLoosePions, StdAllLoosePions, StdLoosePhotons, StdLooseAllPhotons, StdAllTightGammaDD, StdAllLooseKaons,StdLooseMergedPi0, StdLooseResolvedPi0, StdLooseDalitzPi0)
+from CommonParticles.StdLooseDalitzPi0 import (StdLoosePi02gee,StdLoosePi024e )
+from Configurables import LoKi__Hybrid__PlotTool as PlotTool
+
+############# selection j/psi ############3
+
+line1 = 'FullDSTDiMuonJpsi2MuMuDetachedLine'
+location1 = '/Event/Dimuon/Phys/'+line1+'/Particles'
+
+_jpsiFilter = FilterDesktop('jpsiFilter', Code = JpsiFilterCut)
+
+JpsiSel = AutomaticData(Location = location1)
+
+JpsiFilterSel = Selection(name = 'JpsiFilterSel',
+                          Algorithm = _jpsiFilter,
+                          RequiredSelections = [ JpsiSel])
+
+################## omega from resolved pions ####
+
+_Omega3pions = CombineParticles("Omega3pions")
+_Omega3pions.DecayDescriptor = "omega(782) -> pi+ pi- pi0"
+_Omega3pions.CombinationCut = "AALL"   
+_Omega3pions.DaughtersCuts={"pi+": PicutR, "pi-": PicutR, "pi0" : PiZcutR}
+_Omega3pions.MotherCut = OmegaFilterCut  # mass within 70 mev of omega mass
+
+Omega3pionsSelR = Selection("SelOmega3pionsR",
+                    Algorithm = _Omega3pions,
+                    RequiredSelections = [StdAllLoosePions,StdLooseResolvedPi0])
+                    
+############# selection x ###############3
+
+_X3940jpsiOmega = CombineParticles("X3940jpsiOmega")
+_X3940jpsiOmega.DecayDescriptor = "X_1(3872) -> J/psi(1S) omega(782)"
+_X3940jpsiOmega.CombinationCut = X3940CombCut
+_X3940jpsiOmega.DaughtersCuts={ "J/psi(1S)" : "ALL", "omega(782)":"ALL"}
+_X3940jpsiOmega.MotherCut = "ALL"#X3940CutLoose2
+
+X3940jpsiOmegaSelR= Selection("SelX3940jpsiOmegaR",
+                    Algorithm = _X3940jpsiOmega,
+                    RequiredSelections = [ JpsiFilterSel,Omega3pionsSelR])
+
+
+################3 selection bmes ############
+
+_Bzero2XKpi = CombineParticles("BzeroXKpi")
+_Bzero2XKpi.DecayDescriptor = "[B0 -> X_1(3872) pi+ K-]cc"
+_Bzero2XKpi.CombinationCut = BCombinationCut
+_Bzero2XKpi.DaughtersCuts={ "X_1(3872)" : "ALL","K+" : KCut , "K-" : KCut, "pi+": PicutR, "pi-": PicutR}
+_Bzero2XKpi.MotherCut = BMotherCut
+
+Bzero2XKpiSel= Selection("SelBzero2XKpi",
+                    Algorithm = _Bzero2XKpi,
+                    RequiredSelections = [ X3940jpsiOmegaSelR, StdAllLoosePions ,StdAllLooseKaons])
+
+
+# do Ntuple
+#
+from Configurables import ( DecayTreeTuple,
+                            TupleToolTrigger,
+                            L0TriggerTisTos,
+                            TriggerTisTos,
+                            TupleToolTISTOS,
+                            TupleToolDecay,
+                            LoKi__Hybrid__TupleTool,
+                            TupleToolPropertime,
+                            TupleToolDecayTreeFitter,
+                            TupleToolDalitz ,
+                            TupleToolKinematic ,
+                            TupleToolGeometry ,
+                            TupleToolTrackInfo,
+                            TupleToolAngles,
+                            TupleToolPrimaries,
+                            TupleToolPid,
+                            TupleToolTagging,
+                            TupleToolP2VV,
+                            TupleToolPhotonInfo,
+                            TupleToolProtoPData
+                            )
+
+myTriggerList = [
+                "L0MuonDecision",
+                "L0DiMuonDecision",
+                "Hlt1DiMuonHighMassDecision",
+                "Hlt1DiMuonLowMassDecision",
+                "Hlt1TrackMuonDecision",
+                "Hlt1SingleMuonHighPTDecision",
+                "Hlt1TrackAllL0Decision",
+                "Hlt2DiMuonDetachedDecision",
+                "Hlt2DiMuonDetachedJPsiDecision",
+                "Hlt2DiMuonDetachedHeavyDecision",
+                "Hlt2DiMuonJPsiDecision"
+]
+
+
+from DecayTreeTuple.Configuration import *
+
+############ decay tuple for Bmeson with kaons  ##########
+
+Tuple_Bzero = DecayTreeTuple( "Tuple_Bzero" )
+Tuple_Bzero.Inputs = [ "Phys/SelBzero2XKpi/Particles" ]
+
+Tuple_Bzero.Decay = "[B0 -> ^(X_1(3872) -> ^(J/psi(1S) -> ^mu+ ^mu-) ^(omega(782) -> ^pi+ ^pi- ^pi0)) ^pi+ ^K-]CC"
+Tuple_Bzero.Branches = {
+                "b"           : "^([B0 -> (X_1(3872) -> (J/psi(1S) -> mu+ mu-) (omega(782) -> pi+ pi- pi0)) pi+ K-]CC)",
+                "X3940"       : "[B0 -> ^(X_1(3872) -> (J/psi(1S) -> mu+ mu-) (omega(782) -> pi+ pi- pi0)) pi+ K-]CC",
+                "jpsi"        : "[B0 -> (X_1(3872) -> ^(J/psi(1S) -> mu+ mu-) (omega(782) -> pi+ pi- pi0)) pi+ K-]CC",
+                "muplus"      : "[B0 -> (X_1(3872) -> (J/psi(1S) -> ^mu+ mu-) (omega(782) -> pi+ pi- pi0)) pi+ K-]CC",
+                "muminus"     : "[B0 -> (X_1(3872) -> (J/psi(1S) -> mu+ ^mu-) (omega(782) -> pi+ pi- pi0)) pi+ K-]CC",
+                "Omega"       : "[B0 -> (X_1(3872) -> (J/psi(1S) -> mu+ mu-) ^(omega(782) -> pi+ pi- pi0)) pi+ K-]CC",
+                "piplus1"     : "[B0 -> (X_1(3872) -> (J/psi(1S) -> mu+ mu-) (omega(782) -> ^pi+ pi- pi0)) pi+ K-]CC",
+                "piminus1"    : "[B0 -> (X_1(3872) -> (J/psi(1S) -> mu+ mu-) (omega(782) -> pi+ ^pi- pi0)) pi+ K-]CC",
+                "pizero"      : "[B0 -> (X_1(3872) -> (J/psi(1S) -> mu+ mu-) (omega(782) -> pi+ pi- ^pi0)) pi+ K-]CC",
+                "piplus2"     : "[B0 -> (X_1(3872) -> (J/psi(1S) -> mu+ mu-) (omega(782) -> pi+ pi- pi0)) ^pi+ K-]CC",
+                "Kminus"      : "[B0 -> (X_1(3872) -> (J/psi(1S) -> mu+ mu-) (omega(782) -> pi+ pi- pi0)) pi+ ^K-]CC",
+                }
+
+
+Tuple_Bzero.ToolList =  tupletools[:]
+
+for particle in ["b","X3940","Omega","jpsi","muplus", "muminus","piplus1","piminus1","pizero","piplus2","Kminus",]:
+        Tuple_Bzero.addTupleTool(TupleToolDecay, name=particle)
+
+for daug in [Tuple_Bzero.muplus,Tuple_Bzero.muminus]:
+        daug.addTupleTool(LoKi_muon)
+        daug.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_muon"]
+for daug in [Tuple_Bzero.piplus1,Tuple_Bzero.piminus1]:
+        daug.addTupleTool(LoKi_track)
+        daug.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_track"] 
+for daug in [Tuple_Bzero.pizero]:        
+        daug.addTupleTool(LoKi_pizero)
+        daug.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_pizero"]
+
+Tuple_Bzero.b.addTupleTool(LoKi_B)
+Tuple_Bzero.b.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_B"]
+Tuple_Bzero.jpsi.addTupleTool(LoKi_JPsi)
+Tuple_Bzero.jpsi.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_JPsi"]
+Tuple_Bzero.Omega.addTupleTool(LoKi_Omega)
+Tuple_Bzero.Omega.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_Omega"]
+Tuple_Bzero.X3940.addTupleTool(LoKi_X)
+Tuple_Bzero.X3940.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_X"]
+Tuple_Bzero.piplus2.addTupleTool(LoKi_track)
+Tuple_Bzero.piplus2.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_track"]
+Tuple_Bzero.Kminus.addTupleTool(LoKi_track)
+Tuple_Bzero.Kminus.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_track"]
+
+Tuple_Bzero.b.addTupleTool("TupleToolTISTOS")
+Tuple_Bzero.b.TupleToolTISTOS.Verbose = True
+Tuple_Bzero.b.TupleToolTISTOS.TriggerList = myTriggerList
+
+################# decay tuple for x ######## 
+
+Tuple_X = DecayTreeTuple( "Tuple_X" )
+Tuple_X.Inputs = [ "Phys/SelX3940jpsiOmegaR/Particles" ]
+
+Tuple_X.Decay = "X_1(3872) -> ^(J/psi(1S) -> ^mu+ ^mu-) ^(omega(782) -> ^pi+ ^pi- ^pi0)"
+Tuple_X.Branches = {
+                "X3940"       : "^(X_1(3872) -> (J/psi(1S) -> mu+ mu-) (omega(782) -> pi+ pi- pi0))",
+                "Omega"       : "X_1(3872) -> (J/psi(1S) -> mu+ mu-) ^(omega(782) -> pi+ pi- pi0)",
+                "jpsi"        : "X_1(3872) -> ^(J/psi(1S) -> mu+ mu-) (omega(782) -> pi+ pi- pi0)",
+                "muplus"      : "X_1(3872) -> (J/psi(1S) -> ^mu+ mu-) (omega(782) -> pi+ pi- pi0)",
+                "muminus"     : "X_1(3872) -> (J/psi(1S) -> mu+ ^mu-) (omega(782) -> pi+ pi- pi0)",
+                "piplus1"     : "X_1(3872) -> (J/psi(1S) -> mu+ mu-) (omega(782) -> ^pi+ pi- pi0)",
+                "piminus1"    : "X_1(3872) -> (J/psi(1S) -> mu+ mu-) (omega(782) -> pi+ ^pi- pi0)",
+                "pizero"      : "X_1(3872) -> (J/psi(1S) -> mu+ mu-) (omega(782) -> pi+ pi- ^pi0)",
+                
+                }
+
+
+Tuple_X.ToolList =  tupletools[:]
+
+for particle in ["X3940","Omega","jpsi","muplus", "muminus","piplus1","piminus1","pizero"]:
+        Tuple_X.addTupleTool(TupleToolDecay, name=particle)
+
+for daug in [Tuple_X.muplus,Tuple_X.muminus]:
+        daug.addTupleTool(LoKi_muon)
+        daug.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_muon"]
+for daug in [Tuple_X.piplus1,Tuple_X.piminus1]:
+        daug.addTupleTool(LoKi_track)
+        daug.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_track"] 
+for daug in [Tuple_X.pizero]:        
+        daug.addTupleTool(LoKi_pizero)
+        daug.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_pizero"]
+
+Tuple_X.jpsi.addTupleTool(LoKi_JPsi)
+Tuple_X.jpsi.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_JPsi"]
+Tuple_X.Omega.addTupleTool(LoKi_Omega)
+Tuple_X.Omega.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_Omega"]
+Tuple_X.X3940.addTupleTool(LoKi_X)
+Tuple_X.X3940.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_X"]
+
+
+################# decay tuple for psi3770 ######## 
+TupleOmega = DecayTreeTuple("TupleOmega")
+TupleOmega.Inputs = ["Phys/SelOmega3pionsR/Particles"]
+TupleOmega.Decay = "omega(782) -> ^pi+ ^pi- ^pi0"
+TupleOmega.Branches = {
+    "Omega"     : "^(omega(782) -> pi+ pi- pi0)",
+    "piplus1"   : "omega(782) -> ^pi+ pi- pi0",
+    "piminus1"  : "omega(782) -> pi+ ^pi- pi0",
+    "pizero"    : "omega(782) -> pi+ pi- ^pi0",
+    }
+
+TupleOmega.ToolList =  tupletools[:]
+
+for particle in ["Omega","piplus1","piminus1","pizero"]:
+        TupleOmega.addTupleTool(TupleToolDecay, name=particle)
+for daug in [TupleOmega.piplus1,TupleOmega.piminus1]:
+        daug.addTupleTool(LoKi_track)
+        daug.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_track"]
+for daug in [TupleOmega.pizero]:        
+        daug.addTupleTool(LoKi_pizero)
+        daug.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_pizero"]
+
+TupleOmega.Omega.addTupleTool(LoKi_Omega)
+TupleOmega.Omega.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_Omega"]
+
+
+######################################################3
+
+TupleJpsi = DecayTreeTuple( "TupleJpsi" )
+TupleJpsi.Inputs = [ "Phys/JpsiFilterSel/Particles" ]
+TupleJpsi.Decay = "J/psi(1S) -> ^mu+ ^mu- "
+TupleJpsi.Branches = {
+    "jpsi"     : "^(J/psi(1S) -> mu+ mu-)",
+    "muplus"   : "J/psi(1S) -> ^mu+ mu- ",
+    "muminus"  : "J/psi(1S) -> mu+ ^mu- ",
+    }
+
+TupleJpsi.ToolList =  tupletools[:]
+#TupleJpsi.ToolList+=["TupleToolGeometry"]
+#TupleJpsi.ToolList+=["TupleToolAngles"]
+#TupleJpsi.ToolList+=["TupleToolPid"]
+#TupleJpsi.ToolList+=["TupleToolTrackInfo"]
+
+for particle in ["jpsi","muplus","muminus"]:
+        TupleJpsi.addTupleTool(TupleToolDecay, name=particle)
+
+for daug in [TupleJpsi.muplus,TupleJpsi.muminus]:
+        daug.addTupleTool(LoKi_muon)
+        daug.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_muon"]
+
+TupleJpsi.jpsi.addTupleTool(LoKi_JPsi)
+TupleJpsi.jpsi.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_JPsi"]
+
+DaVinci().EventPreFilters = [tesFilter1]
+
+from PhysSelPython.Wrappers import SelectionSequence
+SeqX = SelectionSequence('SeqX', TopSelection = X3940jpsiOmegaSelR)
+SeqBzero = SelectionSequence('SeqBzero', TopSelection = Bzero2XKpiSel)
+SeqOmega = SelectionSequence('SeqOmega', TopSelection = Omega3pionsSelR)
+
+DaVinci().appendToMainSequence([SeqX, SeqBzero, SeqOmega])
+DaVinci().appendToMainSequence([Tuple_Bzero]) #Tuple_X, Tuple_Psi
+
+
+from Configurables import LHCbApp
+
+#write out a summary file called summary.xml
+LHCbApp().XMLSummary="summary-B02XKpi_3940.xml"
+                                              
+
diff --git a/B02JpsiOmegaKpi/info.yaml b/B02JpsiOmegaKpi/info.yaml
new file mode 100644
index 0000000000..295e88a2c9
--- /dev/null
+++ b/B02JpsiOmegaKpi/info.yaml
@@ -0,0 +1,50 @@
+defaults:
+  application: DaVinci/v45r4
+  wg: BandQ
+  automatically_configure: yes
+  turbo: no
+  inform:
+    - salil.joshi@cern.ch
+    - dmytro.melnychuk@cern.ch
+  options:
+    - B02JpsiOmegaKpi.py
+  output: B02JpsiOmegaKpi.root
+
+B02X3940Kpi_2011_MagUp_jobs:
+  input:
+    bk_query: "/LHCb/Collision11/Beam3500GeV-VeloClosed-MagUp/Real Data/Reco14/Stripping21r1/90000000/DIMUON.DST"
+B02X3940Kpi_2012_MagUp_jobs:
+  input:
+    bk_query: "/LHCb/Collision12/Beam4000GeV-VeloClosed-MagUp/Real Data/Reco14/Stripping21/90000000/DIMUON.DST"
+B02X3940Kpi_2015_MagUp_jobs:
+  input:    
+    bk_query: "/LHCb/Collision15/Beam6500GeV-VeloClosed-MagUp/Real Data/Reco15a/Stripping24r2/90000000/DIMUON.DST"
+B02X3940Kpi_2016_MagUp_jobs:
+  input:    
+    bk_query: "/LHCb/Collision16/Beam6500GeV-VeloClosed-MagUp/Real Data/Reco16/Stripping28r2/90000000/DIMUON.DST"
+B02X3940Kpi_2017_MagUp_jobs:
+  input:    
+    bk_query: "/LHCb/Collision17/Beam6500GeV-VeloClosed-MagUp/Real Data/Reco17/Stripping29r2/90000000/DIMUON.DST"
+B02X3940Kpi_2018_MagUp_jobs:
+  input:    
+    bk_query: "/LHCb/Collision18/Beam6500GeV-VeloClosed-MagUp/Real Data/Reco18/Stripping34/90000000/DIMUON.DST"
+
+
+B02X3940Kpi_2011_MagDown_jobs:
+  input:
+    bk_query: "/LHCb/Collision11/Beam3500GeV-VeloClosed-MagDown/Real Data/Reco14/Stripping21r1/90000000/DIMUON.DST"
+B02X3940Kpi_2012_MagDown_jobs:
+  input:
+    bk_query: "/LHCb/Collision12/Beam4000GeV-VeloClosed-MagDown/Real Data/Reco14/Stripping21/90000000/DIMUON.DST"
+B02X3940Kpi_2015_MagDown_jobs:
+  input:
+    bk_query: "/LHCb/Collision15/Beam6500GeV-VeloClosed-MagDown/Real Data/Reco15a/Stripping24r2/90000000/DIMUON.DST"
+B02X3940Kpi_2016_MagDown_jobs:
+  input:
+    bk_query: "/LHCb/Collision16/Beam6500GeV-VeloClosed-MagDown/Real Data/Reco16/Stripping28r2/90000000/DIMUON.DST"
+B02X3940Kpi_2017_MagDown_jobs:
+  input:
+    bk_query: "/LHCb/Collision17/Beam6500GeV-VeloClosed-MagDown/Real Data/Reco17/Stripping29r2/90000000/DIMUON.DST"
+B02X3940Kpi_2018_MagDown_jobs:
+  input:
+    bk_query: "/LHCb/Collision18/Beam6500GeV-VeloClosed-MagDown/Real Data/Reco18/Stripping34/90000000/DIMUON.DST"
-- 
GitLab


From ec22be9dbbe932c3ef3404d87d6036d3dee34fee Mon Sep 17 00:00:00 2001
From: Salil Joshi <salil.joshi@cern.ch>
Date: Wed, 29 Jan 2025 08:41:37 +0100
Subject: [PATCH 2/3] Update info.yaml

---
 B02JpsiOmegaKpi/info.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/B02JpsiOmegaKpi/info.yaml b/B02JpsiOmegaKpi/info.yaml
index 295e88a2c9..cff0e2ba45 100644
--- a/B02JpsiOmegaKpi/info.yaml
+++ b/B02JpsiOmegaKpi/info.yaml
@@ -1,5 +1,5 @@
 defaults:
-  application: DaVinci/v45r4
+  application: DaVinci/v64r13
   wg: BandQ
   automatically_configure: yes
   turbo: no
-- 
GitLab


From 73d8ee8fb4dd53ae53eb961bafe88368acae8a47 Mon Sep 17 00:00:00 2001
From: Salil Joshi <salil.joshi@cern.ch>
Date: Wed, 29 Jan 2025 11:09:43 +0100
Subject: [PATCH 3/3] Update info.yaml

---
 B02JpsiOmegaKpi/info.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/B02JpsiOmegaKpi/info.yaml b/B02JpsiOmegaKpi/info.yaml
index cff0e2ba45..497ea2ae1c 100644
--- a/B02JpsiOmegaKpi/info.yaml
+++ b/B02JpsiOmegaKpi/info.yaml
@@ -1,5 +1,5 @@
 defaults:
-  application: DaVinci/v64r13
+  application: DaVinci/v46r11 
   wg: BandQ
   automatically_configure: yes
   turbo: no
-- 
GitLab