From b4ef5022d6184d920eae92cf763b1242594b56b4 Mon Sep 17 00:00:00 2001
From: chengw <cheng.wang@cern.ch>
Date: Wed, 12 Mar 2025 22:49:47 +0800
Subject: [PATCH 1/5] < Ap Run2 MC XicpToPHH >

---
 run2_MC_XicpToPHH/XicpToPKK_MC.py    | 242 ++++++++++++++++++++++++++
 run2_MC_XicpToPHH/XicpToPKmPip_MC.py | 244 +++++++++++++++++++++++++++
 run2_MC_XicpToPHH/XicpToPPiPi_MC.py  | 243 ++++++++++++++++++++++++++
 run2_MC_XicpToPHH/info.yaml          |  36 ++++
 4 files changed, 765 insertions(+)
 create mode 100644 run2_MC_XicpToPHH/XicpToPKK_MC.py
 create mode 100644 run2_MC_XicpToPHH/XicpToPKmPip_MC.py
 create mode 100644 run2_MC_XicpToPHH/XicpToPPiPi_MC.py
 create mode 100644 run2_MC_XicpToPHH/info.yaml

diff --git a/run2_MC_XicpToPHH/XicpToPKK_MC.py b/run2_MC_XicpToPHH/XicpToPKK_MC.py
new file mode 100644
index 0000000000..b34b362316
--- /dev/null
+++ b/run2_MC_XicpToPHH/XicpToPKK_MC.py
@@ -0,0 +1,242 @@
+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"
+    )
+
diff --git a/run2_MC_XicpToPHH/XicpToPKmPip_MC.py b/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
new file mode 100644
index 0000000000..6844b1e37d
--- /dev/null
+++ b/run2_MC_XicpToPHH/XicpToPKmPip_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_XicpToPKmPip   = "Hlt2CharmHadXicpToPpKmPipTurbo"
+
+from PhysConf.Selections import AutomaticData
+Input_XicpToPKmPip  = AutomaticData( Location = "{0}/Particles".format(line_XicpToPKmPip))
+
+################################################################################
+from PhysConf.Selections import TupleSelection
+# The definition of the line named Hlt2CharmHadXicpToPpKmPipTurbo is [Lambda_c+ -> ^p+ ^K- ^pi+] during 2016-2018. But it is still a proper Xi_c+.
+XicpToPKmPip_decay  = '[Lambda_c+ -> ^p+ ^K- ^pi+]CC'
+
+XicpToPKmPip_branches = {
+     "Xicp" :   "^([Lambda_c+ -> p+ K- pi+]CC)",
+     "Pp"   :   "[Lambda_c+ -> ^p+ K- pi+]CC",
+     "Km"   :   "[Lambda_c+ -> p+ ^K- pi+]CC",
+     "Pip"  :   "[Lambda_c+ -> p+ K- ^pi+]CC",
+     } 
+
+Tuple_XicpToPKmPip  = TupleSelection("Tuple_XicpToPKmPip",  [ Input_XicpToPKmPip ], Decay = XicpToPKmPip_decay, Branches = XicpToPKmPip_branches,   ToolList = [] )
+################################################################################
+for dtt in [Tuple_XicpToPKmPip]:
+    # decay tree fitter (DTF)
+    dtt.addTool(TupleToolDecay, name="Xicp")
+    dtt.addTool(TupleToolDecay, name="Pp")
+    dtt.addTool(TupleToolDecay, name="Km")
+    dtt.addTool(TupleToolDecay, name="Pip")
+    
+    #LoKi VARIABLES
+    for particle in [dtt.Xicp,dtt.Pp,dtt.Km,dtt.Pip]:
+        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 = ["Lambda_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_XicpToPKmPip]:
+
+    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 = "^[Lambda_c+ => ^p+ ^K- ^pi+]CC"
+MCTuple.addBranches({
+     "Xicp"     :  "^([ Lambda_c+ ==> p+ K- pi+]CC)",
+     "Pp"       :  "[ Lambda_c+ ==> ^p+ K- pi+]CC",
+     "Km"       :  "[ Lambda_c+ ==> p+ ^K- pi+]CC",
+     "Pip"      :  "[ Lambda_c+ ==> p+ K- ^pi+]CC",
+     })
+MCTuple.ToolList += [
+    "MCTupleToolKinematic"
+    ,"MCTupleToolPrimaries"
+    ,"MCTupleToolAngles"
+    ,"MCTupleToolHierarchy"
+    ,"TupleToolRecoStats"
+    ,"MCTupleToolDecayType"
+    ,"MCTupleToolPID"
+    ,"MCTupleToolPrompt"
+    ]
+
+
+################################################################################
+from PhysConf.Selections import SelectionSequence
+seq_XicpToPKmPip          = SelectionSequence('seq_XicpToPKmPip',Tuple_XicpToPKmPip).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,
+    UserAlgorithms  = [seq_XicpToPKmPip,MCTuple],
+    Turbo           = True,
+    RootInTES       = "ALLSTREAMS"
+    )
+
diff --git a/run2_MC_XicpToPHH/XicpToPPiPi_MC.py b/run2_MC_XicpToPHH/XicpToPPiPi_MC.py
new file mode 100644
index 0000000000..3b7b243210
--- /dev/null
+++ b/run2_MC_XicpToPHH/XicpToPPiPi_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_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"
+    )
+
diff --git a/run2_MC_XicpToPHH/info.yaml b/run2_MC_XicpToPHH/info.yaml
new file mode 100644
index 0000000000..c9654d2921
--- /dev/null
+++ b/run2_MC_XicpToPHH/info.yaml
@@ -0,0 +1,36 @@
+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'),
+  ('16','MagDown','XicpToPKmPip','/MC/2016/Beam6500GeV-2016-MagDown-Nu1.6-25ns-Pythia8/Sim09k/Trig0x6139160F/Reco16/Turbo03a/Stripping28r1NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
+  ('17','MagDown','XicpToPKmPip','/MC/2017/Beam6500GeV-2017-MagDown-Nu1.6-25ns-Pythia8/Sim09k/Trig0x62661709/Reco17/Turbo04a-WithTurcal/Stripping29r2NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
+  ('18','MagDown','XicpToPKmPip','/MC/2018/Beam6500GeV-2018-MagDown-Nu1.6-25ns-Pythia8/Sim09k/Trig0x617d18a4/Reco18/Turbo05-WithTurcal/Stripping34NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
+  ('16','MagUp',  'XicpToPKmPip','/MC/2016/Beam6500GeV-2016-MagUp-Nu1.6-25ns-Pythia8/Sim09k/Trig0x6139160F/Reco16/Turbo03a/Stripping28r1NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
+  ('17','MagUp',  'XicpToPKmPip','/MC/2017/Beam6500GeV-2017-MagUp-Nu1.6-25ns-Pythia8/Sim09k/Trig0x62661709/Reco17/Turbo04a-WithTurcal/Stripping29r2NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
+  ('18','MagUp',  'XicpToPKmPip','/MC/2018/Beam6500GeV-2018-MagUp-Nu1.6-25ns-Pythia8/Sim09k/Trig0x617d18a4/Reco18/Turbo05-WithTurcal/Stripping34NoPrescalingFlagged/26103092/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 22a88a991d61a5448da2dcf28d2058e07ffc2cdd Mon Sep 17 00:00:00 2001
From: chengw <cheng.wang@cern.ch>
Date: Thu, 13 Mar 2025 12:08:59 +0800
Subject: [PATCH 2/5] < try to fix bug>

---
 run2_MC_XicpToPHH/XicpToPKK_MC.py    | 3 ++-
 run2_MC_XicpToPHH/XicpToPKmPip_MC.py | 3 ++-
 run2_MC_XicpToPHH/XicpToPPiPi_MC.py  | 3 ++-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/run2_MC_XicpToPHH/XicpToPKK_MC.py b/run2_MC_XicpToPHH/XicpToPKK_MC.py
index b34b362316..4bbe6f3c81 100644
--- a/run2_MC_XicpToPHH/XicpToPKK_MC.py
+++ b/run2_MC_XicpToPHH/XicpToPKK_MC.py
@@ -237,6 +237,7 @@ DaVinci(
     Simulation      = isSimulation,
     Turbo           = False,
     UserAlgorithms  = [seq_XicpToPKK,MCTuple],
-    RootInTES       = "ALLSTREAMS"
+    #RootInTES       = "ALLSTREAMS"
+    RootInTES       = "/Event/AllStreams"
     )
 
diff --git a/run2_MC_XicpToPHH/XicpToPKmPip_MC.py b/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
index 6844b1e37d..776905678e 100644
--- a/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
+++ b/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
@@ -239,6 +239,7 @@ DaVinci(
     Simulation      = isSimulation,
     UserAlgorithms  = [seq_XicpToPKmPip,MCTuple],
     Turbo           = True,
-    RootInTES       = "ALLSTREAMS"
+#    RootInTES       = "ALLSTREAMS"
+    RootInTES       = "/Event/AllStreams"
     )
 
diff --git a/run2_MC_XicpToPHH/XicpToPPiPi_MC.py b/run2_MC_XicpToPHH/XicpToPPiPi_MC.py
index 3b7b243210..d1bb4dd30e 100644
--- a/run2_MC_XicpToPHH/XicpToPPiPi_MC.py
+++ b/run2_MC_XicpToPHH/XicpToPPiPi_MC.py
@@ -238,6 +238,7 @@ DaVinci(
     Simulation      = isSimulation,
     Turbo           = False,
     UserAlgorithms  = [seq_XicpToPPiPi,MCTuple],
-    RootInTES       = "ALLSTREAMS"
+    #RootInTES       = "ALLSTREAMS"
+    RootInTES       = "/Event/AllStreams"
     )
 
-- 
GitLab


From a09978c5ddbb54c33afcfade69f02b816dc2ecc8 Mon Sep 17 00:00:00 2001
From: chengw <cheng.wang@cern.ch>
Date: Thu, 13 Mar 2025 15:43:24 +0800
Subject: [PATCH 3/5] <Try to fix Xicp To pKmPip>

---
 run2_MC_XicpToPHH/XicpToPKmPip_MC.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/run2_MC_XicpToPHH/XicpToPKmPip_MC.py b/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
index 776905678e..3337a0ae9b 100644
--- a/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
+++ b/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
@@ -240,6 +240,7 @@ DaVinci(
     UserAlgorithms  = [seq_XicpToPKmPip,MCTuple],
     Turbo           = True,
 #    RootInTES       = "ALLSTREAMS"
-    RootInTES       = "/Event/AllStreams"
+#    RootInTES       = "/Event/AllStreams"
+    RootInTES       = "/Event/Turbo"
     )
 
-- 
GitLab


From 5e6529c8a1af6b92fe9aeb24bebc1997b6c242d8 Mon Sep 17 00:00:00 2001
From: chengw <cheng.wang@cern.ch>
Date: Fri, 14 Mar 2025 22:26:19 +0800
Subject: [PATCH 4/5] <Try to fix XicpToPKmPip>

---
 run2_MC_XicpToPHH/XicpToPKmPip_MC.py | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/run2_MC_XicpToPHH/XicpToPKmPip_MC.py b/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
index 3337a0ae9b..c1eba83d14 100644
--- a/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
+++ b/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
@@ -224,14 +224,14 @@ MCTuple.ToolList += [
 from PhysConf.Selections import SelectionSequence
 seq_XicpToPKmPip          = SelectionSequence('seq_XicpToPKmPip',Tuple_XicpToPKmPip).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
+#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'         , 
-- 
GitLab


From c0a19eaeea91fba81f63903aecc777eb733de25f Mon Sep 17 00:00:00 2001
From: chengw <cheng.wang@cern.ch>
Date: Mon, 17 Mar 2025 14:26:54 +0800
Subject: [PATCH 5/5] Update XicpToPKmPip

---
 run2_MC_XicpToPHH/XicpToPKK_MC.py    | 243 --------------------------
 run2_MC_XicpToPHH/XicpToPKmPip_MC.py |  14 +-
 run2_MC_XicpToPHH/XicpToPPiPi_MC.py  | 244 ---------------------------
 run2_MC_XicpToPHH/info.yaml          |  34 ++--
 4 files changed, 14 insertions(+), 521 deletions(-)
 delete mode 100644 run2_MC_XicpToPHH/XicpToPKK_MC.py
 delete mode 100644 run2_MC_XicpToPHH/XicpToPPiPi_MC.py

diff --git a/run2_MC_XicpToPHH/XicpToPKK_MC.py b/run2_MC_XicpToPHH/XicpToPKK_MC.py
deleted file mode 100644
index 4bbe6f3c81..0000000000
--- a/run2_MC_XicpToPHH/XicpToPKK_MC.py
+++ /dev/null
@@ -1,243 +0,0 @@
-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_XicpToPHH/XicpToPKmPip_MC.py b/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
index c1eba83d14..304e2348cf 100644
--- a/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
+++ b/run2_MC_XicpToPHH/XicpToPKmPip_MC.py
@@ -224,22 +224,14 @@ MCTuple.ToolList += [
 from PhysConf.Selections import SelectionSequence
 seq_XicpToPKmPip          = SelectionSequence('seq_XicpToPKmPip',Tuple_XicpToPKmPip).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'         , 
+    InputType       = 'MDST', 
     Lumi            = not isSimulation, 
     Simulation      = isSimulation,
-    UserAlgorithms  = [seq_XicpToPKmPip,MCTuple],
+#    UserAlgorithms  = [seq_XicpToPKmPip,MCTuple],
+    UserAlgorithms  = [seq_XicpToPKmPip],
     Turbo           = True,
-#    RootInTES       = "ALLSTREAMS"
 #    RootInTES       = "/Event/AllStreams"
     RootInTES       = "/Event/Turbo"
     )
diff --git a/run2_MC_XicpToPHH/XicpToPPiPi_MC.py b/run2_MC_XicpToPHH/XicpToPPiPi_MC.py
deleted file mode 100644
index d1bb4dd30e..0000000000
--- a/run2_MC_XicpToPHH/XicpToPPiPi_MC.py
+++ /dev/null
@@ -1,244 +0,0 @@
-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_XicpToPHH/info.yaml b/run2_MC_XicpToPHH/info.yaml
index c9654d2921..b98b5487de 100644
--- a/run2_MC_XicpToPHH/info.yaml
+++ b/run2_MC_XicpToPHH/info.yaml
@@ -5,32 +5,20 @@ defaults:
   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'),
-  ('16','MagDown','XicpToPKmPip','/MC/2016/Beam6500GeV-2016-MagDown-Nu1.6-25ns-Pythia8/Sim09k/Trig0x6139160F/Reco16/Turbo03a/Stripping28r1NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
-  ('17','MagDown','XicpToPKmPip','/MC/2017/Beam6500GeV-2017-MagDown-Nu1.6-25ns-Pythia8/Sim09k/Trig0x62661709/Reco17/Turbo04a-WithTurcal/Stripping29r2NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
-  ('18','MagDown','XicpToPKmPip','/MC/2018/Beam6500GeV-2018-MagDown-Nu1.6-25ns-Pythia8/Sim09k/Trig0x617d18a4/Reco18/Turbo05-WithTurcal/Stripping34NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
-  ('16','MagUp',  'XicpToPKmPip','/MC/2016/Beam6500GeV-2016-MagUp-Nu1.6-25ns-Pythia8/Sim09k/Trig0x6139160F/Reco16/Turbo03a/Stripping28r1NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
-  ('17','MagUp',  'XicpToPKmPip','/MC/2017/Beam6500GeV-2017-MagUp-Nu1.6-25ns-Pythia8/Sim09k/Trig0x62661709/Reco17/Turbo04a-WithTurcal/Stripping29r2NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
-  ('18','MagUp',  'XicpToPKmPip','/MC/2018/Beam6500GeV-2018-MagUp-Nu1.6-25ns-Pythia8/Sim09k/Trig0x617d18a4/Reco18/Turbo05-WithTurcal/Stripping34NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
+{%- set datasets_XicpToPKmPip_mc = [
+  ('16','MagDown','/MC/2016/Beam6500GeV-2016-MagDown-Nu1.6-25ns-Pythia8/Sim09k/Trig0x6139160F/Reco16/Turbo03a/Stripping28r1NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
+  ('17','MagDown','/MC/2017/Beam6500GeV-2017-MagDown-Nu1.6-25ns-Pythia8/Sim09k/Trig0x62661709/Reco17/Turbo04a-WithTurcal/Stripping29r2NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
+  ('18','MagDown','/MC/2018/Beam6500GeV-2018-MagDown-Nu1.6-25ns-Pythia8/Sim09k/Trig0x617d18a4/Reco18/Turbo05-WithTurcal/Stripping34NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
+  ('16','MagUp',  '/MC/2016/Beam6500GeV-2016-MagUp-Nu1.6-25ns-Pythia8/Sim09k/Trig0x6139160F/Reco16/Turbo03a/Stripping28r1NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
+  ('17','MagUp',  '/MC/2017/Beam6500GeV-2017-MagUp-Nu1.6-25ns-Pythia8/Sim09k/Trig0x62661709/Reco17/Turbo04a-WithTurcal/Stripping29r2NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
+  ('18','MagUp',  '/MC/2018/Beam6500GeV-2018-MagUp-Nu1.6-25ns-Pythia8/Sim09k/Trig0x617d18a4/Reco18/Turbo05-WithTurcal/Stripping34NoPrescalingFlagged/26103092/ALLSTREAMS.MDST'),
 ]%}
 
-{%- for year, polarity, channel, bk in datasets_XicpToPHH_mc %}
-20{{year}}_{{polarity}}_{{channel}}_MC:
+{%- for year, polarity,bk in datasets_XicpToPKmPip_mc %}
+20{{year}}_{{polarity}}_XicpToPKmPip_MC:
   input:
     bk_query: {{bk}}
-  output: {{channel}}_MC.ROOT
+  output: XicpToPKmPip_MC.ROOT
   options:
-    - {{channel}}_MC.py
+    - XicpToPKmPip_MC.py
 {%- endfor %}
-- 
GitLab