From fe388712b7230e0b1cda633913e8865a459a4467 Mon Sep 17 00:00:00 2001
From: chengw <cheng.wang@cern.ch>
Date: Sat, 15 Mar 2025 13:05:51 +0800
Subject: [PATCH 1/3] <The Ap for Run2 MC of Xi_c+ -> p KK and p pi+ pi->

---
 run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py   | 243 +++++++++++++++++++++
 run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py | 244 ++++++++++++++++++++++
 run2_MC_XicpTopKK_ppipi/info.yaml         |  30 +++
 3 files changed, 517 insertions(+)
 create mode 100644 run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py
 create mode 100644 run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py
 create mode 100644 run2_MC_XicpTopKK_ppipi/info.yaml

diff --git a/run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py b/run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py
new file mode 100644
index 0000000000..4bbe6f3c81
--- /dev/null
+++ b/run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py
@@ -0,0 +1,243 @@
+import GaudiKernel.SystemOfUnits as Units
+from GaudiKernel.SystemOfUnits import GeV, MeV, picosecond, mm, mrad
+from Gaudi.Configuration import *
+
+from Configurables import DaVinci 
+from Configurables import CombineParticles, DecayTreeTuple
+from Configurables import TupleToolDecay, TupleToolPrimaries
+from Configurables import TupleToolGeometry, TupleToolKinematic, TupleToolPropertime, TupleToolPrimaries, TupleToolPid, TupleToolEventInfo, TupleToolTrackInfo, TupleToolRecoStats, TupleToolTrigger
+from Configurables import TupleToolTISTOS, L0TriggerTisTos, TriggerTisTos
+from Configurables import LoKi__Hybrid__TupleTool
+from Configurables import LoKi__Hybrid__TupleTool as LoKiTupleTool
+from Configurables import FilterDesktop
+from Configurables import CondDB, CheckPV, TupleToolDecayTreeFitter
+from Configurables import FilterInTrees
+
+from DecayTreeTuple.Configuration import *
+from PhysConf.Selections import CombineSelection, FilterSelection, RebuildSelection
+from PhysConf.Selections import SelectionSequence, StrippingSelection
+from PhysSelPython.Wrappers import AutomaticData, Selection, MergedSelection
+from PhysSelPython.Wrappers import SelectionSequence, DataOnDemand, TupleSelection
+
+from Configurables import TupleToolMCBackgroundInfo, TupleToolMCTruth
+from TeslaTools import TeslaTruthUtils
+
+isSimulation = DaVinci().Simulation 
+#tool list
+TupleToolList = [ 
+    "TupleToolGeometry",
+    "TupleToolKinematic",
+    "TupleToolPrimaries",
+    "TupleToolPid",
+    "TupleToolEventInfo",
+    "TupleToolTrackInfo",
+    "TupleToolBremInfo",
+    "TupleToolRecoStats",
+    "TupleToolTISTOS",
+    "TupleToolTrigger",
+    "TupleToolAngles",
+    "TupleToolPropertime",
+    "TupleToolTrackPosition",
+    "TupleToolANNPID"
+    ]
+
+#trigger list
+TriggerList = [
+    # L0
+    "L0ElectronDecision",
+    "L0HadronDecision",
+    "L0MuonDecision",
+    "L0MuonLooseDecision",
+    "L0MuonEWDecision",
+    "L0MuonHighDecision",
+    "L0PhysDecision",
+    "L0PhotonDecision",
+    "L0DiMuonDecision",
+    "L0GlobalDecision",
+    "L0ElectronHiDecision",
+    "L0DiElectronDecision",
+    "L0DiHadronDecision",
+    # HLT1
+    "Hlt1TrackAllL0Decision",
+    "Hlt1TrackPhotonDecision",
+    "Hlt1GlobalDecision",
+    "Hlt1TrackMVADecision",
+    "Hlt1TwoTrackMVADecision",
+    "Hlt1TrackMVALooseDecision",
+    "Hlt1TwoTrackMVALooseDecision",
+    "Hlt1L0AnyDecision",
+    "Hlt1TrackMVATightDecision",
+    "Hlt1TwoTrackMVATightDecision",
+
+    'Hlt1TrackMuonDecision',
+    'Hlt1TrackMuonMVADecision',
+    'Hlt1DiMuonHighMassDecision',
+    'Hlt1DiMuonLowMassDecision',
+    'Hlt1SingleMuonHighPTDecision',
+    'Hlt1DiMuonNoL0Decision',
+    'Hlt1CalibMuonAlignJpsiDecision',
+    'Hlt1DiMuonNoIPDecision',
+    'Hlt1DiMuonNoIPSSDecision',
+    'Hlt1LowMultMuonDecision',
+    'Hlt1MultiDiMuonNoIPDecision',
+    'Hlt1MultiMuonNoL0Decision',
+    'Hlt1SingleMuonHighPTNoMUIDDecision',
+    'Hlt1SingleMuonNoIPDecision',
+     # HLT2
+    'Hlt2Topo2BodyDecision',
+    'Hlt2TopoE2BodyDecision',
+    "Hlt2Topo3BodyDecision",
+    "Hlt2Topo4BodyDecision",
+    "Hlt2IncPhiDecision",
+    "Hlt2Topo.*Decision",
+    "Hlt2PhysDecision",
+   ]
+
+################################################################################
+LoKi_particle = LoKi__Hybrid__TupleTool("LoKi_particle")
+LoKi_particle.Variables = {
+   "Y"    : "Y",
+   "ETA"  : "ETA",
+   "PHI"  : "PHI",
+   "LOKI_FDCHI2"    : "BPVVDCHI2",
+   "LOKI_FDS"       : "BPVDLS",
+   "LOKI_DIRA"      : "BPVDIRA",
+   "LV01"           : "LV01",
+   "LV02"           : "LV02",
+   "DOCA"           : "DOCA(1,2)",
+   "LOKI_BPVCORRM"  : "BPVCORRM",
+   "LOKI_IPCHI2"    : "BPVIPCHI2()",
+   "LOKI_BPVLTIME"  : "BPVLTIME()"
+}
+LoKi_Xicp2PHH=LoKi__Hybrid__TupleTool("LoKi_Xicp2PHH")
+LoKi_Xicp2PHH.Variables =  {
+    'DOCACHI2_p_h1'  : 'DOCACHI2(1,2)',
+    'DOCACHI2_p_h2'  : 'DOCACHI2(1,3)',
+    'DOCACHI2_h1_h2' : 'DOCACHI2(2,3)',
+    'DOCA_p_h1'   : 'DOCA(1,2)',
+    'DOCA_p_h2'   : 'DOCA(1,3)',
+    'DOCA_h1_h2'  : 'DOCA(2,3)',
+    'MASS_p_h1'   : 'MASS(1,2)',
+    'MASS_p_h2'   : 'MASS(1,3)',
+    'MASS_h1_h2'  : 'MASS(2,3)',
+    }
+
+
+################################################################################
+line_XicpToPKK      = "Xic2PHHXicp2PKKLine"
+
+from PhysConf.Selections import AutomaticData
+Input_XicpToPKK     = AutomaticData( Location = "Phys/{0}/Particles".format(line_XicpToPKK))
+
+from PhysConf.Selections import TupleSelection
+XicpToPKK_decay     = '[Xi_c+ -> ^p+ ^K+ ^K-]CC'
+XicpToPKK_branches = {
+     "Xicp"    :   "^([Xi_c+ -> p+ K+ K-]CC)",
+     "proton"  :   "[Xi_c+ -> ^p+ K+ K-]CC",
+     "K1"      :   "[Xi_c+ -> p+ ^K+ K-]CC",
+     "K2"      :   "[Xi_c+ -> p+ K+ ^K-]CC",
+     } 
+
+Tuple_XicpToPKK     = TupleSelection("Tuple_XicpToPKK",     [ Input_XicpToPKK ],    Decay = XicpToPKK_decay,    Branches = XicpToPKK_branches,      ToolList = [] )
+################################################################################
+for dtt in [Tuple_XicpToPKK]:
+    # decay tree fitter (DTF)
+    dtt.addTool(TupleToolDecay, name="Xicp")
+    dtt.addTool(TupleToolDecay, name="proton")
+    dtt.addTool(TupleToolDecay, name="K1")
+    dtt.addTool(TupleToolDecay, name="K2")
+    
+    #LoKi VARIABLES
+    for particle in [dtt.Xicp,dtt.proton,dtt.K1,dtt.K2]:
+        particle.addTool(LoKi_particle)
+        particle.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_particle"]
+    dtt.Xicp.addTool(LoKi_Xicp2PHH)
+    dtt.Xicp.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_Xicp2PHH"]
+    #constrain: PV and Xicp
+    dtt.Xicp.addTupleTool('TupleToolDecayTreeFitter/DTF')
+    dtt.Xicp.DTF.constrainToOriginVertex = True
+    dtt.Xicp.DTF.Verbose = True
+    dtt.Xicp.DTF.daughtersToConstrain = ["Xi_c+"]
+    dtt.Xicp.DTF.UpdateDaughters = True
+    #constrain: PV
+    dtt.Xicp.addTupleTool('TupleToolDecayTreeFitter/DTFonlyPV')
+    dtt.Xicp.DTFonlyPV.constrainToOriginVertex = True
+    dtt.Xicp.DTFonlyPV.Verbose = True
+    dtt.Xicp.DTFonlyPV.UpdateDaughters = True
+    #DTF with Momentum Scaling only
+    dtt.Xicp.addTupleTool('TupleToolDecayTreeFitter/DTFonlyMS')
+    dtt.Xicp.DTFonlyMS.Verbose = True
+    dtt.Xicp.DTFonlyMS.UpdateDaughters = True
+################################################################################
+
+for dtt in [Tuple_XicpToPKK]:
+
+    dtt.TupleName = "ntp"
+    dtt.ToolList =  TupleToolList
+
+    if isSimulation:
+        dtt.ToolList += [
+            "TupleToolMCTruth",
+            "TupleToolMCBackgroundInfo"
+            ]
+        dtt.TupleToolMCTruth.ToolList += ["MCTupleToolHierarchy"]
+
+####################################### TISTOS ##################################
+    dtt.TupleToolTrigger.VerboseL0 = True
+    dtt.TupleToolTrigger.VerboseHlt1 = True
+    dtt.TupleToolTrigger.VerboseHlt2 = True
+    dtt.TupleToolTrigger.FillHlt2 = False
+    dtt.TupleToolTrigger.TriggerList = TriggerList
+
+    dtt.TupleToolTISTOS.addTool(L0TriggerTisTos())
+    dtt.TupleToolTISTOS.addTool(TriggerTisTos())
+    dtt.TupleToolTISTOS.VerboseL0 = True
+    dtt.TupleToolTISTOS.VerboseHlt1 = True
+    dtt.TupleToolTISTOS.VerboseHlt2 = True
+    dtt.TupleToolTISTOS.FillHlt2 = False
+    dtt.TupleToolTISTOS.TriggerList = TriggerList
+
+from Configurables import MCDecayTreeTuple
+MCTuple = MCDecayTreeTuple("MCTruth")
+MCTuple.Decay = "^[Xi_c+ => ^p+ ^K+ ^K-]CC"
+MCTuple.addBranches({
+     "Xicp"     :  "^([ Xi_c+ ==> p+ K+ K-]CC)",
+     "proton"   :  "[ Xi_c+ ==> ^p+ K+ K-]CC",
+     "K1"       :  "[ Xi_c+ ==> p+ ^K+ K-]CC",
+     "K2"       :  "[ Xi_c+ ==> p+ K+ ^K-]CC",
+     })
+MCTuple.ToolList += [
+    "MCTupleToolKinematic"
+    ,"MCTupleToolPrimaries"
+    ,"MCTupleToolAngles"
+    ,"MCTupleToolHierarchy"
+    ,"TupleToolRecoStats"
+    ,"MCTupleToolDecayType"
+    ,"MCTupleToolPID"
+    ,"MCTupleToolPrompt"
+    ]
+
+
+################################################################################
+from PhysConf.Selections import SelectionSequence
+seq_XicpToPKK          = SelectionSequence('seq_XicpToPKK',Tuple_XicpToPKK).sequence()
+
+from Configurables import DataOnDemandSvc
+dod = DataOnDemandSvc()
+
+from Configurables import Gaudi__DataLink as Link
+rawEvt1 = Link ( 'LinkRawEvent1',
+        What   = '/Event/DAQ/RawEvent' ,
+        Target = '/Event/Trigger/RawEvent' )
+dod.AlgMap [ rawEvt1  . Target ] = rawEvt1
+################################################################################
+DaVinci(
+    InputType       = 'MDST'         , 
+    Lumi            = not isSimulation, 
+    Simulation      = isSimulation,
+    Turbo           = False,
+    UserAlgorithms  = [seq_XicpToPKK,MCTuple],
+    #RootInTES       = "ALLSTREAMS"
+    RootInTES       = "/Event/AllStreams"
+    )
+
diff --git a/run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py b/run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py
new file mode 100644
index 0000000000..d1bb4dd30e
--- /dev/null
+++ b/run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py
@@ -0,0 +1,244 @@
+import GaudiKernel.SystemOfUnits as Units
+from GaudiKernel.SystemOfUnits import GeV, MeV, picosecond, mm, mrad
+from Gaudi.Configuration import *
+
+from Configurables import DaVinci 
+from Configurables import CombineParticles, DecayTreeTuple
+from Configurables import TupleToolDecay, TupleToolPrimaries
+from Configurables import TupleToolGeometry, TupleToolKinematic, TupleToolPropertime, TupleToolPrimaries, TupleToolPid, TupleToolEventInfo, TupleToolTrackInfo, TupleToolRecoStats, TupleToolTrigger
+from Configurables import TupleToolTISTOS, L0TriggerTisTos, TriggerTisTos
+from Configurables import LoKi__Hybrid__TupleTool
+from Configurables import LoKi__Hybrid__TupleTool as LoKiTupleTool
+from Configurables import FilterDesktop
+from Configurables import CondDB, CheckPV, TupleToolDecayTreeFitter
+from Configurables import FilterInTrees
+
+from DecayTreeTuple.Configuration import *
+from PhysConf.Selections import CombineSelection, FilterSelection, RebuildSelection
+from PhysConf.Selections import SelectionSequence, StrippingSelection
+from PhysSelPython.Wrappers import AutomaticData, Selection, MergedSelection
+from PhysSelPython.Wrappers import SelectionSequence, DataOnDemand, TupleSelection
+
+from Configurables import TupleToolMCBackgroundInfo, TupleToolMCTruth
+from TeslaTools import TeslaTruthUtils
+
+isSimulation = DaVinci().Simulation 
+#tool list
+TupleToolList = [ 
+    "TupleToolGeometry",
+    "TupleToolKinematic",
+    "TupleToolPrimaries",
+    "TupleToolPid",
+    "TupleToolEventInfo",
+    "TupleToolTrackInfo",
+    "TupleToolBremInfo",
+    "TupleToolRecoStats",
+    "TupleToolTISTOS",
+    "TupleToolTrigger",
+    "TupleToolAngles",
+    "TupleToolPropertime",
+    "TupleToolTrackPosition",
+    "TupleToolANNPID"
+    ]
+
+#trigger list
+TriggerList = [
+    # L0
+    "L0ElectronDecision",
+    "L0HadronDecision",
+    "L0MuonDecision",
+    "L0MuonLooseDecision",
+    "L0MuonEWDecision",
+    "L0MuonHighDecision",
+    "L0PhysDecision",
+    "L0PhotonDecision",
+    "L0DiMuonDecision",
+    "L0GlobalDecision",
+    "L0ElectronHiDecision",
+    "L0DiElectronDecision",
+    "L0DiHadronDecision",
+    # HLT1
+    "Hlt1TrackAllL0Decision",
+    "Hlt1TrackPhotonDecision",
+    "Hlt1GlobalDecision",
+    "Hlt1TrackMVADecision",
+    "Hlt1TwoTrackMVADecision",
+    "Hlt1TrackMVALooseDecision",
+    "Hlt1TwoTrackMVALooseDecision",
+    "Hlt1L0AnyDecision",
+    "Hlt1TrackMVATightDecision",
+    "Hlt1TwoTrackMVATightDecision",
+
+    'Hlt1TrackMuonDecision',
+    'Hlt1TrackMuonMVADecision',
+    'Hlt1DiMuonHighMassDecision',
+    'Hlt1DiMuonLowMassDecision',
+    'Hlt1SingleMuonHighPTDecision',
+    'Hlt1DiMuonNoL0Decision',
+    'Hlt1CalibMuonAlignJpsiDecision',
+    'Hlt1DiMuonNoIPDecision',
+    'Hlt1DiMuonNoIPSSDecision',
+    'Hlt1LowMultMuonDecision',
+    'Hlt1MultiDiMuonNoIPDecision',
+    'Hlt1MultiMuonNoL0Decision',
+    'Hlt1SingleMuonHighPTNoMUIDDecision',
+    'Hlt1SingleMuonNoIPDecision',
+     # HLT2
+    'Hlt2Topo2BodyDecision',
+    'Hlt2TopoE2BodyDecision',
+    "Hlt2Topo3BodyDecision",
+    "Hlt2Topo4BodyDecision",
+    "Hlt2IncPhiDecision",
+    "Hlt2Topo.*Decision",
+    "Hlt2PhysDecision",
+   ]
+
+################################################################################
+LoKi_particle = LoKi__Hybrid__TupleTool("LoKi_particle")
+LoKi_particle.Variables = {
+   "Y"    : "Y",
+   "ETA"  : "ETA",
+   "PHI"  : "PHI",
+   "LOKI_FDCHI2"    : "BPVVDCHI2",
+   "LOKI_FDS"       : "BPVDLS",
+   "LOKI_DIRA"      : "BPVDIRA",
+   "LV01"           : "LV01",
+   "LV02"           : "LV02",
+   "DOCA"           : "DOCA(1,2)",
+   "LOKI_BPVCORRM"  : "BPVCORRM",
+   "LOKI_IPCHI2"    : "BPVIPCHI2()",
+   "LOKI_BPVLTIME"  : "BPVLTIME()"
+}
+LoKi_Xicp2PHH=LoKi__Hybrid__TupleTool("LoKi_Xicp2PHH")
+LoKi_Xicp2PHH.Variables =  {
+    'DOCACHI2_p_h1'  : 'DOCACHI2(1,2)',
+    'DOCACHI2_p_h2'  : 'DOCACHI2(1,3)',
+    'DOCACHI2_h1_h2' : 'DOCACHI2(2,3)',
+    'DOCA_p_h1'   : 'DOCA(1,2)',
+    'DOCA_p_h2'   : 'DOCA(1,3)',
+    'DOCA_h1_h2'  : 'DOCA(2,3)',
+    'MASS_p_h1'   : 'MASS(1,2)',
+    'MASS_p_h2'   : 'MASS(1,3)',
+    'MASS_h1_h2'  : 'MASS(2,3)',
+    }
+
+
+################################################################################
+line_XicpToPPiPi    = "Xic2PHHXicp2PPiPiLine"
+
+from PhysConf.Selections import AutomaticData
+Input_XicpToPPiPi   = AutomaticData( Location = "Phys/{0}/Particles".format(line_XicpToPPiPi))
+
+################################################################################
+from PhysConf.Selections import TupleSelection
+XicpToPPiPi_decay   = '[Xi_c+ -> ^p+ ^pi+ ^pi-]CC'
+XicpToPPiPi_branches = {
+     "Xicp"     :   "^([Xi_c+ -> p+ pi+ pi-]CC)",
+     "proton"   :   "[Xi_c+ -> ^p+ pi+ pi-]CC",
+     "pi1"      :   "[Xi_c+ -> p+ ^pi+ pi-]CC",
+     "pi2"      :   "[Xi_c+ -> p+ pi+ ^pi-]CC",
+     } 
+
+Tuple_XicpToPPiPi   = TupleSelection("Tuple_XicpToPPiPi",   [ Input_XicpToPPiPi ],  Decay = XicpToPPiPi_decay,  Branches = XicpToPPiPi_branches,    ToolList = [] )
+################################################################################
+for dtt in [Tuple_XicpToPPiPi]:
+    # decay tree fitter (DTF)
+    dtt.addTool(TupleToolDecay, name="Xicp")
+    dtt.addTool(TupleToolDecay, name="proton")
+    dtt.addTool(TupleToolDecay, name="pi1")
+    dtt.addTool(TupleToolDecay, name="pi2")
+    
+    #LoKi VARIABLES
+    for particle in [dtt.Xicp,dtt.proton,dtt.pi1,dtt.pi2]:
+        particle.addTool(LoKi_particle)
+        particle.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_particle"]
+    dtt.Xicp.addTool(LoKi_Xicp2PHH)
+    dtt.Xicp.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_Xicp2PHH"]
+    #constrain: PV and Xicp
+    dtt.Xicp.addTupleTool('TupleToolDecayTreeFitter/DTF')
+    dtt.Xicp.DTF.constrainToOriginVertex = True
+    dtt.Xicp.DTF.Verbose = True
+    dtt.Xicp.DTF.daughtersToConstrain = ["Xi_c+"]
+    dtt.Xicp.DTF.UpdateDaughters = True
+    #constrain: PV
+    dtt.Xicp.addTupleTool('TupleToolDecayTreeFitter/DTFonlyPV')
+    dtt.Xicp.DTFonlyPV.constrainToOriginVertex = True
+    dtt.Xicp.DTFonlyPV.Verbose = True
+    dtt.Xicp.DTFonlyPV.UpdateDaughters = True
+    #DTF with Momentum Scaling only
+    dtt.Xicp.addTupleTool('TupleToolDecayTreeFitter/DTFonlyMS')
+    dtt.Xicp.DTFonlyMS.Verbose = True
+    dtt.Xicp.DTFonlyMS.UpdateDaughters = True
+################################################################################
+
+for dtt in [Tuple_XicpToPPiPi]:
+
+    dtt.TupleName = "ntp"
+    dtt.ToolList =  TupleToolList
+
+    if isSimulation:
+        dtt.ToolList += [
+            "TupleToolMCTruth",
+            "TupleToolMCBackgroundInfo"
+            ]
+        dtt.TupleToolMCTruth.ToolList += ["MCTupleToolHierarchy"]
+
+####################################### TISTOS ##################################
+    dtt.TupleToolTrigger.VerboseL0 = True
+    dtt.TupleToolTrigger.VerboseHlt1 = True
+    dtt.TupleToolTrigger.VerboseHlt2 = True
+    dtt.TupleToolTrigger.FillHlt2 = False
+    dtt.TupleToolTrigger.TriggerList = TriggerList
+
+    dtt.TupleToolTISTOS.addTool(L0TriggerTisTos())
+    dtt.TupleToolTISTOS.addTool(TriggerTisTos())
+    dtt.TupleToolTISTOS.VerboseL0 = True
+    dtt.TupleToolTISTOS.VerboseHlt1 = True
+    dtt.TupleToolTISTOS.VerboseHlt2 = True
+    dtt.TupleToolTISTOS.FillHlt2 = False
+    dtt.TupleToolTISTOS.TriggerList = TriggerList
+
+from Configurables import MCDecayTreeTuple
+MCTuple = MCDecayTreeTuple("MCTruth")
+MCTuple.Decay = "^[Xi_c+ => ^p+ ^pi+ ^pi-]CC"
+MCTuple.addBranches({
+     "Xicp"     :  "^([ Xi_c+ ==> p+ pi+ pi-]CC)",
+     "proton"   :  "[ Xi_c+ ==> ^p+ pi+ pi-]CC",
+     "pi1"      :  "[ Xi_c+ ==> p+ ^pi+ pi-]CC",
+     "pi2"      :  "[ Xi_c+ ==> p+ pi+ ^pi-]CC",
+     })
+MCTuple.ToolList += [
+    "MCTupleToolKinematic"
+    ,"MCTupleToolPrimaries"
+    ,"MCTupleToolAngles"
+    ,"MCTupleToolHierarchy"
+    ,"TupleToolRecoStats"
+    ,"MCTupleToolDecayType"
+    ,"MCTupleToolPID"
+    ,"MCTupleToolPrompt"
+    ]
+
+
+################################################################################
+from PhysConf.Selections import SelectionSequence
+seq_XicpToPPiPi         = SelectionSequence('seq_XicpToPPiPi',Tuple_XicpToPPiPi).sequence()
+
+from Configurables import DataOnDemandSvc
+dod = DataOnDemandSvc()
+
+from Configurables import Gaudi__DataLink as Link
+rawEvt1 = Link ( 'LinkRawEvent1',
+        What   = '/Event/DAQ/RawEvent' ,
+        Target = '/Event/Trigger/RawEvent' )
+dod.AlgMap [ rawEvt1  . Target ] = rawEvt1
+################################################################################
+DaVinci(
+    InputType       = 'MDST'         , 
+    Lumi            = not isSimulation, 
+    Simulation      = isSimulation,
+    Turbo           = False,
+    UserAlgorithms  = [seq_XicpToPPiPi,MCTuple],
+    #RootInTES       = "ALLSTREAMS"
+    RootInTES       = "/Event/AllStreams"
+    )
+
diff --git a/run2_MC_XicpTopKK_ppipi/info.yaml b/run2_MC_XicpTopKK_ppipi/info.yaml
new file mode 100644
index 0000000000..5c44d80118
--- /dev/null
+++ b/run2_MC_XicpTopKK_ppipi/info.yaml
@@ -0,0 +1,30 @@
+defaults:
+  application: "DaVinci/v44r11p6"
+  wg: Charm
+  automatically_configure: true
+  inform:
+    - cheng.wang@cern.ch
+
+{%- set datasets_XicpToPHH_mc = [
+  ('16','MagDown','XicpToPPiPi','/MC/2016/Beam6500GeV-2016-MagDown-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x6139160F/Reco16/Turbo03a/Stripping28r2p2NoPrescalingFlagged/26103093/ALLSTREAMS.MDST'),
+  ('17','MagDown','XicpToPPiPi','/MC/2017/Beam6500GeV-2017-MagDown-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x62661709/Reco17/Turbo04a-WithTurcal/Stripping29r2p3NoPrescalingFlagged/26103093/ALLSTREAMS.MDST'),
+  ('18','MagDown','XicpToPPiPi','/MC/2018/Beam6500GeV-2018-MagDown-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x617d18a4/Reco18/Turbo05-WithTurcal/Stripping34r0p3NoPrescalingFlagged/26103093/ALLSTREAMS.MDST'),
+  ('16','MagUp',  'XicpToPPiPi','/MC/2016/Beam6500GeV-2016-MagUp-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x6139160F/Reco16/Turbo03a/Stripping28r2p2NoPrescalingFlagged/26103093/ALLSTREAMS.MDST'),
+  ('17','MagUp',  'XicpToPPiPi','/MC/2017/Beam6500GeV-2017-MagUp-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x62661709/Reco17/Turbo04a-WithTurcal/Stripping29r2p3NoPrescalingFlagged/26103093/ALLSTREAMS.MDST'),
+  ('18','MagUp',  'XicpToPPiPi','/MC/2018/Beam6500GeV-2018-MagUp-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x617d18a4/Reco18/Turbo05-WithTurcal/Stripping34r0p3NoPrescalingFlagged/26103093/ALLSTREAMS.MDST'),
+  ('16','MagDown','XicpToPKK',  '/MC/2016/Beam6500GeV-2016-MagDown-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x6139160F/Reco16/Turbo03a/Stripping28r2p2NoPrescalingFlagged/26103094/ALLSTREAMS.MDST'),
+  ('17','MagDown','XicpToPKK',  '/MC/2017/Beam6500GeV-2017-MagDown-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x62661709/Reco17/Turbo04a-WithTurcal/Stripping29r2p3NoPrescalingFlagged/26103094/ALLSTREAMS.MDST'),
+  ('18','MagDown','XicpToPKK',  '/MC/2018/Beam6500GeV-2018-MagDown-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x617d18a4/Reco18/Turbo05-WithTurcal/Stripping34r0p3NoPrescalingFlagged/26103094/ALLSTREAMS.MDST'),
+  ('16','MagUp',  'XicpToPKK',  '/MC/2016/Beam6500GeV-2016-MagUp-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x6139160F/Reco16/Turbo03a/Stripping28r2p2NoPrescalingFlagged/26103094/ALLSTREAMS.MDST'),
+  ('17','MagUp',  'XicpToPKK',  '/MC/2017/Beam6500GeV-2017-MagUp-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x62661709/Reco17/Turbo04a-WithTurcal/Stripping29r2p3NoPrescalingFlagged/26103094/ALLSTREAMS.MDST'),
+  ('18','MagUp',  'XicpToPKK',  '/MC/2018/Beam6500GeV-2018-MagUp-Nu1.6-25ns-Pythia8/Sim10e-ReDecay01/Trig0x617d18a4/Reco18/Turbo05-WithTurcal/Stripping34r0p3NoPrescalingFlagged/26103094/ALLSTREAMS.MDST'),
+]%}
+
+{%- for year, polarity, channel, bk in datasets_XicpToPHH_mc %}
+20{{year}}_{{polarity}}_{{channel}}_MC:
+  input:
+    bk_query: {{bk}}
+  output: {{channel}}_MC.ROOT
+  options:
+    - {{channel}}_MC.py
+{%- endfor %}
-- 
GitLab


From a8cc7c2b1e1828a3a8cabd32da1965b0df63210f Mon Sep 17 00:00:00 2001
From: chengw <cheng.wang@cern.ch>
Date: Sat, 15 Mar 2025 17:02:53 +0800
Subject: [PATCH 2/3] < update >

---
 run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py   | 4 ++--
 run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py b/run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py
index 4bbe6f3c81..687a994773 100644
--- a/run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py
+++ b/run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py
@@ -236,8 +236,8 @@ DaVinci(
     Lumi            = not isSimulation, 
     Simulation      = isSimulation,
     Turbo           = False,
-    UserAlgorithms  = [seq_XicpToPKK,MCTuple],
-    #RootInTES       = "ALLSTREAMS"
+#    UserAlgorithms  = [seq_XicpToPKK,MCTuple],
+    UserAlgorithms  = [seq_XicpToPKK],
     RootInTES       = "/Event/AllStreams"
     )
 
diff --git a/run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py b/run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py
index d1bb4dd30e..f8dacc8db3 100644
--- a/run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py
+++ b/run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py
@@ -237,8 +237,8 @@ DaVinci(
     Lumi            = not isSimulation, 
     Simulation      = isSimulation,
     Turbo           = False,
-    UserAlgorithms  = [seq_XicpToPPiPi,MCTuple],
-    #RootInTES       = "ALLSTREAMS"
+#    UserAlgorithms  = [seq_XicpToPPiPi,MCTuple],
+    UserAlgorithms  = [seq_XicpToPPiPi],
     RootInTES       = "/Event/AllStreams"
     )
 
-- 
GitLab


From 17d8447ab50bdde07f98b53d6ee1750028f866fc Mon Sep 17 00:00:00 2001
From: chengw <cheng.wang@cern.ch>
Date: Sun, 16 Mar 2025 11:44:38 +0800
Subject: [PATCH 3/3] < Update variable name>

---
 run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py   | 22 +++++++++++-----------
 run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py | 20 ++++++++++----------
 2 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py b/run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py
index 687a994773..f168d82a2e 100644
--- a/run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py
+++ b/run2_MC_XicpTopKK_ppipi/XicpToPKK_MC.py
@@ -132,10 +132,10 @@ Input_XicpToPKK     = AutomaticData( Location = "Phys/{0}/Particles".format(line
 from PhysConf.Selections import TupleSelection
 XicpToPKK_decay     = '[Xi_c+ -> ^p+ ^K+ ^K-]CC'
 XicpToPKK_branches = {
-     "Xicp"    :   "^([Xi_c+ -> p+ K+ K-]CC)",
-     "proton"  :   "[Xi_c+ -> ^p+ K+ K-]CC",
-     "K1"      :   "[Xi_c+ -> p+ ^K+ K-]CC",
-     "K2"      :   "[Xi_c+ -> p+ K+ ^K-]CC",
+     "Xicp"     :   "^([Xi_c+ -> p+ K+ K-]CC)",
+     "Pp"       :   "[Xi_c+ -> ^p+ K+ K-]CC",
+     "Kp"       :   "[Xi_c+ -> p+ ^K+ K-]CC",
+     "Km"       :   "[Xi_c+ -> p+ K+ ^K-]CC",
      } 
 
 Tuple_XicpToPKK     = TupleSelection("Tuple_XicpToPKK",     [ Input_XicpToPKK ],    Decay = XicpToPKK_decay,    Branches = XicpToPKK_branches,      ToolList = [] )
@@ -143,12 +143,12 @@ Tuple_XicpToPKK     = TupleSelection("Tuple_XicpToPKK",     [ Input_XicpToPKK ],
 for dtt in [Tuple_XicpToPKK]:
     # decay tree fitter (DTF)
     dtt.addTool(TupleToolDecay, name="Xicp")
-    dtt.addTool(TupleToolDecay, name="proton")
-    dtt.addTool(TupleToolDecay, name="K1")
-    dtt.addTool(TupleToolDecay, name="K2")
+    dtt.addTool(TupleToolDecay, name="Pp")
+    dtt.addTool(TupleToolDecay, name="Kp")
+    dtt.addTool(TupleToolDecay, name="Km")
     
     #LoKi VARIABLES
-    for particle in [dtt.Xicp,dtt.proton,dtt.K1,dtt.K2]:
+    for particle in [dtt.Xicp,dtt.Pp,dtt.Kp,dtt.Km]:
         particle.addTool(LoKi_particle)
         particle.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_particle"]
     dtt.Xicp.addTool(LoKi_Xicp2PHH)
@@ -202,9 +202,9 @@ MCTuple = MCDecayTreeTuple("MCTruth")
 MCTuple.Decay = "^[Xi_c+ => ^p+ ^K+ ^K-]CC"
 MCTuple.addBranches({
      "Xicp"     :  "^([ Xi_c+ ==> p+ K+ K-]CC)",
-     "proton"   :  "[ Xi_c+ ==> ^p+ K+ K-]CC",
-     "K1"       :  "[ Xi_c+ ==> p+ ^K+ K-]CC",
-     "K2"       :  "[ Xi_c+ ==> p+ K+ ^K-]CC",
+     "Pp"       :  "[ Xi_c+ ==> ^p+ K+ K-]CC",
+     "Kp"       :  "[ Xi_c+ ==> p+ ^K+ K-]CC",
+     "Km"       :  "[ Xi_c+ ==> p+ K+ ^K-]CC",
      })
 MCTuple.ToolList += [
     "MCTupleToolKinematic"
diff --git a/run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py b/run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py
index f8dacc8db3..d326c65efc 100644
--- a/run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py
+++ b/run2_MC_XicpTopKK_ppipi/XicpToPPiPi_MC.py
@@ -134,9 +134,9 @@ from PhysConf.Selections import TupleSelection
 XicpToPPiPi_decay   = '[Xi_c+ -> ^p+ ^pi+ ^pi-]CC'
 XicpToPPiPi_branches = {
      "Xicp"     :   "^([Xi_c+ -> p+ pi+ pi-]CC)",
-     "proton"   :   "[Xi_c+ -> ^p+ pi+ pi-]CC",
-     "pi1"      :   "[Xi_c+ -> p+ ^pi+ pi-]CC",
-     "pi2"      :   "[Xi_c+ -> p+ pi+ ^pi-]CC",
+     "Pp"       :   "[Xi_c+ -> ^p+ pi+ pi-]CC",
+     "Pip"      :   "[Xi_c+ -> p+ ^pi+ pi-]CC",
+     "Pim"      :   "[Xi_c+ -> p+ pi+ ^pi-]CC",
      } 
 
 Tuple_XicpToPPiPi   = TupleSelection("Tuple_XicpToPPiPi",   [ Input_XicpToPPiPi ],  Decay = XicpToPPiPi_decay,  Branches = XicpToPPiPi_branches,    ToolList = [] )
@@ -144,12 +144,12 @@ Tuple_XicpToPPiPi   = TupleSelection("Tuple_XicpToPPiPi",   [ Input_XicpToPPiPi
 for dtt in [Tuple_XicpToPPiPi]:
     # decay tree fitter (DTF)
     dtt.addTool(TupleToolDecay, name="Xicp")
-    dtt.addTool(TupleToolDecay, name="proton")
-    dtt.addTool(TupleToolDecay, name="pi1")
-    dtt.addTool(TupleToolDecay, name="pi2")
+    dtt.addTool(TupleToolDecay, name="Pp")
+    dtt.addTool(TupleToolDecay, name="Pip")
+    dtt.addTool(TupleToolDecay, name="Pim")
     
     #LoKi VARIABLES
-    for particle in [dtt.Xicp,dtt.proton,dtt.pi1,dtt.pi2]:
+    for particle in [dtt.Xicp,dtt.Pp,dtt.Pip,dtt.Pim]:
         particle.addTool(LoKi_particle)
         particle.ToolList+=["LoKi::Hybrid::TupleTool/LoKi_particle"]
     dtt.Xicp.addTool(LoKi_Xicp2PHH)
@@ -203,9 +203,9 @@ MCTuple = MCDecayTreeTuple("MCTruth")
 MCTuple.Decay = "^[Xi_c+ => ^p+ ^pi+ ^pi-]CC"
 MCTuple.addBranches({
      "Xicp"     :  "^([ Xi_c+ ==> p+ pi+ pi-]CC)",
-     "proton"   :  "[ Xi_c+ ==> ^p+ pi+ pi-]CC",
-     "pi1"      :  "[ Xi_c+ ==> p+ ^pi+ pi-]CC",
-     "pi2"      :  "[ Xi_c+ ==> p+ pi+ ^pi-]CC",
+     "Pp"       :  "[ Xi_c+ ==> ^p+ pi+ pi-]CC",
+     "Pip"      :  "[ Xi_c+ ==> p+ ^pi+ pi-]CC",
+     "Pim"      :  "[ Xi_c+ ==> p+ pi+ ^pi-]CC",
      })
 MCTuple.ToolList += [
     "MCTupleToolKinematic"
-- 
GitLab