diff --git a/run2_MC_XicpToPHH/XicpToPKmPip_MC.py b/run2_MC_XicpToPHH/XicpToPKmPip_MC.py new file mode 100644 index 0000000000000000000000000000000000000000..304e2348cf907d3be145b79ef3513b57e4d1253b --- /dev/null +++ b/run2_MC_XicpToPHH/XicpToPKmPip_MC.py @@ -0,0 +1,238 @@ +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() + +################################################################################ +DaVinci( + InputType = 'MDST', + Lumi = not isSimulation, + Simulation = isSimulation, +# UserAlgorithms = [seq_XicpToPKmPip,MCTuple], + UserAlgorithms = [seq_XicpToPKmPip], + Turbo = True, +# RootInTES = "/Event/AllStreams" + RootInTES = "/Event/Turbo" + ) + diff --git a/run2_MC_XicpToPHH/info.yaml b/run2_MC_XicpToPHH/info.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b98b5487dea05fc324a2fd3ff31be5d2d1bd4503 --- /dev/null +++ b/run2_MC_XicpToPHH/info.yaml @@ -0,0 +1,24 @@ +defaults: + application: "DaVinci/v44r11p6" + wg: Charm + automatically_configure: true + inform: + - cheng.wang@cern.ch + +{%- 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,bk in datasets_XicpToPKmPip_mc %} +20{{year}}_{{polarity}}_XicpToPKmPip_MC: + input: + bk_query: {{bk}} + output: XicpToPKmPip_MC.ROOT + options: + - XicpToPKmPip_MC.py +{%- endfor %}