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