Skip to content
Snippets Groups Projects
Commit f46385a9 authored by Patrick Koppenburg's avatar Patrick Koppenburg :leaves:
Browse files

Merge branch 'erodrigu-analysisconf2' into 'master'

Move remnant functionality in AnalysisConf to the DaVinci configurable

See merge request !469
parents a356e0bd 0eecdf64
No related branches found
Tags v63r6
2 merge requests!1103Draft: Add AnalysisHelpers to DaVinci Stack,!469Move remnant functionality in AnalysisConf to the DaVinci configurable
Pipeline #2095127 passed
......@@ -15,7 +15,7 @@ High level configuration tools for DaVinci.
from LHCbKernel.Configuration import *
from Configurables import GaudiSequencer
from Configurables import ( LHCbConfigurableUser, LHCbApp,
PhysConf, AnalysisConf,
PhysConf,
DstConf, LumiAlgsConf, TurboConf, FlavourTaggingConf )
from Configurables import ToolSvc, DataOnDemandSvc
from LumiAlgs.LumiIntegratorConf import LumiIntegratorConf
......@@ -40,7 +40,7 @@ class DaVinci(LHCbConfigurableUser) :
"EvtMax" : -1 # Number of events to analyse
, "SkipEvents" : 0 # Number of events to skip at beginning for file
, "PrintFreq" : 1000 # The frequency at which to print event numbers
, "DataType" : '' # Data type, can be ['2008','2009','MC09','2010','2011','2012','2015','2016','2017','2018','Upgrade'] Forwarded to PhysConf, AnalysisConf, DstConf and LHCbApp. MUST be set.
, "DataType" : '' # Data type, can be ['2008','2009','MC09','2010','2011','2012','2015','2016','2017','2018','Upgrade'] Forwarded to PhysConf, DstConf and LHCbApp. MUST be set.
, "Simulation" : False # set to True to use SimCond. Forwarded to PhysConf
, "DDDBtag" : "" # Tag for DDDB. Default as set in DDDBConf for DataType
, "CondDBtag" : "" # Tag for CondDB. Default as set in DDDBConf for DataType
......@@ -79,7 +79,7 @@ class DaVinci(LHCbConfigurableUser) :
"EvtMax" : """ Number of events to analyse """
, "SkipEvents" : """ Number of events to skip at beginning for file """
, "PrintFreq" : """ The frequency at which to print event numbers """
, "DataType" : """ Data type, can be ['2008','2009','MC09','2010','2011','2012','2015','2016','2017','2018','Upgrade'] Forwarded to PhysConf, AnalysisConf, DstConf and LHCbApp """
, "DataType" : """ Data type, can be ['2008','2009','MC09','2010','2011','2012','2015','2016','2017','2018','Upgrade'] Forwarded to PhysConf, DstConf and LHCbApp """
, "Simulation" : """ set to True to use SimCond. Forwarded to PhysConf """
, "DDDBtag" : """ Tag for DDDB. Default as set in DDDBConf for DataType """
, "CondDBtag" : """ Tag for CondDB. Default as set in DDDBConf for DataType """
......@@ -110,7 +110,6 @@ class DaVinci(LHCbConfigurableUser) :
__used_configurables__ = [
PhysConf ,
AnalysisConf ,
DstConf ,
LumiAlgsConf ,
LumiIntegratorConf,
......@@ -295,7 +294,6 @@ class DaVinci(LHCbConfigurableUser) :
self.setOtherProps(LHCbApp(),["DataType","CondDBtag","DDDBtag",
"DQFLAGStag","Simulation","IgnoreDQFlags"])
self.setOtherProps(PhysConf(),["DataType","Simulation","InputType","Detectors"])
self.setOtherProps(AnalysisConf(),["DataType","Simulation","InputType","RootInTES"])
self.setOtherProps(DstConf(),["DataType","Turbo"])
if self.getProp("Turbo"):
......@@ -348,7 +346,7 @@ class DaVinci(LHCbConfigurableUser) :
return di
def _init(self):
from Configurables import (PhysConf,AnalysisConf)
from Configurables import PhysConf
inputType = self.getProp( "InputType" ).upper()
......@@ -380,6 +378,115 @@ class DaVinci(LHCbConfigurableUser) :
#
# Set MC
#
def configureMC(self):
"""
Define DaVinciAssociators. Do MC unpacking.
"""
from CaloKernel.ConfUtils import getAlgo
from Configurables import NeutralPP2MC, ChargedPP2MC
root_ = '/Event'
if self.getProp("InputType") == 'MDST' and self.getProp('RootInTES'):
root_ = self.getProp('RootInTES')
self.unpackMC(root_)
## offline neutral protoparticles
alg1 = getAlgo(
NeutralPP2MC, ## type
'NeutralPP2MC', ## base-name
'Offline', ## context
root_ + '/Relations/Rec/ProtoP/Neutrals', ## base-location
True) ## on-demand
## hlt neutral protoparticles
alg2 = getAlgo(
NeutralPP2MC, ## type
'NeutralPP2MC', ## base-name
'Hlt', ## context
root_ + '/Relations/Rec/ProtoP/Neutrals', ## base-location
True) ## on-demand
from Configurables import DataOnDemandSvc, ChargedPP2MC
if root_ != '/Event':
alg1.RootInTES = root_
ChargedPP2MC(RootInTES=root_)
dod = DataOnDemandSvc()
dod.AlgMap[root_ + '/Relations/Rec/ProtoP/Charged'] = ChargedPP2MC()
dod.AlgMap[root_ + '/Relations/Rec/ProtoP/Upstream'] = ChargedPP2MC()
#
# Unpack MC
#
def unpackMC(self, rootInTES):
"""
Do MC unpacking for objects under rootInTES
"""
import os
from Configurables import UnpackMCParticle, UnpackMCVertex
mcRoot = os.path.join(rootInTES, "MC")
log.info("Will unpack MC objects to {0}".format(mcRoot))
particlesOutput = os.path.join(mcRoot, "Particles")
verticesOutput = os.path.join(mcRoot, "Vertices")
dod = DataOnDemandSvc()
dod.NodeMap[mcRoot] = "DataObject"
dod.AlgMap[particlesOutput] = UnpackMCParticle(RootInTES=rootInTES)
dod.AlgMap[verticesOutput] = UnpackMCVertex(RootInTES=rootInTES)
## for uDST
if mcRoot != '/Event/MC':
## create the directory (if missing)
dod.NodeMap[rootInTES + '/pSim'] = 'DataObject'
from Configurables import Gaudi__DataLink as Link
for name, target, what in [
## process ``pMC'' and ``pSim'' variants of uDST coherently
('LINK:MC2Sim4Particles', rootInTES + '/pSim/MCParticles',
rootInTES + '/pMC/Particles'),
('LINK:MC2Sim4Vertices', rootInTES + '/pSim/MCVertices',
rootInTES + '/pMC/Vertices'),
# In case any algorithm has a hard-coded dependency on /Event/MC/...,
# creates links from the location under RootInTES to /Event/MC
('LINK:MCParticles', '/Event/MC/Particles',
rootInTES + '/MC/Particles'),
('LINK:MCVertices', '/Event/MC/Vertices',
rootInTES + '/MC/Vertices'),
]:
dod.AlgMap[target] = Link(
name, Target=target, What=what, OutputLevel=5)
log.debug(
'Set additional MC->SIM links %s -> %s ' % (what, target))
## some non-trivial action for non-trivial settings
from Configurables import GaudiSequencer
dod.AlgMap[particlesOutput] = GaudiSequencer(
"SEQ:MCParticles",
Members=[
dod.AlgMap[particlesOutput],
Link(
'LINK:MCParticles2MC',
Target=particlesOutput,
What='/Event/MC/Particles',
OutputLevel=5)
])
dod.AlgMap[verticesOutput] = GaudiSequencer(
"SEQ:MCVertices",
Members=[
dod.AlgMap[verticesOutput],
Link(
'LINK:MCVertices2MC',
Target=verticesOutput,
What='/Event/MC/Vertices',
OutputLevel=5)
])
def redoMCLinks(self, init):
"""
Redo MC links.
......@@ -821,6 +928,10 @@ class DaVinci(LHCbConfigurableUser) :
self._defineEvents()
self._defineInput()
self._rootFiles()
log.info("Applying Analysis configuration")
log.info(self)
if (self.getProp("Simulation")):
self.configureMC()
self._upgradeAction()
self.tagging()
self.standardParticles()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment