diff --git a/associated_jpsi_etac/DaVinci_MCDTT.py b/associated_jpsi_etac/DaVinci_MCDTT.py
new file mode 100644
index 0000000000000000000000000000000000000000..66cd57f693e398e4e01ff5aa6e01813c5e1843ba
--- /dev/null
+++ b/associated_jpsi_etac/DaVinci_MCDTT.py
@@ -0,0 +1,68 @@
+# Processes the event with no selection, for acceptance efficiency
+
+def fillMCTuple(MCTuple):
+
+    from Configurables import TupleToolMCTruth
+    MCTruth = TupleToolMCTruth("MCTruth")
+    MCTuple.addTool(MCTruth)
+    MCTruth.ToolList =  ["MCTupleToolAngles"
+                         , "MCTupleToolHierarchy"
+                         , "MCTupleToolKinematic"
+                         , "MCTupleToolReconstructed"
+                         , "MCTupleToolPID"
+                         , "MCTupleToolDecayType"
+                         , "MCTupleToolPrompt"
+                         ]
+
+    from LoKiMC.functions import MCMOTHER, MCVFASPF, MCPRIMARY
+    from Configurables import LoKi__Hybrid__MCTupleTool
+    MCTuple.addTool( LoKi__Hybrid__MCTupleTool, name = "MCLoKiHybrid" )
+    MCTuple.ToolList += [ "LoKi::Hybrid::MCTupleTool/MCLoKiHybrid" ]
+    MCTuple.MCLoKiHybrid.Preambulo = [ "from LoKiCore.functions import switch" ]
+    MCTuple.MCLoKiHybrid.Variables = {
+        "TRUEID"   : "MCID",
+        "TRUEY"    : "MCY",
+        "TRUEETA"  : "MCETA",
+        "TRUEM"     : "MCM",
+        "MCVZ"      : "MCVFASPF(MCVZ)",
+        "TRUEETA"   : "MCETA",
+        "TRUEPHI"   : "MCPHI",
+        "TRUETHETA" : "MCTHETA",
+        "TRUE_Tz"   : "(3.3)*(MCMOTHER(MCVFASPF(MCVZ), 0)-MCVFASPF(MCVZ))*MCM/MCPZ",
+        "MC_ISPRIMARY"      : "MCVFASPF(switch(MCPRIMARY,1,0))"
+        }
+
+    from Configurables import LoKi__Hybrid__EvtTupleTool
+    MCTuple.addTool( LoKi__Hybrid__EvtTupleTool, name = "ELoKiHybrid" )
+    MCTuple.ToolList += [ "LoKi::Hybrid::EvtTupleTool/ELoKiHybrid" ]
+    MCTuple.ELoKiHybrid.Preambulo = [ "from LoKiCore.basic import LHCb" ]
+    MCTuple.ELoKiHybrid.VOID_Variables = {
+        "nSPDHits" : "RECSUMMARY( LHCb.RecSummary.nSPDhits, -1, '/Event/Rec/Summary', False )"
+    }
+
+    return MCTuple
+
+def build_algo_MC(parent, parent_name, child1, child2, child_name):
+    from Gaudi.Configuration import *
+    from LHCbKernel.Configuration import *
+    from DaVinci.Configuration import *
+    from DecayTreeTuple.Configuration import *
+    from Configurables import DaVinci
+
+    Decay = "{} -> ^{} ^{}".format(parent, child1, child2)
+    Branches = {
+        parent_name: "{} -> {} {}".format(parent, child1, child2),
+        "{}P".format(child_name): "{} -> ^{} {}".format(parent, child1, child2),
+        "{}M".format(child_name): "{} -> {} ^{}".format(parent, child1, child2)
+    }
+
+    from Configurables import MCDecayTreeTuple
+    MCTuple = MCDecayTreeTuple("MCDecayTreeTuple")
+    MCTuple.Decay    = Decay
+    MCTuple.Branches = Branches
+
+    fillMCTuple(MCTuple)
+    
+    DaVinci().UserAlgorithms += [MCTuple]
+    from Configurables import MessageSvc
+    MessageSvc().setWarning = [ 'RFileCnv' ]
\ No newline at end of file
diff --git a/associated_jpsi_etac/DaVinci_MCDTT_Jpsi.py b/associated_jpsi_etac/DaVinci_MCDTT_Jpsi.py
new file mode 100644
index 0000000000000000000000000000000000000000..f98592add55c86df2e17eb78844389fdc66817af
--- /dev/null
+++ b/associated_jpsi_etac/DaVinci_MCDTT_Jpsi.py
@@ -0,0 +1,3 @@
+from associated_jpsi_etac.DaVinci_MCDTT import build_algo_MC
+
+build_algo_MC("J/psi(1S)", "Jpsi", "mu+", "mu-", "mu")
\ No newline at end of file
diff --git a/associated_jpsi_etac/DaVinci_MCDTT_Jpsi_pp.py b/associated_jpsi_etac/DaVinci_MCDTT_Jpsi_pp.py
new file mode 100644
index 0000000000000000000000000000000000000000..9d1125eac4fc886d9f50fc9745a563681df2d039
--- /dev/null
+++ b/associated_jpsi_etac/DaVinci_MCDTT_Jpsi_pp.py
@@ -0,0 +1,3 @@
+from associated_jpsi_etac.DaVinci_MCDTT import build_algo_MC
+
+build_algo_MC("J/psi(1S)", "Jpsi_pp", "p+", "p~-", "p")
\ No newline at end of file
diff --git a/associated_jpsi_etac/DaVinci_MCDTT_etac.py b/associated_jpsi_etac/DaVinci_MCDTT_etac.py
new file mode 100644
index 0000000000000000000000000000000000000000..33730651205b918a025294dfefd6765a03ed132d
--- /dev/null
+++ b/associated_jpsi_etac/DaVinci_MCDTT_etac.py
@@ -0,0 +1,3 @@
+from associated_jpsi_etac.DaVinci_MCDTT import build_algo_MC
+
+build_algo_MC("J/psi(1S)", "etac", "p+", "p~-", "p")
\ No newline at end of file
diff --git a/associated_jpsi_etac/DaVinci_MC_Jpsi_pp.py b/associated_jpsi_etac/DaVinci_MC_Jpsi_pp.py
new file mode 100644
index 0000000000000000000000000000000000000000..bc9dc9e09e61935eb12b928db94566a08a64f34e
--- /dev/null
+++ b/associated_jpsi_etac/DaVinci_MC_Jpsi_pp.py
@@ -0,0 +1,187 @@
+from os import environ
+from GaudiKernel.SystemOfUnits import *
+from Gaudi.Configuration import *
+from Configurables import DaVinci
+
+from DecayTreeTuple.Configuration import *
+from Configurables import GaudiSequencer, CombineParticles
+from Configurables import DecayTreeTuple, EventTuple, TupleToolTrigger, TupleToolTISTOS,FilterDesktop, TupleToolPrimaries 
+from Configurables import BackgroundCategory, TupleToolDecay, TupleToolVtxIsoln,TupleToolPid,EventCountHisto,TupleToolRecoStats
+from Configurables import LoKi__Hybrid__TupleTool, TupleToolVeto
+from Configurables import LoKi__Hybrid__EvtTupleTool
+from Configurables import ReadHltReport, FilterInTrees
+
+from PhysSelPython.Wrappers import AutomaticData, Selection, SelectionSequence, DataOnDemand, MergedSelection
+from PhysConf.Selections import CombineSelection, FilterSelection
+
+from PhysConf.Selections import AutomaticData, MomentumScaling, TupleSelection
+from Configurables import DaVinci, CondDB
+
+pPFilter = FilterInTrees("pPFilter", Code = "(PIDp > 0.0)& (Q > 0.0)& (PROBNNp > 0.2)& (TRGHOSTPROB<0.4)& (PT > 100*MeV)")
+pPSel = Selection(
+    "pPSel",
+    Algorithm=pPFilter,
+    RequiredSelections=[DataOnDemand(Location = "Phys/StdTightANNProtons/Particles")])
+
+pMFilter = FilterInTrees("pMFilter", Code = "(PIDp > 0.0)& (Q < 0.0)& (PROBNNp > 0.2)& (TRGHOSTPROB<0.4)& (PT > 100*MeV)")
+pMSel = Selection(
+    "pMSel",
+    Algorithm=pMFilter,
+    RequiredSelections=[DataOnDemand(Location = "Phys/StdTightANNProtons/Particles")])
+
+Jpsi = CombineParticles(
+    "Jpsi",
+    DecayDescriptor="J/psi(1S) -> p+ p~-",
+    MotherCut="(VFASPF(VCHI2PDOF) < 10)& (ADMASS('eta_c(1S)') < 300*MeV)",
+    DaughtersCuts={'': 'ALL', 'p+': 'ALL', 'p~-': 'ALL'},
+    CombinationCut="(AALL)& (ACHI2DOCA(1,2)<20)",)
+JpsiSel = Selection(
+    "JpsiSel",
+    Algorithm=Jpsi,
+    RequiredSelections=[pPSel, pMSel])
+
+JpsiDecay = "J/psi(1S) -> ^p+ ^p~-"
+JpsiBranches = {
+    "Jpsi_pp"    :  "J/psi(1S) -> p+ p~-"
+    ,"pP"     :  "J/psi(1S) -> ^p+ p~-"
+    ,"pM"     :  "J/psi(1S) -> p+ ^p~-"
+}
+
+JpsiTuple = TupleSelection("JpsiTuple", [JpsiSel], Decay = JpsiDecay, Branches = JpsiBranches, ReFitPVs = True)
+
+tl= [   "TupleToolKinematic", 
+        "TupleToolPid",
+        "TupleToolEventInfo",
+        "TupleToolTrackInfo",
+        "TupleToolRecoStats",
+        "TupleToolGeometry", 
+        "TupleToolPrimaries", 
+        "TupleToolDira", 
+        "TupleToolAngles",
+        "TupleToolMCBackgroundInfo",
+]
+JpsiTuple.ToolList += tl
+
+triglist = [
+                "L0MuonDecision",
+                "L0MuonHighDecision",
+                "L0MuonEWDecision",
+                "L0DiMuonDecision",
+                "L0MuonNoSPDDecision",
+                "L0HadronDecision",
+                "L0SPDDecision",
+                "L0GlobalDecision",
+
+                "Hlt1TrackMVADecision",
+                "Hlt1TwoTrackMVADecision",
+                "Hlt1TrackMVALooseDecision",
+                "Hlt1TwoTrackMVALooseDecision",
+                "Hlt1TrackMuonDecision",
+                "Hlt1TrackMuonMVADecision",
+                "Hlt1DiMuonHighMassDecision",
+                "Hlt1DiMuonLowMassDecision",
+                "Hlt1SingleMuonHighPTDecision",
+                "Hlt1DiMuonNoIPDecision",
+                "Hlt1TrackAllL0Decision",
+                "Hlt1LowMultVeloCut_HadronsDecision",
+                "Hlt1LowMultPassThroughDecision",
+                "Hlt1DiProtonDecision",
+                "Hlt1DiProtonHighDecision",
+
+                "Hlt2SingleMuonHighPTDecision",
+                "Hlt2EWSingleMuonVHighPtDecision",
+                "Hlt2EWDiMuonDY4Decision",
+                "Hlt2EWDiMuonDY1Decision",
+                "Hlt2EWDiMuonDYSSDecision",
+                "Hlt2DiMuonJPsiDecision",
+                "Hlt2DiMuonJPsiHighPTDecision",
+                "Hlt2DiMuonJPsiTurboDecision",
+                "Hlt2Topo2BodyDecision",
+                "Hlt2Topo3BodyDecision",
+                "Hlt2Topo4BodyDecision",
+                "Hlt2TopoMu2BodyDecision",
+                "Hlt2TopoMu3BodyDecision",
+                "Hlt2TopoMu4BodyDecision",
+                "Hlt2CcDiHadronDiProtonDecision",
+                "Hlt2CcDiHadronDiProtonHighDecision",
+                "Hlt2CcDiHadronDiProtonLowMultDecision",
+]
+from Configurables import TupleToolTISTOS, TupleToolDecay
+from Configurables import TriggerTisTos
+
+JpsiTuple.addTool(TupleToolDecay, name='Jpsi')
+JpsiTuple.Jpsi.ToolList += ["TupleToolTISTOS/TupleToolTISTOSForJpsi"]
+JpsiTuple.Jpsi.addTool(TupleToolTISTOS, name="TupleToolTISTOSForJpsi")
+JpsiTuple.Jpsi.TupleToolTISTOSForJpsi.Verbose = True
+JpsiTuple.Jpsi.TupleToolTISTOSForJpsi.TriggerList = triglist
+
+MCTruth = JpsiTuple.addTool("TupleToolMCTruth")
+MCTruth.ToolList = [
+    "MCTupleToolAngles",
+    "MCTupleToolHierarchy",
+    "MCTupleToolKinematic",
+    "MCTupleToolPID",
+    "MCTupleToolDecayType",
+    "MCTupleToolPrompt",
+]
+
+from Configurables import LoKi__Hybrid__MCTupleTool
+
+MCTruth.addTool(LoKi__Hybrid__MCTupleTool, name="MCLoKiHybrid")
+MCTruth.ToolList += ["LoKi::Hybrid::MCTupleTool/MCLoKiHybrid"]
+MCTruth.MCLoKiHybrid.Preambulo = ["from LoKiCore.functions import switch"]
+MCTruth.MCLoKiHybrid.Variables = {
+    "TRUEM": "MCM",
+    "MCVZ": "MCVFASPF(MCVZ)",
+    "TRUEETA": "MCETA",
+    "TRUEPHI": "MCPHI",
+    "TRUEY": "MCY",
+    "TRUETHETA": "MCTHETA",
+    "MC_ISPRIMARY": "MCVFASPF(switch(MCPRIMARY,1,0))",
+}
+
+# Loki Jpsi
+Loki_Jpsi = JpsiTuple.Jpsi.addTupleTool('LoKi::Hybrid::TupleTool/LoKi_EvtTuple_Jpsi')
+Loki_Jpsi.Variables = {
+    "LOKI_FDCHI2"          : "BPVVDCHI2",
+    "LOKI_FDS"             : "BPVDLS",
+    "LOKI_DIRA"            : "BPVDIRA",
+    "LOKI_BPVCORRM"        : "BPVCORRM",
+    "DOCA"                 : "DOCA(1,2)",
+    }
+# Loki All
+Loki_All = JpsiTuple.addTupleTool('LoKi::Hybrid::TupleTool/LoKi_EvtTuple_All')
+Loki_All.Variables = {
+    "ETA": "ETA",
+    "Y"  : "Y",
+    "PHI"  : "PHI",
+    "perr2" : "PERR2",
+    "IPPV" : "MIPCHI2DV(PRIMARY)"
+    }
+
+DTF_Jpsi_PV = JpsiTuple.Jpsi.addTupleTool('TupleToolDecayTreeFitter/JpsiPV')
+DTF_Jpsi_PV.constrainToOriginVertex = True
+DTF_Jpsi_PV.Verbose = True
+DTF_Jpsi_PV.UpdateDaughters = True
+
+tuple_seq = SelectionSequence('Jpsi_SelSeq', JpsiTuple)
+
+from Configurables import (
+    CheckPV,
+    DaVinci,
+    GaudiSequencer
+)
+
+seq = GaudiSequencer('TupleSeq')
+seq.IgnoreFilterPassed = True
+seq.Members += [tuple_seq.sequence()]
+
+main_seq = GaudiSequencer('MainSeq')
+main_seq.Members = [
+    CheckPV(),
+    seq
+]
+DaVinci().UserAlgorithms += [main_seq]
+
+from Configurables import MessageSvc
+MessageSvc().setWarning = [ 'RFileCnv' ]
\ No newline at end of file
diff --git a/associated_jpsi_etac/__init__.py b/associated_jpsi_etac/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/associated_jpsi_etac/info.yaml b/associated_jpsi_etac/info.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f154f50d9779d130cdcead2360c1e559b317cd99
--- /dev/null
+++ b/associated_jpsi_etac/info.yaml
@@ -0,0 +1,51 @@
+defaults:
+  wg: BandQ
+  automatically_configure: yes
+  turbo: no
+  inform:
+    - raoul.henderson@cern.ch
+
+{%- set info_year_MC = [
+  (15, '15a', '24r2', 'v44r10p5', 'Trig0x411400a2', 'x86_64-centos7-gcc7-opt', 'Turbo02', '09l'),
+  (16, '16', '28r2', 'v44r10p5', 'Trig0x6139160F', 'x86_64-centos7-gcc7-opt', 'Turbo03a', '09l'),
+  (17, '17', '29r2', 'v42r9p2', 'Trig0x62661709', 'x86_64-centos7-gcc62-opt', 'Turbo04a-WithTurcal', '09l'),
+  (18, '18', '34', 'v44r4', 'Trig0x617d18a4', 'x86_64+avx2+fma-centos7-gcc62-opt', 'Turbo05-WithTurcal', '09l'),
+]%}
+
+{%- for year, reco, strip, DVver, trig, plat, turbo, sim in info_year_MC %}
+  {%- for polarity in ['MagDown', 'MagUp'] %}
+
+20{{year}}_{{polarity}}_MC_jpsi_pp_v2:
+  application: DaVinci/{{DVver}}@{{plat}}
+  input:
+    bk_query: /MC/20{{year}}/Beam6500GeV-20{{year}}-{{polarity}}-Nu1.6-25ns-Pythia8/Sim{{sim}}/{{trig}}/Reco{{reco}}/{{turbo}}/Stripping{{strip}}NoPrescalingFlagged/24102022/ALLSTREAMS.DST
+  options:
+    - DaVinci_MC_Jpsi_pp.py
+  output: JPSI_MC_PP.ROOT
+
+20{{year}}_{{polarity}}_MC_jpsi_pp_MCDTT:
+  application: DaVinci/{{DVver}}@{{plat}}
+  input:
+    bk_query: /MC/20{{year}}/Beam6500GeV-20{{year}}-{{polarity}}-Nu1.6-25ns-Pythia8/Sim{{sim}}/{{trig}}/Reco{{reco}}/{{turbo}}/Stripping{{strip}}NoPrescalingFlagged/24102022/ALLSTREAMS.DST
+  options:
+    - DaVinci_MCDTT_Jpsi_pp.py
+  output: JPSI_MCDTT_PP.ROOT
+
+20{{year}}_{{polarity}}_MC_jpsi_MCDTT:
+  application: DaVinci/{{DVver}}@{{plat}}
+  input:
+    bk_query: /MC/20{{year}}/Beam6500GeV-20{{year}}-{{polarity}}-Nu1.6-25ns-Pythia8/Sim{{sim}}/{{trig}}/Reco{{reco}}/{{turbo}}/Stripping{{strip}}NoPrescalingFlagged/24142002/ALLSTREAMS.DST
+  options:
+    - DaVinci_MCDTT_Jpsi.py
+  output: JPSI_MCDTT.ROOT
+
+20{{year}}_{{polarity}}_MC_etac_MCDTT:
+  application: DaVinci/{{DVver}}@{{plat}}
+  input:
+    bk_query: /MC/20{{year}}/Beam6500GeV-20{{year}}-{{polarity}}-Nu1.6-25ns-Pythia8/Sim{{sim}}/{{trig}}/Reco{{reco}}/{{turbo}}/Stripping{{strip}}NoPrescalingFlagged/24102021/ALLSTREAMS.DST
+  options:
+    - DaVinci_MCDTT_etac.py
+  output: ETAC_MCDTT.ROOT
+
+  {%- endfor %}
+{%- endfor %}
\ No newline at end of file