diff --git a/Calorimeter/CaloExample/CaloRecEx/share/CaloRecOutputItemList_jobOptions.py b/Calorimeter/CaloExample/CaloRecEx/share/CaloRecOutputItemList_jobOptions.py index fbb3ed952c6773eaf770ef2d71c6ad7f50caebc7..bece6e4a22a2d669bb8cdba34190239c94e7ffd1 100644 --- a/Calorimeter/CaloExample/CaloRecEx/share/CaloRecOutputItemList_jobOptions.py +++ b/Calorimeter/CaloExample/CaloRecEx/share/CaloRecOutputItemList_jobOptions.py @@ -195,13 +195,17 @@ for theKey in CaloClusterKeys: #Fixme .. Apply this only to TopoClusters? AuxListItem="xAOD::CaloClusterAuxContainer#"+theKey+"Aux" for moment in AODMoments: AuxListItem+="."+moment - pass + # for tau clusters + if theKey == "CaloCalTopoClusters": + AuxListItem += ".CellLink" if len(AODMoments)==0: AuxListItem+="." CaloClusterItemList+=[AuxListItem] # write the link only for egClusterColl #CaloClusterItemList+=["CaloClusterCellLinkContainer#egClusterCollection_links"] +# for tau clusters (CaloCalTopoClusters within 0.2 of the tau axis) +CaloClusterItemList += ["CaloClusterCellLinkContainer#CaloCalTopoClusters_links"] CaloAODList+=CaloClusterItemList @@ -216,4 +220,3 @@ CaloAODList+=["TileMuContainer#TileMuObj"] # LAr noisy Feb/PA summary CaloAODList += ["LArNoisyROSummary#LArNoisyROSummary"] - diff --git a/Control/AthToolSupport/AsgTools/AsgTools/SourceID.h b/Control/AthToolSupport/AsgTools/AsgTools/SourceID.h new file mode 100644 index 0000000000000000000000000000000000000000..822563704f8eac3afb3e571fc48f8b5531be9fe1 --- /dev/null +++ b/Control/AthToolSupport/AsgTools/AsgTools/SourceID.h @@ -0,0 +1,26 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +/// @author Tadej Novak + + + +#ifndef ASG_TOOLS__SOURCE_ID_H +#define ASG_TOOLS__SOURCE_ID_H + +#ifndef XAOD_STANDALONE +#include <AthenaKernel/SourceID.h> +#else + +namespace SG { + +// Type used to identify a metadata source. +// For compatibility with Athena releases +typedef std::string SourceID; + +} + +#endif + +#endif diff --git a/Control/AthenaConfiguration/CMakeLists.txt b/Control/AthenaConfiguration/CMakeLists.txt index d18df53c31db3d2a755fb85bf96e4667121cdfcb..fd94dd784b9c373c3bf20b1338e88ff0a18f4fa3 100644 --- a/Control/AthenaConfiguration/CMakeLists.txt +++ b/Control/AthenaConfiguration/CMakeLists.txt @@ -1,13 +1,8 @@ -################################################################################ -# Package: AthenaConfiguration -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( AthenaConfiguration ) -# External dependencies: -find_package( six ) - # Install files from the package: atlas_install_python_modules( python/*.py python/iconfTool POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Control/AthenaConfiguration/python/AthConfigFlags.py b/Control/AthenaConfiguration/python/AthConfigFlags.py index f84d6c574b204da29b283bae952a38b21e26673c..f4c24d09b9a435eaeaa977ab5a2c2c6a175b15f2 100644 --- a/Control/AthenaConfiguration/python/AthConfigFlags.py +++ b/Control/AthenaConfiguration/python/AthConfigFlags.py @@ -1,10 +1,9 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - from copy import deepcopy from AthenaCommon.Logging import logging _msg = logging.getLogger('AthConfigFlags') + class CfgFlag(object): __slots__ = ['_value','_setDef'] @@ -259,7 +258,7 @@ class AthConfigFlags(object): #This is to replace subsets of configuration flags like #egamamaFlags.GSF by egamma.TrigGSFFlavor1 #self.dump() - _msg.info("cloning flags and replacing {} by {}".format( subsetToReplace, replacementSubset ) ) + _msg.info("cloning flags and replacing %s by %s", subsetToReplace, replacementSubset) self._loadDynaFlags( subsetToReplace ) self._loadDynaFlags( replacementSubset ) diff --git a/Control/AthenaConfiguration/python/ComponentAccumulator.py b/Control/AthenaConfiguration/python/ComponentAccumulator.py index 5e5f50775388dee7f5913a03aea10c14c977c212..d48d9ceac08366b0a81f41f0a84cbdf59d520a65 100644 --- a/Control/AthenaConfiguration/python/ComponentAccumulator.py +++ b/Control/AthenaConfiguration/python/ComponentAccumulator.py @@ -1,11 +1,9 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function from AthenaCommon.Logging import logging from AthenaCommon.CFElements import isSequence,findSubSequence,findAlgorithm,flatSequencers,findOwningSequence,\ checkSequenceConsistency, findAllAlgorithmsByName from AthenaConfiguration.ComponentFactory import CompFactory -#from AthenaConfiguration.AlgSequence import AthSequencer from AthenaCommon.Debugging import DbgStage from AthenaCommon.Constants import INFO @@ -14,20 +12,17 @@ import GaudiConfig2 from AthenaConfiguration.Deduplication import deduplicate, DeduplicationFailed import collections -import six import copy import sys - - class ConfigurationError(RuntimeError): pass _basicServicesToCreateOrder=("CoreDumpSvc/CoreDumpSvc", "GeoModelSvc/GeoModelSvc", "DetDescrCnvSvc/DetDescrCnvSvc") -def printProperties(msg, c, nestLevel = 0, printDefaults=False, onlyComponents=False): +def printProperties(msg, c, nestLevel = 0, printDefaults=False, onlyComponentsOnly=False): # Iterate in sorted order. propnames= sorted(c._descriptors.keys()) for propname in propnames: @@ -45,7 +40,7 @@ def printProperties(msg, c, nestLevel = 0, printDefaults=False, onlyComponents=F continue if isinstance( propval, GaudiConfig2.Configurable ): - msg.info( " "*nestLevel +" * {0}: {1}/{2}".format(propname, propval.__cpp_type__, propval.getName())) + msg.info( "%s * %s: %s/%s", " "*nestLevel, propname, propval.__cpp_type__, propval.getName() ) printProperties(msg, propval, nestLevel+3) continue propstr="" @@ -57,7 +52,7 @@ def printProperties(msg, c, nestLevel = 0, printDefaults=False, onlyComponents=F propstr = "PrivateToolHandleArray([ {0} ])".format(', '.join(ths)) elif isinstance(propval,GaudiHandles.GaudiHandle): # Any other handle propstr = "Handle( {0} )".format(propval.typeAndName) - elif not onlyComponents: + elif not onlyComponentsOnly: propstr = str(propval) if propstr: msg.info( " "*nestLevel +" * {}: {} {}".format(propname, @@ -150,12 +145,12 @@ class ComponentAccumulator(object): self._msg=logging.getLogger('ComponentAccumulator') - def printCondAlgs(self, summariseProps=False, onlyComponents=[], printDefaults=False): + def printCondAlgs(self, summariseProps=False, onlyComponents=[], printDefaults=False, printComponentsOnly=False): self._msg.info( "Condition Algorithms" ) for (c, flag) in filterComponents (self._conditionsAlgs, onlyComponents): - self._msg.info( " " +"\\__ "+ c.name +" (cond alg)" ) + self._msg.info( " \\__ %s (cond alg)", c.name ) if summariseProps and flag: - printProperties(self._msg, c, 1, printDefaults) + printProperties(self._msg, c, 1, printDefaults, printComponentsOnly) return @@ -164,7 +159,7 @@ class ComponentAccumulator(object): # in the list with a trailing `-', then only the name of the component # will be printed, not its properties. def printConfig(self, withDetails=False, summariseProps=False, - onlyComponents = [], printDefaults=False): + onlyComponents = [], printDefaults=False, printComponentsOnly=False): self._msg.info( "Event Inputs" ) self._msg.info( "Event Algorithm Sequences" ) @@ -179,19 +174,20 @@ class ComponentAccumulator(object): return seq._properties[name] return seq._descriptors[name].default - self._msg.info( " "*nestLevel +"\\__ "+ seq.name +" (seq: %s %s)", - "SEQ" if __prop("Sequential") else "PAR", "OR" if __prop("ModeOR") else "AND" ) + self._msg.info( "%s\\__ %s (seq: %s %s)", " "*nestLevel, seq.name, + "SEQ" if __prop("Sequential") else "PAR", + "OR" if __prop("ModeOR") else "AND" ) nestLevel += 3 - for (c, flag) in filterComponents (seq.Members, onlyComponents): + for (c, flag) in filterComponents(seq.Members, onlyComponents): if isSequence(c): printSeqAndAlgs(c, nestLevel, onlyComponents = onlyComponents ) else: - self._msg.info( " "*nestLevel +"\\__ "+ c.name +" (alg)" ) + self._msg.info( "%s\\__ %s (alg)", " "*nestLevel, c.name ) if summariseProps and flag: - printProperties(self._msg, c, nestLevel, printDefaults) + printProperties(self._msg, c, nestLevel, printDefaults, printComponentsOnly) for n,s in enumerate(self._allSequences): - self._msg.info( "Top sequence {}".format(n) ) + self._msg.info( "Top sequence %s", n ) printSeqAndAlgs(s, onlyComponents = onlyComponents) self.printCondAlgs (summariseProps = summariseProps, @@ -202,28 +198,28 @@ class ComponentAccumulator(object): self._msg.info( "Public Tools" ) self._msg.info( "[" ) for (t, flag) in filterComponents (self._publicTools, onlyComponents): - self._msg.info( " {0},".format(t.getFullJobOptName()) ) + self._msg.info( " %s,", t.getFullJobOptName() ) # Not nested, for now if summariseProps and flag: - printProperties(self._msg, t, printDefaults) + printProperties(self._msg, t, printDefaults, printComponentsOnly) self._msg.info( "]" ) self._msg.info( "Private Tools") self._msg.info( "[" ) if (isinstance(self._privateTools, list)): for (t, flag) in filterComponents (self._privateTools, onlyComponents): - self._msg.info( " {0},".format(t.getFullJobOptsName()) ) + self._msg.info( " %s,", t.getFullJobOptsName() ) # Not nested, for now if summariseProps and flag: - printProperties(self._msg, t, printDefaults) + printProperties(self._msg, t, printDefaults, printComponentsOnly) else: if self._privateTools is not None: - self._msg.info( " {0},".format(self._privateTools.getFullJobOptName()) ) + self._msg.info( " %s,", self._privateTools.getFullJobOptName() ) if summariseProps: - printProperties(self._msg, self._privateTools, printDefaults) + printProperties(self._msg, self._privateTools, printDefaults, printComponentsOnly) self._msg.info( "]" ) - self._msg.info( "TheApp properties" ) - for k,v in six.iteritems(self._theAppProps): - self._msg.info(" {} : {}".format(k,v)) + self._msg.info( "theApp properties" ) + for k, v in self._theAppProps.items(): + self._msg.info(" %s : %s", k, v) def addSequence(self, newseq, parentName = None ): @@ -244,7 +240,7 @@ class ComponentAccumulator(object): parent.Members.append(newseq) algsByName = findAllAlgorithmsByName(newseq) - for name, existingAlgs in six.iteritems(algsByName): + for name, existingAlgs in algsByName.items(): startingIndex = 0 if name not in self._algorithms: firstAlg, parent, idx = existingAlgs[0] @@ -518,7 +514,7 @@ class ComponentAccumulator(object): else: self._msg.debug(" Merging sequence %s to a sequence %s", c.name, dest.name ) algorithmsByName = findAllAlgorithmsByName(c) - for name, existingAlgs in six.iteritems(algorithmsByName): + for name, existingAlgs in algorithmsByName.items(): startingIndex = 0 if name not in self._algorithms: firstAlg, parent, idx = existingAlgs[0] @@ -571,7 +567,7 @@ class ComponentAccumulator(object): # Additional checking and updating other accumulator's algorithms list - for name, alg in six.iteritems(other._algorithms): + for name in other._algorithms: if name not in self._algorithms: raise ConfigurationError('Error in merging. Algorithm {} missing in destination accumulator'.format(name)) other._algorithms[name] = self._algorithms[name] @@ -587,7 +583,7 @@ class ComponentAccumulator(object): self.addPublicTool(pt) #Profit from deduplicaton here #Merge AppMgr properties: - for (k,v) in six.iteritems(other._theAppProps): + for (k,v) in other._theAppProps.items(): self.setAppProperty(k,v) #Will warn about overrides pass other._wasMerged=True @@ -662,12 +658,9 @@ class ComponentAccumulator(object): self.__cpp_type__, self.name ) - appPropsToSet = {} + appPropsToSet = {k: str(v) for k, v in self._theAppProps.items()} mspPropsToSet = {} bshPropsToSet = [] - for (k, v) in six.iteritems(self._theAppProps): - appPropsToSet[k] = str(v) - svcToCreate = [] extSvc = [] for svc in self._services: @@ -720,8 +713,7 @@ class ComponentAccumulator(object): ): # MessageSvc will exist already! Needs special treatment getCompsToBeAdded(svc) else: - for k, v in svc._properties.items(): - mspPropsToSet[k] = str(v) + mspPropsToSet.update((k,str(v)) for k,v in svc._properties.items()) try: from AthenaPython import PyAthenaComps @@ -729,9 +721,7 @@ class ComponentAccumulator(object): except ImportError: PyAlg = type(None) - for seqName, algoList in six.iteritems( - flatSequencers(self._sequence, algsCollection=self._algorithms) - ): + for seqName, algoList in flatSequencers(self._sequence, algsCollection=self._algorithms).items(): seq = self.getSequence(seqName) for k, v in seq._properties.items(): if k != "Members": # This property his handled separatly @@ -844,19 +834,18 @@ def __indent( indent = ""): def __setProperties( destConfigurableInstance, sourceConf2Instance, indent="" ): _log = logging.getLogger( "__setProperties".ljust(30) ) - for pname, pvalue in six.iteritems( sourceConf2Instance._properties ): + for pname, pvalue in sourceConf2Instance._properties.items(): if destConfigurableInstance.__class__.__name__ == 'AlgSequence' and pname == 'Members': continue propType = sourceConf2Instance._descriptors[pname].cpp_type if "PrivateToolHandleArray" in propType: setattr( destConfigurableInstance, pname, [conf2toConfigurable( tool, __indent( indent ) ) for tool in pvalue] ) - _log.debug( "{}Set the private tools array {} of {}".format( indent, pname, destConfigurableInstance.name() ) ) + _log.debug( "%sSet the private tools array %s of %s", indent, pname, destConfigurableInstance.name() ) elif "PrivateToolHandle" in propType or "GaudiConfig2.Configurables" in propType or "ServiceHandle" in propType: - _log.debug( "{}Set the property {} that is private tool {} ".format( indent, pname, destConfigurableInstance.name() ) ) + _log.debug( "%sSet the property %s that is private tool %s", indent, pname, destConfigurableInstance.name() ) try: #sometimes it is not printable - _log.debug("{}Tool: {}".format(indent, pvalue)) + _log.debug("%sTool: %s", indent, pvalue) except Exception: - _log.debug("{}Could not print it".format(indent)) pass if pvalue is not None: setattr( destConfigurableInstance, pname, conf2toConfigurable( pvalue, indent=__indent( indent ) ) ) @@ -867,7 +856,7 @@ def __setProperties( destConfigurableInstance, sourceConf2Instance, indent="" ): if isinstance(pvalue,(GaudiConfig2.semantics._ListHelper,GaudiConfig2.semantics._DictHelper)): pvalue=pvalue.data try: #sometimes values are not printable - _log.debug( "{}Setting property {} to value {}".format( indent, pname, pvalue ) ) + _log.debug( "%sSetting property %s to value %s", indent, pname, pvalue ) except Exception: pass setattr( destConfigurableInstance, pname, pvalue ) @@ -885,14 +874,14 @@ def conf2toConfigurable( comp, indent="", suppressDupes=False ): if __isOldConfigurable( comp ): - _log.debug( "{}Component is already OLD Configurable object {}, no conversion".format(indent, compName(comp) ) ) + _log.debug( "%sComponent is already OLD Configurable object %s, no conversion", indent, compName(comp) ) return comp if isinstance( comp, str ): - _log.warning( "{}Component: \"{}\" is of type string, no conversion, some properties possibly not set?".format(indent, comp ) ) + _log.warning( "%sComponent: \"%s\" is of type string, no conversion, some properties possibly not set?", indent, comp ) return comp - _log.info( "{}Converting from GaudiConfig2 object {} type {}".format(indent, compName(comp), comp.__class__.__name__ )) + _log.info( "%sConverting from GaudiConfig2 object %s type %s", indent, compName(comp), comp.__class__.__name__ ) def __alreadyConfigured( instanceName ): from AthenaCommon.Configurable import Configurable @@ -905,14 +894,15 @@ def conf2toConfigurable( comp, indent="", suppressDupes=False ): return CompFactory.getComp( typename.replace( "__", "::" ) )( instanceName ) def __configurableToConf2( comp, indent="" ): - _log.debug( "{}Converting Conf2 to Configurable class {}, type {}".format( indent, comp.getFullName(), type(comp) ) ) + _log.debug( "%sConverting Conf2 to Configurable class %s, type %s", indent, comp.getFullName(), type(comp) ) conf2Object = __createConf2Object( comp.getFullName() ) __getProperties( comp, conf2Object, __indent( indent ) ) return conf2Object def __getProperties( sourceConfigurableInstance, destConf2Instance, indent="" ): - for prop, value in six.iteritems( sourceConfigurableInstance.getProperties() ): - _log.debug( "{}Dealing with class {} property {} value type {}".format( indent, sourceConfigurableInstance.getFullJobOptName(), prop, str( type( value ) ) ) ) + for prop, value in sourceConfigurableInstance.getProperties().items(): + _log.debug( "%sDealing with class %s property %s value type %s", + indent, sourceConfigurableInstance.getFullJobOptName(), prop, type(value) ) if "ServiceHandle" in str( type( value ) ): instance = __alreadyConfigured(value) if instance: @@ -947,25 +937,26 @@ def conf2toConfigurable( comp, indent="", suppressDupes=False ): return listOrDictHelper def __areSettingsSame( existingConfigurableInstance, newConf2Instance, indent="" ): - _log.debug( "{}Checking if setting is the same {} {}".format( indent, existingConfigurableInstance.getFullName(), newConf2Instance.getFullJobOptName() ) ) - alreadySetProperties = dict([ (pname, pvalue) for pname,pvalue - in six.iteritems(existingConfigurableInstance.getValuedProperties()) ]) - _log.debug("Existing properties: {}".format(alreadySetProperties)) - _log.debug("New properties: {}".format(newConf2Instance._properties)) - for pname, pvalue in six.iteritems( newConf2Instance._properties ): # six.iteritems(comp._properties): + _log.debug( "%sChecking if settings are the same %s %s", + indent, existingConfigurableInstance.getFullName(), newConf2Instance.getFullJobOptName() ) + alreadySetProperties = existingConfigurableInstance.getValuedProperties().copy() + _log.debug( "Existing properties: %s", alreadySetProperties ) + _log.debug( "New properties: %s", newConf2Instance._properties ) + for pname, pvalue in newConf2Instance._properties.items(): if __isOldConfigurable( pvalue ): - _log.warning( "{}New configuration object {} property {} has legacy configuration components assigned to it {}" - .format(indent, compName(newConf2Instance), pname, compName(pvalue) ) ) - _log.warning( "Skipping comparison, no guarantees about configuration consistency" ) + _log.warning( "%sNew configuration object %s property %s has legacy configuration " + "components assigned to it %s. Skipping comparison, no guarantees " + "about configuration consistency.", + indent, compName(newConf2Instance), pname, compName(pvalue) ) continue propType = newConf2Instance._descriptors[pname].cpp_type - _log.debug("{}Comparing type: {} for: {}".format(indent, propType, pname)) + _log.debug( "%sComparing type: %s for: %s", indent, propType, pname ) if "PrivateToolHandleArray" in propType: toolDict = {_.getName(): _ for _ in alreadySetProperties[pname]} - _log.debug('Private tool properties? {}'.format(toolDict)) + _log.debug('Private tool properties? %s', toolDict) newCdict = {_.getName() : _ for _ in pvalue} oldCset = set(toolDict); newCset = set(newCdict) - _log.debug('Private tool property names? {} {}'.format(oldCset, newCset)) + _log.debug('Private tool property names? %s %s', oldCset, newCset) for oldC in oldCset & newCset: __areSettingsSame( toolDict[oldC], newCdict[oldC], __indent(indent)) for newC in newCset-oldCset: @@ -973,10 +964,10 @@ def conf2toConfigurable( comp, indent="", suppressDupes=False ): alreadySetProperties[pname].append(conf2toConfigurable(newCdict[newC])) elif "PublicToolHandleArray" in propType: toolSet = {_.getName() for _ in alreadySetProperties[pname]} - _log.debug('Public tool handle array properties? {} {}'.format(toolSet, pvalue)) + _log.debug('Public tool handle array properties? %s %s', toolSet, pvalue) # strings? for newC in pvalue: - if isinstance(newC, six.string_types): + if isinstance(newC, str): pubtoolclass, pubtoolname = newC.split('/') if pubtoolname not in toolSet: klass = __findConfigurableClass( pubtoolclass ) @@ -987,19 +978,22 @@ def conf2toConfigurable( comp, indent="", suppressDupes=False ): elif "PrivateToolHandle" in propType or "GaudiConfig2.Configurables" in propType or "ServiceHandle" in propType: existingVal = getattr(existingConfigurableInstance, pname) if isinstance( pvalue, str ): - _log.warning("{}The handle {} of component {}.{} is just a string {}, skipping deeper checks, configuration may be incorrect".format(indent, propType, newConf2Instance.name, pname, pvalue)) + _log.warning("%sThe handle %s of component %s.%s is just a string %s, " + "skipping deeper checks, configuration may be incorrect", + indent, propType, newConf2Instance.name, pname, pvalue) else: - _log.debug( "{}Some kind of handle and, object type {} existing {}".format( indent, type(pvalue), type(existingVal) ) ) + _log.debug( "%sSome kind of handle and, object type %s existing %s", + indent, type(pvalue), type(existingVal) ) __areSettingsSame( existingVal, pvalue, indent) else: if isinstance(pvalue,(GaudiConfig2.semantics._ListHelper,GaudiConfig2.semantics._DictHelper)): pvalue=pvalue.data if pname not in alreadySetProperties: - _log.info("{}Adding property: {} for {}".format(indent, pname, newConf2Instance.getName() )) + _log.info( "%sAdding property: %s for %s", indent, pname, newConf2Instance.getName() ) setattr(existingConfigurableInstance, pname, pvalue) elif alreadySetProperties[pname] != pvalue: - _log.info("{}Merging property: {} for {}".format(indent, pname, newConf2Instance.getName() )) + _log.info( "%sMerging property: %s for %s", indent, pname, newConf2Instance.getName() ) # create surrogate clone = newConf2Instance.getInstance("Clone") setattr(clone, pname, alreadySetProperties[pname]) @@ -1007,17 +1001,19 @@ def conf2toConfigurable( comp, indent="", suppressDupes=False ): setattr(existingConfigurable, pname, updatedPropValue) del clone - _log.info("{} invoked GaudiConf2 semantics to merge the {} and the {} to {} for property {} of {}".format( - indent, alreadySetProperties[pname], pvalue, pname, updatedPropValue, existingConfigurable.getFullName())) + _log.info("%s invoked GaudiConf2 semantics to merge the %s and the %s to %s " + "for property %s of %s", + indent, alreadySetProperties[pname], pvalue, pname, + updatedPropValue, existingConfigurable.getFullName()) existingConfigurable = __alreadyConfigured( comp.name ) if existingConfigurable: # if configurable exists we try to merge with it - _log.debug( "{}Pre-existing configurable {} was found, checking if has the same properties".format( indent, comp.getName() ) ) + _log.debug( "%sPre-existing configurable %s was found, checking if has the same properties", indent, comp.getName() ) __areSettingsSame( existingConfigurable, comp ) - _log.debug( "{}Pre-existing configurable {} was found to have the same properties".format( indent, comp.name ) ) + _log.debug( "%sPre-existing configurable %s was found to have the same properties", indent, comp.name ) instance = existingConfigurable if not suppressDupes else None else: # create new configurable - _log.debug( "{}Creating component configurable {}".format( indent, comp.getFullJobOptName() ) ) + _log.debug( "%sCreating component configurable %s", indent, comp.getFullJobOptName() ) configurableClass = __findConfigurableClass( comp.getFullJobOptName().split( "/" )[0] ) instance = configurableClass( comp.name ) __setProperties( instance, comp, __indent( indent ) ) @@ -1072,7 +1068,7 @@ def appendCAtoAthena(ca): if len( ca.getAppProps() ) != 0: _log.info( "Merging ApplicationMgr properties" ) - for (propName, propValue) in six.iteritems(ca.getAppProps()): + for propName, propValue in ca.getAppProps().items(): # Same logic as in ComponentAccumulator.setAppProperty() if not hasattr(theApp, propName): setattr(theApp, propName, propValue) @@ -1105,7 +1101,8 @@ def appendCAtoAthena(ca): sequence = __fetchOldSeq( conf2Sequence.name ) __setProperties( sequence, conf2Sequence, indent=__indent( indent ) ) currentConfigurableSeq += sequence - _log.info( "{}Created missing AlgSequence {} and added to {}".format( __indent( indent ), sequence.name(), currentConfigurableSeq.name() ) ) + _log.info( "%sCreated missing AlgSequence %s and added to %s", + __indent( indent ), sequence.name(), currentConfigurableSeq.name() ) for el in conf2Sequence.Members: if el.__class__.__name__ == "AthSequencer": @@ -1114,8 +1111,8 @@ def appendCAtoAthena(ca): toadd = conf2toConfigurable( el, indent=__indent( indent ), suppressDupes=True) if toadd is not None: sequence += toadd - _log.info( "{}Algorithm {} and added to the sequence {}".format( __indent( indent ), el.getFullJobOptName(), sequence.name() ) ) - + _log.info( "%sAlgorithm %s and added to the sequence %s", + __indent( indent ), el.getFullJobOptName(), sequence.name() ) preconfigured = [athCondSeq,athOutSeq,athAlgSeq,topSequence] @@ -1123,18 +1120,20 @@ def appendCAtoAthena(ca): merged = False for pre in preconfigured: if seq.getName() == pre.getName(): - _log.info( "{}found sequence {} to have the same name as predefined {}".format( __indent(), seq.getName(), pre.getName() ) ) + _log.info( "%sfound sequence %s to have the same name as predefined %s", + __indent(), seq.getName(), pre.getName() ) __mergeSequences( pre, seq ) merged = True break if findSubSequence( pre, seq.name ): - _log.info( "{}found sequence {} in predefined {}".format( __indent(), seq.getName(), pre.getName() ) ) + _log.info( "%sfound sequence %s in predefined %s", + __indent(), seq.getName(), pre.getName() ) __mergeSequences( pre, seq ) merged = True break if not merged: - _log.info( "{}not found sequence {} merging it to AthAlgSeq".format( __indent(), seq.name ) ) + _log.info( "%snot found sequence %s merging it to AthAlgSeq", __indent(), seq.name ) __mergeSequences( athAlgSeq, seq ) ca.wasMerged() diff --git a/Control/AthenaConfiguration/python/Deduplication.py b/Control/AthenaConfiguration/python/Deduplication.py index 52e420b669219708c55c598a01faf21252599366..904039a6c8b47b044dca29487471c14f90bf605f 100644 --- a/Control/AthenaConfiguration/python/Deduplication.py +++ b/Control/AthenaConfiguration/python/Deduplication.py @@ -1,11 +1,7 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration - -from __future__ import print_function - - -#Functions used by the ComponentAccumulator to de-duplicate componentes defined multiple times - - +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# +# Functions used by the ComponentAccumulator to de-duplicate componentes defined multiple times +# from AthenaCommon.Logging import logging @@ -30,7 +26,7 @@ def deduplicate(newComp,compList): #end loop over existing components #No component of the same type & name found, simply append - _msg.debug("Adding component {}/{} to the job".format(newComp.__cpp_type__,newComp.name)) + _msg.debug("Adding component %s/%s to the job", newComp.__cpp_type__, newComp.name) #The following is to work with internal list of service as well as gobal svcMgr as second parameter try: diff --git a/Control/AthenaConfiguration/python/PropSetterProxy.py b/Control/AthenaConfiguration/python/PropSetterProxy.py index a4b34ee104c59efdbbf4d4df16b71eb0a839391e..34defa948ccb54c78b5e2450be5b9f8755072af2 100644 --- a/Control/AthenaConfiguration/python/PropSetterProxy.py +++ b/Control/AthenaConfiguration/python/PropSetterProxy.py @@ -1,10 +1,9 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + from AthenaCommon.Logging import logging from AthenaCommon.CFElements import isSequence from AthenaCommon.Configurable import ConfigurableAlgTool from GaudiKernel.GaudiHandles import PrivateToolHandle, PrivateToolHandleArray -import six msg = logging.getLogger('PropSetterProxy') @@ -26,7 +25,7 @@ class PropSetterProxy(object): import fnmatch - for component_path, component in six.iteritems(PropSetterProxy.__compPaths): + for component_path, component in PropSetterProxy.__compPaths.items(): if fnmatch.fnmatch( component_path, self.__path ): if name in component._descriptors: try: @@ -60,7 +59,7 @@ class PropSetterProxy(object): def __nestAlg(startpath, comp): # it actually dives inside the algorithms and (sub) tools if comp.getName() == "": return - for name, value in six.iteritems(comp._descriptors): + for name, value in comp._descriptors.items(): if isinstance( value.cpp_type, ConfigurableAlgTool ) or isinstance( value.cpp_type, PrivateToolHandle ): __add( startpath+"/"+name+"/"+value.getFullJobOptName(), value ) __nestAlg( startpath+"/"+name+"/"+value.getName(), value ) diff --git a/Control/AthenaConfiguration/share/confTool.py b/Control/AthenaConfiguration/share/confTool.py index d71a22292d007d810f27d632efbedcd8d86b3a6a..c88af1152f80d49488eefd79422c311fde74b51c 100755 --- a/Control/AthenaConfiguration/share/confTool.py +++ b/Control/AthenaConfiguration/share/confTool.py @@ -36,9 +36,15 @@ def parse_args(): parser.add_argument("file", nargs="+", help="Files to work with") parser.add_argument( - "--comps", + "--includeComps", nargs="*", - help="Report only component containing this string", + help="Report only component matching this string", + action="append", + ) + parser.add_argument( + "--excludeComps", + nargs="*", + help="Exclude components matching this string", action="append", ) parser.add_argument( @@ -182,23 +188,32 @@ def _loadSingleFile(fname, args): if conf is None: sys.exit("Unable to load %s file" % fname) - if args.comps: # returning only wanted components + if ( + args.includeComps or args.excludeComps + ): # returning only wanted components - def is_component_from_list(component): - return True in [s in component for s in compsToReport] + def flatten_list(l): + return [item for elem in l for item in elem] if l else [] + + compsToReport = flatten_list(args.includeComps) + compsToExclude = flatten_list(args.excludeComps) + + def eligible(component): + include = any(re.match(s, component) for s in compsToReport) + exclude = any(re.match(s, component) for s in compsToExclude) + if args.includeComps and args.excludeComps: + return include and not exclude + elif args.includeComps: + return include + elif args.excludeComps: + return not exclude - compsToReport = [ - item for elem in args.comps for item in elem - ] # creates flat list of wanted components conf = [ - { - key: value - for (key, value) in dic.items() - if is_component_from_list(key) - } + {key: value for (key, value) in dic.items() if eligible(key)} for dic in conf if isinstance(dic, dict) ] + return conf @@ -229,7 +244,7 @@ def _compareConfig(configRef, configChk, args): print( "\n\033[91m Component ", component, - " \033[94m exists only in Chk \033[0m \033[0m \n", + " \033[94m exists only in 2nd file \033[0m \033[0m \n", ) continue @@ -238,7 +253,7 @@ def _compareConfig(configRef, configChk, args): print( "\n\033[91m Component", component, - " \033[92m exists only in Ref \033[0m \033[0m \n", + " \033[92m exists only in 1st file \033[0m \033[0m \n", ) continue @@ -281,6 +296,9 @@ def _compareComponent(compRef, compChk, prefix, args, component): allProps.sort() for prop in allProps: + if args.ignoreIrrelevant and prop in args.ignoreList: + continue + if prop not in compRef.keys(): print( "%s%s = %s: \033[94m exists only in 2nd file \033[0m \033[91m<< !!!\033[0m" @@ -298,9 +316,15 @@ def _compareComponent(compRef, compChk, prefix, args, component): refVal = compRef[prop] chkVal = compChk[prop] - if args.ignoreIrrelevant and any( - element in args.ignoreList for element in [chkVal, prop] - ): + try: + refVal = ast.literal_eval(str(refVal)) if refVal else "" + chkVal = ast.literal_eval(str(chkVal)) if chkVal else "" + except SyntaxError: + pass + except ValueError: + pass # literal_eval exception when parsing particular strings + + if args.ignoreIrrelevant and chkVal in args.ignoreList: continue refVal, chkVal = _parseNumericalValues(refVal, chkVal) @@ -318,14 +342,6 @@ def _compareComponent(compRef, compChk, prefix, args, component): % (prefix, prop, str(refVal), str(chkVal), diffmarker) ) - try: - refVal = ast.literal_eval(str(refVal)) if refVal else "" - chkVal = ast.literal_eval(str(chkVal)) if chkVal else "" - except SyntaxError: - pass - except ValueError: - pass # literal_eval exception when parsing particular strings - if refVal and ( isinstance(refVal, list) or isinstance(refVal, dict) ): diff --git a/Control/AthenaExamples/AthExThinning/python/Lib.py b/Control/AthenaExamples/AthExThinning/python/Lib.py index afcd2d354f32e06ca639eea27e581b481ea531f5..b17d328b44a469ec07be7c58c84c19d20ce029ee 100644 --- a/Control/AthenaExamples/AthExThinning/python/Lib.py +++ b/Control/AthenaExamples/AthExThinning/python/Lib.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # @file: AthExThinning/python/Lib.py # @purpose: a set of Py-components to tests py-thinning @@ -41,8 +41,7 @@ class PyWriteThinnedData( PyAthena.Alg ): def initialize(self): self.msg.info( "Initializing %s", self.name ) ## storegate - self.sg = PyAthena.StoreGate.pointer("StoreGateSvc") - # or: PyAthena.py_svc("StoreGateSvc",createIf=True) + self.sg = PyAthena.py_svc("StoreGateSvc") ## Datavector stuff import cppyy @@ -304,8 +303,7 @@ class PyReadNonThinnedData( PyAthena.Alg ): def initialize(self): self.msg.info( "Initializing %s", self.name ) ## storegate - self.sg = PyAthena.StoreGate.pointer("StoreGateSvc") - # or: PyAthena.py_svc("StoreGateSvc",createIf=True) + self.sg = PyAthena.py_svc("StoreGateSvc") ## Datavector stuff import cppyy diff --git a/Control/AthenaMonitoring/python/AthMonitorCfgHelper.py b/Control/AthenaMonitoring/python/AthMonitorCfgHelper.py index 955aeb00492a2f92cdcc694debe122cd4c11bae1..2f65e43046edf6f1a5d2fada67ae334601ab0ced 100644 --- a/Control/AthenaMonitoring/python/AthMonitorCfgHelper.py +++ b/Control/AthenaMonitoring/python/AthMonitorCfgHelper.py @@ -135,8 +135,8 @@ class AthMonitorCfgHelper(object): pathToSet = self.inputFlags.DQ.FileKey+('/%s' % topPath if topPath else '') array.broadcast('HistPath',pathToSet) array.broadcast('UseCache',True) - # in the future, autodetect if we are online or not - array.broadcast('convention','OFFLINE') + convention = 'ONLINE' if self.inputFlags.Common.isOnline else 'OFFLINE' + array.broadcast('convention', convention) array.broadcast('defaultDuration',defaultDuration) alg.GMTools += array.toolList() return array diff --git a/Control/AthenaMonitoring/src/DQEventFlagFilterTool.cxx b/Control/AthenaMonitoring/src/DQEventFlagFilterTool.cxx index 1a0efb7640700c276d36acf7684a1c5b558366a6..3ca699460e7a9b33696db1f6a13ecbfe456c36a4 100644 --- a/Control/AthenaMonitoring/src/DQEventFlagFilterTool.cxx +++ b/Control/AthenaMonitoring/src/DQEventFlagFilterTool.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "DQEventFlagFilterTool.h" @@ -18,6 +18,7 @@ StatusCode DQEventFlagFilterTool::initialize() ATH_MSG_VERBOSE("ATLAS Ready initialize"); // don't register callback if we always return true anyway ATH_CHECK( m_EventInfoKey.initialize(!m_alwaysReturnTrue) ); + ATH_CHECK( m_TileStatusKey.initialize(!m_alwaysReturnTrue) ); return StatusCode::SUCCESS; } diff --git a/Control/AthenaMonitoring/src/DQEventFlagFilterTool.h b/Control/AthenaMonitoring/src/DQEventFlagFilterTool.h index 2fac590257ceeaa3a010e651226d3a2a30b115d3..deeed055ca97b23438f9cf75d92e238ee6bb1e85 100644 --- a/Control/AthenaMonitoring/src/DQEventFlagFilterTool.h +++ b/Control/AthenaMonitoring/src/DQEventFlagFilterTool.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef DQEVENTFLAGFILTERTOOL_H @@ -32,6 +32,7 @@ class DQEventFlagFilterTool : public AthAlgTool, virtual public IDQFilterTool Gaudi::Property<bool> m_doSCT{this, "doSCT", true}; Gaudi::Property<bool> m_doCore{this, "doCore", true}; SG::ReadHandleKey<xAOD::EventInfo> m_EventInfoKey{this, "EventInfoKey", "EventInfo"}; + SG::ReadDecorHandleKey<xAOD::EventInfo> m_TileStatusKey{this, "TileStatusKey", "EventInfo.TileStatus"}; }; #endif //DQEVENTFLAGFILTERTOOL_H diff --git a/Control/StoreGate/StoreGate/ReadCondHandle.h b/Control/StoreGate/StoreGate/ReadCondHandle.h index 48fb8bdb139507dad19ee9c6ec1f462eae5499f8..e4204c08fb16f32664956a29706d5d14954720f5 100644 --- a/Control/StoreGate/StoreGate/ReadCondHandle.h +++ b/Control/StoreGate/StoreGate/ReadCondHandle.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef STOREGATE_READCONDHANDLE_H @@ -27,6 +27,17 @@ namespace SG { + + /** + * @brief Report a conditions container lookup failure. + * @param cc The conditions container. + * @param eid The time for which to search. + * @param The key corresponding to the conditions container. + */ + void ReadCondHandleNotFound (const CondContBase& cc, + const EventIDBase& eid, + const std::string& key); + template <typename T> class ReadCondHandle { @@ -162,14 +173,7 @@ namespace SG { if (m_obj != 0) return true; if ( ATH_UNLIKELY(!m_cc->find(m_eid, m_obj, &m_range)) ) { - std::ostringstream ost; - m_cc->list(ost); - MsgStream msg(Athena::getMessageSvc(), "ReadCondHandle"); - msg << MSG::ERROR - << "ReadCondHandle: could not find current EventTime " - << m_eid << " for key " << m_hkey.objKey() << "\n" - << ost.str() - << endmsg; + ReadCondHandleNotFound (*m_cc, m_eid, m_hkey.objKey()); m_obj = nullptr; return false; } @@ -212,14 +216,7 @@ namespace SG { // pointer_type obj(0); const_pointer_type cobj(0); if (! (m_cc->find(eid, cobj) ) ) { - std::ostringstream ost; - m_cc->list(ost); - MsgStream msg(Athena::getMessageSvc(), "ReadCondHandle"); - msg << MSG::ERROR - << "ReadCondHandle::retrieve() could not find EventTime " - << eid << " for key " << m_hkey.objKey() << "\n" - << ost.str() - << endmsg; + ReadCondHandleNotFound (*m_cc, eid, m_hkey.objKey()); return nullptr; } diff --git a/Control/StoreGate/src/ReadCondHandle.cxx b/Control/StoreGate/src/ReadCondHandle.cxx new file mode 100644 index 0000000000000000000000000000000000000000..d8b91911523ff92d418e973d1bdb9ac61761715d --- /dev/null +++ b/Control/StoreGate/src/ReadCondHandle.cxx @@ -0,0 +1,38 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ +/** + * @file StoreGate/src/ReadCondHandle.cxx + * @author scott snyder <snyder@bnl.gov> + * @date Oct, 2020 + * @brief Out-of-line implementations for ReadCondHandle. + */ + +#include "StoreGate/ReadCondHandle.h" + + +namespace SG { + + +/** + * @brief Report a conditions container lookup failure. + * @param cc The conditions container. + * @param eid The time for which to search. + * @param The key corresponding to the conditions container. + */ +void ReadCondHandleNotFound (const CondContBase& cc, + const EventIDBase& eid, + const std::string& key) +{ + std::ostringstream ost; + cc.list(ost); + MsgStream msg(Athena::getMessageSvc(), "ReadCondHandle"); + msg << MSG::ERROR + << "ReadCondHandle::retrieve() could not find EventTime " + << eid << " for key " << key << "\n" + << ost.str() + << endmsg; +} + + +} // namespace SG diff --git a/Control/StoreGateBindings/StoreGateBindings/selection.xml b/Control/StoreGateBindings/StoreGateBindings/selection.xml index aaa66fb5ac4fa11e969fc6f346ed16f2c5a64e14..085814350237225550da924d8fc8605262f0c196 100755 --- a/Control/StoreGateBindings/StoreGateBindings/selection.xml +++ b/Control/StoreGateBindings/StoreGateBindings/selection.xml @@ -1,5 +1,4 @@ <lcgdict> - <class name="StoreGate"/> <class name="StoreGateSvc"/> <namespace name="AthenaInternal"/> diff --git a/Control/StoreGateBindings/python/Bindings.py b/Control/StoreGateBindings/python/Bindings.py index cc8f7c746c5d75a9c08e0131cd3c603a37d7b3ca..07d8c9b46fd535518d3ff5fd6992be3c07a04fb1 100644 --- a/Control/StoreGateBindings/python/Bindings.py +++ b/Control/StoreGateBindings/python/Bindings.py @@ -33,9 +33,8 @@ def _setup(): py_sg_getitem = cppyy.gbl.AthenaInternal.py_sg_getitem # retrieve the StoreGateSvc class - global StoreGate, StoreGateSvc + global StoreGateSvc StoreGateSvc = cppyy.gbl.StoreGateSvc - StoreGate = cppyy.gbl.StoreGate # add specialized retrieve method def retrieve( self, klass, key = None ): diff --git a/Control/StoreGateBindings/src/StoreGateBindingsDict.h b/Control/StoreGateBindings/src/StoreGateBindingsDict.h index ea70377a8ec5f1989e43e25e8622f217d02d8145..6b95bbb15fdd18e2b8cb519a944c42d7893ff12d 100755 --- a/Control/StoreGateBindings/src/StoreGateBindingsDict.h +++ b/Control/StoreGateBindings/src/StoreGateBindingsDict.h @@ -1,14 +1,13 @@ ///////////////////////// -*- C++ -*- ///////////////////////////// /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef STOREGATEBINDINGS_STOREGATEBINDINGSDICT_H #define STOREGATEBINDINGS_STOREGATEBINDINGSDICT_H #include "StoreGate/StoreGateSvc.h" -#include "StoreGate/StoreGate.h" struct _object; typedef _object PyObject; diff --git a/Control/xAODRootAccess/scripts/checkxAOD.py b/Control/xAODRootAccess/scripts/checkxAOD.py index c38e2e098d81cde2d3d5884d22a9b53b277ec4b5..f16698f182da749be5413cf0e04644729ab5b342 100755 --- a/Control/xAODRootAccess/scripts/checkxAOD.py +++ b/Control/xAODRootAccess/scripts/checkxAOD.py @@ -33,10 +33,10 @@ def main(): "Trig" : ["^HLT", "^LVL1", "^xTrig", "^Trig", "^CTP_Decision", "^TrigInDetTrackTruthMap", "^TrigNavigation", ".*TriggerTowers", "TileTTL1MBTS", "^TileL2Cnt", "RoIBResult"], "MET" : ["^MET", "^METMAP", "JEMEtSums"], "EvtId" : ["^ByteStreamEventInfo", "^EventInfo", "^McEventInfo", "^LumiBlockN", "^EventWeight", "^RunNumber", "^ConditionsRun", "^EventTime", "^BunchId", "^EventNumber"], - "tau" : ["^Tau", "^CombinedStauTrackParticles", "^ExtrapolatedStauTrackParticles"], + "tau" : ["^Tau", "^DiTauJets"], "PFO" : ["(.*)EventShape$", "^AntiKt4EMPFlowJets", "^JetETMissChargedParticleFlowObjects", "^JetETMissNeutralParticleFlowObjects"], "egamma" : ["^GSF", "^ForwardElectron", "^egamma", "^Electron", "^Photon"], - "Muon" : ["^Muon", "^TileMuObj", "^MS", "^SlowMuons", "^Staus", "(.*)MuonTrackParticles$", "MUCTPI_RDO", "^RPC", "^TGC", "^MDT", "^CSC", ".*MuonMeasurements$", "^ExtrapolatedMuonTracks", "^CombinedMuonTracks"], + "Muon" : ["^Muon", "^TileMuObj", "^MS", "^SlowMuons", ".*Stau", "(.*)MuonTrackParticles$", "MUCTPI_RDO", "^RPC", "^TGC", "^MDT", "^CSC", "^sTGC", "^Micromegas", ".*MuonMeasurements$", "^ExtrapolatedMuonTracks", "^CombinedMuonTracks"], "BTag" : ["^BTag"], "InDet" : ["^InDet", "^PrimaryVertices", "^ComTime_TRT", "^Pixel", "^TRT", "^SCT", "^BCM", "^CTP", "^Tracks", "^ResolvedForwardTracks", "^SplitClusterAmbiguityMap"], "Jet" : ["^CamKt", "^AntiKt", "^Jet"], diff --git a/DataQuality/DataQualityTools/DataQualityTools/DQTBackgroundMon.h b/DataQuality/DataQualityTools/DataQualityTools/DQTBackgroundMon.h index 4f1118dfa66441118348878f1712b424b8ca306b..a3e179ccf584633d2223aee8099dbcc6882c0d36 100644 --- a/DataQuality/DataQualityTools/DataQualityTools/DQTBackgroundMon.h +++ b/DataQuality/DataQualityTools/DataQualityTools/DQTBackgroundMon.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ /** @@ -44,6 +44,11 @@ private: RHK<Trk::SegmentCollection> m_SegmentCollectionKey {this, "MuonSegmentsKey", "MuonSegments", ""}; RHK<BeamBackgroundData> m_BeamBackgroundDataKey {this, "BeamBackgroundDataKey", "BeamBackgroundData", ""}; RHK<xAOD::VertexContainer> m_VertexContainerKey {this, "PrimaryVerticesKey", "PrimaryVertices", ""}; + SG::ReadDecorHandleKey<xAOD::EventInfo> m_eventInfoDecorKey{this,"eventInfoDecorKey", + "EventInfo.backgroundWord", + "Key to enforce scheduling"}; + // we dp not need a decorhandle key for the MBTS background because we already depend on MBTSCollisionTime + // For parsing the int returned by TrigDecTool's getBGCode() GP<int> m_filledBG {this, "FilledBGIndex", 1}; diff --git a/DataQuality/DataQualityTools/DataQualityTools/DQTDataFlowMonAlg.h b/DataQuality/DataQualityTools/DataQualityTools/DQTDataFlowMonAlg.h index 06cef9ce52386aa505f9a709be91f2b8d6745290..50901fd5951ee69b7153630a8b3c612c0596be5d 100644 --- a/DataQuality/DataQualityTools/DataQualityTools/DQTDataFlowMonAlg.h +++ b/DataQuality/DataQualityTools/DataQualityTools/DQTDataFlowMonAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ // ******************************************************************** @@ -25,8 +25,13 @@ class DQTDataFlowMonAlg: public AthMonitorAlgorithm virtual ~DQTDataFlowMonAlg() {}; + virtual StatusCode initialize() override; + virtual StatusCode fillHistograms( const EventContext& ctx ) const override; + private: + SG::ReadDecorHandleKey<xAOD::EventInfo> m_TileStatusKey{this, "TileStatusKey", "EventInfo.TileStatus"}; + }; #endif diff --git a/DataQuality/DataQualityTools/src/DQTBackgroundMon.cxx b/DataQuality/DataQualityTools/src/DQTBackgroundMon.cxx index 3d0489a1dad4d97cdbeffdd3ff7fb01a961e404c..1c17221900d3af52a028a8e8236480941aab48f6 100644 --- a/DataQuality/DataQualityTools/src/DQTBackgroundMon.cxx +++ b/DataQuality/DataQualityTools/src/DQTBackgroundMon.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "DataQualityTools/DQTBackgroundMon.h" @@ -18,6 +18,7 @@ StatusCode DQTBackgroundMon::initialize() { ATH_CHECK( m_LUCID_RawDataContainerKey.initialize() ); ATH_CHECK( m_BeamBackgroundDataKey.initialize() ); ATH_CHECK( m_VertexContainerKey.initialize() ); + ATH_CHECK( m_eventInfoDecorKey.initialize() ); return AthMonitorAlgorithm::initialize(); } diff --git a/DataQuality/DataQualityTools/src/DQTDataFlowMonAlg.cxx b/DataQuality/DataQualityTools/src/DQTDataFlowMonAlg.cxx index a73005be38dedf3d38a189c5c84b15cf8fc8d5c6..566b793d704f1166eb583cb9ed35f624b49b0d17 100644 --- a/DataQuality/DataQualityTools/src/DQTDataFlowMonAlg.cxx +++ b/DataQuality/DataQualityTools/src/DQTDataFlowMonAlg.cxx @@ -21,6 +21,13 @@ DQTDataFlowMonAlg::DQTDataFlowMonAlg( const std::string& name, { } +StatusCode +DQTDataFlowMonAlg::initialize() +{ + ATH_CHECK(AthMonitorAlgorithm::initialize()); + ATH_CHECK(m_TileStatusKey.initialize()); + return StatusCode::SUCCESS; +} StatusCode DQTDataFlowMonAlg::fillHistograms( const EventContext& ctx ) const diff --git a/DataQuality/DataQualityUtils/python/messaging_listen.py b/DataQuality/DataQualityUtils/python/messaging_listen.py index 6b1080ef9052fca73a53058b4814f28e09dc6369..214098897db23c7ebeccdc44f3666fb910bab7b7 100644 --- a/DataQuality/DataQualityUtils/python/messaging_listen.py +++ b/DataQuality/DataQualityUtils/python/messaging_listen.py @@ -18,12 +18,13 @@ class ATLASDQMListener(object): self.selector = selector def __enter__(self): - if stomp.__version__ >= (4,1,11): - return self.__enter41__() + if stomp.__version__ >= (6,1,0): + return self.__enter61__() else: - return self.__enter31__() + logging.critical("Unable to find stomp.py >= 6.1.0, can't proceed") + raise ValueError("Version of stomp.py is too old") - def __enter31__(self): + def __enter61__(self): serverlist=[_[4] for _ in socket.getaddrinfo(MSGSERVER, MSGPORT, socket.AF_INET, socket.SOCK_STREAM)] @@ -33,62 +34,16 @@ class ATLASDQMListener(object): if hasattr(self.listener, 'conn'): self.listener.conn=[] for svr in serverlist: - #print 'set up', svr - cfg = stompconfig.config() + auth = stompconfig.config() + cfg = {} cfg['heartbeats'] = (0,0) cfg['reconnect_attempts_max'] = 3 cfg['version'] = 1.1 conn=stomp.Connection([svr], **cfg) - #print('set up Connection') conn.set_listener('somename',self.listener) if hasattr(self.listener, 'conn'): self.listener.conn.append(conn) - #print('Set up listener') - conn.start() - - #print('started connection') - - conn.connect(wait=True) - #print('connected') - hdr = {} - if self.selector is not None: hdr['selector'] = self.selector - if hasattr(self.listener, 'ack_mode'): - ack_mode=self.listener.ack_mode - else: - ack_mode='auto' - conn.subscribe(destination=self.dest, ack=ack_mode, headers = hdr, id=len(self.conns)) - #print('subscribed') - self.conns.append(conn) - return self - - def __enter41__(self): - serverlist=[_[4] for _ in socket.getaddrinfo(MSGSERVER, MSGPORT, - socket.AF_INET, - socket.SOCK_STREAM)] - - from . import stompconfig - self.conns = [] - if hasattr(self.listener, 'conn'): - self.listener.conn=[] - for svr in serverlist: - #print 'set up', svr - cfg = stompconfig.config() - #cfg['heart-beat'] = (5000,5000) - cfg['reconnect_attempts_max'] = 3 - cfg['version'] = 1.1 - cfg['login'] = cfg['user'] - conn=stomp.Connection([svr], heartbeats=(180000,180000)) - #print('set up Connection') - conn.set_listener('somename',self.listener) - if hasattr(self.listener, 'conn'): - self.listener.conn.append(conn) - #print('Set up listener') - conn.start() - - #print('started connection') - - conn.connect(wait=True, **cfg) - #print('connected') + conn.connect(wait=True, **auth) hdr = {} if self.selector is not None: hdr['selector'] = self.selector if hasattr(self.listener, 'ack_mode'): @@ -96,7 +51,6 @@ class ATLASDQMListener(object): else: ack_mode='auto' conn.subscribe(destination=self.dest, ack=ack_mode, headers = hdr, id=len(self.conns)) - #print('subscribed') self.conns.append(conn) return self diff --git a/DataQuality/DataQualityUtils/python/panic.py b/DataQuality/DataQualityUtils/python/panic.py index b0efb85a371b79651c3c7844a25989382c5aa03f..7df3dfa65ca81057b1b5a833f9531131ba708ad4 100644 --- a/DataQuality/DataQualityUtils/python/panic.py +++ b/DataQuality/DataQualityUtils/python/panic.py @@ -10,11 +10,10 @@ def panic(msg): import traceback import time - conn=stomp.Connection([('atlas-mb.cern.ch', 61013)], **stompconfig.config()) - conn.start() + conn=stomp.Connection([('atlas-mb.cern.ch', 61013)]) print('panic: started connection') - conn.connect(wait=True) + conn.connect(wait=True, **stompconfig.config()) print('panic: connected') header={'MsgClass':'DQ', @@ -32,7 +31,6 @@ def panic(msg): 'time': time.time(), 'usrtime': time.strftime('%Y-%m-%d %H:%H:%M %Z', time.localtime()), }) - #print(msg) conn.send(body, **header) print('panic: sent message') print(header) diff --git a/DataQuality/DataQualityUtils/python/stompconfig.py b/DataQuality/DataQualityUtils/python/stompconfig.py index 71b3f9a9cc3f7d91b84754b6166d741e330390fc..c8f389fbd9934ae6a75a783dcd5d74e52440c62b 100644 --- a/DataQuality/DataQualityUtils/python/stompconfig.py +++ b/DataQuality/DataQualityUtils/python/stompconfig.py @@ -3,6 +3,6 @@ def config(): with open('/afs/cern.ch/user/a/atlasdqm/atlas/mqinfo') as f: - return {'user': 'atlasdqm', + return {'username': 'atlasdqm', 'passcode': f.read().strip()} raise RuntimeError('Unable to read STOMP connection info') diff --git a/DataQuality/DataQualityUtils/scripts/DQM_Tier0Wrapper_tf.py b/DataQuality/DataQualityUtils/scripts/DQM_Tier0Wrapper_tf.py index e2dc385808a67f5e70f5656c0ed1c7d060ad8998..b0e756d36dabdee0a841f92c17af276c2669a172 100755 --- a/DataQuality/DataQualityUtils/scripts/DQM_Tier0Wrapper_tf.py +++ b/DataQuality/DataQualityUtils/scripts/DQM_Tier0Wrapper_tf.py @@ -87,9 +87,8 @@ def publish_success_to_mq(run, ptag, stream, incr, ami, procpass, hcfg, isprod): import stomp, json, ssl from DataQualityUtils import stompconfig dest='/topic/atlas.dqm.progress' - conn=stomp.Connection([('atlas-mb.cern.ch', 61013)], **stompconfig.config()) - conn.start() - conn.connect(wait=True) + conn=stomp.Connection([('atlas-mb.cern.ch', 61013)]) + conn.connect(wait=True, **stompconfig.config()) body = { 'run': run, @@ -107,7 +106,7 @@ def publish_success_to_mq(run, ptag, stream, incr, ami, procpass, hcfg, isprod): 'persistent': 'true', 'destination': dest, } - conn.send(message=json.dumps(body), destination=dest,headers=headers,ack='auto') + conn.send(body=json.dumps(body), destination=dest,headers=headers,ack='auto') conn.disconnect() ######################################################################### diff --git a/DataQuality/DataQualityUtils/scripts/DQM_Tier0Wrapper_trf.py b/DataQuality/DataQualityUtils/scripts/DQM_Tier0Wrapper_trf.py index b10788862cac2a058b985e8d3cc54f5cb1f1ddb7..fb15b787a84c531247c89f3c708e9c8e692bf337 100755 --- a/DataQuality/DataQualityUtils/scripts/DQM_Tier0Wrapper_trf.py +++ b/DataQuality/DataQualityUtils/scripts/DQM_Tier0Wrapper_trf.py @@ -83,12 +83,8 @@ def publish_success_to_mq(run, ptag, stream, incr, ami, procpass, hcfg, isprod): import stomp, json, ssl from DataQualityUtils import stompconfig dest='/topic/atlas.dqm.progress' - #conn=stomp.Connection([('atlas-mb.cern.ch', 61023)], use_ssl=True, - # ssl_cert_file=os.environ['X509_USER_PROXY'], - # ssl_version=ssl.PROTOCOL_TLSv1) - conn=stomp.Connection([('atlas-mb.cern.ch', 61013)], **stompconfig.config()) - conn.start() - conn.connect(wait=True) + conn=stomp.Connection([('atlas-mb.cern.ch', 61013)]) + conn.connect(wait=True, **stompconfig.config()) body = { 'run': run, @@ -106,7 +102,7 @@ def publish_success_to_mq(run, ptag, stream, incr, ami, procpass, hcfg, isprod): 'persistent': 'true', 'destination': dest, } - conn.send(message=json.dumps(body), destination=dest,headers=headers,ack='auto') + conn.send(body=json.dumps(body), destination=dest,headers=headers,ack='auto') conn.disconnect() ######################################################################### diff --git a/Database/IOVDbSvc/python/CondDB.py b/Database/IOVDbSvc/python/CondDB.py index 9dd4aebc60b7449e7135d2a67be33db2de67a881..8f78b362cffd0088335b58dea632e75ea419dbcc 100644 --- a/Database/IOVDbSvc/python/CondDB.py +++ b/Database/IOVDbSvc/python/CondDB.py @@ -314,6 +314,9 @@ This allows the possibility of later adding a new IOV using IOVSvc::setRange.""" if (ix2!=-1): xmltag=(folderstr[ix+1:ix2]).strip() ix=ix2+1 + if xmltag[-1] == '/': + xmltag="" + ix=ix+1 elif (folderstr[ix:ix+2]=='</' and xmltag!=""): ix2=folderstr.find('>',ix) if (ix2!=-1): diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/CMakeLists.txt b/DetectorDescription/GeoModel/AtlasGeoModel/CMakeLists.txt index 2f77ee8ad5a65e2e001cdeb40deb4853bf2c911b..3f0edb1092b102378b1d2590f633c5dfcb46967d 100644 --- a/DetectorDescription/GeoModel/AtlasGeoModel/CMakeLists.txt +++ b/DetectorDescription/GeoModel/AtlasGeoModel/CMakeLists.txt @@ -1,14 +1,11 @@ -################################################################################ -# Package: AtlasGeoModel -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( AtlasGeoModel ) # Install files from the package: -atlas_install_python_modules( python/*.py ) -atlas_install_joboptions( share/*.py ) -atlas_install_scripts( test/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) +atlas_install_scripts( test/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) if( NOT GENERATIONBASE ) atlas_add_test( EVNT_InputGeo_test diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/Agdd2Geo.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/Agdd2Geo.py index 581c3601798025025ccc83fdfcc8c6022f7363d8..b30e1815a559f231df1b4340e72dcd5365c7b3fe 100644 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/Agdd2Geo.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/Agdd2Geo.py @@ -1,20 +1,20 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon.DetFlags import DetFlags from AtlasGeoModel.MuonGMJobProperties import MuonGeometryFlags if ( DetFlags.detdescr.Muon_on() ): from AthenaCommon import CfgGetter - from AthenaCommon.AppMgr import ToolSvc,ServiceMgr,theApp + from AthenaCommon.AppMgr import ServiceMgr,theApp from AGDD2GeoSvc.AGDD2GeoSvcConf import AGDDtoGeoSvc AGDD2Geo = AGDDtoGeoSvc() - if not "MuonAGDDTool/MuonSpectrometer" in AGDD2Geo.Builders.__str__(): + if "MuonAGDDTool/MuonSpectrometer" not in AGDD2Geo.Builders.__str__(): AGDD2Geo.Builders += [CfgGetter.getPrivateTool("MuonSpectrometer", checkType=True)] if (MuonGeometryFlags.hasSTGC() and MuonGeometryFlags.hasMM()): - if not "NSWAGDDTool/NewSmallWheel" in AGDD2Geo.Builders.__str__(): + if "NSWAGDDTool/NewSmallWheel" not in AGDD2Geo.Builders.__str__(): AGDD2Geo.Builders += [CfgGetter.getPrivateTool("NewSmallWheel", checkType=True)] theApp.CreateSvc += ["AGDDtoGeoSvc"] diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/AtlasGeoDBInterface.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/AtlasGeoDBInterface.py index be5826fefe83c6ced9114b17507511d3bf6c1e48..52a73c8ecb14fc1523c865ee19fd20010a40fa64 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/AtlasGeoDBInterface.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/AtlasGeoDBInterface.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon import Logging @@ -126,10 +126,10 @@ class AtlasGeoDBInterface: # Check if the geometry tag was found in the DB if self.dbGeoTagId=="": - Logging.log.error("The geometry tag "+self.dbGeoTag+" could not be found in the database.") + Logging.log.error("The geometry tag %s could not be found in the database.", self.dbGeoTag) Logging.log.error("Its name might be misspelled and/or the script might access a local DB that is not up to date.") import sys - sys.exit(); + sys.exit() # Get node ids for the geometry tag tagIdList=[int(self.dbGeoTagId)] # start with the geometry tag Id @@ -137,7 +137,7 @@ class AtlasGeoDBInterface: # Loop while child tags are found while not bStopLoop : - query0 = self.dbSchema.newQuery(); + query0 = self.dbSchema.newQuery() query0.addToOutputList('C.NODE_NAME',"nodename") query0.addToOutputList('A.TAG_NAME',"tagname") @@ -177,7 +177,7 @@ class AtlasGeoDBInterface: upLeafName=leafName.upper() # check if table is defined in the current geometry - if not leafName in self.TagAndNodeVersionDict: + if leafName not in self.TagAndNodeVersionDict: dbId=[] dbContent={} paramName=[] diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInit.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInit.py index 8b1d7599900f606c0ffe6c6e4ada56fb09461a06..1c3f95c46ac4fa8dd3f3a7c786fa79ecf0dc153f 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInit.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInit.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration ## @file: AtlasGeoModel/python/GeoModelInit.py ## @brief: Encapsulate GeoModel configuration @@ -13,24 +13,24 @@ def _setupGeoModel(): import DetDescrCnvSvc.DetStoreConfig svcMgr.DetDescrCnvSvc.IdDictFromRDB = True except ImportError: - import DetDescrCnvSvc.DetStoreConfig + import DetDescrCnvSvc.DetStoreConfig # noqa: F401 svcMgr.DetDescrCnvSvc.IdDictFromRDB = True # Conditions DB setup and TagInfo - from IOVDbSvc.CondDB import conddb - import EventInfoMgt.EventInfoMgtInit + from IOVDbSvc.CondDB import conddb # noqa: F401 + import EventInfoMgt.EventInfoMgtInit # noqa: F401 if ( jobproperties.Global.DataSource() == "geant3" ): - from AtlasGeoModel import GeoModelInitDC1 - + from AtlasGeoModel import GeoModelInitDC1 # noqa: F401 + elif ( jobproperties.Global.DetGeo() == "ctbh8" ): - from AtlasGeoModel import GeoModelInitCTB + from AtlasGeoModel import GeoModelInitCTB # noqa: F401 elif ( jobproperties.Global.DetGeo() == "ctbh6" ): - from AtlasGeoModel import GeoModelInitH6 + from AtlasGeoModel import GeoModelInitH6 # noqa: F401 else: - from AtlasGeoModel import GeoModelInitStandard + from AtlasGeoModel import GeoModelInitStandard # noqa: F401 pass diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitCTB.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitCTB.py index ea3c08786ab2e786f1d85fe69193fa5639ae139b..306df1243fa752fdbdad7f81500e3f862bb426be 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitCTB.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitCTB.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon.AppMgr import ServiceMgr from AthenaCommon.AppMgr import theApp @@ -7,7 +7,6 @@ from GeoModelSvc.GeoModelSvcConf import GeoModelSvc ServiceMgr += GeoModelSvc() theApp.CreateSvc += [ "GeoModelSvc"] -from AtlasGeoModel import InDetGMCTB -from AtlasGeoModel import TileGMCTB -from AtlasGeoModel import LArGM - +from AtlasGeoModel import InDetGMCTB # noqa: F401 +from AtlasGeoModel import TileGMCTB # noqa: F401 +from AtlasGeoModel import LArGM # noqa: F401 diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitDC1.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitDC1.py index e8cc398862643c1469d75ee8c75c11809ae435ba..f3fcc9ccb178bbb6b1b28e0a5e2f10023ee68cc1 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitDC1.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitDC1.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon.AppMgr import ServiceMgr from AthenaCommon.AppMgr import theApp @@ -7,5 +7,5 @@ from GeoModelSvc.GeoModelSvcConf import GeoModelSvc ServiceMgr += GeoModelSvc() theApp.CreateSvc += [ "GeoModelSvc"] -from AtlasGeoModel import InDetGM -from AtlasGeoModel import MuonGM +from AtlasGeoModel import InDetGM # noqa: F401 +from AtlasGeoModel import MuonGM # noqa: F401 diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitH6.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitH6.py index 48d019513292d16cc1785cfcb1f03faa647c3e36..c9bda3fd87c6e9389c2963fba23f6e39c116624f 100644 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitH6.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitH6.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon.AppMgr import ServiceMgr from AthenaCommon.AppMgr import theApp @@ -35,4 +35,4 @@ elif (SimFlags.SimLayout.get_Value()=="tb_LArH6_2004"): # as long as not created anywhere else in GeoModel : -from CaloDetMgrDetDescrCnv import CaloDetMgrDDCnv +from CaloDetMgrDetDescrCnv import CaloDetMgrDDCnv # noqa: F401 diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitStandard.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitStandard.py index 9bd604af9af019aa7499f197c34ab93c0ff29e1a..e9e9279bb1be82df3a89a75eae57d1a3632ce018 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitStandard.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/GeoModelInitStandard.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon.AppMgr import ServiceMgr from AthenaCommon.AppMgr import theApp @@ -8,10 +8,9 @@ ServiceMgr += GeoModelSvc() theApp.CreateSvc += [ "GeoModelSvc"] # Load the detectors. These job option fragments look at DetFlags -from AtlasGeoModel import InDetGM -from AtlasGeoModel import LArGM -from AtlasGeoModel import TileGM -from AtlasGeoModel import MuonGM -from AtlasGeoModel import ForDetGM -from AtlasGeoModel import MiscGM - +from AtlasGeoModel import InDetGM # noqa: F401 +from AtlasGeoModel import LArGM # noqa: F401 +from AtlasGeoModel import TileGM # noqa: F401 +from AtlasGeoModel import MuonGM # noqa: F401 +from AtlasGeoModel import ForDetGM # noqa: F401 +from AtlasGeoModel import MiscGM # noqa: F401 diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGM.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGM.py index 7f1952dc4e11e0edcc3de97254c66875f66db672..a2d8e46b004ba6b3bd2ab14a408c83373e057063 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGM.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGM.py @@ -1,22 +1,18 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # # InDet GeoModel initialization # -from AthenaCommon.GlobalFlags import globalflags from AthenaCommon.JobProperties import jobproperties from AthenaCommon.DetFlags import DetFlags from AthenaCommon.AppMgr import ServiceMgr as svcMgr from AtlasGeoModel.CommonGMJobProperties import CommonGeometryFlags from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags -if InDetGeometryFlags.isSLHC(): - #SLHC specific code - from AthenaCommon.AppMgr import ToolSvc # Treat CTB separately if ( jobproperties.Global.DetGeo() == "ctbh8" or jobproperties.Global.DetGeo() == "ctbh6" ): - from AtlasGeoModel import InDetGMCTB + from AtlasGeoModel import InDetGMCTB # noqa: F401 elif ( DetFlags.detdescr.ID_on() ): from GeoModelSvc.GeoModelSvcConf import GeoModelSvc @@ -31,7 +27,6 @@ elif ( DetFlags.detdescr.ID_on() ): GeoModelSvc.DetectorTools += [ CfgGetter.getPrivateTool("PixelDetectorTool", checkType=True) ] if (DetFlags.detdescr.BCM_on() ) : - from AthenaCommon.AppMgr import ToolSvc from BCM_GeoModel.BCM_GeoModelConf import InDetDD__BCM_Builder bcmTool = InDetDD__BCM_Builder() GeoModelSvc.DetectorTools['PixelDetectorTool'].BCM_Tool = bcmTool @@ -51,7 +46,6 @@ elif ( DetFlags.detdescr.ID_on() ): else: from SCT_SLHC_GeoModel.SCT_SLHC_GeoModelConf import SCT_SLHC_DetectorTool sctSLHCTool = SCT_SLHC_DetectorTool() - sctSLHCTool.ServiceBuilderTool = InDetServMatBuilderToolSLHC GeoModelSvc.DetectorTools += [ sctSLHCTool ] else: # Current atlas specific code @@ -71,10 +65,8 @@ elif ( DetFlags.detdescr.ID_on() ): #SLHC specific code servMatTool = InDetServMatTool() GeoModelSvc.DetectorTools += [ servMatTool ] - servMatTool.ServiceBuilderTool = InDetServMatBuilderToolSLHC else: GeoModelSvc.DetectorTools += [ InDetServMatTool() ] # Make alignable - from InDetCondFolders import InDetAlignFolders - + from InDetCondFolders import InDetAlignFolders # noqa: F401 diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGMJobProperties.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGMJobProperties.py index 43c5b63cf2118e038e1f08bd1cddcc2173b00438..5744bd0b379a968bbe104feab957b8979e7a7ead 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGMJobProperties.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGMJobProperties.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # # InDet GeoModel initialization @@ -70,21 +70,21 @@ class InDetGMFlags(CommonGMFlags, object): self.__dict__["IBL"] = False self.__dict__["SLHC"] = False if _layout in ['IBL'] : self.__dict__["IBL"] = True - if self.__dict__["IBL"] == False: self.__dict__["IBLlayout"]="noIBL" + if self.__dict__["IBL"] is False: self.__dict__["IBLlayout"]="noIBL" if _layout not in ['SLHC'] and ( CommonGeometryFlags.Run() in ["RUN2", "RUN3"] ) : self.__dict__["IBL"] = True if _layout in ['SLHC'] : self.__dict__["SLHC"] = True def dump(self): - Logging.log.info("Geometry tag InDetGMFlags : "+self.__dict__["geomTag"]+" ------------------------------------") - Logging.log.info("VersionName = "+self.__dict__["VersionName"]) - Logging.log.info("Layout = "+self.__dict__["Layout"]) - Logging.log.info("DBM = "+self.__dict__["DBM"]) + Logging.log.info("Geometry tag InDetGMFlags : %s", self.__dict__["geomTag"]+" ------------------------------------") + Logging.log.info("VersionName = %s", self.__dict__["VersionName"]) + Logging.log.info("Layout = %s", self.__dict__["Layout"]) + Logging.log.info("DBM = %s", self.__dict__["DBM"]) - Logging.log.info("SLHC flag : "+self.__dict__["SLHC"]) - Logging.log.info("IBL flag : "+self.__dict__["IBL"]) - Logging.log.info("IBL layout : "+ self.__dict__["IBLlayout"]) + Logging.log.info("SLHC flag : %s", self.__dict__["SLHC"]) + Logging.log.info("IBL flag : %s", self.__dict__["IBL"]) + Logging.log.info("IBL layout : %s", self.__dict__["IBLlayout"]) # ------------------------------------------------------------------------------------- @@ -169,14 +169,14 @@ class InDetGeometryFlags_JobProperties(JobPropertyContainer): def dump(self): - Logging.log.info("VersionName = "+self.GeoVersionName()) - Logging.log.info("Layout = "+self.GeoLayout()) - Logging.log.info("DBM = "+self.isDBM()) + Logging.log.info("VersionName = %s", self.GeoVersionName()) + Logging.log.info("Layout = %s", self.GeoLayout()) + Logging.log.info("DBM = %s", self.isDBM()) - Logging.log.info("SLHC flag : "+self.isSLHC()) - Logging.log.info("IBL flag : "+self.isIBL()) - Logging.log.info("IBL layout : "+self.IBLLayout()) - Logging.log.info("Dynamic alignment : "+self.useDynamicAlignFolders()) + Logging.log.info("SLHC flag : %s", self.isSLHC()) + Logging.log.info("IBL flag : %s", self.isIBL()) + Logging.log.info("IBL layout : %s", self.IBLLayout()) + Logging.log.info("Dynamic alignment : %s", self.useDynamicAlignFolders()) jobproperties.add_Container(InDetGeometryFlags_JobProperties) diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/LArGM.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/LArGM.py index e1356826b363ce1e877125e069fa560872022143..b184c5fd6b2137d5545d67fae06a6f39ddcd4bba 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/LArGM.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/LArGM.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # # LAr GeoModel initialization @@ -13,10 +13,10 @@ if ( DetFlags.detdescr.LAr_on() ): GeoModelSvc.DetectorTools += [ LArDetectorToolNV() ] # as long as not created anywhere else in GeoModel : - from CaloDetMgrDetDescrCnv import CaloDetMgrDDCnv + from CaloDetMgrDetDescrCnv import CaloDetMgrDDCnv # noqa: F401 # apply possible alignments if ( jobproperties.Global.DetGeo() == "atlas" or jobproperties.Global.DetGeo() == "commis" ): - from LArConditionsCommon import LArAlignable + from LArConditionsCommon import LArAlignable # noqa: F401 GeoModelSvc.DetectorTools[ "LArDetectorToolNV" ].ApplyAlignments = True diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/MuonGMJobProperties.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/MuonGMJobProperties.py index 48aff257792f7794a6408147ad1f6ecdd7faf698..9e73288340537a78dda7d00775eec80072b4e7aa 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/MuonGMJobProperties.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/MuonGMJobProperties.py @@ -1,9 +1,7 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration - -from __future__ import print_function +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon.JobProperties import JobProperty, JobPropertyContainer, jobproperties -from AtlasGeoModel.CommonGMJobProperties import CommonGMFlags, CommonGeometryFlags +from AtlasGeoModel.CommonGMJobProperties import CommonGMFlags # ------------------------------------------------------------------------------------- # Muon geometry flags initialization diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/SetGeometryVersion.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/SetGeometryVersion.py index 3e282c80f5369850e71c70f8abebc29d48aa1294..f4d98482af204b752735cc4116bb77b9e03c4408 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/SetGeometryVersion.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/SetGeometryVersion.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon.JobProperties import jobproperties from AthenaCommon.DetFlags import DetFlags @@ -56,5 +56,5 @@ relversion = rel_metadata['release'].split('.') if len(relversion) < 3: relversion = rel_metadata['base release'].split('.') -Logging.log.info("SetGeometryVersion.py obtained major release version %s" % relversion[0]) +Logging.log.info("SetGeometryVersion.py obtained major release version %s", relversion[0]) GeoModelSvc.SupportedGeometry = int(relversion[0]) diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/SetupRecoGeometry.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/SetupRecoGeometry.py index 4c5de86c63cd1cbcad5f8bc796839c90f881fb2e..da80c36147565d7baeb45359cd5c7fee8dd60dfa 100644 --- a/DetectorDescription/GeoModel/AtlasGeoModel/python/SetupRecoGeometry.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/SetupRecoGeometry.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # # Configure GeoModel tools to build minimal geometry fo reconstruction @@ -19,4 +19,4 @@ if ( DetFlags.detdescr.Tile_on() ): # Build Muon dead materials using AGDD2Geo # -from AtlasGeoModel import Agdd2Geo +from AtlasGeoModel import Agdd2Geo # noqa: F401 diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelBuildAll.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelBuildAll.py deleted file mode 100755 index 750b4dcb3fa77a8a9ed7df5f24e2f7ea14ac498a..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelBuildAll.py +++ /dev/null @@ -1,6 +0,0 @@ - -print "AtlasGeoModel/GeoModelBuildAll.py is OBSOLETE" - -from AtlasGeoModel import SetGeometryVersion -from AtlasGeoModel import GeoModelInit - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelCommon.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelCommon.py deleted file mode 100755 index c99b7cd38200b17a663ae0b240d2c5eeb63704cd..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelCommon.py +++ /dev/null @@ -1,6 +0,0 @@ - -print "AtlasGeoModel/GeoModelCommon.py is OBSOLETE" - -from AtlasGeoModel import SetGeometryVersion -from AtlasGeoModel import GeoModelInit - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInit.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInit.py deleted file mode 100755 index af3f02e4cf8ae32bc0f69952cfa9192833f12008..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInit.py +++ /dev/null @@ -1,4 +0,0 @@ - -printfunc ("AtlasGeoModel/GeoModelInit.py is OBSOLETE") - -from AtlasGeoModel import GeoModelInit diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitCTB.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitCTB.py deleted file mode 100755 index 116fc9ce10fb1916788fe31fd16e9e12f57eb52e..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitCTB.py +++ /dev/null @@ -1,4 +0,0 @@ -print "AtlasGeoModel/GeoModelInitCTB.py is OBSOLETE" - -from AtlasGeoModel import GeoModelInitCTB - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitDC1.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitDC1.py deleted file mode 100755 index 34c62664445f22ba450bc0a726cdbedf5d004909..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitDC1.py +++ /dev/null @@ -1,4 +0,0 @@ -print "AtlasGeoModel/GeoModelInitDC1.py is OBSOLETE" - -from AtlasGeoModel import GeoModelInitDC1 - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitH6.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitH6.py deleted file mode 100644 index ca5fca556792656d082225a269945ba19dc92fed..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitH6.py +++ /dev/null @@ -1,4 +0,0 @@ -print "AtlasGeoModel/GeoModelInitH6.py is OBSOLETE" - -from AtlasGeoModel import GeoModelInitH6 - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitStandard.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitStandard.py deleted file mode 100755 index 3d15de2aeb3dbf2577faa2ef1caa081146449514..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/GeoModelInitStandard.py +++ /dev/null @@ -1,5 +0,0 @@ - -print "AtlasGeoModel/GeoModelInitStandard.py is OBSOLETE" - -from AtlasGeoModel import GeoModelInitStandard - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/InDetGeoModel.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/InDetGeoModel.py deleted file mode 100755 index 3cd0c8974460a5adc2ab822b12802cd7c9d82fa8..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/InDetGeoModel.py +++ /dev/null @@ -1,5 +0,0 @@ - -print "AtlasGeoModel/InDetGeoModel.py is OBSOLETE" - -from AtlasGeoModel import InDetGM - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/InDetGeoModelCTB.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/InDetGeoModelCTB.py deleted file mode 100755 index 173c59dac7731b64f829c4d9625c21a8702a370e..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/InDetGeoModelCTB.py +++ /dev/null @@ -1,7 +0,0 @@ - -print "AtlasGeoModel/InDetGeoModelCTB.py is OBSOLETE" - -from AtlasGeoModel import InDetGMCTB - - - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/InDetGeoModelDC2.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/InDetGeoModelDC2.py deleted file mode 100755 index 5f043fb4571f6a480da86303019b8167e1e25a5f..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/InDetGeoModelDC2.py +++ /dev/null @@ -1,5 +0,0 @@ - -print "AtlasGeoModel/InDetGeoModelDC2.py is OBSOLETE" - -from AtlasGeoModel import InDetGM - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/LArGeoModel.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/LArGeoModel.py deleted file mode 100755 index 29a4b4563512bb277e99bd5934e44ae733f632ea..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/LArGeoModel.py +++ /dev/null @@ -1,2 +0,0 @@ -from AtlasGeoModel import LArGM - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/MiscGeoModel.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/MiscGeoModel.py deleted file mode 100755 index a57eb05c77ea3b06a2e4b19792abf68b60bdd26f..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/MiscGeoModel.py +++ /dev/null @@ -1,4 +0,0 @@ - -print "AtlasGeoModel/MiscGeoModel.py is OBSOLETE" - -from AtlasGeoModel import MiscGM diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/MuonGeoModel.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/MuonGeoModel.py deleted file mode 100755 index f0b394a49478b3ade8e4a35e44c5e461f800c477..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/MuonGeoModel.py +++ /dev/null @@ -1,4 +0,0 @@ - -print "AtlasGeoModel/MuonGeoModel.py is OBSOLETE" - -from AtlasGeoModel import MuonGM diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/MuonGeoModelCTB.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/MuonGeoModelCTB.py deleted file mode 100755 index 0f5d97372a46b0417dd1e5a86d3b3034fc9aef38..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/MuonGeoModelCTB.py +++ /dev/null @@ -1,2 +0,0 @@ -print " MuonGeoModelCTB is not supported " - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/SetGeometryVersion.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/SetGeometryVersion.py deleted file mode 100755 index c5ef0cad550eea54128f1d1def907b3ca87aaf54..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/SetGeometryVersion.py +++ /dev/null @@ -1,5 +0,0 @@ - -printfunc ("AtlasGeoModel/SetGeometryVersion.py is OBSOLETE") - -from AtlasGeoModel import SetGeometryVersion - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/SetGeometryVersionNew.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/SetGeometryVersionNew.py deleted file mode 100755 index 1e0eb7f3044d3823a0650f60a1b7cd2753348a21..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/SetGeometryVersionNew.py +++ /dev/null @@ -1,6 +0,0 @@ - -print "AtlasGeoModel/SetGeometryVersionNew.py is OBSOLETE" - -from AtlasGeoModel import SetGeometryVersion - - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/TileGeoModel.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/TileGeoModel.py deleted file mode 100755 index bbbe0de6cab50ef018bbf583b74b6519f1b4d84a..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/TileGeoModel.py +++ /dev/null @@ -1,4 +0,0 @@ - -print "AtlasGeoModel/TileGeoModel.py is OBSOLETE" - -from AtlasGeoModel import TileGM diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/share/TileGeoModelCTB.py b/DetectorDescription/GeoModel/AtlasGeoModel/share/TileGeoModelCTB.py deleted file mode 100755 index 33a6e3df95fb16e363cb6e415c0d69a62fb0cafd..0000000000000000000000000000000000000000 --- a/DetectorDescription/GeoModel/AtlasGeoModel/share/TileGeoModelCTB.py +++ /dev/null @@ -1,6 +0,0 @@ - -print "AtlasGeoModel/TileGeoModelCTB.py is OBSOLETE" - -from AtlasGeoModel import TileGMCTB - - diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_AOD_test.py b/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_AOD_test.py index baeaf75e8615a2b731599e224364f0e5afaa3c00..6c0cace9af8a3394e4b19f3916cde38223a9356e 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_AOD_test.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_AOD_test.py @@ -1,10 +1,9 @@ #!/usr/bin/env python """Run a test on Atlas Geometry configuration using a HITS file as input -Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration """ if __name__ == "__main__": - import os from AthenaCommon.Logging import log from AthenaCommon.Constants import DEBUG from AthenaCommon.Configurable import Configurable diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_EVNT_test.py b/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_EVNT_test.py index 96e2f53e8cd2a36f646b1c3952a641a7c7fe0284..431daabf194eb26d363e92a4ab061ed1e27d0c1a 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_EVNT_test.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_EVNT_test.py @@ -1,10 +1,9 @@ #!/usr/bin/env python """Run a test on Atlas Geometry configuration using a EVNT file as input -Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration """ if __name__ == "__main__": - import os from AthenaCommon.Logging import log from AthenaCommon.Constants import DEBUG from AthenaCommon.Configurable import Configurable diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_HITS_test.py b/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_HITS_test.py index e6d7ec29305405e6e7fa64e8ed789e7c31065969..b1f721b81d458e9a7fb1ce1dbeb5579806db6349 100755 --- a/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_HITS_test.py +++ b/DetectorDescription/GeoModel/AtlasGeoModel/test/AtlasGeometryConfig_HITS_test.py @@ -1,10 +1,9 @@ #!/usr/bin/env python """Run a test on Atlas Geometry configuration using a HITS file as input -Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration """ if __name__ == "__main__": - import os from AthenaCommon.Logging import log from AthenaCommon.Constants import DEBUG from AthenaCommon.Configurable import Configurable diff --git a/Event/ByteStreamCnvSvc/ByteStreamCnvSvc/ByteStreamCnvSvc.h b/Event/ByteStreamCnvSvc/ByteStreamCnvSvc/ByteStreamCnvSvc.h index f3757af2ed92dc15f6c8338a282dd44506719880..ff91d1b3428342200885e8d7f6246a726bc36b37 100644 --- a/Event/ByteStreamCnvSvc/ByteStreamCnvSvc/ByteStreamCnvSvc.h +++ b/Event/ByteStreamCnvSvc/ByteStreamCnvSvc/ByteStreamCnvSvc.h @@ -60,6 +60,11 @@ public: /// @brief Access to FullEventAssembler template <class T> StatusCode getFullEventAssembler(T*&t, const std::string& nm); + virtual StatusCode queryInterface( const InterfaceID& riid, void** ppvInterface ) override; + //@} + /// Should rather be in IByteStreamSvc.h if we had one + static const InterfaceID& interfaceID(); + protected: RawEventWrite* setRawEvent (std::unique_ptr<RawEventWrite> rawEventWrite); diff --git a/Event/ByteStreamCnvSvc/src/ByteStreamCnvSvc.cxx b/Event/ByteStreamCnvSvc/src/ByteStreamCnvSvc.cxx index 545260bc556d0000601196457e64fc6557015b61..59184f2add55b5ab952c9df2ece362cfee42d0de 100644 --- a/Event/ByteStreamCnvSvc/src/ByteStreamCnvSvc.cxx +++ b/Event/ByteStreamCnvSvc/src/ByteStreamCnvSvc.cxx @@ -246,6 +246,28 @@ void ByteStreamCnvSvc::writeFEA (SlotData& slot) ATH_MSG_DEBUG("after FEAMAP size = " << feaMap.size()); } + +StatusCode ByteStreamCnvSvc::queryInterface(const InterfaceID& riid, void** ppvInterface) +{ + if ( interfaceID().versionMatch(riid) ) { + *ppvInterface = (StoreGateSvc*)this; + } + else { + // Interface is not directly available: try out a base class + return ByteStreamCnvSvcBase::queryInterface(riid, ppvInterface); + } + addRef(); + return StatusCode::SUCCESS; +} + + +const InterfaceID& +ByteStreamCnvSvc::interfaceID() { + static const InterfaceID IDByteStreamCnvSvc("ByteStreamCnvSvc", 1, 0); + return IDByteStreamCnvSvc; +} + + RawEventWrite* ByteStreamCnvSvc::setRawEvent (std::unique_ptr<RawEventWrite> rawEventWrite) { diff --git a/Event/EventBookkeeperTools/CMakeLists.txt b/Event/EventBookkeeperTools/CMakeLists.txt index 40cd158240b3f9d00d6b9efd9cd1cb7f2fbb543a..3878dd2fec896cc6d1a75c893ebd572cbadbcada 100644 --- a/Event/EventBookkeeperTools/CMakeLists.txt +++ b/Event/EventBookkeeperTools/CMakeLists.txt @@ -35,7 +35,7 @@ if( NOT XAOD_STANDALONE ) src/*.cxx src/components/*.cxx LINK_LIBRARIES AthenaBaseComps AthenaKernel GaudiKernel EventBookkeeperToolsLib - SGTools StoreGateLib EventBookkeeperMetaData EventInfo ) + SGTools StoreGateLib EventBookkeeperMetaData ) endif() atlas_add_executable( dump-cbk @@ -43,7 +43,7 @@ atlas_add_executable( dump-cbk LINK_LIBRARIES ${xaod_access_lib} AsgTools ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) # Tests diff --git a/Event/EventBookkeeperTools/src/BookkeeperTool.h b/Event/EventBookkeeperTools/EventBookkeeperTools/BookkeeperTool.h similarity index 68% rename from Event/EventBookkeeperTools/src/BookkeeperTool.h rename to Event/EventBookkeeperTools/EventBookkeeperTools/BookkeeperTool.h index 3562be7cdd64286edeabe99d45c1ef26bdf20366..2849f9162494eee21a377a246afcae0110d8c60b 100644 --- a/Event/EventBookkeeperTools/src/BookkeeperTool.h +++ b/Event/EventBookkeeperTools/EventBookkeeperTools/BookkeeperTool.h @@ -2,8 +2,8 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -#ifndef BOOKKEEPERTOOL_H -#define BOOKKEEPERTOOL_H +#ifndef EVENT_BOOKKEEPER_TOOLS__BOOKKEEPER_TOOL_H +#define EVENT_BOOKKEEPER_TOOLS__BOOKKEEPER_TOOL_H /** @file BookkeeperTool.h * @brief This class is an implementation of the AsgMetadataTool @@ -15,24 +15,38 @@ #include <memory> #include <AsgTools/AsgMetadataTool.h> -#include <AthenaBaseComps/AthAlgTool.h> -#include <AthenaKernel/ICutFlowSvc.h> +#include <AsgTools/PropertyWrapper.h> +#include <AsgTools/SourceID.h> + #ifndef XAOD_STANDALONE +#include <AthenaKernel/ICutFlowSvc.h> #include <AthenaKernel/IMetaDataTool.h> -#endif // XAOD_STANDALONE #include <GaudiKernel/ServiceHandle.h> +#endif // XAOD_STANDALONE #include <xAODCutFlow/CutBookkeeperContainer.h> #include <xAODCutFlow/CutBookkeeperAuxContainer.h> +#include <EventBookkeeperTools/CutBookkeepersLocalCache.h> + + +#ifndef XAOD_STANDALONE + class CutFlowSvc; +#endif // XAOD_STANDALONE + + class BookkeeperTool : public asg::AsgMetadataTool #ifndef XAOD_STANDALONE , public virtual ::IMetaDataTool #endif // XAOD_STANDALONE { - ASG_TOOL_CLASS0(BookkeeperTool) +#ifndef XAOD_STANDALONE + /// Declare the correct constructor for Athena + ASG_TOOL_CLASS( BookkeeperTool, IMetaDataTool ) +#endif + public: // Constructor and Destructor /// Standard Service Constructor BookkeeperTool(const std::string& name = "BookkeeperTool"); @@ -43,37 +57,34 @@ public: // Constructor and Destructor public: virtual StatusCode initialize() override; virtual StatusCode metaDataStop() override; +#ifdef XAOD_STANDALONE + virtual StatusCode beginInputFile() override; + virtual StatusCode endInputFile() override; +#else virtual StatusCode beginInputFile() override {return StatusCode::SUCCESS;} virtual StatusCode endInputFile() override {return StatusCode::SUCCESS;} virtual StatusCode beginInputFile(const SG::SourceID &source) override; virtual StatusCode endInputFile(const SG::SourceID &source) override; +#endif private: - /// Helper in-memory structure - struct LocalContainers { - std::vector<std::unique_ptr<xAOD::CutBookkeeperContainer>> cont; - std::vector<std::unique_ptr<xAOD::CutBookkeeperAuxContainer>> aux; - - bool empty() { return cont.empty(); } - std::size_t size() { return cont.size(); } - xAOD::CutBookkeeperContainer *at(std::size_t n) { return cont.at(n).get(); } - void clear() { cont.clear(); aux.clear(); } - }; - /// Copy input containers to the output - StatusCode copyInputContainersToOutput(LocalContainers &target, + StatusCode copyInputContainersToOutput(CutBookkeepersLocalCache &target, const SG::SourceID &source = ""); /// Fill Cutflow information from the service StatusCode copyCutflowFromService(); - /// Prepare containers - StatusCode prepareContainers(LocalContainers &target); + /// Initialisation helpers + StatusCode loadXAODMetaData(); + StatusCode loadPOOLMetaData(); +#ifndef XAOD_STANDALONE /// Pointer to the public CutFlowSvc interface ServiceHandle<ICutFlowSvc> m_cutFlowSvc{ this, "CutFlowSvc", "CutFlowSvc/CutFlowSvc", "Pointer to the CutFlowSvc"}; /// Direct pointer to the CutFlowSvc for "private" methods access - const CutFlowSvc *m_cutFlowSvcPrivate; + CutFlowSvc *m_cutFlowSvcPrivate; +#endif // XAOD_STANDALONE /// The name of the input CutBookkeeperContainer Gaudi::Property<std::string> m_inputCollName{this, "InputCollName", "CutBookkeepers", @@ -83,12 +94,15 @@ private: Gaudi::Property<std::string> m_outputCollName{this, "OutputCollName", "CutBookkeepers", "The default name of the xAOD::CutBookkeeperContainer for output files"}; + /// Number of event weight variations + size_t m_numberOfWeightVariations{}; + /// Input CutBookkeeperContainers - std::unordered_map<SG::SourceID, LocalContainers> m_inputContainers; + std::unordered_map<SG::SourceID, CutBookkeepersLocalCache> m_inputContainers; /// Local CutBookkeeperContainers - LocalContainers m_completeContainers; - LocalContainers m_incompleteContainers; + CutBookkeepersLocalCache m_completeContainers; + CutBookkeepersLocalCache m_incompleteContainers; }; -#endif // BOOKKEEPERTOOL_H +#endif // EVENT_BOOKKEEPER_TOOLS__BOOKKEEPER_TOOL_H diff --git a/Event/EventBookkeeperTools/EventBookkeeperTools/CutBookkeepersLocalCache.h b/Event/EventBookkeeperTools/EventBookkeeperTools/CutBookkeepersLocalCache.h new file mode 100644 index 0000000000000000000000000000000000000000..d8f40fa1a33670a000c5dc28fec1b7edd3a74277 --- /dev/null +++ b/Event/EventBookkeeperTools/EventBookkeeperTools/CutBookkeepersLocalCache.h @@ -0,0 +1,44 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef EVENT_BOOKKEEPER_TOOLS__CUT_BOOKKEEPERS_LOCAL_CACHE_H +#define EVENT_BOOKKEEPER_TOOLS__CUT_BOOKKEEPERS_LOCAL_CACHE_H + +/// @author Tadej Novak <tadej@cern.ch> +#include <xAODCutFlow/CutBookkeeperContainer.h> +#include <xAODCutFlow/CutBookkeeperAuxContainer.h> + + +/// Helper in-memory structure +struct CutBookkeepersLocalCache final +{ + std::vector<std::unique_ptr<xAOD::CutBookkeeperContainer>> cont; + std::vector<std::unique_ptr<xAOD::CutBookkeeperAuxContainer>> aux; + + bool empty() const { return cont.empty(); } + std::size_t size() const { return cont.size(); } + xAOD::CutBookkeeperContainer *at(std::size_t n) const { return cont.at(n).get(); } + void clear() { cont.clear(); aux.clear(); } + + // Helper function to initialise the cache + static void prepareContainers(CutBookkeepersLocalCache &target, + size_t size, + bool extend = false) + { + if (!target.empty() && !extend) { + return; + } + + size_t toAdd = size - target.size(); + for (std::size_t i = 0; i < toAdd; ++i) { + auto container = std::make_unique<xAOD::CutBookkeeperContainer>(); + auto auxContainer = std::make_unique<xAOD::CutBookkeeperAuxContainer>(); + container->setStore(auxContainer.get()); + target.cont.push_back(std::move(container)); + target.aux.push_back(std::move(auxContainer)); + } + } +}; + +#endif // EVENT_BOOKKEEPER_TOOLS__CUT_BOOKKEEPERS_LOCAL_CACHE_H diff --git a/Event/EventBookkeeperTools/src/CutFlowSvc.h b/Event/EventBookkeeperTools/EventBookkeeperTools/CutFlowSvc.h similarity index 77% rename from Event/EventBookkeeperTools/src/CutFlowSvc.h rename to Event/EventBookkeeperTools/EventBookkeeperTools/CutFlowSvc.h index 538f0c79964f3ed62a3c8a7200b37e21fd5b421c..09a30f7ed3a5afe31130b3ba0e8ad33eb62e0b3c 100644 --- a/Event/EventBookkeeperTools/src/CutFlowSvc.h +++ b/Event/EventBookkeeperTools/EventBookkeeperTools/CutFlowSvc.h @@ -8,8 +8,11 @@ // Joao Firmino da Costa <joao.costa@cern.ch> and David Cote <david.cote@cern.ch> /////////////////////////////////////////////////////////////////// -#ifndef CUTFLOWSVC_H -#define CUTFLOWSVC_H +#ifndef EVENT_BOOKKEEPER_TOOLS__CUT_FLOW_SVC_H +#define EVENT_BOOKKEEPER_TOOLS__CUT_FLOW_SVC_H + +// Not dual use at the moment +#ifndef XAOD_STANDALONE /** * @class CutFlowSvc @@ -22,19 +25,18 @@ #include <unordered_map> // FrameWork includes -#include "GaudiKernel/ISvcLocator.h" -#include "GaudiKernel/IIncidentListener.h" -#include "GaudiKernel/ServiceHandle.h" +#include <GaudiKernel/ISvcLocator.h> +#include <GaudiKernel/IIncidentListener.h> +#include <GaudiKernel/ServiceHandle.h> // Athena includes -#include "AthenaBaseComps/AthService.h" -#include "AthenaKernel/ICutFlowSvc.h" -#include "StoreGate/StoreGateSvc.h" +#include <AthenaBaseComps/AthService.h> +#include <AthenaKernel/ICutFlowSvc.h> +#include <StoreGate/StoreGateSvc.h> // EDM includes -#include "xAODCutFlow/CutBookkeeper.h" -#include "xAODCutFlow/CutBookkeeperContainer.h" -#include "xAODCutFlow/CutBookkeeperAuxContainer.h" +#include <xAODCutFlow/CutBookkeeper.h> +#include <EventBookkeeperTools/CutBookkeepersLocalCache.h> class CutFlowSvc : @@ -86,22 +88,27 @@ public: virtual void addEvent(CutIdentifier cutID, double weight) override final; - /// Get current container - const xAOD::CutBookkeeperContainer *getCutBookkeepers() const; - /// Get number of accepted events for a cut virtual uint64_t getNAcceptedEvents(const CutIdentifier cutID) const override final; + /// Get CutBookkeepers cache + const CutBookkeepersLocalCache &getCutBookkeepers() const; + + /// Set number of weight variations + StatusCode setNumberOfWeightVariations(size_t count); + + private: /// Helper function to determine the processing cycle number from the /// input meta-data store StatusCode determineCycleNumberFromInput(const std::string& collName); - /// Helper function to create an empty container (and its aux store) - StatusCode createContainer(); + /// Helper function to create an empty containers (and its aux store) + StatusCode createContainers(size_t count); /// Get a CutBookkeeper given a CutID - xAOD::CutBookkeeper* getCutBookkeeper(const CutIdentifier cutID) const; + xAOD::CutBookkeeper* getCutBookkeeper(const CutIdentifier cutID, + size_t index) const; /// The input meta-data store ServiceHandle<StoreGateSvc> m_inMetaDataStore{this, "InputMetaDataStore", "StoreGateSvc/InputMetaDataStore", ""}; @@ -109,9 +116,8 @@ private: /// The name of the completed, i.e., fully processed, CutBookkeeperContainer Gaudi::Property<std::string> m_completeCollName{this, "OutputCollName", "CutBookkeepers", ""}; - /// Primary cutflow container (and its aux store) - std::unique_ptr<xAOD::CutBookkeeperContainer> m_container{}; - std::unique_ptr<xAOD::CutBookkeeperAuxContainer> m_containerAux{}; + /// Local CutBookkeeperContainers + CutBookkeepersLocalCache m_containers; /// The current skimming cycle, i.e., how many processing stages we already had int m_skimmingCycle{}; @@ -119,13 +125,7 @@ private: /// The name of the currently used input file stream Gaudi::Property<std::string> m_inputStream{this, "InputStream", "N/A", "The name of the input file stream"}; - /// Declare a simple typedef for the internal map - typedef std::unordered_map<CutIdentifier, xAOD::CutBookkeeper*> CutIDMap_t; - - /// This internal map keeps the association between the instance identifier of each algorithm - /// to the pointer of associated CutBookkeeper - CutIDMap_t m_ebkMap; - + /// Mutex to protect adding an event mutable std::recursive_mutex m_addEventMutex; }; @@ -139,4 +139,6 @@ inline const InterfaceID& CutFlowSvc::interfaceID() { return ICutFlowSvc::interfaceID(); } -#endif //> !CUTFLOWSVC_H +#endif // dual use + +#endif // EVENT_BOOKKEEPER_TOOLS__CUT_FLOW_SVC_H diff --git a/Event/EventBookkeeperTools/EventBookkeeperTools/EventBookkeeperToolsDict.h b/Event/EventBookkeeperTools/EventBookkeeperTools/EventBookkeeperToolsDict.h index ae7dcecd55de0e66355689d60cce765d917f6254..1f1cf4df21e9dba585586f3d04d8031787468955 100644 --- a/Event/EventBookkeeperTools/EventBookkeeperTools/EventBookkeeperToolsDict.h +++ b/Event/EventBookkeeperTools/EventBookkeeperTools/EventBookkeeperToolsDict.h @@ -5,6 +5,7 @@ #ifndef EVENT_BOOKKEEPER_TOOLS__EVENT_BOOKKEEPER_TOOLS_DICT_H #define EVENT_BOOKKEEPER_TOOLS__EVENT_BOOKKEEPER_TOOLS_DICT_H +#include <EventBookkeeperTools/BookkeeperTool.h> #include <EventBookkeeperTools/BookkeeperDumperTool.h> #endif diff --git a/Event/EventBookkeeperTools/EventBookkeeperTools/selection.xml b/Event/EventBookkeeperTools/EventBookkeeperTools/selection.xml index 8f65a891c98c793857288edc55c931aaa18e61d0..e1b69a20f8782b1899bd4235f1c7e8f5bb5394dc 100644 --- a/Event/EventBookkeeperTools/EventBookkeeperTools/selection.xml +++ b/Event/EventBookkeeperTools/EventBookkeeperTools/selection.xml @@ -1,3 +1,4 @@ <lcgdict> + <class name="BookkeeperTool" /> <class name="BookkeeperDumperTool" /> </lcgdict> diff --git a/Event/EventBookkeeperTools/Root/BookkeeperTool.cxx b/Event/EventBookkeeperTools/Root/BookkeeperTool.cxx new file mode 100644 index 0000000000000000000000000000000000000000..7222472c8130cae67c9dffb57ba406b53602214d --- /dev/null +++ b/Event/EventBookkeeperTools/Root/BookkeeperTool.cxx @@ -0,0 +1,344 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +// Implementation file for class BookkeeperTool +// Authors: Tadej Novak <tadej@cern.ch> +// Jack Cranshaw <Jack.Cranshaw@cern.ch> + +#include <xAODCutFlow/xAODCutFlowHelpers.h> + +#ifndef GENERATIONBASE +#include <xAODMetaData/FileMetaData.h> +#include <xAODTruth/TruthMetaDataContainer.h> +#endif + +#ifndef XAOD_STANDALONE +#include <AthenaPoolUtilities/CondAttrListCollection.h> +#include <IOVDbDataModel/IOVMetaDataContainer.h> +#endif + +#include <EventBookkeeperTools/BookkeeperTool.h> +#include <EventBookkeeperTools/CutFlowSvc.h> + + +BookkeeperTool::BookkeeperTool(const std::string& name) + : asg::AsgMetadataTool(name) +{ +#ifndef XAOD_STANDALONE + declareInterface< ::IMetaDataTool >( this ); +#endif // XAOD_STANDALONE +} + + +StatusCode BookkeeperTool::initialize() +{ + ATH_MSG_DEBUG("Initializing " << name()); + + ATH_MSG_DEBUG("InputCollName = " << m_inputCollName); + ATH_MSG_DEBUG("OutputCollName = " << m_outputCollName); + +#ifndef XAOD_STANDALONE + ATH_CHECK(m_cutFlowSvc.retrieve()); + // Access "private" CutFlowSvc methods + m_cutFlowSvcPrivate = dynamic_cast<CutFlowSvc *>(&*(m_cutFlowSvc)); +#endif + + return StatusCode::SUCCESS; +} + + +#ifdef XAOD_STANDALONE +StatusCode BookkeeperTool::beginInputFile() +#else +StatusCode BookkeeperTool::beginInputFile(const SG::SourceID &source) +#endif +{ + // OPENING NEW INPUT FILE + // Things to do: + // 1) Load CutBookkeepers from input file + // a) if incomplete from input, directly propagate to output + // b) if complete from input, wait for EndInputFile to decide what to do in output + + // Get number of event weight variations if needed + if (m_numberOfWeightVariations == 0) { + ATH_MSG_DEBUG("Determining number of weight variations"); +#ifndef GENERATIONBASE + if (inputMetaStore()->contains<xAOD::TruthMetaDataContainer>("TruthMetaData")) { + ATH_CHECK(loadXAODMetaData()); + } else { +#endif + ATH_CHECK(loadPOOLMetaData()); +#ifndef GENERATIONBASE + } +#endif + + if (m_numberOfWeightVariations == 0) { + ATH_MSG_ERROR("Could not determine the number of weight variations"); + return StatusCode::FAILURE; + } + + ATH_MSG_INFO("Using number of event weight variations " << m_numberOfWeightVariations); + +#ifndef XAOD_STANDALONE + ATH_CHECK(m_cutFlowSvcPrivate->setNumberOfWeightVariations(m_numberOfWeightVariations)); +#endif + } + +#ifdef XAOD_STANDALONE + SG::SourceID source{"file"}; +#endif + + // Prepare local cache + CutBookkeepersLocalCache::prepareContainers(m_completeContainers, m_numberOfWeightVariations); + CutBookkeepersLocalCache::prepareContainers(m_incompleteContainers, m_numberOfWeightVariations); + + // Check if a local container is there. IT SHOULD NOT BE + auto sit = m_inputContainers.find(source); + if (sit != m_inputContainers.end()) { + ATH_MSG_ERROR("Undefined behaviour: this file has already been processed"); + return StatusCode::FAILURE; + } + + // Get the incomplete bookkeeper collection of the input metadata store + const xAOD::CutBookkeeperContainer *inIncomplete{}; + // Construct input and output incomplete names + std::string incompleteCollName = "Incomplete" + m_inputCollName; + if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>(incompleteCollName)) { + if (inputMetaStore()->retrieve(inIncomplete, incompleteCollName).isSuccess()) { + // update incomplete output with any incomplete input + xAOD::CutFlowHelpers::updateContainer(m_incompleteContainers.at(0), inIncomplete); + ATH_MSG_DEBUG("Successfully merged input incomplete bookkeepers with output"); + } + } else { + ATH_MSG_INFO("No incomplete bookkeepers in this file with name " << incompleteCollName); + } + + // Get the complete bookkeeper collection of the input metadata store + const xAOD::CutBookkeeperContainer *inComplete{}; + if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>(m_inputCollName)) { + if (inputMetaStore()->retrieve(inComplete, m_inputCollName).isSuccess()) { + // Create the temporary container + auto [it, status] = m_inputContainers.emplace(source, CutBookkeepersLocalCache()); + CutBookkeepersLocalCache::prepareContainers(it->second, m_numberOfWeightVariations); + + xAOD::CutFlowHelpers::updateContainer(it->second.at(0), inComplete); + ATH_MSG_DEBUG("Successfully copied complete bookkeepers to temp container"); + } else { + ATH_MSG_INFO("No complete bookkeepers in this file with name " << m_inputCollName); + } + } + + return StatusCode::SUCCESS; +} + +#ifdef XAOD_STANDALONE +StatusCode BookkeeperTool::endInputFile() +#else +StatusCode BookkeeperTool::endInputFile(const SG::SourceID &source) +#endif +{ +#ifdef XAOD_STANDALONE + SG::SourceID source{"file"}; +#endif + ATH_CHECK(copyInputContainersToOutput(m_completeContainers, source)); + + return StatusCode::SUCCESS; +} + +StatusCode BookkeeperTool::metaDataStop() +{ + // TERMINATING THE JOB (EndRun) + // Things to do: + // 1) Create new incomplete CutBookkeepers if relevant + // 2) Copy cutflow from the service + // 3) Copy containers to output + + // All files that have not been fully processed are incomplete + ATH_CHECK(copyInputContainersToOutput(m_incompleteContainers)); + + // Copy cutflow from the service + ATH_CHECK(copyCutflowFromService()); + + // Write out the containers + for (std::size_t i = 0; i < m_completeContainers.size(); ++i) { + std::string name = m_outputCollName; + if (i != 0) { + name.append("_weight_"); + name.append(std::to_string(i)); + } + + // In MP we might already have them written out + if (outputMetaStore()->contains<xAOD::CutBookkeeperContainer>(name)) { + xAOD::CutBookkeeperContainer *complete{}; + if (!outputMetaStore()->retrieve(complete, name).isSuccess()) { + ATH_MSG_ERROR("Could not get " << name << " CutBookkeepers from output MetaDataStore"); + return StatusCode::FAILURE; + } + xAOD::CutBookkeeperContainer *incomplete{}; + if (!outputMetaStore()->retrieve(incomplete, "Incomplete" + name).isSuccess()) { + ATH_MSG_ERROR("Could not get " << "Incomplete" + name << " CutBookkeepers from output MetaDataStore"); + return StatusCode::FAILURE; + } + xAOD::CutFlowHelpers::updateContainer(complete, m_completeContainers.at(i)); + xAOD::CutFlowHelpers::updateContainer(incomplete, m_incompleteContainers.at(i)); + } else { + ATH_CHECK(outputMetaStore()->record(std::move(m_completeContainers.cont[i]), name)); + ATH_CHECK(outputMetaStore()->record(std::move(m_completeContainers.aux[i]), name + "Aux.")); + // Only write non-empty incomplete containers + if (i > 0 && !m_incompleteContainers.at(i)->empty()) { + ATH_CHECK(outputMetaStore()->record(std::move(m_incompleteContainers.cont[i]), "Incomplete" + name)); + ATH_CHECK(outputMetaStore()->record(std::move(m_incompleteContainers.aux[i]), "Incomplete" + name + "Aux.")); + } + } + } + + m_incompleteContainers.clear(); + m_completeContainers.clear(); + + ATH_MSG_DEBUG("Successfully copied CutBookkeepers to the output MetaDataStore"); + + return StatusCode::SUCCESS; +} + + +StatusCode BookkeeperTool::copyInputContainersToOutput(CutBookkeepersLocalCache &target, + const SG::SourceID &source) +{ + CutBookkeepersLocalCache::prepareContainers(target, m_numberOfWeightVariations); + + if (!source.empty()) { + auto it = m_inputContainers.find(source); + if (it == m_inputContainers.end()) { + ATH_MSG_DEBUG("No input containers for this file"); + return StatusCode::SUCCESS; + } + + for (std::size_t i = 0; i < it->second.size(); ++i) { + xAOD::CutFlowHelpers::updateContainer(target.at(i), it->second.at(i)); + } + m_inputContainers.erase(it); + + return StatusCode::SUCCESS; + } + + for (auto &[s, list] : m_inputContainers) { + for (std::size_t i = 0; i < list.size(); ++i) { + xAOD::CutFlowHelpers::updateContainer(target.at(i), list.at(i)); + } + } + m_inputContainers.clear(); + + return StatusCode::SUCCESS; +} + +StatusCode BookkeeperTool::copyCutflowFromService() +{ +#ifndef XAOD_STANDALONE + // Get the bookkeeper from the current processing + const CutBookkeepersLocalCache &cache = m_cutFlowSvcPrivate->getCutBookkeepers(); + if (!cache.empty()) { + CutBookkeepersLocalCache::prepareContainers(m_completeContainers, std::max(cache.size(), m_numberOfWeightVariations)); + + for (std::size_t i = 0; i < cache.size(); ++i) { + xAOD::CutFlowHelpers::updateContainer(m_completeContainers.at(i), cache.at(i)); + } + } else { + ATH_MSG_ERROR("No cutflow container in the CutFlowSvc"); + return StatusCode::FAILURE; + } +#endif + + return StatusCode::SUCCESS; +} + + +StatusCode BookkeeperTool::loadXAODMetaData() +{ +#ifdef GENERATIONBASE + return StatusCode::SUCCESS; +#else + + // Try to load MC channel number from file metadata + ATH_MSG_DEBUG("Attempting to retrieve MC channel number..."); + const xAOD::FileMetaData *fileMetaData{}; + uint32_t mcChannelNumber{uint32_t(-1)}; + if (inputMetaStore()->contains<xAOD::FileMetaData>("FileMetaData")) { + ATH_CHECK(inputMetaStore()->retrieve(fileMetaData, "FileMetaData")); + float fltChannelNumber{-1}; + if (fileMetaData->value(xAOD::FileMetaData::mcProcID, fltChannelNumber)) { + mcChannelNumber = static_cast<uint32_t>(mcChannelNumber); + } + } + if (mcChannelNumber == uint32_t(-1)) { + ATH_MSG_WARNING("... MC channel number could not be loaded"); + mcChannelNumber = 0; + } + + // Find the correct truth meta data object + ATH_MSG_DEBUG("Attempting to load weight meta data from xAOD TruthMetaData for channel " << mcChannelNumber); + const xAOD::TruthMetaDataContainer *metaDataContainer{}; + ATH_CHECK(inputMetaStore()->retrieve(metaDataContainer, "TruthMetaData")); + + // If we only have one metadata item take MC channel from there if needed + if (mcChannelNumber == 0 && metaDataContainer->size() == 1) { + mcChannelNumber = metaDataContainer->at(0)->mcChannelNumber(); + ATH_MSG_WARNING("... MC channel number taken from the metadata as " << mcChannelNumber); + } + + auto itTruthMetaDataPtr = std::find_if(metaDataContainer->begin(), metaDataContainer->end(), + [mcChannelNumber] (const auto& it) { return it->mcChannelNumber() == mcChannelNumber; } + ); + + // If no such object is found then return + if (itTruthMetaDataPtr == metaDataContainer->end()) { + ATH_MSG_ERROR("Could not load weight meta data!"); + return StatusCode::FAILURE; + } + + // Update cached weight data + const std::vector<std::string> &truthWeightNames = (*itTruthMetaDataPtr)->weightNames(); + + m_numberOfWeightVariations = truthWeightNames.size(); + + return StatusCode::SUCCESS; +#endif +} + + +StatusCode BookkeeperTool::loadPOOLMetaData() +{ + // AnalysisBase can only use the xAOD::TruthMetaDataContainer, so skip this +#ifdef XAOD_STANDALONE + return StatusCode::SUCCESS; +#else + + const IOVMetaDataContainer *container + = inputMetaStore()->tryConstRetrieve<IOVMetaDataContainer>("/Generation/Parameters"); + if (container == nullptr) { + // set variations to 1 and exit quietly... + m_numberOfWeightVariations = 1; + return StatusCode::SUCCESS; + } + // payload is a collection of CondAttrListCollections + // only look a the first one, assuming it exists, and within that only look at the first channel; + if (!(container->payloadContainer()->size() > 0 + && container->payloadContainer()->at(0)->size() > 0)) { + return StatusCode::FAILURE; + } + + // we take the first collection of weights + // TODO: improve this + CondAttrListCollection::ChanNum chanNum{container->payloadContainer()->at(0)->chanNum(0)}; + const coral::Attribute& attr + = container->payloadContainer()->at(0)->attributeList(chanNum)["HepMCWeightNames"]; + + ATH_MSG_DEBUG("Attempting to load weight meta data from /Generation/Parameters"); + std::map<std::string, int> truthWeightMap; + ATH_CHECK(Gaudi::Parsers::parse(truthWeightMap, attr.data<std::string>())); + + m_numberOfWeightVariations = truthWeightMap.size(); + + return StatusCode::SUCCESS; +#endif // XAOD_STANDALONE +} diff --git a/Event/EventBookkeeperTools/src/CutFlowSvc.cxx b/Event/EventBookkeeperTools/Root/CutFlowSvc.cxx similarity index 71% rename from Event/EventBookkeeperTools/src/CutFlowSvc.cxx rename to Event/EventBookkeeperTools/Root/CutFlowSvc.cxx index 53f1d61c0888c88efcf53874a5c0c76852f10267..c23155dce2a06828831178729a2844338d95550b 100644 --- a/Event/EventBookkeeperTools/src/CutFlowSvc.cxx +++ b/Event/EventBookkeeperTools/Root/CutFlowSvc.cxx @@ -7,14 +7,17 @@ // Tadej Novak <tadej@cern.ch> // Joao Firmino da Costa <joao.costa@cern.ch> and David Cote <david.cote@cern.ch> -#include "CutFlowSvc.h" +// Not dual use at the moment +#ifndef XAOD_STANDALONE -#include "GaudiKernel/Incident.h" -#include "GaudiKernel/FileIncident.h" -#include "GaudiKernel/IIncidentSvc.h" +#include <EventBookkeeperTools/CutFlowSvc.h> + +#include <GaudiKernel/Incident.h> +#include <GaudiKernel/FileIncident.h> +#include <GaudiKernel/IIncidentSvc.h> // EDM includes -#include "EventInfo/EventStreamInfo.h" +#include <EventInfo/EventStreamInfo.h> CutFlowSvc::CutFlowSvc(const std::string& name, @@ -39,8 +42,8 @@ CutFlowSvc::initialize() incSvc->addListener(this, IncidentType::BeginInputFile, 60); // pri has to be < 100 to be after MetaDataSvc. incSvc->addListener(this, "MetaDataStop", 30); - // Create bookkeeper container for bookkeepers in _this_ processing - ATH_CHECK(createContainer()); + // Create initial bookkeeper container for bookkeepers in _this_ processing + ATH_CHECK(createContainers(1)); // Determine the skimming cycle number that we should use now from the input file ATH_MSG_VERBOSE("Have currently the cycle number = " << m_skimmingCycle ); @@ -65,8 +68,9 @@ CutIdentifier CutFlowSvc::registerFilter( const std::string& name, CutIdentifier cutID = newCbk->uniqueIdentifier(); // Let's see if an CutBookkeeper of this name already exists + xAOD::CutBookkeeperContainer *container = m_containers.at(0); ATH_MSG_VERBOSE("Searching if this CutBookkeeper already exists"); - for (xAOD::CutBookkeeper* cbk : *m_container) { + for (xAOD::CutBookkeeper* cbk : *container) { if (newCbk->isEqualTo(cbk)) { ATH_MSG_DEBUG("The CutBookkeeper with name '" << name << "' already exists" << " and has cutID " << cbk->uniqueIdentifier() << "... Not adding!" ); @@ -77,7 +81,7 @@ CutIdentifier CutFlowSvc::registerFilter( const std::string& name, // If it is a new CutBookkeeper, add it to the container ATH_MSG_DEBUG("Declaring a new filter with name '" << name << "' and cutID " << cutID ); - m_container->push_back(std::move(newCbk)); + container->push_back(std::move(newCbk)); return cutID; } @@ -96,7 +100,7 @@ CutIdentifier CutFlowSvc::registerTopFilter( const std::string& name, // Call the registerFilter method and get the correct CutBookkeeper // from the returned cutID CutIdentifier cutID = registerFilter(name, description); - xAOD::CutBookkeeper* cbk = getCutBookkeeper(cutID); + xAOD::CutBookkeeper* cbk = getCutBookkeeper(cutID, 0); if (cbk == nullptr) { ATH_MSG_ERROR("registerTopFilter: Could not find CutBookkeeper with cutID " << cutID); return 0; @@ -117,8 +121,12 @@ CutFlowSvc::setFilterDescription( CutIdentifier cutID, { ATH_MSG_DEBUG("calling setFilterDescription(" << cutID << ", " << descr << ")" ); - xAOD::CutBookkeeper* cbk = getCutBookkeeper(cutID); - cbk->setDescription(descr); + for (size_t i = 0; i < m_containers.size(); ++i) { + xAOD::CutBookkeeper* cbk = getCutBookkeeper(cutID, i); + if (cbk != nullptr) { + cbk->setDescription(descr); + } + } return; } @@ -131,43 +139,12 @@ CutFlowSvc::addEvent( CutIdentifier cutID, double weight) std::lock_guard<std::recursive_mutex> lock(m_addEventMutex); - xAOD::CutBookkeeper* cbk = getCutBookkeeper(cutID); - if (cbk == nullptr) { - ATH_MSG_DEBUG("Could not find CutBookkeeper, creating a new one"); - - // Iterate over the complete bookkeepers and update the cutID-to-bookkeeper map - ATH_MSG_DEBUG( "addEvent: Going to re-populate the map. Have " - << m_container->size() << " CutBookkeepers" - << " and skimming cycle " << m_skimmingCycle - << " and input Stream name " << m_inputStream ); - for (xAOD::CutBookkeeper* ebk : *m_container) { - CutIdentifier cutIDCurrent = ebk->uniqueIdentifier(); - ATH_MSG_VERBOSE( "addEvent: Have CutBookkeeper with" - << " skimming cycle " << ebk->cycle() - << " and input Stream name " << ebk->inputStream() - << " and logic " << ebk->cutLogic() - << " isTopFilter " << ebk->isTopFilter() - << " and cutID " << cutIDCurrent - << " and name " << ebk->name() ); - if ( m_skimmingCycle == ebk->cycle() ) { - if ( m_inputStream == ebk->inputStream() ) { - CutIDMap_t::iterator mapIter = m_ebkMap.find(cutIDCurrent); - ATH_MSG_DEBUG( "current cycle and input stream: Have CutBookkeeper with" - << " cutID " << cutIDCurrent - << " and name " << ebk->name() ); - if ( mapIter != m_ebkMap.end() ) { // we found this CutBookkeeper in the existing map - (*mapIter).second = ebk; - } - } - } - } // End: Loop over all complete CutBookkeepers - cbk = getCutBookkeeper(cutID); - } + xAOD::CutBookkeeper* cbk = getCutBookkeeper(cutID, 0); if (cbk == nullptr) { - ATH_MSG_ERROR ( "Got a zero pointer to an CutBookkeeper with cutID=" - << cutID << "! This should never happen..." ); + ATH_MSG_ERROR("Could not find CutBookkeeper for CutID " << cutID); return; } + ATH_MSG_VERBOSE( "addEvent: have cutID " << cutID << " and CutBookkeeper name " << cbk->name() ); cbk->addNAcceptedEvents(1); @@ -207,12 +184,14 @@ void CutFlowSvc::handle( const Incident& inc ) // Clear the file bookkeeper if (inc.type() == IncidentType::BeginInputFile || inc.type() == "MetaDataStop") { - if (m_container != nullptr) { + if (!m_containers.empty()) { // Reset existing container - for (xAOD::CutBookkeeper* cbk : *m_container) { - cbk->setNAcceptedEvents(0); - cbk->setSumOfEventWeights(0); - cbk->setSumOfEventWeightsSquared(0); + for (size_t i = 0; i < m_containers.size(); ++i) { + for (xAOD::CutBookkeeper* cbk : *m_containers.at(i)) { + cbk->setNAcceptedEvents(0); + cbk->setSumOfEventWeights(0); + cbk->setSumOfEventWeightsSquared(0); + } } } } @@ -250,36 +229,66 @@ StatusCode CutFlowSvc::determineCycleNumberFromInput( const std::string& collNam -StatusCode CutFlowSvc::createContainer() +StatusCode CutFlowSvc::createContainers(size_t count) { - ATH_MSG_VERBOSE("createContainer()"); - // Expect that this should only be called once for now - if (m_container != nullptr) { - ATH_MSG_ERROR("xAOD::CutBookkeeperContainer already exists. This is unexpected."); + if (!m_containers.empty() && m_containers.size() == count) { + return StatusCode::SUCCESS; + } + + if (m_containers.size() > count) { + ATH_MSG_ERROR("Inconsistent variation count"); return StatusCode::FAILURE; } + ATH_MSG_VERBOSE("Create containers with count " << count); + + ATH_MSG_VERBOSE("Existing size " << m_containers.size()); + // Create the containers - m_container = std::make_unique<xAOD::CutBookkeeperContainer>(); - m_containerAux = std::make_unique<xAOD::CutBookkeeperAuxContainer>(); - m_container->setStore(m_containerAux.get()); + CutBookkeepersLocalCache::prepareContainers(m_containers, count, true); + if (count == 1) { + return StatusCode::SUCCESS; + } + + // Copy existing CutBookkeepers for consistency + xAOD::CutBookkeeperContainer *first = m_containers.at(0); + if (first->empty()) { + return StatusCode::SUCCESS; + } + for (size_t i = 1; i < count; ++i) { + xAOD::CutBookkeeperContainer *cont = m_containers.at(i); + for (const xAOD::CutBookkeeper *cbk : *first) { + xAOD::CutBookkeeper *newCbk = new xAOD::CutBookkeeper(); + cont->push_back(newCbk); + *newCbk = *cbk; + } + } return StatusCode::SUCCESS; } -const xAOD::CutBookkeeperContainer* CutFlowSvc::getCutBookkeepers() const +StatusCode CutFlowSvc::setNumberOfWeightVariations(size_t count) { - return m_container.get(); + ATH_CHECK(createContainers(count)); + return StatusCode::SUCCESS; } -xAOD::CutBookkeeper* CutFlowSvc::getCutBookkeeper(const CutIdentifier cutID) const +const CutBookkeepersLocalCache& CutFlowSvc::getCutBookkeepers() const { - for (xAOD::CutBookkeeper* cbk : *m_container) { + return m_containers; +} + + + +xAOD::CutBookkeeper* CutFlowSvc::getCutBookkeeper(const CutIdentifier cutID, + size_t index) const +{ + for (xAOD::CutBookkeeper* cbk : *m_containers.at(index)) { if (cbk->uniqueIdentifier() == cutID) { return cbk; } @@ -291,7 +300,7 @@ xAOD::CutBookkeeper* CutFlowSvc::getCutBookkeeper(const CutIdentifier cutID) con uint64_t CutFlowSvc::getNAcceptedEvents(const CutIdentifier cutID) const { - const xAOD::CutBookkeeper* cbk = getCutBookkeeper(cutID); + const xAOD::CutBookkeeper* cbk = getCutBookkeeper(cutID, 0); if (cbk == nullptr) { return std::numeric_limits<uint64_t>::max(); } @@ -316,3 +325,5 @@ CutFlowSvc::queryInterface( const InterfaceID& riid, void** ppvi ) // Interface is not directly availible: try out a base class return AthService::queryInterface( riid, ppvi ); } + +#endif // dual use diff --git a/Event/EventBookkeeperTools/python/BookkeepingInfoWriter.py b/Event/EventBookkeeperTools/python/BookkeepingInfoWriter.py index 06b6ff2d5755b3258445ee7be4868545e5ba3a6e..3b45b72840be921f98ed964cec2be74bf1d315e8 100644 --- a/Event/EventBookkeeperTools/python/BookkeepingInfoWriter.py +++ b/Event/EventBookkeeperTools/python/BookkeepingInfoWriter.py @@ -93,11 +93,11 @@ class BookkeepingWriterBase( PyAthena.Alg ): if alg: dic[name]["Alg"]=alg - self.msg.debug("Succesfully added algorithm '%s'"%name) + self.msg.debug("Succesfully added algorithm '%s'", name) else: - self.msg.warning("BookkeepingWriterBase cannot get algorithm '%s'. This alg will not be bookkept."%name) + self.msg.warning("BookkeepingWriterBase cannot get algorithm '%s'. This alg will not be bookkept.", name) dic.pop(name) return @@ -119,7 +119,7 @@ class SkimDecisionsWriter(BookkeepingWriterBase): return def initialize(self): - self.msg.info("SkimDecisionsContainer name: '%s'"%self.SkimDecisionsContainerName) + self.msg.info("SkimDecisionsContainer name: '%s'", self.SkimDecisionsContainerName) self.sg = PyAthena.py_svc("StoreGateSvc") return BookkeepingWriterBase.initialize(self) @@ -129,12 +129,12 @@ class SkimDecisionsWriter(BookkeepingWriterBase): sd.setName(prefix+"_"+key) try: sd.setIsAccepted(dic[key]["Alg"].filterPassed()) - except: - self.msg.error("problem with filterPassed() for alg %s..."%key) + except Exception: + self.msg.error("problem with filterPassed() for alg %s...", key) sdc.push_back(sd) ROOT.SetOwnership (sd, False) - self.msg.debug("Skim %s: %i (%s)"%(key,sd.isAccepted(),prefix)) + self.msg.debug("Skim %s: %i (%s)", key, sd.isAccepted(), prefix) return def execute(self): diff --git a/Event/EventBookkeeperTools/python/CutFlowHelpers.py b/Event/EventBookkeeperTools/python/CutFlowHelpers.py index 6e246a6e802f1437a678894dfd233cbb95504d25..351ed7a8ee1b749cb36a1fe0215c6a5d52238430 100644 --- a/Event/EventBookkeeperTools/python/CutFlowHelpers.py +++ b/Event/EventBookkeeperTools/python/CutFlowHelpers.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Creation: Karsten Koeneke def GetCurrentStreamName( msg ): @@ -6,7 +6,7 @@ def GetCurrentStreamName( msg ): # First, try to get the info from the RecFlags try: from RecExConfig.RecFlags import rec - msg.debug("Got the stream name from the RecFlags: %s" % rec.mergingStreamName()) + msg.debug("Got the stream name from the RecFlags: %s", rec.mergingStreamName()) streamName = rec.mergingStreamName() if streamName == "": streamName = "unknownStream" @@ -39,7 +39,7 @@ def CreateCutFlowSvc( svcName="CutFlowSvc", seq=None, addMetaDataToAllOutputFile # Determine current input stream name inputStreamName = GetCurrentStreamName( msg=msg ) - msg.debug("CreateCutFlowSvc: Have inputStreamName = %s" % (inputStreamName) ) + msg.debug("CreateCutFlowSvc: Have inputStreamName = %s", inputStreamName) # Create the CutFlowSvc instance import AthenaCommon.CfgMgr as CfgMgr @@ -81,11 +81,11 @@ def CreateCutFlowSvc( svcName="CutFlowSvc", seq=None, addMetaDataToAllOutputFile if alg.getName() == "xAODMaker::EventInfoCnvAlg": break pass pass - msg.debug("Adding EventCounterAlg with name AllExecutedEvents to sequence with name %s at position %i" % (seq.getName(),index)) + msg.debug("Adding EventCounterAlg with name AllExecutedEvents to sequence with name %s at position %i", seq.getName(), index) seq.insert( index, CfgMgr.EventCounterAlg("AllExecutedEvents") ) pass else : - msg.info("Could NOT add EventCounterAlg with name AllExecutedEvents to locked sequence with name %s" % seq.getName()) + msg.info("Could NOT add EventCounterAlg with name AllExecutedEvents to locked sequence with name %s", seq.getName()) pass pass diff --git a/Event/EventBookkeeperTools/python/PyFilterTester.py b/Event/EventBookkeeperTools/python/PyFilterTester.py index 3257a3a64bc37c3112ff7042e218a417ea70c0da..ad4f070ef6dc73ce7c1aa289b32a29686d7176b7 100644 --- a/Event/EventBookkeeperTools/python/PyFilterTester.py +++ b/Event/EventBookkeeperTools/python/PyFilterTester.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration ##============================================================================= ## Name: PyFilterTester @@ -35,5 +35,5 @@ class PyFilterTester( AthFilterAlgorithm ): return StatusCode.Success def finalize(self): - self.msg.info( ' Number of processed events: %r' % self.nProcessed ) + self.msg.info( ' Number of processed events: %r', self.nProcessed ) return StatusCode.Success diff --git a/Event/EventBookkeeperTools/python/TestLogicalFilterCombiner.py b/Event/EventBookkeeperTools/python/TestLogicalFilterCombiner.py index 111bdc81fc3310d1c2f3e31098546b1cd196df00..fec3b11db7e0d141f505f00f350cb8b8b1994e21 100644 --- a/Event/EventBookkeeperTools/python/TestLogicalFilterCombiner.py +++ b/Event/EventBookkeeperTools/python/TestLogicalFilterCombiner.py @@ -88,7 +88,7 @@ class TestLogicalFilterCombiner( PyAthena.AthFilterAlgorithm ): self.msg.error("Algorithm %s not found" , tokval) return False else: - self.msg.debug("Found algorithm: %s -> %s" % (tokval, _alg)) + self.msg.debug("Found algorithm: %s -> %s", tokval, _alg) exec('self.%s = _alg' % tokval) @@ -123,7 +123,7 @@ class TestLogicalFilterCombiner( PyAthena.AthFilterAlgorithm ): def execute(self): for k,v in self.algdict.iteritems(): - self.msg.debug("Alg %s : %s" % (k, v.filterPassed())) + self.msg.debug("Alg %s : %s", k, v.filterPassed()) pass response = bool(eval(self.cmd)) diff --git a/Event/EventBookkeeperTools/src/BookkeeperTool.cxx b/Event/EventBookkeeperTools/src/BookkeeperTool.cxx deleted file mode 100644 index e893bd4306bb5d1a574104745db7956f6ab0eaa5..0000000000000000000000000000000000000000 --- a/Event/EventBookkeeperTools/src/BookkeeperTool.cxx +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -// Implementation file for class BookkeeperTool -// Authors: Tadej Novak <tadej@cern.ch> -// Jack Cranshaw <Jack.Cranshaw@cern.ch> - -#include <xAODCutFlow/xAODCutFlowHelpers.h> - -#include "BookkeeperTool.h" -#include "CutFlowSvc.h" - - -BookkeeperTool::BookkeeperTool(const std::string& name) - : asg::AsgMetadataTool(name) -{ -#ifndef XAOD_STANDALONE - declareInterface< ::IMetaDataTool >( this ); -#endif // XAOD_STANDALONE -} - - -StatusCode BookkeeperTool::initialize() -{ - ATH_MSG_DEBUG("Initializing " << name()); - - ATH_MSG_DEBUG("InputCollName = " << m_inputCollName); - ATH_MSG_DEBUG("OutputCollName = " << m_outputCollName); - - ATH_CHECK(m_cutFlowSvc.retrieve()); - // Access "private" CutFlowSvc methods - m_cutFlowSvcPrivate = dynamic_cast<CutFlowSvc *>(&*(m_cutFlowSvc)); - - return StatusCode::SUCCESS; -} - - -StatusCode BookkeeperTool::beginInputFile(const SG::SourceID &source) -{ - // OPENING NEW INPUT FILE - // Things to do: - // 1) Load CutBookkeepers from input file - // a) if incomplete from input, directly propagate to output - // b) if complete from input, wait for EndInputFile to decide what to do in output - - // Prepare local cache - ATH_CHECK(prepareContainers(m_completeContainers)); - ATH_CHECK(prepareContainers(m_incompleteContainers)); - - // Check if a local container is there. IT SHOULD NOT BE - auto sit = m_inputContainers.find(source); - if (sit != m_inputContainers.end()) { - ATH_MSG_ERROR("Undefined behaviour: this file has already been processed"); - return StatusCode::FAILURE; - } - - // Get the incomplete bookkeeper collection of the input metadata store - const xAOD::CutBookkeeperContainer *inIncomplete{}; - // Construct input and output incomplete names - std::string incompleteCollName = "Incomplete" + m_inputCollName; - if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>(incompleteCollName)) { - if (inputMetaStore()->retrieve(inIncomplete, incompleteCollName).isSuccess()) { - // update incomplete output with any incomplete input - xAOD::CutFlowHelpers::updateContainer(m_incompleteContainers.at(0), inIncomplete); - ATH_MSG_DEBUG("Successfully merged input incomplete bookkeepers with output"); - } - } else { - ATH_MSG_INFO("No incomplete bookkeepers in this file with name " << incompleteCollName); - } - - // Get the complete bookkeeper collection of the input metadata store - const xAOD::CutBookkeeperContainer *inComplete{}; - if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>(m_inputCollName)) { - if (inputMetaStore()->retrieve(inComplete, m_inputCollName).isSuccess()) { - // Create the temporary container - auto [it, status] = m_inputContainers.emplace(source, LocalContainers()); - ATH_CHECK(prepareContainers(it->second)); - - xAOD::CutFlowHelpers::updateContainer(it->second.at(0), inComplete); - ATH_MSG_DEBUG("Successfully copied complete bookkeepers to temp container"); - } else { - ATH_MSG_INFO("No complete bookkeepers in this file with name " << m_inputCollName); - } - } - - return StatusCode::SUCCESS; -} - - -StatusCode BookkeeperTool::endInputFile(const SG::SourceID &source) -{ - ATH_CHECK(copyInputContainersToOutput(m_completeContainers, source)); - - return StatusCode::SUCCESS; -} - -StatusCode BookkeeperTool::metaDataStop() -{ - // TERMINATING THE JOB (EndRun) - // Things to do: - // 1) Create new incomplete CutBookkeepers if relevant - // 2) Copy cutflow from the service - // 3) Copy containers to output - - // All files that have not been fully processed are incomplete - ATH_CHECK(copyInputContainersToOutput(m_incompleteContainers)); - - // Copy cutflow from the service - ATH_CHECK(copyCutflowFromService()); - - // Write out the containers - for (std::size_t i = 0; i < m_completeContainers.cont.size(); ++i) { - std::string name = m_outputCollName; - if (i != 0) { - name.append("_weight_"); - name.append(std::to_string(i)); - } - - // In MP we might already have them written out - if (outputMetaStore()->contains<xAOD::CutBookkeeperContainer>(name)) { - xAOD::CutBookkeeperContainer *complete{}; - if (!outputMetaStore()->retrieve(complete, name).isSuccess()) { - ATH_MSG_ERROR("Could not get " << name << " CutBookkeepers from output MetaDataStore"); - return StatusCode::FAILURE; - } - xAOD::CutBookkeeperContainer *incomplete{}; - if (!outputMetaStore()->retrieve(incomplete, "Incomplete" + name).isSuccess()) { - ATH_MSG_ERROR("Could not get " << "Incomplete" + name << " CutBookkeepers from output MetaDataStore"); - return StatusCode::FAILURE; - } - xAOD::CutFlowHelpers::updateContainer(complete, m_completeContainers.at(i)); - xAOD::CutFlowHelpers::updateContainer(incomplete, m_incompleteContainers.at(i)); - } else { - ATH_CHECK(outputMetaStore()->record(std::move(m_completeContainers.cont[i]), name)); - ATH_CHECK(outputMetaStore()->record(std::move(m_completeContainers.aux[i]), name + "Aux.")); - ATH_CHECK(outputMetaStore()->record(std::move(m_incompleteContainers.cont[i]), "Incomplete" + name)); - ATH_CHECK(outputMetaStore()->record(std::move(m_incompleteContainers.aux[i]), "Incomplete" + name + "Aux.")); - } - } - - m_incompleteContainers.clear(); - m_completeContainers.clear(); - - ATH_MSG_DEBUG("Successfully copied CutBookkeepers to the output MetaDataStore"); - - return StatusCode::SUCCESS; -} - - -StatusCode BookkeeperTool::copyInputContainersToOutput(LocalContainers &target, - const SG::SourceID &source) -{ - ATH_CHECK(prepareContainers(target)); - - if (!source.empty()) { - auto it = m_inputContainers.find(source); - if (it == m_inputContainers.end()) { - ATH_MSG_DEBUG("No input containers for this file"); - return StatusCode::SUCCESS; - } - - for (std::size_t i = 0; i < it->second.size(); ++i) { - xAOD::CutFlowHelpers::updateContainer(target.at(i), it->second.at(i)); - } - m_inputContainers.erase(it); - - return StatusCode::SUCCESS; - } - - for (auto &[s, list] : m_inputContainers) { - for (std::size_t i = 0; i < list.size(); ++i) { - xAOD::CutFlowHelpers::updateContainer(target.at(i), list.at(i)); - } - } - m_inputContainers.clear(); - - return StatusCode::SUCCESS; -} - -StatusCode BookkeeperTool::copyCutflowFromService() -{ - ATH_CHECK(prepareContainers(m_completeContainers)); - - // Get the bookkeeper from the current processing - const xAOD::CutBookkeeperContainer* cbkCont = m_cutFlowSvcPrivate->getCutBookkeepers(); - if (cbkCont != nullptr) { - xAOD::CutFlowHelpers::updateContainer(m_completeContainers.at(0), cbkCont); - } else { - ATH_MSG_ERROR("No cutflow container in the CutFlowSvc"); - return StatusCode::FAILURE; - } - - return StatusCode::SUCCESS; -} - - -StatusCode BookkeeperTool::prepareContainers(LocalContainers &target) -{ - if (!target.empty()) { - return StatusCode::SUCCESS; - } - - std::size_t size{1}; // TODO: determine actual size - for (std::size_t i = 0; i < size; ++i) { - auto container = std::make_unique<xAOD::CutBookkeeperContainer>(); - auto auxContainer = std::make_unique<xAOD::CutBookkeeperAuxContainer>(); - container->setStore(auxContainer.get()); - target.cont.push_back(std::move(container)); - target.aux.push_back(std::move(auxContainer)); - } - - return StatusCode::SUCCESS; -} diff --git a/Event/EventBookkeeperTools/src/components/EventBookkeeperTools_entries.cxx b/Event/EventBookkeeperTools/src/components/EventBookkeeperTools_entries.cxx index a2bb0fb8664b2a275a48e00ed6f5212bbc04db6a..ee4de188dabf50acc8cbd20fc9aa75c3ed3da4a7 100644 --- a/Event/EventBookkeeperTools/src/components/EventBookkeeperTools_entries.cxx +++ b/Event/EventBookkeeperTools/src/components/EventBookkeeperTools_entries.cxx @@ -1,8 +1,8 @@ +#include <EventBookkeeperTools/BookkeeperTool.h> #include <EventBookkeeperTools/BookkeeperDumperTool.h> +#include <EventBookkeeperTools/CutFlowSvc.h> #include "../AllExecutedEventsCounterAlg.h" -#include "../BookkeeperTool.h" -#include "../CutFlowSvc.h" #include "../EventCounterAlg.h" #include "../SkimDecisionMultiFilter.h" #include "../TestFilterReentrantAlg.h" diff --git a/Event/EventKernel/CMakeLists.txt b/Event/EventKernel/CMakeLists.txt index 88b35e78eea6b9c4b60ca4195e89922b511ae2f1..9edbda24983f57fcc783f0ec04294ee6508bb7fe 100644 --- a/Event/EventKernel/CMakeLists.txt +++ b/Event/EventKernel/CMakeLists.txt @@ -26,4 +26,4 @@ atlas_add_dictionary( EventKernelDict LINK_LIBRARIES EventKernel ) # Install files from the package: -atlas_install_python_modules( python/__init__.py python/ParticleDataType.py ) +atlas_install_python_modules( python/__init__.py python/ParticleDataType.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Event/FourMomUtils/CMakeLists.txt b/Event/FourMomUtils/CMakeLists.txt index c2daa8b5d117af7ddf7f7e9e4882a17bf6487e86..87b974f4fbbf505d83527346971fd671cee83071 100644 --- a/Event/FourMomUtils/CMakeLists.txt +++ b/Event/FourMomUtils/CMakeLists.txt @@ -39,4 +39,4 @@ atlas_add_dictionary( FourMomUtilsDict LINK_LIBRARIES FourMomUtils ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Event/FourMomUtils/python/Bindings.py b/Event/FourMomUtils/python/Bindings.py index b752c20616082b143e6787cf69348acfe767556f..44192fc88b905f65f2182083e64d0b9b3aadb07d 100644 --- a/Event/FourMomUtils/python/Bindings.py +++ b/Event/FourMomUtils/python/Bindings.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # @file FourMomUtils/python/Bindings.py # @author Sebastien Binet <binet@cern.ch> @@ -12,7 +12,7 @@ def _installBindings(): import cppyy cppyy.load_library('liblibFourMomUtilsDict') - x = cppyy.gbl.xAOD.Helpers._importHelper() + x = cppyy.gbl.xAOD.Helpers._importHelper() # noqa: F841 return diff --git a/Event/PyDumper/CMakeLists.txt b/Event/PyDumper/CMakeLists.txt index b072c68b996bc4062db77b67592712a90a29cac9..5bd90b2b20ae560d1b7e81793b3e9b2b7bf19b3e 100644 --- a/Event/PyDumper/CMakeLists.txt +++ b/Event/PyDumper/CMakeLists.txt @@ -13,7 +13,7 @@ atlas_add_dictionary( PyDumperDictDict LINK_LIBRARIES AthContainers ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_scripts( bin/sg-dump.py ) # Aliases: diff --git a/Event/PyDumper/python/Dumpers.py b/Event/PyDumper/python/Dumpers.py index 3d2a63c20c3b4503e2407a81da1db11c57c39212..4a83826b58ffc60e36decff6a8001b388f29f7c5 100644 --- a/Event/PyDumper/python/Dumpers.py +++ b/Event/PyDumper/python/Dumpers.py @@ -19,7 +19,6 @@ __author__ = "Scott Snyder, Sebastien Binet" ### imports from contextlib import contextmanager -import math import sys from io import StringIO from functools import cmp_to_key @@ -33,7 +32,8 @@ from PyUtils.fprint import fprint, fprintln, fwrite import ROOT import cppyy -cmp = lambda x, y: (x > y) - (x < y) +def cmp(x, y): + return (x > y) - (x < y) # not available due to a reflex bug. etcone10 = 0 @@ -3090,7 +3090,7 @@ def dump_ExtendedVxCandidate (c, f): def dump_V0Hypothesis (h, f): - if h == None: + if h is None: fprint (f, None) return fprint (f, 'V0Hypothesis', h.positiveTrackID(), @@ -3668,7 +3668,7 @@ def dump_CaloTopoTowerContainer (t, f): dl(t.GetTowers()) dl(t.GetCells()) if t.GetCellToClusterMap(): - fprintln (f, ' ', GetCellToClusterMap().size()) + fprintln (f, ' ', t.GetCellToClusterMap().size()) else: fprintln (f, ' (null)') return @@ -3814,7 +3814,7 @@ def dump_TrigRNNOutput (p, f): def dump_InDetLowBetaCandidate (p, f): - if p == None: + if p is None: fprint (f, '(null)') return if hasattr (p, 'getTRTInverseBeta'): @@ -4714,9 +4714,9 @@ atomic_accessors = { def format_obj (x, name=None): - if type(x) == type(1.5): + if isinstance(x, float): return format_float (x) - if type(x) == type(1): + if isinstance(x, int): return format_int (x) tname = typename(type(x)) if tname.startswith ('ROOT.'): @@ -4855,7 +4855,7 @@ def dump_xAODObjectNL(o, f): def dump_list (l, f, dumper, nmax = None): i = 0 for x in l: - if nmax != None and i >= nmax: break + if nmax is not None and i >= nmax: break i += 1 fprint (f, ' ') dumper (x, f) diff --git a/Event/PyDumper/python/PyComps.py b/Event/PyDumper/python/PyComps.py index e13eedff6eebb6826be99ff63c7a17ccc7189ef4..7621415ad250b7d68273d056c82cf0a1fc2aa29e 100644 --- a/Event/PyDumper/python/PyComps.py +++ b/Event/PyDumper/python/PyComps.py @@ -3,7 +3,6 @@ # @file: PyDumper/python/PyComps.py # @purpose: A set of PyAthena components to test reading/writing EDM classes # @author: Sebastien Binet <binet@cern.ch> -# $Id: PyComps.py,v 1.11 2008-12-17 10:19:03 binet Exp $ __doc__ = 'A set of PyAthena components to test reading/writing EDM classes' __version__ = '$Revision: 1.11 $' @@ -11,7 +10,7 @@ __author__ = 'Sebastien Binet <binet@cern.ch>' import os from fnmatch import fnmatch -import AthenaCommon.SystemOfUnits as Units +from io import IOBase import AthenaPython.PyAthena as PyAthena from AthenaPython.PyAthena import StatusCode @@ -149,7 +148,7 @@ class PyReader (PyAthena.Alg): pass elif isinstance(self.ofile, str): self.ofile = open(self.ofile, 'w') - elif isinstance(self.ofile, file): + elif isinstance(self.ofile, IOBase): pass else: self.msg.error("don't know how to handle ofile value/type [%s/%s]!", @@ -261,7 +260,7 @@ class PySgDumper (PyAthena.Alg): pass elif isinstance(self.ofile, str): self.ofile = open(self.ofile, 'w') - elif isinstance(self.ofile, file): + elif isinstance(self.ofile, IOBase): pass else: self.msg.error("don't know how to handle ofile value/type [%s/%s]!", @@ -441,12 +440,8 @@ class DataProxyLoader(PyAthena.Alg): return StatusCode.Success def execute(self): - _debug= self.msg.debug - _info = self.msg.info - _warn = self.msg.warning - _fatal= self.msg.fatal _add_fail = self.failed_dumps.add - _info('==> processing event [%s]...', self._evt_nbr) + self.msg.info('==> processing event [%s]...', self._evt_nbr) self._evt_nbr += 1 if self.items is None: # take all from storegate @@ -466,13 +461,13 @@ class DataProxyLoader(PyAthena.Alg): for p in proxies: clid = p.clID() sgkey= p.name() - _debug('loading proxy [%s#%s]...', clid, sgkey) + self.msg.debug('loading proxy [%s#%s]...', clid, sgkey) try: dobj = p.accessData() if not dobj: all_good = False except Exception as err: - _fatal('problem loading proxy [%s#%s]', clid, sgkey) + self.msg.fatal('problem loading proxy [%s#%s]', clid, sgkey) _add_fail((sgkey, clid, str(err))) all_good = False diff --git a/Event/PyDumper/python/SgDumpLib.py b/Event/PyDumper/python/SgDumpLib.py index e1380d81380a2c8359da3777e2b0fea55d5c1142..85387d68d093d3219eae6db828172c02f80233c2 100644 --- a/Event/PyDumper/python/SgDumpLib.py +++ b/Event/PyDumper/python/SgDumpLib.py @@ -5,19 +5,13 @@ # @author Sebastien Binet <binet@cern.ch> # @date August 2009 -from __future__ import with_statement, print_function -import sys import os -from future import standard_library -standard_library.install_aliases() - __doc__ = """\ API for the sg-dump script (which dumps an ASCII representation of events in POOL or RAW files """ __author__ = "Sebastien Binet <binet@cern.ch>" -__version__= "$Revision$" __all__ = [ 'run_sg_dump', @@ -226,7 +220,7 @@ def _gen_jobo(dct): return job def _run_jobo(job, msg, options): - import os,atexit,tempfile,shutil,glob + import os,atexit,tempfile,shutil # capture current directory's content keep_files = [os.path.abspath(item) for item in os.listdir(os.getcwd())] @@ -275,7 +269,7 @@ def _run_jobo(job, msg, options): if options.use_recex_links: sc,out = subprocess.getstatusoutput ('RecExCommon_links.sh') if sc != 0: - msg.error("could not run 'RecExCommon_links.sh':\n%s"%out) + msg.error("could not run 'RecExCommon_links.sh':\n%s", out) return sc, out msg.info ('installed RecExCommon links') @@ -309,7 +303,7 @@ def _run_jobo(job, msg, options): stderr=logfile, env=env) pos = 0 - import time, re + import re pat = re.compile (r'^Py:pyalg .*') evt_pat = re.compile ( r'^Py:pyalg .*? ==> processing event \[(?P<evtnbr>\d*?)\].*' diff --git a/Event/xAOD/xAODBase/CMakeLists.txt b/Event/xAOD/xAODBase/CMakeLists.txt index 97c640fda79fad99ba7e6784d4c0f636712cfc9c..7ce6b21596a21f782d43554095a3d77c4929a5b8 100644 --- a/Event/xAOD/xAODBase/CMakeLists.txt +++ b/Event/xAOD/xAODBase/CMakeLists.txt @@ -36,7 +36,7 @@ atlas_add_dictionary( xAODBaseObjectTypeDict xAODBase/selection-ObjectType.xml ) # Install files from the package. -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) # Test(s) in the package. atlas_add_test( ut_xAODObjectType_test diff --git a/Event/xAOD/xAODEgamma/CMakeLists.txt b/Event/xAOD/xAODEgamma/CMakeLists.txt index ab77b70d752e335d5fc2cf7585dfee648a7452c0..7f4d9c75bd1aa000201f217a20f4cb3abb93688b 100644 --- a/Event/xAOD/xAODEgamma/CMakeLists.txt +++ b/Event/xAOD/xAODEgamma/CMakeLists.txt @@ -33,4 +33,4 @@ atlas_add_dictionary( xAODEgammaParametersDict xAODEgamma/selectionParameters.xml ) # Install files from the package. -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Event/xAOD/xAODJetCnv/CMakeLists.txt b/Event/xAOD/xAODJetCnv/CMakeLists.txt index f03c03e7cb032bc17be34cf68f77f1ea264a74a5..edb816cb9717c1a1de2e1d1974e86cf33df4cd3d 100644 --- a/Event/xAOD/xAODJetCnv/CMakeLists.txt +++ b/Event/xAOD/xAODJetCnv/CMakeLists.txt @@ -16,6 +16,6 @@ atlas_add_component( xAODJetCnv LINK_LIBRARIES xAODJetCnvLib xAODJet GaudiKernel AthenaBaseComps AthenaKernel StoreGateLib SGtests JetEvent ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) diff --git a/Event/xAOD/xAODPrimitives/CMakeLists.txt b/Event/xAOD/xAODPrimitives/CMakeLists.txt index 5563fec425bfb0df96e6ecfb081952966c0f2292..ac725ffe4497b23b57aaf0c5598394da3b95a09e 100644 --- a/Event/xAOD/xAODPrimitives/CMakeLists.txt +++ b/Event/xAOD/xAODPrimitives/CMakeLists.txt @@ -20,4 +20,4 @@ atlas_add_test( ut_xAOD_primitives_enums_test LINK_LIBRARIES xAODPrimitives ) # Install files from the package. -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/ForwardDetectors/AFP/Run3AFPMonitoring/python/Run3AFPExampleMonitorAlgorithm.py b/ForwardDetectors/AFP/Run3AFPMonitoring/python/Run3AFPExampleMonitorAlgorithm.py index 5a1c07c50c2c0806ab7934ed9b1d3e80b9750b24..3c7d444ffb6cd5e98ba40d80b95acd647c7892ae 100644 --- a/ForwardDetectors/AFP/Run3AFPMonitoring/python/Run3AFPExampleMonitorAlgorithm.py +++ b/ForwardDetectors/AFP/Run3AFPMonitoring/python/Run3AFPExampleMonitorAlgorithm.py @@ -12,6 +12,10 @@ def Run3AFPExampleMonitoringConfig(inputFlags): from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator result = ComponentAccumulator() + # don't run in RAWtoESD + if inputFlags.DQ.Environment in ('tier0Raw',): + return result + from LumiBlockComps.BunchCrossingCondAlgConfig import BunchCrossingCondAlgCfg result.merge(BunchCrossingCondAlgCfg(inputFlags)) diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py index 98fc65feaf2c84ffc1d063d4f1da01b3e4098ff4..c373d9cb417b7b5e1830dc3e3353b84739366971 100644 --- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py +++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py @@ -9,7 +9,6 @@ from IOVDbSvc.IOVDbSvcConfig import addFolders,addFoldersSplitOnline def PixelConfigCondAlgCfg(flags, name="PixelConfigCondAlg", **kwargs): """Return a ComponentAccumulator with configured PixelConfigCondAlg""" acc = ComponentAccumulator() -# acc.merge(addFolders(flags, "/PIXEL/PixMapOverlay", "PIXEL_OFL", className="CondAttrListCollection")) acc.merge(addFoldersSplitOnline(flags, "PIXEL", "/PIXEL/Onl/PixMapOverlay", "/PIXEL/PixMapOverlay", "CondAttrListCollection")) runNum = flags.Input.RunNumber[0] @@ -467,7 +466,6 @@ def PixelHitDiscCnfgAlgCfg(flags, name="PixelHitDiscCnfgAlg", **kwargs): def PixelOfflineCalibCondAlgCfg(flags, name="PixelOfflineCalibCondAlg", **kwargs): """Return a ComponentAccumulator with configured PixelOfflineCalibCondAlg""" acc = ComponentAccumulator() -# acc.merge(addFolders(flags, "/PIXEL/PixReco", "PIXEL_OFL", className="DetCondCFloat")) acc.merge(addFoldersSplitOnline(flags, "PIXEL", "/PIXEL/Onl/PixReco", "/PIXEL/PixReco", className="DetCondCFloat")) kwargs.setdefault("InputSource", 1 if flags.Common.isOnline else 2) kwargs.setdefault("PixelClusterErrorDataFile", "PixelClusterErrorData.txt") diff --git a/InnerDetector/InDetDetDescr/PixelReadoutGeometry/PixelReadoutGeometry/PixelDetectorManager.h b/InnerDetector/InDetDetDescr/PixelReadoutGeometry/PixelReadoutGeometry/PixelDetectorManager.h index 8af16653bcc2bb614de4ace91d35df560c55bcb3..3ef1f2ee12a519f68a083fd28b9fde7c969a909d 100755 --- a/InnerDetector/InDetDetDescr/PixelReadoutGeometry/PixelReadoutGeometry/PixelDetectorManager.h +++ b/InnerDetector/InDetDetDescr/PixelReadoutGeometry/PixelReadoutGeometry/PixelDetectorManager.h @@ -52,7 +52,9 @@ namespace InDetDD { /** Constructor */ PixelDetectorManager(StoreGateSvc* detStore); - + /** Constructor with name */ + PixelDetectorManager(StoreGateSvc* detStore, std::string name); + /** Destructor */ ~PixelDetectorManager(); diff --git a/InnerDetector/InDetDetDescr/PixelReadoutGeometry/src/PixelDetectorManager.cxx b/InnerDetector/InDetDetDescr/PixelReadoutGeometry/src/PixelDetectorManager.cxx index 2316a666c8bed4ab7ca654eae4ad9dc418f43f8e..462ed506f628b55f4eca17b2c763af92fb5ae292 100755 --- a/InnerDetector/InDetDetDescr/PixelReadoutGeometry/src/PixelDetectorManager.cxx +++ b/InnerDetector/InDetDetDescr/PixelReadoutGeometry/src/PixelDetectorManager.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "DetDescrConditions/AlignableTransformContainer.h" @@ -25,8 +25,8 @@ namespace InDetDD { const int FIRST_HIGHER_LEVEL = 1; - PixelDetectorManager::PixelDetectorManager(StoreGateSvc* detStore) - : SiDetectorManager(detStore, "Pixel"), + PixelDetectorManager::PixelDetectorManager(StoreGateSvc* detStore, std::string name) + : SiDetectorManager(detStore,name), m_idHelper(0), m_isLogical(false) // Change to true to change the definition of local module corrections { @@ -46,6 +46,9 @@ namespace InDetDD { m_alignableTransforms.resize(m_idHelper->wafer_hash_max()); } } + + PixelDetectorManager::PixelDetectorManager(StoreGateSvc* detStore) + : PixelDetectorManager(detStore, "Pixel"){ } PixelDetectorManager::~PixelDetectorManager() diff --git a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx index 313a7923140a36479c0aeca3fdc3bf0cbf6c8461..03fba5f2e9def422ceb47c65af76b44ce89921fe 100755 --- a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx +++ b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx @@ -24,24 +24,7 @@ namespace InDetDD { SCT_DetectorManager::SCT_DetectorManager( StoreGateSvc* detStore ) - : SiDetectorManager(detStore, "SCT"), - m_idHelper(0), - m_isLogical(false) // Change to true to change the definition of local module corrections - { - // - // Initialized the Identifier helper. - // - StatusCode sc = detStore->retrieve(m_idHelper, "SCT_ID"); - if (sc.isFailure()) { - ATH_MSG_ERROR("Could not retrieve SCT id helper"); - } - // Initialize the collections. - if (m_idHelper) { - m_elementCollection.resize(m_idHelper->wafer_hash_max()); - m_alignableTransforms.resize(m_idHelper->wafer_hash_max()); - m_moduleAlignableTransforms.resize(m_idHelper->wafer_hash_max()/2); - } - } + : SCT_DetectorManager(detStore, "SCT") {} SCT_DetectorManager::SCT_DetectorManager( StoreGateSvc* detStore , std::string name) : SiDetectorManager(detStore,name), diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py index a91384df66ac5edd0b2469f7b4ab7bf6a91afb0e..2b2b09cba25790105523aef717991252cd3183eb 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py +++ b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py @@ -4,7 +4,7 @@ from __future__ import print_function from AthenaCommon import CfgMgr from Digitization.DigitizationFlags import digitizationFlags - + # The earliest bunch crossing time for which interactions will be sent # to the Pixel Digitization code. def Pixel_FirstXing(): @@ -55,12 +55,24 @@ def SensorSimPlanarTool(name="SensorSimPlanarTool", **kwargs): from AthenaCommon.AppMgr import ToolSvc kwargs.setdefault("SiPropertiesTool", ToolSvc.PixelSiPropertiesTool) kwargs.setdefault("LorentzAngleTool", ToolSvc.PixelLorentzAngleTool) -# kwargs.setdefault("LorentzAngleTool", pixelLorentzAngleToolSetup.PixelLorentzAngleTool) + kwargs.setdefault("doRadDamage", digitizationFlags.doRadiationDamage.get_Value()) + # TODO This is 2018 fluence setting. These parameters should be controlled by the conditions data. + kwargs.setdefault("fluence", 6.4) + kwargs.setdefault("fluenceB", 4.6) + kwargs.setdefault("fluence1", 2.1) + kwargs.setdefault("fluence2", 1.3) + kwargs.setdefault("voltage", 400) + kwargs.setdefault("voltageB", 400) + kwargs.setdefault("voltage1", 250) + kwargs.setdefault("voltage2", 250) return CfgMgr.SensorSimPlanarTool(name, **kwargs) def SensorSim3DTool(name="SensorSim3DTool", **kwargs): from AthenaCommon.AppMgr import ToolSvc kwargs.setdefault("SiPropertiesTool", ToolSvc.PixelSiPropertiesTool) + kwargs.setdefault("doRadDamage", digitizationFlags.doRadiationDamage.get_Value()) + # TODO This is 2018 fluence setting. These parameters should be controlled by the conditions data. + kwargs.setdefault("fluence", 6) return CfgMgr.SensorSim3DTool(name, **kwargs) def SensorSimTool(name="SensorSimTool", **kwargs): diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py index d01cd5f28bc865ef19459935f6185e5e71f95132..bb9daa4ff5bf9f4786a53e5400212902e73b7c31 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py +++ b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py @@ -83,6 +83,16 @@ def SensorSimPlanarToolCfg(flags, name="SensorSimPlanarTool", **kwargs): kwargs.setdefault("SiPropertiesTool", SiTool) kwargs.setdefault("LorentzAngleTool", LorentzTool) SensorSimPlanarTool = CompFactory.SensorSimPlanarTool + kwargs.setdefault("doRadDamage", flags.Digitization.DoRadiationDamage) + # TODO This is 2018 fluence setting. These parameters should be controlled by the conditions data. + kwargs.setdefault("fluence", 6.4) + kwargs.setdefault("fluenceB", 4.6) + kwargs.setdefault("fluence1", 2.1) + kwargs.setdefault("fluence2", 1.3) + kwargs.setdefault("voltage", 400) + kwargs.setdefault("voltageB", 400) + kwargs.setdefault("voltage1", 250) + kwargs.setdefault("voltage2", 250) acc.setPrivateTools(SensorSimPlanarTool(name, **kwargs)) return acc @@ -94,6 +104,9 @@ def SensorSim3DToolCfg(flags, name="SensorSim3DTool", **kwargs): acc.popToolsAndMerge(PixelLorentzAngleCfg(flags)) kwargs.setdefault("SiPropertiesTool", SiTool) SensorSim3DTool = CompFactory.SensorSim3DTool + kwargs.setdefault("doRadDamage", flags.Digitization.DoRadiationDamage) + # TODO This is 2018 fluence setting. These parameters should be controlled by the conditions data. + kwargs.setdefault("fluence", 6) acc.setPrivateTools(SensorSim3DTool(name, **kwargs)) return acc diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx index 7d783d4d5054e52dbe002662cd3e8570d88309ca..0ac99797f98f03f7b95d3bbf36ca9b9386264f2f 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx @@ -51,35 +51,35 @@ StatusCode SensorSim3DTool::initialize() { if (!m_doRadDamage) { m_fluence=0; } - if (m_fluence==1) { + if (static_cast<int>(m_fluence)==1) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_0_20V.root")); m_fluence_layers.push_back(1e-10); } - else if (m_fluence==2) { + else if (static_cast<int>(m_fluence)==2) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_1e14_20V.root")); m_fluence_layers.push_back(1e14); } - else if (m_fluence==3) { + else if (static_cast<int>(m_fluence)==3) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_2e14_30V.root")); m_fluence_layers.push_back(2e14); } - else if (m_fluence==4) { + else if (static_cast<int>(m_fluence)==4) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_5e14_40V.root")); m_fluence_layers.push_back(5e14); } - else if (m_fluence==5) { + else if (static_cast<int>(m_fluence)==5) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_1e15_50V.root")); m_fluence_layers.push_back(1e15); } - else if (m_fluence==6) { + else if (static_cast<int>(m_fluence)==6) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_5e15_160V.root")); m_fluence_layers.push_back(5e15); } - else if (m_fluence==7) { + else if (static_cast<int>(m_fluence)==7) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_6e15_190V_new.root")); m_fluence_layers.push_back(6e15); } - else if (m_fluence==8) { + else if (static_cast<int>(m_fluence)==8) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_1e16_260V_new.root")); m_fluence_layers.push_back(1e16); } diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.h b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.h index 34a3b8ab1206bd84088cc7b507818bef53af15e1..70b71af3106192d1d9f60b082c753beb6da71b9f 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.h +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.h @@ -80,7 +80,7 @@ class SensorSim3DTool : public SensorSimTool { Gaudi::Property<bool> m_doChunkCorrection {this, "doChunkCorrection", false, "doChunkCorrection bool: should be flag"}; - Gaudi::Property<int> m_fluence + Gaudi::Property<double> m_fluence {this, "fluence", 0, "this is the fluence benchmark, 0-6. 0 is unirradiated, 1 is start of Run 2, 5 is end of 2018 and 6 is projected end of 2018"}; Gaudi::Property<double> m_trappingTimeElectrons diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx index 985ac58eebcbad5deace49ca5b680f9de8053551..df14c3d5aececbc9c238dc01ee0e660841e95da1 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx @@ -68,7 +68,7 @@ StatusCode SensorSimPlanarTool::initialize() { // For each layer one configuration TCADpath_list = {iblFiles, sensorFiles, sensorFiles, sensorFiles}; //IBL - 200um sensor depth, B layer - 20um, layer 1, layer 2 - if (m_fluence==1) { + if (static_cast<int>(m_fluence)==1) { ATH_MSG_INFO("Use benchmark point 1!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_80V_fl0em10.root") ); //IBL PL - Barrel mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_250V_fl7e13.root") ); //B-Layer - Barrel @@ -85,7 +85,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(150); m_voltage_layers.push_back(150); } - else if (m_fluence==2) { + else if (static_cast<int>(m_fluence)==2) { ATH_MSG_INFO("Use benchmark point 2!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_80V_fl1e14.root") ); @@ -103,7 +103,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); } - else if (m_fluence==3) { + else if (static_cast<int>(m_fluence)==3) { ATH_MSG_INFO("Use benchmark point 3!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_80V_fl2e14.root") ); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_350V_fl1_7e14.root") ); @@ -120,7 +120,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); } - else if (m_fluence==4) { + else if (static_cast<int>(m_fluence)==4) { ATH_MSG_INFO("Use benchmark point 4!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_150V_fl2e14.root") ); @@ -138,7 +138,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); } - else if (m_fluence==5) { + else if (static_cast<int>(m_fluence)==5) { ATH_MSG_INFO("Use benchmark point 5!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_350V_fl5e14.root") ); @@ -156,7 +156,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); } - else if (m_fluence==6) { + else if (static_cast<int>(m_fluence)==6) { ATH_MSG_INFO("Use benchmark point 6!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_400V_fl8_7e14.root") ); @@ -174,7 +174,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(250); m_voltage_layers.push_back(250); } - else if (m_fluence==7) { + else if (static_cast<int>(m_fluence)==7) { ATH_MSG_INFO("Use benchmark point 7!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_endLHC.root") ); diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.h b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.h index 2afbac5510d1990403d21d33e7bbff71b4fbadb3..3db9f5b5e22d13bca13f2be9bc14d169277d1857 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.h +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.h @@ -62,16 +62,16 @@ class SensorSimPlanarTool : public SensorSimTool { Gaudi::Property<double> m_trappingTimeHoles {this, "trappingTimeHoles", 0.0, "Characteristic time till hole is trapped [ns]"}; - Gaudi::Property<int> m_fluence + Gaudi::Property<double> m_fluence {this, "fluence", 0, "this is the fluence benchmark, 0-6. 0 is unirradiated, 1 is start of Run 2, 5 is end of 2018 and 6 is projected end of 2018"}; - Gaudi::Property<int> m_fluenceB + Gaudi::Property<double> m_fluenceB {this, "fluenceB", -1, "fluence detector has recieved in neqcm2 at the B layer."}; - Gaudi::Property<int> m_fluence1 + Gaudi::Property<double> m_fluence1 {this, "fluence1", -1, "fluence detector has recieved in neqcm2 at the layer 1."}; - Gaudi::Property<int> m_fluence2 + Gaudi::Property<double> m_fluence2 {this, "fluence2", -1, "fluence detector has recieved in neqcm2 at the layer 2."}; Gaudi::Property<double> m_voltage diff --git a/InnerDetector/InDetExample/InDetRecExample/python/InDetRecExampleConfig.py b/InnerDetector/InDetExample/InDetRecExample/python/InDetRecExampleConfig.py index 5a008625ea9f6d68dc3c4130f90118a0f94fa115..8f2b310003e4ce6b54df8c6476da54c6b57d7d15 100644 --- a/InnerDetector/InDetExample/InDetRecExample/python/InDetRecExampleConfig.py +++ b/InnerDetector/InDetExample/InDetRecExample/python/InDetRecExampleConfig.py @@ -244,6 +244,11 @@ def InDetGlobalChi2Fitter(name='InDetGlobalChi2Fitter', **kwargs) : pix_cluster_on_track_args = stripArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','RenounceInputHandles','nameSuffix']) from InDetRecExample import TrackingCommon as TrackingCommon + + # PHF cut during fit iterations to save CPU time + kwargs=setDefaults(kwargs, + MinPHFCut = TrackingCommon.getInDetNewTrackingCuts().minTRTPrecFrac()) + if 'RotCreatorTool' not in kwargs : kwargs=setDefaults(kwargs, RotCreatorTool = TrackingCommon.getInDetRotCreator(**pix_cluster_on_track_args)) @@ -288,6 +293,15 @@ def InDetGlobalChi2Fitter(name='InDetGlobalChi2Fitter', **kwargs) : Momentum = 1000.*Units.MeV) return InDetGlobalChi2FitterBase(name, **kwargs) +def InDetGlobalChi2FitterBT(name='InDetGlobalChi2FitterBT', **kwargs): + ''' + Global Chi2 Fitter for backtracking + ''' + kwargs=setDefaults(kwargs, + MinPHFCut = 0.) + return InDetGlobalChi2Fitter(name, **kwargs) + + def InDetGlobalChi2FitterLowPt(name='InDetGlobalChi2FitterLowPt', **kwargs) : # @TODO TrackingGeometrySvc was not set but is set now # RotCreatorTool and BroadRotCreatorTool not set @@ -390,6 +404,13 @@ def InDetTrackFitter(name='InDetTrackFitter', **kwargs) : 'GaussianSumFilter' : GaussianSumFitter }[InDetFlags.trackFitterType()](name,**kwargs) +def InDetTrackFitterBT(name='InDetTrackFitterBT', **kwargs) : + from InDetRecExample.InDetJobProperties import InDetFlags + if InDetFlags.trackFitterType() != 'GlobalChi2Fitter' : + return InDetTrackFitter(name,**kwargs) + else : + return InDetGlobalChi2FitterBT(name,**kwargs) + def InDetTrackFitterLowPt(name='InDetTrackFitter', **kwargs) : from InDetRecExample.InDetJobProperties import InDetFlags if InDetFlags.trackFitterType() != 'GlobalChi2Fitter' : diff --git a/InnerDetector/InDetExample/InDetRecExample/python/InDetRecExampleConfigDb.py b/InnerDetector/InDetExample/InDetRecExample/python/InDetRecExampleConfigDb.py index c636839641bc3ce29b62098a1dac485d73101e53..4ebf510ac320be7263e8c62b7fbeb80918fcde77 100644 --- a/InnerDetector/InDetExample/InDetRecExample/python/InDetRecExampleConfigDb.py +++ b/InnerDetector/InDetExample/InDetRecExample/python/InDetRecExampleConfigDb.py @@ -26,6 +26,7 @@ addTool('InDetRecExample.InDetRecExampleConfig.KalmanFitter','KalmanFitter') addTool('InDetRecExample.InDetRecExampleConfig.ReferenceKalmanFitter','ReferenceKalmanFitter') addTool('InDetRecExample.InDetRecExampleConfig.KalmanDNAFitter','KalmanDNAFitter') addTool('InDetRecExample.InDetRecExampleConfig.InDetTrackFitter','InDetTrackFitter') +addTool('InDetRecExample.InDetRecExampleConfig.InDetTrackFitterBT','InDetTrackFitterBT') addTool('InDetRecExample.InDetRecExampleConfig.InDetTrackFitterLowPt','InDetTrackFitterLowPt') addTool('InDetRecExample.InDetRecExampleConfig.InDetTrackFitterTRT','InDetTrackFitterTRT') addTool('InDetRecExample.InDetRecExampleConfig.InDetTrackFitterDBM','InDetTrackFitterDBM') diff --git a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredBackTracking.py b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredBackTracking.py index a1c93a15d586d6b71e5689145a88c2fe4217476b..dd9ea324c1b0b5999da5c34f7af87f4754a5d9e5 100755 --- a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredBackTracking.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredBackTracking.py @@ -164,7 +164,7 @@ class ConfiguredBackTracking: from TRT_SeededTrackFinder.TRT_SeededTrackFinderConf import InDet__TRT_SeededTrackFinder import InDetRecExample.TrackingCommon as TrackingCommon InDetTRT_SeededTrackFinder = InDet__TRT_SeededTrackFinder(name = 'InDetTRT_SeededTrackFinder', - RefitterTool = CfgGetter.getPublicTool('InDetTrackFitter'), + RefitterTool = CfgGetter.getPublicTool('InDetTrackFitterBT'), TrackTool = InDetTRT_SeededTrackTool, PRDtoTrackMap = prefix+'PRDtoTrackMap'+suffix \ if usePrdAssociationTool else "", @@ -262,7 +262,7 @@ class ConfiguredBackTracking: # from TrkAmbiguityProcessor.TrkAmbiguityProcessorConf import Trk__SimpleAmbiguityProcessorTool InDetTRT_SeededAmbiguityProcessor = Trk__SimpleAmbiguityProcessorTool(name = 'InDetTRT_SeededAmbiguityProcessor', - Fitter = CfgGetter.getPublicTool('InDetTrackFitter'), + Fitter = CfgGetter.getPublicTool('InDetTrackFitterBT'), AssociationTool = TrackingCommon.getInDetPRDtoTrackMapToolGangedPixels(), TrackSummaryTool = InDetTRT_SeededSummaryTool, SelectionTool = InDetTRT_SeededAmbiTrackSelectionTool, diff --git a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py index 9257ceddacdc4b066b548f1fffe431ed57da932d..33db3f13da43437b908f2038df3603483b4fa7e9 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py @@ -458,7 +458,7 @@ class ConfiguredNewTrackingSiPattern: InDetAmbiTrackSelectionTool.phiWidth = 0.1 #Split cluster ROI size InDetAmbiTrackSelectionTool.etaWidth = 0.1 #Split cluster ROI size InDetAmbiTrackSelectionTool.InputEmClusterContainerName = InDetKeys.CaloClusterROIContainer() - InDetAmbiTrackSelectionTool.doEmCaloSeed = False #Only split in cluster in region of interest + InDetAmbiTrackSelectionTool.doEmCaloSeed = True #Only split in cluster in region of interest InDetAmbiTrackSelectionTool.minPtConv = 10000 #Only allow split clusters on track withe pt greater than this MeV InDetAmbiTrackSelectionTool.phiWidthEM = 0.05 #Split cluster ROI size InDetAmbiTrackSelectionTool.etaWidthEM = 0.05 #Split cluster ROI size diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecCaloSeededROISelection.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecCaloSeededROISelection.py index 444c62a84777b2d00a18bb177269a0a27252c748..500af2e0a15e5d83f0f3024fa75fa17c48ec71ca 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecCaloSeededROISelection.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecCaloSeededROISelection.py @@ -7,41 +7,48 @@ # # --- load the tool to check the energy deposits and select clusters # +from InDetCaloClusterROISelector.InDetCaloClusterROISelectorConf import ( + InDet__CaloClusterROI_Selector) +from InDetCaloClusterROIBuilder.InDetCaloClusterROIBuilderConf import ( + InDet__CaloClusterROI_Builder) +from InDetRecExample.InDetKeys import InDetKeys from egammaRec.Factories import ToolFactory -from egammaCaloTools.egammaCaloToolsFactories import egammaCheckEnergyDepositTool +from egammaCaloTools.egammaCaloToolsFactories import ( + egammaCheckEnergyDepositTool) from egammaCaloTools import egammaCaloToolsConf -egammaCaloClusterROISelector = ToolFactory( egammaCaloToolsConf.egammaCaloClusterSelector, - name = 'caloClusterROISelector', - egammaCheckEnergyDepositTool = egammaCheckEnergyDepositTool, - EMEtCut = 2250., - EMEtSplittingFraction = 0.7, - EMFCut = 0.7, - RetaCut = 0.65, - HadLeakCut = 0.15 - ) +egammaCaloClusterROISelector = ToolFactory( + egammaCaloToolsConf.egammaCaloClusterSelector, + name='caloClusterROISelector', + egammaCheckEnergyDepositTool=egammaCheckEnergyDepositTool, + EMEtCut=2250., + EMEtSplittingFraction=0.7, + EMFCut=0.7, + RetaCut=0.65, + HadLeakCut=0.15 +) # # --- get the builder tool # -from InDetCaloClusterROIBuilder.InDetCaloClusterROIBuilderConf import InDet__CaloClusterROI_Builder -InDetCaloClusterROIBuilder = InDet__CaloClusterROI_Builder(name = "InDetCaloClusterROIBuilder", - EMEnergyOnly = True) +InDetCaloClusterROIBuilder = InDet__CaloClusterROI_Builder( + name="InDetCaloClusterROIBuilder", + EMEnergyOnly=True) if (InDetFlags.doPrintConfigurables()): - printfunc (InDetCaloClusterROIBuilder) + printfunc(InDetCaloClusterROIBuilder) # # --- now load the algorithm # -from InDetCaloClusterROISelector.InDetCaloClusterROISelectorConf import InDet__CaloClusterROI_Selector -InDetCaloClusterROISelector = InDet__CaloClusterROI_Selector (name = "InDetCaloClusterROISelector", - InputClusterContainerName = InDetKeys.CaloClusterContainer(), # "egammaCaloCluster" - OutputClusterContainerName = InDetKeys.CaloClusterROIContainer(), # "InDetCaloClusterROIs" - CaloClusterROIBuilder = InDetCaloClusterROIBuilder, - egammaCaloClusterSelector = egammaCaloClusterROISelector() - ) +InDetCaloClusterROISelector = InDet__CaloClusterROI_Selector( + name="InDetCaloClusterROISelector", + InputClusterContainerName=InDetKeys.CaloClusterContainer(), + # "InDetCaloClusterROIs" + OutputClusterContainerName=InDetKeys.CaloClusterROIContainer(), + CaloClusterROIBuilder=InDetCaloClusterROIBuilder, + egammaCaloClusterSelector=egammaCaloClusterROISelector() +) topSequence += InDetCaloClusterROISelector if (InDetFlags.doPrintConfigurables()): - printfunc (InDetCaloClusterROISelector) - + printfunc(InDetCaloClusterROISelector) diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py index 4ae4029aec21a888d2690f7e640bebfaf6114caa..49d7879fe5b35d5c16419f81ff180b00fd7efdb7 100755 --- a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py @@ -596,7 +596,7 @@ if (InDetFlags.doVertexFinding() or InDetFlags.doVertexFindingForMonitoring()) o from TrkVertexFitterUtils.TrkVertexFitterUtilsConf import Trk__DetAnnealingMaker if(InDetFlags.primaryVertexSetup() == 'GaussAdaptiveMultiFinding'): InDetAnnealingMaker = Trk__DetAnnealingMaker(name="InDetAnnealingMaker", - SetOfTemperatures=[8., 4., 2., 1.4142136, 1.2247449, 1.]) # 'standard' annealing temps raised to 0.5 + SetOfTemperatures=[1.]) # switching off annealing for AMVF else: InDetAnnealingMaker = Trk__DetAnnealingMaker(name="InDetAnnealingMaker", SetOfTemperatures=[64., 16., 4., 2., 1.5, 1.]) # not default @@ -851,7 +851,8 @@ if (InDetFlags.doVertexFinding() or InDetFlags.doVertexFindingForMonitoring()) o TrackSelector = InDetTrackSelectorTool, useBeamConstraint = InDetFlags.useBeamConstraint(), selectiontype = 0, - TracksMaxZinterval = 3,#mm + TracksMaxZinterval = 3,#mm + m_useSeedConstraint = False, #switching off seed constraint do3dSplitting = InDetFlags.doPrimaryVertex3DFinding()) else: from ActsGeometry.ActsTrackingGeometryTool import ActsTrackingGeometryTool diff --git a/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonGenericTracks.cxx b/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonGenericTracks.cxx index ac711f0f955b0d819bb7ec99e204cf1780000a55..1a15c050868fff71dd0aedf27092a8e01cd3601b 100644 --- a/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonGenericTracks.cxx +++ b/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonGenericTracks.cxx @@ -1632,17 +1632,18 @@ void IDAlignMonGenericTracks::RegisterHisto(MonGroup& mon, TH2* histo) { StatusCode IDAlignMonGenericTracks::fillHistograms() { m_events++; - + ATH_MSG_DEBUG ("IDAlignMonGenericTracks::fillHistograms ** START ** call for m_events " << m_events << " for track collection: " << m_tracksName.key()); + //get tracks SG::ReadHandle<TrackCollection> tracks{m_tracksName}; if (not tracks.isValid()) { - ATH_MSG_ERROR(m_tracksName.key() << " could not be retrieved"); + ATH_MSG_DEBUG ("IDAlignMonGenericTracks::fillHistograms() --" << m_tracksName.key() << " could not be retrieved"); return StatusCode::RECOVERABLE; } const DataVector<Trk::Track>* trks = m_trackSelection->selectTracks(tracks); - - - + ATH_MSG_DEBUG ("IDAlignMonGenericTracks::fillHistograms() -- event: " << m_events + << " with Track collection " << m_tracksName.key() + << " has size =" << tracks->size()); float xv=-999; float yv=-999; diff --git a/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.cxx b/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.cxx index 3f51bd2982b242ebe55dff1dd13a27cf1ec316ec..2bc0e5dbc88b355218a297ff0f01d36ee58fd9fc 100755 --- a/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.cxx +++ b/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ // *************************************************************************************** @@ -122,7 +122,7 @@ struct IDAlignMonResiduals::TRTBarrelHistograms{ TH2F* aveResVsPhiEta[3][3]{}; TH2F* rmsResVsPhiEta[3][3]{}; }; - +///////////////////////////////////////////////// struct IDAlignMonResiduals::TRTEndcapHistograms{ /** Residual in TRT Endcap */ @@ -154,7 +154,8 @@ struct IDAlignMonResiduals::TRTEndcapHistograms{ TProfile* aveResVsTrackEta[2]{}; /** Residuals and pulls vs pT in the TRT Endcap */ - TH2F* residualR_pt[2]{}; + TH2F* residualR_pt[2]{}; + TProfile* residualR_ptwheel[2][40]{}; TH2F* pullR_pt[2]{}; TH2F* pullR_notube_pt[2]{}; @@ -185,7 +186,7 @@ struct IDAlignMonResiduals::TRTEndcapHistograms{ TH2F* rmsResVsRadiusWheelNeg[2]{}; }; - +//////////////////////////////////////// IDAlignMonResiduals::IDAlignMonResiduals( const std::string & type, const std::string & name, const IInterface* parent ) :ManagedMonitorToolBase( type, name, parent ), m_trtcaldbTool("TRT_CalDbTool",this), @@ -205,55 +206,56 @@ IDAlignMonResiduals::IDAlignMonResiduals( const std::string & type, const std::s m_z_fix = 366.5; // IBL Stave fixing screw position [mm] m_NLumiBlocksMon = 1; m_minTRTResWindow = -1.0; - m_maxTRTResWindow = 1.0; + m_maxTRTResWindow = 1.0; m_minSiResMeanWindow = -0.1; - m_maxSiResMeanWindow = 0.1; - m_minSiResWidthWindow = 0.0; - m_maxSiResWidthWindow = 0.3; - m_minSiPullWidthWindow = 0.0; - m_maxSiPullWidthWindow = 2.0; - m_minSiResFillRange = -0.5; - m_maxSiResFillRange = 0.5; - m_maxPIXResXFillRange = 0.; // if 0, it will use the m_maxSiResFillRange value - m_minPIXResXFillRange = 0.; // if 0, it will use the m_minSiResFillRange value - m_maxPIXResYFillRange = 0.; - m_minPIXResYFillRange = 0.; - m_maxSCTResFillRange = 0.; - m_minSCTResFillRange = 0.; + m_maxSiResMeanWindow = 0.1; + m_minSiResWidthWindow = 0.0; + m_maxSiResWidthWindow = 0.3; + m_minSiPullWidthWindow = 0.0; + m_maxSiPullWidthWindow = 2.0; + m_minSiResFillRange = -0.08; + m_maxSiResFillRange = 0.08; + m_maxPIXResXFillRange = 0.; // if 0, it will use the m_maxSiResFillRange value + m_minPIXResXFillRange = 0.; // if 0, it will use the m_minSiResFillRange value + m_maxPIXResYFillRange = 0.4; + m_minPIXResYFillRange = -0.4; + m_maxSCTResFillRange = 0.; + m_minSCTResFillRange = 0.; m_ClusterSizeRange = 10.; - m_IncidentThetaRange = 2; - m_IncidentPhiRange = 0.8; - m_RangeOfPullHistos = 10.; - m_PtRange = 20.; - m_nBinsMuRange = 100.; - m_muRangeMin = 0.; - m_muRangeMax = 100; - m_nBinsPtRange = 100; - m_mapSplit = 1; // Create the residual maps splitting the modules in nxn pieces + m_IncidentThetaRange = 2.; + m_IncidentPhiRange = 0.8; + m_RangeOfPullHistos = 6.; + m_PtRange = 40.; + m_xHitErrorRange = 0.08; + m_yHitErrorRange = 0.12; + m_nBinsMuRange =100.; + m_muRangeMin = 0.; + m_muRangeMax =100.; + m_nBinsPtRange =100; + m_mapSplit = 1; // Create the residual maps splitting the modules in nxn pieces m_do3DOverlapHistos = false; m_extendedPlots = false; m_doClusterSizeHistos = false; m_FinerBinningFactor = 1; m_LBGranularity = 1; m_LBRangeMin = -0.5; - m_LBRangeMax = 2599.5; // 1199.5 - m_nBinsLB = 52; // 24 + m_LBRangeMax = 2599.5; + m_nBinsLB = 52; m_gap_pix = 4; m_gap_sct = 4; m_mu = 0.; m_nBinsMuRange = 100.; m_muRangeMin = 0.; - m_muRangeMax = 100; - m_nIBLHitsPerLB = 0; + m_muRangeMax =100; + m_nIBLHitsPerLB = 0; m_minIBLhits = -1; m_hasBeenCalledThisEvent=false; m_doIBLLBPlots = false; m_useGausFit = false; - m_maxPtEC = 10.; + m_maxPtEC = 20.; InitializeHistograms(); - declareProperty("CheckRate" , m_checkrate=1000); declareProperty("triggerChainName" , m_triggerChainName); declareProperty("minTRTResidualWindow" , m_minTRTResWindow); @@ -282,6 +284,8 @@ IDAlignMonResiduals::IDAlignMonResiduals( const std::string & type, const std::s declareProperty("RangeOfPullHistos" , m_RangeOfPullHistos); declareProperty("PtRange" , m_PtRange); declareProperty("NBinsPtRange" , m_nBinsPtRange); + declareProperty("xHitErrorRange" , m_xHitErrorRange); + declareProperty("yHitErrorRange" , m_yHitErrorRange); declareProperty("NBinsLB" , m_nBinsLB); declareProperty("FinerBinningFactor" , m_FinerBinningFactor); declareProperty("NSplitMap" , m_mapSplit); @@ -517,8 +521,12 @@ void IDAlignMonResiduals::InitializeHistograms() m_hiterror_x_pix_b= 0; m_hiterror_x_pix_ec= 0; + m_hiterror_x_pix_eca= 0; + m_hiterror_x_pix_ecc= 0; m_hiterror_y_pix_b= 0; m_hiterror_y_pix_ec= 0; + m_hiterror_y_pix_eca= 0; + m_hiterror_y_pix_ecc= 0; m_hiterror_x_pix_b_WideRange= 0; m_hiterror_x_pix_ec_WideRange= 0; @@ -633,7 +641,6 @@ StatusCode IDAlignMonResiduals::bookHistograms() } std::string outputDirName = "IDAlignMon/" + m_tracksName.key() + "_" + m_triggerChainName + "/Residuals"; - //std::cout << " -- SALVA -- histos for track collection: " << m_tracksName.key() << "_" << m_triggerChainName << std::endl; MonGroup al_mon ( this, outputDirName, run ); @@ -1050,9 +1057,10 @@ void IDAlignMonResiduals::RegisterHisto(MonGroup& mon, TH2* histo) { StatusCode IDAlignMonResiduals::fillHistograms() { - + const EventContext& ctx = Gaudi::Hive::currentContext(); ++m_events; + ATH_MSG_DEBUG ("IDAlignMonResiduals::fillHistograms ** START ** call for m_events " << m_events << " for track collection: " << m_tracksName.key()); m_hasBeenCalledThisEvent=false; m_mu=0.; @@ -1070,8 +1078,9 @@ StatusCode IDAlignMonResiduals::fillHistograms() m_mu = lbAverageInteractionsPerCrossing(); m_hasBeenCalledThisEvent=true; } - else + else { m_mu = -999; + } if (m_extendedPlots){ m_mu_perEvent->Fill(m_mu); @@ -1091,60 +1100,52 @@ StatusCode IDAlignMonResiduals::fillHistograms() } } - // Code is able to get a weight from an external file and appy it to all histograms - double hweight = 1.; - // NB the weight is a "per track" weight, so histograms such as BS info are never weighted - SG::ReadHandle<TrackCollection> inputTracks{m_tracksName}; if (not inputTracks.isValid()) { - ATH_MSG_ERROR(m_tracksName.key() << " could not be retrieved"); + ATH_MSG_DEBUG ("IDAlignMonResiduals::fillHistograms() -- " << m_tracksName.key() << " could not be retrieved"); return StatusCode::RECOVERABLE; } const DataVector<Trk::Track>* tracks = m_trackSelection->selectTracks(inputTracks); - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "IDAlignMonResiduals::fillHistograms() -- event: " << m_events - << " with Track collection " << m_tracksName.key() << " has size =" << tracks->size() - << endmsg; + ATH_MSG_DEBUG ("IDAlignMonResiduals::fillHistograms() -- event: " << m_events + << " with Track collection " << m_tracksName.key() + << " has size =" << tracks->size()); int nTracks = 0; int nHitsEvent = 0; - //DataVector<Trk::Track>::const_iterator trackItr = tracks->begin(); - //DataVector<Trk::Track>::const_iterator trackItrE = tracks->end(); for (DataVector<Trk::Track>::const_iterator trackItr = tracks->begin(); trackItr != tracks->end(); ++trackItr) { //looping over tracks - //need to get the Trk::Track object from which the TrackParticle object was created //this has the hit information const Trk::Track* track = *trackItr; if(track == NULL){ - if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "No associated Trk::Track object found for track "<< nTracks << endmsg; + ATH_MSG_WARNING("** IDAlignMonResiduals::fillHistograms ** No associated Trk::Track object found for track "<< nTracks); continue; } - //debugging - check that all TSOS of track have track parameters defined (required to compute residuals/pulls) - - if(msgLvl(MSG::DEBUG)){ - if(trackRequiresRefit(track)){ - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Not all TSOS contain track parameters - will be missing residuals/pulls " << endmsg; - } - else if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "All TSOS contain track parameters - Good! " << endmsg; + //check that all TSOS of track have track parameters defined (required to compute residuals/pulls) + if (trackRequiresRefit(track)) { + ATH_MSG_DEBUG ("** IDAlignMonResiduals::fillHistograms ** Not all TSOS contain track parameters - will be missing residuals/pulls "); + } + else { + ATH_MSG_DEBUG ("All TSOS of track " << nTracks << " contain track parameters - Good! "); } //trackStateOnSurfaces is a vector of Trk::TrackStateOnSurface objects which contain information //on track at each (inner)detector surface it crosses eg hit used to fit track - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "******************* Track = " << nTracks << endmsg; - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "******************* Track Pointer = " << track << endmsg; - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Found " << track->trackStateOnSurfaces()->size() << " TrkSurfaces " << endmsg; + ATH_MSG_DEBUG ("** IDAlignMonResiduals::fillHistograms() ** track: " << nTracks << " has " << track->trackStateOnSurfaces()->size() << " TrkSurfaces"); + // Code is able to get a weight from an external file and appy it to all histograms + double hweight = 1.; + // NB the weight is a "per track" weight, so histograms such as BS info are never weighted int nHits = 0;//counts number of tsos from which we can define residual/pull int nTSOS = -1;//counts all TSOS on the track float trkpt = -999; float trkqoverp2 = -999; float trketa_w = -999; - - if(m_extendedPlots) - { - trkqoverp2 = track->perigeeParameters()->parameters()[Trk::qOverP]*fabs(track->perigeeParameters()->parameters()[Trk::qOverP])*1000000.; - } + + if(m_extendedPlots) { + trkqoverp2 = track->perigeeParameters()->parameters()[Trk::qOverP]*fabs(track->perigeeParameters()->parameters()[Trk::qOverP])*1000000.; + } trkpt = (track->perigeeParameters()->charge())*(track->perigeeParameters()->pT())/1000.; // signed and in GeV? trketa_w = track->perigeeParameters()->eta(); @@ -1154,23 +1155,25 @@ StatusCode IDAlignMonResiduals::fillHistograms() int binNumber = m_etapTWeight->FindBin( trketa_w, trkpt ); hweight = m_etapTWeight->GetBinContent( binNumber ); } + ATH_MSG_DEBUG ("** IDAlignMonResiduals::fillHistograms() ** track: " << nTracks << " pt: " << trkpt << " eta: " << trketa_w << " weight: " << hweight); //looping over the hits for (const Trk::TrackStateOnSurface* tsos : *track->trackStateOnSurfaces()) { ++nTSOS; - - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "***************** TSOS (hit) = " << nTSOS << endmsg; - - if (tsos == NULL) continue; + if (tsos == NULL) { + ATH_MSG_DEBUG (" TSOS (hit) = " << nTSOS << " is NULL "); + continue; + } + ATH_MSG_DEBUG ("** IDAlignMonResiduals::fillHistograms() ** track: " << nTracks << " dealing with TSOS (hit) = " << nTSOS); //skipping outliers if(!tsos->type(Trk::TrackStateOnSurface::Measurement)) { - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Skipping TSOS " << nTSOS << " because it is an outlier (or the first TSOS on the track)" << endmsg; - continue; + ATH_MSG_DEBUG ("Skipping TSOS " << nTSOS << " because it is an outlier (or the first TSOS on the track)"); + continue; } const Trk::MeasurementBase* mesh =tsos->measurementOnTrack(); - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Defined hit MeasurementBase " << endmsg; + ATH_MSG_DEBUG ("Defined hit MeasurementBase for hit " << nTSOS); //Trk::RIO_OnTrack object contains information on the hit used to fit the track at this surface const Trk::RIO_OnTrack* hit = dynamic_cast <const Trk::RIO_OnTrack*>(mesh); @@ -1258,42 +1261,43 @@ StatusCode IDAlignMonResiduals::fillHistograms() if (m_idHelper->is_trt(hitId)) detType = 2; else if (m_idHelper->is_sct(hitId)) detType = 1; else detType = 0; - if(detType==2){ - //have identified a TRT hit - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Hit is from the TRT, finding residuals... " << endmsg; + + // TRT hits: detType = 2 + if(detType==2){ + ATH_MSG_DEBUG("** IDAlignMonResiduals::fillHistograms() ** Hit is from the TRT, finding residuals... "); bool isTubeHit = (mesh->localCovariance()(Trk::locX,Trk::locX) > 1.0) ? 1 : 0; const Trk::TrackParameters* trackParameter = tsos->trackParameters(); float hitR = hit->localParameters()[Trk::driftRadius]; float trketa = tsos->trackParameters()->eta(); float pullR = -9.9; - + const Identifier& id = m_trtID->layer_id(hitId); int barrel_ec = m_trtID->barrel_ec(id); int layer_or_wheel = m_trtID->layer_or_wheel(id); int phi_module = m_trtID->phi_module(id); int straw_layer = m_trtID->straw_layer(id); - + //finding residuals if(!trackParameter){ if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "No TrackParameters associated with TRT TrkSurface "<<nTSOS<< endmsg; continue; } - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Found Trk::TrackParameters" << endmsg; - + ATH_MSG_DEBUG ("Found Trk::TrackParameters for hit " << nTSOS << " --> TRT hit (detType= "<< detType <<")"); + //getting unbiased track parameters by removing the hit from the track and refitting const Trk::TrackParameters* trackParameterUnbiased = getUnbiasedTrackParameters(track,tsos); - + if(!trackParameterUnbiased){//updator can fail if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Cannot define unbiased parameters for hit, skipping it." << endmsg; continue; } if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Found UnBiased TrackParameters" << endmsg; - + float perdictR = trackParameterUnbiased->parameters()[Trk::locR]; - + //Theoretically there should be no difference in the pull, but in practice, there can be differences bool isPullUnbiased = true; - + const Trk::MeasurementBase* mesh =tsos->measurementOnTrack(); //This has been defined in line 869. Should be safe to keep it without redefinition //Not clear to me here. isPullUnbiased is set to true. Why inside the Function I am checking if it is true or not? Useless I would say. const Trk::ResidualPull* residualPull = m_residualPullCalculator->residualPull(mesh, @@ -1301,49 +1305,45 @@ StatusCode IDAlignMonResiduals::fillHistograms() (isPullUnbiased) ? Trk::ResidualPull::Unbiased : Trk::ResidualPull::Biased); + if (residualPull) { pullR = residualPull->pull()[Trk::locR]; } else { if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << " no covariance of the track parameters given, can not calc pull!" << endmsg; } - + delete trackParameterUnbiased; delete residualPull; - + float residualR = hitR - perdictR; - //float eventPhase = timeCor; I think this is useless. I would prefer not to assign this and pass directly timeCor - + const InDet::TRT_DriftCircleOnTrack *trtCircle = dynamic_cast<const InDet::TRT_DriftCircleOnTrack*>(tsos->measurementOnTrack()); - - - - + const InDet::TRT_DriftCircle *RawDriftCircle(NULL); - - if (trtCircle!=NULL) - { - ATH_MSG_DEBUG("Getting RawDriftCircle"); - RawDriftCircle = dynamic_cast<const InDet::TRT_DriftCircle*>(trtCircle->prepRawData()); - } - else + + if (trtCircle!=NULL) { + ATH_MSG_DEBUG("Getting RawDriftCircle"); + RawDriftCircle = dynamic_cast<const InDet::TRT_DriftCircle*>(trtCircle->prepRawData()); + } + else { ATH_MSG_DEBUG("trtCircle is a NULL pointer"); - + } + if ( trtCircle != NULL){ bool isValid; float leadingEdge = -999; - if (RawDriftCircle != NULL) - { - leadingEdge=RawDriftCircle->driftTime(isValid); - } - else + if (RawDriftCircle != NULL) { + leadingEdge=RawDriftCircle->driftTime(isValid); + } + else { ATH_MSG_DEBUG("RawDriftCircles are NULL pointer"); - + } + Identifier DCoTId = trtCircle->identify(); float t0 = m_trtcaldbTool->getT0(DCoTId, TRTCond::ExpandedIdentifier::STRAW); - - ATH_MSG_DEBUG("Filling TRT HISTOS"); - + ATH_MSG_DEBUG("** fillHistograms() ** Filling TRT HISTOS for hit/tsos " << nTSOS); + // Global positions float trkz0 = track->perigeeParameters()->parameters()[Trk::z0]; float theta = track->perigeeParameters()->parameters()[Trk::theta]; @@ -1353,19 +1353,17 @@ StatusCode IDAlignMonResiduals::fillHistograms() Amg::Vector3D center(-9999.,-9999.,-9999); if (RawDriftCircle!=NULL) center = RawDriftCircle->detectorElement()->surface( id ).center() ; - + if( fabs(barrel_ec) == 1 && RawDriftCircle!=NULL){ hitZ = sqrt(center.x()*center.x()+center.y()*center.y())*tan(M_PI/2. - theta) + trkz0; - //std::cout << "z: " << hitZ << std::endl; } /* Estimates the global R position of a TRT EC hit using the global z position of the straw and the track theta */ float hitGlobalR = -9999.; // -999. is a possible value :) if( fabs(barrel_ec) == 2 && RawDriftCircle!=NULL){ hitGlobalR = (center.z() - trkz0) / tan(M_PI/2. - theta); - //std::cout << "R: " << hitGlobalR << std::endl; } - + /** filling TRT histograms */ fillTRTHistograms(barrel_ec ,layer_or_wheel @@ -1384,12 +1382,12 @@ StatusCode IDAlignMonResiduals::fillHistograms() ,trketa ,trkpt, hweight); } - }//if detType ==2 - + }//if detType ==2 // TRT + //if (detType==0 || detType==1) else {//have identified pixel or SCT hit - - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Hit is pixel or SCT, finding residuals... " << endmsg; + + ATH_MSG_DEBUG ("** fillHistograms() ** Hit is pixel or SCT, type: " << detType); if(m_doHitQuality) { if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "applying hit quality cuts to Silicon hit..." << endmsg; @@ -1433,12 +1431,8 @@ StatusCode IDAlignMonResiduals::fillHistograms() ClusSizeZ = (int)cw.colRow()[1]; ClusSize = (int)clus->rdoList().size(); } - - - } else {//sct. Since detType == 0 or detType == 1 here - const Identifier& id = m_sctID->wafer_id(hitId); barrelEC = m_sctID->barrel_ec(id); layerDisk = m_sctID->layer_disk(id); @@ -1447,26 +1441,26 @@ StatusCode IDAlignMonResiduals::fillHistograms() sctSide = m_sctID->side(id); const InDetDD::SiDetectorElement *siDet = dynamic_cast<const InDetDD::SiDetectorElement*>(hit->detectorElement()); if (siDet){ - isStereo = siDet->isStereo(); - const InDet::SCT_Cluster *clus = dynamic_cast<const InDet::SCT_Cluster*>(hit->prepRawData()); - if(clus){ - const InDet::SiWidth cw = clus->width(); - ClusSizePhi = (int)cw.colRow()[0]; - ClusSize = (int)clus->rdoList().size(); - } - } + isStereo = siDet->isStereo(); + const InDet::SCT_Cluster *clus = dynamic_cast<const InDet::SCT_Cluster*>(hit->prepRawData()); + if(clus){ + const InDet::SiWidth cw = clus->width(); + ClusSizePhi = (int)cw.colRow()[0]; + ClusSize = (int)clus->rdoList().size(); + } + } } //const Trk::TrackParameters* trackParameter = tsos->trackParameters(); // Already defined before in line 880. Should be safe here to take the one up since there are the continues. - + //finding residuals if(trackParameter){//should always have TrackParameters since we now skip tracks with no MeasuredTrackParameters - + if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Found Trk::TrackParameters " << trackParameter << endmsg; - + double unbiasedResXY[4] = {9999.0,9999.0,9999.0,9999.0}; double biasedResXY[4] = {9999.0,9999.0,9999.0,9999.0}; - + //finding unbiased single residuals StatusCode sc; sc = getSiResiduals(track,tsos,true,unbiasedResXY); @@ -1480,7 +1474,7 @@ StatusCode IDAlignMonResiduals::fillHistograms() residualY = (float)unbiasedResXY[1]; pullX = (float)unbiasedResXY[2]; pullY = (float)unbiasedResXY[3]; - + //finding biased single residuals (for interest) sc = getSiResiduals(track,tsos,false,biasedResXY); if (sc.isFailure()) { @@ -1500,17 +1494,17 @@ StatusCode IDAlignMonResiduals::fillHistograms() hitErrorX = (float)sqrt(fabs(mesh->localCovariance()(Trk::loc1,Trk::loc1))); hitErrorY = (float)sqrt(fabs(mesh->localCovariance()(Trk::loc2,Trk::loc2))); //globR = (float)sqrt(mesh->globalPosition().x()*mesh->globalPosition().x()+mesh->globalPosition().y()*mesh->globalPosition().y()); - + if (detType==1 && barrelEC!=0){ // Hit error calculation for the SCT Endcaps const InDetDD::SiDetectorElement *siDet = dynamic_cast<const InDetDD::SiDetectorElement*>(hit->detectorElement()); - + // MeasurementBase --> virtual const Amg::Vector3D& globalPosition() const = 0; - /// Angle of strip in local frame with respect to the etaAxis. + /// Angle of strip in local frame with respect to the etaAxis. /// Zero for all elements except trapezoidal detectors (ie SCT forward modules). ////SiDetectorElement -->double sinStereoLocal(const Amg::Vector2D &localPos) const; /// See previous method ////SiDetectorElement -->double sinStereoLocal(const HepGeom::Point3D<double> &globalPos) const; - + if (siDet != NULL) { double sinAlpha = siDet->sinStereoLocal(siDet->localPosition(mesh->globalPosition())); @@ -1521,24 +1515,24 @@ StatusCode IDAlignMonResiduals::fillHistograms() RotMat(0,1) = sinAlpha; RotMat(1,0) = -sinAlpha; RotMat(1,1) = cosAlpha; - + AmgSymMatrix(2) transformedROTCov = mesh->localCovariance().similarity(RotMat); hitErrorX = sqrt(transformedROTCov(0,0)); } } } - - + + //looking for an overlapping module in the X,Y direction //double counting is avoided by requiring that the overlap is at greater radius if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "looking for overlaps hits..." << endmsg; std::pair<const Trk::TrackStateOnSurface*,const Trk::TrackStateOnSurface*> overlap = findOverlapHit(track,hit); const Trk::TrackStateOnSurface* xOverlap = overlap.first;//will be NULL if no overlap found const Trk::TrackStateOnSurface* yOverlap = overlap.second;//will be NULL if no overlap found - + //find residuals for overlapping modules (if any) and calculate overlap residual if(xOverlap){//identified outer module overlapping in localX direction - + foundXOverlap = true; //float overlapXResX = 9999.0; //float overlapXResY = 9999.0; @@ -1551,20 +1545,20 @@ StatusCode IDAlignMonResiduals::fillHistograms() continue; } else if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "unbiasedOverlapRes found ok" << endmsg; /* - overlapXResX = (float)unbiasedOverlapRes[0]; - overlapXResY = (float)unbiasedOverlapRes[1]; - - //finally computing the overlap residuals - overlapXResidualX = overlapXResX - residualX; - overlapXResidualY = overlapXResY - residualY; + overlapXResX = (float)unbiasedOverlapRes[0]; + overlapXResY = (float)unbiasedOverlapRes[1]; + + //finally computing the overlap residuals + overlapXResidualX = overlapXResX - residualX; + overlapXResidualY = overlapXResY - residualY; */ overlapXResidualX = (float)unbiasedOverlapRes[0] - residualX; overlapXResidualY = (float)unbiasedOverlapRes[1] - residualY; - + } - + if(yOverlap){//identified outer module overlapping in localY direction - + foundYOverlap = true; //float overlapYResX = 9999.0; //float overlapYResY = 9999.0; @@ -1576,30 +1570,29 @@ StatusCode IDAlignMonResiduals::fillHistograms() //return StatusCode::SUCCESS; continue; } else if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "unbiasedOverlapRes found ok" << endmsg; - + overlapYResidualX = (float)unbiasedOverlapRes[0] - residualX; overlapYResidualY = (float)unbiasedOverlapRes[1] - residualY; } } else if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "No TrackParameters associated with Si TrkSurface "<< nTSOS << " - Hit is probably an outlier" << endmsg; } - + //-------------------------------------------- // // Filling Residual Histograms for different subsystems // //-------------------------------------------- - - + + if (detType==0) {//filling pixel histograms m_si_residualx -> Fill(residualX, hweight); if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " This is a PIXEL hit " << hitId << " - filling histograms" << endmsg; - + if(barrelEC==0){//filling pixel barrel histograms - - if (layerDisk==0) - m_nIBLHitsPerLB++; - + + if (layerDisk==0) m_nIBLHitsPerLB++; + m_si_b_residualx -> Fill(residualX, hweight); int layerModEtaShift[4] = {10,30,48,65}; //HARDCODED! int layerModPhiShift[4] = {0,18,44,86}; @@ -1615,38 +1608,37 @@ StatusCode IDAlignMonResiduals::fillHistograms() m_pix_b_residualsy[layerDisk]-> Fill(residualY, hweight); m_pix_b_pullsx[layerDisk] -> Fill(pullX , hweight); m_pix_b_pullsy[layerDisk] -> Fill(pullY , hweight); - - + + m_pix_b_xresvsmodetaphi_3ds[layerDisk] -> Fill(modEta, modPhi, residualX, hweight); m_pix_b_yresvsmodetaphi_3ds[layerDisk] -> Fill(modEta, modPhi, residualY, hweight); - + if (layerDisk == 0) { m_pix_b0_resXvsetaLumiBlock->Fill(float(m_lumiblock), modEta, residualX, hweight); - + if (modEta<=6 && modEta>=-6) m_pix_b0_resXvsetaLumiBlock_planars->Fill(float(m_lumiblock),modEta,residualX,hweight); - - if (m_doIBLLBPlots) - { - m_pix_b0_resXvsetaLumiBlock_3d->Fill(float(m_lumiblock), modEta, residualX, hweight); - if (modEta<=6 && modEta>=-6) m_pix_b0_resXvsetaLumiBlock_planars->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==0) m_pix_b0_resXvsetaLumiBlock_stave0->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==1) m_pix_b0_resXvsetaLumiBlock_stave1->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==2) m_pix_b0_resXvsetaLumiBlock_stave2->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==3) m_pix_b0_resXvsetaLumiBlock_stave3->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==4) m_pix_b0_resXvsetaLumiBlock_stave4->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==5) m_pix_b0_resXvsetaLumiBlock_stave5->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==6) m_pix_b0_resXvsetaLumiBlock_stave6->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==7) m_pix_b0_resXvsetaLumiBlock_stave7->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==8) m_pix_b0_resXvsetaLumiBlock_stave8->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==9) m_pix_b0_resXvsetaLumiBlock_stave9->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==10) m_pix_b0_resXvsetaLumiBlock_stave10->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==11) m_pix_b0_resXvsetaLumiBlock_stave11->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==12) m_pix_b0_resXvsetaLumiBlock_stave12->Fill(float(m_lumiblock),modEta,residualX,hweight); - if (modPhi==13) m_pix_b0_resXvsetaLumiBlock_stave13->Fill(float(m_lumiblock),modEta,residualX,hweight); - } + + if (m_doIBLLBPlots) { + m_pix_b0_resXvsetaLumiBlock_3d->Fill(float(m_lumiblock), modEta, residualX, hweight); + if (modEta<=6 && modEta>=-6) m_pix_b0_resXvsetaLumiBlock_planars->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==0) m_pix_b0_resXvsetaLumiBlock_stave0->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==1) m_pix_b0_resXvsetaLumiBlock_stave1->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==2) m_pix_b0_resXvsetaLumiBlock_stave2->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==3) m_pix_b0_resXvsetaLumiBlock_stave3->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==4) m_pix_b0_resXvsetaLumiBlock_stave4->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==5) m_pix_b0_resXvsetaLumiBlock_stave5->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==6) m_pix_b0_resXvsetaLumiBlock_stave6->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==7) m_pix_b0_resXvsetaLumiBlock_stave7->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==8) m_pix_b0_resXvsetaLumiBlock_stave8->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==9) m_pix_b0_resXvsetaLumiBlock_stave9->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==10) m_pix_b0_resXvsetaLumiBlock_stave10->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==11) m_pix_b0_resXvsetaLumiBlock_stave11->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==12) m_pix_b0_resXvsetaLumiBlock_stave12->Fill(float(m_lumiblock),modEta,residualX,hweight); + if (modPhi==13) m_pix_b0_resXvsetaLumiBlock_stave13->Fill(float(m_lumiblock),modEta,residualX,hweight); + } } - + if (foundXOverlap) { m_pix_bec_Oxresx_mean -> Fill(layerDisk+1.1,overlapXResidualX, hweight); m_pix_bec_Oxresy_mean -> Fill(layerDisk+1.1,overlapXResidualY, hweight); @@ -1668,7 +1660,7 @@ StatusCode IDAlignMonResiduals::fillHistograms() } }//fYO } - + else if(barrelEC==2){//three Pixel endcap disks from 0-2 int ModPhiShift[3] = {0,55,110}; m_si_eca_pullX-> Fill(layerDisk,pullX , hweight); @@ -1679,27 +1671,24 @@ StatusCode IDAlignMonResiduals::fillHistograms() m_pix_eca_residualy -> Fill(residualY, hweight); m_pix_eca_pullx -> Fill(pullX , hweight); m_pix_eca_pully -> Fill(pullY , hweight); - + float disk = layerDisk + 0.1; if(foundXOverlap) { m_pix_bec_Oxresx_mean -> Fill(disk+5.0,overlapXResidualX, hweight); m_pix_bec_Oxresy_mean -> Fill(disk+5.0,overlapXResidualY, hweight); m_pix_eca_Oxresxvsmodphi -> Fill(modPhi+ModPhiShift[layerDisk],overlapXResidualX, hweight); } - + if(foundYOverlap) { m_pix_bec_Oyresx_mean -> Fill(disk+5.0,overlapYResidualX, hweight); m_pix_bec_Oyresy_mean -> Fill(disk+5.0,overlapYResidualY, hweight); m_pix_eca_Oyresyvsmodphi -> Fill(modPhi+ModPhiShift[layerDisk],overlapYResidualY, hweight); } - + m_pix_eca_xresvsmodphi_2d -> Fill(modPhi+ModPhiShift[layerDisk],residualX, hweight); m_pix_eca_yresvsmodphi_2d -> Fill(modPhi+ModPhiShift[layerDisk],residualY, hweight); m_pix_eca_unbiased_xresvsmodphi_disks[layerDisk] -> Fill(modPhi,residualX, hweight); m_pix_eca_unbiased_yresvsmodphi_disks[layerDisk] -> Fill(modPhi,residualY, hweight); - //m_pix_eca_unbiased_xresvsmodphi -> Fill(modPhi+ModPhiShift[layerDisk],residualX,hweight); - //m_pix_eca_unbiased_yresvsmodphi -> Fill(modPhi+ModPhiShift[layerDisk],residualY,hweight); - } else if(barrelEC==-2){ int ModPhiShift[3] = {0,55,110}; @@ -1707,7 +1696,7 @@ StatusCode IDAlignMonResiduals::fillHistograms() m_si_ecc_pullY-> Fill(layerDisk,pullY , hweight); m_si_ecc_resX -> Fill(layerDisk,residualX, hweight); m_si_ecc_resY -> Fill(layerDisk,residualY, hweight); - + float disk = (float)layerDisk; disk = -1.0*(disk + 0.1); m_pix_ecc_residualx -> Fill(residualX, hweight); @@ -1730,36 +1719,36 @@ StatusCode IDAlignMonResiduals::fillHistograms() //m_pix_ecc_unbiased_yresvsmodphi -> Fill(modPhi+ModPhiShift[layerDisk],residualY,hweight); m_pix_ecc_unbiased_xresvsmodphi_disks[layerDisk] -> Fill(modPhi,residualX, hweight); m_pix_ecc_unbiased_yresvsmodphi_disks[layerDisk] -> Fill(modPhi,residualY, hweight); - + } - + } else if (detType==1) {//filling SCT histograms m_si_residualx -> Fill(residualX, hweight); if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " This is an SCT hit " << hitId << " - filling histograms" << endmsg; - + if(barrelEC==0){//filling SCT barrel histograms m_si_b_residualx -> Fill(residualX, hweight); int ModPhiShift[4] = {0,37,82,135}; int ModEtaShift[4] = {6,24,42,60}; m_si_barrel_pullX->Fill(m_NPixLayers + 2*(layerDisk) + sctSide, pullX, hweight); //m_si_barrel_pullY->Fill(3 + 2*(layerDisk) + sctSide, pullY);//no SCT Y residuals yet - + m_si_barrel_resX->Fill(m_NPixLayers + 2*(layerDisk) + sctSide, residualX, hweight); //m_si_barrel_resY->Fill(3 + 2*(layerDisk) + sctSide, residualY);//no SCT Y residuals yet - + m_sct_b_residualx -> Fill(residualX , hweight); m_sct_b_biasedresidualx-> Fill(biasedResidualX, hweight); - + if(foundXOverlap) m_sct_bec_Oxresx_mean -> Fill(layerDisk+1.1,overlapXResidualX, hweight); if(foundYOverlap) m_sct_bec_Oyresx_mean -> Fill(layerDisk+1.1,overlapYResidualX, hweight); - + m_sct_b_residualsx[layerDisk]-> Fill(residualX, hweight); m_sct_b_pullsx[layerDisk] -> Fill(pullX , hweight); - + m_sct_b_xresvsmodetaphi_3ds[layerDisk] -> Fill(modEta,modPhi,residualX, hweight); - + if(foundXOverlap) { m_sct_b_xoverlapresidualsx[layerDisk]-> Fill(overlapXResidualX , hweight); m_sct_b_Oxresxvsmodeta -> Fill(modEta+ModEtaShift[layerDisk],overlapXResidualX, hweight); @@ -1776,7 +1765,7 @@ StatusCode IDAlignMonResiduals::fillHistograms() } // if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Unexpected SCT layer number "<< layerDisk << endmsg; } - + else if(barrelEC==2){//nine SCT endcap disks from 0-8 //ASSUMPTION: the outer rings of the SCT endcap disks have the same number of modules. WARNING! hardcoded! int Nmods = 52; @@ -1785,21 +1774,21 @@ StatusCode IDAlignMonResiduals::fillHistograms() //m_si_eca_pullY->Fill(3 + 2*(layerDisk) + sctSide, pullY);//no SCT Y residuals yet m_si_eca_resX->Fill(3 + 2*(layerDisk) + sctSide, residualX, hweight); //m_si_eca_resY->Fill(3 + 2*(layerDisk) + sctSide, residualY);//no SCT Y residuals yet - + float disk = layerDisk + 0.1; m_sct_eca_residualx -> Fill(residualX, hweight); m_sct_eca_pullx -> Fill(pullX , hweight); - + m_sct_eca_xresvsmodphi_2d -> Fill(modPhi+(layerDisk - 1)* (m_gap_sct + Nmods),residualX, hweight); - + if(foundXOverlap) { m_sct_bec_Oxresx_mean->Fill(disk+6.0,overlapXResidualX); m_sct_eca_Oxresxvsmodphi -> Fill(modPhi+ (layerDisk - 1)* (m_gap_sct + Nmods),overlapXResidualX,hweight); // modPhi+ ModPhiShift[layerDisk],overlapXResidualX , hweight); } - + } - + else if(barrelEC==-2){ int Nmods = 52; @@ -1807,12 +1796,12 @@ StatusCode IDAlignMonResiduals::fillHistograms() //m_si_ecc_pullY->Fill(3 + 2*(layerDisk) + sctSide, pullY);//no SCT Y residuals yet m_si_ecc_resX->Fill(3 + 2*(layerDisk) + sctSide, residualX, hweight); //m_si_ecc_resY->Fill(3 + 2*(layerDisk) + sctSide, residualY);//no SCT Y residuals yet - + float disk = (float)layerDisk; disk = -1.0*(disk + 0.1); m_sct_ecc_residualx ->Fill(residualX, hweight); m_sct_ecc_pullx ->Fill(pullX , hweight); - + m_sct_ecc_xresvsmodphi_2d -> Fill(modPhi+(layerDisk - 1)* (m_gap_sct + Nmods) ,residualX, hweight); if(foundXOverlap) { m_sct_bec_Oxresx_mean->Fill(disk,overlapXResidualX); @@ -1833,16 +1822,16 @@ StatusCode IDAlignMonResiduals::fillHistograms() m_pix_b_residualy_pt -> Fill(trkpt, residualY, hweight); m_pix_b_pullx_pt -> Fill(trkpt, pullX, hweight); m_pix_b_pully_pt -> Fill(trkpt, pullY, hweight); - m_pix_b_residualx_fine -> Fill(residualX , hweight); - m_pix_b_residualy_fine -> Fill(residualY , hweight); - m_pix_b_measured_localx-> Fill(mlocalX , hweight); - m_pix_b_measured_localy-> Fill(mlocalY , hweight); + m_pix_b_residualx_fine -> Fill(residualX , hweight); + m_pix_b_residualy_fine -> Fill(residualY , hweight); + m_pix_b_measured_localx -> Fill(mlocalX , hweight); + m_pix_b_measured_localy -> Fill(mlocalY , hweight); m_pix_b_extrapolated_localx-> Fill(elocalX , hweight); m_pix_b_extrapolated_localy-> Fill(elocalY , hweight); if (layerDisk != 0) { // Pixel barrel layers - m_hiterror_x_pix_b -> Fill(hitErrorX , hweight); + m_hiterror_x_pix_b -> Fill(hitErrorX , hweight); m_hiterror_x_pix_b_WideRange-> Fill(hitErrorX , hweight); - m_hiterror_y_pix_b -> Fill(hitErrorY , hweight); + m_hiterror_y_pix_b -> Fill(hitErrorY , hweight); m_hiterror_y_pix_b_WideRange-> Fill(hitErrorY , hweight); } if (layerDisk == 0) { // IBL @@ -1851,12 +1840,12 @@ StatusCode IDAlignMonResiduals::fillHistograms() m_hiterror_x_ibl_b_WideRange ->Fill(hitErrorX,hweight); m_hiterror_y_ibl_b_WideRange ->Fill(hitErrorX,hweight); } - + if(mlocalY > m_PixelBarrelYSize / 2.05 ) mlocalY = m_PixelBarrelYSize/2.05; if(mlocalY < -m_PixelBarrelYSize / 2.05 ) mlocalY = -m_PixelBarrelYSize/2.05; if(mlocalX > m_PixelBarrelXSize / 2.05 ) mlocalX = m_PixelBarrelXSize/2.05; if(mlocalX < -m_PixelBarrelXSize / 2.05 ) mlocalX = -m_PixelBarrelXSize/2.05; - + m_pix_b_residualsx_incitheta[layerDisk] ->Fill(incidenceTheta,residualX,hweight); m_pix_b_residualsy_incitheta[layerDisk] ->Fill(incidenceTheta,residualY,hweight); m_pix_b_residualsx_inciphi[layerDisk] ->Fill(incidencePhi,residualX,hweight); @@ -1877,7 +1866,7 @@ StatusCode IDAlignMonResiduals::fillHistograms() m_pix_b_xoverlapresidualsx[layerDisk]-> Fill(overlapXResidualX , hweight); m_pix_b_xoverlapresidualsy[layerDisk]-> Fill(overlapXResidualY , hweight); } - + if(foundYOverlap) { m_pix_b_yoverlapresidualsx[layerDisk]-> Fill(overlapYResidualX , hweight); m_pix_b_yoverlapresidualsy[layerDisk]-> Fill(overlapYResidualY , hweight); @@ -1885,7 +1874,7 @@ StatusCode IDAlignMonResiduals::fillHistograms() // int modoffset = 6.5; // default for old pixel layers m_PixelBarrelXSize = 16.44; // mm m_PixelBarrelYSize = 60.2; // mm - + if (layerDisk == 0) { // in case of IBL m_PixelBarrelXSize = 18.75; // Extracted from: arXiv:1209.1906v1, Figure 2 m_PixelBarrelYSize = 41.32; @@ -1895,12 +1884,12 @@ StatusCode IDAlignMonResiduals::fillHistograms() m_PixelBarrelYSize = 19.20 ; } } - + float xValueForHist = modEta + mlocalY / m_PixelBarrelYSize; float yValueForHist = modPhi + mlocalX / m_PixelBarrelXSize; - + if (false) { - std::cout << " -- SALVA -- filling detailed pixel maps -- layer = " << layerDisk + std::cout << " -- filling detailed pixel maps -- layer = " << layerDisk << " eta: " << modEta << " phi " << modPhi << " local (" << mlocalX << " / " << m_PixelBarrelXSize @@ -1916,11 +1905,11 @@ StatusCode IDAlignMonResiduals::fillHistograms() //m_pix_b_biased_yresvsmodetaphi_3ds[layerDisk] -> Fill(ModCenterPosX+mlocalY, ModCenterPosY+mlocalX, residualY, hweight); m_pix_b_detailed_xresvsmodetaphi_3ds[layerDisk] -> Fill( xValueForHist, yValueForHist, residualX, hweight); m_pix_b_detailed_yresvsmodetaphi_3ds[layerDisk] -> Fill( xValueForHist, yValueForHist, residualY, hweight); - + // pixel B-layer halfshell phi identifier association - // Layer 0 Layer 1 Layer 2 - // top: 1-10 0-19 0-22 49-51 - // bottom: 11-21 and 0 20-37 23-48 + // Layer 0 Layer 1 Layer 2 + // top: 1-10 0-19 0-22 49-51 + // bottom: 11-21 and 0 20-37 23-48 if (layerDisk != 2) // Necessary because the logic changes if(modPhi>phiIdentifier_min[layerDisk] && modPhi<phiIdentifier_max[layerDisk]) { m_pix_b_top_residualsx[layerDisk] -> Fill(residualX, hweight); @@ -1986,8 +1975,12 @@ StatusCode IDAlignMonResiduals::fillHistograms() m_pix_eca_pullx_pt -> Fill(trkpt, pullX , hweight); m_pix_eca_pully_pt -> Fill(trkpt, pullY , hweight); - m_hiterror_x_pix_ec -> Fill(hitErrorX , hweight); m_hiterror_x_pix_ec_WideRange-> Fill(hitErrorX , hweight); - m_hiterror_y_pix_ec -> Fill(hitErrorY , hweight); m_hiterror_y_pix_ec_WideRange-> Fill(hitErrorY , hweight); + m_hiterror_x_pix_ec -> Fill(hitErrorX , hweight); + m_hiterror_y_pix_ec -> Fill(hitErrorY , hweight); + m_hiterror_x_pix_eca -> Fill(hitErrorX , hweight); + m_hiterror_y_pix_eca -> Fill(hitErrorY , hweight); + m_hiterror_x_pix_ec_WideRange-> Fill(hitErrorX , hweight); + m_hiterror_y_pix_ec_WideRange-> Fill(hitErrorY , hweight); m_pix_eca_biased_residualsx[layerDisk] -> Fill(biasedResidualX , hweight); m_pix_eca_biased_residualsy[layerDisk] -> Fill(biasedResidualY , hweight); @@ -2044,8 +2037,13 @@ StatusCode IDAlignMonResiduals::fillHistograms() m_pix_ecc_residualy_pt-> Fill(trkpt, residualY, hweight); m_pix_ecc_pullx_pt -> Fill(trkpt, pullX , hweight); m_pix_ecc_pully_pt -> Fill(trkpt, pullY , hweight); - m_hiterror_x_pix_ec -> Fill(hitErrorX , hweight); m_hiterror_x_pix_ec_WideRange-> Fill(hitErrorX , hweight); - m_hiterror_y_pix_ec -> Fill(hitErrorY , hweight); m_hiterror_y_pix_ec_WideRange-> Fill(hitErrorY , hweight); + + m_hiterror_x_pix_ec -> Fill(hitErrorX , hweight); + m_hiterror_y_pix_ec -> Fill(hitErrorY , hweight); + m_hiterror_x_pix_ecc -> Fill(hitErrorX , hweight); + m_hiterror_y_pix_ecc -> Fill(hitErrorY , hweight); + m_hiterror_x_pix_ec_WideRange-> Fill(hitErrorX , hweight); + m_hiterror_y_pix_ec_WideRange-> Fill(hitErrorY , hweight); m_pix_ecc_biased_residualsx[layerDisk] -> Fill(biasedResidualX , hweight); m_pix_ecc_biased_residualsy[layerDisk] -> Fill(biasedResidualY , hweight); @@ -2161,15 +2159,11 @@ StatusCode IDAlignMonResiduals::fillHistograms() + (modPhi+0.5)*m_SCTBarrelXSize; if(sctSide==0) { - // SALVA (13/May/2015) temporary fix.. used the biased histogram to store the unbiased residuals when modules divides in a Nsplit x Nsplit grid - // SALVA m_sct_b_s0_biased_xresvsmodetaphi_3ds[layerDisk]->Fill(ModCenterPosX+elocalY, ModCenterPosY+mlocalX,biasedResidualX, hweight); m_sct_b_s0_biased_xresvsmodetaphi_3ds[layerDisk]->Fill(ModCenterPosX+elocalY, ModCenterPosY+mlocalX, residualX, hweight); m_sct_b_s0_xresvsmodetaphi_3ds[layerDisk] -> Fill(modEta, modPhi, residualX, hweight); } else { - // SALVA m_sct_b_s1_biased_xresvsmodetaphi_3ds[layerDisk]->Fill(ModCenterPosX+elocalY, ModCenterPosY+mlocalX,biasedResidualX, hweight); - // SALVA (13/May/2015) temporary fix.. used the biased histogram to store the unbiased residuals when modules divides in a Nsplit x Nsplit grid m_sct_b_s1_biased_xresvsmodetaphi_3ds[layerDisk]->Fill(ModCenterPosX+elocalY, ModCenterPosY+mlocalX, residualX, hweight); m_sct_b_s1_xresvsmodetaphi_3ds[layerDisk] -> Fill(modEta, modPhi, residualX, hweight); } @@ -2283,16 +2277,15 @@ StatusCode IDAlignMonResiduals::fillHistograms() ++nHitsEvent; }//end of loop on track surfaces + // filling of residuals completed + // update track number and go for next ++nTracks; } // end of loop on tracks if (m_changedlumiblock) { - - - //Making the fit for the IBL bowing. This has to be done at lowest time granularity possible: we will try to make it lumiBlock wise. - + //Making the fit for the IBL bowing. This has to be done at lowest time granularity possible: we will try to make it lumiBlock wise. //If too less events I want to put those ones. float mag = -999., base = -999., mag_er=0.,base_er=0.; @@ -2300,28 +2293,27 @@ StatusCode IDAlignMonResiduals::fillHistograms() int lumibin = m_lumiblock+1; - if ( m_nIBLHitsPerLB > m_minIBLhits ) - { - TH1D* projection_lumiblock = (TH1D*) m_pix_b0_resXvsetaLumiBlock->ProjectionY(("iblBowingProjection_lumiblock_"+intToString(lumibin-1)).c_str(),lumibin,lumibin); - //if (projection_lumiblock->GetEntries() > min_entries) - //{ - MakeStaveShapeFit(mag,mag_er,base,base_er,projection_lumiblock); - m_mag_vs_LB->SetBinContent(lumibin,mag); - m_mag_vs_LB->SetBinError(lumibin,mag_er); - m_base_vs_LB->SetBinContent(lumibin,base); - m_base_vs_LB->SetBinError(lumibin,base_er); - TH1F* projection_lumiblock_planars = (TH1F*) m_pix_b0_resXvsetaLumiBlock_planars->ProjectionY(("planars_iblBowingProjection_lumiblock_"+intToString(lumibin-1)).c_str(),lumibin,lumibin); - MakeStaveShapeFit(mag,mag_er,base,base_er,projection_lumiblock_planars); - m_mag_vs_LB_planars->SetBinContent(lumibin,mag); - m_mag_vs_LB_planars->SetBinError(lumibin,mag_er); - m_base_vs_LB_planars->SetBinContent(lumibin,base); - m_base_vs_LB_planars->SetBinError(lumibin,base_er); - //} - //else - // if(msgLvl(MSG::INFO)) msg(MSG::INFO) << "Fit IBL Shape for LumiBlock : "<< m_lumiblock<<" disabled because of too few entries! "<<projection_lumiblock->GetEntries() <<endmsg; - - delete projection_lumiblock; - } + if ( m_nIBLHitsPerLB > m_minIBLhits ) { + TH1D* projection_lumiblock = (TH1D*) m_pix_b0_resXvsetaLumiBlock->ProjectionY(("iblBowingProjection_lumiblock_"+intToString(lumibin-1)).c_str(),lumibin,lumibin); + //if (projection_lumiblock->GetEntries() > min_entries) + //{ + MakeStaveShapeFit(mag,mag_er,base,base_er,projection_lumiblock); + m_mag_vs_LB->SetBinContent(lumibin,mag); + m_mag_vs_LB->SetBinError(lumibin,mag_er); + m_base_vs_LB->SetBinContent(lumibin,base); + m_base_vs_LB->SetBinError(lumibin,base_er); + TH1F* projection_lumiblock_planars = (TH1F*) m_pix_b0_resXvsetaLumiBlock_planars->ProjectionY(("planars_iblBowingProjection_lumiblock_"+intToString(lumibin-1)).c_str(),lumibin,lumibin); + MakeStaveShapeFit(mag,mag_er,base,base_er,projection_lumiblock_planars); + m_mag_vs_LB_planars->SetBinContent(lumibin,mag); + m_mag_vs_LB_planars->SetBinError(lumibin,mag_er); + m_base_vs_LB_planars->SetBinContent(lumibin,base); + m_base_vs_LB_planars->SetBinError(lumibin,base_er); + //} + //else + // if(msgLvl(MSG::INFO)) msg(MSG::INFO) << "Fit IBL Shape for LumiBlock : "<< m_lumiblock<<" disabled because of too few entries! "<<projection_lumiblock->GetEntries() <<endmsg; + + delete projection_lumiblock; + } else if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Fit IBL Shape for LumiBlock : "<< m_lumiblock<<" disabled. Too Few hits"<<endmsg; @@ -2806,6 +2798,7 @@ const Trk::TrackParameters* IDAlignMonResiduals::getUnbiasedTrackParameters(cons if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "original track parameters: " << *(tsos->trackParameters()) <<endmsg; + ATH_MSG_VERBOSE(" ** getUnbiasedTrackParameters ** original track parameters: " << *(tsos->trackParameters())); if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "Trying to unbias track parameters." << endmsg; @@ -3068,7 +3061,7 @@ bool IDAlignMonResiduals::trackRequiresRefit(const Trk::Track* track) int nHits = 0; int nHitsNoParams = 0; - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Testing track to see if requires refit..." << endmsg; + ATH_MSG_DEBUG ("** IDAlignMonResiduals::trackRequiresRefit ** Testing track to see if requires refit..."); for (const Trk::TrackStateOnSurface* tsos : *track->trackStateOnSurfaces()) { @@ -3086,16 +3079,14 @@ bool IDAlignMonResiduals::trackRequiresRefit(const Trk::Track* track) const Trk::TrackParameters* trackParameter = tsos->trackParameters(); if(trackParameter==NULL) ++nHitsNoParams; //if no TrackParameters for TSOS we cannot define residuals - } - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Total nhits on track (excluding outliers) = " << nHits << ", nhits without trackparameters = " << nHitsNoParams << endmsg; - - if(nHitsNoParams>0) { - refitTrack = true; - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Track Requires refit to get residuals!!!" << endmsg; - } + if (nHitsNoParams>0) refitTrack = true; + ATH_MSG_DEBUG ("** IDAlignMonResiduals::trackRequiresRefit ** does track requires a refit to access the residuals? " << refitTrack + << " (hits on track: " << nHits + << " hits without params: " << nHitsNoParams << " ) "); + return refitTrack; } @@ -3376,7 +3367,7 @@ void IDAlignMonResiduals::MakePIXBarrelHistograms(MonGroup& al_mon) maxPhiModulesPerLayer, -0.5, maxPhiModulesPerLayer-0.5, 50*m_FinerBinningFactor, m_minPIXResXFillRange, m_maxPIXResXFillRange)); //I need a good idea for the x axis RegisterHisto(al_mon,m_pix_b_xresvsmodetaphi_3ds[iLayer]); - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " -- SALVA -- build pix 3d histos -- m_minPIXResXFillRange: " << m_minPIXResXFillRange << " m_maxPIXResXFillRange: " << m_maxPIXResXFillRange << endmsg; + m_pix_b_yresvsmodetaphi_3ds.push_back( new TH3F(("pix_b"+intToString(iLayer)+"_yresvsmodetaphi_3d").c_str(),("Y Residual Distbn vs Module Eta-Phi-ID Pixel Barrel "+intToString(iLayer)).c_str(), EtaModules, EtaModulesMin, EtaModulesMax, maxPhiModulesPerLayer,-0.5, maxPhiModulesPerLayer-0.5, @@ -3655,8 +3646,7 @@ void IDAlignMonResiduals::MakePIXBarrelHistograms(MonGroup& al_mon) int phibinid = 0; for (int ibin=1; ibin <= m_pix_b_xresvsmodphi->GetNbinsX(); ibin++) { - // - SALVA - - // there is a free bin at the beginning and the end + // Please note that there is a free bin at the beginning and the end // IBL has 14 staves: starts at bin 2 if (2 <= ibin && ibin <= 15) { phibinid++; @@ -4041,26 +4031,30 @@ void IDAlignMonResiduals::MakePIXEndCapsHistograms(MonGroup& al_mon){ RegisterHisto(al_mon,m_pix_ecc_biased_residualy); //finely binned residuals - m_pix_eca_residualx_fine = new TH1F("pix_eca_residualx_fine","UnBiased X Residual Pixel Endcap A;Residual [mm]",2000,-2.0,2.0); + m_pix_eca_residualx_fine = new TH1F("pix_eca_residualx_fine","UnBiased X Residual Pixel Endcap A;Residual [mm]",1000,-1.0,1.0); RegisterHisto(al_mon,m_pix_eca_residualx_fine); - m_pix_eca_residualy_fine = new TH1F("pix_eca_residualy_fine","UnBiased Y Residual Pixel Endcap A;Residual [mm]",2000,-2.0,2.0); + m_pix_eca_residualy_fine = new TH1F("pix_eca_residualy_fine","UnBiased Y Residual Pixel Endcap A;Residual [mm]",1000,-1.0,1.0); RegisterHisto(al_mon,m_pix_eca_residualy_fine); - m_pix_ecc_residualx_fine = new TH1F("pix_ecc_residualx_fine","UnBiased X Residual Pixel Endcap C;Residual [mm]",2000,-2.0,2.0); + m_pix_ecc_residualx_fine = new TH1F("pix_ecc_residualx_fine","UnBiased X Residual Pixel Endcap C;Residual [mm]",1000,-1.0,1.0); RegisterHisto(al_mon,m_pix_ecc_residualx_fine); - m_pix_ecc_residualy_fine = new TH1F("pix_ecc_residualy_fine","UnBiased Y Residual Pixel Endcap C;Residual [mm]",2000,-2.0,2.0); + m_pix_ecc_residualy_fine = new TH1F("pix_ecc_residualy_fine","UnBiased Y Residual Pixel Endcap C;Residual [mm]",1000,-1.0,1.0); RegisterHisto(al_mon,m_pix_ecc_residualy_fine); - //unbiased pt - m_pix_eca_residualx_pt = new TH2F("pix_eca_residualx_pt","X Residual Vs Pt Pixel EndCap A;Track pT (GeV);Res (mm)",m_nBinsPtRange,-m_PtRange,m_PtRange,100*m_FinerBinningFactor,m_minSiResFillRange,m_maxSiResFillRange); + //unbiased vs pt + m_pix_eca_residualx_pt = new TH2F("pix_eca_residualx_pt","X Residual Vs P_{T}: Pixel EndCap A;Track p_{T} [GeV];Local x res [mm]",m_nBinsPtRange, -m_PtRange, m_PtRange, + 100*m_FinerBinningFactor, m_minPIXResXFillRange, m_maxPIXResXFillRange); RegisterHisto(al_mon,m_pix_eca_residualx_pt); - m_pix_eca_residualy_pt = new TH2F("pix_eca_residualy_pt","Y Residual Vs Pt Pixel EndCap A;Track pT (GeV);Res (mm)",m_nBinsPtRange,-m_PtRange,m_PtRange,100*m_FinerBinningFactor,m_minSiResFillRange,m_maxSiResFillRange); + m_pix_eca_residualy_pt = new TH2F("pix_eca_residualy_pt","Y Residual Vs p_{T}: Pixel EndCap A;Track p_{T} [GeV];Local y res [mm]",m_nBinsPtRange, -m_PtRange,m_PtRange, + 100*m_FinerBinningFactor, m_minPIXResYFillRange, m_maxPIXResYFillRange); RegisterHisto(al_mon,m_pix_eca_residualy_pt); - - m_pix_ecc_residualx_pt = new TH2F("pix_ecc_residualx_pt","X Residual Vs Pt Pixel EndCap C;Track pT (GeV);Res (mm)",m_nBinsPtRange,-m_PtRange,m_PtRange,100*m_FinerBinningFactor,m_minSiResFillRange,m_maxSiResFillRange); + m_pix_ecc_residualx_pt = new TH2F("pix_ecc_residualx_pt","X Residual Vs P_{T} Pixel EndCap C;Track p_{T} [GeV];Local x residual [mm]", m_nBinsPtRange, -m_PtRange, m_PtRange, + 100*m_FinerBinningFactor, m_minPIXResXFillRange, m_maxPIXResXFillRange); RegisterHisto(al_mon,m_pix_ecc_residualx_pt); - m_pix_ecc_residualy_pt = new TH2F("pix_ecc_residualy_pt","Y Residual Vs Pt Pixel EndCap C;Track pT (GeV);Res (mm)",m_nBinsPtRange,-m_PtRange,m_PtRange,100*m_FinerBinningFactor,m_minSiResFillRange,m_maxSiResFillRange); + m_pix_ecc_residualy_pt = new TH2F("pix_ecc_residualy_pt","Y Residual Vs p_{T} Pixel EndCap C;Track p_{T} [GeV];Local y residual [mm]", m_nBinsPtRange, -m_PtRange, m_PtRange, + 100*m_FinerBinningFactor, m_minPIXResXFillRange, m_maxPIXResXFillRange); RegisterHisto(al_mon,m_pix_ecc_residualy_pt); + //biased pt m_pix_eca_biased_residualx_pt = new TH2F("pix_eca_biased_residualx_pt","Biased X Residual Vs Pt Pixel EndCap A;Track pT (GeV); Res (mm)",m_nBinsPtRange,-m_PtRange,m_PtRange,100*m_FinerBinningFactor,m_minPIXResXFillRange,m_maxPIXResXFillRange); RegisterHisto(al_mon,m_pix_eca_biased_residualx_pt); @@ -4070,6 +4064,7 @@ void IDAlignMonResiduals::MakePIXEndCapsHistograms(MonGroup& al_mon){ RegisterHisto(al_mon,m_pix_ecc_biased_residualx_pt); m_pix_ecc_biased_residualy_pt = new TH2F("pix_ecc_biased_residualy_pt","Biased Y Residual Vs Pt Pixel EndCap A;Track pT (GeV); Res (mm)",m_nBinsPtRange,-m_PtRange,m_PtRange,100*m_FinerBinningFactor,m_minPIXResYFillRange,m_maxPIXResYFillRange); RegisterHisto(al_mon,m_pix_ecc_biased_residualy_pt); + //pull vs pt m_pix_eca_pullx_pt = new TH2F("pix_eca_pullx_pt","X Pull Vs Pt Pixel EndCap A;Track pT (GeV);X Pull",m_nBinsPtRange,-m_PtRange,m_PtRange,100,-m_RangeOfPullHistos,m_RangeOfPullHistos); RegisterHisto(al_mon,m_pix_eca_pullx_pt); @@ -4080,18 +4075,26 @@ void IDAlignMonResiduals::MakePIXEndCapsHistograms(MonGroup& al_mon){ m_pix_ecc_pully_pt = new TH2F("pix_ecc_pully_pt","Y Pull Vs Pt Pixel EndCap C;Track pT (GeV);Y Pull",m_nBinsPtRange,-m_PtRange,m_PtRange,100,-m_RangeOfPullHistos,m_RangeOfPullHistos); RegisterHisto(al_mon,m_pix_ecc_pully_pt); // Hit Errors - m_hiterror_x_ibl_b = new TH1F("m_hiterror_x_ibl_b", "Pixel Barrel X Hit Error;X Hit Error [mm];IBL Hits", 80, 0., 0.1); + m_hiterror_x_ibl_b = new TH1F("m_hiterror_x_ibl_b", "Pixel Barrel X Hit Error;X Hit Error [mm];IBL Hits", 80, 0., m_xHitErrorRange); RegisterHisto(al_mon,m_hiterror_x_ibl_b); - m_hiterror_x_pix_b = new TH1F("m_hiterror_x_pix_b", "Pixel Barrel X Hit Error;X Hit Error [mm];PIX Hits", 80, 0., 0.1); + m_hiterror_x_pix_b = new TH1F("m_hiterror_x_pix_b", "Pixel Barrel X Hit Error;X Hit Error [mm];PIX Hits", 80, 0., m_xHitErrorRange); RegisterHisto(al_mon,m_hiterror_x_pix_b); - m_hiterror_x_pix_ec = new TH1F("m_hiterror_x_pix_ec", "Pixel Endcap X Hit Error;X Hit Error [mm];PIX Hits", 80, 0., 0.1); + m_hiterror_x_pix_ec = new TH1F("m_hiterror_x_pix_ec", "Pixel Endcaps X Hit Error;X Hit Error [mm];PIX Hits", 80, 0., m_xHitErrorRange); RegisterHisto(al_mon,m_hiterror_x_pix_ec); - m_hiterror_y_ibl_b = new TH1F("m_hiterror_y_ibl_b", "Pixel Barrel Y Hit Error;Y Hit Error [mm];IBL Hits", 80, 0., 0.2); + m_hiterror_x_pix_eca = new TH1F("m_hiterror_x_pix_eca", "Pixel Endcap A X Hit Error;X Hit Error [mm];PIX Hits", 80, 0., m_xHitErrorRange); + RegisterHisto(al_mon,m_hiterror_x_pix_eca); + m_hiterror_x_pix_ecc = new TH1F("m_hiterror_x_pix_ecc", "Pixel Endcap C X Hit Error;X Hit Error [mm];PIX Hits", 80, 0., m_xHitErrorRange); + RegisterHisto(al_mon,m_hiterror_x_pix_ecc); + m_hiterror_y_ibl_b = new TH1F("m_hiterror_y_ibl_b", "Pixel Barrel Y Hit Error;Y Hit Error [mm];IBL Hits", 80, 0., m_yHitErrorRange); RegisterHisto(al_mon,m_hiterror_y_ibl_b); - m_hiterror_y_pix_b = new TH1F("m_hiterror_y_pix_b", "Pixel Barrel Y Hit Error;Y Hit Error [mm];PIX Hits", 80, 0., 0.2); + m_hiterror_y_pix_b = new TH1F("m_hiterror_y_pix_b", "Pixel Barrel Y Hit Error;Y Hit Error [mm];PIX Hits", 80, 0., m_yHitErrorRange); RegisterHisto(al_mon,m_hiterror_y_pix_b); - m_hiterror_y_pix_ec = new TH1F("m_hiterror_y_pix_ec", "Pixel Endcap Y Hit Error;Y Hit Error [mm];PIX Hits", 80, 0., 0.2); + m_hiterror_y_pix_ec = new TH1F("m_hiterror_y_pix_ec", "Pixel Endcaps Y Hit Error;Y Hit Error [mm];PIX Hits", 80, 0., m_yHitErrorRange); RegisterHisto(al_mon,m_hiterror_y_pix_ec); + m_hiterror_y_pix_eca = new TH1F("m_hiterror_y_pix_eca", "Pixel Endcaps Y Hit Error;Y Hit Error [mm];PIX Hits", 80, 0., m_yHitErrorRange); + RegisterHisto(al_mon,m_hiterror_y_pix_eca); + m_hiterror_y_pix_ecc = new TH1F("m_hiterror_y_pix_ecc", "Pixel Endcaps Y Hit Error;Y Hit Error [mm];PIX Hits", 80, 0., m_yHitErrorRange); + RegisterHisto(al_mon,m_hiterror_y_pix_ecc); // hit errors in broad range m_hiterror_x_ibl_b_WideRange = new TH1F("m_hiterror_x_ibl_b_WideRange", "Pixel Barrel X Hit Error;X Hit Error [mm];IBL Hits", 100, 0., 1.0); RegisterHisto(al_mon,m_hiterror_x_ibl_b_WideRange); @@ -4308,10 +4311,10 @@ void IDAlignMonResiduals::MakeSCTBarrelHistograms(MonGroup& al_mon){ RegisterHisto(al_mon,m_sct_b_pullx_pt); // Hit errors - m_hiterror_sct_b = new TH1F("m_hiterror_sct_b", "SCT Barrel Hit Error;Hit Error[mm];SCT Hits", 80, 0., 0.25); + m_hiterror_sct_b = new TH1F("m_hiterror_sct_b", "SCT Barrel Hit Error;Hit Error[mm];SCT Hits", 80, 0., m_xHitErrorRange); RegisterHisto(al_mon,m_hiterror_sct_b); // Hit errors wide range - m_hiterror_sct_b_WideRange = new TH1F("m_hiterror_sct_b_WideRange", "SCT Barrel Hit Error;Hit Error[mm];SCT Hits", 80, 0., 2.5); + m_hiterror_sct_b_WideRange = new TH1F("m_hiterror_sct_b_WideRange", "SCT Barrel Hit Error;Hit Error[mm];SCT Hits", 80, 0., 2.0); RegisterHisto(al_mon,m_hiterror_sct_b_WideRange); } @@ -4801,10 +4804,19 @@ void IDAlignMonResiduals::MakeTRTEndcapHistograms(MonGroup& al_mon){ m_trt_ec_hist->pullR_notube_pt[endcap] = MakeHist("trt_ec_pullRnotube_pt_"+endcapName[endcap],"UnBiased Pull vs pT for the TRT Barrel (no tube hits)"+endcapName[endcap],m_nBinsPtRange,-m_PtRange,m_PtRange,100,-m_RangeOfPullHistos,m_RangeOfPullHistos, "Track p_{T} [GeV]","Pull"); RegisterHisto(al_mon,m_trt_ec_hist->pullR_notube_pt[endcap]); + /** Residuals vs pt per wheel */ + for (int iWheel=0; iWheel < 40; iWheel++) { + m_trt_ec_hist->residualR_ptwheel[endcap][iWheel] = MakeProfile("trt_"+endcapName[endcap]+"_resvspt_wheel_"+intToString(iWheel), + "Residual vs p_{T} for TRT "+endcapName[endcap]+" "+intToString(iWheel), + m_nBinsPtRange, -m_PtRange, m_PtRange, + -1.0, 1.0, "Track p_{T} [GeV]","Residual [mm]"); + RegisterHisto(al_mon,m_trt_ec_hist->residualR_ptwheel[endcap][iWheel]); + } + /** Residuals and pulls vs mu*/ m_trt_ec_hist->residualR_mu[endcap] = MakeHist("trt_ec_residualR_mu_"+endcapName[endcap],"UnBiased Residual vs mu for the TRT Barrel "+endcapName[endcap],m_nBinsPtRange,-m_PtRange,m_PtRange,200,-1.0,1.0, "#mu ","Residual [mm]"); RegisterHisto(al_mon,m_trt_ec_hist->residualR_mu[endcap]); - + m_trt_ec_hist->pullR_mu[endcap] = MakeHist("trt_ec_pullR_mu_"+endcapName[endcap],"UnBiased Pull vs mu for the TRT Barrel "+endcapName[endcap],m_nBinsPtRange,-m_PtRange,m_PtRange,100,-m_RangeOfPullHistos,m_RangeOfPullHistos, "#mu","Pull"); RegisterHisto(al_mon,m_trt_ec_hist->pullR_mu[endcap]); } @@ -5079,17 +5091,16 @@ void IDAlignMonResiduals::fillTRTEndcapHistograms(int barrel_ec, int layer_or_wh m_trt_ec_hist->MeasuredR[endcap] -> Fill(hitR , hweight); m_trt_ec_hist->residualR[endcap][0]-> Fill(residualR, hweight); m_trt_ec_hist->pullR[endcap][0] -> Fill(pullR , hweight); - if (!isTubeHit) - { - m_trt_ec_hist->pullR_notube[endcap][0]-> Fill(pullR , hweight); - m_trt_ec_hist->residualR_notube[endcap][0] -> Fill(residualR,hweight); - } + if (!isTubeHit) { + m_trt_ec_hist->pullR_notube[endcap][0]-> Fill(pullR , hweight); + m_trt_ec_hist->residualR_notube[endcap][0] -> Fill(residualR,hweight); + } m_trt_ec_hist->aveResVsTrackEta[endcap] -> Fill(trketa,residualR, hweight); if(m_extendedPlots){ - if (LE != -999) - m_trt_ec_hist->rt[endcap] -> Fill(LE - EP - t0,fabs(perdictR), hweight); + if (LE != -999) m_trt_ec_hist->rt[endcap] -> Fill(LE - EP - t0,fabs(perdictR), hweight); m_trt_ec_hist->residualR_pt[endcap]-> Fill(trkpt, residualR, hweight); + m_trt_ec_hist->residualR_ptwheel[endcap][layer_or_wheel]-> Fill(trkpt, residualR, hweight); m_trt_ec_hist->pullR_pt[endcap] -> Fill(trkpt, pullR , hweight); if (!isTubeHit) m_trt_ec_hist->pullR_notube_pt[endcap] -> Fill(trkpt,pullR, hweight); diff --git a/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.h b/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.h index 009546d8605c00959de59497b7bf681997093966..954d79ff91da8ac79c6b4c0224a16cb906c2c2a0 100755 --- a/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.h +++ b/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.h @@ -140,12 +140,12 @@ class IDAlignMonResiduals : public ManagedMonitorToolBase void SetMinWindow(TH1* h1, float min, float max); std::string m_stream{}; - SG::ReadHandleKey<TrackCollection> m_tracksName{this, "tracksName", "ExtendedTracks"}; + SG::ReadHandleKey<TrackCollection> m_tracksName{this, "tracksName", "CombinedInDetTracks"}; std::string m_triggerChainName{}; std::string m_Pixel_Manager{}; std::string m_SCT_Manager{}; std::string m_TRT_Manager{}; - + //Layer/Disk/Ring Gap for modified module histograms int m_gap_pix{}; int m_gap_sct{}; @@ -169,6 +169,8 @@ class IDAlignMonResiduals : public ManagedMonitorToolBase float m_minPIXResYFillRange{}; float m_RangeOfPullHistos{}; float m_PtRange{}; + float m_xHitErrorRange{}; + float m_yHitErrorRange{}; float m_ClusterSizeRange{}; float m_PixelBarrelXSize{}; float m_PixelBarrelYSize{}; @@ -179,7 +181,7 @@ class IDAlignMonResiduals : public ManagedMonitorToolBase int m_nBinsPtRange{}; int m_histosBooked{}; int m_checkrate{}; - int m_events{}; + unsigned int m_events{}; int m_mapSplit{}; int m_NPixLayers{}; bool m_doPulls{}; @@ -828,8 +830,12 @@ class IDAlignMonResiduals : public ManagedMonitorToolBase TH1F* m_hiterror_x_pix_b{}; TH1F* m_hiterror_x_pix_ec{}; + TH1F* m_hiterror_x_pix_eca{}; + TH1F* m_hiterror_x_pix_ecc{}; TH1F* m_hiterror_y_pix_b{}; TH1F* m_hiterror_y_pix_ec{}; + TH1F* m_hiterror_y_pix_eca{}; + TH1F* m_hiterror_y_pix_ecc{}; TH1F* m_hiterror_x_pix_b_WideRange{}; TH1F* m_hiterror_x_pix_ec_WideRange{}; diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py index 0a9c0ae2892e8fb87c22f208a90c11e1101ddd76..eb82fe897f1b9fe36d120185bc395c1acb70c0ac 100644 --- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py +++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py @@ -16,10 +16,6 @@ def TRTMonitoringRun3ESD_AlgConfig(inputFlags): from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator result = ComponentAccumulator() - from TrkConfig.TrackCollectionReadConfig import TrackCollectionReadCfg - result.merge (TrackCollectionReadCfg (inputFlags, 'CombinedInDetTracks')) - result.merge (TrackCollectionReadCfg (inputFlags, 'Tracks')) - from AthenaMonitoring import AthMonitorCfgHelper helper = AthMonitorCfgHelper(inputFlags, 'TRTMonitoringCfg') @@ -221,6 +217,11 @@ if __name__ == '__main__': geoCfg = AtlasGeometryCfg(ConfigFlags) cfg.merge(geoCfg) + # Force special handling of converters + from TrkConfig.TrackCollectionReadConfig import TrackCollectionReadCfg + cfg.merge (TrackCollectionReadCfg (ConfigFlags, 'CombinedInDetTracks')) + cfg.merge (TrackCollectionReadCfg (ConfigFlags, 'Tracks')) + TRTMonitoringRun3Acc = TRTMonitoringRun3ESD_AlgConfig(ConfigFlags) ServiceMgr.Dump = False diff --git a/InnerDetector/InDetRecAlgs/SiSPSeededTrackFinder/SiSPSeededTrackFinder/SiSPSeededTrackFinder.h b/InnerDetector/InDetRecAlgs/SiSPSeededTrackFinder/SiSPSeededTrackFinder/SiSPSeededTrackFinder.h index 1524a165a3df3db58d477328ac37813ef7e3fe01..a19cc99c6850e152f483047665507dde2021d94a 100644 --- a/InnerDetector/InDetRecAlgs/SiSPSeededTrackFinder/SiSPSeededTrackFinder/SiSPSeededTrackFinder.h +++ b/InnerDetector/InDetRecAlgs/SiSPSeededTrackFinder/SiSPSeededTrackFinder/SiSPSeededTrackFinder.h @@ -120,6 +120,8 @@ namespace InDet { SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey{this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"}; + SG::ReadDecorHandleKey<xAOD::EventInfo> m_mbtsKey{this, "MBTSKey", "EventInfo.MBTSBackground"}; + SG::WriteHandleKey<TrackCollection> m_outputTracksKey{this, "TracksLocation", "SiSPSeededTracks"}; //@} diff --git a/InnerDetector/InDetRecAlgs/SiSPSeededTrackFinder/src/SiSPSeededTrackFinder.cxx b/InnerDetector/InDetRecAlgs/SiSPSeededTrackFinder/src/SiSPSeededTrackFinder.cxx index d74fa67cbe42f49edefe32cb2f61d6fac751befb..c608055d1ec69bbe598261664aeb7cebda896c88 100644 --- a/InnerDetector/InDetRecAlgs/SiSPSeededTrackFinder/src/SiSPSeededTrackFinder.cxx +++ b/InnerDetector/InDetRecAlgs/SiSPSeededTrackFinder/src/SiSPSeededTrackFinder.cxx @@ -28,6 +28,7 @@ InDet::SiSPSeededTrackFinder::SiSPSeededTrackFinder StatusCode InDet::SiSPSeededTrackFinder::initialize() { ATH_CHECK(m_evtKey.initialize()); + ATH_CHECK(m_mbtsKey.initialize(m_useMBTS)); if (not m_SpacePointsPixelKey.empty()) { ATH_CHECK(m_SpacePointsPixelKey.initialize()); } diff --git a/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/CMakeLists.txt index 0d8f2528c5206099a35fce1cbdb1b1b6328996a1..221d2fad0d98890625da946922a47c9a1769907e 100644 --- a/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/CMakeLists.txt @@ -1,38 +1,8 @@ -################################################################################ -# Package: InDetAmbiTrackSelectionTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetAmbiTrackSelectionTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( - PUBLIC - Control/AthenaBaseComps - Control/AthenaKernel - GaudiKernel - Tracking/TrkEvent/TrkRIO_OnTrack - Tracking/TrkEvent/TrkTrack - Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkValidation/TrkValInterfaces - PRIVATE - Control/AthContainers - Control/CxxUtils - Control/StoreGate - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetDetDescr/PixelGeoModel - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkDetDescr/TrkDetElementBase - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkCaloClusterROI - Tracking/TrkEvent/TrkMeasurementBase - Tracking/TrkEvent/TrkPrepRawData - Tracking/TrkEvent/TrkPseudoMeasurementOnTrack - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkEvent/TrkParameters - Tracking/TrkFitter/TrkFitterInterfaces) - # External dependencies: find_package( ROOT COMPONENTS Core MathCore ) @@ -41,7 +11,7 @@ atlas_add_component( InDetAmbiTrackSelectionTool InDetAmbiTrackSelectionTool/*.h src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel TrkRIO_OnTrack - TrkTrack TrkToolInterfaces TrkValInterfaces AthContainers CxxUtils StoreGateLib - InDetIdentifier InDetPrepRawData InDetRecToolInterfaces TrkDetElementBase + TrkTrack TrkToolInterfaces AthContainers CxxUtils StoreGateLib + InDetIdentifier InDetPrepRawData InDetRecToolInterfaces TrkDetElementBase TrkEventUtils TrkSurfaces TrkCaloClusterROI TrkMeasurementBase TrkPrepRawData TrkPseudoMeasurementOnTrack TrkTrackSummary TrkParameters PixelGeoModelLib TrkFitterInterfaces) diff --git a/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool/InDetDenseEnvAmbiTrackSelectionTool.h b/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool/InDetDenseEnvAmbiTrackSelectionTool.h old mode 100755 new mode 100644 index 652827d17ed1080b7651bdcd28f0142bbcb21a79..327630f1a668d40869b0285f17676cf1b6a07cc8 --- a/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool/InDetDenseEnvAmbiTrackSelectionTool.h +++ b/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool/InDetDenseEnvAmbiTrackSelectionTool.h @@ -66,9 +66,16 @@ namespace InDet /** standard Athena-Algorithm method */ virtual StatusCode initialize() override; - /** standard Athena-Algorithm method */ - virtual StatusCode finalize() override; + /** + * Decide what to do with a candidate track + * - count and characterize hits on track + * - not those which are used too often (decideWhichHitsToKeep) + * - accept the track as is, remove hits and make a subtrack, or + * reject track + * - track candidate are also checked against accepted tracks to + * ensure accepted tracks are not pushed over threshold + * */ virtual std::tuple<Trk::Track*,bool> getCleanedOutTrack(const Trk::Track *track, const Trk::TrackScore score, Trk::ClusterSplitProbabilityContainer &splitProbContainer, @@ -84,112 +91,143 @@ namespace InDet SplitSharedHit = 2, // A measurement shared with another track SharedHit = 3, + // A hit that needs to be removed from the track + // because it is used on too many tracks already + RejectedHitOverUse = 4, + // A hit that needs to be removed from the track + // because sharing it would invalidate an accepted track + RejectedHitInvalid = 5, // A hit that needs to be removed from the track - RejectedHit = 4, + // reason other than the above two + RejectedHit = 6, // an outlier, to be copied in case - Outlier = 5, + Outlier = 7, // other TSOS types to be copied in case - OtherTsos = 6 + OtherTsos = 8 }; struct TrackHitDetails { - bool isPatternTrack ; - bool inROI ; - bool thishasblayer ; //Track has a hit in the b-layer - bool hassharedblayer ; //Track has a shared it in the b-layer - bool hassharedpixel ; //Track has a shared pixel hit - bool firstisshared ; //The first hit on track is shared + bool m_isPatternTrack ; + bool m_thisHasIBLHit ; //Track has a hit in the IBL + bool m_hasSharedIBLHit ; //Track has a shared hit in the IBL + bool m_hasSharedPixel ; //Track has a shared pixel hit (does not include IBL) + bool m_firstPixIsShared ; //The first pixel hit on track is shared (includes IBL) + bool m_passHadronicROI ; //Track is within hadronic ROI + bool m_passConversionSel ; //Track is compatible with a conversion + bool m_trkCouldBeAccepted ; //No rejected hits on track - int numPixelDeadSensor ;// I don't think i need to explain these - int numSCTDeadSensor ; - int numPixelHits ; - int numPixelHoles ; - int numSCTHoles ; - int numSCTHits ; + int m_numPixelDeadSensor ; //Taken from track summary. Stored value not changed in this tool + int m_numSCTDeadSensor ; //Taken from track summary. Stored value not changed in this tool + int m_numPixelHits ; //Taken from track summary. Stored value not changed in this tool + int m_numPixelHoles ; //Taken from track summary. Stored value not changed in this tool + int m_numSCTHoles ; //Taken from track summary. Stored value not changed in this tool + int m_numSCTHits ; //Taken from track summary. Stored value not changed in this tool - int numUnused ; //Number of unique hits - int numTRT_Unused ; //Number of unique TRT hits - int numSCT_Unused ; //Number of unique SCT hits - int numPseudo ; //Number of pseudo measurements on track - - float averageSplit1 ; //Average split prob1 - float averageSplit2 ; //Averege split prob2 + // values counted in this tool + int m_numUnused ; //Number of unique hits + int m_numTRT_Unused ; //Number of unique TRT hits (NOT included within m_numUnused) + int m_numSCT_Unused ; //Number of unique SCT hits ( included within m_numUnused) + int m_numPseudo ; //Number of pseudo measurements on track - int numSplitSharedPix ; //Number of Pixel clusters comptaible with being split that are also shared - int numSplitSharedSCT ; //Number of SCT clusters comptaible with being split that are also shared - int numSharedOrSplit ; //Number of split + shared clusters - int numSharedOrSplitPixels; //Number of pixel clusters that are either split or shared - int numShared ; //Number of shared hits on track - int numWeightedShared ; //Weighted number of shared hits on trak (pixels count for 2) - + int m_numSplitSharedPix ; //Number of Pixel clusters comptaible with being split that are also shared + int m_numSplitSharedSCT ; //Number of SCT clusters comptaible with being split that are also shared + int m_numShared ; //Number of shared hits on track (does not include SplitShared) + int m_numSCT_Shared ; //Number of shared sct hits on track (included within m_numShared) + int m_numWeightedShared ; //Weighted number of shared hits on track used to test shared module cuts (pixels count for 2) + TrackHitDetails() { - isPatternTrack = true; - inROI = false; - thishasblayer = false; - hassharedblayer = false; - hassharedpixel = false; - firstisshared = true; + m_isPatternTrack = true; + m_thisHasIBLHit = false; + m_hasSharedIBLHit = false; + m_hasSharedPixel = false; + m_firstPixIsShared = false; + m_passHadronicROI = false; + m_passConversionSel = false; + m_trkCouldBeAccepted = true; - numPixelDeadSensor = -1; - numSCTDeadSensor = -1; - numPixelHits = 0; - numPixelHoles = 0; - numSCTHoles = 0; - numSCTHits = 0; + m_numPixelDeadSensor = -1; + m_numSCTDeadSensor = -1; + m_numPixelHits = 0; + m_numPixelHoles = 0; + m_numSCTHoles = 0; + m_numSCTHits = 0; - numUnused = 0; - numSCT_Unused = 0; - numTRT_Unused = 0; - numPseudo = 0; - - averageSplit1 = 0; - averageSplit2 = 0; + m_numUnused = 0; + m_numSCT_Unused = 0; + m_numTRT_Unused = 0; + m_numPseudo = 0; - numSplitSharedPix = 0; - numSplitSharedSCT = 0; - numSharedOrSplit = 0; - numSharedOrSplitPixels = 0; - numShared = 0; - numWeightedShared = 0; + m_numSplitSharedPix = 0; + m_numSplitSharedSCT = 0; + m_numShared = 0; + m_numSCT_Shared = 0; + m_numWeightedShared = 0; } - - int totalSiHits() + + // All SiHits including shared + int totalSiHits() const + { + return (m_numUnused + m_numPixelDeadSensor + m_numSCTDeadSensor + m_numSplitSharedPix + m_numSplitSharedSCT + m_numShared); + }; + + // SplitShared are not counted as shared (no penality) + // since are compatible with originating from multiple particles + int totalUniqueSiHits() const + { + return (totalSiHits() - m_numShared); + }; + + // No counters, for pixel hits. Solve for them to avoid too many counters + int totalUniquePixelHits() const { - return numUnused + numPixelDeadSensor + numSCTDeadSensor + numSplitSharedPix + numSplitSharedSCT + (inROI ? numShared/2 : 0) ; + // m_numTRT_Unused not included in m_numUnused + return (m_numUnused - m_numSCT_Unused); + }; + + // No counters, for pixel hits. Solve for them to avoid too many counters + int totalSharedPixelHits() const + { + return (m_numShared - m_numSCT_Shared); + }; + + int totalPixelHits() const + { + return (totalUniquePixelHits() + totalSharedPixelHits() + m_numSplitSharedPix + m_numPixelDeadSensor); }; - void dumpInfo() + void dumpInfo() const { - std::cout << "isPatternTrack: " << isPatternTrack << std::endl; - std::cout << "thishasblayer : " << thishasblayer << std::endl; - std::cout << "hassharedblayer:" << hassharedblayer << std::endl; - std::cout << "hassharedpixel: " << hassharedpixel << std::endl; - std::cout << "firstisshared: " << firstisshared << std::endl; + std::cout << "isPatternTrack : " << m_isPatternTrack << std::endl; + std::cout << "thisHasIBLHit : " << m_thisHasIBLHit << std::endl; + std::cout << "hasSharedIBLHit : " << m_hasSharedIBLHit << std::endl; + std::cout << "hasSharedPixel : " << m_hasSharedPixel << std::endl; + std::cout << "firstPixIsShared : " << m_firstPixIsShared << std::endl; + std::cout << "passHadronicROI : " << m_passHadronicROI << std::endl; + std::cout << "passConversionSel : " << m_passConversionSel << std::endl; + std::cout << "trkCouldBeAccepted: " << m_trkCouldBeAccepted<< std::endl; - std::cout << "Dead Pixels: " << numPixelDeadSensor<< std::endl; - std::cout << "Dead SCT: " << numSCTDeadSensor << std::endl; - std::cout << "Pixel hit " << numPixelHits << std::endl; - std::cout << "Pixel holes " << numPixelHoles << std::endl; - std::cout << "SCT hits " << numSCTHits << std::endl; - std::cout << "SCT holes " << numSCTHoles << std::endl; + std::cout << "Dead Pixels: " << m_numPixelDeadSensor<< std::endl; + std::cout << "Dead SCT: " << m_numSCTDeadSensor << std::endl; + std::cout << "Pixel hit " << m_numPixelHits << std::endl; + std::cout << "Pixel holes " << m_numPixelHoles << std::endl; + std::cout << "SCT hits " << m_numSCTHits << std::endl; + std::cout << "SCT holes " << m_numSCTHoles << std::endl; - std::cout << "Unique hits " << numUnused << std::endl; - std::cout << "Unique SCT " << numSCT_Unused << std::endl; - std::cout << "Unique TRT " << numTRT_Unused << std::endl; - std::cout << "Pseudo " << numPseudo << std::endl; + std::cout << "Unique hits " << m_numUnused << std::endl; + std::cout << "Unique SCT " << m_numSCT_Unused << std::endl; + std::cout << "Unique TRT " << m_numTRT_Unused << std::endl; + std::cout << "Unique Pix " << totalUniquePixelHits() << std::endl; + std::cout << "Pseudo " << m_numPseudo << std::endl; - std::cout << "Average Split1 " << averageSplit1 << std::endl; - std::cout << "Average Split2 " << averageSplit2 << std::endl; - - std::cout << "SplitSharedPix " << numSplitSharedPix << std::endl; - std::cout << "SplitSharedSCT " << numSplitSharedSCT << std::endl; - std::cout << "Shared/split " << numSharedOrSplit << std::endl; - std::cout << "Shared/split px " << numSharedOrSplitPixels << std::endl; - std::cout << "Shared " << numShared << std::endl; - std::cout << "Weighted shared " << numWeightedShared << std::endl; + std::cout << "SplitSharedPix " << m_numSplitSharedPix << std::endl; + std::cout << "SplitSharedSCT " << m_numSplitSharedSCT << std::endl; + std::cout << "Shared " << m_numShared << std::endl; + std::cout << "Shared SCT " << m_numSCT_Shared << std::endl; + std::cout << "Shared Pix " << totalSharedPixelHits() << std::endl; + std::cout << "Weighted shared " << m_numWeightedShared << std::endl; }; }; @@ -208,15 +246,15 @@ namespace InDet struct TSoS_Details { - unsigned int nTSoS; - std::vector<int> type; // The type of TSOS - std::vector<int> detType; // The Detector type 1== Pixel, 11 = b-layer, 2 SCT, 3 TRT - std::vector<int> hitIsShared; // Number of tracks the hit is shared with - std::vector<float> splitProb1; // The Probablilty that the cluster on that surface is from 2 tracks - std::vector<float> splitProb2; // The Probablilty that the cluster on that surface is from 3 or more tracks - std::vector<const Trk::RIO_OnTrack*> RIO; // The cluster on track - std::multimap<const Trk::Track*, int, lessTrkTrack > overlappingTracks; // The tracks that overlap with the current track - std::multimap< int, const Trk::Track*> tracksSharingHit; // The tracks that overlap with the current track + unsigned int m_nTSoS; + std::vector<int> m_type; // The type of TSOS + std::vector<int> m_detType; // The Detector type 1== Pixel, 11 = b-layer, 2 SCT, 3 TRT + std::vector<int> m_hitIsShared; // Number of tracks the hit is shared with + std::vector<float> m_splitProb1; // The Probablilty that the cluster on that surface is from 2 tracks + std::vector<float> m_splitProb2; // The Probablilty that the cluster on that surface is from 3 or more tracks + std::vector<const Trk::RIO_OnTrack*> m_RIO; // The cluster on track + std::multimap<const Trk::Track*, int, lessTrkTrack > m_overlappingTracks; // The tracks that overlap with the current track + std::multimap< int, const Trk::Track*> m_tracksSharingHit; // The tracks that overlap with the current track TSoS_Details() { @@ -225,20 +263,20 @@ namespace InDet TSoS_Details(unsigned int temp_nTSoS) { - nTSoS = temp_nTSoS; - type.resize(nTSoS,OtherTsos); - detType.resize(nTSoS,-1.); - hitIsShared.resize(nTSoS, 0 ); - splitProb1.resize(nTSoS,-1.) ; - splitProb2.resize(nTSoS,-1.) ; - RIO.resize(nTSoS,0); + m_nTSoS = temp_nTSoS; + m_type.resize(m_nTSoS,OtherTsos); + m_detType.resize(m_nTSoS,-1.); + m_hitIsShared.resize(m_nTSoS, 0 ); + m_splitProb1.resize(m_nTSoS,-1.) ; + m_splitProb2.resize(m_nTSoS,-1.) ; + m_RIO.resize(m_nTSoS,0); }; int findIndexOfPreviousMeasurement( int currentIndex ) const { int indexPreviousMeasurement = currentIndex-1; while(indexPreviousMeasurement >= 0){ - if ( type[indexPreviousMeasurement] != OtherTsos ){ + if ( m_type[indexPreviousMeasurement] != OtherTsos ){ break; } else { --indexPreviousMeasurement; @@ -252,9 +290,17 @@ namespace InDet struct CacheEntry { EventContext::ContextEvt_t m_evt{EventContext::INVALID_CONTEXT_EVT}; - int m_maxShared; // Max shared hits -- calulated from m_maxSharedModules - int m_minNotShared; // Min number of hits that are not shared -- can change if we are in ROI - int m_minSiHits; // Min number of hits before we allow split sharing of hits -- can change if we are in ROI + // Max shared modules -- calulated from m_maxSharedModules + // 1 pixel hit is 1 module + // a double sided SCT hit (2 SCT hits) is 1 module + // so count by 2s for shared pixel hits and 1 per SCT (single sided hit) hit + int m_maxSharedModules; + // Min number of unique hits that are not already used on any other track + // but split hits can be used on multiple tracks and be considered unique + // - can change in ROI + int m_minNotShared; + // Min number of hits before we allow split sharing of hits -- can change if we are in ROI + int m_minSiHits; std::vector<double> m_hadF; std::vector<double> m_hadE; @@ -278,20 +324,38 @@ namespace InDet TrackHitDetails& trackHitDetails, TSoS_Details& tsosDetails ) const; - /** Determine which hits to keep on this track*/ - bool decideWhichHitsToKeep(const Trk::Track*, + /** Determine which hits to keep on this track + * Look at the hits on track and decided if they should be kept on the track or rejected. + * The decision focuses on the track in question and how often clusters are used + * Within getCleanedOutTrack (from which this is called), accepted tracks are checked + * to see if they are pushed over limits + * */ + void decideWhichHitsToKeep(const Trk::Track*, const Trk::TrackScore score, Trk::ClusterSplitProbabilityContainer &splitProbContainer, Trk::PRDtoTrackMap &prd_to_track_map, TrackHitDetails& trackHitDetails, TSoS_Details& tsosDetails, - int nCutTRT, CacheEntry* ent) const; + /** Specific logic for identifing conversions with the goal + * of passing those tracks through to the final collection + * will as little loss as possible + * */ + bool performConversionCheck(const Trk::Track* ptrTrack, + Trk::PRDtoTrackMap &prd_to_track_map, + TrackHitDetails& trackHitDetails, + TSoS_Details& tsosDetails, + CacheEntry* ent) const; + + /** Update the pixel clusters split information*/ void setPixelClusterSplitInformation(TSoS_Details& tsosDetails, Trk::ClusterSplitProbabilityContainer &clusterSplitProbMap) const; + /** Does track pass criteria for hadronic ROI? */ + bool inHadronicROI(const Trk::Track* ptrTrack, CacheEntry* ent) const; + /** Check if the cluster is compatible with a hadronic cluster*/ bool isHadCaloCompatible(const Trk::TrackParameters& Tp, CacheEntry* ent) const; @@ -301,19 +365,17 @@ namespace InDet /** Fill hadronic & EM cluster map*/ void newEvent(CacheEntry* ent) const; - /** Returns the number of track that use that hit already - Need to let it know if that cluster is splittable - maxiShared = max number of shared hits on a shared track - which has maxothernpixel pixe hits and blayer hit if maxotherhasblayer is true + /** Returns true if accepted tracks remain about thresholds, false otherwise + maxiShared = max number of shared modules on an accepted shared track + which has maxOtherNPixel pixel hits and blayer hit if maxOtherHasIBL is true */ - int checkOtherTracksValidity(const Trk::RIO_OnTrack*, - bool isSplitable, + bool checkOtherTracksValidity(TSoS_Details& tsosDetails, + int index, Trk::ClusterSplitProbabilityContainer &splitProbContainer, Trk::PRDtoTrackMap &prd_to_track_map, int& maxiShared, - int& maxothernpixel, - bool& maxotherhasblayer, - bool& failMinHits, + int& maxOtherNPixel, + bool& maxOtherHasIBL, CacheEntry* ent) const; @@ -322,12 +384,25 @@ namespace InDet getOverlapTrackParameters(int n, const Trk::Track* track1, const Trk::Track* track2, const Trk::PRDtoTrackMap &prd_to_track_map, - int numSplitSharedPix ) const; + int splitSharedPix ) const; /** Check if two sets of track paremeters are compatible with being from a the same low mass particle decay. It is assumed that the track parmeters are on the same surface.*/ bool isNearbyTrackCandidate(const Trk::TrackParameters* paraA, const Trk::TrackParameters* paraB) const; + /** Simple helper functions to tell is cluster is split*/ + bool clusCanBeSplit(float splitProb1, float splitProb2) const; + bool isTwoPartClus(float splitProb1, float splitProb2) const; + bool isMultiPartClus(float splitProb2) const; + + void rejectHitOverUse(TrackHitDetails& trackHitDetails, TSoS_Details& tsosDetails, int index) const; + void rejectHit (TrackHitDetails& trackHitDetails, TSoS_Details& tsosDetails, int index) const; + void rejectSharedHit (TrackHitDetails& trackHitDetails, TSoS_Details& tsosDetails, int index) const; + void rejectSharedHitInvalid (TrackHitDetails& trackHitDetails, TSoS_Details& tsosDetails, int index) const; + void sharedToSplitPix(TrackHitDetails& trackHitDetails, TSoS_Details& tsosDetails, int index) const; + void addSharedHit (TrackHitDetails& trackHitDetails, TSoS_Details& tsosDetails, int index) const; + void increaseSharedHitCounters(TrackHitDetails& trackHitDetails, bool isPix, bool isSCT) const; + void decreaseSharedHitCounters(TrackHitDetails& trackHitDetails, bool isPix, bool isSCT) const; /** TRT minimum number of drift circles tool- returns allowed minimum number of TRT drift circles */ PublicToolHandle<ITrtDriftCircleCutTool> m_selectortool{this, "DriftCircleCutTool", "InDet::InDetTrtDriftCircleCutTool"}; @@ -343,10 +418,10 @@ namespace InDet IntegerProperty m_minHits{this, "minHits", 5, "Min Number of hits on track"}; IntegerProperty m_minTRT_Hits{this, "minTRTHits", 0, "Min Number of TRT hits on track"}; IntegerProperty m_maxSharedModules{this, "maxShared", 1, "Max number of shared modules"}; - IntegerProperty m_maxSharedModulesInROI{this, "maxSharedModulesInROI", 2, "Max number of shared modules in ROI. Test value for recovering B jet efficiency at high pt"}; - IntegerProperty m_maxTracksPerPRD{this, "maxTracksPerSharedPRD", 2, "Max number of tracks per hit if it is nor split"}; - IntegerProperty m_minNotSharedModules{this, "minNotShared", 6, "Min number of non shared modules"}; - IntegerProperty m_minNotSharedModulesInROI{this, "minNotSharedInROI", 4, "Min number of non shared modules in ROI. Test value for recovering B jet efficiency at high pt"}; + IntegerProperty m_maxSharedModulesInROI{this, "maxSharedModulesInROI", 2, "Max number of shared modules in a hadronic ROI. Test value for recovering B jet efficiency at high pt"}; + IntegerProperty m_maxTracksPerPRD{this, "maxTracksPerSharedPRD", 2, "Max number of tracks per hit. When NN is used, other flags set the limits."}; + IntegerProperty m_minNotSharedHits{this, "minNotShared", 6, "Min number of non shared hits"}; + IntegerProperty m_minNotSharedHitsInROI{this, "minNotSharedInROI", 4, "Min number of non shared hits in ROI. Test value for recovering B jet efficiency at high pt"}; FloatProperty m_minScoreShareTracks{this, "minScoreShareTracks", 0.0, "Min track score to alow it to share hits"}; BooleanProperty m_cosmics{this, "Cosmics", false, "Trying to reco cosmics?"}; BooleanProperty m_parameterization{this, "UseParameterization", true, "Use table of min number DCs"}; @@ -359,7 +434,11 @@ namespace InDet IntegerProperty m_minUniqueSCTHits{this, "minUniqueSCTHits", 2, "Min number of hits in the SCT that we need before we allow hit sharing in the SCT"}; IntegerProperty m_minSiHitsToAllowSplitting{this, "minSiHitsToAllowSplitting", 9, "Min number of hits before we allow split sharing of hits"}; IntegerProperty m_minSiHitsToAllowSplittingInROI{this, "minSiHitsToAllowSplittingInROI", 7, "Min number of hits before we allow split sharing of hits In ROI. Test value for recovering B jet efficiency"}; - IntegerProperty m_maxPixMultiCluster{this, "maxPixMultiCluster", 4, "Max number of tracks that can be associated to a split cluster"}; + IntegerProperty m_maxPixOnePartCluster{this, "maxPixOnePartCluster", 2, "Max number of tracks that can be associated to a 1 particle cluster"}; + IntegerProperty m_maxPixTwoPartCluster{this, "maxPixTwoPartCluster", 2, "Max number of tracks that can be associated to a 2 particle cluster"}; + IntegerProperty m_maxPixMultiCluster{this, "maxPixMultiCluster", 4, "Max number of tracks that can be associated to a >= 3 particle cluster"}; + BooleanProperty m_shareSplitHits{this, "shareSplitHits", false, "Allow shared hits to be shared on 1 more track"}; + IntegerProperty m_minPixHitAccepted{this, "minPixHitAccepted", 2, "Min number of pixel hits needed to be allowed to push accepted tracks over shared module limits"}; // ROI stuff BooleanProperty m_useHClusSeed{this, "doHadCaloSeed", false}; @@ -379,13 +458,8 @@ namespace InDet //Track Pair Selection BooleanProperty m_doPairSelection{this, "doPairSelection", true}; FloatProperty m_minPairTrackPt{this, "minPairTrackPt", 1000., "In MeV"}; - FloatProperty m_pairDeltaX{this, "pairDeltaX", 0.5, "Seperation distance in mm"}; - FloatProperty m_pairDeltaY{this, "pairDeltaY", 2.0}; - FloatProperty m_pairDeltaPhi{this, "pairDeltaPhi", 5e-2, "Seperation distance in rad"}; - FloatProperty m_pairDeltaEta{this, "pairDeltaEta", 5e-2}; BooleanProperty m_monitorTracks{this, "MonitorAmbiguitySolving", false, "to track observeration/monitoring (default is false)"}; - BooleanProperty m_doSCTSplitting{this, "doSCTSplitting", false}; //WPM }; } // end of namespace diff --git a/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/src/InDetDenseEnvAmbiTrackSelectionTool.cxx b/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/src/InDetDenseEnvAmbiTrackSelectionTool.cxx old mode 100755 new mode 100644 index 01664c47c1f3d934c22c27711a7c620f3b0786cc..6b028612f050823ee3df1500f9bd6225ce18ca36 --- a/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/src/InDetDenseEnvAmbiTrackSelectionTool.cxx +++ b/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/src/InDetDenseEnvAmbiTrackSelectionTool.cxx @@ -5,6 +5,7 @@ /////////////////////////////////////////////////////////////////// // InDetDenseEnvAmbiTrackSelectionTool.cxx, (c) ATLAS Detector software // Anthony Morley based on the orginal tool by Markus Elsing +// Oct 2020 - Clean-up for rel22 - Gabriel Facini /////////////////////////////////////////////////////////////////// #include "InDetAmbiTrackSelectionTool/InDetDenseEnvAmbiTrackSelectionTool.h" @@ -65,18 +66,9 @@ StatusCode InDet::InDetDenseEnvAmbiTrackSelectionTool::initialize() ATH_CHECK(m_inputHadClusterContainerName.initialize(m_useHClusSeed)); ATH_CHECK(m_inputEmClusterContainerName.initialize(m_useEmClusSeed)); - ATH_MSG_INFO( "initialize() successful in " << name() ); return StatusCode::SUCCESS; } -//================ Finalisation ================================================= - -StatusCode InDet::InDetDenseEnvAmbiTrackSelectionTool::finalize() -{ - StatusCode sc = AlgTool::finalize(); - return sc; -} - // @TODO move cluster "map" creation to separate algorithm void InDet::InDetDenseEnvAmbiTrackSelectionTool::newEvent(CacheEntry* ent) const @@ -117,32 +109,30 @@ void InDet::InDetDenseEnvAmbiTrackSelectionTool::newEvent(CacheEntry* ent) const } } + //============================================================================================ std::tuple<Trk::Track*,bool> InDet::InDetDenseEnvAmbiTrackSelectionTool::getCleanedOutTrack(const Trk::Track *ptrTrack, const Trk::TrackScore score, Trk::ClusterSplitProbabilityContainer &splitProbContainer, Trk::PRDtoTrackMap &prd_to_track_map) const { + + // Test to see if we have a new event const EventContext& ctx{Gaudi::Hive::currentContext()}; std::lock_guard<std::mutex> lock{m_mutex}; CacheEntry* ent{m_cache.get(ctx)}; if (ent->m_evt!=ctx.evt()) { // New event in this slot - // compute the number of shared hits from the number of max shared modules - ent->m_maxShared = 2*m_maxSharedModules+1; - ent->m_minNotShared = m_minNotSharedModules; - ent->m_minSiHits = m_minSiHitsToAllowSplitting; - //Fill ROI's newEvent(ent); ent->m_evt = ctx.evt(); } - ATH_MSG_DEBUG ("getcleanedouttrack just got called "); //WPM - // compute the number of shared hits from the number of max shared modules - ent->m_maxShared = 2*m_maxSharedModules+1; - ent->m_minNotShared = m_minNotSharedModules; + // reset every track as could be changed for tracks within an ROI + // ROI matching is done within decideWhichHitsToKeep. Note mulitple ROI types + ent->m_maxSharedModules = 2*m_maxSharedModules+1; // see header for meaning + ent->m_minNotShared = m_minNotSharedHits; ent->m_minSiHits = m_minSiHitsToAllowSplitting; // cut on TRT hits, might use eta dependent cuts here @@ -150,7 +140,7 @@ std::tuple<Trk::Track*,bool> InDet::InDetDenseEnvAmbiTrackSelectionTool::getClea if (m_parameterization) { const DataVector<const Trk::TrackParameters>* vpar = ptrTrack->trackParameters(); const Trk::TrackParameters* par = (*vpar)[0]; - // ME bugfix + // ME bugfix TODO ... how old is this comment?? int expected = m_selectortool->minNumberDCs(par); if (expected > nCutTRT) nCutTRT = expected; } @@ -160,201 +150,174 @@ std::tuple<Trk::Track*,bool> InDet::InDetDenseEnvAmbiTrackSelectionTool::getClea ATH_MSG_DEBUG ("Study new Track "<< ptrTrack<<"\t , it has "<<tsos->size()<<"\t track states"); //Create structs to hold track information + //Values in here are used to decide if a track is kept or not TrackHitDetails trackHitDetails; ATH_MSG_DEBUG ("Filling in TrackDetails"); TSoS_Details tsosDetails(tsos->size()); - // Fill structs will information + // Fill structs with information fillTrackDetails( ptrTrack, splitProbContainer, prd_to_track_map, trackHitDetails, tsosDetails); //Decide which hits to keep - ATH_MSG_DEBUG ("DecideWhichHitsToKeep"); - bool TrkCouldBeAccepted = decideWhichHitsToKeep( ptrTrack, score, splitProbContainer, prd_to_track_map, trackHitDetails, tsosDetails, nCutTRT, ent ); - - ATH_MSG_DEBUG ("DecidedWhichHitsToKeep " << TrkCouldBeAccepted ); - - //WPM add in a loop to check how many splitable SCT clusters there are here!!!! - ATH_MSG_DEBUG ("How many SCT clusters can be split? "); - + //This is a major function which checks the usage of each hit on the candidate track + ATH_MSG_DEBUG ("decideWhichHitsToKeep"); + decideWhichHitsToKeep( ptrTrack, score, splitProbContainer, prd_to_track_map, trackHitDetails, tsosDetails, ent ); - // counter for the weighted number of added shared hits - int merged_sct = 0; + ATH_MSG_DEBUG ("decideWhichHitsToKeep" << trackHitDetails.m_trkCouldBeAccepted ); - if (m_doSCTSplitting){ - - // new TSOS vector - std::vector<const Trk::TrackStateOnSurface*> newTSOS_sct; - - // loop over all TSOS (and types) and copy the good ones over - DataVector<const Trk::TrackStateOnSurface>::const_iterator iTsos_sct = tsos->begin(); - DataVector<const Trk::TrackStateOnSurface>::const_iterator iTsosEnd_sct = tsos->end(); - - for (int index_sct = 0 ; iTsos_sct != iTsosEnd_sct ; ++iTsos_sct,++index_sct ) { + // + // now see what to do with the track + // + + ATH_MSG_DEBUG ("totalSiHits " << trackHitDetails.totalSiHits()); + ATH_MSG_DEBUG ("totalUniqueSiHits " << trackHitDetails.totalUniqueSiHits()); + ATH_MSG_DEBUG ("score " << score ); - const Trk::RIO_OnTrack* rot_sct = tsosDetails.RIO[index_sct]; - - if (!rot_sct) { - ATH_MSG_WARNING ("No ROTs failed, should never happen !"); - continue; - } - - if (m_detID->is_sct(rot_sct->identify())){ //WPM - - bool isSplitable = tsosDetails.splitProb1[index_sct] >= m_sharedProbCut || tsosDetails.splitProb2[index_sct] >= m_sharedProbCut2; - - if (isSplitable){ - merged_sct++; - ATH_MSG_DEBUG ("+1 Merged SCT "); - - } - } + //------------------------------------------------------------------------------------// + // if have passed the conversion selection, send to the track to the final collection + // before checking basic cuts + if( trackHitDetails.m_passConversionSel ) { + ATH_MSG_DEBUG ("track m_passConversionSel, so accept it as is"); + // Change pixel hits property for shared hits as this track will be + // accepted into the final track colection + if (!trackHitDetails.m_isPatternTrack){ + setPixelClusterSplitInformation( tsosDetails, splitProbContainer ); } - - ATH_MSG_DEBUG ("There are "<<merged_sct<<" merged SCT clusters."); + return std::make_tuple(static_cast<Trk::Track *>(nullptr),true); // keep input track } + //------------------------------------------------------------------------------------// + //------------------------------------------------------------------------------------// // - // now see what to do with the track + // All tracks must pass a minimum set of criteria // - - int totalSiHits = trackHitDetails.totalSiHits(); - ATH_MSG_DEBUG ("totalSiHits " << totalSiHits ); - ATH_MSG_DEBUG ("score " << score ); + // 1. Needs a minimum number of hits on track + // This cut is also implmeneted in the scoring tool and usually the same values are set. + // A track which fails to have the minimum number of hits, gets a score of 0 + // and will not make it this far. Might not be true for all versions of scoring tools. + // The cut here maintains an explicit threshold + // + // 2. Needs enough TRT hits. This is an important cut for back-tracking + // + // 3. Needs to have enough unique hits (not shared with an accepted track) + // + //------------------------------------------------------------------------------------// + bool passBasicCuts(true); + if( trackHitDetails.totalSiHits() < m_minHits ) { passBasicCuts = false; } + if( trackHitDetails.m_numTRT_Unused < nCutTRT ) { passBasicCuts = false; } + if( trackHitDetails.totalUniqueSiHits() < ent->m_minNotShared ) { passBasicCuts = false; } + if( !passBasicCuts ) { + ATH_MSG_DEBUG ("reject track; failed basic cuts"); + return std::make_tuple(static_cast<Trk::Track *>(nullptr),false); // reject input track + } + //------------------------------------------------------------------------------------// + + //------------------------------------------------------------------------------------// + // + // Decide to keep track or not based on more complex criteria + // 1. Check if track passes some criteria, including decision from decideWhichHitsToKeep + // If it passes, put the track into the output collection + // 2. Those which fail are tested on a second set of criteria + // If it passes, strip off "RejectedHits" (decided in decideWhichHitsToKeep) + // and build new subtrack from all non-shared hits and the + // set of shared hits which pass some cuts. + // If 1. new track would have same hit content, save the original track + // 2. if the new subtrack has less hits, and more than the min, created + // subtrack and reject the original + // 3. if the new subtrack is below min hit cuts, junk it + // 3. Those which fail are rejected with no chance for recovery + // + //------------------------------------------------------------------------------------// + + //------------------------------------------------------------------------------------// + // Set some booleans for the up coming if/else statement - // best case, we like this track and it passes this complex if statement - if ( TrkCouldBeAccepted && // we did not mark the track as bad before - ( !trackHitDetails.hassharedblayer || trackHitDetails.numPixelHoles<=1 ) && // if blayer, at most 1 pixel hole - !trackHitDetails.hassharedpixel && // no shared pixel hits - ( ( totalSiHits >= m_minHits && trackHitDetails.numShared == 0 ) || // no shared and enough hits OR - ( totalSiHits >= ent->m_minNotShared && trackHitDetails.numWeightedShared < ent->m_maxShared && // shared hits and enough unique hits and shared hits with good quality - ( totalSiHits + std::min(trackHitDetails.numShared, ent->m_maxShared) ) >= m_minHits && score > m_minScoreShareTracks ) ) ) { - ATH_MSG_DEBUG ("=> Suggest to keep track with "<<trackHitDetails.numShared<<" shared hits !"); + // no shared hit at all + // if shared hits, have additional requirements to check (3) + bool noSharedHits( trackHitDetails.m_numShared == 0 ); + + // set 2 bools for criteria placed on tracks with shared hits each criteria + // 1/2 - too many shared modules? + bool passSharedModulesCut( trackHitDetails.m_numWeightedShared < ent->m_maxSharedModules ); + + // 2/2 - good quality? + // Note, all tracks with a score of 0 are already removed + bool passScoreCut( score > m_minScoreShareTracks ); + //------------------------------------------------------------------------------------// + + + //------------------------------------------------------------------------------------// + // Execute logic outlined above + // + // BEST CASE, we like this track and it passes this if statement + // if have shared hits, not too many shared, and score ("quality") (note unique hits checked above) + if( trackHitDetails.m_trkCouldBeAccepted && + ( noSharedHits || (passSharedModulesCut && passScoreCut) ) ) { + ATH_MSG_DEBUG ("=> Suggest to keep track with "<<trackHitDetails.m_numShared<<" shared hits !"); // Change pixel hits property for shared hits as this track will be accepted into the final track colection - if (!trackHitDetails.isPatternTrack){ + if (!trackHitDetails.m_isPatternTrack){ setPixelClusterSplitInformation( tsosDetails, splitProbContainer ); } return std::make_tuple(static_cast<Trk::Track *>(nullptr),true); // keep input track - // ok, failed that one, can we recover the track ? - /* - } else if ( trackHitDetails.numTRT_Unused >= nCutTRT && // TRT track or no TRT at all (back tracking) - ( totalSiHits >= m_minHits || // we have enough hits OR - ( totalSiHits >= ent->m_minNotShared && // shared hits and enough unique hits and shared hits with good quality - totalSiHits+std::min(trackHitDetails.numShared, ent->m_maxShared) >= m_minHits && score > m_minScoreShareTracks ) ) ) { - */ - } else if ( trackHitDetails.numTRT_Unused >= nCutTRT && // TRT track or no TRT at all (back tracking) - ( - ( totalSiHits >= m_minHits || // we have enough hits OR - ( totalSiHits >= ent->m_minNotShared && // shared hits and enough unique hits and shared hits with good quality - totalSiHits+std::min(trackHitDetails.numShared, ent->m_maxShared) >= m_minHits && score > m_minScoreShareTracks ) ) //That is the traditional statement - || //here comes WPM's addendum, which should allow tracks with many merged sct hits to pass: - ( m_doSCTSplitting && totalSiHits+merged_sct >= m_minHits && score > m_minScoreShareTracks ) - ) - ) { - //WPM - ATH_MSG_DEBUG ("Passed track hits if? "); //WPM + } + // Track failed to be accepted as is. + // Can we recover the track? + else if ( passScoreCut ) { + // catch, if this is cosmics, accept the incoming track if (m_cosmics) { ATH_MSG_DEBUG ("=> Cosmics, accept input track even with shared hits"); return std::make_tuple(static_cast<Trk::Track *>(nullptr),true); // keep input track } - // Track is potentially ok, create a stripped down version from the unused hits and the allowed shared hits - // join shared to unused hits, if requirements are met + // + // Track is potentially ok, create a stripped down version + // from all hits not rejected + // - ATH_MSG_VERBOSE ("Trying to recover track, allow for some shared hits is possible."); - - // new TSOS vector + ATH_MSG_VERBOSE ("Trying to recover track...gathering hits."); + + // decision on hits are already made + // check the cleaning cuts and see if any of the rejected hits can be added back in + // otherwise, go with what we have + // + // A candidate below the total hit cut will never make it this far. + // We are only extend tracks here if ever decide to override rejected hit decisions + + // loop over all TSOS (and types) and copy the good + // ones over to new TSOS vector std::vector<const Trk::TrackStateOnSurface*> newTSOS; - // counter for the weighted number of added shared hits - int cntIns = 0; - - // loop over all TSOS (and types) and copy the good ones over + // iterators for looping DataVector<const Trk::TrackStateOnSurface>::const_iterator iTsos = tsos->begin(); DataVector<const Trk::TrackStateOnSurface>::const_iterator iTsosEnd = tsos->end(); - + for (int index = 0 ; iTsos != iTsosEnd ; ++iTsos,++index ) { - + // remove rejected hits - if (tsosDetails.type[index] == RejectedHit) { + if( tsosDetails.m_type[index] == RejectedHitOverUse || + tsosDetails.m_type[index] == RejectedHitInvalid || + tsosDetails.m_type[index] == RejectedHit ) { ATH_MSG_VERBOSE ("-> Dropping rejected hit"); - } else if (tsosDetails.type[index] != SharedHit ) { - ATH_MSG_VERBOSE ("-> Copy good TSOS"); - newTSOS.push_back(*iTsos); - } else if (cntIns + 1 >= ent->m_maxShared) { - ATH_MSG_VERBOSE ("-> Too many share hits, dropping outer hit(s)"); - } else { - ATH_MSG_VERBOSE ("-> Try to recover a shared hit"); + continue; + } - // get ROT from this TSOS - const Trk::RIO_OnTrack* rot = tsosDetails.RIO[index]; - - if (!rot) { - ATH_MSG_WARNING ("No ROTs failed, should never happen !"); - continue; - } + ATH_MSG_VERBOSE ("-> Copy good TSOS"); + newTSOS.push_back(*iTsos); - // is it a pixel cluster ? - bool isPixel = m_detID->is_pixel(rot->identify()); - - int maxiShared = -1; - int maxothernpixel = 0; - bool maxotherhasblayer = false; - bool otherfailsMinUniqueHits = false; - - bool isSplitable = tsosDetails.splitProb1[index] >= m_sharedProbCut || tsosDetails.splitProb2[index] >= m_sharedProbCut2; - - int numberOfTracksWithThisPrd = checkOtherTracksValidity( rot, isSplitable, splitProbContainer, prd_to_track_map, maxiShared, maxothernpixel, maxotherhasblayer, otherfailsMinUniqueHits, ent); - - - // now decide what to do, can we keep the shared hit - /* - if ( numberOfTracksWithThisPrd < m_maxTracksPerPRD && // number of tracks sharing hit - score > m_minScoreShareTracks && // score cut - (!isPixel || !trackHitDetails.hassharedblayer || trackHitDetails.numPixelHoles <= 0) && // shared b-layer only if no pixel holes - !otherfailsMinUniqueHits && //It will not invalidate another track - ( maxiShared < ent->m_maxShared || (isPixel && !trackHitDetails.firstisshared) ) && // do not allow other accepted track to exceed the shared limit, if first pixel hit is shared - (!isPixel || trackHitDetails.thishasblayer == maxotherhasblayer ) && // only allow shared pixel if both have blayer or both not - (!isPixel || trackHitDetails.numPixelHits >= maxothernpixel ) ) { // only allow shared pixel if new track as at least as many pixel hits - */ - if ( ( numberOfTracksWithThisPrd < m_maxTracksPerPRD && // number of tracks sharing hit - score > m_minScoreShareTracks && // score cut - (!isPixel || !trackHitDetails.hassharedblayer || trackHitDetails.numPixelHoles <= 0) && // shared b-layer only if no pixel holes - !otherfailsMinUniqueHits && //It will not invalidate another track - ( maxiShared < ent->m_maxShared || (isPixel && !trackHitDetails.firstisshared) ) && // do not allow other accepted track to exceed the shared limit, if first pixel hit is shared - (!isPixel || trackHitDetails.thishasblayer == maxotherhasblayer ) && // only allow shared pixel if both have blayer or both not - (!isPixel || trackHitDetails.numPixelHits >= maxothernpixel ) ) || ( m_doSCTSplitting && m_detID->is_sct(rot->identify()) && isSplitable ) ) { //WPM only allow shared pixel if new track as at least as many pixel hits - - ATH_MSG_VERBOSE ("---> Accepted hit shared with " << numberOfTracksWithThisPrd << " tracks !"); - - newTSOS.push_back(*iTsos); - ++trackHitDetails.numUnused; // update counter - - // update shared hit counter - //cntIns += isPixel ? 2 : 1; - if (isPixel) {cntIns += 2;} - else if ( m_detID->is_sct(rot->identify()) && isSplitable ){ cntIns += 0;} - else{cntIns += 1;} + } // loop over TSOS - } else { - ATH_MSG_VERBOSE ("---> Reject hit shared with " << numberOfTracksWithThisPrd << " tracks !"); - } - } - } - - // this still may happen per (**) see above. - //if ( ( trackHitDetails.numUnused+trackHitDetails.numPixelDeadSensor+trackHitDetails.numSCTDeadSensor+trackHitDetails.numSplitSharedPix < m_minHits || newTSOS.size() <= 3 ) || ( m_doSCTSplitting && trackHitDetails.numUnused+trackHitDetails.numPixelDeadSensor+trackHitDetails.numSCTDeadSensor+trackHitDetails.numSplitSharedPix+merged_sct < m_minHits || newTSOS.size() <= 3 ) ) { - if ( trackHitDetails.numUnused+trackHitDetails.numPixelDeadSensor+trackHitDetails.numSCTDeadSensor+trackHitDetails.numSplitSharedPix+merged_sct < m_minHits || newTSOS.size() <= 3 ) { - //WPM another problematic if statment - ATH_MSG_DEBUG ("=> Too few hits, reject track with shared hits"); + // newTSOS size would be hits on new track...how can the limit be 3? Is this backtracking? + // Missing something? What configuration is relying on this cut? TODO + if ( newTSOS.size() <= 3 ) { ATH_MSG_VERBOSE ("newTSOS.size(): "<<newTSOS.size() ); ATH_MSG_DEBUG ("reject track; Too few hits, reject track with shared hits"); return std::make_tuple(static_cast<Trk::Track *>(nullptr),false); // reject input track @@ -365,7 +328,7 @@ std::tuple<Trk::Track*,bool> InDet::InDetDenseEnvAmbiTrackSelectionTool::getClea ATH_MSG_DEBUG ("=> Recovered input track, accept it !"); // Change pixel hits property for shared hits as this is track will be accepeted into the final track colection - if (!trackHitDetails.isPatternTrack){ + if (!trackHitDetails.m_isPatternTrack){ setPixelClusterSplitInformation( tsosDetails, splitProbContainer ); } ATH_MSG_DEBUG ("reject track; maybe track was mark as rejected, but we recoverd it so no rejection"); @@ -389,112 +352,135 @@ std::tuple<Trk::Track*,bool> InDet::InDetDenseEnvAmbiTrackSelectionTool::getClea ATH_MSG_DEBUG ("=> Successfully created subtrack with shared hits recovered !"); return std::make_tuple(newTrack,false); // create new, cleaned track and reject input track } - } else { - ATH_MSG_DEBUG ("=> Track is recommended to be dropped"); - ATH_MSG_DEBUG ("reject track; other"); } + + // if made it this far, junk the track + ATH_MSG_DEBUG ("=> Track is recommended to be dropped"); + ATH_MSG_DEBUG ("reject track; other"); return std::make_tuple(static_cast<Trk::Track *>(nullptr),false); // reject input track + } -int InDet::InDetDenseEnvAmbiTrackSelectionTool::checkOtherTracksValidity(const Trk::RIO_OnTrack* rot, - const bool isSplitable, - Trk::ClusterSplitProbabilityContainer &splitProbContainer, - Trk::PRDtoTrackMap &prd_to_track_map, - int& maxiShared, - int& maxothernpixel, - bool& maxotherhasblayer, - bool& failMinHits, - CacheEntry* ent) const + +// +// Check if a shared hit invalidates any accepted track, if so, return false +// otherwise return true +// ONLY Shared hits are expected. We assume the decision to split has already been made +bool InDet::InDetDenseEnvAmbiTrackSelectionTool::checkOtherTracksValidity(TSoS_Details& tsosDetails, + int index, + Trk::ClusterSplitProbabilityContainer &splitProbContainer, + Trk::PRDtoTrackMap &prd_to_track_map, + int& maxiShared, + int& maxOtherNPixel, + bool& maxOtherHasIBL, + CacheEntry* ent) const { - // find out how many tracks use this hit already - Trk::PRDtoTrackMap::ConstPrepRawDataTrackMapRange range = prd_to_track_map.onTracks(*(rot->prepRawData())); - int numberOfTracksWithThisPrd = std::distance(range.first,range.second); - ATH_MSG_VERBOSE ("---> number of tracks with this shared Prd: " << numberOfTracksWithThisPrd << " maxtracks: " << m_maxTracksPerPRD); + // Hits here are only shared hits. + // Assumption: the decision to split has been done outside this function + if( tsosDetails.m_type[index] != SharedHit ) { + ATH_MSG_WARNING("Calling checkOtherTracksValidity with a hit that is not shared!"); + return true; + } - // check if this newly shared hit would exceed the shared hits limit of the already accepted track (**) + // needed? + const Trk::RIO_OnTrack* rot = tsosDetails.m_RIO[index]; + + // get list of tracks that use this hit already + int numberOfTracksWithThisPrd = tsosDetails.m_hitIsShared[index]; + ATH_MSG_VERBOSE ("---> number of tracks with this shared Prd: " << numberOfTracksWithThisPrd << " maxtracks: " << m_maxTracksPerPRD); + // check if adding one more shared hit would push any accepted track + // -over the limit of shared hits + // -under the limit of unique hits maxiShared = -1; bool otherwillFailMinHits = false; bool otherwillFailSCTuniqueHits = false; - if ( numberOfTracksWithThisPrd > 0 ) { - //Determine of the hit we are checking is a SCT or Pixel hit - bool isSCT = m_detID->is_sct( rot->prepRawData()->identify() ); - bool isPix = m_detID->is_pixel( rot->prepRawData()->identify() ); - - //Setup counters - int iShared = 0; //Number of Shared hits on the test track if this new hit is going to be shared - int iNotShared = 0; //Number of unshared hits on the test track - int iSctUnique = 0; //Number of unique SCT hits on the test track - int iPixel = 0; //Number of pixel hits on the test track - int iSCT = 0; //Number of SCT hits on the test track - bool iHasBlayer = false; // Does the test track have a b-layer hit - - - // Use the track with most shared hits as the one to compare to -- - // This will probably be the worst track compete - for ( auto track = range.first; track != range.second; ++track ){ - //Count up the hit properties of the track you are inspecting - iShared = isSplitable ? 0 : isPix ? 2 : 1; //You share this new hit now so. - iNotShared = isSplitable ? 0 : -1; //You will now be sharing this hit so start off at -1 - iSctUnique = isSCT ? -1 : 0; //Reduce the number unique SCT hits by one if PRD in question is shared - iPixel = 0; - iHasBlayer = false; - iSCT = 0; - - auto prdsToCheck = m_assoTool->getPrdsOnTrack(prd_to_track_map, *(track->second)); - for ( const auto& prdToCheck: prdsToCheck) { - bool isPixel(false); - bool isSplitPixel(false); - if (m_detID->is_pixel(prdToCheck->identify())) { - isPixel = true; - const InDet::PixelCluster* constPixelCluster = dynamic_cast<const InDet::PixelCluster*> ( prdToCheck ); - if (constPixelCluster){ - const Trk::ClusterSplitProbabilityContainer::ProbabilityInfo &splitProb = splitProbContainer.splitProbability(constPixelCluster); - if ( splitProb.isSplit() ) { - isSplitPixel = true; - } + //Setup counters + int iSharedMod = 0; //Number of Shared modules on the accepted track (will include this hit) + int iNotShared = 0; //Number of unshared hits on the accepted track + int iSctUnique = 0; //Number of unique SCT hits on the accepted track + int iPixel = 0; //Number of pixel hits on the accepted track + int iSCT = 0; //Number of SCT hits on the accepted track + bool iHasBlayer = false; // Does the accepted track have a b-layer hit + + // loop over all tracks that have this hit and make sure none fail + // - requirement on unique hits + // - requirement on shared modules + // - requirement on unique sct hits + // send back some information about the most overlapping track + auto currentHitsSharedTracks = tsosDetails.m_tracksSharingHit.equal_range(index); + for ( auto track = currentHitsSharedTracks.first; track != currentHitsSharedTracks.second; ++track ){ + + //Count up the hit properties of the track you are inspecting + iSharedMod = 0; + iNotShared = 0; + iSctUnique = 0; + iPixel = 0; + iHasBlayer = false; + iSCT = 0; + + std::vector< const Trk::PrepRawData* > prdsToCheck = m_assoTool->getPrdsOnTrack(prd_to_track_map, *(track->second)); + for (const Trk::PrepRawData* prdToCheck : prdsToCheck) { + bool isPixel(false); + bool isSplitPixel(false); + if (m_detID->is_pixel(prdToCheck->identify())) { + isPixel = true; + const InDet::PixelCluster* constPixelCluster = dynamic_cast<const InDet::PixelCluster*> ( prdToCheck ); + if (constPixelCluster){ + const Trk::ClusterSplitProbabilityContainer::ProbabilityInfo &splitProb = splitProbContainer.splitProbability(constPixelCluster); + if ( splitProb.isSplit() ) { + isSplitPixel = true; } - - ++iPixel; - if (m_detID->is_blayer(prdToCheck->identify()) ) iHasBlayer=true; - } - - if ( m_detID->is_sct(prdToCheck->identify()) ) { - ++iSCT; } - - if (prd_to_track_map.isShared( *prdToCheck )){ - iShared += isSplitPixel ? 0 : isPixel ? 2 : 1; - } else { - ++iNotShared; - if (m_detID->is_sct(prdToCheck->identify())){ - ++iSctUnique; - } + + ++iPixel; + if (m_detID->is_blayer(prdToCheck->identify()) ) iHasBlayer=true; + } + + if ( m_detID->is_sct(prdToCheck->identify()) ) { + ++iSCT; + } + + // + // count for general cases considering current flags (i.e. if split can be shared) + // hit which are overused, are rejected and should not be in this part of the code + // if hit is new one to be shared, count it as shared + // - the new cluster to be shared is not a split cluster (that is why we are here) + // - this will count correctly if a split hit can also be shared + if ( rot->prepRawData() == prdToCheck ) { + iSharedMod += isPixel ? 2 : 1; + // else if hit is not the new hit to be shared, then see if it is already shared + // - if so, count considering if it is split or not + } else if ( prd_to_track_map.isShared( *prdToCheck ) ) { + iSharedMod += isSplitPixel ? 0 : isPixel ? 2 : 1; + // else + // - not a shared cluster + } else { + ++iNotShared; + if (m_detID->is_sct(prdToCheck->identify())){ + ++iSctUnique; } } + } // loop over PRDs + + ATH_MSG_VERBOSE( "Track " << track->second << " will has " << iNotShared << " unique hits and " << iSctUnique << " unique SCT hits."); + // You are sharing too many hits reject the new track + // TODO does not include dead modules! Can we get that from the track summary? + if ( iNotShared < ent->m_minNotShared ) otherwillFailMinHits = true; + // You are sharing SCT hits and don't have enough to share -reject hit. + if ( iSCT > iSctUnique && iSctUnique < m_minUniqueSCTHits ) otherwillFailSCTuniqueHits = true; + } // loop over tracks - ATH_MSG_VERBOSE( "Track " << track->second << " will has " << iNotShared << " unique hits and " << iSctUnique << " unique SCT hits."); - // You are sharing too many hits reject the new track - if ( iNotShared < ent->m_minNotShared ) otherwillFailMinHits = true; - // You are sharing too many shared SCT hits and you don't have enough to share -reject hit. - if ( iSCT <= m_minUniqueSCTHits && iSCT > iSctUnique ) otherwillFailSCTuniqueHits = true; - } - - // Update details for the track with the most shared hits - if ( iShared > maxiShared){ - maxiShared = iShared; - maxothernpixel = iPixel; - maxotherhasblayer = iHasBlayer; - } + // Update details for the track with the most shared hits + if ( iSharedMod > maxiShared){ + maxiShared = iSharedMod; + maxOtherNPixel = iPixel; + maxOtherHasIBL = iHasBlayer; } - - failMinHits = otherwillFailMinHits || otherwillFailSCTuniqueHits; - - return numberOfTracksWithThisPrd; - + return !( otherwillFailMinHits || otherwillFailSCTuniqueHits ); } @@ -506,16 +492,14 @@ void InDet::InDetDenseEnvAmbiTrackSelectionTool::fillTrackDetails(const Trk::Tra TSoS_Details& tsosDetails) const { - ATH_MSG_DEBUG ("filltrackdetails just got called "); //WPM - // get all TSOS the track const DataVector<const Trk::TrackStateOnSurface>* tsos = ptrTrack->trackStateOnSurfaces(); ATH_MSG_DEBUG ("Study new Track "<< ptrTrack<<"\t , it has "<<tsos->size()<<"\t track states"); // is this a track from the pattern or a fitted track ? - trackHitDetails.isPatternTrack = (ptrTrack->info().trackFitter()==Trk::TrackInfo::Unknown); - if (trackHitDetails.isPatternTrack) { + trackHitDetails.m_isPatternTrack = (ptrTrack->info().trackFitter()==Trk::TrackInfo::Unknown); + if (trackHitDetails.m_isPatternTrack) { ATH_MSG_DEBUG ("-> this is a pattern track, outliers are good hits (reintegration) ! " << ptrTrack->perigeeParameters() ); } else { ATH_MSG_DEBUG ("-> this is a refitted track, so we can use the chi2 ! " << ptrTrack->perigeeParameters()); @@ -525,27 +509,31 @@ void InDet::InDetDenseEnvAmbiTrackSelectionTool::fillTrackDetails(const Trk::Tra const Trk::TrackSummary* trkSummary=ptrTrack->trackSummary(); if (trkSummary) { ATH_MSG_VERBOSE ("--> Found summary information"); - trackHitDetails.numPixelDeadSensor = trkSummary->get(Trk::numberOfPixelDeadSensors); - trackHitDetails.numSCTDeadSensor = trkSummary->get(Trk::numberOfSCTDeadSensors); - trackHitDetails.numPixelHits = trkSummary->get(Trk::numberOfPixelHits); - trackHitDetails.numPixelHoles = trkSummary->get(Trk::numberOfPixelHoles); - trackHitDetails.numSCTHoles = trkSummary->get(Trk::numberOfSCTHoles); - trackHitDetails.numSCTHits = trkSummary->get(Trk::numberOfSCTHits); + trackHitDetails.m_numPixelDeadSensor = trkSummary->get(Trk::numberOfPixelDeadSensors); + trackHitDetails.m_numSCTDeadSensor = trkSummary->get(Trk::numberOfSCTDeadSensors); + trackHitDetails.m_numPixelHits = trkSummary->get(Trk::numberOfPixelHits); + trackHitDetails.m_numPixelHoles = trkSummary->get(Trk::numberOfPixelHoles); + trackHitDetails.m_numSCTHoles = trkSummary->get(Trk::numberOfSCTHoles); + trackHitDetails.m_numSCTHits = trkSummary->get(Trk::numberOfSCTHits); + } else { + ATH_MSG_WARNING("Did not find track summary. Some cuts will be less efficienct!"); } // set nDeadSensors to 0 in case trkSummary wasn't called with HoleSearch // (i.e. number of deadSensors not available) - if (trackHitDetails.numPixelDeadSensor == -1) trackHitDetails.numPixelDeadSensor = 0; - if (trackHitDetails.numSCTDeadSensor == -1) trackHitDetails.numSCTDeadSensor = 0; - ATH_MSG_VERBOSE ("--- Number of dead si sensors: " << trackHitDetails.numPixelDeadSensor + trackHitDetails.numSCTDeadSensor); + if (trackHitDetails.m_numPixelDeadSensor == -1) trackHitDetails.m_numPixelDeadSensor = 0; + if (trackHitDetails.m_numSCTDeadSensor == -1) trackHitDetails.m_numSCTDeadSensor = 0; + ATH_MSG_VERBOSE ("--- Number of dead si sensors: " << trackHitDetails.m_numPixelDeadSensor + trackHitDetails.m_numSCTDeadSensor); - // loop over TSOS + // + // loop over TSOS and save information about each + // label each TSOS as Outlier, UnusedHit, SharedHit or RejectedHit (only for errors here) + // labels are used refined in decideWhichHitsToKeep ATH_MSG_VERBOSE ("--> Looping over TSOS's"); DataVector<const Trk::TrackStateOnSurface>::const_iterator iTsos = tsos->begin(); DataVector<const Trk::TrackStateOnSurface>::const_iterator iTsosEnd = tsos->end(); - //int numissplit = 0; //WPM for (int index = 0 ; iTsos != iTsosEnd ; ++iTsos, ++index) { // get measurment from TSOS @@ -553,8 +541,8 @@ void InDet::InDetDenseEnvAmbiTrackSelectionTool::fillTrackDetails(const Trk::Tra // if we do not have a measurement, we should just mark it if (!meas) { - ATH_MSG_VERBOSE ( Form("---%3d No measurement on TSOS, it is another type, to be copied over.",index) ); - tsosDetails.type[index] = OtherTsos; + ATH_MSG_VERBOSE ( Form("---> No measurement on TSOS, it is another type, %2d",index) ); + tsosDetails.m_type[index] = OtherTsos; continue; } @@ -564,17 +552,17 @@ void InDet::InDetDenseEnvAmbiTrackSelectionTool::fillTrackDetails(const Trk::Tra // could be a Pseudo-Measurement ? const Trk::PseudoMeasurementOnTrack* pseudo = dynamic_cast <const Trk::PseudoMeasurementOnTrack*> (meas); if (pseudo){ - ATH_MSG_VERBOSE ( Form("---%3d Copy pseudo measurement.",index) ); - ++trackHitDetails.numPseudo; // increase counter + ATH_MSG_VERBOSE ( Form("---> Pseudo measurement, %2d",index) ); + ++trackHitDetails.m_numPseudo; // increase counter } else { - ATH_MSG_WARNING ( Form("---%3d Measurement is not a pseudo measurment, not yet supported, try to copy !",index)); + ATH_MSG_WARNING ( Form("---> Measurement is not a pseudo measurment, not yet supported! %2d",index)); } - tsosDetails.type[index] = OtherTsos; + tsosDetails.m_type[index] = OtherTsos; continue; } //Store RIO into vector for later use - tsosDetails.RIO[index] = rot; + tsosDetails.m_RIO[index] = rot; // // we have a TSOS with a measurement, keep analysing it @@ -585,11 +573,15 @@ void InDet::InDetDenseEnvAmbiTrackSelectionTool::fillTrackDetails(const Trk::Tra bool isTRT = m_detID->is_trt(id); bool isPixel = m_detID->is_pixel(id); bool isSCT = m_detID->is_sct(id); - bool isBlayer = isPixel ? m_detID->is_blayer(id) : false; + bool isIBL = isPixel ? m_detID->is_blayer(id) : false; // checks layer 0 bool isoutlier = (*iTsos)->type(Trk::TrackStateOnSurface::Outlier); - tsosDetails.detType[index] = isTRT * 3 + isSCT * 2 + isPixel * 1 + isBlayer * 10; + tsosDetails.m_detType[index] = isTRT * 3 + isSCT * 2 + isPixel * 1 + isIBL * 10; + // Do we have a IBL hit on the track? + if ( isIBL && (!isoutlier || trackHitDetails.m_isPatternTrack ) ) { + trackHitDetails.m_thisHasIBLHit = true; // we may reintegrate outliers from pattern + } // Add splitting information about the cluster if (isPixel) { @@ -597,110 +589,74 @@ void InDet::InDetDenseEnvAmbiTrackSelectionTool::fillTrackDetails(const Trk::Tra const InDet::PixelCluster* clus = dynamic_cast <const InDet::PixelCluster*> (rot->prepRawData()); if ( !clus ) { ATH_MSG_WARNING ("---> Cast to Pixel cluster failed, should not happen !"); - tsosDetails.type[index] = RejectedHit; + tsosDetails.m_type[index] = RejectedHit; continue; } else { const Trk::ClusterSplitProbabilityContainer::ProbabilityInfo &splitProb = splitProbContainer.splitProbability(clus); if ( !splitProb.isTooBigToBeSplit() ) { - tsosDetails.splitProb1[index] = splitProb.splitProbability1(); - tsosDetails.splitProb2[index] = splitProb.splitProbability2(); - } else { - tsosDetails.splitProb1[index] = 0.51; - tsosDetails.splitProb2[index] = 0.51; + tsosDetails.m_splitProb1[index] = splitProb.splitProbability1(); + tsosDetails.m_splitProb2[index] = splitProb.splitProbability2(); + } else { + // cluster too big to split are default to 3 particle cluster + // rigorously checked? + tsosDetails.m_splitProb1[index] = m_sharedProbCut - 0.01; + tsosDetails.m_splitProb2[index] = m_sharedProbCut2 + 0.01; } } - } + } // isPixel - if (isSCT) { - if (m_doSCTSplitting){ - ATH_MSG_DEBUG ("Entered doSCTSplitting. Getting cluster parameters."); - const InDet::SCT_Cluster* clussct = dynamic_cast <const InDet::SCT_Cluster*> (rot->prepRawData()); - if (!clussct){ - ATH_MSG_WARNING ("---> Cast to SCT cluster failed, should not happen !"); - tsosDetails.type[index] = RejectedHit; - continue; - } - if ( std::abs((*iTsos)->surface().normal()(2)) < 0.1 ){ - float px = (*iTsos)->trackParameters()->momentum()(0); - float py = (*iTsos)->trackParameters()->momentum()(1); - float nx = (*iTsos)->surface().normal()(0); - float ny = (*iTsos)->surface().normal()(1); - - //lphi will be the momentum's angle in the x-y plane minus the surface's normal angle - double lphi = std::atan2( py, px ) - std::atan2( ny, nx ); - - double diff = ((285*std::abs( std::tan(lphi)-std::tan(-0.07)) ) - 80*clussct->width().colRow()(0)); - ATH_MSG_DEBUG ("Calculated width - observed width? "<< diff ); - - //track pT would be sqrt( ( px * px ) + ( py * py ) ) - //isStereo?: (*iTsos)->surface().isStereo() - //Number of split pixel clusters: numissplit <- would have to uncomment stuff out from above - - if (std::abs(diff) > 80){ - tsosDetails.splitProb1[index] = .99; - tsosDetails.splitProb2[index] = .99; - } else { - tsosDetails.splitProb1[index] = 0; - tsosDetails.splitProb2[index] = 0; - } - //This ends the "isBarrel" if statement; no endcap clusters are split - } else { - tsosDetails.splitProb1[index] = 0; - tsosDetails.splitProb2[index] = 0; - } - } else { //Always set to 0 if splitting not allowed - tsosDetails.splitProb1[index] = 0; - tsosDetails.splitProb2[index] = 0; - } - } + // + // define each hit + // continue once definition set + // + // is this cluster used on an accepted track? bool isUsed = prd_to_track_map.isUsed(*(rot->prepRawData())); - // Do we have an outlier (and not a pattern track) ? - if ( (isoutlier && !isUsed && !trackHitDetails.isPatternTrack) || !(m_detID->is_indet(id)) ) { - ATH_MSG_VERBOSE ( Form("---%3d Prd is outlier on a fitter track (or not InDet), copy it over.", index) ); - tsosDetails.type[index] = Outlier; + // assign outlier label using isoutlier bool above + // or if not inDet (does this even happen? Historical criteria) + // further criteria on keeping a hit or not is done in decideWhichHitsToKeep + // NOTE outliers can be shared but cannot save both in tsosDetails + if( isoutlier || !(m_detID->is_indet(id))) { + ATH_MSG_VERBOSE ( Form("---> Prd is outlier, %d", index) ); + tsosDetails.m_type[index] = Outlier; + // if it is used, we need to send that information to the rest of the code + // in decideWhichHitsToKeep we reject any outlier used on another track + // if that logic was to change, and the number of tracks was needed, this would + // need to change + if(isUsed) { tsosDetails.m_hitIsShared[index] = 1; } continue; } - // let's check if this is a shared hit (even if it is an outlier on a pattern track) ? + if (!isUsed) { - if ( !isoutlier ) { - ATH_MSG_VERBOSE ( Form("---%3d Prd is unused, copy it over", index) ); - } else { - ATH_MSG_VERBOSE ( Form("---%3d Prd is outlier on a pattern track and is unused, copy it over", index) ); - } - tsosDetails.type[index] = UnusedHit; + ATH_MSG_VERBOSE ( Form("---> Prd is unused, %d", index) ); + tsosDetails.m_type[index] = UnusedHit; continue; } // - // ok, we have a shared hit + // we have a shared hit // - // do we have an outlier and a pattern track, but the hit is shared, so reject it (we reintegrate it otherwise) - if ( isoutlier && trackHitDetails.isPatternTrack ) { - ATH_MSG_VERBOSE ( Form("---%3d Prd is outlier on a pattern track, we do not want to reintegrate it, so reject it.", index) ); - tsosDetails.type[index] = RejectedHit; - continue; - } - // first check if it is a shared TRT hit, this is not allowed + // check if it is a shared TRT hit, this is not allowed if (isTRT) { - ATH_MSG_VERBOSE ( Form("---%3d Share TRT hit, drop it !", index) ); - tsosDetails.type[index] = RejectedHit; + ATH_MSG_VERBOSE ( Form("---> Share TRT hit, drop it !, %d", index) ); + tsosDetails.m_type[index] = RejectedHit; continue; } /* Allow a hit to be a shared one, if - not too many tracks share this hit already - the score of the track is high enough to allow for shared hits + store information here but make decisions in decideWhichHitsToKeep */ Trk::PRDtoTrackMap::ConstPrepRawDataTrackMapRange range = prd_to_track_map.onTracks(*(rot->prepRawData())); int numberOfTracksWithThisPrd = std::distance(range.first,range.second); - ATH_MSG_VERBOSE ( Form("---%3d Number of tracks with this share Prd: %2d maxtracks: %2d",index, numberOfTracksWithThisPrd, m_maxTracksPerPRD.value()) ); - tsosDetails.hitIsShared[index] = numberOfTracksWithThisPrd; + ATH_MSG_VERBOSE ( Form("---> Number of tracks with this share Prd %d: %2d maxtracks: %2d",index, numberOfTracksWithThisPrd, m_maxTracksPerPRD.value()) ); + tsosDetails.m_hitIsShared[index] = numberOfTracksWithThisPrd; // get iterators for range @@ -708,529 +664,608 @@ void InDet::InDetDenseEnvAmbiTrackSelectionTool::fillTrackDetails(const Trk::Tra Trk::PRDtoTrackMap::PrepRawDataTrackMap::const_iterator mapItEnd = range.second; // simple for loop instead of fancier remove_if above for ( ;mapIt!=mapItEnd; ++mapIt) { - tsosDetails.overlappingTracks.insert( std::pair<const Trk::Track*, int >(mapIt->second, index) ); - tsosDetails.tracksSharingHit.insert(std::pair< int, const Trk::Track* >(index, mapIt->second ) ); + tsosDetails.m_overlappingTracks.insert( std::pair<const Trk::Track*, int >(mapIt->second, index) ); + tsosDetails.m_tracksSharingHit.insert(std::pair< int, const Trk::Track* >(index, mapIt->second ) ); } ATH_MSG_VERBOSE ("-----> Mark this hits as shared -- Try and recover later!"); - ATH_MSG_VERBOSE ("------ Index: "<< index << " Type: " << tsosDetails.detType[index] << " splitprob1 " << tsosDetails.splitProb1[index]); - tsosDetails.type[index] = SharedHit; + ATH_MSG_VERBOSE ("------ Index: "<< index << " Type: " << tsosDetails.m_detType[index] << " splitprob1 " << tsosDetails.m_splitProb1[index]); + tsosDetails.m_type[index] = SharedHit; } // End loop over TSOS's return; } -bool InDet::InDetDenseEnvAmbiTrackSelectionTool::decideWhichHitsToKeep(const Trk::Track* ptrTrack, - const Trk::TrackScore score, - Trk::ClusterSplitProbabilityContainer &splitProbContainer, - Trk::PRDtoTrackMap &prd_to_track_map, - TrackHitDetails& trackHitDetails, - TSoS_Details& tsosDetails, - int nCutTRT, - CacheEntry* ent)const +//========================================================================================== +// +// look at cluster properties and how often they are used to determine if can stay on track +// +void InDet::InDetDenseEnvAmbiTrackSelectionTool::decideWhichHitsToKeep(const Trk::Track* ptrTrack, + const Trk::TrackScore score, + Trk::ClusterSplitProbabilityContainer &splitProbContainer, + Trk::PRDtoTrackMap &prd_to_track_map, + TrackHitDetails& trackHitDetails, + TSoS_Details& tsosDetails, + CacheEntry* ent) const { // Can the track can automatically be accpeted without further checks - bool TrkCouldBeAccepted(true); + trackHitDetails.m_trkCouldBeAccepted = true; + + // Does this track fall into an hadronic ROI? + trackHitDetails.m_passHadronicROI = false; + if( m_useHClusSeed && inHadronicROI(ptrTrack, ent) ) { + trackHitDetails.m_passHadronicROI = true; + ent->m_maxSharedModules = 2*m_maxSharedModulesInROI+1; // see header for meaning + ent->m_minNotShared = m_minNotSharedHitsInROI; + ent->m_minSiHits = m_minSiHitsToAllowSplittingInROI; + } + + + //------------------------------------------------------------------// + // Should a shared hit be called shared or is it compatible with multiple clusters? + // this flag controls if the additional information is conisdered and shared hits on this track + // are "recovered" from the shared state to the split state + // + // First criteria are checked which would NOT allow recovery + // Then override criteria are checked + bool recoverSharedHits(true); + // reasons NOT to consider the information + // not above pT for splitting + if( ptrTrack->trackParameters()->front()->pT() < m_minPtSplit ) { recoverSharedHits = false; } + // score too low + if(score <= m_minScoreShareTracks) { recoverSharedHits = false; } + // the following 2 cuts use information from the track summary stored in the details struct + // not enough SiHits + if(trackHitDetails.m_numPixelHits+trackHitDetails.m_numSCTHits < m_minSiHitsToAllowSplitting) { + recoverSharedHits = false; + } + // too many holes + if(trackHitDetails.m_numPixelHoles>1) { recoverSharedHits = false; } + // + // OVERRIDE criteria + if( m_useHClusSeed && trackHitDetails.m_passHadronicROI ) { recoverSharedHits = true; } + //------------------------------------------------------------------// - // let's remember the last 2 ROTs on the track - const Trk::RIO_OnTrack* lastrot = 0; - const Trk::RIO_OnTrack* lastbutonerot = 0; - int lastrotindex = 0; - // Are we in a ROI? - bool inROIandPTok(true); - bool inROI(true); - if ( ptrTrack->trackParameters()->front() ){ - if ( ptrTrack->trackParameters()->front()->pT() < m_minPtSplit ) { - inROIandPTok = false; - } - - if ( ptrTrack->trackParameters()->front()->pT() < m_minPtBjetROI ) { - inROI = false; + //------------------------------------------------------------------// + // + // loop over all measurements, make decisions, increment counters + // + for (unsigned int index(0); index < tsosDetails.m_nTSoS; ++index ){ + //Skip all non-measurement TSOS's + if (tsosDetails.m_type[index] == OtherTsos) { continue; } + + // in fillTrackDetails, if an error, cluster could be rejected + // also shared TRT hits are rejected there + if (tsosDetails.m_type[index] == RejectedHit) { // only generic rejects at that point + trackHitDetails.m_trkCouldBeAccepted = false; // we have to remove at least one PRD + continue; } - if (inROI){ - inROI = m_useHClusSeed && isHadCaloCompatible(*ptrTrack->trackParameters()->front(), ent); - - // If we are in a ROI change the shared hit cut; - if (inROI){ - ent->m_maxShared = 2*m_maxSharedModulesInROI+1; - ent->m_minNotShared = m_minNotSharedModulesInROI; - ent->m_minSiHits = m_minSiHitsToAllowSplittingInROI; + // Keep all unused hits + if (tsosDetails.m_type[index] == UnusedHit ){ + if ( tsosDetails.m_detType[index] == 3 ) { + ++trackHitDetails.m_numTRT_Unused; + } else { + ++trackHitDetails.m_numUnused; + if ( tsosDetails.m_detType[index] == 2 ) { ++trackHitDetails.m_numSCT_Unused; } } + continue; } - } - - - - // Try and recover shared hits on this track if.. - bool recoverSharedHits = inROIandPTok && // Track is in ROI and has enough PT - score > m_minScoreShareTracks && // score needs to be good - trackHitDetails.numPixelHits+trackHitDetails.numSCTHits >= m_minSiHitsToAllowSplitting && - trackHitDetails.numPixelHoles<=1 ; // we do not share pixels if there are too many holes in pixels + //===================================================================// + // + // OUTLIERS - not type Outlier is given to both Shared and UnShared hits. Sort it out here + // Note in fillTrackDetails, for outliers we saved "1" in m_hitIsShared for any used hit, + // even if the true value is higher. As we will reject them here, it does not matter + // how many it is shared with + // if a pattern track + // - used : reject the hit + // - unused : call it unused and move on (reintegration of pattern outliers) + // if fitted track + // - used : reject the hit + // - unused : keep it but do not call it an unused hit (not counted towards total SiHit count) + // + if( tsosDetails.m_type[index] == Outlier ) { - // loop over all measurements - for (unsigned int index(0); index < tsosDetails.nTSoS; ++index ){ - //Skip all non-measurement TSOS's - if (tsosDetails.type[index] == OtherTsos) continue; - - - // Do we have some b-layer hit in the track? - if (tsosDetails.detType[index] == 11 && (!(tsosDetails.type[index]== Outlier) || trackHitDetails.isPatternTrack)) { - trackHitDetails.thishasblayer = true; // we may reintegrate outliers from pattern - } + // if on another track, get it off of this one + // for an outlier, we need to check m_hitIsShared to see if it used + if( tsosDetails.m_hitIsShared[index]>0 ) { // hit is used on another track + ATH_MSG_VERBOSE( Form("---> Prd is outlier and shared, reject it. %d", index) ); + rejectHit(trackHitDetails, tsosDetails, index); + continue; + } - // Keep all unused hits - if (tsosDetails.type[index] == UnusedHit ){ - if (tsosDetails.detType[index] == 3) { - ++trackHitDetails.numTRT_Unused; - } else { - ++trackHitDetails.numUnused; + if(trackHitDetails.m_isPatternTrack) { + + // For pattern tracks: + // if used : reject it --> see above + // if unused : reintegrate it and send to track fit + ATH_MSG_VERBOSE ( Form("---> Prd is outlier on a pattern track and is unused, %d", index) ); + // change to unused hit, increment counter + tsosDetails.m_type[index] = UnusedHit; // change name so m_numUnused matches types on track + ++trackHitDetails.m_numUnused; + if( tsosDetails.m_detType[index]%10 == 2 ) { ++trackHitDetails.m_numSCT_Unused; } + continue; } - - // remember the last 2 ROTs - lastbutonerot = lastrot; - lastrot = tsosDetails.RIO[index]; - lastrotindex = index; - continue; + else { // is outlier on fitted track and ... + // used : reject the hit --> see above + // unused: send it through, but do not count it towards the hit content + ATH_MSG_DEBUG( Form("---> Prd is outlier on a fitted track and is unused, %d", index) ); + continue; + } // m_isPatternTrack or not + } // isOutlier or not + //===================================================================// + + // cleaning cut: fitted track with 1 pixel hit without an IBL hit + /* hurts conversion performance, slighly better perf in min-bias without it + * but high pT jets can use this in the core + if(!trackHitDetails.m_isPatternTrack && // fitted track + trackHitDetails.m_numPixelHits==1 && // 1 pixel hit + !trackHitDetails.m_thisHasIBLHit && // no IBL hits + tsosDetails.m_detType[index]%10 == 1 && // index is the pixel hit + !(tsosDetails.m_type[index]==Outlier)) { // and it is not an outlier) + ATH_MSG_VERBOSE ("-> Special case, problematic single pixel hit on fitted track, reject it !"); + TrkCouldBeAccepted = false; // we have to remove at least one PRD + tsosDetails.m_type[index] = RejectedHit; + continue; } + */ - // special cut to remove problematic combinations in the pixels - // So far left this in need to check if it make a difference - if ( tsosDetails.detType[index]%10 == 1 && !trackHitDetails.thishasblayer && trackHitDetails.numPixelHoles>0 // a pixel hit, no b-layer, we do have pixel holes - && ( ( trackHitDetails.numPixelHits==1 && !(tsosDetails.type[index]==Outlier) ) // one pixel on track, it is not an additional outlier - || ( trackHitDetails.isPatternTrack && trackHitDetails.numPixelHits==0 && (tsosDetails.type[index]==Outlier) ) ) ) { // pattern track, no pixels, but an outlier (we may reintegrate it) - ATH_MSG_VERBOSE ("-> Special case, problematic single pixel hit on track, reject it !"); - tsosDetails.type[index] = RejectedHit; - // Mark track as bad ! - TrkCouldBeAccepted = false; - ATH_MSG_DEBUG ("reject track; Special case, problematic single pixel hit on track, reject it !"); - continue; + // At this point, only hits labeled shared from fillTrackDetails + if( tsosDetails.m_type[index] != SharedHit ) { + ATH_MSG_ERROR("A NON-Shared hit is being treated as one!"); } - // Try and recover shared hits if.. - if ( recoverSharedHits ) { + //===================================================================// + // Try and recover shared hits if + // - pixel cluster splitting flag is turned on + // - track passes criteria for cluster splitting + // - is a pixel hit + if ( m_doPixelClusterSplitting && recoverSharedHits && tsosDetails.m_detType[index]%10 == 1 ) { //Find the index of the previous measurement on track int indexPreviousMeasurement = tsosDetails.findIndexOfPreviousMeasurement(index); if (indexPreviousMeasurement > 0 ) { ATH_MSG_VERBOSE ("--> Previous Measurement was at : " << indexPreviousMeasurement - << " and was a: " << tsosDetails.type[indexPreviousMeasurement] - << " with splitprob1 " << tsosDetails.splitProb1[indexPreviousMeasurement] - << " and splitprob2 " << tsosDetails.splitProb2[indexPreviousMeasurement]); + << " and was a: " << tsosDetails.m_type[indexPreviousMeasurement] + << " with splitprob1 " << tsosDetails.m_splitProb1[indexPreviousMeasurement] + << " and splitprob2 " << tsosDetails.m_splitProb2[indexPreviousMeasurement]); } - // Special treatment of share split pixel clusters... - if (m_doPixelClusterSplitting && tsosDetails.detType[index]%10 == 1) { - - // If there is an earlier hit on the track and it is a pixel hit check to see if it's shared or split. - // This effectively means that singular shared hits in the pixel detector are only allowed in the first layer. - // Otherwise we make the assumption that a shared in nth layer means that - // there should be a shared in n-1 th layer. i.e. collimated tracks - // This breaks down in overlap regions hence it is disabled - if ( false && indexPreviousMeasurement > 0 && - !( tsosDetails.type[indexPreviousMeasurement] == SplitSharedHit || tsosDetails.type[indexPreviousMeasurement] == SharedHit || - tsosDetails.splitProb1[indexPreviousMeasurement] >= m_sharedProbCut || tsosDetails.splitProb2[indexPreviousMeasurement] >= m_sharedProbCut2) ) { - ATH_MSG_VERBOSE ("---> Previous hit was not shared or compatible with a split hit!!!"); - TrkCouldBeAccepted = false; // we have to remove at least one PRD - tsosDetails.type[index] = RejectedHit; - continue; - } - - // If the previous measurement is a shared pixel and the current pixel wants to be shared - // and is compatible with being so allow the previous measurement to be shared with up to m_maxTracksPerPRD tracks without penalty - if ( indexPreviousMeasurement >= 0 && - tsosDetails.type[indexPreviousMeasurement] == SharedHit && - tsosDetails.hitIsShared[indexPreviousMeasurement] < m_maxTracksPerPRD - && (tsosDetails.splitProb1[index] >= m_sharedProbCut || tsosDetails.splitProb2[index] >= m_sharedProbCut2)){ - - // Check if the previous shared hit shared on the same track as this one - bool sharedbetweenthesametracks = false; - auto previousHitsSharedTracks = tsosDetails.tracksSharingHit.equal_range(indexPreviousMeasurement); - auto currentHitsSharedTracks = tsosDetails.tracksSharingHit.equal_range(index); - for (auto iteratorP = previousHitsSharedTracks.first; iteratorP != previousHitsSharedTracks.second; ++iteratorP) { - for (auto iteratorC = currentHitsSharedTracks.first; iteratorC != currentHitsSharedTracks.second; ++iteratorC) { - if ( iteratorC->second == iteratorP->second){ - sharedbetweenthesametracks = true; - break; - } + // If the previous measurement is a shared pixel and the current pixel + // - wants to be shared + // - and is compatible with being from multiple clusters + // allow the previous measurement to be shared with up to m_maxTracksPerPRD tracks without penalty + if ( indexPreviousMeasurement >= 0 && + tsosDetails.m_type[indexPreviousMeasurement] == SharedHit && + tsosDetails.m_hitIsShared[indexPreviousMeasurement] < m_maxTracksPerPRD && + clusCanBeSplit(tsosDetails.m_splitProb1[index],tsosDetails.m_splitProb2[index]) ) { + + // Check if the previous shared hit shared on the same track as this one + bool sharedbetweenthesametracks = false; + auto previousHitsSharedTracks = tsosDetails.m_tracksSharingHit.equal_range(indexPreviousMeasurement); + auto currentHitsSharedTracks = tsosDetails.m_tracksSharingHit.equal_range(index); + for (auto iteratorP = previousHitsSharedTracks.first; + iteratorP != previousHitsSharedTracks.second; ++iteratorP) { + for (auto iteratorC = currentHitsSharedTracks.first; + iteratorC != currentHitsSharedTracks.second; ++iteratorC) { + if ( iteratorC->second == iteratorP->second){ + sharedbetweenthesametracks = true; + break; } - if (sharedbetweenthesametracks) break; } - if (sharedbetweenthesametracks){ - tsosDetails.type[indexPreviousMeasurement] = SplitSharedHit; - trackHitDetails.numShared--; // decrease counter - trackHitDetails.numWeightedShared -= 2; // decrease counter - trackHitDetails.numSplitSharedPix++; - } + if (sharedbetweenthesametracks) break; + } + if (sharedbetweenthesametracks){ + sharedToSplitPix(trackHitDetails, tsosDetails, indexPreviousMeasurement); + } + } + + // + // Check the number network. + // - check if the particle is compatible with 2 particles + // - else check if particle is compatible with >= 3 particles + // - else it is a 1 particle cluster + // Is a 2 particle cluster? + if ( isTwoPartClus(tsosDetails.m_splitProb1[index],tsosDetails.m_splitProb2[index]) ) { + + // can be split, but how many accepted tracks use the hit? + // okay to share + if (tsosDetails.m_hitIsShared[index] < m_maxPixTwoPartCluster) { + ATH_MSG_VERBOSE ("---> Pixel cluster is to be split shared with another track: Split Prob1 " << tsosDetails.m_splitProb1[index] ); + tsosDetails.m_type[index] = SplitSharedHit; + ++trackHitDetails.m_numSplitSharedPix; + continue; + } else if(m_shareSplitHits && tsosDetails.m_hitIsShared[index] == m_maxPixTwoPartCluster) { + // if we allow split hits to also be shared + // - the first m_maxPixTwoPartCluster cluster get to use it without penalty + // - the m_maxPixTwoPartCluster+1 cluster gets called shared + ATH_MSG_VERBOSE ("---> Pixel cluster is split, but must be called shared to stay on this track!"); + addSharedHit(trackHitDetails, tsosDetails, index); + continue; + } else { + ATH_MSG_VERBOSE ("---> Pixel split but shared between too many tracks -- will be removed from the track!!!"); + rejectHitOverUse(trackHitDetails, tsosDetails, index); + continue; } - // If cluster can only be shared by two tracks - if ( tsosDetails.splitProb1[index] >= m_sharedProbCut && tsosDetails.splitProb2[index] < m_sharedProbCut2){ - if (tsosDetails.hitIsShared[index] >= 2){ - ATH_MSG_VERBOSE ("---> Pixel cluster is split, and sheared between too many tracks -- hit will be removed from the track!!!"); - TrkCouldBeAccepted = false; // Flag that we need to remove the at least one hit - tsosDetails.type[index] = RejectedHit; - continue; - } else { - ATH_MSG_VERBOSE ("---> Pixel cluster is to be split shared with another track: Split Prob1 " << tsosDetails.splitProb1[index] ); - // Check if this first hit -- if it is not check if the pervious hit has been shared - // For now just print some debug output - if ( msg().level() <=MSG::VERBOSE && indexPreviousMeasurement>0){ - if (tsosDetails.type[indexPreviousMeasurement] == SplitSharedHit){ - ATH_MSG_VERBOSE("----- Previous Hit ("<< indexPreviousMeasurement <<") Shared and Split"); - } else if (tsosDetails.type[indexPreviousMeasurement] == SharedHit) { - ATH_MSG_VERBOSE("----- Previous Hit ("<< indexPreviousMeasurement<<") Shared"); - } else if (tsosDetails.type[indexPreviousMeasurement] == UnusedHit) { - ATH_MSG_VERBOSE("----- Previous Hit ("<< indexPreviousMeasurement <<") Unused hit"); - } else if (tsosDetails.type[indexPreviousMeasurement] == Outlier) { - ATH_MSG_VERBOSE("----- Previous Hit ("<< indexPreviousMeasurement <<") Outlier"); - } - } - tsosDetails.type[index] = SplitSharedHit; - ++trackHitDetails.numSplitSharedPix; - // remember the last 2 ROTs - lastbutonerot = lastrot; - lastrot = tsosDetails.RIO[index]; - lastrotindex = index; - continue; - } - // If cluster can shared by more than 2 tracks - } else if ( tsosDetails.splitProb2[index] >= m_sharedProbCut2){ - if (tsosDetails.hitIsShared[index] >= m_maxPixMultiCluster ){ - ATH_MSG_VERBOSE ("---> Pixel cluster is split, and sheared between too many tracks -- hit will be removed from the track!!!"); - TrkCouldBeAccepted = false; // Flag that we need to remove the at least one hit - tsosDetails.type[index] = RejectedHit; - continue; - } else { - ATH_MSG_VERBOSE ("---> Pixel cluster is to be split shared with another track: Split Prob2 " << tsosDetails.splitProb2[index] ); - // Check if this is the first hit -- if it is not check if the pervious hit has been shared - // For now just print some debug output - if (msg().level() <=MSG::VERBOSE && indexPreviousMeasurement>0){ - if (tsosDetails.type[indexPreviousMeasurement] == SplitSharedHit){ - ATH_MSG_VERBOSE("---- Previous Hit ("<< indexPreviousMeasurement <<") Shared and Split"); - } else if (tsosDetails.type[indexPreviousMeasurement] == SharedHit) { - ATH_MSG_VERBOSE("---- Previous Hit ("<< indexPreviousMeasurement <<") Shared"); - } else if (tsosDetails.type[indexPreviousMeasurement] == UnusedHit) { - ATH_MSG_VERBOSE("---- Previous Hit ("<< indexPreviousMeasurement <<") Unused hit"); - } else if (tsosDetails.type[indexPreviousMeasurement] == Outlier) { - ATH_MSG_VERBOSE("---- Previous Hit ("<< indexPreviousMeasurement <<") Outlier"); - } - } - tsosDetails.type[index] = SplitSharedHit; - ++trackHitDetails.numSplitSharedPix; - - // remember the last 2 ROTs - lastbutonerot = lastrot; - lastrot = tsosDetails.RIO[index]; - lastrotindex = index; - continue; - } - } // only split pixel clusters if there are few hole and the tracks have a good score - - ATH_MSG_VERBOSE("---> Pixel cluster is not compatible with being shared (splitProb1 = " - << tsosDetails.splitProb1[index] << "), (splitProb2 = " - << tsosDetails.splitProb2[index] << ") , reject shared hit !!!"); - if ( tsosDetails.hitIsShared[index] >= 2 ) { - TrkCouldBeAccepted = false; // we have to remove at least one PRD - ATH_MSG_DEBUG ("reject track; Too many hits shared - we have to remove at least one PRD 105"); - tsosDetails.type[index] = RejectedHit; - continue; - } + // Is a 3+ particle cluster? + } else if ( isMultiPartClus(tsosDetails.m_splitProb2[index]) ) { + + // can be split, but how many accepted tracks use the hit? + // okay to share + if (tsosDetails.m_hitIsShared[index] < m_maxPixMultiCluster ){ + ATH_MSG_VERBOSE ("---> Pixel cluster is to be split shared with another track: Split Prob2 " << tsosDetails.m_splitProb2[index] ); + tsosDetails.m_type[index] = SplitSharedHit; + ++trackHitDetails.m_numSplitSharedPix; + continue; + } else if(m_shareSplitHits && tsosDetails.m_hitIsShared[index] == m_maxPixMultiCluster) { + // if we allow split hits to also be shared + // - the first m_maxPixMultiCluster cluster get to use it without penalty + // - the m_maxPixMultiCluster+1 cluster gets called shared + ATH_MSG_VERBOSE ("---> Pixel cluster is split, but must be called shared to stay on this track!"); + addSharedHit(trackHitDetails, tsosDetails, index); + continue; + } else { + ATH_MSG_VERBOSE ("---> Pixel split but shared between too many tracks -- will be removed from the track!!!"); + rejectHitOverUse(trackHitDetails, tsosDetails, index); + continue; + } + + } // end of checking number network output + + ATH_MSG_VERBOSE("---> Pixel cluster is not compatible with being shared (splitProb1 = " + << tsosDetails.m_splitProb1[index] << "), (splitProb2 = " + << tsosDetails.m_splitProb2[index] << ") , reject shared hit !!!"); + if ( tsosDetails.m_hitIsShared[index] < m_maxPixOnePartCluster ) { + // this is a shared cluster + addSharedHit(trackHitDetails, tsosDetails, index); + continue; + } else { + ATH_MSG_DEBUG ("reject track; Too many hits shared - we have to remove at least one PRD"); + rejectHitOverUse(trackHitDetails, tsosDetails, index); + continue; } }// End Attempt to recover shared hits - + //===================================================================// + + if( tsosDetails.m_hitIsShared[index] == 0 ) { + ATH_MSG_ERROR("A hit is not shared but is where only shared hits should be"); + } + //For all other shared hits - if ( tsosDetails.hitIsShared[index] > 0 && tsosDetails.hitIsShared[index] < m_maxTracksPerPRD ){ // we do not allow to share with to many tracks + if ( tsosDetails.m_hitIsShared[index] < m_maxTracksPerPRD ){ // we do not allow to share with to many tracks ATH_MSG_VERBOSE ("---> Shared hit, but good track, let's enter hit in the list and try to keep it !"); - ATH_MSG_VERBOSE ("----- Index: "<< index << " Type: " << tsosDetails.detType[index] << " splitprob1 " << tsosDetails.splitProb1[index]); - tsosDetails.type[index] = SharedHit; - ++trackHitDetails.numShared; // increase counter - trackHitDetails.numWeightedShared += (tsosDetails.detType[index]%10== 1 ? 2 : 1); // increase counter - // remember the last 2 ROTs - lastbutonerot = lastrot; - lastrot = tsosDetails.RIO[index]; - lastrotindex = index; - continue; - } else if (tsosDetails.type[index] == Outlier && tsosDetails.hitIsShared[index] <= 0){ + ATH_MSG_VERBOSE ("----- Index: "<< index << " Type: " << tsosDetails.m_detType[index] << " splitprob1 " << tsosDetails.m_splitProb1[index]); + addSharedHit(trackHitDetails, tsosDetails, index); continue; } else { - ATH_MSG_DEBUG ("reject track; Too many hits shared - we have to remove at least one PRD 106"); - TrkCouldBeAccepted = false; // we have to remove at least one PRD - tsosDetails.type[index] = RejectedHit; + ATH_MSG_DEBUG ("reject track; Too many hits shared - we have to remove at least one PRD"); + rejectHitOverUse(trackHitDetails, tsosDetails, index); continue; } - } - - // If there are no hits on track compatible with be being split and are shared - // We will make use of the NN information to determine if we should allow that hit to be shared - /* Don't do this for now - if ( m_doPixelClusterSplitting && trackHitDetails.numSplitSharedPix < 1){ - for (unsigned int index(0); index < tsosDetails.nTSoS; ++index ){ - if ( tsosDetails.type[index] == SharedHit && - tsosDetails.detType[index] % 10 == 1 && - tsosDetails.splitProb1[index] < m_minsharedProbCut && - tsosDetails.splitProb2[index] < m_minsharedProbCut){ - tsosDetails.type[index] = RejectedHit; - trackHitDetails.numShared--; // decrease counter - trackHitDetails.numWeightedShared -= 2; // decrease counter - } - } - } - */ - - // special cut, do not allow the last hit to be to far away or after to many holes - if ( trackHitDetails.isPatternTrack && // pattern track and - trackHitDetails.totalSiHits() > m_minHits && // we have enough hits on the track - ( trackHitDetails.numSCTHoles > 3 || !lastrot || !lastbutonerot - ||(lastrot->globalPosition()-lastbutonerot->globalPosition()).mag()>1000*CLHEP::mm)) { // to many holes or distance cut - ATH_MSG_DEBUG ("Special cut on distance or too many holes, reject last hit on track !"); - tsosDetails.type[lastrotindex] = RejectedHit; - if (tsosDetails.type[lastrotindex] == UnusedHit) { - trackHitDetails.numUnused -= 1; // update counter - } - // mark track as bad ! - TrkCouldBeAccepted = false; - ATH_MSG_DEBUG ("reject track; Special cut on distance or too many holes, reject last hit on track"); - } + ATH_MSG_ERROR("Reached end of TSOS loop without a decision." ); + } // loop over TSOS + //------------------------------------------------------------------// + //------------------------------------------------------------------// + // + // COUNTERS have been set above. From here on, if change the state + // of any hit, must also adjust counters + // + //------------------------------------------------------------------// - // Add up how many hits of each type there are - bool firstMeasurement(true); - for (unsigned int index(0); index <tsosDetails.nTSoS; ++index ){ - // remember if first hit is shared, we need that later - if (firstMeasurement && tsosDetails.type[index] != OtherTsos){ - firstMeasurement = false; - if (tsosDetails.type[index] != SharedHit) trackHitDetails.firstisshared = false; - } - - if (tsosDetails.type[index] == SharedHit ){ - if (tsosDetails.detType[index] == 11 ){ // Blayer - trackHitDetails.hassharedblayer = true; - } else if ( tsosDetails.detType[index] == 1 ){ - trackHitDetails.hassharedpixel = true; - } - } - - if (tsosDetails.type[index] == SharedHit || tsosDetails.type[index] == SplitSharedHit){ - ++trackHitDetails.numSharedOrSplit; - if (tsosDetails.detType[index]%10==1){ - ++trackHitDetails.numSharedOrSplitPixels; - trackHitDetails.averageSplit1 += tsosDetails.splitProb1[index]; - trackHitDetails.averageSplit2 += tsosDetails.splitProb2[index]; - } - } - + //------------------------------------------------------------------// + // Check if the pair is compatible with being a light particle decay + // This focuses on conversions + // The track in question must + // - have an overlapping hit with an accepted track + // - those two track have a small separation + // + trackHitDetails.m_passConversionSel = false; // make sure off to start + if (m_doPairSelection && tsosDetails.m_overlappingTracks.size() > 0) { + trackHitDetails.m_passConversionSel = performConversionCheck(ptrTrack, + prd_to_track_map, trackHitDetails, tsosDetails, ent); + } + // if pass conversion selection, don't mess with it further + if( trackHitDetails.m_passConversionSel ) { return; } + //------------------------------------------------------------------// - if ( tsosDetails.detType[index]==2 && tsosDetails.type[index] == UnusedHit ){ - ++trackHitDetails.numSCT_Unused; + + //------------------------------------------------------------------// + // + // Three cuts which can pull shared hits off of the track (no order) + // 1. min unique SCT hits to share hits + // 2. min chi2/ndf to share hits + // + // We shared SCT hits when we don't really have enough to share + // Reject SCT shared hits on the track + if ( trackHitDetails.m_numSCT_Unused != trackHitDetails.m_numSCTHits && // have shared SCT + trackHitDetails.m_numSCT_Unused < m_minUniqueSCTHits ){ + for (unsigned int index( 0 ); index > tsosDetails.m_nTSoS; ++index ){ + if ( tsosDetails.m_detType[index]==2 && tsosDetails.m_type[index] == SharedHit){ + rejectSharedHit(trackHitDetails, tsosDetails, index); + } } } - // Calculate average pixel split prob for all of those pixels that are either shared or want to be shared - if (trackHitDetails.numSharedOrSplitPixels > 0 ){ - trackHitDetails.averageSplit1/=trackHitDetails.numSharedOrSplitPixels; - trackHitDetails.averageSplit2/=trackHitDetails.numSharedOrSplitPixels; - } + // Cut on chi2/NDF if shared hits on track + // if fail cuts, remove all shared hits and reject track + if ( !trackHitDetails.m_isPatternTrack && trackHitDetails.m_numShared > 0) { + double trackchi2 = 0; + if (ptrTrack->fitQuality() && ptrTrack->fitQuality()->numberDoF()>0 ) { + trackchi2 = ptrTrack->fitQuality()->chiSquared()/ptrTrack->fitQuality()->numberDoF(); + } + + // if track fails cut for shared hits, remove the shared hits + if ( trackchi2 > m_minTrackChi2ForSharedHits ) { + ATH_MSG_DEBUG ("Shared hits, we have a bad chi2 track, mark it as bad !"); + // remove shared hits and see if track survives + for (unsigned int index( 0 ); index > tsosDetails.m_nTSoS; ++index ){ + if ( tsosDetails.m_type[index] != SharedHit ) { continue; } + rejectSharedHit(trackHitDetails, tsosDetails, index); + } + } // fails cut + } // is not a pattern track and has shared hits + + //------------------------------------------------------------------// - // Check if the pair is compatible with being a light particle decay - bool passPairSelection =false; - if (m_doPairSelection){ - - //Find the accepted track that shares the most hits our proposed track - const Trk::Track* mostOverlappingTrack(0); - int mostOverlappingNumberOfHits(0); - int indexOfFirstOverlappingHit(0); - for ( std::multimap<const Trk::Track*,int>::iterator it = tsosDetails.overlappingTracks.begin(), end = tsosDetails.overlappingTracks.end(); - it != end; it = tsosDetails.overlappingTracks.upper_bound(it->first)) { - int numberOfHitsSharedWithThisTrack = std::distance( it, tsosDetails.overlappingTracks.upper_bound(it->first)); - ATH_MSG_DEBUG(it->first <<" shares " << numberOfHitsSharedWithThisTrack << " hits with this track " ); - if (mostOverlappingNumberOfHits < numberOfHitsSharedWithThisTrack){ - mostOverlappingNumberOfHits = numberOfHitsSharedWithThisTrack; - mostOverlappingTrack = it->first; - indexOfFirstOverlappingHit = it->second; + //------------------------------------------------------------------// + // Check accepted tracks with the surviving list of shared hits + // Remove shared hits which push track over shared module cut + // Set flags + // + // add up weighted count of shared hits on track, start removing + // hits after counter is above cut. This preferences inner hits + int newNumWeightedShared = 0; // tmp counter + bool firstMeasurement(true); + trackHitDetails.m_firstPixIsShared = false; + // was already set in fillTrackDetails, but set again depending if blayer was rejected or not + trackHitDetails.m_thisHasIBLHit = false; + for (unsigned int index(0); index <tsosDetails.m_nTSoS; ++index ){ + + // don't count rejected hits when setting flags + if (tsosDetails.m_type[index] == RejectedHitOverUse || + tsosDetails.m_type[index] == RejectedHitInvalid || + tsosDetails.m_type[index] == RejectedHit ){ continue; } + + // Any track which is still labeled as SharedHit has to be checked + // against the accepted tracks. Accepted track should not be pushed + // above cuts imposed here, some historic cuts remain + if (tsosDetails.m_type[index] == SharedHit) { + + int maxiShared = -1; + int maxOtherNPixel = 0; + bool maxOtherHasIBL = false; + bool otherPassMinUniqueHits = checkOtherTracksValidity( tsosDetails, index, + splitProbContainer, prd_to_track_map, maxiShared, maxOtherNPixel, + maxOtherHasIBL, ent); + + if (!otherPassMinUniqueHits) { + ATH_MSG_DEBUG ("reject track; Tracks shared hits does not leave enough unique hits on accepted track"); + rejectSharedHitInvalid(trackHitDetails, tsosDetails, index); + continue; } - } - //If an overlapping track if found get the track parameters on the first shared surface - if ( mostOverlappingTrack ){ - auto tpPair = getOverlapTrackParameters(indexOfFirstOverlappingHit, ptrTrack, mostOverlappingTrack, prd_to_track_map, trackHitDetails.numSplitSharedPix ); - if (tpPair.first && tpPair.second){ - // Check if both tracks are above threshold - bool passPt = tpPair.first->pT() > m_minPairTrackPt && tpPair.second->pT() > m_minPairTrackPt; - //Check if it is in a ROI - trackHitDetails.inROI = m_useEmClusSeed && isEmCaloCompatible( *tpPair.first, ent ); - //If it is then See if it passes the pair selection - if ( passPt && (!m_useEmClusSeed || trackHitDetails.inROI) ){ - passPairSelection = isNearbyTrackCandidate(tpPair.first, tpPair.second ); - if ( mostOverlappingNumberOfHits >= 2 && mostOverlappingNumberOfHits >= trackHitDetails.numShared){ - passPairSelection = true; - } + // + // do not allow other accepted track to exceed the shared limit... + // ...IF first pixel hit is shared (historic cut) + // NOTE: here "pixel" includes IBL + // tightening cut by dropping shared hit clause impacts performance in high pT jet cores + if( maxiShared >= ent->m_maxSharedModules ){ + + // if this is the first hit (it is shared), and a pixel, reject + if( (tsosDetails.m_detType[index] % 10 == 1) && firstMeasurement ) { + ATH_MSG_DEBUG ("reject track; Tracks shared hits pushes accepted track above shared module limit"); + rejectSharedHitInvalid(trackHitDetails, tsosDetails, index); + continue; } - if (passPairSelection) ATH_MSG_DEBUG ("Possible photon conversion"); - } else if ( trackHitDetails.isPatternTrack - && mostOverlappingNumberOfHits >= 2 - && mostOverlappingNumberOfHits >= trackHitDetails.numShared){ - ATH_MSG_DEBUG ("Possible photon conversion - for pattern track"); - trackHitDetails.inROI = true; - passPairSelection = true; + // if first pixel was shared (and this is not that hit) + if( trackHitDetails.m_firstPixIsShared ) { + ATH_MSG_DEBUG ("reject track; Tracks shared hits pushes accepted track above shared module limit"); + rejectSharedHitInvalid(trackHitDetails, tsosDetails, index); + continue; + } + + // unlinked (no truth particle) tracks tend to have low hit counts + // don't let track that look like this touch accepted tracks (new) + if( trackHitDetails.totalPixelHits() < m_minPixHitAccepted ) { + rejectSharedHitInvalid(trackHitDetails, tsosDetails, index); + continue; + } + + } // accepted track exceeds shared module cuts + + + // + // only allow shared pixel if both have IBL or both not (historic cut) + // if this is IBL hit, and other does not have IBL hit, remove shared IBL hit + if( tsosDetails.m_detType[index] == 11 && !maxOtherHasIBL ) { + ATH_MSG_VERBOSE ("---> Remove shared IBL as MaxShared accepted does not have an IBL hit"); + rejectSharedHit(trackHitDetails, tsosDetails, index); + continue; + } + // if this is pixel hit, and candidate does not match IBL content of MaxShared accepted, remove shared hit + if(tsosDetails.m_detType[index] == 1 && (trackHitDetails.m_thisHasIBLHit != maxOtherHasIBL) ) { + ATH_MSG_VERBOSE ("---> Only allow shared pixel if candidate and accepted have same IBL hit content"); + rejectSharedHit(trackHitDetails, tsosDetails, index); + continue; } - } + // number of shared modules to be added to new sub-track + // add shared hit to temporary counter + newNumWeightedShared += (tsosDetails.m_detType[index]%10== 1 ? 2 : 1); // increase counter + // should remain beow the threshold + if (newNumWeightedShared >= ent->m_maxSharedModules) { + ATH_MSG_VERBOSE ("-> Too many share hits, dropping outer hit(s) " + << newNumWeightedShared << "\t" << ent->m_maxSharedModules); + newNumWeightedShared -= (tsosDetails.m_detType[index]%10== 1 ? 2 : 1); // decrease counter + rejectSharedHit(trackHitDetails, tsosDetails, index); + continue; + } - ATH_MSG_DEBUG ("Number of unused SCT hits: " << trackHitDetails.numSCT_Unused); - ATH_MSG_DEBUG ("The track has "<< trackHitDetails.numSharedOrSplit << " shared hits. Track "<< mostOverlappingTrack << " shares " << mostOverlappingNumberOfHits ); - ATH_MSG_DEBUG ("The track has "<< trackHitDetails.numSharedOrSplitPixels << " shared pixel hits. Average splitProb1 "<< trackHitDetails.averageSplit1 << " splitProb2 " << trackHitDetails.averageSplit2 ); + //------------------------------------------// + // if still shared and not rejected by above, set flags + if( tsosDetails.m_detType[index] % 10 == 1 ) { + if (firstMeasurement) { + trackHitDetails.m_firstPixIsShared = true; + } + if (tsosDetails.m_detType[index] == 11 ){ // Blayer + trackHitDetails.m_hasSharedIBLHit = true; + } else if ( tsosDetails.m_detType[index] == 1 ){ + trackHitDetails.m_hasSharedPixel = true; // historic definition + } + } // pixel hit + } // if shared - //Keep photon conversions - if ( passPairSelection && // Track pair must be neutral and pass preselection - trackHitDetails.numSCT_Unused >= m_minUniqueSCTHits && trackHitDetails.numPixelHoles + trackHitDetails.numSCTHoles < 2) { // We need to have a good number of unshared SCT hits + if (tsosDetails.m_detType[index] == 11 ){ // Blayer + trackHitDetails.m_thisHasIBLHit = true; + } + if (firstMeasurement && tsosDetails.m_type[index] != OtherTsos){ firstMeasurement = false; } - //Change all shared SCT and Pixel hits to SplitSharedHit - //Need to double check consequence of having split shared SCT hits - ATH_MSG_VERBOSE ("Updating SCT hit information"); - trackHitDetails.numSplitSharedSCT = 0; // reset counter - trackHitDetails.numShared = 0; // reset counter - trackHitDetails.numWeightedShared = 0; // reset counter + } // loop over TSOS + //------------------------------------------------------------------// - trackHitDetails.hassharedblayer = false; - trackHitDetails.hassharedpixel = false; + if (msgLvl(MSG::VERBOSE)){ + trackHitDetails.dumpInfo(); + } + + return; +} // decideWhichHitsToKeep - //Update counts but only allow 1 pixel hit to be updated free of charge - int noUpdatedPixels = 0; +//========================================================================================== - for (unsigned int index(0); index < tsosDetails.nTSoS; ++index ){ - // Dont change blayer only pixel hits -- all other shared hits become splitshared - if ( noUpdatedPixels < 1 && tsosDetails.detType[index]==1 && tsosDetails.type[index] == SharedHit ){ - ++noUpdatedPixels; - tsosDetails.type[index] = SplitSharedHit; - } +// GOAL: Do not kill conversions in the ambi +bool InDet::InDetDenseEnvAmbiTrackSelectionTool::performConversionCheck(const Trk::Track* ptrTrack, + Trk::PRDtoTrackMap &prd_to_track_map, + TrackHitDetails& trackHitDetails, + TSoS_Details& tsosDetails, + CacheEntry* ent) const +{ + ATH_MSG_DEBUG(" Conversion Check "); + + // We need to have a good number of unshared SCT hits + if ( trackHitDetails.m_numSCT_Unused < m_minUniqueSCTHits ) { return false; } + if ( trackHitDetails.m_numPixelHoles + trackHitDetails.m_numSCTHoles >= 2) { return false; } + + //Find the accepted track that shares the most hits our proposed track + const Trk::Track* mostOverlappingTrack(0); + int mostOverlappingNumberOfHits(0); + int indexOfFirstOverlappingHit(0); + for ( std::multimap<const Trk::Track*,int>::iterator it = tsosDetails.m_overlappingTracks.begin(), + end = tsosDetails.m_overlappingTracks.end(); it != end; + it = tsosDetails.m_overlappingTracks.upper_bound(it->first) ) { + int numberOfHitsSharedWithThisTrack = std::distance( it, tsosDetails.m_overlappingTracks.upper_bound(it->first)); + ATH_MSG_DEBUG(it->first <<" shares " << numberOfHitsSharedWithThisTrack << " hits with this track " ); + if (mostOverlappingNumberOfHits < numberOfHitsSharedWithThisTrack){ + mostOverlappingNumberOfHits = numberOfHitsSharedWithThisTrack; + mostOverlappingTrack = it->first; + indexOfFirstOverlappingHit = it->second; + } + } // loop over overlapping tracks - if ( tsosDetails.detType[index]==1 && tsosDetails.type[index] == SplitSharedHit ){ - ++trackHitDetails.numSplitSharedPix; - } + if(!mostOverlappingTrack) { return false; } - if ( tsosDetails.detType[index]==2 && tsosDetails.type[index] == SharedHit ){ - tsosDetails.type[index] = SplitSharedHit; - } + // criteria applied for fitted and pattern tracks + if(mostOverlappingNumberOfHits < 2) { return false; } + if(mostOverlappingNumberOfHits < trackHitDetails.m_numShared) { return false; } - if ( tsosDetails.detType[index]==2 && tsosDetails.type[index] == SplitSharedHit ){ - ++trackHitDetails.numSplitSharedSCT; - } - if (tsosDetails.type[index] == SharedHit){ - trackHitDetails.numShared++; // increase counter - trackHitDetails.numWeightedShared += (tsosDetails.detType[index] % 10 == 1 ? 2 : 1); // increase counter - if (tsosDetails.detType[index] == 11){ - trackHitDetails.hassharedblayer = true; - trackHitDetails.hassharedpixel = true; - } - } - } + //If an overlapping track if found get the track parameters on the first shared surface + auto tpPair = getOverlapTrackParameters(indexOfFirstOverlappingHit, ptrTrack, mostOverlappingTrack, prd_to_track_map, trackHitDetails.m_numSplitSharedPix ); + + // If found track parameters at first overlapping track, check separation + if (tpPair.first && tpPair.second) { + // Check a series of criteria to see if track is a compatible with a photon conversion + // Check if both tracks are above threshold + if(tpPair.first->pT() <= m_minPairTrackPt || tpPair.second->pT() <= m_minPairTrackPt) { + return false; } - } - - if (trackHitDetails.numSCT_Unused < m_minUniqueSCTHits - && trackHitDetails.numSplitSharedSCT > 0){ - ATH_MSG_VERBOSE ("Track has too few unique SCT hits - changing split shared back to shared in SCT"); - for (unsigned int index( tsosDetails.nTSoS - 1 ); index != 0 ; --index ){ - //if ( tsosDetails.detType[index]==2 && tsosDetails.type[index] == SplitSharedHit){ - if ( tsosDetails.detType[index]==2 && tsosDetails.type[index] == SplitSharedHit && tsosDetails.splitProb1[index] < 0.1 ){ //WPM - tsosDetails.type[index] =SharedHit; - --trackHitDetails.numSplitSharedSCT; - ++trackHitDetails.numShared; // increase counter - ++trackHitDetails.numWeightedShared; // increase counter - } - - if ( trackHitDetails.numSplitSharedSCT == 0){ - break; - } + //Check if it is in a ROI, if requested + if(m_useEmClusSeed) { + if(!isEmCaloCompatible( *tpPair.first, ent )) { return false; } } + ATH_MSG_DEBUG ("Possible photon conversion"); } - - // We shared SCT hits when we don't really have enough to share - // Reject SCT shared hits - if ( trackHitDetails.numSCT_Unused != trackHitDetails.numSCTHits && - trackHitDetails.numSCTHits <= m_minUniqueSCTHits ){ - - for (unsigned int index( 0 ); index > tsosDetails.nTSoS; ++index ){ - //if ( tsosDetails.detType[index]==2 && tsosDetails.type[index] == SharedHit){ - if ( tsosDetails.detType[index]==2 && tsosDetails.type[index] == SharedHit && tsosDetails.splitProb1[index] < 0.1 ){ //WPM - tsosDetails.type[index] = RejectedHit; - trackHitDetails.numShared--; // decrease counter - trackHitDetails.numWeightedShared--; // decrease counter - } + // for pattern tracks, cannot get the track parameters at a hit position + // Need an alternate way to find conversion, try to use the accepted track + // Main point is to not kill the pattern track + else if ( trackHitDetails.m_isPatternTrack ) { + if(m_useEmClusSeed && tpPair.second ) { + if(!isEmCaloCompatible( *tpPair.second, ent )) { return false; } } + ATH_MSG_DEBUG ("Possible photon conversion - for pattern track"); } - - // get chi2/NDF, if track is fitted - if ( !trackHitDetails.isPatternTrack ) { - double trackchi2 = 0; - if (ptrTrack->fitQuality() && ptrTrack->fitQuality()->numberDoF()>0 ) { - trackchi2 = ptrTrack->fitQuality()->chiSquared()/ptrTrack->fitQuality()->numberDoF(); + // if cannot find track parameters, and not a pattern track, then failed + else { + return false; + } + + ATH_MSG_DEBUG ("Number of unused SCT hits: " << trackHitDetails.m_numSCT_Unused); + if (msgLvl(MSG::DEBUG)){ + trackHitDetails.dumpInfo(); + } + ATH_MSG_DEBUG ("Track "<< mostOverlappingTrack << " shares " << mostOverlappingNumberOfHits ); + + + //Change all shared SCT to SplitSharedHit + //Change some shared Pix to SplitSharedHit + ATH_MSG_VERBOSE ("Updating SCT hit information"); + trackHitDetails.m_numSplitSharedPix = 0; // reset counter + trackHitDetails.m_numSplitSharedSCT = 0; // reset counter + trackHitDetails.m_numShared = 0; // reset counter + trackHitDetails.m_numSCT_Shared = 0; // reset counter + trackHitDetails.m_numWeightedShared = 0; // reset counter + + trackHitDetails.m_hasSharedIBLHit = false; // reset flag + trackHitDetails.m_hasSharedPixel = false; // reset flag + + //Update counts but only allow 1 pixel hit to be updated free of charge + int noUpdatedPixels = 0; + + for (unsigned int index(0); index < tsosDetails.m_nTSoS; ++index ){ + // Dont change blayer only pixel hits -- all other shared hits become splitshared + if ( noUpdatedPixels < 1 && tsosDetails.m_detType[index]==1 && tsosDetails.m_type[index] == SharedHit ){ + ++noUpdatedPixels; + tsosDetails.m_type[index] = SplitSharedHit; + } + + if ( tsosDetails.m_detType[index]==1 && tsosDetails.m_type[index] == SplitSharedHit ){ + ++trackHitDetails.m_numSplitSharedPix; + } + + if ( tsosDetails.m_detType[index]==2 && tsosDetails.m_type[index] == SharedHit ){ + tsosDetails.m_type[index] = SplitSharedHit; } - // if we have share hits and this is a bad track, we reject it - if ( trackHitDetails.numShared > 0 && trackchi2 > m_minTrackChi2ForSharedHits ) { - ATH_MSG_DEBUG ("Shared hits, we have a bad chi2 track, mark it as bad !"); - // mark track as bad ! - TrkCouldBeAccepted = false; - ATH_MSG_DEBUG ("reject track; Shared hits, we have a bad chi2 track"); + if ( tsosDetails.m_detType[index]==2 && tsosDetails.m_type[index] == SplitSharedHit ){ + ++trackHitDetails.m_numSplitSharedSCT; } - } + // only change shared hits + // m_numUnused and m_numSCT_Unused are not changed from this + if (tsosDetails.m_type[index] != SharedHit){ continue; } - // numTRT cut, special for back tracking - if ( trackHitDetails.numTRT_Unused < nCutTRT) { - ATH_MSG_DEBUG ("Track fails TRT hit cut, mark it as bad !"); - // mark track as bad ! - TrkCouldBeAccepted = false; - ATH_MSG_DEBUG ("reject track; Track fails TRT hit cut, mark it as bad"); - } - - // Check to see if we should reject it on the basis it will mess up another track - if (TrkCouldBeAccepted && trackHitDetails.numWeightedShared > 0){ - ATH_MSG_DEBUG ("Track has shared hits check to if sharing this hit will mess up an accepted track"); - for (unsigned int index(0); index < tsosDetails.nTSoS; ++index ){ - if (tsosDetails.type[index] == SharedHit){ - - int maxiShared = -1; - int maxothernpixel = 0; - bool maxotherhasblayer = false; - bool otherfailsMinUniqueHits = false; - bool isSplitable = tsosDetails.splitProb1[index] >= m_sharedProbCut || tsosDetails.splitProb2[index] >= m_sharedProbCut2; - int numberOfTracksWithThisPrd = checkOtherTracksValidity( tsosDetails.RIO[index], - isSplitable, - splitProbContainer, - prd_to_track_map, - maxiShared, - maxothernpixel, - maxotherhasblayer, - otherfailsMinUniqueHits, - ent); - - if (numberOfTracksWithThisPrd > 0 && ( otherfailsMinUniqueHits || maxiShared >= ent->m_maxShared )){ - TrkCouldBeAccepted = false; - ATH_MSG_DEBUG ("reject track; Tracks shared hits will mess up an accepted track"); - tsosDetails.type[index] = RejectedHit; - trackHitDetails.numShared--; // decrease counter - trackHitDetails.numWeightedShared -= (tsosDetails.detType[index]%10== 1 ? 2 : 1); // increase counter - } - } + increaseSharedHitCounters( trackHitDetails, + (tsosDetails.m_detType[index]%10 == 1), + (tsosDetails.m_detType[index]%10 == 2) ); + + // set flags + if (tsosDetails.m_detType[index] == 11){ + trackHitDetails.m_hasSharedIBLHit = true; + } else if ( tsosDetails.m_detType[index] == 1 ){ + trackHitDetails.m_hasSharedPixel = true; } - } + + } // loop over TSOS - if (msgLvl(MSG::VERBOSE)){ - trackHitDetails.dumpInfo(); - } - - return TrkCouldBeAccepted; -} + return true; +} // performConversionCheck //========================================================================================== @@ -1249,10 +1284,8 @@ Trk::Track* InDet::InDetDenseEnvAmbiTrackSelectionTool::createSubTrack( const st DataVector<const Trk::TrackStateOnSurface>* vecTsos = new DataVector<const Trk::TrackStateOnSurface>(); // loop over TSOS, copy TSOS and push into vector - DataVector<const Trk::TrackStateOnSurface>::const_iterator iTsos = tsos.begin(); - DataVector<const Trk::TrackStateOnSurface>::const_iterator iTsosEnd = tsos.end(); - for ( ; iTsos != iTsosEnd ; ++iTsos) { - const Trk::TrackStateOnSurface* newTsos = new Trk::TrackStateOnSurface(**iTsos); + for (const Trk::TrackStateOnSurface* iTsos : tsos) { + const Trk::TrackStateOnSurface* newTsos = new Trk::TrackStateOnSurface(*iTsos); vecTsos->push_back(newTsos); } @@ -1273,14 +1306,14 @@ void InDet::InDetDenseEnvAmbiTrackSelectionTool::setPixelClusterSplitInformation Trk::ClusterSplitProbabilityContainer &splitProbContainer) const { - for (unsigned int index(0); index < tsosDetails.nTSoS; ++index ){ + for (unsigned int index(0); index < tsosDetails.m_nTSoS; ++index ){ //Only consider split shared hits - if (tsosDetails.type[index] != SplitSharedHit) + if (tsosDetails.m_type[index] != SplitSharedHit) continue; // And the hit is a pixel hit - if (tsosDetails.detType[index]%10 == 1){ - const InDet::PixelCluster* pixelCluster = dynamic_cast<const InDet::PixelCluster*> ( tsosDetails.RIO[index]->prepRawData() ); + if (tsosDetails.m_detType[index]%10 == 1){ + const InDet::PixelCluster* pixelCluster = dynamic_cast<const InDet::PixelCluster*> ( tsosDetails.m_RIO[index]->prepRawData() ); if (pixelCluster){ Trk::ClusterSplitProbabilityContainer::ProbabilityInfo *splitProb = splitProbContainer.getSplitProbability(pixelCluster); if (!splitProb) { @@ -1295,6 +1328,17 @@ void InDet::InDetDenseEnvAmbiTrackSelectionTool::setPixelClusterSplitInformation } +//========================================================================================== +bool InDet::InDetDenseEnvAmbiTrackSelectionTool::inHadronicROI(const Trk::Track* ptrTrack, + CacheEntry* ent) const +{ + + if ( !ptrTrack->trackParameters()->front() ){ return false; } + // above pT for ROI? + if ( ptrTrack->trackParameters()->front()->pT() < m_minPtBjetROI ) { return false; } + + return isHadCaloCompatible(*ptrTrack->trackParameters()->front(), ent); +} //========================================================================================== bool InDet::InDetDenseEnvAmbiTrackSelectionTool::isHadCaloCompatible(const Trk::TrackParameters& Tp, CacheEntry* ent) const { @@ -1375,11 +1419,15 @@ std::pair<const Trk::TrackParameters*, const Trk::TrackParameters*> InDet::InDetDenseEnvAmbiTrackSelectionTool::getOverlapTrackParameters(int index, const Trk::Track* track1, const Trk::Track* track2, const Trk::PRDtoTrackMap &prd_to_track_map, - int SplitSharedPix ) const + int splitSharedPix ) const { auto returnPair = std::make_pair<const Trk::TrackParameters*,const Trk::TrackParameters*>(0,0); + // + // Get the TSOS in question from the candidate track since we know which one it is (index) + // Do some basic checks + // const DataVector<const Trk::TrackStateOnSurface>* track1tsos = track1->trackStateOnSurfaces(); auto firstTsos = track1tsos->begin(); @@ -1402,13 +1450,10 @@ InDet::InDetDenseEnvAmbiTrackSelectionTool::getOverlapTrackParameters(int index, return returnPair; } - if (!(*firstTsos)->trackParameters()){ - ATH_MSG_DEBUG("There are no TrackParameters on this TSOS"); - return returnPair; - } - - returnPair.first = (*firstTsos)->trackParameters(); + // + // now, get TSOS from 2nd track which is the one already accepted + // we know it was fitted so this should be possible const DataVector<const Trk::TrackStateOnSurface>* track2tsos = track2->trackStateOnSurfaces(); auto iTsos = track2tsos->begin(); @@ -1416,7 +1461,8 @@ InDet::InDetDenseEnvAmbiTrackSelectionTool::getOverlapTrackParameters(int index, int measurementsBeforeShared = 0; for (; iTsos != iTsosEnd ; ++iTsos) { - if (measurementsBeforeShared > 1 + SplitSharedPix ){ + // only compare to number of split hits? Why not shared also for NN inefficienicies + if (measurementsBeforeShared > 1 + splitSharedPix ){ ATH_MSG_DEBUG("Too many hits to before shared hit -- unlikely they are from the same thing"); return returnPair; } @@ -1445,49 +1491,106 @@ InDet::InDetDenseEnvAmbiTrackSelectionTool::getOverlapTrackParameters(int index, } returnPair.second = (*iTsos)->trackParameters(); - ATH_MSG_DEBUG("Success! got both track parameters "<< returnPair.first<< " " << returnPair.second ); - return returnPair; + ATH_MSG_DEBUG("Success! track parameters for accepted track " << returnPair.second ); + break; } - - - ATH_MSG_DEBUG("Failed! got both track parameters"); - return returnPair; - -} - - -bool InDet::InDetDenseEnvAmbiTrackSelectionTool::isNearbyTrackCandidate(const Trk::TrackParameters* paraA, const Trk::TrackParameters* paraB ) const -{ - bool pass = true; - - //Only require opposite charge for is using EM clusters -- more photon like - //if (m_useEmClusSeed && paraA->charge() * paraB->charge() > 0 ) - // pass = false; - double dlocalX = paraA->parameters()[Trk::locX] - paraB->parameters()[Trk::locX]; - double dlocalY = paraA->parameters()[Trk::locY] - paraB->parameters()[Trk::locY]; - + // + // Now let's see if we have TPs for the candidate track + // - double dPhi = paraA->parameters()[Trk::phi] - paraB->parameters()[Trk::phi]; - if (dPhi > M_PI) dPhi -= 2* M_PI; - if (dPhi < -M_PI) dPhi += 2* M_PI; - - double dEta = std::fabs(1./std::tan(paraA->parameters()[Trk::theta]) - 1./std::tan(paraB->parameters()[Trk::theta])); - - if (std::fabs(dlocalX) > m_pairDeltaX || std::fabs(dlocalY) > m_pairDeltaY || std::fabs(dPhi) > m_pairDeltaPhi || std::fabs(dEta) > m_pairDeltaEta) - pass = false; + if (!(*firstTsos)->trackParameters()){ + ATH_MSG_DEBUG("There are no TrackParameters on this TSOS"); + return returnPair; + } + returnPair.first = (*firstTsos)->trackParameters(); - //double d_beta = (paraA->momentum().dot(paraB->momentum()))/(paraA->momentum().mag()*paraB->momentum().mag()); - ATH_MSG_DEBUG("Conv? Charge: "<<paraA->charge() * paraB->charge() - <<" dX: " << dlocalX - <<" dy: " << dlocalY - <<" dphi: " << dPhi - <<" dEta: " << dEta - <<" pass: " << pass); + ATH_MSG_DEBUG("Success! track parameters for both tracks " << returnPair.first<< " " << returnPair.second ); - return pass; + return returnPair; + +} + +//============================================================================================ +// +inline bool InDet::InDetDenseEnvAmbiTrackSelectionTool::clusCanBeSplit(float splitProb1, float splitProb2) const +{ + return ( isTwoPartClus(splitProb1, splitProb2) || isMultiPartClus(splitProb2) ); +} +inline bool InDet::InDetDenseEnvAmbiTrackSelectionTool::isTwoPartClus(float splitProb1, float splitProb2) const +{ + return ( (splitProb1 >= m_sharedProbCut) && (splitProb2 < m_sharedProbCut2) ); } +inline bool InDet::InDetDenseEnvAmbiTrackSelectionTool::isMultiPartClus(float splitProb2) const +{ + return ( splitProb2 >= m_sharedProbCut2 ); +} +//============================================================================================ +// +//============================================================================================ +inline void InDet::InDetDenseEnvAmbiTrackSelectionTool::rejectHitOverUse(TrackHitDetails& trackHitDetails, + TSoS_Details& tsosDetails, int index) const { + trackHitDetails.m_trkCouldBeAccepted = false; // we have to remove at least one PRD + tsosDetails.m_type[index] = RejectedHitOverUse; + return; +} +inline void InDet::InDetDenseEnvAmbiTrackSelectionTool::rejectHit(TrackHitDetails& trackHitDetails, + TSoS_Details& tsosDetails, int index) const { + trackHitDetails.m_trkCouldBeAccepted = false; // we have to remove at least one PRD + tsosDetails.m_type[index] = RejectedHit; + return; +} +// used after counters have been set +inline void InDet::InDetDenseEnvAmbiTrackSelectionTool::rejectSharedHit(TrackHitDetails& trackHitDetails, + TSoS_Details& tsosDetails, int index) const { + rejectHit(trackHitDetails, tsosDetails, index); // reject + decreaseSharedHitCounters( trackHitDetails, + (tsosDetails.m_detType[index]%10 == 1), + (tsosDetails.m_detType[index]%10 == 2) ); + return; +} +// used after counters have been set +inline void InDet::InDetDenseEnvAmbiTrackSelectionTool::rejectSharedHitInvalid(TrackHitDetails& trackHitDetails, + TSoS_Details& tsosDetails, int index) const { + trackHitDetails.m_trkCouldBeAccepted = false; + tsosDetails.m_type[index] = RejectedHitInvalid; // do not use rejectHit function since use this flag + decreaseSharedHitCounters( trackHitDetails, + (tsosDetails.m_detType[index]%10 == 1), + (tsosDetails.m_detType[index]%10 == 2) ); + return; +} +// used after counters have been set +inline void InDet::InDetDenseEnvAmbiTrackSelectionTool::sharedToSplitPix(TrackHitDetails& trackHitDetails, + TSoS_Details& tsosDetails, int index) const { + // from shared + decreaseSharedHitCounters( trackHitDetails, true, false ); // isPix=true + // to split + tsosDetails.m_type[index] = SplitSharedHit; + trackHitDetails.m_numSplitSharedPix++; + return; +} +inline void InDet::InDetDenseEnvAmbiTrackSelectionTool::addSharedHit(TrackHitDetails& trackHitDetails, + TSoS_Details& tsosDetails, int index) const { + tsosDetails.m_type[index] = SharedHit; + increaseSharedHitCounters( trackHitDetails, (tsosDetails.m_detType[index]%10 == 1), (tsosDetails.m_detType[index]%10 == 2) ); + return; +} +inline void InDet::InDetDenseEnvAmbiTrackSelectionTool::increaseSharedHitCounters(TrackHitDetails& trackHitDetails, bool isPix, bool isSCT) const { + trackHitDetails.m_numShared++; // increase counter + trackHitDetails.m_numWeightedShared += (isPix ? 2 : 1); // increase counter + // protect from TRT hits (needed?) + if( isSCT ) { trackHitDetails.m_numSCT_Shared++; } + return; +} +inline void InDet::InDetDenseEnvAmbiTrackSelectionTool::decreaseSharedHitCounters(TrackHitDetails& trackHitDetails, bool isPix, bool isSCT) const { + trackHitDetails.m_numShared--; // decrease counter + trackHitDetails.m_numWeightedShared -= (isPix ? 2 : 1); // increase counter + // protect from TRT hits (needed?) + if( isSCT ) { trackHitDetails.m_numSCT_Shared--; } + return; +} +//============================================================================================ diff --git a/InnerDetector/InDetRecTools/InDetAssociationTools/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetAssociationTools/CMakeLists.txt index 12c507091b8d6ba37afcf738fbd4fa771c1c2ff2..839cd9ba398ddce34a03de957e21c12cea553996 100644 --- a/InnerDetector/InDetRecTools/InDetAssociationTools/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetAssociationTools/CMakeLists.txt @@ -1,33 +1,10 @@ -################################################################################ -# Package: InDetAssociationTools -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetAssociationTools ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - DetectorDescription/Identifier - GaudiKernel - InnerDetector/InDetRecEvent/InDetPrepRawData - Tracking/TrkEvent/TrkPrepRawData - Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkEvent/TrkEventUtils - PRIVATE - DetectorDescription/AtlasDetDescr - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - Tracking/TrkDetDescr/TrkDetElementBase - Tracking/TrkEvent/TrkRIO_OnTrack - Tracking/TrkEvent/TrkTrack ) - # Component(s) in the package: atlas_add_component( InDetAssociationTools src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps Identifier GaudiKernel InDetPrepRawData TrkPrepRawData TrkToolInterfaces AtlasDetDescr InDetIdentifier InDetRIO_OnTrack TrkDetElementBase TrkRIO_OnTrack TrkTrack TrkEventUtils ) - -# Install files from the package: -atlas_install_headers( InDetAssociationTools ) - + LINK_LIBRARIES AthenaBaseComps Identifier GaudiKernel InDetPrepRawData TrkPrepRawData TrkToolInterfaces AtlasDetDescr InDetIdentifier InDetRIO_OnTrack InDetReadoutGeometry StoreGateLib TrkDetElementBase TrkRIO_OnTrack TrkTrack TrkEventUtils ) diff --git a/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/CMakeLists.txt index b4e81d934322cd3a1660f120a8ecb2502a7689c5..00c34aca4f9ceadee6bae0bfbf7fa32d0c817fff 100644 --- a/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/CMakeLists.txt @@ -1,10 +1,7 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -# Package: InDetBoundaryCheckTool -# Declare the package name -atlas_subdir( - InDetBoundaryCheckTool -) +# Declare the package name: +atlas_subdir( InDetBoundaryCheckTool ) # Component(s) in the package: atlas_add_component( @@ -12,18 +9,11 @@ atlas_add_component( src/*.cxx src/components/*.cxx LINK_LIBRARIES - AthenaBaseComps - GaudiKernel - TrkParameters + AthenaBaseComps + GeoModelInterfaces + TrkParameters TrkToolInterfaces - TrkTrack InDetReadoutGeometry InDetConditionsSummaryService InDetRecToolInterfaces ) - -# Install files from the package: -atlas_install_headers( - InDetBoundaryCheckTool -) - diff --git a/InnerDetector/InDetRecTools/InDetCaloClusterROIBuilder/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetCaloClusterROIBuilder/CMakeLists.txt index e753837804c1987856511566c2a5ff3a9c14dd12..08241c1207d891087f5f00e6e3bd805808aa224c 100644 --- a/InnerDetector/InDetRecTools/InDetCaloClusterROIBuilder/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetCaloClusterROIBuilder/CMakeLists.txt @@ -1,23 +1,8 @@ -################################################################################ -# Package: InDetCaloClusterROIBuilder -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetCaloClusterROIBuilder ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PRIVATE - Calorimeter/CaloDetDescr - Calorimeter/CaloTrackingGeometry - Control/AthenaBaseComps - Event/xAOD/xAODCaloEvent - Event/xAOD/xAODEgamma - GaudiKernel - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkCaloClusterROI - Tracking/TrkEvent/TrkEventPrimitives ) - # Component(s) in the package: atlas_add_component( InDetCaloClusterROIBuilder src/*.cxx diff --git a/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/CMakeLists.txt index 794088b70409c0c1f7e4015da54885c38b60670d..30741ab96e0e18a2a744af9e7ba6c8cfb9c22a60 100644 --- a/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/CMakeLists.txt @@ -1,28 +1,8 @@ -################################################################################ -# Package: InDetCompetingRIOsOnTrackTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetCompetingRIOsOnTrackTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - DetectorDescription/GeoPrimitives - Event/EventPrimitives - GaudiKernel - InnerDetector/InDetRecEvent/InDetCompetingRIOsOnTrack - Tracking/TrkEvent/TrkParameters - Tracking/TrkTools/TrkToolInterfaces - PRIVATE - InnerDetector/InDetRecEvent/InDetPrepRawData - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkExtrapolation/TrkExInterfaces ) - -# External dependencies: -find_package( Eigen ) - atlas_add_library( InDetCompetingRIOsOnTrackToolLib InDetCompetingRIOsOnTrackTool/*.h INTERFACE @@ -33,7 +13,4 @@ atlas_add_library( InDetCompetingRIOsOnTrackToolLib atlas_add_component( InDetCompetingRIOsOnTrackTool src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} InDetCompetingRIOsOnTrackToolLib InDetPrepRawData TrkSurfaces TrkEventPrimitives TrkExInterfaces ) - - + LINK_LIBRARIES InDetCompetingRIOsOnTrack InDetCompetingRIOsOnTrackToolLib InDetPrepRawData TrkEventPrimitives TrkExInterfaces TrkSurfaces TrkToolInterfaces ) diff --git a/InnerDetector/InDetRecTools/InDetConversionFinderTools/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetConversionFinderTools/CMakeLists.txt index fc81066bb48265e88540844a8ddaad8e6c692a31..af7a23aa9a8d1ac6ea162850e492ef0bdae3cfc6 100644 --- a/InnerDetector/InDetRecTools/InDetConversionFinderTools/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetConversionFinderTools/CMakeLists.txt @@ -1,6 +1,4 @@ -################################################################################ -# Package: InDetConversionFinderTools -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetConversionFinderTools ) @@ -15,19 +13,15 @@ atlas_add_library( InDetConversionFinderToolsLib PUBLIC_HEADERS InDetConversionFinderTools PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS} - LINK_LIBRARIES AthenaBaseComps xAODTracking GaudiKernel InDetRecToolInterfaces Particle TrkEventPrimitives TrkParameters TrkParticleBase TrkTrack TrkVertexSeedFinderUtilsLib - PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthLinks InDetPrepRawData TrkSurfaces TrkMeasurementBase TrkRIO_OnTrack VxVertex - TrkExInterfaces TrkToolInterfaces TrkVertexFitterInterfaces ) + LINK_LIBRARIES AthenaBaseComps GaudiKernel GeoPrimitives InDetRecToolInterfaces Particle TrkEventPrimitives TrkExInterfaces TrkParameters TrkParticleBase TrkToolInterfaces TrkTrack TrkVertexFitterInterfaces TrkVertexSeedFinderUtilsLib xAODTracking + PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} ${ROOT_LIBRARIES} AthLinks InDetPrepRawData TrkMeasurementBase TrkRIO_OnTrack TrkSurfaces VxVertex ) atlas_add_component( InDetConversionFinderTools src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps xAODTracking GaudiKernel InDetRecToolInterfaces Particle TrkEventPrimitives - TrkParameters TrkParticleBase TrkTrack AthLinks InDetPrepRawData TrkSurfaces TrkMeasurementBase TrkRIO_OnTrack VxVertex TrkExInterfaces - TrkToolInterfaces TrkVertexFitterInterfaces InDetConversionFinderToolsLib ) - + LINK_LIBRARIES InDetConversionFinderToolsLib ) +# Test(s) in the package: atlas_add_test( VertexPointEstimator_test SOURCES test/VertexPointEstimator_test.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} InDetConversionFinderToolsLib ) + LINK_LIBRARIES ${ROOT_LIBRARIES} CxxUtils GaudiKernel InDetConversionFinderToolsLib TestTools ) diff --git a/InnerDetector/InDetRecTools/InDetDNASeparator/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetDNASeparator/CMakeLists.txt index 4b52d593683f2833935a97adbaef8ef8cfa5f20c..d4a2a63bf003e0b78022a88033a3e3a4e537f55a 100644 --- a/InnerDetector/InDetRecTools/InDetDNASeparator/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetDNASeparator/CMakeLists.txt @@ -1,31 +1,10 @@ -################################################################################ -# Package: InDetDNASeparator -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetDNASeparator ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Tracking/TrkEvent/TrkMaterialOnTrack - Tracking/TrkEvent/TrkParameters - Tracking/TrkFitter/TrkFitterInterfaces - Tracking/TrkFitter/TrkFitterUtils - PRIVATE - Event/EventPrimitives - GaudiKernel - InnerDetector/InDetDetDescr/InDetIdentifier - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkMeasurementBase - Tracking/TrkEvent/TrkTrack ) - # Component(s) in the package: atlas_add_component( InDetDNASeparator src/*.cxx src/components/*.cxx LINK_LIBRARIES AthenaBaseComps TrkMaterialOnTrack TrkParameters TrkFitterInterfaces TrkFitterUtils EventPrimitives GaudiKernel InDetIdentifier TrkSurfaces TrkMeasurementBase TrkTrack ) - -# Install files from the package: -atlas_install_headers( InDetDNASeparator ) - diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt index a4391bfad7f2db59cab14f05a0761a49a1be0b0f..0f3c8cc907d11c4bf6f9514e5b2abab77a938f19 100644 --- a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt @@ -1,42 +1,25 @@ -################################################################################ -# Package: InDetEtaDependentCuts -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetEtaDependentCuts ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( ) - -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Control/AthenaKernel - Control/CxxUtils - GaudiKernel ) - # External dependencies: -find_package( CLHEP ) -find_package( Eigen ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) +find_package( ROOT COMPONENTS Core ) find_package( Boost COMPONENTS unit_test_framework ) -# tag rootMathLibs was not recognized in automatic conversion in cmt2cmake - # Component(s) in the package: atlas_add_component( InDetEtaDependentCuts src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel InDetRecToolInterfaces ) + LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRecToolInterfaces ) # Install files from the package: -atlas_install_headers( InDetEtaDependentCuts ) atlas_install_joboptions( share/*.txt ) +# Test(s) in the package: atlas_add_test( InDetEtaDependentCutsSvc_test SOURCES test/InDetEtaDependentCutsSvc_test.cxx INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} AthenaKernel AthenaBaseComps GaudiKernel TestTools CxxUtils InDetRecToolInterfaces + LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} AthenaBaseComps CxxUtils GaudiKernel InDetRecToolInterfaces TestTools POST_EXEC_SCRIPT "nopost.sh" ) diff --git a/InnerDetector/InDetRecTools/InDetIncSecVxFinderTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetIncSecVxFinderTool/CMakeLists.txt index d5642f3784b7c1432814d5db0534e23e0256c2f3..7fdad69e34a6fb8da1262c765c2edaf7bd6ff15c 100644 --- a/InnerDetector/InDetRecTools/InDetIncSecVxFinderTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetIncSecVxFinderTool/CMakeLists.txt @@ -1,36 +1,8 @@ -################################################################################ -# Package: InDetIncSecVxFinderTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetIncSecVxFinderTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Control/AthContainers - Control/CxxUtils - Event/xAOD/xAODTracking - GaudiKernel - InnerDetector/InDetRecTools/InDetRecToolInterfaces - PRIVATE - DetectorDescription/GeoPrimitives - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkParticleBase - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/VxVertex - Tracking/TrkEvent/TrkLinks - Tracking/TrkEvent/TrkTrackLink - Tracking/TrkEvent/TrkTrack - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkVertexFitter/TrkVertexFitterInterfaces - Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils - Tracking/TrkVertexFitter/TrkVxEdmCnv - Event/EventPrimitives - InnerDetector/InDetConditions/InDetBeamSpotService - InnerDetector/InDetRecTools/InDetTrackSelectionTool ) - # External dependencies: find_package( CLHEP ) find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) @@ -39,8 +11,5 @@ find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) atlas_add_component( InDetIncSecVxFinderTool src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps AthContainers CxxUtils xAODTracking GaudiKernel InDetRecToolInterfaces GeoPrimitives TrkTrack TrkParticleBase TrkParameters TrkEventPrimitives VxVertex TrkLinks TrkTrack TrkSurfaces TrkVertexFitterInterfaces TrkVxEdmCnvLib EventPrimitives InDetTrackSelectionToolLib TrkVertexSeedFinderUtilsLib InDetBeamSpotServiceLib ) - -# Install files from the package: -atlas_install_headers( InDetIncSecVxFinderTool ) + INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps AthContainers CxxUtils xAODTracking GaudiKernel InDetRecToolInterfaces GeoPrimitives TrkTrack TrkParticleBase TrkParameters TrkEventPrimitives VxVertex TrkLinks TrkTrack TrkTrackLink TrkTrackSummary TrkSurfaces TrkVertexFitterInterfaces EventPrimitives InDetTrackSelectionToolLib TrkVertexSeedFinderUtilsLib InDetBeamSpotServiceLib ) diff --git a/InnerDetector/InDetRecTools/InDetMultipleVertexSeedFinder/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetMultipleVertexSeedFinder/CMakeLists.txt index dee5f008ae5ca86d70aa85c20888031499bc04ec..cd32326b83e7fc6d912c0fef880dd5135c290055 100644 --- a/InnerDetector/InDetRecTools/InDetMultipleVertexSeedFinder/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetMultipleVertexSeedFinder/CMakeLists.txt @@ -1,33 +1,10 @@ -################################################################################ -# Package: InDetMultipleVertexSeedFinder -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetMultipleVertexSeedFinder ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetRecTools/InDetRecToolInterfaces - PRIVATE - Event/EventPrimitives - Event/xAOD/xAODTracking - InnerDetector/InDetConditions/InDetBeamSpotService - InnerDetector/InDetRecTools/InDetMultipleVertexSeedFinderUtils - Tracking/TrkEvent/TrkParticleBase - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/VxVertex - Tracking/TrkExtrapolation/TrkExInterfaces - Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkVertexFitter/TrkVertexFitterInterfaces ) - # Component(s) in the package: atlas_add_component( InDetMultipleVertexSeedFinder src/*.cxx src/components/*.cxx LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRecToolInterfaces EventPrimitives xAODTracking InDetMultipleVertexSeedFinderUtilsLib TrkParticleBase TrkTrack VxVertex TrkExInterfaces TrkToolInterfaces TrkVertexFitterInterfaces InDetBeamSpotServiceLib ) - -# Install files from the package: -atlas_install_headers( InDetMultipleVertexSeedFinder ) - diff --git a/InnerDetector/InDetRecTools/InDetMultipleVertexSeedFinderUtils/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetMultipleVertexSeedFinderUtils/CMakeLists.txt index 6e5b7564aeb13b7534e46049ad72b85fc396c662..23f0a3d7055c7c0b4ef95fe19b6b239dbfd53f7e 100644 --- a/InnerDetector/InDetRecTools/InDetMultipleVertexSeedFinderUtils/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetMultipleVertexSeedFinderUtils/CMakeLists.txt @@ -1,23 +1,8 @@ -################################################################################ -# Package: InDetMultipleVertexSeedFinderUtils -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetMultipleVertexSeedFinderUtils ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Event/xAOD/xAODTracking - GaudiKernel - PRIVATE - Event/EventPrimitives - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkParticleBase - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/VxVertex - Tracking/TrkExtrapolation/TrkExInterfaces ) - # Component(s) in the package: atlas_add_library( InDetMultipleVertexSeedFinderUtilsLib src/*.cxx @@ -27,5 +12,4 @@ atlas_add_library( InDetMultipleVertexSeedFinderUtilsLib atlas_add_component( InDetMultipleVertexSeedFinderUtils src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps xAODTracking GaudiKernel EventPrimitives TrkParameters TrkParticleBase TrkTrack VxVertex TrkExInterfaces InDetMultipleVertexSeedFinderUtilsLib ) - + LINK_LIBRARIES InDetMultipleVertexSeedFinderUtilsLib ) diff --git a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/CMakeLists.txt index 2cdcfe4cd6b858bfcf44e477d8c5bbe4587aac3a..10d10c62cf86caf76dfc9c4329fea45ffeefdf54 100644 --- a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/CMakeLists.txt @@ -1,54 +1,14 @@ -################################################################################ -# Package: InDetPriVxFinderTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetPriVxFinderTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Control/StoreGate - Event/xAOD/xAODTracking - GaudiKernel - InnerDetector/InDetRecTools/InDetRecToolInterfaces - PhysicsAnalysis/AnalysisCommon/PATCore - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkParticleBase - Tracking/TrkEvent/TrkTrack - InnerDetector/InDetConditions/BeamSpotConditionsData - Control/CxxUtils - PRIVATE - Control/AthContainers - DetectorDescription/GeoPrimitives - Event/EventPrimitives - InnerDetector/InDetRecTools/InDetTrackSelectionTool - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkLinks - Tracking/TrkEvent/TrkTrackLink - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkEvent/VxMultiVertex - Tracking/TrkEvent/VxVertex - Tracking/TrkVertexFitter/TrkVertexFitterInterfaces - Tracking/TrkVertexFitter/TrkVertexFitters) - -# External dependencies: -find_package( CLHEP ) -find_package( Eigen ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) - # Component(s) in the package: atlas_add_component( InDetPriVxFinderTool src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking - GaudiKernel InDetRecToolInterfaces PATCoreLib TrkParameters TrkParticleBase TrkTrack CxxUtils AthContainers GeoPrimitives - EventPrimitives TrkSurfaces TrkEventPrimitives TrkLinks TrkTrackSummary VxMultiVertex VxVertex - TrkVertexFitterInterfaces TrkVertexFittersLib BeamSpotConditionsData StoreGateLib - InDetTrackSelectionToolLib ) - -# Install files from the package: -atlas_install_headers( InDetPriVxFinderTool ) - + LINK_LIBRARIES AthContainers AthenaBaseComps BeamSpotConditionsData + EventPrimitives GaudiKernel GeoPrimitives InDetRecToolInterfaces InDetTrackSelectionToolLib + StoreGateLib TrkEventPrimitives TrkLinks TrkParameters TrkParticleBase TrkSurfaces TrkTrack + TrkTrackLink TrkTrackSummary TrkVertexFitterInterfaces TrkVertexFittersLib + VxMultiVertex VxVertex xAODTracking ) diff --git a/InnerDetector/InDetRecTools/InDetRecToolInterfaces/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetRecToolInterfaces/CMakeLists.txt index fa0c93cb8d62bfa31be486bd2103f51263f68da1..71dcda326ceb5db74aa1dd11c41ab7bc26881543 100644 --- a/InnerDetector/InDetRecTools/InDetRecToolInterfaces/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetRecToolInterfaces/CMakeLists.txt @@ -1,35 +1,11 @@ -################################################################################ -# Package: InDetRecToolInterfaces -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetRecToolInterfaces ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - DetectorDescription/GeoPrimitives - DetectorDescription/IRegionSelector - DetectorDescription/Identifier - Event/xAOD/xAODCaloEvent - Event/xAOD/xAODTracking - GaudiKernel - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecEvent/SiSpacePointsSeed - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkMeasurementBase - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkParticleBase - Tracking/TrkEvent/TrkSegment - Tracking/TrkEvent/TrkSpacePoint - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/VxVertex ) - -# External dependencies: -find_package( Eigen ) - # Component(s) in the package: atlas_add_library( InDetRecToolInterfaces + InDetRecToolInterfaces/*.h + INTERFACE PUBLIC_HEADERS InDetRecToolInterfaces - INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} GeoPrimitives IRegionSelector Identifier xAODCaloEvent xAODTracking GaudiKernel InDetPrepRawData SiSpacePointsSeed TrkEventPrimitives TrkMeasurementBase TrkParameters TrkParticleBase TrkSegment TrkSpacePoint TrkTrack VxVertex ) - + LINK_LIBRARIES GaudiKernel GeoPrimitives IRegionSelector Identifier InDetPrepRawData MagFieldElements SiSPSeededTrackFinderData SiSpacePointsSeed TrkEventPrimitives TrkMeasurementBase TrkParameters TrkParticleBase TrkSegment TrkSpacePoint TrkTrack VxVertex xAODCaloEvent xAODTracking ) diff --git a/InnerDetector/InDetRecTools/InDetResidualPullCalculators/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetResidualPullCalculators/CMakeLists.txt index c2da8e197a796022b49b3bb5e4d40d516aea7a2c..4438932e2a4aed1497a72d5f20b70e237dbbe7fc 100644 --- a/InnerDetector/InDetRecTools/InDetResidualPullCalculators/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetResidualPullCalculators/CMakeLists.txt @@ -1,22 +1,10 @@ -################################################################################ -# Package: InDetResidualPullCalculators -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetResidualPullCalculators ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PRIVATE - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkParameters - Tracking/TrkTools/TrkToolInterfaces ) - # Component(s) in the package: atlas_add_component( InDetResidualPullCalculators src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRIO_OnTrack TrkEventPrimitives TrkParameters TrkToolInterfaces ) - + LINK_LIBRARIES AthenaBaseComps InDetRIO_OnTrack TrkEventPrimitives TrkParameters TrkToolInterfaces ) diff --git a/InnerDetector/InDetRecTools/InDetSVWithMuonTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetSVWithMuonTool/CMakeLists.txt index c6b6855c46273f6b8d7f98a00f117f96e906b138..ce82ce5a4996f80da70c5642fce2b8e071bb38fb 100644 --- a/InnerDetector/InDetRecTools/InDetSVWithMuonTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetSVWithMuonTool/CMakeLists.txt @@ -1,13 +1,10 @@ -################################################################################ -# Package: InDetSVWithMuonTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetSVWithMuonTool ) # External dependencies: -find_package( Eigen ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) +find_package( ROOT COMPONENTS Core MathCore Hist ) atlas_add_library( InDetSVWithMuonToolLib @@ -17,15 +14,20 @@ atlas_add_library( PUBLIC_HEADERS InDetSVWithMuonTool - INCLUDE_DIRS - ${ROOT_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} + PRIVATE_INCLUDE_DIRS + ${ROOT_INCLUDE_DIRS} LINK_LIBRARIES - ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} - AthenaBaseComps GaudiKernel TrkVKalVrtFitterLib xAODTracking + AthenaBaseComps + GaudiKernel + TrkVertexFitterInterfaces + xAODTracking PRIVATE_LINK_LIBRARIES - AnalysisUtilsLib xAODBTagging + ${ROOT_LIBRARIES} + AnalysisUtilsLib + TrkVKalVrtFitterLib + xAODBTagging ) @@ -35,8 +37,8 @@ atlas_add_component( src/components/*.cxx LINK_LIBRARIES - GaudiKernel InDetSVWithMuonToolLib + InDetSVWithMuonToolLib ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/InnerDetector/InDetRecTools/InDetSVWithMuonTool/python/SecVrtWithMuonFinder.py b/InnerDetector/InDetRecTools/InDetSVWithMuonTool/python/SecVrtWithMuonFinder.py index 8e966843e7990c6b38412dd5a17e79df09651dca..33d72660a5d03c4ecf22209dd45d3735aaafc3ea 100644 --- a/InnerDetector/InDetRecTools/InDetSVWithMuonTool/python/SecVrtWithMuonFinder.py +++ b/InnerDetector/InDetRecTools/InDetSVWithMuonTool/python/SecVrtWithMuonFinder.py @@ -1,12 +1,6 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from GaudiKernel.GaudiHandles import * -from GaudiKernel.Proxy.Configurable import * -from AthenaCommon.Include import Include, IncludeError, include from AthenaCommon.Logging import logging -from AthenaCommon.AppMgr import ToolSvc -from AthenaCommon import CfgMgr - from InDetSVWithMuonTool.InDetSVWithMuonToolConf import InDet__InDetSVWithMuonTool # define the class diff --git a/InnerDetector/InDetRecTools/InDetSecVtxTrackSelectionTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetSecVtxTrackSelectionTool/CMakeLists.txt index 7dcd6b910717a346f428485c2822b70648a9b2da..3b85813876bd1ce63612b57a92ab23a8ace61767 100644 --- a/InnerDetector/InDetRecTools/InDetSecVtxTrackSelectionTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetSecVtxTrackSelectionTool/CMakeLists.txt @@ -1,60 +1,19 @@ -################################################################################ -# Package: InDetSecVtxTrackSelectionTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetSecVtxTrackSelectionTool ) -# Declare the package's dependencies: -if( XAOD_STANDALONE ) - atlas_depends_on_subdirs( - PUBLIC - Control/AthToolSupport/AsgTools - Event/xAOD/xAODTracking - PhysicsAnalysis/AnalysisCommon/PATCore - PRIVATE - Control/xAODRootAccess ) -elseif( XAOD_ANALYSIS ) - atlas_depends_on_subdirs( - PUBLIC - Control/AthToolSupport/AsgTools - Event/xAOD/xAODTracking - PhysicsAnalysis/AnalysisCommon/PATCore - GaudiKernel - PRIVATE - Control/AthenaBaseComps ) -else() - atlas_depends_on_subdirs( - PUBLIC - Control/AthToolSupport/AsgTools - Event/xAOD/xAODTracking - GaudiKernel - PhysicsAnalysis/AnalysisCommon/PATCore - Tracking/TrkEvent/TrkParameters - Tracking/TrkTools/TrkToolInterfaces - PRIVATE - Control/AthenaBaseComps - InnerDetector/InDetRecTools/InDetTrackSelectionTool - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkEvent/VxVertex ) -endif() - -# External(s): -find_package( ROOT COMPONENTS Core RIO Hist MathCore ) - # Libraries in the package: set( extra_libs ) if( NOT XAOD_ANALYSIS ) - set( extra_libs TrkParameters GaudiKernel TrkToolInterfaces + set( extra_libs InDetTrackSelectionToolLib TrkParameters GaudiKernel TrkToolInterfaces PRIVATE_LINK_LIBRARIES TrkTrack TrkEventPrimitives TrkTrackSummary VxVertex ) endif() atlas_add_library( InDetSecVtxTrackSelectionToolLib InDetSecVtxTrackSelectionTool/*.h Root/*.h Root/*.cxx PUBLIC_HEADERS InDetSecVtxTrackSelectionTool - LINK_LIBRARIES PATCoreLib xAODTracking ${extra_libs} ) + LINK_LIBRARIES AsgMessagingLib AsgTools xAODTracking ${extra_libs} ) if( NOT XAOD_STANDALONE ) set( extra_libs ) @@ -72,6 +31,5 @@ atlas_add_dictionary( InDetSecVtxTrackSelectionToolDict InDetSecVtxTrackSelectionTool/selection.xml LINK_LIBRARIES InDetSecVtxTrackSelectionToolLib ) - # Install files from the package: atlas_install_joboptions( share/*.py ) diff --git a/InnerDetector/InDetRecTools/InDetSecVxFinderTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetSecVxFinderTool/CMakeLists.txt index 2c0ff13b1f580cccdf8bf3804b9f47ee8387a539..70c675b1e22bad6dcf354e7e342055b9fb016e71 100644 --- a/InnerDetector/InDetRecTools/InDetSecVxFinderTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetSecVxFinderTool/CMakeLists.txt @@ -1,28 +1,21 @@ -################################################################################ -# Package: InDetSecVxFinderTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetSecVxFinderTool ) - # External dependencies: find_package( CLHEP ) -find_package( Eigen ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) +find_package( ROOT COMPONENTS Core MathCore ) # Component(s) in the package: atlas_add_library( InDetSecVxFinderToolLib src/*.cxx PUBLIC_HEADERS InDetSecVxFinderTool - INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} + INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} DEFINITIONS ${CLHEP_DEFINITIONS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps GeoPrimitives GaudiKernel InDetRecToolInterfaces TrkParameters TrkParticleBase TrkJetVxFitterLib TrkVertexFittersLib TrkVxEdmCnvLib - PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} EventPrimitives xAODTracking TrkSurfaces TrkEventPrimitives TrkLinks TrkNeutralParameters TrkTrack VxJetVertex VxSecVertex VxVertex TrkExInterfaces TrkToolInterfaces TrkVertexFitterInterfaces TrkVertexSeedFinderUtilsLib TrkVertexSeedFinderToolsLib ) + LINK_LIBRARIES ${CLHEP_LIBRARIES} ${ROOT_LIBRARIES} AthenaBaseComps GaudiKernel GeoPrimitives InDetRecToolInterfaces TrkExInterfaces TrkJetVxFitterLib TrkLinks TrkParameters TrkParticleBase TrkToolInterfaces TrkTrackLink TrkVertexFitterInterfaces TrkVertexSeedFinderUtilsLib VxJetVertex VxVertex xAODTracking + PRIVATE_LINK_LIBRARIES EventPrimitives TrkEventPrimitives TrkNeutralParameters TrkSurfaces TrkTrack TrkVertexFittersLib TrkVertexSeedFinderToolsLib VxSecVertex ) atlas_add_component( InDetSecVxFinderTool src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps GeoPrimitives GaudiKernel InDetRecToolInterfaces TrkParameters TrkParticleBase EventPrimitives xAODTracking TrkSurfaces TrkEventPrimitives TrkLinks TrkNeutralParameters TrkTrack VxJetVertex VxSecVertex VxVertex TrkExInterfaces TrkToolInterfaces TrkJetVxFitterLib TrkVertexFitterInterfaces TrkVertexFittersLib TrkVxEdmCnvLib InDetSecVxFinderToolLib TrkVertexSeedFinderToolsLib ) - + LINK_LIBRARIES InDetSecVxFinderToolLib ) diff --git a/InnerDetector/InDetRecTools/InDetSecVxFinderTool/src/components/InDetSecVxFinderTool_load.cxx b/InnerDetector/InDetRecTools/InDetSecVxFinderTool/src/components/InDetSecVxFinderTool_load.cxx deleted file mode 100755 index 860b56e4f556369158e3a0830d77b9bb439ec8a3..0000000000000000000000000000000000000000 --- a/InnerDetector/InDetRecTools/InDetSecVxFinderTool/src/components/InDetSecVxFinderTool_load.cxx +++ /dev/null @@ -1,3 +0,0 @@ -#include "GaudiKernel/LoadFactoryEntries.h" - -LOAD_FACTORY_ENTRIES( InDetSecVxFinderTool ) diff --git a/InnerDetector/InDetRecTools/InDetTestBLayer/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetTestBLayer/CMakeLists.txt index e1a88abe1a6c64499af785a0b8d8deb9b4201375..87dd02b8da4a13bf508c33409eaee7afea3f12c7 100644 --- a/InnerDetector/InDetRecTools/InDetTestBLayer/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetTestBLayer/CMakeLists.txt @@ -1,58 +1,17 @@ -################################################################################ -# Package: InDetTestBLayer -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetTestBLayer ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - DetectorDescription/GeoPrimitives - DetectorDescription/Identifier - Event/EventPrimitives - GaudiKernel - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkParameters - Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkExtrapolation/TrkExInterfaces - PRIVATE - DetectorDescription/AtlasDetDescr - DetectorDescription/IdDictDetDescr - InnerDetector/InDetConditions/InDetConditionsSummaryService - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/PixelReadoutGeometry - Reconstruction/Particle - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkMeasurementBase - Tracking/TrkEvent/TrkTrack - ) - -# External dependencies: -find_package( Eigen ) - -# tag ROOTRooFitLibs was not recognized in automatic conversion in cmt2cmake - -# tag ROOTMathLibs was not recognized in automatic conversion in cmt2cmake - # Component(s) in the package: atlas_add_library( InDetTestBLayerLib src/*.cxx PUBLIC_HEADERS InDetTestBLayer - INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps GeoPrimitives Identifier EventPrimitives GaudiKernel InDetRecToolInterfaces - TrkEventPrimitives TrkParameters TrkToolInterfaces TrkExInterfaces - InDetConditionsSummaryService - PRIVATE_LINK_LIBRARIES AtlasDetDescr IdDictDetDescr InDetIdentifier InDetReadoutGeometry PixelReadoutGeometry Particle - TrkGeometry TrkSurfaces TrkMeasurementBase TrkTrack ) + LINK_LIBRARIES AthenaBaseComps GeoPrimitives Identifier EventPrimitives GaudiKernel InDetRecToolInterfaces + TrkEventPrimitives TrkParameters TrkToolInterfaces TrkExInterfaces InDetConditionsSummaryService + PRIVATE_LINK_LIBRARIES AtlasDetDescr IdDictDetDescr InDetIdentifier InDetReadoutGeometry + PixelReadoutGeometry Particle TrkGeometry TrkSurfaces TrkMeasurementBase TrkTrack ) atlas_add_component( InDetTestBLayer src/components/*.cxx - INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps GeoPrimitives Identifier EventPrimitives - GaudiKernel InDetRecToolInterfaces TrkEventPrimitives TrkParameters TrkToolInterfaces AtlasDetDescr IdDictDetDescr InDetIdentifier - InDetReadoutGeometry Particle TrkGeometry TrkSurfaces TrkMeasurementBase TrkTrack TrkExInterfaces InDetTestBLayerLib ) - + LINK_LIBRARIES InDetTestBLayerLib ) diff --git a/InnerDetector/InDetRecTools/InDetTestPixelLayer/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetTestPixelLayer/CMakeLists.txt index 46ccec0d5ed51177b09fb3974b66e1416804b72c..f64aed1106c86a60dd8f0b4b0fc2abba66cb2432 100644 --- a/InnerDetector/InDetRecTools/InDetTestPixelLayer/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetTestPixelLayer/CMakeLists.txt @@ -1,53 +1,15 @@ -################################################################################ -# Package: InDetTestPixelLayer -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetTestPixelLayer ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Control/AthenaKernel - DetectorDescription/GeoPrimitives - DetectorDescription/Identifier - GaudiKernel - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkParameters - Tracking/TrkTools/TrkToolInterfaces - PRIVATE - DetectorDescription/AtlasDetDescr - DetectorDescription/IdDictDetDescr - InnerDetector/InDetConditions/InDetConditionsSummaryService - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/PixelReadoutGeometry - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkMeasurementBase - Tracking/TrkEvent/TrkParticleBase - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkExtrapolation/TrkExInterfaces ) - -# External dependencies: -find_package( Eigen ) - -# tag ROOTRooFitLibs was not recognized in automatic conversion in cmt2cmake - -# tag ROOTMathLibs was not recognized in automatic conversion in cmt2cmake - # Component(s) in the package: atlas_add_library( InDetTestPixelLayerLib src/*.cxx PUBLIC_HEADERS InDetTestPixelLayer - INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GeoPrimitives Identifier GaudiKernel InDetIdentifier InDetRecToolInterfaces TrkEventPrimitives TrkParameters TrkToolInterfaces InDetConditionsSummaryService + LINK_LIBRARIES AthenaBaseComps AthenaKernel GeoPrimitives Identifier GaudiKernel InDetIdentifier InDetRecToolInterfaces TrkEventPrimitives TrkParameters TrkToolInterfaces InDetConditionsSummaryService PRIVATE_LINK_LIBRARIES AtlasDetDescr IdDictDetDescr InDetReadoutGeometry PixelReadoutGeometry TrkGeometry TrkSurfaces TrkMeasurementBase TrkParticleBase TrkTrack TrkTrackSummary TrkExInterfaces ) atlas_add_component( InDetTestPixelLayer src/components/*.cxx - INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GeoPrimitives Identifier GaudiKernel InDetIdentifier InDetRecToolInterfaces TrkEventPrimitives TrkParameters TrkToolInterfaces AtlasDetDescr IdDictDetDescr InDetReadoutGeometry TrkGeometry TrkSurfaces TrkMeasurementBase TrkParticleBase TrkTrack TrkTrackSummary TrkExInterfaces InDetTestPixelLayerLib ) - + LINK_LIBRARIES InDetTestPixelLayerLib ) diff --git a/InnerDetector/InDetRecTools/InDetTrackHoleSearch/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetTrackHoleSearch/CMakeLists.txt index eaf25ab3a11e2663a5548c99a230148d087a190c..1792a30ea47737627949de3adf0a21a275a348d6 100644 --- a/InnerDetector/InDetRecTools/InDetTrackHoleSearch/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetTrackHoleSearch/CMakeLists.txt @@ -1,40 +1,10 @@ -################################################################################ -# Package: InDetTrackHoleSearch -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetTrackHoleSearch ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkParameters - Tracking/TrkTools/TrkToolInterfaces - PRIVATE - DetectorDescription/AtlasDetDescr - DetectorDescription/GeoModel/GeoModelInterfaces - DetectorDescription/Identifier - InnerDetector/InDetConditions/InDetConditionsSummaryService - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkDetDescr/TrkDetDescrUtils - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkDetDescr/TrkVolumes - Tracking/TrkEvent/TrkEventUtils - Tracking/TrkEvent/TrkMeasurementBase - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkExtrapolation/TrkExInterfaces ) - # Component(s) in the package: atlas_add_component( InDetTrackHoleSearch src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel TrkEventPrimitives TrkParameters TrkToolInterfaces AtlasDetDescr Identifier InDetReadoutGeometry InDetRecToolInterfaces TrkDetDescrUtils TrkGeometry TrkVolumes TrkEventUtils TrkMeasurementBase TrkTrack TrkTrackSummary TrkExInterfaces InDetConditionsSummaryService ) - -# Install files from the package: -atlas_install_headers( InDetTrackHoleSearch ) - + LINK_LIBRARIES AthenaBaseComps GaudiKernel GeoModelInterfaces TrkEventPrimitives TrkParameters TrkToolInterfaces AtlasDetDescr Identifier InDetReadoutGeometry InDetRecToolInterfaces TrkDetDescrUtils TrkGeometry TrkVolumes TrkEventUtils TrkMeasurementBase TrkTrack TrkTrackSummary TrkExInterfaces ) diff --git a/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt index bcb33444dd932ddd4119508644d88a8360c39f81..8ed9972ab588e2922543cb2486d8f59a1242245f 100644 --- a/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt @@ -1,52 +1,16 @@ -################################################################################ -# Package: InDetTrackScoringTools -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetTrackScoringTools ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Control/AthenaKernel - GaudiKernel - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkTools/TrkToolInterfaces - InnerDetector/InDetConditions/BeamSpotConditionsData - PRIVATE - Control/StoreGate - DetectorDescription/GeoPrimitives - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkPseudoMeasurementOnTrack - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkExtrapolation/TrkExInterfaces - Tracking/TrkEvent/TrkCaloClusterROI - MagneticField/MagFieldElements - MagneticField/MagFieldConditions - Tools/PathResolver - ) - - - # External dependencies: find_package( CLHEP ) -find_package( Eigen ) find_package( lwtnn ) find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) -# tag rootMathLibs was not recognized in automatic conversion in cmt2cmake - # Component(s) in the package: atlas_add_component( InDetTrackScoringTools src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${LWTNN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} ${LWTNN_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel TrkEventPrimitives TrkToolInterfaces GeoPrimitives InDetIdentifier InDetRIO_OnTrack InDetRecToolInterfaces TrkParameters TrkPseudoMeasurementOnTrack TrkTrack TrkTrackSummary TrkExInterfaces TrkCaloClusterROI MagFieldElements MagFieldConditions BeamSpotConditionsData PathResolver ) - -# Install files from the package: -atlas_install_headers( InDetTrackScoringTools ) - + INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${LWTNN_INCLUDE_DIRS} + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${LWTNN_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel TrkEventPrimitives TrkToolInterfaces GeoPrimitives InDetIdentifier InDetRIO_OnTrack InDetRecToolInterfaces StoreGateLib TrkParameters TrkPseudoMeasurementOnTrack TrkTrack TrkTrackSummary TrkExInterfaces TrkCaloClusterROI MagFieldElements MagFieldConditions BeamSpotConditionsData PathResolver ) diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectionTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetTrackSelectionTool/CMakeLists.txt index dd495026f16bfeec52fc47bc6db9d84924426714..d4927d48e63a768446fcae970a340656d98c77c5 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSelectionTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetTrackSelectionTool/CMakeLists.txt @@ -1,51 +1,8 @@ -################################################################################ -# Package: InDetTrackSelectionTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetTrackSelectionTool ) -# Declare the package's dependencies: -if( XAOD_STANDALONE ) - atlas_depends_on_subdirs( - PUBLIC - Control/AthToolSupport/AsgTools - Event/xAOD/xAODTracking - PhysicsAnalysis/AnalysisCommon/PATCore - PhysicsAnalysis/Interfaces/AsgAnalysisInterfaces - PRIVATE - Control/xAODRootAccess ) -elseif( XAOD_ANALYSIS ) - atlas_depends_on_subdirs( - PUBLIC - Control/AthToolSupport/AsgTools - Event/xAOD/xAODTracking - PhysicsAnalysis/AnalysisCommon/PATCore - PhysicsAnalysis/Interfaces/AsgAnalysisInterfaces - GaudiKernel - PRIVATE - Control/AthenaBaseComps ) -else() - atlas_depends_on_subdirs( - PUBLIC - Control/AthToolSupport/AsgTools - Event/xAOD/xAODTracking - GaudiKernel - PhysicsAnalysis/AnalysisCommon/PATCore - PhysicsAnalysis/Interfaces/AsgAnalysisInterfaces - Tracking/TrkEvent/TrkParameters - Tracking/TrkExtrapolation/TrkExInterfaces - Tracking/TrkTools/TrkToolInterfaces - PRIVATE - Control/AthenaBaseComps - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkRIO_OnTrack - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkEvent/VxVertex ) -endif() - # External(s): find_package( ROOT COMPONENTS Core RIO Hist MathCore ) diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt index a768f3b0d44a1ce9ac0ee03dfbd0960d0684ef6c..a2aca36e2ba2e71ad958c97ada569878b80694ee 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt @@ -1,23 +1,14 @@ -################################################################################ -# Package: InDetTrackSelectorTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetTrackSelectorTool ) - # External dependencies: find_package( CLHEP ) -find_package( Eigen ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) # Component(s) in the package: atlas_add_component( InDetTrackSelectorTool src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking GaudiKernel InDetRecToolInterfaces TrkEventPrimitives TrkParameters TrkToolInterfaces AthContainers GeoPrimitives EventPrimitives TRT_ConditionsServicesLib InDetRIO_OnTrack TrkSurfaces TrkParticleBase TrkRIO_OnTrack TrkTrack TrkTrackSummary VxVertex TrkExInterfaces MagFieldElements MagFieldConditions BeamSpotConditionsData ) - -# Install files from the package: -atlas_install_headers( InDetTrackSelectorTool ) - + INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} + LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps xAODTracking GaudiKernel InDetRecToolInterfaces TrkEventPrimitives TrkParameters TrkToolInterfaces AthContainers GeoPrimitives EventPrimitives InDetRIO_OnTrack StoreGateLib TrkSurfaces TrkParticleBase TrkRIO_OnTrack TrkTrack TrkTrackSummary VxVertex TrkExInterfaces TRT_ConditionsData MagFieldElements MagFieldConditions BeamSpotConditionsData ) diff --git a/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/CMakeLists.txt index 2afd25bbaa548c4de7b60fffa46076c8a32926e7..5021321042bf352f90936ba84990cd92ba947fe9 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/CMakeLists.txt @@ -1,36 +1,10 @@ -################################################################################ -# Package: InDetTrackSummaryHelperTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetTrackSummaryHelperTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetConditions/TRT_ConditionsServices - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkTools/TrkToolInterfaces - PRIVATE - DetectorDescription/Identifier - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkEvent/TrkCompetingRIOsOnTrack - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkRIO_OnTrack - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkEventUtils ) - # Component(s) in the package: atlas_add_component( InDetTrackSummaryHelperTool src/*.cxx src/components/*.cxx LINK_LIBRARIES AthenaBaseComps GaudiKernel TRT_ConditionsServicesLib TrkEventPrimitives TrkTrackSummary TrkToolInterfaces Identifier InDetIdentifier InDetPrepRawData InDetRIO_OnTrack InDetRecToolInterfaces TrkCompetingRIOsOnTrack TrkParameters TrkRIO_OnTrack TrkTrack TrkEventUtils) - -# Install files from the package: -atlas_install_headers( InDetTrackSummaryHelperTool ) - diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt index 2ac549e1961ff29b4c85832db3588cd8b71e4ebd..e2cb0a417caa3e3fa8c1d94c3e211e1bbf80ffd5 100644 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt @@ -1,65 +1,26 @@ -################################################################################ -# Package: InDetVKalVxInJetTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( InDetVKalVxInJetTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Event/xAOD/xAODTracking - GaudiKernel - InnerDetector/InDetRecTools/InDetRecToolInterfaces - PRIVATE - Control/AthenaKernel - Tools/PathResolver - DetectorDescription/GeoPrimitives - PhysicsAnalysis/AnalysisCommon/AnalysisUtils - Tracking/TrkEvent/TrkNeutralParameters - Tracking/TrkEvent/TrkParticleBase - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkEvent/VxSecVertex - Tracking/TrkEvent/VxVertex - Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkVertexFitter/TrkVertexFitterInterfaces - Tracking/TrkVertexFitter/TrkVKalVrtFitter - Reconstruction/MVAUtils ) -#InnerDetector/InDetRecTools/InDetMaterialRejTool - # External dependencies: -find_package( Boost COMPONENTS filesystem thread system ) -find_package( Eigen ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread TMVA ) - -# Library to link against: -#atlas_add_library( InDetVKalVxInJetToolLib -# src/*.cxx src/components/*.cxx -# PUBLIC_HEADERS InDetVKalVxInJetTool InDetTrkInJetType -# INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} -# LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking GaudiKernel -# InDetRecToolInterfaces TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters MVAUtils -# TrkParticleBase TrkTrackSummary VxSecVertex VxVertex TrkToolInterfaces TrkVertexFitterInterfaces PathResolver ) +find_package( Boost ) +find_package( CLHEP ) +find_package( ROOT COMPONENTS Core Hist MathCore Tree RIO ) # Component(s) in the package: atlas_add_component( InDetVKalVxInJetTool src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking PathResolver GaudiKernel - InDetRecToolInterfaces TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters MVAUtils - TrkParticleBase TrkTrackSummary VxSecVertex VxVertex TrkToolInterfaces TrkVertexFitterInterfaces PathResolver ) - + INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} + LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} AnalysisUtilsLib AthenaBaseComps CxxUtils GaudiKernel GeoPrimitives InDetRecToolInterfaces MVAUtils PathResolver TrkNeutralParameters TrkParticleBase TrkToolInterfaces TrkTrackSummary TrkVKalVrtFitterLib TrkVertexFitterInterfaces VxSecVertex VxVertex xAODTracking xAODTruth ) + # Install files from the package: -atlas_install_headers( InDetVKalVxInJetTool ) -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.txt ) -#This test is temporarily commented in order not to slow down magnetic field migration to condition data. -#Will be restored later +# Test(s) in the package: atlas_add_test( InDetTrkInJetType_test - SOURCES test/InDetTrkInJetType_test.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking PathResolver GaudiKernel - InDetRecToolInterfaces TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters MVAUtils - TrkParticleBase TrkTrackSummary VxSecVertex VxVertex TrkToolInterfaces TrkVertexFitterInterfaces PathResolver AthenaKernel - LOG_IGNORE_PATTERN "Booking|ClassIDSvc|weight file|create data set info" ) + SOURCES test/InDetTrkInJetType_test.cxx + INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} + LINK_LIBRARIES ${CLHEP_LIBRARIES} ${ROOT_LIBRARIES} AthenaBaseComps AthenaKernel CxxUtils EventPrimitives GaudiKernel MagFieldConditions TestTools TrkVertexFitterInterfaces xAODTracking + LOG_IGNORE_PATTERN "Booking|ClassIDSvc|weight file|create data set info" ) diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/python/InDetVKalVxInJetFinder.py b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/python/InDetVKalVxInJetFinder.py index 3a6d71ddcc68be5808f9ff199cc8f7f37d487483..8b221fd247f2907ee782e6c0ce84bbf5841c4e16 100644 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/python/InDetVKalVxInJetFinder.py +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/python/InDetVKalVxInJetFinder.py @@ -1,12 +1,6 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from GaudiKernel.GaudiHandles import * -from GaudiKernel.Proxy.Configurable import * -from AthenaCommon.Include import Include, IncludeError, include from AthenaCommon.Logging import logging -from AthenaCommon.AppMgr import ToolSvc -from AthenaCommon import CfgMgr - from InDetVKalVxInJetTool.InDetVKalVxInJetToolConf import InDet__InDetVKalVxInJetTool # define the class @@ -14,7 +8,6 @@ class InDetVKalVxInJetFinder( InDet__InDetVKalVxInJetTool ): def __init__(self, name = 'InDetVKalVxInJetFinder' ): - from __main__ import ToolSvc mlog = logging.getLogger( 'InDetVKalVxInJetFinder::__init__ ' ) mlog.info("entering") #---------------------- @@ -24,6 +17,7 @@ class InDetVKalVxInJetFinder( InDet__InDetVKalVxInJetTool ): SVertexFitterTool = Trk__TrkVKalVrtFitter(name="SVertexFitterTool", Extrapolator="Trk::Extrapolator/AtlasExtrapolator" ) + from AthenaCommon.AppMgr import ToolSvc ToolSvc += SVertexFitterTool #---------------------- # Secondary vertex finder itself diff --git a/InnerDetector/InDetRecTools/PixelToTPIDTool/CMakeLists.txt b/InnerDetector/InDetRecTools/PixelToTPIDTool/CMakeLists.txt index 17b6ac113cf9f0094b71d4bcdf76625639adba2d..402dbc078429e27648f695b6d8ee3e93ba1805c1 100644 --- a/InnerDetector/InDetRecTools/PixelToTPIDTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/PixelToTPIDTool/CMakeLists.txt @@ -1,52 +1,20 @@ -################################################################################ -# Package: PixelToTPIDTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( PixelToTPIDTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( - PUBLIC - Control/AthenaBaseComps - Control/AthenaKernel - Control/StoreGate - GaudiKernel - Tracking/TrkEvent/TrkEventPrimitives - PRIVATE - Database/AthenaPOOL/AthenaPoolUtilities - Database/RegistrationServices - DetectorDescription/Identifier - Event/EventInfo - InnerDetector/InDetConditions/PixelConditionsData - InnerDetector/InDetConditions/PixelConditionsTools - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetDetDescr/PixelGeoModel - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - Reconstruction/Particle - Tools/PathResolver - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkMeasurementBase - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkRIO_OnTrack - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkTools/TrkToolInterfaces ) - # External dependencies: find_package( CLHEP ) -find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess ) -find_package( ROOT COMPONENTS MathCore Core Tree Hist RIO pthread ) # Component(s) in the package: atlas_add_component( PixelToTPIDTool PixelToTPIDTool/*.h src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} - AthenaBaseComps AthenaKernel StoreGateLib GaudiKernel TrkEventPrimitives - AthenaPoolUtilities Identifier EventInfo InDetIdentifier InDetRIO_OnTrack - Particle PathResolver TrkSurfaces TrkMeasurementBase TrkParameters - TrkRIO_OnTrack TrkTrack TrkTrackSummary TrkToolInterfaces PixelGeoModelLib PixelConditionsData ) + INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} + LINK_LIBRARIES ${CLHEP_LIBRARIES} + AthenaBaseComps StoreGateLib GaudiKernel TrkEventPrimitives + AthenaPoolUtilities Identifier InDetIdentifier InDetRIO_OnTrack + PathResolver TrkSurfaces TrkMeasurementBase TrkParameters + TrkRIO_OnTrack TrkTrack TrkToolInterfaces PixelGeoModelLib PixelConditionsData ) # Install files from the package: atlas_install_runtime( share/*.txt ) diff --git a/InnerDetector/InDetRecTools/SeedToTrackConversionTool/CMakeLists.txt b/InnerDetector/InDetRecTools/SeedToTrackConversionTool/CMakeLists.txt index b7e72b85727d07250e97a43f40957baa3d73e767..a933c9c347178fd474185189e8ba003f9287b61b 100644 --- a/InnerDetector/InDetRecTools/SeedToTrackConversionTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/SeedToTrackConversionTool/CMakeLists.txt @@ -1,30 +1,10 @@ -################################################################################ -# Package: SeedToTrackConversionTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( SeedToTrackConversionTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkEvent/TrkTrack - Tracking/TrkExtrapolation/TrkExInterfaces - Tracking/TrkTools/TrkToolInterfaces - PRIVATE - Database/AthenaPOOL/AthenaPoolUtilities - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecEvent/SiSPSeededTrackFinderData - Tracking/TrkEvent/TrkRIO_OnTrack ) -# External dependencies: -find_package( CLHEP ) -find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess ) + # Component(s) in the package: atlas_add_component( SeedToTrackConversionTool src/*.cxx - src/components/*.cxx - INCLUDE_DIRS ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps GaudiKernel InDetRecToolInterfaces TrkTrack TrkExInterfaces TrkToolInterfaces AthenaPoolUtilities InDetPrepRawData SiSPSeededTrackFinderData TrkRIO_OnTrack ) -# Install files from the package: -atlas_install_headers( SeedToTrackConversionTool ) + src/components/*.cxx + LINK_LIBRARIES AthenaBaseComps AthenaPoolUtilities GaudiKernel InDetPrepRawData InDetRecToolInterfaces SiSPSeededTrackFinderData StoreGateLib TrkExInterfaces TrkRIO_OnTrack TrkToolInterfaces TrkTrack ) diff --git a/InnerDetector/InDetRecTools/SiClusterOnTrackTool/CMakeLists.txt b/InnerDetector/InDetRecTools/SiClusterOnTrackTool/CMakeLists.txt index 7b3574e7378a388d1b99978c8dd0991fdde5d6a2..d5d724a7a0399bbf294ded16dc0445bd7b8b0feb 100644 --- a/InnerDetector/InDetRecTools/SiClusterOnTrackTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/SiClusterOnTrackTool/CMakeLists.txt @@ -1,20 +1,10 @@ -################################################################################ -# Package: SiClusterOnTrackTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( SiClusterOnTrackTool ) -# External dependencies: -find_package( Eigen ) - # Component(s) in the package: atlas_add_component( SiClusterOnTrackTool src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaPoolUtilities GeoPrimitives GaudiKernel InDetPrepRawData InDetRIO_OnTrack TrkParameters TrkToolInterfaces StoreGateLib SGtests EventPrimitives InDetIdentifier InDetReadoutGeometry PixelReadoutGeometry SiClusterizationToolLib TrkSurfaces TrkRIO_OnTrack PixelConditionsData TrkNeuralNetworkUtilsLib TrkEventUtils SCT_ModuleDistortionsLib ) - -# Install files from the package: -atlas_install_headers( SiClusterOnTrackTool ) - + LINK_LIBRARIES AthenaBaseComps AthenaPoolUtilities EventPrimitives GaudiKernel GeoPrimitives Identifier InDetCondTools InDetIdentifier InDetPrepRawData InDetRIO_OnTrack InDetReadoutGeometry PixelConditionsData PixelGeoModelLib PixelReadoutGeometry SCT_ModuleDistortionsLib SiClusterizationToolLib StoreGateLib TrkEventUtils TrkParameters TrkRIO_OnTrack TrkSurfaces TrkToolInterfaces ) diff --git a/InnerDetector/InDetRecTools/SiClusterizationTool/CMakeLists.txt b/InnerDetector/InDetRecTools/SiClusterizationTool/CMakeLists.txt index f9cf31ff72354a4de4e828ced343303d586d214f..cce538a2ded0d823f829e60ba43fb513e2e6dd0f 100644 --- a/InnerDetector/InDetRecTools/SiClusterizationTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/SiClusterizationTool/CMakeLists.txt @@ -1,45 +1,8 @@ -################################################################################ -# Package: SiClusterizationTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( SiClusterizationTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( - PUBLIC - Control/AthenaBaseComps - Control/AthenaKernel - DetectorDescription/GeoPrimitives - DetectorDescription/Identifier - Event/EventPrimitives - GaudiKernel - InnerDetector/InDetRawEvent/InDetSimData - InnerDetector/InDetConditions/BeamSpotConditionsData - InnerDetector/InDetConditions/InDetConditionsSummaryService - InnerDetector/InDetConditions/InDetCondTools - InnerDetector/InDetConditions/PixelConditionsData - InnerDetector/InDetDetDescr/PixelCabling - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/PixelReadoutGeometry - InnerDetector/InDetDetDescr/SCT_ReadoutGeometry - InnerDetector/InDetRawEvent/InDetRawData - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkEvent/TrkParameters - Tracking/TrkUtilityPackages/TrkNeuralNetworkUtils - PRIVATE - Database/AthenaPOOL/AthenaPoolUtilities - Database/AthenaPOOL/PoolSvc - Database/APR/FileCatalog - DetectorDescription/AtlasDetDescr - DetectorDescription/DetDescrCond/DetDescrCondTools - InnerDetector/InDetDetDescr/PixelGeoModel - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/VxVertex ) - # External dependencies: find_package( lwtnn ) find_package( CLHEP ) @@ -53,18 +16,12 @@ atlas_add_library( SiClusterizationToolLib INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${LWTNN_INCLUDE_DIRS} PRIVATE_INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${COOL_INCLUDE_DIRS} PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${LWTNN_LIBRARIES} AthenaBaseComps AthenaKernel GeoPrimitives - Identifier EventPrimitives GaudiKernel InDetSimData InDetIdentifier - InDetReadoutGeometry PixelReadoutGeometry SCT_ReadoutGeometry InDetRawData InDetPrepRawData InDetRecToolInterfaces InDetConditionsSummaryService - TrkParameters TrkNeuralNetworkUtilsLib PixelConditionsData - PixelGeoModelLib PixelCablingLib BeamSpotConditionsData - PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} ${COOL_LIBRARIES} AthenaPoolUtilities FileCatalog AtlasDetDescr - TrkSurfaces TrkEventPrimitives VxVertex PixelGeoModelLib PoolSvcLib DetDescrCondToolsLib stdc++fs) + LINK_LIBRARIES ${CLHEP_LIBRARIES} ${LWTNN_LIBRARIES} ${ROOT_LIBRARIES} AthenaBaseComps AthenaKernel BeamSpotConditionsData EventPrimitives GaudiKernel GeoPrimitives Identifier InDetCondTools InDetConditionsSummaryService InDetIdentifier InDetPrepRawData InDetRawData InDetReadoutGeometry InDetRecToolInterfaces InDetSimData PixelCablingLib PixelConditionsData PixelGeoModelLib PoolSvcLib StoreGateLib TrkNeuralNetworkUtilsLib TrkParameters TrkSurfaces + PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${COOL_LIBRARIES} AthenaPoolUtilities AtlasDetDescr AtlasHepMCLib DetDescrCondToolsLib FileCatalog PixelReadoutGeometry SCT_ReadoutGeometry TrkEventPrimitives VxVertex ) atlas_add_component( SiClusterizationTool src/components/*.cxx - INCLUDE_DIRS ${COOL_INCLUDE_DIRS} - LINK_LIBRARIES ${COOL_LIBRARIES} GaudiKernel PixelConditionsData SiClusterizationToolLib PoolSvcLib ) + LINK_LIBRARIES SiClusterizationToolLib ) # Install files from the package: atlas_install_joboptions( share/*.py ) diff --git a/InnerDetector/InDetRecTools/SiCombinatorialTrackFinderTool_xk/CMakeLists.txt b/InnerDetector/InDetRecTools/SiCombinatorialTrackFinderTool_xk/CMakeLists.txt index 1a7353bf6a6d7e00b4518094491413a1e273f7ab..637d93d4172539bb4cb90aed6a239f2163a4451a 100644 --- a/InnerDetector/InDetRecTools/SiCombinatorialTrackFinderTool_xk/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/SiCombinatorialTrackFinderTool_xk/CMakeLists.txt @@ -1,38 +1,10 @@ -################################################################################ -# Package: SiCombinatorialTrackFinderTool_xk -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( SiCombinatorialTrackFinderTool_xk ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetConditions/InDetConditionsSummaryService - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecEvent/SiSPSeededTrackFinderData - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkPatternParameters - Tracking/TrkEvent/TrkTrack - Tracking/TrkExtrapolation/TrkExInterfaces - Tracking/TrkTools/TrkToolInterfaces - PRIVATE - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkMaterialOnTrack - Tracking/TrkEvent/TrkMeasurementBase - Tracking/TrkEvent/TrkRIO_OnTrack ) - # Component(s) in the package: atlas_add_component( SiCombinatorialTrackFinderTool_xk src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetReadoutGeometry InDetPrepRawData SiSPSeededTrackFinderData InDetRecToolInterfaces TrkGeometry TrkEventPrimitives TrkPatternParameters TrkTrack TrkExInterfaces TrkToolInterfaces InDetRIO_OnTrack TrkSurfaces TrkMaterialOnTrack TrkMeasurementBase TrkRIO_OnTrack ) - -# Install files from the package: -atlas_install_headers( SiCombinatorialTrackFinderTool_xk ) - + LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetPrepRawData InDetReadoutGeometry InDetRecToolInterfaces MagFieldConditions SiSPSeededTrackFinderData StoreGateLib TrkExInterfaces TrkGeometry TrkMeasurementBase TrkToolInterfaces TrkTrack ) diff --git a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/CMakeLists.txt b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/CMakeLists.txt index 7fa20f0660163cc1cc376c433159c4bec7a94215..46cc9170e677c910c2b8806884c9b52d81aa0d95 100644 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/CMakeLists.txt @@ -1,37 +1,10 @@ -################################################################################ -# Package: SiDetElementsRoadTool_xk -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( SiDetElementsRoadTool_xk ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Control/AthenaKernel - GaudiKernel - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/PixelReadoutGeometry - InnerDetector/InDetDetDescr/SCT_ReadoutGeometry - InnerDetector/InDetRecEvent/SiSPSeededTrackFinderData - InnerDetector/InDetRecTools/InDetRecToolInterfaces - MagneticField/MagFieldInterfaces - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkDetDescr/TrkSurfaces - PRIVATE - Database/AthenaPOOL/AthenaPoolUtilities - Event/EventInfo - Tracking/TrkEvent/TrkPrepRawData - Tracking/TrkExtrapolation/TrkExInterfaces - MagneticField/MagFieldElements - MagneticField/MagFieldConditions ) - # Component(s) in the package: atlas_add_component( SiDetElementsRoadTool_xk src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps AthenaKernel GaudiKernel InDetReadoutGeometry SiSPSeededTrackFinderData PixelReadoutGeometry SCT_ReadoutGeometry InDetRecToolInterfaces MagFieldInterfaces TrkGeometry TrkSurfaces AthenaPoolUtilities EventInfo TrkPrepRawData TrkExInterfaces MagFieldElements MagFieldConditions ) - -# Install files from the package: -atlas_install_headers( SiDetElementsRoadTool_xk ) - + LINK_LIBRARIES AthenaBaseComps AthenaKernel AthenaPoolUtilities GaudiKernel InDetReadoutGeometry InDetRecToolInterfaces MagFieldConditions MagFieldElements PixelReadoutGeometry SCT_ReadoutGeometry SiSPSeededTrackFinderData StoreGateLib TrkExInterfaces TrkGeometry TrkParameters TrkPrepRawData TrkSurfaces ) diff --git a/InnerDetector/InDetRecTools/SiSpacePointTool/CMakeLists.txt b/InnerDetector/InDetRecTools/SiSpacePointTool/CMakeLists.txt index cdafafe9487f6cecfd9edb9fbb3e5478037db45c..0c6fb198bad0f8c942c23b5a3da9843ff0a8a7da 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/SiSpacePointTool/CMakeLists.txt @@ -1,36 +1,15 @@ -################################################################################ -# Package: SiSpacePointTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( SiSpacePointTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Control/AthenaKernel - DetectorDescription/GeoPrimitives - InnerDetector/InDetRecEvent/InDetPrepRawData - PRIVATE - GaudiKernel - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetRecEvent/SiSpacePoint - Tracking/TrkEvent/TrkSpacePoint ) - -# External dependencies: -find_package( Eigen ) - # Component(s) in the package: atlas_add_library( SiSpacePointToolLib src/*.cxx PUBLIC_HEADERS SiSpacePointTool - INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GeoPrimitives InDetPrepRawData - PRIVATE_LINK_LIBRARIES GaudiKernel InDetIdentifier InDetReadoutGeometry SiSpacePoint TrkSpacePoint ) + LINK_LIBRARIES AthenaBaseComps GeoPrimitives InDetPrepRawData TrkSpacePoint + PRIVATE_LINK_LIBRARIES InDetIdentifier InDetReadoutGeometry SiSpacePoint ) atlas_add_component( SiSpacePointTool src/components/*.cxx - INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GeoPrimitives InDetPrepRawData GaudiKernel InDetIdentifier InDetReadoutGeometry SiSpacePoint TrkSpacePoint SiSpacePointToolLib ) - + LINK_LIBRARIES SiSpacePointToolLib ) diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/CMakeLists.txt b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/CMakeLists.txt index 1a58829af51be174ac5a5282eb831b1baf17e654..e901b6a054ae2bcdc27249279ccfdcf6b16cae9f 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/CMakeLists.txt @@ -1,33 +1,10 @@ -################################################################################ -# Package: SiSpacePointsSeedTool_xk -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( SiSpacePointsSeedTool_xk ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetConditions/BeamSpotConditionsData - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecEvent/SiSpacePointsSeed - InnerDetector/InDetRecEvent/SiSPSeededTrackFinderData - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkSpacePoint - PRIVATE - Tracking/TrkTools/TrkToolInterfaces - MagneticField/MagFieldElements - MagneticField/MagFieldConditions) - # Component(s) in the package: atlas_add_component( SiSpacePointsSeedTool_xk src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetReadoutGeometry InDetPrepRawData SiSpacePointsSeed SiSPSeededTrackFinderData InDetRecToolInterfaces TrkSurfaces TrkSpacePoint TrkToolInterfaces MagFieldElements MagFieldConditions BeamSpotConditionsData ) - -# Install files from the package: -atlas_install_headers( SiSpacePointsSeedTool_xk ) - + LINK_LIBRARIES AthenaBaseComps BeamSpotConditionsData GaudiKernel InDetPrepRawData InDetReadoutGeometry InDetRecToolInterfaces MagFieldConditions MagFieldElements SiSPSeededTrackFinderData TrkEventUtils TrkSpacePoint ) diff --git a/InnerDetector/InDetRecTools/SiTrackMakerTool_xk/CMakeLists.txt b/InnerDetector/InDetRecTools/SiTrackMakerTool_xk/CMakeLists.txt index 7ecd51106602c068c09f9c483117c67864693d1d..a8168de6c348e629af75879aab9d33c401254e79 100644 --- a/InnerDetector/InDetRecTools/SiTrackMakerTool_xk/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/SiTrackMakerTool_xk/CMakeLists.txt @@ -1,32 +1,10 @@ -################################################################################ -# Package: SiTrackMakerTool_xk -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( SiTrackMakerTool_xk ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetConditions/BeamSpotConditionsData - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkEvent/TrkCaloClusterROI - PRIVATE - Database/AthenaPOOL/AthenaPoolUtilities - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecEvent/SiSPSeededTrackFinderData - Tracking/TrkEvent/TrkRIO_OnTrack - MagneticField/MagFieldElements - MagneticField/MagFieldConditions) - # Component(s) in the package: atlas_add_component( SiTrackMakerTool_xk src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRecToolInterfaces TrkGeometry TrkCaloClusterROI AthenaPoolUtilities InDetPrepRawData SiSPSeededTrackFinderData TrkRIO_OnTrack MagFieldElements MagFieldConditions BeamSpotConditionsData ) - -# Install files from the package: -atlas_install_headers( SiTrackMakerTool_xk ) - + LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRecToolInterfaces TrkGeometry TrkCaloClusterROI InDetPrepRawData SiSPSeededTrackFinderData TrkRIO_OnTrack MagFieldElements MagFieldConditions BeamSpotConditionsData ) diff --git a/InnerDetector/InDetRecTools/SiZvertexTool_xk/CMakeLists.txt b/InnerDetector/InDetRecTools/SiZvertexTool_xk/CMakeLists.txt index 021b579e802d5bbd125412fffdd646d4827f9081..d9b7c05ffe62ce55ebfbc575334d1cb3ce4ed537 100644 --- a/InnerDetector/InDetRecTools/SiZvertexTool_xk/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/SiZvertexTool_xk/CMakeLists.txt @@ -1,25 +1,10 @@ -################################################################################ -# Package: SiZvertexTool_xk -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( SiZvertexTool_xk ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetRecTools/InDetRecToolInterfaces - PRIVATE - InnerDetector/InDetRecEvent/SiSpacePointsSeed - InnerDetector/InDetRecEvent/SiSPSeededTrackFinderData ) - # Component(s) in the package: atlas_add_component( SiZvertexTool_xk src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRecToolInterfaces SiSpacePointsSeed SiSPSeededTrackFinderData ) - -# Install files from the package: -atlas_install_headers( SiZvertexTool_xk ) - + LINK_LIBRARIES AthenaBaseComps GaudiKernel Identifier InDetRecToolInterfaces SiSpacePointsSeed SiSPSeededTrackFinderData VxVertex ) diff --git a/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/CMakeLists.txt index 258ea53b34eff2fb7ec5d3f66e303982bed03cbe..93fdd83c5e8ac2c0603208e626c4eb555bb2c278 100644 --- a/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/CMakeLists.txt @@ -1,33 +1,10 @@ -################################################################################ -# Package: TRT_DetElementsRoadTool_xk -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_DetElementsRoadTool_xk ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - DetectorDescription/GeoModel/GeoModelInterfaces - GaudiKernel - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/TRT_ReadoutGeometry - InnerDetector/InDetRecTools/InDetRecToolInterfaces - MagneticField/MagFieldInterfaces - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkDetDescr/TrkSurfaces - PRIVATE - Database/AthenaPOOL/AthenaPoolUtilities - Tracking/TrkExtrapolation/TrkExInterfaces - MagneticField/MagFieldElements - MagneticField/MagFieldConditions) - # Component(s) in the package: atlas_add_component( TRT_DetElementsRoadTool_xk src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetReadoutGeometry TRT_ReadoutGeometry InDetRecToolInterfaces MagFieldInterfaces TrkGeometry TrkSurfaces AthenaPoolUtilities TrkExInterfaces MagFieldElements MagFieldConditions) - -# Install files from the package: -atlas_install_headers( TRT_DetElementsRoadTool_xk ) - + LINK_LIBRARIES AthenaBaseComps AthenaKernel GaudiKernel GeoModelInterfaces InDetRecToolInterfaces MagFieldConditions MagFieldElements StoreGateLib TRT_ReadoutGeometry TrkExInterfaces TrkGeometry TrkParameters TrkSurfaces ) diff --git a/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/CMakeLists.txt index d0073825fa24af143a3969d3b2f465fd12bc0962..140df9273863e878f868bb37fd5adcf8d1d3155b 100644 --- a/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/CMakeLists.txt @@ -1,30 +1,10 @@ -################################################################################ -# Package: TRT_DriftCircleOnTrackTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_DriftCircleOnTrackTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkEvent/TrkRIO_OnTrack - LumiBlock/LumiBlockData - PRIVATE - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/TRT_ReadoutGeometry - InnerDetector/InDetRecTools/TRT_DriftFunctionTool - Tracking/TrkEvent/TrkEventPrimitives ) - # Component(s) in the package: atlas_add_component( TRT_DriftCircleOnTrackTool src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRIO_OnTrack TrkRIO_OnTrack TrkToolInterfaces InDetReadoutGeometry TRT_ReadoutGeometry TrkEventPrimitives TrkRIO_OnTrack LumiBlockData TRT_DriftFunctionToolLib ) - -# Install files from the package: -atlas_install_headers( TRT_DriftCircleOnTrackTool ) - + LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRIO_OnTrack StoreGateLib TrkRIO_OnTrack TrkToolInterfaces TRT_ReadoutGeometry TrkEventPrimitives TrkRIO_OnTrack LumiBlockData TRT_DriftFunctionToolLib ) diff --git a/InnerDetector/InDetRecTools/TRT_DriftCircleTool/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_DriftCircleTool/CMakeLists.txt index f7ebb0118e1bd53255016f0ffd9f36e008a9c74d..9fdb18866591368666c4a13972f4ecc7b177562c 100644 --- a/InnerDetector/InDetRecTools/TRT_DriftCircleTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_DriftCircleTool/CMakeLists.txt @@ -1,32 +1,8 @@ -################################################################################ -# Package: TRT_DriftCircleTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_DriftCircleTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetConditions/TRT_ConditionsServices - InnerDetector/InDetRawEvent/InDetRawData - InnerDetector/InDetRecEvent/InDetPrepRawData - Tracking/TrkEvent/TrkPrepRawData - PRIVATE - Commission/CommissionEvent - DetectorDescription/GeoPrimitives - Event/EventPrimitives - LumiBlock/LumiBlockData - InnerDetector/InDetConditions/InDetConditionsSummaryService - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/TRT_ReadoutGeometry - InnerDetector/InDetRecTools/TRT_DriftFunctionTool ) - -# External dependencies: -find_package( Eigen ) - atlas_add_library( TRT_DriftCircleToolLib TRT_DriftCircleTool/*.h INTERFACE @@ -37,7 +13,4 @@ atlas_add_library( TRT_DriftCircleToolLib atlas_add_component( TRT_DriftCircleTool src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} TRT_DriftCircleToolLib GeoPrimitives EventPrimitives xAODEventInfo InDetIdentifier InDetReadoutGeometry TRT_DriftFunctionToolLib ) - - + LINK_LIBRARIES EventPrimitives GaudiKernel GeoPrimitives InDetConditionsSummaryService InDetIdentifier InDetPrepRawData InDetRawData StoreGateLib TRT_ConditionsServicesLib TRT_DriftCircleToolLib TRT_DriftFunctionToolLib TRT_ReadoutGeometry xAODEventInfo ) diff --git a/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/CMakeLists.txt index f3741dd7004b7bfa84b84fbf67874453c34690d7..d222fec2dbfaca78a5cbf56e5c65045d928f08ae 100644 --- a/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/CMakeLists.txt @@ -1,23 +1,8 @@ -################################################################################ -# Package: TRT_DriftFunctionTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_DriftFunctionTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/TRT_ReadoutGeometry - PRIVATE - DetectorDescription/GeoModel/GeoModelInterfaces - DetectorDescription/GeoModel/GeoModelUtilities - Event/EventInfo - InnerDetector/InDetConditions/TRT_ConditionsServices - InnerDetector/InDetDetDescr/InDetIdentifier ) - # External dependencies: find_package( CLHEP ) @@ -32,5 +17,4 @@ atlas_add_component( TRT_DriftFunctionTool src/*.cxx src/components/*.cxx INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps GaudiKernel InDetReadoutGeometry TRT_ReadoutGeometry GeoModelUtilities EventInfo TRT_ConditionsServicesLib InDetIdentifier TRT_DriftFunctionToolLib ) - + LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps GaudiKernel InDetReadoutGeometry TRT_ReadoutGeometry GeoModelInterfaces GeoModelUtilities TRT_ConditionsServicesLib InDetIdentifier TRT_DriftFunctionToolLib ) diff --git a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/CMakeLists.txt index 0b89b6e0a674ce03d7af8bd2580bdfa2366e5d7b..c74ef1d4367d928934d4ed743ca10ca21f4a31f8 100644 --- a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/CMakeLists.txt @@ -1,24 +1,21 @@ -################################################################################ -# Package: TRT_ElectronPidTools -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_ElectronPidTools ) # External dependencies: -find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) +find_package( CORAL COMPONENTS CoralBase ) +find_package( ROOT COMPONENTS Core MathCore ) atlas_add_library( TRT_ElectronPidToolsLib TRT_ElectronPidTools/*.h INTERFACE PUBLIC_HEADERS TRT_ElectronPidTools - LINK_LIBRARIES GaudiKernel AthenaBaseComps AthenaKernel TrkTrack InDetRawData TrkParameters InDetRIO_OnTrack TrkToolInterfaces TRT_ConditionsData TrkEventPrimitives TRT_ConditionsServicesLib InDetPrepRawData StoreGateLib TRT_ConditionsData ) + LINK_LIBRARIES GaudiKernel AthenaBaseComps AthenaKernel TrkTrack InDetRawData TrkParameters TrkToolInterfaces TRT_ConditionsData TrkEventPrimitives TRT_ConditionsServicesLib InDetPrepRawData StoreGateLib TRT_ConditionsData ) # Component(s) in the package: atlas_add_component( TRT_ElectronPidTools src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} TRT_ElectronPidToolsLib AthenaPoolUtilities Identifier InDetIdentifier InDetReadoutGeometry TRT_ReadoutGeometry TrkSurfaces TrkMeasurementBase TrkRIO_OnTrack xAODEventInfo) - + INCLUDE_DIRS ${CORAL_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} + LINK_LIBRARIES ${CORAL_LIBRARIES} ${ROOT_LIBRARIES} AthenaPoolUtilities GaudiKernel Identifier InDetIdentifier InDetPrepRawData InDetRIO_OnTrack InDetRawData StoreGateLib TRT_ElectronPidToolsLib TRT_ReadoutGeometry TrkMeasurementBase TrkParameters TrkRIO_OnTrack TrkSurfaces TrkTrack xAODEventInfo ) diff --git a/InnerDetector/InDetRecTools/TRT_SeededSpacePointFinderTool/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_SeededSpacePointFinderTool/CMakeLists.txt index 8f8c97138fe5751313403c656a4c7c59980a17cc..1dde67d63c9812e4de888cfaabc2e6b3ace583b0 100644 --- a/InnerDetector/InDetRecTools/TRT_SeededSpacePointFinderTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_SeededSpacePointFinderTool/CMakeLists.txt @@ -1,32 +1,8 @@ -################################################################################ -# Package: TRT_SeededSpacePointFinderTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_SeededSpacePointFinderTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - DetectorDescription/IRegionSelector - GaudiKernel - Control/StoreGate - InnerDetector/InDetRecEvent/SiSpacePointsSeed - InnerDetector/InDetRecTools/InDetRecToolInterfaces - MagneticField/MagFieldInterfaces - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkEvent/TrkSpacePoint - Tracking/TrkEvent/TrkEventUtils - PRIVATE - DetectorDescription/RoiDescriptor - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetRecEvent/InDetPrepRawData - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkTools/TrkToolInterfaces - MagneticField/MagFieldElements - MagneticField/MagFieldConditions - ) - # External dependencies: find_package( CLHEP ) @@ -35,8 +11,4 @@ atlas_add_component( TRT_SeededSpacePointFinderTool src/*.cxx src/components/*.cxx INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps IRegionSelector GaudiKernel SiSpacePointsSeed InDetRecToolInterfaces MagFieldInterfaces TrkGeometry TrkSpacePoint RoiDescriptor InDetIdentifier InDetPrepRawData TrkSurfaces TrkToolInterfaces TrkEventUtils MagFieldElements MagFieldConditions) - -# Install files from the package: -atlas_install_headers( TRT_SeededSpacePointFinderTool ) - + LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps GaudiKernel IRegionSelector InDetIdentifier InDetPrepRawData InDetRecToolInterfaces MagFieldConditions MagFieldElements RoiDescriptor SiSpacePointsSeed StoreGateLib TrkEventUtils TrkGeometry TrkSpacePoint TrkSurfaces ) diff --git a/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/CMakeLists.txt index fe90e76b0f22d61ad434498f5f054ba47994ffcf..7413917594a092a92bd01c76cd9c679fa56f5c46 100644 --- a/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/CMakeLists.txt @@ -1,33 +1,8 @@ -################################################################################ -# Package: TRT_SeededTrackFinderTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_SeededTrackFinderTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetRecTools/InDetRecToolInterfaces - MagneticField/MagFieldInterfaces - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkEventUtils - PRIVATE - Control/StoreGate - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - InnerDetector/InDetRecEvent/SiSPSeededTrackFinderData - Tracking/TrkEvent/TrkCaloClusterROI - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkPseudoMeasurementOnTrack - Tracking/TrkEvent/TrkTrack - Tracking/TrkExtrapolation/TrkExInterfaces - Tracking/TrkTools/TrkToolInterfaces ) - # External dependencies: find_package( CLHEP ) @@ -36,8 +11,4 @@ atlas_add_component( TRT_SeededTrackFinderTool src/*.cxx src/components/*.cxx INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps GaudiKernel InDetRecToolInterfaces MagFieldInterfaces TrkGeometry TrkSurfaces TrkParameters StoreGateLib SGtests InDetIdentifier InDetPrepRawData InDetRIO_OnTrack SiSPSeededTrackFinderData TrkCaloClusterROI TrkEventPrimitives TrkPseudoMeasurementOnTrack TrkTrack TrkExInterfaces TrkToolInterfaces ) - -# Install files from the package: -atlas_install_headers( TRT_SeededTrackFinderTool ) - + LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps GaudiKernel InDetIdentifier InDetPrepRawData InDetRIO_OnTrack InDetRecToolInterfaces MagFieldConditions MagFieldElements SiSPSeededTrackFinderData StoreGateLib TrkCaloClusterROI TrkEventPrimitives TrkEventUtils TrkExInterfaces TrkGeometry TrkParameters TrkPseudoMeasurementOnTrack TrkSurfaces TrkToolInterfaces TrkTrack ) diff --git a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt index 996ce28a2b30a416193fa3935bd494a064e1faf2..0949493404e102efed679f8fd3f587e8a8003c5f 100644 --- a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt @@ -1,34 +1,10 @@ -################################################################################ -# Package: TRT_SegmentToTrackTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_SegmentToTrackTool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkEvent/TrkEventPrimitives - PRIVATE - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - Tracking/TrkEvent/TrkPseudoMeasurementOnTrack - Tracking/TrkExtrapolation/TrkExInterfaces - Tracking/TrkFitter/TrkFitterInterfaces - Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkDetDescr/TrkSurfaces - MagneticField/MagFieldElements - MagneticField/MagFieldConditions - ) - # Component(s) in the package: atlas_add_component( TRT_SegmentToTrackTool src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRecToolInterfaces TrkEventPrimitives InDetIdentifier InDetRIO_OnTrack TrkPseudoMeasurementOnTrack TrkExInterfaces TrkFitterInterfaces TrkToolInterfaces MagFieldElements MagFieldConditions) - -# Install files from the package: -atlas_install_headers( TRT_SegmentToTrackTool ) - + LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRecToolInterfaces TrkEventPrimitives InDetIdentifier InDetRIO_OnTrack TrkPseudoMeasurementOnTrack TrkExInterfaces TrkFitterInterfaces TrkSurfaces TrkToolInterfaces MagFieldElements MagFieldConditions) diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/CMakeLists.txt index 6c28c7b41d971802bd10b73fefc4b565dd8ad571..67cadf1c225a84c94fff17072ca077493c2a1e38 100644 --- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/CMakeLists.txt @@ -1,40 +1,10 @@ -################################################################################ -# Package: TRT_TrackExtensionTool_DAF -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_TrackExtensionTool_DAF ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkEventUtils - PRIVATE - Control/StoreGate - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/TRT_ReadoutGeometry - InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool - MagneticField/MagFieldInterfaces - Tracking/TrkEvent/TrkMeasurementBase - Tracking/TrkEvent/TrkTrack - Tracking/TrkExtrapolation/TrkExInterfaces - Tracking/TrkTools/TrkToolInterfaces - MagneticField/MagFieldElements - MagneticField/MagFieldConditions - ) - # Component(s) in the package: atlas_add_component( TRT_TrackExtensionTool_DAF src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetPrepRawData InDetRecToolInterfaces TrkGeometry TrkParameters StoreGateLib SGtests InDetIdentifier InDetReadoutGeometry TRT_ReadoutGeometry MagFieldInterfaces TrkMeasurementBase TrkTrack TrkExInterfaces TrkToolInterfaces MagFieldElements MagFieldConditions InDetCompetingRIOsOnTrackToolLib ) - -# Install files from the package: -atlas_install_headers( TRT_TrackExtensionTool_DAF ) - + LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetCompetingRIOsOnTrackToolLib InDetIdentifier InDetPrepRawData InDetRecToolInterfaces MagFieldConditions MagFieldElements TRT_ReadoutGeometry TrkEventUtils TrkExInterfaces TrkGeometry TrkMeasurementBase TrkParameters TrkToolInterfaces TrkTrack ) diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/CMakeLists.txt index 6f0286702031aaa6c3564a1094fa29921f64eb60..a51fc7897877f30c998506e56d697e94792bba87 100644 --- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/CMakeLists.txt @@ -1,43 +1,10 @@ -################################################################################ -# Package: TRT_TrackExtensionTool_xk -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_TrackExtensionTool_xk ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - GaudiKernel - Control/StoreGate - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/TRT_ReadoutGeometry - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecTools/InDetRecToolInterfaces - MagneticField/MagFieldInterfaces - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkPatternParameters - Tracking/TrkEvent/TrkPseudoMeasurementOnTrack - Tracking/TrkEvent/TrkSegment - Tracking/TrkExtrapolation/TrkExInterfaces - Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkEvent/TrkEventUtils - PRIVATE - Database/AthenaPOOL/AthenaPoolUtilities - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkRIO_OnTrack - Tracking/TrkEvent/TrkTrack - MagneticField/MagFieldElements - MagneticField/MagFieldConditions) - # Component(s) in the package: atlas_add_component( TRT_TrackExtensionTool_xk src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetReadoutGeometry TRT_ReadoutGeometry InDetPrepRawData InDetRecToolInterfaces MagFieldInterfaces TrkGeometry TrkEventPrimitives TrkPatternParameters TrkPseudoMeasurementOnTrack TrkSegment TrkExInterfaces TrkToolInterfaces AthenaPoolUtilities InDetRIO_OnTrack TrkSurfaces TrkRIO_OnTrack TrkTrack MagFieldElements MagFieldConditions) - -# Install files from the package: -atlas_install_headers( TRT_TrackExtensionTool_xk ) - + LINK_LIBRARIES AthenaBaseComps AthenaPoolUtilities GaudiKernel InDetIdentifier InDetPrepRawData InDetRIO_OnTrack InDetRecToolInterfaces MagFieldConditions MagFieldElements StoreGateLib TRT_ReadoutGeometry TrkEventPrimitives TrkEventUtils TrkExInterfaces TrkGeometry TrkPatternParameters TrkPseudoMeasurementOnTrack TrkRIO_OnTrack TrkSegment TrkSurfaces TrkToolInterfaces TrkTrack ) diff --git a/InnerDetector/InDetRecTools/TRT_TrackHoleSearch/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_TrackHoleSearch/CMakeLists.txt index 379cb31edc7aa7a047634d7fae7ba0b82459b641..16c835399f4e4c5baf4cdf8e181b2f8852dbcd01 100644 --- a/InnerDetector/InDetRecTools/TRT_TrackHoleSearch/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_TrackHoleSearch/CMakeLists.txt @@ -1,38 +1,11 @@ -################################################################################ -# Package: TRT_TrackHoleSearch -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_TrackHoleSearch ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Control/StoreGate - GaudiKernel - Tracking/TrkEvent/TrkParameters - Tracking/TrkTools/TrkToolInterfaces - Trigger/TrigEvent/TrigDecisionInterface - PRIVATE - DetectorDescription/Identifier - Event/xAOD/xAODEventInfo - Event/xAOD/xAODTracking - Event/EventPrimitives - InnerDetector/InDetConditions/InDetConditionsSummaryService - InnerDetector/InDetConditions/TRT_ConditionsServices - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkEventUtils - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkEvent/VxVertex - Tracking/TrkExtrapolation/TrkExInterfaces ) - # External dependencies: find_package( CLHEP ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread MathMore Minuit Minuit2 Matrix Physics HistPainter Rint ) +find_package( ROOT COMPONENTS Core Tree ) atlas_add_library( TRT_TrackHoleSearchLib TRT_TrackHoleSearch/*.h @@ -45,7 +18,7 @@ atlas_add_component( TRT_TrackHoleSearch src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} TRT_TrackHoleSearchLib Identifier EventPrimitives InDetIdentifier InDetRIO_OnTrack TrkSurfaces TrkEventPrimitives TrkEventUtils TrkTrackSummary VxVertex ) + LINK_LIBRARIES ${CLHEP_LIBRARIES} ${ROOT_LIBRARIES} EventPrimitives GaudiKernel Identifier InDetConditionsSummaryService InDetIdentifier InDetRIO_OnTrack StoreGateLib TRT_ConditionsServicesLib TRT_TrackHoleSearchLib TrkEventPrimitives TrkEventUtils TrkExInterfaces TrkParameters TrkSurfaces TrkTrack TrkTrackSummary ) # Install files from the package: atlas_install_joboptions( share/*.py ) diff --git a/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/CMakeLists.txt index 76cdd26ccced964d7405beba25e3a0cd09f9e3af..82681babf549a693862c650b6ff4fef109b63ea9 100644 --- a/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/CMakeLists.txt @@ -1,41 +1,14 @@ -################################################################################ -# Package: TRT_TrackSegmentsTool_xk -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TRT_TrackSegmentsTool_xk ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - DetectorDescription/GeoModel/GeoModelInterfaces - GaudiKernel - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/TRT_ReadoutGeometry - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - InnerDetector/InDetRecTools/InDetRecToolInterfaces - Tracking/TrkDetDescr/TrkGeometry - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkEventUtils - Tracking/TrkTools/TrkToolInterfaces - PRIVATE - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkPseudoMeasurementOnTrack - Tracking/TrkEvent/TrkRIO_OnTrack - Tracking/TrkExtrapolation/TrkExInterfaces ) - # External dependencies: -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread Graf Graf3d Gpad Html Postscript Gui GX11TTF GX11 ) +find_package( ROOT COMPONENTS Core MathCore Graf ) # Component(s) in the package: atlas_add_component( TRT_TrackSegmentsTool_xk src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps GaudiKernel InDetReadoutGeometry TRT_ReadoutGeometry InDetPrepRawData InDetRIO_OnTrack InDetRecToolInterfaces TrkGeometry TrkEventPrimitives TrkParameters TrkToolInterfaces EventInfo TrkSurfaces TrkPseudoMeasurementOnTrack TrkRIO_OnTrack TrkExInterfaces ) - -# Install files from the package: -atlas_install_headers( TRT_TrackSegmentsTool_xk ) - + LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps AthenaKernel AthenaPoolUtilities CxxUtils GaudiKernel GeoModelInterfaces InDetIdentifier InDetPrepRawData InDetRIO_OnTrack InDetRecToolInterfaces StoreGateLib TRT_ReadoutGeometry TrkEventPrimitives TrkEventUtils TrkExInterfaces TrkGeometry TrkParameters TrkPseudoMeasurementOnTrack TrkRIO_OnTrack TrkSurfaces TrkToolInterfaces ) diff --git a/InnerDetector/InDetRecTools/TrackVertexAssociationTool/CMakeLists.txt b/InnerDetector/InDetRecTools/TrackVertexAssociationTool/CMakeLists.txt index 06f807baf05aa72fda842aaed4d8a2af773b11ad..02525c19c43ba6fc3fadcf9c652b38e4d394aae7 100644 --- a/InnerDetector/InDetRecTools/TrackVertexAssociationTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TrackVertexAssociationTool/CMakeLists.txt @@ -1,7 +1,4 @@ -# $Id: CMakeLists.txt 787108 2016-11-29 14:45:15Z krasznaa $ -################################################################################ -# Package: TrackVertexAssociationTool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TrackVertexAssociationTool ) @@ -14,20 +11,6 @@ else() set( extra_deps Control/AthenaBaseComps GaudiKernel ) endif() -# Declare the package's dependencies: -atlas_depends_on_subdirs( - PUBLIC - Control/AthContainers - Control/AthLinks - Control/AthToolSupport/AsgTools - Control/AthToolSupport/AsgDataHandles - Event/xAOD/xAODCore - Event/xAOD/xAODTracking - PRIVATE - Event/xAOD/xAODEventInfo - Tools/PathResolver - ${extra_deps} ) - # External dependencies: find_package( ROOT COMPONENTS Core Hist RIO ) find_package( lwtnn REQUIRED ) @@ -37,8 +20,8 @@ atlas_add_library( TrackVertexAssociationToolLib Root/*.cxx PUBLIC_HEADERS TrackVertexAssociationTool INCLUDE_DIRS ${LWTNN_INCLUDE_DIRS} - LINK_LIBRARIES AthContainers AthLinks AsgTools xAODCore xAODTracking AsgDataHandlesLib ${LWTNN_LIBRARIES} - PRIVATE_LINK_LIBRARIES xAODEventInfo PathResolver ) + LINK_LIBRARIES AthContainers AthLinks AsgTools xAODCore xAODEventInfo xAODTracking AsgDataHandlesLib ${LWTNN_LIBRARIES} + PRIVATE_LINK_LIBRARIES PathResolver ) if( NOT XAOD_STANDALONE ) atlas_add_component( TrackVertexAssociationTool diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml index 301f6400d608b5d66d412d9c7ec65ab33232b141..85c485645d0a8e012baa8bf735518de26899acb0 100644 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml @@ -814,7 +814,31 @@ </h> <h id="vx_hs_truth_trans_reso_vs_PU" type="TH2" title="Truth Transverse Resolution vs. PU (2D)"> <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/> - <y title="|Reco-truth| transverse resolution [mm]" n="20" lo="0.0" hi="0.02"/> + <y title="|Reco-truth| transverse resolution [mm]" n="40" lo="-0.08" hi="0.08"/> +</h> +<h id="vx_hs_truth_long_pull_vs_PU" type="TH2" title="Truth Longitudinal Pull vs. PU (2D)"> + <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/> + <y title="|Reco-truth| longitudinal resolution [mm]" n="100" lo="-5.0" hi="5.0"/> +</h> +<h id="vx_hs_truth_trans_pull_vs_PU" type="TH2" title="Truth Transverse Pull vs. PU (2D)"> + <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/> + <y title="|Reco-truth| transverse resolution [mm]" n="100" lo="-5.0" hi="5.0"/> +</h> +<h id="vx_hs_truth_long_pull_vs_nTrk" type="TH2" title="Truth Longitudinal Pull vs. nTrk (2D)"> + <x title="Number of Tracks" n="50" lo="0.0" hi="100"/> + <y title="|Reco-truth| longitudinal resolution [mm]" n="100" lo="-5.0" hi="5.0"/> +</h> +<h id="vx_hs_truth_trans_pull_vs_nTrk" type="TH2" title="Truth Transverse Pull vs. nTrk (2D)"> + <x title="Number of Tracks" n="50" lo="0.0" hi="100"/> + <y title="|Reco-truth| transverse resolution [mm]" n="100" lo="-5.0" hi="5.0"/> +</h> +<h id="vx_hs_truth_long_reso_vs_nTrk" type="TH2" title="Truth Longitudinal Resolution vs. nTrk (2D)"> + <x title="Number of Tracks" n="50" lo="0.0" hi="100"/> + <y title="|Reco-truth| longitudinal resolution [mm]" n="40" lo="-0.08" hi="0.08"/> +</h> +<h id="vx_hs_truth_trans_reso_vs_nTrk" type="TH2" title="Truth Transverse Resolution vs. nTrk (2D)"> + <x title="Number of Tracks" n="50" lo="0.0" hi="100"/> + <y title="|Reco-truth| longitudinal resolution [mm]" n="40" lo="-0.08" hi="0.08"/> </h> <h id="vx_hs_truth_long_reso" type="TH1" title="Truth Longitudinal Resolution"> <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/> @@ -824,6 +848,86 @@ <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/> <y title="|Reco-truth| transverse resolution [mm]" lo="0.0" hi="1.0"/> </h> + + +<h id="vx_TYPE_truth_reso_z_vs_PU" type="TH2" title="Vertex Resolution vs PU Density"> + <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/> + <y title="|Reco_z-truth_z| [mm]" n="60" lo="-0.2" hi="0.2"/> +</h> +<h id="vx_TYPE_truth_reso_x_vs_PU" type="TH2" title="Vertex Resolution vs PU Density"> + <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/> + <y title="|Reco_x-truth_x| [mm]" n="60" lo="-0.1" hi="0.1"/> +</h> +<h id="vx_TYPE_truth_reso_y_vs_PU" type="TH2" title="Vertex Resolution vs PU Density"> + <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/> + <y title="|Reco_y-truth_y| [mm]" n="60" lo="-0.1" hi="0.1"/> +</h> +<h id="vx_TYPE_truth_pull_z_vs_PU" type="TH2" title="Vertex Pull vs PU Density"> + <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/> + <y title="|Reco_z-truth_z|/err_z" n="60" lo="-5.0" hi="5.0"/> +</h> +<h id="vx_TYPE_truth_pull_x_vs_PU" type="TH2" title="Vertex Pull vs PU Density"> + <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/> + <y title="|Reco_x-truth_x|/err_x" n="60" lo="-5.0" hi="5.0"/> +</h> +<h id="vx_TYPE_truth_pull_y_vs_PU" type="TH2" title="Vertex Pull vs PU Density"> + <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/> + <y title="|Reco_y-truth_y|/err_y" n="60" lo="-5.0" hi="5.0"/> +</h> + +<h id="vx_TYPE_truth_reso_z_vs_nTrk" type="TH2" title="Vertex Resolution vs Number of Tracks"> + <x title="Number of Tracks" n="50" lo="0.0" hi="100"/> + <y title="|Reco_z-truth_z| [mm]" n="60" lo="-0.2" hi="0.2"/> +</h> +<h id="vx_TYPE_truth_reso_x_vs_nTrk" type="TH2" title="Vertex Resolution vs Number of Tracks"> + <x title="Number of Tracks" n="50" lo="0.0" hi="100"/> + <y title="|Reco_x-truth_x| [mm]" n="60" lo="-0.1" hi="0.1"/> +</h> +<h id="vx_TYPE_truth_reso_y_vs_nTrk" type="TH2" title="Vertex Resolution vs Number of Tracks"> + <x title="Number of Tracks" n="50" lo="0.0" hi="100"/> + <y title="|Reco_y-truth_y| [mm]" n="60" lo="-0.1" hi="0.1"/> +</h> +<h id="vx_TYPE_truth_pull_z_vs_nTrk" type="TH2" title="Vertex Pull vs Number of Tracks"> + <x title="Number of Tracks" n="50" lo="0.0" hi="100"/> + <y title="|Reco_z-truth_z|/err_z" n="60" lo="-5.0" hi="5.0"/> +</h> +<h id="vx_TYPE_truth_pull_x_vs_nTrk" type="TH2" title="Vertex Pull vs Number of Tracks"> + <x title="Number of Tracks" n="50" lo="0.0" hi="100"/> + <y title="|Reco_x-truth_x|/err_x" n="60" lo="-5.0" hi="5.0"/> +</h> +<h id="vx_TYPE_truth_pull_y_vs_nTrk" type="TH2" title="Vertex Pull vs Number of Tracks"> + <x title="Number of Tracks" n="50" lo="0.0" hi="100"/> + <y title="|Reco_y-truth_y|/err_y" n="60" lo="-5.0" hi="5.0"/> +</h> + + + +<h id="vx_TYPE_z_pull" type="TH1" title="Vertex Z Pull"> + <x title="|Reco_z-Truth_z|/Err_z" n="25" lo="-5.0" hi="5.0"/> + <y title="Number of Enries"/> +</h> +<h id="vx_TYPE_y_pull" type="TH1" title="Vertex Y Pull"> + <x title="|Reco_y-Truth_y|/Err_y" n="25" lo="-5.0" hi="5.0"/> + <y title="Number of Enries"/> +</h> +<h id="vx_TYPE_x_pull" type="TH1" title="Vertex X Pull"> + <x title="|Reco_x-Truth_x|/Err_x" n="25" lo="-5.0" hi="5.0"/> + <y title="Number of Enries"/> +</h> +<h id="vx_TYPE_z_reso" type="TH1" title="Vertex Z Resolution"> + <x title="|Reco_z-Truth_z|" n="60" lo="-0.2" hi="0.2"/> + <y title="Number of Enries"/> +</h> +<h id="vx_TYPE_y_reso" type="TH1" title="Vertex Y Resolution"> + <x title="|Reco_y-Truth_y|" n="60" lo="-0.2" hi="0.2"/> + <y title="Number of Enries"/> +</h> +<h id="vx_TYPE_x_reso" type="TH1" title="Vertex X Resolution"> + <x title="|Reco_x-Truth_x|" n="60" lo="-0.2" hi="0.2"/> + <y title="Number of Enries"/> +</h> + + <h id="vx_nTracks" type="TH1F" title="Number of tracks at vertex"> <x title="Number of Tracks" n="150" lo="0" hi="150"/> <y title="Entries"/> diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_Vertex.cxx b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_Vertex.cxx index 2dc45bf250b2cdf2b9fdbd25af769587651b04c3..2fe81931ffbf252b376c776bb21cadf771c3cf4b 100644 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_Vertex.cxx +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_Vertex.cxx @@ -36,31 +36,31 @@ InDetPerfPlot_Vertex::InDetPerfPlot_Vertex(InDetPlotBase* pParent, const std::st void InDetPerfPlot_Vertex::initializePlots() { - IDPVM_BOOK(m_vx_x); - IDPVM_BOOK(m_vx_y); - IDPVM_BOOK(m_vx_z); + book(m_vx_x,"vx_x"); + book(m_vx_y,"vx_y"); + book(m_vx_z,"vx_z"); - IDPVM_BOOK(m_vx_err_x); - IDPVM_BOOK(m_vx_err_y); - IDPVM_BOOK(m_vx_err_z); + book(m_vx_err_x,"vx_err_x"); + book(m_vx_err_y,"vx_err_y"); + book(m_vx_err_z,"vx_err_z"); - IDPVM_BOOK(m_vx_chi2_over_ndf); - IDPVM_BOOK(m_vx_type); + book(m_vx_chi2_over_ndf,"vx_chi2_over_ndf"); + book(m_vx_type,"vx_type"); - IDPVM_BOOK(m_vx_nTracks); - IDPVM_BOOK(m_vx_track_weights); + book(m_vx_nTracks,"vx_nTracks"); + book(m_vx_track_weights,"vx_track_weights"); if (m_iDetailLevel >= 100) { - IDPVM_BOOK(m_vx_track_pt); - IDPVM_BOOK(m_vx_track_eta); - IDPVM_BOOK(m_vx_track_nSiHits); - IDPVM_BOOK(m_vx_track_nSiHoles); - IDPVM_BOOK(m_vx_track_d0); - IDPVM_BOOK(m_vx_track_err_d0); - IDPVM_BOOK(m_vx_track_z0); - IDPVM_BOOK(m_vx_track_err_z0); + book(m_vx_track_pt,"vx_track_pt"); + book(m_vx_track_eta,"vx_track_eta"); + book(m_vx_track_nSiHits,"vx_track_nSiHits"); + book(m_vx_track_nSiHoles,"vx_track_nSiHoles"); + book(m_vx_track_d0,"vx_track_d0"); + book(m_vx_track_err_d0,"vx_track_err_d0"); + book(m_vx_track_z0,"vx_track_z0"); + book(m_vx_track_err_z0,"vx_track_err_z0"); } } diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx index 62f5a53a690ee847c4eb935ed5c4f3b5ad0bc621..a6b21a33004b4279d8091b5c4a907d7180763539 100644 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx @@ -8,6 +8,8 @@ **/ #include "InDetPerfPlot_VertexTruthMatching.h" +#include "EventPrimitives/EventPrimitives.h" +#include "EventPrimitives/EventPrimitivesHelpers.h" using namespace IDPVM; @@ -34,35 +36,117 @@ InDetPerfPlot_VertexTruthMatching::InDetPerfPlot_VertexTruthMatching(InDetPlotBa m_vx_hs_truth_long_reso_vs_PU(nullptr), m_vx_hs_truth_trans_reso_vs_PU(nullptr), m_vx_hs_truth_long_reso(nullptr), - m_vx_hs_truth_trans_reso(nullptr) + m_vx_hs_truth_trans_reso(nullptr), + m_vx_hs_z_pull(nullptr), + m_vx_hs_y_pull(nullptr), + m_vx_hs_x_pull(nullptr), + m_vx_all_z_pull(nullptr), + m_vx_all_y_pull(nullptr), + m_vx_all_x_pull(nullptr), + m_vx_hs_z_res(nullptr), + m_vx_hs_y_res(nullptr), + m_vx_hs_x_res(nullptr), + m_vx_all_z_res(nullptr), + m_vx_all_y_res(nullptr), + m_vx_all_x_res(nullptr), + m_vx_all_truth_z_res_vs_PU(nullptr), + m_vx_all_truth_x_res_vs_PU(nullptr), + m_vx_all_truth_y_res_vs_PU(nullptr), + m_vx_all_truth_z_pull_vs_PU(nullptr), + m_vx_all_truth_x_pull_vs_PU(nullptr), + m_vx_all_truth_y_pull_vs_PU(nullptr), + m_vx_all_truth_z_res_vs_nTrk(nullptr), + m_vx_all_truth_x_res_vs_nTrk(nullptr), + m_vx_all_truth_y_res_vs_nTrk(nullptr), + m_vx_all_truth_z_pull_vs_nTrk(nullptr), + m_vx_all_truth_x_pull_vs_nTrk(nullptr), + m_vx_all_truth_y_pull_vs_nTrk(nullptr), + m_vx_hs_truth_z_res_vs_PU(nullptr), + m_vx_hs_truth_x_res_vs_PU(nullptr), + m_vx_hs_truth_y_res_vs_PU(nullptr), + m_vx_hs_truth_z_pull_vs_PU(nullptr), + m_vx_hs_truth_x_pull_vs_PU(nullptr), + m_vx_hs_truth_y_pull_vs_PU(nullptr), + m_vx_hs_truth_z_res_vs_nTrk(nullptr), + m_vx_hs_truth_x_res_vs_nTrk(nullptr), + m_vx_hs_truth_y_res_vs_nTrk(nullptr), + m_vx_hs_truth_z_pull_vs_nTrk(nullptr), + m_vx_hs_truth_x_pull_vs_nTrk(nullptr), + m_vx_hs_truth_y_pull_vs_nTrk(nullptr) + { // nop } void InDetPerfPlot_VertexTruthMatching::initializePlots() { - IDPVM_BOOK(m_vx_type_truth); + book(m_vx_type_truth,"vx_type_truth"); if (m_iDetailLevel >= 200) { - IDPVM_BOOK(m_vx_hs_classification); - IDPVM_BOOK(m_vx_nReco_vs_nTruth_inclusive); - IDPVM_BOOK(m_vx_nReco_vs_nTruth_matched); - IDPVM_BOOK(m_vx_nReco_vs_nTruth_merged); - IDPVM_BOOK(m_vx_nReco_vs_nTruth_split); - IDPVM_BOOK(m_vx_nReco_vs_nTruth_fake); - IDPVM_BOOK(m_vx_nReco_vs_nTruth_dummy); - IDPVM_BOOK(m_vx_nReco_vs_nTruth_clean); - IDPVM_BOOK(m_vx_nReco_vs_nTruth_lowpu); - IDPVM_BOOK(m_vx_nReco_vs_nTruth_highpu); - IDPVM_BOOK(m_vx_nReco_vs_nTruth_hssplit); - IDPVM_BOOK(m_vx_nReco_vs_nTruth_none); - IDPVM_BOOK(m_vx_hs_reco_eff); - IDPVM_BOOK(m_vx_hs_sel_eff); - IDPVM_BOOK(m_vx_hs_reco_long_reso); - IDPVM_BOOK(m_vx_hs_reco_trans_reso); - IDPVM_BOOK(m_vx_hs_truth_long_reso); - IDPVM_BOOK(m_vx_hs_truth_trans_reso); - IDPVM_BOOK(m_vx_hs_truth_long_reso_vs_PU); - IDPVM_BOOK(m_vx_hs_truth_trans_reso_vs_PU); + book(m_vx_hs_classification,"vx_hs_classification"); + book(m_vx_nReco_vs_nTruth_inclusive,"vx_nReco_vs_nTruth_inclusive"); + book(m_vx_nReco_vs_nTruth_matched,"vx_nReco_vs_nTruth_matched"); + book(m_vx_nReco_vs_nTruth_merged,"vx_nReco_vs_nTruth_merged"); + book(m_vx_nReco_vs_nTruth_split,"vx_nReco_vs_nTruth_split"); + book(m_vx_nReco_vs_nTruth_fake,"vx_nReco_vs_nTruth_fake"); + book(m_vx_nReco_vs_nTruth_dummy,"vx_nReco_vs_nTruth_dummy"); + book(m_vx_nReco_vs_nTruth_clean,"vx_nReco_vs_nTruth_clean"); + book(m_vx_nReco_vs_nTruth_lowpu,"vx_nReco_vs_nTruth_lowpu"); + book(m_vx_nReco_vs_nTruth_highpu,"vx_nReco_vs_nTruth_highpu"); + book(m_vx_nReco_vs_nTruth_hssplit,"vx_nReco_vs_nTruth_hssplit"); + book(m_vx_nReco_vs_nTruth_none,"vx_nReco_vs_nTruth_none"); + book(m_vx_hs_reco_eff,"vx_hs_reco_eff"); + book(m_vx_hs_sel_eff,"vx_hs_sel_eff"); + book(m_vx_hs_reco_long_reso,"vx_hs_reco_long_reso"); + book(m_vx_hs_reco_trans_reso,"vx_hs_reco_trans_reso"); + book(m_vx_hs_truth_long_reso,"vx_hs_truth_long_reso"); + book(m_vx_hs_truth_trans_reso,"vx_hs_truth_trans_reso"); + book(m_vx_hs_truth_long_reso_vs_PU,"vx_hs_truth_long_reso_vs_PU"); + book(m_vx_hs_truth_trans_reso_vs_PU,"vx_hs_truth_trans_reso_vs_PU"); + + book(m_vx_hs_z_pull,"vx_TYPE_z_pull","vx_hs_z_pull"); + book(m_vx_hs_y_pull,"vx_TYPE_y_pull","vx_hs_y_pull"); + book(m_vx_hs_x_pull,"vx_TYPE_x_pull","vx_hs_x_pull"); + + book(m_vx_all_z_pull,"vx_TYPE_z_pull","vx_all_z_pull"); + book(m_vx_all_y_pull,"vx_TYPE_y_pull","vx_all_y_pull"); + book(m_vx_all_x_pull,"vx_TYPE_x_pull","vx_all_x_pull"); + + book(m_vx_hs_z_res,"vx_TYPE_z_reso","vx_hs_z_res"); + book(m_vx_hs_y_res,"vx_TYPE_y_reso","vx_hs_y_res"); + book(m_vx_hs_x_res,"vx_TYPE_x_reso","vx_hs_x_res"); + book(m_vx_all_z_res,"vx_TYPE_z_reso","vx_all_z_res"); + book(m_vx_all_y_res,"vx_TYPE_y_reso","vx_all_y_res"); + book(m_vx_all_x_res,"vx_TYPE_x_reso","vx_all_x_res"); + + book(m_vx_all_truth_z_res_vs_PU, "vx_TYPE_truth_reso_z_vs_PU", "vx_all_truth_reso_z_vs_PU"); + book(m_vx_all_truth_x_res_vs_PU, "vx_TYPE_truth_reso_x_vs_PU", "vx_all_truth_reso_x_vs_PU"); + book(m_vx_all_truth_y_res_vs_PU, "vx_TYPE_truth_reso_y_vs_PU", "vx_all_truth_reso_y_vs_PU"); + book(m_vx_all_truth_z_res_vs_nTrk, "vx_TYPE_truth_reso_z_vs_nTrk", "vx_all_truth_reso_z_vs_nTrk"); + book(m_vx_all_truth_x_res_vs_nTrk, "vx_TYPE_truth_reso_x_vs_nTrk", "vx_all_truth_reso_x_vs_nTrk"); + book(m_vx_all_truth_y_res_vs_nTrk, "vx_TYPE_truth_reso_y_vs_nTrk", "vx_all_truth_reso_y_vs_nTrk"); + + book(m_vx_all_truth_z_pull_vs_PU, "vx_TYPE_truth_pull_z_vs_PU", "vx_all_truth_pull_z_vs_PU"); + book(m_vx_all_truth_x_pull_vs_PU, "vx_TYPE_truth_pull_x_vs_PU", "vx_all_truth_pull_x_vs_PU"); + book(m_vx_all_truth_y_pull_vs_PU, "vx_TYPE_truth_pull_y_vs_PU", "vx_all_truth_pull_y_vs_PU"); + book(m_vx_all_truth_z_pull_vs_nTrk, "vx_TYPE_truth_pull_z_vs_nTrk", "vx_all_truth_pull_z_vs_nTrk"); + book(m_vx_all_truth_x_pull_vs_nTrk, "vx_TYPE_truth_pull_x_vs_nTrk", "vx_all_truth_pull_x_vs_nTrk"); + book(m_vx_all_truth_y_pull_vs_nTrk, "vx_TYPE_truth_pull_y_vs_nTrk", "vx_all_truth_pull_y_vs_nTrk"); + + book(m_vx_hs_truth_z_res_vs_PU, "vx_TYPE_truth_reso_z_vs_PU", "vx_hs_truth_reso_z_vs_PU"); + book(m_vx_hs_truth_x_res_vs_PU, "vx_TYPE_truth_reso_x_vs_PU", "vx_hs_truth_reso_x_vs_PU"); + book(m_vx_hs_truth_y_res_vs_PU, "vx_TYPE_truth_reso_y_vs_PU", "vx_hs_truth_reso_y_vs_PU"); + book(m_vx_hs_truth_z_res_vs_nTrk, "vx_TYPE_truth_reso_z_vs_nTrk", "vx_hs_truth_reso_z_vs_nTrk"); + book(m_vx_hs_truth_x_res_vs_nTrk, "vx_TYPE_truth_reso_x_vs_nTrk", "vx_hs_truth_reso_x_vs_nTrk"); + book(m_vx_hs_truth_y_res_vs_nTrk, "vx_TYPE_truth_reso_y_vs_nTrk", "vx_hs_truth_reso_y_vs_nTrk"); + + book(m_vx_hs_truth_z_pull_vs_PU, "vx_TYPE_truth_pull_z_vs_PU", "vx_hs_truth_pull_z_vs_PU"); + book(m_vx_hs_truth_x_pull_vs_PU, "vx_TYPE_truth_pull_x_vs_PU", "vx_hs_truth_pull_x_vs_PU"); + book(m_vx_hs_truth_y_pull_vs_PU, "vx_TYPE_truth_pull_y_vs_PU", "vx_hs_truth_pull_y_vs_PU"); + book(m_vx_hs_truth_z_pull_vs_nTrk, "vx_TYPE_truth_pull_z_vs_nTrk", "vx_hs_truth_pull_z_vs_nTrk"); + book(m_vx_hs_truth_x_pull_vs_nTrk, "vx_TYPE_truth_pull_x_vs_nTrk", "vx_hs_truth_pull_x_vs_nTrk"); + book(m_vx_hs_truth_y_pull_vs_nTrk, "vx_TYPE_truth_pull_y_vs_nTrk", "vx_hs_truth_pull_y_vs_nTrk"); + + } } @@ -324,6 +408,42 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex minTruthRecoRadialDiff2 = truthRecoRadialDiff2; } } + + const xAOD::TruthVertex *matchVertex = getTruthVertex(vertex); + if(!matchVertex) continue; + float residual_z = matchVertex->z() - vertex->z(); + float residual_x = matchVertex->x() - vertex->x(); + float residual_y = matchVertex->y() - vertex->y(); + const AmgSymMatrix(3)& covariance = vertex->covariancePosition(); + float vtxerr_x = fabs(Amg::error(covariance, 0)) > 1e-7 ? Amg::error(covariance, 0) : 1000.; + float vtxerr_y = fabs(Amg::error(covariance, 1)) > 1e-7 ? Amg::error(covariance, 1) : 1000.; + float vtxerr_z = fabs(Amg::error(covariance, 2)) > 1e-7 ? Amg::error(covariance, 2) : 1000.; + localPUDensity = getLocalPUDensity(matchVertex, truthHSVertices, truthPUVertices); + + fillHisto(m_vx_all_z_pull, residual_z/vtxerr_z); + fillHisto(m_vx_all_y_pull, residual_y/vtxerr_y); + fillHisto(m_vx_all_x_pull, residual_x/vtxerr_x); + + fillHisto(m_vx_all_truth_z_res_vs_PU, localPUDensity, residual_z); + fillHisto(m_vx_all_truth_x_res_vs_PU, localPUDensity, residual_x); + fillHisto(m_vx_all_truth_y_res_vs_PU, localPUDensity, residual_y); + + fillHisto(m_vx_all_z_res, residual_z); + fillHisto(m_vx_all_y_res, residual_y); + fillHisto(m_vx_all_x_res, residual_x); + + fillHisto(m_vx_all_truth_z_pull_vs_PU, localPUDensity, residual_z/vtxerr_z); + fillHisto(m_vx_all_truth_x_pull_vs_PU, localPUDensity, residual_x/vtxerr_y); + fillHisto(m_vx_all_truth_y_pull_vs_PU, localPUDensity, residual_y/vtxerr_x); + + fillHisto(m_vx_all_truth_z_res_vs_nTrk, vertex->nTrackParticles(), residual_z); + fillHisto(m_vx_all_truth_x_res_vs_nTrk, vertex->nTrackParticles(), residual_x); + fillHisto(m_vx_all_truth_y_res_vs_nTrk, vertex->nTrackParticles(), residual_y); + + fillHisto(m_vx_all_truth_z_pull_vs_nTrk, vertex->nTrackParticles(), residual_z/vtxerr_z); + fillHisto(m_vx_all_truth_x_pull_vs_nTrk, vertex->nTrackParticles(), residual_x/vtxerr_y); + fillHisto(m_vx_all_truth_y_pull_vs_nTrk, vertex->nTrackParticles(), residual_y/vtxerr_x); + } // end loop over vertices @@ -331,11 +451,45 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex if (truthHSVertices.size() != 0) { localPUDensity = getLocalPUDensity(truthHSVtx, truthHSVertices, truthPUVertices); if (truthHSVtxRecoed) { + float residual_z = truthHSVtx->z() - bestRecoHSVtx_truth->z(); + float residual_r = std::sqrt(std::pow(truthHSVtx->x() - bestRecoHSVtx_truth->x(), 2) + std::pow(truthHSVtx->y() - bestRecoHSVtx_truth->y(), 2)); + float residual_x = truthHSVtx->x() - bestRecoHSVtx_truth->x(); + float residual_y = truthHSVtx->y() - bestRecoHSVtx_truth->y(); fillHisto(m_vx_hs_reco_eff, localPUDensity, 1); fillHisto(m_vx_hs_reco_long_reso, localPUDensity, getRecoLongitudinalReso(bestRecoHSVtx_truth)); fillHisto(m_vx_hs_reco_trans_reso, localPUDensity, getRecoTransverseReso(bestRecoHSVtx_truth)); - fillHisto(m_vx_hs_truth_long_reso_vs_PU, localPUDensity, truthHSVtx->z() - bestRecoHSVtx_truth->z()); - fillHisto(m_vx_hs_truth_trans_reso_vs_PU, localPUDensity, std::sqrt(std::pow(truthHSVtx->x() - bestRecoHSVtx_truth->x(), 2) + std::pow(truthHSVtx->y() - bestRecoHSVtx_truth->y(), 2))); + fillHisto(m_vx_hs_truth_long_reso_vs_PU, localPUDensity, residual_z); + fillHisto(m_vx_hs_truth_trans_reso_vs_PU, localPUDensity, residual_r); + + const AmgSymMatrix(3)& covariance = bestRecoHSVtx_truth->covariancePosition(); + float vtxerr_x = Amg::error(covariance, 0); + float vtxerr_y = Amg::error(covariance, 1); + float vtxerr_z = Amg::error(covariance, 2); + + if(fabs(vtxerr_z) > 1e-7) fillHisto(m_vx_hs_z_pull, residual_z/vtxerr_z); + if(fabs(vtxerr_y) > 1e-7) fillHisto(m_vx_hs_y_pull, residual_y/vtxerr_y); + if(fabs(vtxerr_x) > 1e-7) fillHisto(m_vx_hs_x_pull, residual_x/vtxerr_x); + + fillHisto(m_vx_hs_truth_z_res_vs_PU, localPUDensity, residual_z); + fillHisto(m_vx_hs_truth_x_res_vs_PU, localPUDensity, residual_x); + fillHisto(m_vx_hs_truth_y_res_vs_PU, localPUDensity, residual_y); + + fillHisto(m_vx_hs_z_res, residual_z); + fillHisto(m_vx_hs_y_res, residual_y); + fillHisto(m_vx_hs_x_res, residual_x); + + fillHisto(m_vx_hs_truth_z_pull_vs_PU, localPUDensity, residual_z/vtxerr_z); + fillHisto(m_vx_hs_truth_x_pull_vs_PU, localPUDensity, residual_x/vtxerr_y); + fillHisto(m_vx_hs_truth_y_pull_vs_PU, localPUDensity, residual_y/vtxerr_x); + + fillHisto(m_vx_hs_truth_z_res_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_z); + fillHisto(m_vx_hs_truth_x_res_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_x); + fillHisto(m_vx_hs_truth_y_res_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_y); + + fillHisto(m_vx_hs_truth_z_pull_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_z/vtxerr_z); + fillHisto(m_vx_hs_truth_x_pull_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_x/vtxerr_y); + fillHisto(m_vx_hs_truth_y_pull_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_y/vtxerr_x); + } else { fillHisto(m_vx_hs_reco_eff, localPUDensity, 0); diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h index 754427d18db61c7907d47040e4bfdcd7abf4c0d1..e1903fb2dd46766cceadc89c4c328151360f7f2b 100644 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h @@ -72,8 +72,68 @@ private: // For reco-truth resolutions: TH2* m_vx_hs_truth_long_reso_vs_PU; TH2* m_vx_hs_truth_trans_reso_vs_PU; + TH2* m_vx_all_truth_long_reso_vs_PU; + TH2* m_vx_all_truth_trans_reso_vs_PU; + + TH2* m_vx_hs_truth_long_pull_vs_PU; + TH2* m_vx_hs_truth_trans_pull_vs_PU; + TH2* m_vx_all_truth_long_pull_vs_PU; + TH2* m_vx_all_truth_trans_pull_vs_PU; + + TH2* m_vx_hs_truth_long_reso_vs_nTrk; + TH2* m_vx_hs_truth_trans_reso_vs_nTrk; + TH2* m_vx_all_truth_long_reso_vs_nTrk; + TH2* m_vx_all_truth_trans_reso_vs_nTrk; + TH2* m_vx_hs_truth_long_pull_vs_nTrk; + TH2* m_vx_hs_truth_trans_pull_vs_nTrk; + TH2* m_vx_all_truth_long_pull_vs_nTrk; + TH2* m_vx_all_truth_trans_pull_vs_nTrk; + TH1* m_vx_hs_truth_long_reso; TH1* m_vx_hs_truth_trans_reso; + + TH1* m_vx_hs_z_pull; + TH1* m_vx_hs_y_pull; + TH1* m_vx_hs_x_pull; + TH1* m_vx_all_z_pull; + TH1* m_vx_all_y_pull; + TH1* m_vx_all_x_pull; + + TH1* m_vx_hs_z_res; + TH1* m_vx_hs_y_res; + TH1* m_vx_hs_x_res; + TH1* m_vx_all_z_res; + TH1* m_vx_all_y_res; + TH1* m_vx_all_x_res; + + TH2* m_vx_all_truth_z_res_vs_PU; + TH2* m_vx_all_truth_x_res_vs_PU; + TH2* m_vx_all_truth_y_res_vs_PU; + TH2* m_vx_all_truth_z_pull_vs_PU; + TH2* m_vx_all_truth_x_pull_vs_PU; + TH2* m_vx_all_truth_y_pull_vs_PU; + + TH2* m_vx_all_truth_z_res_vs_nTrk; + TH2* m_vx_all_truth_x_res_vs_nTrk; + TH2* m_vx_all_truth_y_res_vs_nTrk; + TH2* m_vx_all_truth_z_pull_vs_nTrk; + TH2* m_vx_all_truth_x_pull_vs_nTrk; + TH2* m_vx_all_truth_y_pull_vs_nTrk; + + TH2* m_vx_hs_truth_z_res_vs_PU; + TH2* m_vx_hs_truth_x_res_vs_PU; + TH2* m_vx_hs_truth_y_res_vs_PU; + TH2* m_vx_hs_truth_z_pull_vs_PU; + TH2* m_vx_hs_truth_x_pull_vs_PU; + TH2* m_vx_hs_truth_y_pull_vs_PU; + + TH2* m_vx_hs_truth_z_res_vs_nTrk; + TH2* m_vx_hs_truth_x_res_vs_nTrk; + TH2* m_vx_hs_truth_y_res_vs_nTrk; + TH2* m_vx_hs_truth_z_pull_vs_nTrk; + TH2* m_vx_hs_truth_x_pull_vs_nTrk; + TH2* m_vx_hs_truth_y_pull_vs_nTrk; + ///@} private: // plot base has no default implementation of this; we use it to book the histos diff --git a/LArCalorimeter/LArCellRec/python/LArCollisionTimeConfig.py b/LArCalorimeter/LArCellRec/python/LArCollisionTimeConfig.py index 7f981afa82793cb861a8c08a4bc82bc64b3543f7..b78b5eb870c791433275d33ad34f058ecde859aa 100644 --- a/LArCalorimeter/LArCellRec/python/LArCollisionTimeConfig.py +++ b/LArCalorimeter/LArCellRec/python/LArCollisionTimeConfig.py @@ -1,16 +1,18 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # python fragment to configure LAr collision time algo from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory -def LArCollisionTimeCfg(configFlags): +def LArCollisionTimeCfg(configFlags, cutIteration=False): result=ComponentAccumulator() LArCollisionTimeAlg=CompFactory.LArCollisionTimeAlg - result.addEventAlgo(LArCollisionTimeAlg("LArCollisionTimeAlg", isMC=configFlags.Input.isMC)) + result.addEventAlgo(LArCollisionTimeAlg("LArCollisionTimeAlg", + isMC=configFlags.Input.isMC, + cutIteration=cutIteration)) return result diff --git a/LArCalorimeter/LArCellRec/src/LArCollisionTimeAlg.cxx b/LArCalorimeter/LArCellRec/src/LArCollisionTimeAlg.cxx index 57941f2f7a60e9385b2fab962d93254214d4e5fd..d15e9b4625d89410ad463aa4a9205fcd9d789d3d 100644 --- a/LArCalorimeter/LArCellRec/src/LArCollisionTimeAlg.cxx +++ b/LArCalorimeter/LArCellRec/src/LArCollisionTimeAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "LArCollisionTimeAlg.h" @@ -12,8 +12,6 @@ LArCollisionTimeAlg:: LArCollisionTimeAlg(const std::string& name, ISvcLocator* AthAlgorithm(name,pSvcLocator), m_calo_id(nullptr) { - declareProperty("cellContainerName", m_cellsContName="AllCalo" ); - declareProperty("collisionTime", m_collTimeName="LArCollisionTime" ); } //__________________________________________________________________________ diff --git a/LArCalorimeter/LArCellRec/src/LArCollisionTimeAlg.h b/LArCalorimeter/LArCellRec/src/LArCollisionTimeAlg.h index b6210ae4539a1826165bab447d933426676ee4fd..518078efe522c39fac724da28b02e0b9b59856d3 100644 --- a/LArCalorimeter/LArCellRec/src/LArCollisionTimeAlg.h +++ b/LArCalorimeter/LArCellRec/src/LArCollisionTimeAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ // TheLArCollisionsAlg.h @@ -46,13 +46,13 @@ class LArCollisionTimeAlg : public AthAlgorithm { // Properties // -------------------------------------------------- Gaudi::Property<bool> m_isMC { this, "isMC", false, "Are we working with simu?" }; - Gaudi::Property<bool> m_iterCut { this, "cutIteration", true, "cut on OFC iteration, will not work for Online" }; + Gaudi::Property<bool> m_iterCut { this, "cutIteration", false, "cut on OFC iteration, will not work for Online" }; Gaudi::Property<float> m_timeCut { this, "timeDiffCut", 5., "|A-C| time < timeDiffCut to pass the filter" }; Gaudi::Property<int> m_minCells { this, "nCells", 2, "min. number of cells per endcap to pass the filter" }; - SG::ReadHandleKey<CaloCellContainer> m_cellsContName; - SG::WriteHandleKey<LArCollisionTime> m_collTimeName; + SG::ReadHandleKey<CaloCellContainer> m_cellsContName{this,"cellContainerName","AllCalo"}; + SG::WriteHandleKey<LArCollisionTime> m_collTimeName{this,"collisionTime","LArCollisionTime"}; SG::ReadCondHandleKey<CaloNoise> m_noiseCDOKey{this,"CaloNoiseKey","totalNoise","SG Key of CaloNoise data object"}; }; diff --git a/LArCalorimeter/LArConfiguration/python/LArMonitoringConfig.py b/LArCalorimeter/LArConfiguration/python/LArMonitoringConfig.py index d5c8d636413b540d922bf0bb613bea008839cbbf..29830d9744436b832bc09c725f92b455a2e0bb24 100644 --- a/LArCalorimeter/LArConfiguration/python/LArMonitoringConfig.py +++ b/LArCalorimeter/LArConfiguration/python/LArMonitoringConfig.py @@ -18,18 +18,18 @@ def LArMonitoringConfig(inputFlags): from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator acc = ComponentAccumulator() - if not inputFlags.Input.isMC: - acc.merge(LArAffectedRegionsConfig(inputFlags)) - acc.merge(LArNoisyROMonConfig(inputFlags)) - if 'online' not in inputFlags.DQ.Environment: - acc.merge(LArHVCorrMonConfig(inputFlags)) - # algos which can run in ESD but not AOD: if inputFlags.DQ.Environment != 'AOD': if inputFlags.DQ.DataType != 'cosmics': from LumiBlockComps.BunchCrossingCondAlgConfig import BunchCrossingCondAlgCfg acc.merge(BunchCrossingCondAlgCfg(inputFlags)) acc.merge(LArCollisionTimeMonConfig(inputFlags)) + if not inputFlags.Input.isMC: + acc.merge(LArNoisyROMonConfig(inputFlags)) + acc.merge(LArAffectedRegionsConfig(inputFlags)) + if 'online' not in inputFlags.DQ.Environment: + acc.merge(LArHVCorrMonConfig(inputFlags)) + # and others on RAW data only if inputFlags.DQ.Environment in ('online', 'tier0', 'tier0Raw'): diff --git a/LArCalorimeter/LArMonitoring/python/LArCollisionTimeMonAlg.py b/LArCalorimeter/LArMonitoring/python/LArCollisionTimeMonAlg.py index 432bee17c98166fb8f1a4639a1182a4856fe7806..88eb02c0a98622e1a3fe271f1a465a172828671f 100644 --- a/LArCalorimeter/LArMonitoring/python/LArCollisionTimeMonAlg.py +++ b/LArCalorimeter/LArMonitoring/python/LArCollisionTimeMonAlg.py @@ -269,8 +269,7 @@ if __name__=='__main__': # try collision time algo from LArCellRec.LArCollisionTimeConfig import LArCollisionTimeCfg - cfg.merge(LArCollisionTimeCfg(ConfigFlags)) - cfg.getEventAlgo("LArCollisionTimeAlg").cutIteration=False + cfg.merge(LArCollisionTimeCfg(ConfigFlags, cutIteration=False)) # add cluster collision time algo # cluster config is still missing #from LArClusterRec.LArClusterSwConfig import LArClusterSwConfig diff --git a/LArCalorimeter/LArMonitoring/python/LArReco_fromraw_Cfg.py b/LArCalorimeter/LArMonitoring/python/LArReco_fromraw_Cfg.py index 8a2b376c7a69d11447568e50a4952428784b14cb..9e7110b92ca90cc5f2942940ac204605a4ea5ecb 100644 --- a/LArCalorimeter/LArMonitoring/python/LArReco_fromraw_Cfg.py +++ b/LArCalorimeter/LArMonitoring/python/LArReco_fromraw_Cfg.py @@ -38,8 +38,7 @@ if __name__=="__main__": #collision time algo from LArCellRec.LArCollisionTimeConfig import LArCollisionTimeCfg - cfg.merge(LArCollisionTimeCfg(ConfigFlags)) - cfg.getEventAlgo("LArCollisionTimeAlg").cutIteration=False + cfg.merge(LArCollisionTimeCfg(ConfigFlags, cutIteration=False)) # and collision time monitoring algo from LArMonitoring.LArCollisionTimeMonAlg import LArCollisionTimeMonConfig diff --git a/LArCalorimeter/LArMonitoring/share/LArMonitoring_jobOption.py b/LArCalorimeter/LArMonitoring/share/LArMonitoring_jobOption.py index 0daa56fa714c3cded466e9fa684f9aeab9b82ed6..42712ce8b2352657d6adaab2b1a799570bb4560f 100644 --- a/LArCalorimeter/LArMonitoring/share/LArMonitoring_jobOption.py +++ b/LArCalorimeter/LArMonitoring/share/LArMonitoring_jobOption.py @@ -28,8 +28,9 @@ if 'ESD' not in DQMonFlags.monManEnvironment() and globalflags.DataSource == 'da from LArMonitoring.LArDigitMonAlg import LArDigitMonConfigOld topSequence +=LArDigitMonConfigOld(DQMonFlags) - from LArMonitoring.LArRODMonAlg import LArRODMonConfigOld - topSequence +=LArRODMonConfigOld(DQMonFlags) + if not DQMonFlags.doLArMon(): + from LArMonitoring.LArRODMonAlg import LArRODMonConfigOld + topSequence +=LArRODMonConfigOld(DQMonFlags) from LArMonitoring.LArFEBMonAlg import LArFEBMonConfigOld topSequence +=LArFEBMonConfigOld(DQMonFlags) diff --git a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest.ref b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest.ref index 9dc169f72014522133b592f688f28989a0c26a15..b1a1abfbf109e28864dc34f4f72c658bb1f84fa1 100644 --- a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest.ref +++ b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest.ref @@ -8,7 +8,6 @@ Py:Athena INFO including file "AthenaCommon/Execution.py" Py:Athena INFO including file "LArConditionsTest/LArConditionsTest_jobOptions.py" Py:Athena INFO including file "AthenaCommon/Atlas_Gen.UnixStandardJob.py" Py:Athena INFO including file "AtlasGeoModel/SetGeometryVersion.py" -AtlasGeoModel/SetGeometryVersion.py is OBSOLETE Py:Athena INFO SetGeometryVersion.py obtained major release version 22 Py:Athena INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py" Py:ConfigurableDb INFO Read module info for 5569 configurables from 10 genConfDb files diff --git a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadAndReg_jobOptions.py b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadAndReg_jobOptions.py index 42f28e4f1213ed70abfbce9b117662b539127416..227be99986fd3c085f2bbfe3aa098029b54c6794 100755 --- a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadAndReg_jobOptions.py +++ b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadAndReg_jobOptions.py @@ -21,7 +21,7 @@ DetFlags.digitize.all_setOff() from AthenaCommon.GlobalFlags import GlobalFlags GlobalFlags.DataSource.set_geant4() GlobalFlags.DetGeo.set_atlas() -include ("AtlasGeoModel/SetGeometryVersion.py") +from AtlasGeoModel import SetGeometryVersion from AtlasGeoModel import GeoModelInit include ("LArRawConditions/LArIdMap_ATLAS_jobOptions.py") diff --git a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg.ref b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg.ref index 09f0b67af92836afa2b220de879c2afe286a840d..5bcaacb6a78fe60b86104f2c6e7c72ec2880d131 100644 --- a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg.ref +++ b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg.ref @@ -8,7 +8,6 @@ Py:Athena INFO including file "AthenaCommon/Execution.py" Py:Athena INFO including file "LArConditionsTest/LArConditionsTestReadNoReg_jobOptions.py" Py:Athena INFO including file "AthenaCommon/Atlas_Gen.UnixStandardJob.py" Py:Athena INFO including file "AtlasGeoModel/SetGeometryVersion.py" -AtlasGeoModel/SetGeometryVersion.py is OBSOLETE Py:Athena INFO SetGeometryVersion.py obtained major release version 22 Py:Athena INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py" Py:ConfigurableDb INFO Read module info for 5569 configurables from 10 genConfDb files diff --git a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg_jobOptions.py b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg_jobOptions.py index 0eec7035d55f1382660c1b96561361c97af97b04..af75f6450779e0e3ed65114f43834ace81bd0bd6 100755 --- a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg_jobOptions.py +++ b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg_jobOptions.py @@ -20,7 +20,7 @@ DetFlags.digitize.all_setOff() from AthenaCommon.GlobalFlags import globalflags globalflags.DataSource.set_Value_and_Lock('geant4') globalflags.DetGeo.set_Value_and_Lock('atlas') -include ("AtlasGeoModel/SetGeometryVersion.py") +from AtlasGeoModel import SetGeometryVersion from AtlasGeoModel import GeoModelInit include ("LArRawConditions/LArIdMap_ATLAS_jobOptions.py") diff --git a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestRead_jobOptions.py b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestRead_jobOptions.py index e39a8890dc2ce62d73445589dd5c177d34aabfa4..6d64dde28cb123d27b37ffaf915838e21f2665a0 100755 --- a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestRead_jobOptions.py +++ b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestRead_jobOptions.py @@ -21,7 +21,7 @@ DetFlags.digitize.all_setOff() from AthenaCommon.GlobalFlags import GlobalFlags GlobalFlags.DataSource.set_geant4() GlobalFlags.DetGeo.set_atlas() -include ("AtlasGeoModel/SetGeometryVersion.py") +from AtlasGeoModel import SetGeometryVersion from AtlasGeoModel import GeoModelInit include ("LArRawConditions/LArIdMap_ATLAS_jobOptions.py") diff --git a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg.ref b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg.ref index 9b5e40c3428fbaeacdb12de069724d9c6b93865b..a01c78a81fad33278f5754431476d5a342ad57b5 100644 --- a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg.ref +++ b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg.ref @@ -8,7 +8,6 @@ Py:Athena INFO including file "AthenaCommon/Execution.py" Py:Athena INFO including file "LArConditionsTest/LArConditionsTestWriteNoReg_jobOptions.py" Py:Athena INFO including file "AthenaCommon/Atlas_Gen.UnixStandardJob.py" Py:Athena INFO including file "AtlasGeoModel/SetGeometryVersion.py" -AtlasGeoModel/SetGeometryVersion.py is OBSOLETE Py:Athena INFO SetGeometryVersion.py obtained major release version 22 Py:Athena INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py" Py:ConfigurableDb INFO Read module info for 5569 configurables from 10 genConfDb files diff --git a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg_jobOptions.py b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg_jobOptions.py index e8b964fbedea3db72978b51a3e22ef617cde44f2..c14ef73ba6dcf0523da0734f72b8fc4bab2ac9e8 100755 --- a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg_jobOptions.py +++ b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg_jobOptions.py @@ -21,7 +21,7 @@ DetFlags.digitize.all_setOff() from AthenaCommon.GlobalFlags import globalflags globalflags.DataSource.set_Value_and_Lock('geant4') globalflags.DetGeo.set_Value_and_Lock('atlas') -include ("AtlasGeoModel/SetGeometryVersion.py") +from AtlasGeoModel import SetGeometryVersion from AtlasGeoModel import GeoModelInit include ("LArRawConditions/LArIdMap_ATLAS_jobOptions.py") diff --git a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest_jobOptions.py b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest_jobOptions.py index bc2b1e3839ff39f5d115d62ce4ed573419c65f01..fc022072006b6132e13dbf291cc4b9671b16f904 100755 --- a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest_jobOptions.py +++ b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest_jobOptions.py @@ -25,7 +25,7 @@ DetFlags.digitize.all_setOff() from AthenaCommon.GlobalFlags import globalflags globalflags.DataSource.set_Value_and_Lock('geant4') globalflags.DetGeo.set_Value_and_Lock('atlas') -include ("AtlasGeoModel/SetGeometryVersion.py") +from AtlasGeoModel import SetGeometryVersion from AtlasGeoModel import GeoModelInit include ("LArRawConditions/LArIdMap_ATLAS_jobOptions.py") diff --git a/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py b/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py index 5bda74ac24471473cf4da6702f095d5628e558ff..d10f8b219fa97cf7b962922d035c36972070ce94 100644 --- a/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py +++ b/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py @@ -37,8 +37,7 @@ def MagneticFieldSvcCfg(flags, **kwargs): afmArgs['UseMapsFromCOOL'] = False magFieldMapCondAlg = CompFactory.MagField.AtlasFieldMapCondAlg(**afmArgs) result.addCondAlgo(magFieldMapCondAlg) - # import code - # code.interact(local=locals()) + # AtlasFieldCacheCondAlg - for reading in current afcArgs = { "name": "AtlasFieldCacheCondAlg", diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcRdoToPrepDataToolCore.cxx b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcRdoToPrepDataToolCore.cxx index 590eb72231c0dba6435e2c5a3020249692a7ffab..6565fe5e13385e11865a0341bde2e89cabad6819 100755 --- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcRdoToPrepDataToolCore.cxx +++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RpcRdoToPrepDataToolCore.cxx @@ -411,7 +411,6 @@ StatusCode Muon::RpcRdoToPrepDataToolCore::decode( const std::vector<uint32_t>& rdoHashVec.reserve(13*robIdsToBeDecoded.size()); // most ROBs have 13 RDOs, some have less ATH_CHECK(rpcCabling->giveRDO_fromROB(robIdsToBeDecoded, rdoHashVec) ); - std::vector<IdentifierHash> idVect; //vector passed to processPad - if empty, turns off decoding of additional RDOs for ambiguity solving std::vector<IdentifierHash> idWithDataVect; //vector passed to processPad - filled with IDs of created PrepRawData collections // start here to process the RDOs @@ -445,7 +444,7 @@ StatusCode Muon::RpcRdoToPrepDataToolCore::decode( const std::vector<uint32_t>& processingetaview, processingphiview, nPrepRawData, - idVect, + rdoHashVec, idWithDataVect, rpcContext) ); diff --git a/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py b/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py index 8019209801fe18b9d430ed03117e76c38873b846..e6ac246bb0828c8bb2982e581cc79a3313487538 100644 --- a/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py +++ b/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py @@ -107,7 +107,6 @@ def MdtCalibDbAlgCfg(flags,name="MdtCalibDbAlg",**kwargs): result.merge(acc) # set some default proper ties - # from IOVDbSvc.CondDB import conddb if flags.Common.isOnline and not flags.Input.isMC: kwargs.setdefault("TubeFolder", "/MDT/T0") kwargs.setdefault("RtFolder", "/MDT/RT") diff --git a/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py b/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py index 6388e610fa01b5542187437769c401af5a30be13..accbb1a205a4c40ee90192a91a032a5234fa97ba 100644 --- a/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py +++ b/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py @@ -562,7 +562,7 @@ def MuonClusterSegmentFinderToolCfg(flags, **kwargs): from MuonConfiguration.MuonRecToolsConfig import MuonTrackToSegmentToolCfg acc = MuonTrackToSegmentToolCfg(flags) - kwargs.setdefault( "TrackToSegmentTool", results.popToolsAndMerge(acc)) + kwargs.setdefault( "TrackToSegmentTool", result.popToolsAndMerge(acc)) # FIXME - remaining tools result.setPrivateTools(Muon__MuonClusterSegmentFinderTool(**kwargs)) diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/VMM_Shaper.h b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/VMM_Shaper.h index 3798409d2d776de38d5091d5b6214a68a2fc96f7..4def653f55ca39a53c6d4ff82f3b8fe8a1e38a9f 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/VMM_Shaper.h +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/VMM_Shaper.h @@ -5,40 +5,40 @@ #ifndef MM_DIGITIZATION_VMM_SHAPER_H #define MM_DIGITIZATION_VMM_SHAPER_H -#include <TH1F.h> #include <vector> class VMM_Shaper{ public: - VMM_Shaper(float peakTime); + VMM_Shaper(const float peakTime, const float lowerTimeWindow, const float upperTimeWindow); virtual ~VMM_Shaper()=default; void initialize(); - void vmmPeakResponse(const std::vector<float> effectiveCharge, const std::vector<float> electronsTime, const double electronicsThreshold, double &litudeFirstPeak, double &timeFirstPeak) const; - void vmmThresholdResponse(const std::vector<float> effectiveCharge, const std::vector<float> electronsTime, const double electronicsThreshold, double &litudeAtFirstPeak, double &timeAtThreshold) const; + void vmmPeakResponse(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double electronicsThreshold, double &litudeFirstPeak, double &timeFirstPeak) const; + void vmmThresholdResponse(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double electronicsThreshold, double &litudeAtFirstPeak, double &timeAtThreshold) const; - bool hasChargeAboveThreshold(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double &electronicsThreshold) const; + bool hasChargeAboveThreshold(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double electronicsThreshold) const; private: double m_peakTime; - double m_timeStep; - double m_maxTime; - + double m_lowerTimeWindow, m_upperTimeWindow; + + double m_timeStep, m_inverseTimeStep; + double m_preCalculationVMMShaper; // shaper parameters double m_a, m_pole0, m_re_pole1, m_im_pole1, m_pole1_square, m_k1_abs, m_argK1; int m_nBins; double m_peakTimeChargeScaling; - void vmmResponse(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, TH1F &response) const; - int findPeak(const TH1F &response, const double &electronicsThreshold) const; - + double vmmResponse(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, double time) const; + double findPeak(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double electronicsThreshold) const; + bool aboveThresholdSimple(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double electronicsThreshold) const; }; -#endif // MM_DIGITIZATION_VMM_SHAPER_H \ No newline at end of file +#endif // MM_DIGITIZATION_VMM_SHAPER_H diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_ElectronicsResponseSimulation.cxx b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_ElectronicsResponseSimulation.cxx index e227749c34319986071a7223a82eac2e9b7061b4..c47bbbbcf8a11a60da40c4620f42fa4774a8393f 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_ElectronicsResponseSimulation.cxx +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_ElectronicsResponseSimulation.cxx @@ -29,7 +29,7 @@ MM_ElectronicsResponseSimulation::MM_ElectronicsResponseSimulation(): /*******************************************************************************/ void MM_ElectronicsResponseSimulation::initialize() { - m_vmmShaper = std::make_unique<VMM_Shaper>(m_peakTime); + m_vmmShaper = std::make_unique<VMM_Shaper>(m_peakTime, m_timeWindowLowerOffset, m_timeWindowUpperOffset); m_vmmShaper->initialize(); } /*******************************************************************************/ diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/VMM_Shaper.cxx b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/VMM_Shaper.cxx index d27d7e2dfdf57e4936701b73fa30fcbad721d76e..39d0763c2ab71b15c51ad1432226b15fc35274cc 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/VMM_Shaper.cxx +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/VMM_Shaper.cxx @@ -4,6 +4,7 @@ #include "MM_Digitization/VMM_Shaper.h" #include <cmath> +#include <algorithm> namespace { // VMM shaper parameters provided by G. Iakovidis @@ -16,10 +17,12 @@ namespace { static constexpr double mmIonFlowTime = 150.; // ns } -VMM_Shaper::VMM_Shaper(float peakTime):m_peakTime(peakTime), -m_timeStep(0.1), -m_maxTime(700.0) +VMM_Shaper::VMM_Shaper(const float peakTime,const float lowerTimeWindow,const float upperTimeWindow):m_peakTime(peakTime), +m_lowerTimeWindow(lowerTimeWindow), +m_upperTimeWindow(upperTimeWindow), +m_timeStep(0.1) { + m_inverseTimeStep = 1./m_timeStep; initialize(); } @@ -33,80 +36,138 @@ void VMM_Shaper::initialize() { m_k1_abs = std::sqrt(Re_K1*Re_K1 + Im_K1*Im_K1); m_argK1 = std::atan2(Im_K1, Re_K1); - m_nBins = m_maxTime/m_timeStep; // scale factor for charge taking into account the mm ion flow time of ~150ns // if the peaking time is lower then that, only a fration of the total charge is integrated m_peakTimeChargeScaling = (m_peakTime < mmIonFlowTime ? 1.0*m_peakTime/mmIonFlowTime : 1.0); + + // preCalculate factor to avoid recalculating for each electron + m_preCalculationVMMShaper = chargeScaleFactor*m_peakTimeChargeScaling*std::pow(m_a, 3)*m_pole0*m_pole1_square; } -void VMM_Shaper::vmmResponse(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, TH1F &response) const { - for (uint i_electron = 0; i_electron < effectiveCharge.size(); i_electron++) { - for (double ti = electronsTime[i_electron]; ti < m_maxTime; ti += m_timeStep) { - double t = (ti-electronsTime.at(i_electron))*(10^-9); +double VMM_Shaper::vmmResponse(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, double time) const{ + double response = 0; + for (unsigned int i_electron = 0; i_electron < effectiveCharge.size(); i_electron++) { + if (time < electronsTime.at(i_electron)) continue; + double t = (time-electronsTime.at(i_electron))*(10^-9); // now follows the vmm shaper response function provided by G. Iakovidis // It is described in section 7.1.3 of https://cds.cern.ch/record/1955475 - double st = effectiveCharge.at(i_electron)*chargeScaleFactor*m_peakTimeChargeScaling*std::pow(m_a, 3)*m_pole0*m_pole1_square*((K0*std::exp(-t*m_pole0))+(2.*m_k1_abs*std::exp(-t*m_re_pole1)*std::cos(-t*m_im_pole1+m_argK1))); - response.Fill(ti, st); - } + double st = effectiveCharge.at(i_electron)*m_preCalculationVMMShaper*((K0*std::exp(-t*m_pole0))+(2.*m_k1_abs*std::exp(-t*m_re_pole1)*std::cos(-t*m_im_pole1+m_argK1))); + response += st; } + return response; } -void VMM_Shaper::vmmPeakResponse(const std::vector<float> effectiveCharge, const std::vector<float> electronsTime, const double electronicsThreshold, double &litudeFirstPeak, double &timeFirstPeak) const { - TH1F response("response", "response", m_nBins, 0, m_maxTime); +void VMM_Shaper::vmmPeakResponse(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double electronicsThreshold, double &litudeFirstPeak, double &timeFirstPeak) const{ + double t_peak = findPeak(effectiveCharge, electronsTime, electronicsThreshold); + + if (t_peak == -9999 ) return; // no peak found - vmmResponse(effectiveCharge, electronsTime, response); - int i_bin_peak = findPeak(response, electronicsThreshold); + amplitudeFirstPeak = vmmResponse(effectiveCharge, electronsTime, t_peak); + timeFirstPeak = t_peak; +} - if (i_bin_peak == -1) return; // no peak found - timeFirstPeak = response.GetXaxis()->GetBinCenter(i_bin_peak); - amplitudeFirstPeak = response.GetBinContent(i_bin_peak); -} +void VMM_Shaper::vmmThresholdResponse(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double electronicsThreshold, double &litudeAtFirstPeak, double &timeAtThreshold) const { + if (!aboveThresholdSimple(effectiveCharge, electronsTime, electronicsThreshold)) return; + if (effectiveCharge.size() == 0) return; // protect min_element + double startTime = m_lowerTimeWindow; + double minElectronTime = *std::min_element(electronsTime.begin(), electronsTime.end()); + if (startTime < minElectronTime) startTime = minElectronTime; // if smallest strip times are higher then the lower time window, just start the loop from the smallest electron time + + double tmpTimeAtThreshold = -9999; + for (double time = startTime; time < m_upperTimeWindow; time += m_timeStep) { + if (vmmResponse(effectiveCharge, electronsTime, time) >= electronicsThreshold) { + tmpTimeAtThreshold = time; + break; + } + } -void VMM_Shaper::vmmThresholdResponse(const std::vector<float> effectiveCharge, const std::vector<float> electronsTime, const double electronicsThreshold, double &litudeAtFirstPeak, double &timeAtThreshold) const { - TH1F response("response", "response", m_nBins, 0, m_maxTime); + if (tmpTimeAtThreshold == -9999) return; - vmmResponse(effectiveCharge, electronsTime, response); - int i_bin_peak = findPeak(response, electronicsThreshold); + double t_peak = findPeak(effectiveCharge, electronsTime, electronicsThreshold); + if (t_peak == -9999) return; - int binAboveThreshold = response.FindFirstBinAbove(electronicsThreshold); - if (binAboveThreshold == -1) return; - timeAtThreshold = response.GetXaxis()->GetBinCenter(binAboveThreshold); - amplitudeAtFirstPeak = response.GetBinContent(i_bin_peak); + timeAtThreshold = tmpTimeAtThreshold; + amplitudeAtFirstPeak = vmmResponse(effectiveCharge, electronsTime, t_peak); } -int VMM_Shaper::findPeak(const TH1F &response, const double &electronicsThreshold) const{ - TH1F derivative("derivative", "derivative", m_nBins, 0, m_maxTime); +double VMM_Shaper::findPeak(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double electronicsThreshold) const{ + if(effectiveCharge.size()==0) return -9999; // protect min_element + double startTime = m_lowerTimeWindow; + double minElectronTime = *std::min_element(electronsTime.begin(), electronsTime.end()); + if(startTime < minElectronTime) startTime = minElectronTime; // if smallest strip times are higher then the lower time window, just start the loop from the smallest electron time + + double oldResponse = 0; + double oldDerivative = 0 , currentDerivative = 0; + + for (double time = startTime; time < m_upperTimeWindow; time += m_timeStep) { + + double response = vmmResponse(effectiveCharge, electronsTime, time); + + oldDerivative = currentDerivative; + currentDerivative = (response-oldResponse) * m_inverseTimeStep; + // check if sign of derivative has not changed ==> no peak; or if response is below threshold + if (oldDerivative*currentDerivative >= 0 || oldResponse < electronicsThreshold) {oldResponse = response; continue;} + + // from here one its assumed that a peak above threshold was found + + // check if the derivative is monoton falling within the given window of 5 bins + bool checkDerivative = true; + double tmp_checkOldDerivative = 0, tmp_checkCurrentDerivative = 0; + double tmp_checkOldResponse = 0; - // First the derivative gets calculated, then its zero crossing is searched for - // if in 4 bins around the 0 crossing the derivative is falling, it is accepted as peak + int searchWindow = 5; - for(int i_bin = 1; i_bin<m_nBins; i_bin++){ - derivative.SetBinContent(i_bin, (response.GetBinContent(i_bin+1) - response.GetBinContent(i_bin)) / response.GetXaxis()->GetBinWidth(i_bin)); + for (int i_timeOfPeak = -searchWindow; i_timeOfPeak <= searchWindow; i_timeOfPeak ++) { + double response = vmmResponse(effectiveCharge, electronsTime, time + i_timeOfPeak * m_timeStep); + + tmp_checkOldDerivative = tmp_checkCurrentDerivative; + tmp_checkCurrentDerivative = (response - tmp_checkOldResponse) * m_inverseTimeStep; + tmp_checkOldResponse = response; + + if (i_timeOfPeak >= -searchWindow + 2 // needs two iterations to fill the variables + && tmp_checkOldDerivative < tmp_checkCurrentDerivative) { // derivative is not falling monothonic + checkDerivative = false; + break; + } + } + if (!checkDerivative) continue; + return time - m_timeStep; } + return -9999; // no peak found +} + + +bool VMM_Shaper::hasChargeAboveThreshold(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double electronicsThreshold) const{ + if (!aboveThresholdSimple(effectiveCharge, electronsTime, electronicsThreshold)) return false; - for (int i_bin = 1; i_bin < m_nBins; i_bin++) { - if (derivative.GetBinContent(i_bin) * derivative.GetBinContent(i_bin + 1) > 0.0) continue; // continue loop if no 0 crossing was there - if (response.GetBinContent(i_bin + 1) < electronicsThreshold) continue; // continue if peak is below threshold - bool derivativeCut = true; - for (int j_bin = i_bin-2; j_bin <= i_bin + 2; j_bin++) { - if (derivative.GetBinContent(j_bin) <= derivative.GetBinContent(j_bin+1)) { // check that the derivative is falling for 4 bins around the 0 crossing - derivativeCut = false; - } - if (derivativeCut) { - return i_bin + 1; - } + if (effectiveCharge.size() == 0) return false; // protect min_element + double startTime = m_lowerTimeWindow; + double minElectronTime = *std::min_element(electronsTime.begin(), electronsTime.end()); + // since we are only checking if signal is above threshold, we can start searching close to the peak + minElectronTime += m_peakTime * 0.8; + if (startTime < minElectronTime) startTime = minElectronTime; // if smallest strip times are higher then the lower time window, just start the loop from the smallest electron time + + for (double time = startTime; time < m_upperTimeWindow; time += m_timeStep) { + if (vmmResponse(effectiveCharge, electronsTime, time) >= electronicsThreshold) { + return true; } } - return -1; + return false; + } -bool VMM_Shaper::hasChargeAboveThreshold(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double &electronicsThreshold) const { - TH1F response("response", "response", m_nBins, 0, m_maxTime); - vmmResponse(effectiveCharge, electronsTime, response); - int i_aboveThreshold = response.FindFirstBinAbove(electronicsThreshold); - return i_aboveThreshold > 0; -} \ No newline at end of file +bool VMM_Shaper::aboveThresholdSimple(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, const double electronicsThreshold) const { + // check if total strip charge is above threshold, otherwise skip VMM + float chargeSum = 0; + for (unsigned int i_elec = 0; i_elec < effectiveCharge.size(); i_elec++) { + if (electronsTime.at(i_elec) >= m_lowerTimeWindow - m_peakTime && electronsTime.at(i_elec) <= m_upperTimeWindow) { + chargeSum += effectiveCharge.at(i_elec)*m_peakTimeChargeScaling; + } + } + if (chargeSum >= electronicsThreshold) return true; + return false; +} diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtVsRpcRawDataMonitoring/src/MdtVsRpcRawDataValAlg.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtVsRpcRawDataMonitoring/src/MdtVsRpcRawDataValAlg.cxx index 9d182297fa03fb0cc9e564fff0c4cd16397d0376..22003c36fce59ad00f780c57da4d7e5ebce40e88 100755 --- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtVsRpcRawDataMonitoring/src/MdtVsRpcRawDataValAlg.cxx +++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtVsRpcRawDataMonitoring/src/MdtVsRpcRawDataValAlg.cxx @@ -134,7 +134,6 @@ StatusCode MdtVsRpcRawDataValAlg::fillHistograms() int nPrd = 0; - Identifier dig_id; std::string type="RPC"; @@ -198,8 +197,8 @@ StatusCode MdtVsRpcRawDataValAlg::fillHistograms() std::string hardware_name=convertChamberName(irpcstationName,irpcstationEta,irpcstationPhi,type) ; if (selectChambersRange(hardware_name, m_chamberName, - m_idHelperSvc->rpcIdHelper().stationEta(dig_id), m_StationEta, - m_idHelperSvc->rpcIdHelper().stationPhi(dig_id), m_StationPhi, m_StationSize) && chambersCosmicSetup(hardware_name,m_cosmicStation)) { + m_idHelperSvc->rpcIdHelper().stationEta(prd_id), m_StationEta, + m_idHelperSvc->rpcIdHelper().stationPhi(prd_id), m_StationPhi, m_StationSize) && chambersCosmicSetup(hardware_name,m_cosmicStation)) { //define layer int imdt_multi_near = 0; diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py index 617f0a5b3c988c6bc2004b8f1fe3cfdca1dfa576..6fbcd4d033bbd2acf26d28cfbd23e29a522337e3 100644 --- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py +++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py @@ -37,9 +37,11 @@ def TgcRawDataMonitoringConfig(inputFlags): if not inputFlags.DQ.triggerDataAvailable: tgcRawDataMonAlg.MuonRoIContainerName = '' - if 'HLT_xAOD__MuonContainer_MuonEFInfo' in inputFlags.Input.Collections: + isBS = (inputFlags.Input.Format == 'BS') + # if input is raw data, objects won't be in input collections + if (isBS and inputFlags.DQ.triggerDataAvailable) or 'HLT_xAOD__MuonContainer_MuonEFInfo' in inputFlags.Input.Collections: tgcRawDataMonAlg.MuonEFContainerName='HLT_xAOD__MuonContainer_MuonEFInfo' - if 'TGC_MeasurementsAllBCs' in inputFlags.Input.Collections: + if isBS or 'TGC_MeasurementsAllBCs' in inputFlags.Input.Collections: tgcRawDataMonAlg.AnaTgcPrd=True mainDir = 'Muon/MuonRawDataMonitoring/TGC/' diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCalo/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCalo/CMakeLists.txt index e8b2857f8bb11fecb6cca5421cdc75294f2cc4ca..aacb71eaac743229e5f8e4aca27fbb10c7398260 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCalo/CMakeLists.txt +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCalo/CMakeLists.txt @@ -9,4 +9,4 @@ atlas_add_component( DerivationFrameworkCalo LINK_LIBRARIES LINK_LIBRARIES AthenaBaseComps CaloClusterCorrectionLib CaloEvent CaloGeoHelpers CaloIdentifier CaloUtilsLib DerivationFrameworkInterfaces ExpressionEvaluationLib FourMomUtils GaudiKernel LArCablingLib StoreGateLib xAODBase xAODCaloEvent xAODEgamma xAODJet xAODMuon xAODTau ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCalo/python/CaloCellDFGetter.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCalo/python/CaloCellDFGetter.py index 4f03e5e967c367712868318057f4483afbe84075..13e4b469736671e1283780005013c233ca74b0c8 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCalo/python/CaloCellDFGetter.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCalo/python/CaloCellDFGetter.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration #========================================================================================== #This is basically based in the Calorimeter/CaloRec/python/CaloCellAODGetter.py (used for ESD to AOD) @@ -38,8 +38,6 @@ # to write extra cell for e/gamma #========================================================================================== -from AthenaCommon.Constants import * -from RecExConfig.Configured import Configured from AthenaCommon.AlgSequence import AlgSequence topSequence=AlgSequence() diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/CMakeLists.txt index cd274a1e3c6524b2412345249a879dd59c8936f4..7f742b3ecd24355d228640d7e58561fe5a54d7f2 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/CMakeLists.txt +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/CMakeLists.txt @@ -9,6 +9,6 @@ atlas_add_component( DerivationFrameworkCore LINK_LIBRARIES AsgAnalysisInterfaces AthAnalysisBaseCompsLib AthContainers AthLinks AthenaKernel DerivationFrameworkInterfaces GoodRunsListsLib PathResolver SGTools TrigDecisionToolLib TriggerMatchingToolLib xAODBase xAODEgamma xAODEventInfo xAODMuon ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) atlas_install_scripts( scripts/frozen_derivation_test.py ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/ContentHandler.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/ContentHandler.py index 898d991d6c06d8c734c4634425d71f742c7a0b03..6af0970e7b11e84fa044fd2f097aeae612a63011 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/ContentHandler.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/ContentHandler.py @@ -21,7 +21,7 @@ class ContentHandler: if containerName in theDictionary.keys(): line = theDictionary[containerName]+"#"+containerName else: - msg.warning('Collection with name %s not found in input file or in definitions from user. No action will be taken for this collection.' % containerName) + msg.warning('Collection with name %s not found in input file or in definitions from user. No action will be taken for this collection.', containerName) return line diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/DerivationFrameworkMaster.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/DerivationFrameworkMaster.py index 90a0af470a936ad8e7baee65a2cc66da845dd320..2a364ea7a57b9a7a4b43f9113b5f80c716de47d2 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/DerivationFrameworkMaster.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/DerivationFrameworkMaster.py @@ -7,17 +7,11 @@ # Contains all basic includes for running the derivation framework #------------------------------------------------------------- -from __future__ import print_function - -from AthenaCommon.AppMgr import ToolSvc from AthenaCommon.AppMgr import theApp # Derivation names and locations of job options -from DerivationFrameworkCore.DerivationFrameworkProdFlags import derivationFlags -# Multiple stream manager -from OutputStreamAthenaPool.MultipleStreamManager import MSMgr +from DerivationFrameworkCore.DerivationFrameworkProdFlags import derivationFlags # noqa: F401 # Athena common properties -from AthenaCommon.JobProperties import jobproperties -from AthenaCommon import CfgMgr +from AthenaCommon import CfgMgr from AthenaCommon.AlgSequence import AlgSequence from JetRec.JetRecFlags import jetFlags from AthenaCommon.GlobalFlags import globalflags @@ -26,7 +20,7 @@ from AthenaCommon.AppMgr import ServiceMgr as svcMgr import os if "AthAnalysisBase" not in os.environ.get("CMTEXTRATAGS",""): - from AODFix.AODFix import * + from AODFix.AODFix import * # noqa: F401, F403 # Trap for ROOT6 errors theApp.CreateSvc += ["AthROOTErrorHandlerSvc"] @@ -60,11 +54,12 @@ if inputFileSummary is not None: # Set up the metadata tool: if not globalflags.InputFormat=="bytestream": # Extra config: make sure if we are using EVNT that we don't try to check sim/digi/reco metadata - from RecExConfig.ObjKeyStore import objKeyStore +# from RecExConfig.ObjKeyStore import objKeyStore # ToolSvc += CfgMgr.xAODMaker__FileMetaDataCreatorTool( "FileMetaDataCreatorTool", # isEVNT = objKeyStore.isInInput( "McEventCollection", "GEN_EVENT" ), # OutputLevel = 2 ) # svcMgr.MetaDataSvc.MetaDataTools += [ ToolSvc.FileMetaDataCreatorTool ] + pass # Set up stream auditor if not hasattr(svcMgr, 'DecisionSvc'): @@ -95,7 +90,7 @@ if globalflags.DataSource()=='geant4': # Make sure input file is not EVNT if not objKeyStore.isInInput( "McEventCollection", "GEN_EVENT" ): DerivationFrameworkSimBarcodeOffset = int(inputFileSummary['metadata']['/Simulation/Parameters']['SimBarcodeOffset']) - except: + except Exception: print ('Could not retrieve SimBarcodeOffset from /Simulation/Parameters, leaving at 200k') def buildFileName(derivationStream): diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/DerivationFrameworkProdFlags.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/DerivationFrameworkProdFlags.py index 9ca72cb748a521400fdf4fcb27cd13a8b0e3fcd5..765154d5141db0e5140308b300302912a170892d 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/DerivationFrameworkProdFlags.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/DerivationFrameworkProdFlags.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon.JobProperties import JobProperty, JobPropertyContainer from AthenaCommon.JobProperties import jobproperties @@ -914,7 +914,7 @@ jobproperties.DerivationFrameworkProdFlags.add_JobProperty(WriteDAOD_STDM11Strea listAODtoDPD.append(WriteDAOD_STDM11Stream.StreamName) class WriteDAOD_STDM12Stream (JobProperty): - """Derivation for B\pm fragmentation, Photon + B\pm, J/psi and Upsilon fragmentation measurements""" + """Derivation for B+- fragmentation, Photon + B+-, J/psi and Upsilon fragmentation measurements""" statusOn = True allowedTypes = ['bool'] StoredValue = False diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/LHE3WeightMetadata.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/LHE3WeightMetadata.py index 8e3f0e174e5c02a550be6760adddc1373cb7508c..f5e8c07f0745811f576ee6d1a4fa9503303a1426 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/LHE3WeightMetadata.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/LHE3WeightMetadata.py @@ -1,13 +1,11 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - import operator import json def addLHE3Weights(seq, pref = '', var_dict = {}): from AthenaCommon.AppMgr import ToolSvc - from ReweightUtils.ReweightUtilsConf import SumOfWeightsAlg + from ReweightUtils.ReweightUtilsConf import SumOfWeightsAlg, McEventWeight sumOfWeightsAlg = SumOfWeightsAlg(name = pref+"LHE3SumWeightsAlg") @@ -24,7 +22,7 @@ def addLHE3Weights(seq, pref = '', var_dict = {}): seq += sumOfWeightsAlg -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob # skip this in datfrom AthenaCommon.GlobalFlags import globalflags from AthenaCommon.GlobalFlags import globalflags @@ -33,8 +31,9 @@ if globalflags.DataSource() == 'geant4': mcweight_dict_orig = dict() mcweight_dict = dict() try: + from RecExConfig.InputFilePeeker import inputFileSummary mcweight_dict_orig = inputFileSummary['metadata']['/Generation/Parameters']['HepMCWeightNames'] - except: + except Exception: print ('Could not retrieve HepMCWeightNames /Generation/Parameters metadata.') # Recent versions of MadGraph are writing the dictionary as a flat string diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/SlimmingHelper.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/SlimmingHelper.py index a0dcba819a6a0b94812342885c931070aecccaec..0200eb94cca4b4350245088bade746db68df530c 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/SlimmingHelper.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/SlimmingHelper.py @@ -34,17 +34,13 @@ # may be unreadable. #################################################################### -from __future__ import print_function - -from DerivationFrameworkCore.CompulsoryContent import * -from DerivationFrameworkCore.ContentHandler import * +from DerivationFrameworkCore.CompulsoryContent import CompulsoryContent, CompulsoryTriggerNavigation +from DerivationFrameworkCore.ContentHandler import ContentHandler from DerivationFrameworkCore.ContainersForExpansion import ContainersForExpansion from DerivationFrameworkCore.ContainersOnTheFly import ContainersOnTheFly from DerivationFrameworkCore.AllVariablesDisallowed import AllVariablesDisallowed from DerivationFrameworkCore.FullListOfSmartContainers import FullListOfSmartContainers from DerivationFrameworkCore.PreliminarySmartContainers import PreliminarySmartContainers -from AthenaCommon.BeamFlags import jobproperties -from AthenaCommon.GlobalFlags import globalflags import PyUtils.Logging as L msg = L.logging.getLogger('DerivationFramework__SlimmingHelper') msg.setLevel(L.logging.INFO) @@ -56,13 +52,13 @@ class lockable_list(list): list.__init__(self,data) self.__dict__["_locked"] = False def append(self,name): - if self._locked == True: + if self._locked is True: msg.error("Attempting to Modify SlimmingHelper after AppendContentToStream has Been Called") raise RuntimeError("Late Modification to SlimmingHelper do not modify after calling AppendContentToStream") else: return list.append(self, name) def __setattr__(self,name,value): - if self._locked==True: + if self._locked is True: msg.error("Attempting to Modify SlimmingHelper after AppendContentToStream has Been Called") raise RuntimeError("Late Modification to SlimmingHelper do not modify after calling AppendContentToStream") else: @@ -107,7 +103,7 @@ class SlimmingHelper: # This hack prevents any members from being modified after lock is set to true, this happens in AppendContentToStream def __setattr__(self,name,value): - if self._locked==True: + if self._locked is True: msg.error("Attempting to Modify SlimmingHelper "+self.name+" After AppendContentToStream has Been Called") raise RuntimeError("Late Modification to SlimmingHelper, do not modifiy after calling AppendContentToStream") elif type(value)==list: @@ -157,44 +153,44 @@ class SlimmingHelper: # Trigger objects: add them by hand to the smart collection list (to keep the previous interface) triggerContent = False - if (self.IncludeAdditionalTriggerContent == True): + if (self.IncludeAdditionalTriggerContent is True): triggerContent = True - if (self.IncludeMuonTriggerContent == True): + if (self.IncludeMuonTriggerContent is True): triggerContent = True self.SmartCollections.append("HLT_xAOD__MuonContainer_MuonEFInfo") - if (self.IncludeEGammaTriggerContent == True): + if (self.IncludeEGammaTriggerContent is True): triggerContent = True self.SmartCollections.append("HLT_xAOD__PhotonContainer_egamma_Photons") - if (self.IncludeJetTriggerContent == True): + if (self.IncludeJetTriggerContent is True): triggerContent = True self.SmartCollections.append("HLT_xAOD__JetContainer_a4tcemsubjesFS") from DerivationFrameworkCore.JetTriggerFixContent import JetTriggerFixContent for item in JetTriggerFixContent: Stream.AddItem(item) - if (self.IncludeEtMissTriggerContent == True): + if (self.IncludeEtMissTriggerContent is True): triggerContent = True self.SmartCollections.append("HLT_xAOD__TrigMissingETContainer_TrigEFMissingET") from DerivationFrameworkCore.EtMissTriggerFixContent import EtMissTriggerFixContent for item in EtMissTriggerFixContent: Stream.AddItem(item) - if (self.IncludeTauTriggerContent == True): + if (self.IncludeTauTriggerContent is True): triggerContent = True self.SmartCollections.append("HLT_xAOD__TauJetContainer_TrigTauRecMerged") - if (self.IncludeBJetTriggerContent == True): + if (self.IncludeBJetTriggerContent is True): triggerContent = True self.SmartCollections.append("HLT_xAOD__BTaggingContainer_HLTBjetFex") - if (self.IncludeBPhysTriggerContent == True): + if (self.IncludeBPhysTriggerContent is True): triggerContent = True self.SmartCollections.append("HLT_xAOD__TrigBphysContainer_EFBMuMuFex") - if (self.IncludeMinBiasTriggerContent == True): + if (self.IncludeMinBiasTriggerContent is True): triggerContent = True self.SmartCollections.append("HLT_xAOD__TrigVertexCountsContainer_vertexcounts") @@ -270,13 +266,13 @@ class SlimmingHelper: # Add trigger item (not covered by smart slimming so no expansion) # Old, will be removed (kept just to not break some deriavtions) - if (self.IncludeJetTauEtMissTriggerContent == True): + if (self.IncludeJetTauEtMissTriggerContent is True): from DerivationFrameworkCore.JetTauEtMissTriggerContent import JetTauEtMissTriggerContent for item in JetTauEtMissTriggerContent: Stream.AddItem(item) # non xAOD collections for MinBias - if (self.IncludeMinBiasTriggerContent == True): + if (self.IncludeMinBiasTriggerContent is True): from DerivationFrameworkCore.MinBiasTrigger_nonxAOD_Content import MinBiasTrigger_nonxAOD_Content for item in MinBiasTrigger_nonxAOD_Content: Stream.AddItem(item) @@ -661,7 +657,7 @@ class SlimmingHelper: elif collectionName=="PrimaryVertices": from DerivationFrameworkInDet.PrimaryVerticesCPContent import PrimaryVerticesCPContent items.extend(PrimaryVerticesCPContent) - elif self.IncludeAdditionalTriggerContent == True: + elif self.IncludeAdditionalTriggerContent is True: from DerivationFrameworkCore.AdditionalTriggerContent import AdditionalTriggerContent items.extend(AdditionalTriggerContent) @@ -727,7 +723,6 @@ class SlimmingHelper: return "WILDCARD" # No xAOD containers sep = item.split("#") - collection = sep[1] if ("xAOD::" in item and sep[1] in self.NamesAndTypes.keys()): return "XAOD" return "OK" diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/ThinningHelper.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/ThinningHelper.py index d03049845f304e0cf907be95172661536c8ad97f..e16bbb25a846e4ece3618acf5567ac8ff86e7294 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/ThinningHelper.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/ThinningHelper.py @@ -12,9 +12,6 @@ # (3) passes the thinning service back to the job options on request #################################################################### -# Needed import(s): -import AthenaCommon.CfgMgr as CfgMgr - ## Class helping to set up (navigation) thinning in derivation jobs # # In order to hide the complexity of using navigation thinning from the users, @@ -34,7 +31,6 @@ class ThinningHelper: # @param helperName The instance name of this helper object # def __init__( self, helperName ): - from AthenaCommon.AppMgr import ServiceMgr as svcMgr self.helperName = helperName self.TriggerChains = "" from AthenaCommon.Logging import logging @@ -54,11 +50,7 @@ class ThinningHelper: def AppendToStream( self, augmentedStream, extraTriggerContent = [] ): # Access the stream object: stream = augmentedStream.GetEventStream() - # Get the name of the "format": - formatName = stream.name().strip( "StreamDAOD_" ) - # The necessary import(s): - from AthenaCommon.AppMgr import ServiceMgr as svcMgr - + if self.TriggerChains == "": # No trigger selection required. return @@ -96,7 +88,7 @@ class ThinningHelper: t.TrigNavigationThinningSvc = tSvc break else: - log.error ("Can't find ThinningCacheTool for stream %s", stream) + self.log.error ("Can't find ThinningCacheTool for stream %s", stream) return diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/WeightMetadata.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/WeightMetadata.py index 59c5886b901846dc19039fd96a1a35dc035225ac..50ddd043db49b748283ff1d9c5d8184e31e62c28 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/WeightMetadata.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore/python/WeightMetadata.py @@ -1,6 +1,6 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from ReweightUtils.ReweightUtilsConf import * +from ReweightUtils.ReweightUtilsConf import McEventWeight, PDFWeight, SumOfWeightsAlg, WeightsAgregator def addWeights(seq, pdfMap = {'CT14nlo':20}, pref = ""): @@ -89,7 +89,7 @@ def addWeightsHist(stream, seq, svcMgr, CfgMgr, ToolSvc, derivName, fileName, pd seq += CfgMgr.CP__PileupReweightingProvider(derivName+"_pdfProvWeight"+pdfName+"_"+str(i),Tool=provTools[i],ConfigOutputStream="METADATA/pdfWeight"+pdfName+"_"+str(i)) -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob #addWeights(DerivationFrameworkJob, {'CT10nlo':52, 'MSTW2008nlo68cl': 40, 'NNPDF23_lo_as_0130_qed': 100, 'NNPDF30_nlo_as_0118': 100}, "") listPDF = {} #listPDF["CT14nlo"] = 56 diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/CMakeLists.txt index ed2f1499363a833facfa5bb5c950ab3c00e8c685..12941799f08b9a420c2d1317a0938fb458112f5a 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/CMakeLists.txt +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/CMakeLists.txt @@ -13,6 +13,6 @@ atlas_add_component( DerivationFrameworkEGamma LINK_LIBRARIES ${ROOT_LIBRARIES} AsgTools AthContainers AthenaBaseComps CaloCalibHitRecLib DerivationFrameworkInterfaces EgammaAnalysisHelpersLib EgammaAnalysisInterfacesLib ExpressionEvaluationLib GaudiKernel MCTruthClassifierLib PATCoreLib xAODBase xAODCaloEvent xAODEgamma xAODMissingET xAODMuon xAODTracking xAODTruth ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM1ExtraContent.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM1ExtraContent.py index c9f84c6756f3b96fcdd09ff6b134a686170f3e8e..c55bdc9568425508a92b29b1b3934b58aebebfc0 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM1ExtraContent.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM1ExtraContent.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration #Content included in addition to the Smart Slimming Content @@ -40,8 +40,8 @@ ExtraMuonsTruth=[ ] ExtraContentPhotons=[ - ] - + ] + ExtraContentPrimaryVertices=["PrimaryVertices.x.y.sumPt2"] ExtraPhotonsTruth=[ @@ -51,18 +51,18 @@ ExtraPhotonsTruth=[ ] ExtraContentGSFConversionVertices=[ - "GSFConversionVertices.x", - "GSFConversionVertices.y", - "GSFConversionVertices.z", - "GSFConversionVertices.px", - "GSFConversionVertices.py", - "GSFConversionVertices.pz", - "GSFConversionVertices.pt1", - "GSFConversionVertices.pt2", - "GSFConversionVertices.etaAtCalo", - "GSFConversionVertices.phiAtCalo", - "GSFConversionVertices.trackParticleLinks" - ] + "GSFConversionVertices.x", + "GSFConversionVertices.y", + "GSFConversionVertices.z", + "GSFConversionVertices.px", + "GSFConversionVertices.py", + "GSFConversionVertices.pz", + "GSFConversionVertices.pt1", + "GSFConversionVertices.pt2", + "GSFConversionVertices.etaAtCalo", + "GSFConversionVertices.phiAtCalo", + "GSFConversionVertices.trackParticleLinks" + ] #ExtraContentHLTElectrons=[ # "HLT_xAOD__ElectronContainer_egamma_Electrons.e.pt.Rhad.Rhad1.e277.Reta.Rphi.weta2.f1.fracs1.wtots1.weta1.DeltaE.Eratio.caloClusterLinks" @@ -84,10 +84,10 @@ ExtraContainersTruth=["TruthEvents", "TruthParticles", "TruthVertices", "AntiKt4TruthJets", - "egammaTruthParticles" + "egammaTruthParticles" #,"BTagging_AntiKt4TruthWZ" #,"AntiKt4TruthWZJets" - ] + ] ExtraContainersElectrons=["Electrons", "GSFTrackParticles", diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM2ExtraContent.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM2ExtraContent.py index e248b0a25cb25bd3e53edc2e5ba0b26f78482d46..1f077a8f6480de97c9bb751c6905d65547f0cbb2 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM2ExtraContent.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM2ExtraContent.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration #Content included in addition to the Smart Slimming Content @@ -28,7 +28,7 @@ ExtraMuonsTruth=[ ] ExtraContentPhotons=[ - ] + ] ExtraContentElectrons=[] @@ -41,34 +41,34 @@ ExtraPhotonsTruth=[ ] ExtraContentGSFConversionVertices=[ - "GSFConversionVertices.x", - "GSFConversionVertices.y", - "GSFConversionVertices.z", - "GSFConversionVertices.px", - "GSFConversionVertices.py", - "GSFConversionVertices.pz", - "GSFConversionVertices.pt1", - "GSFConversionVertices.pt2", - "GSFConversionVertices.etaAtCalo", - "GSFConversionVertices.phiAtCalo", - "GSFConversionVertices.trackParticleLinks" - ] + "GSFConversionVertices.x", + "GSFConversionVertices.y", + "GSFConversionVertices.z", + "GSFConversionVertices.px", + "GSFConversionVertices.py", + "GSFConversionVertices.pz", + "GSFConversionVertices.pt1", + "GSFConversionVertices.pt2", + "GSFConversionVertices.etaAtCalo", + "GSFConversionVertices.phiAtCalo", + "GSFConversionVertices.trackParticleLinks" + ] #cells = ("Cells5x5","Cells3x5","Cells3x7","Cells7x11") -#layers_gains = ( "_Lr0", "_Lr1", "_Lr2", "_Lr3", -# "_Lr0_LwG", "_Lr1_LwG", "_Lr2_LwG", "_Lr3_LwG", -# "_Lr0_LwG", "_Lr1_MdG", "_Lr2_MdG", "_Lr3_MdG", -# "_Lr0_LwG", "_Lr1_HiG", "_Lr2_HiG", "_Lr3_HiG" ) +#layers_gains = ( "_Lr0", "_Lr1", "_Lr2", "_Lr3", +# "_Lr0_LwG", "_Lr1_LwG", "_Lr2_LwG", "_Lr3_LwG", +# "_Lr0_LwG", "_Lr1_MdG", "_Lr2_MdG", "_Lr3_MdG", +# "_Lr0_LwG", "_Lr1_HiG", "_Lr2_HiG", "_Lr3_HiG" ) # #for cell in cells: -# ExtraContentPhotons.append("Photons."+cell) -# for layer in layers_gains: -# ExtraContentPhotons.append("Photons."+cell+layer) +# ExtraContentPhotons.append("Photons."+cell) +# for layer in layers_gains: +# ExtraContentPhotons.append("Photons."+cell+layer) # #for cell in cells: -# ExtraContentElectrons.append("Electrons."+cell) -# for layer in layers_gains: -# ExtraContentElectrons.append("Electrons."+cell+layer) +# ExtraContentElectrons.append("Electrons."+cell) +# for layer in layers_gains: +# ExtraContentElectrons.append("Electrons."+cell+layer) from DerivationFrameworkCalo.DerivationFrameworkCaloFactories import GainDecorator, getGainDecorations GainDecoratorTool = GainDecorator() ExtraContentPhotons.extend( getGainDecorations(GainDecoratorTool) ) @@ -82,7 +82,7 @@ ExtraContainersTruth=["TruthEvents", "TruthParticles", "TruthVertices", "AntiKt4TruthJets", - "egammaTruthParticles" + "egammaTruthParticles" #,"BTagging_AntiKt4TruthWZ" #,"AntiKt4TruthWZJets" ] diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM3ExtraContent.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM3ExtraContent.py index 990c084d3c0fb1c978d9ae9dabd4c83d75d482e5..bd1d12d646c7fa69e278714aaef19807134d91fa 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM3ExtraContent.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM3ExtraContent.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration #Content included in addition to the Smart Slimming Content @@ -42,39 +42,39 @@ ExtraPhotonsTruth=[ ] ExtraContentGSFConversionVertices=[ - "GSFConversionVertices.x", - "GSFConversionVertices.y", - "GSFConversionVertices.z", - "GSFConversionVertices.px", - "GSFConversionVertices.py", - "GSFConversionVertices.pz", - "GSFConversionVertices.pt1", - "GSFConversionVertices.pt2", - "GSFConversionVertices.etaAtCalo", - "GSFConversionVertices.phiAtCalo", - "GSFConversionVertices.trackParticleLinks" - ] + "GSFConversionVertices.x", + "GSFConversionVertices.y", + "GSFConversionVertices.z", + "GSFConversionVertices.px", + "GSFConversionVertices.py", + "GSFConversionVertices.pz", + "GSFConversionVertices.pt1", + "GSFConversionVertices.pt2", + "GSFConversionVertices.etaAtCalo", + "GSFConversionVertices.phiAtCalo", + "GSFConversionVertices.trackParticleLinks" + ] ExtraContentHLTPhotons=[ - "HLT_xAOD__PhotonContainer_egamma_Photons.e.pt.m.author.Rhad.Rhad1.e277.Reta.Rphi.weta2.f1.fracs1.wtots1.weta1.DeltaE.Eratio.caloClusterLinks", - "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex.calE.calEta.calPhi.calM.e_sampl.eta_sampl.etaCalo.phiCalo.ETACALOFRAME.PHICALOFRAME" + "HLT_xAOD__PhotonContainer_egamma_Photons.e.pt.m.author.Rhad.Rhad1.e277.Reta.Rphi.weta2.f1.fracs1.wtots1.weta1.DeltaE.Eratio.caloClusterLinks", + "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex.calE.calEta.calPhi.calM.e_sampl.eta_sampl.etaCalo.phiCalo.ETACALOFRAME.PHICALOFRAME" ] #cells = ("Cells5x5","Cells3x5","Cells3x7","Cells7x11") -#layers_gains = ( "_Lr0", "_Lr1", "_Lr2", "_Lr3", -# "_Lr0_LwG", "_Lr1_LwG", "_Lr2_LwG", "_Lr3_LwG", -# "_Lr0_LwG", "_Lr1_MdG", "_Lr2_MdG", "_Lr3_MdG", -# "_Lr0_LwG", "_Lr1_HiG", "_Lr2_HiG", "_Lr3_HiG" ) +#layers_gains = ( "_Lr0", "_Lr1", "_Lr2", "_Lr3", +# "_Lr0_LwG", "_Lr1_LwG", "_Lr2_LwG", "_Lr3_LwG", +# "_Lr0_LwG", "_Lr1_MdG", "_Lr2_MdG", "_Lr3_MdG", +# "_Lr0_LwG", "_Lr1_HiG", "_Lr2_HiG", "_Lr3_HiG" ) # #for cell in cells: -# ExtraContentPhotons.append("Photons."+cell) -# for layer in layers_gains: -# ExtraContentPhotons.append("Photons."+cell+layer) +# ExtraContentPhotons.append("Photons."+cell) +# for layer in layers_gains: +# ExtraContentPhotons.append("Photons."+cell+layer) # #for cell in cells: -# ExtraContentElectrons.append("Electrons."+cell) -# for layer in layers_gains: -# ExtraContentElectrons.append("Electrons."+cell+layer) +# ExtraContentElectrons.append("Electrons."+cell) +# for layer in layers_gains: +# ExtraContentElectrons.append("Electrons."+cell+layer) from DerivationFrameworkCalo.DerivationFrameworkCaloFactories import GainDecorator, getGainDecorations GainDecoratorTool = GainDecorator() ExtraContentPhotons.extend( getGainDecorations(GainDecoratorTool) ) @@ -87,8 +87,8 @@ ExtraContainersTruth=["TruthEvents", "TruthParticles", "TruthVertices", "AntiKt4TruthJets", - "egammaTruthParticles", - "MuonTruthParticles" + "egammaTruthParticles", + "MuonTruthParticles" #,"BTagging_AntiKt4TruthWZ" #,"AntiKt4TruthWZJets" ] @@ -105,39 +105,39 @@ ExtraContainersPhotons=["Photons", # for trigger studies ExtraContainersTrigger=[ - "HLT_xAOD__ElectronContainer_egamma_Electrons", - "HLT_xAOD__ElectronContainer_egamma_ElectronsAux.", - "HLT_xAOD__PhotonContainer_egamma_Photons", - "HLT_xAOD__PhotonContainer_egamma_PhotonsAux.", + "HLT_xAOD__ElectronContainer_egamma_Electrons", + "HLT_xAOD__ElectronContainer_egamma_ElectronsAux.", + "HLT_xAOD__PhotonContainer_egamma_Photons", + "HLT_xAOD__PhotonContainer_egamma_PhotonsAux.", "HLT_xAOD__PhotonContainer_egamma_Iso_Photons", "HLT_xAOD__PhotonContainer_egamma_Iso_PhotonsAux.", - "HLT_xAOD__TrigElectronContainer_L2ElectronFex", - "HLT_xAOD__TrigElectronContainer_L2ElectronFexAux.", - "HLT_xAOD__TrigPhotonContainer_L2PhotonFex", - "HLT_xAOD__TrigPhotonContainer_L2PhotonFexAux.", - "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex", - "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFexAux.", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFID", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFIDAux.", - "LVL1EmTauRoIs", - "LVL1EmTauRoIsAux.", - "HLT_TrigPassBitsCollection_passbits", - "HLT_TrigPassBitsCollection_passbitsAux.", - "HLT_TrigPassFlagsCollection_passflags", - "HLT_TrigPassFlagsCollection_passflagsAux.", - "HLT_TrigRoiDescriptorCollection_initialRoI", - "HLT_TrigRoiDescriptorCollection_initialRoIAux." - ] + "HLT_xAOD__TrigElectronContainer_L2ElectronFex", + "HLT_xAOD__TrigElectronContainer_L2ElectronFexAux.", + "HLT_xAOD__TrigPhotonContainer_L2PhotonFex", + "HLT_xAOD__TrigPhotonContainer_L2PhotonFexAux.", + "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex", + "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFexAux.", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFID", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFIDAux.", + "LVL1EmTauRoIs", + "LVL1EmTauRoIsAux.", + "HLT_TrigPassBitsCollection_passbits", + "HLT_TrigPassBitsCollection_passbitsAux.", + "HLT_TrigPassFlagsCollection_passflags", + "HLT_TrigPassFlagsCollection_passflagsAux.", + "HLT_TrigRoiDescriptorCollection_initialRoI", + "HLT_TrigRoiDescriptorCollection_initialRoIAux." + ] ExtraContainersTriggerDataOnly=[ - "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgamma", - "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgammaAux.", - "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMaker", - "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMakerAux.", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_FTF", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_FTFAux.", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_L2ID", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_L2IDAux.", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_IDTrig", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_IDTrigAux." - ] + "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgamma", + "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgammaAux.", + "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMaker", + "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMakerAux.", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_FTF", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_FTFAux.", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_L2ID", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_L2IDAux.", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_IDTrig", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_IDTrigAux." + ] diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM4ExtraContent.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM4ExtraContent.py index 27a494b113c2beb84d53433e74742388f00609ab..2fbf7a3688ec5999ab9ef46f531dafd49ea6d9fe 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM4ExtraContent.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM4ExtraContent.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration #Content included in addition to the Smart Slimming Content @@ -48,22 +48,22 @@ ExtraPhotonsTruth=[ ] ExtraContentGSFConversionVertices=[ - "GSFConversionVertices.x", - "GSFConversionVertices.y", - "GSFConversionVertices.z", - "GSFConversionVertices.px", - "GSFConversionVertices.py", - "GSFConversionVertices.pz", - "GSFConversionVertices.pt1", - "GSFConversionVertices.pt2", - "GSFConversionVertices.etaAtCalo", - "GSFConversionVertices.phiAtCalo", - "GSFConversionVertices.trackParticleLinks" - ] + "GSFConversionVertices.x", + "GSFConversionVertices.y", + "GSFConversionVertices.z", + "GSFConversionVertices.px", + "GSFConversionVertices.py", + "GSFConversionVertices.pz", + "GSFConversionVertices.pt1", + "GSFConversionVertices.pt2", + "GSFConversionVertices.etaAtCalo", + "GSFConversionVertices.phiAtCalo", + "GSFConversionVertices.trackParticleLinks" + ] ExtraContentHLTPhotons=[ "HLT_xAOD__PhotonContainer_egamma_Photons.e.pt.m.author.Rhad.Rhad1.e277.Reta.Rphi.weta2.f1.fracs1.wtots1.weta1.DeltaE.Eratio.caloClusterLinks", - "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex.calE.calEta.calPhi.calM.e_sampl.eta_sampl.etaCalo.phiCalo.ETACALOFRAME.PHICALOFRAME" + "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex.calE.calEta.calPhi.calM.e_sampl.eta_sampl.etaCalo.phiCalo.ETACALOFRAME.PHICALOFRAME" ] from DerivationFrameworkCalo.DerivationFrameworkCaloFactories import GainDecorator, getGainDecorations @@ -79,8 +79,8 @@ ExtraContainersTruth=["TruthEvents", "TruthParticles", "TruthVertices", "AntiKt4TruthJets", - "egammaTruthParticles", - "MuonTruthParticles" + "egammaTruthParticles", + "MuonTruthParticles" #,"BTagging_AntiKt4TruthWZ" #,"AntiKt4TruthWZJets" ] @@ -95,31 +95,31 @@ ExtraContainersPhotons=["Photons", # for trigger studies and for trigger matching ExtraContainersTrigger=[ - "HLT_xAOD__MuonContainer_MuonEFInfo", - "HLT_xAOD__MuonContainer_MuonEFInfoAux.", + "HLT_xAOD__MuonContainer_MuonEFInfo", + "HLT_xAOD__MuonContainer_MuonEFInfoAux.", "HLT_xAOD__MuonContainer_MuonEFInfo_FullScan", "HLT_xAOD__MuonContainer_MuonEFInfo_FullScanAux.", - "HLT_xAOD__PhotonContainer_egamma_Photons", - "HLT_xAOD__PhotonContainer_egamma_PhotonsAux.", + "HLT_xAOD__PhotonContainer_egamma_Photons", + "HLT_xAOD__PhotonContainer_egamma_PhotonsAux.", "HLT_xAOD__PhotonContainer_egamma_Iso_Photons", "HLT_xAOD__PhotonContainer_egamma_Iso_PhotonsAux.", - "HLT_xAOD__TrigPhotonContainer_L2PhotonFex", - "HLT_xAOD__TrigPhotonContainer_L2PhotonFexAux.", - "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex", - "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFexAux.", - "LVL1EmTauRoIs", - "LVL1EmTauRoIsAux.", - "HLT_TrigPassBitsCollection_passbits", - "HLT_TrigPassBitsCollection_passbitsAux.", - "HLT_TrigPassFlagsCollection_passflags", - "HLT_TrigPassFlagsCollection_passflagsAux.", - "HLT_TrigRoiDescriptorCollection_initialRoI", - "HLT_TrigRoiDescriptorCollection_initialRoIAux." + "HLT_xAOD__TrigPhotonContainer_L2PhotonFex", + "HLT_xAOD__TrigPhotonContainer_L2PhotonFexAux.", + "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex", + "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFexAux.", + "LVL1EmTauRoIs", + "LVL1EmTauRoIsAux.", + "HLT_TrigPassBitsCollection_passbits", + "HLT_TrigPassBitsCollection_passbitsAux.", + "HLT_TrigPassFlagsCollection_passflags", + "HLT_TrigPassFlagsCollection_passflagsAux.", + "HLT_TrigRoiDescriptorCollection_initialRoI", + "HLT_TrigRoiDescriptorCollection_initialRoIAux." ] ExtraContainersTriggerDataOnly=[ - "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgamma", - "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgammaAux.", - "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMaker", - "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMakerAux." - ] + "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgamma", + "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgammaAux.", + "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMaker", + "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMakerAux." + ] diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM5ExtraContent.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM5ExtraContent.py index eca0e30a85720475ece329349965f899bc0f4bce..590f71a6a4467444c58ec0ebdeefd9e43a26bb4d 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM5ExtraContent.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM5ExtraContent.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration #Content included in addition to the Smart Slimming Content @@ -42,34 +42,34 @@ ExtraPhotonsTruth=[ ] ExtraContentGSFConversionVertices=[ - "GSFConversionVertices.x", - "GSFConversionVertices.y", - "GSFConversionVertices.z", - "GSFConversionVertices.px", - "GSFConversionVertices.py", - "GSFConversionVertices.pz", - "GSFConversionVertices.pt1", - "GSFConversionVertices.pt2", - "GSFConversionVertices.etaAtCalo", - "GSFConversionVertices.phiAtCalo", - "GSFConversionVertices.trackParticleLinks" + "GSFConversionVertices.x", + "GSFConversionVertices.y", + "GSFConversionVertices.z", + "GSFConversionVertices.px", + "GSFConversionVertices.py", + "GSFConversionVertices.pz", + "GSFConversionVertices.pt1", + "GSFConversionVertices.pt2", + "GSFConversionVertices.etaAtCalo", + "GSFConversionVertices.phiAtCalo", + "GSFConversionVertices.trackParticleLinks" ] #cells = ("Cells5x5","Cells3x5","Cells3x7","Cells7x11") -#layers_gains = ( "_Lr0", "_Lr1", "_Lr2", "_Lr3", -# "_Lr0_LwG", "_Lr1_LwG", "_Lr2_LwG", "_Lr3_LwG", -# "_Lr0_LwG", "_Lr1_MdG", "_Lr2_MdG", "_Lr3_MdG", -# "_Lr0_LwG", "_Lr1_HiG", "_Lr2_HiG", "_Lr3_HiG" ) +#layers_gains = ( "_Lr0", "_Lr1", "_Lr2", "_Lr3", +# "_Lr0_LwG", "_Lr1_LwG", "_Lr2_LwG", "_Lr3_LwG", +# "_Lr0_LwG", "_Lr1_MdG", "_Lr2_MdG", "_Lr3_MdG", +# "_Lr0_LwG", "_Lr1_HiG", "_Lr2_HiG", "_Lr3_HiG" ) # #for cell in cells: -# ExtraContentPhotons.append("Photons."+cell) -# for layer in layers_gains: -# ExtraContentPhotons.append("Photons."+cell+layer) +# ExtraContentPhotons.append("Photons."+cell) +# for layer in layers_gains: +# ExtraContentPhotons.append("Photons."+cell+layer) # #for cell in cells: -# ExtraContentElectrons.append("Electrons."+cell) -# for layer in layers_gains: -# ExtraContentElectrons.append("Electrons."+cell+layer) +# ExtraContentElectrons.append("Electrons."+cell) +# for layer in layers_gains: +# ExtraContentElectrons.append("Electrons."+cell+layer) # from DerivationFrameworkCalo.DerivationFrameworkCaloFactories import GainDecorator, getGainDecorations GainDecoratorTool = GainDecorator() @@ -83,7 +83,7 @@ ExtraContainersTruth=["TruthEvents", "TruthParticles", "TruthVertices", "AntiKt4TruthJets", - "egammaTruthParticles" + "egammaTruthParticles" #,"BTagging_AntiKt4TruthWZ" #,"AntiKt4TruthWZJets" ] @@ -95,32 +95,32 @@ ExtraContainersElectrons=["Electrons", # for trigger studies ExtraContainersTrigger=[ - "HLT_xAOD__ElectronContainer_egamma_Electrons", - "HLT_xAOD__ElectronContainer_egamma_ElectronsAux.", - "HLT_xAOD__PhotonContainer_egamma_Photons", - "HLT_xAOD__PhotonContainer_egamma_PhotonsAux.", - "HLT_xAOD__TrigElectronContainer_L2ElectronFex", - "HLT_xAOD__TrigElectronContainer_L2ElectronFexAux.", - "HLT_xAOD__TrigPhotonContainer_L2PhotonFex", - "HLT_xAOD__TrigPhotonContainer_L2PhotonFexAux.", - "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex", - "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFexAux.", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFID", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFIDAux.", - "LVL1EmTauRoIs", - "LVL1EmTauRoIsAux.", - "HLT_TrigPassBitsCollection_passbits", - "HLT_TrigPassBitsCollection_passbitsAux.", - "HLT_TrigPassFlagsCollection_passflags", - "HLT_TrigPassFlagsCollection_passflagsAux.", - "HLT_TrigRoiDescriptorCollection_initialRoI", - "HLT_TrigRoiDescriptorCollection_initialRoIAux." - ] + "HLT_xAOD__ElectronContainer_egamma_Electrons", + "HLT_xAOD__ElectronContainer_egamma_ElectronsAux.", + "HLT_xAOD__PhotonContainer_egamma_Photons", + "HLT_xAOD__PhotonContainer_egamma_PhotonsAux.", + "HLT_xAOD__TrigElectronContainer_L2ElectronFex", + "HLT_xAOD__TrigElectronContainer_L2ElectronFexAux.", + "HLT_xAOD__TrigPhotonContainer_L2PhotonFex", + "HLT_xAOD__TrigPhotonContainer_L2PhotonFexAux.", + "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex", + "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFexAux.", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFID", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFIDAux.", + "LVL1EmTauRoIs", + "LVL1EmTauRoIsAux.", + "HLT_TrigPassBitsCollection_passbits", + "HLT_TrigPassBitsCollection_passbitsAux.", + "HLT_TrigPassFlagsCollection_passflags", + "HLT_TrigPassFlagsCollection_passflagsAux.", + "HLT_TrigRoiDescriptorCollection_initialRoI", + "HLT_TrigRoiDescriptorCollection_initialRoIAux." + ] ExtraContainersTriggerDataOnly=[ - "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgamma", - "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgammaAux." - ] + "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgamma", + "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgammaAux." + ] #should probably slim electron/fwdelectrons/cluster collections and keep only relevant subset of variables.. # no ForwardElectrons, InDetTrackParticlesForward, ForwardElectronClusters, CaloCalTopoCluster diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM7ExtraContent.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM7ExtraContent.py index 2088e310366dd84b952298f48ad02feeaf5be89d..183b85a3223f3dd9e396cf278b98f48f2dea4851 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM7ExtraContent.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM7ExtraContent.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration #Content included in addition to the Smart Slimming Content @@ -40,8 +40,8 @@ ExtraMuonsTruth=[ ] ExtraContentPhotons=[ - ] - + ] + ExtraContentPrimaryVertices=["PrimaryVertices.x.y.sumPt2"] ExtraPhotonsTruth=[ @@ -51,18 +51,18 @@ ExtraPhotonsTruth=[ ] ExtraContentGSFConversionVertices=[ - "GSFConversionVertices.x", - "GSFConversionVertices.y", - "GSFConversionVertices.z", - "GSFConversionVertices.px", - "GSFConversionVertices.py", - "GSFConversionVertices.pz", - "GSFConversionVertices.pt1", - "GSFConversionVertices.pt2", - "GSFConversionVertices.etaAtCalo", - "GSFConversionVertices.phiAtCalo", - "GSFConversionVertices.trackParticleLinks" - ] + "GSFConversionVertices.x", + "GSFConversionVertices.y", + "GSFConversionVertices.z", + "GSFConversionVertices.px", + "GSFConversionVertices.py", + "GSFConversionVertices.pz", + "GSFConversionVertices.pt1", + "GSFConversionVertices.pt2", + "GSFConversionVertices.etaAtCalo", + "GSFConversionVertices.phiAtCalo", + "GSFConversionVertices.trackParticleLinks" + ] #ExtraContentHLTElectrons=[ # "HLT_xAOD__ElectronContainer_egamma_Electrons.e.pt.Rhad.Rhad1.e277.Reta.Rphi.weta2.f1.fracs1.wtots1.weta1.DeltaE.Eratio.caloClusterLinks" @@ -84,10 +84,10 @@ ExtraContainersTruth=["TruthEvents", "TruthParticles", "TruthVertices", "AntiKt4TruthJets", - "egammaTruthParticles" + "egammaTruthParticles" #,"BTagging_AntiKt4TruthWZ" #,"AntiKt4TruthWZJets" - ] + ] ExtraContainersElectrons=["Electrons", "GSFTrackParticles", diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM8ExtraContent.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM8ExtraContent.py index b2b8645ca4251d4bd4e0ace83b67d891cf574728..12707ad40866bbdb990237bf5e908fe5d7ff8351 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM8ExtraContent.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM8ExtraContent.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration #Content included in addition to the Smart Slimming Content @@ -31,8 +31,8 @@ ExtraMuonsTruth=[ ] ExtraContentPhotons=[ - ] - + ] + ExtraContentPrimaryVertices=["PrimaryVertices.x.y.sumPt2"] ExtraPhotonsTruth=[ @@ -42,18 +42,18 @@ ExtraPhotonsTruth=[ ] ExtraContentGSFConversionVertices=[ - "GSFConversionVertices.x", - "GSFConversionVertices.y", - "GSFConversionVertices.z", - "GSFConversionVertices.px", - "GSFConversionVertices.py", - "GSFConversionVertices.pz", - "GSFConversionVertices.pt1", - "GSFConversionVertices.pt2", - "GSFConversionVertices.etaAtCalo", - "GSFConversionVertices.phiAtCalo", - "GSFConversionVertices.trackParticleLinks" - ] + "GSFConversionVertices.x", + "GSFConversionVertices.y", + "GSFConversionVertices.z", + "GSFConversionVertices.px", + "GSFConversionVertices.py", + "GSFConversionVertices.pz", + "GSFConversionVertices.pt1", + "GSFConversionVertices.pt2", + "GSFConversionVertices.etaAtCalo", + "GSFConversionVertices.phiAtCalo", + "GSFConversionVertices.trackParticleLinks" + ] from DerivationFrameworkCalo.DerivationFrameworkCaloFactories import GainDecorator, getGainDecorations GainDecoratorTool = GainDecorator() @@ -67,10 +67,10 @@ ExtraContainersTruth=["TruthEvents", "TruthParticles", "TruthVertices", "AntiKt4TruthJets", - "egammaTruthParticles" + "egammaTruthParticles" #,"BTagging_AntiKt4TruthWZ" #,"AntiKt4TruthWZJets" - ] + ] ExtraContainersElectrons=["Electrons", "ForwardElectrons", diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM9ExtraContent.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM9ExtraContent.py index 35c6d8b288ff654a72a9b3ae088299afbadb3429..41a619906c29c5b3bf026f4db0e0957f362f5852 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM9ExtraContent.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGAM9ExtraContent.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration #Content included in addition to the Smart Slimming Content @@ -32,8 +32,8 @@ ExtraMuonsTruth=[ ExtraContentPhotons=[ "Photons.DFCommonLoosePrime5", - ] - + ] + ExtraContentPrimaryVertices=["PrimaryVertices.x.y.sumPt2"] ExtraPhotonsTruth=[ @@ -43,18 +43,18 @@ ExtraPhotonsTruth=[ ] ExtraContentGSFConversionVertices=[ - "GSFConversionVertices.x", - "GSFConversionVertices.y", - "GSFConversionVertices.z", - "GSFConversionVertices.px", - "GSFConversionVertices.py", - "GSFConversionVertices.pz", - "GSFConversionVertices.pt1", - "GSFConversionVertices.pt2", - "GSFConversionVertices.etaAtCalo", - "GSFConversionVertices.phiAtCalo", - "GSFConversionVertices.trackParticleLinks" - ] + "GSFConversionVertices.x", + "GSFConversionVertices.y", + "GSFConversionVertices.z", + "GSFConversionVertices.px", + "GSFConversionVertices.py", + "GSFConversionVertices.pz", + "GSFConversionVertices.pt1", + "GSFConversionVertices.pt2", + "GSFConversionVertices.etaAtCalo", + "GSFConversionVertices.phiAtCalo", + "GSFConversionVertices.trackParticleLinks" + ] #ExtraContentHLTElectrons=[ # "HLT_xAOD__ElectronContainer_egamma_Electrons.e.pt.Rhad.Rhad1.e277.Reta.Rphi.weta2.f1.fracs1.wtots1.weta1.DeltaE.Eratio.caloClusterLinks" @@ -72,10 +72,10 @@ ExtraContainersTruth=["TruthEvents", "TruthParticles", "TruthVertices", "AntiKt4TruthJets", - "egammaTruthParticles" + "egammaTruthParticles" #,"BTagging_AntiKt4TruthWZ" #,"AntiKt4TruthWZJets" - ] + ] ExtraContainersElectrons=["Electrons", "GSFTrackParticles", @@ -89,41 +89,41 @@ ExtraContainersPhotons=["Photons", # for trigger studies ExtraContainersTrigger=[ - "HLT_xAOD__ElectronContainer_egamma_Electrons", - "HLT_xAOD__ElectronContainer_egamma_ElectronsAux.", - "HLT_xAOD__PhotonContainer_egamma_Photons", - "HLT_xAOD__PhotonContainer_egamma_PhotonsAux.", + "HLT_xAOD__ElectronContainer_egamma_Electrons", + "HLT_xAOD__ElectronContainer_egamma_ElectronsAux.", + "HLT_xAOD__PhotonContainer_egamma_Photons", + "HLT_xAOD__PhotonContainer_egamma_PhotonsAux.", "HLT_xAOD__PhotonContainer_egamma_Iso_Photons", "HLT_xAOD__PhotonContainer_egamma_Iso_PhotonsAux.", - "HLT_xAOD__TrigElectronContainer_L2ElectronFex", - "HLT_xAOD__TrigElectronContainer_L2ElectronFexAux.", - "HLT_xAOD__TrigPhotonContainer_L2PhotonFex", - "HLT_xAOD__TrigPhotonContainer_L2PhotonFexAux.", - "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex", - "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFexAux.", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFID", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFIDAux.", - "LVL1EmTauRoIs", - "LVL1EmTauRoIsAux.", - "HLT_TrigPassBitsCollection_passbits", - "HLT_TrigPassBitsCollection_passbitsAux.", - "HLT_TrigPassFlagsCollection_passflags", - "HLT_TrigPassFlagsCollection_passflagsAux.", - "HLT_TrigRoiDescriptorCollection_initialRoI", - "HLT_TrigRoiDescriptorCollection_initialRoIAux." - ] + "HLT_xAOD__TrigElectronContainer_L2ElectronFex", + "HLT_xAOD__TrigElectronContainer_L2ElectronFexAux.", + "HLT_xAOD__TrigPhotonContainer_L2PhotonFex", + "HLT_xAOD__TrigPhotonContainer_L2PhotonFexAux.", + "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFex", + "HLT_xAOD__CaloClusterContainer_TrigEFCaloCalibFexAux.", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFID", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_EFIDAux.", + "LVL1EmTauRoIs", + "LVL1EmTauRoIsAux.", + "HLT_TrigPassBitsCollection_passbits", + "HLT_TrigPassBitsCollection_passbitsAux.", + "HLT_TrigPassFlagsCollection_passflags", + "HLT_TrigPassFlagsCollection_passflagsAux.", + "HLT_TrigRoiDescriptorCollection_initialRoI", + "HLT_TrigRoiDescriptorCollection_initialRoIAux." + ] ExtraContainersTriggerDataOnly=[ - "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgamma", - "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgammaAux.", - "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMaker", - "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMakerAux.", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_FTF", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_FTFAux.", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_L2ID", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_L2IDAux.", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_IDTrig", - "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_IDTrigAux." - ] + "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgamma", + "HLT_xAOD__TrigEMClusterContainer_TrigT2CaloEgammaAux.", + "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMaker", + "HLT_xAOD__CaloClusterContainer_TrigCaloClusterMakerAux.", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_FTF", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_FTFAux.", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_L2ID", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_L2IDAux.", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_IDTrig", + "HLT_xAOD__TrackParticleContainer_InDetTrigTrackingxAODCnv_Electron_IDTrigAux." + ] #should slim electron/fwdelectrons/cluster collections and keep only relevant subset of variables.. diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGammaCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGammaCommon.py index 1dbe056b965c47e9d8caee966c7f4951d507295d..711fa4faa8a6ba2be1e7d88f0bd24ed1b92676ba 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGammaCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkEGamma/python/EGammaCommon.py @@ -1,13 +1,14 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - #******************************************************************** # EGammaCommon.py # Schedules all tools needed for e-gamma object selection and writes # results into SG. These may then be accessed along the train #******************************************************************** -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob, DerivationFrameworkSimBarcodeOffset +from AthenaCommon import CfgMgr +from AthenaCommon.GlobalFlags import globalflags +from AthenaCommon.AppMgr import ToolSvc, ServiceMgr as svcMgr #==================================================================== # PHOTON ETA (=ETA2), ET (=E/COSH(ETA2)) @@ -178,7 +179,6 @@ ToolSvc += EGAMCOM_caloFillRect711 #==================================================================== # AUGMENTATION TOOLS #==================================================================== -from DerivationFrameworkTools.DerivationFrameworkToolsConf import DerivationFramework__AsgSelectionToolWrapper from DerivationFrameworkEGamma.DerivationFrameworkEGammaConf import DerivationFramework__EGSelectionToolWrapper from DerivationFrameworkEGamma.DerivationFrameworkEGammaConf import DerivationFramework__EGElectronLikelihoodToolWrapper @@ -188,7 +188,7 @@ ElectronPassLHVeryLoose = DerivationFramework__EGElectronLikelihoodToolWrapper( EGammaFudgeMCTool = "", CutType = "", StoreGateEntryName = "DFCommonElectronsLHVeryLoose", - ContainerName = "Electrons", + ContainerName = "Electrons", StoreTResult = False) ToolSvc += ElectronPassLHVeryLoose print(ElectronPassLHVeryLoose) @@ -247,7 +247,7 @@ ElectronPassECIDS = DerivationFramework__EGElectronLikelihoodToolWrapper( name = EGammaFudgeMCTool = "", CutType = "", StoreGateEntryName = "DFCommonElectronsECIDS", - ContainerName = "Electrons", + ContainerName = "Electrons", StoreTResult = True) ToolSvc += ElectronPassECIDS print (ElectronPassECIDS) @@ -455,7 +455,6 @@ if rec.doTruth(): # CREATE THE DERIVATION KERNEL ALGORITHM #======================================= -from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation DerivationFrameworkJob += CfgMgr.DerivationFramework__CommonAugmentation("EGammaCommonKernel", AugmentationTools = EGAugmentationTools ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/CMakeLists.txt index 3ce221e99d5e1ae37901f929145a3d81c0365a8a..370ec81968dc83e4fad2f59e62ca1e26dccbd337 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/CMakeLists.txt +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/CMakeLists.txt @@ -13,7 +13,7 @@ atlas_add_component( DerivationFrameworkFlavourTag LINK_LIBRARIES AthenaBaseComps FlavorTagDiscriminants GaudiKernel xAODJet xAODTracking xAODBTagging ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) # add the test utility diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/AntiKtVR30Rmax4Rmin02TrackJetsCPContent.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/AntiKtVR30Rmax4Rmin02TrackJetsCPContent.py index 5358ebd53c9dd9b698120d68229fa781769e659c..9573d77ff44aeb271fb983ce07780cf5f2a499d4 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/AntiKtVR30Rmax4Rmin02TrackJetsCPContent.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/AntiKtVR30Rmax4Rmin02TrackJetsCPContent.py @@ -1,6 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration - -from JetFlavorGhostLabels import getJetFlavorGhostLabels +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration AntiKtVR30Rmax4Rmin02TrackJetsCPContent = [ "AntiKtVR30Rmax4Rmin02TrackJets_BTagging201810", diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/AntiKtVR30Rmax4Rmin02TrackJets_BTagging201903CPContent.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/AntiKtVR30Rmax4Rmin02TrackJets_BTagging201903CPContent.py index b5c8827888089e59e67dd99a2eabb932cb8f2fff..2cc0ec5a87eafd6c1e6cbe9c634eae5ade90c28b 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/AntiKtVR30Rmax4Rmin02TrackJets_BTagging201903CPContent.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/AntiKtVR30Rmax4Rmin02TrackJets_BTagging201903CPContent.py @@ -1,6 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration - -from JetFlavorGhostLabels import getJetFlavorGhostLabels +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration AntiKtVR30Rmax4Rmin02TrackJets_BTagging201903CPContent = [ "AntiKtVR30Rmax4Rmin02TrackJets_BTagging201903", diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/FlavourTagCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/FlavourTagCommon.py index e2f829a670c24fe4727afc4003afb66f21d1e0fa..45df4a5f969505c3f1ca01e694e0719d4f83aa00 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/FlavourTagCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/FlavourTagCommon.py @@ -1,7 +1,5 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - #******************************************************************** # FlavourTagCommon.py @@ -16,10 +14,10 @@ import AthenaCommon.Constants as Lvl from AthenaCommon import Logging ftaglog = Logging.logging.getLogger('FlavourTagCommon') - -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob from BTagging.BTaggingFlags import BTaggingFlags from AthenaCommon.GlobalFlags import globalflags +from AthenaCommon import CfgMgr DoneJetCollections=set([]) @@ -57,8 +55,6 @@ def DontReduceInfo(Rel20=True): if globalflags.DataSource()=='data': augmentationTools = [] - from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation - global DerivationFrameworkJob DerivationFrameworkJob += CfgMgr.DerivationFramework__CommonAugmentation("MyDFTSOS_KERN", AugmentationTools = augmentationTools, @@ -220,8 +216,8 @@ def FlavorTagInit(DoReduceInfo = False, #doRetag =True ## perform retagging #adjust configurations - if DoRetag==False: - DoReduceInfo=True + #if DoRetag is False: + # DoReduceInfo=True #if the user has defined a list of desired taggers use that one, otherwise use only the active taggers @@ -282,7 +278,7 @@ def applyBTagging_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFrameworkJo supportedJets = ['AntiKt4EMTopo_BTagging201810', 'AntiKt4EMPFlow_BTagging201810'] else: supportedJets = ['AntiKt4EMTopo', 'AntiKt4EMPFlow'] - if not jetalg in supportedJets: + if jetalg not in supportedJets: ftaglog.warning('B-tagging requested for unsupported jet collection {}!'.format(jetalg)) return else: diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/HbbCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/HbbCommon.py index d00ab7adeea213569360ea9fc468f028d8c6b086..31abe1dd32c870f5c08ea7fd80575ad9f23ef7a8 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/HbbCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/HbbCommon.py @@ -1,8 +1,5 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - - # import Common Algs from DerivationFrameworkJetEtMiss.JetCommon import DFJetAlgs @@ -13,12 +10,13 @@ from DerivationFrameworkCore.DerivationFrameworkMaster import ( from BTagging.BTaggingConfiguration import getConfiguration ConfInst=getConfiguration() -from GaudiKernel.Configurable import WARNING, VERBOSE +from AthenaCommon import CfgMgr +from AthenaCommon import Logging +from AthenaCommon.Constants import WARNING -# Import star stuff (it was like that when I got here) -from DerivationFrameworkJetEtMiss.JetCommon import * -from DerivationFrameworkJetEtMiss.ExtendedJetCommon import * +from DerivationFrameworkJetEtMiss.JetCommon import addTrimmedJets from JetRec.JetRecConf import JetAlgorithm +from JetRec.JetRecFlags import jetFlags #=================================================================== # ExKt/CoM Subjets @@ -62,7 +60,6 @@ def buildExclusiveSubjets(ToolSvc, JetCollectionName, subjet_mode, nsubjet, doGh else: print (" building ExKtbbTagTool ", ExKtbbTagToolName) - from JetSubStructureMomentTools.JetSubStructureMomentToolsConf import SubjetFinderTool from JetSubStructureMomentTools.JetSubStructureMomentToolsConf import SubjetRecorderTool subjetrecorder = SubjetRecorderTool("subjetrecorder_%s%i%s_%s" % (subjet_mode, nsubjet, talabel, JetCollectionName)) @@ -215,7 +212,6 @@ def addExKtCoM(sequence, ToolSvc, JetCollectionExCoM, nSubjets, doTrackSubJet, d # AntiKt10LCTopoJets ################################################################## def addVRJets(sequence, largeRColls = None, do_ghost=False, logger=None, doFlipTagger=False, training='201810', *pos_opts, **opts): - from AthenaCommon import Logging if logger is None: logger = Logging.logging.getLogger('VRLogger') @@ -289,8 +285,8 @@ def buildVRJets(sequence, do_ghost, logger = None, doFlipTagger=False, training= VRJetAlgName = "jfind_%s" % (VRJetRecToolName) VRJetBTagName = "BTagging_%s" % (VRJetName.replace('BTagging','')) - logger.info("VR Btag name: %s" % VRJetBTagName) - logger.info("VR jet name: %s" % VRJetRecToolName) + logger.info("VR Btag name: %s", VRJetBTagName) + logger.info("VR jet name: %s", VRJetRecToolName) from AthenaCommon.AppMgr import ToolSvc @@ -329,20 +325,20 @@ def buildVRJets(sequence, do_ghost, logger = None, doFlipTagger=False, training= pseudoJetGetters.append(jtm["gtrackget"]) if VRJetAlgName in DFJetAlgs: - logger.info("Algorithm %s already built before" % VRJetAlgName) + logger.info("Algorithm %s already built before", VRJetAlgName) if hasattr(sequence, VRJetAlgName): - logger.info("Sequence %s already has an instance of algorithm %s" % (sequence, VRJetAlgName)) + logger.info("Sequence %s already has an instance of algorithm %s", sequence, VRJetAlgName) else: - logger.info("Add algorithm %s to sequence %s" % (VRJetAlgName, sequence)) + logger.info("Add algorithm %s to sequence %s", VRJetAlgName, sequence) sequence += DFJetAlgs[VRJetAlgName] else: - logger.info("Create algorithm %s" % VRJetAlgName) + logger.info("Create algorithm %s", VRJetAlgName) if hasattr(jtm, VRJetRecToolName): - logger.info("JetRecTool %s is alredy in jtm.tools in sequence %s" % (VRJetRecToolName, sequence)) + logger.info("JetRecTool %s is alredy in jtm.tools in sequence %s", VRJetRecToolName, sequence) else: - logger.info("Create JetRecTool %s" % VRJetRecToolName) + logger.info("Create JetRecTool %s", VRJetRecToolName) #can only run trackjetdrlabeler with truth labels, so MC only mods = [defaultTrackAssoc, defaultMuonAssoc, btag_vrjets] @@ -372,9 +368,9 @@ def buildVRJets(sequence, do_ghost, logger = None, doFlipTagger=False, training= from DerivationFrameworkJetEtMiss.ExtendedJetCommon import nameJetsFromAlg if hasattr(jtm, pjgettername): - logger.info("Found %s in jtm in sequence %s" % (pjgettername, sequence)) + logger.info("Found %s in jtm in sequence %s", pjgettername, sequence) else: - logger.info("Add %s to jtm in sequence %s" % (pjgettername, sequence)) + logger.info("Add %s to jtm in sequence %s", pjgettername, sequence) inputContainerName = jetFlags.containerNamePrefix() + nameJetsFromAlg(VRJetName) @@ -415,7 +411,7 @@ def getJetRecTool(collection, getParent=True): from JetRec.JetRecStandardToolManager import jtm try: jetRecTool = jtm[collection] - except KeyError as e: + except KeyError: raise KeyError("JetRecTool {0} not present in jtm".format(collection) ) if getParent and hasattr(jetRecTool, "InputContainer") and jetRecTool.InputContainer: jetRecTool = getJetRecTool(jetRecTool.InputContainer, True) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py index 851ac74ec106b9fef716027fb460cbf1196523db..ebc8c0ec89874299497d3d7f68e6a55806109e3e 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration #******************************************************************** @@ -6,13 +6,9 @@ #******************************************************************** -import AthenaCommon.Constants as Lvl from AthenaCommon import Logging ftaglog = Logging.logging.getLogger('SoftBtagCommon') -from DerivationFrameworkCore.DerivationFrameworkMaster import * -from AthenaCommon.GlobalFlags import globalflags - def applySoftBtagging(algname,sequence): from VrtSecInclusive.SoftBtagTrackSelector import SoftBtagTrackSelector @@ -55,7 +51,7 @@ def applySoftBtagging(algname,sequence): Extrapolator = ToolSvc.AtlasExtrapolator, IterationNumber = 30 ) - ToolSvc += InclusiveVxFitterTool; + ToolSvc += InclusiveVxFitterTool VrtSecInclusive_SoftB.VertexFitterTool=InclusiveVxFitterTool VrtSecInclusive_SoftB.Extrapolator = ToolSvc.AtlasExtrapolator diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/CMakeLists.txt index 150d015311fe703bad405729fc0796aaf9fd462e..8b7686551e098b9c9ecd0342d5c7a671fc895d03 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/CMakeLists.txt +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/CMakeLists.txt @@ -14,6 +14,6 @@ atlas_add_component( DerivationFrameworkHiggs LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps DerivationFrameworkInterfaces TrigDecisionToolLib xAODEgamma xAODEventInfo xAODJet xAODMuon xAODTracking ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxAugmentation.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxAugmentation.py index 795444b0c592b9e9a71cef5d005ea6e6ba71d9aa..d6500646bca855697741a4f6b37f73ff31e180ac 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxAugmentation.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxAugmentation.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration ################################################# # Common code used for the HIGG4 augmentation # @@ -66,14 +66,14 @@ def setup(HIGG4DxName, ToolSvc): augmentationTools.append(HIGG4DxTauPVRefittingTool) if DFisMC: - # Tau truth matching + # Tau truth matching from TauAnalysisTools.TauAnalysisToolsConf import TauAnalysisTools__TauTruthMatchingTool HIGG4DxTauTruthMatchingTool = TauAnalysisTools__TauTruthMatchingTool(name="HIGG4DxTauTruthMatchingTool", WriteTruthTaus = True) ToolSvc += HIGG4DxTauTruthMatchingTool - # Tau truth matching wrapper + # Tau truth matching wrapper from DerivationFrameworkTau.DerivationFrameworkTauConf import DerivationFramework__TauTruthMatchingWrapper HIGG4DxTauTruthMatchingWrapper = DerivationFramework__TauTruthMatchingWrapper( name = "HIGG4DxTauTruthMatchingWrapper", TauTruthMatchingTool = HIGG4DxTauTruthMatchingTool) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxJets.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxJets.py index 04d095c46fd8cebf6c3810d916f6bd9bd3c2e851..9c3800f900515168fe6577cbaf6cc8c8d1c334a1 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxJets.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxJets.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration ################################################################# # Common code used for the HIGG4 jet building and calibration # @@ -7,8 +7,8 @@ # Nov 2015 # ################################################################# -from DerivationFrameworkJetEtMiss.JetCommon import * -from DerivationFrameworkJetEtMiss.ExtendedJetCommon import * +from DerivationFrameworkJetEtMiss.JetCommon import OutputJets +from DerivationFrameworkJetEtMiss.ExtendedJetCommon import addDefaultTrimmedJets def setup(HIGG4DxName, HIGG4DxSequence, HIGG4DxSlimmingHelper): @@ -17,13 +17,13 @@ def setup(HIGG4DxName, HIGG4DxSequence, HIGG4DxSlimmingHelper): # add a small-R collection # OutputJets[DAOD_StreamID+"Jets"] = ["AntiKt2PV0TrackJets"] - # schedule reconstruction of AntiKt10LCTopoTrimmedPtFrac5SmallR20Jets + # schedule reconstruction of AntiKt10LCTopoTrimmedPtFrac5SmallR20Jets # addTrimmedJets("AntiKt", 1.0, "LCTopo", rclus=0.2, ptfrac=0.05, algseq=DerivationFrameworkJob) # OutputJets[DAOD_StreamID+"Jets"].append("AntiKt10LCTopoTrimmedPtFrac5SmallR20Jets") # print "HELLO HERE", OutputJets[DAOD_StreamID+"Jets"] jet_collection = HIGG4DxName+"Jets" - if not jet_collection in OutputJets: + if jet_collection not in OutputJets: # AntiKt10*PtFrac5Rclus20 jets if HIGG4DxName in ['HIGG4D2', 'HIGG4D3']: addDefaultTrimmedJets(HIGG4DxSequence, jet_collection, False) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxSkimming.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxSkimming.py index c2b41a1f0f3799705806d468400d3e492709beda..7ba2dc395c67bd2504f6ec0d2c9b07e433d6e8e0 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxSkimming.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxSkimming.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration ################################################# # Common code used for the HIGG4 skimming # @@ -42,7 +42,7 @@ def setup(HIGG4DxName, ToolSvc): tauReq1 = '(count( '+tauSubl+' && '+tauTrks+' && '+tauId+' ) >= 1)' tauReq2 = '(count( '+tauLead+' && '+tauTrks+' ) >= 1)' skim_expression = tauReq0 + '&&' + tauReq1 + '&&' + tauReq2 - #skim_expression = tauReq0 + '&&' + tauReq2 + #skim_expression = tauReq0 + '&&' + tauReq2 elif HIGG4DxName == 'HIGG4D4': ditau = '(count(((TauJets.nTracks == 1) || (TauJets.nTracks == 3)) && (TauJets.pt > 45.0*GeV)) >= 2)' tau1 = '(count((TauJets.pt > 100.0*GeV)) >= 1)' diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxSlimming.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxSlimming.py index 042fdeb9e95d2d754378067f8e176d152977b379..c8e1f53ed93bec7969bdb06121351f4f096a774d 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxSlimming.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxSlimming.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration ################################################# # Common code used for the HIGG4 slimming # @@ -7,8 +7,7 @@ # Nov 2015 # ################################################# -from DerivationFrameworkMCTruth.MCTruthCommon import * -from DerivationFrameworkJetEtMiss.JetCommon import * +from DerivationFrameworkJetEtMiss.JetCommon import addJetOutputs def setup(HIGG4DxName, HIGG4DxStream, HIGG4DxSlimmingHelper): from AthenaCommon.GlobalFlags import globalflags diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxThinning.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxThinning.py index 40001dd624e45cf46040a53174d82806977e2ef4..73877bf343ac0eba1bdf27c71985b9ed6576346f 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxThinning.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkHiggs/python/HIGG4DxThinning.py @@ -58,16 +58,16 @@ def setup(HIGG4DxName, streamName, ToolSvc): ToolSvc += HIGG4DxJetTrackThinningTool1 thinningTools.append(HIGG4DxJetTrackThinningTool1) - if HIGG4DxName in ['HIGG4D2', 'HIGG4D3']: - from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__JetTrackParticleThinning - HIGG4DxJetTrackThinningTool2 = DerivationFramework__JetTrackParticleThinning( name = HIGG4DxName+"JetTrackThinningTool2", - StreamName = streamName, - JetKey = "AntiKt2PV0TrackJets", - SelectionString = "AntiKt2PV0TrackJets.pt > 6*GeV", - InDetTrackParticlesKey = "InDetTrackParticles", - ApplyAnd = True) - #ToolSvc += HIGG4DxJetTrackThinningTool2 - #thinningTools.append(HIGG4DxJetTrackThinningTool2) + #if HIGG4DxName in ['HIGG4D2', 'HIGG4D3']: + # from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__JetTrackParticleThinning + # HIGG4DxJetTrackThinningTool2 = DerivationFramework__JetTrackParticleThinning( name = HIGG4DxName+"JetTrackThinningTool2", + # StreamName = streamName, + # JetKey = "AntiKt2PV0TrackJets", + # SelectionString = "AntiKt2PV0TrackJets.pt > 6*GeV", + # InDetTrackParticlesKey = "InDetTrackParticles", + # ApplyAnd = True) + # ToolSvc += HIGG4DxJetTrackThinningTool2 + # thinningTools.append(HIGG4DxJetTrackThinningTool2) # Tracks associated with Muons HIGG4DxMuonSelectionString = "" @@ -120,9 +120,9 @@ def setup(HIGG4DxName, streamName, ToolSvc): # PreserveDescendants keeps all particles including those that come from Geant processes if DFisMC: - #thin special containers + #thin special containers from DerivationFrameworkMCTruth.DerivationFrameworkMCTruthConf import DerivationFramework__GenericTruthThinning - #thin taus + #thin taus HIGG4DxTruthTool_TAU = DerivationFramework__GenericTruthThinning(name = HIGG4DxName+"TruthTool_TAU", StreamName = streamName, ParticleSelectionString = truth_cond_tau, @@ -133,7 +133,7 @@ def setup(HIGG4DxName, streamName, ToolSvc): ToolSvc += HIGG4DxTruthTool_TAU thinningTools.append(HIGG4DxTruthTool_TAU) - #thin leptons and taus + #thin leptons and taus HIGG4DxTruthTool_COMB = DerivationFramework__GenericTruthThinning(name = HIGG4DxName+"TruthTool_COMB", StreamName = streamName, ParticleSelectionString = truth_cond_comb, @@ -145,7 +145,7 @@ def setup(HIGG4DxName, streamName, ToolSvc): ToolSvc += HIGG4DxTruthTool_COMB thinningTools.append(HIGG4DxTruthTool_COMB) - #thin photons + #thin photons """HIGG4DxTruthTool_PHO = DerivationFramework__GenericTruthThinning(name = "HIGG4DxTruthTool_PHO", StreamName = streamName, ParticlesKey = "TruthPhotons", @@ -154,9 +154,9 @@ def setup(HIGG4DxName, streamName, ToolSvc): ToolSvc += HIGG4DxTruthTool_PHO thinningTools.append(HIGG4DxTruthTool_PHO)""" - #thinning the master truth collection + #thinning the master truth collection from DerivationFrameworkMCTruth.DerivationFrameworkMCTruthConf import DerivationFramework__MenuTruthThinning - HIGG4DxTruthTool_MENU = DerivationFramework__MenuTruthThinning( name = HIGG4DxName+"TruthTool_MENU", + HIGG4DxTruthTool_MENU = DerivationFramework__MenuTruthThinning( name = HIGG4DxName+"TruthTool_MENU", StreamName = streamName, WritePartons = False, WriteHadrons = False, diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkInDet/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkInDet/CMakeLists.txt index 4f2b36a26847a20df976817f2c7ad3aadd4c2e47..f91659662caf7a921e9fdca66d574b5f0cb00926 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkInDet/CMakeLists.txt +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkInDet/CMakeLists.txt @@ -13,5 +13,5 @@ atlas_add_component( DerivationFrameworkInDet LINK_LIBRARIES ${ROOT_LIBRARIES} AthLinks AthenaBaseComps AthenaKernel AtlasDetDescr CommissionEvent DerivationFrameworkInterfaces ExpressionEvaluationLib FourMomUtils GaudiKernel InDetIdentifier InDetPrepRawData InDetRIO_OnTrack InDetReadoutGeometry InDetTrackSelectionToolLib LArRecEvent SCT_CablingLib SCT_ConditionsToolsLib StoreGateLib TRT_ConditionsServicesLib TRT_ElectronPidToolsLib TRT_ReadoutGeometry TrigDecisionToolLib TrkCompetingRIOsOnTrack TrkEventPrimitives TrkEventUtils TrkExInterfaces TrkParameters TrkPrepRawData TrkRIO_OnTrack TrkToolInterfaces TrkTrack TrkVertexFitterInterfaces xAODBase xAODCore xAODEgamma xAODEventInfo xAODJet xAODMuon xAODTau xAODTracking ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkInDet/python/InDetCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkInDet/python/InDetCommon.py index 4e0edd43f80f9858a37f5169de08d77d82b68c79..1c7bb13b23cacf6e6343da62c72489701f6d6fad 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkInDet/python/InDetCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkInDet/python/InDetCommon.py @@ -5,11 +5,13 @@ # Schedules all tools needed for ID track object selection and writes # results into SG. These may then be accessed along the train #******************************************************************** -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob # Check file contains PrimaryVertices container (protect against non-collision data) # If running from RAW the eventdata_items are none or emtpy from RecExConfig.InputFilePeeker import inputFileSummary +from AthenaCommon import CfgMgr +from AthenaCommon.AppMgr import ToolSvc from AthenaCommon.BeamFlags import jobproperties from InDetRecExample.InDetJobProperties import InDetFlags @@ -47,8 +49,7 @@ if have_PV_container : #======================================= # CREATE THE DERIVATION KERNEL ALGORITHM #======================================= - - from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation + DerivationFrameworkJob += CfgMgr.DerivationFramework__CommonAugmentation("InDetCommonKernel", AugmentationTools = [DFCommonTrackSelection,DFCommonZ0AtPV] ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/CMakeLists.txt index a1044f0500ec8de4f91bf7bdcfd4b900d0b16330..f7b7f6f31067eda7f33fb11d51ff968eebc407fd 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/CMakeLists.txt +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/CMakeLists.txt @@ -13,5 +13,5 @@ atlas_add_component( DerivationFrameworkJetEtMiss LINK_LIBRARIES ${ROOT_LIBRARIES} AsgTools AthLinks AthenaBaseComps DerivationFrameworkInterfaces FTagAnalysisInterfacesLib GaudiKernel InDetTrackSelectionToolLib JetAnalysisInterfacesLib JetInterface PFlowUtilsLib ParticleJetToolsLib PathResolver StoreGateLib TrackVertexAssociationToolLib TrigAnalysisInterfaces xAODCaloEvent xAODCore xAODEventInfo xAODJet xAODPFlow xAODTracking xAODTrigger xAODTruth ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/ExtendedJetCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/ExtendedJetCommon.py index 739e6b3bfa324ad820e6d6ab9fc5214100b03dc3..082f7414d39394a1a6ee8b05fb6729cf565f33f8 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/ExtendedJetCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/ExtendedJetCommon.py @@ -5,11 +5,11 @@ # Schedules special jet tools #******************************************************************** -from DerivationFrameworkCore.DerivationFrameworkMaster import * -from DerivationFrameworkJetEtMiss.JetCommon import * -from JetRec.JetRecFlags import jetFlags +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob, DerivationFrameworkIsMonteCarlo +from DerivationFrameworkJetEtMiss.JetCommon import addStandardJets, addSoftDropJets, addTrimmedJets from JetJvtEfficiency.JetJvtEfficiencyToolConfig import (getJvtEffTool, getJvtEffToolName) +from AthenaCommon import CfgMgr from AthenaCommon import Logging extjetlog = Logging.logging.getLogger('ExtendedJetCommon') @@ -44,6 +44,7 @@ def addTCCTrimmedJets(sequence,outputlist,dotruth=True,writeUngroomed=False): algseq=sequence, outputGroup=outputlist, writeUngroomed=writeUngroomed) def addCSSKSoftDropJets(sequence, seq_name, logger=extjetlog): + from DerivationFrameworkFlavourTag.HbbCommon import addVRJets, buildVRJets vrJetName, vrGhostLabel = buildVRJets( sequence, do_ghost=True, logger=logger) @@ -115,15 +116,17 @@ def addAntiKt4TruthDressedWZJets(sequence,outputlist): addStandardJets("AntiKt", 0.4, "TruthDressedWZ", ptmin=5000, mods="truth_ungroomed", algseq=sequence, outputGroup=outputlist) def addAntiKt10TruthJets(sequence,outputlist): + from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkHasTruth if DerivationFrameworkHasTruth: addStandardJets("AntiKt", 1.0, "Truth", ptmin=40000, mods="truth_ungroomed_larger", algseq=sequence, outputGroup=outputlist) def addAntiKt10TruthWZJets(sequence,outputlist): + from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkHasTruth if DerivationFrameworkHasTruth: addStandardJets("AntiKt", 1.0, "TruthWZ", ptmin=40000, mods="truth_ungroomed_larger", algseq=sequence, outputGroup=outputlist) def addAntiKt4EMPFlowJetsFE(sequence, outputlist): - addCHSPFlowObjectsFE() + addCHSPFlowObjectsFE() # noqa: F821 (FIXME, does not exist) addStandardJets("AntiKt", 0.4, "EMPFlowFE", ptmin=10000, ptminFilter=15000, mods="pflow_ungroomed", algseq=sequence, outputGroup=outputlist) ################################################################## @@ -147,7 +150,7 @@ def replaceAODReducedJets(jetlist,sequence,outputlist): if "AntiKt10TruthWZJets" in jetlist: addAntiKt10TruthWZJets(sequence,outputlist) if "AntiKt2LCTopoJets" in jetlist: - addAntiKt2LCTopoJets(sequence,outputlist) + addAntiKt2LCTopoJets(sequence,outputlist) # noqa: F821 (FIXME, does not exist) if "AntiKt10LCTopoJets" in jetlist: addAntiKt10LCTopoJets(sequence,outputlist) @@ -187,7 +190,7 @@ def applyJetAugmentation(jetalg,algname,sequence,jetaugtool): jetaug = CfgMgr.DerivationFramework__CommonAugmentation(algname) sequence += jetaug - if not jetaugtool in jetaug.AugmentationTools: + if jetaugtool not in jetaug.AugmentationTools: jetaug.AugmentationTools.append(jetaugtool) def getJetAugmentationTool(jetalg, suffix=''): @@ -253,7 +256,7 @@ def applyJetCalibration(jetalg,algname,sequence,largeRjetconfig = 'comb', suffix isdata=False #largeRconfig selects config file for AntiKt10LCTopoTrimmedPtFrac5SmallR20, default is JES_MC16recommendation_FatJet_JMS_comb_19Jan2018.config - if not largeRjetconfig in ['comb','calo','TA']: + if largeRjetconfig not in ['comb','calo','TA']: extjetlog.warning('*** Wrong value for fatjetconfig! Only \'comb\' (default), \'calo\' or \'TA\' can be used. ***') #Warning: these are quite outdated ... leaving for validation purposes for now @@ -280,6 +283,7 @@ def applyJetCalibration(jetalg,algname,sequence,largeRjetconfig = 'comb', suffix isMC = DerivationFrameworkIsMonteCarlo isAF2 = False if isMC: + from RecExConfig.InputFilePeeker import inputFileSummary isAF2 = 'ATLFASTII' in inputFileSummary['metadata']['/Simulation/Parameters']['SimulationFlavour'].upper() if isMC and isAF2: ## Warning: these are quite outdated ... leaving for validation purposes for now @@ -312,7 +316,7 @@ def applyJetCalibration(jetalg,algname,sequence,largeRjetconfig = 'comb', suffix def applyJetCalibration_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFrameworkJob): supportedJets = ['AntiKt4EMTopo','AntiKt4LCTopo','AntiKt4EMPFlow','AntiKt4EMTopo_BTagging201810','AntiKt4EMPFlow_BTagging201810'] - if not jetalg in supportedJets: + if jetalg not in supportedJets: extjetlog.warning('*** Calibration requested for unsupported jet collection '+jetalg+'! ***') return else: @@ -322,7 +326,7 @@ def applyJetCalibration_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFrame def applyJetCalibration_CustomColl(jetalg='AntiKt10LCTopoTrimmedPtFrac5SmallR20',sequence=None): supportedJets = ['AntiKt10LCTopoTrimmedPtFrac5SmallR20','AntiKt2LCTopo'] - if not jetalg in supportedJets: + if jetalg not in supportedJets: extjetlog.warning('*** Calibration requested for unsupported jet collection! ***') extjetlog.warning('Supported custom jets: '+supportedJets) return @@ -335,7 +339,7 @@ def applyJetCalibration_CustomColl(jetalg='AntiKt10LCTopoTrimmedPtFrac5SmallR20' def updateJVT(jetalg,algname,sequence, suffix = '',customVxColl = 'PrimaryVertices'): jetaugtool = getJetAugmentationTool(jetalg, suffix) - if(jetaugtool==None or jetaugtool.JetCalibTool==''): + if(jetaugtool is None or jetaugtool.JetCalibTool==''): extjetlog.warning('*** JVT update called but corresponding augmentation tool does not exist! ***') extjetlog.warning('*** You must apply jet calibration before scheduling JVT! ***') @@ -381,7 +385,7 @@ def updateJVT(jetalg,algname,sequence, suffix = '',customVxColl = 'PrimaryVertic def updateJVT_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFrameworkJob): supportedJets = ['AntiKt4EMTopo','AntiKt4EMPFlow','AntiKt4EMTopo_BTagging201810','AntiKt4EMPFlow_BTagging201810'] - if not jetalg in supportedJets: + if jetalg not in supportedJets: extjetlog.warning('*** JVT update requested for unsupported jet collection {}! ***'.format(jetalg)) return else: @@ -391,7 +395,7 @@ def updateJVT_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFrameworkJob): def addJetPtAssociation(jetalg, truthjetalg, sequence, algname): jetaugtool = getJetAugmentationTool(jetalg, '_PtAssoc') - if(jetaugtool==None): + if(jetaugtool is None): extjetlog.warning('*** addJetPtAssociation called but corresponding augmentation tool does not exist! ***') jetptassociationtoolname = 'DFJetPtAssociation_'+truthjetalg @@ -413,10 +417,10 @@ def addJetTruthLabel(jetalg,algname,labelname,sequence): supportedTruthJets = ['AntiKt10Truth','AntiKt10TruthTrimmedPtFrac5SmallR20'] supportedRecoJets = ['AntiKt10LCTopoTrimmedPtFrac5SmallR20','AntiKt10TrackCaloClusterTrimmedPtFrac5SmallR20','AntiKt10UFOCSSKTrimmedPtFrac5SmallR20','AntiKt10UFOCSSKSoftDropBeta100Zcut10','AntiKt10UFOCSSKBottomUpSoftDropBeta100Zcut5','AntiKt10UFOCSSKRecursiveSoftDropBeta100Zcut5Ninf','AntiKt10UFOCHSTrimmedPtFrac5SmallR20'] supportedJets = supportedRecoJets + supportedTruthJets - if not jetalg in supportedJets: + if jetalg not in supportedJets: extjetlog.warning('*** JetTruthLabeling augmentation requested for unsupported jet collection {}! ***'.format(jetalg)) return - elif not labelname in supportedLabelNames: + elif labelname not in supportedLabelNames: extjetlog.warning('*** JetTruthLabeling augmentation requested for unsupported label definition {}! ***'.format(labelname)) return else: @@ -426,7 +430,7 @@ def addJetTruthLabel(jetalg,algname,labelname,sequence): jetaugtool = getJetAugmentationTool(jetalg) - if(jetaugtool==None): + if(jetaugtool is None): extjetlog.warning('*** addJetTruthLabel called but corresponding augmentation tool does not exist! ***') return @@ -451,7 +455,7 @@ def applyBTaggingAugmentation(jetalg,algname='default',sequence=DerivationFramew algname = 'JetCommonKernel_{0}'.format(jetalg) jetaugtool = getJetAugmentationTool(jetalg) - if(jetaugtool==None or jetaugtool.JetCalibTool=='' or jetaugtool.JetJvtTool==''): + if(jetaugtool is None or jetaugtool.JetCalibTool=='' or jetaugtool.JetJvtTool==''): extjetlog.warning('*** B-tagging called but corresponding augmentation tool does not exist! ***') extjetlog.warning('*** You must apply jet calibration and JVT! ***') @@ -474,12 +478,12 @@ def applyBTaggingAugmentation(jetalg,algname='default',sequence=DerivationFramew ################################################################# def addQGTaggerTool(jetalg, sequence, algname, truthjetalg=None ): jetaugtool = getJetAugmentationTool(jetalg,'_qgTag') - if(jetaugtool==None): + if(jetaugtool is None): extjetlog.warning('*** addQGTaggerTool called but corresponding augmentation tool does not exist! ***') from AthenaCommon.AppMgr import ToolSvc - if truthjetalg!=None: + if truthjetalg is not None: jetptassociationtoolname = 'DFJetPtAssociation_'+truthjetalg+'_'+jetalg if hasattr(ToolSvc,jetptassociationtoolname): jetaugtool.JetPtAssociationTool = getattr(ToolSvc,jetptassociationtoolname) @@ -567,7 +571,6 @@ def getJetCleaningTool(cleaningLevel): def eventCleanLoose_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFrameworkJob): from JetSelectorTools.JetSelectorToolsConf import ECUtils__EventCleaningTool as EventCleaningTool from JetSelectorTools.JetSelectorToolsConf import EventCleaningTestAlg - jetcleaningtoolname = "EventCleaningTool_Loose" prefix = "DFCommonJets_" ecToolLoose = EventCleaningTool('EventCleaningTool_Loose',CleaningLevel='LooseBad') ecToolLoose.JetCleanPrefix = prefix @@ -583,7 +586,6 @@ def eventCleanLoose_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFramework def eventCleanTight_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFrameworkJob): from JetSelectorTools.JetSelectorToolsConf import ECUtils__EventCleaningTool as EventCleaningTool from JetSelectorTools.JetSelectorToolsConf import EventCleaningTestAlg - jetcleaningtoolname = "EventCleaningTool_Tight" prefix = "DFCommonJets_" ecToolTight = EventCleaningTool('EventCleaningTool_Tight',CleaningLevel='TightBad') ecToolTight.JetCleanPrefix = prefix @@ -601,7 +603,6 @@ def eventCleanTight_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFramework def eventCleanLooseLLP_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFrameworkJob): from JetSelectorTools.JetSelectorToolsConf import ECUtils__EventCleaningTool as EventCleaningTool from JetSelectorTools.JetSelectorToolsConf import EventCleaningTestAlg - jetcleaningtoolname = "EventCleaningTool_LooseLLP" prefix = "DFCommonJets_" ecToolLooseLLP = EventCleaningTool('EventCleaningTool_LooseLLP',CleaningLevel='LooseBadLLP') ecToolLooseLLP.JetCleanPrefix = prefix @@ -619,7 +620,6 @@ def eventCleanLooseLLP_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFramew def eventCleanVeryLooseLLP_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFrameworkJob): from JetSelectorTools.JetSelectorToolsConf import ECUtils__EventCleaningTool as EventCleaningTool from JetSelectorTools.JetSelectorToolsConf import EventCleaningTestAlg - jetcleaningtoolname = "EventCleaningTool_VeryLooseLLP" prefix = "DFCommonJets_" #Do not save decorations, which are anyway not listed in AntiKt4EMTopoJetsCPContent.py ecToolVeryLooseLLP = EventCleaningTool('EventCleaningTool_VeryLooseLLP',CleaningLevel='VeryLooseBadLLP') @@ -638,7 +638,6 @@ def eventCleanVeryLooseLLP_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFr def eventCleanSuperLooseLLP_xAODColl(jetalg='AntiKt4EMTopo',sequence=DerivationFrameworkJob): from JetSelectorTools.JetSelectorToolsConf import ECUtils__EventCleaningTool as EventCleaningTool from JetSelectorTools.JetSelectorToolsConf import EventCleaningTestAlg - jetcleaningtoolname = "EventCleaningTool_SuperLooseLLP" prefix = "DFCommonJets_" #Do not save decorations, which are anyway not listed in AntiKt4EMTopoJetsCPContent.py ecToolSuperLooseLLP = EventCleaningTool('EventCleaningTool_SuperLooseLLP',CleaningLevel='SuperLooseBadLLP') @@ -744,13 +743,13 @@ def addOriginCorrectedClusters(slimhelper,writeLC=False,writeEM=False): slimhelper.ExtraVariables.append('CaloCalTopoClusters.calE.calEta.calPhi.calM') if writeLC: - if not slimhelper.AppendToDictionary.has_key("LCOriginTopoClusters"): + if "LCOriginTopoClusters" not in slimhelper.AppendToDictionary: slimhelper.AppendToDictionary["LCOriginTopoClusters"]='xAOD::CaloClusterContainer' slimhelper.AppendToDictionary["LCOriginTopoClustersAux"]='xAOD::ShallowAuxContainer' slimhelper.ExtraVariables.append('LCOriginTopoClusters.calEta.calPhi') if writeEM: - if not slimhelper.AppendToDictionary.has_key("EMOriginTopoClusters"): + if "EMOriginTopoClusters" not in slimhelper.AppendToDictionary: slimhelper.AppendToDictionary["EMOriginTopoClusters"]='xAOD::CaloClusterContainer' slimhelper.AppendToDictionary["EMOriginTopoClustersAux"]='xAOD::ShallowAuxContainer' slimhelper.ExtraVariables.append('EMOriginTopoClusters.calE.calEta.calPhi') diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/HiggsCustomMET.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/HiggsCustomMET.py index c693ed07685548c8bac12194d9dc4304d91d78c3..279a827b7b3a595261db718c3c2c6d81f6c315cd 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/HiggsCustomMET.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/HiggsCustomMET.py @@ -1,8 +1,6 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob # Set up custom MET reconstruction algorithms from METReconstruction.METRecoFlags import metFlags from METReconstruction.METRecoConfig import BuildConfig, RefConfig, METConfig, getMETRecoAlg diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetCommon.py index cca3d4b75189fa213237e34e2e3e6bc14232c76e..1d104b57b25493eb1d59fde98db74b0062cbc360 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetCommon.py @@ -6,11 +6,9 @@ # results into SG. These may then be accessed along the train #******************************************************************** -from __future__ import print_function - -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob from AthenaCommon.GlobalFlags import globalflags - +from AthenaCommon import CfgMgr from AthenaCommon import Logging dfjetlog = Logging.logging.getLogger('JetCommon') @@ -47,7 +45,7 @@ else: else: batmanaugtool = CfgMgr.DerivationFramework__BadBatmanAugmentationTool("BadBatmanAugmentationTool") ToolSvc += batmanaugtool - if not batmanaugtool in batmanaug.AugmentationTools: + if batmanaugtool not in batmanaug.AugmentationTools: batmanaug.AugmentationTools.append(batmanaugtool) else: if not objKeyStore.isInInput( "McEventCollection", "GEN_EVENT" ): @@ -61,8 +59,6 @@ def defineEDAlg(R=0.4, inputtype="LCTopo"): from EventShapeTools.EventDensityConfig import configEventDensityTool, EventDensityAlg from AthenaCommon.AppMgr import ToolSvc - from JetRec.JetRecStandard import jtm - t=configEventDensityTool("EDTool"+str(int(R*10))+inputtype, inputlabel = inputtype, radius = R) @@ -85,7 +81,6 @@ def moveEDAlg(seq): def addGhostAssociation(DerivationFrameworkJob): from JetRec.JetRecStandard import jtm - from JetRec.JetRecConf import PseudoJetGetter flavorgetters1 = [] for ptype in jetFlags.truthFlavorTags(): @@ -109,7 +104,6 @@ def reCreatePseudoJets(jetalg, rsize, inputtype, variableRMassScale=-1.0, variab from JetRec.JetRecUtils import buildJetContName constmodstr = "".join(constmods) inputname = inputtype+constmodstr - label = inputtype + constmodstr jetContName = buildJetContName(jetalg, rsize, inputname, variableRMassScale, variableRMinRadius) # Set default for the arguments to be passd to addJetFinder @@ -232,7 +226,6 @@ def buildGenericGroomAlg(jetalg, rsize, inputtype, groomedName, jetToolBuilder, from JetRec.JetRecUtils import buildJetContName constmodstr = "".join(constmods) inputname = inputtype+constmodstr - label = inputtype + constmodstr ungroomedName = buildJetContName(jetalg, rsize, inputname, variableRMassScale, variableRMinRadius) ungroomedalgname = "jetalg"+ungroomedName[:-4] # Remove "Jets" from name @@ -256,12 +249,13 @@ def buildGenericGroomAlg(jetalg, rsize, inputtype, groomedName, jetToolBuilder, # this returns a list of the needed tools to do so. jetalgTools = reCreatePseudoJets(jetalg, rsize, inputtype, variableRMassScale, variableRMinRadius, algseq, constmods=constmods) - if includePreTools and jetFlags.useTracks() and not "Truth" in inputtype: + if includePreTools and jetFlags.useTracks() and "Truth" not in inputtype: # enable track ghost association and JVF + from JetRec.JetRecStandard import jtm jetalgTools = [jtm.tracksel, jtm.tvassoc] + jetalgTools finderalg = JetAlgorithm(ungroomedalgname, Tools = jetalgTools ) - DFJetAlgs[ungroomedalgname] = finderalg; + DFJetAlgs[ungroomedalgname] = finderalg dfjetlog.info( "Added jet finder "+ungroomedalgname+" to sequence "+algseq.name() ) algseq += finderalg @@ -275,7 +269,7 @@ def buildGenericGroomAlg(jetalg, rsize, inputtype, groomedName, jetToolBuilder, dfjetlog.info( "Added jet groomer "+algname+" to sequence "+algseq.name() ) groomeralg = JetAlgorithm(algname, Tools = [fatjet_groom]) - DFJetAlgs[algname] = groomeralg; + DFJetAlgs[algname] = groomeralg algseq += groomeralg return groomeralg @@ -283,7 +277,6 @@ def buildGenericGroomAlg(jetalg, rsize, inputtype, groomedName, jetToolBuilder, def addTrimmedJets(jetalg, rsize, inputtype, rclus=0.3, ptfrac=0.05, mods="groomed", includePreTools=False, algseq=None, outputGroup="Trimmed", writeUngroomed=False, variableRMassScale=-1.0, variableRMinRadius=-1.0, constmods=[]): - from JetRec.JetRecUtils import buildJetContName from JetRec.JetRecUtils import buildJetAlgName inputname = inputtype + "".join(constmods) trimmedName = "{0}{1}TrimmedPtFrac{2}SmallR{3}Jets".format(buildJetAlgName(jetalg, rsize, variableRMassScale, variableRMinRadius),inputname,int(ptfrac*100),int(rclus*100)) @@ -437,7 +430,7 @@ def addStandardJets(jetalg, rsize, inputtype, ptmin=0., ptminFilter=0., return DFJetAlgs[algname] from JetRec.JetRecStandard import jtm - if not jetname in jtm.tools: + if jetname not in jtm.tools: # no container exist. simply build a new one. # Set default for the arguments to be passd to addJetFinder defaultmods = {"EMTopo":"emtopo_ungroomed", @@ -520,7 +513,7 @@ def addDistanceInTrain(sequence=DerivationFrameworkJob): ToolSvc += BunchCrossingTool( "LHC" ) distanceintrainaugtool.BCTool = "Trig::LHCBunchCrossingTool/BunchCrossingTool" ToolSvc += distanceintrainaugtool - if not distanceintrainaugtool in distanceintrainaug.AugmentationTools: + if distanceintrainaugtool not in distanceintrainaug.AugmentationTools: distanceintrainaug.AugmentationTools.append(distanceintrainaugtool) ################################################################## diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetMetCustomMET.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetMetCustomMET.py index e22122c4cc9b11ccd6fbf7519b0731f96712bfcd..77160cfe3ee42e8f5b2dd0c33d44865af12f23ac 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetMetCustomMET.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetMetCustomMET.py @@ -1,8 +1,6 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob # Set up custom MET reconstruction algorithms from METReconstruction.METRecoFlags import metFlags from METReconstruction.METRecoConfig import BuildConfig, RefConfig, METConfig, getMETRecoAlg diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetMomentFix.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetMomentFix.py index eb775e1f712168548404dd769e85d4f37479a6f5..caefab41b99807604d09b6f4c0fd487570bdb6e8 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetMomentFix.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetMomentFix.py @@ -5,13 +5,11 @@ # Schedules jet moment corrections #******************************************************************** -from __future__ import print_function - -from DerivationFrameworkCore.DerivationFrameworkMaster import * -from DerivationFrameworkJetEtMiss.JetCommon import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob from JetRec.JetRecConf import JetAlgorithm -from DerivationFrameworkJetEtMiss.DFJetMetFlags import * +from JetRec.JetRecStandard import jtm +from DerivationFrameworkJetEtMiss.DFJetMetFlags import dfjmFlags if dfjmFlags.doJetTrackMomentFix: print ("Scheduling jet track moment fix: ") diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/METCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/METCommon.py index dc7b3b4f924fa13f77594c0003a3615fa0a22255..f1225557349114474fa945d122817f8d8a8b62ab 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/METCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/METCommon.py @@ -5,9 +5,8 @@ # Schedules default DF MET content building tools and writes the # results into SG. These may then be accessed along the train #******************************************************************** -from __future__ import print_function - -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from AthenaCommon import CfgMgr +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob ########################################################################################## # MET @@ -73,7 +72,7 @@ metalgs = {} def addMETTruthMap(jetcoll='AntiKt4EMTopo',configlist="CustomMET"): assocname = 'Truth_'+jetcoll customMETConfigs.setdefault(configlist,{}) - if not assocname in customMETConfigs[configlist]: + if assocname not in customMETConfigs[configlist]: from METReconstruction.METAssocConfig import METAssocConfig,AssocConfig cfg_truthassoc = METAssocConfig(assocname, [AssocConfig('Truth',jetcoll+'Jets')], diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/METTriggerDerivationContent.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/METTriggerDerivationContent.py index 368277ad4a23c477c38e1a0ae77ec73dbd82329b..d4fb08f284d085b2047569907e2331188688d1c2 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/METTriggerDerivationContent.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/METTriggerDerivationContent.py @@ -1,13 +1,11 @@ -from DerivationFrameworkCore.DerivationFrameworkMaster import * -from DerivationFrameworkJetEtMiss.JetCommon import * -from DerivationFrameworkJetEtMiss.ExtendedJetCommon import * -from DerivationFrameworkJetEtMiss.METCommon import * +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +from AthenaCommon import CfgMgr from DerivationFrameworkCore.ThinningHelper import ThinningHelper from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__TrackParticleThinning, DerivationFramework__MuonTrackParticleThinning, DerivationFramework__EgammaTrackParticleThinning, DerivationFramework__TauTrackParticleThinning from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper from AthenaCommon.SystemOfUnits import GeV -from AthenaCommon.AppMgr import ToolSvc from DerivationFrameworkJetEtMiss.PFlowCommon import applyPFOAugmentation class METTriggerDerivationContentManager(object): diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/PFlowCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/PFlowCommon.py index 2a0dff341119b21e95cbe8af473fd00e035ac592..0adbc619dc0773bb5baa836a89ed35b63ad7572a 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/PFlowCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/PFlowCommon.py @@ -1,8 +1,7 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from AthenaCommon import CfgMgr +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob def applyPFOAugmentation(sequence=DerivationFrameworkJob): @@ -26,7 +25,7 @@ def applyPFOAugmentation(sequence=DerivationFrameworkJob): pfoaugtool = CfgMgr.DerivationFramework__PFlowAugmentationTool("PFlowAugmentationTool", WeightPFOTool=weightpfotool) ToolSvc += pfoaugtool - if not pfoaugtool in pfaug.AugmentationTools: + if pfoaugtool not in pfaug.AugmentationTools: pfaug.AugmentationTools.append(pfoaugtool) ################################################################## diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/PFlowJetCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/PFlowJetCommon.py index d853948733e5f31944a236481f1688ae2985c77b..1e21d0fd4b5d2d39aa6c59e10a3d86af37816b17 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/PFlowJetCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/PFlowJetCommon.py @@ -1,15 +1,13 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration #******************************************************************** # PFlowJetCommon.py # Schedules special jet tools #******************************************************************** -from DerivationFrameworkCore.DerivationFrameworkMaster import * -from DerivationFrameworkJetEtMiss.JetCommon import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob +from DerivationFrameworkJetEtMiss.JetCommon import addPFlowJets -from JetRec.JetRecStandard import jtm -from JetRec.JetRecConf import JetAlgorithm jetalg1 = addPFlowJets("EM", 0.4) jetalg2 = addPFlowJets("EMC", 0.4) DerivationFrameworkJob += jetalg1 diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/SUSYCustomMET.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/SUSYCustomMET.py index c3f99bfe905b5fb3ef003050710857c5ef28f758..b5e4faf21ef35dad13df995c5aa637edf7672add 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/SUSYCustomMET.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/SUSYCustomMET.py @@ -1,8 +1,6 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob # Set up custom MET reconstruction algorithms from METReconstruction.METRecoFlags import metFlags from METReconstruction.METRecoConfig import BuildConfig, RefConfig, METConfig, getMETRecoAlg diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/TopCustomMET.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/TopCustomMET.py index 3e833445ed9b1f49dfa78cfc0d3575f1f6044dbc..bfe028791df65269f39d14a8882dfcfd4de7b6c6 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/TopCustomMET.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/TopCustomMET.py @@ -1,8 +1,6 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob # Set up custom MET reconstruction algorithms from METReconstruction.METRecoFlags import metFlags from METReconstruction.METRecoConfig import BuildConfig, RefConfig, METConfig, getMETRecoAlg diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/CMakeLists.txt index 0d50f59a1331e80b609709aec7fbe756ab508327..c3e0c29fb35b887d0b978f89e82ab0f0aeb82c86 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/CMakeLists.txt +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/CMakeLists.txt @@ -13,9 +13,9 @@ find_package( Boost ) atlas_add_component( DerivationFrameworkMCTruth src/*.cxx src/components/*.cxx INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${FASTJET_INCLUDE_DIRS} ${HEPPDT_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${Boost_LIBRARIES} ${FASTJET_LIBRARIES} ${HEPPDT_LIBRARIES} ${ROOT_LIBRARIES} AthenaBaseComps AthenaKernel AtlasHepMCLib DerivationFrameworkInterfaces ExpressionEvaluationLib GaudiKernel GeneratorObjects MCTruthClassifierLib StoreGateLib TauAnalysisToolsLib TruthUtils xAODBase xAODEgamma xAODEventInfo xAODJet xAODMuon xAODTruth ) + LINK_LIBRARIES ${Boost_LIBRARIES} ${FASTJET_LIBRARIES} ${HEPPDT_LIBRARIES} ${ROOT_LIBRARIES} AthenaBaseComps AthenaKernel AtlasHepMCLib DerivationFrameworkInterfaces ExpressionEvaluationLib GaudiKernel GenInterfacesLib GeneratorObjects MCTruthClassifierLib StoreGateLib TauAnalysisToolsLib TruthUtils xAODBase xAODEgamma xAODEventInfo xAODEventShape xAODJet xAODMuon xAODTruth ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/GenFilterToolSetup.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/GenFilterToolSetup.py index 530c5165733bbe97ce44a62df685ddc83512f021..6e46b304e038338e7bb18b6b92cc6bdb1d34fdca 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/GenFilterToolSetup.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/GenFilterToolSetup.py @@ -11,8 +11,8 @@ if not hasattr(ToolSvc,'DFCommonTruthClassifier'): ToolSvc += DFCommonTruthClassifier #Save the post-shower HT and MET filter values that will make combining filtered samples easier (adds to the EventInfo) -#from AthenaCommon import CfgMgr -#DFCommonTruthGenFilter = CfgMgr.DerivationFramework__GenFilterTool( -# "DFCommonTruthGenFilt", -# ) -#ToolSvc += DFCommonTruthGenFilter +from AthenaCommon import CfgMgr +DFCommonTruthGenFilter = CfgMgr.DerivationFramework__GenFilterTool( + "DFCommonTruthGenFilt", + ) +ToolSvc += DFCommonTruthGenFilter diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/HFHadronsCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/HFHadronsCommon.py index 56af6be1820f0fdea8a69ef9378750b3f4e02ca0..e2287b4056f33dfebbc4b4c3790ff335980072ff 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/HFHadronsCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/HFHadronsCommon.py @@ -3,7 +3,10 @@ ############################################# # Heavy flavour from tt tools ############################################# -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from AthenaCommon import CfgMgr +from AthenaCommon.AppMgr import ToolSvc +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob + DSIDList=[ 410000, 410001, diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/MCTruthCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/MCTruthCommon.py index b120796b22269b6da7f4cb750aa75d895f93d763..8ba6d1969e81d24a8be3d417e8bce4d6ec7c8773 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/MCTruthCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/MCTruthCommon.py @@ -1,11 +1,12 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Add translator from EVGEN input to xAOD-like truth here -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob from RecExConfig.ObjKeyStore import objKeyStore from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg -from DerivationFrameworkMCTruth.TruthDerivationTools import * +import DerivationFrameworkMCTruth.TruthDerivationTools as dfTruth +from AthenaCommon import CfgMgr from AthenaCommon import Logging dfcommontruthlog = Logging.logging.getLogger('DFCommonTruth') @@ -53,7 +54,6 @@ def addTruthJetsEVNT(kernel=None, decorationDressing=None): kernel = DerivationFrameworkJob # Add jet algorithms if they aren't there from JetRec.JetRecStandard import jtm - from JetRec.JetRecConf import JetAlgorithm truth_modifiers = [jtm.truthpartondr, jtm.partontruthlabel, jtm.jetdrlabeler, jtm.trackjetdrlabeler] if not objKeyStore.isInInput( "xAOD::JetContainer","AntiKt4TruthJets") and not hasattr(kernel,'jetalgAntiKt4Truth'): # Standard truth jets @@ -77,7 +77,7 @@ def addTruthJetsEVNT(kernel=None, decorationDressing=None): if not objKeyStore.isInInput( "xAOD::JetContainer","AntiKt10TruthJets") and not hasattr(kernel,'jetalgAntiKt10Truth'): # AntiKt2 truth charged jets ghost association from JetRec.JetRecConf import PseudoJetGetter - if not 'gakt2truthchargedget' in jtm.tools: + if 'gakt2truthchargedget' not in jtm.tools: jtm += PseudoJetGetter("gakt2truthchargedget", # give a unique name InputContainer = "AntiKt2TruthChargedJets", # SG key Label = "GhostAntiKt2TruthChargedJets", # this is the name you'll use to retrieve associated ghosts @@ -104,9 +104,10 @@ def addTruthJetsEVNT(kernel=None, decorationDressing=None): if not objKeyStore.isInInput( "xAOD::JetContainer","AntiKt10TruthTrimmedPtFrac5SmallR20Jets") and not hasattr(kernel,'jetalgAntiKt10TruthTrimmedPtFrac5SmallR20'): #Large R jets - from DerivationFrameworkJetEtMiss.JetCommon import addTrimmedJets + #from DerivationFrameworkJetEtMiss.JetCommon import addTrimmedJets #addTrimmedJets('AntiKt', 1.0, 'Truth', rclus=0.2, ptfrac=0.05, mods="truth_groomed", # algseq=kernel, outputGroup="Trimmed", writeUngroomed=False) + pass def addTruthJetsAOD(kernel=None, decorationDressing=None): # Ensure that we are adding it to something @@ -122,9 +123,10 @@ def addTruthJetsAOD(kernel=None, decorationDressing=None): # addAntiKt4TruthDressedWZJets(kernel,'TRUTH') if not objKeyStore.isInInput( "xAOD::JetContainer","AntiKt10TruthTrimmedPtFrac5SmallR20Jets"): #Large R jets - from DerivationFrameworkJetEtMiss.JetCommon import addTrimmedJets + #from DerivationFrameworkJetEtMiss.JetCommon import addTrimmedJets #addTrimmedJets('AntiKt', 1.0, 'Truth', rclus=0.2, ptfrac=0.05, mods="truth_groomed", # algseq=kernel, outputGroup="Trimmed", writeUngroomed=False) + pass elif not objKeyStore.isInInput( "xAOD::JetContainer","AntiKt10TruthJets"): addAntiKt10TruthJets(kernel,"TRUTH") @@ -143,7 +145,7 @@ def addTruthJets(kernel=None, decorationDressing=None): barCodeFromMetadata=0 from JetRec.JetRecStandardToolManager import jtm from ParticleJetTools.ParticleJetToolsConf import CopyTruthJetParticles - if not 'truthpartdressedwz' in jtm.tools: + if 'truthpartdressedwz' not in jtm.tools: jtm += CopyTruthJetParticles("truthpartdressedwz", OutputName="JetInputTruthParticlesDressedWZ", MCTruthClassifier=jtm.JetMCTruthClassifier, #IncludePromptLeptons=False,#IncludePromptPhotons=False, @@ -157,7 +159,7 @@ def addTruthJets(kernel=None, decorationDressing=None): kernel += JetAlgorithm("jetdressedwzalg") jetdressedwzalg = kernel.jetdressedwzalg jetdressedwzalg.Tools = [ jtm.jetdressedwzrun ] - if not 'truthdressedwzget' in jtm.tools: + if 'truthdressedwzget' not in jtm.tools: jtm += PseudoJetGetter("truthdressedwzget", Label = "TruthDressedWZ", InputContainer = jtm.truthpartdressedwz.OutputName, @@ -175,10 +177,10 @@ def addTruthJets(kernel=None, decorationDressing=None): # make sure if we are using EVNT that we don't try to check sim metadata barCodeFromMetadata=2 if objKeyStore.isInInput( "McEventCollection", "GEN_EVENT" ): - barCodeFromMetadata=0 + barCodeFromMetadata=0 # noqa: F841 (kept for documentation purposes) from JetRec.JetRecStandardToolManager import jtm from ParticleJetTools.ParticleJetToolsConf import CopyTruthJetParticles - if not 'truthpartcharged' in jtm.tools: + if 'truthpartcharged' not in jtm.tools: jtm += CopyTruthJetParticles("truthpartcharged", OutputName="JetInputTruthParticlesCharged", MCTruthClassifier=jtm.JetMCTruthClassifier, #ChargedParticlesOnly=True, @@ -191,7 +193,7 @@ def addTruthJets(kernel=None, decorationDressing=None): kernel += JetAlgorithm("jetchargedalg") jetchargedalg = kernel.jetchargedalg jetchargedalg.Tools = [ jtm.jetchargedrun ] - if not 'truthchargedget' in jtm.tools: + if 'truthchargedget' not in jtm.tools: jtm += PseudoJetGetter("truthchargedget", Label = "TruthCharged", InputContainer = jtm.truthpartcharged.OutputName, @@ -216,7 +218,7 @@ def addTruthMET(kernel=None): # This should handle EVNT correctly without an explicit check from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob if not objKeyStore.isInInput( "xAOD::MissingETContainer","MET_Truth") and not hasattr(DerivationFrameworkJob,"METReconstruction"): - import METReconstruction.METConfig_Truth + import METReconstruction.METConfig_Truth # noqa: F401 from METReconstruction.METRecoConfig import getMETRecoAlg metAlg = getMETRecoAlg('METReconstruction') kernel += metAlg @@ -232,24 +234,24 @@ def schedulePreJetMCTruthAugmentations(kernel=None, decorationDressing=None): # These augmentations do *not* require truth jets at all # If requested, add a decoration to photons that were used in the dressing if decorationDressing is not None: - DFCommonTruthElectronDressingTool.decorationName = decorationDressing - DFCommonTruthMuonDressingTool.decorationName = decorationDressing + dfTruth.DFCommonTruthElectronDressingTool.decorationName = decorationDressing + dfTruth.DFCommonTruthMuonDressingTool.decorationName = decorationDressing # schedule the special truth building tools and add them to a common augmentation; note taus are handled separately below - augmentationToolsList = [ DFCommonTruthClassificationTool, - DFCommonTruthMuonTool,DFCommonTruthElectronTool, - DFCommonTruthPhotonToolSim, - DFCommonTruthNeutrinoTool, - DFCommonTruthBottomTool, - DFCommonTruthTopTool, - DFCommonTruthBosonTool, - DFCommonTruthBSMTool, - DFCommonTruthForwardProtonTool, - DFCommonTruthElectronDressingTool, DFCommonTruthMuonDressingTool, - DFCommonTruthElectronIsolationTool1, DFCommonTruthElectronIsolationTool2, - DFCommonTruthMuonIsolationTool1, DFCommonTruthMuonIsolationTool2, - DFCommonTruthPhotonIsolationTool1, DFCommonTruthPhotonIsolationTool2, DFCommonTruthPhotonIsolationTool3] - from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation + augmentationToolsList = [ dfTruth.DFCommonTruthClassificationTool, + dfTruth.DFCommonTruthMuonTool,dfTruth.DFCommonTruthElectronTool, + dfTruth.DFCommonTruthPhotonToolSim, + dfTruth.DFCommonTruthNeutrinoTool, + dfTruth.DFCommonTruthBottomTool, + dfTruth.DFCommonTruthTopTool, + dfTruth.DFCommonTruthBosonTool, + dfTruth.DFCommonTruthBSMTool, + dfTruth.DFCommonTruthForwardProtonTool, + dfTruth.DFCommonTruthElectronDressingTool, dfTruth.DFCommonTruthMuonDressingTool, + dfTruth.DFCommonTruthElectronIsolationTool1, dfTruth.DFCommonTruthElectronIsolationTool2, + dfTruth.DFCommonTruthMuonIsolationTool1, dfTruth.DFCommonTruthMuonIsolationTool2, + dfTruth.DFCommonTruthPhotonIsolationTool1, dfTruth.DFCommonTruthPhotonIsolationTool2, dfTruth.DFCommonTruthPhotonIsolationTool3] + kernel += CfgMgr.DerivationFramework__CommonAugmentation("MCTruthCommonPreJetKernel", AugmentationTools = augmentationToolsList ) @@ -272,7 +274,7 @@ def schedulePostJetMCTruthAugmentations(kernel=None, decorationDressing=None): # truth tau matching needs truth jets, truth electrons and truth muons from DerivationFrameworkTau.TauTruthCommon import scheduleTauTruthTools scheduleTauTruthTools(kernel) - augmentationToolsList = [ DFCommonTruthTauDressingTool ] + augmentationToolsList = [ dfTruth.DFCommonTruthTauDressingTool ] #Save the post-shower HT and MET filter values that will make combining filtered samples easier (adds to the EventInfo) #from DerivationFrameworkMCTruth.GenFilterToolSetup import DFCommonTruthGenFilter @@ -293,8 +295,7 @@ def schedulePostJetMCTruthAugmentations(kernel=None, decorationDressing=None): if IsSUSYSignal(): from DerivationFrameworkSUSY.DecorateSUSYProcess import DecorateSUSYProcess augmentationToolsList += DecorateSUSYProcess('MCTruthCommon') - - from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation + kernel += CfgMgr.DerivationFramework__CommonAugmentation("MCTruthCommonPostJetKernel", AugmentationTools = augmentationToolsList ) @@ -350,7 +351,7 @@ def addParentAndDownstreamParticles(kernel=None, # Already there! Carry on... dfcommontruthlog.warning("Attempt to add a duplicate "+kernel_name+". Failing.") return - collection_name=collection_prefix+'WithDecay' if collection_prefix!=None else 'Truth'+prefix+'WithDecay' + collection_name=collection_prefix+'WithDecay' if collection_prefix is not None else 'Truth'+prefix+'WithDecay' # Set up a tool to keep the W/Z/H bosons and all downstream particles from DerivationFrameworkMCTruth.DerivationFrameworkMCTruthConf import DerivationFramework__TruthDecayCollectionMaker collection_maker = DerivationFramework__TruthDecayCollectionMaker( name='DFCommon'+prefix+'AndDecaysTool', @@ -360,7 +361,6 @@ def addParentAndDownstreamParticles(kernel=None, RejectHadronChildren=rejectHadronChildren) from AthenaCommon.AppMgr import ToolSvc ToolSvc += collection_maker - from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation kernel += CfgMgr.DerivationFramework__CommonAugmentation(kernel_name, AugmentationTools = [collection_maker] ) @@ -431,7 +431,6 @@ def addHFAndDownstreamParticles(kernel=None, addB=True, addC=True, generations=- Generations=generations) from AthenaCommon.AppMgr import ToolSvc ToolSvc += DFCommonHFAndDecaysTool - from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation kernel += CfgMgr.DerivationFramework__CommonAugmentation(prefix+"MCTruthCommonHFAndDecaysKernel", AugmentationTools = [DFCommonHFAndDecaysTool] ) @@ -451,7 +450,6 @@ def addPVCollection(kernel=None): NewCollectionName="TruthPrimaryVertices") from AthenaCommon.AppMgr import ToolSvc ToolSvc += DFCommonTruthPVCollTool - from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation kernel += CfgMgr.DerivationFramework__CommonAugmentation("MCTruthCommonTruthPVCollKernel", AugmentationTools = [DFCommonTruthPVCollTool] ) @@ -472,7 +470,6 @@ def addHardScatterCollection(kernel=None, generations=1): Generations=generations) from AthenaCommon.AppMgr import ToolSvc ToolSvc += DFCommonHSCollectionTool - from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation kernel += CfgMgr.DerivationFramework__CommonAugmentation("MCTruthCommonHSCollectionKernel", AugmentationTools = [DFCommonHSCollectionTool] ) @@ -493,7 +490,6 @@ def addTruthCollectionNavigationDecorations(kernel=None,TruthCollections=[], pre InputCollections=TruthCollections) from AthenaCommon.AppMgr import ToolSvc ToolSvc += DFCommonTruthNavigationDecorator - from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation kernel += CfgMgr.DerivationFramework__CommonAugmentation(prefix+"MCTruthNavigationDecoratorKernel", AugmentationTools = [DFCommonTruthNavigationDecorator] ) @@ -515,7 +511,6 @@ def addBSMAndDownstreamParticles(kernel=None, generations=-1): Generations=generations) from AthenaCommon.AppMgr import ToolSvc ToolSvc += DFCommonBSMAndDecaysTool - from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation kernel += CfgMgr.DerivationFramework__CommonAugmentation("MCTruthCommonBSMAndDecaysKernel", AugmentationTools = [DFCommonBSMAndDecaysTool] ) @@ -535,7 +530,6 @@ def addBornLeptonCollection(kernel=None): NewCollectionName="BornLeptons") from AthenaCommon.AppMgr import ToolSvc ToolSvc += DFCommonBornLeptonCollTool - from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation kernel += CfgMgr.DerivationFramework__CommonAugmentation("MCTruthCommonBornLeptonsKernel", AugmentationTools = [DFCommonBornLeptonCollTool] ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/TruthDerivationTools.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/TruthDerivationTools.py index e1d8205d77b2b8b52d8fae04274c4370b3a6c621..c341e53339d2ec1936fb5948e89a70baa0e0728a 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/TruthDerivationTools.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/python/TruthDerivationTools.py @@ -2,10 +2,10 @@ from AthenaCommon.AppMgr import ToolSvc -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkSimBarcodeOffset from MCTruthClassifier.MCTruthClassifierConf import MCTruthClassifier DFCommonTruthClassifier = MCTruthClassifier(name = "DFCommonTruthClassifier", - ParticleCaloExtensionTool = "") + ParticleCaloExtensionTool = "") ToolSvc += DFCommonTruthClassifier #============================================================================== @@ -75,7 +75,7 @@ DFCommonTruthBSMTool = DerivationFramework__TruthCollectionMaker(name ToolSvc += DFCommonTruthBSMTool # Set up a tool to keep forward protons for AFP -# Note that we have inputFileSummary coming from derivation framework master +from RecExConfig.InputFilePeeker import inputFileSummary if 'beam_energy' in inputFileSummary: beam_energy = inputFileSummary['beam_energy'] elif '/TagInfo' in inputFileSummary and 'beam_energy' in inputFileSummary['/TagInfo']: diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/GenFilterTool.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/GenFilterTool.cxx new file mode 100644 index 0000000000000000000000000000000000000000..5c2b9c64d6b4f80bfb1fbfb91f5e3ab4bee1c007 --- /dev/null +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/GenFilterTool.cxx @@ -0,0 +1,230 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +// Class header file +#include "GenFilterTool.h" + +// EDM includes +#include "xAODEventInfo/EventInfo.h" +#include "xAODJet/JetContainer.h" + +// Tool handle interface +#include "MCTruthClassifier/IMCTruthClassifier.h" + +namespace DerivationFramework { + + using namespace MCTruthPartClassifier; + + static bool isNonInteracting(int pid) { + const int apid = abs(pid); + if (apid == 12 || apid == 14 || apid == 16) return true; //< neutrinos + if (apid == 1000022 || apid == 1000024 || apid == 5100022) return true; // SUSY & KK photon and Z partners + if (apid == 39 || apid == 1000039 || apid == 5000039) return true; //< gravitons: standard, SUSY and KK + if (apid == 9000001 || apid == 9000002 || apid == 9000003 || apid == 9000004 || apid == 9000005 || apid == 9000006) return true; //< exotic particles from monotop model + return false; + } + + static SG::AuxElement::Decorator<float> dec_genFiltHT("GenFiltHT"); + static SG::AuxElement::Decorator<float> dec_genFiltMET("GenFiltMET"); + static SG::AuxElement::Decorator<float> dec_genFiltPTZ("GenFiltPTZ"); + static SG::AuxElement::Decorator<float> dec_genFiltFatJ("GenFiltFatJ"); + + GenFilterTool::GenFilterTool(const std::string& t, const std::string& n, const IInterface* p) + : AthAlgTool(t,n,p) + , m_classif("MCTruthClassifier/DFCommonTruthClassifier") + { + + declareInterface<DerivationFramework::IAugmentationTool>(this); + + declareProperty("EventInfoName",m_eventInfoName="EventInfo"); + declareProperty("MCCollectionName",m_mcName="TruthParticles"); + declareProperty("TruthJetCollectionName",m_truthJetsName="AntiKt4TruthWZJets"); + declareProperty("MinJetPt",m_MinJetPt = 35e3); + declareProperty("MaxJetEta",m_MaxJetEta = 2.5); + declareProperty("MinLeptonPt",m_MinLepPt = 25e3); + declareProperty("MaxLeptonEta",m_MaxLepEta = 2.5); + declareProperty("SimBarcodeOffset", m_SimBarcodeOffset = 200000); + } + + + GenFilterTool::~GenFilterTool(){} + + + bool GenFilterTool::isPrompt( const xAOD::TruthParticle* tp ) const + { + ParticleOrigin orig = getPartOrigin(tp); + ATH_MSG_VERBOSE("Particle has origin " << orig); + + switch(orig) { + case Unknown: + case PhotonConv: + case DalitzDec: + case ElMagProc: + case Mu: + case LightMeson: + case StrangeMeson: + case CharmedMeson: + case BottomMeson: + case CCbarMeson: + case JPsi: + case BBbarMeson: + case LightBaryon: + case StrangeBaryon: + case CharmedBaryon: + case BottomBaryon: + case PionDecay: + case KaonDecay: + return false; + default: + break; + } + return true; + } + + MCTruthPartClassifier::ParticleOrigin GenFilterTool::getPartOrigin( const xAOD::TruthParticle* tp ) const + { + if(m_originMap.find(tp)==m_originMap.end()) { + std::pair<ParticleType, ParticleOrigin> classification = m_classif->particleTruthClassifier( tp ); + m_originMap[tp] = classification.second; + } + return m_originMap[tp]; + } + + + StatusCode GenFilterTool::addBranches() const{ + ATH_MSG_VERBOSE("GenFilterTool::addBranches()"); + + const xAOD::EventInfo* eventInfo; + if (evtStore()->retrieve(eventInfo,m_eventInfoName).isFailure()) { + ATH_MSG_ERROR("could not retrieve event info " <<m_eventInfoName); + return StatusCode::FAILURE; + } + + const xAOD::TruthParticleContainer* truthPC = 0; + if (evtStore()->retrieve(truthPC,m_mcName).isFailure()) { + ATH_MSG_ERROR("WARNING could not retrieve TruthParticleContainer " <<m_mcName); + return StatusCode::FAILURE; + } + + m_originMap.clear(); + + float genFiltHT(0.), genFiltMET(0.), genFiltPTZ(0.), genFiltFatJ(0.); + ATH_CHECK( getGenFiltVars(truthPC, genFiltHT, genFiltMET, genFiltPTZ, genFiltFatJ) ); + + ATH_MSG_DEBUG("Computed generator filter quantities: HT " << genFiltHT/1e3 << ", MET " << genFiltMET/1e3 << ", PTZ " << genFiltPTZ/1e3 << ", FatJ " << genFiltFatJ/1e3 ); + + dec_genFiltHT(*eventInfo) = genFiltHT; + dec_genFiltMET(*eventInfo) = genFiltMET; + dec_genFiltPTZ(*eventInfo) = genFiltPTZ; + dec_genFiltFatJ(*eventInfo) = genFiltFatJ; + + return StatusCode::SUCCESS; + } + + StatusCode GenFilterTool::getGenFiltVars(const xAOD::TruthParticleContainer* tpc, float& genFiltHT, float& genFiltMET, float& genFiltPTZ, float& genFiltFatJ) const { + // Get jet container out + const xAOD::JetContainer* truthjets = 0; + if ( evtStore()->retrieve( truthjets, m_truthJetsName).isFailure() || !truthjets ){ + ATH_MSG_ERROR( "No xAOD::JetContainer found in StoreGate with key " << m_truthJetsName ); + return StatusCode::FAILURE; + } + + // Get HT + genFiltHT = 0.; + for (const auto& tj : *truthjets) { + if ( tj->pt()>m_MinJetPt && fabs(tj->eta())<m_MaxJetEta ) { + ATH_MSG_VERBOSE("Adding truth jet with pt " << tj->pt() + << ", eta " << tj->eta() + << ", phi " << tj->phi() + << ", nconst = " << tj->numConstituents()); + genFiltHT += tj->pt(); + } + } + + // Get MET and add leptons to HT + float MEx(0.), MEy(0.); + for (const auto& tp : *tpc){ + int pdgid = tp->pdgId(); + if (tp->barcode() >= m_SimBarcodeOffset) continue; // Particle is from G4 + if (pdgid==21 && tp->e()==0) continue; // Work around for an old generator bug + if ( tp->status() %1000 !=1 ) continue; // Stable! + + if ((abs(pdgid)==11 || abs(pdgid)==13) && tp->pt()>m_MinLepPt && fabs(tp->eta())<m_MaxLepEta) { + if( isPrompt(tp) ) { + ATH_MSG_VERBOSE("Adding prompt lepton with pt " << tp->pt() + << ", eta " << tp->eta() + << ", phi " << tp->phi() + << ", status " << tp->status() + << ", pdgId " << pdgid); + genFiltHT += tp->pt(); + } + } + + if (isNonInteracting(pdgid) && isPrompt(tp) ) { + ATH_MSG_VERBOSE("Found prompt nonInteracting particle with pt " << tp->pt() + << ", eta " << tp->eta() + << ", phi " << tp->phi() + << ", status " << tp->status() + << ", pdgId " << pdgid); + MEx += tp->px(); + MEy += tp->py(); + } + } + genFiltMET = sqrt(MEx*MEx+MEy*MEy); + + // Get PTZ + float PtZ(.0); + float MinPt_PTZ(5000.), MaxEta_PTZ(5.0), MinMass_PTZ(20000.), MaxMass_PTZ(14000000.); + bool AllowElecMu_PTZ = false; + bool AllowSameCharge_PTZ = false; + for (const xAOD::TruthParticle* pitr1 : *tpc){ + int pdgId1 = pitr1->pdgId(); + if (pitr1->barcode() >= m_SimBarcodeOffset) continue; + if (pitr1->status()!=1) continue; + // Pick electrons or muons with Pt > MinPt_PTZ and |eta| < m_maxEta + if (abs(pdgId1) == 11 || abs(pdgId1) == 13) { + if (pitr1->pt() >= MinPt_PTZ && fabs(pitr1->eta()) <= MaxEta_PTZ){ + for (const xAOD::TruthParticle* pitr2 : *tpc){ + if (pitr2==pitr1) continue; + if (pitr2->barcode() >= m_SimBarcodeOffset) continue; + if (pitr2->status()!=1) continue; + int pdgId2 = pitr2->pdgId(); + // Pick electrons or muons with Pt > MinPt_PTZ and |eta| < MaxEta_PTZ + // If AllowSameCharge_PTZ is not true only pick those with opposite charge to the first particle + // If AllowElecMu_PTZ is true allow also Z -> emu compinations (with charge requirements as above) + if ((AllowSameCharge_PTZ && (abs(pdgId2) == abs(pdgId1) || (AllowElecMu_PTZ && (abs(pdgId2) == 11 || abs(pdgId2) == 13) ) ) ) || + (!AllowSameCharge_PTZ && (pdgId2 == -1*pdgId1 || (AllowElecMu_PTZ && (pdgId2 == (pdgId1 < 0 ? 1 : -1) * 11 || (pdgId1 < 0 ? 1 : -1) * pdgId2 == 13) ) ) ) ) { + if (pitr2->pt() >= MinPt_PTZ && fabs(pitr2->eta()) <= MaxEta_PTZ){ + double invMass = (pitr1->p4()+pitr2->p4()).M(); + double dilepPt = (pitr1->p4()+pitr2->p4()).Pt(); + // Only consider pair that fall in the mass window + if (MinMass_PTZ < invMass && invMass < MaxMass_PTZ) { + if (dilepPt > PtZ) PtZ = dilepPt; + } + } + } + } + } + } + } + genFiltPTZ = PtZ; + + //Get FatJ + // Get correct jet container + const xAOD::JetContainer* truthjets10 = 0; + if ( evtStore()->retrieve( truthjets10, "AntiKt10TruthJets").isFailure() || !truthjets10 ){ + ATH_MSG_ERROR( "No xAOD::JetContainer found in StoreGate with key AntiKt10TruthJets" ); + return StatusCode::FAILURE; + } + genFiltFatJ=0.; + for (const auto& j : *truthjets10) { + if (j->pt()>genFiltFatJ) genFiltFatJ=j->pt(); + } + + + return StatusCode::SUCCESS; + } + + +} /// namespace \ No newline at end of file diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/GenFilterTool.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/GenFilterTool.h new file mode 100644 index 0000000000000000000000000000000000000000..68cf1c780247bd192d5868f69e701185bdbd4e8b --- /dev/null +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/GenFilterTool.h @@ -0,0 +1,65 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +/* + * @file GenFilterTool.h + * @author TJ Khoo + * @date July 2015 + * @brief tool to decorate EventInfo with quantities needed to disentangle generator filtered samples +*/ + +#ifndef DerivationFrameworkMCTruth_GenFilterTool_H +#define DerivationFrameworkMCTruth_GenFilterTool_H + +// Base classes +#include "AthenaBaseComps/AthAlgTool.h" +#include "DerivationFrameworkInterfaces/IAugmentationTool.h" + +// Tool handle for the MC truth classifier +#include "GaudiKernel/ToolHandle.h" + +// EDM include -- typedef, so has to be included +#include "xAODTruth/TruthParticleContainer.h" + +// Defs for the particle origin +#include "MCTruthClassifier/MCTruthClassifierDefs.h" + +// STL includes +#include <string> + +class IMCTruthClassifier; + +namespace DerivationFramework { + + class GenFilterTool : public AthAlgTool, public IAugmentationTool { + + public: + GenFilterTool(const std::string& t, const std::string& n, const IInterface* p); + ~GenFilterTool(); + virtual StatusCode addBranches() const; + + StatusCode getGenFiltVars(const xAOD::TruthParticleContainer* tpc, float& genFiltHT, float& genFiltMET, float& genFiltPTZ, float& genFiltFatJ) const; + + bool isPrompt( const xAOD::TruthParticle* tp ) const; + MCTruthPartClassifier::ParticleOrigin getPartOrigin(const xAOD::TruthParticle* tp) const; + + private: + + std::string m_eventInfoName; + std::string m_mcName; + std::string m_truthJetsName; + + float m_MinJetPt; //!< Min pT for the truth jets + float m_MaxJetEta; //!< Max eta for the truth jets + float m_MinLepPt; //!< Min pT for the truth leptons + float m_MaxLepEta; //!< Max eta for the truth leptons + int m_SimBarcodeOffset; //!< G4 particle barcode offset value (Particles having a barcode greater than this value are defined to be G4 particles) + + mutable std::map<const xAOD::TruthParticle*,MCTruthPartClassifier::ParticleOrigin> m_originMap; + ToolHandle<IMCTruthClassifier> m_classif; + }; /// class + +} /// namespace + +#endif \ No newline at end of file diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthEDDecorator.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthEDDecorator.cxx new file mode 100644 index 0000000000000000000000000000000000000000..f6859a93176cea04a586ba52b8a7fce301231d41 --- /dev/null +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthEDDecorator.cxx @@ -0,0 +1,59 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +// Class header file +#include "TruthEDDecorator.h" + +// EDM includes +#include "xAODEventInfo/EventInfo.h" +#include "xAODEventShape/EventShape.h" + +namespace DerivationFramework { + + static const SG::AuxElement::Accessor<float> acc_Density("Density"); + + TruthEDDecorator::TruthEDDecorator(const std::string& t, const std::string& n, const IInterface* p) + : AthAlgTool(t,n,p) + { + declareInterface<DerivationFramework::IAugmentationTool>(this); + + declareProperty("EventInfoName",m_eventInfoName="EventInfo"); + declareProperty("EnergyDensityKeys",m_edKeys={"TruthIsoCentralEventShape","TruthIsoForwardEventShape"}); + declareProperty("DecorationSuffix",m_ed_suffix="_rho"); + } + + + TruthEDDecorator::~TruthEDDecorator(){} + + + StatusCode TruthEDDecorator::initialize(){ + for (size_t i=0;i<m_edKeys.size();++i){ + m_dec_eventShape.push_back( SG::AuxElement::Decorator<float>(m_edKeys[i]+m_ed_suffix) ); + } + return StatusCode::SUCCESS; + } + + + StatusCode TruthEDDecorator::addBranches() const{ + ATH_MSG_VERBOSE("addBranches()"); + + // Get the event info that we will decorate onto + const xAOD::EventInfo* eventInfo(nullptr); + if (evtStore()->retrieve(eventInfo,m_eventInfoName).isFailure()) { + ATH_MSG_ERROR("could not retrieve event info " <<m_eventInfoName); + return StatusCode::FAILURE; + } + + const xAOD::EventShape* eventShape(nullptr); + for (size_t i=0;i<m_edKeys.size();++i){ + // Get the event shapes from which we'll get the densities + ATH_CHECK( evtStore()->retrieve(eventShape,m_edKeys[i]) ); + // Decorate the densities onto the event info + m_dec_eventShape[i](*eventInfo) = acc_Density(*eventShape); + } + + return StatusCode::SUCCESS; + } + +} /// namespace \ No newline at end of file diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthEDDecorator.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthEDDecorator.h new file mode 100644 index 0000000000000000000000000000000000000000..f1c991fa32f1c50f0952257ec668405291827090 --- /dev/null +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthEDDecorator.h @@ -0,0 +1,45 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +/* + * @file TruthEDDecorator.h + * @author Zach Marshall + * @date Nov 2019 + * @brief tool to decorate EventInfo with truth-level energy density +*/ + +#ifndef DerivationFrameworkMCTruth_TruthEDDecorator_H +#define DerivationFrameworkMCTruth_TruthEDDecorator_H + +// Base classes +#include "AthenaBaseComps/AthAlgTool.h" +#include "DerivationFrameworkInterfaces/IAugmentationTool.h" + +// Members +#include "AthContainers/AuxElement.h" + +// STL includes +#include <string> +#include <vector> + +namespace DerivationFramework { + + class TruthEDDecorator : public AthAlgTool, public IAugmentationTool { + + public: + TruthEDDecorator(const std::string& t, const std::string& n, const IInterface* p); + ~TruthEDDecorator(); + virtual StatusCode addBranches() const override final; + StatusCode initialize() override final; + + private: + std::string m_eventInfoName; + std::vector<std::string> m_edKeys; + std::string m_ed_suffix; + std::vector<SG::AuxElement::Decorator<float> > m_dec_eventShape; + }; /// class + +} /// namespace + +#endif \ No newline at end of file diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthMetaDataWriter.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthMetaDataWriter.cxx new file mode 100644 index 0000000000000000000000000000000000000000..1ace75c810dcf70698d6cd0d7247c5e32ebcf69e --- /dev/null +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthMetaDataWriter.cxx @@ -0,0 +1,136 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +///////////////////////////////////////////////////////////////// +// TruthMetaDataWriter.cxx +// Author: James Catmore (James.Catmore@cern.ch) + +// Header for this class +#include "TruthMetaDataWriter.h" + +// EDM Objects that we need +#include "xAODTruth/TruthMetaData.h" +#include "xAODTruth/TruthMetaDataAuxContainer.h" +#include "xAODEventInfo/EventInfo.h" + +// For accessing the tagInfo +#include "AthenaPoolUtilities/CondAttrListCollection.h" + +// Service for the weights +#include "GenInterfaces/IHepMCWeightSvc.h" + +// Constructor +DerivationFramework::TruthMetaDataWriter::TruthMetaDataWriter(const std::string& t, + const std::string& n, + const IInterface* p) + : AthAlgTool(t,n,p) + , m_metaStore( "MetaDataStore", n ) + , m_weightSvc( "HepMCWeightSvc/HepMCWeightSvc" , n ) +{ + declareInterface<DerivationFramework::IAugmentationTool>(this); + declareProperty( "MetaObjectName", m_metaName = "TruthMetaData" ); + declareProperty( "MetaDataStore", m_metaStore ); +} + +// Destructor +DerivationFramework::TruthMetaDataWriter::~TruthMetaDataWriter() { +} + +// Athena initialize and finalize +StatusCode DerivationFramework::TruthMetaDataWriter::initialize() +{ + ATH_MSG_VERBOSE("initialize() ..."); + // Initialize the service handles + CHECK( m_metaStore.retrieve() ); + CHECK( m_weightSvc.retrieve() ); + + // Create an empty truth meta data container: + xAOD::TruthMetaDataAuxContainer* aux = new xAOD::TruthMetaDataAuxContainer(); + m_tmd = new xAOD::TruthMetaDataContainer(); + m_tmd->setStore( aux ); + // Record it in the metadata store + CHECK( m_metaStore->record( aux, m_metaName + "Aux." ) ); + CHECK( m_metaStore->record( m_tmd, m_metaName ) ); + + return StatusCode::SUCCESS; +} + +StatusCode DerivationFramework::TruthMetaDataWriter::finalize() +{ + ATH_MSG_VERBOSE("finalize() ..."); + return StatusCode::SUCCESS; +} + +// Selection and collection creation +StatusCode DerivationFramework::TruthMetaDataWriter::addBranches() const +{ + + //The mcChannelNumber is used as a unique identifier for which truth meta data belongs to + uint32_t mcChannelNumber = 0; + // If this fails, we are running on a datatype with no EventInfo. Such data types should + // definitely not be mixing MC samples, so this should be safe (will fall back to 0 above) + if (evtStore()->contains<xAOD::EventInfo>("EventInfo")){ + const DataHandle<xAOD::EventInfo> eventInfo = nullptr; + CHECK( evtStore()->retrieve(eventInfo, "EventInfo") ); + mcChannelNumber = eventInfo->mcChannelNumber(); + } + + //Inserting in a (unordered_)set returns an <iterator, boolean> pair, where the boolean + //is used to check if the key already exists (returns false in the case it exists) + if( m_existingMetaDataChan.insert(mcChannelNumber).second ) { + xAOD::TruthMetaData* md = new xAOD::TruthMetaData(); + m_tmd->push_back( md ); + + // Get the list of weights from the metadata + std::map<std::string,std::size_t> weight_name_map = m_weightSvc->weightNames(); + + std::vector<std::string> orderedWeightNameVec; + orderedWeightNameVec.reserve( weight_name_map.size() ); + for (auto& entry: weight_name_map) { + orderedWeightNameVec.push_back(entry.first); + } + + //The map from the HepMC record pairs the weight names with a corresponding index, + //it is not guaranteed that the indices are ascending when iterating over the map + std::sort(orderedWeightNameVec.begin(), orderedWeightNameVec.end(), + [&](std::string i, std::string j){return weight_name_map.at(i) < weight_name_map.at(j);}); + + md->setMcChannelNumber(mcChannelNumber); + md->setWeightNames( std::move(orderedWeightNameVec) ); + + // Shamelessly stolen from the file meta data tool + const CondAttrListCollection* tagInfo(nullptr); + ATH_CHECK( detStore()->retrieve( tagInfo, "/TagInfo" ) ); + + // Access the first, and only channel of the object: + const CondAttrListCollection::AttributeList& al = tagInfo->attributeList( 0 ); + + if (al.exists("lhefGenerator")){ + md->setLhefGenerator( al["lhefGenerator"].data< std::string >() ); + } + + if (al.exists("generators")){ + md->setGenerators( al["generators"].data< std::string >() ); + } + + if (al.exists("evgenProcess")){ + md->setEvgenProcess( al["evgenProcess"].data< std::string >() ); + } + + if (al.exists("evgenTune")){ + md->setEvgenTune( al["evgenTune"].data< std::string >() ); + } + + if (al.exists("hardPDF")){ + md->setHardPDF( al["hardPDF"].data< std::string >() ); + } + + if (al.exists("softPDF")){ + md->setSoftPDF( al["softPDF"].data< std::string >() ); + } + // Done getting things from the TagInfo + + } // Done making the new truth metadata object + return StatusCode::SUCCESS; +} diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthMetaDataWriter.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthMetaDataWriter.h new file mode 100644 index 0000000000000000000000000000000000000000..56f254c80212e3d574d76e0ccc411b995c60bcae --- /dev/null +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/TruthMetaDataWriter.h @@ -0,0 +1,50 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef DERIVATIONFRAMEWORK_TRUTHMETADATAWRITER_H +#define DERIVATIONFRAMEWORK_TRUTHMETADATAWRITER_H + +// Base classes +#include "AthenaBaseComps/AthAlgTool.h" +#include "DerivationFrameworkInterfaces/IAugmentationTool.h" + +// Handles to services +#include "GaudiKernel/ServiceHandle.h" + +// EDM classes - typedefs, so have to #include them +#include "xAODTruth/TruthMetaDataContainer.h" + +// Standard library includes +#include <string> +#include <unordered_set> + +// Forward declarations +class IHepMCWeightSvc; + +namespace DerivationFramework { + + class TruthMetaDataWriter : public AthAlgTool, public IAugmentationTool { + public: + TruthMetaDataWriter(const std::string& t, const std::string& n, const IInterface* p); + ~TruthMetaDataWriter(); + StatusCode initialize(); + StatusCode finalize(); + virtual StatusCode addBranches() const; + + private: + /// Connection to the metadata store + ServiceHandle< StoreGateSvc > m_metaStore; + /// Service for retrieving the weight names + ServiceHandle< IHepMCWeightSvc > m_weightSvc; + /// The meta data container to be written out + xAOD::TruthMetaDataContainer* m_tmd; + /// SG key and name for meta data + std::string m_metaName; + /// Set for tracking the mc channels for which we already added meta data + mutable std::unordered_set<uint32_t> m_existingMetaDataChan; + + }; +} + +#endif \ No newline at end of file diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/components/DerivationFrameworkMCTruth_entries.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/components/DerivationFrameworkMCTruth_entries.cxx index 685652d2c4b96f8dfd27c961a9b86c5fcc13bc3f..71be27ae597c5e16ad83a021f1c82f7a75852f60 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/components/DerivationFrameworkMCTruth_entries.cxx +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/src/components/DerivationFrameworkMCTruth_entries.cxx @@ -17,6 +17,9 @@ #include "src/HardScatterCollectionMaker.h" #include "src/TruthLinkRepointTool.h" #include "DerivationFrameworkMCTruth/TruthPVCollectionMaker.h" +#include "src/GenFilterTool.h" +#include "src/TruthEDDecorator.h" +#include "src/TruthMetaDataWriter.h" using namespace DerivationFramework; @@ -39,3 +42,6 @@ DECLARE_COMPONENT( TruthBornLeptonCollectionMaker ) DECLARE_COMPONENT( HardScatterCollectionMaker ) DECLARE_COMPONENT( TruthLinkRepointTool ) DECLARE_COMPONENT( TruthPVCollectionMaker ) +DECLARE_COMPONENT( GenFilterTool ) +DECLARE_COMPONENT( TruthEDDecorator ) +DECLARE_COMPONENT( TruthMetaDataWriter ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/CMakeLists.txt index 759f5c066d8594bd1172f21af9ab36764498638b..a472a8332264e3f836a6d91592830b1eca7df5a9 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/CMakeLists.txt +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/CMakeLists.txt @@ -4,6 +4,6 @@ atlas_subdir( DerivationFrameworkPhys ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS_DataCompressionList.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS_DataCompressionList.py index d08346d71d90ed041d334846424cc196c45b229d..c61bcbf8155ecae54b75d7a2ecebd8f02cef646a 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS_DataCompressionList.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS_DataCompressionList.py @@ -1,3 +1,5 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + PHYS_DataCompressionList=[ "SoftBVrtClusterTool_Loose_VerticesAux.", "SoftBVrtClusterTool_Medium_VerticesAux.", "SoftBVrtClusterTool_Tight_VerticesAux.", "AntiKt10LCTopoJetsAux.", "AntiKt10LCTopoTrimmedPtFrac5SmallR20JetsAux.", "AntiKt2PV0TrackJetsAux.", "AntiKt4EMPFlowJetsAux.", "AntiKt4EMTopoJetsAux.", "AntiKtVR30Rmax4Rmin02TrackJets_BTagging201903Aux.", "AntiKt4EMPFlowJets_BTagging201810Aux.", "AntiKt4EMPFlowJets_BTagging201903Aux.", "AntiKt4EMTopoJets_BTagging201810Aux.", "xTrigDecisionAux.", "Kt4EMPFlowEventShapeAux.", "Kt4EMTopoOriginEventShapeAux.", "NeutralParticleFlowIsoCentralEventShapeAux.", "NeutralParticleFlowIsoForwardEventShapeAux.", "TopoClusterIsoCentralEventShapeAux.", "TopoClusterIsoForwardEventShapeAux.", "BTagging_AntiKt4EMPFlow_201810Aux.", "BTagging_AntiKt4EMPFlow_201903Aux.", "BTagging_AntiKt4EMTopo_201810Aux.", "BTagging_AntiKtVR30Rmax4Rmin02Track_201903Aux.", "CombinedMuonTrackParticlesAux.", "DiTauJetsAux.", "DiTauJetsLowPtAux.", "ElectronsAux.", "GSFConversionVerticesAux.", "GSFTrackParticlesAux.", "InDetForwardTrackParticlesAux.", "InDetTrackParticlesAux.", "MET_Core_AntiKt4EMPFlowAux.", "MET_Core_AntiKt4EMTopoAux.", "MET_TrackAux.", "MuonSpectrometerTrackParticlesAux.", "MuonsAux.", "PhotonsAux.", "PrimaryVerticesAux.", "TauJetsAux.", "TauTracksAux.", "TrigMatch_HLT_2e12_lhloose_nod0_mu10Aux.", "TrigMatch_HLT_2e17_lhvloose_nod0Aux.", "TrigMatch_HLT_2e17_lhvloose_nod0_L12EM15VHIAux.", "TrigMatch_HLT_2e24_lhvloose_nod0Aux.", "TrigMatch_HLT_2g20_tight_icalovloose_L12EM15VHIAux.", "TrigMatch_HLT_2g22_tightAux.", "TrigMatch_HLT_2g22_tight_L12EM15VHIAux.", "TrigMatch_HLT_2g22_tight_L1EM7_EMPTYAux.", "TrigMatch_HLT_2g22_tight_L1EM7_UNPAIRED_ISOAux.", "TrigMatch_HLT_2g22_tight_icalovlooseAux.", "TrigMatch_HLT_2g25_loose_g15_looseAux.", "TrigMatch_HLT_2g25_tight_L12EM20VHAux.", "TrigMatch_HLT_2g50_loose_L12EM20VHAux.", "TrigMatch_HLT_2mu14Aux.", "TrigMatch_HLT_2mu20_L12MU20_OVERLAYAux.", "TrigMatch_HLT_3g20_looseAux.", "TrigMatch_HLT_3mu3_mu3noL1_L13MU4Aux.", "TrigMatch_HLT_3mu4Aux.", "TrigMatch_HLT_3mu4_mu2noL1Aux.", "TrigMatch_HLT_3mu6Aux.", "TrigMatch_HLT_3mu6_msonlyAux.", "TrigMatch_HLT_3mu6_msonly_L1MU4_UNPAIRED_ISOAux.", "TrigMatch_HLT_3mu6_msonly_L1MU6_EMPTYAux.", "TrigMatch_HLT_4mu4Aux.", "TrigMatch_HLT_e12_lhloose_nod0_2mu10Aux.", "TrigMatch_HLT_e140_lhloose_nod0Aux.", "TrigMatch_HLT_e140_lhloose_nod0_L1EM24VHIAux.", "TrigMatch_HLT_e140_lhvloose_nod0Aux.", "TrigMatch_HLT_e160_lhvloose_nod0Aux.", "TrigMatch_HLT_e17_lhloose_nod0_2e12_lhloose_nod0_L1EM15VH_3EM10VHAux.", "TrigMatch_HLT_e17_lhloose_nod0_mu14Aux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_medium1_tracktwoEFAux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_medium1_tracktwoEF_L1DR-EM15TAU12I-J25Aux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_medium1_tracktwoEF_L1EM15VHI_2TAU12IM_4J12Aux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_medium1_tracktwoMVA_L1DR-EM15TAU12I-J25Aux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_medium1_tracktwoMVA_L1EM15VHI_2TAU12IM_4J12Aux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_medium1_tracktwo_L1DR-EM15TAU12I-J25Aux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_medium1_tracktwo_L1EM15VHI_2TAU12IM_4J12Aux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_mediumRNN_tracktwoMVAAux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_mediumRNN_tracktwoMVA_L1DR-EM15TAU12I-J25Aux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_mediumRNN_tracktwoMVA_L1EM15VHI_2TAU12IM_4J12Aux.", "TrigMatch_HLT_e17_lhmedium_nod0_tau80_medium1_tracktwoAux.", "TrigMatch_HLT_e200_etcutAux.", "TrigMatch_HLT_e22_lhvloose_nod0_e12_lhvloose_nod0_e10_lhvloose_nod0_L1EM20VH_2EM10VH_3EM8VHAux.", "TrigMatch_HLT_e24_lhmedium_nod0_ivarloose_tau35_medium1_tracktwoAux.", "TrigMatch_HLT_e24_lhmedium_nod0_ivarloose_tau35_medium1_tracktwoEFAux.", "TrigMatch_HLT_e24_lhmedium_nod0_ivarloose_tau35_medium1_tracktwoMVAAux.", "TrigMatch_HLT_e24_lhmedium_nod0_ivarloose_tau35_mediumRNN_tracktwoMVAAux.", "TrigMatch_HLT_e24_lhtight_nod0_ivarlooseAux.", "TrigMatch_HLT_e24_lhvloose_nod0_2e12_lhvloose_nod0_L1EM20VH_3EM10VHAux.", "TrigMatch_HLT_e26_lhloose_nod0Aux.", "TrigMatch_HLT_e26_lhmedium_nod0_mu8noL1Aux.", "TrigMatch_HLT_e26_lhtight_nod0Aux.", "TrigMatch_HLT_e26_lhtight_nod0_e15_etcut_L1EM7_ZeeAux.", "TrigMatch_HLT_e26_lhtight_nod0_ivarlooseAux.", "TrigMatch_HLT_e28_lhmedium_nod0_mu8noL1Aux.", "TrigMatch_HLT_e28_lhtight_nod0_L1EM22VHIAux.", "TrigMatch_HLT_e28_lhtight_nod0_e15_etcut_L1EM7_ZeeAux.", "TrigMatch_HLT_e28_lhtight_nod0_ivarlooseAux.", "TrigMatch_HLT_e28_lhtight_nod0_noringer_ivarlooseAux.", "TrigMatch_HLT_e300_etcutAux.", "TrigMatch_HLT_e60_lhmedium_nod0Aux.", "TrigMatch_HLT_e60_lhmedium_nod0_L1EM24VHIAux.", "TrigMatch_HLT_e7_lhmedium_nod0_mu24Aux.", "TrigMatch_HLT_e9_lhvloose_nod0_mu20_mu8noL1Aux.", "TrigMatch_HLT_e9_lhvloose_nod0_mu20_mu8noL1_L1EM7_MU20Aux.", "TrigMatch_HLT_g120_looseAux.", "TrigMatch_HLT_g140_looseAux.", "TrigMatch_HLT_g140_tightAux.", "TrigMatch_HLT_g200_etcutAux.", "TrigMatch_HLT_g200_looseAux.", "TrigMatch_HLT_g300_etcutAux.", "TrigMatch_HLT_g300_etcut_L1EM24VHIAux.", "TrigMatch_HLT_g35_loose_g25_looseAux.", "TrigMatch_HLT_g35_loose_g25_loose_L12EM20VHAux.", "TrigMatch_HLT_g35_medium_g25_medium_L12EM20VHAux.", "TrigMatch_HLT_g35_medium_g25_medium_L1EM7_EMPTYAux.", "TrigMatch_HLT_g35_medium_g25_medium_L1EM7_UNPAIRED_ISOAux.", "TrigMatch_HLT_id_cosmicid_L1MU11_EMPTYAux.", "TrigMatch_HLT_mu13_mu13_idperf_ZmumuAux.", "TrigMatch_HLT_mu14_ivarloose_L1MU11_tau35_medium1_tracktwoEF_L1MU11_TAU20IMAux.", "TrigMatch_HLT_mu14_ivarloose_L1MU11_tau35_medium1_tracktwoMVA_L1MU11_TAU20IMAux.", "TrigMatch_HLT_mu14_ivarloose_L1MU11_tau35_medium1_tracktwo_L1MU11_TAU20IMAux.", "TrigMatch_HLT_mu14_ivarloose_L1MU11_tau35_mediumRNN_tracktwoMVA_L1MU11_TAU20IMAux.", "TrigMatch_HLT_mu14_ivarloose_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_mu14_ivarloose_tau25_medium1_tracktwoEFAux.", "TrigMatch_HLT_mu14_ivarloose_tau25_medium1_tracktwoEF_L1DR-MU10TAU12I_TAU12I-J25Aux.", "TrigMatch_HLT_mu14_ivarloose_tau25_medium1_tracktwoEF_L1MU10_TAU12IM_3J12Aux.", "TrigMatch_HLT_mu14_ivarloose_tau25_medium1_tracktwoMVA_L1DR-MU10TAU12I_TAU12I-J25Aux.", "TrigMatch_HLT_mu14_ivarloose_tau25_medium1_tracktwoMVA_L1MU10_TAU12IM_3J12Aux.", "TrigMatch_HLT_mu14_ivarloose_tau25_medium1_tracktwo_L1DR-MU10TAU12I_TAU12I-J25Aux.", "TrigMatch_HLT_mu14_ivarloose_tau25_medium1_tracktwo_L1MU10_TAU12IM_3J12Aux.", "TrigMatch_HLT_mu14_ivarloose_tau25_mediumRNN_tracktwoMVAAux.", "TrigMatch_HLT_mu14_ivarloose_tau25_mediumRNN_tracktwoMVA_L1DR-MU10TAU12I_TAU12I-J25Aux.", "TrigMatch_HLT_mu14_ivarloose_tau25_mediumRNN_tracktwoMVA_L1MU10_TAU12IM_3J12Aux.", "TrigMatch_HLT_mu14_ivarloose_tau35_medium1_tracktwoAux.", "TrigMatch_HLT_mu14_ivarloose_tau35_medium1_tracktwoEFAux.", "TrigMatch_HLT_mu14_ivarloose_tau35_medium1_tracktwoEF_L1MU10_TAU20IM_J25_2J20Aux.", "TrigMatch_HLT_mu14_ivarloose_tau35_medium1_tracktwoMVA_L1MU10_TAU20IM_J25_2J20Aux.", "TrigMatch_HLT_mu14_ivarloose_tau35_medium1_tracktwo_L1MU10_TAU20IM_J25_2J20Aux.", "TrigMatch_HLT_mu14_ivarloose_tau35_mediumRNN_tracktwoMVAAux.", "TrigMatch_HLT_mu14_ivarloose_tau35_mediumRNN_tracktwoMVA_L1MU10_TAU20IM_J25_2J20Aux.", "TrigMatch_HLT_mu20_2mu2noL1_JpsimumuFSAux.", "TrigMatch_HLT_mu20_2mu4_JpsimumuL2Aux.", "TrigMatch_HLT_mu20_2mu4noL1Aux.", "TrigMatch_HLT_mu20_ivarmedium_mu8noL1Aux.", "TrigMatch_HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU4_UNPAIRED_ISOAux.", "TrigMatch_HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU6_EMPTYAux.", "TrigMatch_HLT_mu20_msonly_mu15noL1_msonly_nscan05_noCombAux.", "TrigMatch_HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU4_UNPAIRED_ISOAux.", "TrigMatch_HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU6_EMPTYAux.", "TrigMatch_HLT_mu20_msonly_mu6noL1_msonly_nscan05Aux.", "TrigMatch_HLT_mu22_mu8noL1Aux.", "TrigMatch_HLT_mu22_mu8noL1_TagandProbeAux.", "TrigMatch_HLT_mu24_ivarmediumAux.", "TrigMatch_HLT_mu24_mu8noL1Aux.", "TrigMatch_HLT_mu26_ivarmediumAux.", "TrigMatch_HLT_mu50Aux.", "TrigMatch_HLT_mu60Aux.", "TrigMatch_HLT_mu60_0eta105_msonlyAux.", "TrigMatch_HLT_mu6_2mu4Aux.", "TrigMatch_HLT_mu6_dRl1_mu20_msonly_iloosems_mu6noL1_dRl1_msonlyAux.", "TrigMatch_HLT_mu6_nomucomb_2mu4_nomucomb_L1MU6_3MU4Aux.", "TrigMatch_HLT_mu80_msonly_3layersECAux.", "TrigMatch_HLT_tau125_medium1_tracktwoAux.", "TrigMatch_HLT_tau160_medium1_tracktwoAux.", "TrigMatch_HLT_tau160_medium1_tracktwoEF_L1TAU100Aux.", "TrigMatch_HLT_tau160_medium1_tracktwoMVA_L1TAU100Aux.", "TrigMatch_HLT_tau160_medium1_tracktwo_L1TAU100Aux.", "TrigMatch_HLT_tau160_mediumRNN_tracktwoMVA_L1TAU100Aux.", "TrigMatch_HLT_tau35_loose1_tracktwo_tau25_loose1_tracktwoAux.", "TrigMatch_HLT_tau35_medium1_tracktwoEF_tau25_medium1_tracktwoEF_03dR30_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau35_medium1_tracktwoEF_tau25_medium1_tracktwoEF_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau35_medium1_tracktwoEF_tau25_medium1_tracktwoEF_L1TAU20IM_2TAU12IM_4J12_0ETA23Aux.", "TrigMatch_HLT_tau35_medium1_tracktwoMVA_tau25_medium1_tracktwoMVA_03dR30_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau35_medium1_tracktwoMVA_tau25_medium1_tracktwoMVA_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau35_medium1_tracktwoMVA_tau25_medium1_tracktwoMVA_L1TAU20IM_2TAU12IM_4J12_0ETA23Aux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_03dR30_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_L1TAU20IM_2TAU12IMAux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_L1TAU20IM_2TAU12IM_4J12Aux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_L1TAU20IM_2TAU12IM_4J12_0ETA23Aux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_tautsf_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau35_mediumRNN_tracktwoMVA_tau25_mediumRNN_tracktwoMVA_03dR30_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau35_mediumRNN_tracktwoMVA_tau25_mediumRNN_tracktwoMVA_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau35_mediumRNN_tracktwoMVA_tau25_mediumRNN_tracktwoMVA_L1TAU20IM_2TAU12IM_4J12_0ETA23Aux.", "TrigMatch_HLT_tau40_medium1_tracktwoEF_tau35_medium1_tracktwoEFAux.", "TrigMatch_HLT_tau40_medium1_tracktwoMVA_tau35_medium1_tracktwoMVAAux.", "TrigMatch_HLT_tau40_medium1_tracktwo_tau35_medium1_tracktwoAux.", "TrigMatch_HLT_tau40_mediumRNN_tracktwoMVA_tau35_mediumRNN_tracktwoMVAAux.", "TrigMatch_HLT_tau60_medium1_tracktwo_tau35_medium1_tracktwoAux.", "TrigMatch_HLT_tau80_medium1_tracktwoEF_L1TAU60_tau35_medium1_tracktwoEF_L1TAU12IM_L1TAU60_DR-TAU20ITAU12IAux.", "TrigMatch_HLT_tau80_medium1_tracktwoEF_L1TAU60_tau60_medium1_tracktwoEF_L1TAU40Aux.", "TrigMatch_HLT_tau80_medium1_tracktwoMVA_L1TAU60_tau35_medium1_tracktwoMVA_L1TAU12IM_L1TAU60_DR-TAU20ITAU12IAux.", "TrigMatch_HLT_tau80_medium1_tracktwoMVA_L1TAU60_tau60_medium1_tracktwoMVA_L1TAU40Aux.", "TrigMatch_HLT_tau80_medium1_tracktwo_L1TAU60Aux.", "TrigMatch_HLT_tau80_medium1_tracktwo_L1TAU60_tau35_medium1_tracktwo_L1TAU12IM_L1TAU60_DR-TAU20ITAU12IAux.", "TrigMatch_HLT_tau80_medium1_tracktwo_L1TAU60_tau50_medium1_tracktwo_L1TAU12Aux.", "TrigMatch_HLT_tau80_medium1_tracktwo_L1TAU60_tau60_medium1_tracktwo_L1TAU40Aux.", "TrigMatch_HLT_tau80_mediumRNN_tracktwoMVA_L1TAU60_tau35_mediumRNN_tracktwoMVA_L1TAU12IM_L1TAU60_DR-TAU20ITAU12IAux.", "TrigMatch_HLT_tau80_mediumRNN_tracktwoMVA_L1TAU60_tau60_mediumRNN_tracktwoMVA_L1TAU40Aux.", "egammaClustersAux.", "METAssoc_AntiKt4EMPFlowAux.", "METAssoc_AntiKt4EMTopoAux.", ] diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS_MCCompressionList.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS_MCCompressionList.py index fafd173090ff8da74e22bdaa833e26b3e7b3e48a..03ce7922fa175409fe83137a321f625cd69696ee 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS_MCCompressionList.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS_MCCompressionList.py @@ -1,3 +1,5 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + PHYS_MCCompressionList=[ "SoftBVrtClusterTool_Loose_VerticesAux.", "SoftBVrtClusterTool_Medium_VerticesAux.", "SoftBVrtClusterTool_Tight_VerticesAux.", "AntiKt10LCTopoJetsAux.", "AntiKt10LCTopoTrimmedPtFrac5SmallR20JetsAux.", "AntiKt10TruthTrimmedPtFrac5SmallR20JetsAux.", "AntiKt2PV0TrackJetsAux.", "AntiKt4EMPFlowJetsAux.", "AntiKt4EMTopoJetsAux.", "AntiKt4TruthDressedWZJetsAux.", "AntiKtVR30Rmax4Rmin02TrackJets_BTagging201903Aux.", "AntiKt4EMPFlowJets_BTagging201810Aux.", "AntiKt4EMPFlowJets_BTagging201903Aux.", "AntiKt4EMTopoJets_BTagging201810Aux.", "xTrigDecisionAux.", "Kt4EMPFlowEventShapeAux.", "Kt4EMTopoOriginEventShapeAux.", "NeutralParticleFlowIsoCentralEventShapeAux.", "NeutralParticleFlowIsoForwardEventShapeAux.", "TopoClusterIsoCentralEventShapeAux.", "TopoClusterIsoForwardEventShapeAux.", "BTagging_AntiKt4EMPFlow_201810Aux.", "BTagging_AntiKt4EMPFlow_201903Aux.", "BTagging_AntiKt4EMTopo_201810Aux.", "BTagging_AntiKtVR30Rmax4Rmin02Track_201903Aux.", "BornLeptonsAux.", "CombinedMuonTrackParticlesAux.", "DiTauJetsAux.", "DiTauJetsLowPtAux.", "ElectronsAux.", "GSFConversionVerticesAux.", "GSFTrackParticlesAux.", "HardScatterParticlesAux.", "HardScatterVerticesAux.", "InDetForwardTrackParticlesAux.", "InDetTrackParticlesAux.", "MET_Core_AntiKt4EMPFlowAux.", "MET_Core_AntiKt4EMTopoAux.", "MET_TrackAux.", "MET_TruthAux.", "MuonSpectrometerTrackParticlesAux.", "MuonsAux.", "PhotonsAux.", "PrimaryVerticesAux.", "TauJetsAux.", "TauTracksAux.", "TrigMatch_HLT_2e12_lhloose_nod0_mu10Aux.", "TrigMatch_HLT_2e12_lhloose_nodeta_L12EM10VHAux.", "TrigMatch_HLT_2e12_lhloose_nodphires_L12EM10VHAux.", "TrigMatch_HLT_2e17_lhvloose_nod0Aux.", "TrigMatch_HLT_2e17_lhvloose_nod0_L12EM15VHIAux.", "TrigMatch_HLT_2e17_lhvloose_nod0_ringerAux.", "TrigMatch_HLT_2e17_lhvloose_nod0_ringer_L12EM15VHIAux.", "TrigMatch_HLT_2e24_lhvloose_nod0Aux.", "TrigMatch_HLT_2g20_loose_g15_looseAux.", "TrigMatch_HLT_2g20_tightAux.", "TrigMatch_HLT_2g20_tight_icalovloose_L12EM15VHIAux.", "TrigMatch_HLT_2g22_tightAux.", "TrigMatch_HLT_2g22_tight_L12EM15VHIAux.", "TrigMatch_HLT_2g22_tight_L1EM7_EMPTYAux.", "TrigMatch_HLT_2g22_tight_L1EM7_UNPAIRED_ISOAux.", "TrigMatch_HLT_2g22_tight_icalovlooseAux.", "TrigMatch_HLT_2g25_loose_g15_looseAux.", "TrigMatch_HLT_2g25_tight_L12EM20VHAux.", "TrigMatch_HLT_2g50_loose_L12EM20VHAux.", "TrigMatch_HLT_2mu10Aux.", "TrigMatch_HLT_2mu10_nomucombAux.", "TrigMatch_HLT_2mu14Aux.", "TrigMatch_HLT_2mu14_nomucombAux.", "TrigMatch_HLT_2mu20_L12MU20_OVERLAYAux.", "TrigMatch_HLT_2mu4_mu3_mu2noL1_L13MU4Aux.", "TrigMatch_HLT_2mu4_mu3_mu2noL1_calotag_0eta010_L13MU4Aux.", "TrigMatch_HLT_2mu6_10invm30_pt2_z10Aux.", "TrigMatch_HLT_3g20_looseAux.", "TrigMatch_HLT_3mu3_mu3noL1_L13MU4Aux.", "TrigMatch_HLT_3mu3_mu3noL1_calotag_0eta010_L13MU4Aux.", "TrigMatch_HLT_3mu4Aux.", "TrigMatch_HLT_3mu4_mu2noL1Aux.", "TrigMatch_HLT_3mu4_mu2noL1_calotag_0eta010Aux.", "TrigMatch_HLT_3mu4_nomucombAux.", "TrigMatch_HLT_3mu4_nomucomb_mu2noL1Aux.", "TrigMatch_HLT_3mu6Aux.", "TrigMatch_HLT_3mu6_msonlyAux.", "TrigMatch_HLT_3mu6_msonly_L1MU4_UNPAIRED_ISOAux.", "TrigMatch_HLT_3mu6_msonly_L1MU6_EMPTYAux.", "TrigMatch_HLT_4mu4Aux.", "TrigMatch_HLT_4mu4_nomucombAux.", "TrigMatch_HLT_e120_lhloose_nod0Aux.", "TrigMatch_HLT_e12_lhloose_nod0_2mu10Aux.", "TrigMatch_HLT_e140_lhloose_nod0Aux.", "TrigMatch_HLT_e140_lhloose_nod0_L1EM24VHIAux.", "TrigMatch_HLT_e140_lhloose_nod0_ringerAux.", "TrigMatch_HLT_e140_lhvloose_nod0Aux.", "TrigMatch_HLT_e160_lhvloose_nod0Aux.", "TrigMatch_HLT_e17_lhloose_nod0_2e12_lhloose_nod0_L1EM15VH_3EM10VHAux.", "TrigMatch_HLT_e17_lhloose_nod0_2e9_lhloose_nod0Aux.", "TrigMatch_HLT_e17_lhloose_nod0_mu14Aux.", "TrigMatch_HLT_e17_lhmedium_iloose_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_e17_lhmedium_nod0_iloose_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_medium1_tracktwo_L1DR-EM15TAU12I-J25Aux.", "TrigMatch_HLT_e17_lhmedium_nod0_ivarloose_tau25_medium1_tracktwo_L1EM15VHI_2TAU12IM_4J12Aux.", "TrigMatch_HLT_e17_lhmedium_nod0_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_e17_lhmedium_nod0_tau80_medium1_tracktwoAux.", "TrigMatch_HLT_e17_lhmedium_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_e17_lhmedium_tau80_medium1_tracktwoAux.", "TrigMatch_HLT_e200_etcutAux.", "TrigMatch_HLT_e22_lhvloose_nod0_e12_lhvloose_nod0_e10_lhvloose_nod0_L1EM20VH_2EM10VH_3EM8VHAux.", "TrigMatch_HLT_e24_lhmedium_nod0_L1EM20VHI_mu8noL1Aux.", "TrigMatch_HLT_e24_lhmedium_nod0_ivarloose_tau35_medium1_tracktwoAux.", "TrigMatch_HLT_e24_lhtight_nod0_ivarlooseAux.", "TrigMatch_HLT_e24_lhvloose_nod0_2e12_lhvloose_nod0_L1EM20VH_3EM10VHAux.", "TrigMatch_HLT_e26_lhloose_nod0Aux.", "TrigMatch_HLT_e26_lhloose_nod0_ringerAux.", "TrigMatch_HLT_e26_lhmedium_nod0_mu8noL1Aux.", "TrigMatch_HLT_e26_lhtight_cutd0dphideta_ivarlooseAux.", "TrigMatch_HLT_e26_lhtight_nod0Aux.", "TrigMatch_HLT_e26_lhtight_nod0_e15_etcut_L1EM7_ZeeAux.", "TrigMatch_HLT_e26_lhtight_nod0_ivarlooseAux.", "TrigMatch_HLT_e26_lhtight_nod0_ringer_ivarlooseAux.", "TrigMatch_HLT_e28_lhmedium_nod0_mu8noL1Aux.", "TrigMatch_HLT_e28_lhtight_nod0_L1EM22VHIAux.", "TrigMatch_HLT_e28_lhtight_nod0_e15_etcut_L1EM7_ZeeAux.", "TrigMatch_HLT_e28_lhtight_nod0_ivarlooseAux.", "TrigMatch_HLT_e28_lhtight_nod0_noringer_ivarlooseAux.", "TrigMatch_HLT_e28_lhtight_nod0_ringer_ivarlooseAux.", "TrigMatch_HLT_e300_etcutAux.", "TrigMatch_HLT_e60_lhmedium_nod0Aux.", "TrigMatch_HLT_e60_lhmedium_nod0_L1EM24VHIAux.", "TrigMatch_HLT_e60_lhmedium_nod0_ringerAux.", "TrigMatch_HLT_e60_mediumAux.", "TrigMatch_HLT_e7_lhmedium_nod0_mu24Aux.", "TrigMatch_HLT_g120_looseAux.", "TrigMatch_HLT_g140_looseAux.", "TrigMatch_HLT_g140_tightAux.", "TrigMatch_HLT_g200_etcutAux.", "TrigMatch_HLT_g200_looseAux.", "TrigMatch_HLT_g300_etcutAux.", "TrigMatch_HLT_g300_etcut_L1EM24VHIAux.", "TrigMatch_HLT_g35_loose_g25_looseAux.", "TrigMatch_HLT_g35_loose_g25_loose_L12EM20VHAux.", "TrigMatch_HLT_g35_medium_g25_medium_L12EM20VHAux.", "TrigMatch_HLT_g35_medium_g25_medium_L1EM7_EMPTYAux.", "TrigMatch_HLT_g35_medium_g25_medium_L1EM7_UNPAIRED_ISOAux.", "TrigMatch_HLT_id_cosmicid_L1MU11_EMPTYAux.", "TrigMatch_HLT_mu11_2mu4noL1_nscan03_L1MU11_2MU6Aux.", "TrigMatch_HLT_mu11_L1MU10_2mu4noL1_nscan03_L1MU10_2MU6Aux.", "TrigMatch_HLT_mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6Aux.", "TrigMatch_HLT_mu13_mu13_idperf_ZmumuAux.", "TrigMatch_HLT_mu14_iloose_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_mu14_iloose_tau35_medium1_tracktwoAux.", "TrigMatch_HLT_mu14_ivarloose_L1MU11_tau35_medium1_tracktwo_L1MU11_TAU20IMAux.", "TrigMatch_HLT_mu14_ivarloose_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_mu14_ivarloose_tau25_medium1_tracktwo_L1DR-MU10TAU12I_TAU12I-J25Aux.", "TrigMatch_HLT_mu14_ivarloose_tau25_medium1_tracktwo_L1MU10_TAU12IM_3J12Aux.", "TrigMatch_HLT_mu14_ivarloose_tau35_medium1_tracktwoAux.", "TrigMatch_HLT_mu14_ivarloose_tau35_medium1_tracktwo_L1MU10_TAU20IM_J25_2J20Aux.", "TrigMatch_HLT_mu14_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_mu14_tau35_medium1_tracktwoAux.", "TrigMatch_HLT_mu20_2mu2noL1_JpsimumuFSAux.", "TrigMatch_HLT_mu20_2mu4_JpsimumuL2Aux.", "TrigMatch_HLT_mu20_2mu4noL1Aux.", "TrigMatch_HLT_mu20_ivarmedium_mu8noL1Aux.", "TrigMatch_HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU4_UNPAIRED_ISOAux.", "TrigMatch_HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU6_EMPTYAux.", "TrigMatch_HLT_mu20_msonly_mu10noL1_msonly_nscan05_noCombAux.", "TrigMatch_HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb_L1MU4_UNPAIRED_ISOAux.", "TrigMatch_HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb_L1MU6_EMPTYAux.", "TrigMatch_HLT_mu20_msonly_mu15noL1_msonly_nscan05_noCombAux.", "TrigMatch_HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU4_UNPAIRED_ISOAux.", "TrigMatch_HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU6_EMPTYAux.", "TrigMatch_HLT_mu20_msonly_mu6noL1_msonly_nscan05Aux.", "TrigMatch_HLT_mu20_mu8noL1Aux.", "TrigMatch_HLT_mu20_mu8noL1_calotag_0eta010Aux.", "TrigMatch_HLT_mu20_mu8noL1_e9_lhvloose_nod0Aux.", "TrigMatch_HLT_mu20_mu8noL1_e9_lhvloose_nod0_L1EM7_MU20Aux.", "TrigMatch_HLT_mu20_nomucomb_mu6noL1_nscan03Aux.", "TrigMatch_HLT_mu22_mu8noL1Aux.", "TrigMatch_HLT_mu22_mu8noL1_calotag_0eta010Aux.", "TrigMatch_HLT_mu24_ilooseAux.", "TrigMatch_HLT_mu24_imediumAux.", "TrigMatch_HLT_mu24_ivarlooseAux.", "TrigMatch_HLT_mu24_ivarmediumAux.", "TrigMatch_HLT_mu24_mu8noL1Aux.", "TrigMatch_HLT_mu26_ivarmediumAux.", "TrigMatch_HLT_mu40Aux.", "TrigMatch_HLT_mu50Aux.", "TrigMatch_HLT_mu60Aux.", "TrigMatch_HLT_mu60_0eta105_msonlyAux.", "TrigMatch_HLT_mu6_2mu4Aux.", "TrigMatch_HLT_mu6_dRl1_mu20_msonly_iloosems_mu6noL1_dRl1_msonlyAux.", "TrigMatch_HLT_mu6_iloose_mu6_11invm24_noosAux.", "TrigMatch_HLT_mu6_nomucomb_2mu4_nomucomb_L1MU6_3MU4Aux.", "TrigMatch_HLT_tau125_medium1_trackAux.", "TrigMatch_HLT_tau125_medium1_tracktwoAux.", "TrigMatch_HLT_tau160_medium1_tracktwoAux.", "TrigMatch_HLT_tau160_medium1_tracktwo_L1TAU100Aux.", "TrigMatch_HLT_tau35_loose1_tracktwo_tau25_loose1_tracktwoAux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwoAux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_03dR30Aux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_03dR30_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_L1TAU20IM_2TAU12IMAux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_L1TAU20IM_2TAU12IM_4J12Aux.", "TrigMatch_HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_tautsf_L1DR-TAU20ITAU12I-J25Aux.", "TrigMatch_HLT_tau40_medium1_tracktwo_tau35_medium1_tracktwoAux.", "TrigMatch_HLT_tau60_medium1_tracktwo_tau35_medium1_tracktwoAux.", "TrigMatch_HLT_tau80_medium1_tracktwo_L1TAU60Aux.", "TrigMatch_HLT_tau80_medium1_tracktwo_L1TAU60_tau35_medium1_tracktwo_L1TAU12IM_L1TAU60_DR-TAU20ITAU12IAux.", "TrigMatch_HLT_tau80_medium1_tracktwo_L1TAU60_tau50_medium1_tracktwo_L1TAU12Aux.", "TrigMatch_HLT_tau80_medium1_tracktwo_L1TAU60_tau60_medium1_tracktwo_L1TAU40Aux.", "TruthBSMAux.", "TruthBSMWithDecayParticlesAux.", "TruthBSMWithDecayVerticesAux.", "TruthBosonAux.", "TruthBosonsWithDecayParticlesAux.", "TruthBosonsWithDecayVerticesAux.", "TruthBottomAux.", "TruthCharmAux.", "TruthElectronsAux.", "TruthEventsAux.", "TruthForwardProtonsAux.", "TruthHFWithDecayParticlesAux.", "TruthHFWithDecayVerticesAux.", "TruthMuonsAux.", "TruthNeutrinosAux.", "TruthPhotonsAux.", "TruthPrimaryVerticesAux.", "TruthTausAux.", "TruthTopAux.", "egammaClustersAux.", "METAssoc_AntiKt4EMPFlowAux.", "METAssoc_AntiKt4EMTopoAux.", ] diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYS.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYS.py index 972575733b07335a334a03e36c064ff0ce50426b..a2a1d00220dce3654326ab37abbaf7a7c30b3854 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYS.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYS.py @@ -275,8 +275,8 @@ PHYSSlimmingHelper.SmartCollections = ["Electrons", "AntiKt4EMTopoJets", "AntiKt4EMPFlowJets", "BTagging_AntiKt4EMPFlow", - #"MET_Baseline_AntiKt4EMTopo", - #"MET_Baseline_AntiKt4EMPFlow", + "MET_Baseline_AntiKt4EMTopo", + "MET_Baseline_AntiKt4EMPFlow", "TauJets", "DiTauJets", "DiTauJetsLowPt", diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkSM/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkSM/CMakeLists.txt index 7d6ef45df2edd8c1b78764105f4866b24bf68488..6130e7da2dc08b7a53a0ccee04b4282ba56dab8b 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkSM/CMakeLists.txt +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkSM/CMakeLists.txt @@ -4,6 +4,6 @@ atlas_subdir( DerivationFrameworkSM ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkSM/python/STDMCommonTruthTools.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkSM/python/STDMCommonTruthTools.py index 5e297ab3634e447b797d4e674d2aa2bf03a8f7c0..3029bfb2429ec6fcdad3325f79b8d7a3ff27ffc1 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkSM/python/STDMCommonTruthTools.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkSM/python/STDMCommonTruthTools.py @@ -1,7 +1,8 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +from AthenaCommon import CfgMgr from AthenaCommon.AppMgr import ToolSvc -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from DerivationFrameworkCore.DerivationFrameworkMaster import DerivationFrameworkJob #============================================================================== # Set up the MCTruthClassifier @@ -124,5 +125,4 @@ STDMAugmentationTools.append(STDMMuonDressingTool2) #============================================================================== # CREATE THE COMMON AUGMENTATION KERNEL ALGORITHM #============================================================================== -from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation DerivationFrameworkJob += CfgMgr.DerivationFramework__CommonAugmentation("STDMAugmentationKernel", AugmentationTools = STDMAugmentationTools) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/CMakeLists.txt index 85da10191b61be3601524c0a49b650b4424f18d2..41f22685aef49cd0444c4f83f93469d1742589d2 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/CMakeLists.txt +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/CMakeLists.txt @@ -9,5 +9,5 @@ atlas_add_component( DerivationFrameworkTop LINK_LIBRARIES AthenaBaseComps DerivationFrameworkInterfaces ExpressionEvaluationLib GaudiKernel StoreGateLib xAODBTagging xAODEventInfo xAODJet xAODTracking xAODTruth ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonJets.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonJets.py index dc48423a9685daf416bd6fa57f7a84c9ed57eb56..733bedfdba6c62fb70d25f75073acf54679ff532 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonJets.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonJets.py @@ -9,12 +9,10 @@ # DerivationFrameworkTop.TOPQCommonJets.TOPQupdateJVT("JetCollection") #=================================================================================== -from __future__ import print_function - #======== # IMPORTS #======== -from DerivationFrameworkCore.DerivationFrameworkMaster import * +from AthenaCommon import CfgMgr from AthenaCommon.GlobalFlags import globalflags from RecExConfig.ObjKeyStore import cfgKeyStore @@ -99,6 +97,7 @@ def addStandardJetsForTop(algseq, outputGroup): #================== # PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/trunk/python/ExtendedJetCommon.py def buildTOPQCA15jets(algseq): + from JetRec.JetRecStandard import jtm if not cfgKeyStore.isInInput("xAOD::JetContainer","CamKt15LCTopoJets"): from JetRec.JetRecConf import JetAlgorithm jtm.modifiersMap["lctopoCA15"] = list(jtm.modifiersMap["lctopo"]) @@ -123,7 +122,7 @@ def applyTOPQJetCalibration(jetcollection, algseq=None): applyJetCalibration_xAODColl, applyJetCalibration_CustomColl supportedJets = ['AntiKt4EMTopo', 'AntiKt10LCTopoTrimmedPtFrac5SmallR20'] - if not jetcollection in supportedJets: + if jetcollection not in supportedJets: print ("TOPQCommonJets:",jetcollection, "is an unsupported collection for calibration!") return elif jetcollection == 'AntiKt4EMTopo': @@ -140,7 +139,7 @@ def TOPQupdateJVT(jetcollection, algseq=None): from DerivationFrameworkJetEtMiss.ExtendedJetCommon import updateJVT_xAODColl supportedJets = ['AntiKt4EMTopo'] - if not jetcollection in supportedJets: + if jetcollection not in supportedJets: print ("TOPQCommonJets:", jetcollection, "is an unsupported collection for JVT augmentation!") return else: diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonSelection.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonSelection.py index 0cde41ad846e51aad891065594c3151bda5305ce..21e126a3c71a20209243daa141bdea6837fc098f 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonSelection.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonSelection.py @@ -8,8 +8,6 @@ # skimmingTools_jet = DerivationFrameworkTop.TOPQCommonSelection.setup_jet('TOPQ1', ToolSvc) #==================================================================== -from __future__ import print_function - #================================ # SKIMMING SELECTIONS #================================ @@ -43,7 +41,7 @@ from __future__ import print_function #================================ # IMPORTS #================================ -from DerivationFrameworkCore.DerivationFrameworkMaster import * +import DerivationFrameworkCore.DerivationFrameworkMaster # noqa: F401 #================ # ELECTRONS @@ -105,9 +103,9 @@ def setup_lep(TOPQname, ToolSvc): elif TOPQname == 'TOPQ2': TOPQ2_LEP10 = "( (count("+EL10+") >= 2) || (count("+MU10+") >= 2) || (count("+EL10+")>= 1 && count("+MU10+") >= 1) )" TOPQ2_LEP15 = "( (count("+EL15+") >= 2) || (count("+MU15+") >= 2) || (count("+EL15+")>= 1 && count("+MU15+") >= 1) )" - TOPQ2_LEP17 = "( (count("+EL17+") >= 2) || (count("+MU17+") >= 2) || (count("+EL17+")>= 1 && count("+MU17+") >= 1) )" + TOPQ2_LEP17 = "( (count("+EL17+") >= 2) || (count("+MU17+") >= 2) || (count("+EL17+")>= 1 && count("+MU17+") >= 1) )" # noqa: F841 (FIXME, not used) TOPQ2_LEP20 = "( (count("+EL20+") >= 1) || (count("+MU20+") >= 1) )" - TOPQ2_LEP22 = "( (count("+EL22+") >= 1) || (count("+MU22+") >= 1) )" + TOPQ2_LEP22 = "( (count("+EL22+") >= 1) || (count("+MU22+") >= 1) )" # noqa: F841 (FIXME, not used) TOPQ_Selection_lep = "( ("+TOPQ2_LEP15+") || (("+TOPQ2_LEP10+") && ("+TOPQ2_LEP20+")) )" elif TOPQname == 'TOPQ3': TOPQ_Selection_lep = "( (count("+MU13+") >= 1) || (count("+EL13+") >= 1) )" diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonSlimming.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonSlimming.py index f8a6f7a2534d478fdf4a435640cd0013edb24bed..23d3000091e435ee911398b1e2f0bec465e2d695 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonSlimming.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonSlimming.py @@ -7,16 +7,14 @@ # DerivationFrameworkTop.TOPQCommonSlimming.setup('TOPQX', TOPQStream) #==================================================================== -from __future__ import print_function - #================================ # IMPORTS #================================ from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper from AthenaCommon.GlobalFlags import globalflags -from DerivationFrameworkTop.TOPQCommonExtraContent import * -from DerivationFrameworkJetEtMiss.METCommon import * -from DerivationFrameworkJetEtMiss.JetCommon import * +import DerivationFrameworkTop.TOPQCommonExtraContent as tec +from DerivationFrameworkJetEtMiss.METCommon import addMETOutputs +from DerivationFrameworkJetEtMiss.JetCommon import addJetOutputs import JetTagNonPromptLepton.JetTagNonPromptLeptonConfig as Config @@ -34,7 +32,7 @@ def setup(TOPQname, stream): # SMART SLIMMING #================================ TOPQSlimmingHelper.SmartCollections = [] - TOPQSlimmingHelper.SmartCollections += TOPQSmartSlimmingCollections + TOPQSlimmingHelper.SmartCollections += tec.TOPQSmartSlimmingCollections print ("TOPQSlimmingHelper.SmartCollections: " , TOPQSlimmingHelper.SmartCollections) @@ -42,27 +40,27 @@ def setup(TOPQname, stream): # EXTRA VARIABLES FROM DerivationFrameworkTop.TOPQCommonExtraContent #================================================================= TOPQSlimmingHelper.ExtraVariables = [] - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesAntiKt4EMTopoJets - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesAntiKt4EMPFlowJets - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesBTagging_AntiKt4EMPFlow - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesBTagging_AntiKt4EMTopo - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesPhotons - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesElectrons - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesMuons - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesTaus - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesTrackJets + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesAntiKt4EMTopoJets + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesAntiKt4EMPFlowJets + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesBTagging_AntiKt4EMPFlow + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesBTagging_AntiKt4EMTopo + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesPhotons + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesElectrons + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesMuons + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesTaus + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesTrackJets TOPQSlimmingHelper.ExtraVariables += Config.GetExtraPromptVariablesForDxAOD() # TOPQSlimmingHelper.ExtraVariables += ["CaloCalTopoClusters.calE.calEta.calPhi.calM.rawM.rawE.rawEta.rawPhi.e_sampl.eta_sampl.etaCalo.phiCalo"] TOPQSlimmingHelper.ExtraVariables += ["CaloCalTopoClusters.calPt.calEta.calPhi.calM.calE.CENTER_MAG"] if DFisMC: - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesPhotonsTruth - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesElectronsTruth - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesMuonsTruth - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVariablesTausTruth - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVarsBTag_HLT_Container - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVarsJet_EF_Container - TOPQSlimmingHelper.ExtraVariables += TOPQExtraVarsJet_Split_Container + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesPhotonsTruth + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesElectronsTruth + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesMuonsTruth + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVariablesTausTruth + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVarsBTag_HLT_Container + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVarsJet_EF_Container + TOPQSlimmingHelper.ExtraVariables += tec.TOPQExtraVarsJet_Split_Container print ("TOPQSlimmingHelper.ExtraVariables: " , TOPQSlimmingHelper.ExtraVariables) @@ -70,11 +68,11 @@ def setup(TOPQname, stream): # EXTRA COLLECTIONS - user added #================================ TOPQSlimmingHelper.AllVariables = [] - TOPQSlimmingHelper.AllVariables += TOPQExtraContainersStandard - TOPQSlimmingHelper.AllVariables += TOPQExtraContainersTrigger + TOPQSlimmingHelper.AllVariables += tec.TOPQExtraContainersStandard + TOPQSlimmingHelper.AllVariables += tec.TOPQExtraContainersTrigger if DFisMC: - TOPQSlimmingHelper.AllVariables += TOPQExtraContainersTruth + TOPQSlimmingHelper.AllVariables += tec.TOPQExtraContainersTruth print ("TOPQSlimmingHelper.AllVariables: " , TOPQSlimmingHelper.AllVariables) @@ -82,10 +80,10 @@ def setup(TOPQname, stream): # CREATED ON-THE-FLY COLLECTIONS #================================ TOPQSlimmingHelper.StaticContent = [] - TOPQSlimmingHelper.StaticContent += TOPQStaticContent + TOPQSlimmingHelper.StaticContent += tec.TOPQStaticContent if DFisMC: - TOPQSlimmingHelper.StaticContent += TOPQStaticContentTruth + TOPQSlimmingHelper.StaticContent += tec.TOPQStaticContentTruth print ("TOPQSlimmingHelper.StaticContent: " , TOPQSlimmingHelper.StaticContent) diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonThinning.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonThinning.py index 2b09791d3fe420340aae462e756ca0b655a5c9c7..7e26d7944225b1dae9943e75c767a4e99dcf5081 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonThinning.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonThinning.py @@ -19,8 +19,6 @@ # * GenericTruthThinning (fine-grained thinning) #==================================================================== -from __future__ import print_function - #============================ # Define trigger chain output #============================ @@ -54,13 +52,13 @@ def setup(TOPQname, streamName, ToolSvc): # Track Particle Thinning !!! BUGGY (yes, that's a technical term)...CURRENTLY NOT USING !!! #======================== # PhysicsAnalysis/DerivationFramework/DerivationFrameworkInDet/trunk/src/TrackParticleThinning.cxx - thinning_expression = "(InDetTrackParticles.pt > 0.5*GeV) && (InDetTrackParticles.numberOfPixelHits > 0) && (InDetTrackParticles.numberOfSCTHits > 5) && (abs(DFCommonInDetTrackZ0AtPV) < 1.5)" - from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__TrackParticleThinning - TOPQTPThinningTool = DerivationFramework__TrackParticleThinning( - name = TOPQname + "TPThinningTool", - StreamName = streamName, - SelectionString = thinning_expression, - InDetTrackParticlesKey = "InDetTrackParticles") + #thinning_expression = "(InDetTrackParticles.pt > 0.5*GeV) && (InDetTrackParticles.numberOfPixelHits > 0) && (InDetTrackParticles.numberOfSCTHits > 5) && (abs(DFCommonInDetTrackZ0AtPV) < 1.5)" + #from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__TrackParticleThinning + #TOPQTPThinningTool = DerivationFramework__TrackParticleThinning( + # name = TOPQname + "TPThinningTool", + # StreamName = streamName, + # SelectionString = thinning_expression, + # InDetTrackParticlesKey = "InDetTrackParticles") #ToolSvc += TOPQTPThinningTool #thinningTools.append(TOPQTPThinningTool) @@ -259,7 +257,6 @@ def setup(TOPQname, streamName, ToolSvc): # we remove photons below 9GeV from DerivationFrameworkTools.DerivationFrameworkToolsConf import DerivationFramework__GenericObjectThinning - pTPhotonVariableToCutOn = ".pt" photonColl = "Photons" TOPQPhotonThinning = DerivationFramework__GenericObjectThinning( name = TOPQname + photonColl + "Thinning_lowpTphotons", diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonTruthTools.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonTruthTools.py index e3fe9f5189a56a80bb75fc52f8501efd0a0286b0..6df910529db278a08c1b916779b4f0089e305bcf 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonTruthTools.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/python/TOPQCommonTruthTools.py @@ -7,13 +7,14 @@ # TOPQXSequence += TOPQCommonTruthKernel #==================================================================== -from __future__ import print_function - #================================ # IMPORTS #================================ -from DerivationFrameworkCore.DerivationFrameworkMaster import * -from DerivationFrameworkMCTruth.HFHadronsCommon import * +from AthenaCommon import CfgMgr +from AthenaCommon.AppMgr import ToolSvc + +from DerivationFrameworkMCTruth.HFHadronsCommon import DSIDList + def setup(ToolSvc): @@ -47,7 +48,6 @@ def setup(ToolSvc): #============================================================================== # PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/trunk/src/TruthCollectionMaker.cxx # PhysicsAnalysis/DerivationFramework/DerivationFrameworkMCTruth/trunk/src/TruthCollectionMakerTau.cxx - from DerivationFrameworkMCTruth.DerivationFrameworkMCTruthConf import DerivationFramework__TruthCollectionMaker from DerivationFrameworkMCTruth.DerivationFrameworkMCTruthConf import DerivationFramework__TruthCollectionMakerTau #========== @@ -174,7 +174,7 @@ TOPQCommonTruthKernel = CfgMgr.DerivationFramework__CommonAugmentation("TOPQComm #============================================================================== # Add SumOfWeights metadata for LHE3 multiweights: TOPQDERIV-21 #============================================================================== -import DerivationFrameworkCore.LHE3WeightMetadata +import DerivationFrameworkCore.LHE3WeightMetadata # noqa: F401 # #============================================================================== # # HIGGS TEMPLATE XSECTION augmentation diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP3DTag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP3DTag.py index d1c01940383edd49fc4f7fc863dc9a92bf5ad73c..d4c53922a9696f04e8fd2bec11d16f4ba87aa2cb 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP3DTag.py +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP3DTag.py @@ -77,7 +77,6 @@ def toolIP3DTag(name, useBTagFlagsDefaults = True, **options): trackGradeFactory= toolIP3DDetailedTrackGradeFactory('IP3DDetailedTrackGradeFactory') trackSelectorTool = toolIP3DTrackSelector('IP3DTrackSelector') inDetTrackSelectionTool = toolInDetTrackSelector('InDetTrackSelector') - trackVertexAssociationTool = toolSpecialTrackAssociator('SpecialTrackAssociator') likelihood = toolIP3DNewLikelihoodTool('IP3DNewLikelihoodTool') defaults = { 'OutputLevel' : BTaggingFlags.OutputLevel, 'Runmodus' : BTaggingFlags.Runmodus, @@ -103,7 +102,6 @@ def toolIP3DTag(name, useBTagFlagsDefaults = True, **options): 'SVForIPTool' : svForIPTool, 'trackGradeFactory' : trackGradeFactory, 'TrackToVertexIPEstimator' : trackToVertexIPEstimator, - 'TrackVertexAssociationTool' : trackVertexAssociationTool, } for option in defaults: options.setdefault(option, defaults[option]) diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/share/btaggingAlgs.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/share/btaggingAlgs.py index 032ec793de3e1a18b861958703d75eb6a0cfa29b..d1bcf74c3c7f3250c25301af45c1f464ad2856ff 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/share/btaggingAlgs.py +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/share/btaggingAlgs.py @@ -15,7 +15,7 @@ AddressRemappingSvc = AddressRemappingSvc("AddressRemappingSvc") AddressRemappingSvc.TypeKeyRenameMaps += ['xAOD::JetAuxContainer#AntiKt4EMTopoJets.btaggingLink->AntiKt4EMTopoJets.oldbtaggingLink'] svcMgr+= AddressRemappingSvc -taggerList = ['IP2D', 'IP3D', 'MultiSVbb1', 'MultiSVbb2', 'SV1', 'JetFitterNN', 'SoftMu', 'MV2c10', 'MV2rmu', 'MV2r', 'MV2c100', 'MV2cl100' , 'DL1', 'DL1r', 'DL1rmu','DL1mu', 'RNNIP'] +taggerList = ['IP2D', 'IP3D', 'SV1', 'JetFitterNN', 'MV2c10'] #JetVertexCharge disable ATLASRECTS-4506 btagalg = BTagConf.setupJetBTaggerAlg(JetCollection="AntiKt4EMTopoJets", TaggerList=taggerList) diff --git a/PhysicsAnalysis/MCTruthClassifier/src/MCTruthClassifierAthena.cxx b/PhysicsAnalysis/MCTruthClassifier/src/MCTruthClassifierAthena.cxx index c605f923d719e11a6f5390cfb2f04e83fca35962..14a12048962829bf3fe18f216c515476a39971e3 100644 --- a/PhysicsAnalysis/MCTruthClassifier/src/MCTruthClassifierAthena.cxx +++ b/PhysicsAnalysis/MCTruthClassifier/src/MCTruthClassifierAthena.cxx @@ -358,8 +358,9 @@ MCTruthClassifier::genPartToCalo(const xAOD::CaloCluster* clus, extensionOK = EtaPhiCaloHelper(caloExtension.get(), sample, etaCalo, phiCalo); } if (!extensionOK) { - ATH_MSG_WARNING("extrapolation of Truth Particle with eta " << thePart->eta() << " and Pt " << thePart->pt() - << " to calo failed"); + ATH_MSG_WARNING("extrapolation of Truth Particle with eta " + << thePart->eta() << " , charge " << thePart->charge() + << " , Pt " << thePart->pt() << " to calo failed"); return false; } diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/share/example-config.txt b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/share/example-config.txt index 89ad1df916dcadf355fb1ea900079141ac148f4f..b4b0f0968a7077dfd83eaf6a0d7716bb08d124a3 100644 --- a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/share/example-config.txt +++ b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/share/example-config.txt @@ -70,8 +70,6 @@ MuonQuality Medium MuonQualityLoose Medium MuonIsolation FCTight_FixedRad MuonIsolationLoose None -doExtraSmearing False -do2StationsHighPt False ### Jet configuration JetPt 25000 diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx index c519b907ff5c63db64cc3a130125c01d0733aa84..6f1d01ea67d15147590e84d7336ffe145af464bd 100644 --- a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx +++ b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx @@ -133,7 +133,7 @@ namespace top { registerParameter("MuonIsolationSF", "Force muon isolation SF (e.g. None). EXPERIMENTAL!", " "); registerParameter("MuonIsolationSFLoose", "Force muon isolation SF (e.g. None). EXPERIMENTAL!", " "); registerParameter("MuonDoSmearing2stationHighPt", "True/False, to turn on/off spacial corrections for 2-station muons reconstruction with missing inner MS station allowed for abs(eta)<1.3, only with MuonQuality HighPt. - Default: True", "True"); - registerParameter("MuonDoExtraSmearingHighPt", "True/False, To be used by analyses willing to check their sensitivity to momentum resolution effects at large muon momenta. - Default: false", "false"); + registerParameter("MuonDoExtraSmearingHighPt", "True/False, To be used by analyses using willing to check their sensitivity to momentum resolution effects at large muon momenta and in case move to the HighPt WP - Default: false", "false"); registerParameter("UseAntiMuons", "Use AntiMuons for fake estimate. Default: false", "false"); registerParameter("UseSoftMuons", "True to use soft muons, False (default) otherwise", "False"); registerParameter("SoftMuonPt", "Soft Muon pT cut for object selection (in MeV). Default 4 GeV.", "4000"); diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx index 7f645d967c33a12597f0b5198c5e307c9e2ad06b..424da8400adfbb261dfb786a91e94a15bc44770f 100644 --- a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx +++ b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx @@ -1272,8 +1272,8 @@ namespace top { this->muonMuonDoSmearing2stationHighPt(muonDoSmearing2stationHighPt); bool muonDoExtraSmearingHighPt = false; settings->retrieve("MuonDoExtraSmearingHighPt", muonDoExtraSmearingHighPt); - if ( settings->value("MuonQuality") != "HighPt" && muonDoExtraSmearingHighPt ) { - ATH_MSG_WARNING("Could not set MuonDoExtraSmearingHighPt True without using the HighPt muon WP. MuonDoExtraSmearingHighPt is now setted to the default value (False)"); + if ( settings->value("MuonQuality") == "HighPt" && muonDoExtraSmearingHighPt ) { + ATH_MSG_WARNING("Could not set MuonDoExtraSmearingHighPt True when using the HighPt muon WP, HighPt muons are not affected by this setting. MuonDoExtraSmearingHighPt is now setted to the default value (False)"); muonDoExtraSmearingHighPt = false; } this->muonMuonDoExtraSmearingHighPt( muonDoExtraSmearingHighPt ); diff --git a/Reconstruction/EventShapes/EventShapeAthenaPool/CMakeLists.txt b/Reconstruction/EventShapes/EventShapeAthenaPool/CMakeLists.txt index 7b4b9ab462c4e51032d3d28da45517d02c9d6768..b94764adda215e31c52dad0bf43d53d00fed1451 100644 --- a/Reconstruction/EventShapes/EventShapeAthenaPool/CMakeLists.txt +++ b/Reconstruction/EventShapes/EventShapeAthenaPool/CMakeLists.txt @@ -1,18 +1,8 @@ -################################################################################ -# Package: EventShapeAthenaPool -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( EventShapeAthenaPool ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Database/AthenaPOOL/AthenaPoolUtilities - PRIVATE - Database/AthenaPOOL/AthenaPoolCnvSvc - Reconstruction/EventShapes/EventShapeEvent - Reconstruction/EventShapes/EventShapeTPCnv ) - # Component(s) in the package: atlas_add_poolcnv_library( EventShapeAthenaPoolPoolCnv src/*.cxx diff --git a/Reconstruction/EventShapes/EventShapeEvent/CMakeLists.txt b/Reconstruction/EventShapes/EventShapeEvent/CMakeLists.txt index b209d3b47a3c5a008d71682f399dae1a64269ad9..3e95d7a4ac04ce84a498f67237992b1621461a15 100644 --- a/Reconstruction/EventShapes/EventShapeEvent/CMakeLists.txt +++ b/Reconstruction/EventShapes/EventShapeEvent/CMakeLists.txt @@ -1,33 +1,19 @@ -################################################################################ -# Package: EventShapeEvent -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( EventShapeEvent ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaKernel - Control/AthContainers - Event/EventKernel - Event/NavFourMom ) - # External dependencies: find_package( FastJet ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) # Component(s) in the package: atlas_add_library( EventShapeEvent src/*.cxx PUBLIC_HEADERS EventShapeEvent INCLUDE_DIRS ${FASTJET_INCLUDE_DIRS} - PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${FASTJET_LIBRARIES} AthContainers EventKernel NavFourMom - PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} ) + LINK_LIBRARIES ${FASTJET_LIBRARIES} AthContainers AthenaKernel EventKernel NavFourMom ) atlas_add_dictionary( EventShapesDict EventShapeEvent/EventShapeEventDict.h EventShapeEvent/selection.xml - INCLUDE_DIRS ${FASTJET_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${FASTJET_LIBRARIES} ${ROOT_LIBRARIES} AthContainers EventKernel NavFourMom EventShapeEvent ) - + LINK_LIBRARIES EventShapeEvent ) diff --git a/Reconstruction/EventShapes/EventShapeInterface/CMakeLists.txt b/Reconstruction/EventShapes/EventShapeInterface/CMakeLists.txt index 962097a9ff244c9c79173eaa772c221269ef1bb5..71acec5e7b8092c1ee6281843105d72ac7abc491 100644 --- a/Reconstruction/EventShapes/EventShapeInterface/CMakeLists.txt +++ b/Reconstruction/EventShapes/EventShapeInterface/CMakeLists.txt @@ -1,18 +1,8 @@ -# $Id: CMakeLists.txt 777094 2016-10-07 12:33:15Z krasznaa $ -################################################################################ -# Package: EventShapeInterface -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( EventShapeInterface ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( - PUBLIC - Control/AthToolSupport/AsgTools - Event/xAOD/xAODBase - Event/xAOD/xAODEventShape ) - # Component(s) in the package: atlas_add_library( EventShapeInterface EventShapeInterface/*.h diff --git a/Reconstruction/EventShapes/EventShapeTPCnv/CMakeLists.txt b/Reconstruction/EventShapes/EventShapeTPCnv/CMakeLists.txt index 26565a83dcdd9c659e9500e8926a6a5367ac035f..ced949a4a6b7ddabfdb42745f96891d2da591260 100644 --- a/Reconstruction/EventShapes/EventShapeTPCnv/CMakeLists.txt +++ b/Reconstruction/EventShapes/EventShapeTPCnv/CMakeLists.txt @@ -1,31 +1,16 @@ -################################################################################ -# Package: EventShapeTPCnv -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( EventShapeTPCnv ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Database/AthenaPOOL/AthenaPoolCnvSvc - Reconstruction/EventShapes/EventShapeEvent - PRIVATE - Control/DataModelAthenaPool ) - -# External dependencies: -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) - # Component(s) in the package: atlas_add_library( EventShapeTPCnv src/*.cxx PUBLIC_HEADERS EventShapeTPCnv - PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES EventShapeEvent AthenaPoolCnvSvcLib DataModelAthenaPoolLib - PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} ) + LINK_LIBRARIES EventShapeEvent AthenaPoolCnvSvcLib + PRIVATE_LINK_LIBRARIES DataModelAthenaPoolLib ) atlas_add_dictionary( EventShapeTPCnvDict EventShapeTPCnv/EventShapeTPCnvDict.h EventShapeTPCnv/selection.xml - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaPoolCnvSvcLib EventShapeEvent DataModelAthenaPoolLib EventShapeTPCnv ) - + LINK_LIBRARIES EventShapeTPCnv ) diff --git a/Reconstruction/EventShapes/EventShapeTools/CMakeLists.txt b/Reconstruction/EventShapes/EventShapeTools/CMakeLists.txt index 58f04dff084dd21b1e4fb3bf2fd9ba6704de500f..c49f4e6be5b400d7cf375f514c83c907fa2ad94c 100644 --- a/Reconstruction/EventShapes/EventShapeTools/CMakeLists.txt +++ b/Reconstruction/EventShapes/EventShapeTools/CMakeLists.txt @@ -1,25 +1,10 @@ -################################################################################ -# Package: EventShapeTools -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( EventShapeTools ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthToolSupport/AsgTools - GaudiKernel - Reconstruction/EventShapes/EventShapeInterface - Reconstruction/Jet/JetEDM - Reconstruction/Jet/JetRec - Reconstruction/Jet/JetInterface - PRIVATE - Control/AthenaBaseComps - Event/xAOD/xAODEventShape ) - # External dependencies: find_package( FastJet ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) # Component(s) in the package: atlas_add_library( EventShapeToolsLib @@ -27,21 +12,18 @@ atlas_add_library( EventShapeToolsLib src/*.cxx PUBLIC_HEADERS EventShapeTools INCLUDE_DIRS ${FASTJET_INCLUDE_DIRS} - PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${FASTJET_LIBRARIES} AsgTools GaudiKernel EventShapeInterface JetRecLib JetInterface - PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps xAODEventShape JetEDM ) + LINK_LIBRARIES ${FASTJET_LIBRARIES} AsgTools EventShapeInterface JetRecLib JetInterface xAODEventShape + PRIVATE_LINK_LIBRARIES AthenaBaseComps JetEDM ) atlas_add_component( EventShapeTools src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${FASTJET_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${FASTJET_LIBRARIES} AsgTools GaudiKernel EventShapeInterface JetInterface AthenaBaseComps xAODEventShape EventShapeToolsLib ) + LINK_LIBRARIES EventShapeToolsLib ) atlas_add_dictionary( EventShapeToolsDict EventShapeTools/EventShapeToolsDict.h EventShapeTools/selection.xml - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${FASTJET_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${FASTJET_LIBRARIES} AsgTools GaudiKernel EventShapeInterface JetInterface AthenaBaseComps xAODEventShape EventShapeToolsLib ) + LINK_LIBRARIES EventShapeToolsLib ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Reconstruction/EventShapes/EventShapeTools/python/EventDensityConfig.py b/Reconstruction/EventShapes/EventShapeTools/python/EventDensityConfig.py index a0a10af87f2840c24b969a01857e7577af6c1a26..fee0c901f343dfbde50a43d789a3cc98b3cc0cdf 100644 --- a/Reconstruction/EventShapes/EventShapeTools/python/EventDensityConfig.py +++ b/Reconstruction/EventShapes/EventShapeTools/python/EventDensityConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from EventShapeTools.EventShapeToolsConf import EventDensityTool, EventShapeCopier, EventDensityAthAlg import logging @@ -43,7 +43,7 @@ def configEventShapeCopierAlg( input ): ## EventDensity Alg for Athena def EventDensityAlg(name, EventDensityTool=None, **args): - edLogger.warning("When instantiating "+name+" : call of EventDensityAlg is deprecated") + edLogger.warning("When instantiating %s : call of EventDensityAlg is deprecated", name) edLogger.warning(" please use EventDensityAthAlg (from EventShapeTools.EventShapeToolsConf import EventDensityAthAlg) ") alg = EventDensityAthAlg(name,EventDensityTool=EventDensityTool, **args) return alg diff --git a/Reconstruction/HeavyIonRec/HIGlobal/CMakeLists.txt b/Reconstruction/HeavyIonRec/HIGlobal/CMakeLists.txt index 340e93a3bb1589b0b63688b9af69261e51bdfedd..bf55458e480fe8edf6a68609c4e3fb10aebbfcfd 100644 --- a/Reconstruction/HeavyIonRec/HIGlobal/CMakeLists.txt +++ b/Reconstruction/HeavyIonRec/HIGlobal/CMakeLists.txt @@ -1,38 +1,21 @@ -################################################################################ -# Package: HIGlobal -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( HIGlobal ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Calorimeter/CaloEvent - Control/AthToolSupport/AsgTools - Control/AthenaBaseComps - Event/NavFourMom - Event/xAOD/xAODHIEvent - PhysicsAnalysis/HeavyIonPhys/HIEventUtils - PRIVATE - Control/Navigation - GaudiKernel ) - -# External dependencies: -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) - # Component(s) in the package: atlas_add_library( HIGlobalLib HIGlobal/*.h INTERFACE PUBLIC_HEADERS HIGlobal - LINK_LIBRARIES AsgTools AthenaBaseComps CaloEvent GaudiKernel HIEventUtilsLib NavFourMom xAODHIEvent ) + LINK_LIBRARIES AsgTools AthenaBaseComps CaloEvent GaudiKernel HIEventUtilsLib NavFourMom StoreGateLib xAODCaloEvent xAODHIEvent ) atlas_add_component( HIGlobal src/*.cxx src/components/*.cxx - LINK_LIBRARIES GaudiKernel Navigation HIGlobalLib ) + LINK_LIBRARIES CaloEvent GaudiKernel HIEventUtilsLib HIGlobalLib Navigation StoreGateLib xAODHIEvent ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) diff --git a/Reconstruction/HeavyIonRec/HIJetRec/CMakeLists.txt b/Reconstruction/HeavyIonRec/HIJetRec/CMakeLists.txt index 0f6fbbb31b319bbab257654cd2f20e0a69c4d704..b380f54ca13fc625644a2a33ba265fa720d25e13 100644 --- a/Reconstruction/HeavyIonRec/HIJetRec/CMakeLists.txt +++ b/Reconstruction/HeavyIonRec/HIJetRec/CMakeLists.txt @@ -16,7 +16,7 @@ atlas_add_library( HIJetRecLib atlas_add_component( HIJetRec Root/*.cxx src/*.h src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps CaloEvent CaloInterfaceLib CaloRecLib CaloUtilsLib CxxUtils HIJetRecLib JetInterface JetRecLib NavFourMom Navigation PathResolver StoreGateLib xAODCore xAODEventInfo xAODTracking ) + LINK_LIBRARIES ${ROOT_LIBRARIES} AsgTools AthenaBaseComps CaloEvent CaloInterfaceLib CaloRecLib CaloUtilsLib CxxUtils FourMomUtils HIEventUtilsLib HIJetRecLib JetInterface JetRecLib NavFourMom Navigation PathResolver StoreGateLib xAODBase xAODCaloEvent xAODCore xAODEventInfo xAODHIEvent xAODJet xAODTracking ) # Install files from the package: atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Reconstruction/HeavyIonRec/HIMonitoring/CMakeLists.txt b/Reconstruction/HeavyIonRec/HIMonitoring/CMakeLists.txt index 76958d5975b2fe9819d8dd9e2c9eb9eac14f2350..df9bd52fed372b7845b28dc1711a24e9c6818b7d 100644 --- a/Reconstruction/HeavyIonRec/HIMonitoring/CMakeLists.txt +++ b/Reconstruction/HeavyIonRec/HIMonitoring/CMakeLists.txt @@ -1,40 +1,22 @@ -################################################################################ -# Package: HIMonitoring -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( HIMonitoring ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaMonitoring - Event/xAOD/xAODEgamma - Event/xAOD/xAODForward - Event/xAOD/xAODHIEvent - Event/xAOD/xAODMuon - Event/xAOD/xAODTracking - Event/xAOD/xAODTrigMinBias - ForwardDetectors/ZDC/ZdcAnalysis - GaudiKernel - PhysicsAnalysis/ElectronPhotonID/ElectronPhotonSelectorTools - PRIVATE - Tools/LWHists ) - # External dependencies: -find_package( ROOT COMPONENTS MathCore Core Tree Hist RIO pthread Graf Graf3d Gpad Html Postscript Gui GX11TTF GX11 ) +find_package( ROOT COMPONENTS Core ) # Component(s) in the package: atlas_add_library( HIMonitoringLib src/*.cxx PUBLIC_HEADERS HIMonitoring INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} xAODEgamma xAODForward xAODHIEvent xAODMuon xAODTracking xAODTrigMinBias GaudiKernel AthenaMonitoringLib ZdcAnalysisLib ElectronPhotonSelectorToolsLib - PRIVATE_LINK_LIBRARIES LWHists ) + LINK_LIBRARIES AthenaMonitoringLib xAODHIEvent xAODTrigMinBias + PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} ElectronPhotonSelectorToolsLib LWHists PATCoreAcceptLib xAODEgamma xAODForward xAODMuon ) atlas_add_component( HIMonitoring src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaMonitoringLib xAODEgamma xAODForward xAODHIEvent xAODMuon xAODTracking xAODTrigMinBias GaudiKernel ElectronPhotonSelectorToolsLib LWHists ZdcAnalysisLib HIMonitoringLib ) + LINK_LIBRARIES HIMonitoringLib ) # Install files from the package: atlas_install_joboptions( share/*.py ) diff --git a/Reconstruction/HeavyIonRec/HIRecAthenaPool/CMakeLists.txt b/Reconstruction/HeavyIonRec/HIRecAthenaPool/CMakeLists.txt deleted file mode 100644 index e6a6b690dd0d442431dbba6f9cb028056af05eb2..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecAthenaPool/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -################################################################################ -# Package: HIRecAthenaPool -################################################################################ - -# Declare the package name: -atlas_subdir( HIRecAthenaPool ) - -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Database/AtlasSealCLHEP ) - diff --git a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/EtaPhiBinsCnv.cxx b/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/EtaPhiBinsCnv.cxx deleted file mode 100755 index 3160c01426b158873784c5593a8fdd77e7759ce6..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/EtaPhiBinsCnv.cxx +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -/******************************************************************** - -NAME: EtaPhiBinsCnv.h -PACKAGE: offline/Reconstruction/RecAthenaPool - -AUTHORS: S. Resconi -CREATED: Jul 2007 - -PURPOSE: Implementation file for class EtaPhiBinsCnv -********************************************************************/ - -// STL includes - -// Framework includes -#include "GaudiKernel/MsgStream.h" - -// RecTPCnv includes -#include "HIRecTPCnv/EtaPhiBinsCnv_p1.h" - -// RecAthenaPool includes -#include "EtaPhiBinsCnv.h" - -/////////////////////////////////////////////////////////////////// -/// Public methods: -/////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////// -/// Const methods: -/////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////// -// Protected methods: -/////////////////////////////////////////////////////////////////// - - -EtaPhiBins_PERS* -EtaPhiBinsCnv::createPersistent( EtaPhiBins* transCont ) -{ - MsgStream msg( msgSvc(), "EtaPhiBinsCnv" ); - - EtaPhiBinsCnv_p1 cnv; - EtaPhiBins_PERS *persObj = cnv.createPersistent( transCont, msg ); - - msg << MSG::DEBUG << "::createPersistent [Success]" << endmsg; - return persObj; -} - -EtaPhiBins* EtaPhiBinsCnv::createTransient() -{ - MsgStream msg( msgSvc(), "EtaPhiBinsCnv" ); - - EtaPhiBins *transObj = 0; - - static pool::Guid tr_guid("080267DD-E545-4469-ABED-BC7EB62D4C64"); - //static pool::Guid p1_guid("C0D9AEE8-A2B0-4EED-BD75-53D67DF9736F"); - static pool::Guid p1_guid("C653008A-0C79-4102-A318-F42703FD7EE4"); - - if ( compareClassGuid(tr_guid) ) { - - // regular object from before the T/P separation - return poolReadObject<EtaPhiBins>(); - - } else if ( compareClassGuid(p1_guid) ) { - - // using unique_ptr ensures deletion of the persistent object - std::unique_ptr<EtaPhiBins_p1> persObj( poolReadObject<EtaPhiBins_p1>() ); - EtaPhiBinsCnv_p1 cnv; - transObj = cnv.createTransient( persObj.get(), msg ); - } else { - throw std::runtime_error("Unsupported persistent version of EtaPhiBins"); - } - - return transObj; -} diff --git a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/EtaPhiBinsCnv.h b/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/EtaPhiBinsCnv.h deleted file mode 100755 index 851631b53e1623e21dcc7c137306d0238de5136c..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/EtaPhiBinsCnv.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef RECATHENAPOOL_ETAPHIBINSCNV_H -#define RECATHENAPOOL_ETAPHIBINSCNV_H -/******************************************************************** - -NAME: EtaPhiBinsCnv.h -PACKAGE: offline/Reconstruction/RecAthenaPool - -AUTHORS: S. Resconi -CREATED: Jul 2007 - -PURPOSE: Header file for class EtaPhiBinsCnv -********************************************************************/ - - -// STL includes - -// AthenaPoolCnvSvc includes -#include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h" - -// RecTPCnv includes -#include "HIRecTPCnv/EtaPhiBins_p1.h" - -// Forward declaration - -#include "HIGlobal/EtaPhiBins.h" - -// the latest persistent representation type of DataCollection: -typedef EtaPhiBins_p1 EtaPhiBins_PERS; - -class EtaPhiBinsCnv: public T_AthenaPoolCustomCnv< - EtaPhiBins, - EtaPhiBins_PERS - > - -{ - - // make the factory for this converter our friend - friend class CnvFactory<EtaPhiBinsCnv>; - - /////////////////////////////////////////////////////////////////// - // Protected methods: - /////////////////////////////////////////////////////////////////// - protected: - - /** Create the converter from the service locator - */ - EtaPhiBinsCnv(ISvcLocator* svcloc); - - /** Build the persistent representation from the transient one. - */ - virtual EtaPhiBins_PERS* - createPersistent( EtaPhiBins* transCont ); - - /** Build the transient representation from a persistent one - */ - virtual EtaPhiBins* createTransient(); - -}; - -/////////////////////////////////////////////////////////////////// -/// Inline methods: -/////////////////////////////////////////////////////////////////// - -inline EtaPhiBinsCnv::EtaPhiBinsCnv( ISvcLocator* svcLocator ) : - T_AthenaPoolCustomCnv<EtaPhiBins, EtaPhiBins_PERS>(svcLocator) -{} - -#endif //> RECATHENAPOOL_ETAPHIBINSCNV_H diff --git a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HIPixelTrackletsCollectionCnv.cxx b/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HIPixelTrackletsCollectionCnv.cxx deleted file mode 100644 index 29a002058f09c38789b189774a579528d988e944..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HIPixelTrackletsCollectionCnv.cxx +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -/** - * @file HIPixelTrackletsCollectionCnv.cxx - * @brief Generated implementation file which includes header files needed by HIPixelTrackletsCollectionCnv - * @author RD Schaffer <R.D.Schaffer@cern.ch> - */ - - -#include "HIPixelTrackletsCollectionCnv.h" - -//constructor -HIPixelTrackletsCollectionCnv::HIPixelTrackletsCollectionCnv(ISvcLocator *svcloc ): - HIPixelTrackletsCollectionCnvBase(svcloc), - m_msgSvc( msgSvc() ), - m_log(m_msgSvc,"HIPixelTrackletsCollectionCnv") -{} - -//destructor -HIPixelTrackletsCollectionCnv::~HIPixelTrackletsCollectionCnv() -{} - -StatusCode HIPixelTrackletsCollectionCnv::initialize() -{ - StatusCode sc = HIPixelTrackletsCollectionCnvBase::initialize(); - if( sc.isFailure() ) { - m_log << MSG::FATAL << "Could not initialize HIPixelTrackletsCollectionCnvBase" << endmsg; - return sc; - } - - m_log.setLevel( m_msgSvc->outputLevel() ); - m_log << MSG::INFO << "HIPixelTrackletsCollectionCnv::initialize()." << endmsg; - - // - return StatusCode::SUCCESS; -} - -HIPixelTrackletsCollection_PERS * -HIPixelTrackletsCollectionCnv::createPersistent( HIPixelTrackletsCollection* transCont) { - m_log.setLevel( m_msgSvc->outputLevel() ); - updateLog(); - HIPixelTrackletsCollection_PERS *pTrkletsCont = m_TPConverter.createPersistent( transCont, m_log ); - - return pTrkletsCont; -} - - -HIPixelTrackletsCollection* -HIPixelTrackletsCollectionCnv::createTransient() { - static pool::Guid p1_guid( "8FE8FB83-AA9B-4E4A-8365-FBDDBC5B5400" ); - //static pool::Guid p0_guid( " " ); - - HIPixelTrackletsCollection *p_collection = 0; - if( compareClassGuid( p1_guid ) ) { - std::unique_ptr< HIPixelTrackletsCollection_PERS > p_coll( poolReadObject< HIPixelTrackletsCollection_PERS >() ); - p_collection = m_TPConverter.createTransient( p_coll.get(), m_log ); - } - else throw std::runtime_error( "Unsupported persistent version of HIPixelTrackletsCollection." ); - - return p_collection; -} - -void HIPixelTrackletsCollectionCnv::updateLog() { - DataObject *dObj = getDataObject(); - if( dObj==0 ) return; - const std::string key = (dObj->name()); - - m_log.m_source = "HIPixelTrackletsCollectionCnv: " + key; - -} diff --git a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HIPixelTrackletsCollectionCnv.h b/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HIPixelTrackletsCollectionCnv.h deleted file mode 100644 index b294e8e571d4e89c2f83cd5d404e08f8e9116bcf..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HIPixelTrackletsCollectionCnv.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/** - * @file HIPixelTrackletsCollectionCnv.h - * @brief Generated header file which defines a typedef for templated converter class - * @author RD Schaffer <R.D. Schaffer@cern.ch> - */ - -#ifndef HIPixelTrackletsCollectionCnv_H -#define HIPixelTrackletsCollectionCnv_H - -#define protected public -#include "GaudiKernel/MsgStream.h" -#undef protected - -#include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h" - -#include "HIGlobal/HIPixelTrackletsCollection.h" -#include "HIRecTPCnv/HIPixelTrackletsCollectionCnv_tlp1.h" - -typedef HIPixelTrackletsCollection_tlp1 HIPixelTrackletsCollection_PERS; -typedef T_AthenaPoolCustomCnv<HIPixelTrackletsCollection, HIPixelTrackletsCollection_PERS> HIPixelTrackletsCollectionCnvBase; - -class HIPixelTrackletsCollectionCnv : public HIPixelTrackletsCollectionCnvBase -{ - friend class CnvFactory<HIPixelTrackletsCollectionCnv>; - - protected: - HIPixelTrackletsCollectionCnv(ISvcLocator *svcloc ); - ~HIPixelTrackletsCollectionCnv(); - virtual StatusCode initialize(); - virtual HIPixelTrackletsCollection_PERS *createPersistent(HIPixelTrackletsCollection* transCont); - virtual HIPixelTrackletsCollection *createTransient(); - virtual AthenaPoolTopLevelTPCnvBase* getTopLevelTPCnv() { return &m_TPConverter; } - - private: - void updateLog(); - - IMessageSvc *m_msgSvc; - MsgStream m_log; - HIPixelTrackletsCollectionCnv_tlp1 m_TPConverter; - -}; - -#endif - diff --git a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HITRTInfoCnv.cxx b/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HITRTInfoCnv.cxx deleted file mode 100644 index ee78e7303bec44b4103ad2d83d359b03e8431750..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HITRTInfoCnv.cxx +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - - -// Framework includes -#include "GaudiKernel/MsgStream.h" - -// RecTPCnv includes -#include "HIRecTPCnv/HITRTInfoCnv_p1.h" - -// RecAthenaPool includes -#include "HITRTInfoCnv.h" - -HITRTInfo_PERS* -HITRTInfoCnv::createPersistent( HITRTInfo* transCont ) -{ - // MsgStream msg( msgSvc(), "HITRTInfoCnv" ); - if ( ! bool(m_msg) ) - m_msg=new MsgStream( msgSvc(), "HITRTInfoCnv" ); - - HITRTInfoCnv_p1 cnv; - HITRTInfo_PERS *persObj = cnv.createPersistent( transCont, *m_msg ); - - // msg << MSG::DEBUG << "::createPersistent [Success]" << endmsg; - return persObj; -} - -HITRTInfo* HITRTInfoCnv::createTransient() -{ - // MsgStream msg( msgSvc(), "HITRTInfoCnv" ); - if ( ! bool(m_msg) ) - m_msg=new MsgStream( msgSvc(), "HITRTInfoCnv" ); - - HITRTInfo *transObj = 0; - - static pool::Guid p1_guid("8F3FEA42-D7E6-4FD7-84C1-91D5B551B537"); - - if ( compareClassGuid(p1_guid) ) - { - std::unique_ptr<HITRTInfo_p1> persObj( poolReadObject<HITRTInfo_p1>() ); - HITRTInfoCnv_p1 cnv; - transObj = cnv.createTransient( persObj.get(), *m_msg ); - } else { - throw std::runtime_error("Unsupported persistent version of HITRTInfo"); - } - - return transObj; -} diff --git a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HITRTInfoCnv.h b/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HITRTInfoCnv.h deleted file mode 100644 index 0faa76320039409de5b2efe2a55923271275e605..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecAthenaPool/src/HITRTInfoCnv.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef HIRECATHENAPOOL_HITRTINFO_H -#define HIRECATHENAPOOL_HITRTINFO_H - -// AthenaPoolCnvSvc includes -#include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h" - -#include "HIGlobal/HITRTInfo.h" -#include "HIRecTPCnv/HITRTInfo_p1.h" - -class MsgStream; - -typedef HITRTInfo_p1 HITRTInfo_PERS; - -class HITRTInfoCnv: public T_AthenaPoolCustomCnv< HITRTInfo, HITRTInfo_PERS > -{ - - // make the factory for this converter our friend - friend class CnvFactory<HITRTInfoCnv>; - - /////////////////////////////////////////////////////////////////// - // Protected methods: - /////////////////////////////////////////////////////////////////// - protected: - - /** Create the converter from the service locator - */ - HITRTInfoCnv(ISvcLocator* svcloc); - - /** Build the persistent representation from the transient one. - */ - virtual HITRTInfo_PERS* createPersistent( HITRTInfo* transCont ); - - /** Build the transient representation from a persistent one - */ - virtual HITRTInfo* createTransient(); - - private: - - MsgStream *m_msg; - -}; - -/////////////////////////////////////////////////////////////////// -/// Inline methods: -/////////////////////////////////////////////////////////////////// - -inline HITRTInfoCnv::HITRTInfoCnv( ISvcLocator* svcLocator ) : - T_AthenaPoolCustomCnv<HITRTInfo, HITRTInfo_PERS>(svcLocator), - m_msg(0) -{} - -#endif diff --git a/Reconstruction/HeavyIonRec/HIRecExample/CMakeLists.txt b/Reconstruction/HeavyIonRec/HIRecExample/CMakeLists.txt index ab24f98b37b6d54cc67af44cb63e52f56cb8f50c..1e258fa5a3e8fdb3bf1d7eb60031e8760d4794e5 100644 --- a/Reconstruction/HeavyIonRec/HIRecExample/CMakeLists.txt +++ b/Reconstruction/HeavyIonRec/HIRecExample/CMakeLists.txt @@ -1,11 +1,9 @@ -################################################################################ -# Package: HIRecExample -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( HIRecExample ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/CMakeLists.txt b/Reconstruction/HeavyIonRec/HIRecTPCnv/CMakeLists.txt deleted file mode 100644 index 9b8979734e7c14dbf11b062187531d35ac83cfc9..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -################################################################################ -# Package: HIRecTPCnv -################################################################################ - -# Declare the package name: -atlas_subdir( HIRecTPCnv ) - -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Database/AthenaPOOL/AthenaPoolCnvSvc - Database/AthenaPOOL/AthenaPoolUtilities - InnerDetector/InDetEventCnv/InDetEventTPCnv - InnerDetector/InDetRecEvent/InDetPrepRawData - Reconstruction/HeavyIonRec/HIGlobal - Tracking/TrkEventCnv/TrkEventTPCnv ) - -# External dependencies: -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) - -# Install files from the package: -atlas_install_headers( HIRecTPCnv ) - diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/EtaPhiBinsCnv_p1.h b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/EtaPhiBinsCnv_p1.h deleted file mode 100755 index bb1f2ac4509ebd16ed79cbd4c8822f394a585597..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/EtaPhiBinsCnv_p1.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef RECTPCNV_ETAPHIBINSCNV_P1_H -#define RECTPCNV_ETAPHIBINSCNV_P1_H - -/******************************************************************** - -NAME: MissingEtCnv_p1.h -PACKAGE: offline/Reconstruction/RecTPCnv - -AUTHORS: S. Resconi -CREATED: Jul 2007 - -PURPOSE: Transient/Persisten converter for EtaPhiBins class -********************************************************************/ - -#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" -#include "HIRecTPCnv/EtaPhiBins_p1.h" -#include "HIGlobal/EtaPhiBins.h" - -#include "TBuffer.h" - -class MsgStream; - -class EtaPhiBinsCnv_p1 : public T_AthenaPoolTPCnvBase<EtaPhiBins, EtaPhiBins_p1> -{ - public: - EtaPhiBinsCnv_p1() {}; - virtual void persToTrans( const EtaPhiBins_p1 *persObj, - EtaPhiBins *transObj, - MsgStream &msg ); - - virtual void transToPers( const EtaPhiBins *transObj, - EtaPhiBins_p1 *persObj, - MsgStream &msg ); -}; - -template <> -class T_TPCnv<EtaPhiBins, EtaPhiBins_p1 > - : public EtaPhiBinsCnv_p1 -{ -public: -}; - - - -#endif // RECTPCNV_ETAPHIBINSCNV_P1_H diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/EtaPhiBins_p1.h b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/EtaPhiBins_p1.h deleted file mode 100755 index 15c97f6d68638852b126c12ae39e2c8a3f0f309f..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/EtaPhiBins_p1.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - - -#ifndef RECTPCNV_ETAPHIBINS_P1_H -#define RECTPCNV_ETAPHIBINS_P1_H - -/******************************************************************** - -NAME: EtaPhiBins_p1 -PACKAGE: offline/Reconstruction/RecTPCnv - -AUTHORS: S. Resconi -CREATED: Jul 2007 - -PURPOSE: Persistent rapresentation of EtaPhiBins class -********************************************************************/ - -// forward declarations -class EtaPhiBinsCnv_p1; - -#include <vector> - -class EtaPhiBins_p1 -{ - friend class EtaPhiBinsCnv_p1; - - public: - - /** default constructor */ - EtaPhiBins_p1() {}; - - /** destructor */ - ~EtaPhiBins_p1(); - - protected: - - /// basic components of EtaPhiBins_p1 - float m_EtaMin; - float m_EtaMax; - int m_NEtaBins; - int m_NPhiBins; - std::vector<unsigned char> m_h2vec; - -}; - - -#endif diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCnv_p1.h b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCnv_p1.h deleted file mode 100644 index d2c8589c6a04fb45e2ac270c300bc710ce1789fc..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCnv_p1.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef HIPIXELTRACKLETSCNV_P1_H -#define HIPIXELTRACKLETSCNV_P1_H - -#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" -#include "HIGlobal/HIPixelTracklets.h" -#include "HIRecTPCnv/HIPixelTracklets_p1.h" -#include "InDetEventTPCnv/InDetPrepRawData/PixelClusterCnv_p1.h" -#include "InDetPrepRawData/PixelCluster.h" -#include "TrkEventTPCnv/TrkEventPrimitives/HepPoint3DCnv_p1.h" - -class MsgStream; - -class HIPixelTrackletsCnv_p1 : public T_AthenaPoolTPCnvBase<HIPixelTracklets,HIPixelTracklets_p1> { - typedef InDet::PixelCluster PixelCluster; - public: - HIPixelTrackletsCnv_p1():m_hepPoint3DCnv(0) {}; - - void persToTrans(const HIPixelTracklets_p1 *persObj, HIPixelTracklets *transObj, MsgStream &log); - void transToPers(const HIPixelTracklets *transObj, HIPixelTracklets_p1 *persObj, MsgStream &log); - virtual void initPrivateConverters( AthenaPoolTopLevelTPCnvBase *topCnv) { - m_clusterVectorCnv.setTopConverter(topCnv,0); - } - - private: - HepPoint3DCnv_p1* m_hepPoint3DCnv; - PixelClusterCnv_p1* m_pixelClusterCnv; - typedef T_AthenaPoolTPPolyVectorCnv< std::vector<PixelCluster*>, std::vector<TPObjRef>, ITPConverterFor<PixelCluster> > clusterForTrkletsVectorCnv_p1; - //typedef T_AthenaPoolTPPtrVectorCnv< std::vector<PixelCluster*>, std::vector<TPObjRef>, PixelClusterCnv_p1> clusterForTrkletsVectorCnv_p1; - clusterForTrkletsVectorCnv_p1 m_clusterVectorCnv; - -}; - -#endif diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCnv_p1.h.save b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCnv_p1.h.save deleted file mode 100644 index fc24501fd69cbf4a218dbeae235ccc3fbf89ac4a..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCnv_p1.h.save +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef HIPIXELTRACKLETSCNV_P1_H -#define HIPIXELTRACKLETSCNV_P1_H - -#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" -#include "HIGlobal/HIPixelTracklets.h" -#include "HIRecTPCnv/HIPixelTracklets_p1.h" -#include "InDetEventTPCnv/InDetPrepRawData/PixelClusterCnv_p1.h" -#include "InDetPrepRawData/PixelCluster.h" -#include "TrkEventTPCnv/TrkEventPrimitives/HepPoint3DCnv_p1.h" - -class MsgStream; - -class HIPixelTrackletsCnv_p1 : public T_AthenaPoolTPCnvBase<HIPixelTracklets,HIPixelTracklets_p1> { - typedef InDet::PixelCluster PixelCluster; - public: - HIPixelTrackletsCnv_p1() {}; - - void persToTrans(const HIPixelTracklets_p1 *persObj, HIPixelTracklets *transObj, MsgStream &log); - void transToPers(const HIPixelTracklets *transObj, HIPixelTracklets_p1 *persObj, MsgStream &log); - - private: - HepPoint3DCnv_p1* m_hepPoint3DCnv; -/* typedef T_AthenaPoolTPPolyVectorCnv< std::vector<PixelCluster*>, std::vector<TPObjRef>, ITPConverterFor<PixelCluster> > clusterForTrkletsVectorCnv_p1; */ -/* clusterForTrkletsVectorCnv_p1 *m_clusterVectorCnv; */ - -}; - -#endif diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollectionCnv_p1.h b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollectionCnv_p1.h deleted file mode 100644 index b2b7dde49865a9b8c6428390445722517876b63c..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollectionCnv_p1.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef HIPIXELTRACKLETSCOLLECTIONCNV_P1_H -#define HIPIXELTRACKLETSCOLLECTIONCNV_P1_H - -#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" -#include "HIRecTPCnv/HIPixelTrackletsCollection_p1.h" - -#include "HIRecTPCnv/HIPixelTrackletsCnv_p1.h" -#include "HIGlobal/HIPixelTrackletsCollection.h" - -class MsgStream; - -class HIPixelTrackletsCollectionCnv_p1: public T_AthenaPoolTPPolyVectorCnv<HIPixelTrackletsCollection,HIPixelTrackletsCollection_p1,ITPConverterFor<HIPixelTracklets> > { - public: - HIPixelTrackletsCollectionCnv_p1() {}; - //virtual void persToTrans(const HIPixelTrackletsCollection_p1 *persObj, HIPixelTrackletsCollection *transObj, MsgStream& log); - //virtual void transToPers(const HIPixelTrackletsCollection *transObj, HIPixelTrackletsCollection_p1 *persObj, MsgStream& log); -}; - - -/* template<> */ -/* class T_TPCnv<HIPixelTrackletsCollection, HIPixelTrackletsCollection_p1> */ -/* : public HIPixelTrackletsCollectionCnv_p1 { */ -/* public: */ -/* }; */ - -#endif diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollectionCnv_tlp1.h b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollectionCnv_tlp1.h deleted file mode 100644 index 1f85351489fe117f112f5eccb7a143b278487fc1..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollectionCnv_tlp1.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef HIPIXELTRACKLETSCOLLECTIONCNVTLP1_H -#define HIPIXELTRACKLETSCOLLECTIONCNVTLP1_H - -#include "AthenaPoolCnvSvc/AthenaPoolTopLevelTPConverter.h" -#include "HIRecTPCnv/HIPixelTrackletsCollection_tlp1.h" -#include "HIRecTPCnv/HIPixelTrackletsCollectionCnv_p1.h" -#include "HIRecTPCnv/HIPixelTrackletsCnv_p1.h" -#include "TrkEventTPCnv/TrkEventPrimitives/HepPoint3DCnv_p1.h" -#include "InDetEventTPCnv/InDetPrepRawData/PixelClusterCnv_p1.h" - -class HIPixelTrackletsCollectionCnv_tlp1 : public AthenaPoolTopLevelTPConverter<HIPixelTrackletsCollectionCnv_p1, HIPixelTrackletsCollection_tlp1> { - public: - HIPixelTrackletsCollectionCnv_tlp1(); - virtual ~HIPixelTrackletsCollectionCnv_tlp1() {} - - //default methods - virtual void setPStorage(HIPixelTrackletsCollection_tlp1* storage); - - virtual TPCnvTokenList_p1* getTokenListVar() { return &(getTLPersObject()->m_tokenList); }; - - protected: - HIPixelTrackletsCnv_p1 m_hiPixelTrackletsCnv; - HepPoint3DCnv_p1 m_hepPoint3DCnv; - PixelClusterCnv_p1 m_pixelClusterCnv; - -}; - -template <> -class T_TPCnv<HIPixelTrackletsCollection, HIPixelTrackletsCollection_tlp1> - : public HIPixelTrackletsCollectionCnv_tlp1 -{ - public: - T_TPCnv(); - void persToTrans(const HIPixelTrackletsCollection_tlp1* pers, - HIPixelTrackletsCollection* trans, - MsgStream& msg); -}; - -#endif diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollection_p1.h b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollection_p1.h deleted file mode 100644 index 25574f2e2c4c47ce6a757ca17873a315c71d8a82..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollection_p1.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef HIPIXELTRACKLETSCOLLECTION_P1_H -#define HIPIXELTRACKLETSCOLLECTION_P1_H - -//#include "HIRecTPCnv/HIPixelTracklets_p1.h" -#include "AthenaPoolUtilities/TPObjRef.h" -#include <vector> - -class HIPixelTrackletsCollection_p1 -: public std::vector<TPObjRef> { - - public: - //default constructor - HIPixelTrackletsCollection_p1() {}; - -}; - - - -#endif diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollection_tlp1.h b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollection_tlp1.h deleted file mode 100644 index 0cea08db6fa1fbef7299a046eb936f7c48f91bc2..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTrackletsCollection_tlp1.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef HIPIXELTRACKLETSCOLLECTION_TLP1_H -#define HIPIXELTRACKLETSCOLLECTION_TLP1_H - -#include "HIRecTPCnv/HIPixelTrackletsCollection_p1.h" -#include "HIRecTPCnv/HIPixelTracklets_p1.h" - -class HIPixelTrackletsCollection_tlp1 { - public: - HIPixelTrackletsCollection_tlp1(){} - - std::vector<HIPixelTrackletsCollection_p1> m_trackletsCollections; - std::vector<HIPixelTracklets_p1> m_tracklets; -}; - -#endif diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTracklets_p1.h b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTracklets_p1.h deleted file mode 100644 index 094f5c4ffbf6f414dc83565523041454bee8c64d..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIPixelTracklets_p1.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef HIPIXELTRACKLETS_P1_H -#define HIPIXELTRACKLETS_P1_H - -#include "AthenaPoolUtilities/TPObjRef.h" -class HIPixelTracklets_p1 { - friend class HIPixelTrackletsCnv_p1; - public: - HIPixelTracklets_p1() { - m_eta=0; - m_phi=0; - m_pt=0; - m_etaS=0; - m_phiS=0; - }; - //vertex position - TPObjRef m_vrt; - - //cluster - //TPObjRef m_cluster; - //cluster vector - std::vector<TPObjRef> m_clusters; - double m_eta; - double m_phi; - double m_pt; - double m_etaS; - double m_phiS; -}; - -#endif diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIRecTPCnvDict.h b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIRecTPCnvDict.h deleted file mode 100755 index ec5ad730707e882282f68d7c3d1d51f153dc2bc6..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HIRecTPCnvDict.h +++ /dev/null @@ -1,41 +0,0 @@ -///////////////////////// -*- C++ -*- ///////////////////////////// - -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/// File: HIRecTPCnv/HIRecTPCnvDict.h -/// Dictionary file for persistent representation(s) of AOD containers -/// Author: Sebastien Binet <binet@cern.ch> -/// Date: December 2006 - -#ifndef HIRECTPCNV_HIRECTPCNVCNVDICT_H -#define HIRECTPCNV_HIRECTPCNVCNVDICT_H - -#include "HIRecTPCnv/EtaPhiBins_p1.h" -#include "HIRecTPCnv/EtaPhiBinsCnv_p1.h" -#include "HIRecTPCnv/HIPixelTrackletsCollection_p1.h" -#include "HIRecTPCnv/HIPixelTracklets_p1.h" -#include "HIRecTPCnv/HIPixelTrackletsCollection_tlp1.h" -#include "HIRecTPCnv/HIPixelTrackletsCollectionCnv_tlp1.h" -#include "HIGlobal/HIPixelTrackletsCollection.h" - -#include "InDetEventTPCnv/InDetPrepRawData/PixelCluster_p1.h" - -#include "HIGlobal/HITRTInfo.h" -#include "HIRecTPCnv/HITRTInfo_p1.h" -#include "HIRecTPCnv/HITRTInfoCnv_p1.h" - -//struct dummy { -T_TPCnv<EtaPhiBins,EtaPhiBins_p1> m_etaPhiBinsCnv; - -std::vector< HIPixelTracklets_p1 > m_v1; -std::vector< HIPixelTrackletsCollection_p1 > m_v2; - -T_TPCnv<HIPixelTrackletsCollection,HIPixelTrackletsCollection_tlp1> m_HIPixelTrackletsCollectionCnv; - -T_TPCnv<HITRTInfo, HITRTInfo_p1> m_hitrtinfocnv; - -//}; - -#endif //RECTPCNV_RECTPCNVCNVDICT_H diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HITRTInfoCnv_p1.h b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HITRTInfoCnv_p1.h deleted file mode 100644 index 9e92321de996bb453e531a7b9992922809edd9e3..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HITRTInfoCnv_p1.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef HIRECTPCNV_HITRTINFOCNV_P1_H -#define HIRECTPCNV_HITRTINFOCNV_P1_H - -#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" -#include "HIRecTPCnv/HITRTInfo_p1.h" -#include "HIGlobal/HITRTInfo.h" - -class MsgStream; - -class HITRTInfoCnv_p1 : public T_AthenaPoolTPCnvBase<HITRTInfo, HITRTInfo_p1> -{ - public: - HITRTInfoCnv_p1() {}; - virtual void persToTrans( const HITRTInfo_p1 *persObj, - HITRTInfo *transObj, - MsgStream &msg ); - - virtual void transToPers( const HITRTInfo *transObj, - HITRTInfo_p1 *persObj, - MsgStream &msg ); -}; - -template <> -class T_TPCnv<HITRTInfo, HITRTInfo_p1 > - : public HITRTInfoCnv_p1 -{ }; - -#endif diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HITRTInfo_p1.h b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HITRTInfo_p1.h deleted file mode 100644 index 0bfc15fc52393eede99ad4e469fe0b6911dd3b45..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/HITRTInfo_p1.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef HIRECTPCNV_HITRTINFO_P1_H -#define HIRECTPCNV_HITRTINFO_P1_H - -#include <vector> - -// forward declarations -class HITRTInfoCnv_p1; - -class HITRTInfo_p1 -{ - friend class HITRTInfoCnv_p1; - - public: - - /** default constructor */ - HITRTInfo_p1() {}; - - /** destructor */ - ~HITRTInfo_p1() {}; - - // protected: - - std::vector<int> infos; -}; -#endif diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/selection.xml b/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/selection.xml deleted file mode 100755 index f9d8e4ceb8e68fad3214b03309d5cf5341ec8a16..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/HIRecTPCnv/selection.xml +++ /dev/null @@ -1,25 +0,0 @@ - -<lcgdict> - - <class name="EtaPhiBins_p1" - id="C653008A-0C79-4102-A318-F42703FD7EE4"/> - - <class name="T_TPCnv<EtaPhiBins,EtaPhiBins_p1>"/> - <class name="EtaPhiBinsCnv_p1" /> - <class name="T_AthenaPoolTPCnvBase<EtaPhiBins, EtaPhiBins_p1>"/> - <class name="T_AthenaPoolTPPolyCnvBase<EtaPhiBins, EtaPhiBins, EtaPhiBins_p1>"/> - <class name="T_AthenaPoolTPAbstractPolyCnvBase<EtaPhiBins, EtaPhiBins, EtaPhiBins_p1>"/> - <class name="ITPConverterFor<EtaPhiBins>"/> - - <class name="HIPixelTrackletsCollection_tlp1" id="8FE8FB83-AA9B-4E4A-8365-FBDDBC5B5400" /> - <class name="std::vector<HIPixelTrackletsCollection_p1>" /> - <class name="HIPixelTrackletsCollectionCnv_tlp1" /> - <class name="HIPixelTracklets_p1" /> - <class name="std::vector<HIPixelTracklets_p1>" /> - - <!-- <class name="InDet:PixelCluster_p1" /> --> - - <class name="T_TPCnv<HIPixelTrackletsCollection, HIPixelTrackletsCollection_tlp1>" /> - <class name="HITRTInfo_p1" id="8F3FEA42-D7E6-4FD7-84C1-91D5B551B537" /> - -</lcgdict> diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/EtaPhiBinsCnv_p1.cxx b/Reconstruction/HeavyIonRec/HIRecTPCnv/src/EtaPhiBinsCnv_p1.cxx deleted file mode 100755 index 7ecb67c31a1d37838989a884f7ef1ec1073e2f04..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/EtaPhiBinsCnv_p1.cxx +++ /dev/null @@ -1,98 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/******************************************************************** - -NAME: EtaPhiBinsCnv_p1.cxx -PACKAGE: offline/Reconstruction/RecTPCnv - -AUTHORS: S. Resconi -CREATED: Jul 2007 - -PURPOSE: Transient/Persisten converter for EtaPhiBins class -********************************************************************/ - -// AthenaPoolCnvSvc includes -#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" - -// EtaPhiBinsEvent includes -#define private public -#define protected public -#include "HIGlobal/EtaPhiBins.h" -#undef private -#undef protected - -// RecTPCnv includes -#include "HIRecTPCnv/EtaPhiBinsCnv_p1.h" - -#include <TBufferFile.h> -#include <TROOT.h> - -/////////////////////////////////////////////////////////////////// -// methods: -/////////////////////////////////////////////////////////////////// - -void EtaPhiBinsCnv_p1::persToTrans( const EtaPhiBins_p1* pers, - EtaPhiBins* trans, - MsgStream& msg ) -{ - msg << MSG::DEBUG << "Loading EtaPhiBins from persistent state..." - << endmsg; - - trans->m_EtaMin = pers->m_EtaMin; - trans->m_EtaMax = pers->m_EtaMax; - trans->m_NEtaBins = pers->m_NEtaBins; - trans->m_NPhiBins = pers->m_NPhiBins; - TBufferFile b(TBuffer::kRead); - b.SetBuffer((void*)&(pers->m_h2vec[0]),pers->m_h2vec.size(),kFALSE); - TH2F* h2 = (TH2F*) b.ReadObject(gROOT->GetClass("TH2F")); - trans->m_H2 = *h2; - //trans->m_H2.Print(); - msg << MSG::DEBUG << "H2 reading didn't crash!" << endmsg; - return; -} - -void EtaPhiBinsCnv_p1::transToPers( const EtaPhiBins* trans, - EtaPhiBins_p1* pers, - MsgStream& msg ) -{ - msg << MSG::DEBUG << "Creating persistent state of EtaPhiBins..." - << endmsg; - - pers->m_EtaMin = trans->m_EtaMin; - pers->m_EtaMax = trans->m_EtaMax; - pers->m_NEtaBins = trans->m_NEtaBins; - pers->m_NPhiBins = trans->m_NPhiBins; - - - msg << MSG::DEBUG << "Printing H2" << endmsg; - //trans->m_H2.Print(); - - msg << MSG::DEBUG << "Make TBuffer" << endmsg; - TBufferFile b(TBuffer::kWrite); - msg << MSG::DEBUG << "Writing H2 into TBuffer" << endmsg; - b.WriteObject(&trans->m_H2); - char* buf = b.Buffer(); - int len = b.Length(); - msg << MSG::DEBUG << "Clearing vector" << endmsg; - pers->m_h2vec.clear(); - msg << MSG::DEBUG << "Reserving m_h2vec to length " << len << endmsg; - pers->m_h2vec.reserve(len); - msg << MSG::DEBUG << "m_h2vec size = " << pers->m_h2vec.size() << endmsg; - - msg << MSG::DEBUG << "Pushing back " << b.Length() << " bytes to m_h2vec" << endmsg; - - for (int i = 0;i<len;i++) - { - unsigned char ib = buf[i]; - - msg << MSG::DEBUG << "push back i = " << i << "cont = " << ib << endmsg; - - pers->m_h2vec.push_back(ib); - } - - msg << MSG::DEBUG << "H2 writing didn't crash!" << endmsg; - - return; -} diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/EtaPhiBins_p1.cxx b/Reconstruction/HeavyIonRec/HIRecTPCnv/src/EtaPhiBins_p1.cxx deleted file mode 100755 index 75dec2739f27aa50584e24b4743e099fec4639b4..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/EtaPhiBins_p1.cxx +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/******************************************************************** - -NAME: EtaPhiBins_p1 -PACKAGE: offline/Reconstruction/RecTPCnv - -AUTHORS: S. Resconi -CREATED: Jul 2007 - -PURPOSE: Persistent rapresentation of EtaPhiBins class -********************************************************************/ - -// RecTPCnv includes -#include "HIRecTPCnv/EtaPhiBins_p1.h" - -/////////////////////////////////////////////////////////////////// -/// Public methods: -/////////////////////////////////////////////////////////////////// - -EtaPhiBins_p1::~EtaPhiBins_p1() -{} diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HIPixelTrackletsCnv_p1.cxx b/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HIPixelTrackletsCnv_p1.cxx deleted file mode 100644 index ca494080c0194c4e5b5e0a023cc07c3ef9342dc4..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HIPixelTrackletsCnv_p1.cxx +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include "HIGlobal/HIPixelTracklets.h" - -#include "HIRecTPCnv/HIPixelTrackletsCnv_p1.h" - -void HIPixelTrackletsCnv_p1::persToTrans(const HIPixelTracklets_p1 *persObj, HIPixelTracklets *transObj, MsgStream &log) { - transObj->m_eta = persObj->m_eta; - transObj->m_phi = persObj->m_phi; - transObj->m_pt = persObj->m_pt; - transObj->m_etaS = persObj->m_etaS; - transObj->m_phiS = persObj->m_phiS; -} - -void HIPixelTrackletsCnv_p1::transToPers(const HIPixelTracklets *transObj, HIPixelTracklets_p1 *persObj, MsgStream &log) { - log << MSG::DEBUG << "HIPixelTrackletsCnv_p1:transToPers:starting." << endmsg; - persObj->m_eta = transObj->m_eta; - persObj->m_phi = transObj->m_phi; - persObj->m_pt = transObj->m_pt; - persObj->m_etaS = transObj->m_etaS; - persObj->m_phiS = transObj->m_phiS; -} diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HIPixelTrackletsCollectionCnv_tlp1.cxx b/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HIPixelTrackletsCollectionCnv_tlp1.cxx deleted file mode 100644 index e89b9aea51c4129543b071455268ca2f4525aea1..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HIPixelTrackletsCollectionCnv_tlp1.cxx +++ /dev/null @@ -1,25 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include "HIRecTPCnv/HIPixelTrackletsCollectionCnv_tlp1.h" - -HIPixelTrackletsCollectionCnv_tlp1::HIPixelTrackletsCollectionCnv_tlp1() { - addMainTPConverter(); - - addTPConverter( &m_hiPixelTrackletsCnv); -} - -void HIPixelTrackletsCollectionCnv_tlp1::setPStorage( HIPixelTrackletsCollection_tlp1 *storage) { - setMainCnvPStorage( &storage->m_trackletsCollections ); - - m_hiPixelTrackletsCnv.setPStorage(&storage->m_tracklets); -} - -T_TPCnv<HIPixelTrackletsCollection, HIPixelTrackletsCollection_tlp1 >::T_TPCnv() -{ } - -void T_TPCnv<HIPixelTrackletsCollection, HIPixelTrackletsCollection_tlp1 >::persToTrans(const HIPixelTrackletsCollection_tlp1* pers, HIPixelTrackletsCollection* trans, MsgStream& msg) { - setPStorage( const_cast<HIPixelTrackletsCollection_tlp1*> (pers)); - m_mainConverter.pstoreToTrans(0,trans,msg); -} diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HIRecTPCnv.cxx b/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HIRecTPCnv.cxx deleted file mode 100644 index 3b634016adb7fc3ac6174d542cb4a41778123af1..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HIRecTPCnv.cxx +++ /dev/null @@ -1,22 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -// generate the T/P converter entries -#include "AthenaKernel/TPCnvFactory.h" - -#include "HIRecTPCnv/EtaPhiBins_p1.h" -#include "HIRecTPCnv/EtaPhiBinsCnv_p1.h" -#include "HIRecTPCnv/HIPixelTracklets_p1.h" -#include "HIRecTPCnv/HIPixelTrackletsCnv_p1.h" - - -// DECLARE_TPCNV_FACTORY(EtaPhiBinsCnv_p1, -// EtaPhiBins, -// EtaPhiBins_p1, -// Athena::TPCnvVers::Current) - -// DECLARE_TPCNV_FACTORY(HIPixelTrackletsCnv_p1, -// HIPixelTracklets, -// HIPixelTracklets_p1, -// Athena::TPCnvVers::Current) diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HITRTInfoCnv_p1.cxx b/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HITRTInfoCnv_p1.cxx deleted file mode 100644 index 3a351febf276e07b5866b9943a7fae0e5ef4e75c..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HITRTInfoCnv_p1.cxx +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include "HIRecTPCnv/HITRTInfoCnv_p1.h" - -void HITRTInfoCnv_p1::persToTrans( const HITRTInfo_p1* pers, - HITRTInfo* trans, - MsgStream& msg ) -{ - if (msg.level() <= MSG::DEBUG) - msg << MSG::DEBUG << "Loading HITRTInfo from persistent state.[start]" << endmsg; - trans->m_OccupancyPerPart.reserve(pers->infos.size()); - for( unsigned int i(0); i<pers->infos.size(); ++i ) - trans->m_OccupancyPerPart.push_back( pers->infos[i] ); - if (msg.level() <= MSG::DEBUG) - msg << MSG::DEBUG << "Loading HITRTInfo from persistent state.[end]" << endmsg; - return; -} - -void HITRTInfoCnv_p1::transToPers( const HITRTInfo* trans, - HITRTInfo_p1* pers, - MsgStream& msg ) -{ - if (msg.level() <= MSG::DEBUG) - msg << MSG::DEBUG << "Creating persistent state of HITRTInfo.[start]" << endmsg; - pers->infos.reserve(trans->m_OccupancyPerPart.size()); - - for( unsigned int i(0); i<trans->m_OccupancyPerPart.size(); ++i ) - { - pers->infos.push_back( trans->m_OccupancyPerPart[i] ); - if (msg.level() <= MSG::DEBUG) - msg << MSG::DEBUG << "Creating persistent state of HITRTInfo.[" << i << "] : " << trans->m_OccupancyPerPart[i] << endmsg; - } - if (msg.level() <= MSG::DEBUG) - msg << MSG::DEBUG << "Creating persistent state of HITRTInfo.[end]" << endmsg; - return; -} diff --git a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HITRTInfo_p1.cxx b/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HITRTInfo_p1.cxx deleted file mode 100644 index e5d5ac26df76821db59b824277efce89edd5a6b6..0000000000000000000000000000000000000000 --- a/Reconstruction/HeavyIonRec/HIRecTPCnv/src/HITRTInfo_p1.cxx +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include "HIRecTPCnv/HITRTInfo_p1.h" diff --git a/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetTrackSumMomentsTool.h b/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetTrackSumMomentsTool.h index 0fff8125988196c54e371e4524c96ae8ad2ac4f7..ef096aa18659fe79d5d4a8e6a1a21a700a77517d 100644 --- a/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetTrackSumMomentsTool.h +++ b/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetTrackSumMomentsTool.h @@ -75,8 +75,8 @@ private: SG::ReadHandleKey< xAOD::VertexContainer> m_vertexContainer_key{this, "VertexContainer", "", "Vertex container key"}; SG::ReadHandleKey<jet::TrackVertexAssociation> m_tva_key{this, "TrackVertexAssociation", "", "Track vertex association key"}; - SG::WriteDecorHandleKey<xAOD::JetContainer> m_trackSumPtKey{this, "SumPtName", "SumPt", "SG key for output track SumPt decoration"}; - SG::WriteDecorHandleKey<xAOD::JetContainer> m_trackSumMassKey{this, "SumMassName", "SumMass", "SG key for output track SumMass decoration"}; + SG::WriteDecorHandleKey<xAOD::JetContainer> m_trackSumPtKey{this, "SumPtName", "TrackSumPt", "SG key for output track SumPt decoration"}; + SG::WriteDecorHandleKey<xAOD::JetContainer> m_trackSumMassKey{this, "SumMassName", "TrackSumMass", "SG key for output track SumMass decoration"}; }; #endif diff --git a/Reconstruction/MissingETEvent/CMakeLists.txt b/Reconstruction/MissingETEvent/CMakeLists.txt index dbf249baca7cae8d44abab713a0d0ff8ebf30526..c05b6278f967059478cc52fe579635cbcdff8212 100644 --- a/Reconstruction/MissingETEvent/CMakeLists.txt +++ b/Reconstruction/MissingETEvent/CMakeLists.txt @@ -1,43 +1,23 @@ -################################################################################ -# Package: MissingETEvent -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( MissingETEvent ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Calorimeter/CaloEvent - Calorimeter/CaloGeoHelpers - Control/AthenaKernel - Control/AthContainers - Control/Navigation - Event/EventKernel - Event/NavFourMom - GaudiKernel - PRIVATE - Generators/AtlasHepMC - Control/CxxUtils - Generators/GenAnalysisTools/TruthHelper ) - # External dependencies: -find_package( Boost COMPONENTS filesystem thread system ) +find_package( Boost ) find_package( CLHEP ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) # Component(s) in the package: atlas_add_library( MissingETEvent src/*.cxx PUBLIC_HEADERS MissingETEvent INCLUDE_DIRS ${Boost_INCLUDE_DIRS} - PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} + PRIVATE_INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS} - LINK_LIBRARIES ${Boost_LIBRARIES} AtlasHepMCLib CaloEvent CaloGeoHelpers AthContainers Navigation EventKernel NavFourMom GaudiKernel - PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} CxxUtils TruthHelper ) + LINK_LIBRARIES ${Boost_LIBRARIES} AthenaKernel AtlasHepMCLib CaloEvent CaloGeoHelpers AthContainers Navigation EventKernel NavFourMom GaudiKernel + PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} CxxUtils TruthHelper ) atlas_add_dictionary( MissingETEventDict MissingETEvent/MissingETEventDict.h MissingETEvent/selection.xml - INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AtlasHepMCLib CaloEvent CaloGeoHelpers AthContainers Navigation EventKernel NavFourMom GaudiKernel CxxUtils TruthHelper MissingETEvent ) - + LINK_LIBRARIES MissingETEvent ) diff --git a/Reconstruction/MissingETGoodness/CMakeLists.txt b/Reconstruction/MissingETGoodness/CMakeLists.txt index 568c08b2a18e773890ed060e79e87a881f84ae5b..9fa00003f5a2c2d79863a5a7fde118453ffacb89 100644 --- a/Reconstruction/MissingETGoodness/CMakeLists.txt +++ b/Reconstruction/MissingETGoodness/CMakeLists.txt @@ -1,62 +1,32 @@ -################################################################################ -# Package: MissingETGoodness -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( MissingETGoodness ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Calorimeter/CaloEvent - Control/AthenaBaseComps - Control/CxxUtils - Control/StoreGate - GaudiKernel - Reconstruction/Jet/JetEvent - Reconstruction/Jet/JetUtils - Reconstruction/MissingETEvent - Reconstruction/MuonIdentification/muonEvent - Reconstruction/Particle - PRIVATE - Control/AthenaKernel - DataQuality/GoodRunsLists - Event/EventBookkeeperMetaData - Event/FourMomUtils - Event/xAOD/xAODEventInfo - LArCalorimeter/LArRecEvent - PhysicsAnalysis/PrimaryDPDMaker - TileCalorimeter/TileEvent ) - # External dependencies: -find_package( CLHEP ) find_package( ROOT COMPONENTS Cint Core Tree MathCore Hist RIO pthread ) -# tag ROOTBasicLibs was not recognized in automatic conversion in cmt2cmake - # Component(s) in the package: atlas_add_root_dictionary( MissingETGoodnessLib MissingETGoodnessLibDictSource ROOT_HEADERS MissingETGoodness/TRunRange.h MissingETGoodness/Goodies.h MissingETGoodness/TEasyFormula.h MissingETGoodness/TSelection.h MissingETGoodness/TSelectionSetArchive.h MissingETGoodness/TSelectionSet.h MissingETGoodness/EtmissGoodnessQuality.h MissingETGoodness/NtupleGoodiesFiller.h MissingETGoodness/EtmissGoodnessManager.h MissingETGoodness/EtmissGoodness_Loose_20091117.h MissingETGoodness/EtmissGoodness_Medium_20091117.h MissingETGoodness/EtmissGoodness_Tight_20091117.h MissingETGoodness/EtmissGoodness_Loose_20091217.h MissingETGoodness/EtmissGoodness_Loose_20100115.h MissingETGoodness/EtmissGoodness_Loose_20100217.h MissingETGoodness/EtmissGoodness_Loose_20100408.h MissingETGoodness/EtmissGoodness_Loose_20100415.h MissingETGoodness/EtmissGoodness.h MissingETGoodness/EtmissGoodnessConfig.h Root/LinkDef.h - EXTERNAL_PACKAGES ROOT CLHEP ) + EXTERNAL_PACKAGES ROOT ) atlas_add_library( MissingETGoodnessLib Root/*.cxx ${MissingETGoodnessLibDictSource} PUBLIC_HEADERS MissingETGoodness INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - PRIVATE_INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} - PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS} - LINK_LIBRARIES ${ROOT_LIBRARIES} CaloEvent AthenaBaseComps CxxUtils GaudiKernel JetEvent JetUtils MissingETEvent muonEvent Particle StoreGateLib SGtests AthenaKernel GoodRunsListsLib PrimaryDPDMakerLib - PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} EventBookkeeperMetaData FourMomUtils xAODEventInfo LArRecEvent TileEvent ) + LINK_LIBRARIES ${ROOT_LIBRARIES} CaloEvent AthenaBaseComps CxxUtils GaudiKernel JetEvent JetUtils MissingETEvent muonEvent Particle StoreGateLib ) atlas_add_component( MissingETGoodness src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} CaloEvent AthenaBaseComps CxxUtils StoreGateLib SGtests GaudiKernel JetEvent JetUtils MissingETEvent muonEvent Particle AthenaKernel GoodRunsListsLib EventBookkeeperMetaData FourMomUtils xAODEventInfo LArRecEvent PrimaryDPDMakerLib TileEvent MissingETGoodnessLib ) + INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} + LINK_LIBRARIES ${ROOT_LIBRARIES} CaloEvent GaudiKernel JetEvent JetUtils MissingETEvent muonEvent Particle AthenaKernel GoodRunsListsLib EventBookkeeperMetaData FourMomUtils xAODEventInfo LArRecEvent PrimaryDPDMakerLib TileEvent MissingETGoodnessLib ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) atlas_install_scripts( scripts/make* ) diff --git a/Reconstruction/MissingETGoodness/MissingETGoodness/JetGoodiesFiller.h b/Reconstruction/MissingETGoodness/MissingETGoodness/JetGoodiesFiller.h index 445ebae114b38dba72c5aec9f22e38a5cf9741ca..7051d6a72bc17f0df597127588a5fc823a021433 100644 --- a/Reconstruction/MissingETGoodness/MissingETGoodness/JetGoodiesFiller.h +++ b/Reconstruction/MissingETGoodness/MissingETGoodness/JetGoodiesFiller.h @@ -1,26 +1,20 @@ // -*- C++ -*- /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef MissingETGoodness_JetGoodiesFiller_H #define MissingETGoodness_JetGoodiesFiller_H #include "GaudiKernel/ToolHandle.h" -// #include "GaudiKernel/Algorithm.h" #include "GaudiKernel/ObjectVector.h" -//#include "CLHEP/Units/SystemOfUnits.h" -// #include "GaudiKernel/AlgTool.h" #include "GaudiKernel/MsgStream.h" -// #include "GaudiKernel/ITHistSvc.h" #include "MissingETGoodness/JetVarTool.h" #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ToolHandle.h" #include "MissingETGoodness/Goodies.h" -// #include "TH1.h" -// #include "TH2.h" #include "TString.h" ///////////////////////////////////////////////////////////////////////////// diff --git a/Reconstruction/MissingETGoodness/MissingETGoodness/MuonGoodiesFiller.h b/Reconstruction/MissingETGoodness/MissingETGoodness/MuonGoodiesFiller.h index 02767fae5508ed01d06b48a46248f08a413c1375..5a36b5b06492d34ae16db29a0a71f1b5f7654391 100644 --- a/Reconstruction/MissingETGoodness/MissingETGoodness/MuonGoodiesFiller.h +++ b/Reconstruction/MissingETGoodness/MissingETGoodness/MuonGoodiesFiller.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef GOODNESSMUONFILLER_H @@ -7,7 +7,6 @@ #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ObjectVector.h" -//#include "CLHEP/Units/SystemOfUnits.h" #include "GaudiKernel/MsgStream.h" #include "MissingETGoodness/Goodies.h" #include "AthenaBaseComps/AthAlgTool.h" diff --git a/Reconstruction/MissingETGoodness/python/JetVarToolConfig.py b/Reconstruction/MissingETGoodness/python/JetVarToolConfig.py index 23028cc0bd7b5d6bad75df4ff1a1722f8c068164..f5d3c66820c2bef1205b69d33f5b83eccbccc8a6 100644 --- a/Reconstruction/MissingETGoodness/python/JetVarToolConfig.py +++ b/Reconstruction/MissingETGoodness/python/JetVarToolConfig.py @@ -1,15 +1,11 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function - from AthenaCommon.AlgSequence import AlgSequence from RecExConfig.ObjKeyStore import cfgKeyStore -from JetRecTools.JetRecToolsConf import * -from JetRec.JetGetters import * +from JetRec.JetGetters import make_StandardJetGetter def JetVarToolConfig (seq = AlgSequence): - from RecExConfig.ObjKeyStore import cfgKeyStore if (cfgKeyStore.isInInput ('CaloCellContainer', 'AllCalo') and cfgKeyStore.isInInput ('CaloCellLinkContainer','CaloCalTopoCluster_Link') ): @@ -22,11 +18,11 @@ def JetVarToolConfig (seq = AlgSequence): jetFlags.doJVF = False ##the following jet getter seems to fail if we don't deactivate the jet vertex finder. #make_StandardJetGetter('AntiKt',0.4,'Topo',disable=False, doCalib=True, calibName='H1NumInv', outputCollectionName='AntiKt4TopoJets',seq=seq) #make_StandardJetGetter('AntiKt',0.6,'Topo',disable=False, doCalib=True, calibName='H1NumInv', outputCollectionName='AntiKt6TopoJets',seq=seq) - # MB: April 19, 2011, Suggested fix from SS + # MB: April 19, 2011, Suggested fix from SS make_StandardJetGetter('AntiKt',0.4,'Topo',disable=False, doCalib=True, calibName='EM:H1NumInv', outputCollectionName='AntiKt4TopoJets',seq=seq) make_StandardJetGetter('AntiKt',0.6,'Topo',disable=False, doCalib=True, calibName='EM:H1NumInv', outputCollectionName='AntiKt6TopoJets',seq=seq) - # MB: April 7, 2011 : Suggested fix from SS + # MB: April 7, 2011 : Suggested fix from SS from JetMomentTools.JetMomentToolsConf import \ JetBadChanCorrTool, JetBadCellCorrTool, JetCaloQualityTool atool4 = JetBadChanCorrTool("JetBadChanCorrTool_anti04",ConeDr=0.4,UseCalibScale=False) diff --git a/Reconstruction/MissingETGoodness/python/METGoodnessGetter.py b/Reconstruction/MissingETGoodness/python/METGoodnessGetter.py index 7ce687cd129f392ebfd3617abc36bd4701c165b2..1ca770e89e778a85f236b9bb80890c21ac267ceb 100644 --- a/Reconstruction/MissingETGoodness/python/METGoodnessGetter.py +++ b/Reconstruction/MissingETGoodness/python/METGoodnessGetter.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # # @file MissingETGoodness/python/METGoodnessGetter.py @@ -79,7 +79,7 @@ class METGoodnessGetter ( Configured ) : self._handle = manager - except: + except Exception: mlog.error ("Error configuring METGoodness.") traceback.print_exc() diff --git a/Reconstruction/MissingETGoodness/src/METCollisionFilter.cxx b/Reconstruction/MissingETGoodness/src/METCollisionFilter.cxx index 6e2c3a4f3faee148802fc04bc6511e88b0c7f7cc..129cd51b376a71f43981cf227c0a5c45c17bbce9 100644 --- a/Reconstruction/MissingETGoodness/src/METCollisionFilter.cxx +++ b/Reconstruction/MissingETGoodness/src/METCollisionFilter.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "MissingETGoodness/METCollisionFilter.h" @@ -10,10 +10,6 @@ #include "GaudiKernel/SystemOfUnits.h" -using CLHEP::GeV; -using CLHEP::ns; - - // MB: reference to MET Goodies map for storing derived quantities MET::Goodies& METCollisionFilter::s_goodies(MET::Goodies::instance()); @@ -44,10 +40,10 @@ METCollisionFilter::METCollisionFilter(const std::string& name, ISvcLocator* pSv declareProperty( "BlackRunsListArray", m_brlnameVec ); declareProperty( "clusterTimeMinEta", m_clusterMinEta = 1.); - declareProperty( "clusterTimeMinE", m_clusterMinE = 1.*GeV); - declareProperty( "clusterTimeMean", m_clusterTimeMean = 0.*ns); - declareProperty( "clusterTimeMeanDelta", m_clusterTimeMeanDelta = 10.*ns); - declareProperty( "clusterTimeACDelta", m_clusterTimeACDelta = 10.*ns); + declareProperty( "clusterTimeMinE", m_clusterMinE = 1.*Gaudi::Units::GeV); + declareProperty( "clusterTimeMean", m_clusterTimeMean = 0.*Gaudi::Units::ns); + declareProperty( "clusterTimeMeanDelta", m_clusterTimeMeanDelta = 10.*Gaudi::Units::ns); + declareProperty( "clusterTimeACDelta", m_clusterTimeACDelta = 10.*Gaudi::Units::ns); } diff --git a/Reconstruction/MissingETGoodness/src/MuonGoodiesFiller.cxx b/Reconstruction/MissingETGoodness/src/MuonGoodiesFiller.cxx index ac1fdcf45b23540cfe4c52ddfc2b0a294f4edc02..946fed778963ab0208492b660b549cc145522a09 100644 --- a/Reconstruction/MissingETGoodness/src/MuonGoodiesFiller.cxx +++ b/Reconstruction/MissingETGoodness/src/MuonGoodiesFiller.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "GaudiKernel/MsgStream.h" @@ -8,7 +8,6 @@ #include "muonEvent/MuonContainer.h" #include "MissingETGoodness/MuonGoodiesFiller.h" #include "MissingETGoodness/MuonSpShowerHelper.h" -///#include "MuonTimingInfoToolsInterfaces/IMuonTRTTimingTool.h" using namespace std; diff --git a/Reconstruction/MissingETMonitoring/CMakeLists.txt b/Reconstruction/MissingETMonitoring/CMakeLists.txt index 8c25b80349c9c0fd7fc9725dcf072ef87e119e87..fa6dd4c84b58399118da4dada1b745b00ba0c6c0 100644 --- a/Reconstruction/MissingETMonitoring/CMakeLists.txt +++ b/Reconstruction/MissingETMonitoring/CMakeLists.txt @@ -1,22 +1,8 @@ -################################################################################ -# Package: MissingETMonitoring -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( MissingETMonitoring ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaMonitoring - Reconstruction/Jet/JetInterface - PRIVATE - Event/xAOD/xAODEgamma - Event/xAOD/xAODEventInfo - Event/xAOD/xAODJet - Event/xAOD/xAODMissingET - Event/xAOD/xAODMuon - GaudiKernel ) - # External dependencies: find_package( CLHEP ) find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) @@ -26,10 +12,8 @@ atlas_add_component( MissingETMonitoring src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthenaMonitoringLib JetInterface xAODEgamma xAODEventInfo xAODJet xAODMissingET xAODMuon GaudiKernel ) + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthenaMonitoringKernelLib AthenaMonitoringLib JetInterface StoreGateLib xAODEgamma xAODEventInfo xAODJet xAODMissingET xAODMuon GaudiKernel ) # Install files from the package: -atlas_install_headers( MissingETMonitoring ) atlas_install_joboptions( share/*.py ) -atlas_install_python_modules( python/*.py ) - +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Reconstruction/MissingETPerformance/CMakeLists.txt b/Reconstruction/MissingETPerformance/CMakeLists.txt index 468d4ff229c017d793096cf226d26c0afbb5130b..5af0e5b7862eb65137ed376fa70ca483cf0560a0 100644 --- a/Reconstruction/MissingETPerformance/CMakeLists.txt +++ b/Reconstruction/MissingETPerformance/CMakeLists.txt @@ -1,18 +1,12 @@ -################################################################################ -# Package: MissingETPerformance -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( MissingETPerformance ) # External dependencies: -find_package( Boost COMPONENTS filesystem thread system ) +find_package( Boost ) find_package( CLHEP ) -find_package( ROOT COMPONENTS Graf Gpad Core Tree MathCore Hist RIO pthread MathMore Minuit Minuit2 Matrix Physics HistPainter Rint Graf3d Html Postscript Gui GX11TTF GX11 ) - -# tag ROOTBasicLibs was not recognized in automatic conversion in cmt2cmake - -# tag ROOTSTLDictLibs was not recognized in automatic conversion in cmt2cmake +find_package( ROOT COMPONENTS Graf Gpad Core Tree MathCore Hist RIO Physics ) # Component(s) in the package: atlas_add_library( MissingETPerformanceLib @@ -21,13 +15,12 @@ atlas_add_library( MissingETPerformanceLib INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} DEFINITIONS ${CLHEP_DEFINITIONS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} CaloConditions CaloEvent AthenaBaseComps SGTools GaudiKernel GeneratorObjects LArRecConditions AnalysisTriggerEvent McParticleEvent JetEvent JetUtils MissingETEvent muonEvent Particle egammaEvent TrigCaloEvent TrigInDetEvent TrigMissingEtEvent TrigMuonEvent StoreGateLib SGtests AthAnalysisToolsLib MissingETGoodnessLib TrigDecisionToolLib CaloInterfaceLib - PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} AtlasHepMCLib AthenaKernel CaloGeoHelpers FourMom FourMomUtils xAODEventInfo TruthHelper tauEvent VxVertex TrigConfL1Data ) + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} CaloConditions CaloEvent AthenaBaseComps SGTools GaudiKernel GeneratorObjects LArRecConditions AnalysisTriggerEvent McParticleEvent JetEvent JetUtils MissingETEvent muonEvent Particle egammaEvent TrigMissingEtEvent StoreGateLib AthAnalysisToolsLib MissingETGoodnessLib TrigDecisionToolLib CaloInterfaceLib + PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} AthContainers AtlasHepMCLib AthenaKernel CaloGeoHelpers FourMom FourMomUtils xAODEventInfo TruthHelper tauEvent VxVertex TrigConfL1Data ) atlas_add_component( MissingETPerformance src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${CLHEP_LIBRARIES} AtlasHepMCLib CaloConditions CaloEvent AthenaBaseComps SGTools StoreGateLib SGtests GaudiKernel GeneratorObjects LArRecConditions AthAnalysisToolsLib AnalysisTriggerEvent McParticleEvent JetEvent JetUtils MissingETEvent MissingETGoodnessLib muonEvent Particle egammaEvent TrigDecisionToolLib TrigCaloEvent TrigInDetEvent TrigMissingEtEvent TrigMuonEvent AthenaKernel CaloGeoHelpers FourMom FourMomUtils xAODEventInfo TruthHelper tauEvent VxVertex TrigConfL1Data MissingETPerformanceLib ) + LINK_LIBRARIES MissingETPerformanceLib ) # Install files from the package: atlas_install_python_modules( python/*.py ) diff --git a/Reconstruction/MuonIdentification/MuidInterfaces/MuidInterfaces/IMuonAlignmentUncertTool.h b/Reconstruction/MuonIdentification/MuidInterfaces/MuidInterfaces/IMuonAlignmentUncertTool.h new file mode 100755 index 0000000000000000000000000000000000000000..32831774ec1eef6963b65fc771d464855437b0af --- /dev/null +++ b/Reconstruction/MuonIdentification/MuidInterfaces/MuidInterfaces/IMuonAlignmentUncertTool.h @@ -0,0 +1,51 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +/////////////////////////////////////////////////////////////////// +// IMuonAlignmentUncertTool +// Interface tool to assess the muon alignment and scattering +// uncertainties using calibration files +// (c) ATLAS Combined Muon software +/////////////////////////////////////////////////////////////////// + +#ifndef MUIDINTERFACES_IMUONALIGNMENTUNCERTTOOL_H +#define MUIDINTERFACES_IMUONALIGNMENTUNCERTTOOL_H + +#include <GaudiKernel/IAlgTool.h> +#include <TrkTrack/TrackStateOnSurface.h> +#include <TrkTrack/Track.h> + +namespace Muon { + + /** Interface ID for ICombinedMuonTrackBuilder*/ + static const InterfaceID IID_IMuonAlignmentUncertTool("IMuonAlignmentUncertTool", 1, 0); + + /**@class IMuonAlignmentUncertTool + Base class for MuonAlignmentUncertTool AlgTool + */ + class IMuonAlignmentUncertTool : virtual public IAlgTool { + public: + /**Virtual destructor*/ + virtual ~IMuonAlignmentUncertTool()= default; + + /** AlgTool and IAlgTool interface methods */ + static const InterfaceID& interfaceID() { return IID_IMuonAlignmentUncertTool; } + + /**IMuonAlignmentUncertTool interface: retrieve the associated uncertainties */ + virtual float get_uncertainty (const Trk::Track* trk) const = 0; + + /// Helper method to retrieve the last measurement of the ID, + /// the first and last scatterer in the calorimeter + /// and finally to retrieve the first measurement inside the MS + virtual void get_track_state_measures(const Trk::Track* track, const Trk::TrackStateOnSurface*& id_exit, + const Trk::TrackStateOnSurface*& calo_entrance, + const Trk::TrackStateOnSurface*& calo_exit, + const Trk::TrackStateOnSurface*& ms_entrance) const = 0; + }; + +} // end of namespace + +#endif + + diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h index e6f6efdd65efdfcd2a546cad6c6f46ac109d4c3a..e783b3f0b53dc2f3af7aca6898661909786bb68a 100755 --- a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h +++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h @@ -16,6 +16,8 @@ #define MUIDTRACKBUILDER_COMBINEDMUONTRACKBUILDER_H #include "MuidInterfaces/ICombinedMuonTrackBuilder.h" +#include "MuidInterfaces/IMuonAlignmentUncertTool.h" + #include "AthenaBaseComps/AthAlgTool.h" #include "GaudiKernel/ServiceHandle.h" #include "GaudiKernel/ToolHandle.h" @@ -61,7 +63,7 @@ namespace Rec { class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuonTrackBuilder { public: CombinedMuonTrackBuilder(const std::string& type, const std::string& name, const IInterface* parent); - ~CombinedMuonTrackBuilder() = default; + ~CombinedMuonTrackBuilder(); StatusCode initialize(); StatusCode finalize(); @@ -258,6 +260,12 @@ class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuon "CaloMaterialProvider", "Trk::TrkMaterialProviderTool/TrkMaterialProviderTool", }; + + /// ToolHandles to retrieve the uncertainties for theta and phi for + /// the scattering uncertainties + ToolHandle<Muon::IMuonAlignmentUncertTool> m_alignUncertTool_theta; + ToolHandle<Muon::IMuonAlignmentUncertTool> m_alignUncertTool_phi; + ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; @@ -294,23 +302,22 @@ class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuon double m_vertex3DSigmaRPhi; double m_vertex3DSigmaZ; double m_zECToroid; - double m_IDMS_xySigma; - double m_IDMS_rzSigma; + // dummy (unused - kept for backwards compatibility) bool m_indetSlimming; bool m_inputSlimming; // constants - const Trk::Volume* m_calorimeterVolume; - const Trk::Volume* m_indetVolume; + std::unique_ptr<const Trk::Volume> m_calorimeterVolume; + std::unique_ptr<const Trk::Volume> m_indetVolume; const Trk::TrackingVolume* m_spectrometerEntrance; // vertex region and phi modularity for pseudo-measurement constraints - Trk::RecVertex* m_beamAxis; - Trk::PerigeeSurface* m_perigeeSurface; + std::unique_ptr<Trk::RecVertex> m_beamAxis; + std::unique_ptr<Trk::PerigeeSurface> m_perigeeSurface; double m_sigmaPhiSector; - Trk::RecVertex* m_vertex; + std::unique_ptr<Trk::RecVertex> m_vertex; // counters mutable std::atomic_uint m_countAcceptedStandaloneFit; @@ -322,7 +329,7 @@ class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuon mutable std::atomic_uint m_countVertexRegion; // count warnings - MessageHelper* m_messageHelper; + std::unique_ptr<MessageHelper> m_messageHelper; bool m_updateWithCaloTG; bool m_useCaloTG; diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx index 91df3e06db34b667e0601e6dd721725f3cbedf4f..b1f92b8658b4d270f37265db6211ecd7ef03eba9 100755 --- a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx +++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx @@ -48,10 +48,12 @@ namespace Rec { - +CombinedMuonTrackBuilder::~CombinedMuonTrackBuilder(){} CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, const std::string& name, - const IInterface* parent) - : AthAlgTool(type, name, parent), + const IInterface* parent): + AthAlgTool(type, name, parent), + m_alignUncertTool_theta("Muon::MuonAlignmentUncertTool/MuonAlignmentUncertToolTheta"), + m_alignUncertTool_phi("Muon::MuonAlignmentUncertTool/MuonAlignmentUncertToolPhi"), m_magFieldProperties(Trk::FullField), m_allowCleanerVeto(true), m_cleanCombined(true), @@ -73,9 +75,7 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, cons m_vertex2DSigmaZ(100. * Gaudi::Units::meter), m_vertex3DSigmaRPhi(6. * Gaudi::Units::mm), m_vertex3DSigmaZ(60. * Gaudi::Units::mm), - m_zECToroid(10. * Gaudi::Units::meter), - m_IDMS_xySigma(1. * Gaudi::Units::mm), - m_IDMS_rzSigma(1. * Gaudi::Units::mm), + m_zECToroid(10. * Gaudi::Units::meter), m_indetSlimming(false), m_inputSlimming(false), m_calorimeterVolume(nullptr), @@ -100,9 +100,8 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, cons m_refineELossStandAloneTrackFit(true), m_addElossID(true), m_addIDMSerrors(true), - m_useRefitTrackError(true) -{ - m_messageHelper = new MessageHelper(*this); + m_useRefitTrackError(true) { + m_messageHelper = std::make_unique<MessageHelper>(*this); declareInterface<ICombinedMuonTrackBuilder>(this); declareProperty("AllowCleanerVeto", m_allowCleanerVeto); @@ -126,8 +125,9 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, cons declareProperty("Vertex3DSigmaRPhi", m_vertex3DSigmaRPhi); declareProperty("Vertex3DSigmaZ", m_vertex3DSigmaZ); declareProperty("zECToroid", m_zECToroid); - declareProperty("IDMS_xySigma", m_IDMS_xySigma); - declareProperty("IDMS_rzSigma", m_IDMS_rzSigma); + declareProperty("AlignmentUncertToolTheta" , m_alignUncertTool_theta); + declareProperty("AlignmentUncertToolPhi" , m_alignUncertTool_phi); + // deprecated declareProperty("IndetSlimming", m_indetSlimming); @@ -292,30 +292,33 @@ CombinedMuonTrackBuilder::initialize() ATH_MSG_DEBUG("Retrieved Svc " << m_trackingVolumesSvc); m_calorimeterVolume = - new Trk::Volume(m_trackingVolumesSvc->volume(Trk::ITrackingVolumesSvc::MuonSpectrometerEntryLayer)); - m_indetVolume = new Trk::Volume(m_trackingVolumesSvc->volume(Trk::ITrackingVolumesSvc::CalorimeterEntryLayer)); + std::make_unique<Trk::Volume>(m_trackingVolumesSvc->volume(Trk::ITrackingVolumesSvc::MuonSpectrometerEntryLayer)); + m_indetVolume = std::make_unique<Trk::Volume>(m_trackingVolumesSvc->volume(Trk::ITrackingVolumesSvc::CalorimeterEntryLayer)); // sigma of phi sector for pseudo-measurement constraint m_sigmaPhiSector = std::tan(0.125 * M_PI / std::sqrt(12.)); // create beamAxis and vertexRegion for constrained (projective) track fits Amg::Vector3D origin(0., 0., 0.); - m_perigeeSurface = new Trk::PerigeeSurface(origin); + m_perigeeSurface = std::make_unique<Trk::PerigeeSurface>(origin); AmgSymMatrix(3) beamAxisCovariance; beamAxisCovariance.setZero(); (beamAxisCovariance)(0, 0) = m_vertex2DSigmaRPhi * m_vertex2DSigmaRPhi; (beamAxisCovariance)(1, 1) = m_vertex2DSigmaRPhi * m_vertex2DSigmaRPhi; (beamAxisCovariance)(2, 2) = m_vertex2DSigmaZ * m_vertex2DSigmaZ; - m_beamAxis = new Trk::RecVertex(origin, beamAxisCovariance); + m_beamAxis = std::make_unique<Trk::RecVertex>(origin, beamAxisCovariance); AmgSymMatrix(3) vertexRegionCovariance; vertexRegionCovariance.setZero(); (vertexRegionCovariance)(0, 0) = m_vertex3DSigmaRPhi * m_vertex3DSigmaRPhi; (vertexRegionCovariance)(1, 1) = m_vertex3DSigmaRPhi * m_vertex3DSigmaRPhi; (vertexRegionCovariance)(2, 2) = m_vertex3DSigmaZ * m_vertex3DSigmaZ; - m_vertex = new Trk::RecVertex(origin, vertexRegionCovariance); - + m_vertex = std::make_unique<Trk::RecVertex>(origin, vertexRegionCovariance); + if (m_addIDMSerrors) { + ATH_CHECK(m_alignUncertTool_theta.retrieve()); + ATH_CHECK(m_alignUncertTool_phi.retrieve()); + } #ifndef NDEBUG ATH_MSG_DEBUG(" vertex region: "); m_vertex->dump(msg(MSG::DEBUG)); @@ -352,15 +355,7 @@ CombinedMuonTrackBuilder::finalize() // summarize WARNINGs m_messageHelper->printSummary(); - - delete m_beamAxis; - delete m_calorimeterVolume; - delete m_indetVolume; - delete m_messageHelper; - delete m_perigeeSurface; - delete m_vertex; - - return AthAlgTool::finalize(); + return StatusCode::SUCCESS; } @@ -2750,9 +2745,7 @@ CombinedMuonTrackBuilder::optimizeErrors(Trk::Track* track) const return false; } -Trk::Track* -CombinedMuonTrackBuilder::addIDMSerrors(Trk::Track* track) const -{ +Trk::Track* CombinedMuonTrackBuilder::addIDMSerrors(Trk::Track* track) const { // // take track and correct the two scattering planes in the Calorimeter // to take into account m_IDMS_rzSigma and m_IDMS_xySigma @@ -2764,168 +2757,97 @@ CombinedMuonTrackBuilder::addIDMSerrors(Trk::Track* track) const } ATH_MSG_DEBUG(" CombinedMuonTrackBuilder addIDMSerrors to track "); - Amg::Vector3D positionMS(0, 0, 0); - Amg::Vector3D positionCaloFirst(0, 0, 0); - Amg::Vector3D positionCaloLast(0, 0, 0); - - int itsos = 0; - int itsosCaloFirst = -1; - int itsosCaloLast = -1; - double p = -1.; - - DataVector<const Trk::TrackStateOnSurface>::const_iterator t = track->trackStateOnSurfaces()->begin(); - for (; t != track->trackStateOnSurfaces()->end(); ++t) { - itsos++; - - if ((**t).trackParameters()) { - if (p == -1.) { - p = (**t).trackParameters()->momentum().mag() / Gaudi::Units::GeV; - } - - if (m_indetVolume->inside((**t).trackParameters()->position())) { - continue; - } - - if ((**t).trackParameters()->position().mag() < 1000) { - continue; - } - - if (m_calorimeterVolume->inside((**t).trackParameters()->position())) { - // first scattering plane in Calorimeter - if ((**t).type(Trk::TrackStateOnSurface::Scatterer) && (**t).materialEffectsOnTrack()) { - double X0 = (**t).materialEffectsOnTrack()->thicknessInX0(); - if (X0 < 10) { - continue; - } - - if (itsosCaloFirst != -1) { - itsosCaloLast = itsos; - positionCaloLast = (**t).trackParameters()->position(); - } - - if (itsosCaloFirst == -1) { - itsosCaloFirst = itsos; - positionCaloFirst = (**t).trackParameters()->position(); - } - } - } - - if (!m_calorimeterVolume->inside((**t).trackParameters()->position())) { - if ((**t).measurementOnTrack()) { - // inside muon system - positionMS = (**t).trackParameters()->position(); - break; - } - } - } - } - - // it can happen that no Calorimeter Scatterers are found. - ATH_MSG_DEBUG(" CombinedMuonTrackBuilder addIDMSerrors p muon GeV " - << p << " First Calorimeter Scatterer radius " << positionCaloFirst.perp() << " z " - << positionCaloFirst.z() << " Second Scatterer r " << positionCaloLast.perp() << " z " - << positionCaloLast.z() << " First Muon hit r " << positionMS.perp() << " z " << positionMS.z()); - - if (itsosCaloFirst < 0 || itsosCaloLast < 0) { + + + /// Use pointer in the data vector to refer on the track + const Trk::TrackStateOnSurface* id_exit = nullptr; + const Trk::TrackStateOnSurface* calo_entrance = nullptr; + const Trk::TrackStateOnSurface* calo_exit = nullptr; + const Trk::TrackStateOnSurface* ms_entrance = nullptr; + + m_alignUncertTool_theta->get_track_state_measures(track, + id_exit, + calo_entrance, + calo_exit, + ms_entrance); + /// it can happen that no Calorimeter Scatterers are found. + if (!calo_entrance || !calo_exit || !ms_entrance) { ATH_MSG_DEBUG(" addIDMSerrors keep original track "); return track; } - - // If no Calorimeter no IDMS uncertainties have to be propagated - positionCaloFirst = positionCaloFirst - positionMS; - positionCaloLast = positionCaloLast - positionMS; - - double sigmaDeltaPhiIDMS2 = m_IDMS_xySigma / (positionCaloFirst.perp() + positionCaloLast.perp()); - double sigmaDeltaThetaIDMS2 = m_IDMS_rzSigma / (positionCaloFirst.mag() + positionCaloLast.mag()); - - sigmaDeltaPhiIDMS2 *= sigmaDeltaPhiIDMS2; - sigmaDeltaThetaIDMS2 *= sigmaDeltaThetaIDMS2; - - DataVector<const Trk::TrackStateOnSurface>* trackStateOnSurfaces = new DataVector<const Trk::TrackStateOnSurface>; + + std::unique_ptr<DataVector<const Trk::TrackStateOnSurface>> trackStateOnSurfaces = std::make_unique<DataVector<const Trk::TrackStateOnSurface>>(); trackStateOnSurfaces->reserve(track->trackStateOnSurfaces()->size()); - t = track->trackStateOnSurfaces()->begin(); - itsos = 0; - for (; t != track->trackStateOnSurfaces()->end(); ++t) { - itsos++; - - if (itsos == itsosCaloFirst || itsos == itsosCaloLast) { - if ((**t).materialEffectsOnTrack()) { - double X0 = (**t).materialEffectsOnTrack()->thicknessInX0(); - - const Trk::MaterialEffectsOnTrack* meot = - dynamic_cast<const Trk::MaterialEffectsOnTrack*>((**t).materialEffectsOnTrack()); - - if (meot) { - const Trk::ScatteringAngles* scat = meot->scatteringAngles(); - - if (scat) { - double sigmaDeltaPhi = - std::sqrt((scat->sigmaDeltaPhi()) * (scat->sigmaDeltaPhi()) + sigmaDeltaPhiIDMS2); - - double sigmaDeltaTheta = - std::sqrt((scat->sigmaDeltaTheta()) * (scat->sigmaDeltaTheta()) + sigmaDeltaThetaIDMS2); - - const Trk::EnergyLoss* energyLossNew = new Trk::EnergyLoss(0., 0., 0., 0.); - - const Trk::ScatteringAngles* scatNew = - new Trk::ScatteringAngles(0., 0., sigmaDeltaPhi, sigmaDeltaTheta); - - const Trk::Surface& surfNew = (**t).trackParameters()->associatedSurface(); + for (const Trk::TrackStateOnSurface* trk_srf : *track->trackStateOnSurfaces()) { + if (calo_entrance == trk_srf || calo_entrance == trk_srf) { + if (!trk_srf->materialEffectsOnTrack()) { + ATH_MSG_DEBUG("No material effect on track"); + continue; + } + const Trk::MaterialEffectsOnTrack* meot = dynamic_cast<const Trk::MaterialEffectsOnTrack*>(trk_srf->materialEffectsOnTrack()); + if (!meot){ + ATH_MSG_WARNING(" This should not happen: no MaterialEffectsOnTrack for scatterer "); + continue; + } + const Trk::ScatteringAngles* scat = meot->scatteringAngles(); + if (!scat){ + ATH_MSG_WARNING(" This should not happen: no Scattering Angles for scatterer "); + continue; + } + + float sigmaDeltaPhi = std::hypot( scat->sigmaDeltaPhi(), m_alignUncertTool_phi->get_uncertainty(track)); + float sigmaDeltaTheta = std::hypot( scat->sigmaDeltaPhi(), m_alignUncertTool_theta->get_uncertainty(track)); + float X0 = trk_srf->materialEffectsOnTrack()->thicknessInX0(); + + // - std::bitset<Trk::MaterialEffectsBase::NumberOfMaterialEffectsTypes> meotPattern(0); - meotPattern.set(Trk::MaterialEffectsBase::EnergyLossEffects); - meotPattern.set(Trk::MaterialEffectsBase::ScatteringEffects); - const Trk::MaterialEffectsOnTrack* meotNew = - new Trk::MaterialEffectsOnTrack(X0, scatNew, energyLossNew, surfNew, meotPattern); + const Trk::EnergyLoss* energyLossNew = new Trk::EnergyLoss(0., 0., 0., 0.); + const Trk::ScatteringAngles* scatNew = new Trk::ScatteringAngles(0., 0., sigmaDeltaPhi, sigmaDeltaTheta); - const Trk::TrackParameters* parsNew = ((**t).trackParameters())->clone(); + const Trk::Surface& surfNew = trk_srf->trackParameters()->associatedSurface(); - std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePatternScat(0); - typePatternScat.set(Trk::TrackStateOnSurface::Scatterer); + std::bitset<Trk::MaterialEffectsBase::NumberOfMaterialEffectsTypes> meotPattern(0); + meotPattern.set(Trk::MaterialEffectsBase::EnergyLossEffects); + meotPattern.set(Trk::MaterialEffectsBase::ScatteringEffects); - const Trk::TrackStateOnSurface* newTSOS = - new Trk::TrackStateOnSurface(nullptr, parsNew, nullptr, meotNew, typePatternScat); + const Trk::MaterialEffectsOnTrack* meotNew = new Trk::MaterialEffectsOnTrack(X0, scatNew, energyLossNew, surfNew, meotPattern); + const Trk::TrackParameters* parsNew = trk_srf->trackParameters()->clone(); - trackStateOnSurfaces->push_back(newTSOS); + std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePatternScat(0); + typePatternScat.set(Trk::TrackStateOnSurface::Scatterer); - ATH_MSG_DEBUG(" old Calo scatterer had sigmaDeltaPhi mrad " - << scat->sigmaDeltaPhi() * 1000 << " sigmaDeltaTheta mrad " - << scat->sigmaDeltaTheta() * 1000 << " X0 " << X0); + const Trk::TrackStateOnSurface* newTSOS = new Trk::TrackStateOnSurface(nullptr, parsNew, nullptr, meotNew, typePatternScat); + trackStateOnSurfaces->push_back(newTSOS); - ATH_MSG_DEBUG(" new Calo scatterer made with sigmaDeltaPhi mrad " - << sigmaDeltaPhi * 1000 << " sigmaDeltaTheta mrad " << sigmaDeltaTheta * 1000); + ATH_MSG_DEBUG(" old Calo scatterer had sigmaDeltaPhi mrad " + << scat->sigmaDeltaPhi() * 1000 << " sigmaDeltaTheta mrad " + << scat->sigmaDeltaTheta() * 1000 << " X0 " << X0); - } else { - ATH_MSG_WARNING(" This should not happen: no Scattering Angles for scatterer "); - } - } else { - ATH_MSG_WARNING(" This should not happen: no MaterialEffectsOnTrack for scatterer "); - } - } + ATH_MSG_DEBUG(" new Calo scatterer made with sigmaDeltaPhi mrad " + << sigmaDeltaPhi * 1000 << " sigmaDeltaTheta mrad " << sigmaDeltaTheta * 1000); + } else { // skip AEOTs - if ((**t).alignmentEffectsOnTrack()) { + if (trk_srf->alignmentEffectsOnTrack()) { ATH_MSG_DEBUG(" addIDMSerrors alignmentEffectsOnTrack() found on track "); - } - const Trk::TrackStateOnSurface* TSOS = (**t).clone(); - trackStateOnSurfaces->push_back(TSOS); + continue; + } + trackStateOnSurfaces->push_back(trk_srf->clone()); } } - ATH_MSG_DEBUG(" trackStateOnSurfaces on input track " << track->trackStateOnSurfaces()->size() << " trackStateOnSurfaces found " << trackStateOnSurfaces->size()); - Trk::Track* newTrack = new Trk::Track(track->info(), trackStateOnSurfaces, nullptr); + Trk::Track* newTrack = new Trk::Track(track->info(), trackStateOnSurfaces.release(), nullptr); if (newTrack) countAEOTs(newTrack, " add IDMS errors "); return newTrack; } -void -CombinedMuonTrackBuilder::appendSelectedTSOS(DataVector<const Trk::TrackStateOnSurface>& trackStateOnSurfaces, +void CombinedMuonTrackBuilder::appendSelectedTSOS(DataVector<const Trk::TrackStateOnSurface>& trackStateOnSurfaces, DataVector<const Trk::TrackStateOnSurface>::const_iterator begin, DataVector<const Trk::TrackStateOnSurface>::const_iterator end) const { diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt index 78cbdc3dfc48e62ca3fc3c8dddd43996077756f9..609be509ba9eb29dc34430157b453367191577ca 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt +++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt @@ -14,5 +14,5 @@ atlas_add_component( MuonCombinedBaseTools src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AtlasHepMCLib CaloEvent AthLinks AthenaBaseComps Identifier EventPrimitives FourMomUtils xAODCaloEvent xAODEventInfo xAODMuon xAODTracking xAODTruth GaudiKernel MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonSegmentMakerUtils MuonSelectorToolsLib ICaloTrkMuIdTools MuidInterfaces MuonCombinedEvent MuonCombinedToolInterfaces muonEvent MuidEvent ParticleTruth RecoToolInterfaces TrackToCaloLib TrkGeometry TrkSurfaces TrkCaloExtension TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkParameters TrkParametersIdentificationHelpers TrkSegment TrkTrack TrkTrackSummary TrkExInterfaces TrkToolInterfaces BeamSpotConditionsData MagFieldElements MagFieldConditions xAODMuonCnvLib MuonSegmentTaggerToolInterfaces ) + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AtlasHepMCLib PathResolver CaloEvent AthLinks AthenaBaseComps Identifier EventPrimitives FourMomUtils xAODCaloEvent xAODEventInfo xAODMuon xAODTracking xAODTruth GaudiKernel MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonSegmentMakerUtils MuonSelectorToolsLib ICaloTrkMuIdTools MuidInterfaces MuonCombinedEvent MuonCombinedToolInterfaces muonEvent MuidEvent ParticleTruth RecoToolInterfaces TrackToCaloLib TrkGeometry TrkSurfaces TrkCaloExtension TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkParameters TrkParametersIdentificationHelpers TrkSegment TrkTrack TrkTrackSummary TrkExInterfaces TrkDetDescrInterfaces TrkToolInterfaces BeamSpotConditionsData MagFieldElements MagFieldConditions xAODMuonCnvLib MuonSegmentTaggerToolInterfaces ) diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonAlignmentUncertTool.cxx b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonAlignmentUncertTool.cxx new file mode 100755 index 0000000000000000000000000000000000000000..6842ce41ce06aa663e710e26ed4971d02a32f6bd --- /dev/null +++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonAlignmentUncertTool.cxx @@ -0,0 +1,254 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#include "MuonAlignmentUncertTool.h" +#include <cmath> +#include <iomanip> +#include "AthenaKernel/Units.h" +#include "GaudiKernel/ServiceHandle.h" +#include "TrkDetDescrInterfaces/ITrackingVolumesSvc.h" +#include "TrkMaterialOnTrack/EnergyLoss.h" +#include "TrkMaterialOnTrack/MaterialEffectsOnTrack.h" +#include "TrkMaterialOnTrack/ScatteringAngles.h" +#include "TrkParameters/TrackParameters.h" +#include "TrkTrack/TrackStateOnSurface.h" +#include <TFile.h> +#include <PathResolver/PathResolver.h> + + +namespace { + constexpr float MeVtoGeV = 1.e-3; +} + +namespace Muon { + MuonAlignmentUncertTool::MuonAlignmentUncertTool(const std::string& type, const std::string& name, + const IInterface* parent): + AthAlgTool(type, name, parent), + m_histo(nullptr), + m_dim(-1), + m_x_reader(make_reader(nullptr)), + m_y_reader(make_reader(nullptr)), + m_z_reader(make_reader(nullptr)), + m_calorimeterVolume(nullptr), + m_indetVolume(nullptr) { + } + StatusCode MuonAlignmentUncertTool::initialize(){ + /// Open the TFile + std::unique_ptr<TFile> r_file( TFile::Open(PathResolverFindCalibFile(m_in_file).c_str(), "READ")); + if (!r_file || !r_file->IsOpen()){ + ATH_MSG_FATAL("No such file or directory "<<m_in_file); + return StatusCode::FAILURE; + } + /// Read the histogram from the file + TH1* histo_in_file =nullptr; + r_file->GetObject(m_histo_name.value().c_str(), histo_in_file); + m_histo = std::unique_ptr<TH1>(histo_in_file); + if (!m_histo) { + ATH_MSG_FATAL("File "<<m_in_file<<" does not contain the histogram "<<m_histo_name<<"."); + return StatusCode::FAILURE; + } + m_histo->SetDirectory(nullptr); + /// Set the dimension and the readers to be used + m_dim = m_histo->GetDimension(); + m_x_reader = make_reader(m_histo->GetXaxis()); + m_y_reader = make_reader(m_histo->GetYaxis()); + m_z_reader = make_reader(m_histo->GetZaxis()); + + ATH_CHECK(m_trackingVolumesSvc.retrieve()); + m_calorimeterVolume = std::make_unique<Trk::Volume>(m_trackingVolumesSvc->volume(Trk::ITrackingVolumesSvc::MuonSpectrometerEntryLayer)); + m_indetVolume = std::make_unique<Trk::Volume>(m_trackingVolumesSvc->volume(Trk::ITrackingVolumesSvc::CalorimeterEntryLayer)); + return StatusCode::SUCCESS; + } + float MuonAlignmentUncertTool::get_uncertainty(const Trk::Track* trk) const { + if (!trk){ + ATH_MSG_ERROR("No track has been given. Return FLT_MAX"); + return FLT_MAX; + } + const int bin_x = m_x_reader(trk); + /// The second and third arguments of the GetBin method + /// are 0 as default + const int bin_y = m_dim > 1 ? m_y_reader(trk) : 0; + const int bin_z = m_dim > 2 ? m_z_reader(trk) : 0; + return m_histo->GetBinContent(bin_x,bin_y,bin_z); + } + std::function<int(const Trk::Track* trk)> MuonAlignmentUncertTool::make_reader(const TAxis* axis) const{ + /// Dummy function just returning 0 if no axis is given + if(!axis){ + return [](const Trk::Track* ){return 0;}; + } + std::string axis_title = axis->GetTitle(); + if (axis_title == "#eta" || axis_title=="eta"){ + return [axis] (const Trk::Track* trk){ + const Trk::Perigee* perigee = trk->perigeeParameters(); + return axis->FindBin(perigee->eta()); + }; + } else if (axis_title == "|#eta|" || axis_title == "abseta"){ + return [axis] (const Trk::Track* trk){ + const Trk::Perigee* perigee = trk->perigeeParameters(); + return axis->FindBin(std::abs(perigee->eta())); + }; + } else if (axis_title == "#phi" || axis_title == "phi"){ + return [axis] (const Trk::Track* trk){ + const Trk::Perigee* perigee = trk->perigeeParameters(); + return axis->FindBin(perigee->parameters()[2]); + }; + } else if (axis_title == "|#phi|" || axis_title == "absphi"){ + return [axis] (const Trk::Track* trk){ + const Trk::Perigee* perigee = trk->perigeeParameters(); + return axis->FindBin(std::abs(perigee->parameters()[2])); + }; + } else if (axis_title == "#theta" || axis_title == "theta"){ + return [axis](const Trk::Track* trk){ + const Trk::Perigee* perigee = trk->perigeeParameters(); + return axis->FindBin(perigee->parameters()[3]); + }; + } else if (axis_title == "|#theta|" || axis_title == "abstheta"){ + return [axis](const Trk::Track* trk){ + const Trk::Perigee* perigee = trk->perigeeParameters(); + return axis->FindBin(std::abs(perigee->parameters()[3])); + }; + } else if (axis_title == "p_{T}" || axis_title == "pT") { + return [axis](const Trk::Track* trk){ + const Trk::Perigee* perigee = trk->perigeeParameters(); + return axis->FindBin(perigee->pT()); + }; + } else if (axis_title == "p_{T} [GeV]" || axis_title == "pTinGeV") { + return [axis](const Trk::Track* trk){ + const Trk::Perigee* perigee = trk->perigeeParameters(); + return axis->FindBin(perigee->pT()*MeVtoGeV); + }; + } else if (axis_title == "#rho @ ID-exit"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* id_exit; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, id_exit, dummy, dummy, dummy); + return axis->FindBin( id_exit->trackParameters()->position().perp()); + }; + } else if (axis_title == "R @ ID-exit"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* id_exit; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, id_exit, dummy, dummy, dummy); + return axis->FindBin( id_exit->trackParameters()->position().mag()); + }; + } else if (axis_title == "z @ ID-exit"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* id_exit; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, id_exit, dummy, dummy, dummy); + return axis->FindBin( id_exit->trackParameters()->position()[2]); + }; + } else if (axis_title == "#rho @ Calo-entrance"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* calo_entrance; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, dummy, calo_entrance, dummy, dummy); + return axis->FindBin( calo_entrance->trackParameters()->position().perp()); + }; + } else if (axis_title == "R @ Calo-entrance"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* calo_entrance; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, dummy, calo_entrance, dummy, dummy); + return axis->FindBin( calo_entrance->trackParameters()->position().mag()); + }; + } else if (axis_title == "z @ Calo-entrance"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* calo_entrance; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, dummy, calo_entrance, dummy, dummy); + return axis->FindBin( calo_entrance->trackParameters()->position()[2]); + }; + } else if (axis_title == "#rho @ Calo-centre"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* calo_entrance; + const Trk::TrackStateOnSurface* calo_exit; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, dummy, calo_entrance, calo_exit, dummy); + const Amg::Vector3D calo_centre = 0.5 * (calo_entrance->trackParameters()->position() + + calo_exit->trackParameters()->position()); + return axis->FindBin( calo_centre.perp()); + }; + } else if (axis_title == "R @ Calo-centre"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* calo_entrance; + const Trk::TrackStateOnSurface* calo_exit; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, dummy, calo_entrance, calo_exit, dummy); + const Amg::Vector3D calo_centre = 0.5 * (calo_entrance->trackParameters()->position() + + calo_exit->trackParameters()->position()); + return axis->FindBin(calo_centre.mag()); + }; + } else if (axis_title == "z @ Calo-centre"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* calo_entrance; + const Trk::TrackStateOnSurface* calo_exit; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, dummy, calo_entrance, calo_exit, dummy); + const Amg::Vector3D calo_centre = 0.5 * (calo_entrance->trackParameters()->position() + + calo_exit->trackParameters()->position()); + return axis->FindBin(calo_centre[2]); + }; + } else if (axis_title == "#rho @ MS-entrance"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* ms_entrance; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, dummy, dummy, dummy, ms_entrance); + return axis->FindBin( ms_entrance->trackParameters()->position().perp()); + }; + } else if (axis_title == "R @ MS-entrance"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* ms_entrance; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, dummy, dummy, dummy, ms_entrance); + return axis->FindBin( ms_entrance->trackParameters()->position().mag()); + }; + } else if (axis_title == "z @ MS-entrance"){ + return[axis,this](const Trk::Track* trk){ + const Trk::TrackStateOnSurface* ms_entrance; + const Trk::TrackStateOnSurface* dummy; + get_track_state_measures(trk, dummy, dummy, dummy, ms_entrance); + return axis->FindBin( ms_entrance->trackParameters()->position()[2]); + }; + } + return make_reader(nullptr); + } + + void MuonAlignmentUncertTool::get_track_state_measures(const Trk::Track* track, const Trk::TrackStateOnSurface*& id_exit, + const Trk::TrackStateOnSurface*& calo_entrance, + const Trk::TrackStateOnSurface*& calo_exit, + const Trk::TrackStateOnSurface*& ms_entrance) const { + id_exit = calo_entrance = calo_exit = ms_entrance = nullptr; + if (!track) { + ATH_MSG_DEBUG("No track has been given. Where is my track?!"); + return; + } + for (const Trk::TrackStateOnSurface* trk_srf : *track->trackStateOnSurfaces()) { + if (!trk_srf->trackParameters()) { continue; } + if (m_indetVolume->inside(trk_srf->trackParameters()->position())) { + if (trk_srf->type(Trk::TrackStateOnSurface::Measurement)) id_exit = trk_srf; + continue; + } + /// Try to find the calorimeter entrance and leaving points + if (m_calorimeterVolume->inside(trk_srf->trackParameters()->position())) { + // first scattering plane in Calorimeter + if (trk_srf->type(Trk::TrackStateOnSurface::Scatterer) && trk_srf->materialEffectsOnTrack()) { + if (trk_srf->materialEffectsOnTrack()->thicknessInX0() < 10) { continue; } + if (!calo_entrance) { + calo_entrance = trk_srf; + } else { + calo_exit = trk_srf; + } + } + } + /// inside muon system + else if (trk_srf->measurementOnTrack()) { + ms_entrance = trk_srf; + break; + } + } + } + + +} // namespace Rec diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonAlignmentUncertTool.h b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonAlignmentUncertTool.h new file mode 100755 index 0000000000000000000000000000000000000000..fea5b199ed086727d43d6465c2ba13979894f7cb --- /dev/null +++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonAlignmentUncertTool.h @@ -0,0 +1,89 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +////////////////////////////////////////////////////////////////////////////// +// MuonAlignmentUncertTool +// Helper classes to read the scattering and alignment uncertainties +// of the muons from the histograms +// (c) ATLAS Combined Muon software +////////////////////////////////////////////////////////////////////////////// + +#ifndef MUONCOMBINEDBASETOOLS_MUONALIGNMENTUNCERTTOOL_H +#define MUONCOMBINEDBASETOOLS_MUONALIGNMENTUNCERTTOOL_H + +#include <MuidInterfaces/IMuonAlignmentUncertTool.h> +#include <AthenaBaseComps/AthAlgTool.h> +#include <GaudiKernel/ServiceHandle.h> +#include "GaudiKernel/ToolHandle.h" + +#include <TrkDetDescrInterfaces/ITrackingVolumesSvc.h> +#include <TrkTrack/TrackStateOnSurface.h> +#include <TrkTrack/Track.h> +#include <TrkGeometry/TrackingVolume.h> +/// Memory for the smart pointers +#include <memory> +/// Numbers are read from histograms +#include <TH1.h> +#include <string> +#include <map> +#include <vector> +#include <functional> + +namespace Muon { + class MuonAlignmentUncertTool : public AthAlgTool, virtual public IMuonAlignmentUncertTool { + public: + + MuonAlignmentUncertTool(const std::string& type, const std::string& name, const IInterface* parent); + ~MuonAlignmentUncertTool()=default; + + StatusCode initialize() override; + + float get_uncertainty(const Trk::Track* trk) const override; + + /// Helper method to retrieve the last measurement of the ID, + /// the first and last scatterer in the calorimeter + /// and finally to retrieve the first measurement inside the MS + void get_track_state_measures(const Trk::Track* track, const Trk::TrackStateOnSurface*& id_exit, + const Trk::TrackStateOnSurface*& calo_entrance, + const Trk::TrackStateOnSurface*& calo_exit, + const Trk::TrackStateOnSurface*& ms_entrance) const override; + + private: + /// Helper function to assign the uncertainty from the Axis. + /// Assignment is based on the title of the axis + std::function<int(const Trk::Track* trk)> make_reader(const TAxis* axis) const; + + + + /// Volume service to + /// + ServiceHandle<Trk::ITrackingVolumesSvc> m_trackingVolumesSvc{this,"TrackingVolumesSvc", + "TrackingVolumesSvc/TrackingVolumesSvc"}; + + + Gaudi::Property<std::string> m_in_file{this, "InFile", + "MuonCombinedBaseTools/AlignmentUncertainties/201029_initial/ID_MS_Uncertainties.root", + "Location of the calibration file"}; + Gaudi::Property<std::string> m_histo_name{this, "HistoName", "", "Name of the histogram in the file"}; + + + /// Histogram to be cached + std::unique_ptr<TH1> m_histo; + unsigned int m_dim; + /// Standard functions used to read the histogram having as input + /// a Trk::Track. + std::function<int(const Trk::Track* trk)> m_x_reader; + std::function<int(const Trk::Track* trk)> m_y_reader; + std::function<int(const Trk::Track* trk)> m_z_reader; + + + std::unique_ptr<const Trk::Volume> m_calorimeterVolume; + std::unique_ptr<const Trk::Volume> m_indetVolume; + + }; + + +} // end of namespace Rec + +#endif diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/components/MuonCombinedBaseTools_entries.cxx b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/components/MuonCombinedBaseTools_entries.cxx index fd5af147393aad3b94330436f20ae10e6424e8d8..1f7548ef23d2c377d4ba03285dac8f70232cf47f 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/components/MuonCombinedBaseTools_entries.cxx +++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/components/MuonCombinedBaseTools_entries.cxx @@ -8,10 +8,12 @@ #include "../MuonSegmentTagTool.h" #include "../MuonCaloTagTool.h" #include "../TrackSegmentAssociationTool.h" +#include "../MuonAlignmentUncertTool.h" using namespace MuonCombined; using namespace Muon; DECLARE_COMPONENT( MuonCandidateTool ) +DECLARE_COMPONENT( MuonAlignmentUncertTool ) DECLARE_COMPONENT( MuonCombinedTool ) DECLARE_COMPONENT( MuonCombinedDebuggerTool ) DECLARE_COMPONENT( MuonCreatorTool ) diff --git a/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py b/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py index 9e18e52a5dc1699e4b7df8cd5609283b56470780..1b39bc031dfd4fe728750020f2196b6f8bd25963 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py +++ b/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py @@ -567,6 +567,20 @@ def MuidErrorOptimisationToolCfg(flags, name='MuidErrorOptimisationToolFit', **k kwargs.setdefault("TrackSummaryTool", result.popPrivateTools() ) return result +def MuonAlignmentUncertToolThetaCfg(flags,name ="MuonAlignmentUncertToolTheta", **kwargs): + result = ComponentAccumulator() + kwargs.setdefault("HistoName", "ThetaScattering") + kwargs.setdefault("InFile", "MuonCombinedBaseTools/AlignmentUncertainties/201029_initial/ID_MS_Uncertainties.root") + tool = CompFactory.Muon.MuonAlignmentUncertTool(name,**kwargs) + result.addPublicTool(tool) + return result +def MuonAlignmentUncertToolPhiCfg(flags,name ="MuonAlignmentUncertToolPhi", **kwargs): + result = ComponentAccumulator() + kwargs.setdefault("HistoName", "PhiScattering") + kwargs.setdefault("InFile", "MuonCombinedBaseTools/AlignmentUncertainties/201029_initial/ID_MS_Uncertainties.root") + tool = CompFactory.Muon.MuonAlignmentUncertTool(name,**kwargs) + result.addPublicTool(tool) + return result def CombinedMuonTrackBuilderCfg(flags, name='CombinedMuonTrackBuilder', **kwargs ): from AthenaCommon.SystemOfUnits import meter from MuonConfig.MuonRIO_OnTrackCreatorConfig import CscClusterOnTrackCreatorCfg,MdtDriftCircleOnTrackCreatorCfg @@ -581,7 +595,13 @@ def CombinedMuonTrackBuilderCfg(flags, name='CombinedMuonTrackBuilder', **kwargs acc = MuidTrackCleanerCfg(flags) kwargs.setdefault("Cleaner" , acc.popPrivateTools() ) result.merge(acc) - + acc = MuonAlignmentUncertToolPhiCfg(flags) + result.merge(acc) + kwargs.setdefault("AlignmentUncertToolPhi", result.getPublicTool('MuonAlignmentUncertToolPhi') ) + acc = MuonAlignmentUncertToolThetaCfg(flags) + result.merge(acc) + kwargs.setdefault("AlignmentUncertToolTheta", result.getPublicTool('MuonAlignmentUncertToolTheta') ) + if flags.Detector.GeometryCSC and not flags.Muon.MuonTrigger: acc = CscClusterOnTrackCreatorCfg(flags) kwargs.setdefault("CscRotCreator" , acc.popPrivateTools() ) @@ -687,8 +707,7 @@ def CombinedMuonTrackBuilderCfg(flags, name='CombinedMuonTrackBuilder', **kwargs tool = CompFactory.Rec.CombinedMuonTrackBuilder(name,**kwargs) result.setPrivateTools(tool) return result - - + def CombinedMuonTrackBuilderFitCfg(flags, name='CombinedMuonTrackBuilderFit', **kwargs ): # In the old configuration we had duplication between CombinedMuonTrackBuilder and CombinedMuonTrackBuilderFit # Here we just call the Combined @@ -699,7 +718,6 @@ def CombinedMuonTrackBuilderFitCfg(flags, name='CombinedMuonTrackBuilderFit', ** acc = CombinedMuonTrackBuilderCfg(flags, name, **kwargs) tool = acc.popPrivateTools() #Need to reset this to be the primary tool result.merge(acc) - result.setPrivateTools(tool) return result diff --git a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedFitTools.py b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedFitTools.py index 3f49316625f8f16a3f4c3332d15d5b457d081308..2f628b59fadbe87fba8dcccc4458f15b3e3aab2d 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedFitTools.py +++ b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedFitTools.py @@ -226,12 +226,25 @@ def MuonMaterialProviderTool( name = "MuonMaterialProviderTool"): materialProviderTool.UseCaloEnergyMeasurement = False return materialProviderTool +def MuonAlignmentUncertToolTheta(name ="MuonAlignmentUncertToolTheta", **kwargs): + kwargs.setdefault("HistoName", "ThetaScattering") + kwargs.setdefault("InFile", "MuonCombinedBaseTools/AlignmentUncertainties/201029_initial/ID_MS_Uncertainties.root") + return CfgMgr.Muon__MuonAlignmentUncertTool(name,**kwargs) + +def MuonAlignmentUncertToolPhi(name ="MuonAlignmentUncertToolPhi", **kwargs): + kwargs.setdefault("HistoName", "PhiScattering") + kwargs.setdefault("InFile", "MuonCombinedBaseTools/AlignmentUncertainties/201029_initial/ID_MS_Uncertainties.root") + return CfgMgr.Muon__MuonAlignmentUncertTool(name,**kwargs) + def CombinedMuonTrackBuilderFit( name='CombinedMuonTrackBuilderFit', **kwargs ): from AthenaCommon.AppMgr import ToolSvc kwargs.setdefault("CaloEnergyParam" , getPublicTool("MuidCaloEnergyToolParam") ) kwargs.setdefault("CaloTSOS" , getPublicTool("MuidCaloTrackStateOnSurface") ) kwargs.setdefault("MaterialAllocator" , getPublicTool("MuidMaterialAllocator") ) kwargs.setdefault("MdtRotCreator" , getPublicTool("MdtDriftCircleOnTrackCreator") ) + kwargs.setdefault("AlignmentUncertToolPhi" , getPublicTool("MuonAlignmentUncertToolPhi") ) + kwargs.setdefault("AlignmentUncertToolTheta" , getPublicTool("MuonAlignmentUncertToolTheta") ) + kwargs.setdefault("CleanCombined" , True ) kwargs.setdefault("CleanStandalone" , True ) kwargs.setdefault("BadFitChi2" , 2.5 ) diff --git a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedRecExampleConfigDb.py b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedRecExampleConfigDb.py index 0a3cd804794cc3e402e9513341ee2070d65f86fe..3424802d13253e4950f6d2f47591809f033e68c7 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedRecExampleConfigDb.py +++ b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedRecExampleConfigDb.py @@ -102,6 +102,9 @@ addTool("MuonCombinedRecExample.MuonCaloTagTool.CaloMuonScoreTool","CaloMuonScor addService("MuonCombinedRecExample.MuonCaloTagTool.CaloMuonScoreONNXRuntimeSvc","CaloMuonScoreONNXRuntimeSvc") ####### muid tools +addTool("MuonCombinedRecExample.MuonCombinedFitTools.MuonAlignmentUncertToolTheta","MuonAlignmentUncertToolTheta") +addTool("MuonCombinedRecExample.MuonCombinedFitTools.MuonAlignmentUncertToolPhi" ,"MuonAlignmentUncertToolPhi") + addTool("MuonCombinedRecExample.MuonCombinedFitTools.MuonMatchQuality","MuonMatchQuality") addTool("MuonCombinedRecExample.MuonCombinedFitTools.MuidMuonRecovery","MuidMuonRecovery") addTool("MuonCombinedRecExample.MuonCombinedFitTools.MuonCombinedTrackFitter","MuonCombinedTrackFitter") diff --git a/Reconstruction/RecBackground/RecBackgroundAlgs/RecBackgroundAlgs/BackgroundWordFiller.h b/Reconstruction/RecBackground/RecBackgroundAlgs/RecBackgroundAlgs/BackgroundWordFiller.h index fa61a22807f7e278dbc8d078e195518796606cc7..7bd7d5da4062365d199ede30923cb2b4fa02afb8 100644 --- a/Reconstruction/RecBackground/RecBackgroundAlgs/RecBackgroundAlgs/BackgroundWordFiller.h +++ b/Reconstruction/RecBackground/RecBackgroundAlgs/RecBackgroundAlgs/BackgroundWordFiller.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ /* Algorihtm to fill the background word that is stored in the EventInfo @@ -58,6 +58,11 @@ class BackgroundWordFiller : public AthAlgorithm /** ReadHandleKey for LArCollisionTime */ SG::ReadHandleKey<LArCollisionTime> m_lArCollisionTimeKey{this,"LArCollisionTimeKey","LArCollisionTime","Key for LArCollisionTime"}; + /** WriteDecorHandleKey: needed for scheduling downstream clients */ + SG::WriteDecorHandleKey<xAOD::EventInfo> m_eventInfoDecorKey{this,"eventInfoDecorKey", + "EventInfo.backgroundWord", + "Decoration key for downstream clients"}; + Gaudi::Property<bool> m_isMC{this, "IsMC", false, "Sets whether we should expect MC objects"}; int m_HaloNumSegment_Cut; diff --git a/Reconstruction/RecBackground/RecBackgroundAlgs/src/BackgroundWordFiller.cxx b/Reconstruction/RecBackground/RecBackgroundAlgs/src/BackgroundWordFiller.cxx index 52e545b4d2d3ac04fbdfc10f931e7f1242df323b..b3f5ec723f5fd354e6aec5db430fd7343cc5b82c 100644 --- a/Reconstruction/RecBackground/RecBackgroundAlgs/src/BackgroundWordFiller.cxx +++ b/Reconstruction/RecBackground/RecBackgroundAlgs/src/BackgroundWordFiller.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ /* Algorihtm to fill the background word that is stored in the EventInfo @@ -139,6 +139,7 @@ StatusCode BackgroundWordFiller::initialize() { ATH_CHECK(m_rawInfoSummaryForTagKey.initialize(!m_isMC)); ATH_CHECK(m_tileCellContainerKey.initialize()); ATH_CHECK(m_lArCollisionTimeKey.initialize(!m_isMC)); + ATH_CHECK(m_eventInfoDecorKey.initialize()); return StatusCode::SUCCESS; } diff --git a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py index fb3a520a2af04978a42a22617ce2395427da5801..fb953b93aecd9944913a2f68433ddf62b4d7202f 100644 --- a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py +++ b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py @@ -1293,6 +1293,7 @@ if ( rec.doAOD() or rec.doWriteAOD()) and not rec.readAOD() : alg = TauCellThinningAlg('TauCellThinningAlg', StreamName = 'StreamAOD', Cells = 'AllCalo', + CellLinks = 'CaloCalTopoClusters_links', Taus = "TauJets", UseSubtractedCluster = tauFlags.useSubtractedCluster()) topSequence += alg diff --git a/Reconstruction/VKalVrt/NewVrtSecInclusiveTool/README b/Reconstruction/VKalVrt/NewVrtSecInclusiveTool/README old mode 100755 new mode 100644 diff --git a/Reconstruction/VKalVrt/VrtSecInclusive/src/Utilities.cxx b/Reconstruction/VKalVrt/VrtSecInclusive/src/Utilities.cxx index b87d036b8decbf56c193870be8e9685f8f69dbb2..1d4b6c6f7772d8549dcc8052159b4af82b7995dc 100755 --- a/Reconstruction/VKalVrt/VrtSecInclusive/src/Utilities.cxx +++ b/Reconstruction/VKalVrt/VrtSecInclusive/src/Utilities.cxx @@ -21,7 +21,7 @@ using namespace std; namespace Trk { - extern void dsinv(long int * , double *, long int , long int *); + extern void dsinv(long int, double *, long int , long int *) noexcept; } namespace VKalVrtAthena { @@ -54,7 +54,7 @@ namespace VKalVrtAthena { mmm[2][2] = VrtErr1[5]+VrtErr2[5]; long int jfail,NN=3; - Trk::dsinv( &NN, &mmm[0][0], NN, &jfail); + Trk::dsinv( NN, &mmm[0][0], NN, &jfail); if(jfail==0){ Signif = distx*mmm[0][0]*distx diff --git a/Reconstruction/eflowRec/eflowRec/PFLeptonSelector.h b/Reconstruction/eflowRec/eflowRec/PFLeptonSelector.h index 2d7fff9852af57847ed5af42ea06d57ba6ef4b57..54040b98c4e366c77e665e618769afa0d0591538 100644 --- a/Reconstruction/eflowRec/eflowRec/PFLeptonSelector.h +++ b/Reconstruction/eflowRec/eflowRec/PFLeptonSelector.h @@ -68,8 +68,16 @@ private: Gaudi::Property<std::string> m_electronID{this,"electronID","LHMedium","Select electron ID"}; + /** Toggle to determine whether we select any electrons or not - if selected then tracks matched to those electrons + * in PFTrackSelector are not used in particle flow. If not selected then an empty electron container is created, + * and hence PFTrackSelector won't find any electrons to match its selected tracks to. + */ Gaudi::Property<bool> m_selectElectrons{this,"selectElectrons",true,"Toggle usage of electron ID"}; - + /** Toggle to determine whether we select any muons or not - if selected then tracks matched to those muons + * in PFTrackSelector are not used in particle flow. If not selected then an empty muon container is created, + * and hence PFTrackSelector won't find any muons to match its selected tracks to. + */ + Gaudi::Property<bool> m_selectMuons{this,"selectMuons",true,"Toggle usage of muon ID"}; }; #endif diff --git a/Reconstruction/eflowRec/src/PFLeptonSelector.cxx b/Reconstruction/eflowRec/src/PFLeptonSelector.cxx index b3ee9d91127818afac82b36b178891c8e2f750fb..c4d955a9d58fe621619731dafd14952a6949abf6 100644 --- a/Reconstruction/eflowRec/src/PFLeptonSelector.cxx +++ b/Reconstruction/eflowRec/src/PFLeptonSelector.cxx @@ -38,9 +38,11 @@ StatusCode PFLeptonSelector::execute(){ } /* Select muons */ - StatusCode sc = this->selectMuons(selectedMuonsWriteHandle,leptonCaloCellsWriteHandle); - //if fail to select muons issue warning, but carry on processing event - if (sc.isFailure()) ATH_MSG_WARNING("Problem selecting muons "); + if (m_selectMuons){ + StatusCode sc = this->selectMuons(selectedMuonsWriteHandle,leptonCaloCellsWriteHandle); + //if fail to select muons issue warning, but carry on processing event + if (sc.isFailure()) ATH_MSG_WARNING("Problem selecting muons "); + } return StatusCode::SUCCESS; } diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaSelectedTrackCopy.py b/Reconstruction/egamma/egammaAlgs/python/egammaSelectedTrackCopy.py index 95249d385d6745e4d1c7c2a628eb038bd413a41f..6e14d9b53999bfe332399625709b84b7ad465ca0 100644 --- a/Reconstruction/egamma/egammaAlgs/python/egammaSelectedTrackCopy.py +++ b/Reconstruction/egamma/egammaAlgs/python/egammaSelectedTrackCopy.py @@ -26,7 +26,8 @@ egammaSelectedTrackCopy = AlgFactory( name='egammaSelectedTrackCopy', ExtrapolationTool=EMExtrapolationTools, ExtrapolationToolCommonCache=EMExtrapolationToolsCommonCache, - ClusterContainerName=jobproperties.egammaRecFlags.egammaTopoClusterCollection(), + ClusterContainerName=( + jobproperties.egammaRecFlags.egammaTopoClusterCollection()), TrackParticleContainerName=InDetKeys.xAODTrackParticleContainer(), egammaCaloClusterSelector=egammaCaloClusterGSFSelector ) diff --git a/Reconstruction/egamma/egammaPerformance/src/MonitorElectronAlgorithm.cxx b/Reconstruction/egamma/egammaPerformance/src/MonitorElectronAlgorithm.cxx index 4f7d23655bd723cde357bcf85087b86d12c77679..3f272c68cce72416ce0a5e5a6e854329fd034357 100755 --- a/Reconstruction/egamma/egammaPerformance/src/MonitorElectronAlgorithm.cxx +++ b/Reconstruction/egamma/egammaPerformance/src/MonitorElectronAlgorithm.cxx @@ -19,6 +19,7 @@ StatusCode MonitorElectronAlgorithm::initialize() { using namespace Monitored; ATH_CHECK( AthMonitorAlgorithm::initialize() ); ATH_CHECK( m_ParticleContainerKey.initialize() ); + ATH_CHECK( m_ElectronIsolationKey.initialize() ); return StatusCode::SUCCESS; } diff --git a/Reconstruction/egamma/egammaPerformance/src/MonitorElectronAlgorithm.h b/Reconstruction/egamma/egammaPerformance/src/MonitorElectronAlgorithm.h index 356f5a99f3bae345ac6e94b8bee2b79bcb75f9a6..a54d5843a5b449f705018b6ebda0d13538170106 100755 --- a/Reconstruction/egamma/egammaPerformance/src/MonitorElectronAlgorithm.h +++ b/Reconstruction/egamma/egammaPerformance/src/MonitorElectronAlgorithm.h @@ -30,6 +30,7 @@ public: private: SG::ReadHandleKey<xAOD::ElectronContainer> m_ParticleContainerKey {this, "ParticleContainerName", "Electrons", "Name of electron container" }; + SG::ReadDecorHandleKey<xAOD::ElectronContainer> m_ElectronIsolationKey {this, "ElectronIsolationKey", "Electrons.ptcone20"}; Gaudi::Property<std::string> m_ParticlePrefix {this,"ParticlePrefix","electron","Name of the particle prefix to be used to define hists"}; Gaudi::Property<std::string> m_RecoName {this,"RecoName","LHTight","Name of particle flavor in egamma reco"}; Gaudi::Property<std::string> m_WithTrigger {this,"WithTrigger","","Name extension when electrons are chosen from triggered events"}; diff --git a/Reconstruction/egamma/egammaPerformance/src/MonitorPhotonAlgorithm.cxx b/Reconstruction/egamma/egammaPerformance/src/MonitorPhotonAlgorithm.cxx index 00341330b04954b0bb952be1f1711ec5adf52bb0..5753e41688a5fe30b8a36b1f86131daab369d1bc 100755 --- a/Reconstruction/egamma/egammaPerformance/src/MonitorPhotonAlgorithm.cxx +++ b/Reconstruction/egamma/egammaPerformance/src/MonitorPhotonAlgorithm.cxx @@ -19,6 +19,7 @@ StatusCode MonitorPhotonAlgorithm::initialize() { using namespace Monitored; ATH_CHECK(AthMonitorAlgorithm::initialize() ); ATH_CHECK( m_ParticleContainerKey.initialize() ); + ATH_CHECK( m_PhotonIsolationKey.initialize() ); return StatusCode::SUCCESS; } diff --git a/Reconstruction/egamma/egammaPerformance/src/MonitorPhotonAlgorithm.h b/Reconstruction/egamma/egammaPerformance/src/MonitorPhotonAlgorithm.h index f8921a4151b6b6cdce3f46740bf921aedfef97b9..775f59469dfa20ed30b9c62d03220898b7832302 100755 --- a/Reconstruction/egamma/egammaPerformance/src/MonitorPhotonAlgorithm.h +++ b/Reconstruction/egamma/egammaPerformance/src/MonitorPhotonAlgorithm.h @@ -29,6 +29,7 @@ class MonitorPhotonAlgorithm : public AthMonitorAlgorithm { private: SG::ReadHandleKey<xAOD::PhotonContainer> m_ParticleContainerKey {this, "ParticleContainerName", "Photons", "Name of electron container" }; + SG::ReadDecorHandleKey<xAOD::PhotonContainer> m_PhotonIsolationKey {this, "PhotonIsolationKey", "Photons.ptcone20"}; Gaudi::Property<std::string> m_ParticlePrefix {this,"ParticlePrefix","photon","Name of the particle prefix to be used to define hists"}; Gaudi::Property<std::string> m_RecoName {this,"RecoName","Tight","Name of particle flavor in egamma reco"}; Gaudi::Property<std::string> m_WithTrigger {this,"WithTrigger","","Name extension when electrons are chosen from triggered events"}; diff --git a/Reconstruction/tauRec/python/TauAlgorithmsHolder.py b/Reconstruction/tauRec/python/TauAlgorithmsHolder.py index 87befaaad0553516c6d7e367002bf1b3847b669d..0868a8ec7684d4cf0f08bcc49a2fcfab131ac44c 100644 --- a/Reconstruction/tauRec/python/TauAlgorithmsHolder.py +++ b/Reconstruction/tauRec/python/TauAlgorithmsHolder.py @@ -100,7 +100,6 @@ def getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix=''): doEnergyCorrection = correctEnergy, doAxisCorrection = correctAxis, doPtResponse = True, - countOnlyPileupVertices = True, Key_vertexInputContainer = _DefaultVertexContainer ) diff --git a/Reconstruction/tauRec/python/TauRecBuilder.py b/Reconstruction/tauRec/python/TauRecBuilder.py index 1efea1c0173164b153605da9a3e923e95a9ee649..fc5db0cff396c58cdfb7f5306d7cba77868c9531 100644 --- a/Reconstruction/tauRec/python/TauRecBuilder.py +++ b/Reconstruction/tauRec/python/TauRecBuilder.py @@ -56,13 +56,13 @@ class TauRecCoreBuilder ( TauRecConfigured ) : # run vertex finder only in case vertexing is available. This check can also be done in TauAlgorithmsHolder instead doing it here. from InDetRecExample.InDetJobProperties import InDetFlags from tauRec.tauRecFlags import jobproperties - doMVATrackClassification = jobproperties.tauRecFlags.tauRecMVATrackClassification() - doRNNTrackClassification = jobproperties.tauRecFlags.tauRecRNNTrackClassification() + doMVATrackClassification = tauFlags.tauRecMVATrackClassification() + doRNNTrackClassification = tauFlags.tauRecRNNTrackClassification() if tauFlags.isStandalone() or InDetFlags.doVertexFinding(): tools.append(taualgs.getTauVertexFinder(doUseTJVA=self.do_TJVA)) tools.append(taualgs.getTauAxis()) - tools.append(taualgs.getTauTrackFinder(removeDuplicateTracks=(not doMVATrackClassification) )) + tools.append(taualgs.getTauTrackFinder(removeDuplicateTracks=(tauFlags.removeDuplicateCoreTracks() ) )) if doMVATrackClassification : tools.append(taualgs.getTauTrackClassifier()) if not doMVATrackClassification and doRNNTrackClassification: tools.append(taualgs.getTauTrackRNNClassifier()) diff --git a/Reconstruction/tauRec/python/TauRecRunner.py b/Reconstruction/tauRec/python/TauRecRunner.py index 789d13b2ef57f91633a904d7e289185083e4d5ff..f87386826433f927eb51a839615740b0de05d4d6 100644 --- a/Reconstruction/tauRec/python/TauRecRunner.py +++ b/Reconstruction/tauRec/python/TauRecRunner.py @@ -79,17 +79,6 @@ class TauRecRunner ( TauRecRunConfigured ) : NetworkFile3P="rnnid_mc16d_config_3p.json", OutputVarname="RNNJetScore", MaxTracks=10, MaxClusters=6)) tools.append(taualgs.getTauWPDecoratorJetRNN()) - tools.append(taualgs.getTauJetBDTEvaluator("TauEleBDT_def", weightsFile="", outputVarName="BDTEleScore"))#just inits values - tools.append(taualgs.getTauJetBDTEvaluator("TauEleBDT_bar", - weightsFile="EleBDT1PBar.root", minNTracks=1, maxAbsTrackEta=1.37, - outputVarName="BDTEleScore")) - tools.append(taualgs.getTauJetBDTEvaluator("TauEleBDT_end1", - weightsFile="EleBDT1PEnd1.root", minNTracks=1, minAbsTrackEta=1.37, - maxAbsTrackEta=2.0, outputVarName="BDTEleScore")) - tools.append(taualgs.getTauJetBDTEvaluator("TauEleBDT_end23", - weightsFile="EleBDT1PEnd23.root", minNTracks=1, minAbsTrackEta=2.0, - maxAbsTrackEta=3.0, outputVarName="BDTEleScore")) - tools.append(taualgs.getTauWPDecoratorEleBDT()) tools.append(taualgs.getTauEleRNNEvaluator("TauEleRNN", NetworkFile1P="rnneveto_mc16d_config_1p.json", NetworkFile3P="rnneveto_mc16d_config_3p.json", diff --git a/Reconstruction/tauRec/python/tauRecFlags.py b/Reconstruction/tauRec/python/tauRecFlags.py index addb8536b112301c16d590bf9d39d0e6093e571e..b68871d3c6007e84fcd70bc095c570696cf41680 100644 --- a/Reconstruction/tauRec/python/tauRecFlags.py +++ b/Reconstruction/tauRec/python/tauRecFlags.py @@ -64,6 +64,13 @@ class useLargeD0Tracks(JobProperty): allowedTypes=['bool'] StoredValue=False +class removeDuplicateCoreTracks(JobProperty): + """Ignore core tracks already used in previous tau + """ + statusOn=True + allowedTypes=['bool'] + StoredValue=True + class tauRecMVATrackClassification(JobProperty): """Run the MVA Track Classifier """ @@ -229,7 +236,7 @@ class tauRecFlags(JobPropertyContainer): jobproperties.add_Container(tauRecFlags) # I want always the following flags in the Rec container -_list_tau=[Enabled,doTauRec,isStandalone,tauRecSeedJetCollection,tauRecToolsCVMFSPath,doTJVA,useLargeD0Tracks,tauRecMVATrackClassification,tauRecRNNTrackClassification,tauRecMVATrackClassificationConfig,tauRecRNNTrackClassificationConfig,tauRecDecayModeNNClassifierConfig,tauRecSeedMinPt,tauRecSeedMaxEta,tauRecMaxNTracks,tauRecToolsDevToolList,tauRecToolsDevToolListProcessor,doRunTauDiscriminant,useVertexBasedConvFinder,useNewPIDBasedConvFinder,doPanTau,doPi0,pi0EtCuts,pi0MVACuts_1prong,pi0MVACuts_mprong,shotPtCut_1Photon,shotPtCut_2Photons,useOldVertexFitterAPI,useSubtractedCluster] +_list_tau=[Enabled,doTauRec,isStandalone,tauRecSeedJetCollection,tauRecToolsCVMFSPath,doTJVA,useLargeD0Tracks,removeDuplicateCoreTracks,tauRecMVATrackClassification,tauRecRNNTrackClassification,tauRecMVATrackClassificationConfig,tauRecRNNTrackClassificationConfig,tauRecDecayModeNNClassifierConfig,tauRecSeedMinPt,tauRecSeedMaxEta,tauRecMaxNTracks,tauRecToolsDevToolList,tauRecToolsDevToolListProcessor,doRunTauDiscriminant,useVertexBasedConvFinder,useNewPIDBasedConvFinder,doPanTau,doPi0,pi0EtCuts,pi0MVACuts_1prong,pi0MVACuts_mprong,shotPtCut_1Photon,shotPtCut_2Photons,useOldVertexFitterAPI,useSubtractedCluster] for j in _list_tau: jobproperties.tauRecFlags.add_JobProperty(j) del _list_tau diff --git a/Reconstruction/tauRec/share/tau_standalone_EMTopo_ESDtoAOD.py b/Reconstruction/tauRec/share/tau_standalone_EMTopo_ESDtoAOD.py new file mode 100644 index 0000000000000000000000000000000000000000..142ce1b8b5bb2353fbea01e4c2a8b1ee791220df --- /dev/null +++ b/Reconstruction/tauRec/share/tau_standalone_EMTopo_ESDtoAOD.py @@ -0,0 +1,43 @@ +from AthenaCommon.AthenaCommonFlags import athenaCommonFlags +athenaCommonFlags.FilesInput = ["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/tauRec/input/standalone.ESD.pool.root"] +athenaCommonFlags.PoolAODOutput = "EMPFlow_AOD.pool.root" + +from RecExConfig.RecFlags import rec +rec.doEgamma.set_Value_and_Lock(False) +rec.doMuon.set_Value_and_Lock(False) + +from CaloRec.CaloRecFlags import jobproperties +jobproperties.CaloRecFlags.Enabled.set_Value_and_Lock(False) +jobproperties.CaloRecFlags.doCaloCluster.set_Value_and_Lock(False) +jobproperties.CaloRecFlags.doCaloTopoCluster.set_Value_and_Lock(False) + +#this turns off CaloCluster2xAOD +rec.doWritexAOD.set_Value_and_Lock(False) +#nothing to say on these +rec.doWriteTAG.set_Value_and_Lock(False) +rec.doTruth.set_Value_and_Lock(True) +rec.doAODCaloCells.set_Value_and_Lock(False) +rec.doTrigger.set_Value_and_Lock(False) +#Turns off xAODRingSetConfWriter +rec.doCaloRinger.set_Value_and_Lock(False) + +#disables VertexCnvAlg +from InDetRecExample.InDetJobProperties import jobproperties +jobproperties.InDetJobProperties.doxAOD.set_Value_and_Lock(False) +#Disables AllExecutedEvents +rec.doFileMetaData.set_Value_and_Lock(False) + +athenaCommonFlags.EvtMax=10 + +# Run TauVertexFinder with TJVA on +from tauRec.tauRecFlags import tauFlags +tauFlags.isStandalone.set_Value_and_Lock(True) +tauFlags.tauRecSeedJetCollection.set_Value_and_Lock("AntiKt4EMTopoJets") + +UserAlgs = ["tauRec/tauRec_jobOptions.py"] + +include ("RecExCommon/RecExCommon_topOptions.py") + +condSeq = AthSequencer("AthCondSeq") +if not hasattr( condSeq, "LumiBlockMuWriter" ): + include ("LumiBlockComps/LumiBlockMuWriter_jobOptions.py") diff --git a/Reconstruction/tauRec/src/TauCellThinningAlg.cxx b/Reconstruction/tauRec/src/TauCellThinningAlg.cxx index 1faf4ef756ced6c604e06631377687b85a6e45f0..15dcd85b8e4bb5d4f09d9f668adc29653b14ddec 100644 --- a/Reconstruction/tauRec/src/TauCellThinningAlg.cxx +++ b/Reconstruction/tauRec/src/TauCellThinningAlg.cxx @@ -15,6 +15,7 @@ StatusCode TauCellThinningAlg::initialize() { ATH_CHECK( m_cells.initialize(m_streamName) ); + ATH_CHECK( m_cellLinks.initialize(m_streamName) ); ATH_CHECK( m_taus.initialize() ); return StatusCode::SUCCESS; @@ -28,6 +29,9 @@ StatusCode TauCellThinningAlg::execute (const EventContext& ctx) const { SG::ThinningHandle<CaloCellContainer> cells (m_cells, ctx); cells.thinAll(); + + SG::ThinningHandle<CaloClusterCellLinkContainer> cellLinkHandle (m_cellLinks, ctx); + cellLinkHandle.thinAll(); SG::ReadHandle<xAOD::TauJetContainer> taus (m_taus, ctx); if (!taus.isValid()) { @@ -45,7 +49,7 @@ StatusCode TauCellThinningAlg::execute (const EventContext& ctx) const const CaloClusterCellLink* cellLinks = cluster->getCellLinks(); if (!cellLinks) { - ATH_MSG_WARNING( "Cluster without cell links found! Cells cannot be written in AOD." ); + ATH_MSG_WARNING( "Cluster without cell links found! Cells cannot be written in xAOD." ); continue; } @@ -56,7 +60,18 @@ StatusCode TauCellThinningAlg::execute (const EventContext& ctx) const << m_cells.key() << "; cluster skipped."); continue; } - + + // cluster cell link thinning + CaloClusterCellLinkContainer::const_iterator cellLinks_it = std::find(cellLinkHandle->begin(), cellLinkHandle->end(), cellLinks); + if(cellLinks_it != cellLinkHandle->end()) { + size_t link_index = std::distance(cellLinkHandle->begin(), cellLinks_it); + cellLinkHandle.keep(link_index); + } + else { + ATH_MSG_WARNING( "Could not find cluster cell link in " << m_cellLinks.key() << ", won't be saved in xAOD." ); + } + + // cell thinning CaloClusterCellLink::const_iterator it = cellLinks->begin(); CaloClusterCellLink::const_iterator end = cellLinks->end(); for (; it != end; ++it) { diff --git a/Reconstruction/tauRec/tauRec/TauCellThinningAlg.h b/Reconstruction/tauRec/tauRec/TauCellThinningAlg.h index 6af5a040330bc137f673170e9d1f90eee8563954..a202feee001d8b16f6a2e384728c81ed9cd34379 100644 --- a/Reconstruction/tauRec/tauRec/TauCellThinningAlg.h +++ b/Reconstruction/tauRec/tauRec/TauCellThinningAlg.h @@ -7,6 +7,7 @@ #include "AthenaBaseComps/AthReentrantAlgorithm.h" #include "CaloEvent/CaloCellContainer.h" +#include "CaloEvent/CaloClusterCellLinkContainer.h" #include "xAODTau/TauJetContainer.h" #include "StoreGate/ReadHandleKey.h" #include "StoreGate/ThinningHandleKey.h" @@ -45,6 +46,10 @@ class TauCellThinningAlg : public AthReentrantAlgorithm SG::ThinningHandleKey<CaloCellContainer> m_cells { this, "Cells", "AllCalo", "Cell container to thin" }; + // Cluster cell link container to thin + SG::ThinningHandleKey<CaloClusterCellLinkContainer> m_cellLinks + { this, "CellLinks", "CaloCalTopoClusters_links", "Cell container to thin" }; + // Tau container SG::ReadHandleKey<xAOD::TauJetContainer> m_taus { this, "Taus", "TauJets", "Container of taus for which cells should be saved" }; diff --git a/Reconstruction/tauRecTools/Root/HelperFunctions.cxx b/Reconstruction/tauRecTools/Root/HelperFunctions.cxx index d364dd756bda011e81b046b86ff38845fd308c2e..9f08effc7213f72c0af04722a04de80e9a378046 100644 --- a/Reconstruction/tauRecTools/Root/HelperFunctions.cxx +++ b/Reconstruction/tauRecTools/Root/HelperFunctions.cxx @@ -162,7 +162,7 @@ TLorentzVector tauRecTools::GetConstituentP4(const xAOD::JetConstituent& constit constituentP4 = pfo->p4(); } else { - ANA_MSG_ERROR("GetJetConstCluster: Seed jet constituent type not supported!"); + ANA_MSG_ERROR("GetConstituentP4: Seed jet constituent type not supported!"); constituentP4.SetPtEtaPhiE(constituent.pt(), constituent.eta(), constituent.phi(), constituent.e()); } @@ -187,7 +187,6 @@ const StatusCode tauRecTools::GetJetClusterList(const xAOD::Jet* jet, std::vecto const xAOD::CaloCluster* cluster = static_cast<const xAOD::CaloCluster*>( constituent->rawConstituent() ); ANA_MSG_DEBUG("CaloCluster: "); ANA_MSG_DEBUG("eta: " << cluster->eta() << " phi: " << cluster->phi() << " e: " << cluster->e()); - clusterList.push_back(cluster); } else if ( constituent->type() == xAOD::Type::ParticleFlow ) { diff --git a/Reconstruction/tauRecTools/Root/TauCalibrateLC.cxx b/Reconstruction/tauRecTools/Root/TauCalibrateLC.cxx index 6f281362bd8876533487736d4a1a319180bb272d..9bd524bbf030079d0a193077876501880568478b 100644 --- a/Reconstruction/tauRecTools/Root/TauCalibrateLC.cxx +++ b/Reconstruction/tauRecTools/Root/TauCalibrateLC.cxx @@ -19,7 +19,6 @@ TauCalibrateLC::TauCalibrateLC(const std::string& name) : declareProperty("calibrationFile", m_calibrationFile = ""); declareProperty("doEnergyCorrection", m_doEnergyCorr = false); declareProperty("doPtResponse", m_doPtResponse = false); - declareProperty("countOnlyPileupVertices", m_countOnlyPileupVertices = false); declareProperty("doAxisCorrection", m_doAxisCorr = false); declareProperty("usePantauAxis", m_usePantauAxis = false); declareProperty("isCaloOnly", m_isCaloOnly = false); @@ -169,10 +168,7 @@ StatusCode TauCalibrateLC::execute(xAOD::TauJet& pTau) const } const xAOD::VertexContainer * vxContainer = vertexInHandle.cptr(); for (const auto vertex : *vxContainer) { - if (m_countOnlyPileupVertices && vertex->vertexType() == xAOD::VxType::PileUp) { - ++nVertex; - } - else if (!m_countOnlyPileupVertices && vertex->nTrackParticles() >= m_minNTrackAtVertex) { + if (vertex->vertexType() == xAOD::VxType::PileUp) { ++nVertex; } } diff --git a/Reconstruction/tauRecTools/Root/TauPi0ScoreCalculator.cxx b/Reconstruction/tauRecTools/Root/TauPi0ScoreCalculator.cxx index 1adadc66ea3637a3f1e7d51944c462132c4e110f..93832ed995735e4a3421dd4ba7450502140fc6e2 100644 --- a/Reconstruction/tauRecTools/Root/TauPi0ScoreCalculator.cxx +++ b/Reconstruction/tauRecTools/Root/TauPi0ScoreCalculator.cxx @@ -2,38 +2,20 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -//----------------------------------------------------------------------------- -// file: TauPi0ScoreCalculator.cxx -// package: Reconstruction/tauRec -// authors: Benedict Winter, Will Davey -// date: 2012-10-09 -//----------------------------------------------------------------------------- - #include "tauRecTools/TauPi0ScoreCalculator.h" #include "tauRecTools/HelperFunctions.h" #include "xAODPFlow/PFO.h" -//------------------------------------------------------------------------- -// Constructor -//------------------------------------------------------------------------- + TauPi0ScoreCalculator::TauPi0ScoreCalculator(const std::string& name) : - TauRecToolBase(name), - m_mvaBDT(nullptr) -{ - declareProperty("BDTWeightFile", m_weightfile); + TauRecToolBase(name) { + declareProperty("BDTWeightFile", m_weightfile = ""); } -//------------------------------------------------------------------------- -// Destructor -//------------------------------------------------------------------------- -TauPi0ScoreCalculator::~TauPi0ScoreCalculator() -{ -} -StatusCode TauPi0ScoreCalculator::initialize() -{ +StatusCode TauPi0ScoreCalculator::initialize() { std::string weightFile = find_file(m_weightfile); m_mvaBDT = std::make_unique<tauRecTools::BDTHelper>(); @@ -42,124 +24,119 @@ StatusCode TauPi0ScoreCalculator::initialize() return StatusCode::SUCCESS; } -StatusCode TauPi0ScoreCalculator::executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer) const -{ - //--------------------------------------------------------------------- - // only run on 1-5 prong taus - //--------------------------------------------------------------------- - if (pTau.nTracks() == 0 || pTau.nTracks() >5 ) { - return StatusCode::SUCCESS; - } - ATH_MSG_DEBUG("ScoreCalculator: new tau. \tpt = " << pTau.pt() << "\teta = " << pTau.eta() << "\tphi = " << pTau.phi() << "\tnprongs = " << pTau.nTracks()); - - //--------------------------------------------------------------------- - // retrieve neutral PFOs from tau, calculate BDT scores and store them in PFO - //--------------------------------------------------------------------- - for( auto neutralPFO : neutralPFOContainer ) - { - float BDTScore = calculateScore(neutralPFO); - neutralPFO->setBDTPi0Score(BDTScore); - } - - ATH_MSG_DEBUG("End of TauPi0ScoreCalculator::execute"); + +StatusCode TauPi0ScoreCalculator::executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer) const { + // Only run on 1-5 prong taus + if (pTau.nTracks() == 0 || pTau.nTracks() > 5 ) { return StatusCode::SUCCESS; + } + + // retrieve neutral PFOs from tau, calculate BDT scores and store them in PFO + for (xAOD::PFO* neutralPFO : neutralPFOContainer) { + float BDTScore = calculateScore(neutralPFO); + neutralPFO->setBDTPi0Score(BDTScore); + } + + return StatusCode::SUCCESS; } -float TauPi0ScoreCalculator::calculateScore(const xAOD::PFO* neutralPFO) const -{ - std::map<TString, float> availableVariables; // map of the variable name to its value - - float Abs_FIRST_ETA = 0.; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_FIRST_ETA, Abs_FIRST_ETA) == false) { - ATH_MSG_WARNING("Can't find FIRST_ETA. Set it to 0."); - } - Abs_FIRST_ETA = std::abs(Abs_FIRST_ETA); - availableVariables.insert(std::make_pair("Pi0Cluster_Abs_FIRST_ETA", Abs_FIRST_ETA)); - - float SECOND_R = 0.; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_SECOND_R, SECOND_R) == false) { - ATH_MSG_WARNING("Can't find SECOND_R. Set it to 0."); - } - availableVariables.insert(std::make_pair("Pi0Cluster_SECOND_R", SECOND_R)); - - float Abs_DELTA_THETA = 0.; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_DELTA_THETA, Abs_DELTA_THETA) == false) { - ATH_MSG_WARNING("Can't find DELTA_THETA. Set it to 0."); - } - Abs_DELTA_THETA = std::abs(Abs_DELTA_THETA); - availableVariables.insert(std::make_pair("Pi0Cluster_Abs_DELTA_THETA", Abs_DELTA_THETA)); - - float CENTER_LAMBDA_helped = 0.; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_CENTER_LAMBDA, CENTER_LAMBDA_helped) == false) { - ATH_MSG_WARNING("Can't find CENTER_LAMBDA. Set it to 0."); - } - CENTER_LAMBDA_helped = fmin(CENTER_LAMBDA_helped, 1000.); - availableVariables.insert(std::make_pair("Pi0Cluster_CENTER_LAMBDA_helped", CENTER_LAMBDA_helped)); - - float LONGITUDINAL = 0.; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_LONGITUDINAL, LONGITUDINAL) == false) { - ATH_MSG_WARNING("Can't find LONGITUDINAL. Set it to 0."); - } - availableVariables.insert(std::make_pair("Pi0Cluster_LONGITUDINAL", LONGITUDINAL)); - - float ENG_FRAC_EM = 0.; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_ENG_FRAC_EM, ENG_FRAC_EM) == false) { - ATH_MSG_WARNING("Can't find ENG_FRAC_EM. Set it to 0."); - } - availableVariables.insert(std::make_pair("Pi0Cluster_ENG_FRAC_EM", ENG_FRAC_EM)); - - float ENG_FRAC_CORE = 0.; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_ENG_FRAC_CORE, ENG_FRAC_CORE) == false) { - ATH_MSG_WARNING("Can't find ENG_FRAC_CORE. Set it to 0."); - } - availableVariables.insert(std::make_pair("Pi0Cluster_ENG_FRAC_CORE", ENG_FRAC_CORE)); - - float log_SECOND_ENG_DENS = 0.; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_SECOND_ENG_DENS, log_SECOND_ENG_DENS) == false) { - ATH_MSG_WARNING("Can't find SECOND_ENG_DENS. Set it to 0."); - } - if(log_SECOND_ENG_DENS==0.) { - log_SECOND_ENG_DENS=-50.; - } - else { - log_SECOND_ENG_DENS = log(log_SECOND_ENG_DENS); - } - availableVariables.insert(std::make_pair("Pi0Cluster_log_SECOND_ENG_DENS", log_SECOND_ENG_DENS)); - - float EcoreOverEEM1 = 0.; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_EM1CoreFrac, EcoreOverEEM1) == false) { - ATH_MSG_WARNING("Can't find EM1CoreFrac. Set it to 0."); - } - availableVariables.insert(std::make_pair("Pi0Cluster_EcoreOverEEM1", EcoreOverEEM1)); - - int NPosECells_EM1 = 0; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_NPosECells_EM1, NPosECells_EM1) == false) { - ATH_MSG_WARNING("Can't find NPosECells_EM1. Set it to 0."); - } - availableVariables.insert(std::make_pair("Pi0Cluster_NPosECells_EM1", static_cast<float>(NPosECells_EM1))); - - int NPosECells_EM2 = 0; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_NPosECells_EM2, NPosECells_EM2) == false) { - ATH_MSG_WARNING("Can't find NPosECells_EM2. Set it to 0."); - } - availableVariables.insert(std::make_pair("Pi0Cluster_NPosECells_EM2", static_cast<float>(NPosECells_EM2))); - - float AbsFirstEtaWRTClusterPosition_EM1 = 0.; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_firstEtaWRTClusterPosition_EM1, AbsFirstEtaWRTClusterPosition_EM1) == false) { - ATH_MSG_WARNING("Can't find firstEtaWRTClusterPosition_EM1. Set it to 0."); - } - AbsFirstEtaWRTClusterPosition_EM1 = std::abs(AbsFirstEtaWRTClusterPosition_EM1); - availableVariables.insert(std::make_pair("Pi0Cluster_AbsFirstEtaWRTClusterPosition_EM1", AbsFirstEtaWRTClusterPosition_EM1)); - - float secondEtaWRTClusterPosition_EM2 = 0.; - if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_secondEtaWRTClusterPosition_EM2, secondEtaWRTClusterPosition_EM2) == false) { - ATH_MSG_WARNING("Can't find secondEtaWRTClusterPosition_EM2. Set it to 0."); - } - availableVariables.insert(std::make_pair("Pi0Cluster_secondEtaWRTClusterPosition_EM2", secondEtaWRTClusterPosition_EM2)); - - // Calculate BDT score, will be -999 when availableVariables lack variables - float score = m_mvaBDT->getGradBoostMVA(availableVariables); - - return score; + + +float TauPi0ScoreCalculator::calculateScore(const xAOD::PFO* neutralPFO) const { + + std::map<TString, float> availableVariables; + + float Abs_FIRST_ETA = 0.; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_FIRST_ETA, Abs_FIRST_ETA) == false) { + ATH_MSG_WARNING("Can't find FIRST_ETA. Set it to 0."); + } + Abs_FIRST_ETA = std::abs(Abs_FIRST_ETA); + availableVariables.insert(std::make_pair("Pi0Cluster_Abs_FIRST_ETA", Abs_FIRST_ETA)); + + float SECOND_R = 0.; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_SECOND_R, SECOND_R) == false) { + ATH_MSG_WARNING("Can't find SECOND_R. Set it to 0."); + } + availableVariables.insert(std::make_pair("Pi0Cluster_SECOND_R", SECOND_R)); + + float Abs_DELTA_THETA = 0.; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_DELTA_THETA, Abs_DELTA_THETA) == false) { + ATH_MSG_WARNING("Can't find DELTA_THETA. Set it to 0."); + } + Abs_DELTA_THETA = std::abs(Abs_DELTA_THETA); + availableVariables.insert(std::make_pair("Pi0Cluster_Abs_DELTA_THETA", Abs_DELTA_THETA)); + + float CENTER_LAMBDA_helped = 0.; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_CENTER_LAMBDA, CENTER_LAMBDA_helped) == false) { + ATH_MSG_WARNING("Can't find CENTER_LAMBDA. Set it to 0."); + } + CENTER_LAMBDA_helped = fmin(CENTER_LAMBDA_helped, 1000.); + availableVariables.insert(std::make_pair("Pi0Cluster_CENTER_LAMBDA_helped", CENTER_LAMBDA_helped)); + + float LONGITUDINAL = 0.; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_LONGITUDINAL, LONGITUDINAL) == false) { + ATH_MSG_WARNING("Can't find LONGITUDINAL. Set it to 0."); + } + availableVariables.insert(std::make_pair("Pi0Cluster_LONGITUDINAL", LONGITUDINAL)); + + float ENG_FRAC_EM = 0.; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_ENG_FRAC_EM, ENG_FRAC_EM) == false) { + ATH_MSG_WARNING("Can't find ENG_FRAC_EM. Set it to 0."); + } + availableVariables.insert(std::make_pair("Pi0Cluster_ENG_FRAC_EM", ENG_FRAC_EM)); + + float ENG_FRAC_CORE = 0.; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_ENG_FRAC_CORE, ENG_FRAC_CORE) == false) { + ATH_MSG_WARNING("Can't find ENG_FRAC_CORE. Set it to 0."); + } + availableVariables.insert(std::make_pair("Pi0Cluster_ENG_FRAC_CORE", ENG_FRAC_CORE)); + + float log_SECOND_ENG_DENS = 0.; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_SECOND_ENG_DENS, log_SECOND_ENG_DENS) == false) { + ATH_MSG_WARNING("Can't find SECOND_ENG_DENS. Set it to 0."); + } + if(log_SECOND_ENG_DENS==0.) { + log_SECOND_ENG_DENS=-50.; + } + else { + log_SECOND_ENG_DENS = log(log_SECOND_ENG_DENS); + } + availableVariables.insert(std::make_pair("Pi0Cluster_log_SECOND_ENG_DENS", log_SECOND_ENG_DENS)); + + float EcoreOverEEM1 = 0.; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_EM1CoreFrac, EcoreOverEEM1) == false) { + ATH_MSG_WARNING("Can't find EM1CoreFrac. Set it to 0."); + } + availableVariables.insert(std::make_pair("Pi0Cluster_EcoreOverEEM1", EcoreOverEEM1)); + + int NPosECells_EM1 = 0; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_NPosECells_EM1, NPosECells_EM1) == false) { + ATH_MSG_WARNING("Can't find NPosECells_EM1. Set it to 0."); + } + availableVariables.insert(std::make_pair("Pi0Cluster_NPosECells_EM1", static_cast<float>(NPosECells_EM1))); + + int NPosECells_EM2 = 0; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_NPosECells_EM2, NPosECells_EM2) == false) { + ATH_MSG_WARNING("Can't find NPosECells_EM2. Set it to 0."); + } + availableVariables.insert(std::make_pair("Pi0Cluster_NPosECells_EM2", static_cast<float>(NPosECells_EM2))); + + float AbsFirstEtaWRTClusterPosition_EM1 = 0.; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_firstEtaWRTClusterPosition_EM1, AbsFirstEtaWRTClusterPosition_EM1) == false) { + ATH_MSG_WARNING("Can't find firstEtaWRTClusterPosition_EM1. Set it to 0."); + } + AbsFirstEtaWRTClusterPosition_EM1 = std::abs(AbsFirstEtaWRTClusterPosition_EM1); + availableVariables.insert(std::make_pair("Pi0Cluster_AbsFirstEtaWRTClusterPosition_EM1", AbsFirstEtaWRTClusterPosition_EM1)); + + float secondEtaWRTClusterPosition_EM2 = 0.; + if(neutralPFO->attribute(xAOD::PFODetails::PFOAttributes::cellBased_secondEtaWRTClusterPosition_EM2, secondEtaWRTClusterPosition_EM2) == false) { + ATH_MSG_WARNING("Can't find secondEtaWRTClusterPosition_EM2. Set it to 0."); + } + availableVariables.insert(std::make_pair("Pi0Cluster_secondEtaWRTClusterPosition_EM2", secondEtaWRTClusterPosition_EM2)); + + // Calculate BDT score, will be -999 when availableVariables lack variables + float score = m_mvaBDT->getGradBoostMVA(availableVariables); + + return score; } diff --git a/Reconstruction/tauRecTools/Root/TauPi0Selector.cxx b/Reconstruction/tauRecTools/Root/TauPi0Selector.cxx index 6c80984f9de6337c9e235fa280909587a2196c83..592e021630fc7efbb033204a0cdcb6a724fa04c8 100644 --- a/Reconstruction/tauRecTools/Root/TauPi0Selector.cxx +++ b/Reconstruction/tauRecTools/Root/TauPi0Selector.cxx @@ -2,149 +2,120 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -//----------------------------------------------------------------------------- -// file: TauPi0Selector.cxx -// package: Reconstruction/tauRec -// authors: Benedict Winter, Will Davey -// date: 2012-10-09 -//----------------------------------------------------------------------------- - #include "tauRecTools/TauPi0Selector.h" -//------------------------------------------------------------------------- -// Constructor -//------------------------------------------------------------------------- -TauPi0Selector::TauPi0Selector(const std::string& name) : - TauRecToolBase(name) -{ - declareProperty("ClusterEtCut", m_clusterEtCut); - declareProperty("ClusterBDTCut_1prong", m_clusterBDTCut_1prong); - declareProperty("ClusterBDTCut_mprong", m_clusterBDTCut_mprong); + +TauPi0Selector::TauPi0Selector(const std::string& name) : + TauRecToolBase(name) { + declareProperty("ClusterEtCut", m_clusterEtCut); + declareProperty("ClusterBDTCut_1prong", m_clusterBDTCut_1prong); + declareProperty("ClusterBDTCut_mprong", m_clusterBDTCut_mprong); } -//------------------------------------------------------------------------- -// Destructor -//------------------------------------------------------------------------- -TauPi0Selector::~TauPi0Selector() -{ -} -StatusCode TauPi0Selector::executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer) const -{ - // decay mode enum - auto kDecayModeProto = xAOD::TauJetParameters::PanTau_DecayModeProto; - // Clear vector of cell-based pi0 PFO Links. Required when rerunning on xAOD level. - pTau.clearProtoPi0PFOLinks(); - - //--------------------------------------------------------------------- - // only run on 1-5 prong taus - //--------------------------------------------------------------------- - if (pTau.nTracks() == 0 || pTau.nTracks() >5 ) { - // Set proto decay mode to "not set". Will be overwritten for taus with 1-5 tracks - pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_NotSet); - return StatusCode::SUCCESS; +StatusCode TauPi0Selector::executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer) const { + // Clear vector of cell-based pi0 PFO Links. Required when rerunning on xAOD level. + pTau.clearProtoPi0PFOLinks(); + + // Decay mode enum + auto kDecayModeProto = xAOD::TauJetParameters::PanTau_DecayModeProto; + + // 0, >=5 prong taus will have Mode_NotSet + if (pTau.nTracks() == 0 || pTau.nTracks() >5 ) { + pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_NotSet); + return StatusCode::SUCCESS; + } + + // 1-5 prong taus have Mode_Other by default + // 1, 3 prong taus will be over-written + pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_Other); + + // Apply selection to the pi0, and count the number + int nRecoPi0s=0; + for (xAOD::PFO* neutralPFO : neutralPFOContainer) { + // Set number of pi0s to 0 for all neutral PFOs. Required when rerunning on xAOD level + neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::nPi0Proto, 0); + + // Only consider PFOs within 0.2 cone of the tau axis + if (pTau.p4().DeltaR(neutralPFO->p4()) > 0.2) continue; + + int etaBin = getEtaBin( neutralPFO->cluster(0)->eta() ); + + // Apply Et cut + if (neutralPFO->p4().Et() < m_clusterEtCut.at(etaBin)) continue; + + // Apply BDT score cut + double BDTScore = neutralPFO->bdtPi0Score(); + if ((pTau.nTracks() == 1 && BDTScore < m_clusterBDTCut_1prong.at(etaBin)) || + (pTau.nTracks() > 1 && BDTScore < m_clusterBDTCut_mprong.at(etaBin))) continue; + + int nHitsInEM1 = 0; + if (!neutralPFO->attribute(xAOD::PFODetails::cellBased_NHitsInEM1, nHitsInEM1)) { + ATH_MSG_WARNING("Couldn't retrieve nHitsInEM1. Will set it to 0."); } - // Set proto decay mode to "other". Will be overwritten for taus with 1 or 3 tracks - pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_Other); - - //--------------------------------------------------------------------- - // retrieve neutral PFOs from tau. Apply selection and create links to - // Pi0NeutralPFOs - //--------------------------------------------------------------------- - int nRecoPi0s=0; - for( auto neutralPFO : neutralPFOContainer ) - { - // Set number of pi0s to 0 for all neutral PFOs. Required when rerunning on xAOD level - neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::nPi0Proto, 0); - - // Get eta bin - int etaBin = getPi0Cluster_etaBin( neutralPFO->cluster(0)->eta() ); - - // Preselection - if(neutralPFO->p4().Et() < m_clusterEtCut.at(etaBin)) continue; - if(pTau.p4().DeltaR(neutralPFO->p4()) > 0.2) continue; // TODO: Replace by shrinking cone? - - // BDT Selection - float BDTScore = neutralPFO->bdtPi0Score(); - ATH_MSG_DEBUG("etaBin = " << etaBin - << ", m_clusterEtCut.at(etaBin) = " <<m_clusterEtCut.at(etaBin) - << ", m_clusterBDTCut_1prong.at(etaBin) = " << m_clusterBDTCut_1prong.at(etaBin) - << ", m_clusterBDTCut_mprong.at(etaBin) = " << m_clusterBDTCut_mprong.at(etaBin)); - if( (pTau.nTracks()==1 && BDTScore < m_clusterBDTCut_1prong.at(etaBin)) - || (pTau.nTracks()>1 && BDTScore < m_clusterBDTCut_mprong.at(etaBin)) ) continue; - - // Set number of pi0s - int nHitsInEM1 = 0; - if(!neutralPFO->attribute(xAOD::PFODetails::cellBased_NHitsInEM1, nHitsInEM1)) - ATH_MSG_WARNING("Couldn't retrieve nHitsInEM1. Will set it to 0."); - if(nHitsInEM1<3){ - neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::nPi0Proto, 1); - nRecoPi0s++; - } - else{ - neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::nPi0Proto, 2); - nRecoPi0s+=2; - } - - // Set element link to Pi0tagged PFO - pTau.addProtoPi0PFOLink(ElementLink< xAOD::PFOContainer > (neutralPFO, neutralPFOContainer)); + // nHitsInEM1 < 3 --- one pi0; nHitsInEM1 >= 3 --- two pi0s + // FIXME: what about nHitsInEM1 == 0 ? + if (nHitsInEM1 < 3) { + neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::nPi0Proto, 1); + ++nRecoPi0s; + } + else { + neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::nPi0Proto, 2); + nRecoPi0s += 2; } - // Set Proto Decay Mode - if(pTau.nTracks()==1){ - if(nRecoPi0s==0) pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_1p0n); - else if(nRecoPi0s==1) pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_1p1n); - else pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_1pXn); + pTau.addProtoPi0PFOLink(ElementLink< xAOD::PFOContainer > (neutralPFO, neutralPFOContainer)); + } + + // Set Proto Decay Mode based on the number charged tracks and pi0s + if (pTau.nTracks()==1) { + if (nRecoPi0s==0) { + pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_1p0n); } - if(pTau.nTracks()==3){ - if(nRecoPi0s==0) pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_3p0n); - else pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_3pXn); + else if (nRecoPi0s==1) { + pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_1p1n); } - - return StatusCode::SUCCESS; + else { + pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_1pXn); + } + } + else if (pTau.nTracks()==3) { + if (nRecoPi0s==0) { + pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_3p0n); + } + else { + pTau.setPanTauDetail(kDecayModeProto, xAOD::TauJetParameters::DecayMode::Mode_3pXn); + } + } + + return StatusCode::SUCCESS; } -int TauPi0Selector::getPi0Cluster_etaBin(double Pi0Cluster_eta) const { - int Pi0Cluster_etaBin = -1; - double Pi0Cluster_noCorr_ABSeta = std::abs(Pi0Cluster_eta); - if( Pi0Cluster_noCorr_ABSeta < 0.80 ) Pi0Cluster_etaBin = 0; - else if( Pi0Cluster_noCorr_ABSeta < 1.40 ) Pi0Cluster_etaBin = 1; - else if( Pi0Cluster_noCorr_ABSeta < 1.50 ) Pi0Cluster_etaBin = 2; - else if( Pi0Cluster_noCorr_ABSeta < 1.90 ) Pi0Cluster_etaBin = 3; - else Pi0Cluster_etaBin = 4; - return Pi0Cluster_etaBin; -} -TLorentzVector TauPi0Selector::getP4(const xAOD::TauJet& pTau) const -{ - TLorentzVector p4(0.,0.,0.,0.); - // Add charged PFOs - for( auto chargedPFOLink : pTau.protoChargedPFOLinks() ){ - if( not chargedPFOLink.isValid() ){ - ATH_MSG_WARNING("Invalid protoChargedPFOLink"); - continue; - } - p4+=(*chargedPFOLink)->p4(); - } - // Add pi0 PFOs - for( auto pi0PFOLink : pTau.protoPi0PFOLinks() ) - { - if( not pi0PFOLink.isValid() ){ - ATH_MSG_WARNING("Invalid protoPi0PFOLink"); - continue; - } - const xAOD::PFO* pi0PFO = (*pi0PFOLink); - // assign neutral pion mass - double mass = 134.9766; - double p = std::sqrt(std::pow(pi0PFO->e(),2) - std::pow(mass,2)); - double pt = p/std::cosh(pi0PFO->eta()); - TLorentzVector pi0_corrP4; - pi0_corrP4.SetPtEtaPhiM(pt,pi0PFO->eta(),pi0PFO->phi(),mass); - p4+=pi0_corrP4; - } - return p4; +int TauPi0Selector::getEtaBin(double eta) const { + int etaBin = -1; + + double absEta = std::abs(eta); + + if (absEta < 0.80) { + etaBin = 0; + } + else if (absEta < 1.40) { + etaBin = 1; + } + else if (absEta < 1.50) { + etaBin = 2; + } + else if (absEta < 1.90) { + etaBin = 3; + } + else { + etaBin = 4; + } + + return etaBin; } diff --git a/Reconstruction/tauRecTools/Root/TauVertexCorrection.cxx b/Reconstruction/tauRecTools/Root/TauVertexCorrection.cxx index e0d01671503ec63adb5110c90ae81bff8732beff..2522a3cd2b9c1fc53b657b2f795e1f8639dbd5a4 100644 --- a/Reconstruction/tauRecTools/Root/TauVertexCorrection.cxx +++ b/Reconstruction/tauRecTools/Root/TauVertexCorrection.cxx @@ -18,10 +18,16 @@ TauVertexCorrection::TauVertexCorrection(const std::string& name): StatusCode TauVertexCorrection::initialize() { ATH_MSG_INFO("in initialize"); + // For AntiKt4LCTopoJets: CALIBRATED -- jet vertex corrected at LCScale, UNCALIBRATED -- EMScale + // For AntiKt4EMTopoJets: CALIBRATED -- jet vertex corrected at EMScale, UNCALIBRATED -- EMScale if (m_seedJet == "AntiKt4LCTopoJets") { m_isPFO = false; m_clusterState = xAOD::CaloCluster::State::CALIBRATED; } + else if (m_seedJet == "AntiKt4EMTopoJets") { + m_isPFO = false; + m_clusterState = xAOD::CaloCluster::State::CALIBRATED; + } else if (m_seedJet == "AntiKt4EMPFlowJets") { m_isPFO = true; m_clusterState = xAOD::CaloCluster::State::UNCALIBRATED; diff --git a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx index 2dc44c96932cf4933f60dfc76eb1cd64c2843433..241dc39b8b00e66d38daab8109dd5a9c8517a783 100644 --- a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx +++ b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx @@ -3,35 +3,20 @@ */ #ifndef XAOD_ANALYSIS -//----------------------------------------------------------------------------- -// file: TauPi0ClusterCreator.cxx -// package: Reconstruction/tauEvent -// authors: Benedict Winter, Will Davey, Stephanie Yuen -// date: 2012-10-09 -//----------------------------------------------------------------------------- + +#include "TauPi0ClusterCreator.h" +#include "tauRecTools/HelperFunctions.h" #include "CaloUtils/CaloClusterStoreHelper.h" #include "FourMomUtils/P4Helpers.h" #include "xAODJet/Jet.h" -#include "TauPi0ClusterCreator.h" -#include "tauRecTools/HelperFunctions.h" -//------------------------------------------------------------------------- -// Constructor -//------------------------------------------------------------------------- TauPi0ClusterCreator::TauPi0ClusterCreator(const std::string& name) : TauRecToolBase(name) { } -//------------------------------------------------------------------------- -// Destructor -//------------------------------------------------------------------------- - -TauPi0ClusterCreator::~TauPi0ClusterCreator() -{ -} StatusCode TauPi0ClusterCreator::initialize() { @@ -39,454 +24,463 @@ StatusCode TauPi0ClusterCreator::initialize() { return StatusCode::SUCCESS; } -//______________________________________________________________________________ -StatusCode TauPi0ClusterCreator::executePi0ClusterCreator(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer, - xAOD::PFOContainer& hadronicClusterPFOContainer, - const xAOD::CaloClusterContainer& pi0ClusterContainer) const -{ - // Any tau needs to have PFO vectors. Set empty vectors before nTrack cut - std::vector<ElementLink<xAOD::PFOContainer> > empty; - pTau.setProtoChargedPFOLinks(empty); - pTau.setProtoNeutralPFOLinks(empty); - pTau.setProtoPi0PFOLinks(empty); - pTau.setHadronicPFOLinks(empty); - - // only run shower subtraction on 1-5 prong taus - if (pTau.nTracks() == 0 || pTau.nTracks() >5) { - return StatusCode::SUCCESS; + + +StatusCode TauPi0ClusterCreator::executePi0ClusterCreator(xAOD::TauJet& tau, xAOD::PFOContainer& neutralPFOContainer, + xAOD::PFOContainer& hadronicPFOContainer, + const xAOD::CaloClusterContainer& pi0ClusterContainer) const { + // Any tau needs to have PFO vectors. Set empty vectors before nTrack cut + std::vector<ElementLink<xAOD::PFOContainer>> empty; + tau.setProtoNeutralPFOLinks(empty); + tau.setHadronicPFOLinks(empty); + + // only run shower subtraction on 1-5 prong taus + if (tau.nTracks() == 0 || tau.nTracks() > 5) { + return StatusCode::SUCCESS; + } + + // Retrieve Ecal1 shots and match them to clusters + std::vector<const xAOD::PFO*> shotPFOs; + + unsigned nShots = tau.nShotPFOs(); + for (unsigned index=0; index<nShots; ++index) { + const xAOD::PFO* shotPFO = tau.shotPFO(index); + shotPFOs.push_back(shotPFO); + } + + // Map shot to the pi0 cluster + std::map<unsigned, const xAOD::CaloCluster*> shotToClusterMap = getShotToClusterMap(shotPFOs, pi0ClusterContainer, tau); + + // FIXME: These clusters are custom ones, so could be corrected using tau vertex directly + if (! tau.jetLink().isValid()) { + ATH_MSG_ERROR("Tau jet link is invalid."); + return StatusCode::FAILURE; + } + const xAOD::Jet *jetSeed = tau.jet(); + const xAOD::Vertex* jetVertex = m_tauVertexCorrection->getJetVertex(*jetSeed); + const xAOD::Vertex* tauVertex = nullptr; + if (tau.vertexLink().isValid()) tauVertex = tau.vertex(); + TLorentzVector tauAxis = m_tauVertexCorrection->getTauAxis(tau); + + // Loop over clusters, and create neutral PFOs + for (const xAOD::CaloCluster* cluster: pi0ClusterContainer) { + TLorentzVector clusterP4 = m_tauVertexCorrection->getVertexCorrectedP4(*cluster, tauVertex, jetVertex); + + // Clusters must have enough energy, and within 0.4 cone of the tau candidate + if (clusterP4.Pt() < m_clusterEtCut) continue; + if (clusterP4.DeltaR(tauAxis) > 0.4) continue; + + // Create the neutral PFOs + xAOD::PFO* neutralPFO = new xAOD::PFO(); + neutralPFOContainer.push_back(neutralPFO); + + // Add the link to the tau candidate + ElementLink<xAOD::PFOContainer> PFOElementLink; + PFOElementLink.toContainedElement(neutralPFOContainer, neutralPFO); + tau.addProtoNeutralPFOLink(PFOElementLink); + + ATH_CHECK(configureNeutralPFO(*cluster, pi0ClusterContainer, tau, shotPFOs, shotToClusterMap, *neutralPFO)); + } + + // Loop over clusters, and create hadronic PFOs + std::vector<const xAOD::CaloCluster*> clusterList; + ATH_CHECK(tauRecTools::GetJetClusterList(jetSeed, clusterList, m_useSubtractedCluster)); + for (const xAOD::CaloCluster* cluster: clusterList) { + TLorentzVector clusterP4 = m_tauVertexCorrection->getVertexCorrectedP4(*cluster, tauVertex, jetVertex); + + // Clusters must have positive energy, and within 0.2 cone of the tau candidate + if(clusterP4.E()<=0.) continue; + if(clusterP4.DeltaR(tauAxis) > 0.2) continue; + + double clusterEnergyHad = 0.; + const CaloClusterCellLink* cellLinks = cluster->getCellLinks(); + CaloClusterCellLink::const_iterator cellLink = cellLinks->begin(); + for (; cellLink != cellLinks->end(); ++cellLink) { + const CaloCell* cell = static_cast<const CaloCell*>(*cellLink); + + int sampling = cell->caloDDE()->getSampling(); + if (sampling < 8) continue; + + double cellEnergy = cell->e() * cellLink.weight(); + clusterEnergyHad += cellEnergy; } - ATH_MSG_DEBUG("ClusterCreator: new tau. \tpt = " << pTau.pt() << "\teta = " << pTau.eta() << "\tphi = " << pTau.phi() << "\tnprongs = " << pTau.nTracks()); - - // Retrieve Ecal1 shots and match them to clusters - std::vector<const xAOD::PFO*> shotVector; - unsigned nShots = pTau.nShotPFOs(); - for(unsigned iShot=0;iShot<nShots;++iShot){ - const xAOD::PFO* thisShot = pTau.shotPFO(iShot); - shotVector.push_back( thisShot ); + + // Energy in Had Calorimeter must be positive + if(clusterEnergyHad <= 0.) continue; + + // Create the hadrnic PFO + xAOD::PFO* hadronicPFO = new xAOD::PFO(); + hadronicPFOContainer.push_back(hadronicPFO); + + // Add element link from tau to hadronic PFO + ElementLink<xAOD::PFOContainer> PFOElementLink; + PFOElementLink.toContainedElement( hadronicPFOContainer, hadronicPFO ); + tau.addHadronicPFOLink( PFOElementLink ); + + ATH_CHECK(configureHadronicPFO(*cluster, clusterEnergyHad, *hadronicPFO)); + } + + return StatusCode::SUCCESS; +} + + + +std::map<unsigned, const xAOD::CaloCluster*> TauPi0ClusterCreator::getShotToClusterMap(const std::vector<const xAOD::PFO*>& shotPFOs, + const xAOD::CaloClusterContainer& pi0ClusterContainer, + const xAOD::TauJet &tau) const { + std::map<unsigned, const xAOD::CaloCluster*> shotToClusterMap; + for (unsigned index = 0; index < shotPFOs.size(); ++index) { + const xAOD::PFO* shotPFO = shotPFOs.at(index); + + int seedHashInt = -1; + if (!shotPFO->attribute(xAOD::PFODetails::PFOAttributes::tauShots_seedHash, seedHashInt)) { + ATH_MSG_WARNING("Couldn't find seed hash. Set it to -1, no cluster will be associated to shot."); } - std::map<unsigned, xAOD::CaloCluster*> clusterToShotMap = getClusterToShotMap(shotVector, pi0ClusterContainer, pTau); - - if (! pTau.jetLink().isValid()) { + const IdentifierHash seedHash = static_cast<const IdentifierHash>(seedHashInt); + + const xAOD::Jet *jetSeed = tau.jet(); + if (!jetSeed) { ATH_MSG_ERROR("Tau jet link is invalid."); - return StatusCode::FAILURE; + return shotToClusterMap; } - const xAOD::Jet *jetSeed = pTau.jet(); - const xAOD::Vertex* jetVertex = m_tauVertexCorrection->getJetVertex(*jetSeed); - + const xAOD::Vertex* tauVertex = nullptr; - if (pTau.vertexLink().isValid()) tauVertex = pTau.vertex(); + if (tau.vertexLink().isValid()) tauVertex = tau.vertex(); - TLorentzVector tauAxis = m_tauVertexCorrection->getTauAxis(pTau); + TLorentzVector tauAxis = m_tauVertexCorrection->getTauAxis(tau); - for (const xAOD::CaloCluster* cluster: pi0ClusterContainer){ - TLorentzVector clusterP4 = m_tauVertexCorrection->getVertexCorrectedP4(*cluster, tauVertex, jetVertex); + float weightInCluster = -1.; + float weightInPreviousCluster = -1; + + for (const xAOD::CaloCluster* cluster : pi0ClusterContainer) { + // FIXME: cluster here is not corrected + TLorentzVector clusterP4 = m_tauVertexCorrection->getVertexCorrectedP4(*cluster, tauVertex, jetVertex); + + weightInCluster = -1.; + if (clusterP4.Et() < m_clusterEtCut) continue; + if (clusterP4.DeltaR(tauAxis) > 0.4) continue; - // selection - if (clusterP4.Pt() < m_clusterEtCut) continue; - // Cluster container has clusters for all taus. - // Only run on clusters that belong to this tau - if (clusterP4.DeltaR(tauAxis) > 0.4) continue; - - // Get shots in this cluster. Need to use (CaloCluster*) (*clusterItr) - // (not a copy!) since the pointer will otherwise be different than in clusterToShotMap - std::vector<unsigned> shotsInCluster = getShotsMatchedToCluster( shotVector, clusterToShotMap, cluster); - - // Calculate input variables for fake supression. - // Do this before applying the vertex correction, - // since the position of the cluster in the - // calorimeter is required. - float EM1CoreFrac = getEM1CoreFrac(cluster); - int NHitsInEM1 = getNPhotons(shotVector, shotsInCluster); - std::vector<int> NPosECellsInLayer = getNPosECells(cluster); - std::vector<float> firstEtaWRTClusterPositionInLayer = get1stEtaMomWRTCluster(cluster); - std::vector<float> secondEtaWRTClusterPositionInLayer = get2ndEtaMomWRTCluster(cluster); - - // Retrieve cluster moments that are used for fake supression and that are not stored in AOD - // for every cluster. Do this after applying the vertex correction, since the moments - // (especcially DELTA_PHI and DELTA_THETA) must be calculated WRT the tau vertex - double CENTER_MAG = 0.0; - double FIRST_ETA = 0.0; - double SECOND_R = 0.0; - double SECOND_LAMBDA = 0.0; - double DELTA_PHI = 0.0; - double DELTA_THETA = 0.0; - double CENTER_LAMBDA = 0.0; - double LATERAL = 0.0; - double LONGITUDINAL = 0.0; - double ENG_FRAC_EM = 0.0; - double ENG_FRAC_MAX = 0.0; - double ENG_FRAC_CORE = 0.0; - double SECOND_ENG_DENS = 0.0; - - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::CENTER_MAG, CENTER_MAG) ) ATH_MSG_WARNING("Couldn't retrieve CENTER_MAG moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::FIRST_ETA, FIRST_ETA) ) ATH_MSG_WARNING("Couldn't retrieve FIRST_ETA moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_R, SECOND_R) ) ATH_MSG_WARNING("Couldn't retrieve SECOND_R moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_LAMBDA, SECOND_LAMBDA) ) ATH_MSG_WARNING("Couldn't retrieve SECOND_LAMBDA moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::DELTA_PHI, DELTA_PHI) ) ATH_MSG_WARNING("Couldn't retrieve DELTA_PHI moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::DELTA_THETA, DELTA_THETA) ) ATH_MSG_WARNING("Couldn't retrieve DELTA_THETA moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::CENTER_LAMBDA, CENTER_LAMBDA) ) ATH_MSG_WARNING("Couldn't retrieve CENTER_LAMBDA moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::LATERAL, LATERAL) ) ATH_MSG_WARNING("Couldn't retrieve LATERAL moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::LONGITUDINAL, LONGITUDINAL) ) ATH_MSG_WARNING("Couldn't retrieve LONGITUDINAL moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::ENG_FRAC_EM, ENG_FRAC_EM) ) ATH_MSG_WARNING("Couldn't retrieve ENG_FRAC_EM moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::ENG_FRAC_MAX, ENG_FRAC_MAX) ) ATH_MSG_WARNING("Couldn't retrieve ENG_FRAC_MAX moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::ENG_FRAC_CORE, ENG_FRAC_CORE) ) ATH_MSG_WARNING("Couldn't retrieve ENG_FRAC_CORE moment. Set it to 0."); - if( !cluster->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_ENG_DENS, SECOND_ENG_DENS) ) ATH_MSG_WARNING("Couldn't retrieve SECOND_ENG_DENS moment. Set it to 0."); - - float E_EM1 = cluster->eSample(CaloSampling::EMB1) + cluster->eSample(CaloSampling::EME1); - float E_EM2 = cluster->eSample(CaloSampling::EMB2) + cluster->eSample(CaloSampling::EME2); + const CaloClusterCellLink* cellLinks = cluster->getCellLinks(); + CaloClusterCellLink::const_iterator cellLink = cellLinks->begin(); + for (; cellLink != cellLinks->end(); ++cellLink) { + const CaloCell* cell = static_cast<const CaloCell*>(*cellLink); - // create neutral PFO. Set BDTScore to dummy value <-1. The BDT score is calculated within TauPi0Selector.cxx. - xAOD::PFO* neutralPFO = new xAOD::PFO(); - neutralPFOContainer.push_back( neutralPFO ); - - // Create element link from tau to neutral PFO - ElementLink<xAOD::PFOContainer> PFOElementLink; - PFOElementLink.toContainedElement( neutralPFOContainer, neutralPFO ); - pTau.addProtoNeutralPFOLink( PFOElementLink ); - - // Set PFO variables - ElementLink<xAOD::CaloClusterContainer> clusElementLink; - clusElementLink.toContainedElement( pi0ClusterContainer, cluster ); - neutralPFO->setClusterLink( clusElementLink ); + // Check if seed cell is in cluster. + if (cell->caloDDE()->calo_hash() != seedHash) continue; - neutralPFO->setP4( (float) cluster->pt(), (float) cluster->eta(), (float) cluster->phi(), (float) cluster->m()); - neutralPFO->setBDTPi0Score( (float) -9999. ); - neutralPFO->setCharge( 0. ); - neutralPFO->setCenterMag( (float) CENTER_MAG); - neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::nPi0Proto, -1); - - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_FIRST_ETA, (float) FIRST_ETA); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_SECOND_R, (float) SECOND_R); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_SECOND_LAMBDA, (float) SECOND_LAMBDA); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_DELTA_PHI, (float) DELTA_PHI); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_DELTA_THETA, (float) DELTA_THETA); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_CENTER_LAMBDA, (float) CENTER_LAMBDA); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_LATERAL, (float) LATERAL); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_LONGITUDINAL, (float) LONGITUDINAL); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_ENG_FRAC_EM, (float) ENG_FRAC_EM); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_ENG_FRAC_MAX, (float) ENG_FRAC_MAX); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_ENG_FRAC_CORE, (float) ENG_FRAC_CORE); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_SECOND_ENG_DENS, (float) SECOND_ENG_DENS); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_energy_EM1, (float) E_EM1); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_energy_EM2, (float) E_EM2); - - - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_EM1CoreFrac, EM1CoreFrac); - neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::cellBased_NHitsInEM1, NHitsInEM1); - neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::cellBased_NPosECells_PS, NPosECellsInLayer.at(0)); - neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::cellBased_NPosECells_EM1, NPosECellsInLayer.at(1)); - neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::cellBased_NPosECells_EM2, NPosECellsInLayer.at(2)); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_firstEtaWRTClusterPosition_EM1, firstEtaWRTClusterPositionInLayer.at(1)); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_firstEtaWRTClusterPosition_EM2, firstEtaWRTClusterPositionInLayer.at(2)); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_secondEtaWRTClusterPosition_EM1, secondEtaWRTClusterPositionInLayer.at(1)); - neutralPFO->setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_secondEtaWRTClusterPosition_EM2, secondEtaWRTClusterPositionInLayer.at(2)); - - // Store shot element links in neutral PFO - std::vector<ElementLink<xAOD::IParticleContainer> > shotlinks; - for(unsigned iShot = 0;iShot<shotsInCluster.size();++iShot){ - ElementLink<xAOD::PFOContainer> shotPFOElementLink = pTau.shotPFOLinks().at(shotsInCluster.at(iShot)); - ElementLink<xAOD::IParticleContainer> shotElementLink; - shotPFOElementLink.toPersistent(); - shotElementLink.resetWithKeyAndIndex( shotPFOElementLink.persKey(), shotPFOElementLink.persIndex() ); - if (!shotElementLink.isValid()) ATH_MSG_WARNING("Created an invalid element link to xAOD::PFO"); - shotlinks.push_back(shotElementLink); + weightInCluster = cellLink.weight(); + // found cell, no need to loop over other cells + break; + } + + if (weightInCluster < 0) continue; + + // Check if cell was already found in a previous cluster + if (weightInPreviousCluster < 0) { + // Cell not found in a previous cluster. + // Have to check whether cell is shared with other cluster + shotToClusterMap[index] = cluster; + weightInPreviousCluster = weightInCluster; + } + else { + // Cell has been found in a previous cluster + // assign shot to this cluster if it has larger weight for the cell + // otherwise the shots keeps assigned to the previous cluster + if (weightInCluster > weightInPreviousCluster) { + shotToClusterMap[index] = cluster; } - if(!neutralPFO->setAssociatedParticleLinks( xAOD::PFODetails::TauShot,shotlinks)) - ATH_MSG_WARNING("Couldn't add shot links to neutral PFO!"); + // FIXME: why break here ? Should loop all the cluster, and find the largest weight + break; + } } + } + + return shotToClusterMap; +} - // Create hadronic PFOs, put them in output container and store links to tau - if(!setHadronicClusterPFOs(pTau, hadronicClusterPFOContainer)){ - ATH_MSG_ERROR("Could not set hadronic PFOs"); - return StatusCode::FAILURE; - } - return StatusCode::SUCCESS; + +std::vector<unsigned> TauPi0ClusterCreator::getShotsMatchedToCluster(const std::vector<const xAOD::PFO*>& shotPFOs, + const std::map<unsigned, const xAOD::CaloCluster*>& shotToClusterMap, + const xAOD::CaloCluster& pi0Cluster) const { + std::vector<unsigned> shotsMatchedToCluster; + + // Loop over the shots, and select those matched to the cluster + for (unsigned index = 0; index < shotPFOs.size(); ++index) { + auto iterator = shotToClusterMap.find(index); + if (iterator == shotToClusterMap.end()) continue; + if (iterator->second != &pi0Cluster) continue; + + shotsMatchedToCluster.push_back(index); + } + + return shotsMatchedToCluster; } -//______________________________________________________________________________ -// Functions used to calculate BDT variables other than those provided by the CaloClusterMomentsMaker -float TauPi0ClusterCreator::getEM1CoreFrac(const xAOD::CaloCluster* pi0Candidate) const -{ - float coreEnergy=0.; - float sumEPosCellsEM1=0.; - - const CaloClusterCellLink* theCellLink = pi0Candidate->getCellLinks(); - CaloClusterCellLink::const_iterator cellInClusterItr = theCellLink->begin(); - CaloClusterCellLink::const_iterator cellInClusterItrE = theCellLink->end(); - for(;cellInClusterItr!=cellInClusterItrE;++cellInClusterItr){ - CaloCell* cellInCluster = (CaloCell*) *cellInClusterItr; - int sampling = cellInCluster->caloDDE()->getSampling(); - if(sampling!=1 && sampling!=5) continue; - float cellE = cellInCluster->e() * cellInClusterItr.weight(); - if(cellE<=0) continue; - sumEPosCellsEM1 += cellE; - float cellEtaWRTCluster = cellInCluster->eta()-pi0Candidate->eta(); - float cellPhiWRTCluster = P4Helpers::deltaPhi(cellInCluster->phi(), pi0Candidate->phi()); - if(std::abs(cellPhiWRTCluster) > 0.05 || std::abs(cellEtaWRTCluster) > 2 * 0.025/8.) continue; - coreEnergy+=cellE; + + +int TauPi0ClusterCreator::getNPhotons(const std::vector<const xAOD::PFO*>& shotPFOs, + const std::vector<unsigned>& shotsInCluster) const { + int totalPhotons = 0; + + for (unsigned index = 0; index < shotsInCluster.size(); ++index) { + int nPhotons = 0; + const xAOD::PFO* shotPFO = shotPFOs.at(shotsInCluster.at(index)); + if (! shotPFO->attribute(xAOD::PFODetails::PFOAttributes::tauShots_nPhotons, nPhotons)) { + ATH_MSG_WARNING("Can't find NHitsInEM1. Set it to 0."); } - if(sumEPosCellsEM1<=0.) return 0.; - return coreEnergy/sumEPosCellsEM1; + totalPhotons += nPhotons; + } + + return totalPhotons; } -//______________________________________________________________________________ -// Do cluster to shot matching. -// A cluster is matched to a shot if the seed cell of the shot is in the cluster -std::map<unsigned, xAOD::CaloCluster*> TauPi0ClusterCreator::getClusterToShotMap(const std::vector<const xAOD::PFO*>& shotVector, - const xAOD::CaloClusterContainer& pi0ClusterContainer, - const xAOD::TauJet &pTau) const -{ - std::map<unsigned, xAOD::CaloCluster*> clusterToShotMap; - for(unsigned iShot = 0;iShot<shotVector.size();++iShot){ - int seedHash_int = -1; - if( shotVector.at(iShot)->attribute(xAOD::PFODetails::PFOAttributes::tauShots_seedHash, seedHash_int) == false) { - std::cout << "WARNING: Couldn't find seed hash. Set it to -1, no cluster will be associated to shot." << std::endl; - } - const IdentifierHash seedHash = (const IdentifierHash) seedHash_int; - xAOD::CaloClusterContainer::const_iterator clusterItr (pi0ClusterContainer.begin()), - clusterItrEnd(pi0ClusterContainer.end()); - float weightInCluster=-1.; - float weightInPreviousCluster=-1; - - const xAOD::Jet *jetSeed = pTau.jet(); - if (!jetSeed) { - ATH_MSG_ERROR("Tau jet link is invalid."); - return clusterToShotMap; - } - const xAOD::Vertex* jetVertex = m_tauVertexCorrection->getJetVertex(*jetSeed); + + +std::vector<int> TauPi0ClusterCreator::getNPosECells(const xAOD::CaloCluster& cluster) const { + std::vector<int> nPosECells(3, 0); + + const CaloClusterCellLink* cellLinks = cluster.getCellLinks(); + CaloClusterCellLink::const_iterator cellLink = cellLinks->begin(); + for (; cellLink != cellLinks->end(); ++cellLink) { + const CaloCell* cell = static_cast<const CaloCell*>(*cellLink); + int sampling = cell->caloDDE()->getSampling(); - const xAOD::Vertex* tauVertex = nullptr; - if (pTau.vertexLink().isValid()) tauVertex = pTau.vertex(); - - TLorentzVector tauAxis = m_tauVertexCorrection->getTauAxis(pTau); - - for (; clusterItr != clusterItrEnd; ++clusterItr){ - xAOD::CaloCluster* cluster = (xAOD::CaloCluster*) (*clusterItr); - TLorentzVector clusterP4 = m_tauVertexCorrection->getVertexCorrectedP4(*cluster, tauVertex, jetVertex); - - weightInCluster=-1.; - if (clusterP4.Et() < m_clusterEtCut) continue; // Not interested in clusters that fail the Et cut - // Cluster container has clusters for all taus. - // Only run on clusters that belong to this tau - if (clusterP4.DeltaR(tauAxis) > 0.4) continue; - const CaloClusterCellLink* theCellLink = cluster->getCellLinks(); - CaloClusterCellLink::const_iterator cellItr = theCellLink->begin(); - CaloClusterCellLink::const_iterator cellItrE = theCellLink->end(); - for(;cellItr!=cellItrE; ++cellItr){ - CaloCell* cellInCluster = (CaloCell*) *cellItr; - // Check if seed cell is in cluster. - if(cellInCluster->caloDDE()->calo_hash()!=seedHash) continue; - weightInCluster = cellItr.weight(); - // found cell, no need to loop over other cells - break; - } - if(weightInCluster<0) continue; - // Check if cell was already found in a previous cluster - if(weightInPreviousCluster<0){ - // Cell not found in a previous cluster. - // Have to check whether cell is shared with other cluster - clusterToShotMap[iShot] = cluster; - weightInPreviousCluster = weightInCluster; - } - else{ - // Cell has been found in a previous cluster - // assign shot to this cluster if it has larger weight for the cell - // otherwise the shots keeps assigned to the previous cluster - if(weightInCluster>weightInPreviousCluster){ - clusterToShotMap[iShot] = cluster; - } - // No need to loop over other clusters as cells can not be shared by more than two clusters - break; - } - } + // layer0: PS, layer1: EM1, layer2: EM2 + int layer = sampling%4; + if (layer < 3 && cell->e() > 0) { + ++nPosECells[layer]; } - return clusterToShotMap; -} + } -//______________________________________________________________________________ -std::vector<unsigned> TauPi0ClusterCreator::getShotsMatchedToCluster(const std::vector<const xAOD::PFO*>& shotVector, - const std::map<unsigned, xAOD::CaloCluster*>& clusterToShotMap, - const xAOD::CaloCluster* pi0Cluster) const -{ - std::vector<unsigned> shotsMatchedToCluster; - for(unsigned iShot = 0;iShot<shotVector.size();++iShot){ - auto itr = clusterToShotMap.find(iShot); - if(itr==clusterToShotMap.end()) continue; - if(itr->second!=pi0Cluster) continue; - shotsMatchedToCluster.push_back(iShot); - } - return shotsMatchedToCluster; + return nPosECells; } -//______________________________________________________________________________ -int TauPi0ClusterCreator::getNPhotons(const std::vector<const xAOD::PFO*>& shotVector, - const std::vector<unsigned>& shotsInCluster ) const -{ - int nPhotons = 0; - for(unsigned iShot = 0;iShot<shotsInCluster.size();++iShot){ - int curNPhotons=0; - if(shotVector.at(shotsInCluster.at(iShot))->attribute(xAOD::PFODetails::PFOAttributes::tauShots_nPhotons,curNPhotons) == false) - ATH_MSG_WARNING("Can't find NHitsInEM1. Set it to 0."); - nPhotons+=curNPhotons; - } - return nPhotons; + + +float TauPi0ClusterCreator::getEM1CoreFrac(const xAOD::CaloCluster& cluster) const { + float coreEnergyEM1 = 0.; + float totalEnergyEM1 = 0.; + + const CaloClusterCellLink* cellLinks = cluster.getCellLinks(); + CaloClusterCellLink::const_iterator cellLink = cellLinks->begin(); + for (; cellLink != cellLinks->end(); ++cellLink) { + const CaloCell* cell = static_cast<const CaloCell*>(*cellLink); + + // Only consider EM1 + int sampling = cell->caloDDE()->getSampling(); + if (sampling != 1 && sampling != 5) continue; + + // Only consider positive cells + // FIXME: is the weight needed ? + float cellEnergy = cell->e() * cellLink.weight(); + if (cellEnergy <= 0) continue; + + totalEnergyEM1 += cellEnergy; + + float deltaEta = cell->eta() - cluster.eta(); + float deltaPhi = P4Helpers::deltaPhi(cell->phi(), cluster.phi()); + + // Core region: [0.05, 0.05/8] + if(std::abs(deltaPhi) > 0.05 || std::abs(deltaEta) > 2 * 0.025/8.) continue; + + coreEnergyEM1 += cellEnergy; + } + + if (totalEnergyEM1 <= 0.) return 0.; + return coreEnergyEM1/totalEnergyEM1; } -//______________________________________________________________________________ -std::vector<int> TauPi0ClusterCreator::getNPosECells(const xAOD::CaloCluster* pi0Candidate) const -{ - std::vector<int> nPosECellsInLayer(3,0); // 3 layers initialised with 0 +ve cells - - const CaloClusterCellLink* theCellLink = pi0Candidate->getCellLinks(); - CaloClusterCellLink::const_iterator cellInClusterItr = theCellLink->begin(); - CaloClusterCellLink::const_iterator cellInClusterItrE = theCellLink->end(); - - for(;cellInClusterItr!=cellInClusterItrE; ++cellInClusterItr){ - const CaloCell* cellInCluster = static_cast<const CaloCell*>( *cellInClusterItr); - int sampling = cellInCluster->caloDDE()->getSampling(); - // Get cell layer: PSB and PSE belong to layer 0, - // EMB1 and EME1 to layer 1, EMB2 and EME2 to layer 2. - int cellLayer = sampling%4; - if(cellLayer < 3 && cellInCluster->e() > 0) nPosECellsInLayer[cellLayer]++; + + +std::vector<float> TauPi0ClusterCreator::get1stEtaMomWRTCluster(const xAOD::CaloCluster& cluster) const { + std::vector<float> deltaEtaFirstMom (3, 0.); + std::vector<float> totalEnergy (3, 0.); + + const CaloClusterCellLink* cellLinks = cluster.getCellLinks(); + CaloClusterCellLink::const_iterator cellLink = cellLinks->begin(); + for (; cellLink != cellLinks->end(); ++cellLink) { + const CaloCell* cell = static_cast<const CaloCell*>(*cellLink); + + // Only consider PS, EM1, and EM2 + int sampling = cell->caloDDE()->getSampling(); + int layer = sampling%4; + if (layer >= 3) continue; + + // Only consider positive cells + float cellEnergy = cell->e(); + if (cellEnergy <= 0) continue; + + float deltaEta = cell->eta() - cluster.eta(); + deltaEtaFirstMom[layer] += deltaEta * cellEnergy; + totalEnergy[layer] += cellEnergy; + } + + for (int layer=0; layer < 3; ++layer) { + if (totalEnergy[layer] != 0.) { + deltaEtaFirstMom[layer]/=std::abs(totalEnergy[layer]); + } + else { + deltaEtaFirstMom[layer]=0.; } - return nPosECellsInLayer; + } + + return deltaEtaFirstMom; } -//______________________________________________________________________________ -std::vector<float> TauPi0ClusterCreator::get1stEtaMomWRTCluster(const xAOD::CaloCluster* pi0Candidate) const -{ - std::vector<float> firstEtaWRTClusterPositionInLayer (4, 0.); //init with 0. for 0-3 layers - std::vector<float> sumEInLayer (4, 0.); //init with 0. for 0-3 layers - - const CaloClusterCellLink* theCellLink = pi0Candidate->getCellLinks(); - CaloClusterCellLink::const_iterator cellInClusterItr = theCellLink->begin(); - CaloClusterCellLink::const_iterator cellInClusterItrE = theCellLink->end(); - - for(;cellInClusterItr!=cellInClusterItrE;++cellInClusterItr){ - CaloCell* cellInCluster = (CaloCell*) *cellInClusterItr; - int sampling = cellInCluster->caloDDE()->getSampling(); - // Get cell layer: PSB and PSE belong to layer 0, - // EMB1 and EME1 to layer 1, EMB2 and EME2 to layer 2. - int cellLayer = sampling%4; - - float cellEtaWRTClusterPos=cellInCluster->eta()-pi0Candidate->eta(); - float cellE=cellInCluster->e(); - if(cellE<=0 || cellLayer>=3) continue; - firstEtaWRTClusterPositionInLayer[cellLayer]+=cellEtaWRTClusterPos*cellE; - sumEInLayer[cellLayer]+=cellE; - } - for(int iLayer=0;iLayer<4;++iLayer){ - if(sumEInLayer[iLayer]!=0) - firstEtaWRTClusterPositionInLayer[iLayer]/=std::abs(sumEInLayer[iLayer]); - else firstEtaWRTClusterPositionInLayer[iLayer]=0.; + +std::vector<float> TauPi0ClusterCreator::get2ndEtaMomWRTCluster(const xAOD::CaloCluster& cluster) const { + std::vector<float> deltaEtaSecondMom (3, 0.); + std::vector<float> totalEnergy (3, 0.); + + const CaloClusterCellLink* cellLinks = cluster.getCellLinks(); + CaloClusterCellLink::const_iterator cellLink = cellLinks->begin(); + for (; cellLink != cellLinks->end(); ++cellLink) { + const CaloCell* cell = static_cast<const CaloCell*>(*cellLink); + + // Only consider PS, EM1, and EM2 + int sampling = cell->caloDDE()->getSampling(); + int layer = sampling%4; + if (layer >= 3) continue; + + // Only consider positive cells + float cellEnergy=cell->e(); + if (cellEnergy <= 0) continue; + + float deltaEta = cell->eta() - cluster.eta(); + deltaEtaSecondMom[layer] += deltaEta * deltaEta * cellEnergy; + totalEnergy[layer] += cellEnergy; + } + + for (int layer=0; layer < 3; ++layer) { + if (totalEnergy[layer] != 0.) { + deltaEtaSecondMom[layer]/=std::abs(totalEnergy[layer]); + } + else { + deltaEtaSecondMom[layer]=0.; } - return firstEtaWRTClusterPositionInLayer; + } + + return deltaEtaSecondMom; } -//______________________________________________________________________________ -std::vector<float> TauPi0ClusterCreator::get2ndEtaMomWRTCluster( const xAOD::CaloCluster* pi0Candidate) const -{ - std::vector<float> secondEtaWRTClusterPositionInLayer (4, 0.); //init with 0. for 0-3 layers - std::vector<float> sumEInLayer (4, 0.); //init with 0. for 0-3 layers - - const CaloClusterCellLink* theCellLinks = pi0Candidate->getCellLinks(); - - for(const CaloCell* cellInCluster: *theCellLinks){ - int sampling = cellInCluster->caloDDE()->getSampling(); - // Get cell layer: PSB and PSE belong to layer 0, - // EMB1 and EME1 to layer 1, EMB2 and EME2 to layer 2. - int cellLayer = sampling%4; - - float cellEtaWRTClusterPos=cellInCluster->eta()-pi0Candidate->eta(); - float cellE=cellInCluster->e(); - if(cellE<=0 || cellLayer>=3) continue; - secondEtaWRTClusterPositionInLayer[cellLayer]+=cellEtaWRTClusterPos*cellEtaWRTClusterPos*cellE; - sumEInLayer[cellLayer]+=cellE; - } - for(int iLayer=0;iLayer<4;++iLayer){ - if(sumEInLayer[iLayer]!=0) - secondEtaWRTClusterPositionInLayer[iLayer]/=std::abs(sumEInLayer[iLayer]); - else secondEtaWRTClusterPositionInLayer[iLayer]=0.; - } - return secondEtaWRTClusterPositionInLayer; -} -//______________________________________________________________________________ -bool TauPi0ClusterCreator::setHadronicClusterPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pHadronPFOContainer) const -{ - if (! pTau.jetLink().isValid()) { - ATH_MSG_ERROR("Tau jet link is invalid."); - return false; +StatusCode TauPi0ClusterCreator::configureNeutralPFO(const xAOD::CaloCluster& cluster, + const xAOD::CaloClusterContainer& pi0ClusterContainer, + const xAOD::TauJet& tau, + const std::vector<const xAOD::PFO*>& shotPFOs, + const std::map<unsigned, const xAOD::CaloCluster*>& shotToClusterMap, + xAOD::PFO& neutralPFO) const { + // Set the property of the PFO + // -- Four momentum: not corrected yet + neutralPFO.setP4(cluster.pt(), cluster.eta(), cluster.phi(), cluster.m()); + + // -- Default value + neutralPFO.setBDTPi0Score(-9999.); + neutralPFO.setCharge(0); + neutralPFO.setAttribute<int>(xAOD::PFODetails::PFOAttributes::nPi0Proto, -1); + + // -- CENTER_MAG + double CENTER_MAG = 0.0; + if (!cluster.retrieveMoment(xAOD::CaloCluster::MomentType::CENTER_MAG, CENTER_MAG)) { + ATH_MSG_WARNING("Couldn't retrieve CENTER_MAG moment. Set it to 0."); + } + neutralPFO.setCenterMag( (float) CENTER_MAG); + + // -- Number of photons + std::vector<unsigned> shotsInCluster = getShotsMatchedToCluster(shotPFOs, shotToClusterMap, cluster); + int NHitsInEM1 = getNPhotons(shotPFOs, shotsInCluster); + neutralPFO.setAttribute<int>(xAOD::PFODetails::PFOAttributes::cellBased_NHitsInEM1, NHitsInEM1); + + // -- Energy at each layer + float eEM1 = cluster.eSample(CaloSampling::EMB1) + cluster.eSample(CaloSampling::EME1); + neutralPFO.setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_energy_EM1, eEM1); + + float eEM2 = cluster.eSample(CaloSampling::EMB2) + cluster.eSample(CaloSampling::EME2); + neutralPFO.setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_energy_EM2, eEM2); + + // -- Number of positive cells in each layer + std::vector<int> nPosECells = getNPosECells(cluster); + neutralPFO.setAttribute<int>(xAOD::PFODetails::PFOAttributes::cellBased_NPosECells_PS, nPosECells.at(0)); + neutralPFO.setAttribute<int>(xAOD::PFODetails::PFOAttributes::cellBased_NPosECells_EM1, nPosECells.at(1)); + neutralPFO.setAttribute<int>(xAOD::PFODetails::PFOAttributes::cellBased_NPosECells_EM2, nPosECells.at(2)); + + // -- Core Fraction of the energy in EM1 + float EM1CoreFrac = getEM1CoreFrac(cluster); + neutralPFO.setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_EM1CoreFrac, EM1CoreFrac); + + // -- First moment of deltaEta(cluster, cell) in EM1 and EM2 + std::vector<float> deltaEtaFirstMom = get1stEtaMomWRTCluster(cluster); + neutralPFO.setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_firstEtaWRTClusterPosition_EM1, deltaEtaFirstMom.at(1)); + neutralPFO.setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_firstEtaWRTClusterPosition_EM2, deltaEtaFirstMom.at(2)); + + // -- Second moment of deltaEta(cluster, cell) in EM1 and EM2 + std::vector<float> secondEtaWRTClusterPositionInLayer = get2ndEtaMomWRTCluster(cluster); + neutralPFO.setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_secondEtaWRTClusterPosition_EM1, secondEtaWRTClusterPositionInLayer.at(1)); + neutralPFO.setAttribute<float>(xAOD::PFODetails::PFOAttributes::cellBased_secondEtaWRTClusterPosition_EM2, secondEtaWRTClusterPositionInLayer.at(2)); + + // -- Retrieve cluster moments + using Moment = xAOD::CaloCluster::MomentType; + using Attribute = xAOD::PFODetails::PFOAttributes; + const std::array< std::pair<Moment, Attribute>, 12> momentAttributePairs {{ + {Moment::FIRST_ETA, Attribute::cellBased_FIRST_ETA}, + {Moment::SECOND_R, Attribute::cellBased_SECOND_R}, + {Moment::SECOND_LAMBDA, Attribute::cellBased_SECOND_LAMBDA}, + {Moment::DELTA_PHI, Attribute::cellBased_DELTA_PHI}, + {Moment::DELTA_THETA, Attribute::cellBased_DELTA_THETA}, + {Moment::CENTER_LAMBDA, Attribute::cellBased_CENTER_LAMBDA}, + {Moment::LATERAL, Attribute::cellBased_LATERAL}, + {Moment::LONGITUDINAL, Attribute::cellBased_LONGITUDINAL}, + {Moment::ENG_FRAC_EM, Attribute::cellBased_ENG_FRAC_EM}, + {Moment::ENG_FRAC_MAX, Attribute::cellBased_ENG_FRAC_MAX}, + {Moment::ENG_FRAC_CORE, Attribute::cellBased_ENG_FRAC_CORE}, + {Moment::SECOND_ENG_DENS, Attribute::cellBased_SECOND_ENG_DENS} + }}; + + for (const auto& [moment, attribute] : momentAttributePairs) { + double value = 0.0; + if (! cluster.retrieveMoment(moment, value)) { + ATH_MSG_WARNING("Cound not retrieve " << moment); } - const xAOD::Jet *jetSeed = pTau.jet(); - - const xAOD::Vertex* jetVertex = m_tauVertexCorrection->getJetVertex(*jetSeed); - - const xAOD::Vertex* tauVertex = nullptr; - if (pTau.vertexLink().isValid()) tauVertex = pTau.vertex(); - - TLorentzVector tauAxis = m_tauVertexCorrection->getTauAxis(pTau); - - std::vector<const xAOD::CaloCluster*> clusterList; - StatusCode sc = tauRecTools::GetJetClusterList(jetSeed, clusterList, m_useSubtractedCluster); - if (!sc) return false; - - for (const xAOD::CaloCluster* cluster : clusterList){ - // Procedure: - // - Calculate cluster energy in Hcal. This is to treat -ve energy cells correctly - // - Then set 4momentum via setP4(E/cosh(eta), eta, phi, m). This forces the PFO to have the correct energy and mass - // - Ignore clusters outside 0.2 cone and those with overall negative energy or negative energy in Hcal - - // Don't create PFOs for clusters with overall (Ecal+Hcal) negative energy (noise) - TLorentzVector clusterP4 = m_tauVertexCorrection->getVertexCorrectedP4(*cluster, tauVertex, jetVertex); - - if(clusterP4.E()<=0.) continue; + neutralPFO.setAttribute(attribute, static_cast<float>(value)); + } - // Only need clusters in core cone. Others are not needed for subtraction - if(tauAxis.DeltaR(clusterP4) > 0.2) continue; + // -- Element link to the cluster + ElementLink<xAOD::CaloClusterContainer> clusElementLink; + clusElementLink.toContainedElement(pi0ClusterContainer, &cluster); + neutralPFO.setClusterLink( clusElementLink ); + + // -- Element link to the shots + std::vector<ElementLink<xAOD::IParticleContainer>> shotlinks; + for (unsigned index = 0; index < shotsInCluster.size(); ++index) { + ElementLink<xAOD::PFOContainer> shotPFOElementLink = tau.shotPFOLinks().at(shotsInCluster.at(index)); + ElementLink<xAOD::IParticleContainer> shotElementLink; + shotPFOElementLink.toPersistent(); + shotElementLink.resetWithKeyAndIndex(shotPFOElementLink.persKey(), shotPFOElementLink.persIndex()); + if (!shotElementLink.isValid()) { + ATH_MSG_WARNING("Created an invalid element link to xAOD::PFO"); + } + shotlinks.push_back(shotElementLink); + } + if(!neutralPFO.setAssociatedParticleLinks( xAOD::PFODetails::TauShot,shotlinks)) { + ATH_MSG_WARNING("Couldn't add shot links to neutral PFO!"); + } - // Loop over cells to calculate cluster energy in Hcal - double clusterE_Hcal=0.; - const CaloClusterCellLink* theCellLink = cluster->getCellLinks(); - CaloClusterCellLink::const_iterator cellInClusterItr = theCellLink->begin(); - CaloClusterCellLink::const_iterator cellInClusterItrE = theCellLink->end(); + return StatusCode::SUCCESS; +} - for(; cellInClusterItr != cellInClusterItrE; ++cellInClusterItr){ - const CaloCell* cellInCluster = static_cast<const CaloCell*> (*cellInClusterItr); - //Get only HCAL cells - int sampling = cellInCluster->caloDDE()->getSampling(); - if (sampling < 8) continue; - double cellE = cellInCluster->e()*cellInClusterItr.weight(); - clusterE_Hcal+=cellE; - } - // Don't save PFOs for clusters with negative energy in Hcal - if(clusterE_Hcal<=0.) continue; - - // Create hadronic PFO - xAOD::PFO* hadronicPFO = new xAOD::PFO(); - pHadronPFOContainer.push_back( hadronicPFO ); - - // Set 4mom. Eta and phi are taken from cluster - double cluster_Pt_Hcal = clusterE_Hcal/std::cosh(cluster->eta()); - hadronicPFO->setP4( (float) cluster_Pt_Hcal, (float) cluster->eta(), (float) cluster->phi(), (float) 0.); - - // TODO: May want to set element link to the cluster the PFO is originating from - // ElementLink<xAOD::CaloClusterContainer> clusElementLink; - // clusElementLink.toContainedElement( CLUSTERCONTAINER, cluster ); - // hadronicPFO->setClusterLink( clusElementLink ); - - // Create element link from tau to hadronic PFO - ElementLink<xAOD::PFOContainer> PFOElementLink; - PFOElementLink.toContainedElement( pHadronPFOContainer, hadronicPFO ); - pTau.addHadronicPFOLink( PFOElementLink ); - } - return true; +StatusCode TauPi0ClusterCreator::configureHadronicPFO(const xAOD::CaloCluster& cluster, + double clusterEnergyHad, + xAOD::PFO& hadronicPFO) const { + double clusterPtHad = clusterEnergyHad/std::cosh(cluster.eta()); + hadronicPFO.setP4(clusterPtHad, cluster.eta(), cluster.phi(), 0.); + + return StatusCode::SUCCESS; } #endif diff --git a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h index 4ac1db7f16326dbf39eb13075398e3cfaef5d078..fcb8c415b532cb25f71b4ad9c741b6735de82fcc 100644 --- a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h +++ b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h @@ -27,50 +27,64 @@ */ class TauPi0ClusterCreator : public TauRecToolBase { + public: - TauPi0ClusterCreator(const std::string& name) ; - ASG_TOOL_CLASS2(TauPi0ClusterCreator, TauRecToolBase, ITauToolBase); - virtual ~TauPi0ClusterCreator(); - - virtual StatusCode initialize() override; - virtual StatusCode executePi0ClusterCreator(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer, - xAOD::PFOContainer& hadronicClusterPFOContainer, - const xAOD::CaloClusterContainer& pi0CaloClusContainer) const override; - + + ASG_TOOL_CLASS2(TauPi0ClusterCreator, TauRecToolBase, ITauToolBase); + + TauPi0ClusterCreator(const std::string& name) ; + virtual ~TauPi0ClusterCreator() = default; + + virtual StatusCode initialize() override; + virtual StatusCode executePi0ClusterCreator(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer, + xAOD::PFOContainer& hadronicClusterPFOContainer, + const xAOD::CaloClusterContainer& pi0CaloClusContainer) const override; + private: - /** @brief fraction of cluster enegry in central EM1 cells */ - float getEM1CoreFrac( const xAOD::CaloCluster* pi0Candidate) const; - - /** @brief number of cells from cluster with positive energy in PS, EM1 and EM2 */ - std::vector<int> getNPosECells( const xAOD::CaloCluster* pi0Candidate) const; - - std::map<unsigned, xAOD::CaloCluster*> getClusterToShotMap( - const std::vector<const xAOD::PFO*>& shotVector, - const xAOD::CaloClusterContainer& pi0ClusterContainer, - const xAOD::TauJet &pTau) const; - - std::vector<unsigned> getShotsMatchedToCluster( - const std::vector<const xAOD::PFO*>& shotVector, - const std::map<unsigned, xAOD::CaloCluster*>& clusterToShotMap, - const xAOD::CaloCluster* pi0Cluster) const; - - int getNPhotons( const std::vector<const xAOD::PFO*>& shotVector, - const std::vector<unsigned>& shotsInCluster) const; - - /** @brief first eta moment in PS, EM1 and EM2 w.r.t cluster eta: (eta_i - eta_cluster) */ - std::vector<float> get1stEtaMomWRTCluster( const xAOD::CaloCluster* pi0Candidate) const; - - /** @brief second eta moment in PS, EM1 and EM2 w.r.t cluster eta: (eta_i - eta_cluster)^2 */ - std::vector<float> get2ndEtaMomWRTCluster(const xAOD::CaloCluster* pi0Candidate) const; - - /** @brief get hadronic cluster PFOs*/ - bool setHadronicClusterPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pHadronicClusterContainer) const; - - Gaudi::Property<double> m_clusterEtCut {this, "ClusterEtCut", 0.5 * Gaudi::Units::GeV, "Et threshould for pi0 candidate clusters"}; - Gaudi::Property<bool> m_useSubtractedCluster {this, "UseSubtractedCluster", true, "use shower subtracted clusters in calo calculations"}; - - ToolHandle<ITauVertexCorrection> m_tauVertexCorrection { this, - "TauVertexCorrection", "TauVertexCorrection", "Tool to perform the vertex correction"}; + + /** @brief Configure the neutral PFO*/ + StatusCode configureNeutralPFO(const xAOD::CaloCluster& cluster, + const xAOD::CaloClusterContainer& pi0ClusterContainer, + const xAOD::TauJet& tau, + const std::vector<const xAOD::PFO*>& shotPFOs, + const std::map<unsigned, const xAOD::CaloCluster*>& shotsInCluster, + xAOD::PFO& neutralPFO) const; + + /** @brief Configure the haronic PFO*/ + StatusCode configureHadronicPFO(const xAOD::CaloCluster& cluster, + double clusterEnergyHad, + xAOD::PFO& hadronicPFO) const; + + std::map<unsigned, const xAOD::CaloCluster*> getShotToClusterMap( + const std::vector<const xAOD::PFO*>& shotVector, + const xAOD::CaloClusterContainer& pi0ClusterContainer, + const xAOD::TauJet &pTau) const; + + std::vector<unsigned> getShotsMatchedToCluster( + const std::vector<const xAOD::PFO*>& shotVector, + const std::map<unsigned, const xAOD::CaloCluster*>& clusterToShotMap, + const xAOD::CaloCluster& pi0Cluster) const; + + int getNPhotons( const std::vector<const xAOD::PFO*>& shotVector, + const std::vector<unsigned>& shotsInCluster) const; + + /** @brief fraction of cluster enegry in central EM1 cells */ + float getEM1CoreFrac(const xAOD::CaloCluster& cluster) const; + + /** @brief number of cells from cluster with positive energy in PS, EM1 and EM2 */ + std::vector<int> getNPosECells(const xAOD::CaloCluster& cluster) const; + + /** @brief first eta moment in PS, EM1 and EM2 w.r.t cluster eta */ + std::vector<float> get1stEtaMomWRTCluster(const xAOD::CaloCluster& cluster) const; + + /** @brief second eta moment in PS, EM1 and EM2 w.r.t cluster eta */ + std::vector<float> get2ndEtaMomWRTCluster(const xAOD::CaloCluster& cluster) const; + + Gaudi::Property<double> m_clusterEtCut {this, "ClusterEtCut", 0.5 * Gaudi::Units::GeV, "Et threshould for pi0 candidate clusters"}; + Gaudi::Property<bool> m_useSubtractedCluster {this, "UseSubtractedCluster", true, "use shower subtracted clusters in calo calculations"}; + + ToolHandle<ITauVertexCorrection> m_tauVertexCorrection { this, + "TauVertexCorrection", "TauVertexCorrection", "Tool to perform the vertex correction"}; }; #endif /* TAUPI0CLUSTERCREATOR_H */ diff --git a/Reconstruction/tauRecTools/src/TauPi0ClusterScaler.cxx b/Reconstruction/tauRecTools/src/TauPi0ClusterScaler.cxx index 45aeb323e2db670626a9ac6cf8ebded2293c96d9..9bd8f013719507e97ad7ee69db98af774cf1b064 100644 --- a/Reconstruction/tauRecTools/src/TauPi0ClusterScaler.cxx +++ b/Reconstruction/tauRecTools/src/TauPi0ClusterScaler.cxx @@ -2,323 +2,325 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -//----------------------------------------------------------------------------- -// file: TauPi0ClusterScaler.cxx -// package: Reconstruction/tauRec -// authors: Stephanie Yuen, Benedict Winter, Will Davey -// date: 2014-08-04 -//----------------------------------------------------------------------------- - -#include <vector> #include "TauPi0ClusterScaler.h" + #include "xAODTau/TauJet.h" #include "xAODPFlow/PFO.h" -#include "tauRecTools/ITauToolBase.h" -#include "FourMomUtils/xAODP4Helpers.h" #include "xAODCaloEvent/CaloVertexedTopoCluster.h" +#include "FourMomUtils/xAODP4Helpers.h" + +#include <vector> + -//------------------------------------------------------------------------- -// Constructor -//------------------------------------------------------------------------- TauPi0ClusterScaler::TauPi0ClusterScaler(const std::string& name) : - TauRecToolBase(name) -{ + TauRecToolBase(name) { } -//------------------------------------------------------------------------- -// Destructor -//------------------------------------------------------------------------- -TauPi0ClusterScaler::~TauPi0ClusterScaler() -{ + +StatusCode TauPi0ClusterScaler::executePi0ClusterScaler(xAOD::TauJet& tau, + xAOD::PFOContainer& neutralPFOContainer, + xAOD::PFOContainer& chargedPFOContainer) const { + // Clear vector of cell-based charged PFO Links, which are required when running xAOD + tau.clearProtoChargedPFOLinks(); + + // Only run on 1-5 prong taus + if (tau.nTracks() == 0 or tau.nTracks() >5) { + return StatusCode::SUCCESS; + } + + ATH_MSG_DEBUG("Process a new tau candidate, addreess " << &tau + << ", e: " << tau.pt() + << ", eta: " << tau.eta() + << ", pt: " << tau.pt()); + + // Correct neutral PFO kinematics to point at tau vertex, this is needed since the + // charged shower subtraction is performed several times for each neutral PFO + correctNeutralPFOs(tau, neutralPFOContainer); + + // Create new proto charged PFOs + createChargedPFOs(tau, chargedPFOContainer); + + // Associate hadronic PFOs to charged PFOs using extrapolated positions in HCal + associateHadronicToChargedPFOs(tau, chargedPFOContainer); + + // Associate charged PFOs to neutral PFOs using extrapolated positions in ECal + associateChargedToNeutralPFOs(tau, neutralPFOContainer); + + // Estimate charged PFO EM energy and subtract from neutral PFOs + subtractChargedEnergyFromNeutralPFOs(neutralPFOContainer); + + for (xAOD::PFO* pfo : neutralPFOContainer) { + ATH_MSG_DEBUG("Final Neutral PFO, address " << pfo + << ", e: " << pfo->pt() + << ", eta: " << pfo->eta() + << ", pt: " << pfo->pt()); + } + + return StatusCode::SUCCESS; } -//______________________________________________________________________________ -StatusCode TauPi0ClusterScaler::executePi0ClusterScaler(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer, xAOD::PFOContainer& chargedPFOContainer) const -{ - // Clear vector of cell-based charged PFO Links. - // Required when rerunning on xAOD level. - pTau.clearProtoChargedPFOLinks(); - // Only run on 1-5 prong taus - if (pTau.nTracks() == 0 or pTau.nTracks() >5 ) - return StatusCode::SUCCESS; - - ATH_MSG_DEBUG("new tau pt = " << pTau.pt() - << ", eta = " << pTau.eta() - << ", phi = " << pTau.phi() - << ", nprongs = " << pTau.nTracks()); - - // reset neutral PFO kinematics (incase re-run on AOD) - resetNeutralPFOs(pTau, neutralPFOContainer); - // create new proto charged PFOs, extrapolate tracks, add to tau - createChargedPFOs(pTau, chargedPFOContainer); - // associate hadronic PFOs to charged PFOs using extrapolated positions in HCal - associateHadronicToChargedPFOs(pTau, chargedPFOContainer); - // associate charged PFOs to neutral PFOs using extrapolated positions in ECal - associateChargedToNeutralPFOs(pTau, neutralPFOContainer); - // estimate charged PFO EM energy and subtract from neutral PFOs - subtractChargedEnergyFromNeutralPFOs(neutralPFOContainer); - - ATH_MSG_DEBUG("End of TauPi0ClusterScaler::execute"); - return StatusCode::SUCCESS; +void TauPi0ClusterScaler::clearAssociatedParticleLinks(xAOD::PFOContainer& pfoContainer, xAOD::PFODetails::PFOParticleType type) const { + std::vector<ElementLink<xAOD::IParticleContainer>> emptyLinks; + + for (xAOD::PFO* pfo : pfoContainer) { + pfo->setAssociatedParticleLinks(type, emptyLinks); + } } -//______________________________________________________________________________ -void TauPi0ClusterScaler::resetNeutralPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer) const -{ - // Set neutral PFO kinematics to vertex corrected cluster - ATH_MSG_DEBUG("Resetting neutral PFO kinematics"); - for( auto pfo : neutralPFOContainer ) - { - const xAOD::CaloCluster* cl = pfo->cluster(0); - - // apply cluster vertex correction - if(pTau.vertexLink().isValid()){ - auto clcorr = xAOD::CaloVertexedTopoCluster(*cl, pTau.vertex()->position()); - pfo->setP4(clcorr.pt(), clcorr.eta(), clcorr.phi(), 0.0); - } - else{ - pfo->setP4(cl->pt(), cl->eta(), cl->phi(), 0.0); - } - - ATH_MSG_DEBUG("Neutral PFO, ptr: " << cl - << ", e: " << pfo->e() - << ", pt: " << pfo->pt() - << ", eta: " << pfo->eta() - << ", eta(unorr): " << cl->eta()); + + +void TauPi0ClusterScaler::correctNeutralPFOs(xAOD::TauJet& tau, xAOD::PFOContainer& neutralPFOContainer) const { + // FIXME: Loop over existing neutral PFOs, this may include those not associated to the tau candidate + // What if two taus have different vertex ??? Seems rare. + for (xAOD::PFO* pfo : neutralPFOContainer ) { + const xAOD::CaloCluster* cluster = pfo->cluster(0); + + // apply cluster vertex correction + if(tau.vertexLink().isValid()) { + auto clusterAtTauVertx = xAOD::CaloVertexedTopoCluster(*cluster, tau.vertex()->position()); + pfo->setP4(clusterAtTauVertx.pt(), clusterAtTauVertx.eta(), clusterAtTauVertx.phi(), 0.0); + } + else{ + pfo->setP4(cluster->pt(), cluster->eta(), cluster->phi(), 0.0); } + + ATH_MSG_DEBUG("Original Neutral PFO" + << ", e: " << cluster->pt() + << ", eta: " << cluster->eta() + << ", pt: " << cluster->pt()); + + ATH_MSG_DEBUG("Corrected Neutral PFO" + << ", e: " << pfo->pt() + << ", eta: " << pfo->eta() + << ", pt: " << pfo->pt()); + } } -//______________________________________________________________________________ -void TauPi0ClusterScaler::createChargedPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& cPFOContainer) const -{ - ATH_MSG_DEBUG("Creating charged PFOs"); - for(auto tauTrackLink : pTau.tauTrackLinks(xAOD::TauJetParameters::classifiedCharged)){ - if( not tauTrackLink.isValid() ){ - ATH_MSG_WARNING("Invalid tauTrackLink"); - continue; - } - const xAOD::TauTrack* tauTrack = (*tauTrackLink); - // create pfo - xAOD::PFO* chargedPFO = new xAOD::PFO(); - cPFOContainer.push_back(chargedPFO); - // set properties - chargedPFO->setCharge(tauTrack->track()->charge()); - chargedPFO->setP4(tauTrack->p4()); - // link to track - if(not chargedPFO->setTrackLink((*tauTrackLink)->trackLinks().at(0))) - ATH_MSG_WARNING("Could not add Track to PFO"); - // now directly using tau track link from above - if(not chargedPFO->setAssociatedParticleLink(xAOD::PFODetails::CaloCluster,tauTrackLink)) - ATH_MSG_WARNING("Could not add TauTrack to PFO"); - - // link from tau - pTau.addProtoChargedPFOLink(ElementLink< xAOD::PFOContainer > - (chargedPFO, cPFOContainer)); + + +void TauPi0ClusterScaler::createChargedPFOs(xAOD::TauJet& tau, xAOD::PFOContainer& chargedPFOContainer) const { + for (auto tauTrackLink : tau.tauTrackLinks(xAOD::TauJetParameters::classifiedCharged)) { + if (not tauTrackLink.isValid()) { + ATH_MSG_WARNING("Invalid tauTrackLink"); + continue; + } + const xAOD::TauTrack* tauTrack = (*tauTrackLink); + + // Create charged PFO + xAOD::PFO* chargedPFO = new xAOD::PFO(); + chargedPFOContainer.push_back(chargedPFO); + + // Set properties + chargedPFO->setCharge(tauTrack->track()->charge()); + chargedPFO->setP4(tauTrack->p4()); + + // Link to track + if (not chargedPFO->setTrackLink(tauTrack->trackLinks().at(0))) { + ATH_MSG_WARNING("Could not add Track to PFO"); + } + + // FIXME: Better to change xAOD::PFODetails::CaloCluster, it is confusing + if (not chargedPFO->setAssociatedParticleLink(xAOD::PFODetails::CaloCluster, tauTrackLink)) { + ATH_MSG_WARNING("Could not add TauTrack to PFO"); } + + tau.addProtoChargedPFOLink(ElementLink<xAOD::PFOContainer>(chargedPFO, chargedPFOContainer)); + } +} + + + +float TauPi0ClusterScaler::getExtrapolatedPosition(const xAOD::PFO& chargedPFO, xAOD::TauJetParameters::TrackDetail detail) const { + float position = -10.0; + + // Obtain the associated TauTrack + std::vector<const xAOD::IParticle*> tauTrackParticles; + // FIXME: The type here is confusing + chargedPFO.associatedParticles(xAOD::PFODetails::CaloCluster, tauTrackParticles); + if (tauTrackParticles.empty()) { + ATH_MSG_WARNING("ChargedPFO has no associated TauTrack, will set -10.0 to " << detail); + return -10.0; + } + + const xAOD::TauTrack* tauTrack = dynamic_cast<const xAOD::TauTrack*>(tauTrackParticles.at(0)); + if (not tauTrack) { + ATH_MSG_WARNING("Failed to retrieve TauTrack from ChargedPFO, will set -10.0 to " << detail); + return -10.0; + } + + if( not tauTrack->detail(detail, position)) { + ATH_MSG_WARNING("Failed to retrieve extrapolated chargedPFO position, will set -10.0 to " << detail); + return -10.0; + } + + return position; } -//______________________________________________________________________________ -void TauPi0ClusterScaler::associateHadronicToChargedPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& chargedPFOContainer) const -{ - ATH_MSG_DEBUG("Associating hadronic PFOs to charged PFOs"); - - // Will: I'm ashamed of this link-map, but its necessary until the - // PFO EDM is improved to allow sequential addition of particle links - std::map< xAOD::PFO*,std::vector< ElementLink< xAOD::IParticleContainer > > > linkMap; - ATH_MSG_DEBUG("nHadPFOs: " << pTau.nHadronicPFOs() ); - for( auto hadPFOLink : pTau.hadronicPFOLinks() ){ - if( not hadPFOLink.isValid() ){ - ATH_MSG_WARNING("Invalid hadPFOLink"); - continue; - } - ATH_MSG_DEBUG("hadPFO " << hadPFOLink.index() - << ", eta: " << (*hadPFOLink)->eta() - << ", phi: " << (*hadPFOLink)->phi() ); - xAOD::PFO* chargedPFOMatch = nullptr; - // assign hadPFO to closest extrapolated chargedPFO track within dR<0.4 - float dRmin = 0.4; - for( auto chargedPFO : chargedPFOContainer ){ - // get extrapolated positions from tau-track - std::vector<const xAOD::IParticle*> tauTrackPcleVec; - chargedPFO->associatedParticles(xAOD::PFODetails::CaloCluster, tauTrackPcleVec); - if( tauTrackPcleVec.empty() ){ - ATH_MSG_WARNING("ChargedPFO has no associated TauTrack"); - continue; - } - - auto tauTrack = dynamic_cast<const xAOD::TauTrack*>(tauTrackPcleVec.at(0)); - if( not tauTrack ){ - ATH_MSG_WARNING("Failed to retrieve TauTrack from ChargedPFO"); - continue; - } - float etaCalo = -10.0; - float phiCalo = -10.0; - if( not tauTrack->detail(xAOD::TauJetParameters::CaloSamplingEtaHad, etaCalo)) - ATH_MSG_WARNING("Failed to retrieve extrapolated chargedPFO eta"); - if( not tauTrack->detail(xAOD::TauJetParameters::CaloSamplingPhiHad, phiCalo)) - ATH_MSG_WARNING("Failed to retrieve extrapolated chargedPFO phi"); - // calculate dR (false means use eta instead of rapidity) - float dR = xAOD::P4Helpers::deltaR((**hadPFOLink), etaCalo, phiCalo, false); - ATH_MSG_DEBUG("chargedPFO, pt: " << chargedPFO->pt() - << ", type: " << tauTrack->flagSet() - << ", eta: " << etaCalo - << ", phi: " << phiCalo - << ", dR: " << dR ); - if (dR < dRmin){ - dRmin = dR; - chargedPFOMatch = chargedPFO; - } - } - if( not chargedPFOMatch ){ - ATH_MSG_DEBUG("Unassigned Hadronic PFO"); - continue; - } - - // create link to had PFO (add to chargedPFO later) - ElementLink< xAOD::IParticleContainer > newHadLink; - newHadLink.toPersistent(); - newHadLink.resetWithKeyAndIndex( hadPFOLink.persKey(), hadPFOLink.persIndex() ); - if (not newHadLink.isValid()){ - ATH_MSG_WARNING("Created an invalid element link to xAOD::PFO"); - continue; - } - - // temporarily store in linkMap since we can't sequentially add to chargedPFOMatch - if( not linkMap.count(chargedPFOMatch) ) - linkMap[chargedPFOMatch] = std::vector< ElementLink< xAOD::IParticleContainer > >(); - linkMap[chargedPFOMatch].push_back(newHadLink); + + +void TauPi0ClusterScaler::associateHadronicToChargedPFOs(xAOD::TauJet& tau, xAOD::PFOContainer& chargedPFOContainer) const { + std::map< xAOD::PFO*,std::vector< ElementLink< xAOD::IParticleContainer > > > linkMap; + + // For each hadronic PFO, associate it to the cloest charged PFO. It assumes that one hadronic PFO comes from at + // most one charged PFO. + for (auto hadPFOLink : tau.hadronicPFOLinks()) { + if (not hadPFOLink.isValid()) { + ATH_MSG_WARNING("Invalid hadPFOLink"); + continue; + } + ATH_MSG_DEBUG("hadPFO " << hadPFOLink.index() << ", eta: " << (*hadPFOLink)->eta() << ", phi: " << (*hadPFOLink)->phi() ); + + // Assign hadPFO to closest extrapolated chargedPFO track within dR < 0.4 + xAOD::PFO* chargedPFOMatch = nullptr; + float dRmin = 0.4; + + // FIXME: This loops over the existing charged PFO container, and could contain PFO not associated to this tau. + // It could make the association depending on the order of the tau candidate, but the point is that + // hadronic PFO in one tau candidate is unlikely to be associated to charged PFO in another tau candidate + for (xAOD::PFO* chargedPFO : chargedPFOContainer) { + + float etaCalo = getExtrapolatedPosition(*chargedPFO, xAOD::TauJetParameters::CaloSamplingEtaHad); + float phiCalo = getExtrapolatedPosition(*chargedPFO, xAOD::TauJetParameters::CaloSamplingPhiHad); + + float dR = xAOD::P4Helpers::deltaR((**hadPFOLink), etaCalo, phiCalo, false); + if (dR < dRmin){ + dRmin = dR; + chargedPFOMatch = chargedPFO; + } + } + + if( not chargedPFOMatch ){ + ATH_MSG_DEBUG("Unassigned Hadronic PFO"); + continue; } - // finally set hadronic PFO links (note: we use existing TauShot enum) - for( auto [k,v] : linkMap ){ - if(not k->setAssociatedParticleLinks(xAOD::PFODetails::TauShot, v)) - ATH_MSG_WARNING("Couldn't add hadronic PFO links to charged PFO!"); + // create link to had PFO (add to chargedPFO later) + ElementLink< xAOD::IParticleContainer > newHadLink; + newHadLink.toPersistent(); + newHadLink.resetWithKeyAndIndex( hadPFOLink.persKey(), hadPFOLink.persIndex() ); + if (not newHadLink.isValid()){ + ATH_MSG_WARNING("Created an invalid element link to xAOD::PFO"); + continue; + } + + if( not linkMap.count(chargedPFOMatch) ) { + linkMap[chargedPFOMatch] = std::vector< ElementLink< xAOD::IParticleContainer > >(); } + + linkMap[chargedPFOMatch].push_back(newHadLink); + } + + // finally set hadronic PFO links (note: we use existing TauShot enum) + for (auto [k,v] : linkMap) { + if(not k->setAssociatedParticleLinks(xAOD::PFODetails::TauShot, v)) + ATH_MSG_WARNING("Couldn't add hadronic PFO links to charged PFO!"); + } } -//______________________________________________________________________________ -void TauPi0ClusterScaler::associateChargedToNeutralPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer) const -{ - ATH_MSG_DEBUG("Associating charged PFOs to neutral PFOs"); - // Will: I'm ashamed of this link-map, but its necessary until the - // PFO EDM is improved to allow sequential addition of particle links - std::map< xAOD::PFO*,std::vector< ElementLink< xAOD::IParticleContainer > > > linkMap; - ATH_MSG_DEBUG("nChargedPFOs: " << pTau.nProtoChargedPFOs() ); - for( auto chargedPFOLink : pTau.protoChargedPFOLinks() ){ - if( not chargedPFOLink.isValid() ){ - ATH_MSG_WARNING("Invalid protoChargedPFOLink"); - continue; - } - const xAOD::PFO* chargedPFO = (*chargedPFOLink); - - // get extrapolated positions from tau-track - std::vector<const xAOD::IParticle*> tauTrackPcleVec; - chargedPFO->associatedParticles(xAOD::PFODetails::CaloCluster, tauTrackPcleVec); - if( tauTrackPcleVec.empty() ){ - ATH_MSG_WARNING("ChargedPFO has no associated TauTrack"); - continue; - } - auto tauTrack = dynamic_cast<const xAOD::TauTrack*>(tauTrackPcleVec.at(0)); - if( not tauTrack ){ - ATH_MSG_WARNING("Failed to retrieve TauTrack from ChargedPFO"); - continue; - } - float etaCalo = -10.0; - float phiCalo = -10.0; - if( not tauTrack->detail(xAOD::TauJetParameters::CaloSamplingEtaEM, etaCalo)) - ATH_MSG_WARNING("Failed to retrieve extrapolated chargedPFO eta"); - if( not tauTrack->detail(xAOD::TauJetParameters::CaloSamplingPhiEM, phiCalo)) - ATH_MSG_WARNING("Failed to retrieve extrapolated chargedPFO phi"); - ATH_MSG_DEBUG("chargedPFO " << chargedPFOLink.index() - << ", eta: " << etaCalo - << ", phi: " << phiCalo ); + + +void TauPi0ClusterScaler::associateChargedToNeutralPFOs(xAOD::TauJet& tau, xAOD::PFOContainer& neutralPFOContainer) const { + std::map< xAOD::PFO*,std::vector< ElementLink< xAOD::IParticleContainer > > > linkMap; + for (auto chargedPFOLink : tau.protoChargedPFOLinks()) { + if (not chargedPFOLink.isValid()) { + ATH_MSG_WARNING("Invalid protoChargedPFOLink"); + continue; + } + const xAOD::PFO* chargedPFO = (*chargedPFOLink); + + float etaCalo = getExtrapolatedPosition(*chargedPFO, xAOD::TauJetParameters::CaloSamplingEtaEM); + float phiCalo = getExtrapolatedPosition(*chargedPFO, xAOD::TauJetParameters::CaloSamplingPhiEM); + + // Assign extrapolated chargedPFO to closest neutralPFO within dR<0.04 + xAOD::PFO* neutralPFOMatch = nullptr; + + // FIXME: This loops over the existing neutral PFO container, and could contain PFO not associated to this tau. + // It could make the association depending on the order of the tau candidate. but the point is that + // charged PFO in one tau candidate is unlikely to be associated to the neutral PFO in another tau candidate + float dRmin = 0.04; + for (xAOD::PFO* neutralPFO : neutralPFOContainer) { + // FIXME: cluster p4 is not corrected to the tau axis + float dR = xAOD::P4Helpers::deltaR((*neutralPFO->cluster(0)), etaCalo, phiCalo, false); + if (dR < dRmin){ + dRmin = dR; + neutralPFOMatch = neutralPFO; + } + } + + if (not neutralPFOMatch){ + ATH_MSG_DEBUG("Unassigned Charged PFO"); + continue; + } + + // create link to charged PFO + ElementLink<xAOD::IParticleContainer> newChargedLink; + newChargedLink.toPersistent(); + newChargedLink.resetWithKeyAndIndex(chargedPFOLink.persKey(), chargedPFOLink.persIndex()); + if (not newChargedLink.isValid()){ + ATH_MSG_WARNING("Created an invalid element link to xAOD::PFO"); + continue; + } - // assign extrapolated chargedPFO to closest neutralPFO within dR<0.04 - xAOD::PFO* neutralPFOMatch = nullptr; - float dRmin = 0.04; - for( auto neutralPFO : neutralPFOContainer ){ - // calculate dR (false means use eta instead of rapidity) - float dR = xAOD::P4Helpers::deltaR((*neutralPFO->cluster(0)), etaCalo, phiCalo, false); - ATH_MSG_DEBUG("neutralPFO, eta: " << neutralPFO->cluster(0)->eta() - << ", phi: " << neutralPFO->cluster(0)->phi() - << ", dR: " << dR ); - if (dR < dRmin){ - dRmin = dR; - neutralPFOMatch = neutralPFO; - } - } - if( not neutralPFOMatch ){ - ATH_MSG_DEBUG("Unassigned Charged PFO"); - continue; - } - else ATH_MSG_DEBUG("Assigned Charged PFO"); - - // create link to charged PFO - ElementLink< xAOD::IParticleContainer > newChargedLink; - newChargedLink.toPersistent(); - newChargedLink.resetWithKeyAndIndex( chargedPFOLink.persKey(), chargedPFOLink.persIndex() ); - if (not newChargedLink.isValid()){ - ATH_MSG_WARNING("Created an invalid element link to xAOD::PFO"); - continue; - } - - // temporarily store in linkMap since we can't sequentially add to neutralPFOMatch - if( not linkMap.count(neutralPFOMatch) ) - linkMap[neutralPFOMatch] = std::vector< ElementLink< xAOD::IParticleContainer > >(); - linkMap[neutralPFOMatch].push_back(newChargedLink); + if( not linkMap.count(neutralPFOMatch) ) { + linkMap[neutralPFOMatch] = std::vector< ElementLink< xAOD::IParticleContainer > >(); } - // finally set charged PFO links - for( auto [k,v] : linkMap ){ - if(not k->setAssociatedParticleLinks(xAOD::PFODetails::Track,v)) - ATH_MSG_WARNING("Couldn't add charged PFO links to neutral PFO!"); + linkMap[neutralPFOMatch].push_back(newChargedLink); + } + + // Finally set charged PFO links, + for (auto [k,v] : linkMap) { + if(not k->setAssociatedParticleLinks(xAOD::PFODetails::Track,v)) { + ATH_MSG_WARNING("Couldn't add charged PFO links to neutral PFO!"); } + } } -//______________________________________________________________________________ -void TauPi0ClusterScaler::subtractChargedEnergyFromNeutralPFOs(xAOD::PFOContainer& neutralPFOContainer) const -{ - ATH_MSG_DEBUG("Subtracting charged energy from neutral PFOs"); - for( auto neutralPFO : neutralPFOContainer ) - { - // get associated charged PFOs - std::vector<const xAOD::IParticle*> chargedPFOs; - neutralPFO->associatedParticles(xAOD::PFODetails::Track, chargedPFOs); - if( chargedPFOs.empty() ){ - ATH_MSG_DEBUG("No associated charged to subtract"); - continue; - } - ATH_MSG_DEBUG("Associated charged PFOs: " << chargedPFOs.size() ); - - // estimate charged EM energy and subtract - float neutralEnergy = neutralPFO->e(); - for( auto chargedPcle : chargedPFOs ) - { - // since PFO stores element links as IParticle, need to cast back - const xAOD::PFO* chargedPFO = dynamic_cast<const xAOD::PFO*>(chargedPcle); - if( not chargedPFO ){ - ATH_MSG_WARNING("Failed to downcast IParticle ptr: " << chargedPcle << ", to ChargedPFO! " ); - continue; - } - float chargedEMEnergy = chargedPFO->e(); - std::vector<const xAOD::IParticle*> hadPFOs; - chargedPFO->associatedParticles(xAOD::PFODetails::TauShot, hadPFOs); - for( auto hadPFO : hadPFOs ) - chargedEMEnergy -= hadPFO->e(); - - if( chargedEMEnergy < 0.0 ) chargedEMEnergy = 0.0; - neutralEnergy -= chargedEMEnergy; - ATH_MSG_DEBUG("Subtracting charged energy: " << chargedEMEnergy ); - } - float neutralPt = neutralEnergy / std::cosh(neutralPFO->eta()); - if(neutralPt <= 100.) neutralPt = 100.0; - - ATH_MSG_DEBUG("Neutral PFO pt, orig: " << neutralPFO->pt() << " new: " << neutralPt); - neutralPFO->setP4(neutralPt , neutralPFO->eta(), neutralPFO->phi(), neutralPFO->m()); + + +void TauPi0ClusterScaler::subtractChargedEnergyFromNeutralPFOs(xAOD::PFOContainer& neutralPFOContainer) const { + // FIXME: It loops all the exsiting PFOs, will make the PFO kinematic depend on the current + // tau candidate. The kinematics written to the xAOD is the one for the last tau candidate. + + for (xAOD::PFO* neutralPFO : neutralPFOContainer) { + // Get associated charged PFOs + std::vector<const xAOD::IParticle*> chargedPFOs; + neutralPFO->associatedParticles(xAOD::PFODetails::Track, chargedPFOs); + if (chargedPFOs.empty()) { + ATH_MSG_DEBUG("No associated charged to subtract"); + continue; } + ATH_MSG_DEBUG("Associated charged PFOs: " << chargedPFOs.size() ); + + // estimate charged EM energy and subtract + float neutralEnergy = neutralPFO->e(); + for (const xAOD::IParticle* chargedParticle : chargedPFOs) { + const xAOD::PFO* chargedPFO = dynamic_cast<const xAOD::PFO*>(chargedParticle); + if( not chargedPFO ){ + ATH_MSG_WARNING("Failed to downcast IParticle ptr: " << chargedParticle << ", to ChargedPFO! " ); + continue; + } + float chargedEMEnergy = chargedPFO->e(); + + std::vector<const xAOD::IParticle*> hadPFOs; + chargedPFO->associatedParticles(xAOD::PFODetails::TauShot, hadPFOs); + for (auto hadPFO : hadPFOs) { + chargedEMEnergy -= hadPFO->e(); + } + + if( chargedEMEnergy < 0.0 ) chargedEMEnergy = 0.0; + neutralEnergy -= chargedEMEnergy; + ATH_MSG_DEBUG("Subtracting charged energy: " << chargedEMEnergy ); + } + float neutralPt = neutralEnergy / std::cosh(neutralPFO->eta()); + if (neutralPt <= 100.) neutralPt = 100.0; + + ATH_MSG_DEBUG("Neutral PFO pt, original: " << neutralPFO->pt() << " subtracted: " << neutralPt); + neutralPFO->setP4(neutralPt , neutralPFO->eta(), neutralPFO->phi(), neutralPFO->m()); + } } diff --git a/Reconstruction/tauRecTools/src/TauPi0ClusterScaler.h b/Reconstruction/tauRecTools/src/TauPi0ClusterScaler.h index bb05d81d099398cdb304e1982152bafd45383e1c..90e9083ea8336bf9a178c12ce69eafe60ab8fd6b 100644 --- a/Reconstruction/tauRecTools/src/TauPi0ClusterScaler.h +++ b/Reconstruction/tauRecTools/src/TauPi0ClusterScaler.h @@ -19,51 +19,39 @@ * @author Will Davey <will.davey@cern.ch> */ -//namespace Trk { -// class IParticleCaloExtensionTool; -//} class TauPi0ClusterScaler : virtual public TauRecToolBase { -public: - TauPi0ClusterScaler(const std::string& name); - ASG_TOOL_CLASS2(TauPi0ClusterScaler, TauRecToolBase, ITauToolBase) - virtual ~TauPi0ClusterScaler(); - - virtual StatusCode executePi0ClusterScaler(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer, xAOD::PFOContainer& pChargedPFOContainer) const override; - -private: - - /** @brief tool handles */ - //ToolHandle<Trk::IParticleCaloExtensionTool> m_caloExtensionTool; - /** @brief reset neutral PFO kinematics (for AOD running) */ - void resetNeutralPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer) const; - - /** @brief create charged PFOs */ - void createChargedPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pChargedPFOContainer) const; - - /** @brief extrapolate charged PFO tracks to EM and HAD layers */ - //void extrapolateChargedPFOs(xAOD::TauJet& pTau); - - /** @brief associate hadronic PFOs to charged PFOs */ - void associateHadronicToChargedPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pChargedPFOContainer) const; - - /** @brief associate charged PFOs to neutral PFOs */ - void associateChargedToNeutralPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer) const; - - /** @brief associate charged PFOs to neutral PFOs */ - void subtractChargedEnergyFromNeutralPFOs(xAOD::PFOContainer& pNeutralPFOContainer) const; +public: + + ASG_TOOL_CLASS2(TauPi0ClusterScaler, TauRecToolBase, ITauToolBase) - /** @brief sets of EM/Had samplings for track extrapolation */ - //std::set<CaloSampling::CaloSample> m_EMSamplings; - //std::set<CaloSampling::CaloSample> m_HadSamplings; + TauPi0ClusterScaler(const std::string& name); + virtual ~TauPi0ClusterScaler() = default; - /** dodgy re-purposed PFOAttributes enums */ - //xAOD::PFODetails::PFOAttributes ETAECAL; - //xAOD::PFODetails::PFOAttributes PHIECAL; - //xAOD::PFODetails::PFOAttributes ETAHCAL; - //xAOD::PFODetails::PFOAttributes PHIHCAL; + virtual StatusCode executePi0ClusterScaler(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer, xAOD::PFOContainer& pChargedPFOContainer) const override; +private: + + /** @brief Clear accosicated partcle links for the pfo container */ + void clearAssociatedParticleLinks(xAOD::PFOContainer& pfoContainer, xAOD::PFODetails::PFOParticleType type) const; + + /** @brief Get extrapolated position to the CAL */ + float getExtrapolatedPosition(const xAOD::PFO& chargedPFO, xAOD::TauJetParameters::TrackDetail detail) const; + + /** @brief Correct neutral PFO kinematics to point at the current tau vertex */ + void correctNeutralPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer) const; + + /** @brief create charged PFOs */ + void createChargedPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pChargedPFOContainer) const; + + /** @brief associate hadronic PFOs to charged PFOs */ + void associateHadronicToChargedPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pChargedPFOContainer) const; + + /** @brief associate charged PFOs to neutral PFOs */ + void associateChargedToNeutralPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer) const; + + /** @brief associate charged PFOs to neutral PFOs */ + void subtractChargedEnergyFromNeutralPFOs(xAOD::PFOContainer& pNeutralPFOContainer) const; }; #endif /* TAUPI0CLUSTERSCALER_H */ - diff --git a/Reconstruction/tauRecTools/src/TauPi0CreateROI.cxx b/Reconstruction/tauRecTools/src/TauPi0CreateROI.cxx index 586d7b68d0d155b12ec07c856b90803de7b40f8d..e2cf019bdbd38632ba65797eef143136047b62d8 100644 --- a/Reconstruction/tauRecTools/src/TauPi0CreateROI.cxx +++ b/Reconstruction/tauRecTools/src/TauPi0CreateROI.cxx @@ -3,33 +3,20 @@ */ #ifndef XAOD_ANALYSIS -//----------------------------------------------------------------------------- -// file: TauPi0CreateROI.cxx -// package: Reconstruction/tauEvent -// authors: Will Davey, Benedict Winter, Stephanie Yuen -// date: 2012-10-09 -//----------------------------------------------------------------------------- -#include "CaloUtils/CaloCellList.h" #include "TauPi0CreateROI.h" +#include "CaloUtils/CaloCellList.h" + #include <boost/scoped_ptr.hpp> -//------------------------------------------------------------------------- -// Constructor -//------------------------------------------------------------------------- + TauPi0CreateROI::TauPi0CreateROI(const std::string& name) : - TauRecToolBase(name) -{ + TauRecToolBase(name) { } -//------------------------------------------------------------------------- -// Destructor -//------------------------------------------------------------------------- -TauPi0CreateROI::~TauPi0CreateROI() { -} StatusCode TauPi0CreateROI::initialize() { @@ -38,58 +25,45 @@ StatusCode TauPi0CreateROI::initialize() { return StatusCode::SUCCESS; } -//______________________________________________________________________________ -StatusCode TauPi0CreateROI::executePi0CreateROI(xAOD::TauJet& pTau, CaloCellContainer& pPi0CellContainer, boost::dynamic_bitset<>& addedCellsMap) const { - //--------------------------------------------------------------------- - // only run on 1-5 prong taus - //--------------------------------------------------------------------- - if (pTau.nTracks() == 0 || pTau.nTracks() >5 ) { - return StatusCode::SUCCESS; - } - ATH_MSG_DEBUG("new tau. \tpt = " << pTau.pt() << "\teta = " << pTau.eta() << "\tphi = " << pTau.phi() << "\tnprongs = " << pTau.nTracks()); - - //--------------------------------------------------------------------- - // retrieve cells around tau - //--------------------------------------------------------------------- - // get all calo cell container - SG::ReadHandle<CaloCellContainer> caloCellInHandle( m_caloCellInputContainer ); - if (!caloCellInHandle.isValid()) { - ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << caloCellInHandle.key()); - return StatusCode::FAILURE; - } - const CaloCellContainer *pCellContainer = NULL; - pCellContainer = caloCellInHandle.cptr(); - - // get only EM cells within dR<0.4 - std::vector<CaloCell_ID::SUBCALO> emSubCaloBlocks; - emSubCaloBlocks.push_back(CaloCell_ID::LAREM); - boost::scoped_ptr<CaloCellList> pCells(new CaloCellList(pCellContainer,emSubCaloBlocks)); - pCells->select(pTau.eta(), pTau.phi(), 0.4); // TODO: change hardcoded 0.4 to tau cone variable, (or func. from TauJet)? - - //--------------------------------------------------------------------- - // Put Ecal cells in output container - //--------------------------------------------------------------------- - - CaloCellList::list_iterator cellItr(pCells->begin()), cellItrE(pCells->end()); - for(; cellItr != cellItrE; ++cellItr) { - const CaloCell* cell = (*cellItr); - - // only keep cells that are in Ecal (PS, EM1, EM2 and EM3, both barrel and endcap). - int samp = cell->caloDDE()->getSampling(); - if(samp>7) continue; - - // Store cell in output container - const IdentifierHash cellHash = cell->caloDDE()->calo_hash(); - - if(!addedCellsMap.test(cellHash)) { - CaloCell* copyCell = cell->clone(); - pPi0CellContainer.push_back(copyCell); - addedCellsMap.set(cellHash); - } - } +StatusCode TauPi0CreateROI::executePi0CreateROI(xAOD::TauJet& tau, CaloCellContainer& pi0CellContainer, boost::dynamic_bitset<>& addedCellsMap) const { + // only run on 1-5 prong taus + if (tau.nTracks() == 0 || tau.nTracks() >5 ) { return StatusCode::SUCCESS; + } + + SG::ReadHandle<CaloCellContainer> caloCellInHandle( m_caloCellInputContainer ); + if (!caloCellInHandle.isValid()) { + ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << caloCellInHandle.key()); + return StatusCode::FAILURE; + } + const CaloCellContainer *cellContainer = caloCellInHandle.cptr();; + + // get only EM cells within dR < 0.4 + // TODO: change hardcoded 0.4 to meaningful variable + std::vector<CaloCell_ID::SUBCALO> emSubCaloBlocks; + emSubCaloBlocks.push_back(CaloCell_ID::LAREM); + boost::scoped_ptr<CaloCellList> cellList(new CaloCellList(cellContainer,emSubCaloBlocks)); + // FIXME: tau p4 is corrected to point at tau vertex, but the cells are not + cellList->select(tau.eta(), tau.phi(), 0.4); + + for (const CaloCell* cell : *cellList) { + // only keep cells that are in Ecal (PS, EM1, EM2 and EM3, both barrel and endcap). + int sampling = cell->caloDDE()->getSampling(); + if (sampling > 7) continue; + + // Store cell in output container + const IdentifierHash cellHash = cell->caloDDE()->calo_hash(); + + if (!addedCellsMap.test(cellHash)) { + CaloCell* newCell = cell->clone(); + pi0CellContainer.push_back(newCell); + addedCellsMap.set(cellHash); + } + } + + return StatusCode::SUCCESS; } #endif diff --git a/Reconstruction/tauRecTools/src/TauPi0CreateROI.h b/Reconstruction/tauRecTools/src/TauPi0CreateROI.h index ee9e0ea640ae615e95a55282a14045012bd9fdf4..e3c6b54f1aaf3d86fc351139228d26e521742865 100644 --- a/Reconstruction/tauRecTools/src/TauPi0CreateROI.h +++ b/Reconstruction/tauRecTools/src/TauPi0CreateROI.h @@ -18,7 +18,7 @@ #include "xAODTau/TauJet.h" /** - * @brief Create ROIs for the Pi0 finder. + * @brief Find the cells used to create pi0 cluster * * @author Will Davey <will.davey@cern.ch> * @author Benedict Winter <benedict.tobias.winter@cern.ch> @@ -26,17 +26,21 @@ */ class TauPi0CreateROI : public TauRecToolBase { + public: - TauPi0CreateROI(const std::string& name); - ASG_TOOL_CLASS2(TauPi0CreateROI, TauRecToolBase, ITauToolBase); - virtual ~TauPi0CreateROI(); - virtual StatusCode initialize() override; - virtual StatusCode executePi0CreateROI(xAOD::TauJet& pTau, CaloCellContainer& Pi0CellContainer, boost::dynamic_bitset<>& map) const override; + ASG_TOOL_CLASS2(TauPi0CreateROI, TauRecToolBase, ITauToolBase); + + TauPi0CreateROI(const std::string& name); + virtual ~TauPi0CreateROI() = default; + + virtual StatusCode initialize() override; + virtual StatusCode executePi0CreateROI(xAOD::TauJet& pTau, CaloCellContainer& Pi0CellContainer, boost::dynamic_bitset<>& map) const override; private: - SG::ReadHandleKey<CaloCellContainer> m_caloCellInputContainer{this,"Key_caloCellInputContainer", "AllCalo", "input vertex container key"}; + + SG::ReadHandleKey<CaloCellContainer> m_caloCellInputContainer{this,"Key_caloCellInputContainer", "AllCalo", "input vertex container key"}; + }; #endif /* TAUPI0CREATEROI_H */ - diff --git a/Reconstruction/tauRecTools/src/TauShotFinder.cxx b/Reconstruction/tauRecTools/src/TauShotFinder.cxx index 1ebb673a60f559186064b3904bd4600e691c6f5b..04c9964045d9a5f5f3154ff07d0d98a51f4f0567 100644 --- a/Reconstruction/tauRecTools/src/TauShotFinder.cxx +++ b/Reconstruction/tauRecTools/src/TauShotFinder.cxx @@ -3,346 +3,401 @@ */ #ifndef XAOD_ANALYSIS -//----------------------------------------------------------------------------- -// file: TauShotFinder.cxx -// package: Reconstruction/tauRec -// authors: Will Davey, Benedict Winter, Stephanie Yuen -// date: 2013-05-22 -//----------------------------------------------------------------------------- -#include <boost/scoped_ptr.hpp> +#include "TauShotFinder.h" +#include "TauShotVariableHelpers.h" #include "xAODCaloEvent/CaloClusterContainer.h" #include "xAODCaloEvent/CaloClusterKineHelper.h" #include "CaloUtils/CaloClusterStoreHelper.h" #include "CaloUtils/CaloCellList.h" -#include "TauShotFinder.h" -#include "TauShotVariableHelpers.h" #include "xAODPFlow/PFOContainer.h" #include "xAODPFlow/PFOAuxContainer.h" #include "xAODPFlow/PFO.h" -//------------------------------------------------------------------------- -// Constructor -//------------------------------------------------------------------------- +#include <boost/scoped_ptr.hpp> + + TauShotFinder::TauShotFinder(const std::string& name) : TauRecToolBase(name) { } -//------------------------------------------------------------------------- -// Destructor -//------------------------------------------------------------------------- -TauShotFinder::~TauShotFinder() { -} -//______________________________________________________________________________ StatusCode TauShotFinder::initialize() { - - // retrieve tools - ATH_MSG_DEBUG( "Retrieving tools" ); - CHECK( m_caloWeightTool.retrieve() ); + + ATH_CHECK(m_caloWeightTool.retrieve()); + ATH_CHECK(m_caloCellInputContainer.initialize()); + ATH_CHECK(detStore()->retrieve (m_calo_id, "CaloCell_ID")); - ATH_CHECK( m_caloCellInputContainer.initialize() ); + return StatusCode::SUCCESS; +} - // initialize calo cell geo - ATH_CHECK( detStore()->retrieve (m_calo_id, "CaloCell_ID") ); - return StatusCode::SUCCESS; -} -//______________________________________________________________________________ -StatusCode TauShotFinder::executeShotFinder(xAOD::TauJet& pTau, xAOD::CaloClusterContainer& tauShotClusterContainer, - xAOD::PFOContainer& tauShotPFOContainer) const { +StatusCode TauShotFinder::executeShotFinder(xAOD::TauJet& tau, xAOD::CaloClusterContainer& shotClusterContainer, + xAOD::PFOContainer& shotPFOContainer) const { - ATH_MSG_DEBUG("execute"); - // Any tau needs to have shot PFO vectors. Set empty vectors before nTrack cut - std::vector<ElementLink<xAOD::PFOContainer> > empty; - pTau.setShotPFOLinks(empty); + // Any tau needs to have shot PFO vectors. Set empty vectors before nTrack cut + std::vector<ElementLink<xAOD::PFOContainer>> empty; + tau.setShotPFOLinks(empty); + + // Only run on 1-5 prong taus + if (tau.nTracks() == 0 || tau.nTracks() >5 ) { + return StatusCode::SUCCESS; + } + + SG::ReadHandle<CaloCellContainer> caloCellInHandle( m_caloCellInputContainer ); + if (!caloCellInHandle.isValid()) { + ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << caloCellInHandle.key()); + return StatusCode::FAILURE; + } + const CaloCellContainer *cellContainer = caloCellInHandle.cptr();; + + // Select seed cells: + // -- dR < 0.4, EM1, pt > 100 + // -- largest pt among the neighbours in eta direction + // -- no other seed cell as neighbour in eta direction + std::vector<const CaloCell*> seedCells = selectSeedCells(tau, *cellContainer); + ATH_MSG_DEBUG("seedCells.size() = " << seedCells.size()); - //--------------------------------------------------------------------- - // only run shower subtraction on 1-5 prong taus - //--------------------------------------------------------------------- - if (pTau.nTracks() == 0 || pTau.nTracks() >5 ) { - return StatusCode::SUCCESS; + // Construt shot by merging neighbour cells in phi direction + while (seedCells.size()) { + // Find the neighbour in phi direction, and choose the one with highest pt + const CaloCell* cell = seedCells.front(); + const CaloCell* phiNeigCell = getPhiNeighbour(*cell, seedCells); + + // Construct shot PFO candidate + xAOD::PFO* shot = new xAOD::PFO(); + shotPFOContainer.push_back(shot); + + // -- Construct the shot cluster + xAOD::CaloCluster* shotCluster = createShotCluster(cell, phiNeigCell, *cellContainer); + shotClusterContainer.push_back(shotCluster); + + ElementLink<xAOD::CaloClusterContainer> clusElementLink; + clusElementLink.toContainedElement( shotClusterContainer, shotCluster ); + shot->setClusterLink( clusElementLink ); + + // -- Calculate the four momentum + // TODO: simplify the calculation + if (phiNeigCell) { + // interpolate position + double dPhi = TVector2::Phi_mpi_pi( phiNeigCell->phi() - cell->phi()); + double ratio = phiNeigCell->pt()*m_caloWeightTool->wtCell(phiNeigCell)/(cell->pt()*m_caloWeightTool->wtCell(cell) + phiNeigCell->pt()*m_caloWeightTool->wtCell(phiNeigCell)); + float phi = cell->phi()+dPhi*ratio; + float pt = cell->pt()*m_caloWeightTool->wtCell(cell)+phiNeigCell->pt()*m_caloWeightTool->wtCell(phiNeigCell); + + shot->setP4( (float) pt, (float) cell->eta(), (float) phi, (float) cell->m()); } - //--------------------------------------------------------------------- - // retrieve cells around tau - //--------------------------------------------------------------------- - // get all calo cell container - SG::ReadHandle<CaloCellContainer> caloCellInHandle( m_caloCellInputContainer ); - if (!caloCellInHandle.isValid()) { - ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << caloCellInHandle.key()); - return StatusCode::FAILURE; + else { + shot->setP4( (float) cell->pt()*m_caloWeightTool->wtCell(cell), (float) cell->eta(), (float) cell->phi(), (float) cell->m()); } - const CaloCellContainer *pCellContainer = caloCellInHandle.cptr();; + + // -- Set the Attribute + shot->setBDTPi0Score(-9999.); + shot->setCharge(0); + shot->setCenterMag(0.0); - // get only EM cells within dR<0.4 - std::vector<CaloCell_ID::SUBCALO> emSubCaloBlocks; - emSubCaloBlocks.push_back(CaloCell_ID::LAREM); - boost::scoped_ptr<CaloCellList> pCells(new CaloCellList(pCellContainer,emSubCaloBlocks)); - pCells->select(pTau.eta(), pTau.phi(), 0.4); - - // Dump cells into a std::vector since CaloCellList wont allow sorting - // Also apply very basic preselection - std::vector<const CaloCell*> cells; - CaloCellList::list_iterator cellItr = pCells->begin(); - for(; cellItr!=pCells->end();++cellItr){ - // require cells above 100 MeV - if( (*cellItr)->pt()*m_caloWeightTool->wtCell(*cellItr) < 100. ) continue; - // require cells in EM1 - int samp = (*cellItr)->caloDDE()->getSampling(); - if( !( samp == CaloCell_ID::EMB1 || samp == CaloCell_ID::EME1 ) ) continue; - cells.push_back(*cellItr); - } - // sort cells in descending pt - std::sort(cells.begin(),cells.end(),ptSort(*this)); + shot->setAttribute<int>(xAOD::PFODetails::PFOAttributes::tauShots_nCellsInEta, m_nCellsInEta); - //--------------------------------------------------------------------- - // shot seeding - //--------------------------------------------------------------------- - // get seed cells - std::vector<const CaloCell*> seedCells; - std::set<IdentifierHash> seedCellHashes; - cellItr = cells.begin(); - for(; cellItr != cells.end(); ++cellItr) { - const CaloCell* cell = (*cellItr); - const IdentifierHash cellHash = cell->caloDDE()->calo_hash(); - - // apply seed selection on nearest neighbours - std::vector<IdentifierHash> nextEta, prevEta; - m_calo_id->get_neighbours(cellHash,LArNeighbours::nextInEta,nextEta); - m_calo_id->get_neighbours(cellHash,LArNeighbours::prevInEta,prevEta); - std::vector<IdentifierHash> neighbours = nextEta; - neighbours.insert(neighbours.end(),prevEta.begin(),prevEta.end()); - bool status = true; - std::vector<IdentifierHash>::iterator hashItr = neighbours.begin(); - for(;hashItr!=neighbours.end();++hashItr){ - // must not be next to seed cell (TODO: maybe this requirement can be removed) - if( seedCellHashes.find(*hashItr) != seedCellHashes.end() ){ - status = false; - break; - } - // must be maximum - const CaloCell* neigCell = pCellContainer->findCell(*hashItr); - if( !neigCell ) continue; - if( neigCell->pt()*m_caloWeightTool->wtCell(neigCell) >= cell->pt()*m_caloWeightTool->wtCell(cell) ){ - status = false; - break; - } - } - if( !status ) continue; - seedCells.push_back(cell); - seedCellHashes.insert(cellHash); - } // preselected cells - ATH_MSG_DEBUG("seedCells.size() = " << seedCells.size()); + const IdentifierHash seedHash = cell->caloDDE()->calo_hash(); + shot->setAttribute<int>(xAOD::PFODetails::PFOAttributes::tauShots_seedHash, seedHash); + + std::vector<std::vector<const CaloCell*>> cellBlock = TauShotVariableHelpers::getCellBlock(*shot, m_calo_id); + + float pt1 = TauShotVariableHelpers::ptWindow(cellBlock, 1, m_caloWeightTool); + shot->setAttribute<float>(xAOD::PFODetails::PFOAttributes::tauShots_pt1, pt1); - // merge across phi and construct shots - while( seedCells.size() ){ - - const CaloCell* cell = seedCells.front(); - const IdentifierHash seedHash = cell->caloDDE()->calo_hash(); - - // look for match across phi in current seeds - const CaloCell* nextPhi = NULL; - const CaloCell* prevPhi = NULL; - for( cellItr = seedCells.begin(); cellItr!=seedCells.end(); ++cellItr){ - if( (*cellItr) == cell ) continue; - IdentifierHash shotCellHash = (*cellItr)->caloDDE()->calo_hash(); - if( this->isPhiNeighbour(seedHash,shotCellHash,true) ) nextPhi = (*cellItr); - else if( this->isPhiNeighbour(seedHash,shotCellHash,false) ) prevPhi = (*cellItr); - } - - const CaloCell* mergePhi = NULL; - if( nextPhi && prevPhi ){ - // take higest-pt if merged up and down - if( nextPhi->pt()*m_caloWeightTool->wtCell(nextPhi) > prevPhi->pt()*m_caloWeightTool->wtCell(prevPhi) ) mergePhi = nextPhi; - else mergePhi = prevPhi; - } - else if (nextPhi) mergePhi = nextPhi; - else if (prevPhi) mergePhi = prevPhi; - - // get neighbours in 5x1 window - std::vector<const CaloCell*> windowNeighbours = this->getNeighbours(pCellContainer,cell,2); - if( mergePhi ){ - std::vector<const CaloCell*> mergeCells = this->getNeighbours(pCellContainer,mergePhi,2); - windowNeighbours.push_back(mergePhi); - windowNeighbours.insert(windowNeighbours.end(),mergeCells.begin(),mergeCells.end()); - } - - - // create seed cluster - xAOD::CaloCluster* shotCluster = CaloClusterStoreHelper::makeCluster(pCellContainer); - shotCluster->getOwnCellLinks()->reserve(windowNeighbours.size()+1); - shotCluster->addCell(pCellContainer->findIndex(seedHash), 1.); - cellItr = windowNeighbours.begin(); - for( ; cellItr!=windowNeighbours.end(); ++cellItr) - shotCluster->addCell(pCellContainer->findIndex((*cellItr)->caloDDE()->calo_hash()),1.0); - CaloClusterKineHelper::calculateKine(shotCluster,true,true); - tauShotClusterContainer.push_back(shotCluster); - - // create shot PFO and store it in output container - xAOD::PFO* shot = new xAOD::PFO(); - tauShotPFOContainer.push_back( shot ); - - // Create element link from tau to shot - ElementLink<xAOD::PFOContainer> PFOElementLink; - PFOElementLink.toContainedElement( tauShotPFOContainer, shot ); - pTau.addShotPFOLink( PFOElementLink ); - - if( mergePhi ){ - // interpolate position - double dPhi = TVector2::Phi_mpi_pi( mergePhi->phi() - cell->phi()); - double ratio = mergePhi->pt()*m_caloWeightTool->wtCell(mergePhi)/(cell->pt()*m_caloWeightTool->wtCell(cell) + mergePhi->pt()*m_caloWeightTool->wtCell(mergePhi)); - float phi = cell->phi()+dPhi*ratio; - float pt = cell->pt()*m_caloWeightTool->wtCell(cell)+mergePhi->pt()*m_caloWeightTool->wtCell(mergePhi); - - shot->setP4( (float) pt, (float) cell->eta(), (float) phi, (float) cell->m()); - } - else shot->setP4( (float) cell->pt()*m_caloWeightTool->wtCell(cell), (float) cell->eta(), (float) cell->phi(), (float) cell->m()); - - shot->setBDTPi0Score( (float) -9999. ); - shot->setCharge( 0. ); - double center_mag = 0.0; - shot->setCenterMag( (float) center_mag); - - ElementLink<xAOD::CaloClusterContainer> clusElementLink; - clusElementLink.toContainedElement( tauShotClusterContainer, shotCluster ); - shot->setClusterLink( clusElementLink ); - shot->setAttribute<int>(xAOD::PFODetails::PFOAttributes::tauShots_nCellsInEta, m_nCellsInEta); - shot->setAttribute<int>(xAOD::PFODetails::PFOAttributes::tauShots_seedHash, seedHash); - - // Get cell block for variable calculations - std::vector<std::vector<const CaloCell*> > cellBlock = TauShotVariableHelpers::getCellBlock(shot, m_calo_id); - - // Some DEBUG statements - if (msgLvl(MSG::DEBUG)) { - if(cell->pt()*m_caloWeightTool->wtCell(cell)>300){ - ATH_MSG_DEBUG("New shot. \t block size phi = " << cellBlock.size() << " \t block size eta = " << cellBlock.at(0).size() << "\t shot->pt() = " << shot->pt()); - for(unsigned iCellPhi = 0; iCellPhi<cellBlock.size();++iCellPhi){ - for(unsigned iCellEta = 0; iCellEta<cellBlock.at(iCellPhi).size();++iCellEta){ - const CaloCell* cell = cellBlock.at(iCellPhi).at(iCellEta); - if( cell==NULL ) ATH_MSG_DEBUG("Cell" << iCellPhi << iCellEta << ": \t NULL" ); - else ATH_MSG_DEBUG("Cell"<<iCellPhi<<iCellEta<<":\tPt = "<< cell->pt()*m_caloWeightTool->wtCell(cell)<<"\teta = "<<cell->eta()<<"\tphi = "<<cell->phi()); - } - } - } - } - // Get eta bin - int etaBin = getEtaBin(cell->eta()); - - // set variables used for photon counting - float pt1=TauShotVariableHelpers::ptWindow(cellBlock,1,m_caloWeightTool); - float pt3=TauShotVariableHelpers::ptWindow(cellBlock,3,m_caloWeightTool); - float pt5=TauShotVariableHelpers::ptWindow(cellBlock,5,m_caloWeightTool); - - // Calculate number of photons in shot - int nPhotons = getNPhotons(etaBin, pt1); - - // Set variables in shot PFO - shot->setAttribute<float>(xAOD::PFODetails::PFOAttributes::tauShots_pt1, pt1); - shot->setAttribute<float>(xAOD::PFODetails::PFOAttributes::tauShots_pt3, pt3); - shot->setAttribute<float>(xAOD::PFODetails::PFOAttributes::tauShots_pt5, pt5); - shot->setAttribute<int>(xAOD::PFODetails::PFOAttributes::tauShots_nPhotons, nPhotons); - - // remove shot(s) from list - std::vector<const CaloCell*>::iterator cellItrNonConst; - cellItrNonConst = std::find(seedCells.begin(),seedCells.end(),cell); - seedCells.erase(cellItrNonConst); - if( mergePhi ){ - cellItrNonConst = std::find(seedCells.begin(),seedCells.end(),mergePhi); - seedCells.erase(cellItrNonConst); - } - } // seed cells + float pt3 = TauShotVariableHelpers::ptWindow(cellBlock, 3, m_caloWeightTool); + shot->setAttribute<float>(xAOD::PFODetails::PFOAttributes::tauShots_pt3, pt3); + float pt5 = TauShotVariableHelpers::ptWindow(cellBlock, 5, m_caloWeightTool); + shot->setAttribute<float>(xAOD::PFODetails::PFOAttributes::tauShots_pt5, pt5); - return StatusCode::SUCCESS; + int nPhotons = getNPhotons(cell->eta(), pt1); + shot->setAttribute<int>(xAOD::PFODetails::PFOAttributes::tauShots_nPhotons, nPhotons); + + // Add Element link to the shot PFO container + ElementLink<xAOD::PFOContainer> PFOElementLink; + PFOElementLink.toContainedElement(shotPFOContainer, shot); + tau.addShotPFOLink(PFOElementLink); + + // Remove used cells from list + std::vector<const CaloCell*>::iterator cellItrNonConst; + auto cellIndex = std::find(seedCells.begin(), seedCells.end(), cell); + seedCells.erase(cellIndex); + if (phiNeigCell) { + cellIndex = std::find(seedCells.begin(), seedCells.end(), phiNeigCell); + seedCells.erase(cellIndex); + } + } // Loop over seed cells + + return StatusCode::SUCCESS; } -//______________________________________________________________________________ -std::vector<const CaloCell*> TauShotFinder::getNeighbours(const CaloCellContainer* pCellContainer, - const CaloCell* cell, - int maxDepth) const -{ - std::vector<const CaloCell*> cells; - this->addNeighbours(pCellContainer,cell,cells,0,maxDepth,true); //next - this->addNeighbours(pCellContainer,cell,cells,0,maxDepth,false); //prev - return cells; + + +int TauShotFinder::getEtaBin(float eta) const { + float absEta=std::abs(eta); + + if (absEta < 0.80) { + return 0; // Central Barrel + } + if (absEta<1.39) { + return 1; // Outer Barrel + } + if (absEta<1.51) { + return 2; // Crack region + } + if (absEta<1.80) { + return 3; // Endcap, fine granularity + } + return 4; // ndcap, coarse granularity } -//______________________________________________________________________________ -void TauShotFinder::addNeighbours(const CaloCellContainer* pCellContainer, - const CaloCell* cell, - std::vector<const CaloCell*>& cells, - int depth, - int maxDepth, - bool next) const -{ - depth++; - if( depth > maxDepth ) return; + +int TauShotFinder::getNPhotons(float eta, float energy) const { + int etaBin = getEtaBin(eta); + + // No photons in crack region + if(etaBin==2) return 0; + + const std::vector<float>& minPtCut = m_minPtCut.value(); + const std::vector<float>& doubleShotCut = m_doubleShotCut.value(); + ATH_MSG_DEBUG("etaBin = " << etaBin << ", energy = " << energy); + ATH_MSG_DEBUG("MinPtCut: " << minPtCut.at(etaBin) << "DoubleShotCut: " << doubleShotCut.at(etaBin)); + + if (energy < minPtCut.at(etaBin)) return 0; + if (energy > doubleShotCut.at(etaBin)) return 2; + return 1; +} + + + +std::vector<const CaloCell*> TauShotFinder::selectCells(const xAOD::TauJet& tau, + const CaloCellContainer& cellContainer) const { + // Get only cells within dR < 0.4 + // -- TODO: change the hardcoded 0.4 + std::vector<CaloCell_ID::SUBCALO> emSubCaloBlocks; + emSubCaloBlocks.push_back(CaloCell_ID::LAREM); + boost::scoped_ptr<CaloCellList> cellList(new CaloCellList(&cellContainer,emSubCaloBlocks)); + // -- FIXME: tau p4 is corrected to point at tau vertex, but the cells are not + cellList->select(tau.eta(), tau.phi(), 0.4); + + std::vector<const CaloCell*> cells; + for (const CaloCell* cell : *cellList) { + // Require cells above 100 MeV + // FIXME: cells are not corrected to point at tau vertex + if (cell->pt() * m_caloWeightTool->wtCell(cell) < 100.) continue; + + // Require cells in EM1 + int sampling = cell->caloDDE()->getSampling(); + if( !( sampling == CaloCell_ID::EMB1 || sampling == CaloCell_ID::EME1 ) ) continue; + + cells.push_back(cell); + } + + return cells; +} + + + +std::vector<const CaloCell*> TauShotFinder::selectSeedCells(const xAOD::TauJet& tau, + const CaloCellContainer& cellContainer) const { + + // Apply pre-selection of the cells + std::vector<const CaloCell*> cells = selectCells(tau, cellContainer); + std::sort(cells.begin(),cells.end(),ptSort(*this)); + + std::vector<const CaloCell*> seedCells; + std::set<IdentifierHash> seedCellHashes; + + // Loop the pt sorted cells, and select the seed cells + for (const CaloCell* cell: cells) { const IdentifierHash cellHash = cell->caloDDE()->calo_hash(); - std::vector<IdentifierHash> neigHashes; - if( next ) - m_calo_id->get_neighbours(cellHash,LArNeighbours::nextInEta,neigHashes); - else - m_calo_id->get_neighbours(cellHash,LArNeighbours::prevInEta,neigHashes); + + std::vector<IdentifierHash> nextEtaHashes; + m_calo_id->get_neighbours(cellHash, LArNeighbours::nextInEta, nextEtaHashes); + std::vector<IdentifierHash> prevEtaHashes; + m_calo_id->get_neighbours(cellHash, LArNeighbours::prevInEta, prevEtaHashes); + + std::vector<IdentifierHash> neighHashes = nextEtaHashes; + neighHashes.insert(neighHashes.end(),prevEtaHashes.begin(),prevEtaHashes.end()); + + // Check whether it is a seed cell + bool status = true; + for (const IdentifierHash& neighHash : neighHashes) { + // Seed cells must not have seed cells as neighbours + // TODO: maybe this requirement can be removed + if (seedCellHashes.find(neighHash) != seedCellHashes.end()) { + status = false; + break; + } + + // Pt of seed cells must be larger than neighbours' + const CaloCell* neighCell = cellContainer.findCell(neighHash); + if (!neighCell) continue; + if (neighCell->pt() * m_caloWeightTool->wtCell(neighCell) >= cell->pt() * m_caloWeightTool->wtCell(cell)) { + status = false; + break; + } + } // End of the loop of neighbour cells - std::vector<IdentifierHash>::iterator hashItr = neigHashes.begin(); - for( ; hashItr!=neigHashes.end(); ++hashItr ){ - const CaloCell* newCell = pCellContainer->findCell(*hashItr); - if(!newCell)continue; - cells.push_back(newCell); - this->addNeighbours(pCellContainer,newCell,cells,depth,maxDepth,next); - // no EM1 cell should have more than one neighbor. Just add this neigbor for now - // FIXME: Check whether it happens that a cell has > 1 neighbors - break; - } + if (!status) continue; + + seedCells.push_back(cell); + seedCellHashes.insert(cellHash); + } // End of the loop of cells + + return seedCells; +} + + + +bool TauShotFinder::isPhiNeighbour(IdentifierHash cell1Hash, IdentifierHash cell2Hash) const { + std::vector<IdentifierHash> neigHashes; + + // Next cell in phi direction + m_calo_id->get_neighbours(cell1Hash,LArNeighbours::nextInPhi,neigHashes); + if (neigHashes.size() > 1) { + ATH_MSG_WARNING(cell1Hash << " has " << neigHashes.size() << " neighbours in the next phi direction !"); + } + if (std::find(neigHashes.begin(), neigHashes.end(), cell2Hash) != neigHashes.end()) { + return true; + } + + // Previous cell in phi direction + m_calo_id->get_neighbours(cell1Hash,LArNeighbours::prevInPhi,neigHashes); + if (neigHashes.size() > 1) { + ATH_MSG_WARNING(cell1Hash << " has " << neigHashes.size() << " neighbours in the previous phi direction !"); + } + if (std::find(neigHashes.begin(), neigHashes.end(), cell2Hash) != neigHashes.end()) { + return true; + } + + return false; } -//______________________________________________________________________________ -bool TauShotFinder::isPhiNeighbour(IdentifierHash cell1Hash, IdentifierHash cell2Hash, bool next) const{ - std::vector<IdentifierHash> neigHashes; - if( next ) m_calo_id->get_neighbours(cell1Hash,LArNeighbours::nextInPhi,neigHashes); - else m_calo_id->get_neighbours(cell1Hash,LArNeighbours::prevInPhi,neigHashes); - std::vector<IdentifierHash>::iterator itr = neigHashes.begin(); - for( ; itr!=neigHashes.end(); ++itr ){ - if(cell2Hash == (*itr)) return true; - } - return false; + + +const CaloCell* TauShotFinder::getPhiNeighbour(const CaloCell& seedCell, + const std::vector<const CaloCell*>& seedCells) const { + + const IdentifierHash seedHash = seedCell.caloDDE()->calo_hash(); + + // Obtain the neighbour cells in the phi direction + std::vector<const CaloCell*> neighCells; + for (const CaloCell* neighCell : seedCells) { + if (neighCell == &seedCell) continue; + + IdentifierHash neighHash = neighCell->caloDDE()->calo_hash(); + if (this->isPhiNeighbour(seedHash, neighHash)) { + neighCells.push_back(neighCell); + } + } + std::sort(neighCells.begin(),neighCells.end(),ptSort(*this)); + + // Select the one with largest pt + const CaloCell* phiNeigCell = nullptr; + if (neighCells.size() >= 1) { + phiNeigCell = neighCells[0]; + } + + return phiNeigCell; } -//______________________________________________________________________________ -float TauShotFinder::getEtaBin(float seedEta) const { - float absSeedEta=std::abs(seedEta); - if(absSeedEta < 0.80) return 0; // Central Barrel - else if(absSeedEta<1.39) return 1; // Outer Barrel - else if(absSeedEta<1.51) return 2; // crack - else if(absSeedEta<1.80) return 3; // endcap, fine granularity - else return 4; // endcap, coarse granularity + + +std::vector<const CaloCell*> TauShotFinder::getEtaNeighbours(const CaloCell& cell, + const CaloCellContainer& cellContainer, + int maxDepth) const { + std::vector<const CaloCell*> cells; + + // Add neighbours in next eta direction + this->addEtaNeighbours(cell, cellContainer, cells, 0, maxDepth, true); + // Add neighbours in previous eta direction + this->addEtaNeighbours(cell, cellContainer, cells, 0, maxDepth, false); + + return cells; } -//______________________________________________________________________________ -float TauShotFinder::getNPhotons(int etaBin, float seedEnergy) const { - // no photon counting in crack region, e.g. [1.39, 1.51] - if(etaBin==2) return 0; - const std::vector<float>& minPtCut = m_minPtCut.value(); - const std::vector<float>& autoDoubleShotCut = m_autoDoubleShotCut.value(); - ATH_MSG_DEBUG("etaBin = " << etaBin << ", seedEnergy = " << seedEnergy); - ATH_MSG_DEBUG("MinPtCut: " << minPtCut.at(etaBin) << "DoubleShotCut: " << autoDoubleShotCut.at(etaBin)); - if( seedEnergy < minPtCut.at(etaBin) ) return 0; - if( seedEnergy > autoDoubleShotCut.at(etaBin) ) return 2; - return 1; +void TauShotFinder::addEtaNeighbours(const CaloCell& cell, + const CaloCellContainer& cellContainer, + std::vector<const CaloCell*>& cells, + int depth, + int maxDepth, + bool next) const { + ++depth; + + if (depth > maxDepth) return; + + const IdentifierHash cellHash = cell.caloDDE()->calo_hash(); + + std::vector<IdentifierHash> neigHashes; + if (next) { + m_calo_id->get_neighbours(cellHash,LArNeighbours::nextInEta,neigHashes); + } + else { + m_calo_id->get_neighbours(cellHash,LArNeighbours::prevInEta,neigHashes); + } + + for (const IdentifierHash& hash : neigHashes) { + const CaloCell* newCell = cellContainer.findCell(hash); + + if (!newCell) continue; + + cells.push_back(newCell); + this->addEtaNeighbours(*newCell, cellContainer, cells, depth, maxDepth, next); + + if (neigHashes.size() > 1) { + ATH_MSG_WARNING(cellHash << " has " << neigHashes.size() << " neighbours in the eta direction !"); + break; + } + } } -//______________________________________________________________________________ -// some really slick c++ way of doing sort (since we need to use the member m_caloWeightTool) + + +xAOD::CaloCluster* TauShotFinder::createShotCluster(const CaloCell* cell, + const CaloCell* phiNeigCell, + const CaloCellContainer& cellContainer) const { + + xAOD::CaloCluster* shotCluster = CaloClusterStoreHelper::makeCluster(&cellContainer); + + int maxDepth = (m_nCellsInEta - 1) / 2; + + std::vector<const CaloCell*> windowNeighbours = this->getEtaNeighbours(*cell, cellContainer, maxDepth); + if (phiNeigCell) { + std::vector<const CaloCell*> mergeCells = this->getEtaNeighbours(*phiNeigCell, cellContainer, maxDepth); + windowNeighbours.push_back(phiNeigCell); + windowNeighbours.insert(windowNeighbours.end(), mergeCells.begin(), mergeCells.end()); + } + + shotCluster->getOwnCellLinks()->reserve(windowNeighbours.size()+1); + const IdentifierHash seedHash = cell->caloDDE()->calo_hash(); + shotCluster->addCell(cellContainer.findIndex(seedHash), 1.); + + for (const CaloCell* cell : windowNeighbours) { + shotCluster->addCell(cellContainer.findIndex(cell->caloDDE()->calo_hash()), 1.0); + } + + CaloClusterKineHelper::calculateKine(shotCluster,true,true); + + return shotCluster; +} + + + TauShotFinder::ptSort::ptSort( const TauShotFinder& info ) : m_info(info) { } -bool TauShotFinder::ptSort::operator()( const CaloCell* c1, const CaloCell* c2 ){ - return c1->pt()*m_info.m_caloWeightTool->wtCell(c1) > c2->pt()*m_info.m_caloWeightTool->wtCell(c2); +bool TauShotFinder::ptSort::operator()( const CaloCell* cell1, const CaloCell* cell2 ){ + double pt1 = cell1->pt()*m_info.m_caloWeightTool->wtCell(cell1); + double pt2 = cell2->pt()*m_info.m_caloWeightTool->wtCell(cell2); + return pt1 > pt2; } #endif diff --git a/Reconstruction/tauRecTools/src/TauShotFinder.h b/Reconstruction/tauRecTools/src/TauShotFinder.h index 6273fc619692164dbf2885e079f0f6b2b258ac24..fde52480403aa80dc4e9941b7eb382d32cb59b3d 100644 --- a/Reconstruction/tauRecTools/src/TauShotFinder.h +++ b/Reconstruction/tauRecTools/src/TauShotFinder.h @@ -5,69 +5,104 @@ #ifndef TAUREC_TAUSHOTFINDER_H #define TAUREC_TAUSHOTFINDER_H -#include "GaudiKernel/ToolHandle.h" #include "tauRecTools/TauRecToolBase.h" + #include "xAODPFlow/PFOAuxContainer.h" #include "xAODCaloEvent/CaloClusterAuxContainer.h" #include "CaloInterface/IHadronicCalibrationTool.h" -class CaloDetDescrManager; +#include "GaudiKernel/ToolHandle.h" + +/** + * @brief Construct the shot candidates + * 1. select seed cells used to construct the shot candidates + * 2. create the shot PFOs by merging the neighbour seed cells in phi direction + * 3. the cluster of the shot PFO contains cells in a window of 2 x NCellsInEta + * + * @author Will Davey <will.davey@cern.ch> + * @author Benedict Winter <benedict.tobias.winter@cern.ch> + * @author Stephanie Yuen <stephanie.yuen@cern.ch> + */ + class CaloCell_ID; class TauShotFinder : public TauRecToolBase { + public: - TauShotFinder(const std::string& name); - ASG_TOOL_CLASS2(TauShotFinder, TauRecToolBase, ITauToolBase); - virtual ~TauShotFinder(); + + ASG_TOOL_CLASS2(TauShotFinder, TauRecToolBase, ITauToolBase); + + TauShotFinder(const std::string& name); + virtual ~TauShotFinder() = default; - virtual StatusCode initialize() override; - virtual StatusCode executeShotFinder(xAOD::TauJet& pTau, xAOD::CaloClusterContainer& tauShotCaloClusContainer, xAOD::PFOContainer& tauShotPFOContainer) const override; + virtual StatusCode initialize() override; + virtual StatusCode executeShotFinder(xAOD::TauJet& pTau, xAOD::CaloClusterContainer& tauShotCaloClusContainer, xAOD::PFOContainer& tauShotPFOContainer) const override; private: - /** @brief tool handles */ - ToolHandle<IHadronicCalibrationTool> m_caloWeightTool {this, "CaloWeightTool", "H1WeightToolCSC12Generic"}; - - /** @brief new shot PFO container and name */ - /** @brief calo cell navigation */ - const CaloCell_ID* m_calo_id = NULL; - - /** @brief Thanks C++ for ruining my day */ - struct ptSort - { - ptSort( const TauShotFinder& info ); - const TauShotFinder& m_info; - bool operator()( const CaloCell* c1, const CaloCell* c2 ); - }; - - /** @brief get neighbour cells */ - std::vector<const CaloCell*> getNeighbours(const CaloCellContainer*,const CaloCell*,int /*maxDepth*/) const; - - void addNeighbours(const CaloCellContainer*, - const CaloCell* cell, - std::vector<const CaloCell*>& cells, - int depth, - int maxDepth, - bool next) const; - - bool isPhiNeighbour(IdentifierHash cell1Hash, IdentifierHash cell2Hash, bool next) const; - - /** @brief get eta bin */ - float getEtaBin(float /*seedEta*/) const; + struct ptSort + { + ptSort( const TauShotFinder& info ); + const TauShotFinder& m_info; + bool operator()( const CaloCell* c1, const CaloCell* c2 ); + }; + + /** @brief Apply preselection of the cells + * Cells within dR < 0.4, in EM1, and pt > 100 MeV are selected + */ + std::vector<const CaloCell*> selectCells(const xAOD::TauJet& tau, const CaloCellContainer& cellContainer) const; + + /** @brief Select the seed cells used to construct the shot + * Cells must sastisfy: + * 1. pre-selction: dR < 0.4, in EM1, and pt > 100 MeV + * 2. have largest pt among the neighbours in the eta direction + * 3. no other seed cells as neighbors in the eta direction + */ + std::vector<const CaloCell*> selectSeedCells(const xAOD::TauJet& tau, const CaloCellContainer& cellContainer) const; + + /** @brief Check whether two cells are neighbours in the phi direction */ + bool isPhiNeighbour(IdentifierHash cell1Hash, IdentifierHash cell2Hash) const; + + /** @brief Get the hottest neighbour cell in the phi direction */ + const CaloCell* getPhiNeighbour(const CaloCell& seedCell, const std::vector<const CaloCell*>& seedCells) const; + + /** @brief Get neighbour cells in the eta direction */ + std::vector<const CaloCell*> getEtaNeighbours(const CaloCell& cell, const CaloCellContainer& cellContainer, int maxDepth) const; + + /** @brief Get neighbour cells in the eta direction */ + void addEtaNeighbours(const CaloCell& cell, + const CaloCellContainer& cellContainer, + std::vector<const CaloCell*>& cells, + int depth, + int maxDepth, + bool next) const; + + /** @brief Create the shot cluster + * Shot cluster contains 5x1 cells from the seed cell and hottestneighbour + * cell in the phi direction + */ + xAOD::CaloCluster* createShotCluster(const CaloCell* cell, + const CaloCell* phiNeighCell, + const CaloCellContainer& cellContainer) const; + + /** @brief Get eta bin */ + int getEtaBin(float eta) const; + + /** @brief Get NPhotons in shot */ + int getNPhotons(float eta, float energy) const; + + Gaudi::Property<int> m_nCellsInEta {this, "NCellsInEta"}; + Gaudi::Property<std::vector<float>> m_minPtCut {this, "MinPtCut"}; + Gaudi::Property<std::vector<float>> m_doubleShotCut {this, "AutoDoubleShotCut"}; + + SG::ReadHandleKey<CaloCellContainer> m_caloCellInputContainer{this,"Key_caloCellInputContainer", "AllCalo", "input vertex container key"}; + SG::WriteHandleKey<xAOD::PFOContainer> m_tauPFOOutputContainer{this,"Key_tauPFOOutputContainer", "TauShotParticleFlowObjects", "tau pfo out key"}; - /** @brief get NPhotons in shot */ - float getNPhotons(int /*etaBin*/, - float /*seedEnergy*/) const; - - // number of cells in eta - Gaudi::Property<int> m_nCellsInEta {this, "NCellsInEta"}; - Gaudi::Property<std::vector<float>> m_minPtCut {this, "MinPtCut"}; - Gaudi::Property<std::vector<float>> m_autoDoubleShotCut {this, "AutoDoubleShotCut"}; + ToolHandle<IHadronicCalibrationTool> m_caloWeightTool {this, "CaloWeightTool", "H1WeightToolCSC12Generic"}; - SG::ReadHandleKey<CaloCellContainer> m_caloCellInputContainer{this,"Key_caloCellInputContainer", "AllCalo", "input vertex container key"}; - SG::WriteHandleKey<xAOD::PFOContainer> m_tauPFOOutputContainer{this,"Key_tauPFOOutputContainer", "TauShotParticleFlowObjects", "tau pfo out key"}; - + /// calo cell navigation + const CaloCell_ID* m_calo_id = nullptr; + }; #endif /* TAUSHOTFINDER_H */ - diff --git a/Reconstruction/tauRecTools/src/TauShotVariableHelpers.cxx b/Reconstruction/tauRecTools/src/TauShotVariableHelpers.cxx index 3b2ef8c1dc49c3eacaa6f04b1d7e45d8362d5d03..d2e1021f2efa20e3a2b0eab39d609772e29e2146 100644 --- a/Reconstruction/tauRecTools/src/TauShotVariableHelpers.cxx +++ b/Reconstruction/tauRecTools/src/TauShotVariableHelpers.cxx @@ -3,6 +3,9 @@ */ #ifndef XAOD_ANALYSIS + +#include "TauShotVariableHelpers.h" + /** * @brief implementation of photon shot variable calculation * @@ -11,350 +14,174 @@ * @author Stephanie Yuen <stephanie.yuen@cern.ch> */ -#include "TauShotVariableHelpers.h" +namespace TauShotVariableHelpers { -using xAOD::PFO; -using std::vector; +ANA_MSG_SOURCE(msgTauShotVariableHelpers, "TauShotVariableHelpers") -namespace TauShotVariableHelpers { - std::vector<std::vector<const CaloCell*> > getCellBlock(xAOD::PFO* shot, const CaloCell_ID* calo_id){ - std::vector<std::vector<const CaloCell*> > cellVector; - std::vector<const CaloCell*> oneEtaLayer; - int nCellsInEta = 0; - if( shot->attribute(xAOD::PFODetails::PFOAttributes::tauShots_nCellsInEta, nCellsInEta) == false) { - std::cout << "WARNING: Couldn't find nCellsInEta. Return empty cell block." << std::endl; - return cellVector; - } - int seedHash = 0; - if( shot->attribute(xAOD::PFODetails::PFOAttributes::tauShots_seedHash, seedHash) == false) { - std::cout << "WARNING: Couldn't find seed hash. Return empty cell block." << std::endl; - return cellVector; - } - for(int iCell=0;iCell<nCellsInEta;++iCell) oneEtaLayer.push_back(NULL); - // have two layers in phi - cellVector.push_back(oneEtaLayer); - cellVector.push_back(oneEtaLayer); - // get cluster from shot - const xAOD::CaloCluster* cluster = shot->cluster(0); - const CaloClusterCellLink* theCellLink = cluster->getCellLinks(); - CaloClusterCellLink::const_iterator cellItr = theCellLink->begin(); - CaloClusterCellLink::const_iterator cellItrE = theCellLink->end(); - // get seed cell from shot cluster - const CaloCell* seedCell=NULL; - for(;cellItr!=cellItrE;++cellItr){ - if((*cellItr)->caloDDE()->calo_hash()!=(unsigned) seedHash) continue; - seedCell = *cellItr; - break; - } - if(seedCell==NULL){ - std::cout << "WARNING: Couldn't find seed cell in shot cluster. Return empty cell block." << std::endl; - return cellVector; - } - - // get merged cell in phi. Keep NULL if shot is not merged across phi - const CaloCell* mergedCell = NULL; - std::vector<IdentifierHash> nextInPhi; - std::vector<IdentifierHash> prevInPhi; - calo_id->get_neighbours(seedCell->caloDDE()->calo_hash(),LArNeighbours::nextInPhi,nextInPhi); - calo_id->get_neighbours(seedCell->caloDDE()->calo_hash(),LArNeighbours::prevInPhi,prevInPhi); - for(cellItr=theCellLink->begin();cellItr!=cellItrE;++cellItr){ - std::vector<IdentifierHash>::iterator itr = nextInPhi.begin(); - for( ; itr!=nextInPhi.end(); ++itr ){ - if((*cellItr)->caloDDE()->calo_hash() != (*itr)) continue; - mergedCell = (*cellItr); - break; - } - if(mergedCell!=NULL) break; - itr = prevInPhi.begin(); - for( ; itr!=prevInPhi.end(); ++itr ){ - if((*cellItr)->caloDDE()->calo_hash() != (*itr)) continue; - mergedCell = (*cellItr); - break; - } - if(mergedCell!=NULL) break; - } - // store cells in the eta layer, which contains the seed cell - int nCellsFromSeed = 1; - const CaloCell* lastCell = seedCell; - cellVector.at(0).at(nCellsInEta/2) = seedCell; // store seed cell - std::vector<IdentifierHash> next; - while(lastCell!=NULL && nCellsFromSeed<nCellsInEta/2+1){ - calo_id->get_neighbours(lastCell->caloDDE()->calo_hash(),LArNeighbours::nextInEta,next); - lastCell = NULL; - for(cellItr=theCellLink->begin();cellItr!=cellItrE;++cellItr){ - std::vector<IdentifierHash>::iterator itr = next.begin(); - for( ; itr!=next.end(); ++itr ){ - if((*cellItr)->caloDDE()->calo_hash() != (*itr)) continue; - cellVector.at(0).at(nCellsInEta/2+nCellsFromSeed) = (*cellItr); - lastCell = (*cellItr); - } - } - nCellsFromSeed++; - } - nCellsFromSeed = 1; - lastCell = seedCell; - while(lastCell!=NULL && nCellsFromSeed<nCellsInEta/2+1){ - calo_id->get_neighbours(lastCell->caloDDE()->calo_hash(),LArNeighbours::prevInEta,next); - lastCell = NULL; - for(cellItr=theCellLink->begin();cellItr!=cellItrE;++cellItr){ - std::vector<IdentifierHash>::iterator itr = next.begin(); - for( ; itr!=next.end(); ++itr ){ - if((*cellItr)->caloDDE()->calo_hash() != (*itr)) continue; - cellVector.at(0).at(nCellsInEta/2-nCellsFromSeed) = (*cellItr); - lastCell = (*cellItr); - } - } - nCellsFromSeed++; - } - // store cells in the eta layer, which contains the merged cell - int nCellsFromMerged = 1; - lastCell = mergedCell; // is NULL if shot is not merged - cellVector.at(1).at(nCellsInEta/2) = mergedCell; // store merged cell - while(lastCell!=NULL && nCellsFromMerged<nCellsInEta/2+1){ - calo_id->get_neighbours(lastCell->caloDDE()->calo_hash(),LArNeighbours::nextInEta,next); - lastCell = NULL; - for(cellItr=theCellLink->begin();cellItr!=cellItrE;++cellItr){ - std::vector<IdentifierHash>::iterator itr = next.begin(); - for( ; itr!=next.end(); ++itr ){ - if((*cellItr)->caloDDE()->calo_hash() != (*itr)) continue; - cellVector.at(1).at(nCellsInEta/2+nCellsFromMerged) = (*cellItr); - lastCell = (*cellItr); - } - } - nCellsFromMerged++; - } - nCellsFromMerged = 1; - lastCell = mergedCell; - while(lastCell!=NULL && nCellsFromMerged<nCellsInEta/2+1){ - calo_id->get_neighbours(lastCell->caloDDE()->calo_hash(),LArNeighbours::prevInEta,next); - lastCell = NULL; - for(cellItr=theCellLink->begin();cellItr!=cellItrE;++cellItr){ - std::vector<IdentifierHash>::iterator itr = next.begin(); - for( ; itr!=next.end(); ++itr ){ - if((*cellItr)->caloDDE()->calo_hash() != (*itr)) continue; - cellVector.at(1).at(nCellsInEta/2-nCellsFromMerged) = (*cellItr); - lastCell = (*cellItr); - } - } - nCellsFromMerged++; - } - return cellVector; - - } +const CaloCell* getNeighbour(const CaloCell* cell, + const CaloClusterCellLink& links, + const CaloCell_ID* calo_id, + const LArNeighbours::neighbourOption& option) { + const CaloCell* neigCell = nullptr; + std::vector<IdentifierHash> neighHashes; + calo_id->get_neighbours(cell->caloDDE()->calo_hash(), option, neighHashes); + + // Loop all the cells, and find the required neighbour cell + for (const auto& cell : links) { + const IdentifierHash& cellHash = cell->caloDDE()->calo_hash(); - float mean_eta(vector<vector<const CaloCell*> > shotCells, const ToolHandle<IHadronicCalibrationTool>& caloWeightTool){ - float sumEta=0.; - float sumWeight=0.; - vector<vector<const CaloCell*> >::iterator itrPhi = shotCells.begin(); - for( ; itrPhi!=shotCells.end(); ++itrPhi ){ - vector<const CaloCell*>::iterator itrEta = itrPhi->begin(); - for( ; itrEta!=itrPhi->end(); ++itrEta ){ - if((*itrEta) == NULL) continue; - sumWeight += (*itrEta)->pt()*caloWeightTool->wtCell(*itrEta); - sumEta += (*itrEta)->pt()*caloWeightTool->wtCell(*itrEta) * (*itrEta)->eta(); - } - } - if(sumWeight<=0.) return -99999.; - return sumEta/sumWeight; + // Check whether the cell is a neighbour cell + for (const IdentifierHash& neighHash : neighHashes) { + if (cellHash == neighHash) { + neigCell = cell; + return neigCell; + } } + } - float mean_pt(vector<vector<const CaloCell*> > shotCells, const ToolHandle<IHadronicCalibrationTool>& caloWeightTool){ - float sumPt=0.; - int nCells = 0; - vector<vector<const CaloCell*> >::iterator itrPhi = shotCells.begin(); - for( ; itrPhi!=shotCells.end(); ++itrPhi ){ - vector<const CaloCell*>::iterator itrEta = itrPhi->begin(); - for( ; itrEta!=itrPhi->end(); ++itrEta ){ - if((*itrEta) == NULL) continue; - sumPt += (*itrEta)->pt()*caloWeightTool->wtCell(*itrEta); - nCells ++; - } - } - if(nCells==0) return -99999.; - return sumPt/nCells; - } + return neigCell; +} - float ptWindow(vector<vector<const CaloCell*> > shotCells, int windowSize, const ToolHandle<IHadronicCalibrationTool>& caloWeightTool){ - // window size should be odd and noti be larger than eta window of shotCells - int nCells_eta = shotCells.at(0).size(); - int seedIndex = nCells_eta/2; - if( windowSize%2!=1 ) return 0.; - if( windowSize > nCells_eta) return 0.; - float ptWindow = 0.; - for(int iCell = 0; iCell != nCells_eta; ++iCell ){ - if(std::abs(iCell-seedIndex)>windowSize/2) continue; - if(shotCells.at(0).at(iCell) != NULL) ptWindow+=shotCells.at(0).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(0).at(iCell)); - if(shotCells.at(1).at(iCell) != NULL) ptWindow+=shotCells.at(1).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(1).at(iCell)); - } - return ptWindow; - } - float ws5(vector<vector<const CaloCell*> > shotCells, const ToolHandle<IHadronicCalibrationTool>& caloWeightTool){ - int nCells_eta = shotCells.at(0).size(); - int seedIndex = nCells_eta/2; - float sumWeight=0.; - float sumDev2=0.; - vector<vector<const CaloCell*> >::iterator itrPhi = shotCells.begin(); - for( ; itrPhi!=shotCells.end(); ++itrPhi ){ - for(unsigned iCell = 0; iCell != itrPhi->size(); ++iCell ){ - if(itrPhi->at(iCell) == NULL) continue; - sumWeight += itrPhi->at(iCell)->pt()*caloWeightTool->wtCell(itrPhi->at(iCell)); - sumDev2 += itrPhi->at(iCell)->pt()*caloWeightTool->wtCell(itrPhi->at(iCell)) * pow(iCell-seedIndex,2); - } - } - if(sumWeight<=0. || sumDev2 <0.) return -99999.; - return sqrt( sumDev2 / sumWeight ); +std::vector<std::vector<const CaloCell*> > getCellBlock(const xAOD::PFO& shot, const CaloCell_ID* calo_id) { + using namespace TauShotVariableHelpers::msgTauShotVariableHelpers; + + std::vector<std::vector<const CaloCell*>> cellBlock; + + int etaSize = 0; + if (shot.attribute(xAOD::PFODetails::PFOAttributes::tauShots_nCellsInEta, etaSize) == false) { + ANA_MSG_WARNING("Couldn't find nCellsInEta. Return empty cell block."); + return cellBlock; + } + + int seedHash = 0; + if (shot.attribute(xAOD::PFODetails::PFOAttributes::tauShots_seedHash, seedHash) == false) { + ANA_MSG_WARNING("Couldn't find seed hash. Return empty cell block."); + return cellBlock; + } + + // Initialize the cell block + std::vector<const CaloCell*> etaLayer; + for (int etaIndex = 0; etaIndex < etaSize; ++ etaIndex) { + etaLayer.push_back(nullptr); + } + int phiSize = 2; + for (int phiIndex = 0; phiIndex < phiSize; ++phiIndex) { + cellBlock.push_back(etaLayer); + } + + // Get seed cell from shot cluster + const xAOD::CaloCluster* cluster = shot.cluster(0); + const CaloClusterCellLink* cellLinks = cluster->getCellLinks(); + + const CaloCell* seedCell = nullptr; + for (const auto& cell : *cellLinks) { + if (cell->caloDDE()->calo_hash() != (unsigned) seedHash) continue; + seedCell = cell; + break; + } + if (seedCell==nullptr) { + ANA_MSG_WARNING("Couldn't find seed cell in shot cluster. Return empty cell block."); + return cellBlock; + } + int mediumEtaIndex = etaSize/2; + cellBlock.at(0).at(mediumEtaIndex) = seedCell; + + // Obtain the neighbour cells in the eta direction + // -- Next in eta + const CaloCell* lastCell = seedCell; + int maxDepth = etaSize - mediumEtaIndex - 1; + for (int depth = 1; depth < maxDepth + 1; ++depth) { + lastCell = getNeighbour(lastCell, *cellLinks, calo_id, LArNeighbours::nextInEta); + if (lastCell != nullptr) { + cellBlock.at(0).at(mediumEtaIndex + depth) = lastCell; } - - float sdevEta_WRTmean(vector<vector<const CaloCell*> > shotCells, const ToolHandle<IHadronicCalibrationTool>& caloWeightTool){ - float mean = mean_eta(shotCells, caloWeightTool); - float sumWeight=0.; - float sumDev2=0.; - vector<vector<const CaloCell*> >::iterator itrPhi = shotCells.begin(); - for( ; itrPhi!=shotCells.end(); ++itrPhi ){ - vector<const CaloCell*>::iterator itrEta = itrPhi->begin(); - for( ; itrEta!=itrPhi->end(); ++itrEta ){ - if((*itrEta) == NULL) continue; - sumWeight += (*itrEta)->pt()*caloWeightTool->wtCell(*itrEta); - sumDev2 += (*itrEta)->pt()*caloWeightTool->wtCell(*itrEta) * pow((*itrEta)->eta() - mean,2); - } - } - if(sumWeight<=0. || sumDev2 <0.) return -99999.; - return sqrt( sumDev2 / sumWeight ); + else { + break; } - - float sdevEta_WRTmode(vector<vector<const CaloCell*> > shotCells, const ToolHandle<IHadronicCalibrationTool>& caloWeightTool){ - int nCells_eta = shotCells.at(0).size(); - int seedIndex = nCells_eta/2; - float mode = shotCells.at(0).at(seedIndex)->eta(); - float sumWeight=0.; - float sumDev2=0.; - vector<vector<const CaloCell*> >::iterator itrPhi = shotCells.begin(); - for( ; itrPhi!=shotCells.end(); ++itrPhi ){ - vector<const CaloCell*>::iterator itrEta = itrPhi->begin(); - for( ; itrEta!=itrPhi->end(); ++itrEta ){ - if((*itrEta) == NULL) continue; - sumWeight += (*itrEta)->pt()*caloWeightTool->wtCell(*itrEta); - sumDev2 += (*itrEta)->pt()*caloWeightTool->wtCell(*itrEta) * pow((*itrEta)->eta() - mode,2); - } - } - if(sumWeight<=0. || sumDev2 <0.) return -99999.; - return sqrt( sumDev2 / sumWeight ); + } + + // -- Previous in eta + lastCell = seedCell; + for (int depth = 1; depth < maxDepth + 1; ++depth) { + lastCell = getNeighbour(lastCell, *cellLinks, calo_id, LArNeighbours::prevInEta); + if (lastCell != nullptr) { + cellBlock.at(0).at(mediumEtaIndex - depth) = lastCell; } - - float sdevPt(vector<vector<const CaloCell*> > shotCells, const ToolHandle<IHadronicCalibrationTool>& caloWeightTool){ - float mean = mean_pt(shotCells, caloWeightTool); - float sumWeight=0.; - float sumDev2=0.; - vector<vector<const CaloCell*> >::iterator itrPhi = shotCells.begin(); - for( ; itrPhi!=shotCells.end(); ++itrPhi ){ - vector<const CaloCell*>::iterator itrEta = itrPhi->begin(); - for( ; itrEta!=itrPhi->end(); ++itrEta ){ - if((*itrEta) == NULL) continue; - sumWeight += (*itrEta)->pt()*caloWeightTool->wtCell(*itrEta); - sumDev2 += pow((*itrEta)->pt()*caloWeightTool->wtCell(*itrEta) - mean,2); - } - } - if(sumWeight<=0. || sumDev2 <0.) return -99999.; - return sqrt(sumDev2)/sumWeight; + else { + break; } - - float deltaPt12_min(vector<vector<const CaloCell*> > shotCells, const ToolHandle<IHadronicCalibrationTool>& caloWeightTool){ - int nCells_eta = shotCells.at(0).size(); - int seedIndex = nCells_eta/2; - bool haveLeft = false; - bool haveRight = false; - float deltaPt_left = 0.; - float deltaPt_right = 0.; - if(shotCells.at(0).at(seedIndex-1)!=NULL && shotCells.at(0).at(seedIndex-2)!=NULL){ - haveLeft = true; - deltaPt_left = shotCells.at(0).at(seedIndex-1)->pt()*caloWeightTool->wtCell(shotCells.at(0).at(seedIndex-1)) - -shotCells.at(0).at(seedIndex-2)->pt()*caloWeightTool->wtCell(shotCells.at(0).at(seedIndex-2)); - if(shotCells.at(1).at(seedIndex-1)!=NULL && shotCells.at(1).at(seedIndex-2)!=NULL){ - deltaPt_left += shotCells.at(1).at(seedIndex-1)->pt()*caloWeightTool->wtCell(shotCells.at(1).at(seedIndex-1)) - -shotCells.at(1).at(seedIndex-2)->pt()*caloWeightTool->wtCell(shotCells.at(1).at(seedIndex-2)); - } - } - if(shotCells.at(0).at(seedIndex+1)!=NULL && shotCells.at(0).at(seedIndex+2)!=NULL){ - haveRight = true; - deltaPt_right = shotCells.at(0).at(seedIndex+1)->pt()*caloWeightTool->wtCell(shotCells.at(0).at(seedIndex+1)) - -shotCells.at(0).at(seedIndex+2)->pt()*caloWeightTool->wtCell(shotCells.at(0).at(seedIndex+2)); - if(shotCells.at(1).at(seedIndex+1)!=NULL && shotCells.at(1).at(seedIndex+2)!=NULL){ - deltaPt_right += shotCells.at(1).at(seedIndex+1)->pt()*caloWeightTool->wtCell(shotCells.at(1).at(seedIndex+1)) - -shotCells.at(1).at(seedIndex+2)->pt()*caloWeightTool->wtCell(shotCells.at(1).at(seedIndex+1)); - } - } - if(haveLeft && haveRight) return fmin(deltaPt_left,deltaPt_right); - if(haveLeft) return deltaPt_left; - if(haveRight) return deltaPt_right; - else return -1.; + } + + // Merged cell + const CaloCell* mergedCell = getNeighbour(seedCell, *cellLinks, calo_id, LArNeighbours::nextInPhi); + if (mergedCell == nullptr) { + mergedCell = getNeighbour(seedCell, *cellLinks, calo_id, LArNeighbours::prevInPhi); + } + + if (mergedCell != nullptr) { + cellBlock.at(1).at(mediumEtaIndex) = mergedCell; + + // Obtain the neighbour cells in the eta direction + // -- Next in eta + lastCell = mergedCell; + for (int depth = 1; depth < maxDepth + 1; ++depth) { + lastCell = getNeighbour(lastCell, *cellLinks, calo_id, LArNeighbours::nextInEta); + if (lastCell != nullptr) { + cellBlock.at(1).at(mediumEtaIndex + depth) = lastCell; + } + else { + break; + } } + + // -- Previous in eta + lastCell = mergedCell; + for (int depth = 1; depth < maxDepth + 1; ++depth) { + lastCell = getNeighbour(lastCell, *cellLinks, calo_id, LArNeighbours::prevInEta); + if (lastCell != nullptr) { + cellBlock.at(1).at(mediumEtaIndex - depth) = lastCell; + } + else { + break; + } + } + } // End of mergedCell != nullptr + return cellBlock; +} - float Fside(vector<vector<const CaloCell*> > shotCells, int largerWindow, int smallerWindow, const ToolHandle<IHadronicCalibrationTool>& caloWeightTool){ - // window sizes should be odd and windows should be not larger than eta window of shotCells - int nCells_eta = shotCells.at(0).size(); - int seedIndex = nCells_eta/2; - if( largerWindow%2!=1 || smallerWindow%2!=1) return 0.; - if( largerWindow <= smallerWindow) return 0.; - if( largerWindow > nCells_eta) return 0.; - float pt_largerWindow = 0.; - float pt_smallerWindow = 0.; - for(int iCell = 0; iCell != nCells_eta; ++iCell ){ - if(std::abs(iCell-seedIndex)>largerWindow/2) continue; - if(shotCells.at(0).at(iCell)!=NULL) pt_largerWindow+=shotCells.at(0).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(0).at(iCell)); - if(shotCells.at(1).at(iCell)!=NULL) pt_largerWindow+=shotCells.at(1).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(1).at(iCell)); - if(std::abs(iCell-seedIndex)>smallerWindow/2) continue; - if(shotCells.at(0).at(iCell)!=NULL) pt_smallerWindow+=shotCells.at(0).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(0).at(iCell)); - if(shotCells.at(1).at(iCell)!=NULL) pt_smallerWindow+=shotCells.at(1).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(1).at(iCell)); - } - if(pt_smallerWindow==0.) return -99999.; - return (pt_largerWindow-pt_smallerWindow)/pt_smallerWindow; - } - float fracSide(vector<vector<const CaloCell*> > shotCells, int largerWindow, int smallerWindow, const ToolHandle<IHadronicCalibrationTool>& caloWeightTool){ - // window sizes should be odd and windows should be not larger than eta window of shotCells - int nCells_eta = shotCells.at(0).size(); - int seedIndex = nCells_eta/2; - if( largerWindow%2!=1 || smallerWindow%2!=1) return 0.; - if( largerWindow <= smallerWindow) return 0.; - if( largerWindow > nCells_eta) return 0.; - float pt_largerWindow = 0.; - float pt_smallerWindow = 0.; - for(int iCell = 0; iCell != nCells_eta; ++iCell ){ - if(std::abs(iCell-seedIndex)>largerWindow/2) continue; - if(shotCells.at(0).at(iCell)!=NULL) pt_largerWindow+=shotCells.at(0).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(0).at(iCell)); - if(shotCells.at(1).at(iCell)!=NULL) pt_largerWindow+=shotCells.at(1).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(1).at(iCell)); - if(std::abs(iCell-seedIndex)>smallerWindow/2) continue; - if(shotCells.at(0).at(iCell)!=NULL) pt_smallerWindow+=shotCells.at(0).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(0).at(iCell)); - if(shotCells.at(1).at(iCell)!=NULL) pt_smallerWindow+=shotCells.at(1).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(1).at(iCell)); - } - if(pt_largerWindow==0.) return -99999.; - return (pt_largerWindow-pt_smallerWindow)/pt_largerWindow; - } - float ptWindowFrac(vector<vector<const CaloCell*> > shotCells, int largerWindow, int smallerWindow, const ToolHandle<IHadronicCalibrationTool>& caloWeightTool){ - // window sizes should be odd and windows should be not larger than eta window of shotCells - int nCells_eta = shotCells.at(0).size(); - int seedIndex = nCells_eta/2; - if( largerWindow%2!=1 || smallerWindow%2!=1) return 0.; - if( largerWindow <= smallerWindow) return 0.; - if( largerWindow > nCells_eta) return 0.; - float pt_largerWindow = 0.; - float pt_smallerWindow = 0.; - for(int iCell = 0; iCell != nCells_eta; ++iCell ){ - if(std::abs(iCell-seedIndex)>largerWindow/2) continue; - if(shotCells.at(0).at(iCell)!=NULL) pt_largerWindow+=shotCells.at(0).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(0).at(iCell)); - if(shotCells.at(1).at(iCell)!=NULL) pt_largerWindow+=shotCells.at(1).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(1).at(iCell)); - if(std::abs(iCell-seedIndex)>smallerWindow/2) continue; - if(shotCells.at(0).at(iCell)!=NULL) pt_smallerWindow+=shotCells.at(0).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(0).at(iCell)); - if(shotCells.at(1).at(iCell)!=NULL) pt_smallerWindow+=shotCells.at(1).at(iCell)->pt()*caloWeightTool->wtCell(shotCells.at(1).at(iCell)); - } - if(pt_largerWindow==0.) return -99999.; - return pt_smallerWindow/pt_largerWindow; +float ptWindow(const std::vector<std::vector<const CaloCell*>>& shotCells, + int windowSize, + const ToolHandle<IHadronicCalibrationTool>& caloWeightTool) { + // window size should be odd and smaller than eta window of shotCells + if (windowSize%2 != 1) return 0.; + + int etaSize = shotCells.at(0).size(); + if (windowSize > etaSize) return 0.; + + int seedIndex = etaSize/2; + int phiSize = shotCells.size(); + + float ptWindow = 0.; + for (int etaIndex = 0; etaIndex != etaSize; ++etaIndex) { + if (std::abs(etaIndex-seedIndex) > windowSize/2) continue; + + for (int phiIndex = 0; phiIndex != phiSize; ++phiIndex) { + const CaloCell* cell = shotCells.at(phiIndex).at(etaIndex); + if (cell != nullptr) { + ptWindow += cell->pt() * caloWeightTool->wtCell(cell); + } } + } + + return ptWindow; } +} // End of namespace TauShotVariableHelpers + #endif diff --git a/Reconstruction/tauRecTools/src/TauShotVariableHelpers.h b/Reconstruction/tauRecTools/src/TauShotVariableHelpers.h index fdc21ce85d0941f815d48d1e9de3e75c2aaa44ca..8e5f867fa6d222cb949b53ba8e38097c32a39aab 100644 --- a/Reconstruction/tauRecTools/src/TauShotVariableHelpers.h +++ b/Reconstruction/tauRecTools/src/TauShotVariableHelpers.h @@ -14,65 +14,33 @@ #define TAUSHOTVARIABLEHELPERS_H #include "xAODPFlow/PFO.h" -#include "GaudiKernel/ToolHandle.h" #include "CaloInterface/IHadronicCalibrationTool.h" +#include "CaloIdentifier/LArNeighbours.h" -namespace TauShotVariableHelpers { - - /** @brief get cell block with (currently) 5x2 cells in correct order for variable calculations */ - std::vector<std::vector<const CaloCell*> > getCellBlock(xAOD::PFO* shot, - const CaloCell_ID* calo_id); - - /** @brief mean eta, used by other functions */ - float mean_eta(std::vector<std::vector<const CaloCell*> > /*shotCells*/, - const ToolHandle<IHadronicCalibrationTool>& /*caloWeightTool*/); - - /** @brief mean pt, used by other functions */ - float mean_pt(std::vector<std::vector<const CaloCell*> > /*shotCells*/, - const ToolHandle<IHadronicCalibrationTool>& /*caloWeightTool*/); - - /** @brief pt in windows */ - float ptWindow(std::vector<std::vector<const CaloCell*> > /*shotCells*/, - int /*windowSize*/, - const ToolHandle<IHadronicCalibrationTool>& /*caloWeightTool*/); - - /** @brief ws5 variable (egamma) */ - float ws5(std::vector<std::vector<const CaloCell*> > /*shotCells*/, - const ToolHandle<IHadronicCalibrationTool>& /*caloWeightTool*/); - - /** @brief standard deviation in eta WRT mean */ - float sdevEta_WRTmean(std::vector<std::vector<const CaloCell*> > /*shotCells*/, - const ToolHandle<IHadronicCalibrationTool>& /*caloWeightTool*/); +#include "AsgMessaging/MessageCheck.h" +#include "GaudiKernel/ToolHandle.h" - /** @brief standard deviation in eta WRT mode */ - float sdevEta_WRTmode(std::vector<std::vector<const CaloCell*> > /*shotCells*/, - const ToolHandle<IHadronicCalibrationTool>& /*caloWeightTool*/); +class CaloCell_ID; - /** @brief normalized standard deviation in pt */ - float sdevPt(std::vector<std::vector<const CaloCell*> > /*shotCells*/, - const ToolHandle<IHadronicCalibrationTool>& /*caloWeightTool*/); +namespace TauShotVariableHelpers { + + ANA_MSG_HEADER(msgHelperFunction) - /** @brief pT diff b/w lead and sub-lead cell */ - float deltaPt12_min(std::vector<std::vector<const CaloCell*> > /*shotCells*/, - const ToolHandle<IHadronicCalibrationTool>& /*caloWeightTool*/); + /** @brief Obtain the required neighbour cell */ + const CaloCell* getNeighbour(const CaloCell* cell, + const CaloClusterCellLink& links, + const CaloCell_ID* calo_id, + const LArNeighbours::neighbourOption& option); - /** @brief Fside variable (egamma) */ - float Fside(std::vector<std::vector<const CaloCell*> > /*shotCells*/, - int /*largerWindow*/, - int /*smallerWindow*/, - const ToolHandle<IHadronicCalibrationTool>& /*caloWeightTool*/); + /** @brief Get cell block with (currently) 2 x 5 cells in correct order for variable calculations */ + std::vector<std::vector<const CaloCell*>> getCellBlock(const xAOD::PFO& shot, + const CaloCell_ID* calo_id); - /** @brief similar than Fside but in unit of eta instead of number of cells */ - float fracSide(std::vector<std::vector<const CaloCell*> > /*shotCells*/, - int /*largerWindow*/, - int /*smallerWindow*/, - ToolHandle<IHadronicCalibrationTool>& /*caloWeightTool*/); + /** @brief pt in a window of (currently) 2 x windowSize cells */ + float ptWindow(const std::vector<std::vector<const CaloCell*>>& shotCells, + int windowSize, + const ToolHandle<IHadronicCalibrationTool>& caloWeightTool); - /** @brief pt window fraction */ - float ptWindowFrac(std::vector<std::vector<const CaloCell*> > /*shotCells*/, - int /*largerWindow*/, - int /*smallerWindow*/, - const ToolHandle<IHadronicCalibrationTool>& /*caloWeightTool*/); } #endif // TAUSHOTVARIABLEHELPERS_H diff --git a/Reconstruction/tauRecTools/tauRecTools/TauCalibrateLC.h b/Reconstruction/tauRecTools/tauRecTools/TauCalibrateLC.h index 3c28f8472a3678ac97a990c4fbf3b2793de31d93..4b3b441498ddb80440ad5067c23bbfa48ab26258 100644 --- a/Reconstruction/tauRecTools/tauRecTools/TauCalibrateLC.h +++ b/Reconstruction/tauRecTools/tauRecTools/TauCalibrateLC.h @@ -51,7 +51,6 @@ class TauCalibrateLC : public TauRecToolBase { std::string m_calibrationFile; //!< energy calibration file bool m_doEnergyCorr; //!< switch for energy correction bool m_doPtResponse; //!< switch for pt response vs pt, if false, use E response vs E - bool m_countOnlyPileupVertices; //!< switch for counting vertices by nTracks or VxType::PileUp bool m_doAxisCorr; //!< switch for eta correction bool m_usePantauAxis; //!< switch for overwriting calo (eta,phi) with Pantau (eta,phi) bool m_isCaloOnly; //!< switch for CaloOnly corrections diff --git a/Reconstruction/tauRecTools/tauRecTools/TauPi0ScoreCalculator.h b/Reconstruction/tauRecTools/tauRecTools/TauPi0ScoreCalculator.h index ba8b377e9a6fba52417b92dfe37cc0160df8533f..b57c013c456aedaa1b7a7e4a78db2ecd12817317 100644 --- a/Reconstruction/tauRecTools/tauRecTools/TauPi0ScoreCalculator.h +++ b/Reconstruction/tauRecTools/tauRecTools/TauPi0ScoreCalculator.h @@ -5,12 +5,13 @@ #ifndef TAUREC_TAUPI0SCORECALCULATOR_H #define TAUREC_TAUPI0SCORECALCULATOR_H -#include <string> -#include <map> #include "tauRecTools/TauRecToolBase.h" -#include "xAODPFlow/PFO.h" #include "tauRecTools/BDTHelper.h" +#include "xAODPFlow/PFO.h" + +#include <string> + /** * @brief Selectes pi0Candidates (Pi0 Finder). * @@ -21,20 +22,24 @@ */ class TauPi0ScoreCalculator : public TauRecToolBase { + public: - TauPi0ScoreCalculator(const std::string& name); - ASG_TOOL_CLASS2(TauPi0ScoreCalculator, TauRecToolBase, ITauToolBase) - virtual ~TauPi0ScoreCalculator(); - virtual StatusCode initialize() override; - virtual StatusCode executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer) const override; + ASG_TOOL_CLASS2(TauPi0ScoreCalculator, TauRecToolBase, ITauToolBase) + + TauPi0ScoreCalculator(const std::string& name); + virtual ~TauPi0ScoreCalculator() = default; + + virtual StatusCode initialize() override; + virtual StatusCode executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer) const override; private: - /** @brief function used to calculate BDT score */ - float calculateScore(const xAOD::PFO* neutralPFO) const; + + /** @brief Calculate pi0 BDT score */ + float calculateScore(const xAOD::PFO* neutralPFO) const; - std::string m_weightfile; - std::unique_ptr<tauRecTools::BDTHelper> m_mvaBDT; + std::string m_weightfile = ""; + std::unique_ptr<tauRecTools::BDTHelper> m_mvaBDT = nullptr; }; #endif /* TAUPI0SCORECALCULATOR_H */ diff --git a/Reconstruction/tauRecTools/tauRecTools/TauPi0Selector.h b/Reconstruction/tauRecTools/tauRecTools/TauPi0Selector.h index 16506a71f5ff79b3a3ddd5793e51e152b648b367..79c12f6eccf0a62fcd2ed313a1e23b449c622b29 100644 --- a/Reconstruction/tauRecTools/tauRecTools/TauPi0Selector.h +++ b/Reconstruction/tauRecTools/tauRecTools/TauPi0Selector.h @@ -5,11 +5,12 @@ #ifndef TAUREC_TAUPI0SELECTOR_H #define TAUREC_TAUPI0SELECTOR_H -#include <string> #include "tauRecTools/TauRecToolBase.h" +#include <string> + /** - * @brief Selects pi0s + * @brief Apply Et and BDT score cut to pi0s * * @author Will Davey <will.davey@cern.ch> * @author Benedict Winter <benedict.tobias.winter@cern.ch> @@ -17,21 +18,23 @@ */ class TauPi0Selector : public TauRecToolBase { + public: - TauPi0Selector(const std::string& name); - ASG_TOOL_CLASS2(TauPi0Selector, TauRecToolBase, ITauToolBase) - virtual ~TauPi0Selector(); - virtual StatusCode executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer) const override; + + ASG_TOOL_CLASS2(TauPi0Selector, TauRecToolBase, ITauToolBase) + + TauPi0Selector(const std::string& name); + virtual ~TauPi0Selector() = default; + + virtual StatusCode executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer) const override; private: + /** @brief Get eta bin of Pi0Cluster */ + int getEtaBin(double eta) const; - std::vector<float> m_clusterEtCut; - std::vector<float> m_clusterBDTCut_1prong; - std::vector<float> m_clusterBDTCut_mprong; - /** @brief function used to get eta bin of Pi0Cluster */ - int getPi0Cluster_etaBin(double Pi0Cluster_eta) const; - /** @brief function used to calculate the visible tau 4 momentum */ - TLorentzVector getP4(const xAOD::TauJet& tauJet) const; + std::vector<double> m_clusterEtCut; + std::vector<double> m_clusterBDTCut_1prong; + std::vector<double> m_clusterBDTCut_mprong; }; #endif /* TAUPI0SELECTOR_H */ diff --git a/Simulation/Digitization/python/DigiAlgConfig.py b/Simulation/Digitization/python/DigiAlgConfig.py index f40254bc5529268fb7534cff9f162e4e1b90bd0b..73cd7cb4c84f179d48b76743037897e11f817b52 100644 --- a/Simulation/Digitization/python/DigiAlgConfig.py +++ b/Simulation/Digitization/python/DigiAlgConfig.py @@ -118,8 +118,6 @@ def getStandardInDetPileUpTools(): PileUpToolsList += [ "PixelLightDigitizationTool" ] elif 'doSmearedPixelDigi' in digitizationFlags.experimentalDigi(): PileUpToolsList += [ "PixelSmearedDigitizationTool" ] - elif digitizationFlags.doRadiationDamage(): - PileUpToolsList += [ "PixelRadDamDigitizationTool" ] else: PileUpToolsList += [ "PixelDigitizationTool" ] if DetFlags.digitize.SCT_on(): diff --git a/Simulation/Digitization/python/DigitizationConfigFlags.py b/Simulation/Digitization/python/DigitizationConfigFlags.py index feab44fe3826edfb64785e40c34bcd0c740163b5..8c37d85be85293a14a35850404d760ccd7737010 100644 --- a/Simulation/Digitization/python/DigitizationConfigFlags.py +++ b/Simulation/Digitization/python/DigitizationConfigFlags.py @@ -95,6 +95,9 @@ def createDigitizationCfgFlags(): # Override the HIT file Run Number with one from a data run flags.addFlag("Digitization.DataRunNumber", -1) + # Run radiation damage simulation + flags.addFlag("Digitization.DoRadiationDamage", False) + # for PileUp digitization # Beam Halo input collections flags.addFlag("Digitization.PU.BeamHaloInputCols", []) diff --git a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fullSim_fullDigi.sh b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fullSim_fullDigi.sh index be1247ee60ce3ececb9fa0d026436f0800900c10..42d635c0e31b8cce89ccc6e9346824e73c7bfe8f 100755 --- a/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fullSim_fullDigi.sh +++ b/Simulation/FastSimulation/FastChainPileup/test/test_ttFC_reco_newTracking_PseudoT_fullSim_fullDigi.sh @@ -54,7 +54,7 @@ FastChain_tf.py --maxEvents 500 \ --conditionsTag OFLCOND-RUN12-SDR-31 \ --inputRDOFile RDO_pileup_fullsim_fulldigi.pool.root \ --outputAODFile AOD_newTracking_pseudoTracking_fullSim_fullDigi.pool.root \ - --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doPseudoTracking.set_Value_and_Lock(True);InDetFlags.doNewTracking.set_Value_and_Lock(True);rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);InDetFlags.doTrackSegmentsTRT.set_Value_and_Lock(True);" \ + --preExec "RAWtoESD:from InDetRecExample.InDetJobProperties import InDetFlags;InDetFlags.doPseudoTracking.set_Value_and_Lock(True);InDetFlags.doNewTracking.set_Value_and_Lock(True);rec.doTrigger.set_Value_and_Lock(False);recAlgs.doTrigger.set_Value_and_Lock(False);" \ --outputNTUP_PHYSVALFile 'physval-newTracking_PseudoT_fullSim_fullDigi.root' \ --validationFlags 'doInDet' \ --valid 'True' \ diff --git a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfig.py b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfig.py index 185d371fab45174201296a17a1b542f6fc281a15..33788a8cb7cef0949642a78a061d507f1b48fd09 100644 --- a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfig.py +++ b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfig.py @@ -68,7 +68,9 @@ def getGenParticleFilters(): from AthenaCommon.BeamFlags import jobproperties if jobproperties.Beam.beamType() != "cosmics": genParticleFilterList += ['ISF_ParticlePositionFilterDynamic'] - if (not simFlags.CavernBG.statusOn or simFlags.CavernBG.get_Value() == 'Signal') and\ + from AthenaCommon.DetFlags import DetFlags + if not (DetFlags.geometry.AFP_on() or DetFlags.geometry.ALFA_on() or DetFlags.geometry.FwdRegion_on()) and\ + (not simFlags.CavernBG.statusOn or simFlags.CavernBG.get_Value() == 'Signal') and\ not (simFlags.SimulateCavern.statusOn and simFlags.SimulateCavern.get_Value()): genParticleFilterList += ['ISF_EtaPhiFilter'] genParticleFilterList += ['ISF_GenParticleInteractingFilter'] diff --git a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py index d791a274b2a67b59407023f2961f7fef038db655..8904278b810a94f59bd3f512790392ea95ad54e4 100644 --- a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py +++ b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py @@ -39,8 +39,11 @@ def GenParticleFiltersToolCfg(ConfigFlags): if ConfigFlags.Beam.Type != "cosmics": acc = ParticlePositionFilterDynamicCfg(ConfigFlags) genParticleFilterList += [result.popToolsAndMerge(acc)] - if ((ConfigFlags.Sim.CavernBG in (False, "Signal")) and - (not ConfigFlags.Detector.SimulateCavern)): + if not (ConfigFlags.Detector.SimulateAFP or + ConfigFlags.Detector.SimulateALFA or + ConfigFlags.Detector.SimulateFwdRegion) and \ + ((ConfigFlags.Sim.CavernBG in (False, "Signal")) and + (not ConfigFlags.Detector.SimulateCavern)): acc = EtaPhiFilterCfg(ConfigFlags) genParticleFilterList += [result.popToolsAndMerge(acc)] acc = GenParticleInteractingFilterCfg(ConfigFlags) diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasRecoTools/CMakeLists.txt b/Simulation/ISF/ISF_Fatras/ISF_FatrasRecoTools/CMakeLists.txt index baad18866a2febca7e74d90ed235b02063bc3db5..683b6dab65c03776d7998559752a65f180f88db4 100644 --- a/Simulation/ISF/ISF_Fatras/ISF_FatrasRecoTools/CMakeLists.txt +++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasRecoTools/CMakeLists.txt @@ -1,50 +1,10 @@ -################################################################################ -# Package: ISF_FatrasRecoTools -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( ISF_FatrasRecoTools ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - DetectorDescription/GeoPrimitives - DetectorDescription/Identifier - Simulation/ISF/ISF_Fatras/ISF_FatrasEvent - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkSpacePoint - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkTruthTracks/TrkTruthTrackInterfaces - PRIVATE - DetectorDescription/AtlasDetDescr - Event/EventPrimitives - Generators/AtlasHepMC - GaudiKernel - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetRecEvent/InDetPrepRawData - InnerDetector/InDetRecEvent/SiSpacePoint - Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrModel - Tracking/TrkDetDescr/TrkDetElementBase - Tracking/TrkEvent/TrkCompetingRIOsOnTrack - Tracking/TrkEvent/TrkEventUtils - Tracking/TrkEvent/TrkPrepRawData - Tracking/TrkEvent/TrkRIO_OnTrack - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkTruthData ) - -# External dependencies: -find_package( Eigen ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) - # Component(s) in the package: atlas_add_component( ISF_FatrasRecoTools src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} AtlasHepMCLib AthenaBaseComps GeoPrimitives Identifier ISF_FatrasEvent TrkEventPrimitives TrkParameters TrkSpacePoint TrkTrackSummary TrkToolInterfaces AtlasDetDescr EventPrimitives GaudiKernel InDetIdentifier InDetPrepRawData SiSpacePoint ISF_FatrasDetDescrModel TrkDetElementBase TrkCompetingRIOsOnTrack TrkEventUtils TrkPrepRawData TrkRIO_OnTrack TrkTrack TrkTruthData TrkTruthTrackInterfaces ) - -# Install files from the package: -atlas_install_headers( ISF_FatrasRecoTools ) - + LINK_LIBRARIES AtlasHepMCLib AthenaBaseComps GeoPrimitives Identifier ISF_FatrasEvent TrkEventPrimitives TrkParameters TrkSpacePoint TrkTrackSummary TrkToolInterfaces AtlasDetDescr EventPrimitives GaudiKernel InDetIdentifier InDetPrepRawData SiSpacePoint ISF_FatrasDetDescrModel TrkDetElementBase TrkCompetingRIOsOnTrack TrkEventUtils TrkPrepRawData TrkRIO_OnTrack TrkTrack TrkTruthData TrkTruthTrackInterfaces ) diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsMS/CMakeLists.txt b/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsMS/CMakeLists.txt index 350a0e1084a7876bf98593a804a30a962e215a62..23d4aec01e2fedaac2deba6272399d26fa568035 100644 --- a/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsMS/CMakeLists.txt +++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsMS/CMakeLists.txt @@ -1,6 +1,4 @@ -################################################################################ -# Package: ISF_FatrasToolsMS -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( ISF_FatrasToolsMS ) @@ -8,28 +6,9 @@ atlas_subdir( ISF_FatrasToolsMS ) # External dependencies: find_package( CLHEP ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - GaudiKernel - PRIVATE - Control/AthenaBaseComps - Control/AthenaKernel - DetectorDescription/Identifier - MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry - MuonSpectrometer/MuonIdHelpers - MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTGRecTools - MuonSpectrometer/MuonSimEvent - Simulation/ISF/ISF_Core/ISF_Event - Simulation/ISF/ISF_Core/ISF_Interfaces - Simulation/ISF/ISF_Fatras/ISF_FatrasInterfaces - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkTrack - Tracking/TrkExtrapolation/TrkExInterfaces ) - # Component(s) in the package: atlas_add_component( ISF_FatrasToolsMS src/*.cxx src/components/*.cxx INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps AthenaKernel Identifier GaudiKernel MuonSimEvent ISF_FatrasInterfaces TrkParameters TrkExInterfaces MuonReadoutGeometry MuonIdHelpersLib ISF_Event ISF_InterfacesLib TrkTrack MuonTGRecToolsLib ) - + LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel MuonSimEvent ISF_FatrasInterfaces TrkParameters TrkExInterfaces MuonReadoutGeometry MuonIdHelpersLib ISF_Event ISF_InterfacesLib TrkTrack MuonTGRecToolsLib ) diff --git a/TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py b/TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py index 4ba90944b8ee28c571f61d91671070b3e2c7268a..ff8e8a79a017d4e090c2fa11535f399604ddb671 100644 --- a/TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py +++ b/TileCalorimeter/TileMonitoring/python/TileMonitoringCfgHelper.py @@ -191,10 +191,10 @@ def getLabels(labels, partition = ''): def getCellNameTMDB(partition, channel): - return _cellNameTMDB_LB[channel] if partition.startswith('L') else _cellNameTMDB_EB[channel] + return _cellNameTMDB_LB[channel] if partition.startswith('L') else _cellNameTMDB_EB[channel] def getCellChannelTMDB_Labels(partition): - return _cellNameTMDB_LB if partition.startswith('L') else _cellNameTMDB_EB + return _cellNameTMDB_LB if partition.startswith('L') else _cellNameTMDB_EB def addValueVsModuleAndChannelMaps(group, name, title, path, subDirectory = False, type = 'TH2D', value = '', trigger = '', run = ''): @@ -313,7 +313,7 @@ def addTile2DHistogramsArray(helper, algorithm, name = '', xvalue = '', yvalue = dimensions = _getDimensions(triggers = triggers, perPartition = perPartition, perSample = perSample, perGain = perGain, allPartitions = allPartitions) - array = helper.addArray(dimensions, algorithm, name) + array = helper.addArray(dimensions, algorithm, name, topPath = path) for postfix, tool in array.Tools.items(): kwargs = _parsePostfix(postfix, triggers = triggers, perPartition = perPartition, @@ -326,10 +326,10 @@ def addTile2DHistogramsArray(helper, algorithm, name = '', xvalue = '', yvalue = fullName = xvalue + ',' + yvalue + (',' + value if 'Profile' in type else '') + ';' fullName += getTileHistogramName(name = name,separator = separator, **kwargs) - fullPath = getTileHistogramPath(path = path, subDirectory = subDirectory, **kwargs) + subPath = getTileHistogramPath(path = '', subDirectory = subDirectory, **kwargs) fullTitle = getTileHistogramTitle(title = title, run = run, **kwargs) - tool.defineHistogram( fullName, path = fullPath, type = type, title = fullTitle, + tool.defineHistogram( fullName, path = subPath, type = type, title = fullTitle, xlabels = nxlabels, ylabels = nylabels, xbins = xbins, xmin = xmin, xmax = xmax, ybins = ybins, ymin = ymin, ymax = ymax, weight = weight) @@ -535,7 +535,7 @@ def addTile1DHistogramsArray(helper, algorithm, name = '', xvalue = '', value = dimensions = _getDimensions(triggers = triggers, perPartition = perPartition, perSample = perSample, perGain = perGain, allPartitions = allPartitions) - array = helper.addArray(dimensions, algorithm, name) + array = helper.addArray(dimensions, algorithm, name, topPath = path) for postfix, tool in array.Tools.items(): kwargs = _parsePostfix(postfix, triggers = triggers, perPartition = perPartition, @@ -547,10 +547,10 @@ def addTile1DHistogramsArray(helper, algorithm, name = '', xvalue = '', value = fullName = xvalue + (',' + value if 'Profile' in type else '') + ';' fullName += getTileHistogramName(name = name,separator = separator, **kwargs) - fullPath = getTileHistogramPath(path = path, subDirectory = subDirectory, **kwargs) + subPath = getTileHistogramPath(path = '', subDirectory = subDirectory, **kwargs) fullTitle = getTileHistogramTitle(title = title, run = run, **kwargs) - tool.defineHistogram( fullName, path = fullPath, type = type, title = fullTitle, + tool.defineHistogram( fullName, path = subPath, type = type, title = fullTitle, xlabels = nxlabels, xbins = xbins, xmin = xmin, xmax = xmax, opt = opt) return array @@ -590,7 +590,7 @@ def addTileModuleArray(helper, algorithm, name, title, path, def addTileTMDB_2DHistogramsArray(helper, algorithm, name = '', value = '', title = '', path = '', type = 'TH2D', run = ''): - array = helper.addArray([int(Tile.MAX_ROS - 1)], algorithm, name) + array = helper.addArray([int(Tile.MAX_ROS - 1)], algorithm, name, topPath = path) for postfix, tool in array.Tools.items(): ros = int(postfix.split('_').pop()) + 1 @@ -604,7 +604,7 @@ def addTileTMDB_2DHistogramsArray(helper, algorithm, name = '', value = '', fullTitle = getTileHistogramTitle(title, run = run, partition = partition) - tool.defineHistogram( fullName, path = path, type = type, title = fullTitle, + tool.defineHistogram( fullName, path = '', type = type, title = fullTitle, xlabels = nxlabels, ylabels = nylabels, xbins = Tile.MAX_DRAWER, xmin = -0.5, xmax = Tile.MAX_DRAWER - 0.5, ybins = ybins, ymin = -0.5, ymax = ybins - 0.5) @@ -619,7 +619,7 @@ def addTileTMDB_1DHistogramsArray(helper, algorithm, name = '', xvalue = '', val baseName = "{}_{}".format(name, partition) nChannels = len(_cellNameTMDB_LB) if partition.startswith('L') else len(_cellNameTMDB_EB) dimensions = [int(Tile.MAX_DRAWER), nChannels] if perModule else [nChannels] - array = helper.addArray(dimensions, algorithm, baseName, topPath = 'Tile') + array = helper.addArray(dimensions, algorithm, baseName, topPath = path) for postfix, tool in array.Tools.items(): elements = postfix.split('_') channel = int(elements.pop()) @@ -631,7 +631,6 @@ def addTileTMDB_1DHistogramsArray(helper, algorithm, name = '', xvalue = '', val moduleOrPartition = 'Module ' + partition + module if perModule else 'Partition ' + partition fullTitle = 'Run {} {} TMDB {}: {}'.format(run, moduleOrPartition, cell, title) - fullPath = path.replace('Tile/', '') if path.startswith('Tile/') else path - tool.defineHistogram(fullName, path = fullPath, type = type, title = fullTitle, + tool.defineHistogram(fullName, path = '', type = type, title = fullTitle, xbins = xbins, xmin = xmin, xmax = xmax) diff --git a/TileCalorimeter/TileMonitoring/share/TileMonState.py b/TileCalorimeter/TileMonitoring/share/TileMonState.py index 9965bed55f665c5ff73fdf01a76b3774746a779c..2f5b0b3752d0f28fa10c5774fda652ae72293083 100644 --- a/TileCalorimeter/TileMonitoring/share/TileMonState.py +++ b/TileCalorimeter/TileMonitoring/share/TileMonState.py @@ -53,7 +53,9 @@ ByteStreamEmonInputSvc = svcMgr.ByteStreamInputSvc # ############################################################ if 'Partition' not in dir(): - Partition="ATLAS" + import os + Partition = os.getenv("TDAQ_PARTITION","ATLAS") + ByteStreamEmonInputSvc.Partition = Partition @@ -127,7 +129,7 @@ else: # ######################################### #ByteStreamEmonInputSvc.Key = "ReadoutApplication" if 'Key' not in dir(): - Key="dcm" + Key = {'ATLAS' : 'dcm', 'TileMon' : 'CompleteEvent', 'Tile' : 'ReadoutApplication'}.get(Partition, 'dcm') ByteStreamEmonInputSvc.Key = Key # ############################################################ @@ -139,6 +141,8 @@ ByteStreamEmonInputSvc.Key = Key # KeyValue=[""] #ByteStreamEmonInputSvc.KeyValue = KeyValue +if Partition == 'Tile': + KeyValue = ['TileREB-ROS'] if 'KeyValue' in dir(): ByteStreamEmonInputSvc.KeyValue = KeyValue diff --git a/TileCalorimeter/TileMonitoring/src/TileDQFragMonitorAlgorithm.cxx b/TileCalorimeter/TileMonitoring/src/TileDQFragMonitorAlgorithm.cxx index 8adc8a3ae49707c7cfabb603a5fd70ffcff593d6..c0e9aed5f3df2ab13c27bfa4a1cbfd83479bd610 100644 --- a/TileCalorimeter/TileMonitoring/src/TileDQFragMonitorAlgorithm.cxx +++ b/TileCalorimeter/TileMonitoring/src/TileDQFragMonitorAlgorithm.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "TileDQFragMonitorAlgorithm.h" @@ -29,6 +29,7 @@ StatusCode TileDQFragMonitorAlgorithm::initialize() { ATH_CHECK( m_DCSStateKey.initialize(m_checkDCS) ); ATH_CHECK( m_digitsContainerKey.initialize(SG::AllowEmpty) ); ATH_CHECK( m_rawChannelContainerKey.initialize(SG::AllowEmpty) ); + ATH_CHECK( m_eventInfoTileStatusKey.initialize() ); using Tile = TileCalibUtils; diff --git a/TileCalorimeter/TileMonitoring/src/TileDQFragMonitorAlgorithm.h b/TileCalorimeter/TileMonitoring/src/TileDQFragMonitorAlgorithm.h index 7e63e2b09de7efbf45deb6662b1721d25444b483..9ca6101b0f03721be7deb718b58c2e6f22d99900 100644 --- a/TileCalorimeter/TileMonitoring/src/TileDQFragMonitorAlgorithm.h +++ b/TileCalorimeter/TileMonitoring/src/TileDQFragMonitorAlgorithm.h @@ -87,6 +87,10 @@ class TileDQFragMonitorAlgorithm : public AthMonitorAlgorithm { SG::ReadHandleKey<TileDigitsContainer> m_digitsContainerKey{this, "TileDigitsContainer", "TileDigitsCnt", "Input Tile digits container key"}; + SG::ReadDecorHandleKey<xAOD::EventInfo> m_eventInfoTileStatusKey{this, "EventInfoTileStatus", + "EventInfo.TileStatus", + "Aid to MT scheduling, do not change"}; + std::vector<std::vector<int>> m_errorsGroups; std::vector<std::vector<int>> m_errorsVsLBGroups; diff --git a/TileCalorimeter/TileRecAlgs/src/MBTSTimeDiffEventInfoAlg.cxx b/TileCalorimeter/TileRecAlgs/src/MBTSTimeDiffEventInfoAlg.cxx index d1f91f678879ccae120afd032ad206ddca8fcd69..f23e151387d52111bf27da04e2b3c47b36551485 100644 --- a/TileCalorimeter/TileRecAlgs/src/MBTSTimeDiffEventInfoAlg.cxx +++ b/TileCalorimeter/TileRecAlgs/src/MBTSTimeDiffEventInfoAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ // Tile includes @@ -36,6 +36,7 @@ StatusCode MBTSTimeDiffEventInfoAlg::initialize() { ATH_CHECK( m_mbtsContainerKey.initialize() ); ATH_CHECK( m_eventInfoKey.initialize() ); ATH_CHECK( m_mbtsCollisionTimeKey.initialize() ); + ATH_CHECK( m_eventInfoDecorKey.initialize() ); return StatusCode::SUCCESS; } diff --git a/TileCalorimeter/TileRecAlgs/src/MBTSTimeDiffEventInfoAlg.h b/TileCalorimeter/TileRecAlgs/src/MBTSTimeDiffEventInfoAlg.h index 218a33cf3ce1a7ab1688eb41419936601ced99b8..257a21ca8210c01d1b3cd7035c1498bad877eda3 100644 --- a/TileCalorimeter/TileRecAlgs/src/MBTSTimeDiffEventInfoAlg.h +++ b/TileCalorimeter/TileRecAlgs/src/MBTSTimeDiffEventInfoAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef TILERECALGS_MBTSTIMEDIFFEVENTINFOALG_ @@ -42,6 +42,7 @@ class MBTSTimeDiffEventInfoAlg: public AthReentrantAlgorithm { SG::ReadHandleKey<TileCellContainer> m_mbtsContainerKey{this,"MBTSContainer","MBTSContainer","Input MBTS container key"}; SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{this, "EventInfo", "EventInfo", "Input Event info key"}; SG::WriteHandleKey<MBTSCollisionTime> m_mbtsCollisionTimeKey{this,"MBTSCollisionTime","MBTSCollisionTime","Output MBTS collision time key"}; + SG::WriteDecorHandleKey<xAOD::EventInfo> m_eventInfoDecorKey{this, "EventInfoDecorKey", "EventInfo.MBTSBackground", "EventInfo decoration key"}; const TileTBID* m_tileTBID{nullptr}; diff --git a/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilder.h b/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilder.h index d4a35d2ffb675ef2edf21e9e447e26fb709c51d1..17eb77928e56b6cbd0338b0e9fb4b78f5a728253 100644 --- a/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilder.h +++ b/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilder.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef TILERECUTILS_TILECELLBUILDER_H @@ -159,6 +159,10 @@ private: "E4prContainer", "Output Tile E4 prime container key"}; + SG::WriteDecorHandleKey<xAOD::EventInfo> m_EventInfoTileStatusKey{this, "EventInfoTileStatus", + "EventInfo.TileStatus", + "Dummy decoration key to aid scheduling"}; + std::string m_dspRawChannelContainer; diff --git a/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx b/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx index 4fdedbfd1439664247430940938d49f4d84682c7..008b9eefa399239aa5e394ec25dfb762733899a9 100644 --- a/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx +++ b/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ // Tile includes @@ -175,6 +175,7 @@ StatusCode TileCellBuilder::initialize() { ATH_CHECK( m_eventInfoKey.initialize() ); ATH_CHECK( m_DQstatusKey.initialize() ); + ATH_CHECK( m_EventInfoTileStatusKey.initialize() ); ATH_CHECK( detStore()->retrieve(m_tileMgr) ); ATH_CHECK( detStore()->retrieve(m_tileID) ); diff --git a/Tools/PROCTools/data/master_q221_AOD_digest.ref b/Tools/PROCTools/data/master_q221_AOD_digest.ref index 780afebab350d061926a2a7d632b80c51363fda3..b3af0f81166ac2c28463690c8d1055621e62224a 100644 --- a/Tools/PROCTools/data/master_q221_AOD_digest.ref +++ b/Tools/PROCTools/data/master_q221_AOD_digest.ref @@ -1,11 +1,11 @@ run event nTopo nIdTracks nJets nMuons nElec nTrueElec nFakeElec nPhot nTruePhot nFakePhot 284500 87473001 122 131 4 1 8 2 6 7 4 3 284500 87473014 83 80 6 0 10 1 9 7 5 2 - 284500 87473022 38 30 4 0 4 1 3 2 1 1 + 284500 87473022 38 30 4 0 4 1 3 3 2 1 284500 87473032 30 33 4 1 10 4 6 5 2 3 284500 87473037 62 38 7 0 12 2 10 6 4 2 - 284500 87473040 107 97 10 1 17 1 16 10 5 5 - 284500 87473051 140 112 11 1 16 1 15 23 16 7 + 284500 87473040 107 98 10 1 17 1 16 10 5 5 + 284500 87473051 140 113 11 1 16 1 15 23 16 7 284500 87473063 62 76 5 2 7 1 6 6 4 2 284500 87473068 25 34 1 1 0 0 0 0 0 0 284500 87473075 60 87 6 0 5 0 5 7 6 1 @@ -14,10 +14,10 @@ 284500 87473096 66 75 3 2 3 0 3 4 3 1 284500 87473104 64 63 6 0 6 1 5 4 3 1 284500 87473114 89 80 7 2 12 1 11 9 6 3 - 284500 87473121 93 101 6 3 15 3 12 7 6 1 + 284500 87473121 93 102 6 3 15 3 12 7 6 1 284500 87473132 84 58 9 1 12 0 12 3 3 0 284500 87473137 94 71 8 3 15 0 15 8 8 0 - 284500 87473144 78 68 7 1 8 2 6 8 6 2 + 284500 87473144 78 67 7 1 8 2 6 8 6 2 284500 87473154 86 88 7 0 14 3 11 9 4 5 284500 87473162 53 52 4 0 7 0 7 3 2 1 284500 87473167 77 55 6 3 14 3 11 13 8 5 diff --git a/Tools/PROCTools/data/master_q431_AOD_digest.ref b/Tools/PROCTools/data/master_q431_AOD_digest.ref index c291f77eebd3c30572c6974fe3de517945b2f4dd..8a7784cbb4c181c581a25132f77000d577e11938 100644 --- a/Tools/PROCTools/data/master_q431_AOD_digest.ref +++ b/Tools/PROCTools/data/master_q431_AOD_digest.ref @@ -1,26 +1,26 @@ run event nTopo nIdTracks nJets nMuons 330470 1183722158 1 0 0 0 - 330470 1183722342 394 413 18 0 - 330470 1183727953 532 578 13 4 - 330470 1183732647 467 464 12 1 - 330470 1183733040 381 285 6 1 + 330470 1183722342 394 412 18 0 + 330470 1183727953 532 581 11 4 + 330470 1183732647 467 465 12 1 + 330470 1183733040 381 286 6 1 330470 1183734651 361 361 14 4 330470 1183735332 406 384 9 1 - 330470 1183736475 741 675 15 2 + 330470 1183736475 741 674 13 2 330470 1183738728 1 0 0 0 - 330470 1183738949 368 429 9 1 + 330470 1183738949 368 430 9 1 330470 1183742489 152 123 2 1 330470 1183743040 285 310 5 0 - 330470 1183746343 492 462 14 0 + 330470 1183746343 492 462 12 0 330470 1183746710 6 0 0 0 - 330470 1183751782 239 236 5 0 + 330470 1183751782 239 236 4 0 330470 1183752624 347 339 8 3 330470 1183753006 357 373 11 3 330470 1183754806 470 406 15 0 330470 1183769295 342 325 8 2 - 330470 1183769939 348 351 11 3 - 330470 1183773832 307 200 7 0 + 330470 1183769939 348 351 10 3 + 330470 1183773832 307 201 7 0 330470 1183775209 57 0 0 0 - 330470 1183787124 431 361 11 2 + 330470 1183787124 431 362 9 2 330470 1183787946 321 313 5 1 - 330470 1183795329 458 335 18 0 + 330470 1183795329 458 336 18 0 diff --git a/Tools/PyUtils/bin/checkxAOD.py b/Tools/PyUtils/bin/checkxAOD.py index 39a718b689185dfb9f3c62ddfc1a9a0991dfd05d..f1af827a5c4d4ec063590635c69da913759e1e84 100755 --- a/Tools/PyUtils/bin/checkxAOD.py +++ b/Tools/PyUtils/bin/checkxAOD.py @@ -42,10 +42,10 @@ if __name__ == "__main__": "Trig" : ["^HLT", "^LVL1", "^xTrig", "^Trig", "^CTP_Decision", "^TrigInDetTrackTruthMap", "^TrigNavigation", ".*TriggerTowers", "TileTTL1MBTS", "^TileL2Cnt", "RoIBResult","^_TRIGGER","^L1TopoRawData"], "MET" : ["^MET", "^METMAP", "JEMEtSums"], "EvtId" : ["^ByteStreamEventInfo", "^EventInfo", "^McEventInfo", "^LumiBlockN", "^EventWeight", "^RunNumber", "^ConditionsRun", "^EventTime", "^BunchId", "^EventNumber","^IsTestBeam", "^IsSimulation", "^IsCalibration", "^AvgIntPerXing", "^ActualIntPerXing", "^RandomNumber", "^McChannel"], - "tau" : ["^Tau", "^CombinedStauTrackParticles", "^ExtrapolatedStauTrackParticles","^finalTauPi0s","^DiTauJets"], + "tau" : ["^Tau", "^DiTauJets"], "PFO" : ["(.*)EventShape$", "^AntiKt4EMPFlowJets", "^JetETMissChargedParticleFlowObjects", "^JetETMissNeutralParticleFlowObjects", "^CHSChargedParticleFlowObjects", "^CHSNeutralParticleFlowObjects"], "egamma" : ["^GSF", "^ForwardElectron", "^egamma", "^Electron", "^Photon"], - "Muon" : ["^Muon", "^TileMuObj", "^MS", "^SlowMuons", "^Staus", "(.*)MuonTrackParticles$", "MUCTPI_RDO", "^RPC", "^TGC", "^MDT", "^CSC", ".*MuonMeasurements$", "^ExtrapolatedMuonTracks", "^CombinedMuonTracks", "^NCB_MuonSegments"], + "Muon" : ["^Muon", "^TileMuObj", "^MS", "^SlowMuons", ".*Stau", "(.*)MuonTrackParticles$", "MUCTPI_RDO", "^RPC", "^TGC", "^MDT", "^CSC", "^sTGC", "^Micromegas", ".*MuonMeasurements$", "^ExtrapolatedMuonTracks", "^CombinedMuonTracks", "^NCB_MuonSegments"], "BTag" : ["^BTag"], "InDet" : ["^InDet", "^PrimaryVertices", "^ComTime_TRT", "^Pixel", "^TRT", "^SCT", "^BCM", "^CTP", "^Tracks", "^ResolvedForwardTracks", "^SplitClusterAmbiguityMap"], "Jet" : ["^CamKt", "^AntiKt", "^Jet(?!.*ParticleFlowObjects$)","^LCOriginTopoClusters","^EMOriginTopoClusters"], diff --git a/Tracking/TrkConfig/CMakeLists.txt b/Tracking/TrkConfig/CMakeLists.txt index a25ad88624a51e3815472a02b14521642a1f0d7c..66041e2e20d87486866bc3563ff90d68485b3fc3 100644 --- a/Tracking/TrkConfig/CMakeLists.txt +++ b/Tracking/TrkConfig/CMakeLists.txt @@ -1,12 +1,10 @@ -################################################################################ -# Package: TrkConfig -################################################################################ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TrkConfig ) # Install files from the package: -atlas_install_python_modules( python/*.py) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_data( share/*.ref ) diff --git a/Tracking/TrkDetDescr/TrkDetDescrExample/CMakeLists.txt b/Tracking/TrkDetDescr/TrkDetDescrExample/CMakeLists.txt index 8c2cc24b80f918b9d22a40666732b00bda8c4068..3741d3facc8a7efa5769a8f989f514cd041d8c40 100644 --- a/Tracking/TrkDetDescr/TrkDetDescrExample/CMakeLists.txt +++ b/Tracking/TrkDetDescr/TrkDetDescrExample/CMakeLists.txt @@ -4,6 +4,5 @@ atlas_subdir( TrkDetDescrExample ) # Install files from the package: -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) - diff --git a/Tracking/TrkDetDescr/TrkDetDescrExample/python/LayerMaterialUtils.py b/Tracking/TrkDetDescr/TrkDetDescrExample/python/LayerMaterialUtils.py index 2342143606e6ffc4dee35d98e4e4a8eb6b2c1e63..0037e564784fade892401d1665482ac14347fd8b 100644 --- a/Tracking/TrkDetDescr/TrkDetDescrExample/python/LayerMaterialUtils.py +++ b/Tracking/TrkDetDescr/TrkDetDescrExample/python/LayerMaterialUtils.py @@ -1,8 +1,7 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration import math -from ROOT import * +from ROOT import TCanvas, TH2F, TH3F, TProfile, gDirectory, gROOT, kCanDelete, kMustCleanup, kRed, kWhite def drawCylinderLayer(g4CylTree,cylLayer,tgCylTree,saveLocation) : @@ -33,21 +32,15 @@ def drawCylinderLayer(g4CylTree,cylLayer,tgCylTree,saveLocation) : # create the x0 histogram clmap_x0 = TH2F('clmap_x0_'+clname,clname,binsz,-halfz,halfz,binsphi,-math.pi,math.pi) - # the steps - stepZ = 2.*halfz/numbinsz - stepPhi = 2*math.pi/numbinsphi x0max = 0. # loop over bins and fill it - for ibin in xrange(evt.cylMatBinsTotal) : + for ibin in range(evt.cylMatBinsTotal) : # first get the ibin phi ibinz = ibin/numbinsphi ibinphi = ibin - ibinz*numbinsphi x0 = evt.cylMatX0[ibin] if x0 > x0max : x0max = x0 clmap_x0.SetBinContent(ibinz+1,ibinphi+1,x0) - # z / phi value for the profile plots - izval = -halfz+(ibinz+0.5)*stepZ - iphival = -math.pi+(ibinphi+0.5)*stepPhi pass # and draw it @@ -57,8 +50,8 @@ def drawCylinderLayer(g4CylTree,cylLayer,tgCylTree,saveLocation) : # --------------------------------------------------------- # draw profiles first to get a good estimate for the maximum canvasX0map.cd(5) - x0profZG4 = TProfile(clname+'x0profZG4',clname+'x0profZG4',numbinsz,-halfz+position,halfz+position) - x0profZTG = TProfile(clname+'x0profZTG',clname+'x0profZTG',numbinsz,-halfz+position,halfz+position) + x0profZG4 = TProfile(clname+'x0profZG4',clname+'x0profZG4',numbinsz,-halfz+position,halfz+position) # noqa: F841 + x0profZTG = TProfile(clname+'x0profZTG',clname+'x0profZTG',numbinsz,-halfz+position,halfz+position) # noqa: F841 g4CylTree.Draw('PathInX0:DensedHitZ>>'+clname+'x0profZG4','','prof') tgCylTree.Draw('PathInX0:DensedHitZ>>'+clname+'x0profZTG','','prof') x0profG4z = gDirectory.Get(clname+'x0profZG4') @@ -77,8 +70,8 @@ def drawCylinderLayer(g4CylTree,cylLayer,tgCylTree,saveLocation) : x0profTGz.SetMarkerSize(0.8) x0profTGz.Draw('pe,same') canvasX0map.cd(6) - x0profPhiG4 = TProfile(clname+'x0profPhiG4',clname+'x0profPhiG4',numbinsphi,-math.pi,math.pi) - x0profPhiTG = TProfile(clname+'x0profPhiTG',clname+'x0profPhiTG',numbinsphi,-math.pi,math.pi) + x0profPhiG4 = TProfile(clname+'x0profPhiG4',clname+'x0profPhiG4',numbinsphi,-math.pi,math.pi) # noqa: F841 + x0profPhiTG = TProfile(clname+'x0profPhiTG',clname+'x0profPhiTG',numbinsphi,-math.pi,math.pi) # noqa: F841 g4CylTree.Draw('PathInX0:DensedHitPhi>>'+clname+'x0profPhiG4','','prof') tgCylTree.Draw('PathInX0:DensedHitPhi>>'+clname+'x0profPhiTG','','prof') x0profG4phi = gDirectory.Get(clname+'x0profPhiG4') @@ -217,7 +210,7 @@ def drawDiscLayer(g4DiscTree,discLayer,tgDiscTree,saveLocation) : stepPhi = 2*math.pi/binsPhi x0max = 0. # loop over bins and fill it - for ibin in xrange(evt.discMatBinsTotal) : + for ibin in range(evt.discMatBinsTotal) : ibinphi = ibin/binsR ibinr = ibin - ibinphi*binsR #ibinz = ibin/binsphi @@ -236,8 +229,8 @@ def drawDiscLayer(g4DiscTree,discLayer,tgDiscTree,saveLocation) : # draw profiles tog et good estimate for x0max first x0maxProf = x0max canvasX0map.cd(5) - x0profRG4 = TProfile(dlname+'x0profRG4',dlname+'x0profRG4',numbinsr,innerR,outerR) - x0profRTG = TProfile(dlname+'x0profRTG',dlname+'x0profRTG',numbinsr,innerR,outerR) + x0profRG4 = TProfile(dlname+'x0profRG4',dlname+'x0profRG4',numbinsr,innerR,outerR) # noqa: F841 + x0profRTG = TProfile(dlname+'x0profRTG',dlname+'x0profRTG',numbinsr,innerR,outerR) # noqa: F841 g4DiscTree.Draw('PathInX0:DensedHitR>>'+dlname+'x0profRG4','','prof') tgDiscTree.Draw('PathInX0:DensedHitR>>'+dlname+'x0profRTG','','prof') x0profG4r = gDirectory.Get(dlname+'x0profRG4') @@ -256,8 +249,8 @@ def drawDiscLayer(g4DiscTree,discLayer,tgDiscTree,saveLocation) : x0profTGr.SetMarkerSize(0.8) x0profTGr.Draw('pe,same') canvasX0map.cd(6) - x0profPhiG4 = TProfile(dlname+'x0profPhiG4',dlname+'x0profPhiG4',numbinsphi,-math.pi,math.pi) - x0profPhiTG = TProfile(dlname+'x0profPhiTG',dlname+'x0profPhiTG',numbinsphi,-math.pi,math.pi) + x0profPhiG4 = TProfile(dlname+'x0profPhiG4',dlname+'x0profPhiG4',numbinsphi,-math.pi,math.pi) # noqa: F841 + x0profPhiTG = TProfile(dlname+'x0profPhiTG',dlname+'x0profPhiTG',numbinsphi,-math.pi,math.pi) # noqa: F841 g4DiscTree.Draw('PathInX0:DensedHitPhi>>'+dlname+'x0profPhiG4','','prof') tgDiscTree.Draw('PathInX0:DensedHitPhi>>'+dlname+'x0profPhiTG','','prof') x0profG4phi = gDirectory.Get(dlname+'x0profPhiG4') diff --git a/Tracking/TrkDetDescr/TrkDetDescrExample/python/TrackingVolumeUtils.py b/Tracking/TrkDetDescr/TrkDetDescrExample/python/TrackingVolumeUtils.py index cceb29667f78cf9d78795206018f407db2c01e20..43a4005e813ff89e12f4f2a1a767f7a97811bfcb 100644 --- a/Tracking/TrkDetDescr/TrkDetDescrExample/python/TrackingVolumeUtils.py +++ b/Tracking/TrkDetDescr/TrkDetDescrExample/python/TrackingVolumeUtils.py @@ -1,8 +1,6 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -from __future__ import print_function +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -import math -from ROOT import * +from ROOT import TCanvas, gDirectory, kRed def drawTrackingVolume(g4Tree,tgTree,saveLocation) : diff --git a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D.h b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D.h index 162179368dc9253496c6c74b070e93e052f4c7a3..fe6fcf1a9413ef9cf8c58571fce41fb3e1fcd72d 100644 --- a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D.h +++ b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D.h @@ -32,7 +32,7 @@ namespace Trk { */ template<class T> -class BinnedArray1DT : public BinnedArrayT<T> +class BinnedArray1DT final: public BinnedArrayT<T> { public: diff --git a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D1D.h b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D1D.h index 179df9c706e3fee17fea7994a032a8ffb17bcf2f..157a66e78b7a9bf805a8a60b2575213d311419a8 100644 --- a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D1D.h +++ b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D1D.h @@ -30,7 +30,7 @@ namespace Trk { */ template<class T> -class BinnedArray1D1DT : public BinnedArrayT<T> +class BinnedArray1D1DT final: public BinnedArrayT<T> { public: diff --git a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D1D1D.h b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D1D1D.h index 4c62297f446e327028ba34311c2a30e4c4095724..9f65e2774d1e45f13d885983fda9283994dc84ea 100644 --- a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D1D1D.h +++ b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray1D1D1D.h @@ -32,7 +32,7 @@ namespace Trk { */ template<class T> -class BinnedArray1D1D1DT : public BinnedArrayT<T> +class BinnedArray1D1D1DT final : public BinnedArrayT<T> { public: diff --git a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray2D.h b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray2D.h index c01aefc23e883f91869ee3d0475b8bdd0d810b69..66a46b08744689d7e403f565fe1fd9a7284f2ed7 100644 --- a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray2D.h +++ b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/BinnedArray2D.h @@ -33,7 +33,7 @@ namespace Trk { */ template<class T> -class BinnedArray2DT : public BinnedArrayT<T> +class BinnedArray2DT final: public BinnedArrayT<T> { public: diff --git a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/NavBinnedArray1D.h b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/NavBinnedArray1D.h index e96003042dc721cfbbf565e63fca63624a3139e5..734916db5e938278fe6e518081d45f5681d39ca1 100644 --- a/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/NavBinnedArray1D.h +++ b/Tracking/TrkDetDescr/TrkDetDescrUtils/TrkDetDescrUtils/NavBinnedArray1D.h @@ -31,7 +31,7 @@ the position within mother navigation object */ template<class T> -class NavBinnedArray1DT : public BinnedArrayT<T> +class NavBinnedArray1DT final : public BinnedArrayT<T> { public: diff --git a/Tracking/TrkDetDescr/TrkDistortedSurfaces/TrkDistortedSurfaces/SaggedLineSurface.h b/Tracking/TrkDetDescr/TrkDistortedSurfaces/TrkDistortedSurfaces/SaggedLineSurface.h index 677a0e81e96f3207630103ee066aa4a5a72d9ca8..71aeec42f815750baecb5b1788a4925557f1e90d 100755 --- a/Tracking/TrkDetDescr/TrkDistortedSurfaces/TrkDistortedSurfaces/SaggedLineSurface.h +++ b/Tracking/TrkDetDescr/TrkDistortedSurfaces/TrkDistortedSurfaces/SaggedLineSurface.h @@ -15,7 +15,7 @@ #include "TrkDistortedSurfaces/DistortedSurface.h" #include "TrkDistortedSurfaces/LineSaggingDescriptor.h" #include "TrkSurfaces/StraightLineSurface.h" - +#include "CxxUtils/CachedValue.h" namespace Trk { class TrkDetElementBase; @@ -71,10 +71,8 @@ namespace Trk { protected: - LineSaggingDescriptor* m_saggingDescriptor; //!< the distortion descriptor - CxxUtils::CachedUniquePtrT<Amg::Vector3D> m_lineDirection; //!< nominal end position - + CxxUtils::CachedValue<Amg::Vector3D> m_lineDirection; //!< nominal end position }; /** provide the Surface interface */ diff --git a/Tracking/TrkDetDescr/TrkDistortedSurfaces/src/SaggedLineSurface.cxx b/Tracking/TrkDetDescr/TrkDistortedSurfaces/src/SaggedLineSurface.cxx index 4c27f2cf5e95e527871092fcce3c52e729ccae18..90d4c5e05e3ca90b9541efe1fef49dbc5bca9806 100755 --- a/Tracking/TrkDetDescr/TrkDistortedSurfaces/src/SaggedLineSurface.cxx +++ b/Tracking/TrkDetDescr/TrkDistortedSurfaces/src/SaggedLineSurface.cxx @@ -10,7 +10,7 @@ #include "TrkDistortedSurfaces/SaggedLineSurface.h" #include "TrkSurfaces/CylinderBounds.h" -// From Dan Levin: MDT +// From Dan Levin: MDT // linear density of wire: lambda=wireLinearDensity=19.3 [gm/cm^3] * PI* //(25 *10^-4 )^2 [cm^2] = 378.954 microgram/cm // From Dan Levin: MDT @@ -20,31 +20,31 @@ Trk::SaggedLineSurface::SaggedLineSurface() : Trk::DistortedSurface(), Trk::StraightLineSurface(), m_saggingDescriptor(nullptr), - m_lineDirection(nullptr) + m_lineDirection{} {} Trk::SaggedLineSurface::SaggedLineSurface(Amg::Transform3D* htrans, - double radius, - double halez, + double radius, + double halez, Trk::LineSaggingDescriptor* lsd) : Trk::DistortedSurface(), Trk::StraightLineSurface(htrans, radius, halez), m_saggingDescriptor(lsd), - m_lineDirection(nullptr) + m_lineDirection{} {} Trk::SaggedLineSurface::SaggedLineSurface(std::unique_ptr<Amg::Transform3D> htrans) : Trk::DistortedSurface(), Trk::StraightLineSurface(std::move(htrans)), m_saggingDescriptor(nullptr), - m_lineDirection(nullptr) + m_lineDirection{} {} Trk::SaggedLineSurface::SaggedLineSurface(const Trk::TrkDetElementBase& detelement, const Identifier& id) : Trk::DistortedSurface(), Trk::StraightLineSurface(detelement,id), m_saggingDescriptor(), - m_lineDirection(nullptr) + m_lineDirection{} {} Trk::SaggedLineSurface::SaggedLineSurface(const Trk::TrkDetElementBase& detelement, const Identifier& id, @@ -52,7 +52,7 @@ Trk::SaggedLineSurface::SaggedLineSurface(const Trk::TrkDetElementBase& deteleme Trk::DistortedSurface(), Trk::StraightLineSurface(detelement,id), m_saggingDescriptor(), - m_lineDirection(nullptr) + m_lineDirection{} { m_saggingDescriptor = new Trk::LineSaggingDescriptor(wireLength, wireTension, linearDensity); } @@ -61,7 +61,7 @@ Trk::SaggedLineSurface::SaggedLineSurface(const Trk::SaggedLineSurface& sls) : Trk::DistortedSurface(sls), Trk::StraightLineSurface(sls), m_saggingDescriptor(new Trk::LineSaggingDescriptor(sls.distortionDescriptor())), - m_lineDirection(nullptr) + m_lineDirection{} {} Trk::SaggedLineSurface::~SaggedLineSurface() @@ -69,13 +69,13 @@ Trk::SaggedLineSurface::~SaggedLineSurface() delete m_saggingDescriptor; } -Trk::SaggedLineSurface& Trk::SaggedLineSurface::operator=(const Trk::SaggedLineSurface& sls) +Trk::SaggedLineSurface& Trk::SaggedLineSurface::operator=(const Trk::SaggedLineSurface& sls) { if (this != &sls ) { Trk::DistortedSurface::operator=(sls); Trk::StraightLineSurface::operator=(sls); delete m_saggingDescriptor; - m_lineDirection.store(nullptr); + m_lineDirection=sls.m_lineDirection; m_saggingDescriptor=new Trk::LineSaggingDescriptor(sls.distortionDescriptor()); } return *this; @@ -85,14 +85,14 @@ Trk::StraightLineSurface* Trk::SaggedLineSurface::correctedSurface(const Amg::Ve { // prepare Amg::Transform3D* newHepTransform =nullptr; - if (!m_lineDirection) { - m_lineDirection.set(std::make_unique<Amg::Vector3D>(transform().rotation().col(3))); + if (!m_lineDirection.isValid()) { + m_lineDirection.set(transform().rotation().col(3)); } if (m_saggingDescriptor){ // first get the hep transform from the distortion descriptor newHepTransform = m_saggingDescriptor->correctedSurfaceTransform(lp, center(), - *m_lineDirection); + *(m_lineDirection.ptr())); } else if (Trk::Surface::associatedDetectorElement()) { // get the sagging descriptor and the endpoints from GeoModel // m_saggingDescriptor diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/CylinderBounds.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/CylinderBounds.h index 517ef5816aa532c4122b93964001049be0235815..2a20c81ca0f3132a1d2d4e6109fd84fcf8a90d19 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/CylinderBounds.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/CylinderBounds.h @@ -89,11 +89,11 @@ public: virtual CylinderBounds* clone() const override; /** Return the bounds type */ - virtual BoundsType type() const override { return SurfaceBounds::Cylinder; } + virtual BoundsType type() const override final { return SurfaceBounds::Cylinder; } /**This method checks if a LocalPosition is inside z bounds and rphi value- interface method */ - virtual bool inside(const Amg::Vector2D& locpo, double tol1, double tol2) const override; - virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override; + virtual bool inside(const Amg::Vector2D& locpo, double tol1, double tol2) const override final; + virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override final; /**This method checks if a GlobalPosition is inside the Cylinder - not an interface method, assumes that GlobalPosition is in the right frame*/ @@ -101,20 +101,20 @@ public: /** This method checks inside bounds in loc1 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override; + virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override final; /** This method checks inside bounds in loc1 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override; + virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override final; /** Minimal distance to boundary ( > 0 if outside and <=0 if inside) */ - virtual double minDistance(const Amg::Vector2D& pos) const override; + virtual double minDistance(const Amg::Vector2D& pos) const override final; /**This method checks if a LocalPosition is inside z bounds and inside the radius (for straws) */ bool insideRadius(const Amg::Vector2D& locpo, double tol) const; /**This method returns the radius*/ - virtual double r() const override; + virtual double r() const override final; /**This method returns the average phi*/ double averagePhi() const; diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiamondBounds.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiamondBounds.h index 45017b57137d14c3e1979bdebc8d32ed99becc30..f7b2a56b3ee3d4fb3c604827a22f6cc52d0f5d46 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiamondBounds.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiamondBounds.h @@ -70,7 +70,7 @@ public: virtual bool operator==(const SurfaceBounds& diabo) const override; /** Return the bounds type */ - virtual BoundsType type() const override { return SurfaceBounds::Diamond; } + virtual BoundsType type() const override final { return SurfaceBounds::Diamond; } /**This method returns the halflength in X at minimal Y (first coordinate of local surface frame)*/ double minHalflengthX() const; @@ -86,7 +86,7 @@ public: double halflengthY2() const; /**This method returns the maximal extension on the local plane*/ - virtual double r() const override; + virtual double r() const override final; /**This method returns the opening angle alpha in point A */ double alpha1() const; @@ -95,31 +95,31 @@ public: double alpha2() const; /** The orientation of the Diamond is according to the figure */ - virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override; - virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override; + virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override final; + virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override final; /** This method checks inside bounds in loc1 - loc1/loc2 correspond to the natural coordinates of the surface - As loc1/loc2 are correlated the single check doesn't make sense : -> check is done on enclosing Rectangle ! */ - virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override; + virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override final; /** This method checks inside bounds in loc2 - loc1/loc2 correspond to the natural coordinates of the surface - As loc1/loc2 are correlated the single check doesn't make sense : -> check is done on enclosing Rectangle ! */ - virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override; + virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override final; /** Minimal distance to boundary ( > 0 if outside and <=0 if inside) */ - virtual double minDistance(const Amg::Vector2D& pos) const override; + virtual double minDistance(const Amg::Vector2D& pos) const override final; /** Output Method for MsgStream*/ - virtual MsgStream& dump(MsgStream& sl) const override; + virtual MsgStream& dump(MsgStream& sl) const override final; /** Output Method for std::ostream */ - virtual std::ostream& dump(std::ostream& sl) const override; + virtual std::ostream& dump(std::ostream& sl) const override final; private: friend class ::DiamondBoundsCnv_p1; diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscBounds.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscBounds.h index fef234080af4d7e2660053a4d8ad1eaae734d908..3a3bc3f5a812986342d97ff04de86ff0b7623f63 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscBounds.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscBounds.h @@ -78,26 +78,26 @@ public: virtual bool operator==(const SurfaceBounds& sbo) const override; /**Virtual constructor*/ - virtual DiscBounds* clone() const override; + virtual DiscBounds* clone() const override final; /** Return the type - mainly for persistency */ - virtual SurfaceBounds::BoundsType type() const override { return SurfaceBounds::Disc; } + virtual SurfaceBounds::BoundsType type() const override final { return SurfaceBounds::Disc; } /**This method cheks if the radius given in the LocalPosition is inside [rMin,rMax] if only tol1 is given and additional in the phi sector is tol2 is given */ - virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override; - virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override; + virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override final; + virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override final; /** This method checks inside bounds in loc1 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override; + virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override final; /** This method checks inside bounds in loc2 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override; + virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override final; /** Minimal distance to boundary ( > 0 if outside and <=0 if inside) */ - virtual double minDistance(const Amg::Vector2D& pos) const override; + virtual double minDistance(const Amg::Vector2D& pos) const override final; /**This method returns inner radius*/ double rMin() const; @@ -106,7 +106,7 @@ public: double rMax() const; /**This method returns the maximum expansion on the plane (=rMax)*/ - virtual double r() const override; + virtual double r() const override final; /**This method returns the average phi*/ double averagePhi() const; diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscSurface.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscSurface.h index 4c42a89311fb69818b3ce9770c782bd083b38825..ea90f5c6f94208571f86022b593470f6db08615e 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscSurface.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscSurface.h @@ -167,7 +167,7 @@ public: For the Disc this is @f$ (R*cos(\phi), R*sin(\phi),0)*transform() @f$ Where @f$ r, \phi @f$ denote the r(), averagePhi() of the Bounds. */ - virtual const Amg::Vector3D& globalReferencePoint() const override; + virtual const Amg::Vector3D& globalReferencePoint() const override final; /**This method returns the bounds by reference*/ const SurfaceBounds& bounds() const override; @@ -177,7 +177,7 @@ public: double tol1 = 0., double tol2 = 0.) const override; virtual bool insideBoundsCheck(const Amg::Vector2D& locpos, - const BoundaryCheck& bchk) const override; + const BoundaryCheck& bchk) const override final; /** This method returns true if the GlobalPosition is on the Surface for both, within or without check of whether the local position is inside boundaries diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscTrapezoidalBounds.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscTrapezoidalBounds.h index e64ec1287ea0c46fdb4d7eb0b3835be1d3f201c3..a5a858435077d52b68a08f2e76561229c1613914 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscTrapezoidalBounds.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscTrapezoidalBounds.h @@ -79,23 +79,23 @@ public: virtual DiscTrapezoidalBounds* clone() const override; /** Return the type - mainly for persistency */ - virtual SurfaceBounds::BoundsType type() const override { return SurfaceBounds::DiscTrapezoidal; } + virtual SurfaceBounds::BoundsType type() const override final { return SurfaceBounds::DiscTrapezoidal; } /**This method cheks if the radius given in the LocalPosition is inside [rMin,rMax] if only tol1 is given and additional in the phi sector is tol2 is given */ - virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override; - virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override; + virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override final; + virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override final; /** This method checks inside bounds in loc1 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override; + virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override final; /** This method checks inside bounds in loc2 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override; + virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override final; /** Minimal distance to boundary ( > 0 if outside and <=0 if inside) */ - virtual double minDistance(const Amg::Vector2D& pos) const override; + virtual double minDistance(const Amg::Vector2D& pos) const override final; /**This method returns inner radius*/ double rMin() const; diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/EllipseBounds.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/EllipseBounds.h index 2d07e63d18ecd5ab48a691d5bf09463b88771cc0..d67b18cf7a918ace01a1a85257abd3f1453f2f65 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/EllipseBounds.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/EllipseBounds.h @@ -78,24 +78,24 @@ public: virtual bool operator==(const SurfaceBounds& sbo) const override; /**Virtual constructor*/ - virtual EllipseBounds* clone() const override; + virtual EllipseBounds* clone() const override final; /** Return the type of the bounds for persistency */ - virtual BoundsType type() const override { return SurfaceBounds::Ellipse; } + virtual BoundsType type() const override final { return SurfaceBounds::Ellipse; } /**This method checks if the point given in the local coordinates is between two ellipsoids if only tol1 is given and additional in the phi sector is tol2 is given */ - virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override; - virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override; + virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override final; + virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override final; /**Check for inside first local coordinate */ - virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override; + virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override final; /**Check for inside second local coordinate */ - virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override; + virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override final; /** Minimal distance to boundary ( > 0 if outside and <=0 if inside) */ - virtual double minDistance(const Amg::Vector2D& pos) const override; + virtual double minDistance(const Amg::Vector2D& pos) const override final; /**This method returns first inner radius*/ double rMinX() const; @@ -110,7 +110,7 @@ public: double rMaxY() const; /**This method returns the maximum expansion on the plane (=max(rMaxX,rMaxY))*/ - virtual double r() const override; + virtual double r() const override final; /**This method returns the average phi*/ double averagePhi() const; diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/NoBounds.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/NoBounds.h index 47a13fb1f3324c900ebd9fedb305377e265d766d..19d82c451c054118757379b4496fb9b9c8c2294b 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/NoBounds.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/NoBounds.h @@ -42,30 +42,30 @@ public: virtual SurfaceBounds::BoundsType type() const override { return SurfaceBounds::Other; } /** Method inside() returns true for any case */ - virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override; - virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override; + virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override final; + virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override final; /** This method checks inside bounds in loc1 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override; + virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override final; /** This method checks inside bounds in loc2 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override; + virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override final; /** Minimal distance to boundary (=0 if inside) */ - virtual double minDistance(const Amg::Vector2D& pos) const override; + virtual double minDistance(const Amg::Vector2D& pos) const override final; /** Clone method to complete inherited interface */ - virtual NoBounds* clone() const override; + virtual NoBounds* clone() const override final; /** r() method to complete inherited interface */ - virtual double r() const override; + virtual double r() const override final; /** Output Method for MsgStream*/ - virtual MsgStream& dump(MsgStream& sl) const override; + virtual MsgStream& dump(MsgStream& sl) const override final; /** Output Method for std::ostream */ - virtual std::ostream& dump(std::ostream& sl) const override; + virtual std::ostream& dump(std::ostream& sl) const override final; private: }; diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PerigeeSurface.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PerigeeSurface.h index 89463c2c30f5436edf232458c0c85c65016ae081..b90e281c17752072d413d349db2404aa2985117f 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PerigeeSurface.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PerigeeSurface.h @@ -17,6 +17,7 @@ // Amg #include "EventPrimitives/EventPrimitives.h" #include "GeoPrimitives/GeoPrimitives.h" +#include "CxxUtils/CachedValue.h" class MsgStream; @@ -65,7 +66,7 @@ public: virtual ~PerigeeSurface() = default; /**Virtual constructor*/ - virtual PerigeeSurface* clone() const override; + virtual PerigeeSurface* clone() const override final; /**Assignment operator*/ PerigeeSurface& operator=(const PerigeeSurface& slsf); @@ -133,18 +134,18 @@ public: /**Return method for transfromation, overwrites the transform() form base * class*/ - virtual const Amg::Transform3D& transform() const override; + virtual const Amg::Transform3D& transform() const override final; /**Return method for surface center infromation, overwrites the center() form * base class*/ - virtual const Amg::Vector3D& center() const override; + virtual const Amg::Vector3D& center() const override final; /**Return method for surface center infromation, overwrites the center() form * base class*/ - virtual const Amg::Vector3D& normal() const override; + virtual const Amg::Vector3D& normal() const override final; /**Returns a normal vector at a specific localPosition*/ - virtual const Amg::Vector3D* normal(const Amg::Vector2D& lp) const override; + virtual const Amg::Vector3D* normal(const Amg::Vector2D& lp) const override final; /** Return the measurement frame - this is needed for alignment, in particular for StraightLine and Perigee Surface @@ -152,7 +153,7 @@ public: */ virtual Amg::RotationMatrix3D measurementFrame( const Amg::Vector3D& glopos, - const Amg::Vector3D& glomom) const override; + const Amg::Vector3D& glomom) const override final; /** Local to global method: Take care that by just providing locR and locZ the global position cannot @@ -233,31 +234,31 @@ public: /** the pathCorrection for derived classes with thickness */ virtual double pathCorrection(const Amg::Vector3D&, - const Amg::Vector3D&) const override; + const Amg::Vector3D&) const override final; /**This method checks if a globalPosition in on the Surface or not*/ virtual bool isOnSurface(const Amg::Vector3D& glopo, BoundaryCheck bchk = true, double tol1 = 0., - double tol2 = 0.) const override; + double tol2 = 0.) const override final; /**This surface calls the iside method of the bounds*/ virtual bool insideBounds(const Amg::Vector2D& locpos, double tol1 = 0., - double tol2 = 0.) const override; + double tol2 = 0.) const override final; virtual bool insideBoundsCheck(const Amg::Vector2D& locpos, - const BoundaryCheck& bchk) const override; + const BoundaryCheck& bchk) const override final; /** Special method for StraightLineSurface - provides the Line direction from * cache: speedup */ const Amg::Vector3D& lineDirection() const; /** Return bounds() method */ - virtual const NoBounds& bounds() const override; + virtual const NoBounds& bounds() const override final; /** Return properly formatted class name for screen output */ - virtual std::string name() const override; + virtual std::string name() const override final; /** Output Method for MsgStream*/ virtual MsgStream& dump(MsgStream& sl) const override; @@ -267,7 +268,7 @@ public: protected: //!< data members //!< cache of the line direction (speeds up) - CxxUtils::CachedUniquePtrT<Amg::Vector3D> m_lineDirection; + CxxUtils::CachedValue<Amg::Vector3D> m_lineDirection; static const NoBounds s_perigeeBounds; }; diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PerigeeSurface.icc b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PerigeeSurface.icc index b77ef81b8d5bbe1bffdbbc534c2bb064f9b76d77..5a4d693d99c109bb4a6c903db57e1e2fe670c677 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PerigeeSurface.icc +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PerigeeSurface.icc @@ -181,12 +181,16 @@ PerigeeSurface::straightLineIntersection(const Amg::Vector3D& pos, inline const Amg::Vector3D& PerigeeSurface::lineDirection() const { - if (m_lineDirection) - return (*m_lineDirection); - if (!m_lineDirection && Surface::m_transform) { - m_lineDirection.set( - std::make_unique<Amg::Vector3D>(transform().rotation().col(2))); - return (*m_lineDirection); + if (m_lineDirection.isValid()) { + return *(m_lineDirection.ptr()); + } + + if (Surface::m_transform) { + + if (!m_lineDirection.isValid()) { + m_lineDirection.set(transform().rotation().col(2)); + return *(m_lineDirection.ptr()); + } } return Trk::s_zAxis; } diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PlaneSurface.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PlaneSurface.h index 2bd1c76c467b511ed4e5cbe15931031083065d87..345d1099b7db13155f711ef18165f241cfcac123 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PlaneSurface.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/PlaneSurface.h @@ -211,7 +211,7 @@ public: double tol2 = 0.) const override; virtual bool insideBoundsCheck(const Amg::Vector2D& locpos, - const BoundaryCheck& bchk) const override; + const BoundaryCheck& bchk) const override final; /** This method returns true if the GlobalPosition is on the Surface for both, within or without check of whether the local position is inside boundaries @@ -219,7 +219,7 @@ public: virtual bool isOnSurface(const Amg::Vector3D& glopo, BoundaryCheck bchk = true, double tol1 = 0., - double tol2 = 0.) const override; + double tol2 = 0.) const override final; /** Specified for PlaneSurface: LocalToGlobal method without dynamic memory * allocation */ @@ -283,7 +283,7 @@ public: bool Bound) const override final; /** Return properly formatted class name for screen output */ - virtual std::string name() const override ; + virtual std::string name() const override; protected: //!< data members template<class SURFACE, class BOUNDS_CNV> diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/RectangleBounds.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/RectangleBounds.h index 063ac1d4047d4615b7e82942a1f28f411071b55c..2165659c860c1adca4815e1f55d8e4a44abac0bc 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/RectangleBounds.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/RectangleBounds.h @@ -68,24 +68,24 @@ public: virtual RectangleBounds* clone() const override; /** Return the type of the bounds for persistency */ - virtual BoundsType type() const override { return SurfaceBounds::Rectangle; } + virtual BoundsType type() const override final { return SurfaceBounds::Rectangle; } /**This method checks if the provided local coordinates are inside the surface bounds*/ - virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override; + virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override final; /**This method checks if the provided local coordinates are inside the surface bounds*/ - virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override; + virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override final; /** This method checks inside bounds in loc1 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override; + virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override final; /** This method checks inside bounds in loc2 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override; + virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override final; /** Minimal distance to boundary ( > 0 if outside and <=0 if inside) */ - virtual double minDistance(const Amg::Vector2D& pos) const override; + virtual double minDistance(const Amg::Vector2D& pos) const override final; /**This method returns the halflength in phi (first coordinate of local surface frame)*/ double halflengthPhi() const; diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/StraightLineSurface.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/StraightLineSurface.h index 1a24cf335da35d14b8c78c708298464bd120dbdf..296de9207797adc75b698c04b9dcfbe945a96cd2 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/StraightLineSurface.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/StraightLineSurface.h @@ -18,6 +18,7 @@ // Amg #include "EventPrimitives/EventPrimitives.h" #include "GeoPrimitives/GeoPrimitives.h" +#include "CxxUtils/CachedValue.h" class Identifier; class MsgStream; @@ -141,7 +142,7 @@ public: */ virtual Amg::RotationMatrix3D measurementFrame( const Amg::Vector3D& glopos, - const Amg::Vector3D& glomom) const override; + const Amg::Vector3D& glomom) const override final; /** Return the surface type */ virtual SurfaceType type() const override final; @@ -241,7 +242,7 @@ public: /** the pathCorrection for derived classes with thickness */ virtual double pathCorrection(const Amg::Vector3D&, - const Amg::Vector3D&) const override; + const Amg::Vector3D&) const override final; /** This method checks if the provided GlobalPosition is inside the assigned straw radius, but no check is done whether the GlobalPosition is inside @@ -250,26 +251,26 @@ public: virtual bool isOnSurface(const Amg::Vector3D& glopo, BoundaryCheck bchk = true, double tol1 = 0., - double tol2 = 0.) const override; + double tol2 = 0.) const override final; /**This method returns the bounds of the Surface by reference */ - virtual const SurfaceBounds& bounds() const override; + virtual const SurfaceBounds& bounds() const override final; /**This surface calls the iside method of the bouns */ virtual bool insideBounds(const Amg::Vector2D& locpos, double tol1 = 0., - double tol2 = 0.) const override; + double tol2 = 0.) const override final; virtual bool insideBoundsCheck(const Amg::Vector2D& locpos, - const BoundaryCheck& bchk) const override; + const BoundaryCheck& bchk) const override final; /** Return properly formatted class name for screen output */ - virtual std::string name() const override; + virtual std::string name() const override final; protected: //!< data members template<class SURFACE, class BOUNDS_CNV> friend class ::BoundSurfaceCnv_p1; //!< cache of the line direction (speeds up) - CxxUtils::CachedUniquePtrT<Amg::Vector3D> m_lineDirection; + CxxUtils::CachedValue<Amg::Vector3D> m_lineDirection; //!< bounds (shared) SharedObject<const CylinderBounds> m_bounds; //!< NoBounds as return object when no bounds are declared diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/StraightLineSurface.icc b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/StraightLineSurface.icc index a148487d6f5e55c7a33d01e8107ef0e0e07ace59..3eefcf7f203a3615fb7e54d974992398e847dc79 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/StraightLineSurface.icc +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/StraightLineSurface.icc @@ -130,11 +130,10 @@ StraightLineSurface::insideBoundsCheck(const Amg::Vector2D& locpos, inline const Amg::Vector3D& StraightLineSurface::lineDirection() const { - if (!m_lineDirection) { - m_lineDirection.set( - std::make_unique<Amg::Vector3D>(transform().rotation().col(2))); + if (!m_lineDirection.isValid()) { + m_lineDirection.set(transform().rotation().col(2)); } - return (*m_lineDirection); + return *(m_lineDirection.ptr()); } /** the pathCorrection for derived classes with thickness */ diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TrapezoidBounds.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TrapezoidBounds.h index e6b530c1439a67f2d3b66efd7c0b25f2a85b9f41..cf95ee03b19ffb7e21eecaa8a1856f77df74311a 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TrapezoidBounds.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TrapezoidBounds.h @@ -172,140 +172,6 @@ private: TDD_real_t m_beta; }; -inline TrapezoidBounds* -TrapezoidBounds::clone() const -{ - return new TrapezoidBounds(*this); -} - -inline double -TrapezoidBounds::minHalflengthX() const -{ - return m_boundValues[TrapezoidBounds::bv_minHalfX]; -} - -inline double -TrapezoidBounds::maxHalflengthX() const -{ - return m_boundValues[TrapezoidBounds::bv_maxHalfX]; -} - -inline double -TrapezoidBounds::halflengthY() const -{ - return m_boundValues[TrapezoidBounds::bv_halfY]; -} - -inline double -TrapezoidBounds::minHalflengthPhi() const -{ - return minHalflengthX(); -} - -inline double -TrapezoidBounds::maxHalflengthPhi() const -{ - return maxHalflengthX(); -} - -inline double -TrapezoidBounds::halflengthEta() const -{ - return halflengthY(); -} - -inline double -TrapezoidBounds::alpha() const -{ - return m_alpha; -} - -inline double -TrapezoidBounds::beta() const -{ - return m_beta; -} - -inline double -TrapezoidBounds::r() const -{ - return sqrt(m_boundValues[TrapezoidBounds::bv_maxHalfX] * m_boundValues[TrapezoidBounds::bv_maxHalfX] + - m_boundValues[TrapezoidBounds::bv_halfY] * m_boundValues[TrapezoidBounds::bv_halfY]); -} - -inline bool -TrapezoidBounds::inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const -{ - if (bchk.bcType == 0) - return TrapezoidBounds::inside(locpo, bchk.toleranceLoc1, bchk.toleranceLoc2); - - // a fast FALSE - double fabsY = fabs(locpo[Trk::locY]); - double max_ell = bchk.lCovariance(0, 0) > bchk.lCovariance(1, 1) ? bchk.lCovariance(0, 0) : bchk.lCovariance(1, 1); - double limit = bchk.nSigmas * sqrt(max_ell); - if (fabsY > (m_boundValues[TrapezoidBounds::bv_halfY] + limit)) - return false; - // a fast FALSE - double fabsX = fabs(locpo[Trk::locX]); - if (fabsX > (m_boundValues[TrapezoidBounds::bv_maxHalfX] + limit)) - return false; - // a fast TRUE - double min_ell = bchk.lCovariance(0, 0) < bchk.lCovariance(1, 1) ? bchk.lCovariance(0, 0) : bchk.lCovariance(1, 1); - limit = bchk.nSigmas * sqrt(min_ell); - if (fabsX < (m_boundValues[TrapezoidBounds::bv_minHalfX] + limit) && - fabsY < (m_boundValues[TrapezoidBounds::bv_halfY] + limit)) - return true; - - // compute KDOP and axes for surface polygon - std::vector<KDOP> elementKDOP(3); - std::vector<Amg::Vector2D> elementP(4); - float theta = (bchk.lCovariance(1, 0) != 0 && (bchk.lCovariance(1, 1) - bchk.lCovariance(0, 0)) != 0) - ? .5 * bchk.FastArcTan(2 * bchk.lCovariance(1, 0) / (bchk.lCovariance(1, 1) - bchk.lCovariance(0, 0))) - : 0.; - sincosCache scResult = bchk.FastSinCos(theta); - AmgMatrix(2, 2) rotMatrix; - rotMatrix << scResult.cosC, scResult.sinC, -scResult.sinC, scResult.cosC; - AmgMatrix(2, 2) normal; - normal << 0, -1, 1, 0; - // ellipse is always at (0,0), surface is moved to ellipse position and then rotated - Amg::Vector2D p; - p << m_boundValues[TrapezoidBounds::bv_minHalfX], -m_boundValues[TrapezoidBounds::bv_halfY]; - elementP[0] = (rotMatrix * (p - locpo)); - p << -m_boundValues[TrapezoidBounds::bv_minHalfX], -m_boundValues[TrapezoidBounds::bv_halfY]; - elementP[1] = (rotMatrix * (p - locpo)); - scResult = bchk.FastSinCos(m_beta); - p << m_boundValues[TrapezoidBounds::bv_minHalfX] + - (2. * m_boundValues[TrapezoidBounds::bv_halfY]) * (scResult.sinC / scResult.cosC), - m_boundValues[TrapezoidBounds::bv_halfY]; - elementP[2] = (rotMatrix * (p - locpo)); - scResult = bchk.FastSinCos(m_alpha); - p << -(m_boundValues[TrapezoidBounds::bv_minHalfX] + - (2. * m_boundValues[TrapezoidBounds::bv_halfY]) * (scResult.sinC / scResult.cosC)), - m_boundValues[TrapezoidBounds::bv_halfY]; - elementP[3] = (rotMatrix * (p - locpo)); - std::vector<Amg::Vector2D> axis = { normal * (elementP[1] - elementP[0]), - normal * (elementP[3] - elementP[1]), - normal * (elementP[2] - elementP[0]) }; - bchk.ComputeKDOP(elementP, axis, elementKDOP); - // compute KDOP for error ellipse - std::vector<KDOP> errelipseKDOP(3); - bchk.ComputeKDOP(bchk.EllipseToPoly(3), axis, errelipseKDOP); - // check if KDOPs overlap and return result - return bchk.TestKDOPKDOP(elementKDOP, errelipseKDOP); -} - -inline bool -TrapezoidBounds::insideLoc1(const Amg::Vector2D& locpo, double tol1) const -{ - return (fabs(locpo[locX]) < m_boundValues[TrapezoidBounds::bv_maxHalfX] + tol1); -} - -inline bool -TrapezoidBounds::insideLoc2(const Amg::Vector2D& locpo, double tol2) const -{ - return (fabs(locpo[locY]) < m_boundValues[TrapezoidBounds::bv_halfY] + tol2); -} - } // end of namespace - +#include "TrkSurfaces/TrapezoidBounds.icc" #endif // TRKSURFACES_TRAPEZOIDBOUNDS_H diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TrapezoidBounds.icc b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TrapezoidBounds.icc new file mode 100644 index 0000000000000000000000000000000000000000..5b800e5f4e827e829dd52c1aaa38dfcf4cc8c6c3 --- /dev/null +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TrapezoidBounds.icc @@ -0,0 +1,159 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +namespace Trk { + +inline TrapezoidBounds* +TrapezoidBounds::clone() const +{ + return new TrapezoidBounds(*this); +} + +inline double +TrapezoidBounds::minHalflengthX() const +{ + return m_boundValues[TrapezoidBounds::bv_minHalfX]; +} + +inline double +TrapezoidBounds::maxHalflengthX() const +{ + return m_boundValues[TrapezoidBounds::bv_maxHalfX]; +} + +inline double +TrapezoidBounds::halflengthY() const +{ + return m_boundValues[TrapezoidBounds::bv_halfY]; +} + +inline double +TrapezoidBounds::minHalflengthPhi() const +{ + return minHalflengthX(); +} + +inline double +TrapezoidBounds::maxHalflengthPhi() const +{ + return maxHalflengthX(); +} + +inline double +TrapezoidBounds::halflengthEta() const +{ + return halflengthY(); +} + +inline double +TrapezoidBounds::alpha() const +{ + return m_alpha; +} + +inline double +TrapezoidBounds::beta() const +{ + return m_beta; +} + +inline double +TrapezoidBounds::r() const +{ + return sqrt(m_boundValues[TrapezoidBounds::bv_maxHalfX] * + m_boundValues[TrapezoidBounds::bv_maxHalfX] + + m_boundValues[TrapezoidBounds::bv_halfY] * + m_boundValues[TrapezoidBounds::bv_halfY]); +} + +inline bool +TrapezoidBounds::inside(const Amg::Vector2D& locpo, + const BoundaryCheck& bchk) const +{ + if (bchk.bcType == 0) + return TrapezoidBounds::inside( + locpo, bchk.toleranceLoc1, bchk.toleranceLoc2); + + // a fast FALSE + double fabsY = fabs(locpo[Trk::locY]); + double max_ell = bchk.lCovariance(0, 0) > bchk.lCovariance(1, 1) + ? bchk.lCovariance(0, 0) + : bchk.lCovariance(1, 1); + double limit = bchk.nSigmas * sqrt(max_ell); + if (fabsY > (m_boundValues[TrapezoidBounds::bv_halfY] + limit)) + return false; + // a fast FALSE + double fabsX = fabs(locpo[Trk::locX]); + if (fabsX > (m_boundValues[TrapezoidBounds::bv_maxHalfX] + limit)) + return false; + // a fast TRUE + double min_ell = bchk.lCovariance(0, 0) < bchk.lCovariance(1, 1) + ? bchk.lCovariance(0, 0) + : bchk.lCovariance(1, 1); + limit = bchk.nSigmas * sqrt(min_ell); + if (fabsX < (m_boundValues[TrapezoidBounds::bv_minHalfX] + limit) && + fabsY < (m_boundValues[TrapezoidBounds::bv_halfY] + limit)) + return true; + + // compute KDOP and axes for surface polygon + std::vector<KDOP> elementKDOP(3); + std::vector<Amg::Vector2D> elementP(4); + float theta = + (bchk.lCovariance(1, 0) != 0 && + (bchk.lCovariance(1, 1) - bchk.lCovariance(0, 0)) != 0) + ? .5 * bchk.FastArcTan(2 * bchk.lCovariance(1, 0) / + (bchk.lCovariance(1, 1) - bchk.lCovariance(0, 0))) + : 0.; + sincosCache scResult = bchk.FastSinCos(theta); + AmgMatrix(2, 2) rotMatrix; + rotMatrix << scResult.cosC, scResult.sinC, -scResult.sinC, scResult.cosC; + AmgMatrix(2, 2) normal; + normal << 0, -1, 1, 0; + // ellipse is always at (0,0), surface is moved to ellipse position and then + // rotated + Amg::Vector2D p; + p << m_boundValues[TrapezoidBounds::bv_minHalfX], + -m_boundValues[TrapezoidBounds::bv_halfY]; + elementP[0] = (rotMatrix * (p - locpo)); + p << -m_boundValues[TrapezoidBounds::bv_minHalfX], + -m_boundValues[TrapezoidBounds::bv_halfY]; + elementP[1] = (rotMatrix * (p - locpo)); + scResult = bchk.FastSinCos(m_beta); + p << m_boundValues[TrapezoidBounds::bv_minHalfX] + + (2. * m_boundValues[TrapezoidBounds::bv_halfY]) * + (scResult.sinC / scResult.cosC), + m_boundValues[TrapezoidBounds::bv_halfY]; + elementP[2] = (rotMatrix * (p - locpo)); + scResult = bchk.FastSinCos(m_alpha); + p << -(m_boundValues[TrapezoidBounds::bv_minHalfX] + + (2. * m_boundValues[TrapezoidBounds::bv_halfY]) * + (scResult.sinC / scResult.cosC)), + m_boundValues[TrapezoidBounds::bv_halfY]; + elementP[3] = (rotMatrix * (p - locpo)); + std::vector<Amg::Vector2D> axis = { normal * (elementP[1] - elementP[0]), + normal * (elementP[3] - elementP[1]), + normal * (elementP[2] - elementP[0]) }; + bchk.ComputeKDOP(elementP, axis, elementKDOP); + // compute KDOP for error ellipse + std::vector<KDOP> errelipseKDOP(3); + bchk.ComputeKDOP(bchk.EllipseToPoly(3), axis, errelipseKDOP); + // check if KDOPs overlap and return result + return bchk.TestKDOPKDOP(elementKDOP, errelipseKDOP); +} + +inline bool +TrapezoidBounds::insideLoc1(const Amg::Vector2D& locpo, double tol1) const +{ + return (fabs(locpo[locX]) < + m_boundValues[TrapezoidBounds::bv_maxHalfX] + tol1); +} + +inline bool +TrapezoidBounds::insideLoc2(const Amg::Vector2D& locpo, double tol2) const +{ + return (fabs(locpo[locY]) < m_boundValues[TrapezoidBounds::bv_halfY] + tol2); +} + +} // end of namespace + diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TriangleBounds.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TriangleBounds.h index 9117cfc67b8e8b0a3690151a79fd99b08b9e35c4..b9d85d01d342b4a102f346b5538d0b24f3b3634b 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TriangleBounds.h +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TriangleBounds.h @@ -79,28 +79,28 @@ public: virtual TriangleBounds* clone() const override; /** Return the type of the bounds for persistency */ - virtual BoundsType type() const override { return SurfaceBounds::Triangle; } + virtual BoundsType type() const override final { return SurfaceBounds::Triangle; } /**This method checks if the provided local coordinates are inside the surface bounds*/ - virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override; - virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override; + virtual bool inside(const Amg::Vector2D& locpo, double tol1 = 0., double tol2 = 0.) const override final; + virtual bool inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const override final; /** This method checks inside bounds in loc1 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override; + virtual bool insideLoc1(const Amg::Vector2D& locpo, double tol1 = 0.) const override final; /** This method checks inside bounds in loc2 - loc1/loc2 correspond to the natural coordinates of the surface */ - virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override; + virtual bool insideLoc2(const Amg::Vector2D& locpo, double tol2 = 0.) const override final; /** Minimal distance to boundary ( > 0 if outside and <=0 if inside) */ - virtual double minDistance(const Amg::Vector2D& pos) const override; + virtual double minDistance(const Amg::Vector2D& pos) const override final; /**This method returns the coordinates of vertices*/ std::vector<std::pair<TDD_real_t, TDD_real_t>> vertices() const; /**This method returns the maximal extension on the local plane, i.e. @f$s\sqrt{h_{\phi}^2 + h_{\eta}^2}\f$*/ - virtual double r() const override; + virtual double r() const override final; /** Output Method for MsgStream*/ virtual MsgStream& dump(MsgStream& sl) const override; @@ -111,127 +111,7 @@ public: private: std::vector<TDD_real_t> m_boundValues; }; - -inline TriangleBounds* -TriangleBounds::clone() const -{ - return new TriangleBounds(*this); -} - -inline bool -TriangleBounds::inside(const Amg::Vector2D& locpo, double tol1, double tol2) const -{ - std::pair<double, double> locB(m_boundValues[TriangleBounds::bv_x2] - m_boundValues[TriangleBounds::bv_x1], - m_boundValues[TriangleBounds::bv_y2] - m_boundValues[TriangleBounds::bv_y1]); - std::pair<double, double> locT(m_boundValues[TriangleBounds::bv_x3] - locpo[0], - m_boundValues[TriangleBounds::bv_y3] - locpo[1]); - std::pair<double, double> locV(m_boundValues[TriangleBounds::bv_x1] - locpo[0], - m_boundValues[TriangleBounds::bv_y1] - locpo[1]); - - // special case :: third vertex ? - if (locT.first * locT.first + locT.second * locT.second < tol1 * tol1) - return true; - - // special case : lies on base ? - double db = locB.first * locV.second - locB.second * locV.first; - if (fabs(db) < tol1) { - double a = (locB.first != 0) ? -locV.first / locB.first : -locV.second / locB.second; - return a > -tol2 && a - 1. < tol2; - } - - double dn = locB.first * locT.second - locB.second * locT.first; - - if (fabs(dn) > fabs(tol1)) { - double t = (locB.first * locV.second - locB.second * locV.first) / dn; - if (t > 0.) - return false; - - double a = - (locB.first != 0.) ? (t * locT.first - locV.first) / locB.first : (t * locT.second - locV.second) / locB.second; - if (a < -tol2 || a - 1. > tol2) - return false; - } else { - return false; - } - return true; -} - -inline bool -TriangleBounds::inside(const Amg::Vector2D& locpo, const BoundaryCheck& bchk) const -{ - if (bchk.bcType == 0) - return TriangleBounds::inside(locpo, bchk.toleranceLoc1, bchk.toleranceLoc2); - - // a fast FALSE - double fabsR = sqrt(locpo[Trk::locX] * locpo[Trk::locX] + locpo[Trk::locY] * locpo[Trk::locY]); - double max_ell = bchk.lCovariance(0, 0) > bchk.lCovariance(1, 1) ? bchk.lCovariance(0, 0) : bchk.lCovariance(1, 1); - double limit = bchk.nSigmas * sqrt(max_ell); - double r_max = TriangleBounds::r(); - if (fabsR > (r_max + limit)) - return false; - - // compute KDOP and axes for surface polygon - std::vector<KDOP> elementKDOP(3); - std::vector<Amg::Vector2D> elementP(3); - float theta = (bchk.lCovariance(1, 0) != 0 && (bchk.lCovariance(1, 1) - bchk.lCovariance(0, 0)) != 0) - ? .5 * bchk.FastArcTan(2 * bchk.lCovariance(1, 0) / (bchk.lCovariance(1, 1) - bchk.lCovariance(0, 0))) - : 0.; - sincosCache scResult = bchk.FastSinCos(theta); - AmgMatrix(2, 2) rotMatrix; - rotMatrix << scResult.cosC, scResult.sinC, -scResult.sinC, scResult.cosC; - AmgMatrix(2, 2) normal; - normal << 0, -1, 1, 0; - // ellipse is always at (0,0), surface is moved to ellipse position and then rotated - Amg::Vector2D p; - p << m_boundValues[TriangleBounds::bv_x1], m_boundValues[TriangleBounds::bv_y1]; - elementP[0] = (rotMatrix * (p - locpo)); - p << m_boundValues[TriangleBounds::bv_x2], m_boundValues[TriangleBounds::bv_y2]; - elementP[1] = (rotMatrix * (p - locpo)); - p << m_boundValues[TriangleBounds::bv_x3], m_boundValues[TriangleBounds::bv_y3]; - elementP[2] = (rotMatrix * (p - locpo)); - std::vector<Amg::Vector2D> axis = { normal * (elementP[1] - elementP[0]), - normal * (elementP[2] - elementP[1]), - normal * (elementP[2] - elementP[0]) }; - bchk.ComputeKDOP(elementP, axis, elementKDOP); - // compute KDOP for error ellipse - std::vector<KDOP> errelipseKDOP(3); - bchk.ComputeKDOP(bchk.EllipseToPoly(3), axis, errelipseKDOP); - // check if KDOPs overlap and return result - return bchk.TestKDOPKDOP(elementKDOP, errelipseKDOP); -} - -inline bool -TriangleBounds::insideLoc1(const Amg::Vector2D& locpo, double tol1) const -{ - return inside(locpo, tol1, tol1); -} - -inline bool -TriangleBounds::insideLoc2(const Amg::Vector2D& locpo, double tol2) const -{ - return inside(locpo, tol2, tol2); -} - -inline std::vector<std::pair<TDD_real_t, TDD_real_t>> -TriangleBounds::vertices() const -{ - std::vector<std::pair<TDD_real_t, TDD_real_t>> vertices; - vertices.resize(3); - for (size_t iv = 0; iv < 3; iv++) - vertices.emplace_back(m_boundValues[2 * iv], m_boundValues[2 * iv + 1]); - return vertices; -} - -inline double -TriangleBounds::r() const -{ - double rmax = 0.; - for (size_t iv = 0; iv < 3; iv++) - rmax = - fmax(rmax, m_boundValues[2 * iv] * m_boundValues[2 * iv] + m_boundValues[2 * iv + 1] * m_boundValues[2 * iv + 1]); - return sqrt(rmax); -} - } // end of namespace +#include "TrkSurfaces/TriangleBounds.icc" #endif // TRKSURFACES_RECTANGLEBOUNDS_H diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TriangleBounds.icc b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TriangleBounds.icc new file mode 100644 index 0000000000000000000000000000000000000000..acb149216c88137738eb2fbfe926161c7f539f8e --- /dev/null +++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/TriangleBounds.icc @@ -0,0 +1,149 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +namespace Trk { + +inline TriangleBounds* +TriangleBounds::clone() const +{ + return new TriangleBounds(*this); +} + +inline bool +TriangleBounds::inside(const Amg::Vector2D& locpo, + double tol1, + double tol2) const +{ + std::pair<double, double> locB(m_boundValues[TriangleBounds::bv_x2] - + m_boundValues[TriangleBounds::bv_x1], + m_boundValues[TriangleBounds::bv_y2] - + m_boundValues[TriangleBounds::bv_y1]); + std::pair<double, double> locT( + m_boundValues[TriangleBounds::bv_x3] - locpo[0], + m_boundValues[TriangleBounds::bv_y3] - locpo[1]); + std::pair<double, double> locV( + m_boundValues[TriangleBounds::bv_x1] - locpo[0], + m_boundValues[TriangleBounds::bv_y1] - locpo[1]); + + // special case :: third vertex ? + if (locT.first * locT.first + locT.second * locT.second < tol1 * tol1) + return true; + + // special case : lies on base ? + double db = locB.first * locV.second - locB.second * locV.first; + if (fabs(db) < tol1) { + double a = + (locB.first != 0) ? -locV.first / locB.first : -locV.second / locB.second; + return a > -tol2 && a - 1. < tol2; + } + + double dn = locB.first * locT.second - locB.second * locT.first; + + if (fabs(dn) > fabs(tol1)) { + double t = (locB.first * locV.second - locB.second * locV.first) / dn; + if (t > 0.) + return false; + + double a = (locB.first != 0.) + ? (t * locT.first - locV.first) / locB.first + : (t * locT.second - locV.second) / locB.second; + if (a < -tol2 || a - 1. > tol2) + return false; + } else { + return false; + } + return true; +} + +inline bool +TriangleBounds::inside(const Amg::Vector2D& locpo, + const BoundaryCheck& bchk) const +{ + if (bchk.bcType == 0) + return TriangleBounds::inside( + locpo, bchk.toleranceLoc1, bchk.toleranceLoc2); + + // a fast FALSE + double fabsR = sqrt(locpo[Trk::locX] * locpo[Trk::locX] + + locpo[Trk::locY] * locpo[Trk::locY]); + double max_ell = bchk.lCovariance(0, 0) > bchk.lCovariance(1, 1) + ? bchk.lCovariance(0, 0) + : bchk.lCovariance(1, 1); + double limit = bchk.nSigmas * sqrt(max_ell); + double r_max = TriangleBounds::r(); + if (fabsR > (r_max + limit)) + return false; + + // compute KDOP and axes for surface polygon + std::vector<KDOP> elementKDOP(3); + std::vector<Amg::Vector2D> elementP(3); + float theta = + (bchk.lCovariance(1, 0) != 0 && + (bchk.lCovariance(1, 1) - bchk.lCovariance(0, 0)) != 0) + ? .5 * bchk.FastArcTan(2 * bchk.lCovariance(1, 0) / + (bchk.lCovariance(1, 1) - bchk.lCovariance(0, 0))) + : 0.; + sincosCache scResult = bchk.FastSinCos(theta); + AmgMatrix(2, 2) rotMatrix; + rotMatrix << scResult.cosC, scResult.sinC, -scResult.sinC, scResult.cosC; + AmgMatrix(2, 2) normal; + normal << 0, -1, 1, 0; + // ellipse is always at (0,0), surface is moved to ellipse position and then + // rotated + Amg::Vector2D p; + p << m_boundValues[TriangleBounds::bv_x1], + m_boundValues[TriangleBounds::bv_y1]; + elementP[0] = (rotMatrix * (p - locpo)); + p << m_boundValues[TriangleBounds::bv_x2], + m_boundValues[TriangleBounds::bv_y2]; + elementP[1] = (rotMatrix * (p - locpo)); + p << m_boundValues[TriangleBounds::bv_x3], + m_boundValues[TriangleBounds::bv_y3]; + elementP[2] = (rotMatrix * (p - locpo)); + std::vector<Amg::Vector2D> axis = { normal * (elementP[1] - elementP[0]), + normal * (elementP[2] - elementP[1]), + normal * (elementP[2] - elementP[0]) }; + bchk.ComputeKDOP(elementP, axis, elementKDOP); + // compute KDOP for error ellipse + std::vector<KDOP> errelipseKDOP(3); + bchk.ComputeKDOP(bchk.EllipseToPoly(3), axis, errelipseKDOP); + // check if KDOPs overlap and return result + return bchk.TestKDOPKDOP(elementKDOP, errelipseKDOP); +} + +inline bool +TriangleBounds::insideLoc1(const Amg::Vector2D& locpo, double tol1) const +{ + return inside(locpo, tol1, tol1); +} + +inline bool +TriangleBounds::insideLoc2(const Amg::Vector2D& locpo, double tol2) const +{ + return inside(locpo, tol2, tol2); +} + +inline std::vector<std::pair<TDD_real_t, TDD_real_t>> +TriangleBounds::vertices() const +{ + std::vector<std::pair<TDD_real_t, TDD_real_t>> vertices; + vertices.resize(3); + for (size_t iv = 0; iv < 3; iv++) + vertices.emplace_back(m_boundValues[2 * iv], m_boundValues[2 * iv + 1]); + return vertices; +} + +inline double +TriangleBounds::r() const +{ + double rmax = 0.; + for (size_t iv = 0; iv < 3; iv++) + rmax = fmax(rmax, + m_boundValues[2 * iv] * m_boundValues[2 * iv] + + m_boundValues[2 * iv + 1] * m_boundValues[2 * iv + 1]); + return sqrt(rmax); +} + +} // end of namespace + diff --git a/Tracking/TrkDetDescr/TrkSurfaces/src/PerigeeSurface.cxx b/Tracking/TrkDetDescr/TrkSurfaces/src/PerigeeSurface.cxx index 04634e9a14b47f8a0837f951a8e8b74bfb2b45d3..081f668a88660d0e4fe21dd15e5f4e696f57f166 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/src/PerigeeSurface.cxx +++ b/Tracking/TrkDetDescr/TrkSurfaces/src/PerigeeSurface.cxx @@ -20,12 +20,12 @@ const Trk::NoBounds Trk::PerigeeSurface::s_perigeeBounds; Trk::PerigeeSurface::PerigeeSurface() : Surface() - , m_lineDirection(nullptr) + , m_lineDirection{} {} Trk::PerigeeSurface::PerigeeSurface(const Amg::Vector3D& gp) : Surface() - , m_lineDirection(nullptr) + , m_lineDirection{} { Surface::m_center = std::make_unique<const Amg::Vector3D>(gp); Surface::m_transform = std::make_unique<Amg::Transform3D>(); @@ -34,19 +34,19 @@ Trk::PerigeeSurface::PerigeeSurface(const Amg::Vector3D& gp) Trk::PerigeeSurface::PerigeeSurface(Amg::Transform3D* tTransform) : Surface() - , m_lineDirection(nullptr) + , m_lineDirection{} { Surface::m_transform=std::unique_ptr<Amg::Transform3D>(tTransform); } Trk::PerigeeSurface::PerigeeSurface(std::unique_ptr<Amg::Transform3D> tTransform) : Surface(std::move(tTransform)) - , m_lineDirection(nullptr) + , m_lineDirection{} {} Trk::PerigeeSurface::PerigeeSurface(const PerigeeSurface& pesf) : Surface(pesf) - , m_lineDirection(nullptr) + , m_lineDirection{} { if (pesf.m_center) Surface::m_center = std::make_unique<const Amg::Vector3D>(*pesf.m_center); @@ -56,7 +56,7 @@ Trk::PerigeeSurface::PerigeeSurface(const PerigeeSurface& pesf) Trk::PerigeeSurface::PerigeeSurface(const PerigeeSurface& pesf, const Amg::Transform3D& shift) : Surface() - , m_lineDirection(nullptr) + , m_lineDirection{} { if (pesf.m_center) Surface::m_center = std::make_unique<const Amg::Vector3D>(shift * (*pesf.m_center)); @@ -71,7 +71,7 @@ Trk::PerigeeSurface::operator=(const Trk::PerigeeSurface& pesf) { if (this != &pesf) { Trk::Surface::operator=(pesf); - m_lineDirection.store(std::make_unique<Amg::Vector3D>(lineDirection())); + m_lineDirection=pesf.m_lineDirection; } return *this; } diff --git a/Tracking/TrkDetDescr/TrkSurfaces/src/StraightLineSurface.cxx b/Tracking/TrkDetDescr/TrkSurfaces/src/StraightLineSurface.cxx index a6107d958f2aabb2ae81023ec2b4f6794ae38520..6918f043c70bec22ba0efd286b7dfbae6670de73 100644 --- a/Tracking/TrkDetDescr/TrkSurfaces/src/StraightLineSurface.cxx +++ b/Tracking/TrkDetDescr/TrkSurfaces/src/StraightLineSurface.cxx @@ -22,49 +22,49 @@ const Trk::NoBounds Trk::StraightLineSurface::s_boundless; // default constructor Trk::StraightLineSurface::StraightLineSurface() : Surface() - , m_lineDirection(nullptr) + , m_lineDirection{} , m_bounds() {} // constructors by arguments: boundless surface Trk::StraightLineSurface::StraightLineSurface(Amg::Transform3D* htrans) : Surface(htrans) - , m_lineDirection(nullptr) + , m_lineDirection{} , m_bounds() {} // constructors by arguments: boundless surface Trk::StraightLineSurface::StraightLineSurface(std::unique_ptr<Amg::Transform3D> htrans) : Surface(std::move(htrans)) - , m_lineDirection(nullptr) + , m_lineDirection{} , m_bounds() {} // constructors by arguments Trk::StraightLineSurface::StraightLineSurface(Amg::Transform3D* htrans, double radius, double halez) : Surface(htrans) - , m_lineDirection(nullptr) + , m_lineDirection{} , m_bounds(new Trk::CylinderBounds(radius, halez)) {} // dummy implementation Trk::StraightLineSurface::StraightLineSurface(const Trk::TrkDetElementBase& detelement, const Identifier& id) : Surface(detelement, id) - , m_lineDirection(nullptr) + , m_lineDirection{} , m_bounds() {} // copy constructor Trk::StraightLineSurface::StraightLineSurface(const Trk::StraightLineSurface& slsf) : Surface(slsf) - , m_lineDirection(nullptr) + , m_lineDirection{} , m_bounds(slsf.m_bounds) {} // copy constructor with shift Trk::StraightLineSurface::StraightLineSurface(const StraightLineSurface& csf, const Amg::Transform3D& transf) : Surface(csf, transf) - , m_lineDirection(nullptr) + , m_lineDirection{} , m_bounds(csf.m_bounds) {} @@ -74,8 +74,8 @@ Trk::StraightLineSurface& Trk::StraightLineSurface::operator=(const Trk::StraightLineSurface& slsf) { if (this != &slsf) { - m_lineDirection.store(nullptr); Trk::Surface::operator=(slsf); + m_lineDirection=slsf.m_lineDirection; m_bounds = slsf.m_bounds; } return *this; @@ -245,9 +245,9 @@ Trk::StraightLineSurface::straightLineDistanceEstimate(const Amg::Vector3D& pos, double dist = dxyz.dot(dxyz) - Lz * Lz; dist = (dist > Rm * Rm) ? sqrt(dist) - Rm : 0.; double dL = fabs(Lz) - Lzm; - if (dL > 0.) + if (dL > 0.){ dist = sqrt(dist * dist + dL * dL); - + } return Trk::DistanceSolution(1, dist, false, s); } diff --git a/Tracking/TrkExtrapolation/TrkExRungeKuttaIntersector/test/RungeKuttaIntersector_test.cxx b/Tracking/TrkExtrapolation/TrkExRungeKuttaIntersector/test/RungeKuttaIntersector_test.cxx index 27ebdcb3e8d3e0cae2eacc8b8fe3661b7dec3de6..692fdac1f24299bdadbfcb52384543030089e04a 100644 --- a/Tracking/TrkExtrapolation/TrkExRungeKuttaIntersector/test/RungeKuttaIntersector_test.cxx +++ b/Tracking/TrkExtrapolation/TrkExRungeKuttaIntersector/test/RungeKuttaIntersector_test.cxx @@ -279,7 +279,7 @@ void test_perigee (Trk::IIntersector& tool) } -std::unique_ptr<MagField::AtlasFieldMap> getFieldMap(const std::string mapFile, double sol_current, double tor_current) { +std::unique_ptr<MagField::AtlasFieldMap> getFieldMap(const std::string& mapFile, double sol_current, double tor_current) { // find the path to the map file std::string resolvedMapFile = PathResolver::find_file( mapFile.c_str(), "DATAPATH" ); assert ( !resolvedMapFile.empty() ); diff --git a/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/src/STEP_Propagator.cxx b/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/src/STEP_Propagator.cxx index d5fc579ba68324b2b278c77c6b8021e3a1d4459d..e6bcfae97a26a8583d2e0add7aa34908217a5e9e 100755 --- a/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/src/STEP_Propagator.cxx +++ b/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/src/STEP_Propagator.cxx @@ -722,8 +722,8 @@ Trk::STEP_Propagator::intersectSurface(const EventContext& ctx, ParticleHypothesis particle) const { - Amg::Vector3D origin = trackIntersection->position(); - Amg::Vector3D direction = trackIntersection->direction(); + const Amg::Vector3D& origin = trackIntersection->position(); + const Amg::Vector3D& direction = trackIntersection->direction(); PerigeeSurface* perigeeSurface = new PerigeeSurface(origin); const Trk::TrackParameters* trackParameters = perigeeSurface->createTrackParameters(0.,0., @@ -2719,7 +2719,7 @@ Trk::STEP_Propagator::propagateNeutral(const Trk::TrackParameters& parm, std::vector<std::pair<unsigned int,double> >::iterator oIter = currentDist.begin(); std::vector<DestSurf >::iterator sBeg = targetSurfaces.begin(); - Amg::Vector3D position(parm.position()); + const Amg::Vector3D& position(parm.position()); Amg::Vector3D direction(parm.momentum().normalized()); for (; sIter!=targetSurfaces.end(); sIter++) { diff --git a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidalIntersector.cxx b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidalIntersector.cxx index c90004957b84012fb1afabdd4a3ad877237116d0..a16fc7b52090d259df8392983554f3c9b3d37c99 100755 --- a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidalIntersector.cxx +++ b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidalIntersector.cxx @@ -94,7 +94,7 @@ SolenoidalIntersector::intersectSurface(const Surface& surface, (*perigee, trackIntersection, qOverP); ATH_MSG_WARNING( " unrecognized Surface" ); - return 0; + return nullptr; } /**IIntersector interface method for specific Surface type : PerigeeSurface */ @@ -134,7 +134,7 @@ SolenoidalIntersector::intersectCylinderSurface(const CylinderSurface& surface, double radius2 = isect->position().perp2(); if (std::abs(endRadius - sqrt(radius2)) > m_surfaceTolerance - && ! extrapolateToR(*isect, radius2, *com, endRadius)) return 0; + && ! extrapolateToR(*isect, radius2, *com, endRadius)) return nullptr; return intersection(std::move(isect), *com, surface); } @@ -163,7 +163,7 @@ SolenoidalIntersector::intersectDiscSurface (const DiscSurface& surface, if (std::abs(endZ -trackIntersection->position().z()) > m_surfaceTolerance && ! extrapolateToZ(*isect, *com, endZ)) { - return 0; + return nullptr; } return intersection(std::move(isect), *com, surface); @@ -207,18 +207,18 @@ SolenoidalIntersector::intersectPlaneSurface(const PlaneSurface& surface, while (std::abs(offset) > m_surfaceTolerance*std::abs(dot)) { // take care if grazing incidence - quit if looper - if (std::abs(dot) < 0.0001) return 0; + if (std::abs(dot) < 0.0001) return nullptr; double distance = offset/dot; // extrapolate if (com->m_sinTheta < 0.9) { - if (! extrapolateToZ(*isect, *com, pos.z()+distance*dir.z())) return 0; + if (! extrapolateToZ(*isect, *com, pos.z()+distance*dir.z())) return nullptr; radius2 = pos.perp2(); } else { - if (! extrapolateToR(*isect, radius2, *com, (pos+distance*dir).perp())) return 0; + if (! extrapolateToR(*isect, radius2, *com, (pos+distance*dir).perp())) return nullptr; } // check we are getting closer to the plane, switch to RK in case of difficulty @@ -247,17 +247,13 @@ SolenoidalIntersector::isValid (Amg::Vector3D startPosition, getSolenoidParametrization(); // check cylinder bounds for valid parametrization - if (solenoidParametrization && + return solenoidParametrization && + std::abs(endPosition.z()) < solenoidParametrization->maximumZ() + && endPosition.perp() < solenoidParametrization->maximumR() - && getSolenoidParametrization()->validOrigin(startPosition)) - { - - return true; - } - - - return false; + + && getSolenoidParametrization()->validOrigin(startPosition); } /** tabulate parametrization details */ diff --git a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidParametrization_test.cxx b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidParametrization_test.cxx index 1c409cc93566679ebb425edf71e44d1a94272562..d20b85f0e2046c460324139d3d82e209bb46298e 100644 --- a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidParametrization_test.cxx +++ b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidParametrization_test.cxx @@ -61,7 +61,7 @@ void test1 (Trk::SolenoidParametrization& sol, const AtlasFieldCacheCondObj &fie assert( Athena_test::isEqual (secondIntegral, -296.768) ); } -std::unique_ptr<MagField::AtlasFieldMap> getFieldMap(const std::string mapFile, double sol_current, double tor_current) { +std::unique_ptr<MagField::AtlasFieldMap> getFieldMap(const std::string& mapFile, double sol_current, double tor_current) { // find the path to the map file std::string resolvedMapFile = PathResolver::find_file( mapFile.c_str(), "DATAPATH" ); assert ( !resolvedMapFile.empty() ); diff --git a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidalIntersector_test.cxx b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidalIntersector_test.cxx index d2b1d588dafedf55c9d9cdf8725f02d677473eba..e660eff150f272d1195e1beacab87c403d4be6c4 100644 --- a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidalIntersector_test.cxx +++ b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidalIntersector_test.cxx @@ -295,7 +295,7 @@ void test_perigee (Trk::IIntersector& tool) } -std::unique_ptr<MagField::AtlasFieldMap> getFieldMap(const std::string mapFile, double sol_current, double tor_current) { +std::unique_ptr<MagField::AtlasFieldMap> getFieldMap(const std::string& mapFile, double sol_current, double tor_current) { // find the path to the map file std::string resolvedMapFile = PathResolver::find_file( mapFile.c_str(), "DATAPATH" ); assert ( !resolvedMapFile.empty() ); diff --git a/Tracking/TrkExtrapolation/TrkExStraightLineIntersector/src/StraightLineIntersector.cxx b/Tracking/TrkExtrapolation/TrkExStraightLineIntersector/src/StraightLineIntersector.cxx index 46a7d9b53618895d626046e23326b1d5bbf503a1..a0865085d256749f50aed63efc064b7f80a4cdd7 100755 --- a/Tracking/TrkExtrapolation/TrkExStraightLineIntersector/src/StraightLineIntersector.cxx +++ b/Tracking/TrkExtrapolation/TrkExStraightLineIntersector/src/StraightLineIntersector.cxx @@ -78,7 +78,7 @@ StraightLineIntersector::intersectSurface(const Surface& surface, if (perigee) return approachPerigeeSurface(*perigee,trackIntersection,qOverP); ATH_MSG_WARNING( " unrecognized Surface" ); - return 0; + return nullptr; } /**IIntersector interface method for specific Surface type : PerigeeSurface */ diff --git a/Tracking/TrkExtrapolation/TrkExTools/src/TimedExtrapolator.cxx b/Tracking/TrkExtrapolation/TrkExTools/src/TimedExtrapolator.cxx index d43e5c95ceb1106813bddfe62af95c84a197f757..361dc3b0aedab8f80f1d88e7e2e7ca14abbf644b 100644 --- a/Tracking/TrkExtrapolation/TrkExTools/src/TimedExtrapolator.cxx +++ b/Tracking/TrkExtrapolation/TrkExTools/src/TimedExtrapolator.cxx @@ -343,7 +343,7 @@ Trk::TimedExtrapolator::extrapolateWithPathLimit( std::map<const Trk::TrackParameters *, bool>::iterator garbageEnd = cache.m_garbageBin.end(); for (; garbageIter != garbageEnd; ++garbageIter) if (garbageIter->first) { if(garbageIter->first == returnParms) { - auto ret=returnParms->clone(); + auto *ret=returnParms->clone(); ATH_MSG_DEBUG(" [+] garbage - at " << positionOutput(garbageIter->first->position())<<" parm="<<garbageIter->first<<" is the return param. Cloning to"<<ret); returnParms=ret; } @@ -1393,7 +1393,7 @@ Trk::TimedExtrapolator::transportNeutralsWithPathLimit(const Trk::TrackParameter std::map<const Trk::TrackParameters *, bool>::iterator garbageEnd = cache.m_garbageBin.end(); for (; garbageIter != garbageEnd; ++garbageIter) if (garbageIter->first) { if(garbageIter->first == returnParms) { - auto ret=returnParms->clone(); + auto *ret=returnParms->clone(); ATH_MSG_DEBUG(" [+] garbage - at " << positionOutput(garbageIter->first->position())<<" parm="<<garbageIter->first<<" is the return param. Cloning to"<<ret); returnParms=ret; } diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfConstants.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfConstants.h index 200dbf99f144a6b630e9e42eb45dff6559ef35e1..6272676d658f5e30b6c96fc3173a80bc90eb38d5 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfConstants.h +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfConstants.h @@ -11,6 +11,7 @@ #define GSFCONSTANTS_H #include <cstdint> +#include <cstddef> namespace GSFConstants { /** @@ -30,8 +31,8 @@ namespace GSFConstants { * The max numbers for N , M are enforced in configuration. * It is an error to configure for more. * - * They lead to a max allowed NXM after convolution - * trying to somehow pass (by-passing config) + * They lead to a max allowed NXM after convolution. + * Trying to somehow pass (by-passing the config) * leads to an exception. * * Furthermore, the number of coefficients is also @@ -42,8 +43,8 @@ namespace GSFConstants { */ /// Maximum number of Gaussian components for the -/// state description (default is 12) -constexpr int8_t maxNumberofStateComponents = 14; +/// state description. +constexpr int8_t maxNumberofStateComponents = 12; /// Maximum number of Gaussian components for the /// Bethe Heitler description constexpr int8_t maxNumberofBHComponents = 6; @@ -52,12 +53,16 @@ constexpr int8_t polynomialCoefficients = 6; /** * The maximum size State x Bethe-Heitler components - * The typical number we use is 6x12 = 72. - * Max here is 6x14 = 84. As in literature there are examples - * up tio 14 state components + * The typical number we use is the max 6x12 = 72 i.e as + * we try to have the maximum practical precision for the GSF. */ constexpr int8_t maxComponentsAfterConvolution = maxNumberofBHComponents * maxNumberofStateComponents; +/** + * @brief Alignment used for SIMD operations + * internally to GSF. + */ +constexpr size_t alignment = 32; } #endif diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMeasurementUpdator.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMeasurementUpdator.h index cded8dd3d51ed9cddb4abbcb9356da42f669aa69..72572b83774fa7f3828e0e99fd6e2fc6197f1547 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMeasurementUpdator.h +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMeasurementUpdator.h @@ -48,11 +48,6 @@ private: const MeasurementBase&, FitQualityOnSurface& fitQoS) const; - bool invalidComponent(const Trk::TrackParameters* trackParameters) const; - - MultiComponentState rebuildState( - Trk::MultiComponentState&& stateBeforeUpdate) const; - KalmanParameterUpdator m_updator{}; }; } diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IMultiStateMaterialEffects.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IMultiStateMaterialEffects.h index 4f25a881baeb26994263ac4f21b387091e5e4af6..2d9d982b4b12d3a966452bca1b5f57ed076c114d 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IMultiStateMaterialEffects.h +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IMultiStateMaterialEffects.h @@ -40,10 +40,10 @@ public: { std::array<double, GSFConstants::maxNumberofBHComponents> weights = {}; std::array<double, GSFConstants::maxNumberofBHComponents> deltaPs = {}; - alignas(32) + alignas(GSFConstants::alignment) std::array<AmgVector(5), GSFConstants::maxNumberofBHComponents> deltaParameters = {}; - alignas(32) + alignas(GSFConstants::alignment) std::array<AmgSymMatrix(5), GSFConstants::maxNumberofBHComponents> deltaCovariances = {}; diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/KLGaussianMixtureReduction.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/KLGaussianMixtureReduction.h index 2c72b318615c5094223b0e1e919f0d7e2c254f4f..3de2d3263c6e5c0926a57a057b8f3849c700db8a 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/KLGaussianMixtureReduction.h +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/KLGaussianMixtureReduction.h @@ -74,17 +74,14 @@ #define KLGaussianMixReductionUtils_H #include "CxxUtils/features.h" +#include "TrkGaussianSumFilter/GsfConstants.h" +#include <array> +#include <vector> #include <cstdint> #include <utility> -#include <vector> namespace GSFUtils { -/** - * @brief Alignment used for SIMD - */ -constexpr size_t alignment = 32; - /** * @brief struct representing 1D component * Negative weight means invalidated component @@ -97,6 +94,24 @@ struct Component1D double weight = 0.; }; +/** + * @brief struct representing an array of 1D component. + * with the maximum size we can have after convolution + * with material effects. + */ +struct Component1DArray +{ + alignas(GSFConstants::alignment) + std::array<Component1D, + GSFConstants::maxComponentsAfterConvolution> components{}; + int32_t numComponents = 0; +}; + +/* typedef tracking which component has been merged + */ + +using IsMergedArray = std::array<bool,GSFConstants::maxComponentsAfterConvolution>; + /** * @brief Merge the componentsIn and return * which componets got merged @@ -106,13 +121,11 @@ struct Component1D * will cause a runtime exception * * Furthemore, the input component array is assumed to be - * GSFUtils::alignment aligned. + * GSFConstants::alignment aligned. * Can be created via the AlignedDynArray. */ std::vector<std::pair<int8_t, int8_t>> -findMerges(Component1D* componentsIn, - const int8_t inputSize, - const int8_t reducedSize); +findMerges(Component1DArray& componentsIn, const int8_t reducedSize); /** * @brief For finding the index of the minumum pairwise distance diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx index e1e27c22589218f632a223d297584ae0318b02fb..a9fcc72aaa9ff0d3ea606c7c4e09f899cb52b554 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx @@ -244,7 +244,7 @@ Trk::GsfMaterialMixtureConvolution::update( // check vectors have the same size if (caches[i].numWeights != caches[i].numDeltaPs) { ATH_MSG_WARNING("Inconsistent number of components in the updator!!! no " - "material effect will be applied"); + "material effect will be applied"); caches[i].resetAndAddDummyValues(); } @@ -276,14 +276,14 @@ Trk::GsfMaterialMixtureConvolution::update( } // Fill information for to calculate which components to merge - // Inaddition scan all components for covariance matrices. If one or more + // In addition scan all components for covariance matrices. If one or more // component is missing an error matrix, component reduction is impossible. bool componentWithoutMeasurement = false; - GSFUtils::AlignedDynArray<GSFUtils::Component1D, GSFUtils::alignment> - components(n); - size_t k(0); + GSFUtils::Component1DArray componentsArray; + componentsArray.numComponents = n; std::vector<std::pair<size_t, size_t>> indices(n); + size_t k(0); for (size_t i(0); i < inputState.size(); ++i) { for (size_t j(0); j < caches[i].numWeights; ++j) { const AmgSymMatrix(5)* measuredCov = inputState[i].first->covariance(); @@ -295,21 +295,22 @@ Trk::GsfMaterialMixtureConvolution::update( componentWithoutMeasurement = true; } - components[k].mean = caches[i].deltaParameters[j][Trk::qOverP]; - components[k].cov = cov; - components[k].invCov = cov > 0 ? 1. / cov : 1e10; - components[k].weight = caches[i].weights[j]; + componentsArray.components[k].mean = + caches[i].deltaParameters[j][Trk::qOverP]; + componentsArray.components[k].cov = cov; + componentsArray.components[k].invCov = cov > 0 ? 1. / cov : 1e10; + componentsArray.components[k].weight = caches[i].weights[j]; indices[k] = { i, j }; ++k; } } if (componentWithoutMeasurement) { - auto *result = std::max_element( - components.begin(), components.end(), [](const auto& a, const auto& b) { - return a.weight < b.weight; - }); - auto index = std::distance(components.begin(), result); + auto* result = std::max_element( + componentsArray.components.data(), + componentsArray.components.data() + componentsArray.numComponents, + [](const auto& a, const auto& b) { return a.weight < b.weight; }); + auto index = std::distance(componentsArray.components.data(), result); // Build the first TP size_t stateIndex = indices[index].first; @@ -342,13 +343,13 @@ Trk::GsfMaterialMixtureConvolution::update( // Gather the merges -- order is important -- RHS is smaller than LHS std::vector<std::pair<int8_t, int8_t>> merges; - if (n > m_maximumNumberOfComponents) - merges = findMerges(components.buffer(), n, m_maximumNumberOfComponents); - + if (n > m_maximumNumberOfComponents) { + merges = findMerges(componentsArray, m_maximumNumberOfComponents); + } // Merge components MultiComponentStateAssembler::Cache assemblerCache; int nMerges(0); - std::vector<bool> isMerged(n, false); + GSFUtils::IsMergedArray isMerged={}; for (const auto& mergePair : merges) { const int8_t mini = mergePair.first; const int8_t minj = mergePair.second; diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx index b3d2f52d74e0c347066d3d61ca782efe977a2c29..c313f4ec949598c268aec6b04ba426a4c13e1326 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx @@ -16,6 +16,51 @@ #include "TrkMeasurementBase/MeasurementBase.h" #include <memory> +namespace { +bool +invalidComponent(const Trk::TrackParameters* trackParameters) +{ + const auto* measuredCov = trackParameters->covariance(); + bool rebuildCov = false; + if (!measuredCov) { + rebuildCov = true; + } else { + for (int i(0); i < 5; ++i) { + if ((*measuredCov)(i, i) <= 0.) { + rebuildCov = true; + } + } + } + return rebuildCov; +} + +Trk::MultiComponentState +rebuildState(Trk::MultiComponentState&& stateBeforeUpdate) +{ + Trk::MultiComponentState stateWithInsertedErrors = + std::move(stateBeforeUpdate); + // We need to loop checking for invalid componets i.e negative covariance + // diagonal elements and update them with a large covariance matrix + for (auto& component : stateWithInsertedErrors) { + const Trk::TrackParameters* trackParameters = component.first.get(); + const bool rebuildCov = invalidComponent(trackParameters); + if (rebuildCov) { + AmgSymMatrix(5) bigNewCovarianceMatrix = AmgSymMatrix(5)::Zero(); + const double covarianceScaler = 1.; + bigNewCovarianceMatrix(0, 0) = 250. * covarianceScaler; + bigNewCovarianceMatrix(1, 1) = 250. * covarianceScaler; + bigNewCovarianceMatrix(2, 2) = 0.25; + bigNewCovarianceMatrix(3, 3) = 0.25; + bigNewCovarianceMatrix(4, 4) = 0.001 * 0.001; + component.first->updateParameters(trackParameters->parameters(), + bigNewCovarianceMatrix); + } + } + return stateWithInsertedErrors; +} + +} // end of anonymous namespace + Trk::MultiComponentState Trk::GsfMeasurementUpdator::update( Trk::MultiComponentState&& stateBeforeUpdate, @@ -35,12 +80,12 @@ Trk::GsfMeasurementUpdator::update( Trk::MultiComponentState stateWithInsertedErrors = rebuildState(std::move(stateBeforeUpdate)); // Perform the measurement update with the modified state - return calculateFilterStep(std::move(stateWithInsertedErrors), measurement, 1); + return calculateFilterStep( + std::move(stateWithInsertedErrors), measurement, 1); } // Perform the measurement update - return calculateFilterStep(std::move(stateBeforeUpdate), measurement, 1); - + return calculateFilterStep(std::move(stateBeforeUpdate), measurement, 1); } Trk::MultiComponentState @@ -75,7 +120,7 @@ Trk::GsfMeasurementUpdator::update(Trk::MultiComponentState&& stateBeforeUpdate, } // Perform the measurement update - Trk::MultiComponentState updatedState= + Trk::MultiComponentState updatedState = calculateFilterStep(std::move(stateBeforeUpdate), measurement, fitQoS); if (updatedState.empty()) { @@ -237,59 +282,3 @@ Trk::GsfMeasurementUpdator::calculateFilterStep( return assembledUpdatedState; } -bool -Trk::GsfMeasurementUpdator::invalidComponent( - const Trk::TrackParameters* trackParameters) const -{ - const auto* measuredCov = trackParameters->covariance(); - bool rebuildCov = false; - if (!measuredCov) { - rebuildCov = true; - } else { - for (int i(0); i < 5; ++i) { - if ((*measuredCov)(i, i) <= 0.) { - rebuildCov = true; - } - } - } - return rebuildCov; -} - -Trk::MultiComponentState -Trk::GsfMeasurementUpdator::rebuildState( - Trk::MultiComponentState&& stateBeforeUpdate) const -{ - Trk::MultiComponentState stateWithInsertedErrors{}; - - auto component = stateBeforeUpdate.begin(); - for (; component != stateBeforeUpdate.end(); ++component) { - - const Trk::TrackParameters* trackParameters = component->first.get(); - double weight = component->second; - bool rebuildCov = invalidComponent(trackParameters); - if (rebuildCov) { - AmgSymMatrix(5)* bigNewCovarianceMatrix = new AmgSymMatrix(5); - bigNewCovarianceMatrix->setZero(); - double covarianceScaler = 1.; - (*bigNewCovarianceMatrix)(0, 0) = 250. * covarianceScaler; - (*bigNewCovarianceMatrix)(1, 1) = 250. * covarianceScaler; - (*bigNewCovarianceMatrix)(2, 2) = 0.25; - (*bigNewCovarianceMatrix)(3, 3) = 0.25; - (*bigNewCovarianceMatrix)(4, 4) = 0.001 * 0.001; - - AmgVector(5) par = trackParameters->parameters(); - Trk::TrackParameters* trackParametersWithError = - trackParameters->associatedSurface().createTrackParameters( - par[Trk::loc1], - par[Trk::loc2], - par[Trk::phi], - par[Trk::theta], - par[Trk::qOverP], - bigNewCovarianceMatrix); - stateWithInsertedErrors.emplace_back(trackParametersWithError, weight); - } else { - stateWithInsertedErrors.push_back(std::move(*component)); - } - } - return stateWithInsertedErrors; -} diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/KLGaussianMixtureReduction.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/KLGaussianMixtureReduction.cxx index b02026d63ad66ff84d0d74e7c7031773d2c43b15..d110bcaac7392649f5be41336fe6e110d65be369 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/KLGaussianMixtureReduction.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/KLGaussianMixtureReduction.cxx @@ -9,6 +9,7 @@ #include "TrkGaussianSumFilter/GsfConstants.h" #include <limits> #include <stdexcept> +#include <vector> #if !defined(__GNUC__) #define __builtin_assume_aligned(X, N) X #else @@ -124,10 +125,10 @@ recalculateDistances(const Component1D* componentsIn, const int32_t n) { const Component1D* components = static_cast<const Component1D*>( - __builtin_assume_aligned(componentsIn, alignment)); + __builtin_assume_aligned(componentsIn, GSFConstants::alignment)); - float* distances = - static_cast<float*>(__builtin_assume_aligned(distancesIn, alignment)); + float* distances = static_cast<float*>( + __builtin_assume_aligned(distancesIn, GSFConstants::alignment)); const int32_t j = mini; const int32_t indexConst = (j - 1) * j / 2; @@ -167,9 +168,9 @@ calculateAllDistances(const Component1D* componentsIn, { const Component1D* components = static_cast<const Component1D*>( - __builtin_assume_aligned(componentsIn, alignment)); - float* distances = - static_cast<float*>(__builtin_assume_aligned(distancesIn, alignment)); + __builtin_assume_aligned(componentsIn, GSFConstants::alignment)); + float* distances = static_cast<float*>( + __builtin_assume_aligned(distancesIn, GSFConstants::alignment)); for (int32_t i = 1; i < n; ++i) { const int32_t indexConst = (i - 1) * i / 2; @@ -187,8 +188,8 @@ calculateAllDistances(const Component1D* componentsIn, void resetDistances(float* distancesIn, const int32_t minj, const int32_t n) { - float* distances = - static_cast<float*>(__builtin_assume_aligned(distancesIn, alignment)); + float* distances = static_cast<float*>( + __builtin_assume_aligned(distancesIn, GSFConstants::alignment)); const int32_t j = minj; const int32_t indexConst = (j - 1) * j / 2; // Rows @@ -210,33 +211,31 @@ namespace GSFUtils { * which componets got merged. */ std::vector<std::pair<int8_t, int8_t>> -findMerges(Component1D* componentsIn, - const int8_t inputSize, - const int8_t reducedSize) +findMerges(Component1DArray& componentsIn, const int8_t reducedSize) { Component1D* components = static_cast<Component1D*>( - __builtin_assume_aligned(componentsIn, alignment)); + __builtin_assume_aligned(componentsIn.components.data(), GSFConstants::alignment)); + + const int32_t n = componentsIn.numComponents; // Sanity check. Function throw on invalid inputs - if (inputSize < 0 || - inputSize > GSFConstants::maxComponentsAfterConvolution || - reducedSize > inputSize) { + if (n < 0 || n > GSFConstants::maxComponentsAfterConvolution || + reducedSize > n) { throw std::runtime_error("findMerges :Invalid InputSize or reducedSize"); } // We need just one for the full duration of a job const static std::vector<triangularToIJ> convert = createToIJMaxRowCols(); - // Based on the inputSize allocate enough space for the pairwise distances - const int8_t n = inputSize; + // Based on the inputSize n allocate enough space for the pairwise distances const int32_t nn = n * (n - 1) / 2; // We work with a multiple of 8*floats (32 bytes). const int32_t nn2 = (nn & 7) == 0 ? nn : nn + (8 - (nn & 7)); - AlignedDynArray<float, alignment> distances( + AlignedDynArray<float, GSFConstants::alignment> distances( nn2, std::numeric_limits<float>::max()); // vector to be returned std::vector<std::pair<int8_t, int8_t>> merges; - merges.reserve(inputSize - reducedSize); + merges.reserve(n - reducedSize); // initial distance calculation calculateAllDistances(components, distances.buffer(), n); @@ -291,7 +290,8 @@ int32_t findMinimumIndex(const float* distancesIn, const int n) { using namespace CxxUtils; - float* array = (float*)__builtin_assume_aligned(distancesIn, alignment); + float* array = + (float*)__builtin_assume_aligned(distancesIn, GSFConstants::alignment); const vec<int, 8> increment = { 8, 8, 8, 8, 8, 8, 8, 8 }; vec<int, 8> indicesIn = { 0, 1, 2, 3, 4, 5, 6, 7 }; vec<int, 8> minindices = indicesIn; @@ -326,7 +326,8 @@ int32_t findMinimumIndex(const float* distancesIn, const int n) { using namespace CxxUtils; - float* array = (float*)__builtin_assume_aligned(distancesIn, alignment); + float* array = + (float*)__builtin_assume_aligned(distancesIn, GSFConstants::alignment); // Do 2 vectors of 4 elements , so 8 at time const vec<int, 4> increment = { 8, 8, 8, 8 }; vec<int, 4> indices1 = { 0, 1, 2, 3 }; @@ -379,7 +380,8 @@ int32_t findMinimumIndex(const float* distancesIn, const int n) { using namespace CxxUtils; - float* array = (float*)__builtin_assume_aligned(distancesIn, alignment); + float* array = + (float*)__builtin_assume_aligned(distancesIn, GSFConstants::alignment); const vec<int, 4> increment = { 8, 8, 8, 8 }; vec<int, 4> indices1 = { 0, 1, 2, 3 }; vec<int, 4> indices2 = { 4, 5, 6, 7 }; diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/QuickCloseComponentsMultiStateMerger.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/QuickCloseComponentsMultiStateMerger.cxx index cf6f45471c6d06515cd6dff40eae0b1ad5744b46..e9a980890edd02214dad8bb47ea1f354ab32d2d1 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/QuickCloseComponentsMultiStateMerger.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/QuickCloseComponentsMultiStateMerger.cxx @@ -27,23 +27,24 @@ mergeFullDistArray(Trk::MultiComponentStateAssembler::Cache& cache, Trk::MultiComponentState& statesToMerge, const unsigned int maximumNumberOfComponents) { + Component1DArray componentsArray; const int32_t n = statesToMerge.size(); - AlignedDynArray<Component1D, alignment> components(n); + componentsArray.numComponents = n; for (int32_t i = 0; i < n; ++i) { const AmgSymMatrix(5)* measuredCov = statesToMerge[i].first->covariance(); const AmgVector(5)& parameters = statesToMerge[i].first->parameters(); // Fill in infomation const double cov = measuredCov ? (*measuredCov)(Trk::qOverP, Trk::qOverP) : -1.; - components[i].mean = parameters[Trk::qOverP]; - components[i].cov = cov; - components[i].invCov = cov > 0 ? 1. / cov : 1e10; - components[i].weight = statesToMerge[i].second; + componentsArray.components[i].mean = parameters[Trk::qOverP]; + componentsArray.components[i].cov = cov; + componentsArray.components[i].invCov = cov > 0 ? 1. / cov : 1e10; + componentsArray.components[i].weight = statesToMerge[i].second; } // Gather the merges const std::vector<std::pair<int8_t, int8_t>> merges = - findMerges(components.buffer(), n, maximumNumberOfComponents); + findMerges(componentsArray, maximumNumberOfComponents); // Do the full 5D calculations of the merge for (const auto& mergePair : merges) { diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/test/testMergeComponents.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/test/testMergeComponents.cxx index 0a40643872c5181c20cc6dae475938edef0b997c..104730353ac4c75b77ddbed87e0ebe71a40421e1 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/test/testMergeComponents.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/test/testMergeComponents.cxx @@ -89,16 +89,17 @@ constexpr std::array<Component1D, n> input = { int main() { - AlignedDynArray<Component1D, alignment> components(n); + GSFUtils::Component1DArray componentsArray; + componentsArray.numComponents = n; // Create an array of all components to be merged for (int8_t i = 0; i < n; ++i) { - components[i].mean = input[i].mean; - components[i].cov = input[i].cov; - components[i].invCov = input[i].invCov; - components[i].weight = input[i].weight; + componentsArray.components[i].mean = input[i].mean; + componentsArray.components[i].cov = input[i].cov; + componentsArray.components[i].invCov = input[i].invCov; + componentsArray.components[i].weight = input[i].weight; } std::vector<std::pair<int8_t, int8_t>> mergeOrder = - findMerges(components.buffer(), n, 12); + findMerges(componentsArray, 12); for (const auto& i : mergeOrder) { std::cout << "[" << static_cast<int>(i.first) << ", " << static_cast<int>(i.second) << "]" << '\n'; diff --git a/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GXFTrajectory.h b/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GXFTrajectory.h index cc6439560e592f22bc99bd25e21ff934847d1b2a..ecf39131e4d4d6b90aa82044bb652730a333c817 100644 --- a/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GXFTrajectory.h +++ b/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GXFTrajectory.h @@ -66,11 +66,15 @@ namespace Trk { int numberOfPerigeeParameters(); int numberOfFitParameters(); int numberOfSiliconHits(); + int numberOfTRTPrecHits(); + int numberOfTRTTubeHits(); int numberOfTRTHits(); int numberOfHits(); int numberOfPseudoMeasurements(); int numberOfOutliers(); + void updateTRTHitCount(int index, float oldError); + const std::vector<std::unique_ptr<GXFTrackState>> & trackStates() const; std::vector<std::unique_ptr<GXFTrackState>> & trackStates(); std::vector < std::pair < double, double >>&scatteringAngles(); @@ -121,6 +125,8 @@ namespace Trk { int m_noutl; int m_nsihits; int m_ntrthits; + int m_ntrtprechits; + int m_ntrttubehits; int m_npseudo; int m_nmeasoutl; std::unique_ptr<const TrackParameters> m_refpar; diff --git a/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h b/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h index 86c15ba531082ce137e43a41f21bafb96e00c86c..23ef2bc5d3c0aeb8173485e0f856a574369aaf8c 100755 --- a/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h +++ b/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h @@ -924,6 +924,7 @@ namespace Trk { Gaudi::Property<double> m_p {this, "Momentum", 0.0}; Gaudi::Property<double> m_chi2cut {this, "TrackChi2PerNDFCut", 1.e15}; Gaudi::Property<double> m_scalefactor {this, "TRTTubeHitCut", 2.5}; + Gaudi::Property<double> m_minphfcut {this, "MinPHFCut", 0.}; Gaudi::Property<int> m_maxoutliers {this, "MaxOutliers", 10}; Gaudi::Property<int> m_maxit {this, "MaxIterations", 30}; diff --git a/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GXFTrajectory.cxx b/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GXFTrajectory.cxx index dbbc23c960ba20f02eda39d69ef86ce1f5604d1f..589c60c2aafa71dcd35af231f0e93ba04b0b1426 100644 --- a/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GXFTrajectory.cxx +++ b/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GXFTrajectory.cxx @@ -26,6 +26,8 @@ namespace Trk { m_nupstreambrems = 0; m_nsihits = 0; m_ntrthits = 0; + m_ntrtprechits = 0; + m_ntrttubehits = 0; m_npseudo = 0; m_nhits = 0; m_noutl = 0; @@ -55,6 +57,8 @@ namespace Trk { m_nupstreambrems = rhs.m_nupstreambrems; m_nsihits = rhs.m_nsihits; m_ntrthits = rhs.m_ntrthits; + m_ntrtprechits = rhs.m_ntrtprechits; + m_ntrttubehits = rhs.m_ntrttubehits; m_npseudo = rhs.m_npseudo; m_nhits = rhs.m_nhits; m_noutl = rhs.m_noutl; @@ -104,6 +108,8 @@ namespace Trk { m_nupstreambrems = rhs.m_nupstreambrems; m_nsihits = rhs.m_nsihits; m_ntrthits = rhs.m_ntrthits; + m_ntrtprechits = rhs.m_ntrtprechits; + m_ntrttubehits = rhs.m_ntrttubehits; m_nhits = rhs.m_nhits; m_npseudo = rhs.m_npseudo; m_noutl = rhs.m_noutl; @@ -199,6 +205,8 @@ namespace Trk { if (state->measurementType() == TrackState::TRT) { m_ntrthits++; + if (errors[0]<1) m_ntrtprechits++; + if (errors[0]>1) m_ntrttubehits++; } if (state->measurementType() == TrackState::Pseudo) { @@ -383,6 +391,22 @@ namespace Trk { } } + void GXFTrajectory::updateTRTHitCount(int index, float oldError) { + double error = (m_states[index]->measurementErrors())[0]; + if (m_states[index]->getStateType(TrackStateOnSurface::Outlier)) { + if (oldError<1) { m_ntrtprechits--; } + else {m_ntrttubehits--; } + } + if (error>1 && oldError<1) { // was precison, became tube + m_ntrttubehits++; + m_ntrtprechits--; + } + else if (error<1 && oldError>1) { // was tube, became precision + m_ntrttubehits--; + m_ntrtprechits++; + } + } + void GXFTrajectory::setPrefit(int isprefit) { m_prefit = isprefit; } @@ -425,6 +449,14 @@ namespace Trk { return m_ntrthits; } + int GXFTrajectory::numberOfTRTPrecHits() { + return m_ntrtprechits; + } + + int GXFTrajectory::numberOfTRTTubeHits() { + return m_ntrttubehits; + } + int GXFTrajectory::numberOfPseudoMeasurements() { return m_npseudo; } diff --git a/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx b/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx index c168976cfe8877b02c387e863eaf94f65417c2a3..756be534e5796ad1fa230d889b49c466907233ca 100644 --- a/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx +++ b/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx @@ -5209,6 +5209,20 @@ namespace Trk { } } } + + // PHF cut at iteration 3 (to save CPU time) + int ntrtprechits = trajectory.numberOfTRTPrecHits(); + int ntrttubehits = trajectory.numberOfTRTTubeHits(); + float phf = 1.; + if (ntrtprechits+ntrttubehits) { + phf = float(ntrtprechits)/float(ntrtprechits+ntrttubehits); + } + if (phf<m_minphfcut && it>=3) { + if ((ntrtprechits+ntrttubehits)>=15) { + return nullptr; + } + } + ATH_MSG_DEBUG("Iter = " << it << " | nTRTStates = " << ntrthits << " | nTRTPrecHits = " << ntrtprechits << " | nTRTTubeHits = " << ntrttubehits << " | nOutliers = " << trajectory.numberOfOutliers()); if (!trajectory.converged()) { cache.m_fittercode = updateFitParameters(trajectory, b, lu); @@ -6272,6 +6286,8 @@ namespace Trk { double *errors = state->measurementErrors(); double olderror = errors[0]; + + trajectory.updateTRTHitCount(stateno, olderror); for (int i = 0; i < nfitpars; i++) { if (weightderiv(measno, i) == 0) { @@ -6332,6 +6348,8 @@ namespace Trk { errors[0] = newerror; state->setMeasurement(std::move(newrot)); + trajectory.updateTRTHitCount(stateno, olderror); + for (int i = 0; i < nfitpars; i++) { if (weightderiv(measno, i) == 0) { continue; diff --git a/Tracking/TrkVertexFitter/TrkV0Fitter/src/TrkV0VertexFitter.cxx b/Tracking/TrkVertexFitter/TrkV0Fitter/src/TrkV0VertexFitter.cxx index 0704ab2ffda553a83c24e62ead2bc0bdd0ba62f0..b32151c3f1fa03d0de0c42e346402ee91a64e368 100755 --- a/Tracking/TrkVertexFitter/TrkV0Fitter/src/TrkV0VertexFitter.cxx +++ b/Tracking/TrkVertexFitter/TrkV0Fitter/src/TrkV0VertexFitter.cxx @@ -173,7 +173,7 @@ namespace Trk } } - for (auto ptr : measuredPerigees_delete){ delete ptr; } + for (const auto *ptr : measuredPerigees_delete){ delete ptr; } return fittedVxCandidate; } diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/Derivt.h b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/Derivt.h index abcac6ebe07fd0c5ae1d1854377056eb835985a2..31845901c604ebf6fdfc2e818ab0f8f63c6cca60 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/Derivt.h +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/Derivt.h @@ -46,7 +46,7 @@ namespace Trk { { public: VKMassConstraint(int,double, VKVertex*); - VKMassConstraint(int,double, const std::vector<int>&, VKVertex*); + VKMassConstraint(int,double, std::vector<int>, VKVertex*); ~VKMassConstraint(); friend std::ostream& operator<<( std::ostream& out, const VKMassConstraint& ); virtual VKConstraintBase* clone() const override; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/Propagator.h b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/Propagator.h index f82cac8ba370376d55bde68dd2ab47fea7f63a9d..ba8b7077bd2b0f1dd6e4fe6c04152eb7bb5d4de9 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/Propagator.h +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/Propagator.h @@ -54,7 +54,7 @@ class IVKalState; class vkalPropagator { public: vkalPropagator(); - ~vkalPropagator(); + ~vkalPropagator() = default; void Propagate(long int TrkID, long int Charge, diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/TrkVKalVrtCoreBase.h b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/TrkVKalVrtCoreBase.h index 830bd02a7c89634560cd620237a5713ed1ff79c5..5d3bf121ea6777a60d67351f9c1630bdb837fd1f 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/TrkVKalVrtCoreBase.h +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/TrkVKalVrtCoreBase.h @@ -44,7 +44,7 @@ namespace Trk { class TWRK // collection of temporary arrays for { public: - TWRK() = default; + TWRK() { }; //bypass initialization ~TWRK() = default;//default destructor allows compiler to optimize out method in this case. public: @@ -170,11 +170,11 @@ namespace Trk { std::vector<std::unique_ptr<VKConstraintBase> > ConstraintList; - void setRefV(double []); - void setCnstV(double []); - void setRefIterV(double []); - void setIniV(double []); - void setFitV(double []); + void setRefV(double []) noexcept; + void setCnstV(double []) noexcept; + void setRefIterV(double []) noexcept; + void setIniV(double []) noexcept; + void setFitV(double []) noexcept; VKVertex * nextCascadeVrt; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/VKalVrtBMag.h b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/VKalVrtBMag.h index ffe195e408455056995d8e8cdadb2be68c58f66f..8abd7c98117cea66703cbbbc46fdebae61c9270d 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/VKalVrtBMag.h +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/TrkVKalVrtCore/VKalVrtBMag.h @@ -1,59 +1,59 @@ /* Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration -*/ -/* General magnetic field in any point access */ +*/ +/* General magnetic field in any point access */ /* If external magnetic field handler is provided as */ /* either an object inherited from the baseMagFld class */ /* or a function addrMagHandler - the vkalMagFld class */ /* will use it, otherwise the vkalMagFld returns */ /* the constant magnetic field. */ /* */ -/* Thread-safe implementation */ -/*---------------------------------------------------------*/ -#ifndef TRKVKALVRTCORE_VKALVRTBMAG_H -#define TRKVKALVRTCORE_VKALVRTBMAG_H +/* Thread-safe implementation */ +/*---------------------------------------------------------*/ +#ifndef TRKVKALVRTCORE_VKALVRTBMAG_H +#define TRKVKALVRTCORE_VKALVRTBMAG_H -namespace Trk { +namespace Trk { class VKalVrtControlBase; - - typedef void (*addrMagHandler)(double,double,double, double& ,double& , double& ); + + typedef void (*addrMagHandler)(double,double,double, double& ,double& , double& ); // // Base class for concrete megnetic field implementations (e.g. Athena tool) to be called by vkalMagFld -// - class baseMagFld { - public: - baseMagFld(); - virtual ~baseMagFld(); - virtual void getMagFld(const double,const double,const double,double&,double&,double&) const =0; - }; - +// + class baseMagFld { + public: + baseMagFld(); + virtual ~baseMagFld(); + virtual void getMagFld(const double,const double,const double,double&,double&,double&) const =0; + }; + // // Main magnetic field implememtation in VKalVrtCore package. // Depending on VKalVrtControlBase it either calls external magnetic field // or uses default fixed magnetic field. -// - class vkalMagFld { - public: - vkalMagFld(); - ~vkalMagFld(); - - void getMagFld(const double,const double,const double,double&,double&,double&, const VKalVrtControlBase*) const; +// + class vkalMagFld { + public: + vkalMagFld(); + ~vkalMagFld() = default; + + void getMagFld(const double,const double,const double,double&,double&,double&, const VKalVrtControlBase*) const; double getMagFld(const double xyz[3], const VKalVrtControlBase* FitControl) const; - double getCnvCst() const; - - private: - const double m_cnstBMAG; - const double m_vkalCnvMagFld; - double m_saveXpos; - double m_saveYpos; - double m_saveZpos; - double m_saveBX; - double m_saveBY; - double m_saveBZ; - }; - -} -#endif + double getCnvCst() const; + + private: + const double m_cnstBMAG; + const double m_vkalCnvMagFld; + double m_saveXpos; + double m_saveYpos; + double m_saveZpos; + double m_saveBX; + double m_saveBY; + double m_saveBZ; + }; + +} +#endif diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFit.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFit.cxx index d498d6c3bdd5ee8e151d1a58c471a99a279aca49..aafd833e0bad4484659cb981efb1abf714f0f042 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFit.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFit.cxx @@ -192,7 +192,7 @@ int fitVertex(VKVertex * vk) if(vrtForCFT.wmfit[ic]>0){ // new mass constraint index.clear(); for(tk=0; tk<NTRK; tk++){ if( vrtForCFT.indtrkmc[ic][tk] )index.push_back(tk); } - vk->ConstraintList.emplace_back(std::make_unique<VKMassConstraint>( NTRK, vrtForCFT.wmfit[ic], index, vk)); + vk->ConstraintList.emplace_back(std::make_unique<VKMassConstraint>( NTRK, vrtForCFT.wmfit[ic], std::move(index), vk)); } } } diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascade.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascade.cxx index 398977cbf6effea18aaada3d0826aa3fe59138ae..14642e3d753e860e9f00c878815a8a71a8438971 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascade.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascade.cxx @@ -43,7 +43,7 @@ extern double cfVrtDstSig( VKVertex * , bool ); extern void robtest(VKVertex * , long int ); extern int fixPseudoTrackPt(long int NPar, double * fullMtx, double * LSide, CascadeEvent&); -extern void getNewCov(double *OldCov, double* Der, double* Cov, long int DIM); +extern void getNewCov(double *OldCov, double* Der, double* Cov, long int DIM) noexcept; //-------------------------------------------------------------------- // @@ -433,12 +433,12 @@ int fitVertexCascade( VKVertex * vk, int Pointing) IERR = vkMSolve(fullMatrix, fullLSide, fullNPar); if(IERR){ delete[] fullMatrix; delete[] fullLSide; delete[] tmpLSide; delete[] iniCovMatrix;return IERR;} }else{ //Last step. Solution+full error matrix - cascadeEvent_.fullCovMatrix = std::make_unique< double[] >(fullNPar*fullNPar); //Create fresh matrix + cascadeEvent_.fullCovMatrix.reset( new double[fullNPar*fullNPar] ); //Create fresh matrix IERR = vkMSolve(fullMatrix, fullLSide, fullNPar, cascadeEvent_.fullCovMatrix.get()); if(IERR){ delete[] fullMatrix; delete[] fullLSide; delete[] tmpLSide; delete[] iniCovMatrix; cascadeEvent_.fullCovMatrix.reset(); return IERR;} //std::cout<<"fulcov="; for(int tt=0; tt<fullNPar; tt++)std::cout<<cascadeEvent_.fullCovMatrix[tt*fullNPar+tt]<<", "; std::cout<<'\n'; - auto newCov = std::make_unique<double[]>(fullNPar*fullNPar); //Check via error transfer from left side (measured values). Gives exactly the same errors - correct!!! + std::unique_ptr<double[]> newCov(new double[fullNPar*fullNPar]); //Check via error transfer from left side (measured values). Gives exactly the same errors - correct!!! getNewCov(iniCovMatrix, cascadeEvent_.fullCovMatrix.get(), newCov.get(), fullNPar); cascadeEvent_.fullCovMatrix=std::move(newCov); //Unique_ptr will handle deletion automatically } diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascadeScale.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascadeScale.cxx index 7745424f0b273bf84dc352873395a27b279ba594..eab8178064bf67ec5a724230d2aea02f31720986 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascadeScale.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CFitCascadeScale.cxx @@ -223,7 +223,7 @@ std::cout<<"================================================="<<sum_dstToVrt<<'\ // if(sum_dstToVrt>limDstToVrt*(cascadeEvent_.cascadeNV-1) )return -2; //Pointing is not resolved long int fullNPar = getCascadeNPar(cascadeEvent_); - cascadeEvent_.fullCovMatrix = std::make_unique< double[] >(fullNPar*fullNPar); + cascadeEvent_.fullCovMatrix.reset( new double[fullNPar*fullNPar] ); for(int im=0; im<fullNPar*fullNPar; im++)cascadeEvent_.fullCovMatrix[im]=0.; for(int im=0; im<fullNPar; im++)cascadeEvent_.fullCovMatrix[im*fullNPar + im]=1.; int NStart=0; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeDefinition.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeDefinition.cxx index 5048ff8506510dc979e182793a42dadc5c0efa1c..348991dbb33a8008e0bf22cc8cd27f179d471790 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeDefinition.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeDefinition.cxx @@ -23,7 +23,7 @@ int initCascadeEngine(CascadeEvent &); VKVertex* startCascade( std::unique_ptr<VKVertex> vk) { - auto ptr = vk.get(); + auto *ptr = vk.get(); ptr->vk_fitterControl->getCascadeEvent()->cascadeNV=1; ptr->vk_fitterControl->getCascadeEvent()->nearPrmVertex=0; ptr->vk_fitterControl->getCascadeEvent()->cascadeVertexList.clear(); @@ -33,7 +33,7 @@ VKVertex* startCascade( std::unique_ptr<VKVertex> vk) VKVertex* addCascadeEntry( std::unique_ptr<VKVertex> vk) { - auto ptr = vk.get(); + auto *ptr = vk.get(); ptr->vk_fitterControl->getCascadeEvent()->cascadeNV++; ptr->vk_fitterControl->getCascadeEvent()->cascadeVertexList.push_back(std::move(vk)); return ptr->vk_fitterControl->getCascadeEvent()->cascadeVertexList.back().get(); @@ -48,7 +48,7 @@ VKVertex* addCascadeEntry( std::unique_ptr<VKVertex> vk, const std::vector<int> vk->includedVrt.push_back(predecessor); } // - auto ptr = vk.get(); + auto *ptr = vk.get(); ptr->vk_fitterControl->getCascadeEvent()->cascadeNV++; ptr->vk_fitterControl->getCascadeEvent()->cascadeVertexList.push_back(std::move(vk)); return ptr->vk_fitterControl->getCascadeEvent()->cascadeVertexList.back().get(); @@ -135,7 +135,7 @@ int makeCascade(VKalVrtControl & FitCONTROL, long int NTRK, long int *ich, doubl if(!includeNV) { // no predecessors addCascadeEntry( std::move(VRT) ); }else{ - auto vrttemp = addCascadeEntry( std::move(VRT), cascadeDefinition[iv]); + auto *vrttemp = addCascadeEntry( std::move(VRT), cascadeDefinition[iv]); for (it=0; it<includeNV ; it++) { // tracks created out of predecessing vertices vrttemp->TrackList.emplace_back(new VKTrack(-999, tmp, tmp , vrttemp, 0.)); vrttemp->tmpArr.emplace_back(new TWRK()); @@ -147,7 +147,7 @@ int makeCascade(VKalVrtControl & FitCONTROL, long int NTRK, long int *ich, doubl if(vEstimDone){ IERR = translateToFittedPos(*(FitCONTROL.getCascadeEvent()),1.); if(IERR)return IERR; for( iv=0; iv<FitCONTROL.getCascadeEvent()->cascadeNV; iv++){ - auto VRT=FitCONTROL.getCascadeEvent()->cascadeVertexList[iv].get(); + auto *VRT=FitCONTROL.getCascadeEvent()->cascadeVertexList[iv].get(); int NTv = VRT->TrackList.size(); // Number of tracks at vertex for(it=0; it<NTv; it++){ trk=VRT->TrackList[it].get(); @@ -263,7 +263,7 @@ int setCascadeMassConstraint(CascadeEvent & cascadeEvent_, long int IV, std::vec tmpIndex.push_back(pseudoInVrt[it]+nRealTrk); } - vk->ConstraintList.emplace_back(new VKMassConstraint( NTRK, Mass, tmpIndex, vk)); + vk->ConstraintList.emplace_back(new VKMassConstraint( NTRK, Mass, std::move(tmpIndex), vk)); return 0; } diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeUtils.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeUtils.cxx index 953db14246d5e6c1cbfcbf0c8e0b211e4d0bbab9..48edfcf8c94f1c0a9ffef0c3871874e1a99fe1db 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeUtils.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/CascadeUtils.cxx @@ -22,9 +22,10 @@ int fixPseudoTrackPt(long int NPar, double * fullMtx, double * LSide, CascadeEve { int iv,it,ivnext; - auto DerivC = std::make_unique<double[]>(NPar); - auto DerivP = std::make_unique<double[]>(NPar); - auto DerivT = std::make_unique<double[]>(NPar); + //Deliberately not make_unique to bypass inititalization + std::unique_ptr<double[]> DerivC( new double[NPar] ); + std::unique_ptr<double[]> DerivP( new double[NPar] ); + std::unique_ptr<double[]> DerivT( new double[NPar] ); // std::vector<double> vMagFld; double vBx,vBy,vBz; for( iv=0; iv<cascadeEvent_.cascadeNV; iv++){ @@ -265,7 +266,7 @@ void copyFullMtx(double *Input, long int IPar, long int IDIM, //-------------------------------------------------------------------- // Make the convolution Cov=D*OldCov*Dt // -void getNewCov(double *OldCov, double* Der, double* Cov, long int DIM) +void getNewCov(double *OldCov, double* Der, double* Cov, long int DIM) noexcept { int i,j,it,jt; for( i=0; i<DIM; i++){ diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/DummyMag.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/DummyMag.cxx index db66cb3a9790d45e8e0725554a70094262a0b234..94c5c0964822374129cf24af937566f4e3285c2f 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/DummyMag.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/DummyMag.cxx @@ -31,7 +31,7 @@ vkalMagFld::vkalMagFld(): m_saveBZ=0.; } -vkalMagFld::~vkalMagFld() = default; + baseMagFld::baseMagFld() = default; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/FullMtx.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/FullMtx.cxx index cc063af2435e1d8b03570e3b831a7127ab3b8554..b2fda0b2e4f43f6fdd14eab1051c319b4e1af170 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/FullMtx.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/FullMtx.cxx @@ -1,7 +1,7 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + #include "TrkVKalVrtCore/CommonPars.h" #include "TrkVKalVrtCore/TrkVKalVrtCoreBase.h" #include "TrkVKalVrtCore/Derivt.h" @@ -90,19 +90,20 @@ int FullMCNSTfill(VKVertex * vk, double * ader, double * LSide) // int NPar=3*NTrkM+3; for (i=0; i<NPar; i++) { for (j=0; j<NPar; j++) ader[i+j*NPar]=0.; } - std::vector<std::vector< Vect3DF> > tf0t; // derivative collectors - std::vector< Vect3DF > th0t; // derivative collectors + std::vector<std::vector< const Vect3DF*> > tf0t; // derivative collectors + std::vector< const Vect3DF* > th0t; // derivative collectors std::vector< double > taa; // derivative collectors - std::vector< Vect3DF > tmpVec; + std::vector< const Vect3DF* > tmpVec; for(ii=0; ii<(int)vk->ConstraintList.size();ii++){ for(ic=0; ic<(int)vk->ConstraintList[ii]->NCDim; ic++){ taa.push_back( vk->ConstraintList[ii]->aa[ic] ); - th0t.push_back( vk->ConstraintList[ii]->h0t[ic] ); + th0t.push_back( &(vk->ConstraintList[ii]->h0t[ic]) ); tmpVec.clear(); + tmpVec.reserve(vk->ConstraintList[ii]->f0t.size()); for(it=0; it<(int)vk->ConstraintList[ii]->f0t.size(); it++){ - tmpVec.push_back( vk->ConstraintList[ii]->f0t[it][ic] ); + tmpVec.push_back( &(vk->ConstraintList[ii]->f0t[it][ic]) ); } - tf0t.push_back( tmpVec ); + tf0t.push_back( std::move(tmpVec) ); } } //----------------------------------------------------------------------------- @@ -179,19 +180,19 @@ int FullMCNSTfill(VKVertex * vk, double * ader, double * LSide) // int NTrP=NTRK*3 + 3; // track part of matrix for(ic=0; ic<totNC; ic++){ - ader[(0) + (NTrP+ic)*NPar] = -2.*th0t[ic].X; - ader[(1) + (NTrP+ic)*NPar] = -2.*th0t[ic].Y; - ader[(2) + (NTrP+ic)*NPar] = -2.*th0t[ic].Z; - ader[(0)*NPar + (NTrP+ic) ] = -2.*th0t[ic].X; - ader[(1)*NPar + (NTrP+ic) ] = -2.*th0t[ic].Y; - ader[(2)*NPar + (NTrP+ic) ] = -2.*th0t[ic].Z; + ader[(0) + (NTrP+ic)*NPar] = -2.*th0t[ic]->X; + ader[(1) + (NTrP+ic)*NPar] = -2.*th0t[ic]->Y; + ader[(2) + (NTrP+ic)*NPar] = -2.*th0t[ic]->Z; + ader[(0)*NPar + (NTrP+ic) ] = -2.*th0t[ic]->X; + ader[(1)*NPar + (NTrP+ic) ] = -2.*th0t[ic]->Y; + ader[(2)*NPar + (NTrP+ic) ] = -2.*th0t[ic]->Z; for (it=0; it<NTRK; ++it) { - ader[(it*3+3+0) + (NTrP+ic)*NPar] = - 2.*tf0t[ic][it].X; - ader[(it*3+3+1) + (NTrP+ic)*NPar] = - 2.*tf0t[ic][it].Y; - ader[(it*3+3+2) + (NTrP+ic)*NPar] = - 2.*tf0t[ic][it].Z; - ader[(it*3+3+0)*NPar + (NTrP+ic)] = - 2.*tf0t[ic][it].X; - ader[(it*3+3+1)*NPar + (NTrP+ic)] = - 2.*tf0t[ic][it].Y; - ader[(it*3+3+2)*NPar + (NTrP+ic)] = - 2.*tf0t[ic][it].Z; + ader[(it*3+3+0) + (NTrP+ic)*NPar] = - 2.*tf0t[ic][it]->X; + ader[(it*3+3+1) + (NTrP+ic)*NPar] = - 2.*tf0t[ic][it]->Y; + ader[(it*3+3+2) + (NTrP+ic)*NPar] = - 2.*tf0t[ic][it]->Z; + ader[(it*3+3+0)*NPar + (NTrP+ic)] = - 2.*tf0t[ic][it]->X; + ader[(it*3+3+1)*NPar + (NTrP+ic)] = - 2.*tf0t[ic][it]->Y; + ader[(it*3+3+2)*NPar + (NTrP+ic)] = - 2.*tf0t[ic][it]->Z; } } // diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Matrix.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Matrix.cxx index 591265542343028793e8534b59dc0bb4c84a02c4..5dd945127905721a953b0428e047f86d80ac47c1 100644 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Matrix.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Matrix.cxx @@ -42,7 +42,7 @@ double cfSmallEigenvalue(double *cov,long int n ) int cfInv5(double *cov, double *wgt ) { - extern void dsinv(long int *, double *, long int, long int *); + extern void dsinv(long int , double *, long int, long int *) noexcept; double dest[25]; long int i, j, k, N; /* -----------------------------------------*/ @@ -63,7 +63,7 @@ int cfInv5(double *cov, double *wgt ) for (j = 0; j < N; ++j) dest[i*N+j] -= X[i]*X[j]/cov[14]; } long int jerr; - dsinv(&N, dest, N, &jerr); + dsinv(N, dest, N, &jerr); if(jerr) return jerr; double L[4]={0.,0.,0.,0.}; @@ -82,7 +82,7 @@ int cfInv5(double *cov, double *wgt ) int cfdinv(double *cov, double *wgt, long int NI ) { - extern void dsinv(long int *, double *, long int, long int *); + extern void dsinv(long int , double *, long int, long int *) noexcept; double dest[100] /* was [10][10] */; long int i, j, k, n, ib; @@ -129,7 +129,7 @@ int cfdinv(double *cov, double *wgt, long int NI ) /* -- INVERT */ /* ccc CALL DINV(N,DEST,N,TMP,JERR) */ long int jerr; - dsinv(&n, dest, n, &jerr); + dsinv(n, dest, n, &jerr); //if (eig[0]<=eig[n-1]*1.e-12 && NI>0)std::cout<<" in dsinv="<<jerr<<'\n'; if(jerr)return jerr; /* -- PACK MATRIX */ @@ -145,7 +145,7 @@ int cfdinv(double *cov, double *wgt, long int NI ) } -void dsinv(long int *n, double *a, long int DIM, long int *ifail) +void dsinv(long int n, double *a, long int DIM, long int *ifail) noexcept { long int a_dim1, a_offset, i__1, i__2, i__3; long int i__, j, k, l; @@ -161,17 +161,17 @@ void dsinv(long int *n, double *a, long int DIM, long int *ifail) /* Function Body */ jp1 = 0; *ifail = 0; - i__1 = *n; + i__1 = n; for (j = 1; j <= i__1; ++j) { if (a[j + j * a_dim1] <= 0.) { goto L150; } a[j + j * a_dim1] = 1. / a[j + j * a_dim1]; - if (j == *n) { + if (j == n) { goto L199; } jp1 = j + 1; - i__2 = *n; + i__2 = n; for (l = jp1; l <= i__2; ++l) { a[j + l * a_dim1] = a[j + j * a_dim1] * a[l + j * a_dim1]; s1 = -a[l + (j + 1) * a_dim1]; @@ -187,15 +187,15 @@ L150: return; L199: - if (*n == 1) { + if (n == 1) { goto L399; } a[(a_dim1 << 1) + 1] = -a[(a_dim1 << 1) + 1]; a[a_dim1 + 2] = a[(a_dim1 << 1) + 1] * a[(a_dim1 << 1) + 2]; - if (*n == 2) { + if (n == 2) { goto L320; } - i__1 = *n; + i__1 = n; for (j = 3; j <= i__1; ++j) { jm2 = j - 2; i__2 = jm2; @@ -216,9 +216,9 @@ L320: j = 1; L323: s33 = a[j + j * a_dim1]; - if (j == *n) goto L325; + if (j == n) goto L325; jp1 = j + 1; - i__1 = *n; + i__1 = n; for (i__ = jp1; i__ <= i__1; ++i__) { s33 = a[j + i__ * a_dim1] * a[i__ + j * a_dim1] + s33; } @@ -229,21 +229,21 @@ L325: i__1 = jm1; for (k = 1; k <= i__1; ++k) { s32 = 0.; - i__2 = *n; + i__2 = n; for (i__ = j; i__ <= i__2; ++i__) { s32 = a[k + i__ * a_dim1] * a[i__ + j * a_dim1] + s32; } a[k + j * a_dim1] = s32; a[j + k * a_dim1] = s32; } - if (j < *n) goto L323; + if (j < n) goto L323; L399: return; } -void scaleg(double *g, double *scale, long int N, long int mfirst) +void scaleg(double *g, double *scale, long int N, long int mfirst) noexcept { long int g_dim1, g_offset, i__, j; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Propagate.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Propagate.cxx index 5efe0060c1979c84f7954d75a6e744237459fbf2..d549ae2b7f01e9b8272f0c2035363192de9e41eb 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Propagate.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/Propagate.cxx @@ -131,7 +131,7 @@ extern void cfnewpm (double*, double*, double*, double*, double*, double*, const // Propagator object // vkalPropagator::vkalPropagator()= default; - vkalPropagator::~vkalPropagator() = default; + basePropagator::basePropagator() = default; basePropagator::~basePropagator() = default; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/TrkVKalVrtCoreBase.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/TrkVKalVrtCoreBase.cxx index aae85b40a3e5d25dd6daa36d48ea8588c89b1ec8..26e64fad0abd3ce76602231920962faf9487521f 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/TrkVKalVrtCoreBase.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/TrkVKalVrtCoreBase.cxx @@ -119,11 +119,11 @@ namespace Trk { { // for( int i=0; i<(int)includedVrt.size(); i++) includedVrt[i]=0; // these vertice are not owned, then must not be deleted. } - void VKVertex::setRefV(double v[3]){ refV[0]=v[0]; refV[1]=v[1]; refV[2]=v[2];} - void VKVertex::setRefIterV(double v[]){ refIterV[0]=v[0]; refIterV[1]=v[1]; refIterV[2]=v[2];} - void VKVertex::setIniV(double v[3]){ iniV[0]=v[0]; iniV[1]=v[1]; iniV[2]=v[2];} - void VKVertex::setFitV(double v[3]){ fitV[0]=v[0]; fitV[1]=v[1]; fitV[2]=v[2];} - void VKVertex::setCnstV(double v[3]){ cnstV[0]=v[0]; cnstV[1]=v[1]; cnstV[2]=v[2];} + void VKVertex::setRefV(double v[3]) noexcept { std::copy(v, v+3, refV);} + void VKVertex::setRefIterV(double v[]) noexcept { std::copy(v, v+3, refIterV); } + void VKVertex::setIniV(double v[3]) noexcept { std::copy(v, v+3, iniV); } + void VKVertex::setFitV(double v[3]) noexcept { std::copy(v, v+3, fitV); } + void VKVertex::setCnstV(double v[3]) noexcept { std::copy(v, v+3, cnstV);} VKVertex::VKVertex(const VKVertex & src): //copy constructor diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFit.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFit.cxx index 18d510b9e67873055865772aa5bb67a3bbdebdbf..33db41f19070b487508bf7ec4015d0879c96e1f3 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFit.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFit.cxx @@ -61,7 +61,7 @@ namespace Trk { int ic, jj, it, jt, ii, kt; int j, k, l; - extern void dsinv(long int *, double *, long int , long int *); + extern void dsinv(long int , double *, long int , long int *) noexcept; //extern void digx(double *, double *, double *, long int , long int ); extern void vkGetEigVal(double ci[], double d[], int n); extern int cfdinv(double *, double *, long int); @@ -552,7 +552,7 @@ namespace Trk { } //---------------------------------------------------------------------------------- long int NParam = NTRK*3 + 3; - dsinv(&NParam, vk->ader, vkalNTrkM*3+3, &IERR); + dsinv(NParam, vk->ader, vkalNTrkM*3+3, &IERR); if ( IERR != 0) { std::cout << " Bad problem in CFIT inversion ierr="<<IERR<<", "<<eigv[2]<<'\n'; return IERR; } @@ -666,7 +666,7 @@ namespace Trk { extern double finter(double , double , double , double , double , double ); extern double cfchi2(double *, double *, VKTrack *); - extern double getCnstValues2( VKVertex * vk ); + extern double getCnstValues2( VKVertex * vk ) noexcept; extern void applyConstraints( VKVertex * vk ); double setLimitedFitVrt(VKVertex * vk, double alf, double bet, double dCoefNorm, double newVrt[3]) diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitC.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitC.cxx index 675f6e8df8d1044199cb2395603b6f52ee7144ac..6b59ab0dedd7f7a25d45af3b560c44367688b94c 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitC.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitC.cxx @@ -13,8 +13,8 @@ namespace Trk { //extern void digx(double *, double *, double *, long int , long int ); - extern void dsinv(long int *, double *, long int , long int *); - extern void scaleg(double *, double *, long int ,long int ); + extern void dsinv(long int, double *, long int , long int *) noexcept; + extern void scaleg(double *, double *, long int ,long int ) noexcept; int vtcfitc( VKVertex * vk ) @@ -36,59 +36,62 @@ int vtcfitc( VKVertex * vk ) // // Extruction of derivatives // - std::vector<std::vector< Vect3DF> > tf0t; // derivative collectors - std::vector< Vect3DF > th0t; // derivative collectors + std::vector<std::vector< const Vect3DF*> > tf0t; // derivative collectors + std::vector< const Vect3DF* > th0t; // derivative collectors std::vector< double > taa; // derivative collectors - std::vector< Vect3DF > tmpVec; + th0t.reserve(vk->ConstraintList.size() * vk->ConstraintList[0]->NCDim); + tf0t.reserve(vk->ConstraintList.size()); + for(ii=0; ii<(int)vk->ConstraintList.size();ii++){ totNC += vk->ConstraintList[ii]->NCDim; for(ic=0; ic<(int)vk->ConstraintList[ii]->NCDim; ic++){ taa.push_back( vk->ConstraintList[ii]->aa[ic] ); - th0t.push_back( vk->ConstraintList[ii]->h0t[ic] ); - tmpVec.clear(); + th0t.push_back( &(vk->ConstraintList[ii]->h0t[ic]) ); + std::vector< const Vect3DF* > tmpVec; + tmpVec.reserve(vk->ConstraintList[ii]->f0t.size()); for(it=0; it<(int)vk->ConstraintList[ii]->f0t.size(); it++){ - tmpVec.push_back( vk->ConstraintList[ii]->f0t[it][ic] ); + tmpVec.push_back( &(vk->ConstraintList[ii]->f0t[it][ic]) ); } - tf0t.push_back( tmpVec ); + tf0t.push_back( std::move(tmpVec) ); } } if(totNC==0)return 0; - tmpVec.clear(); // std::vector< std::vector<double> > denom; - std::vector<double> tmpDV(totNC,0.); - for(ic=0; ic<totNC; ic++) denom.push_back( tmpDV ); + denom.reserve(totNC); + for(int ic=0; ic<totNC; ic++) denom.emplace_back( totNC, 0 ); // // Start of calc // - std::vector< Vect3DF > al0(totNC); + //This is deliberately written without make_unqiue to bypass auto intialization!! + std::unique_ptr< Vect3DF[] > al0( new Vect3DF[ totNC ]); for(ic=0;ic<totNC; ic++){ al0[ic].X=0.; al0[ic].Y=0.; al0[ic].Z=0.;} std::vector<double> anum(totNC,0.); for (ic=0; ic<totNC; ++ic) { for (it = 0; it<NTRK; ++it) { /* summation of WBCI * F0T into vector AL0 */ - al0[ic].X += vk->tmpArr[it]->wbci[0] * tf0t[ic][it].X - + vk->tmpArr[it]->wbci[3] * tf0t[ic][it].Y - + vk->tmpArr[it]->wbci[6] * tf0t[ic][it].Z; - al0[ic].Y += vk->tmpArr[it]->wbci[1] * tf0t[ic][it].X - + vk->tmpArr[it]->wbci[4] * tf0t[ic][it].Y - + vk->tmpArr[it]->wbci[7] * tf0t[ic][it].Z; - al0[ic].Z += vk->tmpArr[it]->wbci[2] * tf0t[ic][it].X - + vk->tmpArr[it]->wbci[5] * tf0t[ic][it].Y - + vk->tmpArr[it]->wbci[8] * tf0t[ic][it].Z; + al0[ic].X += vk->tmpArr[it]->wbci[0] * tf0t[ic][it]->X + + vk->tmpArr[it]->wbci[3] * tf0t[ic][it]->Y + + vk->tmpArr[it]->wbci[6] * tf0t[ic][it]->Z; + al0[ic].Y += vk->tmpArr[it]->wbci[1] * tf0t[ic][it]->X + + vk->tmpArr[it]->wbci[4] * tf0t[ic][it]->Y + + vk->tmpArr[it]->wbci[7] * tf0t[ic][it]->Z; + al0[ic].Z += vk->tmpArr[it]->wbci[2] * tf0t[ic][it]->X + + vk->tmpArr[it]->wbci[5] * tf0t[ic][it]->Y + + vk->tmpArr[it]->wbci[8] * tf0t[ic][it]->Z; - anum[ic] += vk->tmpArr[it]->parf0[0] * tf0t[ic][it].X - + vk->tmpArr[it]->parf0[1] * tf0t[ic][it].Y - + vk->tmpArr[it]->parf0[2] * tf0t[ic][it].Z; + anum[ic] += vk->tmpArr[it]->parf0[0] * tf0t[ic][it]->X + + vk->tmpArr[it]->parf0[1] * tf0t[ic][it]->Y + + vk->tmpArr[it]->parf0[2] * tf0t[ic][it]->Z; } - al0[ic].X -= th0t[ic].X; - al0[ic].Y -= th0t[ic].Y; - al0[ic].Z -= th0t[ic].Z; - anum[ic] = 2.*anum[ic] + dxyz[0] * 2. * th0t[ic].X - + dxyz[1] * 2. * th0t[ic].Y - + dxyz[2] * 2. * th0t[ic].Z + al0[ic].X -= th0t[ic]->X; + al0[ic].Y -= th0t[ic]->Y; + al0[ic].Z -= th0t[ic]->Z; + anum[ic] = 2.*anum[ic] + dxyz[0] * 2. * th0t[ic]->X + + dxyz[1] * 2. * th0t[ic]->Y + + dxyz[2] * 2. * th0t[ic]->Z + taa[ic]; } @@ -100,7 +103,6 @@ int vtcfitc( VKVertex * vk ) /* calculation (AL0)t * VCOV * AL0 and (F0T)t * WCI * F0T */ - TWRK * t_trk; for (ic=0; ic<totNC; ++ic) { for (jc=0; jc<totNC; ++jc) { denom[ic][jc] = al0[ic].X * vk->fitVcov[0] * al0[jc].X @@ -123,25 +125,25 @@ int vtcfitc( VKVertex * vk ) + al0[jc].Z * vk->fitVcov[5] * al0[ic].Z; for (it=0; it<NTRK; ++it) { - t_trk=vk->tmpArr[it].get(); - denom[ic][jc] += tf0t[ic][it].X * t_trk->wci[0] * tf0t[jc][it].X - + tf0t[ic][it].Y * t_trk->wci[1] * tf0t[jc][it].X - + tf0t[ic][it].Z * t_trk->wci[3] * tf0t[jc][it].X - + tf0t[ic][it].X * t_trk->wci[1] * tf0t[jc][it].Y - + tf0t[ic][it].Y * t_trk->wci[2] * tf0t[jc][it].Y - + tf0t[ic][it].Z * t_trk->wci[4] * tf0t[jc][it].Y - + tf0t[ic][it].X * t_trk->wci[3] * tf0t[jc][it].Z - + tf0t[ic][it].Y * t_trk->wci[4] * tf0t[jc][it].Z - + tf0t[ic][it].Z * t_trk->wci[5] * tf0t[jc][it].Z - + tf0t[jc][it].X * t_trk->wci[0] * tf0t[ic][it].X - + tf0t[jc][it].Y * t_trk->wci[1] * tf0t[ic][it].X - + tf0t[jc][it].Z * t_trk->wci[3] * tf0t[ic][it].X - + tf0t[jc][it].X * t_trk->wci[1] * tf0t[ic][it].Y - + tf0t[jc][it].Y * t_trk->wci[2] * tf0t[ic][it].Y - + tf0t[jc][it].Z * t_trk->wci[4] * tf0t[ic][it].Y - + tf0t[jc][it].X * t_trk->wci[3] * tf0t[ic][it].Z - + tf0t[jc][it].Y * t_trk->wci[4] * tf0t[ic][it].Z - + tf0t[jc][it].Z * t_trk->wci[5] * tf0t[ic][it].Z; + TWRK * t_trk=vk->tmpArr[it].get(); + denom[ic][jc] += tf0t[ic][it]->X * t_trk->wci[0] * tf0t[jc][it]->X + + tf0t[ic][it]->Y * t_trk->wci[1] * tf0t[jc][it]->X + + tf0t[ic][it]->Z * t_trk->wci[3] * tf0t[jc][it]->X + + tf0t[ic][it]->X * t_trk->wci[1] * tf0t[jc][it]->Y + + tf0t[ic][it]->Y * t_trk->wci[2] * tf0t[jc][it]->Y + + tf0t[ic][it]->Z * t_trk->wci[4] * tf0t[jc][it]->Y + + tf0t[ic][it]->X * t_trk->wci[3] * tf0t[jc][it]->Z + + tf0t[ic][it]->Y * t_trk->wci[4] * tf0t[jc][it]->Z + + tf0t[ic][it]->Z * t_trk->wci[5] * tf0t[jc][it]->Z + + tf0t[jc][it]->X * t_trk->wci[0] * tf0t[ic][it]->X + + tf0t[jc][it]->Y * t_trk->wci[1] * tf0t[ic][it]->X + + tf0t[jc][it]->Z * t_trk->wci[3] * tf0t[ic][it]->X + + tf0t[jc][it]->X * t_trk->wci[1] * tf0t[ic][it]->Y + + tf0t[jc][it]->Y * t_trk->wci[2] * tf0t[ic][it]->Y + + tf0t[jc][it]->Z * t_trk->wci[4] * tf0t[ic][it]->Y + + tf0t[jc][it]->X * t_trk->wci[3] * tf0t[ic][it]->Z + + tf0t[jc][it]->Y * t_trk->wci[4] * tf0t[ic][it]->Z + + tf0t[jc][it]->Z * t_trk->wci[5] * tf0t[ic][it]->Z; } } } @@ -149,7 +151,8 @@ int vtcfitc( VKVertex * vk ) /* Solving of system DENOM(i,j)*COEF(j)=ANUM(i) */ /* for lagrange couplings */ /*-------------------------------------------------*/ - auto coef = std::make_unique<double[]>(totNC); + //This is deliberately written without make_unqiue to bypass auto intialization!! + auto coef = std::unique_ptr<double[]>(new double[totNC]); if (totNC == 1) { if (denom[0][0] != 0.) { coef[0] = anum[0] / denom[0][0]; @@ -157,10 +160,12 @@ int vtcfitc( VKVertex * vk ) coef[0] = 1.e3; } } else { - auto adenom = std::make_unique<double[]>(totNC*totNC); + //This is deliberately written without make_unqiue to bypass auto intialization!! + std::unique_ptr<double[]> adenom( new double[totNC*totNC] ); // auto work = std::make_unique<double[]>(totNC*totNC); // auto eigv = std::make_unique<double[]>(totNC*totNC); - auto scale = std::make_unique<double[]>(totNC); + std::unique_ptr<double[]> scale( new double[totNC] ); + for (ic=0; ic<totNC; ic++) { for (jc=0; jc<totNC; jc++) { adenom[ic*totNC + jc] = denom[ic][jc]; @@ -173,7 +178,7 @@ int vtcfitc( VKVertex * vk ) // for (ic=0; ic<totNC; ++ic) { adenom[ic*totNC + ic] += sdet;} //} /* -- INVERT */ - dsinv(&totNC, adenom.get(), totNC, &IERR); + dsinv(totNC, adenom.get(), totNC, &IERR); if (IERR) { return IERR; } @@ -192,7 +197,9 @@ int vtcfitc( VKVertex * vk ) dxyz[0] = 0.; dxyz[1] = 0.; dxyz[2] = 0.; - tmpVec.resize(totNC); + + //This is deliberately written without make_unqiue to bypass auto intialization!! + auto tmpVec = std::unique_ptr<Vect3DF[]>(new Vect3DF[totNC]); for (ic=0; ic<totNC; ++ic) { tmpVec[ic].X = vk->fitVcov[0] * al0[ic].X + vk->fitVcov[1] * al0[ic].Y @@ -216,18 +223,18 @@ int vtcfitc( VKVertex * vk ) /* new momenta */ for (it=0; it<NTRK; ++it) { - t_trk=vk->tmpArr[it].get(); + TWRK * t_trk=vk->tmpArr[it].get(); tmp[0] = 0.; tmp[1] = 0.; tmp[2] = 0.; for (ic=0; ic<totNC; ++ic) { - tmp[0] += coef[ic] * ( tf0t[ic][it].X + t_trk->wb[0]*tmpVec[ic].X + tmp[0] += coef[ic] * ( tf0t[ic][it]->X + t_trk->wb[0]*tmpVec[ic].X + t_trk->wb[1]*tmpVec[ic].Y + t_trk->wb[2]*tmpVec[ic].Z); - tmp[1] += coef[ic] * ( tf0t[ic][it].Y + t_trk->wb[3]*tmpVec[ic].X + tmp[1] += coef[ic] * ( tf0t[ic][it]->Y + t_trk->wb[3]*tmpVec[ic].X + t_trk->wb[4]*tmpVec[ic].Y + t_trk->wb[5]*tmpVec[ic].Z); - tmp[2] += coef[ic] * ( tf0t[ic][it].Z + t_trk->wb[6]*tmpVec[ic].X + tmp[2] += coef[ic] * ( tf0t[ic][it]->Z + t_trk->wb[6]*tmpVec[ic].X + t_trk->wb[7]*tmpVec[ic].Y + t_trk->wb[8]*tmpVec[ic].Z); } @@ -248,7 +255,7 @@ int vtcfitc( VKVertex * vk ) // // Get sum of squared aa[ic] for all constraints. It's needed for postfit. // -double getCnstValues2( VKVertex * vk ) +double getCnstValues2( VKVertex * vk ) noexcept { if (vk->ConstraintList.empty()) return 0.; double sumSQ=0.; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx index 51fee04032e2ed1064b598509a1d1218f1bdb136..2b37e83ec60422854f602f207b8370beb9b39254 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx @@ -1,7 +1,7 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + #include "TrkVKalVrtCore/CommonPars.h" #include "TrkVKalVrtCore/Derivt.h" #include "TrkVKalVrtCore/TrkVKalVrtCoreBase.h" @@ -24,7 +24,7 @@ namespace Trk { int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double verr[6][6]) { - extern void scaleg(double *, double *, long int ,long int ); + extern void scaleg(double *, double *, long int ,long int ) noexcept; int i,j,ic1,ic2; @@ -32,7 +32,7 @@ int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double verr[6][6]) double cnt = 1e8; - extern void dsinv(long int *, double *, long int , long int *); + extern void dsinv(long int, double *, long int , long int *) noexcept; extern void FullMTXfill( VKVertex* , double *); extern void vkSVDCmp(double**, int, int, double*, double**); @@ -40,64 +40,64 @@ int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double verr[6][6]) long int NTRK = vk->TrackList.size(); long int IERR=0; long int NVar = (NTRK + 1) * 3; - if(vk->passNearVertex && vk->ConstraintList.empty()) { + if(vk->passNearVertex && vk->ConstraintList.empty()) { /* Fit is with "pass near" constraint and then */ /* matrix is already present */ } else if ( !vk->ConstraintList.empty() && useWeightScheme ) { /* Full matrix inversion i */ // FullMTXfill( vk, ader); - if ( vk->passNearVertex ) { - double drdpy[2][3]; - double dpipj[3][3]; - for (it = 1; it <= NTRK; ++it) { - drdpy[0][0] = vk->tmpArr[it-1]->drdp[0][0] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][0] * vk->FVC.ywgt[1]; - drdpy[1][0] = vk->tmpArr[it-1]->drdp[0][0] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][0] * vk->FVC.ywgt[2]; - drdpy[0][1] = vk->tmpArr[it-1]->drdp[0][1] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][1] * vk->FVC.ywgt[1]; - drdpy[1][1] = vk->tmpArr[it-1]->drdp[0][1] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][1] * vk->FVC.ywgt[2]; - drdpy[0][2] = vk->tmpArr[it-1]->drdp[0][2] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][2] * vk->FVC.ywgt[1]; - drdpy[1][2] = vk->tmpArr[it-1]->drdp[0][2] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][2] * vk->FVC.ywgt[2]; - for (jt = 1; jt <= NTRK; ++jt) { /* Matrix */ - for (int k = 0; k < 3; ++k) { - for (int l = 0; l < 3; ++l) { - dpipj[k][l] = 0.; - for (int j = 0; j < 2; ++j) { - dpipj[k][l] += vk->tmpArr[jt-1]->drdp[j][k] * drdpy[j][l]; - } - } - } - for (int k = 1; k <= 3; ++k) { - for (int l = 1; l <= 3; ++l) { - ader_ref(it * 3 + k, jt * 3 + l) += dpipj[l-1][k-1]; - } - } - } - } - } + if ( vk->passNearVertex ) { + double drdpy[2][3]; + double dpipj[3][3]; + for (it = 1; it <= NTRK; ++it) { + drdpy[0][0] = vk->tmpArr[it-1]->drdp[0][0] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][0] * vk->FVC.ywgt[1]; + drdpy[1][0] = vk->tmpArr[it-1]->drdp[0][0] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][0] * vk->FVC.ywgt[2]; + drdpy[0][1] = vk->tmpArr[it-1]->drdp[0][1] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][1] * vk->FVC.ywgt[1]; + drdpy[1][1] = vk->tmpArr[it-1]->drdp[0][1] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][1] * vk->FVC.ywgt[2]; + drdpy[0][2] = vk->tmpArr[it-1]->drdp[0][2] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][2] * vk->FVC.ywgt[1]; + drdpy[1][2] = vk->tmpArr[it-1]->drdp[0][2] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][2] * vk->FVC.ywgt[2]; + for (jt = 1; jt <= NTRK; ++jt) { /* Matrix */ + for (int k = 0; k < 3; ++k) { + for (int l = 0; l < 3; ++l) { + dpipj[k][l] = 0.; + for (int j = 0; j < 2; ++j) { + dpipj[k][l] += vk->tmpArr[jt-1]->drdp[j][k] * drdpy[j][l]; + } + } + } + for (int k = 1; k <= 3; ++k) { + for (int l = 1; l <= 3; ++l) { + ader_ref(it * 3 + k, jt * 3 + l) += dpipj[l-1][k-1]; + } + } + } + } + } Vect3DF th0t,tf0t; for(ic1=0; ic1<(int)vk->ConstraintList.size();ic1++){ for(ic2=0; ic2<vk->ConstraintList[ic1]->NCDim; ic2++){ th0t = vk->ConstraintList[ic1]->h0t[ic2]; - ader_ref(1, 1) += cnt * th0t.X * th0t.X; - ader_ref(2, 1) += cnt * th0t.Y * th0t.X; - ader_ref(3, 1) += cnt * th0t.Z * th0t.X; - ader_ref(1, 2) += cnt * th0t.X * th0t.Y; - ader_ref(2, 2) += cnt * th0t.Y * th0t.Y; - ader_ref(3, 2) += cnt * th0t.Z * th0t.Y; - ader_ref(1, 3) += cnt * th0t.X * th0t.Z; - ader_ref(2, 3) += cnt * th0t.Y * th0t.Z; - ader_ref(3, 3) += cnt * th0t.Z * th0t.Z; - for (it = 1; it <= NTRK; ++it) { - tf0t = vk->ConstraintList[ic1]->f0t[it-1][ic2]; - ader_ref(1, it * 3 + 1) += cnt * th0t.X * tf0t.X; - ader_ref(2, it * 3 + 1) += cnt * th0t.Y * tf0t.X; - ader_ref(3, it * 3 + 1) += cnt * th0t.Z * tf0t.X; - ader_ref(1, it * 3 + 2) += cnt * th0t.X * tf0t.Y; - ader_ref(2, it * 3 + 2) += cnt * th0t.Y * tf0t.Y; - ader_ref(3, it * 3 + 2) += cnt * th0t.Z * tf0t.Y; - ader_ref(1, it * 3 + 3) += cnt * th0t.X * tf0t.Z; - ader_ref(2, it * 3 + 3) += cnt * th0t.Y * tf0t.Z; - ader_ref(3, it * 3 + 3) += cnt * th0t.Z * tf0t.Z; + ader_ref(1, 1) += cnt * th0t.X * th0t.X; + ader_ref(2, 1) += cnt * th0t.Y * th0t.X; + ader_ref(3, 1) += cnt * th0t.Z * th0t.X; + ader_ref(1, 2) += cnt * th0t.X * th0t.Y; + ader_ref(2, 2) += cnt * th0t.Y * th0t.Y; + ader_ref(3, 2) += cnt * th0t.Z * th0t.Y; + ader_ref(1, 3) += cnt * th0t.X * th0t.Z; + ader_ref(2, 3) += cnt * th0t.Y * th0t.Z; + ader_ref(3, 3) += cnt * th0t.Z * th0t.Z; + for (it = 1; it <= NTRK; ++it) { + tf0t = vk->ConstraintList[ic1]->f0t[it-1][ic2]; + ader_ref(1, it * 3 + 1) += cnt * th0t.X * tf0t.X; + ader_ref(2, it * 3 + 1) += cnt * th0t.Y * tf0t.X; + ader_ref(3, it * 3 + 1) += cnt * th0t.Z * tf0t.X; + ader_ref(1, it * 3 + 2) += cnt * th0t.X * tf0t.Y; + ader_ref(2, it * 3 + 2) += cnt * th0t.Y * tf0t.Y; + ader_ref(3, it * 3 + 2) += cnt * th0t.Z * tf0t.Y; + ader_ref(1, it * 3 + 3) += cnt * th0t.X * tf0t.Z; + ader_ref(2, it * 3 + 3) += cnt * th0t.Y * tf0t.Z; + ader_ref(3, it * 3 + 3) += cnt * th0t.Z * tf0t.Z; } } } @@ -105,27 +105,27 @@ int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double verr[6][6]) for(ic1=0; ic1<(int)vk->ConstraintList.size();ic1++){ for(ic2=0; ic2<vk->ConstraintList[ic1]->NCDim; ic2++){ - for (it = 1; it <= NTRK; ++it) { - for (jt = it; jt <= NTRK; ++jt) { - Vect3DF tf0ti = vk->ConstraintList[ic1]->f0t[it-1][ic2]; - Vect3DF tf0tj = vk->ConstraintList[ic1]->f0t[jt-1][ic2]; - ader_ref(it*3 + 1, jt*3 + 1) += cnt * tf0ti.X * tf0tj.X; - ader_ref(it*3 + 2, jt*3 + 1) += cnt * tf0ti.Y * tf0tj.X; - ader_ref(it*3 + 3, jt*3 + 1) += cnt * tf0ti.Z * tf0tj.X; - ader_ref(it*3 + 1, jt*3 + 2) += cnt * tf0ti.X * tf0tj.Y; - ader_ref(it*3 + 2, jt*3 + 2) += cnt * tf0ti.Y * tf0tj.Y; - ader_ref(it*3 + 3, jt*3 + 2) += cnt * tf0ti.Z * tf0tj.Y; - ader_ref(it*3 + 1, jt*3 + 3) += cnt * tf0ti.X * tf0tj.Z; - ader_ref(it*3 + 2, jt*3 + 3) += cnt * tf0ti.Y * tf0tj.Z; - ader_ref(it*3 + 3, jt*3 + 3) += cnt * tf0ti.Z * tf0tj.Z; + for (it = 1; it <= NTRK; ++it) { + for (jt = it; jt <= NTRK; ++jt) { + Vect3DF tf0ti = vk->ConstraintList[ic1]->f0t[it-1][ic2]; + Vect3DF tf0tj = vk->ConstraintList[ic1]->f0t[jt-1][ic2]; + ader_ref(it*3 + 1, jt*3 + 1) += cnt * tf0ti.X * tf0tj.X; + ader_ref(it*3 + 2, jt*3 + 1) += cnt * tf0ti.Y * tf0tj.X; + ader_ref(it*3 + 3, jt*3 + 1) += cnt * tf0ti.Z * tf0tj.X; + ader_ref(it*3 + 1, jt*3 + 2) += cnt * tf0ti.X * tf0tj.Y; + ader_ref(it*3 + 2, jt*3 + 2) += cnt * tf0ti.Y * tf0tj.Y; + ader_ref(it*3 + 3, jt*3 + 2) += cnt * tf0ti.Z * tf0tj.Y; + ader_ref(it*3 + 1, jt*3 + 3) += cnt * tf0ti.X * tf0tj.Z; + ader_ref(it*3 + 2, jt*3 + 3) += cnt * tf0ti.Y * tf0tj.Z; + ader_ref(it*3 + 3, jt*3 + 3) += cnt * tf0ti.Z * tf0tj.Z; } } } } /* symmetrisation */ - for (i=1; i<=NVar-1; ++i) { - for (j = i+1; j<=NVar; ++j) { - ader_ref(j,i) = ader_ref(i,j); + for (i=1; i<=NVar-1; ++i) { + for (j = i+1; j<=NVar; ++j) { + ader_ref(j,i) = ader_ref(i,j); } } //------------------------------------------------------------------------- @@ -147,8 +147,8 @@ int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double verr[6][6]) /* weight matrix ready.Invert */ double * Scale=new double[NVar]; scaleg(ader, Scale, NVar, vkalNTrkM*3+3); // Balance matrix double **ta = new double*[NVar+1]; for(i=0; i<NVar+1; i++) ta[i] = new double[NVar+1]; // Make a copy - for (i=1; i<=NVar; ++i) for (j = i; j<=NVar; ++j) ta[i][j] = ta[j][i] = ader_ref(i,j); // for failure treatment - dsinv(&NVar, ader, vkalNTrkM*3+3, &IERR); + for (i=1; i<=NVar; ++i) for (j = i; j<=NVar; ++j) ta[i][j] = ta[j][i] = ader_ref(i,j); // for failure treatment + dsinv(NVar, ader, vkalNTrkM*3+3, &IERR); if ( IERR != 0) { double **tv = new double*[NVar+1]; for(i=0; i<NVar+1; i++) tv[i] = new double[NVar+1]; double **tr = new double*[NVar+1]; for(i=0; i<NVar+1; i++) tr[i] = new double[NVar+1]; @@ -161,12 +161,12 @@ int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double verr[6][6]) for(i=1; i<=NVar; i++){ for(j=1; j<=NVar; j++){ tr[i][j]=0.; for(int k=1; k<=NVar; k++) if(tw[k]!=0.) tr[i][j] += ta[i][k]*tv[j][k]/tw[k]; }} - for (i=1; i<=NVar; ++i) for (j=1; j<=NVar; ++j) ader_ref(i,j)=tr[i][j]; + for (i=1; i<=NVar; ++i) for (j=1; j<=NVar; ++j) ader_ref(i,j)=tr[i][j]; for(i=0; i<NVar+1; i++) {delete[] tv[i];delete[] tr[i];} delete[] tv; delete[] tr; delete[] tw; IERR=0; //return IERR; } - for (i=1; i<=NVar; ++i) for (j = 1; j<=NVar; ++j) ader_ref(i,j)*=Scale[i-1]*Scale[j-1]; + for (i=1; i<=NVar; ++i) for (j = 1; j<=NVar; ++j) ader_ref(i,j)*=Scale[i-1]*Scale[j-1]; delete[] Scale; //Restore scale for(i=0; i<NVar+1; i++) delete[] ta[i]; delete[] ta; //Clean memory @@ -174,60 +174,60 @@ int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double verr[6][6]) } else { /* ---------------------------------------- */ /* Simple and fast without constraints */ - for (i=1; i<=NVar; i++) { - for (j=1; j<=NVar; j++) { - ader_ref(i,j)=0.; - } - } - double vcov[6]={vk->fitVcov[0],vk->fitVcov[1],vk->fitVcov[2],vk->fitVcov[3],vk->fitVcov[4],vk->fitVcov[5]}; - ader_ref(1,1) = vcov[0]; - ader_ref(1,2) = vcov[1]; - ader_ref(2,2) = vcov[2]; - ader_ref(1,3) = vcov[3]; - ader_ref(2,3) = vcov[4]; - ader_ref(3,3) = vcov[5]; - ader_ref(2,1) = ader_ref(1,2); - ader_ref(3,1) = ader_ref(1,3); - ader_ref(3,2) = ader_ref(2,3); + for (i=1; i<=NVar; i++) { + for (j=1; j<=NVar; j++) { + ader_ref(i,j)=0.; + } + } + double vcov[6]={vk->fitVcov[0],vk->fitVcov[1],vk->fitVcov[2],vk->fitVcov[3],vk->fitVcov[4],vk->fitVcov[5]}; + ader_ref(1,1) = vcov[0]; + ader_ref(1,2) = vcov[1]; + ader_ref(2,2) = vcov[2]; + ader_ref(1,3) = vcov[3]; + ader_ref(2,3) = vcov[4]; + ader_ref(3,3) = vcov[5]; + ader_ref(2,1) = ader_ref(1,2); + ader_ref(3,1) = ader_ref(1,3); + ader_ref(3,2) = ader_ref(2,3); - for (it=1; it<=NTRK; it++) { + for (it=1; it<=NTRK; it++) { t_trk=vk->tmpArr[it-1].get(); - ader_ref(1, it*3 + 1) = -vcov[0] * t_trk->wbci[0] - - vcov[1] * t_trk->wbci[1] - - vcov[3] * t_trk->wbci[2]; - ader_ref(2, it*3 + 1) = -vcov[1] * t_trk->wbci[0] - - vcov[2] * t_trk->wbci[1] - - vcov[4] * t_trk->wbci[2]; - ader_ref(3, it*3 + 1) = -vcov[3] * t_trk->wbci[0] - - vcov[4] * t_trk->wbci[1] - - vcov[5] * t_trk->wbci[2]; - ader_ref(1, it*3 + 2) = -vcov[0] * t_trk->wbci[3] - - vcov[1] * t_trk->wbci[4] - - vcov[3] * t_trk->wbci[5]; - ader_ref(2, it*3 + 2) = -vcov[1] * t_trk->wbci[3] - - vcov[2] * t_trk->wbci[4] - - vcov[4] * t_trk->wbci[5]; - ader_ref(3, it*3 + 2) = -vcov[3] * t_trk->wbci[3] - - vcov[4] * t_trk->wbci[4] - - vcov[5] * t_trk->wbci[5]; - ader_ref(1, it*3 + 3) = -vcov[0] * t_trk->wbci[6] - - vcov[1] * t_trk->wbci[7] - - vcov[3] * t_trk->wbci[8]; - ader_ref(2, it*3 + 3) = -vcov[1] * t_trk->wbci[6] - - vcov[2] * t_trk->wbci[7] - - vcov[4] * t_trk->wbci[8]; - ader_ref(3, it*3 + 3) = -vcov[3] * t_trk->wbci[6] + ader_ref(1, it*3 + 1) = -vcov[0] * t_trk->wbci[0] + - vcov[1] * t_trk->wbci[1] + - vcov[3] * t_trk->wbci[2]; + ader_ref(2, it*3 + 1) = -vcov[1] * t_trk->wbci[0] + - vcov[2] * t_trk->wbci[1] + - vcov[4] * t_trk->wbci[2]; + ader_ref(3, it*3 + 1) = -vcov[3] * t_trk->wbci[0] + - vcov[4] * t_trk->wbci[1] + - vcov[5] * t_trk->wbci[2]; + ader_ref(1, it*3 + 2) = -vcov[0] * t_trk->wbci[3] + - vcov[1] * t_trk->wbci[4] + - vcov[3] * t_trk->wbci[5]; + ader_ref(2, it*3 + 2) = -vcov[1] * t_trk->wbci[3] + - vcov[2] * t_trk->wbci[4] + - vcov[4] * t_trk->wbci[5]; + ader_ref(3, it*3 + 2) = -vcov[3] * t_trk->wbci[3] + - vcov[4] * t_trk->wbci[4] + - vcov[5] * t_trk->wbci[5]; + ader_ref(1, it*3 + 3) = -vcov[0] * t_trk->wbci[6] + - vcov[1] * t_trk->wbci[7] + - vcov[3] * t_trk->wbci[8]; + ader_ref(2, it*3 + 3) = -vcov[1] * t_trk->wbci[6] + - vcov[2] * t_trk->wbci[7] + - vcov[4] * t_trk->wbci[8]; + ader_ref(3, it*3 + 3) = -vcov[3] * t_trk->wbci[6] - vcov[4] * t_trk->wbci[7] - vcov[5] * t_trk->wbci[8]; - ader_ref(it*3 + 1, 1) = ader_ref(1, it*3 + 1); - ader_ref(it*3 + 1, 2) = ader_ref(2, it*3 + 1); - ader_ref(it*3 + 1, 3) = ader_ref(3, it*3 + 1); - ader_ref(it*3 + 2, 1) = ader_ref(1, it*3 + 2); - ader_ref(it*3 + 2, 2) = ader_ref(2, it*3 + 2); - ader_ref(it*3 + 2, 3) = ader_ref(3, it*3 + 2); - ader_ref(it*3 + 3, 1) = ader_ref(1, it*3 + 3); - ader_ref(it*3 + 3, 2) = ader_ref(2, it*3 + 3); - ader_ref(it*3 + 3, 3) = ader_ref(3, it*3 + 3); + ader_ref(it*3 + 1, 1) = ader_ref(1, it*3 + 1); + ader_ref(it*3 + 1, 2) = ader_ref(2, it*3 + 1); + ader_ref(it*3 + 1, 3) = ader_ref(3, it*3 + 1); + ader_ref(it*3 + 2, 1) = ader_ref(1, it*3 + 2); + ader_ref(it*3 + 2, 2) = ader_ref(2, it*3 + 2); + ader_ref(it*3 + 2, 3) = ader_ref(3, it*3 + 2); + ader_ref(it*3 + 3, 1) = ader_ref(1, it*3 + 3); + ader_ref(it*3 + 3, 2) = ader_ref(2, it*3 + 3); + ader_ref(it*3 + 3, 3) = ader_ref(3, it*3 + 3); } @@ -298,7 +298,7 @@ int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double verr[6][6]) // R*Cov matrix for(ic=0; ic<totNC; ic++){ for(j=0; j<NVar; j++){ RC[ic][j]=0; - for(i=0; i<NVar; i++) RC[ic][j] += R[ic][i]*ader_ref(i+1,j+1); + for(i=0; i<NVar; i++) RC[ic][j] += R[ic][i]*ader_ref(i+1,j+1); } } // R*Cov*Rt matrix - Lagrange multiplyers errors @@ -307,7 +307,7 @@ int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double verr[6][6]) for(i=0; i<NVar; i++) RCRt[ic*totNC + jc] += RC[ic][i]*R[jc][i]; } } - dsinv(&totNC, RCRt, totNC, &IERR); + dsinv(totNC, RCRt, totNC, &IERR); if ( IERR != 0) return IERR; // Correction matrix for(i=0; i<NVar; i++){ @@ -317,7 +317,7 @@ int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double verr[6][6]) COR += RC[ic][i]*RC[jc][j]*RCRt[ic*totNC +jc]; } } - ader_ref(i+1, j+1) -= COR; + ader_ref(i+1, j+1) -= COR; } } // Delete temporary matrices diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfMassErr.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfMassErr.cxx index 6232b780b3effb6a458a17ce0ca3453ab6cf8e57..94f12938be7a1f20c3fa9203aa16c22fca901b43 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfMassErr.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/cfMassErr.cxx @@ -14,7 +14,8 @@ namespace Trk { void cfmasserr(VKVertex * vk, int *list, double BMAG, double *MASS, double *sigM) { int NTRK=vk->TrackList.size(); - auto deriv = std::make_unique< double[] >(3*NTRK+3); + //Deliberately not using make_unique + std::unique_ptr < double[] > deriv(new double[3*NTRK+3]); double ptot[4]={0.}; std::vector< std::array<double,6> > pmom(NTRK); double dm2dpx, dm2dpy, dm2dpz, ee, pt, px, py, pz, cth; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/stCnst.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/stCnst.cxx index 361b74d698d64c23e89f72ae8fc93f8d0dec836e..e32c0fcf7806c3fd0ddedbbe2b4f1f179a7c0fad 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/stCnst.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/stCnst.cxx @@ -81,11 +81,10 @@ void applyConstraints(VKVertex * vk) { for(int i=0; i<NTrk; i++) m_usedParticles[i]=i; } - VKMassConstraint::VKMassConstraint(int NTRK, double mass, const std::vector<int> &listTrk, VKVertex *vk) : + VKMassConstraint::VKMassConstraint(int NTRK, double mass, std::vector<int> listTrk, VKVertex *vk) : VKConstraintBase(1,NTRK, VKContraintType::Mass, vk), - m_usedParticles(0), m_targetMass(mass) + m_usedParticles(std::move(listTrk)), m_targetMass(mass) { - for(int i=0; i<(int)listTrk.size(); i++) m_usedParticles.push_back(listTrk[i]); m_originVertex = vk; } VKMassConstraint::~VKMassConstraint()= default; diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/CMakeLists.txt b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/CMakeLists.txt index ee0c6669817642ef795d4f64f707c6df3248fa55..64f679e0c4127681bfebddd239ed0f5009e7b0ed 100644 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/CMakeLists.txt +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/CMakeLists.txt @@ -24,7 +24,7 @@ atlas_add_component( TrkVKalVrtFitter LINK_LIBRARIES TrkVKalVrtFitterLib ) # Install files from the package. -atlas_install_python_modules( python/*.py ) +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) atlas_install_joboptions( share/*.py ) # Test(s) in the package. diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/python/VKalVrtFitter.py b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/python/VKalVrtFitter.py index f1379cd0ff0d272eb695e86a43f223b64fde2d50..d10f37211c5061efe97dd948d54927151c50ea2b 100644 --- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/python/VKalVrtFitter.py +++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/python/VKalVrtFitter.py @@ -1,24 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -from GaudiKernel.GaudiHandles import * -from AthenaCommon.Configurable import * +from AthenaCommon.Configurable import ConfigurableAlgTool from AthenaCommon.Logging import logging -from AthenaCommon.AppMgr import ToolSvc -# + from TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter -# + class InDetVKalVrtFitter( ConfigurableAlgTool ) : def __init__(self, name="InDetVKalVrtFitter"): - from __main__ import ToolSvc mlog = logging.getLogger( 'InDetVKalVrtFitter::__init__ ' ) mlog.info("entering") Trk__TrkVKalVrtFitter.__init__( self,name="Trk__TrkVKalVrtFitter", - Extrapolator="Trk::Extrapolator/InDetExtrapolator", - MagFieldSvc="Trk::MagneticFieldTool/InDetMagField" ) - + Extrapolator="Trk::Extrapolator/InDetExtrapolator", + MagFieldSvc="Trk::MagneticFieldTool/InDetMagField" ) + class VKalFitterForAnalysis( ConfigurableAlgTool ) : @@ -28,9 +25,9 @@ class VKalFitterForAnalysis( ConfigurableAlgTool ) : mlog.info("entering") Trk__TrkVKalVrtFitter.__init__( self,name="Trk__TrkVKalVrtFitter", - Extrapolator="DefaultVKalPropagator", # Internal VKal propagator - MagFieldSvc="DefaultMagneticField" # Internal VKal field - ) + Extrapolator="DefaultVKalPropagator", # Internal VKal propagator + MagFieldSvc="DefaultMagneticField" # Internal VKal field + ) class VKalFitterForAnalysisWithField( ConfigurableAlgTool ) : @@ -40,7 +37,7 @@ class VKalFitterForAnalysisWithField( ConfigurableAlgTool ) : mlog.info("entering") Trk__TrkVKalVrtFitter.__init__( self,name="Trk__TrkVKalVrtFitter", - Extrapolator="DefaultVKalPropagator", # internal VKal propagatorcd - MagFieldSvc="DefaultMagneticField", - MagFieldAtlasService="MagFieldAthenaSvc" # ATLAS mag field - ) + Extrapolator="DefaultVKalPropagator", # internal VKal propagatorcd + MagFieldSvc="DefaultMagneticField", + MagFieldAtlasService="MagFieldAthenaSvc" # ATLAS mag field + ) diff --git a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx index 7b8596274acf4db71c4235e13aada9ecb45d1841..a0c3f0a231e5d7a0821e04542cdbcd476288a2d5 100644 --- a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx +++ b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx @@ -20,6 +20,8 @@ namespace Trk double GaussianTrackDensity::globalMaximum (const std::vector<const Track*>& vectorTrk) const { std::vector<const TrackParameters*> perigeeList; + perigeeList.reserve(vectorTrk.size()); + for (const Track* itrk : vectorTrk) { perigeeList.push_back(itrk->perigeeParameters()); @@ -39,6 +41,8 @@ namespace Trk std::unique_ptr<ITrackDensity>& density) const { std::vector<const TrackParameters*> perigeeList; + perigeeList.reserve(vectorTrk.size()); + for (const Track* itrk : vectorTrk) { perigeeList.push_back(itrk->perigeeParameters()); diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/AlphaBetaEstimate.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/AlphaBetaEstimate.cxx index f111c28f6ce0296a05d4d2b5c7e76711713b5a44..12ce977dda87240bde2a2353352a270d141073fc 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/AlphaBetaEstimate.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/AlphaBetaEstimate.cxx @@ -37,7 +37,7 @@ void TrigL2MuonSA::AlphaBetaEstimate::setMCFlag(BooleanProperty use_mcLUT, StatusCode TrigL2MuonSA::AlphaBetaEstimate::setAlphaBeta(const LVL1::RecMuonRoI* p_roi, TrigL2MuonSA::TgcFitResult& tgcFitResult, TrigL2MuonSA::TrackPattern& trackPattern, - const TrigL2MuonSA::MuonRoad& /*muonRoad*/) + const TrigL2MuonSA::MuonRoad& /*muonRoad*/) const { const int MAX_STATION = 6; const double PHI_RANGE = 12./(M_PI/8.); @@ -270,7 +270,7 @@ StatusCode TrigL2MuonSA::AlphaBetaEstimate::setAlphaBeta(const LVL1::RecMuonRoI* double TrigL2MuonSA::AlphaBetaEstimate::computeRadius(double InnerSlope, double InnerR, double InnerZ, double MiddleSlope, double MiddleR, double MiddleZ, - double sign) + double sign) const { double cr1 = 0.080/400; double cr2 = cr1; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/AlphaBetaEstimate.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/AlphaBetaEstimate.h index 35ddd6ddff8c8adf7e728cd748d7e5817e5281e4..d36f725969bb874828ffc038a70a0282d70052d9 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/AlphaBetaEstimate.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/AlphaBetaEstimate.h @@ -35,13 +35,13 @@ class AlphaBetaEstimate: public AthAlgTool StatusCode setAlphaBeta(const LVL1::RecMuonRoI* p_roi, TrigL2MuonSA::TgcFitResult& tgcFitResult, TrigL2MuonSA::TrackPattern& trackPattern, - const TrigL2MuonSA::MuonRoad& muonRoad); + const TrigL2MuonSA::MuonRoad& muonRoad) const; private: double computeRadius(double InnerSlope, double InnerR, double InnerZ, double MiddleSlope, double MiddleR, double MiddleZ, - double sign); + double sign) const; double computeRadius3Points(double InnerZ, double InnerR, double EEZ, double EER,double MiddleZ, double MiddleR ) const ; double calcDistance(double x1,double y1,double x2,double y2,double x3,double y3) const; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.cxx index 69a49b9b2abc5d63494913678a88b4e32d189081..b4f636f45579e65a9774965782d634fc68f0b4d2 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.cxx @@ -233,7 +233,7 @@ StatusCode TrigL2MuonSA::CscDataPreparator::prepareData(const TrigRoiDescriptor* // -------------------------------------------------------------------------------- // -------------------------------------------------------------------------------- -double TrigL2MuonSA::CscDataPreparator::calc_residual(double aw,double bw,double x,double y) +double TrigL2MuonSA::CscDataPreparator::calc_residual(double aw,double bw,double x,double y) const { const double ZERO_LIMIT = 1e-4; if( fabs(aw) < ZERO_LIMIT ) return y-bw; @@ -245,7 +245,8 @@ double TrigL2MuonSA::CscDataPreparator::calc_residual(double aw,double bw,double } -double TrigL2MuonSA::CscDataPreparator::calc_residual_phi( double aw, double bw, double phiw, double hitphi, double hitz){ +double TrigL2MuonSA::CscDataPreparator::calc_residual_phi( double aw, double bw, double phiw, double hitphi, double hitz) const +{ double roadr = hitz*aw + bw; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.h index bee5ac5d8abdb7a87db55947e3c7628c1ac190a0..23f8bafc3a6fc3d92c252d4a8088c77c387cf36d 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.h @@ -51,9 +51,9 @@ namespace TrigL2MuonSA { double calc_residual(double aw, double bw, double x, - double y); + double y) const; - double calc_residual_phi(double aw, double bw, double phiw, double hitphi, double hitz); + double calc_residual_phi(double aw, double bw, double phiw, double hitphi, double hitz) const; private: diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscRegUtils.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscRegUtils.cxx index aea9e4a5b874234da3488a9e24bfd661e760545f..fc56caeecd3d1bcf280e99501ca565a44d90cd73 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscRegUtils.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscRegUtils.cxx @@ -122,7 +122,7 @@ StatusCode CscRegDict :: initialize(){ } -int CscRegDict :: get_hash(int stationname, int stationeta, int stationphi){ +int CscRegDict :: get_hash(int stationname, int stationeta, int stationphi) const{ int sname, seta, sphi; if (stationname == 50 || stationname == 51) sname = stationname-50; @@ -171,7 +171,7 @@ ReturnCode CscRegDict :: initializeHashDictionary(){ -Amg::Vector3D CscRegDict::nomalVector(int module){ +Amg::Vector3D CscRegDict::nomalVector(int module) const{ double phi=m_reg_dict[module].phiCen; double theta=m_reg_dict[module].idealAtanNormal; @@ -204,7 +204,7 @@ double CscRegDict :: posCorrectionZ(int module, int charge/*0 or 1*/){ -double UtilTools :: calc_phi(double x, double y){ +double UtilTools :: calc_phi(double x, double y) const{ double /*abs_x=fabs(x),*/ abs_y=fabs(y); double abs_sine=abs_y/sqrt(x*x+y*y); @@ -226,8 +226,8 @@ double UtilTools :: calc_phi(double x, double y){ } -double UtilTools :: calc_dphi(double phi1, double phi2){ - +double UtilTools :: calc_dphi(double phi1, double phi2) const +{ double dphi=phi1-phi2; if (dphi > M_PI) { @@ -236,13 +236,12 @@ double UtilTools :: calc_dphi(double phi1, double phi2){ dphi += 2*M_PI; } - return dphi; - + return dphi; } -double UtilTools :: average_phi(double phi1, double phi2){ - +double UtilTools :: average_phi(double phi1, double phi2) const +{ double phi = 0.; if (phi1*phi2<0. && fabs(phi1)>M_PI/2.){ diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscRegUtils.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscRegUtils.h index dc002d9862b2011eb9ff5cede561c62a3804cfc4..601a5456ce23c6ea1e424b6bcbe081b76acb095b 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscRegUtils.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscRegUtils.h @@ -27,16 +27,16 @@ class UtilTools{ public: UtilTools(){} - double calc_theta(double eta){ return 2*atan(exp((-1)*eta)); } - double calc_theta(double x, double y, double z){ return acos(z/sqrt(x*x+y*y+z*z)); } // for position not for direction theta in [0,pi] - double calc_eta(double x, double y, double z){return (-1)*log(tan(calc_theta(x,y,z)/2.));} - double calc_phi( double x, double y); - double calc_dphi(double phi1, double phi2); - double calc_sumsq(double x, double y){ return sqrt(x*x+y*y); } - double calc_sumsq(double x, double y, double z){ return sqrt(x*x+y*y+z*z);} - double cotan(double theta){ return tan(M_PI-theta); } - double relative_error(double measured, double reference){return (measured-reference)/reference; } - double average_phi(double phi1, double phi2); + double calc_theta(double eta) const{ return 2*atan(exp((-1)*eta)); } + double calc_theta(double x, double y, double z) const{ return acos(z/sqrt(x*x+y*y+z*z)); } // for position not for direction theta in [0,pi] + double calc_eta(double x, double y, double z) const {return (-1)*log(tan(calc_theta(x,y,z)/2.));} + double calc_phi( double x, double y) const; + double calc_dphi(double phi1, double phi2) const; + double calc_sumsq(double x, double y) const { return sqrt(x*x+y*y); } + double calc_sumsq(double x, double y, double z) const { return sqrt(x*x+y*y+z*z);} + double cotan(double theta) const { return tan(M_PI-theta); } + double relative_error(double measured, double reference) const {return (measured-reference)/reference; } + double average_phi(double phi1, double phi2) const; }; @@ -66,18 +66,18 @@ class CscRegDict: public AthAlgTool{ virtual StatusCode initialize() override; double phiCen(int module){ return m_reg_dict[module].phiCen; } - double phiMod(int module){ return m_reg_dict[module].phiMod; } + double phiMod(int module) const { return m_reg_dict[module].phiMod; } - int get_hash(int stationname, int stationeta, int stationphi); //return a module context hashId. - Amg::Vector3D nomalVector(int module); - double displacement(int module); + int get_hash(int stationname, int stationeta, int stationphi) const; //return a module context hashId. + Amg::Vector3D nomalVector(int module) const; + double displacement(int module) const; double posCorrectionR(int module, int charge); double posCorrectionZ(int module, int charge); - double idealAtanNormal(int module){ return m_reg_dict[module].idealAtanNormal; } - double actualAtanNormal(int module){ return m_reg_dict[module].actualAtanNormal; } - int stationName(int hash); - int stationEta(int hash); - int stationPhi(int hash); + double idealAtanNormal(int module) const { return m_reg_dict[module].idealAtanNormal; } + double actualAtanNormal(int module) const { return m_reg_dict[module].actualAtanNormal; } + int stationName(int hash) const; + int stationEta(int hash) const; + int stationPhi(int hash) const; private: Gaudi::Property< bool > m_isMC { this, "MCFlag", true, "" }; @@ -96,16 +96,19 @@ class CscRegDict: public AthAlgTool{ }; -inline double CscRegDict::displacement(int module){ +inline double CscRegDict::displacement(int module) const +{ return (0<=module && module <32) ? m_reg_dict[module].Displacement : 0.; } -inline int CscRegDict::stationName(int hash){ +inline int CscRegDict::stationName(int hash) const +{ if(hash<0 || hash>31) return 999; else return (hash<16) ? 50 : 51; } -inline int CscRegDict::stationEta(int hash){ +inline int CscRegDict::stationEta(int hash) const +{ if(hash<0 || hash>31) return 999; else{ int secteta=(hash - hash%8)/8;// secteta: 0(Small Cside),1(Small Aside), 2(Large Cside), 3(Large Aside) @@ -113,7 +116,8 @@ inline int CscRegDict::stationEta(int hash){ } } -inline int CscRegDict::stationPhi(int hash){ +inline int CscRegDict::stationPhi(int hash) const +{ if(hash<0 || hash>31) return 999; else return hash%8+1; } diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscSegmentMaker.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscSegmentMaker.cxx index 9a42898f10b768076d2093bb233938b8dd333793..78bdb86380372a099cb2090d5718112ab9e48265 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscSegmentMaker.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscSegmentMaker.cxx @@ -35,7 +35,7 @@ StatusCode CscSegmentMaker::initialize(){ ReturnCode CscSegmentMaker::FindSuperPointCsc( const TrigL2MuonSA::CscHits &cscHits, std::vector<TrigL2MuonSA::TrackPattern> &v_trackPatterns, const TrigL2MuonSA::TgcFitResult &tgcFitResult, - const TrigL2MuonSA::MuonRoad &muroad) + const TrigL2MuonSA::MuonRoad &muroad) const { ATH_MSG_DEBUG( "FindSuperPointCsc" ); SG::ReadCondHandle<MuonGM::MuonDetectorManager> muDetMgrHandle{m_muDetMgrKey}; @@ -143,7 +143,7 @@ ReturnCode CscSegmentMaker::FindSuperPointCsc( const TrigL2MuonSA::CscHits &cscH ReturnCode CscSegmentMaker::make_segment(int mod_hash, TrigL2MuonSA::CscHits clusters[8], CscSegment &cscsegment, - CscSegment &cscsegment_noip, const MuonGM::MuonDetectorManager* muDetMgr) + CscSegment &cscsegment_noip, const MuonGM::MuonDetectorManager* muDetMgr) const { ATH_MSG_DEBUG("################################## make_segment #####################################"); @@ -261,7 +261,7 @@ ReturnCode CscSegmentMaker::make_segment(int mod_hash, TrigL2MuonSA::CscHits cl ReturnCode CscSegmentMaker::make_2dsegment(int measphi, const localCscHit &ip_loc, const std::vector<localCscHit> hits_loc[4], local2dSegment &seg2d, local2dSegment &seg2d_ipremoved, - int &nhit) + int &nhit) const { int nohit=0; @@ -326,7 +326,7 @@ ReturnCode CscSegmentMaker::make_segment(int mod_hash, TrigL2MuonSA::CscHits cl ReturnCode CscSegmentMaker::make_2dseg4hit(int measphi, const localCscHit &ip_loc, std::vector<localCscHit> hits_loc[4], //removing hits used in fit with 4 hits std::vector<local2dSegment> &seg2d_4hitCollection, - int &nhit) + int &nhit) const { std::vector<localCscHit> hit_fit; @@ -393,7 +393,7 @@ ReturnCode CscSegmentMaker::make_2dseg4hit(int measphi, const localCscHit &ip_lo ReturnCode CscSegmentMaker::make_2dseg3hit(int measphi, const localCscHit &ip_loc, const std::vector<localCscHit> hits_loc[4], std::vector<local2dSegment> &seg2d_3hitCollection, - int &nhit) + int &nhit) const { int empty_lyr=-1; @@ -451,7 +451,7 @@ ReturnCode CscSegmentMaker::make_2dseg3hit(int measphi, const localCscHit &ip_lo } -ReturnCode CscSegmentMaker::fit_clusters(int measphi, const std::vector<localCscHit> &hits_fit, local2dSegment &seg2d){ +ReturnCode CscSegmentMaker::fit_clusters(int measphi, const std::vector<localCscHit> &hits_fit, local2dSegment &seg2d) const{ double S=0.; @@ -534,7 +534,7 @@ ReturnCode CscSegmentMaker::fit_clusters(int measphi, const std::vector<localCsc ReturnCode CscSegmentMaker::make_4dsegment(const local2dSegment &seg2d_eta, const local2dSegment &seg2d_phi, Amg::Vector3D &seg_pos, - Amg::Vector3D &seg_dir) + Amg::Vector3D &seg_dir) const { int nhit_e=seg2d_eta.nhit; @@ -578,7 +578,12 @@ ReturnCode CscSegmentMaker::make_4dsegment(const local2dSegment &seg2d_eta, -ReturnCode CscSegmentMaker::getModuleSP(int mod_hashes[2], const TrigL2MuonSA::TgcFitResult &tgcFitResult, int phibin, const MuonRoad &muroad, const int hash_clusters[32]){ +ReturnCode CscSegmentMaker::getModuleSP(int mod_hashes[2], + const TrigL2MuonSA::TgcFitResult &tgcFitResult, + int phibin, + const MuonRoad &muroad, + const int hash_clusters[32]) const +{ ATH_MSG_DEBUG("getModuleSP()"); @@ -623,7 +628,7 @@ ReturnCode CscSegmentMaker::getModuleSP(int mod_hashes[2], const TrigL2MuonSA::T } -CscSegment CscSegmentMaker::segmentAtFirstLayer(int mod_hash, TrigL2MuonSA::CscSegment *mu_seg){ +CscSegment CscSegmentMaker::segmentAtFirstLayer(int mod_hash, TrigL2MuonSA::CscSegment *mu_seg) const{ double alpha = m_cscregdict->displacement(mod_hash); @@ -645,9 +650,8 @@ CscSegment CscSegmentMaker::segmentAtFirstLayer(int mod_hash, TrigL2MuonSA::CscS -ReturnCode CscSegmentMaker::display_hits(const std::vector<localCscHit> localHits[4]){ - - +ReturnCode CscSegmentMaker::display_hits(const std::vector<localCscHit> localHits[4]) const +{ for(unsigned int ilyr=0; ilyr<4; ++ilyr){ for (unsigned int ihit=0; ihit<localHits[ilyr].size(); ++ihit) { const localCscHit &locHit = localHits[ilyr][ihit]; @@ -656,8 +660,7 @@ ReturnCode CscSegmentMaker::display_hits(const std::vector<localCscHit> localHit << " err=" << locHit.error << " res=" << locHit.residual); } } - - + return ReturnCode::SUCCESS; } diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscSegmentMaker.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscSegmentMaker.h index 6fb3b3bba95cd9099f5a469ff515170c3905c7e8..619533b5778dd148f8f0c8028dc1325f4cd1e4c3 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscSegmentMaker.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscSegmentMaker.h @@ -63,27 +63,29 @@ namespace TrigL2MuonSA{ virtual StatusCode initialize() override; - ReturnCode FindSuperPointCsc( const TrigL2MuonSA::CscHits &cscHits, std::vector<TrigL2MuonSA::TrackPattern> &v_trackPatterns, const TrigL2MuonSA::TgcFitResult &tgcFitResult, const TrigL2MuonSA::MuonRoad &muroad); + ReturnCode FindSuperPointCsc( const TrigL2MuonSA::CscHits &cscHits, + std::vector<TrigL2MuonSA::TrackPattern> &v_trackPatterns, + const TrigL2MuonSA::TgcFitResult &tgcFitResult, + const TrigL2MuonSA::MuonRoad &muroad) const; - ReturnCode make_segment(int mod_hash, TrigL2MuonSA::CscHits clusters[8], CscSegment &cscsegment, CscSegment &cscsegment_noip, const MuonGM::MuonDetectorManager* muDetMgr); + ReturnCode make_segment(int mod_hash, TrigL2MuonSA::CscHits clusters[8], CscSegment &cscsegment, CscSegment &cscsegment_noip, const MuonGM::MuonDetectorManager* muDetMgr) const; - ReturnCode make_2dsegment(int measphi, const localCscHit &ip_loc,const std::vector<localCscHit> hits_loc[4], local2dSegment &seg2d_eta,local2dSegment &local2d_noip, int &nhite); + ReturnCode make_2dsegment(int measphi, const localCscHit &ip_loc,const std::vector<localCscHit> hits_loc[4], local2dSegment &seg2d_eta,local2dSegment &local2d_noip, int &nhite) const; - ReturnCode make_2dseg4hit(int measphi, const localCscHit &ip_loc,std::vector<localCscHit> hits_loc[4], std::vector<local2dSegment> &seg2d_4hitCollection, int &nhite); + ReturnCode make_2dseg4hit(int measphi, const localCscHit &ip_loc,std::vector<localCscHit> hits_loc[4], std::vector<local2dSegment> &seg2d_4hitCollection, int &nhite) const; - ReturnCode make_2dseg3hit(int measphi, const localCscHit &ip_loc, const std::vector<localCscHit> hits_loc[4], std::vector<local2dSegment> &seg2d_4hitCollection, int &nhit); - - ReturnCode fit_clusters(int measphi, const std::vector<localCscHit> &hits_fit, local2dSegment &seg2d); + ReturnCode make_2dseg3hit(int measphi, const localCscHit &ip_loc, const std::vector<localCscHit> hits_loc[4], std::vector<local2dSegment> &seg2d_4hitCollection, int &nhit) const; + ReturnCode fit_clusters(int measphi, const std::vector<localCscHit> &hits_fit, local2dSegment &seg2d) const; ReturnCode make_4dsegment(const local2dSegment &seg2d_eta, const local2dSegment &seg2d_phi, - Amg::Vector3D &seg_pos, Amg::Vector3D &seg_dir); + Amg::Vector3D &seg_pos, Amg::Vector3D &seg_dir) const; - ReturnCode getModuleSP(int mod_hash[2], const TrigL2MuonSA::TgcFitResult &tgcFitResult, int phibin, const TrigL2MuonSA::MuonRoad &muroad, const int exist_clusters[32]); + ReturnCode getModuleSP(int mod_hash[2], const TrigL2MuonSA::TgcFitResult &tgcFitResult, int phibin, const TrigL2MuonSA::MuonRoad &muroad, const int exist_clusters[32]) const; - ReturnCode display_hits(const std::vector<localCscHit> localHits[4]); + ReturnCode display_hits(const std::vector<localCscHit> localHits[4]) const; - CscSegment segmentAtFirstLayer(int mod_hash, TrigL2MuonSA::CscSegment *mu_seg); + CscSegment segmentAtFirstLayer(int mod_hash, TrigL2MuonSA::CscSegment *mu_seg) const; private: UtilTools m_util; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/FtfRoadDefiner.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/FtfRoadDefiner.cxx index d7789555e3f7f486b3a044ed53ef0e554fca64dd..f35203989a2987f350f79388c395e651c60d7805 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/FtfRoadDefiner.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/FtfRoadDefiner.cxx @@ -26,7 +26,7 @@ StatusCode TrigL2MuonSA::FtfRoadDefiner::initialize() // -------------------------------------------------------------------------------- StatusCode TrigL2MuonSA::FtfRoadDefiner::defineRoad(const xAOD::TrackParticle* idtrack, - TrigL2MuonSA::MuonRoad& muonRoad) + TrigL2MuonSA::MuonRoad& muonRoad) const { ATH_MSG_DEBUG("FtfRoadDefiner::defineRoad"); @@ -145,7 +145,8 @@ StatusCode TrigL2MuonSA::FtfRoadDefiner::defineRoad(const xAOD::TrackParticle* i // -------------------------------------------------------------------------------- // extrapolate a FTF track to MS in order to define FTF Road -std::unique_ptr<const Trk::TrackParameters> TrigL2MuonSA::FtfRoadDefiner::extTrack( const xAOD::TrackParticle* trk, const double R, const double halflength, int& extFlag ) { +std::unique_ptr<const Trk::TrackParameters> TrigL2MuonSA::FtfRoadDefiner::extTrack( const xAOD::TrackParticle* trk, const double R, const double halflength, int& extFlag ) const +{ const bool boundaryCheck = true; bool bCylinder = false; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/FtfRoadDefiner.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/FtfRoadDefiner.h index a814605967a3392065ba2d3e2b8734793d617001..42de958f7605dd18c526faa29f5bc8cc4f8c9783 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/FtfRoadDefiner.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/FtfRoadDefiner.h @@ -30,8 +30,8 @@ namespace TrigL2MuonSA { public: StatusCode defineRoad( const xAOD::TrackParticle* idtrack, - TrigL2MuonSA::MuonRoad& muonRoad); - std::unique_ptr<const Trk::TrackParameters> extTrack( const xAOD::TrackParticle* trk, const double R, const double halflength, int& extFlag ); + TrigL2MuonSA::MuonRoad& muonRoad) const; + std::unique_ptr<const Trk::TrackParameters> extTrack( const xAOD::TrackParticle* trk, const double R, const double halflength, int& extFlag ) const; protected: diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.cxx index 4222d085c8317803d648187e3d687e565db79e6f..fc17297940ede325c619d1214bcb8dd2e849d04c 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.cxx @@ -505,22 +505,22 @@ bool TrigL2MuonSA::MdtDataPreparator::decodeMdtCsm(const MdtCsm* csm, continue; } - m_mdtReadout = muDetMgr->getMdtRElement_fromIdFields(StationName, StationEta, StationPhi,MultiLayer); - if (!m_mdtReadout) { + const MuonGM::MdtReadoutElement* mdtReadout = muDetMgr->getMdtRElement_fromIdFields(StationName, StationEta, StationPhi,MultiLayer); + if (!mdtReadout) { ++amt; continue; } - m_muonStation = m_mdtReadout->parentMuonStation(); + const MuonGM::MuonStation* muonStation = mdtReadout->parentMuonStation(); - int TubeLayers = m_mdtReadout->getNLayers(); + int TubeLayers = mdtReadout->getNLayers(); int TubeLayer = Layer; if(TubeLayer > TubeLayers) TubeLayer -= TubeLayers; if(MultiLayer==2) - Layer = Layer + m_mdtReadout->getNLayers(); + Layer = Layer + mdtReadout->getNLayers(); - double OrtoRadialPos = m_mdtReadout->getStationS(); - std::string chamberType = m_mdtReadout->getStationType(); + double OrtoRadialPos = mdtReadout->getStationS(); + std::string chamberType = mdtReadout->getStationType(); char st = chamberType[1]; int chamber = 0; @@ -554,18 +554,18 @@ bool TrigL2MuonSA::MdtDataPreparator::decodeMdtCsm(const MdtCsm* csm, } } } - R = m_mdtReadout->center(TubeLayer, Tube).perp(); - Z = m_mdtReadout->center(TubeLayer, Tube).z(); + R = mdtReadout->center(TubeLayer, Tube).perp(); + Z = mdtReadout->center(TubeLayer, Tube).z(); - Amg::Transform3D trans = Amg::CLHEPTransformToEigen(*m_muonStation->getNominalAmdbLRSToGlobal()); - if(m_muonStation->endcap()==0){ + Amg::Transform3D trans = Amg::CLHEPTransformToEigen(*muonStation->getNominalAmdbLRSToGlobal()); + if(muonStation->endcap()==0){ cXmid = (trans*Amg::Vector3D(0.,0.,0.)).z(); - double halfRadialThicknessOfMultilayer = m_muonStation->RsizeMdtStation()/2.; + double halfRadialThicknessOfMultilayer = muonStation->RsizeMdtStation()/2.; cYmid = ((trans*Amg::Vector3D(0.,0.,0.)).perp()+halfRadialThicknessOfMultilayer); } else{ cXmid = (trans*Amg::Vector3D(0.,0.,0.)).perp(); - double halfZThicknessOfMultilayer = m_muonStation->ZsizeMdtStation()/2.; + double halfZThicknessOfMultilayer = muonStation->ZsizeMdtStation()/2.; cYmid = (trans*Amg::Vector3D(0.,0.,0.)).z(); if(cYmid>0) cYmid += halfZThicknessOfMultilayer; else cYmid -= halfZThicknessOfMultilayer; @@ -586,11 +586,11 @@ bool TrigL2MuonSA::MdtDataPreparator::decodeMdtCsm(const MdtCsm* csm, } } - if(m_muonStation->endcap()==1) + if(muonStation->endcap()==1) R = sqrt(R*R+R*R*tan(dphi)*tan(dphi)); Amg::Vector3D OrigOfMdtInAmdbFrame = - Amg::Hep3VectorToEigen( m_muonStation->getBlineFixedPointInAmdbLRS() ); + Amg::Hep3VectorToEigen( muonStation->getBlineFixedPointInAmdbLRS() ); double Rmin =(trans*OrigOfMdtInAmdbFrame).perp(); float cInCo = 1./cos(std::abs(atan(OrtoRadialPos/Rmin))); @@ -676,9 +676,10 @@ uint32_t TrigL2MuonSA::MdtDataPreparator::get_system_id (unsigned short int Subs void TrigL2MuonSA::MdtDataPreparator::getMdtIdHashesBarrel(const TrigL2MuonSA::MdtRegion& mdtRegion, std::vector<IdentifierHash>& mdtIdHashes_normal, - std::vector<IdentifierHash>& mdtIdHashes_overlap) + std::vector<IdentifierHash>& mdtIdHashes_overlap) const { std::vector<IdentifierHash> idList; + float etaMinChamber[11],etaMaxChamber[11],phiMinChamber[11],phiMaxChamber[11]; //combine regions of sector and type for(int j_station=0; j_station<6; j_station++) { @@ -746,9 +747,10 @@ void TrigL2MuonSA::MdtDataPreparator::getMdtIdHashesBarrel(const TrigL2MuonSA::M void TrigL2MuonSA::MdtDataPreparator::getMdtIdHashesEndcap(const TrigL2MuonSA::MdtRegion& mdtRegion, std::vector<IdentifierHash>& mdtIdHashes_normal, - std::vector<IdentifierHash>& mdtIdHashes_overlap) + std::vector<IdentifierHash>& mdtIdHashes_overlap) const { std::vector<IdentifierHash> idList; + float etaMinChamber[11],etaMaxChamber[11],phiMinChamber[11],phiMaxChamber[11]; //combine regions of sector and type for(int j_station=0; j_station<6; j_station++) { @@ -819,7 +821,7 @@ StatusCode TrigL2MuonSA::MdtDataPreparator::collectMdtHitsFromPrepData(const std std::vector<uint32_t>& v_robIds, TrigL2MuonSA::MdtHits& mdtHits, const TrigL2MuonSA::MuonRoad& muonRoad, - const MuonGM::MuonDetectorManager* muDetMgr) + const MuonGM::MuonDetectorManager* muDetMgr) { if(m_doDecoding) { if(m_decodeBS) { @@ -876,14 +878,14 @@ StatusCode TrigL2MuonSA::MdtDataPreparator::collectMdtHitsFromPrepData(const std mdtHits.reserve( mdtHits.size() + mdtCol->size() ); for( const Muon::MdtPrepData* mdt : *mdtCol ) { - m_mdtReadout = mdt->detectorElement(); - if (!m_mdtReadout) continue; + const MuonGM::MdtReadoutElement* mdtReadout = mdt->detectorElement(); + if (!mdtReadout) continue; - m_muonStation = m_mdtReadout->parentMuonStation(); + const MuonGM::MuonStation* muonStation = mdtReadout->parentMuonStation(); - int StationPhi = m_mdtReadout->getStationPhi(); - int StationEta = m_mdtReadout->getStationEta(); - int MultiLayer = m_mdtReadout->getMultilayer(); + int StationPhi = mdtReadout->getStationPhi(); + int StationEta = mdtReadout->getStationEta(); + int MultiLayer = mdtReadout->getMultilayer(); double cXmid; double cYmid; double cAmid = 0; @@ -893,14 +895,14 @@ StatusCode TrigL2MuonSA::MdtDataPreparator::collectMdtHitsFromPrepData(const std int adc = mdt->adc(); int drift = mdt->tdc(); - int TubeLayers = m_mdtReadout->getNLayers(); + int TubeLayers = mdtReadout->getNLayers(); int TubeLayer = m_idHelperSvc->mdtIdHelper().tubeLayer(id); if(TubeLayer > TubeLayers) TubeLayer -= TubeLayers; int Layer = (MultiLayer-1)*TubeLayers + TubeLayer; int Tube = m_idHelperSvc->mdtIdHelper().tube(id); - double OrtoRadialPos = m_mdtReadout->getStationS(); - std::string chamberType = m_mdtReadout->getStationType(); + double OrtoRadialPos = mdtReadout->getStationS(); + std::string chamberType = mdtReadout->getStationType(); char st = chamberType[1]; int chamber = 0; @@ -930,18 +932,18 @@ StatusCode TrigL2MuonSA::MdtDataPreparator::collectMdtHitsFromPrepData(const std } } } - R = m_mdtReadout->center(TubeLayer, Tube).perp(); - Z = m_mdtReadout->center(TubeLayer, Tube).z(); + R = mdtReadout->center(TubeLayer, Tube).perp(); + Z = mdtReadout->center(TubeLayer, Tube).z(); - Amg::Transform3D trans = Amg::CLHEPTransformToEigen(*m_muonStation->getNominalAmdbLRSToGlobal()); - if(m_muonStation->endcap()==0){ + Amg::Transform3D trans = Amg::CLHEPTransformToEigen(*muonStation->getNominalAmdbLRSToGlobal()); + if(muonStation->endcap()==0){ cXmid = (trans*Amg::Vector3D(0.,0.,0.)).z(); - double halfRadialThicknessOfMultilayer = m_muonStation->RsizeMdtStation()/2.; + double halfRadialThicknessOfMultilayer = muonStation->RsizeMdtStation()/2.; cYmid = ((trans*Amg::Vector3D(0.,0.,0.)).perp()+halfRadialThicknessOfMultilayer); } else{ cXmid = (trans*Amg::Vector3D(0.,0.,0.)).perp(); - double halfZThicknessOfMultilayer = m_muonStation->ZsizeMdtStation()/2.; + double halfZThicknessOfMultilayer = muonStation->ZsizeMdtStation()/2.; cYmid = (trans*Amg::Vector3D(0.,0.,0.)).z(); if(cYmid>0) cYmid += halfZThicknessOfMultilayer; else cYmid -= halfZThicknessOfMultilayer; @@ -963,11 +965,11 @@ StatusCode TrigL2MuonSA::MdtDataPreparator::collectMdtHitsFromPrepData(const std } } - if(m_muonStation->endcap()==1) + if(muonStation->endcap()==1) R = sqrt(R*R+R*R*tan(dphi)*tan(dphi)); Amg::Vector3D OrigOfMdtInAmdbFrame = - Amg::Hep3VectorToEigen( m_muonStation->getBlineFixedPointInAmdbLRS() ); + Amg::Hep3VectorToEigen( muonStation->getBlineFixedPointInAmdbLRS() ); double Rmin =(trans*OrigOfMdtInAmdbFrame).perp(); float cInCo = 1./cos(std::abs(atan(OrtoRadialPos/Rmin))); diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.h index 4edb0f5ab823e737130849e60804e986d51b835b..b1fef4d2acf89c7d2e7d046bfcf5b567401da78d 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.h @@ -77,9 +77,6 @@ namespace TrigL2MuonSA { void setMdtDataCollection(bool use_mdtcsm){m_use_mdtcsm = use_mdtcsm;}; void setRoIBasedDataAccess(bool use_RoIBasedDataAccess){m_use_RoIBasedDataAccess = use_RoIBasedDataAccess;}; - public: - float etaMinChamber[11],etaMaxChamber[11],phiMinChamber[11],phiMaxChamber[11]; - private: StatusCode getMdtHits(const LVL1::RecMuonRoI* p_roi, @@ -91,11 +88,11 @@ namespace TrigL2MuonSA { void getMdtIdHashesBarrel(const TrigL2MuonSA::MdtRegion& mdtRegion, std::vector<IdentifierHash>& mdtIdHashes_normal, - std::vector<IdentifierHash>& mdtIdHashes_overlap); + std::vector<IdentifierHash>& mdtIdHashes_overlap) const; void getMdtIdHashesEndcap(const TrigL2MuonSA::MdtRegion& mdtRegion, std::vector<IdentifierHash>& mdtIdHashes_normal, - std::vector<IdentifierHash>& mdtIdHashes_overlap); + std::vector<IdentifierHash>& mdtIdHashes_overlap) const; StatusCode getMdtCsm(const MdtCsmContainer* pMdtCsmContainer, const std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*>& v_robFragments, @@ -121,8 +118,6 @@ namespace TrigL2MuonSA { // Geometry Services - const MuonGM::MdtReadoutElement* m_mdtReadout {nullptr}; - const MuonGM::MuonStation* m_muonStation {nullptr}; ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; IdentifierHash m_hash_id; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtRegionDefiner.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtRegionDefiner.cxx index 33e4d6a109747d59d5cdb8b48b70f765534ce538..5222e52a1b527615375ef54feb42394fc423a097 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtRegionDefiner.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtRegionDefiner.cxx @@ -38,7 +38,7 @@ StatusCode TrigL2MuonSA::MdtRegionDefiner::initialize() StatusCode TrigL2MuonSA::MdtRegionDefiner::getMdtRegions(const LVL1::RecMuonRoI* p_roi, const TrigL2MuonSA::RpcFitResult& rpcFitResult, TrigL2MuonSA::MuonRoad& muonRoad, - TrigL2MuonSA::MdtRegion& mdtRegion) + TrigL2MuonSA::MdtRegion& mdtRegion) const { constexpr double ZERO_LIMIT = 1e-5; mdtRegion.Clear(); @@ -101,16 +101,17 @@ StatusCode TrigL2MuonSA::MdtRegionDefiner::getMdtRegions(const LVL1::RecMuonRoI* ty1 = m_idHelperSvc->mdtIdHelper().stationNameIndex(name)+1; else if(ty2 == -1) ty2 = m_idHelperSvc->mdtIdHelper().stationNameIndex(name)+1; - m_mdtReadout = muDetMgr->getMdtReadoutElement(id); - m_muonStation = m_mdtReadout->parentMuonStation(); + + const MuonGM::MdtReadoutElement* mdtReadout = muDetMgr->getMdtReadoutElement(id); + const MuonGM::MuonStation* muonStation = mdtReadout->parentMuonStation(); - Amg::Transform3D trans = Amg::CLHEPTransformToEigen(*m_muonStation->getNominalAmdbLRSToGlobal()); + Amg::Transform3D trans = Amg::CLHEPTransformToEigen(*muonStation->getNominalAmdbLRSToGlobal()); Amg::Vector3D OrigOfMdtInAmdbFrame = - Amg::Hep3VectorToEigen( m_muonStation->getBlineFixedPointInAmdbLRS() ); + Amg::Hep3VectorToEigen( muonStation->getBlineFixedPointInAmdbLRS() ); tmp_rMin = (trans*OrigOfMdtInAmdbFrame).perp(); - tmp_rMax = tmp_rMin+m_muonStation->Rsize(); + tmp_rMax = tmp_rMin+muonStation->Rsize(); if(rMin==0 || tmp_rMin < rMin)rMin = tmp_rMin; if(rMax==0 || tmp_rMax > rMax)rMax = tmp_rMax; @@ -118,7 +119,7 @@ StatusCode TrigL2MuonSA::MdtRegionDefiner::getMdtRegions(const LVL1::RecMuonRoI* tmp_zMin = (trans*OrigOfMdtInAmdbFrame).z(); if(tmp_zMin < 0) sign = -1; else if(tmp_zMin > 0) sign = 1; - tmp_zMax = tmp_zMin + sign*m_muonStation->Zsize(); + tmp_zMax = tmp_zMin + sign*muonStation->Zsize(); if(zMin==0 || tmp_zMin < zMin)zMin = tmp_zMin; if(zMax==0 || tmp_zMax > zMax)zMax = tmp_zMax; } @@ -200,7 +201,7 @@ StatusCode TrigL2MuonSA::MdtRegionDefiner::getMdtRegions(const LVL1::RecMuonRoI* StatusCode TrigL2MuonSA::MdtRegionDefiner::getMdtRegions(const LVL1::RecMuonRoI* p_roi, const TrigL2MuonSA::TgcFitResult& tgcFitResult, TrigL2MuonSA::MuonRoad& muonRoad, - TrigL2MuonSA::MdtRegion& mdtRegion) + TrigL2MuonSA::MdtRegion& mdtRegion) const { mdtRegion.Clear(); @@ -267,19 +268,21 @@ StatusCode TrigL2MuonSA::MdtRegionDefiner::getMdtRegions(const LVL1::RecMuonRoI* ty1 = m_idHelperSvc->mdtIdHelper().stationNameIndex(name)+1; else if(ty2 == -1) ty2 = m_idHelperSvc->mdtIdHelper().stationNameIndex(name)+1; - m_mdtReadout = muDetMgr->getMdtReadoutElement(id); - m_muonStation = m_mdtReadout->parentMuonStation(); + + const MuonGM::MdtReadoutElement* mdtReadout = muDetMgr->getMdtReadoutElement(id); + const MuonGM::MuonStation* muonStation = mdtReadout->parentMuonStation(); + float scale = 10.; - Amg::Transform3D trans = Amg::CLHEPTransformToEigen(*m_muonStation->getNominalAmdbLRSToGlobal()); + Amg::Transform3D trans = Amg::CLHEPTransformToEigen(*muonStation->getNominalAmdbLRSToGlobal()); Amg::Vector3D OrigOfMdtInAmdbFrame = - Amg::Hep3VectorToEigen( m_muonStation->getBlineFixedPointInAmdbLRS() ); + Amg::Hep3VectorToEigen( muonStation->getBlineFixedPointInAmdbLRS() ); tmp_zMin = (trans*OrigOfMdtInAmdbFrame).z(); if(tmp_zMin < 0) sign = -1; else if(tmp_zMin > 0) sign = 1; - tmp_zMax = tmp_zMin + sign*m_muonStation->Zsize(); + tmp_zMax = tmp_zMin + sign*muonStation->Zsize(); if(sta_zMin==0 || tmp_zMin<sta_zMin) sta_zMin = tmp_zMin; if(sta_zMin==0 || tmp_zMax<sta_zMin) sta_zMin = tmp_zMax; @@ -288,14 +291,14 @@ StatusCode TrigL2MuonSA::MdtRegionDefiner::getMdtRegions(const LVL1::RecMuonRoI* if (chamber_this==barrel_inner){//barrel inner tmp_rMin = (trans*OrigOfMdtInAmdbFrame).perp()/scale; - tmp_rMax = tmp_rMin+m_muonStation->Rsize()/scale; + tmp_rMax = tmp_rMin+muonStation->Rsize()/scale; if(rMin==0 || tmp_rMin < rMin)rMin = tmp_rMin; if(rMax==0 || tmp_rMax > rMax)rMax = tmp_rMax; } if (chamber_this==bee){//BEE tmp_rMin = (trans*OrigOfMdtInAmdbFrame).perp()/scale; - tmp_rMax = tmp_rMin+m_muonStation->Rsize()/scale; + tmp_rMax = tmp_rMin+muonStation->Rsize()/scale; if(rMin==0 || tmp_rMin < rMin)rMin = tmp_rMin; if(rMax==0 || tmp_rMax > rMax)rMax = tmp_rMax; } @@ -379,7 +382,7 @@ StatusCode TrigL2MuonSA::MdtRegionDefiner::getMdtRegions(const LVL1::RecMuonRoI* // -------------------------------------------------------------------------------- void TrigL2MuonSA::MdtRegionDefiner::find_station_sector(std::string name, int phi, bool& endcap, - int& chamber, int& sector) + int& chamber, int& sector) const { if(name[0]=='E' || name[0]=='F' || (name[0]=='B' && name[1]=='E')) endcap = true; @@ -419,7 +422,7 @@ void TrigL2MuonSA::MdtRegionDefiner::find_station_sector(std::string name, int p // -------------------------------------------------------------------------------- // -------------------------------------------------------------------------------- -void TrigL2MuonSA::MdtRegionDefiner::find_phi_min_max(float phiMiddle, float& phiMin, float& phiMax) +void TrigL2MuonSA::MdtRegionDefiner::find_phi_min_max(float phiMiddle, float& phiMin, float& phiMax) const { phiMin = phiMiddle - 0.1; phiMax = phiMiddle + 0.1; @@ -431,7 +434,7 @@ void TrigL2MuonSA::MdtRegionDefiner::find_phi_min_max(float phiMiddle, float& ph // -------------------------------------------------------------------------------- void TrigL2MuonSA::MdtRegionDefiner::find_eta_min_max(float zMin, float rMin, float zMax, float rMax, - float& etaMin, float& etaMax) + float& etaMin, float& etaMax) const { // const bool doEmulateMuFast = true; const bool doEmulateMuFast = false; @@ -477,7 +480,7 @@ void TrigL2MuonSA::MdtRegionDefiner::find_eta_min_max(float zMin, float rMin, fl // -------------------------------------------------------------------------------- void TrigL2MuonSA::MdtRegionDefiner::find_barrel_road_dim(float max_road, float aw, float bw, - float rMin,float rMax,float *zMin,float *zMax) + float rMin,float rMax,float *zMin,float *zMax) const { float ia,iaq,dz,z,points[4]; int i; @@ -513,7 +516,7 @@ void TrigL2MuonSA::MdtRegionDefiner::find_barrel_road_dim(float max_road, float // -------------------------------------------------------------------------------- void TrigL2MuonSA::MdtRegionDefiner::find_endcap_road_dim(float road,float aw, float bw, float zMin, - float zMax,float *rMin,float *rMax) + float zMax,float *rMin,float *rMax) const { float r,points[4]; int i; @@ -590,7 +593,7 @@ StatusCode TrigL2MuonSA::MdtRegionDefiner::prepareTgcPoints(const TrigL2MuonSA:: StatusCode TrigL2MuonSA::MdtRegionDefiner::computePhi(const LVL1::RecMuonRoI* p_roi, const TrigL2MuonSA::RpcFitResult& rpcFitResult, const TrigL2MuonSA::MdtRegion& mdtRegion, - TrigL2MuonSA::MuonRoad& muonRoad) + TrigL2MuonSA::MuonRoad& muonRoad) const { int barrel_inner = xAOD::L2MuonParameters::Chamber::BarrelInner; int barrel_middle = xAOD::L2MuonParameters::Chamber::BarrelMiddle; @@ -661,7 +664,7 @@ StatusCode TrigL2MuonSA::MdtRegionDefiner::computePhi(const LVL1::RecMuonRoI* p_ StatusCode TrigL2MuonSA::MdtRegionDefiner::computePhi(const LVL1::RecMuonRoI* p_roi, const TrigL2MuonSA::TgcFitResult& tgcFitResult, const TrigL2MuonSA::MdtRegion& mdtRegion, - TrigL2MuonSA::MuonRoad& muonRoad) + TrigL2MuonSA::MuonRoad& muonRoad) const { int endcap_inner = xAOD::L2MuonParameters::Chamber::EndcapInner; int endcap_middle = xAOD::L2MuonParameters::Chamber::EndcapMiddle; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtRegionDefiner.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtRegionDefiner.h index 4e5e8ac0f4da63bfbba9f811e9fbe76f86721226..8d7cd555ea90da0946ad280a192d3aba90a568c6 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtRegionDefiner.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtRegionDefiner.h @@ -50,43 +50,40 @@ namespace TrigL2MuonSA { StatusCode getMdtRegions(const LVL1::RecMuonRoI* p_roi, const TrigL2MuonSA::RpcFitResult& rpcFitResult, TrigL2MuonSA::MuonRoad& muonRoad, - TrigL2MuonSA::MdtRegion& mdtRegion); + TrigL2MuonSA::MdtRegion& mdtRegion) const; StatusCode getMdtRegions(const LVL1::RecMuonRoI* p_roi, const TrigL2MuonSA::TgcFitResult& tgcFitResult, TrigL2MuonSA::MuonRoad& muonRoad, - TrigL2MuonSA::MdtRegion& mdtRegion); + TrigL2MuonSA::MdtRegion& mdtRegion) const; private: StatusCode prepareTgcPoints(const TrigL2MuonSA::TgcHits& tgcHits); void find_barrel_road_dim(float max_road, float aw, float bw, - float rMmin,float rMax,float *zMin,float *zMax); + float rMmin,float rMax,float *zMin,float *zMax) const; void find_endcap_road_dim(float road,float aw, float bw, float zMin, - float zMax,float *rMin,float *rMax); + float zMax,float *rMin,float *rMax) const; void find_eta_min_max(float zMin, float rMin, float zMax, float rMax, - float& etaMin, float& etaMax); - void find_phi_min_max(float phiMiddle, float& phiMin, float& phiMax); + float& etaMin, float& etaMax) const; + void find_phi_min_max(float phiMiddle, float& phiMin, float& phiMax) const; - void find_station_sector(std::string name, int phi, bool& endcap, int& chamber, int& sector); + void find_station_sector(std::string name, int phi, bool& endcap, int& chamber, int& sector) const; StatusCode computePhi(const LVL1::RecMuonRoI* p_roi, const TrigL2MuonSA::RpcFitResult& rpcFitResult, const TrigL2MuonSA::MdtRegion& mdtRegion, - TrigL2MuonSA::MuonRoad& muonRoad); + TrigL2MuonSA::MuonRoad& muonRoad) const; StatusCode computePhi(const LVL1::RecMuonRoI* p_roi, const TrigL2MuonSA::TgcFitResult& tgcFitResult, const TrigL2MuonSA::MdtRegion& mdtRegion, - TrigL2MuonSA::MuonRoad& muonRoad); + TrigL2MuonSA::MuonRoad& muonRoad) const; private: ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> m_muDetMgrKey {this, "DetectorManagerKey", "MuonDetectorManager", "Key of input MuonDetectorManager condition data"}; - const MuonGM::MdtReadoutElement* m_mdtReadout {nullptr}; - const MuonGM::MuonStation* m_muonStation {nullptr}; - bool m_use_rpc {true}; TrigL2MuonSA::TgcFit::PointArray m_tgcStripMidPoints; // List of TGC strip middle station points. diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.cxx index 743f13929934ad5767b6dc7972d4e50c5eb613a8..9350fa9f89247ba34c5f2c9679c6bf549ef41c5c 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.cxx @@ -32,7 +32,7 @@ StatusCode TrigL2MuonSA::MuFastPatternFinder::initialize() // -------------------------------------------------------------------------------- // -------------------------------------------------------------------------------- -void TrigL2MuonSA::MuFastPatternFinder::doMdtCalibration(TrigL2MuonSA::MdtHitData& mdtHit, double track_phi, double phi0, bool isEndcap) +void TrigL2MuonSA::MuFastPatternFinder::doMdtCalibration(TrigL2MuonSA::MdtHitData& mdtHit, double track_phi, double phi0, bool isEndcap) const { int StationName = mdtHit.name; int StationEta = mdtHit.StationEta; @@ -108,7 +108,7 @@ StatusCode TrigL2MuonSA::MuFastPatternFinder::findPatterns(const TrigL2MuonSA::M TrigL2MuonSA::MdtHits& mdtHits, TrigL2MuonSA::StgcHits& stgcHits, TrigL2MuonSA::MmHits& mmHits, - std::vector<TrigL2MuonSA::TrackPattern>& v_trackPatterns) + std::vector<TrigL2MuonSA::TrackPattern>& v_trackPatterns) const { ATH_CHECK( findPatterns(muonRoad, mdtHits, v_trackPatterns) ); ATH_CHECK( m_nswPatternFinder->findPatterns(muonRoad, stgcHits, mmHits, v_trackPatterns.back()) ); @@ -128,7 +128,7 @@ StatusCode TrigL2MuonSA::MuFastPatternFinder::findPatterns(const TrigL2MuonSA::M StatusCode TrigL2MuonSA::MuFastPatternFinder::findPatterns(const TrigL2MuonSA::MuonRoad& muonRoad, TrigL2MuonSA::MdtHits& mdtHits, - std::vector<TrigL2MuonSA::TrackPattern>& v_trackPatterns) + std::vector<TrigL2MuonSA::TrackPattern>& v_trackPatterns) const { // find only 1 track pattern @@ -309,7 +309,7 @@ StatusCode TrigL2MuonSA::MuFastPatternFinder::findPatterns(const TrigL2MuonSA::M // -------------------------------------------------------------------------------- // -------------------------------------------------------------------------------- -double TrigL2MuonSA::MuFastPatternFinder::calc_residual(double aw,double bw,double x,double y) +double TrigL2MuonSA::MuFastPatternFinder::calc_residual(double aw,double bw,double x,double y) const { const double ZERO_LIMIT = 1e-4; if( fabs(aw) < ZERO_LIMIT ) return y-bw; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.h index 01f3e4f64210caa5825d003da7b092b2e61521ec..3c4dc37107011cc15e16edd66543b3d2eec3cde5 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.h @@ -47,20 +47,20 @@ class MuFastPatternFinder: public AthAlgTool private: - double calc_residual(double aw,double bw,double x,double y); - void doMdtCalibration(TrigL2MuonSA::MdtHitData& mdtHit, double track_phi, double phi0, bool isEndcap); + double calc_residual(double aw,double bw,double x,double y) const; + void doMdtCalibration(TrigL2MuonSA::MdtHitData& mdtHit, double track_phi, double phi0, bool isEndcap) const; public: StatusCode findPatterns(const TrigL2MuonSA::MuonRoad& muonRoad, TrigL2MuonSA::MdtHits& mdtHits, - std::vector<TrigL2MuonSA::TrackPattern>& v_trackPatterns); + std::vector<TrigL2MuonSA::TrackPattern>& v_trackPatterns) const; StatusCode findPatterns(const TrigL2MuonSA::MuonRoad& muonRoad, TrigL2MuonSA::MdtHits& mdtHits, TrigL2MuonSA::StgcHits& stgcHits, TrigL2MuonSA::MmHits& mmHits, - std::vector<TrigL2MuonSA::TrackPattern>& v_trackPatterns); + std::vector<TrigL2MuonSA::TrackPattern>& v_trackPatterns) const; private: ToolHandle<NswPatternFinder> m_nswPatternFinder {this, "NswPatternFinder", "TrigL2MuonSA::NswPatternFinder"}; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx index 3169847a8bc76a9c45e85aaca886c9806e76ba8c..b4feab6cdfc1509ff951faf7bb923b4319baf28c 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx @@ -321,7 +321,7 @@ StatusCode MuFastSteering::execute() for (size_t size=0; size<roiCollection->size(); size++){ const LVL1::RecMuonRoI* recRoI = matchingRecRoI( roiCollection->at(size)->roiWord(), *recRoiCollection ); - CHECK( recRoI != nullptr ); + if( recRoI == nullptr ) continue; recRoIVector.push_back(recRoI); ATH_MSG_DEBUG("REGTEST: " << m_recRoiCollectionKey.key() << " eta/phi = " << (recRoI)->eta() << "/" << (recRoI)->phi()); ATH_MSG_DEBUG("REGTEST: " << m_recRoiCollectionKey.key() << " size = " << recRoIVector.size()); @@ -1842,7 +1842,8 @@ bool MuFastSteering::storeMSRoiDescriptor(const TrigRoiDescriptor* const float phiHalfWidth = 0.1; const float etaHalfWidth = 0.1; - TrigRoiDescriptor* MSroiDescriptor = new TrigRoiDescriptor(roids->l1Id(), + TrigRoiDescriptor* MSroiDescriptor = new TrigRoiDescriptor(roids->roiWord(), + roids->l1Id(), roids->roiId(), pattern.etaMap, pattern.etaMap - etaHalfWidth, @@ -1909,7 +1910,8 @@ bool MuFastSteering::storeIDRoiDescriptor(const TrigRoiDescriptor* if (pattern.isTgcFailure || pattern.isRpcFailure) phiHalfWidth *= scalePhiWidthForFailure; - TrigRoiDescriptor* IDroiDescriptor = new TrigRoiDescriptor(roids->l1Id(), + TrigRoiDescriptor* IDroiDescriptor = new TrigRoiDescriptor(roids->roiWord(), + roids->l1Id(), roids->roiId(), pattern.etaVtx, pattern.etaVtx - etaHalfWidth, @@ -1930,7 +1932,8 @@ bool MuFastSteering::storeIDRoiDescriptor(const TrigRoiDescriptor* } else { // pt = 0. - TrigRoiDescriptor* IDroiDescriptor = new TrigRoiDescriptor(roids->l1Id(), + TrigRoiDescriptor* IDroiDescriptor = new TrigRoiDescriptor(roids->roiWord(), + roids->l1Id(), roids->roiId(), roids->eta(), roids->eta() - (roids->eta() - roids->etaMinus()) * scaleRoIforZeroPt, diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastTrackExtrapolator.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastTrackExtrapolator.cxx index c1af2468ba6b12cb0c5c19d70d6cb1f59bb74199..918ef9da7781b4c13753101980180e9351ff727d 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastTrackExtrapolator.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastTrackExtrapolator.cxx @@ -29,7 +29,7 @@ TrigL2MuonSA::MuFastTrackExtrapolator::MuFastTrackExtrapolator(const std::string // -------------------------------------------------------------------------------- StatusCode TrigL2MuonSA::MuFastTrackExtrapolator::extrapolateTrack(std::vector<TrigL2MuonSA::TrackPattern>& v_trackPatterns, - double winPt) + double winPt) const { ATH_MSG_DEBUG("in extrapolateTrack"); @@ -110,7 +110,8 @@ void TrigL2MuonSA::MuFastTrackExtrapolator::setMuFastRes(std::vector<double>& ve // Copied from TrigmuComb/muCombUtil.cxx double TrigL2MuonSA::MuFastTrackExtrapolator::getMuFastRes(std::vector<double> vec, const double pt, const int add, - const double eta, const double phi) { + const double eta, const double phi) const +{ if (pt == 0) return 1.0e30; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastTrackExtrapolator.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastTrackExtrapolator.h index 7e54a8d3006f097313815733b6e870464d9eca39..84d3779d4a6a7600cb747d56df29b34b4c2dfce3 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastTrackExtrapolator.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastTrackExtrapolator.h @@ -25,11 +25,11 @@ namespace TrigL2MuonSA { void setExtrapolatorTool(ToolHandle<ITrigMuonBackExtrapolator>* backExtrapolator) {m_backExtrapolatorTool = backExtrapolator;}; StatusCode extrapolateTrack(std::vector<TrigL2MuonSA::TrackPattern>& v_trackPatterns, - double winPt); + double winPt) const; void setMuFastRes(std::vector<double>& vec, double p1,double p2, double p3,double p4,double p5,double p6); - double getMuFastRes(std::vector<double> vec, const double pt, const int add, const double eta, const double phi); + double getMuFastRes(std::vector<double> vec, const double pt, const int add, const double eta, const double phi) const; private: ToolHandle<ITrigMuonBackExtrapolator>* m_backExtrapolatorTool {nullptr}; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.cxx index fcd5fbbe3ed3301b2c00309f4b02043db029f757..19f159de614692a7b952ceceb9bb6d55c4d808bd 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.cxx @@ -17,7 +17,7 @@ TrigL2MuonSA::NswStationFitter::NswStationFitter(const std::string& type, } StatusCode TrigL2MuonSA::NswStationFitter::superPointFitter(const LVL1::RecMuonRoI* p_roi, - TrigL2MuonSA::TrackPattern& trackPattern) + TrigL2MuonSA::TrackPattern& trackPattern) const { ATH_MSG_DEBUG("NswStationFitter::findSuperPoints() was called."); @@ -34,7 +34,7 @@ StatusCode TrigL2MuonSA::NswStationFitter::superPointFitter(const LVL1::RecMuonR } StatusCode TrigL2MuonSA::NswStationFitter::selectStgcHits(const LVL1::RecMuonRoI* p_roi, - TrigL2MuonSA::StgcHits& stgcHits) + TrigL2MuonSA::StgcHits& stgcHits) const { TrigL2MuonSA::StgcHits selectedStgcHits; @@ -80,7 +80,7 @@ StatusCode TrigL2MuonSA::NswStationFitter::selectStgcHits(const LVL1::RecMuonRoI } StatusCode TrigL2MuonSA::NswStationFitter::selectMmHits(const LVL1::RecMuonRoI* p_roi, - TrigL2MuonSA::MmHits& mmHits) + TrigL2MuonSA::MmHits& mmHits) const { TrigL2MuonSA::MmHits selectedMmHits; @@ -127,7 +127,7 @@ StatusCode TrigL2MuonSA::NswStationFitter::selectMmHits(const LVL1::RecMuonRoI* } -StatusCode TrigL2MuonSA::NswStationFitter::calcWeightedSumHit(TrigL2MuonSA::TrackPattern& trackPattern) +StatusCode TrigL2MuonSA::NswStationFitter::calcWeightedSumHit(TrigL2MuonSA::TrackPattern& trackPattern) const { TrigL2MuonSA::StgcHits stgcHits = trackPattern.stgcSegment; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.h index 13cace4562e86c5336f3d7be13ffcd37f7e79ba4..b04aaa86cc8e543ceac802aa336dc58baa321dd2 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.h @@ -28,15 +28,15 @@ namespace TrigL2MuonSA { const IInterface* parent); StatusCode superPointFitter(const LVL1::RecMuonRoI* p_roi, - TrigL2MuonSA::TrackPattern& trackPattern); + TrigL2MuonSA::TrackPattern& trackPattern) const; StatusCode selectStgcHits(const LVL1::RecMuonRoI* p_roi, - TrigL2MuonSA::StgcHits& stgcHits); + TrigL2MuonSA::StgcHits& stgcHits) const; StatusCode selectMmHits(const LVL1::RecMuonRoI* p_roi, - TrigL2MuonSA::MmHits& mmHits); + TrigL2MuonSA::MmHits& mmHits) const; - StatusCode calcWeightedSumHit(TrigL2MuonSA::TrackPattern& trackPattern); + StatusCode calcWeightedSumHit(TrigL2MuonSA::TrackPattern& trackPattern) const; private : diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromAlphaBeta.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromAlphaBeta.cxx index 70bd86d3672f77dd929cd91a6c02eb63283d7c6f..c37eae8c7f1f10ddfbc20bee6daef677d8b610fc 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromAlphaBeta.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromAlphaBeta.cxx @@ -43,7 +43,7 @@ void TrigL2MuonSA::PtFromAlphaBeta::setMCFlag(BooleanProperty use_mcLUT, // -------------------------------------------------------------------------------- StatusCode TrigL2MuonSA::PtFromAlphaBeta::setPt(TrigL2MuonSA::TrackPattern& trackPattern, - TrigL2MuonSA::TgcFitResult& tgcFitResult) + TrigL2MuonSA::TgcFitResult& tgcFitResult) const { if (trackPattern.etaBin < -1) diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromAlphaBeta.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromAlphaBeta.h index 2d3afb4aec86d91dd960983d90f6f3923ce95b46..70d72ea182afb4da3d4f30e104b3252c319be7a6 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromAlphaBeta.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromAlphaBeta.h @@ -32,7 +32,7 @@ class PtFromAlphaBeta: public AthAlgTool public: StatusCode setPt(TrigL2MuonSA::TrackPattern& trackPattern, - TrigL2MuonSA::TgcFitResult& tgcFitResult); + TrigL2MuonSA::TgcFitResult& tgcFitResult) const; double compute_radius(double InnerSlope, double InnerR, double InnerZ, double MiddleSlope, double MiddleR, double MiddleZ, diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromRadius.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromRadius.cxx index b8a22b7c24dc38941ad670e693c7bf243661e47f..8b0778496fed5f0fcf6a680ba0cddbb82ae9df7c 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromRadius.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromRadius.cxx @@ -32,7 +32,7 @@ void TrigL2MuonSA::PtFromRadius::setMCFlag(BooleanProperty use_mcLUT, // -------------------------------------------------------------------------------- // -------------------------------------------------------------------------------- -StatusCode TrigL2MuonSA::PtFromRadius::setPt(TrigL2MuonSA::TrackPattern& trackPattern) +StatusCode TrigL2MuonSA::PtFromRadius::setPt(TrigL2MuonSA::TrackPattern& trackPattern) const { const double ZERO_LIMIT = 1e-5; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromRadius.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromRadius.h index 0d51efd779795a43bf4bbb329abebdc54608f2b2..f3d9e9a6ab9ac864c20c5f454d8f98cba886b4fb 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromRadius.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/PtFromRadius.h @@ -29,7 +29,7 @@ class PtFromRadius: public AthAlgTool public: // For Barrel - StatusCode setPt(TrigL2MuonSA::TrackPattern& trackPattern); + StatusCode setPt(TrigL2MuonSA::TrackPattern& trackPattern) const; private: BooleanProperty m_use_mcLUT{0}; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RecMuonRoIUtils.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RecMuonRoIUtils.h index 091cedda2bd8c7db61789e79efcc8d88e861dbf0..5c031b02f77d37b4893a81284104de208b49d408 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RecMuonRoIUtils.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RecMuonRoIUtils.h @@ -16,13 +16,13 @@ class RecMuonRoIUtils ~RecMuonRoIUtils() {}; public: - bool isBarrel(const LVL1::RecMuonRoI* p_roi){ + bool isBarrel(const LVL1::RecMuonRoI* p_roi) const { return (p_roi->sysID()==0) ? true : false; }; - bool isLowPt(const LVL1::RecMuonRoI* p_roi){ + bool isLowPt(const LVL1::RecMuonRoI* p_roi) const { return (p_roi->getThresholdNumber() <4) ? true : false; }; - bool isHighPt(const LVL1::RecMuonRoI* p_roi){ + bool isHighPt(const LVL1::RecMuonRoI* p_roi) const { return (p_roi->getThresholdNumber()>=4) ? true : false; }; }; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RpcRoadDefiner.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RpcRoadDefiner.cxx index 16cc5e662b05b8b763a8eb7b5492e62af1c7ac12..45e271dd9a883bdbf7776a6d4adb180bf24cbfcd 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RpcRoadDefiner.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RpcRoadDefiner.cxx @@ -40,7 +40,7 @@ StatusCode TrigL2MuonSA::RpcRoadDefiner::defineRoad(const LVL1::RecMuonRoI* double roiEtaMinLow, double roiEtaMaxLow, double roiEtaMinHigh, - double roiEtaMaxHigh) + double roiEtaMaxHigh) const { const double ZERO_LIMIT = 1e-5; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RpcRoadDefiner.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RpcRoadDefiner.h index 2d048de141ae9740fe5612126d82d20019d28797..3c21dc00fc7f794ca6581ea2dce04c623299ca73 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RpcRoadDefiner.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/RpcRoadDefiner.h @@ -47,7 +47,7 @@ class RpcRoadDefiner: public AthAlgTool double roiEtaMinLow, double roiEtaMaxLow, double roiEtaMinHigh, - double roiEtaMaxHigh); + double roiEtaMaxHigh) const; void setMdtGeometry(const ServiceHandle<IRegSelSvc>& regionSelector){ m_regionSelector = regionSelector; }; void setRoadWidthForFailure(double rWidth_RPC_Failed){ m_rWidth_RPC_Failed = rWidth_RPC_Failed; }; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/SagittaRadiusEstimate.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/SagittaRadiusEstimate.cxx index 6b5088969bba6e70aa9c12254899a7e9d79959b7..7ea260af65bbcca69a55e45781c695aae2d20998 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/SagittaRadiusEstimate.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/SagittaRadiusEstimate.cxx @@ -36,7 +36,7 @@ void TrigL2MuonSA::SagittaRadiusEstimate::setMCFlag(BooleanProperty use_mcLUT, StatusCode TrigL2MuonSA::SagittaRadiusEstimate::setSagittaRadius(const LVL1::RecMuonRoI* p_roi, TrigL2MuonSA::RpcFitResult& rpcFitResult, - TrigL2MuonSA::TrackPattern& trackPattern) + TrigL2MuonSA::TrackPattern& trackPattern) const { const int MAX_STATION = 4; const float ZERO_LIMIT = 1e-5; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/SagittaRadiusEstimate.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/SagittaRadiusEstimate.h index f0d837cafe548de37046d7922d87fefef4739690..e7cd91234d6eea3dd00d47421a53d721eb68f1a2 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/SagittaRadiusEstimate.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/SagittaRadiusEstimate.h @@ -36,7 +36,7 @@ namespace TrigL2MuonSA { StatusCode setSagittaRadius(const LVL1::RecMuonRoI* p_roi, TrigL2MuonSA::RpcFitResult& rpcFitResult, - TrigL2MuonSA::TrackPattern& trackPattern); + TrigL2MuonSA::TrackPattern& trackPattern) const; private: diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcFit.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcFit.cxx index f71644cdb8c2f81a1b8c14bc72d26d941e08dc69..8b97200d32aaa467f68344aff28648b2e7f26a38 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcFit.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcFit.cxx @@ -48,7 +48,7 @@ double TrigL2MuonSA::TgcFit::LinStats::eval(double fX) const // -------------------------------------------------------------------------------- // -------------------------------------------------------------------------------- -void TrigL2MuonSA::TgcFit::SimpleStatistics(TrigL2MuonSA::TgcFit::PointArray& points, TrigL2MuonSA::TgcFit::SimpleStats& stats) +void TrigL2MuonSA::TgcFit::SimpleStatistics(TrigL2MuonSA::TgcFit::PointArray& points, TrigL2MuonSA::TgcFit::SimpleStats& stats) const { double *y = new double[points.size()]; double *w = new double[points.size()]; @@ -104,7 +104,7 @@ void TrigL2MuonSA::TgcFit::SimpleStatistics(TrigL2MuonSA::TgcFit::PointArray& po // -------------------------------------------------------------------------------- // -------------------------------------------------------------------------------- -void TrigL2MuonSA::TgcFit::linReg(TrigL2MuonSA::TgcFit::PointArray& points, TrigL2MuonSA::TgcFit::LinStats& stats) +void TrigL2MuonSA::TgcFit::linReg(TrigL2MuonSA::TgcFit::PointArray& points, TrigL2MuonSA::TgcFit::LinStats& stats) const { double *x = new double[points.size()]; double *y = new double[points.size()]; @@ -179,7 +179,7 @@ void TrigL2MuonSA::TgcFit::linReg(TrigL2MuonSA::TgcFit::PointArray& points, Trig TrigL2MuonSA::TgcFit::Status TrigL2MuonSA::TgcFit::runTgcMiddle(TrigL2MuonSA::TgcFit::PointArray& stripPoints, TrigL2MuonSA::TgcFit::PointArray& wirePoints, - TrigL2MuonSA::TgcFitResult& tgcFitResult) + TrigL2MuonSA::TgcFitResult& tgcFitResult) const { ATH_MSG_DEBUG("TrigL2MuonSA::TgcFit::runTgcMiddle stripPoints=" << stripPoints.size() << " wirePoints=" << wirePoints.size()); @@ -304,7 +304,7 @@ TrigL2MuonSA::TgcFit::Status TrigL2MuonSA::TgcFit::runTgcMiddle(TrigL2MuonSA::Tg TrigL2MuonSA::TgcFit::Status TrigL2MuonSA::TgcFit::runTgcInner(TrigL2MuonSA::TgcFit::PointArray& stripPoints, TrigL2MuonSA::TgcFit::PointArray& wirePoints, - TrigL2MuonSA::TgcFitResult& tgcFitResult) + TrigL2MuonSA::TgcFitResult& tgcFitResult) const { Status status = FIT_NONE; SimpleStats stripStats; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcFit.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcFit.h index c418c0524773765ac829ff24ea59bc0f6982cd67..d69ad5bea68d3a03ba9dd7189860bc3453dd647b 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcFit.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcFit.h @@ -176,18 +176,18 @@ class TgcFit: public AthAlgTool * @param points The input list of data points. * @param stats The statistics struct to fill with fit results. */ - void linReg(PointArray& points, LinStats& stats); + void linReg(PointArray& points, LinStats& stats) const; /* * Calculate simple statistics for the Y values of a set of points. * @param points The input list of data points. * @param stats The statistics struct to fill with fit results. */ - void SimpleStatistics(PointArray& points, SimpleStats& stats); + void SimpleStatistics(PointArray& points, SimpleStats& stats) const; /* * Fit data to TGC. Calculate outliers and fit lines to strip and wire points. */ - Status runTgcMiddle(PointArray& stripPoints, PointArray& wirePoints, TgcFitResult& fitResult); - Status runTgcInner(PointArray& stripPoints, PointArray& wirePoints, TgcFitResult& fitResult); + Status runTgcMiddle(PointArray& stripPoints, PointArray& wirePoints, TgcFitResult& fitResult) const; + Status runTgcInner(PointArray& stripPoints, PointArray& wirePoints, TgcFitResult& fitResult) const; protected: PointArray m_superPoints; /**< List of wire (eta) super-points. */ @@ -196,7 +196,7 @@ class TgcFit: public AthAlgTool unsigned m_MIN_WIRE_POINTS { 4 }; /**< Minimum number of wire points for linear fit. */ unsigned m_MIN_STRIP_POINTS { 3 }; /**< Minimum number of strip points for linear fit. */ - void printDebug(const std::string& str){ ATH_MSG_DEBUG(str); }; + void printDebug(const std::string& str) const { ATH_MSG_DEBUG(str); }; }; } diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcRoadDefiner.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcRoadDefiner.cxx index 462859b0adc50bc55368baec8b99c5b630ba1fff..7511369023e3682798d62c7c3fd66c73747dc78e 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcRoadDefiner.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcRoadDefiner.cxx @@ -47,7 +47,7 @@ StatusCode TrigL2MuonSA::TgcRoadDefiner::defineRoad(const LVL1::RecMuonRoI* const bool insideOut, const TrigL2MuonSA::TgcHits& tgcHits, TrigL2MuonSA::MuonRoad& muonRoad, - TrigL2MuonSA::TgcFitResult& tgcFitResult) + TrigL2MuonSA::TgcFitResult& tgcFitResult) const { const int N_STATION = 10; const int N_LAYER = 8; @@ -73,12 +73,17 @@ StatusCode TrigL2MuonSA::TgcRoadDefiner::defineRoad(const LVL1::RecMuonRoI* int barrel_inner = xAOD::L2MuonParameters::Chamber::BarrelInner; int csc = xAOD::L2MuonParameters::Chamber::CSC; int bee = xAOD::L2MuonParameters::Chamber::BEE; - + + TrigL2MuonSA::TgcFit::PointArray tgcStripMidPoints; // List of TGC strip middle station points. + TrigL2MuonSA::TgcFit::PointArray tgcWireMidPoints; // List of TGC wire middle station points. + TrigL2MuonSA::TgcFit::PointArray tgcStripInnPoints; // List of TGC strip inner station points. + TrigL2MuonSA::TgcFit::PointArray tgcWireInnPoints; // List of TGC wire inner station points. + if (tgcHits.size()>0) { // TGC data is properly read // Split digits to Strip/Wire points. - if( ! prepareTgcPoints(tgcHits) ) { + if( ! prepareTgcPoints(tgcHits, tgcStripInnPoints, tgcWireInnPoints, tgcStripMidPoints, tgcWireMidPoints) ) { ATH_MSG_ERROR("Preparation of Tgc points failed"); return StatusCode::FAILURE; } @@ -86,7 +91,7 @@ StatusCode TrigL2MuonSA::TgcRoadDefiner::defineRoad(const LVL1::RecMuonRoI* // Fit lines to TGC middle station isMiddleFailure = false; - TgcFit::Status status = m_tgcFit->runTgcMiddle(m_tgcStripMidPoints, m_tgcWireMidPoints, tgcFitResult); + TgcFit::Status status = m_tgcFit->runTgcMiddle(tgcStripMidPoints, tgcWireMidPoints, tgcFitResult); if (status == TgcFit::FIT_NONE) { ATH_MSG_WARNING("Fit to TGC middle station points failed"); isMiddleFailure = true; @@ -96,7 +101,7 @@ StatusCode TrigL2MuonSA::TgcRoadDefiner::defineRoad(const LVL1::RecMuonRoI* } // Fit lines to TGC inner station - status = m_tgcFit->runTgcInner(m_tgcStripInnPoints, m_tgcWireInnPoints, tgcFitResult); + status = m_tgcFit->runTgcInner(tgcStripInnPoints, tgcWireInnPoints, tgcFitResult); if (status == TgcFit::FIT_NONE) { ATH_MSG_DEBUG("Fit to TGC inner station points failed"); } @@ -402,19 +407,18 @@ StatusCode TrigL2MuonSA::TgcRoadDefiner::defineRoad(const LVL1::RecMuonRoI* // -------------------------------------------------------------------------------- // -------------------------------------------------------------------------------- -bool TrigL2MuonSA::TgcRoadDefiner::prepareTgcPoints(const TrigL2MuonSA::TgcHits& tgcHits) +bool TrigL2MuonSA::TgcRoadDefiner::prepareTgcPoints(const TrigL2MuonSA::TgcHits& tgcHits, + TrigL2MuonSA::TgcFit::PointArray& tgcStripInnPoints, + TrigL2MuonSA::TgcFit::PointArray& tgcWireInnPoints, + TrigL2MuonSA::TgcFit::PointArray& tgcStripMidPoints, + TrigL2MuonSA::TgcFit::PointArray& tgcWireMidPoints) const { const double PHI_BOUNDARY = 0.2; - ATH_MSG_DEBUG(", m_tgcStripMidPoints.size()=" << m_tgcStripMidPoints.size() << - ", m_tgcStripInnPoints.size()=" << m_tgcStripInnPoints.size() << - ", m_tgcWireMidPoints.size()=" << m_tgcWireMidPoints.size() << - ", m_tgcWireInnPoints.size()=" << m_tgcWireInnPoints.size()); - - m_tgcStripMidPoints.clear(); - m_tgcStripInnPoints.clear(); - m_tgcWireMidPoints.clear(); - m_tgcWireInnPoints.clear(); + tgcStripMidPoints.clear(); + tgcStripInnPoints.clear(); + tgcWireMidPoints.clear(); + tgcWireInnPoints.clear(); // loop over TGC digits. unsigned int iHit; @@ -433,15 +437,20 @@ bool TrigL2MuonSA::TgcRoadDefiner::prepareTgcPoints(const TrigL2MuonSA::TgcHits& w *= hit.r * hit.r; double phi = hit.phi; if( phi < 0 && ( (M_PI+phi)<PHI_BOUNDARY) ) phi += M_PI*2; - if ( hit.sta < 3 ) { m_tgcStripMidPoints.push_back(TgcFit::Point(iHit + 1, hit.sta, hit.z, phi, w)); } - else if ( hit.sta ==3 ) { m_tgcStripInnPoints.push_back(TgcFit::Point(iHit + 1, hit.sta, hit.z, phi, w)); } + if ( hit.sta < 3 ) { tgcStripMidPoints.push_back(TgcFit::Point(iHit + 1, hit.sta, hit.z, phi, w)); } + else if ( hit.sta ==3 ) { tgcStripInnPoints.push_back(TgcFit::Point(iHit + 1, hit.sta, hit.z, phi, w)); } } else { - if ( hit.sta < 3 ) { m_tgcWireMidPoints.push_back(TgcFit::Point(iHit + 1, hit.sta, hit.z, hit.r, w)); } - else if ( hit.sta ==3 ) { m_tgcWireInnPoints.push_back(TgcFit::Point(iHit + 1, hit.sta, hit.z, hit.r, w)); } + if ( hit.sta < 3 ) { tgcWireMidPoints.push_back(TgcFit::Point(iHit + 1, hit.sta, hit.z, hit.r, w)); } + else if ( hit.sta ==3 ) { tgcWireInnPoints.push_back(TgcFit::Point(iHit + 1, hit.sta, hit.z, hit.r, w)); } } } - + + ATH_MSG_DEBUG(", tgcStripMidPoints.size()=" << tgcStripMidPoints.size() << + ", tgcStripInnPoints.size()=" << tgcStripInnPoints.size() << + ", tgcWireMidPoints.size()=" << tgcWireMidPoints.size() << + ", tgcWireInnPoints.size()=" << tgcWireInnPoints.size()); + return true; } diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcRoadDefiner.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcRoadDefiner.h index 0ee78135ca39ca997e13dcd93396c6c19cf6223a..6987ce71bf4d95a295d67d7bc64ba246b93f8d46 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcRoadDefiner.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/TgcRoadDefiner.h @@ -40,15 +40,19 @@ class TgcRoadDefiner: public AthAlgTool const bool insideOut, const TrigL2MuonSA::TgcHits& tgcHits, TrigL2MuonSA::MuonRoad& muonRoad, - TrigL2MuonSA::TgcFitResult& tgcFitResult); + TrigL2MuonSA::TgcFitResult& tgcFitResult) const; void setMdtGeometry(const ServiceHandle<IRegSelSvc>& regionSelector) { m_regionSelector = regionSelector; }; void setPtLUT(const TrigL2MuonSA::PtEndcapLUTSvc* ptEndcapLUTSvc) { m_ptEndcapLUT = ptEndcapLUTSvc->ptEndcapLUT(); }; void setRoadWidthForFailure(double rWidth_TGC_Failed) { m_rWidth_TGC_Failed = rWidth_TGC_Failed; }; void setExtrapolatorTool(ToolHandle<ITrigMuonBackExtrapolator>* backExtrapolator) { m_backExtrapolatorTool = backExtrapolator; }; - bool prepareTgcPoints(const TrigL2MuonSA::TgcHits& tgcHits); - + bool prepareTgcPoints(const TrigL2MuonSA::TgcHits& tgcHits, + TrigL2MuonSA::TgcFit::PointArray& tgcStripInnPoints, + TrigL2MuonSA::TgcFit::PointArray& tgcWireInnPoints, + TrigL2MuonSA::TgcFit::PointArray& tgcStripMidPoints, + TrigL2MuonSA::TgcFit::PointArray& tgcWireMidPoints) const; + private: // setted in MuFastSteering::hltInitialize, setExtrapolatorTool ToolHandle<ITrigMuonBackExtrapolator>* m_backExtrapolatorTool {nullptr}; @@ -57,11 +61,6 @@ class TgcRoadDefiner: public AthAlgTool ToolHandle<TgcFit> m_tgcFit {"TrigL2MuonSA::TgcFit"}; - TrigL2MuonSA::TgcFit::PointArray m_tgcStripMidPoints; // List of TGC strip middle station points. - TrigL2MuonSA::TgcFit::PointArray m_tgcWireMidPoints; // List of TGC wire middle station points. - TrigL2MuonSA::TgcFit::PointArray m_tgcStripInnPoints; // List of TGC strip inner station points. - TrigL2MuonSA::TgcFit::PointArray m_tgcWireInnPoints; // List of TGC wire inner station points. - double m_rWidth_TGC_Failed {0}; ServiceHandle<IRegSelSvc> m_regionSelector; diff --git a/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.icc b/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.icc index 35aa5a9a542cb1f2e1ea83687ea17025ac927e40..880d797b4781b528692210eeaf661355902da34b 100644 --- a/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.icc +++ b/Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/ChainGroup.icc @@ -45,53 +45,77 @@ std::vector< TrigCompositeUtils::LinkInfo<CONTAINER> > Trig::ChainGroup::feature return std::vector< TrigCompositeUtils::LinkInfo<CONTAINER> >(); } - // For each chain, collect Navigation information - TrigCompositeUtils::NavGraph navGraph; + // The sub-graph from which we will extract features + TrigCompositeUtils::NavGraph navGraph; - // Loop over HLT chains - TrigCompositeUtils::DecisionIDContainer chainIDs; + // Collect the set of chains (and chain legs) which we are fetching + // Perform the fetches using the full set of IDs for each chain (include all legs) + TrigCompositeUtils::DecisionIDContainer allRequestedChainIDs; std::set<const TrigConf::HLTChain*>::const_iterator chIt; for (chIt=conf_chain_begin(); chIt != conf_chain_end(); ++chIt) { - const HLT::Chain* fchain = cgm()->chain(**chIt); - if (fchain) { - chainIDs.insert( fchain->getChainHashId() ); - // Obtain navigation routes for passed chains - // Final parameter TRUE as the chain passed (has its ID in terminusNode) - TrigCompositeUtils::recursiveGetDecisions(terminusNode, navGraph, fchain->getChainHashId(), true); + TrigCompositeUtils::DecisionIDContainer thisChainIDs; + HLT::Identifier chainID(""); - ATH_MSG_DEBUG("Added all passed navigation data for chain " << fchain->getChainName() - << ", total nodes:" << navGraph.nodes() << " total edges:" << navGraph.edges() << " final nodes:" << navGraph.finalNodes().size()); - if (msg().level() <= MSG::DEBUG && navGraph.finalNodes().size()) { - for (const TrigCompositeUtils::NavGraphNode* n : navGraph.finalNodes()) { - ATH_MSG_DEBUG(" Final node:" << TrigCompositeUtils::decisionToElementLink(n->node()).dataID() << " #" << n->node()->index()); + const HLT::Chain* fchain = cgm()->chain(**chIt); + if (fchain) { + chainID = HLT::Identifier( fchain->getChainName() ); + const std::vector<size_t> legMultiplicites = fchain->getLegMultiplicities(); + allRequestedChainIDs.insert( chainID.numeric() ); + thisChainIDs.insert( chainID.numeric() ); + if (legMultiplicites.size() == 0) { + ATH_MSG_ERROR("chain " << chainID << " has invalid configuration, no multiplicity data."); + } else if (legMultiplicites.size() > 1) { + // For multi-leg chains, the DecisionIDs are handled per leg. + // We don't care here exactly how many objects are required per leg, just that there are two-or-more legs + for (size_t legNumeral = 0; legNumeral < legMultiplicites.size(); ++legNumeral) { + HLT::Identifier legID = TrigCompositeUtils::createLegName(chainID, legNumeral); + allRequestedChainIDs.insert( legID.numeric() ); + thisChainIDs.insert( legID.numeric() ); } } + ATH_MSG_DEBUG("Adding navigation data for chain " << chainID << " with " << legMultiplicites.size() << " leg(s)." ); + if (msg().level() <= MSG::VERBOSE) { + for (const TrigCompositeUtils::DecisionID printID : thisChainIDs) { + ATH_MSG_VERBOSE(" -- Collecting for chain or chain-leg: " << HLT::Identifier(printID)); + } + } + } else { + ATH_MSG_ERROR("Cannot access configuration for one of the ChainGroup's chains"); + continue; + } - if (condition == TrigDefs::includeFailedDecisions) { - std::vector<const TrigCompositeUtils::Decision*> rejectedDecisionNodes = - TrigCompositeUtils::getRejectedDecisionNodes(eventStore, fchain->getChainHashId()); + // Obtain navigation routes for objects which pass + // Final parameter TRUE as the chain passed (has its ID in terminusNode) + TrigCompositeUtils::recursiveGetDecisions(terminusNode, navGraph, thisChainIDs, true); - ATH_MSG_DEBUG("Chain " << fchain->getChainName() << " has " << rejectedDecisionNodes.size() - << " dangling nodes in the graph from objects which were rejected."); + ATH_MSG_DEBUG("Added all passed navigation data for chain " << chainID + << ", total nodes:" << navGraph.nodes() << " total edges:" << navGraph.edges() << " final nodes:" << navGraph.finalNodes().size()); - for (const TrigCompositeUtils::Decision* rejectedNode : rejectedDecisionNodes) { - // Final parameter FALSE as the chain failed here (its ID was removed from rejectedNode) - TrigCompositeUtils::recursiveGetDecisions(rejectedNode, navGraph, fchain->getChainHashId(), false); - } + // Obtain navigation routes for objects which fail + if (condition == TrigDefs::includeFailedDecisions) { + std::vector<const TrigCompositeUtils::Decision*> rejectedDecisionNodes = + TrigCompositeUtils::getRejectedDecisionNodes(eventStore, thisChainIDs); - ATH_MSG_DEBUG("Added all failed navigation data for chain " << fchain->getChainName() - << ", total nodes:" << navGraph.nodes() << " total edges:" << navGraph.edges() << " final nodes:" << navGraph.finalNodes().size()); - if (msg().level() <= MSG::DEBUG && navGraph.finalNodes().size()) { - for (const TrigCompositeUtils::NavGraphNode* n : navGraph.finalNodes()) { - ATH_MSG_DEBUG(" Final node:" << TrigCompositeUtils::decisionToElementLink(n->node()).dataID() << " #" << n->node()->index()); - } - } + ATH_MSG_DEBUG("Chain " << chainID << " has " << rejectedDecisionNodes.size() + << " dangling nodes in the graph from objects which were rejected."); + for (const TrigCompositeUtils::Decision* rejectedNode : rejectedDecisionNodes) { + // Final parameter FALSE as the chain failed here (its ID was removed from rejectedNode) + TrigCompositeUtils::recursiveGetDecisions(rejectedNode, navGraph, thisChainIDs, false); } - } else { - ATH_MSG_ERROR("Cannot access configuration for one of the ChainGroup's chains"); + ATH_MSG_DEBUG("Added all failed navigation data for chain " << chainID + << ", total nodes:" << navGraph.nodes() << " total edges:" << navGraph.edges() << " final nodes:" << navGraph.finalNodes().size()); + } + + } + + ATH_MSG_DEBUG("Finished adding nodes to sub-graph. " + << ", total nodes:" << navGraph.nodes() << " total edges:" << navGraph.edges() << " final nodes:" << navGraph.finalNodes().size()); + if (msg().level() <= MSG::DEBUG && navGraph.finalNodes().size()) { + for (const TrigCompositeUtils::NavGraphNode* n : navGraph.finalNodes()) { + ATH_MSG_DEBUG(" Final node:" << TrigCompositeUtils::decisionToElementLink(n->node()).dataID() << " #" << n->node()->index()); } } @@ -107,7 +131,7 @@ std::vector< TrigCompositeUtils::LinkInfo<CONTAINER> > Trig::ChainGroup::feature const bool lastFeatureOfTypeFlag = (featureCollectionMode == TrigDefs::lastFeatureOfType); std::vector<TrigCompositeUtils::LinkInfo<CONTAINER>> returnVector = - TrigCompositeUtils::recursiveGetFeaturesOfType<CONTAINER>(navGraph, containerSGKey, lastFeatureOfTypeFlag, navElementLinkKey, chainIDs); + TrigCompositeUtils::recursiveGetFeaturesOfType<CONTAINER>(navGraph, containerSGKey, lastFeatureOfTypeFlag, navElementLinkKey, allRequestedChainIDs); // Check for missing navigation data if requesting the default "feature" links if (navElementLinkKey == TrigCompositeUtils::featureString()) { diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/DataStructure.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/DataStructure.h index 33dbd009dc9bf801b1b60fea729b20e5c2b15864..da6a9fe0fb60992d3db8dec258d78ce79ea34bd4 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/DataStructure.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/DataStructure.h @@ -102,6 +102,15 @@ namespace TrigConf { return data().get_value<T>(); } + /** @brief access to content of the note + * Will return false if the value could not be converted into @c T + */ + template<class T> + std::optional<T> getValue_optional() const { + auto v = data().get_value_optional<T>(); + return v ? std::optional<T>(std::move(*v)) : std::nullopt; + } + /** Check for attribute * @param key The path to the attribute name, relative to the current one in form "path.to.child" * @return true if path @c key exists and is an attribute @@ -136,6 +145,16 @@ namespace TrigConf { return obj.get().get_value<T>(); } + template<class T> + std::optional<T> getAttribute_optional(const std::string & key) const { + const auto & obj = data().get_child_optional(key); + if( ! obj ) { + return std::nullopt; + } + auto v = obj.get().get_value_optional<T>(); + return v ? std::optional(std::move(*v)) : std::nullopt; + } + const std::string & getAttribute(const std::string & key, bool ignoreIfMissing = false, const std::string & def = "") const; /** Access to array structure @@ -147,6 +166,8 @@ namespace TrigConf { */ std::vector<DataStructure> getList(const std::string & pathToChild, bool ignoreIfMissing = false) const; + std::optional<std::vector<DataStructure> > getList_optional(const std::string & pathToChild) const; + /** Access to configuration object * @param pathToChild The path to the configuration child, relative to the current one * @param ignoreIfMissing Controls the behavior in case of missing configuration child @@ -162,6 +183,9 @@ namespace TrigConf { **/ DataStructure getObject(const std::string & pathToChild, bool ignoreIfMissing = false) const; + std::optional<TrigConf::DataStructure> + getObject_optional(const std::string & pathToChild) const; + /** Access to the keys of an DataStructure which presents a dictionary * diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTChain.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTChain.h index d15e87769469909e1d57c45258caa8f39959b7c4..c5b426d4665c32ff9b12801c9f58b665d1ccaa10 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTChain.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTChain.h @@ -50,6 +50,9 @@ namespace TrigConf { /** Accessor to the l1 thresholds */ std::vector<std::string> l1thresholds() const; + /** Accessor to the chains multiplicitiy requirements for each of its legs */ + std::vector<size_t> legMultiplicities() const; + /** Accessor to the connected output streams */ std::vector<std::string> streams() const; diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1CTP.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1CTP.h new file mode 100644 index 0000000000000000000000000000000000000000..7f47669c86026cc321a6f3e5ffa4e3cf7aef6f1b --- /dev/null +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1CTP.h @@ -0,0 +1,60 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef TRIGCONFDATA_L1CTP_H +#define TRIGCONFDATA_L1CTP_H + +#include "TrigConfData/DataStructure.h" + +#include <map> + +namespace TrigConf { + + /** @brief a TriggerLine entry describes the location of a threshold multiplicity on a cable (connector) + * + * for electrical connections from L1Topo boards it also knows + * which fpga they come from and which clock signal they have (those signals run on doubled clock) + */ + + /** @brief L1 board configuration */ + class L1CTP final : public DataStructure { + public: + + L1CTP() = default; + /** Constructor initialized with configuration data + * @param data The data containing the L1 CTP configuration + */ + L1CTP(const std::string & name, const ptree & data); + + L1CTP(const L1CTP &) = delete; + L1CTP& operator=(const L1CTP&) = delete; + L1CTP(L1CTP&&) = delete; + + ~L1CTP() = default; + + /** @brief name of ctpin connector + * @param slot CTPIN board 7..9 + * @param conn CTPIN connector 0..3 on each board + */ + const std::string & ctpin(size_t slot, size_t conn) const; + + const std::string & electrical(size_t conn) const; + + const std::string & optical(size_t conn) const; + + const std::map<std::string, std::pair<size_t,std::string>> ctpMon() const { return m_ctpmon; } + + private: + + virtual void update() { load(); }; + void load(); + std::string m_ctpin[3][4]; + std::string m_electrical[3]; + std::string m_optical[12]; + + std::map<std::string, std::pair<size_t,std::string>> m_ctpmon; + }; +} + +#endif diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Connector.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Connector.h index 7cb5f6fe1e3b827a93623fc052c5cc782427081c..69cd439b7ec972f06603675d78524a47c9b696d0 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Connector.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Connector.h @@ -63,8 +63,10 @@ namespace TrigConf { /** Accessor to the number of trigger lines */ std::size_t size() const; + std::string type() const; + /** Accessor to the connector type */ - ConnectorType type() const; + ConnectorType connectorType() const; /** names of all trigger lines */ std::vector<std::string> triggerLineNames() const; @@ -84,7 +86,14 @@ namespace TrigConf { const TrigConf::TriggerLine & triggerLine( const std::string & lineName ) const; + bool legacy() const { return m_isLegacy; } + + [[deprecated("Use legacy() instead.")]] bool isLegacy() const { return m_isLegacy; } + + std::size_t maxFpga() const { return m_maxFpga; } + + std::size_t maxClock() const { return m_maxClock; } private: diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Item.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Item.h index 6870b781f86f5ce3760fad5821b0b652449e4023..26ea08d19cbbfcb7f9782ec6f59646a35501b9b3 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Item.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Item.h @@ -62,6 +62,10 @@ namespace TrigConf { */ unsigned char triggerTypeAsUChar() const; + /** Accessor to the item legacy flag + */ + std::optional<bool> legacy() const; + /** Accessor to the item logic * * The current description of the logic is rather complex and @@ -72,7 +76,8 @@ namespace TrigConf { private: /** Update the internal data after modification of the data object */ - virtual void update(); + virtual void update() { load(); }; + void load(); std::vector<std::string> m_bunchgroups{}; diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Menu.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Menu.h index 8bf39b073a6f486b60c60d2ce6cf9acf086bde8a..ec42d396b55c919998c5f3a1cde9dc83fd9c8305 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Menu.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Menu.h @@ -13,6 +13,7 @@ #include "TrigConfData/L1TopoAlgorithm.h" #include "TrigConfData/L1Threshold.h" #include "TrigConfData/L1ThrExtraInfo.h" +#include "TrigConfData/L1CTP.h" #include <vector> #include <map> @@ -140,6 +141,9 @@ namespace TrigConf { /** Name of connector from name of threshold or triggerline */ const std::string & connectorNameFromThreshold(const std::string & thresholdName) const; + /** the CTP configuration */ + const TrigConf::L1CTP & ctp() const { return m_ctp; } + /** print overview of L1 Menu */ void printMenu(bool full = false) const; @@ -171,6 +175,8 @@ namespace TrigConf { std::map<std::string, std::map<std::string, TrigConf::L1TopoAlgorithm*>> m_algorithmsByName{}; // map from category and algorithm name to algorithm std::map<std::string, std::map<std::string, TrigConf::L1TopoAlgorithm*>> m_algorithmsByOutput{}; // map from category and output name to algorithm + TrigConf::L1CTP m_ctp; + }; } diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h index 203fc5117367d20f1bed70ae54e5015018a8aee3..3c0541334cffdfd99a3bed60b84fb882101da659 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h @@ -18,7 +18,8 @@ namespace TrigConf { class L1ThrExtraInfo_EMTAULegacy; class L1ThrExtraInfo_JETLegacy; class L1ThrExtraInfo_XSLegacy; - class L1ThrExtraInfo_eEMTAU; + class L1ThrExtraInfo_eEM; + class L1ThrExtraInfo_eTAU; class L1ThrExtraInfo_jJ; class L1ThrExtraInfo_jTAU; class L1ThrExtraInfo_gXE; @@ -34,8 +35,8 @@ namespace TrigConf { const L1ThrExtraInfo_EMTAULegacy & TAU() const; const L1ThrExtraInfo_JETLegacy & JET() const; const L1ThrExtraInfo_XSLegacy & XS() const; - const L1ThrExtraInfo_eEMTAU & eEM() const; - const L1ThrExtraInfo_eEMTAU & eTAU() const; + const L1ThrExtraInfo_eEM & eEM() const; + const L1ThrExtraInfo_eTAU & eTAU() const; const L1ThrExtraInfo_jJ & jJ() const; const L1ThrExtraInfo_jTAU & jTAU() const; const L1ThrExtraInfo_gXE & gXE() const; @@ -80,8 +81,8 @@ namespace TrigConf { virtual ~L1ThrExtraInfo_JETLegacy() = default; virtual std::string className() const { return "L1ThrExtraInfo_JETLegacy"; } unsigned int jetScale() const { return 1000 / resolutionMeV(); } - float ptMinToTopoLargeWindow() const { return m_ptMinToTopoLargeWindowMeV / 1000.0f; } - float ptMinToTopoSmallWindow() const { return m_ptMinToTopoSmallWindowMeV / 1000.0f; } + double ptMinToTopoLargeWindow() const { return m_ptMinToTopoLargeWindowMeV / 1000.0; } + double ptMinToTopoSmallWindow() const { return m_ptMinToTopoSmallWindowMeV / 1000.0; } unsigned int ptMinToTopoLargeWindowMeV() const { return m_ptMinToTopoLargeWindowMeV; } unsigned int ptMinToTopoSmallWindowMeV() const { return m_ptMinToTopoSmallWindowMeV; } unsigned int ptMinToTopoLargeWindowCounts() const { return energyInCounts( m_ptMinToTopoLargeWindowMeV, resolutionMeV() ); } @@ -123,46 +124,95 @@ namespace TrigConf { /*********************************** * Extra info for new thresholds ***********************************/ - class L1ThrExtraInfo_eEMTAU final : public L1ThrExtraInfoBase { + class L1ThrExtraInfo_eEM final : public L1ThrExtraInfoBase { public: - L1ThrExtraInfo_eEMTAU(const std::string & thrTypeName, const ptree & data) : + class WorkingPoints_eEM { + public: + WorkingPoints_eEM() = default; + WorkingPoints_eEM( const boost::property_tree::ptree & ); + bool isDefined() const { return m_isDefined; } + int reta() const { return m_reta; } + int wstot() const { return m_wstot; } + int rhad() const { return m_rhad; } + int had() const { return m_rhad; } + unsigned int maxEt() const { return m_maxEt; } + double reta_d() const { return m_reta/100.; } + double wstot_d() const { return m_wstot/100.; } + double rhad_d() const { return m_rhad/100.; } + private: + bool m_isDefined { false }; + int m_reta { 0 }; + int m_wstot { 0 }; + int m_rhad { 0 }; + unsigned int m_maxEt { 0 }; + }; + L1ThrExtraInfo_eEM(const std::string & thrTypeName, const ptree & data) : L1ThrExtraInfoBase(thrTypeName, data) { load(); } - virtual ~L1ThrExtraInfo_eEMTAU() = default; - virtual std::string className() const { return "L1ThrExtraInfo_eEMTAU"; } + virtual ~L1ThrExtraInfo_eEM() = default; + virtual std::string className() const { return "L1ThrExtraInfo_eEM"; } float ptMinToTopo() const { return m_ptMinToTopoMeV/1000.0f; } unsigned int ptMinToTopoMeV() const { return m_ptMinToTopoMeV; } unsigned int ptMinToTopoCounts() const { return energyInCounts( m_ptMinToTopoMeV, resolutionMeV() ); } - const TrigConf::Isolation & isolation(TrigConf::Isolation::WP wp, int eta) const; - const ValueWithEtaDependence<TrigConf::Isolation> & isolation(TrigConf::Isolation::WP wp) const; + const WorkingPoints_eEM & isolation(TrigConf::Selection::WP wp, int eta) const { return m_isolation.at(wp).at(eta); } + const ValueWithEtaDependence<WorkingPoints_eEM> & isolation(TrigConf::Selection::WP wp) const { return m_isolation.at(wp); } private: /** Update the internal members */ void load(); /** eEM specific data */ unsigned int m_ptMinToTopoMeV{0}; - std::map<TrigConf::Isolation::WP, ValueWithEtaDependence<Isolation>> m_isolation{}; + std::map<TrigConf::Selection::WP, ValueWithEtaDependence<WorkingPoints_eEM>> m_isolation{}; }; + std::ostream & operator<<(std::ostream & os, const TrigConf::L1ThrExtraInfo_eEM::WorkingPoints_eEM & iso); + + class L1ThrExtraInfo_eTAU final : public L1ThrExtraInfoBase { + public: + class WorkingPoints_eTAU { + public: + WorkingPoints_eTAU( const boost::property_tree::ptree & ); + int isolation() const { return m_isolation; } + double isolation_d() const { return m_isolation/100.; } + unsigned int maxEt() const { return m_maxEt; } + private: + int m_isolation {0}; + unsigned int m_maxEt { 0 }; + }; + L1ThrExtraInfo_eTAU(const std::string & thrTypeName, const ptree & data) : + L1ThrExtraInfoBase(thrTypeName, data) { load(); } + virtual ~L1ThrExtraInfo_eTAU() = default; + virtual std::string className() const { return "L1ThrExtraInfo_eTAU"; } + float ptMinToTopo() const { return m_ptMinToTopoMeV/1000.0f; } + unsigned int ptMinToTopoMeV() const { return m_ptMinToTopoMeV; } + unsigned int ptMinToTopoCounts() const { return energyInCounts( m_ptMinToTopoMeV, resolutionMeV() ); } + const WorkingPoints_eTAU & isolation(TrigConf::Selection::WP wp, int eta) const { return m_isolation.at(wp).at(eta); } + const ValueWithEtaDependence<WorkingPoints_eTAU> & isolation(TrigConf::Selection::WP wp) const { return m_isolation.at(wp); } + private: + /** Update the internal members */ + void load(); + /** eEM specific data */ + unsigned int m_ptMinToTopoMeV{0}; + std::map<TrigConf::Selection::WP, ValueWithEtaDependence<WorkingPoints_eTAU>> m_isolation{}; + }; + class L1ThrExtraInfo_jJ final : public L1ThrExtraInfoBase { public: L1ThrExtraInfo_jJ(const std::string & thrTypeName, const ptree & data) : L1ThrExtraInfoBase(thrTypeName, data) { load(); } virtual ~L1ThrExtraInfo_jJ() = default; virtual std::string className() const { return "L1ThrExtraInfo_jJ"; } - float ptMinToTopoLarge(int eta = 0) const { return ptMinToTopoLargeMeV(eta) / 1000.0f; } - float ptMinToTopoSmall(int eta = 0) const { return ptMinToTopoSmallMeV(eta) / 1000.0f; } - unsigned int ptMinToTopoLargeMeV(int eta = 0) const { return m_ptMinToTopoLargeMeV.at(eta); } - unsigned int ptMinToTopoSmallMeV(int eta = 0) const { return m_ptMinToTopoSmallMeV.at(eta); } + double ptMinToTopoLarge(int eta = 0) const { return ptMinToTopoLargeMeV(eta) / 1000.0; } + double ptMinToTopoSmall(int eta = 0) const { return ptMinToTopoSmallMeV(eta) / 1000.0; } + unsigned int ptMinToTopoLargeMeV(int eta = 0) const { return m_ptMinToTopoMeV.at(eta).second; } + unsigned int ptMinToTopoSmallMeV(int eta = 0) const { return m_ptMinToTopoMeV.at(eta).first; } unsigned int ptMinToTopoLargeCounts(int eta = 0) const { return energyInCounts( ptMinToTopoLargeMeV(eta), resolutionMeV() ); } unsigned int ptMinToTopoSmallCounts(int eta = 0) const { return energyInCounts( ptMinToTopoSmallMeV(eta), resolutionMeV() ); } + const ValueWithEtaDependence<std::pair<unsigned int,unsigned int>> & ptMinToTopoMeV() const { return m_ptMinToTopoMeV; } private: /** Update the internal members */ void load(); /** jJ specific data */ - ValueWithEtaDependence<unsigned int> m_ptMinToTopoSmallMeV{"jJptMinTopoLarge"}; - ValueWithEtaDependence<unsigned int> m_ptMinToTopoLargeMeV{"jJptMinTopoSmall"}; - //std::map<std::pair<int,int>,unsigned int> m_ptMinToTopoSmallMeV{}; - //std::map<std::pair<int,int>,unsigned int> m_ptMinToTopoLargeMeV{}; + ValueWithEtaDependence<std::pair<unsigned int,unsigned int>> m_ptMinToTopoMeV{"jJptMinTopo"}; }; @@ -205,7 +255,7 @@ namespace TrigConf { std::vector<unsigned int> knownRpcPtValues() const; std::vector<unsigned int> knownTgcPtValues() const; std::vector<std::string> exclusionListNames() const; - const std::map<std::string, std::vector<unsigned int>> & exlusionList(const std::string & listName) const; + const std::map<std::string, std::vector<unsigned int>> & exclusionList(const std::string & listName) const; private: /** Update the internal members */ void load(); diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Threshold.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Threshold.h index 41418eeb3d15c5fc55f2a4cf83d58240619b3575..3058f9dac82f62b03fb30a4390baf407c37e6962 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Threshold.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Threshold.h @@ -16,8 +16,8 @@ namespace TrigConf { ************************************/ class L1Threshold_EM final : public L1Threshold_Calo { public: - L1Threshold_EM( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : - L1Threshold_Calo(name, type, m_extraInfo, data) { load(); } + L1Threshold_EM( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold_Calo(name, type, extraInfo, data) { load(); } virtual ~L1Threshold_EM() = default; // class name virtual std::string className() const override { return "L1Threshold_EM"; } @@ -36,8 +36,8 @@ namespace TrigConf { class L1Threshold_TAU final : public L1Threshold_Calo { public: - L1Threshold_TAU( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : - L1Threshold_Calo(name, type, m_extraInfo, data) { load(); } + L1Threshold_TAU( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold_Calo(name, type, extraInfo, data) { load(); } virtual ~L1Threshold_TAU() = default; virtual std::string className() const override { return "L1Threshold_TAU"; } // access functions @@ -54,54 +54,80 @@ namespace TrigConf { class L1Threshold_JET final : public L1Threshold_Calo { public: - L1Threshold_JET( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : - L1Threshold_Calo(name, type, m_extraInfo, data) {}; + L1Threshold_JET( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold_Calo(name, type, extraInfo, data) { load(); }; virtual ~L1Threshold_JET() = default; virtual std::string className() const override { return "L1Threshold_JET"; } + unsigned int window(int eta = 0) const; + protected: + virtual void update() override { + L1Threshold_Calo::update(); + load(); + } + private: + ValueWithEtaDependence<unsigned int> m_etaDepWindow{""}; ///< eta-dependent threshold value in MeV + void load(); }; class L1Threshold_XE final : public L1Threshold_Calo { public: - L1Threshold_XE( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : - L1Threshold_Calo(name, type, m_extraInfo, data) {}; + L1Threshold_XE( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold_Calo(name, type, extraInfo, data) {}; virtual ~L1Threshold_XE() = default; virtual std::string className() const override { return "L1Threshold_XE"; } }; class L1Threshold_XS final : public L1Threshold_Calo { public: - L1Threshold_XS( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : - L1Threshold_Calo(name, type, m_extraInfo, data) {}; + L1Threshold_XS( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold_Calo(name, type, extraInfo, data) {}; virtual ~L1Threshold_XS() = default; virtual std::string className() const override { return "L1Threshold_XS"; } }; class L1Threshold_TE final : public L1Threshold_Calo { public: - L1Threshold_TE( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : - L1Threshold_Calo(name, type, m_extraInfo, data) {}; + L1Threshold_TE( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold_Calo(name, type, extraInfo, data) {}; virtual ~L1Threshold_TE() = default; virtual std::string className() const override { return "L1Threshold_TE"; } }; /************************************ * - * NIM and internal thresholds + * ZB, NIM and internal thresholds * ************************************/ + class L1Threshold_ZB final : public L1Threshold { + public: + L1Threshold_ZB( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold(name, type, extraInfo, data) { load(); }; + virtual ~L1Threshold_ZB() = default; + virtual std::string className() const override { return "L1Threshold_ZB"; } + const std::string & seed() const { return m_seed; } + unsigned int seedBcdelay() const { return m_seedBcdelay; } + unsigned int seedMultiplicity() const { return m_seedMultiplicity; } + protected: + virtual void update() override { load(); } + private: + std::string m_seed{""}; + unsigned int m_seedBcdelay{0}; + unsigned int m_seedMultiplicity{1}; + void load(); + }; class L1Threshold_NIM final : public L1Threshold { public: - L1Threshold_NIM( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : - L1Threshold(name, type, m_extraInfo, data) {}; + L1Threshold_NIM( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold(name, type, extraInfo, data) {}; virtual ~L1Threshold_NIM() = default; virtual std::string className() const override { return "L1Threshold_NIM"; } }; class L1Threshold_internal final : public L1Threshold { public: - L1Threshold_internal( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : - L1Threshold(name, type, m_extraInfo, data) {}; + L1Threshold_internal( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold(name, type, extraInfo, data) {}; virtual ~L1Threshold_internal() = default; virtual std::string className() const override { return "L1Threshold_internal"; } }; @@ -113,14 +139,14 @@ namespace TrigConf { ************************************/ class L1Threshold_eEM final : public L1Threshold_Calo { public: - L1Threshold_eEM( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : - L1Threshold_Calo(name, type, m_extraInfo, data) { load(); } + L1Threshold_eEM( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold_Calo(name, type, extraInfo, data) { load(); } virtual ~L1Threshold_eEM() = default; virtual std::string className() const override { return "L1Threshold_eEM"; } // access functions - Isolation::WP reta() const { return m_reta; } - Isolation::WP rhad() const { return m_rhad; } - Isolation::WP wstot() const { return m_wstot; } + Selection::WP reta() const { return m_reta; } + Selection::WP rhad() const { return m_rhad; } + Selection::WP wstot() const { return m_wstot; } protected: virtual void update() override { L1Threshold_Calo::update(); @@ -129,15 +155,15 @@ namespace TrigConf { private: void load(); // the isolation requirement - Isolation::WP m_reta { Isolation::WP::NONE }; - Isolation::WP m_rhad { Isolation::WP::NONE }; - Isolation::WP m_wstot { Isolation::WP::NONE }; + Selection::WP m_reta { Selection::WP::NONE }; + Selection::WP m_rhad { Selection::WP::NONE }; + Selection::WP m_wstot { Selection::WP::NONE }; }; class L1Threshold_eTAU final : public L1Threshold_Calo { public: - L1Threshold_eTAU( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : - L1Threshold_Calo(name, type, m_extraInfo, data) { load(); } + L1Threshold_eTAU( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold_Calo(name, type, extraInfo, data) { load(); } virtual ~L1Threshold_eTAU() = default; virtual std::string className() const override { return "L1Threshold_eTAU"; } protected: @@ -149,9 +175,20 @@ namespace TrigConf { void load(); }; - - - + class L1Threshold_jJ final : public L1Threshold_Calo { + public: + L1Threshold_jJ( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold_Calo(name, type, extraInfo, data) { load(); } + virtual ~L1Threshold_jJ() = default; + virtual std::string className() const override { return "L1Threshold_jJ"; } + protected: + virtual void update() override { + L1Threshold_Calo::update(); + load(); + } + private: + void load(); + }; /************************************ @@ -161,8 +198,8 @@ namespace TrigConf { ************************************/ class L1Threshold_MU final : public L1Threshold { public: - L1Threshold_MU( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : - L1Threshold(name, type, m_extraInfo, data) { load(); } + L1Threshold_MU( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> extraInfo, const ptree & data) : + L1Threshold(name, type, extraInfo, data) { load(); } virtual ~L1Threshold_MU() = default; virtual std::string className() const override { return "L1Threshold_MU"; } @@ -175,8 +212,11 @@ namespace TrigConf { unsigned int idxEndcap() const { return m_idxEndcap; } unsigned int idxForward() const { return m_idxForward; } const std::string & region() const { return m_region; } - const std::string & tgcFlag() const { return m_tgcFlag; } + const std::string & tgcFlags() const { return m_tgcFlags; } const std::string & rpcExclROIList() const { return m_rpcExclROIList; } + std::optional<std::string> rpcExclROIList_optional() const { + return m_rpcExclROIList.empty() ? std::nullopt : std::optional<std::string>{m_rpcExclROIList}; + } protected: virtual void update() override { L1Threshold::update(); @@ -193,7 +233,7 @@ namespace TrigConf { unsigned int m_idxForward{0}; // the isolation requirement std::string m_region{""}; ///< comma-separated list of BA, EC, FW or the string ALL - std::string m_tgcFlag{""}; ///< a logical expression like 'F & C | F & H | C & H' + std::string m_tgcFlags{""}; ///< a logical expression like 'F & C | F & H | C & H' std::string m_rpcExclROIList{""}; ///< a string sepcifying the list of ROIs to be excluded (the lists are defined in the extraInfo_MU) }; diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.h index 0e9c5088b8099d82169236e02ea6207acc4a2577..02b993ee6fe8adde49c128216e45ab676802bf25 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.h @@ -9,6 +9,7 @@ #include <map> #include <vector> +#include <optional> namespace TrigConf { @@ -54,12 +55,15 @@ namespace TrigConf { bool empty() const; size_t size() const; const T & at(int eta) const; + std::optional<std::reference_wrapper<const T>> outsideRangeValue() const; const_iterator begin() const noexcept; const_iterator end() const noexcept; void addRangeValue(const T & value, int etaMin, int etaMax, unsigned int priority, bool symmetric = true); + void setOutsideRangeValue(const T & value); private: const std::string m_name {""}; std::vector<RangeValue> m_rangeValues{}; + std::optional<T> m_outsideRangeValue {std::nullopt}; }; @@ -91,6 +95,9 @@ namespace TrigConf { bool hasExtraInfo( const std::string & key = "") const; + std::optional<std::reference_wrapper<const TrigConf::DataStructure>> + getExtraInfo( const std::string & key) const; + unsigned int resolutionMeV() const { return m_resolutionMeV; } @@ -245,11 +252,6 @@ namespace TrigConf { void load(); }; - - - - - /****************************************** * Isolation for legacy L1Calo thresholds ******************************************/ @@ -281,25 +283,14 @@ namespace TrigConf { /************************************** - * Isolation for new L1Calo thresholds + * Selection points for L1Calo thresholds **************************************/ - class Isolation { + class Selection { public: enum class WP { NONE = 0, LOOSE = 1, MEDIUM = 2, TIGHT = 3 }; - Isolation() = default; - Isolation( const boost::property_tree::ptree & ); - bool isDefined() const { return m_isDefined; } - int reta() const { return m_reta; } - int wstot() const { return m_wstot; } - int had() const { return m_had; } - private: - bool m_isDefined { false }; - int m_reta { 0 }; - int m_wstot { 0 }; - int m_had { 0 }; + static std::string wpToString(WP); + static WP stringToWP(const std::string &); }; - std::ostream & operator<<(std::ostream & os, const TrigConf::Isolation & iso); - } #include "TrigConfData/L1ThresholdBase.icc" diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.icc b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.icc index b73913f9b29c8e77129690f31dd421e863765c28..3e19b1fc218c40c5ea1dfaa56d247522ca22fc00 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.icc +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.icc @@ -44,6 +44,19 @@ namespace TrigConf { m_rangeValues.emplace_back( std::move(rv) ); } + + template<class T> + void ValueWithEtaDependence<T>::setOutsideRangeValue(const T & value) { + m_outsideRangeValue = value; + } + + template<class T> + std::optional<std::reference_wrapper<const T>> + ValueWithEtaDependence<T>::outsideRangeValue() const { + return m_outsideRangeValue; + } + + template<class T> const T & ValueWithEtaDependence<T>::at(int eta) const { // the ranges are by definition such that the lower boundary is inclusive, while the upper boundary is exclusive @@ -65,8 +78,10 @@ namespace TrigConf { } if( retVal ) { return * retVal; + } else if(m_outsideRangeValue) { + return *m_outsideRangeValue; } else { - throw std::runtime_error(name() + ": no value found with eta = " + std::to_string(eta)); + throw std::out_of_range(name() + ": no value found with eta = " + std::to_string(eta)); } } diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h index bc172ebd8f9653722d73807a4aca23f961eb24ad..0f4f761634e3e5cde1dcc95a1f3257de9d500d45 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h @@ -7,6 +7,7 @@ #include "TrigConfData/DataStructure.h" #include <vector> +#include <optional> namespace TrigConf { @@ -22,11 +23,17 @@ namespace TrigConf { enum class AlgorithmType { SORTING, DECISION, MULTIPLICITY, UNKNOWN }; struct VariableParameter { - VariableParameter(const std::string & _name, int _value, unsigned int _selection) - : name(_name), value(_value), selection(_selection) {} - std::string name{""}; - int value{0}; - unsigned int selection{0}; + public: + VariableParameter(const std::string & name, int value, std::optional<unsigned int> selection = std::nullopt) + : m_name(name), m_value(value), m_selection(selection) {} + const std::string & name() const { return m_name; } + int value() const { return m_value; } + unsigned int selection() const { return m_selection.value_or(0); } + std::optional<unsigned int> selection_optional() const { return m_selection; } + private: + std::string m_name{""}; + int m_value{0}; + std::optional<unsigned int> m_selection{}; }; /** Constructor */ @@ -83,10 +90,14 @@ namespace TrigConf { /** print main info */ void print(std::ostream & os = std::cout) const override; + protected: + + virtual void update() override { load(); } + private: /** Update the internal data after modification of the data object */ - virtual void update() override; + void load(); AlgorithmType m_type{ AlgorithmType::UNKNOWN }; diff --git a/Trigger/TrigConfiguration/TrigConfData/src/DataStructure.cxx b/Trigger/TrigConfiguration/TrigConfData/src/DataStructure.cxx index bdfbbd44fee04617743dff5b389c58574a7651ed..2ce2ff8533bad99427c9c94f5c90e596580e3757 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/DataStructure.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/DataStructure.cxx @@ -178,6 +178,16 @@ TrigConf::DataStructure::getList(const std::string & pathToChild, bool ignoreIfM } +std::optional<std::vector<TrigConf::DataStructure> > +TrigConf::DataStructure::getList_optional(const std::string & pathToChild) const +{ + if(data().find(pathToChild) == data().not_found()) { + return std::nullopt; + } + return std::optional<std::vector<TrigConf::DataStructure> >(getList(pathToChild)); +} + + TrigConf::DataStructure TrigConf::DataStructure::getObject(const std::string & pathToChild, bool ignoreIfMissing) const { @@ -199,6 +209,17 @@ TrigConf::DataStructure::getObject(const std::string & pathToChild, bool ignoreI } +std::optional<TrigConf::DataStructure> +TrigConf::DataStructure::getObject_optional(const std::string & pathToChild) const +{ + if(data().find(pathToChild) == data().not_found()) { + return std::nullopt; + } + return std::optional<TrigConf::DataStructure>(getObject(pathToChild)); +} + + + std::vector<std::string> TrigConf::DataStructure::getKeys() const { diff --git a/Trigger/TrigConfiguration/TrigConfData/src/HLTChain.cxx b/Trigger/TrigConfiguration/TrigConfData/src/HLTChain.cxx index d85d27eb34da9b7924f2f6f2e467f0a8a80e985e..35bf9e37c25d0741b9c88c91bec78458edd1020c 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/HLTChain.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/HLTChain.cxx @@ -61,6 +61,17 @@ TrigConf::Chain::l1item() const return getAttribute("l1item"); } +std::vector<size_t> TrigConf::Chain::legMultiplicities() const { + std::vector<size_t> returnMultiplicities; + const auto& theMultiplicities = getList("legMultiplicities"); + if( !theMultiplicities.empty() ) { + returnMultiplicities.reserve(theMultiplicities.size()); + for( auto& m : theMultiplicities ) { + returnMultiplicities.push_back( m.getValue<size_t>() ); + } + } + return returnMultiplicities; +} std::vector<std::string> TrigConf::Chain::l1thresholds() const diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1CTP.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1CTP.cxx new file mode 100644 index 0000000000000000000000000000000000000000..4a6b69032195aa403e0a4992dc3b1465b5762729 --- /dev/null +++ b/Trigger/TrigConfiguration/TrigConfData/src/L1CTP.cxx @@ -0,0 +1,73 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#include "TrigConfData/L1CTP.h" + +TrigConf::L1CTP::L1CTP(const std::string & name, const boost::property_tree::ptree & data) + : DataStructure(name,data) +{ + load(); +} + +void +TrigConf::L1CTP::load() +{ + if(! isInitialized() || empty() ) { + return; + } + auto inputs = data().get_child("inputs"); + for(size_t slot = 7; slot<=9; ++slot) { + for(size_t conn=0; conn<4; ++conn) { + m_ctpin[slot-7][conn] = inputs.get_optional<std::string>("ctpin.slot" + std::to_string(slot) + ".connector" + std::to_string(conn)).get_value_or(""); + } + } + auto electrical = inputs.get_child("electrical"); + for(size_t i=0; i<3; ++i) { + m_electrical[i] = electrical.get_optional<std::string>("connector" + std::to_string(i)).get_value_or(""); + } + auto optical = inputs.get_child("optical"); + for(size_t i=0; i<12; ++i) { + m_optical[i] = optical.get_optional<std::string>("connector" + std::to_string(i)).get_value_or(""); + } + for( auto & mon : data().get_child("monitoring.ctpmon") ) { + std::string monName = mon.first; + size_t multiplicity = mon.second.get_child("multiplicity").get_value<size_t>(); + std::string thr = mon.second.get_child("thr").get_value<std::string>(); + m_ctpmon.emplace( std::piecewise_construct, + std::forward_as_tuple(monName), + std::forward_as_tuple(multiplicity, thr) + ); + } + + +} + +const std::string & +TrigConf::L1CTP::ctpin(size_t slot, size_t conn) const +{ + if(slot<7 or slot>9) { + throw std::runtime_error("CTPIN slot must be between 7 and 9, but " + std::to_string(slot) + "was specified"); + } + if(conn>3) { + throw std::runtime_error("CTPIN connector must be between 0 and 3, but " + std::to_string(conn) + "was specified"); + } + return m_ctpin[slot-7][conn]; +} + + +const std::string & +TrigConf::L1CTP::electrical(size_t conn) const { + if(conn>2) { + throw std::runtime_error("Electrical connector must be between 0 and 2, but " + std::to_string(conn) + "was specified"); + } + return m_electrical[conn]; +} + +const std::string & +TrigConf::L1CTP::optical(size_t conn) const { + if(conn>11) { + throw std::runtime_error("Optical connector must be between 0 and 11, but " + std::to_string(conn) + "was specified"); + } + return m_optical[conn]; +} diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1Connector.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1Connector.cxx index 3b206408e3d7953a6f366b24ab350321424b8d3e..3d7de39fe718199f18ac10d63949e17473a802ee 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/L1Connector.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/L1Connector.cxx @@ -57,7 +57,7 @@ TrigConf::L1Connector::update() path += std::to_string(fpga); } path += ".clock"; - path += std::to_string(clock); + path += std::to_string(clock); } const auto & triggerlines = data().get_child(path); m_triggerLines[fpga][clock].reserve(triggerlines.size()); @@ -75,8 +75,22 @@ TrigConf::L1Connector::update() } -TrigConf::L1Connector::ConnectorType +std::string TrigConf::L1Connector::type() const +{ + switch( m_type ) { + case ConnectorType::ELECTRICAL: + return "electrical"; + case ConnectorType::OPTICAL: + return "optical"; + case ConnectorType::CTPIN: + return "ctpin"; + } + return ""; +} + +TrigConf::L1Connector::ConnectorType +TrigConf::L1Connector::connectorType() const { return m_type; } diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1Item.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1Item.cxx index e9288a4022bf7f6302b6e168598e59a8c40df05d..a4a6587d8f384dd37b7c7065bf429ede4276a967 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/L1Item.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/L1Item.cxx @@ -10,7 +10,7 @@ TrigConf::L1Item::L1Item() TrigConf::L1Item::L1Item(const boost::property_tree::ptree & data) : DataStructure(data) { - update(); + load(); } TrigConf::L1Item::~L1Item() @@ -22,7 +22,7 @@ TrigConf::L1Item::className() const { } void -TrigConf::L1Item::update() +TrigConf::L1Item::load() { if(! isInitialized() || empty() ) { return; @@ -74,6 +74,12 @@ TrigConf::L1Item::triggerType() const return getAttribute("triggerType"); } +std::optional<bool> +TrigConf::L1Item::legacy() const +{ + return hasAttribute("legacy") ? std::optional<bool>{getAttribute<bool>("legacy")} : std::nullopt; +} + unsigned char TrigConf::L1Item::triggerTypeAsUChar() const { diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1Menu.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1Menu.cxx index 27660fb9a7e0694fdb6f3367148b655a9a3e7ea8..3becff35226048a63f09857195565f11dcb2c7b7 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/L1Menu.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/L1Menu.cxx @@ -25,7 +25,6 @@ TrigConf::L1Menu::update() if(! isInitialized() || empty() ) { return; } - try { m_name = getAttribute("name"); // thresholds @@ -128,6 +127,15 @@ TrigConf::L1Menu::update() std::cerr << "ERROR: problem when building L1 menu structure (algorithms). " << ex.what() << std::endl; throw; } + + try { + // CTP + m_ctp.setData(data().get_child("ctp")); + } + catch(std::exception & ex) { + std::cerr << "ERROR: problem when building L1 menu structure (CTP). " << ex.what() << std::endl; + throw; + } } unsigned int diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx index 03e03f08807aedb6837b2e0c6946cb8d5b530ff8..8cc9ce6cfbffd6495b3199c6453646f9d0e7ca4a 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx @@ -28,8 +28,11 @@ TrigConf::L1ThrExtraInfo::createExtraInfo(const std::string & thrTypeName, const if( thrTypeName == "MU" ) return std::make_unique<L1ThrExtraInfo_MU>(thrTypeName, data); - if( thrTypeName == "eEM" or thrTypeName == "eTAU" ) - return std::make_unique<L1ThrExtraInfo_eEMTAU>(thrTypeName, data); + if( thrTypeName == "eEM" ) + return std::make_unique<L1ThrExtraInfo_eEM>(thrTypeName, data); + + if( thrTypeName == "eTAU" ) + return std::make_unique<L1ThrExtraInfo_eTAU>(thrTypeName, data); if( thrTypeName == "jJ" ) return std::make_unique<L1ThrExtraInfo_jJ>(thrTypeName, data); @@ -79,14 +82,14 @@ TrigConf::L1ThrExtraInfo::JET() const { return dynamic_cast<const TrigConf::L1ThrExtraInfo_JETLegacy&>( * m_thrExtraInfo.at("JET") ); } -const TrigConf::L1ThrExtraInfo_eEMTAU & +const TrigConf::L1ThrExtraInfo_eEM & TrigConf::L1ThrExtraInfo::eEM() const { - return dynamic_cast<const TrigConf::L1ThrExtraInfo_eEMTAU&>( * m_thrExtraInfo.at("eEM") ); + return dynamic_cast<const TrigConf::L1ThrExtraInfo_eEM&>( * m_thrExtraInfo.at("eEM") ); } -const TrigConf::L1ThrExtraInfo_eEMTAU & +const TrigConf::L1ThrExtraInfo_eTAU & TrigConf::L1ThrExtraInfo::eTAU() const { - return dynamic_cast<const TrigConf::L1ThrExtraInfo_eEMTAU&>( * m_thrExtraInfo.at("eTAU") ); + return dynamic_cast<const TrigConf::L1ThrExtraInfo_eTAU&>( * m_thrExtraInfo.at("eTAU") ); } const TrigConf::L1ThrExtraInfo_jJ & @@ -127,6 +130,10 @@ TrigConf::L1ThrExtraInfo::thrExtraInfo(const std::string & thrTypeName) const const TrigConf::IsolationLegacy & TrigConf::L1ThrExtraInfo_EMTAULegacy::isolation(const std::string & thrType, size_t bit) const { + if(bit<1 or bit>5) { + throw std::out_of_range("When accessing the legacy L1Calo EM or TAU isolation bit must be between 1 and 5, but bit=" + + std::to_string(bit) + " was requested"); + } try { return m_isolation.at(thrType)[bit-1]; } @@ -197,34 +204,65 @@ TrigConf::L1ThrExtraInfo_JETLegacy::load() /******* * eEM *******/ -const TrigConf::Isolation & -TrigConf::L1ThrExtraInfo_eEMTAU::isolation(TrigConf::Isolation::WP wp, int eta) const -{ - return m_isolation.at(wp).at(eta); +TrigConf::L1ThrExtraInfo_eEM::WorkingPoints_eEM::WorkingPoints_eEM( const boost::property_tree::ptree & pt ) { + m_isDefined = true; + m_reta = lround(100 * pt.get_optional<float>("reta").get_value_or(0)); + m_wstot = lround(100 * pt.get_optional<float>("wstot").get_value_or(0)); + m_rhad = lround(100 * pt.get_optional<float>("rhad").get_value_or(0)); + m_maxEt = pt.get_optional<unsigned int>("maxEt").get_value_or(0); } -const TrigConf::ValueWithEtaDependence<TrigConf::Isolation> & -TrigConf::L1ThrExtraInfo_eEMTAU::isolation(TrigConf::Isolation::WP wp) const +std::ostream & +TrigConf::operator<<(std::ostream & os, const TrigConf::L1ThrExtraInfo_eEM::WorkingPoints_eEM & iso) { + os << "reta=" << iso.reta() << ", wstot=" << iso.wstot() << ", rhad=" << iso.rhad(); + return os; +} + +void +TrigConf::L1ThrExtraInfo_eEM::load() { - return m_isolation.at(wp); + for( auto & x : m_extraInfo ) { + if( x.first == "ptMinToTopo" ) { + m_ptMinToTopoMeV = lround(1000 * x.second.getValue<float>()); + } else if( x.first == "workingPoints" ) { + for( auto & y : x.second.data() ) { + auto wp = Selection::stringToWP(y.first); + auto & iso = m_isolation.emplace(wp, string("eEM_WP_" + y.first)).first->second; + for(auto & c : y.second ) { + int etamin = c.second.get_optional<int>("etamin").get_value_or(-49); + int etamax = c.second.get_optional<int>("etamax").get_value_or(49); + unsigned int priority = c.second.get_optional<unsigned int>("priority").get_value_or(0); + iso.addRangeValue(WorkingPoints_eEM(c.second), etamin, etamax, priority, /*symmetric=*/ false); + } + } + } + } } +/******* + * eTAU + *******/ +TrigConf::L1ThrExtraInfo_eTAU::WorkingPoints_eTAU::WorkingPoints_eTAU( const boost::property_tree::ptree & pt ) { + m_isolation = lround(100 * pt.get_optional<float>("isolation").get_value_or(0)); + m_maxEt = pt.get_optional<unsigned int>("maxEt").get_value_or(0); +} + void -TrigConf::L1ThrExtraInfo_eEMTAU::load() +TrigConf::L1ThrExtraInfo_eTAU::load() { for( auto & x : m_extraInfo ) { if( x.first == "ptMinToTopo" ) { m_ptMinToTopoMeV = lround(1000 * x.second.getValue<float>()); } else if( x.first == "workingPoints" ) { for( auto & y : x.second.data() ) { - auto wp = (y.first == "Loose") ? Isolation::WP::LOOSE : ( (y.first == "Medium") ? Isolation::WP::MEDIUM : Isolation::WP::TIGHT ); + auto wp = TrigConf::Selection::stringToWP(y.first); auto & iso = m_isolation.emplace(wp, string("eEM_WP_" + y.first)).first->second; for(auto & c : y.second ) { int etamin = c.second.get_optional<int>("etamin").get_value_or(-49); int etamax = c.second.get_optional<int>("etamax").get_value_or(49); unsigned int priority = c.second.get_optional<unsigned int>("priority").get_value_or(0); - iso.addRangeValue(Isolation(c.second), etamin, etamax, priority, /*symmetric=*/ false); + iso.addRangeValue(WorkingPoints_eTAU(c.second), etamin, etamax, priority, /*symmetric=*/ false); } } } @@ -232,6 +270,9 @@ TrigConf::L1ThrExtraInfo_eEMTAU::load() } + + + /******* * jJ *******/ @@ -246,8 +287,8 @@ TrigConf::L1ThrExtraInfo_jJ::load() auto small = k.second.get_child("small").get_value<float>(); auto large = k.second.get_child("large").get_value<float>(); auto priority = k.second.get_optional<unsigned int>("priority").get_value_or(0); - m_ptMinToTopoSmallMeV.addRangeValue( lround(1000*small), etamin, etamax, priority, /*symmetric=*/ false); - m_ptMinToTopoLargeMeV.addRangeValue( lround(1000*large), etamin, etamax, priority, /*symmetric=*/ false); + m_ptMinToTopoMeV.addRangeValue( std::make_pair<unsigned int, unsigned int>(lround(1000*small),lround(1000*large)), + etamin, etamax, priority, /*symmetric=*/ false); } } } @@ -336,7 +377,7 @@ TrigConf::L1ThrExtraInfo_MU::exclusionListNames() const const std::map<std::string, std::vector<unsigned int> > & -TrigConf::L1ThrExtraInfo_MU::exlusionList(const std::string & listName) const +TrigConf::L1ThrExtraInfo_MU::exclusionList(const std::string & listName) const { try { return m_roiExclusionLists.at(listName); diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1Threshold.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1Threshold.cxx index 070e107bae45056866553c2edb5e34d8182269d0..f2846b3496a170f6b51eb7f7da73a778c66842b0 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/L1Threshold.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/L1Threshold.cxx @@ -62,6 +62,47 @@ TrigConf::L1Threshold_TAU::load() } } +/** + * JET + */ +void +TrigConf::L1Threshold_JET::load() +{ + // allowed values for eta-range boundaries are 0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.9, 2.1, 2.3, 2.5, 2.8, 3.1, 4.9 and their negatives + + static const std::vector<int> allowedBoundaries{0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 28, 31, 49}; + if( const auto & thrVs = data().get_child_optional("thrValues") ) { + for( auto & x : thrVs.get() ) { + auto etamin = x.second.get_child("etamin").get_value<int>(); + if(std::find(begin(allowedBoundaries), end(allowedBoundaries), abs(etamin)) == allowedBoundaries.end()) { + throw std::runtime_error(name() + ": etamin value " + std::to_string(etamin) + " not an allowed value for legacy JETs"); + } + auto etamax = x.second.get_child("etamax").get_value<int>(); + if(std::find(begin(allowedBoundaries), end(allowedBoundaries), abs(etamax)) == allowedBoundaries.end()) { + throw std::runtime_error(name() + ": etamax value " + std::to_string(etamax) + " not an allowed value for legacy JETs"); + } + auto priority = x.second.get_child("priority").get_value<unsigned int>(); + auto window = x.second.get_child("window").get_value<unsigned int>(); + m_etaDepWindow.addRangeValue(window, etamin, etamax, priority, /*symmetric=*/ false); + } + } +} +unsigned int +TrigConf::L1Threshold_JET::window(int eta) const { + return m_etaDepWindow.at(eta); +} + +/** + * ZB + */ +void +TrigConf::L1Threshold_ZB::load() +{ + m_seed = getAttribute("seed"); + m_seedBcdelay = getAttribute<unsigned int>("seedBcdelay"); + m_seedMultiplicity = getAttribute<unsigned int>("seedMultiplicity"); +} + /****************************************** * * New L1Calo thresholds @@ -74,19 +115,19 @@ TrigConf::L1Threshold_TAU::load() void TrigConf::L1Threshold_eEM::load() { - auto translate = [](const std::string &wp) { return wp=="Loose" ? Isolation::WP::LOOSE : - ( wp=="Medium" ? Isolation::WP::MEDIUM : - ( wp=="Tight" ? Isolation::WP::TIGHT : Isolation::WP::NONE ) ); }; // read the isolation requirements - m_reta = translate(getAttribute("reta")); - m_rhad = translate(getAttribute("rhad")); - m_wstot = translate(getAttribute("wstot")); + m_reta = Selection::stringToWP(getAttribute("reta")); + m_rhad = Selection::stringToWP(getAttribute("rhad")); + m_wstot = Selection::stringToWP(getAttribute("wstot")); } void TrigConf::L1Threshold_eTAU::load() {} +void +TrigConf::L1Threshold_jJ::load() +{} /****************************************** * @@ -116,7 +157,7 @@ TrigConf::L1Threshold_MU::load() m_idxForward = muInfo->tgcIdxForPt(m_ptForward); m_rpcExclROIList = getAttribute("rpcExclROIList", true, ""); - m_tgcFlag = getAttribute("tgcFlags"); + m_tgcFlags = getAttribute("tgcFlags"); m_region = getAttribute("region"); } diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1ThresholdBase.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1ThresholdBase.cxx index d279f1c7d894aac9d5a7167dab72036657770bff..d88335f97986db6f0d46c8a78eee2ddf79b375c2 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/L1ThresholdBase.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/L1ThresholdBase.cxx @@ -2,6 +2,7 @@ #include <algorithm> #include <cmath> +#include <limits> #include "TrigConfData/L1ThresholdBase.h" @@ -51,9 +52,15 @@ TrigConf::L1Threshold::createThreshold( const std::string & name, const std::str if( type == "eTAU" ) return std::make_shared<L1Threshold_eTAU>( name, type, extraInfo, data ); + if( type == "jJ" ) + return std::make_shared<L1Threshold_jJ>( name, type, extraInfo, data ); + if( type == "MU" ) return std::make_shared<L1Threshold_MU>( name, type, extraInfo, data ); + if( type == "ZB" ) + return std::make_shared<L1Threshold_ZB>( name, type, extraInfo, data ); + static const std::string NIMtypes[] = { "BCM", "BCMCMB", "LUCID", "ZDC", "BPTX", "CALREQ", "MBTS", "MBTSSI", "NIM" }; bool isNIMtype = std::find(std::begin(NIMtypes), std::end(NIMtypes), type) != std::end(NIMtypes); @@ -64,7 +71,14 @@ TrigConf::L1Threshold::createThreshold( const std::string & name, const std::str if( type == "internal" ) return std::make_shared<L1Threshold_internal>( name, type, extraInfo, data ); - static const std::string noSpecialImp[] = { "JET", "XS", "jJ", "gXE", "jXE", "TOPO", "MULTTOPO", "MUTOPO", "R2TOPO", "ZB", "ALFA" }; + static const std::string caloBaseImp[] = { "gXE", "jXE" }; + bool useCaloBaseClass = std::find(std::begin(caloBaseImp), std::end(caloBaseImp),type) != + std::end(caloBaseImp); + + if( useCaloBaseClass ) + return std::make_shared<L1Threshold_Calo>( name, type, extraInfo, data ); + + static const std::string noSpecialImp[] = { "JET", "XS", "TOPO", "MULTTOPO", "MUTOPO", "R2TOPO", "ALFA" }; bool useBaseClass = std::find(std::begin(noSpecialImp), std::end(noSpecialImp),type) != std::end(noSpecialImp); @@ -121,9 +135,9 @@ TrigConf::L1ThrExtraInfoBase::load() if(! isInitialized() || empty() ) return; - if( m_name == "internal" ) { // internal trigger have no extra info - return; - } + // if( m_name == "internal" ) { // internal trigger have no extra info + // return; + // } for( auto & content : data() ) { if( content.first == "type" || content.first == "thresholds" ) { @@ -157,6 +171,12 @@ TrigConf::L1ThrExtraInfoBase::hasExtraInfo(const std::string & key) const return m_extraInfo.count(key)>0; } +std::optional<std::reference_wrapper<const TrigConf::DataStructure>> +TrigConf::L1ThrExtraInfoBase::getExtraInfo( const std::string & key) const +{ + bool hasKey = m_extraInfo.count(key)>0; + return hasKey ? std::optional<std::reference_wrapper<const TrigConf::DataStructure>>{m_extraInfo.at(key)} : std::nullopt; +} @@ -210,6 +230,14 @@ TrigConf::L1Threshold_Calo::load() m_etaDepThrValue.addRangeValue(value, etamin, etamax, priority, /*symmetric=*/ false); } } + if( const auto & ranges = data().get_child_optional("ranges") ) { + m_etaDepThrValue.setOutsideRangeValue(getAttribute("maxValue", true, std::numeric_limits<unsigned int>::max())); + for( auto & x : ranges.get() ) { + auto etamin = x.second.get_child("etamin").get_value<unsigned int>(); + auto etamax = x.second.get_child("etamax").get_value<unsigned int>(); + m_etaDepThrValue.addRangeValue(m_thrValue, etamin, etamax, /*priority=*/ 1, /*symmetric=*/ false); + } + } } /* @@ -257,9 +285,6 @@ TrigConf::L1Threshold_Calo::thrValuesCounts() const { return thrValuesCounts; } - - - TrigConf::IsolationLegacy::IsolationLegacy( const boost::property_tree::ptree & pt ) { m_isDefined = true; m_isobit = pt.get_child("isobit").get_value<int>(); @@ -280,16 +305,30 @@ TrigConf::operator<<(std::ostream & os, const TrigConf::IsolationLegacy & iso) { return os; } -TrigConf::Isolation::Isolation( const boost::property_tree::ptree & pt ) { - m_isDefined = true; - m_reta = pt.get_child("reta").get_value<int>(); - m_wstot = pt.get_child("wstot").get_value<int>(); - m_had = pt.get_child("had").get_value<int>(); +std::string +TrigConf::Selection::wpToString(TrigConf::Selection::WP wp) +{ + if (wp == Selection::WP::NONE) + return "None"; + if (wp == Selection::WP::LOOSE) + return "Loose"; + if (wp == Selection::WP::MEDIUM) + return "Medium"; + if (wp == Selection::WP::TIGHT) + return "Tight"; + throw std::runtime_error("Unknown working point " + std::to_string(int(wp))); } -std::ostream & -TrigConf::operator<<(std::ostream & os, const TrigConf::Isolation & iso) { - os << "reta=" << iso.reta() << ", wstot=" << iso.wstot() << ", had=" << iso.had(); - return os; +TrigConf::Selection::WP +TrigConf::Selection::stringToWP(const std::string & wpStr) +{ + if (wpStr == "None") + return Selection::WP::NONE; + if (wpStr == "Loose") + return Selection::WP::LOOSE; + if (wpStr == "Medium") + return Selection::WP::MEDIUM; + if (wpStr == "Tight") + return Selection::WP::TIGHT; + throw std::runtime_error("Unknown working point name " + wpStr); } - diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1TopoAlgorithm.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1TopoAlgorithm.cxx index 08ad0c1fed737772e9d85531061b48c62dbaf502..ed6842cb36520008bcb2c9e2824301890a4b1e88 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/L1TopoAlgorithm.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/L1TopoAlgorithm.cxx @@ -14,7 +14,7 @@ TrigConf::L1TopoAlgorithm::L1TopoAlgorithm(const std::string & algoName, Algorit throw std::runtime_error("Algorithm category must be TOPO, R2TOPO, MUTOPO or MULTTOPO, but is '" + algoCategory + "'"); } m_name = algoName; - update(); + load(); } TrigConf::L1TopoAlgorithm::~L1TopoAlgorithm() @@ -26,7 +26,7 @@ TrigConf::L1TopoAlgorithm::className() const { } void -TrigConf::L1TopoAlgorithm::update() +TrigConf::L1TopoAlgorithm::load() { if(! isInitialized() || empty() ) { return; @@ -45,7 +45,9 @@ TrigConf::L1TopoAlgorithm::update() m_outputs.push_back(o.getValue()); } } else if( m_type == AlgorithmType::MULTIPLICITY ) { // MULTIPLICITY algo - m_inputs.push_back(getAttribute("input")); + if(auto & input = getAttribute("input"); input!="null") { + m_inputs.push_back(input); + } m_outputs.push_back(getAttribute("output")); } else { // SORTING algo if( hasAttribute("input") ) { @@ -62,7 +64,7 @@ TrigConf::L1TopoAlgorithm::update() if( m_type == AlgorithmType::DECISION || m_type == AlgorithmType::SORTING ) { for( auto & p : getList("variableParameters") ) { - m_parameters.emplace_back(p["name"], p.getAttribute<int>("value"), p.getAttribute<unsigned int>("selection", /*ignore-if-missing*/true, 0)); + m_parameters.emplace_back(p["name"], p.getAttribute<int>("value"), p.getAttribute_optional<unsigned int>("selection")); } } @@ -166,7 +168,7 @@ TrigConf::L1TopoAlgorithm::print(std::ostream & os) const auto pars = parameters(); unsigned int idx{0}; for( auto & p : pars ) { - os << " " << idx++ << " " << p.name << "[" << p.selection << "] ==> " << p.value << std::endl; + os << " " << idx++ << " " << p.name() << "[" << p.selection() << "] ==> " << p.value() << std::endl; } } os << std::endl; diff --git a/Trigger/TrigConfiguration/TrigConfHLTData/TrigConfHLTData/HLTChain.h b/Trigger/TrigConfiguration/TrigConfHLTData/TrigConfHLTData/HLTChain.h index 336a5a6b41ca5aa1ad6c0461de1ef765a067c849..cdb9c66b576c7cea590e6ef78f8b9c92e7ca79db 100644 --- a/Trigger/TrigConfiguration/TrigConfHLTData/TrigConfHLTData/HLTChain.h +++ b/Trigger/TrigConfiguration/TrigConfHLTData/TrigConfHLTData/HLTChain.h @@ -80,6 +80,7 @@ namespace TrigConf { unsigned int chain_hash_id () const { return m_chain_hash_id; } unsigned int lower_chain_hash_id () const { return m_lower_chain_hash_id; } int EB_after_step () const { return m_EB_after_step; } + const std::vector<size_t> leg_multiplicities () const { return m_leg_multiplicities; } bool hasMultipleLowerChains() const; const std::vector<int>& lower_chain_counters () const; std::vector<unsigned int> lower_chain_hash_ids () const; @@ -100,6 +101,7 @@ namespace TrigConf { HLTChain& set_triggerTypeList ( const std::vector<HLTTriggerType*>& trigList) { m_HLTTriggerTypeList = trigList; return *this; } HLTChain& set_groupList ( const std::set<std::string>& groups) { m_groups = groups; return *this; } HLTChain& set_EB_after_step ( int EB_after_step ) { m_EB_after_step = EB_after_step; return *this; } + HLTChain& set_leg_multiplicities ( const std::vector<size_t>& mult ) { m_leg_multiplicities = mult; return *this; } // signatures @@ -175,6 +177,7 @@ namespace TrigConf { std::vector<int> m_lower_chain_counters;//!< counters of the lower trigger items if more than 1 unsigned int m_lower_chain_hash_id; //!< hash value from m_lower_chain_name, this is used to match to a chain from the previous trigger level int m_EB_after_step; //!< EB_after_step flag + std::vector<size_t> m_leg_multiplicities;//!< Number of objects required per leg. NOTE: Run3 only quantity HLTPrescale m_prescales; std::vector<HLTSignature*> m_HLTSignatureList; diff --git a/Trigger/TrigConfiguration/TrigConfIO/CMakeLists.txt b/Trigger/TrigConfiguration/TrigConfIO/CMakeLists.txt index f384ed7f3dadfc79ed974139a3c7100191ac7aaa..e8bf3c027ef8c03bd1b93f280b49decac76e53c6 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/CMakeLists.txt +++ b/Trigger/TrigConfiguration/TrigConfIO/CMakeLists.txt @@ -5,6 +5,7 @@ atlas_subdir( TrigConfIO ) # External dependencies: find_package( Boost ) +find_package( nlohmann_json ) find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess ) # Component(s) in the package: @@ -14,7 +15,7 @@ atlas_add_library( TrigConfIO INCLUDE_DIRS ${Boost_INCLUDE_DIRS} PRIVATE_INCLUDE_DIRS ${CORAL_INCLUDE_DIRS} LINK_LIBRARIES TrigConfData TrigConfBase - PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} -lstdc++fs + PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} nlohmann_json::nlohmann_json -lstdc++fs ) atlas_add_library( TrigConfIOSA @@ -24,7 +25,7 @@ atlas_add_library( TrigConfIOSA PRIVATE_INCLUDE_DIRS ${CORAL_INCLUDE_DIRS} LINK_LIBRARIES TrigConfDataSA TrigConfBase DEFINITIONS -DTRIGCONF_STANDALONE - PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} -lstdc++fs + PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} nlohmann_json::nlohmann_json -lstdc++fs ) atlas_add_executable( TestTriggerMenuAccess utils/TestTriggerMenuAccess.cxx diff --git a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/JsonFileWriter.h b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/JsonFileWriter.h new file mode 100644 index 0000000000000000000000000000000000000000..c62892c45e5af9f8b8f19601ab8a1376d51fc61e --- /dev/null +++ b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/JsonFileWriter.h @@ -0,0 +1,31 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +/** + * @brief Write Json file from L1Menu object + * To validate correct loading of the L1 menu + */ + +#ifndef TRIGCONFSTORAGE_JSONFILEWRITER_H +#define TRIGCONFSTORAGE_JSONFILEWRITER_H + +#include "TrigConfBase/TrigConfMessaging.h" +#include "TrigConfData/L1Menu.h" + +namespace TrigConf { + + /** + * @brief Loader of trigger configurations from Json files + */ + class JsonFileWriter : public TrigConfMessaging { + public: + + /** Constructor */ + JsonFileWriter(); + + bool writeJsonFile(const std::string & filename, const L1Menu & l1menu) const; + }; + +} +#endif diff --git a/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileWriter.cxx b/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileWriter.cxx new file mode 100644 index 0000000000000000000000000000000000000000..870de3386f59f50ae9029251a92ddc8ff0abe2d2 --- /dev/null +++ b/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileWriter.cxx @@ -0,0 +1,493 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#include "TrigConfIO/JsonFileWriter.h" + +#include <iomanip> +#include <fstream> +#include <algorithm> + +#include <nlohmann/json.hpp> +using json = nlohmann::json; + +using namespace std; + +TrigConf::JsonFileWriter::JsonFileWriter() : + TrigConfMessaging( "JsonFileWriter") +{} + + +bool +TrigConf::JsonFileWriter::writeJsonFile(const std::string & filename, const L1Menu & l1menu) const +{ + + json items({}); + for( auto & item : l1menu ) { + json jItem({}); + jItem["name"] = item.name(); + jItem["ctpid"] = item.ctpId(); + jItem["definition"] = item.definition(); + jItem["monitor"] = item.monitor(); + jItem["partition"] = item.partition(); + jItem["triggerType"] = item.triggerType(); + jItem["bunchgroups"] = json(item.bunchgroups()); + if(auto legacy = item.legacy() ) + jItem["legacy"] = *legacy; + items[item.name()] = jItem; + }; + + json thresholds({}); + for(const std::string & thrType : l1menu.thresholdTypes()) { + json jThresholsByType({}); + // first the thresholds of this type + for(auto & thr : l1menu.thresholds(thrType)) { + json jThr({}); + jThr["mapping"] = thr->mapping(); + + if(thr->hasChild("sectors")) { // for MBTS_A and MBTS_C + std::vector<std::string> sectors; + for(auto & s : thr->getList("sectors")) { + sectors.push_back(s.getValue()); + } + jThr["sectors"] = sectors; + } + if(thr->hasAttribute("voltage")) { // for MBTSII + jThr["voltage"] = thr->getAttribute<float>("voltage"); + } + + try { + if(thr->hasAttribute("value")) { + auto & caloThr = dynamic_cast<const TrigConf::L1Threshold_Calo &>(*thr); // for MBTSII + jThr["value"] = int(caloThr.thrValue()); + } + } catch(std::bad_cast&) {}; + + try { + auto muThr = dynamic_cast<const TrigConf::L1Threshold_MU &>(*thr); + jThr["baThr"] = muThr.ptBarrel(); + jThr["ecThr"] = muThr.ptEndcap(); + jThr["fwThr"] = muThr.ptForward(); + jThr["baIdx"] = muThr.idxBarrel(); + jThr["ecIdx"] = muThr.idxEndcap(); + jThr["fwIdx"] = muThr.idxForward(); + jThr["region"] = muThr.region(); + jThr["tgcFlags"] = muThr.tgcFlags(); + if(const std::string & roiExcl = muThr.rpcExclROIList(); !roiExcl.empty()) { + jThr["rpcExclROIList"] = roiExcl; + } + } catch(std::bad_cast&) {}; + + try { + auto tauThr = dynamic_cast<const TrigConf::L1Threshold_TAU &>(*thr); + std::string isobits = "00000"; + auto isomask = tauThr.isolationMask(); + for(size_t b=0; b<5; ++b) { + if(isomask & (1<<b)) { isobits[4-b] = '1'; } + } + jThr["isobits"] = isobits; + } catch(std::bad_cast&) {}; + + try { + auto EMThr = dynamic_cast<const TrigConf::L1Threshold_EM &>(*thr); + jThr["thrValues"] = json::array_t({}); + for(auto & rv : EMThr.thrValues()) { + json jRV({}); + jRV["etamin"] = rv.etaMin(); + jRV["etamax"] = rv.etaMax(); + jRV["phimin"] = 0; // never used, so not read + jRV["phimax"] = 64; // never used, so not read + std::string isobits = "00000"; + auto isomask = EMThr.isolationMask(rv.etaMin()); + for(size_t b=0; b<5; ++b) { + if(isomask & (1<<b)) { isobits[4-b] = '1'; } + } + jRV["isobits"] = isobits; + jRV["priority"] = rv.priority(); + jRV["value"] = (unsigned int)rv.value(); + jThr["thrValues"] += jRV; + } + } catch(std::bad_cast&) {}; + + try { + auto JThr = dynamic_cast<const TrigConf::L1Threshold_JET &>(*thr); + jThr["thrValues"] = json::array_t({}); + for(auto & rv : JThr.thrValues()) { + json jRV({}); + jRV["etamin"] = rv.etaMin(); + jRV["etamax"] = rv.etaMax(); + jRV["phimin"] = 0; // never used, so not read + jRV["phimax"] = 64; // never used, so not read + jRV["priority"] = rv.priority(); + jRV["window"] = JThr.window(0); + jRV["value"] = (unsigned int)rv.value(); + jThr["thrValues"] += jRV; + } + } catch(std::bad_cast&) {}; + + try { + auto teThr = dynamic_cast<const TrigConf::L1Threshold_TE &>(*thr); + //jThr["thrValues"] = json::array_t({}); + for(auto & rv : teThr.thrValues()) { + json jRV({}); + jRV["etamin"] = rv.etaMin(); + jRV["etamax"] = rv.etaMax(); + jRV["priority"] = rv.priority(); + jRV["value"] = (unsigned int)rv.value(); + jThr["thrValues"] += jRV; + } + } catch(std::bad_cast&) {}; + + try { + auto zbThr = dynamic_cast<const TrigConf::L1Threshold_ZB &>(*thr); + jThr["seed"] = zbThr.seed(); + jThr["seedBcdelay"] = zbThr.seedBcdelay(); + jThr["seedMultiplicity"] = zbThr.seedMultiplicity(); + } catch(std::bad_cast&) {}; + + + try { + auto eEMThr = dynamic_cast<const TrigConf::L1Threshold_eEM &>(*thr); + jThr["reta"] = TrigConf::Selection::wpToString(eEMThr.reta()); + jThr["rhad"] = TrigConf::Selection::wpToString(eEMThr.rhad()); + jThr["wstot"] = TrigConf::Selection::wpToString(eEMThr.wstot()); + jThr["thrValues"] = json::array_t({}); + for(auto & rv : eEMThr.thrValues()) { + json jRV({}); + jRV["etamin"] = rv.etaMin(); + jRV["etamax"] = rv.etaMax(); + jRV["priority"] = rv.priority(); + jRV["value"] = (unsigned int)rv.value(); + jThr["thrValues"] += jRV; + } + } catch(std::bad_cast&) {}; + + try { + auto jJThr = dynamic_cast<const TrigConf::L1Threshold_jJ &>(*thr); + jThr["ranges"] = json::array_t({}); + for(auto & rv : jJThr.thrValues()) { + json jRV({}); + jRV["etamin"] = rv.etaMin(); + jRV["etamax"] = rv.etaMax(); + jThr["ranges"] += jRV; + jThr["value"] = int(jJThr.thrValue(rv.etaMin())); + } + } catch(std::bad_cast&) {}; + + jThresholsByType[thr->name()] = jThr; + }; + json jThrType({}); + if(thrType != "internal") { + jThrType["thresholds"] = jThresholsByType; + } + jThrType["type"] = thrType; + + // extra info + auto & extraInfo = l1menu.thrExtraInfo().thrExtraInfo(thrType); + if(extraInfo.hasAttribute("ptMinToTopo")) { // for MBTSII + jThrType["ptMinToTopo"] = extraInfo.getAttribute<unsigned int>("ptMinToTopo"); + } + if(extraInfo.hasAttribute("resolutionMeV")) { // for MBTSII + jThrType["resolutionMeV"] = extraInfo.getAttribute<unsigned int>("resolutionMeV"); + } + + // extra info using type specific accessors + if(thrType == "internal") { + jThrType["names"] = json::array_t({}); + for(auto & thr : l1menu.thresholds(thrType)) { + jThrType["names"] += thr->name(); + } + auto & extInfo = l1menu.thrExtraInfo().thrExtraInfo("internal"); + if(auto randoms = extInfo.getExtraInfo("randoms")) { + for(size_t rc=0; rc<4; ++rc) { + jThrType["randoms"]["RNDM" + std::to_string(rc)]["cut"] = + randoms->get().getAttribute<unsigned int>("RNDM" + std::to_string(rc)+".cut"); + } + } + } + + if(thrType == "MU") { + auto & muinfo = l1menu.thrExtraInfo().MU(); + for(auto & listName : muinfo.exclusionListNames()) { + jThrType["exclusionLists"][listName] = json::array_t({}); + for(auto & x : muinfo.exclusionList(listName)) { + jThrType["exclusionLists"][listName] += json({ {"sectorName", x.first}, {"rois", x.second}}); + } + } + for(auto & rpcPt : muinfo.knownRpcPtValues()) { + jThrType["roads"]["rpc"][std::to_string(rpcPt)] = muinfo.rpcIdxForPt(rpcPt); + } + for(auto & tgcPt : muinfo.knownTgcPtValues()) { + jThrType["roads"]["tgc"][std::to_string(tgcPt)] = muinfo.tgcIdxForPt(tgcPt); + } + } + + if(thrType == "EM") { + auto & eminfo = l1menu.thrExtraInfo().EM(); + for(const std::string & isoSet : { "EMIsoForEMthr", "HAIsoForEMthr" }) { + jThrType["isolation"][isoSet]["thrtype"] = isoSet; + jThrType["isolation"][isoSet]["Parametrization"] = json::array_t({}); + for(size_t bit = 1; bit<=5; ++bit) { + auto & iso = eminfo.isolation(isoSet,bit); + json jIso({}); + jIso["etamax"] = iso.etamax(); + jIso["etamin"] = iso.etamin(); + jIso["isobit"] = iso.isobit(); + jIso["mincut"] = iso.mincut(); + jIso["offset"] = iso.offset(); + jIso["priority"] = iso.priority(); + jIso["slope"] = iso.slope(); + jIso["upperlimit"] = iso.upperlimit(); + jThrType["isolation"][isoSet]["Parametrization"] += jIso; + } + } + } + + if(thrType == "TAU") { + auto & tauinfo = l1menu.thrExtraInfo().TAU(); + const std::string isoSet{ "EMIsoForTAUthr" }; + jThrType["isolation"][isoSet]["thrtype"] = isoSet; + jThrType["isolation"][isoSet]["Parametrization"] = json::array_t({}); + for(size_t bit = 1; bit<=5; ++bit) { + auto & iso = tauinfo.isolation(isoSet,bit); + json jIso({}); + jIso["etamax"] = iso.etamax(); + jIso["etamin"] = iso.etamin(); + jIso["isobit"] = iso.isobit(); + jIso["mincut"] = iso.mincut(); + jIso["offset"] = iso.offset(); + jIso["priority"] = iso.priority(); + jIso["slope"] = iso.slope(); + jIso["upperlimit"] = iso.upperlimit(); + jThrType["isolation"][isoSet]["Parametrization"] += jIso; + } + } + + if(thrType == "JET") { + auto & jetinfo = l1menu.thrExtraInfo().JET(); + jThrType["ptMinToTopoSmallWindow"] = (int)jetinfo.ptMinToTopoSmallWindow(); + jThrType["ptMinToTopoLargeWindow"] = (int)jetinfo.ptMinToTopoLargeWindow(); + } + + if(thrType == "XS") { + auto & xsinfo = l1menu.thrExtraInfo().XS(); + jThrType["significance"]["xeMin"] = xsinfo.xeMin(); + jThrType["significance"]["xeMax"] = xsinfo.xeMax(); + jThrType["significance"]["teSqrtMin"] = xsinfo.teSqrtMin(); + jThrType["significance"]["teSqrtMax"] = xsinfo.teSqrtMax(); + jThrType["significance"]["xsSigmaScale"] = xsinfo.xsSigmaScale(); + jThrType["significance"]["xsSigmaOffset"] = xsinfo.xsSigmaOffset(); + } + + if(thrType == "eEM") { + auto & eeminfo = l1menu.thrExtraInfo().eEM(); + for( auto wp : {TrigConf::Selection::WP::LOOSE, TrigConf::Selection::WP::MEDIUM, TrigConf::Selection::WP::TIGHT} ) { + auto wpstr = TrigConf::Selection::wpToString(wp); + jThrType["workingPoints"][wpstr] = json::array_t({}); + for(auto & iso : eeminfo.isolation(wp)) { + json jWPIso({}); + jWPIso["reta"] = iso.value().reta_d(); + jWPIso["rhad"] = iso.value().rhad_d(); + jWPIso["wstot"] = iso.value().wstot_d(); + jWPIso["maxEt"] = iso.value().maxEt(); + jThrType["workingPoints"][wpstr] += jWPIso; + } + } + } + + if(thrType == "eTAU") { + auto & eeminfo = l1menu.thrExtraInfo().eTAU(); + for( auto wp : {TrigConf::Selection::WP::LOOSE, TrigConf::Selection::WP::MEDIUM, TrigConf::Selection::WP::TIGHT} ) { + auto wpstr = TrigConf::Selection::wpToString(wp); + jThrType["workingPoints"][wpstr] = json::array_t({}); + for(auto & iso : eeminfo.isolation(wp)) { + json jWPIso({}); + jWPIso["isolation"] = (int)iso.value().isolation_d(); + jWPIso["maxEt"] = iso.value().maxEt(); + jThrType["workingPoints"][wpstr] += jWPIso; + } + } + } + + if(thrType == "jJ") { + auto & ei = l1menu.thrExtraInfo().jJ(); + jThrType["ptMinToTopo"] = json::array_t({}); + for(auto & x : ei.ptMinToTopoMeV() ) { + jThrType["ptMinToTopo"] += json({ + {"etamin",x.etaMin()}, + {"etamax",x.etaMax()}, + {"small",int(x.value().first/1000.)}, + {"large",int(x.value().second/1000.)} + }); + } + } + + std::vector<std::string> legacyCalo = {"EM", "JET", "TAU", "XE", "TE", "XS", "ZB", "R2TOPO"}; + if( std::any_of(begin(legacyCalo), end(legacyCalo), [&thrType](const std::string &c) { return c==thrType; }) ) { + thresholds["legacyCalo"][thrType] = jThrType; + } else { + thresholds[thrType] = jThrType; + } + }; + + + json boards{}; + for( auto & bname : l1menu.boardNames() ) { + auto & bdef = l1menu.board(bname); + boards[bname] = json{ {"connectors", bdef.connectorNames()}, {"type", bdef.type()} }; + if(bdef.legacy()) + boards[bname]["legacy"] = true; + }; + + + json connectors{}; + for( auto & cname : l1menu.connectorNames() ) { + auto jConn = json{}; + auto & cdef = l1menu.connector(cname); + jConn["type"] = cdef.type(); + if(cdef.legacy()) + jConn["legacy"] = true; + if(cdef.maxFpga() == 2) { + for(size_t fpga = 0; fpga<2; ++fpga) { + std::string fName = "fpga" + std::to_string(fpga); + for(size_t clock = 0; clock<2; ++clock) { + std::string cName = "clock" + std::to_string(clock); + jConn["triggerlines"][fName][cName] = json::array_t(); + for(auto & tl : cdef.triggerLines(fpga, clock)) { + jConn["triggerlines"][fName][cName] += json({ {"name", tl.name()}, {"nbits",tl.nbits()}, {"startbit", tl.startbit()} }); + } + } + } + } else { + if(cdef.maxClock() == 2) { + // merger boards + for(size_t clock = 0; clock<cdef.maxClock(); ++clock) { + std::string cName = "clock" + std::to_string(clock); + jConn["triggerlines"][cName] = json::array_t(); + for(auto & tl : cdef.triggerLines(0, clock)) { + jConn["triggerlines"][cName] += json({ {"name", tl.name()}, {"nbits",tl.nbits()}, {"startbit", tl.startbit()} }); + } + } + } else { + jConn["triggerlines"] = json::array_t(); + for(auto & tl : cdef.triggerLines()) { + jConn["triggerlines"] += json({ {"name", tl.name()}, {"nbits",tl.nbits()}, {"startbit", tl.startbit()} }); + } + } + } + connectors[cname] = jConn; + } + + json ctp({}); + { + for(size_t slot=7; slot<=9; ++slot) { + std::string sName = "slot" + std::to_string(slot); + ctp["inputs"]["ctpin"][sName] = json({}); + for(size_t conn=0; conn<=3; ++conn) { + ctp["inputs"]["ctpin"][sName]["connector" + std::to_string(conn)] = l1menu.ctp().ctpin(slot,conn); + } + } + for(size_t conn=0; conn<3; ++conn) { + if(l1menu.ctp().electrical(conn)=="") + continue; + ctp["inputs"]["electrical"]["connector" + std::to_string(conn)] = l1menu.ctp().electrical(conn); + } + for(size_t conn=0; conn<12; ++conn) { + if(l1menu.ctp().optical(conn)=="") + continue; + ctp["inputs"]["optical"]["connector" + std::to_string(conn)] = l1menu.ctp().optical(conn); + } + auto ctpmon = json({}); + for(auto & mon : l1menu.ctp().ctpMon()) { + ctpmon[mon.first] = json({{"multiplicity",mon.second.first},{"thr",mon.second.second}}); + } + ctp["monitoring"] = json({{"ctpmon",ctpmon}}); + } + + json jtopo({}); + { + std::map<L1TopoAlgorithm::AlgorithmType,std::string> algTypeNames = { + {L1TopoAlgorithm::AlgorithmType::SORTING, "sortingAlgorithms"}, + {L1TopoAlgorithm::AlgorithmType::DECISION, "decisionAlgorithms"}, + {L1TopoAlgorithm::AlgorithmType::MULTIPLICITY, "multiplicityAlgorithms"} + }; + + for( const std::string & topoCat : {"TOPO", "MUTOPO", "MULTTOPO", "R2TOPO"} ) { + for(auto & algName : l1menu.topoAlgorithmNames(topoCat)) { + json jalg = json::object_t({}); + auto & alg = l1menu.algorithm(algName,topoCat); + jalg["algId"] = alg.algId(); + jalg["klass"] = alg.klass(); + // input + if(alg.type()==L1TopoAlgorithm::AlgorithmType::MULTIPLICITY) { + if(alg.inputs().size()>0) { + jalg["input"] = alg.inputs()[0]; + } else { + jalg["input"] = nullptr; + } + } else if(alg.type()==L1TopoAlgorithm::AlgorithmType::SORTING) { + jalg["input"] = alg.inputs()[0]; + } else { + jalg["input"] = alg.inputs(); + } + // output + if( alg.type() == L1TopoAlgorithm::AlgorithmType::DECISION ) { + jalg["output"] = alg.outputs(); + } else { + jalg["output"] = alg.outputs()[0]; + } + // generic parameters + if(topoCat == "MULTTOPO") { + jalg["nbits"] = alg.getAttribute<unsigned int>("nbits"); + jalg["threshold"] = alg.getAttribute("threshold"); + } else { + auto ds = alg.generics(); + for(auto & gpname : ds.getKeys()) { + auto gp = ds.getObject(gpname); + { + if(gp.hasAttribute("position")) { + jalg["fixedParameters"]["generics"][gpname]["position"] = gp.getAttribute<unsigned int>("position"); + } + std::string pval = alg.genericParameter(gpname); + try{ + int pvali = std::stoi(pval); + jalg["fixedParameters"]["generics"][gpname]["value"] = pvali; + } catch(std::invalid_argument &) { + jalg["fixedParameters"]["generics"][gpname]["value"] = pval; + } + } + } + } + // variable parameters + if(topoCat != "MULTTOPO") { + jalg["variableParameters"] = json::array_t({}); + for(const L1TopoAlgorithm::VariableParameter & vpar : alg.parameters()) { + json jVPar({}); + jVPar["name"] = vpar.name(); + jVPar["value"] = vpar.value(); + if(auto sel = vpar.selection_optional()) { jVPar["selection"] = *sel; } + jalg["variableParameters"] += jVPar; + } + } + jtopo[topoCat][algTypeNames[alg.type()]][algName] = jalg; + } + } + } + + json j({}); + j["filetype"] = "l1menu"; + j["name"] = l1menu.name(); + j["items"] = items; + j["thresholds"] = thresholds; + j["topoAlgorithms"] = jtopo; + j["boards"] = boards; + j["connectors"] = connectors; + j["ctp"] = ctp; + + + std::ofstream outfile(filename); + outfile << std::setw(4) << j << std::endl; + + TRG_MSG_INFO("Saved file " << filename); + return true; +} diff --git a/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx b/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx index 754fc90653503dc8e7b7d1d1e283f71e0239c3b6..0d323dcb9b47e507c3fe94129b34227b22c713e2 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx +++ b/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx @@ -46,9 +46,9 @@ exampleL1Calo(const string & filename) { for( int ieta : { -30, -20, -10, 0, 10, 20, 30 } ) { unsigned int ptMinToTopo = ei_eEM.ptMinToTopo(); // the minimum energy to send to topo (not eta dependent yet) cout << "ptmin=" << ptMinToTopo << endl; - auto iso_loose = ei_eEM.isolation(TrigConf::Isolation::WP::LOOSE, ieta); - auto iso_medium = ei_eEM.isolation(TrigConf::Isolation::WP::MEDIUM, ieta); - auto iso_tight = ei_eEM.isolation(TrigConf::Isolation::WP::TIGHT, ieta); + auto iso_loose = ei_eEM.isolation(TrigConf::Selection::WP::LOOSE, ieta); + auto iso_medium = ei_eEM.isolation(TrigConf::Selection::WP::MEDIUM, ieta); + auto iso_tight = ei_eEM.isolation(TrigConf::Selection::WP::TIGHT, ieta); int reta_loose = iso_loose.reta(); int had_loose = iso_loose.had(); int wstot_loose = iso_loose.wstot(); @@ -114,7 +114,7 @@ testL1Menu_Connectors(const TrigConf::L1Menu & l1menu) { cout << "L1 menu has " << l1menu.connectorNames().size() << " connectors configured" << endl; for( const string & connName : l1menu.connectorNames() ) { auto & conn = l1menu.connector(connName); - cout << "Connector " << connName << (conn.isLegacy() ? " (legacy)": "") << " has " << conn.size() << " trigger lines configured:" << endl; + cout << "Connector " << connName << (conn.legacy() ? " (legacy)": "") << " has " << conn.size() << " trigger lines configured:" << endl; if( connName == "MuCTPiOpt0" ) { for( auto & tl : conn.triggerLines() ) { cout << " Triggerline " << tl.name() << " bits=[" << tl.startbit() << ".." << tl.endbit() << "] is a muon threshold " << endl; @@ -125,18 +125,18 @@ testL1Menu_Connectors(const TrigConf::L1Menu & l1menu) { cout << " Triggerline " << tl.name() << " (clock " << clock << ", bit " << tl.startbit() << ") is an ALFA threshold " << endl; } } - } else if( conn.type() == TrigConf::L1Connector::ConnectorType::CTPIN ) { + } else if( conn.connectorType() == TrigConf::L1Connector::ConnectorType::CTPIN ) { for( auto & tl : conn.triggerLines() ) { cout << " Triggerline " << tl.name() << " bits=[" << tl.startbit() << ".." << tl.endbit() << "] is a legacy threshold " << endl; } - } else if( conn.type() == TrigConf::L1Connector::ConnectorType::OPTICAL ) { + } else if( conn.connectorType() == TrigConf::L1Connector::ConnectorType::OPTICAL ) { for( auto & tl : conn.triggerLines() ) { const string & tlName = tl.name(); auto & topoAlg = l1menu.algorithmFromTriggerline(tlName); cout << " Triggerline " << tlName << " bits=[" << tl.startbit() << ".." << tl.endbit() << "] is produced by topo algorithm " << topoAlg.name() << endl; } - } else if( conn.type() == TrigConf::L1Connector::ConnectorType::ELECTRICAL ) { + } else if( conn.connectorType() == TrigConf::L1Connector::ConnectorType::ELECTRICAL ) { for( size_t fpga : { 0, 1 } ) { for( size_t clock : { 0, 1 } ) { for( auto & tl : conn.triggerLines(fpga, clock) ) { @@ -332,25 +332,25 @@ testL1Menu_Extrainfo(const TrigConf::L1Menu & l1menu) cout << " ptMinToTopo (MeV) " << ex.ptMinToTopoMeV() << endl; cout << " ptMinToTopo (counts)" << ex.ptMinToTopoCounts() << endl; cout << " working point Loose" << endl; - for(auto & iso : ex.isolation(TrigConf::Isolation::WP::LOOSE)) { + for(auto & iso : ex.isolation(TrigConf::Selection::WP::LOOSE)) { cout << " range etaMin=" << iso.etaMin() << ", etaMax=" << iso.etaMax() << ", priority=" << iso.priority() << ", symmetric=" << (iso.symmetric() ? "yes" : "no") << ", isolation=" << iso.value() << endl; } cout << " working point Medium" << endl; - for(auto & iso : ex.isolation(TrigConf::Isolation::WP::MEDIUM)) { + for(auto & iso : ex.isolation(TrigConf::Selection::WP::MEDIUM)) { cout << " range etaMin=" << iso.etaMin() << ", etaMax=" << iso.etaMax() << ", priority=" << iso.priority() << ", symmetric=" << (iso.symmetric() ? "yes" : "no") << ", isolation=" << iso.value() << endl; } cout << " working point Tight" << endl; - for(auto & iso : ex.isolation(TrigConf::Isolation::WP::TIGHT)) { + for(auto & iso : ex.isolation(TrigConf::Selection::WP::TIGHT)) { cout << " range etaMin=" << iso.etaMin() << ", etaMax=" << iso.etaMax() << ", priority=" << iso.priority() << ", symmetric=" << (iso.symmetric() ? "yes" : "no") << ", isolation=" << iso.value() << endl; } - //cout << " working point Medium at eta = -20:" << ex.isolation(TrigConf::Isolation::WP::MEDIUM,-20) << endl; - cout << " working point Medium at eta = 20:" << ex.isolation(TrigConf::Isolation::WP::MEDIUM,20) << endl; + //cout << " working point Medium at eta = -20:" << ex.isolation(TrigConf::Selection::WP::MEDIUM,-20) << endl; + cout << " working point Medium at eta = 20:" << ex.isolation(TrigConf::Selection::WP::MEDIUM,20) << endl; } { auto & ex = l1menu.thrExtraInfo().jJ(); @@ -371,22 +371,22 @@ testL1Menu_Extrainfo(const TrigConf::L1Menu & l1menu) cout << " ptMinToTopo (MeV) " << ex.ptMinToTopoMeV() << endl; cout << " ptMinToTopo (counts)" << ex.ptMinToTopoCounts() << endl; cout << " working point Loose" << endl; - for(auto & iso : ex.isolation(TrigConf::Isolation::WP::LOOSE)) { + for(auto & iso : ex.isolation(TrigConf::Selection::WP::LOOSE)) { cout << " range etaMin=" << iso.etaMin() << ", etaMax=" << iso.etaMax() << ", priority=" << iso.priority() << ", symmetric=" << (iso.symmetric() ? "yes" : "no") - << ", isolation=" << iso.value() << endl; + << ", isolation=" << iso.value().isolation() << endl; } cout << " working point Medium" << endl; - for(auto & iso : ex.isolation(TrigConf::Isolation::WP::MEDIUM)) { + for(auto & iso : ex.isolation(TrigConf::Selection::WP::MEDIUM)) { cout << " range etaMin=" << iso.etaMin() << ", etaMax=" << iso.etaMax() << ", priority=" << iso.priority() << ", symmetric=" << (iso.symmetric() ? "yes" : "no") - << ", isolation=" << iso.value() << endl; + << ", isolation=" << iso.value().isolation() << endl; } cout << " working point Tight" << endl; - for(auto & iso : ex.isolation(TrigConf::Isolation::WP::TIGHT)) { + for(auto & iso : ex.isolation(TrigConf::Selection::WP::TIGHT)) { cout << " range etaMin=" << iso.etaMin() << ", etaMax=" << iso.etaMax() << ", priority=" << iso.priority() << ", symmetric=" << (iso.symmetric() ? "yes" : "no") - << ", isolation=" << iso.value() << endl; + << ", isolation=" << iso.value().isolation() << endl; } } @@ -399,7 +399,7 @@ testL1Menu_Extrainfo(const TrigConf::L1Menu & l1menu) cout << endl; if( const auto & list = exMU.exclusionListNames(); std::find(list.begin(), list.end(), "rpcFeet")!=list.end() ) { cout << " exclusionList 'rpcFeet'" << endl; - for(auto & x : exMU.exlusionList("rpcFeet")) { + for(auto & x : exMU.exclusionList("rpcFeet")) { cout << " sector " << x.first << ": "; for( auto roi : x.second ) cout << roi << " "; cout << endl; diff --git a/Trigger/TrigConfiguration/TrigConfIO/utils/TriggerMenuRW.cxx b/Trigger/TrigConfiguration/TrigConfIO/utils/TriggerMenuRW.cxx index e8eca7e0ef0c2f7f22bc4366b69dd39e528527b7..c4eb23b808104d25d50dbd88c86baeec17456ac2 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/utils/TriggerMenuRW.cxx +++ b/Trigger/TrigConfiguration/TrigConfIO/utils/TriggerMenuRW.cxx @@ -6,6 +6,7 @@ #include <vector> #include "TrigConfIO/JsonFileLoader.h" +#include "TrigConfIO/JsonFileWriter.h" #include "TrigConfIO/TrigDBMenuLoader.h" #include "TrigConfIO/TrigDBJobOptionsLoader.h" #include "TrigConfIO/TrigDBL1PrescalesSetLoader.h" @@ -24,7 +25,7 @@ public: ~Config(){} Config(){} - std::vector<std::string> knownParameters { "file", "f", "smk", "l1psk", "hltpsk", "bgsk", "db", "write", "w", "help", "h", "detail", "d" }; + std::vector<std::string> knownParameters { "file", "f", "smk", "l1psk", "hltpsk", "bgsk", "db", "write", "w", "Write", "W", "help", "h", "detail", "d" }; // parameters // input @@ -37,6 +38,7 @@ public: // output bool write { false }; // flag to enable writing + bool writeFromDataStructure { false }; // flag to enable writing of the L1Menu structure (if available) std::string base { "" }; // other @@ -68,6 +70,7 @@ void Config::usage() { cout << " --db dbalias ... dbalias (default " << dbalias << ") \n"; cout << "[Output options]\n"; cout << " -w|--write [base] ... to write out json files, e.g. L1menu[_<base>].json. base is optional.\n"; + cout << " -W|--Write [base] ... to write out json files from the internal structure (only for L1Menu), e.g. L1menu[_<base>].json. base is optional.\n"; cout << "[Other options]\n"; cout << " -h|--help ... this help\n"; cout << " -d|--detail ... prints detailed job options\n"; @@ -104,6 +107,7 @@ Config::parseProgramOptions(int argc, char* argv[]) { if(paramName == "h" || paramName == "help" ) { help = true; continue; } if(paramName == "d" || paramName == "detail" ) { detail = true; continue; } if(paramName == "w" || paramName == "write" ) { write = true; } + if(paramName == "W" || paramName == "Write" ) { writeFromDataStructure = true; } currentParameter = paramName; continue; } @@ -137,7 +141,7 @@ Config::parseProgramOptions(int argc, char* argv[]) { } // output - if(currentParameter == "write" || currentParameter == "w") { + if(currentParameter == "write" || currentParameter == "w" || currentParameter == "Write" || currentParameter == "W") { base = currentWord; continue; } @@ -158,16 +162,24 @@ Config::parseProgramOptions(int argc, char* argv[]) { namespace { bool writeJsonFile(const TrigConf::DataStructure & ds, const std::string & kind, const Config & cfg) { - if( ! cfg.write ) - return true; - - std::string filename = kind; - if ( cfg.base != "" ) { - filename += "_" + cfg.base; + if( cfg.write ) { + std::string filename = kind; + if ( cfg.base != "" ) { + filename += "_" + cfg.base; + } + filename += ".json"; + TrigConf::JsonFileLoader fileLoader; + return fileLoader.saveFile(filename, ds); + } else if ( cfg.writeFromDataStructure && kind=="L1Menu" ) { + std::string filename = kind; + if ( cfg.base != "" ) { + filename += "_" + cfg.base; + } + filename += ".fromDS.json"; + TrigConf::JsonFileWriter fileWriter; + const auto & l1menu = dynamic_cast<const TrigConf::L1Menu &>(ds); + return fileWriter.writeJsonFile(filename, l1menu); } - filename += ".json"; - TrigConf::JsonFileLoader fileLoader; - fileLoader.saveFile(filename, ds); return true; } diff --git a/Trigger/TrigConfiguration/TrigConfxAOD/Root/prepareTriggerMenu.cxx b/Trigger/TrigConfiguration/TrigConfxAOD/Root/prepareTriggerMenu.cxx index 51fbb0cbcfddb0580c7577255cd22da7c5388169..ad75980a9ca3d4401cb2679a2251a3f2a0d28cbe 100644 --- a/Trigger/TrigConfiguration/TrigConfxAOD/Root/prepareTriggerMenu.cxx +++ b/Trigger/TrigConfiguration/TrigConfxAOD/Root/prepareTriggerMenu.cxx @@ -339,6 +339,7 @@ namespace TrigConf { chain->set_rerun_prescale( -1.0 ); // Not used in R3 chain->set_pass_through( -1.0 ); // Not used in R3 chain->set_prescale( loadedPrescale.prescale ); + chain->set_leg_multiplicities( loadedChain.legMultiplicities() ); // Add it to the list of chains: if( ! chainList.addHLTChain( chain ) ) { diff --git a/Trigger/TrigConfiguration/TrigConfxAOD/Root/xAODConfigTool.cxx b/Trigger/TrigConfiguration/TrigConfxAOD/Root/xAODConfigTool.cxx index 51b16f838ca411ef533e7222e9b88f5dfa92c9e4..5f130ccaea54c9f90300620bfec79c99da197226 100644 --- a/Trigger/TrigConfiguration/TrigConfxAOD/Root/xAODConfigTool.cxx +++ b/Trigger/TrigConfiguration/TrigConfxAOD/Root/xAODConfigTool.cxx @@ -277,7 +277,9 @@ namespace TrigConf { // Try to read the R2 metadata object: m_tmc = nullptr; m_triggerMenuContainerAvailable = true; - if( inputMetaStore()->retrieve( m_tmc, m_metaName_run2 ).isFailure() ) { + if( !inputMetaStore()->contains<xAOD::TriggerMenuContainer>(m_metaName_run2) + or inputMetaStore()->retrieve( m_tmc, m_metaName_run2 ).isFailure() ) + { m_triggerMenuContainerAvailable = false; } @@ -288,16 +290,24 @@ namespace TrigConf { m_l1psJson = nullptr; m_bgJson = nullptr; m_menuJSONContainerAvailable = true; - if( inputMetaStore()->retrieve( m_hltJson, m_metaNameJSON_hlt ).isFailure() ) { + if( !inputMetaStore()->contains<xAOD::TriggerMenuJsonContainer>(m_metaNameJSON_hlt) + or inputMetaStore()->retrieve( m_hltJson, m_metaNameJSON_hlt ).isFailure() ) + { m_menuJSONContainerAvailable = false; } - if( inputMetaStore()->retrieve( m_l1Json, m_metaNameJSON_l1 ).isFailure() ) { + if( !inputMetaStore()->contains<xAOD::TriggerMenuJsonContainer>(m_metaNameJSON_l1) + or inputMetaStore()->retrieve( m_l1Json, m_metaNameJSON_l1 ).isFailure() ) + { m_menuJSONContainerAvailable = false; } - if( inputMetaStore()->retrieve( m_hltpsJson, m_metaNameJSON_hltps ).isFailure() ) { + if( !inputMetaStore()->contains<xAOD::TriggerMenuJsonContainer>(m_metaNameJSON_hltps) + or inputMetaStore()->retrieve( m_hltpsJson, m_metaNameJSON_hltps ).isFailure() ) + { m_menuJSONContainerAvailable = false; } - if( inputMetaStore()->retrieve( m_l1psJson, m_metaNameJSON_l1ps ).isFailure() ) { + if( !inputMetaStore()->contains<xAOD::TriggerMenuJsonContainer>(m_metaNameJSON_l1ps) + or inputMetaStore()->retrieve( m_l1psJson, m_metaNameJSON_l1ps ).isFailure() ) + { m_menuJSONContainerAvailable = false; } // if( inputMetaStore()->retrieve( m_bgJson, m_metaNameJSON_bg ).isFailure() ) { diff --git a/Trigger/TrigConfiguration/TrigConfxAOD/src/xAODConfigSvc.cxx b/Trigger/TrigConfiguration/TrigConfxAOD/src/xAODConfigSvc.cxx index 5ecb14cd5089cbe8f8df3f9b06543ed14757d77b..5786bb3ca30465b6e96ce9481d3163e982586b68 100644 --- a/Trigger/TrigConfiguration/TrigConfxAOD/src/xAODConfigSvc.cxx +++ b/Trigger/TrigConfiguration/TrigConfxAOD/src/xAODConfigSvc.cxx @@ -396,7 +396,9 @@ namespace TrigConf { // Read the R2 metadata object... const xAOD::TriggerMenuContainer* input_tmc = nullptr; - if( m_metaStore->retrieve( input_tmc, m_metaName ).isFailure() ) { + if( !m_metaStore->contains<xAOD::TriggerMenuContainer>(m_metaName) + or m_metaStore->retrieve( input_tmc, m_metaName ).isFailure() ) + { m_triggerMenuContainerAvailable = false; } @@ -406,19 +408,29 @@ namespace TrigConf { const xAOD::TriggerMenuJsonContainer* input_hltps = nullptr; const xAOD::TriggerMenuJsonContainer* input_l1ps = nullptr; // const xAOD::TriggerMenuJsonContainer* input_bg = nullptr; - if( m_metaStore->retrieve( input_hlt, m_metaNameJSON_hlt ).isFailure() ) { + if( !m_metaStore->contains<xAOD::TriggerMenuJsonContainer>(m_metaNameJSON_hlt) + or m_metaStore->retrieve( input_hlt, m_metaNameJSON_hlt ).isFailure() ) + { m_menuJSONContainerAvailable = false; } - if( m_metaStore->retrieve( input_l1, m_metaNameJSON_l1 ).isFailure() ) { + if( !m_metaStore->contains<xAOD::TriggerMenuJsonContainer>(m_metaNameJSON_l1) + or m_metaStore->retrieve( input_l1, m_metaNameJSON_l1 ).isFailure() ) + { m_menuJSONContainerAvailable = false; } - if( m_metaStore->retrieve( input_hltps, m_metaNameJSON_hltps ).isFailure() ) { + if( !m_metaStore->contains<xAOD::TriggerMenuJsonContainer>(m_metaNameJSON_hltps) + or m_metaStore->retrieve( input_hltps, m_metaNameJSON_hltps ).isFailure() ) + { m_menuJSONContainerAvailable = false; } - if( m_metaStore->retrieve( input_l1ps, m_metaNameJSON_l1ps ).isFailure() ) { + if( !m_metaStore->contains<xAOD::TriggerMenuJsonContainer>(m_metaNameJSON_l1ps) + or m_metaStore->retrieve( input_l1ps, m_metaNameJSON_l1ps ).isFailure() ) + { m_menuJSONContainerAvailable = false; } - // if( m_metaStore->retrieve( input_bg, m_metaNameJSON_bg ).isFailure() ) { + // if( !m_metaStore->contains<xAOD::TriggerMenuJsonContainer>(m_metaNameJSON_bg) + // or m_metaStore->retrieve( input_bg, m_metaNameJSON_bg ).isFailure() ) + // { // m_menuJSONContainerAvailable = false; // } diff --git a/Trigger/TrigEvent/TrigSteeringEvent/TrigSteeringEvent/Chain.h b/Trigger/TrigEvent/TrigSteeringEvent/TrigSteeringEvent/Chain.h index cf0ae8609e4d376229c180d759a252777f07c21b..b62350c1c3aeb0220f96d44d064e937e02562678 100644 --- a/Trigger/TrigEvent/TrigSteeringEvent/TrigSteeringEvent/Chain.h +++ b/Trigger/TrigEvent/TrigSteeringEvent/TrigSteeringEvent/Chain.h @@ -95,6 +95,7 @@ namespace HLT { const std::string& getChainName() const { return (m_configChain ? m_configChain->chain_name(): no_config); } //!< return the Chain name (string) const std::string& getLowerChainName() const { return (m_configChain ? m_configChain->lower_chain_name(): no_config); } //!< return the Chain name (string) int getEBAfterStep() const { return (m_configChain ? m_configChain->EB_after_step() : -1.); } //!< get EB_after_step + std::vector<size_t> getLegMultiplicities() const { return (m_configChain ? m_configChain->leg_multiplicities() : std::vector<size_t>()); } //!< get per leg multiplicity (Run3 only) bool nextStepAfterEB() const { return ((getChainStep()+1) > getEBAfterStep()) && (getEBAfterStep()>0.); } //!< return whether next step requires EB (-1 means no EB called) bool isMerged() const { return (m_configChain ? (m_configChain->level()=="HLT") : false);}; //!<< return whether is a merged L2+EF chain diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/CMakeLists.txt b/Trigger/TrigHypothesis/TrigCaloHypo/CMakeLists.txt index b5c0d223a066b6930e2b61ad6c9b2c7234d87dc0..75311453194d6556b56ce095d075558848c4d563 100644 --- a/Trigger/TrigHypothesis/TrigCaloHypo/CMakeLists.txt +++ b/Trigger/TrigHypothesis/TrigCaloHypo/CMakeLists.txt @@ -10,7 +10,7 @@ find_package( tdaq-common COMPONENTS hltinterface ) atlas_add_component( TrigCaloHypo src/*.cxx src/components/*.cxx INCLUDE_DIRS ${TDAQ-COMMON_INCLUDE_DIRS} - LINK_LIBRARIES ${TDAQ-COMMON_LIBRARIES} CaloInterfaceLib GaudiKernel LArRecConditions LArRecEvent StoreGateLib TrigCaloEvent TrigInterfacesLib TrigSteeringEvent TrigTimeAlgsLib xAODCaloEvent xAODEventInfo ) + LINK_LIBRARIES ${TDAQ-COMMON_LIBRARIES} AthViews CaloInterfaceLib DecisionHandlingLib GaudiKernel LArRecConditions LArRecEvent StoreGateLib TrigCaloEvent TrigInterfacesLib TrigSteeringEvent TrigTimeAlgsLib xAODCaloEvent xAODEventInfo ) # Install files from the package: atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} --extend-extensions=ATL900,ATL901 ) diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/TrigCaloHypo/ITrigLArNoiseBurstHypoTool.h b/Trigger/TrigHypothesis/TrigCaloHypo/TrigCaloHypo/ITrigLArNoiseBurstHypoTool.h new file mode 100644 index 0000000000000000000000000000000000000000..b736b02b010f0245e63f4b12469117d2ed1ede02 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigCaloHypo/TrigCaloHypo/ITrigLArNoiseBurstHypoTool.h @@ -0,0 +1,74 @@ + +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef TRIGCALOHYPO_ITRIGLARNOISEBURSTHYPOTOOL_H +#define TRIGCALOHYPO_ITRIGLARNOISEBURSTHYPOTOOL_H 1 + +#include "GaudiKernel/IAlgTool.h" +#include "AthenaBaseComps/AthAlgTool.h" +#include "DecisionHandling/HLTIdentifier.h" +#include "DecisionHandling/TrigCompositeUtils.h" +#include "CaloEvent/CaloCellContainer.h" +#include "TrigSteeringEvent/TrigRoiDescriptorCollection.h" +#include "Identifier/HWIdentifier.h" + + +/** + * @class Base for tools dooing LArNoiseBurst Hypo selection + * @brief + **/ + +class ITrigLArNoiseBurstHypoTool + : virtual public ::IAlgTool +{ + + public: + DeclareInterfaceID(ITrigLArNoiseBurstHypoTool, 1, 0); + virtual ~ITrigLArNoiseBurstHypoTool(){} + + struct CaloCellNoiseInfo { + CaloCellNoiseInfo( TrigCompositeUtils::Decision* d, + const TrigRoiDescriptor* r, + const CaloCellContainer* c, + const std::set<unsigned int>* bf, + const std::vector<HWIdentifier>* MNBfeb, + const TrigCompositeUtils::Decision* previousDecision ) + : decision( d ), + roi( r ), + cells(c), + knownBadFEBs(bf), knownMNBFEBs(MNBfeb), + previousDecisionIDs( TrigCompositeUtils::decisionIDs( previousDecision ).begin(), + TrigCompositeUtils::decisionIDs( previousDecision ).end() ) + {} + + TrigCompositeUtils::Decision* decision; + const TrigRoiDescriptor* roi; + const CaloCellContainer* cells; + const std::set<unsigned int>* knownBadFEBs; + const std::vector<HWIdentifier>* knownMNBFEBs; + const TrigCompositeUtils::DecisionIDContainer previousDecisionIDs; + }; + + + /** + * @brief decides upon all clusters + * Note it is for a reason a non-virtual method, it is an interface in gaudi sense and implementation. + * There will be many tools called often to perform this quick operation and we do not want to pay for polymorphism which we do not need to use. + * Will actually see when N obj hypos will enter the scene + **/ + virtual StatusCode decide( std::vector<CaloCellNoiseInfo>& input ) const = 0; + + /** + * @brief Makes a decision for a single object + * The decision needs to be returned + **/ + virtual bool decide( const CaloCellNoiseInfo& i ) const = 0; + + protected: + + +}; + + +#endif //> !TRIGCALOHYPO_ITRIGLARNOISEBURSTHYPOTOOL_H diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/python/TrigCaloHypoConfig.py b/Trigger/TrigHypothesis/TrigCaloHypo/python/TrigCaloHypoConfig.py index 3c37b071bf7cba048557fce61d570ad9ad8d57b6..9224e1665db96f078b38db7bfdd371e3cffccce2 100644 --- a/Trigger/TrigHypothesis/TrigCaloHypo/python/TrigCaloHypoConfig.py +++ b/Trigger/TrigHypothesis/TrigCaloHypo/python/TrigCaloHypoConfig.py @@ -58,3 +58,28 @@ class L2JetHypo (L2JetHypoBase): self.doTimeQualityCleaning = False self.doEMfCleaningHighEta = False self.doEMfCleaningLowEta = False + +from AthenaConfiguration.ComponentFactory import CompFactory + +class TrigLArNoiseBurstHypoToolIncCfg ( CompFactory.TrigLArNoiseBurstHypoToolInc ): + def __init__(self,name="TrigLArNoiseBurstHypoToolIncCfg", **kwargs): + super(TrigLArNoiseBurstHypoToolIncCfg,self).__init__(name,**kwargs) + from LArBadChannelTool.LArBadChannelToolConf import LArBadFebCondAlg + from AthenaCommon.AlgSequence import AthSequencer + condSeq = AthSequencer("AthCondSeq") + if ( not hasattr(condSeq,"LArKnownBadFebAlg") ): + conddb.addFolder('LAR_ONL',"/LAR/BadChannels/KnownBADFEBs", className="AthenaAttributeList") + condSeq+=LArBadFebCondAlg("LArKnownBadFebAlg",ReadKey="/LAR/BadChannels/KnownBADFEBs",WriteKey="LArKnownBadFEBs") + if ( not hasattr(condSeq,"LArKnownMNBFebAlg") ): + conddb.addFolder('LAR_ONL',"/LAR/BadChannels/KnownMNBFEBs", className="AthenaAttributeList") + condSeq+=LArBadFebCondAlg("LArKnownMNBFebAlg",ReadKey="/LAR/BadChannels/KnownMNBFEBs",WriteKey="LArKnownMNBFEBs") + theLArNoisyROTool=LArNoisyROTool(SaturatedCellTightCut=20,MNBLooseCut=5,MNBTightCut=17) + self.NoiseTool = theLArNoisyROTool + +class TrigLArNoiseBurstAlgCfg ( CompFactory.TrigLArNoiseBurstAlg ): + def __init__(self,name="TrigLArNoiseBurstAlgCfg", **kwargs): + super(TrigLArNoiseBurstAlgCfg,self).__init__(name,**kwargs) + self.HypoTools = [TrigLArNoiseBurstHypoToolIncCfg()] + +def TrigLArNoiseBurstHypoToolGen(chainDict): + return TrigLArNoiseBurstHypoToolIncCfg(chainDict['chainName']) diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.cxx b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.cxx new file mode 100644 index 0000000000000000000000000000000000000000..96949004e2ea41c5195d1556f2df5af4002d4d27 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.cxx @@ -0,0 +1,98 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#include "Gaudi/Property.h" +#include "TrigLArNoiseBurstAlg.h" +#include "TrigCompositeUtils/HLTIdentifier.h" +#include "TrigCompositeUtils/TrigCompositeUtils.h" +#include "AthViews/ViewHelper.h" + +using namespace TrigCompositeUtils; + +TrigLArNoiseBurstAlg::TrigLArNoiseBurstAlg( const std::string& name, + ISvcLocator* pSvcLocator ) : + ::HypoBase( name, pSvcLocator ) {} + + +StatusCode TrigLArNoiseBurstAlg::initialize() { + + ATH_CHECK( m_cellContainerKey.initialize() ); + ATH_CHECK( m_knownBadFEBsVecKey.initialize() ); + ATH_CHECK( m_knownMNBFEBsVecKey.initialize() ); + ATH_CHECK( m_hypoTools.retrieve() ); + + return StatusCode::SUCCESS; +} + + +StatusCode TrigLArNoiseBurstAlg::execute( const EventContext& context ) const { + ATH_MSG_DEBUG ( "Executing " << name() << "..." ); + auto previousDecisionsHandle = SG::makeHandle( decisionInput(), context ); + ATH_CHECK( previousDecisionsHandle.isValid() ); + ATH_MSG_DEBUG( "Running with "<< previousDecisionsHandle->size() <<" previous decisions"); + + // new output decisions + SG::WriteHandle<DecisionContainer> outputHandle = createAndStore(decisionOutput(), context ); + auto decisions = outputHandle.ptr(); + + // input for decision + std::vector<ITrigLArNoiseBurstHypoTool::CaloCellNoiseInfo> toolInput; + + ATH_CHECK( previousDecisionsHandle->size() == 1 ); + const auto previousDecision = previousDecisionsHandle->at(0); + //get RoI + auto roiELInfo = findLink<TrigRoiDescriptorCollection>( previousDecision, initialRoIString() ); + + ATH_CHECK( roiELInfo.isValid() ); + const TrigRoiDescriptor* roi = *(roiELInfo.link); + + // get cells + SG::ReadHandle<CaloCellContainer> cellsHandle(m_cellContainerKey, context); + ATH_CHECK( cellsHandle.isValid() ); + ATH_MSG_DEBUG ( "Cluster handle size: " << cellsHandle->size() << "..." ); + + // necessary conditions + std::set<unsigned int> bf; + std::vector<HWIdentifier> MNBfeb; + SG::ReadCondHandle<LArBadFebCont> badHdl(m_knownBadFEBsVecKey, context); + const LArBadFebCont* badCont=*badHdl; + if(badCont) { + for(LArBadFebCont::BadChanVec::const_iterator i = badCont->begin(); i!=badCont->end(); i++) { + bf.insert(i->first); + } + } + + SG::ReadCondHandle<LArBadFebCont> MNBHdl(m_knownMNBFEBsVecKey, context); + const LArBadFebCont* MNBCont=*MNBHdl; + if(MNBCont) { + for(LArBadFebCont::BadChanVec::const_iterator i = MNBCont->begin(); i!=MNBCont->end(); i++) { + MNBfeb.push_back(HWIdentifier(i->first)); + } + } + + // Get new output decision, child of previousDecision + auto d = newDecisionIn (decisions, previousDecision, "", context ); + + // create summary struct + toolInput.emplace_back( d, roi, cellsHandle.cptr(), &bf, &MNBfeb, previousDecision ); + + + // link the cluster + { + auto cell = ElementLink<CaloCellContainer>( *cellsHandle, 0 ); + ATH_CHECK( cell.isValid() ); + d->setObjectLink( featureString(), cell ); + } + + ATH_MSG_DEBUG( "Found "<<toolInput.size()<<" inputs to tools"); + + + for ( auto& tool: m_hypoTools ) { + ATH_CHECK( tool->decide( toolInput ) ); + } + + ATH_CHECK( hypoBaseOutputProcessing(outputHandle) ); + + return StatusCode::SUCCESS; +} diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.h b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.h new file mode 100644 index 0000000000000000000000000000000000000000..a9c9376e9c539aca0660b82e19bdfcc8a6223c87 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.h @@ -0,0 +1,38 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef TRIGCALOHYPO_TRIGLARNOISEBURSTALG +#define TRIGCALOHYPO_TRIGLARNOISEBURSTALG + +#include <string> + +#include "AthenaBaseComps/AthReentrantAlgorithm.h" +#include "AthViews/View.h" +#include "TrigSteeringEvent/TrigRoiDescriptorCollection.h" +#include "DecisionHandling/HypoBase.h" +#include "LArRecConditions/LArBadChannelCont.h" +#include "StoreGate/ReadHandleKey.h" + + + +#include "TrigCaloHypo/ITrigLArNoiseBurstHypoTool.h" + +/** + * @class TrigLArNoiseBurstAlg + * @brief Implements LArNoiseBurst detection for the new HLT framework + **/ +class TrigLArNoiseBurstAlg : public ::HypoBase { + public: + + TrigLArNoiseBurstAlg( const std::string& name, ISvcLocator* pSvcLocator ); + + virtual StatusCode initialize() override; + virtual StatusCode execute( const EventContext& context ) const override; + + private: + SG::ReadHandleKey<CaloCellContainer > m_cellContainerKey { this, "CellContainerKey", "CellsClusters","SG Key of cells"}; + SG::ReadCondHandleKey<LArBadFebCont> m_knownBadFEBsVecKey {this, "BadFEBsKey", "LArKnownBadFEBs", "key to read the known Bad FEBs"}; + SG::ReadCondHandleKey<LArBadFebCont> m_knownMNBFEBsVecKey {this, "MNBFEBsKey", "LArKnownMNBFEBs", "key to read the known MNB FEBs"}; + ToolHandleArray< ITrigLArNoiseBurstHypoTool > m_hypoTools { this, "HypoTools", {}, "Hypo tools" }; +}; +#endif diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstHypoToolInc.cxx b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstHypoToolInc.cxx new file mode 100644 index 0000000000000000000000000000000000000000..a8f6de08d0d67b94b0a25e198740567eda59b54e --- /dev/null +++ b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstHypoToolInc.cxx @@ -0,0 +1,106 @@ + +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#include <algorithm> +#include "TrigCompositeUtils/HLTIdentifier.h" +#include "TrigCompositeUtils/Combinators.h" +#include "AthenaMonitoringKernel/Monitored.h" +#include "GaudiKernel/SystemOfUnits.h" +#include "LArRecEvent/LArNoisyROSummary.h" + +#include "TrigLArNoiseBurstHypoToolInc.h" + + +using namespace TrigCompositeUtils; + +TrigLArNoiseBurstHypoToolInc::TrigLArNoiseBurstHypoToolInc( const std::string& type, + const std::string& name, + const IInterface* parent ) + : base_class( type, name, parent ), + m_noisyROTool("LArNoisyROTool",this), + m_decisionId( HLT::Identifier::fromToolName( name ) ) +{ + declareProperty( "Tool",m_noisyROTool); +} + +StatusCode TrigLArNoiseBurstHypoToolInc::initialize() { + + + // prepare mask + m_mask = 0x0; + if ( m_badFEBFlaggedPartitions ) m_mask|=0x1; + if ( m_satTightFlaggedPartitions ) m_mask|=0x2; + if ( m_mNBLooseFlaggedPartitions ) m_mask|=0x10; + if ( m_mNBTightFlaggedPartitions ) m_mask|=0x20; + if ( m_mNBTight_PsVetoFlaggedPartitions ) m_mask|=0x40; + ATH_CHECK(m_noisyROTool.retrieve()); + + ATH_MSG_INFO("TrigLArNoiseBurstHypoTool initialization completed successfully."); + +/* + if ( not m_monTool.name().empty() ) + CHECK( m_monTool.retrieve() ); +*/ + + return StatusCode::SUCCESS; +} + + + +TrigLArNoiseBurstHypoToolInc::~TrigLArNoiseBurstHypoToolInc(){} + + +StatusCode TrigLArNoiseBurstHypoToolInc::decide( std::vector<CaloCellNoiseInfo>& input ) const { + + for ( auto& i: input ) { + if ( passed ( m_decisionId.numeric(), i.previousDecisionIDs ) ) { + if ( decide( i ) ) { + addDecisionID( m_decisionId, i.decision ); + } + } + } + return StatusCode::SUCCESS; +} + +bool TrigLArNoiseBurstHypoToolInc::decide( const ITrigLArNoiseBurstHypoTool::CaloCellNoiseInfo& input ) const { + + // no cells, no discussion + if ( !input.cells ) return false; + unsigned int flag = 0; + bool pass=false; + ATH_MSG_DEBUG ("Got cell container, will process it"); + std::unique_ptr<LArNoisyROSummary> noisyRO = m_noisyROTool->process(input.cells, input.knownBadFEBs, input.knownMNBFEBs); + ATH_MSG_DEBUG("processed it"); + if ( noisyRO->BadFEBFlaggedPartitions() ) { + ATH_MSG_DEBUG("Passed : BadFEBFlaggedPartitions"); + flag |= 0x1; + } + if ( noisyRO->BadFEB_WFlaggedPartitions() ) { + ATH_MSG_DEBUG("Passed : BadFEB_WFlaggedPartitions"); + flag |= 0x8; + } + if ( noisyRO->SatTightFlaggedPartitions() ) { + ATH_MSG_DEBUG("Passed : SatTightFlaggedPartitions"); + flag |= 0x2; + } + if ( noisyRO->MNBLooseFlaggedPartitions() ) { + ATH_MSG_DEBUG("Passed : MNBLooseFlaggedPartions"); + flag |= 0x10; + } + if ( noisyRO->MNBTightFlaggedPartitions() ) { + ATH_MSG_DEBUG("Passed : MNBTightFlaggedPartions"); + flag |= 0x20; + } + + ATH_MSG_DEBUG("got the flag : " << (unsigned int)flag); + + if ( (flag & m_mask) != 0x0 ) { + ATH_MSG_DEBUG("LAr Noise detected : "); + pass = true; + } + else ATH_MSG_DEBUG("LAr Noise not detected!"); + + return pass; +} diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstHypoToolInc.h b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstHypoToolInc.h new file mode 100644 index 0000000000000000000000000000000000000000..9ecb039f117dc129e4214e6e5c45ac85bbb3f904 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstHypoToolInc.h @@ -0,0 +1,53 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef TRIGCALOHYPO_TRIGLARNOISEBURSTALGOHYPOTOOLINC_H +#define TRIGCALOHYPO_TRIGLARNOISEBURSTALGOHYPOTOOLINC_H 1 + +//#include "GaudiKernel/IAlgTool.h" +#include "CLHEP/Units/SystemOfUnits.h" +#include "CaloEvent/CaloCellContainer.h" + +#include "TrigSteeringEvent/TrigRoiDescriptor.h" +#include "AthenaBaseComps/AthAlgTool.h" +#include "AthenaMonitoringKernel/GenericMonitoringTool.h" +#include "TrigCompositeUtils/HLTIdentifier.h" +#include "TrigCompositeUtils/TrigCompositeUtils.h" +#include "TrigCaloHypo/ITrigLArNoiseBurstHypoTool.h" +#include "CaloInterface/ILArNoisyROTool.h" + +/** + * @class Implementation of the CaloCell Noise Burst selection + * @brief + **/ + +class TrigLArNoiseBurstHypoToolInc : public extends<AthAlgTool, ITrigLArNoiseBurstHypoTool> { + public: + TrigLArNoiseBurstHypoToolInc( const std::string& type, + const std::string& name, + const IInterface* parent ); + + virtual ~TrigLArNoiseBurstHypoToolInc(); + virtual StatusCode initialize() override; + + virtual StatusCode decide( std::vector<ITrigLArNoiseBurstHypoTool::CaloCellNoiseInfo>& input ) const override; + + virtual bool decide( const ITrigLArNoiseBurstHypoTool::CaloCellNoiseInfo& i ) const override; + + + private: + ToolHandle<ILArNoisyROTool> m_noisyROTool; + HLT::Identifier m_decisionId; + + Gaudi::Property< bool > m_badFEBFlaggedPartitions { this, "BadFEBFlaggedPartitions" , true, "flag to be used for NB detection" }; + Gaudi::Property< bool > m_satTightFlaggedPartitions { this, "SatTightFlaggedPartitions", true, "flag to be used for NB detection" }; + Gaudi::Property< bool > m_mNBLooseFlaggedPartitions { this, "MNBLooseFlaggedPartitions", true, "flag to be used for NB detection" }; + Gaudi::Property< bool > m_mNBTightFlaggedPartitions { this, "MNBTightFlaggedPartitions", true, "flag to be used for NB detection" }; + Gaudi::Property< bool > m_mNBTight_PsVetoFlaggedPartitions{ this, "MNBTight_PsVetoFlaggedPartitions", true, "flag to be used for NB detection" }; + + //ToolHandle< GenericMonitoringTool > m_monTool { this, "MonTool", "", "Monitoring tool" }; + unsigned int m_mask; + +}; + +#endif //> !TRIGCALOHYPO_TRIGLARNOISEBURSTHYPOTOOLINC_H diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/src/components/TrigCaloHypo_entries.cxx b/Trigger/TrigHypothesis/TrigCaloHypo/src/components/TrigCaloHypo_entries.cxx index b0c936e6bfca8a7c6c1295cf71b4f5b3ca703967..a2e9f2991e1288e0db8d2f5f5da0e095992885e0 100644 --- a/Trigger/TrigHypothesis/TrigCaloHypo/src/components/TrigCaloHypo_entries.cxx +++ b/Trigger/TrigHypothesis/TrigCaloHypo/src/components/TrigCaloHypo_entries.cxx @@ -1,7 +1,11 @@ #include "../TrigEFCaloHypoNoise.h" #include "../TrigL2JetHypo.h" +#include "../TrigLArNoiseBurstHypoToolInc.h" +#include "../TrigLArNoiseBurstAlg.h" DECLARE_COMPONENT( TrigEFCaloHypoNoise ) +DECLARE_COMPONENT( TrigLArNoiseBurstHypoToolInc ) +DECLARE_COMPONENT( TrigLArNoiseBurstAlg ) DECLARE_COMPONENT( TrigL2JetHypo ) diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaPrecisionEtcutHypoTool.py b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaPrecisionEtcutHypoTool.py new file mode 100644 index 0000000000000000000000000000000000000000..93df21968a2e17c9de87e810adf32b4c7c6b16d3 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaPrecisionEtcutHypoTool.py @@ -0,0 +1,27 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +def _IncTool(name, threshold, sel): + + from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaPrecisionEtcutHypoTool + + tool = TrigEgammaPrecisionEtcutHypoTool( name ) + + tool.AcceptAll = True + return tool + + +def TrigEgammaPrecisionEtcutHypoToolFromDict( d ): + """ Use menu decoded chain dictionary to configure the tool """ + cparts = [i for i in d['chainParts'] if ((i['signature']=='Electron') or (i['signature']=='Photon'))] + + def __th(cpart): + return cpart['threshold'] + + def __sel(cpart): + return cpart['addInfo'][0] if cpart['addInfo'] else cpart['IDinfo'] + + name = d['chainName'] + + return _IncTool( name, __th( cparts[0]), __sel( cparts[0] ) ) + + diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/ITrigEgammaPrecisionEtcutHypoTool.h b/Trigger/TrigHypothesis/TrigEgammaHypo/src/ITrigEgammaPrecisionEtcutHypoTool.h new file mode 100644 index 0000000000000000000000000000000000000000..ef688ae2bbb68e8562d98510e966f34b5d554923 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/ITrigEgammaPrecisionEtcutHypoTool.h @@ -0,0 +1,56 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef TRIGEGAMMAHYPO_ITPRECISIONETCUTHYPOTOOL_H +#define TRIGEGAMMAHYPO_ITPRECISIONETCUTHYPOTOOL_H 1 + +#include "GaudiKernel/IAlgTool.h" +#include "TrigCompositeUtils/TrigCompositeUtils.h" + + +/** + * @class Base for tools doing precision Etcut Hypo selection + * @brief + **/ + +class ITrigEgammaPrecisionEtcutHypoTool + : virtual public ::IAlgTool +{ + + public: + DeclareInterfaceID(ITrigEgammaPrecisionEtcutHypoTool, 1, 0); + virtual ~ITrigEgammaPrecisionEtcutHypoTool(){} + + struct ClusterInfo { + ClusterInfo( TrigCompositeUtils::Decision* d, const TrigCompositeUtils::Decision* previousDecision ) + : decision( d ), + previousDecisionIDs( TrigCompositeUtils::decisionIDs( previousDecision ).begin(), + TrigCompositeUtils::decisionIDs( previousDecision ).end() ) + {} + + TrigCompositeUtils::Decision* decision; + const TrigCompositeUtils::DecisionIDContainer previousDecisionIDs; + }; + + + /** + * @brief decides upon all clusters + * Note it is for a reason a non-virtual method, it is an interface in gaudi sense and implementation. + * There will be many tools called often to perform this quick operation and we do not want to pay for polymorphism which we do not need to use. + * Will actually see when N obj hypos will enter the scene + **/ + virtual StatusCode decide( std::vector<ClusterInfo>& input ) const = 0; + + /** + * @brief Makes a decision for a single object + * The decision needs to be returned + **/ + virtual bool decide() const = 0; + + protected: + + +}; + + +#endif //> !TRIGEGAMMAHYPO_ITPRECISIONETCUTHYPOTOOL_H diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoAlgMT.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoAlgMT.cxx new file mode 100644 index 0000000000000000000000000000000000000000..26f4ee9e12fd162111844f822088b43ab1733814 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoAlgMT.cxx @@ -0,0 +1,69 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#include "Gaudi/Property.h" +#include "TrigEgammaPrecisionEtcutHypoAlgMT.h" +#include "TrigCompositeUtils/HLTIdentifier.h" +#include "TrigCompositeUtils/TrigCompositeUtils.h" +#include "AthViews/ViewHelper.h" + +using namespace TrigCompositeUtils; + +TrigEgammaPrecisionEtcutHypoAlgMT::TrigEgammaPrecisionEtcutHypoAlgMT( const std::string& name, + ISvcLocator* pSvcLocator ) : + ::HypoBase( name, pSvcLocator ) {} + + +StatusCode TrigEgammaPrecisionEtcutHypoAlgMT::initialize() { + ATH_CHECK( m_hypoTools.retrieve() ); + + ATH_CHECK( m_clustersKey.initialize() ); + renounce( m_clustersKey );// clusters are made in views, so they are not in the EvtStore: hide them + + return StatusCode::SUCCESS; +} + +StatusCode TrigEgammaPrecisionEtcutHypoAlgMT::execute( const EventContext& context ) const { + ATH_MSG_DEBUG ( "Executing " << name() << "..." ); + auto previousDecisionsHandle = SG::makeHandle( decisionInput(), context ); + ATH_CHECK( previousDecisionsHandle.isValid() ); + ATH_MSG_DEBUG( "Running with "<< previousDecisionsHandle->size() <<" previous decisions"); + + + // new decisions + + // new output decisions + SG::WriteHandle<DecisionContainer> outputHandle = createAndStore(decisionOutput(), context ); + auto outputDecision = outputHandle.ptr(); + + // input for decision + std::vector<ITrigEgammaPrecisionEtcutHypoTool::ClusterInfo> toolInput; + + // loop over previous decisions + size_t counter=0; + for ( auto previousDecision: *previousDecisionsHandle ) { + + const auto featureEL = findLink<xAOD::CaloClusterContainer>( previousDecision, featureString() ); + ATH_CHECK(featureEL.isValid()); + auto d = newDecisionIn( outputDecision, name() ); + d->setObjectLink<>( featureString(), featureEL.link ); + + TrigCompositeUtils::linkToPrevious( d, decisionInput().key(), counter ); + toolInput.emplace_back( d, previousDecision ); + + ATH_MSG_DEBUG( "previous decision to new decision " << counter << " for roi " ); + counter++; + + } + + ATH_MSG_DEBUG( "Found "<<toolInput.size()<<" inputs to tools"); + + + for ( auto& tool: m_hypoTools ) { + ATH_CHECK( tool->decide( toolInput ) ); + } + + ATH_CHECK( hypoBaseOutputProcessing(outputHandle) ); + return StatusCode::SUCCESS; +} diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoAlgMT.h b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoAlgMT.h new file mode 100644 index 0000000000000000000000000000000000000000..dd156fca0673a4e0351d99ea423f041550617b9d --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoAlgMT.h @@ -0,0 +1,40 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef TRIGEGAMMAHYPO_TRIGPRECISIONETCUTHYPOALGMT_PRECISION_H +#define TRIGEGAMMAHYPO_TRIGPRECISIONETCUTHYPOALGMT_PRECISION_H 1 + +#include <string> + +#include "AthenaBaseComps/AthReentrantAlgorithm.h" +#include "AthViews/View.h" +#include "TrigSteeringEvent/TrigRoiDescriptorCollection.h" +#include "xAODTrigCalo/TrigEMClusterContainer.h" +#include "xAODBase/IParticleContainer.h" +#include "xAODCaloEvent/CaloClusterContainer.h" +#include "TrigCompositeUtils/TrigCompositeUtils.h" +#include "DecisionHandling/HypoBase.h" + +#include "ITrigEgammaPrecisionEtcutHypoTool.h" + +/** + * @class TrigEgammaPrecisionEtcutHypoAlgMT + * @brief Implements egamma calo selection for the new HLT framework + **/ +class TrigEgammaPrecisionEtcutHypoAlgMT : public ::HypoBase { + public: + + TrigEgammaPrecisionEtcutHypoAlgMT( const std::string& name, ISvcLocator* pSvcLocator ); + + virtual StatusCode initialize() override; + virtual StatusCode execute( const EventContext& context ) const override; + + private: + ToolHandleArray< ITrigEgammaPrecisionEtcutHypoTool > m_hypoTools { this, "HypoTools", {}, "Hypo tools" }; + + SG::ReadHandleKey< xAOD::CaloClusterContainer > m_clustersKey { this, "CaloClusters", "CaloClusters", "CaloClusters in roi" }; + + +}; + +#endif //> !TRIGEGAMMAHYPO_TESTTRIGPRECISIONCUTHYPOALG_H diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoTool.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoTool.cxx new file mode 100644 index 0000000000000000000000000000000000000000..06c01a5375c530125829d4ff716da55909a4543c --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoTool.cxx @@ -0,0 +1,60 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#include <algorithm> +#include "TrigCompositeUtils/HLTIdentifier.h" +#include "TrigCompositeUtils/Combinators.h" +#include "AthenaMonitoringKernel/Monitored.h" + +#include "TrigEgammaPrecisionEtcutHypoTool.h" + + +using namespace TrigCompositeUtils; + +TrigEgammaPrecisionEtcutHypoTool::TrigEgammaPrecisionEtcutHypoTool( const std::string& type, + const std::string& name, + const IInterface* parent ) + : base_class( type, name, parent ), + m_decisionId( HLT::Identifier::fromToolName( name ) ) {} + +StatusCode TrigEgammaPrecisionEtcutHypoTool::initialize() { + ATH_MSG_DEBUG( "Initialization completed successfully" ); + + ATH_MSG_DEBUG( "Tool configured for chain/id: " << m_decisionId ); + + if ( not m_monTool.name().empty() ) + CHECK( m_monTool.retrieve() ); + + return StatusCode::SUCCESS; +} + + + +TrigEgammaPrecisionEtcutHypoTool::~TrigEgammaPrecisionEtcutHypoTool(){} + + +bool TrigEgammaPrecisionEtcutHypoTool::decide() const { + + bool pass = false; + + if ( m_acceptAll ) { + pass = true; + ATH_MSG_DEBUG( "AcceptAll property is set: taking all events" ); + } else { + pass = false; + ATH_MSG_DEBUG( "AcceptAll property not set: applying selection" ); + } + + return pass; + +} + +StatusCode TrigEgammaPrecisionEtcutHypoTool::decide( std::vector<ClusterInfo>& input ) const { + for ( auto& i: input ) { + if ( i.previousDecisionIDs.count( m_decisionId.numeric() ) == 0 ) continue; + addDecisionID( m_decisionId, i.decision ); + } + return StatusCode::SUCCESS; +} + diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoTool.h b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoTool.h new file mode 100644 index 0000000000000000000000000000000000000000..8cc2373244308040f8f557ac091759cbcb5b752f --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionEtcutHypoTool.h @@ -0,0 +1,46 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef TRIGEGAMMAHYPO_PRECISIONETCUTHYPOTOOL_H +#define TRIGEGAMMAHYPO_PRECISIONETCUTHYPOTOOL_H 1 + +//#include "GaudiKernel/IAlgTool.h" +#include "CLHEP/Units/SystemOfUnits.h" +#include "xAODTrigCalo/TrigEMCluster.h" +#include "xAODBase/IParticleContainer.h" +#include "xAODCaloEvent/CaloClusterContainer.h" +#include "TrigSteeringEvent/TrigRoiDescriptor.h" +#include "AthenaBaseComps/AthAlgTool.h" +#include "AthenaMonitoringKernel/GenericMonitoringTool.h" +#include "TrigCompositeUtils/HLTIdentifier.h" +#include "TrigCompositeUtils/TrigCompositeUtils.h" +#include "ITrigEgammaPrecisionEtcutHypoTool.h" + +/** + * @class Implementation of the Egamma selection for CaloClusters + * @brief + **/ + +class TrigEgammaPrecisionEtcutHypoTool : public extends<AthAlgTool, ITrigEgammaPrecisionEtcutHypoTool> { + public: + TrigEgammaPrecisionEtcutHypoTool( const std::string& type, const std::string& name, const IInterface* parent ); + + virtual ~TrigEgammaPrecisionEtcutHypoTool(); + virtual StatusCode initialize() override; + + virtual StatusCode decide( std::vector<ITrigEgammaPrecisionEtcutHypoTool::ClusterInfo>& input ) const override; + + virtual bool decide() const override; + + private: + HLT::Identifier m_decisionId; + + //Calorimeter electron ID cuts + Gaudi::Property< bool > m_acceptAll { this, "AcceptAll", false , "Ignore selection" }; + + ToolHandle< GenericMonitoringTool > m_monTool { this, "MonTool", "", "Monitoring tool" }; + int findCutIndex( float eta ) const; +}; + +#endif //> !TRIGEGAMMAHYPO_PRECISIONETCUTHYPOTOOL_H + diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/components/TrigEgammaHypo_entries.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/components/TrigEgammaHypo_entries.cxx index 07f91d74934353e19d2218be9fb416383aa1ae40..49bbfc74646a55102ad3fadda4199bd5822f33aa 100644 --- a/Trigger/TrigHypothesis/TrigEgammaHypo/src/components/TrigEgammaHypo_entries.cxx +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/components/TrigEgammaHypo_entries.cxx @@ -16,6 +16,7 @@ #include "../TrigEgammaFastCaloHypoAlgMT.h" #include "../TrigEgammaFastCaloHypoToolInc.h" #include "../TrigEgammaPrecisionCaloHypoToolInc.h" +#include "../TrigEgammaPrecisionEtcutHypoTool.h" #include "../TrigEgammaPrecisionPhotonHypoToolInc.h" #include "../TrigEgammaPrecisionElectronHypoToolInc.h" #include "../TrigEgammaFastElectronHypoTool.h" @@ -24,6 +25,7 @@ #include "../TrigEgammaFastPhotonHypoAlgMT.h" #include "../TrigEgammaFastPhotonHypoTool.h" #include "../TrigEgammaPrecisionCaloHypoAlgMT.h" +#include "../TrigEgammaPrecisionEtcutHypoAlgMT.h" #include "../TrigEgammaPrecisionPhotonHypoAlgMT.h" #include "../TrigEgammaPrecisionElectronHypoAlgMT.h" #include "../TrigEgammaMassHypoTool.h" @@ -49,12 +51,14 @@ DECLARE_COMPONENT( TrigEgammaFastElectronHypoAlgMT ) DECLARE_COMPONENT( TrigEgammaFastPhotonHypoAlgMT ) DECLARE_COMPONENT( TrigEgammaFastCaloHypoToolInc ) DECLARE_COMPONENT( TrigEgammaPrecisionCaloHypoToolInc ) +DECLARE_COMPONENT( TrigEgammaPrecisionEtcutHypoTool ) DECLARE_COMPONENT( TrigEgammaPrecisionPhotonHypoToolInc ) DECLARE_COMPONENT( TrigEgammaPrecisionElectronHypoToolInc ) DECLARE_COMPONENT( TrigEgammaFastElectronHypoTool ) DECLARE_COMPONENT( TrigEgammaFastElectronFexMT ) DECLARE_COMPONENT( TrigEgammaFastPhotonHypoTool ) DECLARE_COMPONENT( TrigEgammaPrecisionCaloHypoAlgMT ) +DECLARE_COMPONENT( TrigEgammaPrecisionEtcutHypoAlgMT ) DECLARE_COMPONENT( TrigEgammaPrecisionPhotonHypoAlgMT ) DECLARE_COMPONENT( TrigEgammaPrecisionElectronHypoAlgMT ) DECLARE_COMPONENT( TrigEgammaMassHypoTool ) diff --git a/Trigger/TrigHypothesis/TrigHypoCommonTools/TrigHypoCommonTools/L1InfoHypoTool.h b/Trigger/TrigHypothesis/TrigHypoCommonTools/TrigHypoCommonTools/L1InfoHypoTool.h index 0a57b49eb7fa8843de80cea0a3a23cba71cc08e0..0f2a20c5afd874865d871e80330678ec1be9b7f9 100644 --- a/Trigger/TrigHypothesis/TrigHypoCommonTools/TrigHypoCommonTools/L1InfoHypoTool.h +++ b/Trigger/TrigHypothesis/TrigHypoCommonTools/TrigHypoCommonTools/L1InfoHypoTool.h @@ -8,7 +8,7 @@ #include "Gaudi/Property.h" #include "GaudiKernel/ToolHandle.h" #include "AthenaBaseComps/AthAlgTool.h" -#include "L1Decoder/CTPUnpackingTool.h" +#include "L1Decoder/ICTPUnpackingTool.h" #include "IL1InfoHypoTool.h" @@ -26,7 +26,7 @@ public: private: HLT::Identifier m_decisionId; Gaudi::Property <std::vector<std::string>> m_l1ItemNames {this, "L1ItemNames"}; - ToolHandle <CTPUnpackingTool> m_ctpUnpackingTool {this, "CTPUnpackingTool", "CTPUnpackingTool"}; + ToolHandle <ICTPUnpackingTool> m_ctpUnpackingTool {this, "CTPUnpackingTool", "CTPUnpackingTool"}; }; #endif //TRIGHYPOCOMMONTOOLS_L1INFOHYPOTOOL_H \ No newline at end of file diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/CMakeLists.txt b/Trigger/TrigMonitoring/TrigEgammaMonitoring/CMakeLists.txt index 4dceac4efa05d78dd0a87dfd1701925c651ea752..8254c42c5355f5e143a94da731e818b44d44b2af 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/CMakeLists.txt +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/CMakeLists.txt @@ -12,7 +12,7 @@ atlas_add_component( TrigEgammaMonitoring src/*.cxx src/components/*.cxx INCLUDE_DIRS ${Boost_INCLUDE_DIRS} - LINK_LIBRARIES AthenaMonitoringKernelLib AthenaMonitoringLib EgammaAnalysisInterfacesLib GaudiKernel PATCoreLib StoreGateLib TrigConfxAODLib TrigDecisionToolLib TrigEgammaAnalysisToolsLib TrigEgammaMatchingToolLib xAODEgamma xAODEventInfo xAODJet xAODMissingET xAODTracking xAODTrigCalo xAODTrigEgamma xAODTrigger xAODTruth ) + LINK_LIBRARIES AthenaMonitoringKernelLib AthenaMonitoringLib EgammaAnalysisInterfacesLib GaudiKernel PATCoreLib StoreGateLib TrigConfxAODLib TrigDecisionToolLib TrigEgammaAnalysisToolsLib TrigEgammaMatchingToolLib xAODEgamma xAODEventInfo xAODJet xAODMissingET xAODTracking xAODTrigCalo xAODTrigEgamma xAODTrigger xAODTruth egammaRecEvent) # Install files from the package: atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py index cff20bc4b88891adee7ae72d0244954fdc972bf1..3a1fc5ff3b3369726061c1a05c8fc0b966d08914 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py @@ -175,6 +175,11 @@ class TrigEgammaMonAlgBuilder: ] monitoring_photon = [ + 'HLT_g20_loose_L1EM15VH', + 'HLT_g20_medium_L1EM15VH', + 'HLT_g20_tight_L1EM15VH', + 'HLT_g20_tight_icalotight_L1EM15VH', + 'HLT_g20_tight_icalomedium_L1EM15VH', 'HLT_g20_tight_icaloloose_L1EM15VH', 'HLT_g22_tight_L1EM15VH', 'HLT_g25_etcut_L1EM20VH', @@ -187,8 +192,12 @@ class TrigEgammaMonAlgBuilder: monitoringTP_electron = [ 'HLT_e24_lhvloose_L1EM20VH', + 'HLT_e26_lhloose_L1EM22VHI', + 'HLT_e26_lhmedium_L1EM22VHI', 'HLT_e26_lhtight_L1EM22VHI', 'HLT_e26_lhtight_ivarloose_L1EM22VHI', + 'HLT_e26_lhtight_ivarmedium_L1EM22VHI', + 'HLT_e26_lhtight_ivartight_L1EM22VHI', 'HLT_e60_lhmedium_L1EM22VHI', 'HLT_e140_lhloose_L1EM22VHI' ] diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/egammaMonitorPrecisionConfig.py b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/egammaMonitorPrecisionConfig.py index 630917dadddec164eeb5650617e1b9b25bdd8ef4..5e485ce253f5b44072092c4d3c1a2f2cd96f81c8 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/egammaMonitorPrecisionConfig.py +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/egammaMonitorPrecisionConfig.py @@ -71,3 +71,22 @@ def egammaMonitorPrecisionCfg(name): defineHistogram('ptcone40', type='TH1F', path='EXPERT', title="count;ptcone40",xbins=50, xmin=0, xmax=10 ), defineHistogram('topoetcone20', type='TH1F', path='EXPERT',title="count;topoetcone20[GeV]",xbins=50, xmin=-10, xmax=50 )] return monTool_photon + + +def egammaMonitorSuperClusterCfg(name): + + from math import pi + + from AthenaMonitoringKernel.GenericMonitoringTool import GenericMonitoringTool, defineHistogram + monTool = GenericMonitoringTool("MonTool_"+name) + monTool.Histograms = [ + #calo cluster variables monitoring + defineHistogram('et', type='TH1D', path='EXPERT', title="E_{T}; E_{T} [GeV]; Entries", xbins= 150, xmin= 0.0, xmax= 200.0), + defineHistogram('eta', type='TH1D', path='EXPERT', title="#eta; #eta; Entries", xbins= 50, xmin=-3.0, xmax= 3.0) , + defineHistogram('phi', type='TH1D', path='EXPERT', title="#phi; #phi; Entries", xbins= 64, xmin= -pi, xmax= pi), + defineHistogram('container_size', type='TH1D', path='EXPERT', title="Container Size; Number of Clusters; Entries", xbins=2001, xmin=-0.5, xmax=2000.5), + defineHistogram('clusterSize', type='TH1D', path='EXPERT', title="Cluster Size; Type; Entries", xbins= 13, xmin= 0.5, xmax= 13.5), + defineHistogram('signalState', type='TH1D', path='EXPERT', title="Signal State; Signal State; Entries", xbins= 4, xmin=-1.5, xmax= 2.5)] + + return monTool + diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/components/TrigEgammaMonitoring_entries.cxx b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/components/TrigEgammaMonitoring_entries.cxx index f58f57546ecf6be1956af11420ec189dd90a887a..9da4ec18fb505412b82aaf134ebe9a024e857abe 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/components/TrigEgammaMonitoring_entries.cxx +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/components/TrigEgammaMonitoring_entries.cxx @@ -5,6 +5,7 @@ #include "../TrigEgammaMonitorTagAndProbeAlgorithm.h" #include "../egammaMonitorElectronAlgorithm.h" #include "../egammaMonitorPhotonAlgorithm.h" +#include "../egammaMonitorSuperClusterAlgorithm.h" DECLARE_COMPONENT(TrigEgammaMonitorBaseAlgorithm) DECLARE_COMPONENT(TrigEgammaMonitorAnalysisAlgorithm) @@ -13,4 +14,5 @@ DECLARE_COMPONENT(TrigEgammaMonitorPhotonAlgorithm) DECLARE_COMPONENT(TrigEgammaMonitorTagAndProbeAlgorithm) DECLARE_COMPONENT(egammaMonitorElectronAlgorithm) DECLARE_COMPONENT(egammaMonitorPhotonAlgorithm) +DECLARE_COMPONENT(egammaMonitorSuperClusterAlgorithm) diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorElectronAlgorithm.cxx b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorElectronAlgorithm.cxx index f673ba2dfb9d07a12204a0c5208b670bdd17e414..146cd18b250b7f3dac338f508cb92b0dd607e11e 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorElectronAlgorithm.cxx +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorElectronAlgorithm.cxx @@ -21,6 +21,8 @@ StatusCode egammaMonitorElectronAlgorithm::initialize() { ATH_CHECK(m_electronsKey.initialize()); + m_ptcone20Key = m_electronsKey.key() + ".ptcone20"; + ATH_CHECK(m_ptcone20Key.initialize()); if (!m_monTool.empty()) CHECK(m_monTool.retrieve()); return StatusCode::SUCCESS; } @@ -133,15 +135,23 @@ void egammaMonitorElectronAlgorithm::filltopoElectronIsolation( const EventConte auto ptcone30_col = Monitored::Collection("ptcone30", ptcone30_vec); auto ptcone40_col = Monitored::Collection("ptcone40", ptcone40_vec); - - for (const auto& electron : *electrons) { + for (const xAOD::Electron* electron : *electrons){ + + val = 0; + electron->isolationValue(val,xAOD::Iso::topoetcone20); + topoetcone20_vec.push_back( val/Gaudi::Units::GeV ); - topoetcone20_vec.push_back( electron->isolationValue(val,xAOD::Iso::topoetcone20)/Gaudi::Units::GeV); - ptcone20_vec.push_back(electron->isolationValue(val,xAOD::Iso::ptcone20)); - ptcone30_vec.push_back(electron->isolationValue(val,xAOD::Iso::ptcone30)); - ptcone40_vec.push_back(electron->isolationValue(val,xAOD::Iso::ptcone40)); + val = 0; + electron->isolationValue(val,xAOD::Iso::ptcone20); + ptcone20_vec.push_back( val/Gaudi::Units::GeV ); + val = 0; + electron->isolationValue(val,xAOD::Iso::ptcone30); + ptcone30_vec.push_back( val/Gaudi::Units::GeV ); + val = 0; + electron->isolationValue(val,xAOD::Iso::ptcone40); + ptcone40_vec.push_back( val/Gaudi::Units::GeV ); } auto mon = Monitored::Group(m_monTool,ptcone20_col, ptcone30_col, ptcone40_col, topoetcone20_col); diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorElectronAlgorithm.h b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorElectronAlgorithm.h index 28b3255bec6effe51d13943ef2402012bac4cf77..de9e0c2bc353f1e33e0d6e181fbcf8565f683d49 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorElectronAlgorithm.h +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorElectronAlgorithm.h @@ -21,6 +21,7 @@ #include "xAODTrigger/EmTauRoIContainer.h" #include "StoreGate/ReadHandleKey.h" #include "StoreGate/ReadCondHandleKey.h" +#include "StoreGate/ReadDecorHandleKey.h" #include "AthenaBaseComps/AthAlgorithm.h" #include "StoreGate/DataHandle.h" #include "AthenaMonitoringKernel/Monitored.h" @@ -49,6 +50,7 @@ class egammaMonitorElectronAlgorithm: public AthAlgorithm private: SG::ReadHandleKey<xAOD::ElectronContainer> m_electronsKey{ this, "ElectronKey", "Electrons", ""}; + SG::ReadDecorHandleKey<xAOD::ElectronContainer> m_ptcone20Key{ this, "ElectronPtcone20Key", "Electrons.ptcone20", ""}; ToolHandle<GenericMonitoringTool> m_monTool{this,"MonTool","","Monitoring tool"}; }; diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorSuperClusterAlgorithm.cxx b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorSuperClusterAlgorithm.cxx new file mode 100644 index 0000000000000000000000000000000000000000..80fff81ecfd459e24c1b0048f005af65fed5f888 --- /dev/null +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorSuperClusterAlgorithm.cxx @@ -0,0 +1,77 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + */ + +#include "egammaMonitorSuperClusterAlgorithm.h" +#include "xAODEgamma/EgammaContainer.h" +#include "xAODEgamma/Electron.h" +#include "xAODEgamma/Egamma.h" +#include "xAODEgamma/ElectronAuxContainer.h" +#include "xAODEgamma/ElectronContainer.h" +#include "xAODCaloEvent/CaloCluster.h" +#include "xAODCaloEvent/CaloClusterContainer.h" +#include "xAODTracking/TrackParticleContainer.h" +#include "xAODTracking/VertexContainer.h" + +#include "StoreGate/ReadHandle.h" +#include "StoreGate/WriteHandle.h" +#include "xAODPrimitives/IsolationType.h" +#include "GaudiKernel/EventContext.h" +#include "StoreGate/ReadCondHandleKey.h" + +#include "egammaRecEvent/egammaRec.h" +#include "egammaRecEvent/egammaRecContainer.h" + +#include "AthenaMonitoringKernel/Monitored.h" +#include "AthenaMonitoringKernel/GenericMonitoringTool.h" +#include "GaudiKernel/SystemOfUnits.h" +#include "GaudiKernel/PhysicalConstants.h" + +egammaMonitorSuperClusterAlgorithm::egammaMonitorSuperClusterAlgorithm( const std::string& name, ISvcLocator* pSvcLocator ): + AthReentrantAlgorithm( name, pSvcLocator ) + +{} + +StatusCode egammaMonitorSuperClusterAlgorithm::initialize() +{ + + ATH_CHECK(m_inputEgammaRecContainerKey.initialize()); + if (!m_monTool.empty()) CHECK(m_monTool.retrieve()); + return StatusCode::SUCCESS; +} + +StatusCode egammaMonitorSuperClusterAlgorithm::execute(const EventContext& ctx) const +{ + + fillSuperClusterQuantities(ctx); + + return StatusCode::SUCCESS; +} + + +void egammaMonitorSuperClusterAlgorithm::fillSuperClusterQuantities( const EventContext& ctx) const{ + + SG::ReadHandle<EgammaRecContainer> egammaRec(m_inputEgammaRecContainerKey, ctx); + ATH_MSG_DEBUG("Fill cluster quantities: "); + + std::vector<float> et_vec, eta_vec, phi_vec, clusterSize_vec, signalState_vec; + + auto et_col = Monitored::Collection("et" , et_vec); + auto eta_col = Monitored::Collection("eta" , eta_vec); + auto phi_col = Monitored::Collection("phi", phi_vec); + auto clusterSize_col = Monitored::Collection("clusterSize" ,clusterSize_vec); + auto signalState_col = Monitored::Collection("signalState" ,signalState_vec); + + for (const auto& eg : *egammaRec) { + + et_vec.push_back(eg->caloCluster()->et()/Gaudi::Units::GeV); + eta_vec.push_back(eg->caloCluster()->eta()); + phi_vec.push_back(eg->caloCluster()->phi()); + clusterSize_vec.push_back(eg->caloCluster()->clusterSize()); + signalState_vec.push_back(eg->caloCluster()->signalState()); + + } + auto mon = Monitored::Group(m_monTool, et_col,eta_col,phi_col, clusterSize_col,signalState_col); + ATH_MSG_DEBUG("SuperCluster - Online Monitoring in Reconstruction ..."); + +} diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorSuperClusterAlgorithm.h b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorSuperClusterAlgorithm.h new file mode 100644 index 0000000000000000000000000000000000000000..56bd54278df554fb86a9b05b4d016a3b5de6b3d0 --- /dev/null +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/egammaMonitorSuperClusterAlgorithm.h @@ -0,0 +1,60 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef egammaMonitorSuperClusterAlgorithm_H +#define egammaMonitorSuperClusterAlgorithm_H + +#include "AthenaBaseComps/AthReentrantAlgorithm.h" +#include "AthenaBaseComps/AthAlgorithm.h" +#include "egammaMonitorSuperClusterAlgorithm.h" +#include "xAODEventInfo/EventInfo.h" +#include "xAODTruth/TruthParticleContainer.h" +#include "xAODEgamma/Egamma.h" +#include "xAODEgamma/EgammaContainer.h" +#include "xAODEgamma/EgammaxAODHelpers.h" +#include "xAODEgamma/ElectronContainer.h" +#include "xAODEgamma/PhotonContainer.h" +#include "GaudiKernel/EventContext.h" +#include "egammaRecEvent/egammaRec.h" +#include "egammaRecEvent/egammaRecContainer.h" + +#include "StoreGate/ReadHandleKey.h" +#include "StoreGate/ReadCondHandleKey.h" +#include "StoreGate/DataHandle.h" +#include "AthenaMonitoringKernel/Monitored.h" +#include "AthenaMonitoringKernel/GenericMonitoringTool.h" + +class egammaRec; + +class egammaMonitorSuperClusterAlgorithm: public AthReentrantAlgorithm +{ + + public: + + egammaMonitorSuperClusterAlgorithm( const std::string& name, ISvcLocator* pSvcLocator ); + + virtual StatusCode initialize() override; + virtual StatusCode execute (const EventContext& ctx) const override; + + protected: + + + void fillSuperClusterQuantities(const EventContext& ctx) const; + + + + private: + SG::ReadHandleKey<EgammaRecContainer> m_inputEgammaRecContainerKey{ + this, + "InputEgammaRecContainerName", + "egammaRecCollection", + "input egammaRec container" + }; + + ToolHandle<GenericMonitoringTool> m_monTool{this,"MonTool","","Monitoring tool"}; +}; + + + +#endif diff --git a/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.cxx b/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.cxx index 15c87be8ae846ac67e9188736d97eab98dd14706..0ae9e41f7144166007f6d8b215784eedffd51321 100755 --- a/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.cxx +++ b/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.cxx @@ -724,12 +724,20 @@ void HLTJetMonTool::bookJetHists() { nvar = basicKineVar(varlist,bookvars); levels.clear(); levels.push_back("HLT"); /*levels.push_back("L1");*/ for(JetSigIter k= m_basicHLTTrig.begin(); k != m_basicHLTTrig.end(); ++k ) { - const std::string theDir = HLTdir + "/" + (*k).first; + std::string theDir = HLTdir + "/" + (*k).first; m_monGroups[(*k).first] = theDir; ATH_MSG_DEBUG("Booking histograms for " << theDir); addMonGroup (new MonGroup(this, theDir, run)); setCurrentMonGroup(theDir); bookBasicHists(levels,bookvars); + //Add MonGroup for plots based only on jets passing the chain criteria, + //to be stored in expert folder chain/PassingJets + theDir = HLTdir + "/" + (*k).first + "/PassingJets"; + m_monGroups[(*k).first + "_PJ"] = theDir; + ATH_MSG_DEBUG("Booking histograms for " << theDir); + addMonGroup (new MonGroup(this, theDir, run)); + setCurrentMonGroup(theDir); + bookBasicHists(levels,bookvars); } /* @@ -1855,10 +1863,75 @@ void HLTJetMonTool::fillBasicHLTforChain( const std::string& theChain, double th }// loop over features container } else { // TrigComposite mode + + // First: retrieve all jets in the underlying jet container + // so that we can compare with the Legacy code above + + std::string jetcollname = GetJetCollectionName(theChain); //need to retrieve underlying jet container name - hard-coded function! + const xAOD::JetContainer *jcont = 0; + StatusCode sc = StatusCode::SUCCESS; + sc = evtStore()->retrieve(jcont, jetcollname); + if(sc.isFailure() || !jcont) { + ATH_MSG_INFO ("Could not retrieve JetCollection with key \"" << jetcollname << "\" from TDS" ); + } + else { + ATH_MSG_DEBUG("FOUND JetCollection with key \"" << jetcollname << "\" from TDS" ); + for (const xAOD::Jet* j : *jcont) { + + double e = (j->e())/Gaudi::Units::GeV; + double et = 0., epsilon = 1.e-3; + + if(j->p4().Et() > epsilon) et = (j->p4().Et())/Gaudi::Units::GeV; + + ATH_MSG_DEBUG("jet et = "<<et); + + if(et < epsilon) et = 0; + bool hlt_thr_pass = ( et > thrHLT ); + if(hlt_thr_pass) { + double eta = j->eta(); + double phi = j->phi(); + double m = j->m()/Gaudi::Units::GeV; + float emfrac =1; + float hecfrac =1; + if ((m_isPP || m_isCosmic || m_isMC) && + j->getAttribute<float>(xAOD::JetAttribute::EMFrac, emfrac)) + { + hecfrac = j->getAttribute<float>(xAOD::JetAttribute::HECFrac); + } + + v_thisjet.SetPtEtaPhiE(j->pt()/Gaudi::Units::GeV,j->eta(), j->phi(),j->e()/Gaudi::Units::GeV); + m_v_HLTjet.push_back(v_thisjet); + m_n_index++; + + if((h = hist("HLTJet_Et"))) h->Fill(et, m_lumi_weight); + if((h = hist("HLTJet_HighEt"))) h->Fill(et, m_lumi_weight); + if((h = hist("HLTJet_eta"))) h->Fill(eta, m_lumi_weight); + if((h = hist("HLTJet_phi"))) h->Fill(phi, m_lumi_weight); + if((h = hist("HLTJet_m"))) h->Fill(m, m_lumi_weight); + if((h = hist("HLTJet_emfrac"))) h->Fill(emfrac, m_lumi_weight); + if((h = hist("HLTJet_hecfrac"))) h->Fill(hecfrac, m_lumi_weight); + + if (count==0){ + if((h = hist("HLTJet_Leading_Et"))) h->Fill(et, m_lumi_weight); + } + + if((h2 = hist2("HLTJet_phi_vs_eta"))) h2->Fill(eta,phi,m_lumi_weight); + if((h2 = hist2("HLTJet_E_vs_eta"))) h2->Fill(eta,e,m_lumi_weight); + if((h2 = hist2("HLTJet_E_vs_phi"))) h2->Fill(phi,e,m_lumi_weight); + + }// if hlt threshold + count++; + }// loop over jet container + if((h = hist("HLTJet_n"))) h->Fill(count, m_lumi_weight); + } //else found jetcontainer + m_v_HLTindex.push_back(m_n_index); + // Note: Only getting jets which pass theChain here + // Thus, setting path for plots to a subfolder "/PassingJets" of the chain + setCurrentMonGroup(m_monGroups[Form("%s_PJ",theChain.c_str())]); + count=0; const std::vector< TrigCompositeUtils::LinkInfo<xAOD::JetContainer> > fc = getTDT()->features<xAOD::JetContainer>( chain ); - std::list<const xAOD::Jet*> jetList; //structure needed to sort jets by ET for(const auto& jetLinkInfo : fc) { if (!jetLinkInfo.isValid()) { @@ -1869,7 +1942,7 @@ void HLTJetMonTool::fillBasicHLTforChain( const std::string& theChain, double th const xAOD::Jet *trigjet = dynamic_cast<const xAOD::Jet*>(*j); jetList.push_back( trigjet ); } - auto sort = [] (const xAOD::Jet * j1, const xAOD::Jet * j2) {return j1->p4().Et() > j2->p4().Et(); } ; + auto sort = [] (const xAOD::Jet * j1, const xAOD::Jet * j2) {return j1->p4().Et() > j2->p4().Et(); } ; //can choose different way of sorting! jetList.sort( sort ); for(const xAOD::Jet* j : jetList) { // ATH_MSG_INFO("Loop Over Features"); @@ -1893,10 +1966,6 @@ void HLTJetMonTool::fillBasicHLTforChain( const std::string& theChain, double th { hecfrac = j->getAttribute<float>(xAOD::JetAttribute::HECFrac); } - - v_thisjet.SetPtEtaPhiE(j->pt()/Gaudi::Units::GeV,j->eta(), j->phi(),j->e()/Gaudi::Units::GeV); - m_v_HLTjet.push_back(v_thisjet); - m_n_index++; if((h = hist("HLTJet_Et"))) h->Fill(et, m_lumi_weight); if((h = hist("HLTJet_HighEt"))) h->Fill(et, m_lumi_weight); @@ -3302,3 +3371,17 @@ int HLTJetMonTool::basicKineVar(const std::string& hist, std::vector<std::string return retval; } // ------------------------------------------------------------------------------------ +std::string HLTJetMonTool::GetJetCollectionName(const std::string& theChain) { + std::string jetcoll = "HLT_AntiKt4EMTopoJets_subjesIS"; //default small-R EMTopo jets + if (theChain.find("a10t") != std::string::npos) jetcoll = "HLT_AntiKt10LCTopoTrimmedPtFrac5SmallR20Jets_jes"; + else if(theChain.find("a10r") != std::string::npos) jetcoll = "HLT_AntiKt10JetRCJets_subjesIS"; + else if(theChain.find("a10") != std::string::npos) jetcoll = "HLT_AntiKt10LCTopoJets_subjes"; //default large-R jets + else if(theChain.find("ftf") != std::string::npos) { //EMPFlow jets + if (theChain.find("subjesgsc") != std::string::npos) jetcoll = "HLT_AntiKt4EMPFlowJets_subjesgscIS_ftf"; + else if (theChain.find("pf_nojcalib") != std::string::npos) jetcoll = "HLT_AntiKt4EMPFlowJets_nojcalib_ftf"; + else if (theChain.find("csskpf_nojcalib") != std::string::npos) jetcoll = "HLT_AntiKt4EMPFlowCSSKJets_nojcalib_ftf"; + else jetcoll = "HLT_AntiKt4EMPFlowJets_subjesIS_ftf"; //default small-R EMPFlow + } + return jetcoll; +} +// ------------------------------------------------------------------------------------ diff --git a/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.h b/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.h index 8ed6e84559a7d9ad192a3d97dee4f1ff2fe14e81..bb1212fb33343d2c976c5960fffcffdf37af608b 100755 --- a/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.h +++ b/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.h @@ -205,6 +205,7 @@ class HLTJetMonTool : public IHLTMonTool { void setHistProperties(TH1* h); void set2DHistProperties(TH2* h); int basicKineVar(const std::string& hist, std::vector<std::string>& kinevars); + std::string GetJetCollectionName(const std::string& theChain); void clearVectors(); // offline jet cuts diff --git a/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.cxx b/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.cxx index f6553da429ead9e19844fae4e1a01fd277d02c12..63a93ca8d991ea05a4fd49a05492e860bb166d44 100644 --- a/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.cxx +++ b/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.cxx @@ -3727,7 +3727,7 @@ bool HLTTauMonTool::HLTTauMatching(const std::string & trigItem, const TLorentzV } else { // TrigComposite const std::vector< TrigCompositeUtils::LinkInfo<xAOD::TauJetContainer> > features = - getTDT()->features<xAOD::TauJetContainer>( trig_item_EF, TrigDefs::includeFailedDecisions, "TrigTauRecMerged" ); + getTDT()->features<xAOD::TauJetContainer>( trig_item_EF, TrigDefs::includeFailedDecisions, ".*TrigTauRecMerged_.*" ); for(const auto& tauJetLinkInfo : features){ if (!tauJetLinkInfo.isValid()) { diff --git a/Trigger/TrigSteer/DecisionHandling/python/EmuStepProcessingConfig.py b/Trigger/TrigSteer/DecisionHandling/python/EmuStepProcessingConfig.py index 2bbde0df3d29d700743405ed1c8769474bfe83e3..0d80f0e9ddbc3f5132e09a37b0cbe64071a8d35a 100644 --- a/Trigger/TrigSteer/DecisionHandling/python/EmuStepProcessingConfig.py +++ b/Trigger/TrigSteer/DecisionHandling/python/EmuStepProcessingConfig.py @@ -177,9 +177,7 @@ def generateEmuEvents(): ########################################################################### def generateChainsManually(): - from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import ChainStep - from DecisionHandling.TestUtils import makeChain - + from DecisionHandling.TestUtils import makeChain, makeChainStep doMuon = True doElectron = True @@ -203,21 +201,21 @@ def generateChainsManually(): #step4 mu41 = muMenuSequence(step="4",reconame="v1", hyponame="v1") - step_mu11 = ChainStep("Step1_mu11", [mu11]) - step_mu21 = ChainStep("Step2_mu21", [mu21] ) - step_mu22 = ChainStep("Step2_mu22", [mu22] ) - step_mu31 = ChainStep("Step3_mu31", [mu31] ) - step_mu32 = ChainStep("Step3_mu32", [mu32] ) - step_mu41 = ChainStep("Step4_mu41", [mu41] ) + step_mu11 = makeChainStep("Step1_mu11", [mu11] ) + step_mu21 = makeChainStep("Step2_mu21", [mu21] ) + step_mu22 = makeChainStep("Step2_mu22", [mu22] ) + step_mu31 = makeChainStep("Step3_mu31", [mu31] ) + step_mu32 = makeChainStep("Step3_mu32", [mu32] ) + step_mu41 = makeChainStep("Step4_mu41", [mu41] ) - step_empy= ChainStep("Step2_mu1empty", multiplicity=[]) + step_empy= makeChainStep("Step2_mu1empty", multiplicity=[]) MuChains = [ - makeChain(name='HLT_TestChain8_muv1step_L1MU6', L1Thresholds=["MU6"], ChainSteps=[step_mu11]), + makeChain(name='HLT_TestChain8_muv1step_L1MU6', L1Thresholds=["MU6"], ChainSteps=[step_mu11]), makeChain(name='HLT_TestChain8_muv1_L1MU10', L1Thresholds=["MU10"], ChainSteps=[step_mu11 , step_mu21 , step_mu31, step_mu41] ), makeChain(name='HLT_TestChain20_muv1_L1MU10', L1Thresholds=["MU10"], ChainSteps=[step_mu11 , step_mu21 , step_mu31, step_mu41] ), makeChain(name='HLT_TestChain10_muv2_L1MU10', L1Thresholds=["MU10"], ChainSteps=[step_mu11 , step_mu22 , step_mu31] ), - makeChain(name='HLT_TestChain6_muEmpty2_L1MU6', L1Thresholds=["MU6"], ChainSteps=[step_mu11 , step_empy , step_mu32, step_mu41] ), + makeChain(name='HLT_TestChain6_muEmpty2_L1MU6', L1Thresholds=["MU6"], ChainSteps=[step_mu11 , step_empy , step_mu32, step_mu41] ), ] @@ -238,11 +236,11 @@ def generateChainsManually(): gamm11 = gamMenuSequence("1", reconame="v1", hyponame="v1") ElChains = [ - makeChain(name='HLT_TestChain5_ev1_L1EM3', L1Thresholds=["EM3"], ChainSteps=[ ChainStep("Step1_em11", [el11]), ChainStep("Step2_em21", [el21]), ChainStep("Step3_em31", [el31])] ), - makeChain(name='HLT_TestChain8_ev1_L1EM5', L1Thresholds=["EM5"], ChainSteps=[ ChainStep("Step1_em11", [el11]), ChainStep("Step2_em21", [el21]), ChainStep("Step3_em31", [el31]) ] ), - makeChain(name='HLT_TestChain5_ev2_L1EM7', L1Thresholds=["EM7"], ChainSteps=[ ChainStep("Step1_em11", [el11]), ChainStep("Step2_em22", [el22]) ] ), - makeChain(name='HLT_TestChain5_ev3_L1EM7', L1Thresholds=["EM7"], ChainSteps=[ ChainStep("Step1_em11", [el11]), ChainStep("Step2_em23", [el23]) ] ), - makeChain(name='HLT_TestChain5_gv1_L1EM7', L1Thresholds=["EM7"], ChainSteps=[ ChainStep("Step1_gam11", [gamm11]) ] ) + makeChain(name='HLT_TestChain5_ev1_L1EM3', L1Thresholds=["EM3"], ChainSteps=[ makeChainStep("Step1_em11", [el11]), makeChainStep("Step2_em21", [el21]), makeChainStep("Step3_em31", [el31])] ), + makeChain(name='HLT_TestChain8_ev1_L1EM5', L1Thresholds=["EM5"], ChainSteps=[ makeChainStep("Step1_em11", [el11]), makeChainStep("Step2_em21", [el21]), makeChainStep("Step3_em31", [el31]) ] ), + makeChain(name='HLT_TestChain5_ev2_L1EM7', L1Thresholds=["EM7"], ChainSteps=[ makeChainStep("Step1_em11", [el11]), makeChainStep("Step2_em22", [el22]) ] ), + makeChain(name='HLT_TestChain5_ev3_L1EM7', L1Thresholds=["EM7"], ChainSteps=[ makeChainStep("Step1_em11", [el11]), makeChainStep("Step2_em23", [el23]) ] ), + makeChain(name='HLT_TestChain5_gv1_L1EM7', L1Thresholds=["EM7"], ChainSteps=[ makeChainStep("Step1_gam11", [gamm11]) ] ) ] HLTChains += ElChains @@ -283,52 +281,52 @@ def generateChainsManually(): CombChains =[ # This is an example of a chain running in "serial" makeChain(name='HLT_TestChain6_muv1_TestChain10_ev1_L1MU6_EM5', L1Thresholds=["MU6","EM5"], ChainSteps=[ - ChainStep("Step1_mu_em_serial", [mu11, emptySeq1], multiplicity=[1,1]), - ChainStep("Step2_mu_em_serial", [emptySeq2, el21], multiplicity=[1,1]), - ChainStep("Step3_mu_em_serial", multiplicity=[]), - ChainStep("Step4_mu_em_serial", [mu41, el41], multiplicity=[1,1])] ), + makeChainStep("Step1_mu_em_serial", [mu11, emptySeq1], multiplicity=[1,1]), + makeChainStep("Step2_mu_em_serial", [emptySeq2, el21], multiplicity=[1,1]), + makeChainStep("Step3_mu_em_serial", multiplicity=[]), + makeChainStep("Step4_mu_em_serial", [mu41, el41], multiplicity=[1,1])] ), makeChain(name='HLT_TestChain6_muv2_TestChain8_ev2_L1MU6_EM5', L1Thresholds=["MU6","EM5"], ChainSteps=[ - ChainStep("Step1_mu2_em", [mu12, el11], multiplicity=[1,1]), - ChainStep("Step2_mu_em", [mu21, el21], multiplicity=[1,1])] ), + makeChainStep("Step1_mu2_em", [mu12, el11], multiplicity=[1,1]), + makeChainStep("Step2_mu_em", [mu21, el21], multiplicity=[1,1])] ), makeChain(name='HLT_TestChain5_ev1_TestChain8_ev1_L12EM3', L1Thresholds=["EM3","EM3"], ChainSteps=[ #norun - ChainStep("Step1_2emAs", [el11, el11], multiplicity=[1,1]), - ChainStep("Step2_2emAs", [el21, el21], multiplicity=[1,1]) ]), + makeChainStep("Step1_2emAs", [el11, el11], multiplicity=[1,1]), + makeChainStep("Step2_2emAs", [el21, el21], multiplicity=[1,1]) ]), makeChain(name='HLT_TestChain5_ev1_TestChain8_ev1_2TestChain6_muv1_L1EM3_L1EM5_L12MU6', L1Thresholds=["EM3","EM5","MU6"], ChainSteps=[ - ChainStep("Step1_2em_2mu", [el11,el11,mu11], multiplicity=[1,1,2]), - ChainStep("Step2_2em_2mu", [el21,el21,mu21], multiplicity=[1,1,2]) ]), + makeChainStep("Step1_2em_2mu", [el11,el11,mu11], multiplicity=[1,1,2]), + makeChainStep("Step2_2em_2mu", [el21,el21,mu21], multiplicity=[1,1,2]) ]), makeChain(name='HLT_2TestChain6_muv1_L12MU6', L1Thresholds=["MU6"], ChainSteps=[ - ChainStep("Step1_2mu", [mu11], multiplicity=[2]), - ChainStep("Step2_2mu", [mu21], multiplicity=[2]) ]), + makeChainStep("Step1_2mu", [mu11], multiplicity=[2]), + makeChainStep("Step2_2mu", [mu21], multiplicity=[2]) ]), makeChain(name='HLT_3TestChain6_muv1_L12MU6', L1Thresholds=["MU6"], ChainSteps=[ - ChainStep("Step1_2mu", [mu11], multiplicity=[3]), - ChainStep("Step2_2mu", [mu21], multiplicity=[3]) ]), + makeChainStep("Step1_2mu", [mu11], multiplicity=[3]), + makeChainStep("Step2_2mu", [mu21], multiplicity=[3]) ]), makeChain(name='HLT_TestChain6_muv1_TestChain10_muv1_L12MU6', L1Thresholds=["MU6", "MU6"], ChainSteps=[ - ChainStep("Step1_2muAs", [mu11,mu11], multiplicity=[1,1]), - ChainStep("Step2_2muAs", [mu21,mu21], multiplicity=[1,1]) ]), + makeChainStep("Step1_2muAs", [mu11,mu11], multiplicity=[1,1]), + makeChainStep("Step2_2muAs", [mu21,mu21], multiplicity=[1,1]) ]), makeChain(name='HLT_2TestChain6_muEmpty1_L12MU6', L1Thresholds=["MU6"], ChainSteps=[ - ChainStep("Step1_2mu_empty", multiplicity=[]),#[2] - ChainStep("Step2_2mu", [mu21], multiplicity=[2]) ]), + makeChainStep("Step1_2mu_empty", multiplicity=[]),#[2] + makeChainStep("Step2_2mu", [mu21], multiplicity=[2]) ]), makeChain(name='HLT_TestChain6_muv1_TestChain5_ev1dr_L12MU6', L1Thresholds=["MU6","EM5"], ChainSteps=[ - ChainStep("Step1_mu_em", [mu11, el11], multiplicity=[1,1], comboToolConfs=[dimuDrComboHypoTool]), - ChainStep("Step2_mu_em", [mu21, el21], multiplicity=[1,1], comboToolConfs=[dimuDrComboHypoTool])] ), + makeChainStep("Step1_mu_em", [mu11, el11], multiplicity=[1,1], comboToolConfs=[dimuDrComboHypoTool]), + makeChainStep("Step2_mu_em", [mu21, el21], multiplicity=[1,1], comboToolConfs=[dimuDrComboHypoTool])] ), makeChain(name='HLT_2TestChain4_muv1dr_L12MU6', L1Thresholds=["MU6"], ChainSteps=[ - ChainStep("Step1_2mu", [mu11], multiplicity=[2], comboToolConfs=[dimuDrComboHypoTool]), - ChainStep("Step2_2mu22", [mu22], multiplicity=[2]) ] ), + makeChainStep("Step1_2mu", [mu11], multiplicity=[2], comboToolConfs=[dimuDrComboHypoTool]), + makeChainStep("Step2_2mu22", [mu22], multiplicity=[2]) ] ), # FSNOSEED not implemented in emulation # L1Thresholds=["MU6", "MU6"], makeChain(name='HLT_TestChain10_muEmpty1_TestChain6_muEmpty1_L12MU6', L1Thresholds=["MU6", "MU6"], ChainSteps=[ - ChainStep("Step1_2muAs_empty", multiplicity=[]), - ChainStep("Step2_2muAs", [mu21, mu21], multiplicity=[1,1]) ]) + makeChainStep("Step1_2muAs_empty", multiplicity=[]), + makeChainStep("Step2_2muAs", [mu21, mu21], multiplicity=[1,1]) ]) ] diff --git a/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py b/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py index 2ae87b96f41ca1f63b71536a632095a0070d807f..5d2773af6f44308906516b61f93c92d8163f034f 100644 --- a/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py +++ b/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py @@ -69,8 +69,16 @@ class L1EmulationTest(L1Decoder): self.L1DecoderSummaryKey = "L1DecoderSummary" - - +from DecisionHandling.DecisionHandlingConfig import ComboHypoCfg +class makeChainStep(object): + """ Used to store the step info, regardless of the chainDict""" + def __init__(self, name, seq=[], multiplicity=[1], comboHypoCfg=ComboHypoCfg, comboToolConfs=[]): + self.name=name + self.seq=seq + self.mult=multiplicity + self.comboToolConfs=comboToolConfs + self.comboHypoCfg=comboHypoCfg + chainsCounter = 0 @@ -83,6 +91,7 @@ def makeChain( name, L1Thresholds, ChainSteps, Streams="physics:Main", Groups=[" prop = ChainProp( name=name, l1SeedThresholds=L1Thresholds, groups=Groups ) from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import TriggerConfigHLT + from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import ChainStep from TriggerMenuMT.HLTMenuConfig.Menu.DictFromChainName import dictFromChainName chainDict = dictFromChainName( prop ) @@ -93,8 +102,17 @@ def makeChain( name, L1Thresholds, ChainSteps, Streams="physics:Main", Groups=[" #set default chain prescale chainDict['prescale'] = 1 + from TriggerMenuMT.HLTMenuConfig.Menu.ChainDictTools import splitChainDictInLegs + + listOfChainDicts = splitChainDictInLegs(chainDict) + + # create the ChainSteps, with the chaindict + StepConfig = [] + for step in ChainSteps: + StepConfig+=[ChainStep(step.name, step.seq, multiplicity=step.mult, chainDicts=listOfChainDicts, comboHypoCfg=step.comboHypoCfg, comboToolConfs=step.comboToolConfs)] + from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain - chainConfig = Chain( name=name, L1Thresholds=L1Thresholds, ChainSteps=ChainSteps ) + chainConfig = Chain( name=name, L1Thresholds=L1Thresholds, ChainSteps=StepConfig ) TriggerConfigHLT.registerChain( chainDict, chainConfig ) diff --git a/Trigger/TrigSteer/L1Decoder/CMakeLists.txt b/Trigger/TrigSteer/L1Decoder/CMakeLists.txt index 6c516ca73e62d1f7767873b4ac9caeb795de490d..a31a47f532740242523d857800c70e1c554b2628 100644 --- a/Trigger/TrigSteer/L1Decoder/CMakeLists.txt +++ b/Trigger/TrigSteer/L1Decoder/CMakeLists.txt @@ -9,13 +9,12 @@ find_package( CLHEP ) # Component(s) in the package: atlas_add_library( L1DecoderLib - L1DecoderRoot/*.cxx PUBLIC_HEADERS L1Decoder INTERFACE LINK_LIBRARIES TrigConfInterfaces) atlas_add_component( L1Decoder - src/*.cxx src/components/*.cxx L1DecoderRoot/*.cxx + src/*.cxx src/components/*.cxx INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} LINK_LIBRARIES ${CLHEP_LIBRARIES} AthViews AthenaBaseComps AthenaKernel AthenaMonitoringKernelLib GaudiKernel L1DecoderLib StoreGateLib TrigCompositeUtilsLib TrigConfData TrigConfHLTData TrigConfL1Data TrigCostMonitorMTLib TrigSteeringEvent TrigT1Interfaces TrigT1Result TrigTimeAlgsLib xAODEventInfo xAODTrigger TrigConfxAODLib ) diff --git a/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingTool.h b/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingTool.h index 53d1f72df5dcfac9e8f00b6e72cc412bb4530f0d..d8b306166ab472b51de2b20d14f04a88ab1584af 100644 --- a/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingTool.h +++ b/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingTool.h @@ -29,7 +29,7 @@ public: virtual StatusCode start() override; - StatusCode passBeforePrescaleSelection(const ROIB::RoIBResult* roib, const std::vector<std::string>& l1ItemNames, bool& pass) const; + virtual StatusCode passBeforePrescaleSelection(const ROIB::RoIBResult* roib, const std::vector<std::string>& l1ItemNames, bool& pass) const; private: // Menu objects (that act here as configuration) need to be available in detector store. diff --git a/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingToolBase.h b/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingToolBase.h index e524808911cffec636e19e5326d9d3eece2d259f..dff6163befe1c15a68b6131c3e4a89938504519b 100644 --- a/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingToolBase.h +++ b/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingToolBase.h @@ -29,12 +29,12 @@ public: const IInterface* parent); virtual StatusCode decode(const ROIB::RoIBResult& /*roib*/, - HLT::IDVec& /*enabledChains*/) const override - { return StatusCode::SUCCESS; } + HLT::IDVec& /*enabledChains*/) const override; virtual StatusCode initialize() override; - virtual StatusCode passBeforePrescaleSelection(const ROIB::RoIBResult* roib, const std::vector<std::string>& l1ItemNames, bool& pass) const override; + virtual StatusCode passBeforePrescaleSelection(const ROIB::RoIBResult* /*roib*/, + const std::vector<std::string>& /*l1ItemNames*/, bool& /*pass*/) const override; protected: diff --git a/Trigger/TrigSteer/L1Decoder/L1DecoderRoot/CTPUnpackingTool.cxx b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.cxx similarity index 100% rename from Trigger/TrigSteer/L1Decoder/L1DecoderRoot/CTPUnpackingTool.cxx rename to Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.cxx diff --git a/Trigger/TrigSteer/L1Decoder/L1DecoderRoot/CTPUnpackingToolBase.cxx b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingToolBase.cxx similarity index 71% rename from Trigger/TrigSteer/L1Decoder/L1DecoderRoot/CTPUnpackingToolBase.cxx rename to Trigger/TrigSteer/L1Decoder/src/CTPUnpackingToolBase.cxx index 2a228fe7bf5f556560498823b76394b837d4e057..a9976d88c3d6465ce02dc15879afb833df4e75ae 100644 --- a/Trigger/TrigSteer/L1Decoder/L1DecoderRoot/CTPUnpackingToolBase.cxx +++ b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingToolBase.cxx @@ -25,5 +25,11 @@ StatusCode CTPUnpackingToolBase::initialize() } StatusCode CTPUnpackingToolBase::passBeforePrescaleSelection(const ROIB::RoIBResult* /*roib*/, const std::vector<std::string>& /*l1ItemNames*/, bool& /*pass*/) const { - return StatusCode::SUCCESS; + ATH_MSG_ERROR("Base class should not call this function"); + return StatusCode::FAILURE; +} + +StatusCode CTPUnpackingToolBase::decode(const ROIB::RoIBResult& /*roib*/, HLT::IDVec& /*enabledChains*/) const { + ATH_MSG_ERROR("Base class should not call this function"); + return StatusCode::FAILURE; } diff --git a/Trigger/TrigSteer/TrigCompositeUtils/Root/TrigCompositeUtilsRoot.cxx b/Trigger/TrigSteer/TrigCompositeUtils/Root/TrigCompositeUtilsRoot.cxx index 9ef63ae2eb7433b838efc25d7bf84b23bea9bdd5..8b3529bf22f0765a894073adf1acc65d0c008814 100644 --- a/Trigger/TrigSteer/TrigCompositeUtils/Root/TrigCompositeUtilsRoot.cxx +++ b/Trigger/TrigSteer/TrigCompositeUtils/Root/TrigCompositeUtilsRoot.cxx @@ -215,7 +215,7 @@ namespace TrigCompositeUtils { return composite->hasObjectCollectionLinks( m_name ); } - std::vector<const Decision*> getRejectedDecisionNodes(asg::EventStoreType* eventStore, const DecisionID id) { + std::vector<const Decision*> getRejectedDecisionNodes(asg::EventStoreType* eventStore, const DecisionIDContainer ids) { std::vector<const Decision*> output; // The list of containers we need to read can change on a file-by-file basis (it depends on the SMK) // Hence we query SG for all collections rather than maintain a large and ever changing ReadHandleKeyArray @@ -276,10 +276,10 @@ namespace TrigCompositeUtils { // So the size of activeChainsIntoThisDecision corresponds to the number of HypoTools which will have run // What do we care about? A chain, or all chains? DecisionIDContainer chainsToCheck; - if (id == 0) { // We care about *all* chains + if (ids.size() == 0) { // We care about *all* chains chainsToCheck = activeChainsIntoThisDecision; - } else { // We care about *one* chain - chainsToCheck.insert(id); + } else { // We care about sepcified chains + chainsToCheck = ids; } // We have found a rejected decision node *iff* a chainID to check is *not* present here // I.e. the HypoTool for the chain returned a NEGATIVE decision @@ -300,12 +300,11 @@ namespace TrigCompositeUtils { void recursiveGetDecisionsInternal(const Decision* node, const Decision* comingFrom, NavGraph& navGraph, - const DecisionID id, + const DecisionIDContainer ids, const bool enforceDecisionOnNode) { // Does this Decision satisfy the chain requirement? - DecisionIDContainer idSet = {id}; - if (enforceDecisionOnNode && id != 0 && !isAnyIDPassing(node, idSet)) { + if (enforceDecisionOnNode && ids.size() != 0 && !isAnyIDPassing(node, ids)) { return; // Stop propagating down this leg. It does not concern the chain with DecisionID = id } @@ -318,7 +317,7 @@ namespace TrigCompositeUtils { for ( ElementLink<DecisionContainer> seed : getLinkToPrevious(node)) { const Decision* seedDecision = *(seed); // Dereference ElementLink // Sending true as final parameter for enforceDecisionOnStartNode as we are recursing away from the supplied start node - recursiveGetDecisionsInternal(seedDecision, node, navGraph, id, /*enforceDecisionOnNode*/ true); + recursiveGetDecisionsInternal(seedDecision, node, navGraph, ids, /*enforceDecisionOnNode*/ true); } } return; @@ -326,11 +325,11 @@ namespace TrigCompositeUtils { void recursiveGetDecisions(const Decision* start, NavGraph& navGraph, - const DecisionID id, + const DecisionIDContainer ids, const bool enforceDecisionOnStartNode) { // Note: we do not require navGraph to be an empty graph. We can extend it. - recursiveGetDecisionsInternal(start, /*comingFrom*/nullptr, navGraph, id, enforceDecisionOnStartNode); + recursiveGetDecisionsInternal(start, /*comingFrom*/nullptr, navGraph, ids, enforceDecisionOnStartNode); return; } diff --git a/Trigger/TrigSteer/TrigCompositeUtils/TrigCompositeUtils/TrigCompositeUtils.h b/Trigger/TrigSteer/TrigCompositeUtils/TrigCompositeUtils/TrigCompositeUtils.h index 33ccb51ffcfc8a0841badee125e256f26a7d6bcc..64ea8b34ea3e283ea8b555cad3643e731409b653 100644 --- a/Trigger/TrigSteer/TrigCompositeUtils/TrigCompositeUtils/TrigCompositeUtils.h +++ b/Trigger/TrigSteer/TrigCompositeUtils/TrigCompositeUtils/TrigCompositeUtils.h @@ -256,10 +256,10 @@ namespace TrigCompositeUtils { /** * @brief Query all DecisionCollections in the event store, locate all Decision nodes in the graph where an object failed selection for a given chain. * @param[in] eventStore Pointer to event store within current event context - * @param[in] id ID of chain to located failed decision nodes for. Passing 0 returns all decision nodes which failed at least one chain. + * @param[in] ids IDs of chain (if multi-leg chain, include all legs) to located failed decision nodes for. Passing an empty set returns all decision nodes which failed at least one chain. * @return Vector of Decision nodes whose attached feature failed the trigger chain logic for chain with DecisionID id **/ - std::vector<const Decision*> getRejectedDecisionNodes(asg::EventStoreType* eventStore, const DecisionID id = 0); + std::vector<const Decision*> getRejectedDecisionNodes(asg::EventStoreType* eventStore, const DecisionIDContainer ids = {}); @@ -268,14 +268,14 @@ namespace TrigCompositeUtils { * @brief Search back in time from "node" and locate all paths back through Decision objects for a given chain. * @param[in] node The Decision object to start the search from. Typically this will be one of the terminus objects from the HLTNav_Summary. * @param[inout] navPaths Holds a sub-graph of the full navigation graph, filtered by DecisionID. An already partially populated graph may be provided as input. - * @param[in] id Optional DecisionID of a Chain to trace through the navigation. If omitted, no chain requirement will be applied. + * @param[in] ids Optional DecisionIDContainer of Chains / Chain-Legs to trace through the navigation. If omitted, no chain requirement will be applied. * @param[in] enforceDecisionOnStartNode If the check of DecisionID should be carried out on the start node. * enforceDecisionOnStartNode should be true if navigating for a trigger which passed (e.g. starting from HLTPassRaw) * enforceDecisionOnStartNode should be false if navigating for a trigger which failed but whose failing start node(s) were recovered via getRejectedDecisionNodes **/ void recursiveGetDecisions(const Decision* node, NavGraph& navGraph, - const DecisionID id = 0, + const DecisionIDContainer ids = {}, const bool enforceDecisionOnStartNode = true); @@ -287,7 +287,7 @@ namespace TrigCompositeUtils { void recursiveGetDecisionsInternal(const Decision* node, const Decision* comingFrom, NavGraph& navGraph, - const DecisionID id, + const DecisionIDContainer ids, const bool enforceDecisionOnNode); /** diff --git a/Trigger/TrigSteer/TrigCompositeUtils/test/TrigTraversal_test.cxx b/Trigger/TrigSteer/TrigCompositeUtils/test/TrigTraversal_test.cxx index 5a80227944808ae7f0a78701430876d9e9d558c7..0a2b450c92053df70b7fb09a67c0afbe9407234e 100644 --- a/Trigger/TrigSteer/TrigCompositeUtils/test/TrigTraversal_test.cxx +++ b/Trigger/TrigSteer/TrigCompositeUtils/test/TrigTraversal_test.cxx @@ -331,11 +331,11 @@ int main ATLAS_NOT_THREAD_SAFE () { NavGraph graph_HLT_em_chain; NavGraph graph_HLT_all; - recursiveGetDecisions(END, graph_HLT_mufast_chain, HLT_mufast_chain, true); - recursiveGetDecisions(END, graph_HLT_mu_chain, HLT_mu_chain, true); - recursiveGetDecisions(END, graph_HLT_mu_em_chain, HLT_mu_em_chain, true); - recursiveGetDecisions(END, graph_HLT_em_chain, HLT_em_chain, true); - recursiveGetDecisions(END, graph_HLT_all, 0, true); + recursiveGetDecisions(END, graph_HLT_mufast_chain, {HLT_mufast_chain}, true); + recursiveGetDecisions(END, graph_HLT_mu_chain, {HLT_mu_chain}, true); + recursiveGetDecisions(END, graph_HLT_mu_em_chain, {HLT_mu_em_chain}, true); + recursiveGetDecisions(END, graph_HLT_em_chain, {HLT_em_chain}, true); + recursiveGetDecisions(END, graph_HLT_all, {}, true); log << MSG::INFO << "HLT_mufast_chain" << endmsg; @@ -375,26 +375,26 @@ int main ATLAS_NOT_THREAD_SAFE () { std::cout << " ---------- Now Include Failing Features " << std::endl; - std::vector<const Decision*> extraStart_HLT_mufast_chain = getRejectedDecisionNodes(pSG, HLT_mufast_chain); - std::vector<const Decision*> extraStart_HLT_mu_chain = getRejectedDecisionNodes(pSG, HLT_mu_chain); - std::vector<const Decision*> extraStart_HLT_mu_em_chain = getRejectedDecisionNodes(pSG, HLT_mu_em_chain); - std::vector<const Decision*> extraStart_HLT_em_chain = getRejectedDecisionNodes(pSG, HLT_em_chain); - std::vector<const Decision*> extraStart_HLT_all = getRejectedDecisionNodes(pSG, 0); + std::vector<const Decision*> extraStart_HLT_mufast_chain = getRejectedDecisionNodes(pSG, {HLT_mufast_chain}); + std::vector<const Decision*> extraStart_HLT_mu_chain = getRejectedDecisionNodes(pSG, {HLT_mu_chain}); + std::vector<const Decision*> extraStart_HLT_mu_em_chain = getRejectedDecisionNodes(pSG, {HLT_mu_em_chain}); + std::vector<const Decision*> extraStart_HLT_em_chain = getRejectedDecisionNodes(pSG, {HLT_em_chain}); + std::vector<const Decision*> extraStart_HLT_all = getRejectedDecisionNodes(pSG, {}); for (const Decision* d : extraStart_HLT_mufast_chain) { - recursiveGetDecisions(d, graph_HLT_mufast_chain, HLT_mufast_chain, false); + recursiveGetDecisions(d, graph_HLT_mufast_chain, {HLT_mufast_chain}, false); } for (const Decision* d : extraStart_HLT_mu_chain) { - recursiveGetDecisions(d, graph_HLT_mu_chain, HLT_mu_chain, false); + recursiveGetDecisions(d, graph_HLT_mu_chain, {HLT_mu_chain}, false); } for (const Decision* d : extraStart_HLT_mu_em_chain) { - recursiveGetDecisions(d, graph_HLT_mu_em_chain, HLT_mu_em_chain, false); + recursiveGetDecisions(d, graph_HLT_mu_em_chain, {HLT_mu_em_chain}, false); } for (const Decision* d : extraStart_HLT_em_chain) { - recursiveGetDecisions(d, graph_HLT_em_chain, HLT_em_chain, false); + recursiveGetDecisions(d, graph_HLT_em_chain, {HLT_em_chain}, false); } for (const Decision* d : extraStart_HLT_all) { - recursiveGetDecisions(d, graph_HLT_all, 0, false); + recursiveGetDecisions(d, graph_HLT_all, {}, false); } log << MSG::INFO << "HLT_mufast_chain" << endmsg; diff --git a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref index 8619c66e12dc19068914523aabd54d7f1e9e88b5..919cfc6341500652c7a1528cfd136e97a40ed999 100644 --- a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref +++ b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref @@ -1,1119 +1,1131 @@ TrigSignatureMoniMT INFO HLT_10j40_pf_subresjesgscIS_ftf_L14J15 #3575805394 -TrigSignatureMoniMT INFO -- #3575805394 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3575805394 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3575805394 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3575805394 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_10j40_subjesIS_L14J15 #2760204981 -TrigSignatureMoniMT INFO -- #2760204981 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2760204981 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2760204981 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2760204981 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_10j40_subresjesgscIS_ftf_L14J15 #3568675904 -TrigSignatureMoniMT INFO -- #3568675904 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3568675904 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3568675904 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3568675904 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_2e12_lhloose_mu10_L12EM8VH_MU10 #2518246928 -TrigSignatureMoniMT INFO -- #2518246928 Events 1 1 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2518246928 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2518246928 Events 1 1 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2518246928 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2e17_etcut_L12EM15VH #3136730292 -TrigSignatureMoniMT INFO -- #3136730292 Events 2 2 2 2 2 - - - - - - - - - - 2 -TrigSignatureMoniMT INFO -- #3136730292 Features 12 300 14 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3136730292 Events 2 2 2 2 2 2 - - - - - - - - - - 2 +TrigSignatureMoniMT INFO -- #3136730292 Features 12 300 14 10 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2e17_lhvloose_L12EM15VH #2280638160 -TrigSignatureMoniMT INFO -- #2280638160 Events 2 2 2 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2280638160 Features 2 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2280638160 Events 2 2 2 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2280638160 Features 2 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_2e17_lhvloose_L12EM15VHI #3514903681 -TrigSignatureMoniMT INFO -- #3514903681 Events 1 1 1 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3514903681 Features 1 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3514903681 Events 1 1 1 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3514903681 Features 1 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_2e17_lhvloose_L12EM3 #1767768251 -TrigSignatureMoniMT INFO -- #1767768251 Events 20 20 7 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1767768251 Features 7 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1767768251 Events 20 20 7 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1767768251 Features 7 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_2e24_lhvloose_L12EM20VH #1796849979 -TrigSignatureMoniMT INFO -- #1796849979 Events 2 2 2 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1796849979 Features 2 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1796849979 Events 2 2 2 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1796849979 Features 2 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_2e3_etcut_L12EM3 #2613484113 -TrigSignatureMoniMT INFO -- #2613484113 Events 20 20 20 20 20 - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2613484113 Features 342 3724 738 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2613484113 Events 20 20 20 20 20 20 - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2613484113 Features 342 3724 738 308 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g10_loose_mu20_L1MU20 #3765708828 -TrigSignatureMoniMT INFO -- #3765708828 Events 8 8 1 1 1 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #3765708828 Features 2 2 6 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #3765708828 Events 8 8 1 1 1 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #3765708828 Features 2 2 6 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2g15_tight_dPhi15_L1DPHI-M70-2EM12I #2606736960 -TrigSignatureMoniMT INFO -- #2606736960 Events 0 0 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2606736960 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2606736960 Events 0 0 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2606736960 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g20_tight_L12EM15VH #3837353071 -TrigSignatureMoniMT INFO -- #3837353071 Events 2 2 2 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3837353071 Features 2 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3837353071 Events 2 2 2 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3837353071 Features 2 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g20_tight_icaloloose_L12EM15VH #1319738689 -TrigSignatureMoniMT INFO -- #1319738689 Events 2 2 2 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1319738689 Features 2 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1319738689 Events 2 2 2 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1319738689 Features 2 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g22_tight_L12EM15VH #708421357 -TrigSignatureMoniMT INFO -- #708421357 Events 2 2 2 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #708421357 Features 2 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #708421357 Events 2 2 2 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #708421357 Features 2 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g25_loose_g15_loose_L12EM20VH #1367194755 -TrigSignatureMoniMT INFO -- #1367194755 Events 2 2 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1367194755 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1367194755 Events 2 2 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1367194755 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g35_etcut_L12EM20VH #58053304 -TrigSignatureMoniMT INFO -- #58053304 Events 2 2 2 1 1 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #58053304 Features 5 4 1 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #58053304 Events 2 2 2 1 1 - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #58053304 Features 5 4 1 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g35_medium_L12EM20VH #3965466087 -TrigSignatureMoniMT INFO -- #3965466087 Events 2 2 1 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3965466087 Features 1 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3965466087 Events 2 2 1 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3965466087 Features 1 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g50_loose_L12EM20VH #3590373854 -TrigSignatureMoniMT INFO -- #3590373854 Events 2 2 2 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3590373854 Features 2 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3590373854 Events 2 2 2 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3590373854 Features 2 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2j330_a10sd_csskpf_jes_ftf_35smcINF_L1J100 #3495282139 -TrigSignatureMoniMT INFO -- #3495282139 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3495282139 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3495282139 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3495282139 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_2j330_a10sd_csskpf_nojcalib_ftf_35smcINF_L1J100 #2680976232 -TrigSignatureMoniMT INFO -- #2680976232 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2680976232 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2680976232 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2680976232 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_2j330_a10t_lcw_jes_35smcINF_L1J100 #1295975955 -TrigSignatureMoniMT INFO -- #1295975955 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1295975955 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1295975955 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1295975955 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_2j330_a10t_lcw_nojcalib_35smcINF_L1J100 #891415013 -TrigSignatureMoniMT INFO -- #891415013 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #891415013 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #891415013 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #891415013 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_2j60_L1J15 #927735533 -TrigSignatureMoniMT INFO -- #927735533 Events 20 20 0 0 0 0 0 0 0 0 0 10 - - - 10 -TrigSignatureMoniMT INFO -- #927735533 Features 0 0 0 0 0 0 0 0 0 28 - - - +TrigSignatureMoniMT INFO -- #927735533 Events 20 20 0 0 0 0 0 0 0 0 0 0 10 - - - 10 +TrigSignatureMoniMT INFO -- #927735533 Features 0 0 0 0 0 0 0 0 0 0 28 - - - TrigSignatureMoniMT INFO HLT_2mu10_bJpsimumu_L12MU10 #3498558358 -TrigSignatureMoniMT INFO -- #3498558358 Events 3 3 0 0 0 0 2 2 2 2 - - - - - 0 -TrigSignatureMoniMT INFO -- #3498558358 Features 0 0 0 0 8 8 8 4 - - - - - +TrigSignatureMoniMT INFO -- #3498558358 Events 3 3 0 0 0 0 0 2 2 2 2 - - - - - 0 +TrigSignatureMoniMT INFO -- #3498558358 Features 0 0 0 0 0 8 8 8 4 - - - - - TrigSignatureMoniMT INFO HLT_2mu10_bUpsimumu_L12MU10 #234102568 -TrigSignatureMoniMT INFO -- #234102568 Events 3 3 0 0 0 0 2 2 2 2 - - - - - 0 -TrigSignatureMoniMT INFO -- #234102568 Features 0 0 0 0 8 8 8 4 - - - - - +TrigSignatureMoniMT INFO -- #234102568 Events 3 3 0 0 0 0 0 2 2 2 2 - - - - - 0 +TrigSignatureMoniMT INFO -- #234102568 Features 0 0 0 0 0 8 8 8 4 - - - - - TrigSignatureMoniMT INFO HLT_2mu14_L12MU10 #2619091790 -TrigSignatureMoniMT INFO -- #2619091790 Events 3 3 0 0 0 0 2 1 1 1 - - - - - 1 -TrigSignatureMoniMT INFO -- #2619091790 Features 0 0 0 0 8 4 4 4 - - - - - +TrigSignatureMoniMT INFO -- #2619091790 Events 3 3 0 0 0 0 0 2 1 1 1 - - - - - 1 +TrigSignatureMoniMT INFO -- #2619091790 Features 0 0 0 0 0 8 4 4 4 - - - - - TrigSignatureMoniMT INFO HLT_2mu14_l2io_L12MU10 #945295390 -TrigSignatureMoniMT INFO -- #945295390 Events 3 3 0 0 0 0 2 2 1 1 - - - - - 1 -TrigSignatureMoniMT INFO -- #945295390 Features 0 0 0 0 8 14 4 4 - - - - - +TrigSignatureMoniMT INFO -- #945295390 Events 3 3 0 0 0 0 0 2 2 1 1 - - - - - 1 +TrigSignatureMoniMT INFO -- #945295390 Features 0 0 0 0 0 8 14 4 4 - - - - - TrigSignatureMoniMT INFO HLT_2mu15_L12MU10 #557204938 -TrigSignatureMoniMT INFO -- #557204938 Events 3 3 0 0 0 0 2 1 1 1 - - - - - 1 -TrigSignatureMoniMT INFO -- #557204938 Features 0 0 0 0 8 4 4 4 - - - - - +TrigSignatureMoniMT INFO -- #557204938 Events 3 3 0 0 0 0 0 2 1 1 1 - - - - - 1 +TrigSignatureMoniMT INFO -- #557204938 Features 0 0 0 0 0 8 4 4 4 - - - - - TrigSignatureMoniMT INFO HLT_2mu4_L12MU4 #2999632714 -TrigSignatureMoniMT INFO -- #2999632714 Events 4 4 0 0 0 0 3 3 2 2 - - - - - 2 -TrigSignatureMoniMT INFO -- #2999632714 Features 0 0 0 0 12 12 8 8 - - - - - +TrigSignatureMoniMT INFO -- #2999632714 Events 4 4 0 0 0 0 0 3 3 2 2 - - - - - 2 +TrigSignatureMoniMT INFO -- #2999632714 Features 0 0 0 0 0 12 12 8 8 - - - - - TrigSignatureMoniMT INFO HLT_2mu4_bDimu_L12MU4 #1730084172 -TrigSignatureMoniMT INFO -- #1730084172 Events 4 4 0 0 0 0 3 3 2 2 - - - - - 0 -TrigSignatureMoniMT INFO -- #1730084172 Features 0 0 0 0 12 12 8 4 - - - - - +TrigSignatureMoniMT INFO -- #1730084172 Events 4 4 0 0 0 0 0 3 3 2 2 - - - - - 0 +TrigSignatureMoniMT INFO -- #1730084172 Features 0 0 0 0 0 12 12 8 4 - - - - - TrigSignatureMoniMT INFO HLT_2mu4_bJpsimumu_L12MU4 #4276347155 -TrigSignatureMoniMT INFO -- #4276347155 Events 4 4 0 0 0 0 3 3 2 2 - - - - - 0 -TrigSignatureMoniMT INFO -- #4276347155 Features 0 0 0 0 12 12 8 4 - - - - - +TrigSignatureMoniMT INFO -- #4276347155 Events 4 4 0 0 0 0 0 3 3 2 2 - - - - - 0 +TrigSignatureMoniMT INFO -- #4276347155 Features 0 0 0 0 0 12 12 8 4 - - - - - TrigSignatureMoniMT INFO HLT_2mu4_bUpsimumu_L12MU4 #4008168535 -TrigSignatureMoniMT INFO -- #4008168535 Events 4 4 0 0 0 0 3 3 2 2 - - - - - 0 -TrigSignatureMoniMT INFO -- #4008168535 Features 0 0 0 0 12 12 8 4 - - - - - +TrigSignatureMoniMT INFO -- #4008168535 Events 4 4 0 0 0 0 0 3 3 2 2 - - - - - 0 +TrigSignatureMoniMT INFO -- #4008168535 Features 0 0 0 0 0 12 12 8 4 - - - - - TrigSignatureMoniMT INFO HLT_2mu4_muonqual_L12MU4 #1584776935 -TrigSignatureMoniMT INFO -- #1584776935 Events 4 4 0 0 0 0 3 3 2 2 - - - - - 2 -TrigSignatureMoniMT INFO -- #1584776935 Features 0 0 0 0 12 12 8 8 - - - - - +TrigSignatureMoniMT INFO -- #1584776935 Events 4 4 0 0 0 0 0 3 3 2 2 - - - - - 2 +TrigSignatureMoniMT INFO -- #1584776935 Features 0 0 0 0 0 12 12 8 8 - - - - - TrigSignatureMoniMT INFO HLT_2mu6_10invm70_L1MU6 #1316992871 -TrigSignatureMoniMT INFO -- #1316992871 Events 10 10 0 0 0 0 3 2 2 2 - - - - - 2 -TrigSignatureMoniMT INFO -- #1316992871 Features 0 0 0 0 12 8 8 8 - - - - - +TrigSignatureMoniMT INFO -- #1316992871 Events 10 10 0 0 0 0 0 3 2 2 2 - - - - - 2 +TrigSignatureMoniMT INFO -- #1316992871 Features 0 0 0 0 0 12 8 8 8 - - - - - TrigSignatureMoniMT INFO HLT_2mu6_Dr_L12MU4 #3304584056 -TrigSignatureMoniMT INFO -- #3304584056 Events 4 4 0 0 0 0 3 2 - - - - - - - 2 -TrigSignatureMoniMT INFO -- #3304584056 Features 0 0 0 0 12 8 - - - - - - - +TrigSignatureMoniMT INFO -- #3304584056 Events 4 4 0 0 0 0 0 3 2 - - - - - - - 2 +TrigSignatureMoniMT INFO -- #3304584056 Features 0 0 0 0 0 12 8 - - - - - - - TrigSignatureMoniMT INFO HLT_2mu6_L12MU6 #1747073535 -TrigSignatureMoniMT INFO -- #1747073535 Events 4 4 0 0 0 0 3 2 2 2 - - - - - 2 -TrigSignatureMoniMT INFO -- #1747073535 Features 0 0 0 0 12 8 8 8 - - - - - +TrigSignatureMoniMT INFO -- #1747073535 Events 4 4 0 0 0 0 0 3 2 2 2 - - - - - 2 +TrigSignatureMoniMT INFO -- #1747073535 Features 0 0 0 0 0 12 8 8 8 - - - - - TrigSignatureMoniMT INFO HLT_2mu6_l2io_L12MU6 #2996403520 -TrigSignatureMoniMT INFO -- #2996403520 Events 4 4 0 0 0 0 3 3 2 2 - - - - - 2 -TrigSignatureMoniMT INFO -- #2996403520 Features 0 0 0 0 12 26 8 8 - - - - - +TrigSignatureMoniMT INFO -- #2996403520 Events 4 4 0 0 0 0 0 3 3 2 2 - - - - - 2 +TrigSignatureMoniMT INFO -- #2996403520 Features 0 0 0 0 0 12 28 8 8 - - - - - TrigSignatureMoniMT INFO HLT_2mu6_muonqual_L12MU6 #2398136098 -TrigSignatureMoniMT INFO -- #2398136098 Events 4 4 0 0 0 0 3 2 2 2 - - - - - 2 -TrigSignatureMoniMT INFO -- #2398136098 Features 0 0 0 0 12 8 8 8 - - - - - +TrigSignatureMoniMT INFO -- #2398136098 Events 4 4 0 0 0 0 0 3 2 2 2 - - - - - 2 +TrigSignatureMoniMT INFO -- #2398136098 Features 0 0 0 0 0 12 8 8 8 - - - - - TrigSignatureMoniMT INFO HLT_3j200_L1J100 #2199422919 -TrigSignatureMoniMT INFO -- #2199422919 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2199422919 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2199422919 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2199422919 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_3j200_pf_subresjesgscIS_ftf_L1J100 #794428037 -TrigSignatureMoniMT INFO -- #794428037 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #794428037 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #794428037 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #794428037 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_3j200_subresjesgscIS_ftf_L1J100 #1801834652 -TrigSignatureMoniMT INFO -- #1801834652 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1801834652 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1801834652 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1801834652 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_3mu6_L13MU6 #1832399408 -TrigSignatureMoniMT INFO -- #1832399408 Events 0 0 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1832399408 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1832399408 Events 0 0 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1832399408 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_3mu6_msonly_L13MU6 #1199773318 -TrigSignatureMoniMT INFO -- #1199773318 Events 0 0 0 0 0 0 0 0 0 - - - - - - 0 -TrigSignatureMoniMT INFO -- #1199773318 Features 0 0 0 0 0 0 0 - - - - - - +TrigSignatureMoniMT INFO -- #1199773318 Events 0 0 0 0 0 0 0 0 0 0 - - - - - - 0 +TrigSignatureMoniMT INFO -- #1199773318 Features 0 0 0 0 0 0 0 0 - - - - - - TrigSignatureMoniMT INFO HLT_3mu8_msonly_L13MU6 #424835335 -TrigSignatureMoniMT INFO -- #424835335 Events 0 0 0 0 0 0 0 0 0 - - - - - - 0 -TrigSignatureMoniMT INFO -- #424835335 Features 0 0 0 0 0 0 0 - - - - - - +TrigSignatureMoniMT INFO -- #424835335 Events 0 0 0 0 0 0 0 0 0 0 - - - - - - 0 +TrigSignatureMoniMT INFO -- #424835335 Features 0 0 0 0 0 0 0 0 - - - - - - TrigSignatureMoniMT INFO HLT_4j120_pf_subresjesgscIS_ftf_L13J50 #1755129033 -TrigSignatureMoniMT INFO -- #1755129033 Events 1 1 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1755129033 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1755129033 Events 1 1 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1755129033 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_4j120_subjesIS_L13J50 #3722303680 -TrigSignatureMoniMT INFO -- #3722303680 Events 1 1 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3722303680 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3722303680 Events 1 1 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3722303680 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_4j120_subresjesgscIS_ftf_L13J50 #91006165 -TrigSignatureMoniMT INFO -- #91006165 Events 1 1 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #91006165 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #91006165 Events 1 1 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #91006165 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_4mu4_L14MU4 #1834383636 -TrigSignatureMoniMT INFO -- #1834383636 Events 0 0 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1834383636 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1834383636 Events 0 0 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1834383636 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_5j70_0eta240_L14J20 #1175391812 -TrigSignatureMoniMT INFO -- #1175391812 Events 7 7 0 0 0 0 0 0 0 0 0 1 - - - 1 -TrigSignatureMoniMT INFO -- #1175391812 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #1175391812 Events 7 7 0 0 0 0 0 0 0 0 0 0 1 - - - 1 +TrigSignatureMoniMT INFO -- #1175391812 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_5j70_pf_subresjesgscIS_ftf_0eta240_L14J15 #4189027854 -TrigSignatureMoniMT INFO -- #4189027854 Events 9 9 0 0 0 0 0 0 0 0 0 1 - - - 1 -TrigSignatureMoniMT INFO -- #4189027854 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #4189027854 Events 9 9 0 0 0 0 0 0 0 0 0 0 1 - - - 1 +TrigSignatureMoniMT INFO -- #4189027854 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_5j70_subresjesgscIS_ftf_0eta240_L14J15 #819918597 -TrigSignatureMoniMT INFO -- #819918597 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #819918597 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #819918597 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #819918597 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_5j85_pf_subresjesgscIS_ftf_L14J15 #4208121018 -TrigSignatureMoniMT INFO -- #4208121018 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #4208121018 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #4208121018 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #4208121018 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_5j85_subjesIS_L14J15 #2745094401 -TrigSignatureMoniMT INFO -- #2745094401 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2745094401 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2745094401 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2745094401 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_5j85_subresjesgscIS_ftf_L14J15 #1148892499 -TrigSignatureMoniMT INFO -- #1148892499 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1148892499 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1148892499 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1148892499 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j55_pf_subresjesgscIS_ftf_0eta240_L14J15 #1526259867 -TrigSignatureMoniMT INFO -- #1526259867 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1526259867 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1526259867 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1526259867 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j55_subjesIS_0eta240_L14J15 #68179418 -TrigSignatureMoniMT INFO -- #68179418 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #68179418 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #68179418 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #68179418 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j55_subresjesgscIS_ftf_0eta240_L14J15 #1068073241 -TrigSignatureMoniMT INFO -- #1068073241 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1068073241 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1068073241 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1068073241 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j70_pf_subresjesgscIS_ftf_L14J15 #1755772565 -TrigSignatureMoniMT INFO -- #1755772565 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1755772565 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1755772565 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1755772565 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j70_subjesIS_L14J15 #1003115860 -TrigSignatureMoniMT INFO -- #1003115860 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1003115860 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1003115860 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1003115860 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j70_subresjesgscIS_ftf_L14J15 #59957514 -TrigSignatureMoniMT INFO -- #59957514 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #59957514 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #59957514 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #59957514 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_7j45_pf_subresjesgscIS_ftf_L14J15 #2701381398 -TrigSignatureMoniMT INFO -- #2701381398 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2701381398 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2701381398 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2701381398 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_7j45_subjesIS_L14J15 #2617173782 -TrigSignatureMoniMT INFO -- #2617173782 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2617173782 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2617173782 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2617173782 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_7j45_subresjesgscIS_ftf_L14J15 #2928962349 -TrigSignatureMoniMT INFO -- #2928962349 Events 9 9 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2928962349 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2928962349 Events 9 9 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2928962349 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_JetDS_j0_L1J100 #3302698716 -TrigSignatureMoniMT INFO -- #3302698716 Events 3 3 0 0 0 0 0 0 0 0 0 3 3 3 - 3 -TrigSignatureMoniMT INFO -- #3302698716 Features 0 0 0 0 0 0 0 0 0 81 32 3 - +TrigSignatureMoniMT INFO -- #3302698716 Events 3 3 0 0 0 0 0 0 0 0 0 0 3 3 3 - 3 +TrigSignatureMoniMT INFO -- #3302698716 Features 0 0 0 0 0 0 0 0 0 0 81 32 3 - TrigSignatureMoniMT INFO HLT_alfacalib_AlfaPEB_L1ALFA_ANY #4094852824 -TrigSignatureMoniMT INFO -- #4094852824 Events 0 0 0 - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4094852824 Features 0 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4094852824 Events 0 0 0 - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4094852824 Features 0 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_beamspot_allTE_trkfast_BeamSpotPEB_L1J15 #3989372080 -TrigSignatureMoniMT INFO -- #3989372080 Events 20 0 0 0 - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3989372080 Features 0 0 - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3989372080 Events 20 0 0 0 - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3989372080 Features 0 0 - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_beamspot_trkFS_trkfast_BeamSpotPEB_L1J15 #628534730 -TrigSignatureMoniMT INFO -- #628534730 Events 20 0 0 0 - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #628534730 Features 0 0 - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #628534730 Events 20 0 0 0 - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #628534730 Features 0 0 - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_costmonitor_CostMonDS_L1All #843341480 -TrigSignatureMoniMT INFO -- #843341480 Events 20 20 20 - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #843341480 Features 20 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #843341480 Events 20 20 20 - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #843341480 Features 20 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_cscmon_CSCPEB_L1All #445495871 -TrigSignatureMoniMT INFO -- #445495871 Events 20 20 20 - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #445495871 Features 20 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #445495871 Events 20 20 20 - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #445495871 Features 20 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e12_lhloose_2mu10_L12MU10 #4167710884 -TrigSignatureMoniMT INFO -- #4167710884 Events 3 3 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #4167710884 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #4167710884 Events 3 3 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #4167710884 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_e140_lhloose_L1EM22VHI #3471067710 -TrigSignatureMoniMT INFO -- #3471067710 Events 6 6 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3471067710 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3471067710 Events 6 6 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3471067710 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e140_lhloose_nod0_L1EM22VHI #4128870680 -TrigSignatureMoniMT INFO -- #4128870680 Events 6 6 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4128870680 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #4128870680 Events 6 6 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4128870680 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e17_lhloose_mu14_L1EM15VH_MU10 #899946230 -TrigSignatureMoniMT INFO -- #899946230 Events 3 3 2 2 2 2 2 2 2 2 - - - - - 2 -TrigSignatureMoniMT INFO -- #899946230 Features 2 45 4 2 2 2 2 2 - - - - - +TrigSignatureMoniMT INFO -- #899946230 Events 3 3 2 2 2 2 2 2 2 2 2 - - - - - 2 +TrigSignatureMoniMT INFO -- #899946230 Features 2 45 4 2 2 2 2 2 2 - - - - - TrigSignatureMoniMT INFO HLT_e17_lhvloose_nod0_L1EM15VH #140779220 -TrigSignatureMoniMT INFO -- #140779220 Events 8 8 6 6 6 5 - - - - - - - - - 5 -TrigSignatureMoniMT INFO -- #140779220 Features 6 78 10 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #140779220 Events 8 8 6 6 6 6 5 - - - - - - - - - 5 +TrigSignatureMoniMT INFO -- #140779220 Features 6 78 10 6 5 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e20_lhmedium_e15_lhmedium_Zee_L12EM3 #1784800924 -TrigSignatureMoniMT INFO -- #1784800924 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1784800924 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1784800924 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1784800924 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e24_lhmedium_2g12_loose_L1EM20VH_3EM10VH #2668628593 -TrigSignatureMoniMT INFO -- #2668628593 Events 2 2 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2668628593 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2668628593 Events 2 2 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2668628593 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e24_lhmedium_g25_medium_L12EM20VH #2785977835 -TrigSignatureMoniMT INFO -- #2785977835 Events 2 2 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2785977835 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2785977835 Events 2 2 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2785977835 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e24_lhvloose_2e12_lhvloose_L1EM20VH_3EM10VH #9348946 -TrigSignatureMoniMT INFO -- #9348946 Events 2 2 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #9348946 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #9348946 Events 2 2 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #9348946 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e24_lhvloose_L1EM20VH #2442891649 -TrigSignatureMoniMT INFO -- #2442891649 Events 7 7 6 6 6 5 - - - - - - - - - 5 -TrigSignatureMoniMT INFO -- #2442891649 Features 6 78 10 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2442891649 Events 7 7 6 6 6 6 5 - - - - - - - - - 5 +TrigSignatureMoniMT INFO -- #2442891649 Features 6 78 10 6 5 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_etcut_L1EM22VHI #1703681121 -TrigSignatureMoniMT INFO -- #1703681121 Events 6 6 6 6 6 - - - - - - - - - - 6 -TrigSignatureMoniMT INFO -- #1703681121 Features 7 136 7 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1703681121 Events 6 6 6 6 6 6 - - - - - - - - - - 6 +TrigSignatureMoniMT INFO -- #1703681121 Features 7 136 7 7 - - - - - - - - - - +TrigSignatureMoniMT INFO HLT_e26_lhloose_L1EM22VHI #3666848578 +TrigSignatureMoniMT INFO -- #3666848578 Events 6 6 5 5 5 5 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #3666848578 Features 5 64 8 5 4 - - - - - - - - - +TrigSignatureMoniMT INFO HLT_e26_lhmedium_L1EM22VHI #3961631254 +TrigSignatureMoniMT INFO -- #3961631254 Events 6 6 5 5 5 5 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #3961631254 Features 5 64 8 5 4 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhmedium_mu8noL1_L1EM22VHI #4270718007 -TrigSignatureMoniMT INFO -- #4270718007 Events 6 6 5 5 5 4 0 0 0 0 0 0 0 2 2 2 -TrigSignatureMoniMT INFO -- #4270718007 Features 5 64 8 4 0 0 0 0 0 0 0 2 2 +TrigSignatureMoniMT INFO -- #4270718007 Events 6 6 5 5 5 5 4 0 0 0 0 0 0 0 2 2 2 +TrigSignatureMoniMT INFO -- #4270718007 Features 5 64 8 5 4 0 0 0 0 0 0 0 2 2 TrigSignatureMoniMT INFO HLT_e26_lhtight_L1EM22VHI #1995263521 -TrigSignatureMoniMT INFO -- #1995263521 Events 6 6 5 5 5 4 - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #1995263521 Features 5 64 8 4 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1995263521 Events 6 6 5 5 5 5 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #1995263521 Features 5 64 8 5 4 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhtight_ivarloose_L1EM22VHI #2918307206 -TrigSignatureMoniMT INFO -- #2918307206 Events 6 6 5 5 5 3 - - - - - - - - - 3 -TrigSignatureMoniMT INFO -- #2918307206 Features 5 64 8 3 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2918307206 Events 6 6 5 5 5 5 3 - - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #2918307206 Features 5 64 8 5 3 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhtight_ivarmedium_L1EM22VHI #2653558903 -TrigSignatureMoniMT INFO -- #2653558903 Events 6 6 5 5 5 3 - - - - - - - - - 3 -TrigSignatureMoniMT INFO -- #2653558903 Features 5 64 8 3 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2653558903 Events 6 6 5 5 5 5 3 - - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #2653558903 Features 5 64 8 5 3 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhtight_ivartight_L1EM22VHI #1679339192 -TrigSignatureMoniMT INFO -- #1679339192 Events 6 6 5 5 5 3 - - - - - - - - - 3 -TrigSignatureMoniMT INFO -- #1679339192 Features 5 64 8 3 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1679339192 Events 6 6 5 5 5 5 3 - - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #1679339192 Features 5 64 8 5 3 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhtight_nod0_L1EM22VHI #939763520 -TrigSignatureMoniMT INFO -- #939763520 Events 6 6 5 5 5 4 - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #939763520 Features 5 64 8 4 - - - - - - - - - +TrigSignatureMoniMT INFO -- #939763520 Events 6 6 5 5 5 5 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #939763520 Features 5 64 8 5 4 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhtight_nod0_L1EM24VHI #4227411116 -TrigSignatureMoniMT INFO -- #4227411116 Events 6 6 5 5 5 4 - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #4227411116 Features 5 64 8 4 - - - - - - - - - +TrigSignatureMoniMT INFO -- #4227411116 Events 6 6 5 5 5 5 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #4227411116 Features 5 64 8 5 4 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e300_etcut_L1EM22VHI #2128128255 -TrigSignatureMoniMT INFO -- #2128128255 Events 6 6 0 0 0 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2128128255 Features 0 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2128128255 Events 6 6 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2128128255 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e3_etcut1step_g5_etcut_L12EM3 #1745513164 -TrigSignatureMoniMT INFO -- #1745513164 Events 20 20 17 17 17 - - - - - - - - - - 17 -TrigSignatureMoniMT INFO -- #1745513164 Features 55 55 55 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1745513164 Events 20 20 17 17 17 - - - - - - - - - - - 17 +TrigSignatureMoniMT INFO -- #1745513164 Features 55 55 55 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e3_etcut_L1EM3 #683953566 -TrigSignatureMoniMT INFO -- #683953566 Events 20 20 20 20 20 - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #683953566 Features 171 1862 369 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #683953566 Events 20 20 20 20 20 20 - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #683953566 Features 171 1862 369 154 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_etcut_L1EM3 #324908483 -TrigSignatureMoniMT INFO -- #324908483 Events 20 20 20 20 20 - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #324908483 Features 137 1672 190 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #324908483 Events 20 20 20 20 20 20 - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #324908483 Features 137 1672 190 118 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhloose_L1EM3 #736648247 -TrigSignatureMoniMT INFO -- #736648247 Events 20 20 18 18 18 4 - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #736648247 Features 54 589 105 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #736648247 Events 20 20 18 18 18 18 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #736648247 Features 54 589 105 53 5 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhloose_noringer_L1EM3 #1053337356 -TrigSignatureMoniMT INFO -- #1053337356 Events 20 20 17 17 17 4 - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #1053337356 Features 56 655 113 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1053337356 Events 20 20 17 17 17 17 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #1053337356 Features 56 655 113 56 5 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhmedium_L1EM3 #2713915187 -TrigSignatureMoniMT INFO -- #2713915187 Events 20 20 18 18 18 4 - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #2713915187 Features 53 584 102 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2713915187 Events 20 20 18 18 18 18 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #2713915187 Features 53 584 102 52 5 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhmedium_noringer_L1EM3 #176627878 -TrigSignatureMoniMT INFO -- #176627878 Events 20 20 16 16 16 4 - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #176627878 Features 48 536 91 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #176627878 Events 20 20 16 16 16 16 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #176627878 Features 48 536 91 48 5 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhtight_L1EM3 #2070133824 -TrigSignatureMoniMT INFO -- #2070133824 Events 20 20 18 18 18 4 - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #2070133824 Features 51 563 97 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2070133824 Events 20 20 18 18 18 18 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #2070133824 Features 51 563 97 50 5 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhtight_nod0_L1EM3 #3303895627 -TrigSignatureMoniMT INFO -- #3303895627 Events 20 20 18 18 18 4 - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #3303895627 Features 51 563 97 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3303895627 Events 20 20 18 18 18 18 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #3303895627 Features 51 563 97 50 5 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhtight_noringer_L1EM3 #2758326765 -TrigSignatureMoniMT INFO -- #2758326765 Events 20 20 16 16 16 4 - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #2758326765 Features 45 518 82 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2758326765 Events 20 20 16 16 16 16 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #2758326765 Features 45 518 82 45 5 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhtight_noringer_nod0_L1EM3 #1690619419 -TrigSignatureMoniMT INFO -- #1690619419 Events 20 20 16 16 16 4 - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #1690619419 Features 45 518 82 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1690619419 Events 20 20 16 16 16 16 4 - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #1690619419 Features 45 518 82 45 5 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e60_lhmedium_L1EM22VHI #298591874 -TrigSignatureMoniMT INFO -- #298591874 Events 6 6 2 2 2 2 - - - - - - - - - 2 -TrigSignatureMoniMT INFO -- #298591874 Features 2 33 4 2 - - - - - - - - - +TrigSignatureMoniMT INFO -- #298591874 Events 6 6 2 2 2 2 2 - - - - - - - - - 2 +TrigSignatureMoniMT INFO -- #298591874 Features 2 33 4 2 2 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e60_lhmedium_nod0_L1EM22VHI #4115486024 -TrigSignatureMoniMT INFO -- #4115486024 Events 6 6 2 2 2 2 - - - - - - - - - 2 -TrigSignatureMoniMT INFO -- #4115486024 Features 2 33 4 2 - - - - - - - - - +TrigSignatureMoniMT INFO -- #4115486024 Events 6 6 2 2 2 2 2 - - - - - - - - - 2 +TrigSignatureMoniMT INFO -- #4115486024 Features 2 33 4 2 2 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e7_etcut_L1EM3 #1959043579 -TrigSignatureMoniMT INFO -- #1959043579 Events 20 20 20 20 20 - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1959043579 Features 89 1141 112 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1959043579 Events 20 20 20 20 20 20 - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1959043579 Features 89 1141 112 76 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e7_lhmedium_mu24_L1MU20 #2970063918 -TrigSignatureMoniMT INFO -- #2970063918 Events 8 8 7 7 7 2 2 1 1 1 - - - - - 1 -TrigSignatureMoniMT INFO -- #2970063918 Features 9 92 17 2 2 1 1 1 - - - - - +TrigSignatureMoniMT INFO -- #2970063918 Events 8 8 7 7 7 7 2 2 1 1 1 - - - - - 1 +TrigSignatureMoniMT INFO -- #2970063918 Features 9 92 17 9 2 2 1 1 1 - - - - - TrigSignatureMoniMT INFO HLT_eb_low_L1RD2_FILLED #4118297848 -TrigSignatureMoniMT INFO -- #4118297848 Events 20 20 20 - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #4118297848 Features 20 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4118297848 Events 20 20 20 - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #4118297848 Features 20 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_eb_medium_L1RD2_FILLED #1437001236 -TrigSignatureMoniMT INFO -- #1437001236 Events 20 20 19 - - - - - - - - - - - - 19 -TrigSignatureMoniMT INFO -- #1437001236 Features 19 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1437001236 Events 20 20 19 - - - - - - - - - - - - - 19 +TrigSignatureMoniMT INFO -- #1437001236 Features 19 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g120_loose_L1EM22VHI #1771279554 -TrigSignatureMoniMT INFO -- #1771279554 Events 6 6 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1771279554 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1771279554 Events 6 6 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1771279554 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g140_etcut_L1EM22VHI #3879926061 -TrigSignatureMoniMT INFO -- #3879926061 Events 6 6 0 0 0 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3879926061 Features 0 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3879926061 Events 6 6 0 0 0 - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3879926061 Features 0 0 0 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g140_etcut_L1EM24VHI #1045486446 -TrigSignatureMoniMT INFO -- #1045486446 Events 6 6 0 0 0 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1045486446 Features 0 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1045486446 Events 6 6 0 0 0 - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1045486446 Features 0 0 0 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g140_loose_L1EM22VHI #1776910226 -TrigSignatureMoniMT INFO -- #1776910226 Events 6 6 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1776910226 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1776910226 Events 6 6 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1776910226 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g20_etcut_LArPEB_L1EM15 #2706532790 -TrigSignatureMoniMT INFO -- #2706532790 Events 14 14 14 14 12 12 - - - - - - - - - 12 -TrigSignatureMoniMT INFO -- #2706532790 Features 24 24 22 20 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2706532790 Events 14 14 14 14 12 12 - - - - - - - - - - 12 +TrigSignatureMoniMT INFO -- #2706532790 Features 24 24 22 20 - - - - - - - - - - +TrigSignatureMoniMT INFO HLT_g20_loose_L1EM15VH #2302901479 +TrigSignatureMoniMT INFO -- #2302901479 Events 8 8 8 8 8 6 - - - - - - - - - - 6 +TrigSignatureMoniMT INFO -- #2302901479 Features 9 9 18 6 - - - - - - - - - - +TrigSignatureMoniMT INFO HLT_g20_medium_L1EM15VH #3828320433 +TrigSignatureMoniMT INFO -- #3828320433 Events 8 8 8 8 8 6 - - - - - - - - - - 6 +TrigSignatureMoniMT INFO -- #3828320433 Features 8 8 16 6 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g20_tight_L1EM15VH #270010748 -TrigSignatureMoniMT INFO -- #270010748 Events 8 8 8 8 8 5 - - - - - - - - - 5 -TrigSignatureMoniMT INFO -- #270010748 Features 8 8 16 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #270010748 Events 8 8 8 8 8 5 - - - - - - - - - - 5 +TrigSignatureMoniMT INFO -- #270010748 Features 8 8 16 5 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g20_tight_icaloloose_L1EM15VH #4091638976 -TrigSignatureMoniMT INFO -- #4091638976 Events 8 8 8 8 8 5 - - - - - - - - - 5 -TrigSignatureMoniMT INFO -- #4091638976 Features 8 8 16 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #4091638976 Events 8 8 8 8 8 5 - - - - - - - - - - 5 +TrigSignatureMoniMT INFO -- #4091638976 Features 8 8 16 5 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g20_tight_icalomedium_L1EM15VH #2032419080 -TrigSignatureMoniMT INFO -- #2032419080 Events 8 8 8 8 8 5 - - - - - - - - - 5 -TrigSignatureMoniMT INFO -- #2032419080 Features 8 8 16 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2032419080 Events 8 8 8 8 8 5 - - - - - - - - - - 5 +TrigSignatureMoniMT INFO -- #2032419080 Features 8 8 16 5 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g20_tight_icalotight_L1EM15VH #2824200612 -TrigSignatureMoniMT INFO -- #2824200612 Events 8 8 8 8 8 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2824200612 Features 8 8 16 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2824200612 Events 8 8 8 8 8 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2824200612 Features 8 8 16 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g22_tight_L1EM15VH #1357440659 -TrigSignatureMoniMT INFO -- #1357440659 Events 8 8 7 7 7 5 - - - - - - - - - 5 -TrigSignatureMoniMT INFO -- #1357440659 Features 7 7 13 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1357440659 Events 8 8 7 7 7 5 - - - - - - - - - - 5 +TrigSignatureMoniMT INFO -- #1357440659 Features 7 7 13 5 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g25_etcut_L1EM20VH #1417839619 -TrigSignatureMoniMT INFO -- #1417839619 Events 7 7 7 7 7 - - - - - - - - - - 7 -TrigSignatureMoniMT INFO -- #1417839619 Features 11 11 10 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1417839619 Events 7 7 7 7 7 - - - - - - - - - - - 7 +TrigSignatureMoniMT INFO -- #1417839619 Features 11 11 10 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g25_loose_L1EM20VH #3476696431 -TrigSignatureMoniMT INFO -- #3476696431 Events 7 7 7 7 7 6 - - - - - - - - - 6 -TrigSignatureMoniMT INFO -- #3476696431 Features 9 9 18 7 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3476696431 Events 7 7 7 7 7 6 - - - - - - - - - - 6 +TrigSignatureMoniMT INFO -- #3476696431 Features 9 9 18 7 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g25_medium_L1EM20VH #1519793981 -TrigSignatureMoniMT INFO -- #1519793981 Events 7 7 7 7 7 6 - - - - - - - - - 6 -TrigSignatureMoniMT INFO -- #1519793981 Features 7 7 13 6 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1519793981 Events 7 7 7 7 7 6 - - - - - - - - - - 6 +TrigSignatureMoniMT INFO -- #1519793981 Features 7 7 13 6 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g25_medium_mu24_ivarmedium_L1MU20 #1007052793 -TrigSignatureMoniMT INFO -- #1007052793 Events 8 8 2 2 2 2 2 1 1 1 0 - - - - 0 -TrigSignatureMoniMT INFO -- #1007052793 Features 2 2 4 2 2 1 1 1 0 - - - - +TrigSignatureMoniMT INFO -- #1007052793 Events 8 8 2 2 2 2 0 2 1 1 1 0 - - - - 0 +TrigSignatureMoniMT INFO -- #1007052793 Features 2 2 4 2 0 2 1 1 1 0 - - - - TrigSignatureMoniMT INFO HLT_g25_tight_L1EM20VH #3370790749 -TrigSignatureMoniMT INFO -- #3370790749 Events 7 7 7 7 7 5 - - - - - - - - - 5 -TrigSignatureMoniMT INFO -- #3370790749 Features 7 7 13 5 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3370790749 Events 7 7 7 7 7 5 - - - - - - - - - - 5 +TrigSignatureMoniMT INFO -- #3370790749 Features 7 7 13 5 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g300_etcut_L1EM22VHI #310189774 -TrigSignatureMoniMT INFO -- #310189774 Events 6 6 0 0 0 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #310189774 Features 0 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #310189774 Events 6 6 0 0 0 - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #310189774 Features 0 0 0 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g35_loose_mu18_L1EM24VHI #3939387897 -TrigSignatureMoniMT INFO -- #3939387897 Events 6 6 2 2 2 2 2 1 1 1 - - - - - 1 -TrigSignatureMoniMT INFO -- #3939387897 Features 2 2 4 2 2 1 1 1 - - - - - +TrigSignatureMoniMT INFO -- #3939387897 Events 6 6 2 2 2 2 0 2 1 1 1 - - - - - 1 +TrigSignatureMoniMT INFO -- #3939387897 Features 2 2 4 2 0 2 1 1 1 - - - - - TrigSignatureMoniMT INFO HLT_g35_medium_g25_medium_L12EM20VH #1158879722 -TrigSignatureMoniMT INFO -- #1158879722 Events 2 2 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1158879722 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1158879722 Events 2 2 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1158879722 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g35_tight_icalotight_mu18noL1_L1EM22VHI #2789346459 -TrigSignatureMoniMT INFO -- #2789346459 Events 6 6 5 5 5 0 0 0 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #2789346459 Features 5 5 8 0 0 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2789346459 Events 6 6 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2789346459 Features 5 5 8 0 0 0 0 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_g5_etcut_L1EM3 #471243435 -TrigSignatureMoniMT INFO -- #471243435 Events 20 20 20 20 20 - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #471243435 Features 137 137 190 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #471243435 Events 20 20 20 20 20 - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #471243435 Features 137 137 190 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g5_etcut_LArPEB_L1EM3 #3486231698 -TrigSignatureMoniMT INFO -- #3486231698 Events 20 20 20 20 20 20 - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3486231698 Features 137 137 190 118 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3486231698 Events 20 20 20 20 20 20 - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3486231698 Features 137 137 190 118 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g5_loose_L1EM3 #3230088967 -TrigSignatureMoniMT INFO -- #3230088967 Events 20 20 17 17 17 9 - - - - - - - - - 9 -TrigSignatureMoniMT INFO -- #3230088967 Features 56 56 113 12 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3230088967 Events 20 20 17 17 17 9 - - - - - - - - - - 9 +TrigSignatureMoniMT INFO -- #3230088967 Features 56 56 113 12 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g5_medium_L1EM3 #385248610 -TrigSignatureMoniMT INFO -- #385248610 Events 20 20 16 16 16 9 - - - - - - - - - 9 -TrigSignatureMoniMT INFO -- #385248610 Features 48 48 91 12 - - - - - - - - - +TrigSignatureMoniMT INFO -- #385248610 Events 20 20 16 16 16 9 - - - - - - - - - - 9 +TrigSignatureMoniMT INFO -- #385248610 Features 48 48 91 12 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g5_tight_L1EM3 #3280865118 -TrigSignatureMoniMT INFO -- #3280865118 Events 20 20 16 16 16 9 - - - - - - - - - 9 -TrigSignatureMoniMT INFO -- #3280865118 Features 45 45 82 9 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3280865118 Events 20 20 16 16 16 9 - - - - - - - - - - 9 +TrigSignatureMoniMT INFO -- #3280865118 Features 45 45 82 9 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_j0_aggSEP1000htSEP30etSEP0eta320_L1J20 #2436664735 -TrigSignatureMoniMT INFO -- #2436664735 Events 19 19 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2436664735 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2436664735 Events 19 19 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2436664735 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j0_aggSEP500htSEP30etSEP0eta320_L1J20 #4013575747 -TrigSignatureMoniMT INFO -- #4013575747 Events 19 19 0 0 0 0 0 0 0 0 0 1 - - - 1 -TrigSignatureMoniMT INFO -- #4013575747 Features 0 0 0 0 0 0 0 0 0 28 - - - +TrigSignatureMoniMT INFO -- #4013575747 Events 19 19 0 0 0 0 0 0 0 0 0 0 1 - - - 1 +TrigSignatureMoniMT INFO -- #4013575747 Features 0 0 0 0 0 0 0 0 0 0 28 - - - TrigSignatureMoniMT INFO HLT_j0_perf_L1J12_EMPTY #1341875780 -TrigSignatureMoniMT INFO -- #1341875780 Events 0 0 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1341875780 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1341875780 Events 0 0 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1341875780 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j0_vbenfSEP30etSEP34mass35SEP50fbet_L1J20 #4034799151 -TrigSignatureMoniMT INFO -- #4034799151 Events 19 19 0 0 0 0 0 0 0 0 0 15 - - - 15 -TrigSignatureMoniMT INFO -- #4034799151 Features 0 0 0 0 0 0 0 0 0 402 - - - +TrigSignatureMoniMT INFO -- #4034799151 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 +TrigSignatureMoniMT INFO -- #4034799151 Features 0 0 0 0 0 0 0 0 0 0 402 - - - TrigSignatureMoniMT INFO HLT_j225_subjesgscIS_ftf_bmv2c1040_split_L1J100 #219711753 -TrigSignatureMoniMT INFO -- #219711753 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #219711753 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #219711753 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #219711753 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j260_320eta490_L1J20 #3084792704 -TrigSignatureMoniMT INFO -- #3084792704 Events 19 19 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3084792704 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3084792704 Events 19 19 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3084792704 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j260_320eta490_L1J75_31ETA49 #3769257182 -TrigSignatureMoniMT INFO -- #3769257182 Events 2 2 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3769257182 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3769257182 Events 2 2 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3769257182 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j275_pf_subjesgscIS_ftf_bdl1r60_split_L1J100 #2912155644 -TrigSignatureMoniMT INFO -- #2912155644 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2912155644 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2912155644 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2912155644 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j275_pf_subjesgscIS_ftf_boffperf_split_L1J100 #9543810 -TrigSignatureMoniMT INFO -- #9543810 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #9543810 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #9543810 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #9543810 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_bdl1r60_split_L1J100 #2807668578 -TrigSignatureMoniMT INFO -- #2807668578 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2807668578 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2807668578 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2807668578 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_bmv2c1060_split_L1J100 #710546402 -TrigSignatureMoniMT INFO -- #710546402 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #710546402 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #710546402 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #710546402 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_boffperf_split_L1J100 #540369970 -TrigSignatureMoniMT INFO -- #540369970 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #540369970 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #540369970 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #540369970 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j300_pf_subjesgscIS_ftf_bdl1r70_split_L1J100 #2576796343 -TrigSignatureMoniMT INFO -- #2576796343 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2576796343 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2576796343 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2576796343 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j300_subjesgscIS_ftf_bdl1r70_split_L1J100 #2952175162 -TrigSignatureMoniMT INFO -- #2952175162 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2952175162 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2952175162 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2952175162 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j300_subjesgscIS_ftf_bmv2c1070_split_L1J100 #2074989613 -TrigSignatureMoniMT INFO -- #2074989613 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #2074989613 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #2074989613 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #2074989613 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j360_pf_subjesgscIS_ftf_bdl1r77_split_L1J100 #3049708671 -TrigSignatureMoniMT INFO -- #3049708671 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3049708671 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3049708671 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3049708671 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j360_subjesgscIS_ftf_bdl1r77_split_L1J100 #1563453863 -TrigSignatureMoniMT INFO -- #1563453863 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1563453863 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1563453863 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1563453863 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j360_subjesgscIS_ftf_bmv2c1077_split_L1J100 #4176355792 -TrigSignatureMoniMT INFO -- #4176355792 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #4176355792 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #4176355792 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #4176355792 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j420_L1J100 #2659902019 -TrigSignatureMoniMT INFO -- #2659902019 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2659902019 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2659902019 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2659902019 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j420_pf_subresjesgscIS_ftf_L1J100 #3936932891 -TrigSignatureMoniMT INFO -- #3936932891 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3936932891 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3936932891 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3936932891 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j420_subresjesgscIS_ftf_L1J100 #2477128298 -TrigSignatureMoniMT INFO -- #2477128298 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2477128298 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2477128298 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2477128298 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j45_L1J15 #1364976160 -TrigSignatureMoniMT INFO -- #1364976160 Events 20 20 0 0 0 0 0 0 0 0 0 19 - - - 19 -TrigSignatureMoniMT INFO -- #1364976160 Features 0 0 0 0 0 0 0 0 0 49 - - - +TrigSignatureMoniMT INFO -- #1364976160 Events 20 20 0 0 0 0 0 0 0 0 0 0 19 - - - 19 +TrigSignatureMoniMT INFO -- #1364976160 Features 0 0 0 0 0 0 0 0 0 0 49 - - - TrigSignatureMoniMT INFO HLT_j45_csskpf_nojcalib_ftf_L1J20 #2528888897 -TrigSignatureMoniMT INFO -- #2528888897 Events 19 19 0 0 0 0 0 0 0 0 0 15 - - - 15 -TrigSignatureMoniMT INFO -- #2528888897 Features 0 0 0 0 0 0 0 0 0 30 - - - +TrigSignatureMoniMT INFO -- #2528888897 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 +TrigSignatureMoniMT INFO -- #2528888897 Features 0 0 0 0 0 0 0 0 0 0 30 - - - TrigSignatureMoniMT INFO HLT_j45_cssktc_nojcalib_L1J20 #3295122398 -TrigSignatureMoniMT INFO -- #3295122398 Events 19 19 0 0 0 0 0 0 0 0 0 15 - - - 15 -TrigSignatureMoniMT INFO -- #3295122398 Features 0 0 0 0 0 0 0 0 0 27 - - - +TrigSignatureMoniMT INFO -- #3295122398 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 +TrigSignatureMoniMT INFO -- #3295122398 Features 0 0 0 0 0 0 0 0 0 0 27 - - - TrigSignatureMoniMT INFO HLT_j45_ftf_L1J15 #868405538 -TrigSignatureMoniMT INFO -- #868405538 Events 20 20 0 0 0 0 0 0 0 0 0 18 - - - 18 -TrigSignatureMoniMT INFO -- #868405538 Features 0 0 0 0 0 0 0 0 0 44 - - - +TrigSignatureMoniMT INFO -- #868405538 Events 20 20 0 0 0 0 0 0 0 0 0 0 18 - - - 18 +TrigSignatureMoniMT INFO -- #868405538 Features 0 0 0 0 0 0 0 0 0 0 44 - - - TrigSignatureMoniMT INFO HLT_j45_nojcalib_L1J20 #2042444294 -TrigSignatureMoniMT INFO -- #2042444294 Events 19 19 0 0 0 0 0 0 0 0 0 17 - - - 17 -TrigSignatureMoniMT INFO -- #2042444294 Features 0 0 0 0 0 0 0 0 0 39 - - - +TrigSignatureMoniMT INFO -- #2042444294 Events 19 19 0 0 0 0 0 0 0 0 0 0 17 - - - 17 +TrigSignatureMoniMT INFO -- #2042444294 Features 0 0 0 0 0 0 0 0 0 0 39 - - - TrigSignatureMoniMT INFO HLT_j45_pf_ftf_L1J20 #3679554988 -TrigSignatureMoniMT INFO -- #3679554988 Events 19 19 0 0 0 0 0 0 0 0 0 16 - - - 16 -TrigSignatureMoniMT INFO -- #3679554988 Features 0 0 0 0 0 0 0 0 0 35 - - - +TrigSignatureMoniMT INFO -- #3679554988 Events 19 19 0 0 0 0 0 0 0 0 0 0 16 - - - 16 +TrigSignatureMoniMT INFO -- #3679554988 Features 0 0 0 0 0 0 0 0 0 0 35 - - - TrigSignatureMoniMT INFO HLT_j45_pf_nojcalib_ftf_L1J20 #4202219904 -TrigSignatureMoniMT INFO -- #4202219904 Events 19 19 0 0 0 0 0 0 0 0 0 16 - - - 16 -TrigSignatureMoniMT INFO -- #4202219904 Features 0 0 0 0 0 0 0 0 0 36 - - - +TrigSignatureMoniMT INFO -- #4202219904 Events 19 19 0 0 0 0 0 0 0 0 0 0 16 - - - 16 +TrigSignatureMoniMT INFO -- #4202219904 Features 0 0 0 0 0 0 0 0 0 0 36 - - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_L1J20 #2187173741 -TrigSignatureMoniMT INFO -- #2187173741 Events 19 19 0 0 0 0 0 0 0 0 0 18 - - - 18 -TrigSignatureMoniMT INFO -- #2187173741 Features 0 0 0 0 0 0 0 0 0 39 - - - +TrigSignatureMoniMT INFO -- #2187173741 Events 19 19 0 0 0 0 0 0 0 0 0 0 18 - - - 18 +TrigSignatureMoniMT INFO -- #2187173741 Features 0 0 0 0 0 0 0 0 0 0 39 - - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_bdl1r70_split_L1J20 #4239752847 -TrigSignatureMoniMT INFO -- #4239752847 Events 19 19 0 0 0 0 0 0 0 0 0 18 - - - 18 -TrigSignatureMoniMT INFO -- #4239752847 Features 0 0 0 0 0 0 0 0 0 39 - - - +TrigSignatureMoniMT INFO -- #4239752847 Events 19 19 0 0 0 0 0 0 0 0 0 0 18 - - - 18 +TrigSignatureMoniMT INFO -- #4239752847 Features 0 0 0 0 0 0 0 0 0 0 39 - - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_boffperf_split_L1J20 #2546763674 -TrigSignatureMoniMT INFO -- #2546763674 Events 19 19 0 0 0 0 0 0 0 0 0 16 16 - - 16 -TrigSignatureMoniMT INFO -- #2546763674 Features 0 0 0 0 0 0 0 0 0 36 36 - - +TrigSignatureMoniMT INFO -- #2546763674 Events 19 19 0 0 0 0 0 0 0 0 0 0 16 16 - - 16 +TrigSignatureMoniMT INFO -- #2546763674 Features 0 0 0 0 0 0 0 0 0 0 36 36 - - TrigSignatureMoniMT INFO HLT_j45_sktc_nojcalib_L1J20 #1542468090 -TrigSignatureMoniMT INFO -- #1542468090 Events 19 19 0 0 0 0 0 0 0 0 0 15 - - - 15 -TrigSignatureMoniMT INFO -- #1542468090 Features 0 0 0 0 0 0 0 0 0 26 - - - +TrigSignatureMoniMT INFO -- #1542468090 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 +TrigSignatureMoniMT INFO -- #1542468090 Features 0 0 0 0 0 0 0 0 0 0 26 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_011jvt_L1J15 #266323220 -TrigSignatureMoniMT INFO -- #266323220 Events 20 20 0 0 0 0 0 0 0 0 0 13 - - - 13 -TrigSignatureMoniMT INFO -- #266323220 Features 0 0 0 0 0 0 0 0 0 29 - - - +TrigSignatureMoniMT INFO -- #266323220 Events 20 20 0 0 0 0 0 0 0 0 0 0 13 - - - 13 +TrigSignatureMoniMT INFO -- #266323220 Features 0 0 0 0 0 0 0 0 0 0 29 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_015jvt_L1J15 #3102941497 -TrigSignatureMoniMT INFO -- #3102941497 Events 20 20 0 0 0 0 0 0 0 0 0 13 - - - 13 -TrigSignatureMoniMT INFO -- #3102941497 Features 0 0 0 0 0 0 0 0 0 29 - - - +TrigSignatureMoniMT INFO -- #3102941497 Events 20 20 0 0 0 0 0 0 0 0 0 0 13 - - - 13 +TrigSignatureMoniMT INFO -- #3102941497 Features 0 0 0 0 0 0 0 0 0 0 29 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_059jvt_L1J15 #2237035634 -TrigSignatureMoniMT INFO -- #2237035634 Events 20 20 0 0 0 0 0 0 0 0 0 13 - - - 13 -TrigSignatureMoniMT INFO -- #2237035634 Features 0 0 0 0 0 0 0 0 0 28 - - - +TrigSignatureMoniMT INFO -- #2237035634 Events 20 20 0 0 0 0 0 0 0 0 0 0 13 - - - 13 +TrigSignatureMoniMT INFO -- #2237035634 Features 0 0 0 0 0 0 0 0 0 0 28 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_L1J15 #1960278431 -TrigSignatureMoniMT INFO -- #1960278431 Events 20 20 0 0 0 0 0 0 0 0 0 19 - - - 19 -TrigSignatureMoniMT INFO -- #1960278431 Features 0 0 0 0 0 0 0 0 0 50 - - - +TrigSignatureMoniMT INFO -- #1960278431 Events 20 20 0 0 0 0 0 0 0 0 0 0 19 - - - 19 +TrigSignatureMoniMT INFO -- #1960278431 Features 0 0 0 0 0 0 0 0 0 0 50 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_bdl1r70_split_L1J20 #2947439578 -TrigSignatureMoniMT INFO -- #2947439578 Events 19 19 0 0 0 0 0 0 0 0 0 19 - - - 19 -TrigSignatureMoniMT INFO -- #2947439578 Features 0 0 0 0 0 0 0 0 0 50 - - - +TrigSignatureMoniMT INFO -- #2947439578 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 - - - 19 +TrigSignatureMoniMT INFO -- #2947439578 Features 0 0 0 0 0 0 0 0 0 0 50 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_bmv2c1070_split_L1J20 #980453000 -TrigSignatureMoniMT INFO -- #980453000 Events 19 19 0 0 0 0 0 0 0 0 0 19 10 - - 10 -TrigSignatureMoniMT INFO -- #980453000 Features 0 0 0 0 0 0 0 0 0 49 19 - - +TrigSignatureMoniMT INFO -- #980453000 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 10 - - 10 +TrigSignatureMoniMT INFO -- #980453000 Features 0 0 0 0 0 0 0 0 0 0 49 19 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_boffperf_split_L1J20 #3374916154 -TrigSignatureMoniMT INFO -- #3374916154 Events 19 19 0 0 0 0 0 0 0 0 0 19 19 - - 19 -TrigSignatureMoniMT INFO -- #3374916154 Features 0 0 0 0 0 0 0 0 0 49 49 - - +TrigSignatureMoniMT INFO -- #3374916154 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 19 - - 19 +TrigSignatureMoniMT INFO -- #3374916154 Features 0 0 0 0 0 0 0 0 0 0 49 49 - - TrigSignatureMoniMT INFO HLT_j45_subresjesgscIS_ftf_L1J15 #1213239619 -TrigSignatureMoniMT INFO -- #1213239619 Events 20 20 0 0 0 0 0 0 0 0 0 18 - - - 18 -TrigSignatureMoniMT INFO -- #1213239619 Features 0 0 0 0 0 0 0 0 0 44 - - - +TrigSignatureMoniMT INFO -- #1213239619 Events 20 20 0 0 0 0 0 0 0 0 0 0 18 - - - 18 +TrigSignatureMoniMT INFO -- #1213239619 Features 0 0 0 0 0 0 0 0 0 0 44 - - - TrigSignatureMoniMT INFO HLT_j460_a10_lcw_subjes_L1J100 #3327656707 -TrigSignatureMoniMT INFO -- #3327656707 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3327656707 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3327656707 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3327656707 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10_lcw_subjes_L1J20 #215408633 -TrigSignatureMoniMT INFO -- #215408633 Events 19 19 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #215408633 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #215408633 Events 19 19 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #215408633 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10r_L1J100 #1151767619 -TrigSignatureMoniMT INFO -- #1151767619 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1151767619 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1151767619 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1151767619 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10r_L1J20 #3875082669 -TrigSignatureMoniMT INFO -- #3875082669 Events 19 19 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3875082669 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3875082669 Events 19 19 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3875082669 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_jes_ftf_35smcINF_L1J100 #3781128663 -TrigSignatureMoniMT INFO -- #3781128663 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3781128663 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3781128663 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3781128663 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_jes_ftf_L1J100 #1509950051 -TrigSignatureMoniMT INFO -- #1509950051 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1509950051 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1509950051 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1509950051 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_nojcalib_ftf_35smcINF_L1J100 #249842682 -TrigSignatureMoniMT INFO -- #249842682 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #249842682 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #249842682 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #249842682 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_nojcalib_ftf_L1J100 #3452032818 -TrigSignatureMoniMT INFO -- #3452032818 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3452032818 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3452032818 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3452032818 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_lcw_nojcalib_L1J100 #3093997295 -TrigSignatureMoniMT INFO -- #3093997295 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3093997295 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3093997295 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3093997295 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_pf_nojcalib_ftf_L1J100 #2138269254 -TrigSignatureMoniMT INFO -- #2138269254 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2138269254 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2138269254 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2138269254 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10t_lcw_jes_30smcINF_L1J100 #2296827117 -TrigSignatureMoniMT INFO -- #2296827117 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2296827117 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2296827117 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2296827117 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10t_lcw_jes_L1J100 #436385969 -TrigSignatureMoniMT INFO -- #436385969 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #436385969 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #436385969 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #436385969 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10t_lcw_nojcalib_35smcINF_L1J100 #3224465417 -TrigSignatureMoniMT INFO -- #3224465417 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3224465417 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3224465417 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3224465417 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10t_lcw_nojcalib_L1J100 #1966129844 -TrigSignatureMoniMT INFO -- #1966129844 Events 3 3 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1966129844 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1966129844 Events 3 3 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1966129844 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j80_0eta240_2j60_320eta490_j0_dijetSEP80j1etSEP0j1eta240SEP80j2etSEP0j2eta240SEP700djmass_L1J20 #3634067472 -TrigSignatureMoniMT INFO -- #3634067472 Events 19 19 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3634067472 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3634067472 Events 19 19 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3634067472 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j80_L1J15 #2440872308 -TrigSignatureMoniMT INFO -- #2440872308 Events 20 20 0 0 0 0 0 0 0 0 0 13 - - - 13 -TrigSignatureMoniMT INFO -- #2440872308 Features 0 0 0 0 0 0 0 0 0 23 - - - +TrigSignatureMoniMT INFO -- #2440872308 Events 20 20 0 0 0 0 0 0 0 0 0 0 13 - - - 13 +TrigSignatureMoniMT INFO -- #2440872308 Features 0 0 0 0 0 0 0 0 0 0 23 - - - TrigSignatureMoniMT INFO HLT_j80_j60_L1J15 #582699527 -TrigSignatureMoniMT INFO -- #582699527 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #582699527 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #582699527 Events 20 20 0 0 0 0 0 0 0 0 0 0 8 - - - 8 +TrigSignatureMoniMT INFO -- #582699527 Features 0 0 0 0 0 0 0 0 0 0 24 - - - TrigSignatureMoniMT INFO HLT_j85_L1J20 #510475538 -TrigSignatureMoniMT INFO -- #510475538 Events 19 19 0 0 0 0 0 0 0 0 0 13 - - - 13 -TrigSignatureMoniMT INFO -- #510475538 Features 0 0 0 0 0 0 0 0 0 21 - - - +TrigSignatureMoniMT INFO -- #510475538 Events 19 19 0 0 0 0 0 0 0 0 0 0 13 - - - 13 +TrigSignatureMoniMT INFO -- #510475538 Features 0 0 0 0 0 0 0 0 0 0 21 - - - TrigSignatureMoniMT INFO HLT_j85_ftf_L1J20 #877042532 -TrigSignatureMoniMT INFO -- #877042532 Events 19 19 0 0 0 0 0 0 0 0 0 12 - - - 12 -TrigSignatureMoniMT INFO -- #877042532 Features 0 0 0 0 0 0 0 0 0 18 - - - +TrigSignatureMoniMT INFO -- #877042532 Events 19 19 0 0 0 0 0 0 0 0 0 0 12 - - - 12 +TrigSignatureMoniMT INFO -- #877042532 Features 0 0 0 0 0 0 0 0 0 0 18 - - - TrigSignatureMoniMT INFO HLT_j85_pf_ftf_L1J20 #789444389 -TrigSignatureMoniMT INFO -- #789444389 Events 19 19 0 0 0 0 0 0 0 0 0 11 - - - 11 -TrigSignatureMoniMT INFO -- #789444389 Features 0 0 0 0 0 0 0 0 0 17 - - - +TrigSignatureMoniMT INFO -- #789444389 Events 19 19 0 0 0 0 0 0 0 0 0 0 11 - - - 11 +TrigSignatureMoniMT INFO -- #789444389 Features 0 0 0 0 0 0 0 0 0 0 17 - - - TrigSignatureMoniMT INFO HLT_mb_sptrk_L1RD0_FILLED #4097312640 -TrigSignatureMoniMT INFO -- #4097312640 Events 20 0 0 0 - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4097312640 Features 0 0 - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4097312640 Events 20 0 0 0 - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4097312640 Features 0 0 - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_mu0_muoncalib_L1MU20 #997163309 -TrigSignatureMoniMT INFO -- #997163309 Events 8 8 0 0 0 0 0 - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #997163309 Features 0 0 0 0 0 - - - - - - - - +TrigSignatureMoniMT INFO -- #997163309 Events 8 8 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #997163309 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_mu0_muoncalib_L1MU4_EMPTY #782182242 -TrigSignatureMoniMT INFO -- #782182242 Events 0 0 0 0 0 0 0 - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #782182242 Features 0 0 0 0 0 - - - - - - - - +TrigSignatureMoniMT INFO -- #782182242 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #782182242 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_mu10_L1MU10 #209090273 -TrigSignatureMoniMT INFO -- #209090273 Events 10 10 0 0 0 0 10 10 10 8 - - - - - 8 -TrigSignatureMoniMT INFO -- #209090273 Features 0 0 0 0 12 12 13 10 - - - - - +TrigSignatureMoniMT INFO -- #209090273 Events 10 10 0 0 0 0 0 10 10 10 9 - - - - - 9 +TrigSignatureMoniMT INFO -- #209090273 Features 0 0 0 0 0 12 12 13 11 - - - - - TrigSignatureMoniMT INFO HLT_mu10_ivarmedium_mu10_10invm70_L12MU10 #2386882549 -TrigSignatureMoniMT INFO -- #2386882549 Events 3 3 0 0 0 0 2 2 2 2 2 - - - - 2 -TrigSignatureMoniMT INFO -- #2386882549 Features 0 0 0 0 4 4 4 4 2 - - - - +TrigSignatureMoniMT INFO -- #2386882549 Events 3 3 0 0 0 0 0 2 2 2 2 2 - - - - 2 +TrigSignatureMoniMT INFO -- #2386882549 Features 0 0 0 0 0 4 4 4 4 2 - - - - TrigSignatureMoniMT INFO HLT_mu10_lateMu_L1LATE-MU10_XE50 #1787564306 -TrigSignatureMoniMT INFO -- #1787564306 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1787564306 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1787564306 Events 0 0 0 0 0 0 0 0 0 - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1787564306 Features 0 0 0 0 0 0 0 - - - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bBmumu_L1MU11_2MU6 #947854469 -TrigSignatureMoniMT INFO -- #947854469 Events 4 4 0 0 0 0 3 0 2 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #947854469 Features 0 0 0 0 6 0 4 0 - - - - - +TrigSignatureMoniMT INFO -- #947854469 Events 4 4 0 0 0 0 0 3 0 2 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #947854469 Features 0 0 0 0 0 6 0 4 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bDimu2700_L1MU11_2MU6 #4293593869 -TrigSignatureMoniMT INFO -- #4293593869 Events 4 4 0 0 0 0 3 0 2 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #4293593869 Features 0 0 0 0 6 0 4 0 - - - - - +TrigSignatureMoniMT INFO -- #4293593869 Events 4 4 0 0 0 0 0 3 0 2 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #4293593869 Features 0 0 0 0 0 6 0 4 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bDimu_L1MU11_2MU6 #2381335347 -TrigSignatureMoniMT INFO -- #2381335347 Events 4 4 0 0 0 0 3 0 2 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2381335347 Features 0 0 0 0 6 0 4 0 - - - - - +TrigSignatureMoniMT INFO -- #2381335347 Events 4 4 0 0 0 0 0 3 0 2 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2381335347 Features 0 0 0 0 0 6 0 4 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bJpsimumu_L1MU11_2MU6 #2504965945 -TrigSignatureMoniMT INFO -- #2504965945 Events 4 4 0 0 0 0 3 0 2 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2504965945 Features 0 0 0 0 6 0 4 0 - - - - - +TrigSignatureMoniMT INFO -- #2504965945 Events 4 4 0 0 0 0 0 3 0 2 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2504965945 Features 0 0 0 0 0 6 0 4 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bPhi_L1MU11_2MU6 #2079901197 -TrigSignatureMoniMT INFO -- #2079901197 Events 4 4 0 0 0 0 3 0 2 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2079901197 Features 0 0 0 0 6 0 4 0 - - - - - +TrigSignatureMoniMT INFO -- #2079901197 Events 4 4 0 0 0 0 0 3 0 2 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2079901197 Features 0 0 0 0 0 6 0 4 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bTau_L1MU11_2MU6 #1292401093 -TrigSignatureMoniMT INFO -- #1292401093 Events 4 4 0 0 0 0 3 0 2 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1292401093 Features 0 0 0 0 6 0 4 0 - - - - - +TrigSignatureMoniMT INFO -- #1292401093 Events 4 4 0 0 0 0 0 3 0 2 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1292401093 Features 0 0 0 0 0 6 0 4 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bUpsimumu_L1MU11_2MU6 #1171632195 -TrigSignatureMoniMT INFO -- #1171632195 Events 4 4 0 0 0 0 3 0 2 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1171632195 Features 0 0 0 0 6 0 4 0 - - - - - +TrigSignatureMoniMT INFO -- #1171632195 Events 4 4 0 0 0 0 0 3 0 2 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1171632195 Features 0 0 0 0 0 6 0 4 0 - - - - - TrigSignatureMoniMT INFO HLT_mu14_L1MU10 #1696906927 -TrigSignatureMoniMT INFO -- #1696906927 Events 10 10 0 0 0 0 10 8 8 7 - - - - - 7 -TrigSignatureMoniMT INFO -- #1696906927 Features 0 0 0 0 12 9 10 8 - - - - - +TrigSignatureMoniMT INFO -- #1696906927 Events 10 10 0 0 0 0 0 10 8 8 7 - - - - - 7 +TrigSignatureMoniMT INFO -- #1696906927 Features 0 0 0 0 0 12 9 10 8 - - - - - TrigSignatureMoniMT INFO HLT_mu20_2mu4noL1_L1MU20 #1029128679 -TrigSignatureMoniMT INFO -- #1029128679 Events 8 8 0 0 0 0 8 5 5 5 0 0 0 1 1 1 -TrigSignatureMoniMT INFO -- #1029128679 Features 0 0 0 0 10 6 6 6 0 0 0 2 2 +TrigSignatureMoniMT INFO -- #1029128679 Events 8 8 0 0 0 0 0 8 5 5 5 0 0 0 1 1 1 +TrigSignatureMoniMT INFO -- #1029128679 Features 0 0 0 0 0 10 6 6 6 0 0 0 2 2 TrigSignatureMoniMT INFO HLT_mu20_ivarmedium_mu4noL1_10invm70_L1MU20 #2942530653 -TrigSignatureMoniMT INFO -- #2942530653 Events 8 8 0 0 0 0 8 5 5 5 3 0 0 2 2 2 -TrigSignatureMoniMT INFO -- #2942530653 Features 0 0 0 0 10 6 6 6 3 0 0 2 2 +TrigSignatureMoniMT INFO -- #2942530653 Events 8 8 0 0 0 0 0 8 5 5 5 3 0 0 2 2 2 +TrigSignatureMoniMT INFO -- #2942530653 Features 0 0 0 0 0 10 6 6 6 3 0 0 2 2 TrigSignatureMoniMT INFO HLT_mu20_ivarmedium_mu8noL1_L1MU20 #3249386942 -TrigSignatureMoniMT INFO -- #3249386942 Events 8 8 0 0 0 0 8 5 5 5 3 0 0 1 1 1 -TrigSignatureMoniMT INFO -- #3249386942 Features 0 0 0 0 10 6 6 6 3 0 0 1 1 +TrigSignatureMoniMT INFO -- #3249386942 Events 8 8 0 0 0 0 0 8 5 5 5 3 0 0 1 1 1 +TrigSignatureMoniMT INFO -- #3249386942 Features 0 0 0 0 0 10 6 6 6 3 0 0 1 1 TrigSignatureMoniMT INFO HLT_mu22_2mu4noL1_L1MU20 #3427670100 -TrigSignatureMoniMT INFO -- #3427670100 Events 8 8 0 0 0 0 8 5 4 4 0 0 0 1 1 1 -TrigSignatureMoniMT INFO -- #3427670100 Features 0 0 0 0 10 6 5 5 0 0 0 2 2 +TrigSignatureMoniMT INFO -- #3427670100 Events 8 8 0 0 0 0 0 8 5 4 4 0 0 0 1 1 1 +TrigSignatureMoniMT INFO -- #3427670100 Features 0 0 0 0 0 10 6 5 5 0 0 0 2 2 TrigSignatureMoniMT INFO HLT_mu22_mu8noL1_L1MU20 #3165652409 -TrigSignatureMoniMT INFO -- #3165652409 Events 8 8 0 0 0 0 8 5 4 4 0 0 0 2 2 2 -TrigSignatureMoniMT INFO -- #3165652409 Features 0 0 0 0 10 6 5 5 0 0 0 3 3 +TrigSignatureMoniMT INFO -- #3165652409 Events 8 8 0 0 0 0 0 8 5 4 4 0 0 0 2 2 2 +TrigSignatureMoniMT INFO -- #3165652409 Features 0 0 0 0 0 10 6 5 5 0 0 0 3 3 TrigSignatureMoniMT INFO HLT_mu24_2mu4noL1_L1MU20 #3233544630 -TrigSignatureMoniMT INFO -- #3233544630 Events 8 8 0 0 0 0 8 5 4 4 0 0 0 1 1 1 -TrigSignatureMoniMT INFO -- #3233544630 Features 0 0 0 0 10 6 5 5 0 0 0 2 2 +TrigSignatureMoniMT INFO -- #3233544630 Events 8 8 0 0 0 0 0 8 5 4 4 0 0 0 1 1 1 +TrigSignatureMoniMT INFO -- #3233544630 Features 0 0 0 0 0 10 6 5 5 0 0 0 2 2 TrigSignatureMoniMT INFO HLT_mu24_L1MU20 #417425162 -TrigSignatureMoniMT INFO -- #417425162 Events 8 8 0 0 0 0 8 5 4 4 - - - - - 4 -TrigSignatureMoniMT INFO -- #417425162 Features 0 0 0 0 10 6 5 5 - - - - - +TrigSignatureMoniMT INFO -- #417425162 Events 8 8 0 0 0 0 0 8 5 4 4 - - - - - 4 +TrigSignatureMoniMT INFO -- #417425162 Features 0 0 0 0 0 10 6 5 5 - - - - - TrigSignatureMoniMT INFO HLT_mu24_idperf_L1MU20 #677658909 -TrigSignatureMoniMT INFO -- #677658909 Events 8 8 0 0 0 0 6 6 5 5 - - - - - 5 -TrigSignatureMoniMT INFO -- #677658909 Features 0 0 0 0 7 7 6 6 - - - - - +TrigSignatureMoniMT INFO -- #677658909 Events 8 8 0 0 0 0 0 5 5 4 4 - - - - - 4 +TrigSignatureMoniMT INFO -- #677658909 Features 0 0 0 0 0 6 6 5 5 - - - - - TrigSignatureMoniMT INFO HLT_mu24_ivarmedium_L1MU20 #737407430 -TrigSignatureMoniMT INFO -- #737407430 Events 8 8 0 0 0 0 8 5 4 4 2 - - - - 2 -TrigSignatureMoniMT INFO -- #737407430 Features 0 0 0 0 10 6 5 5 2 - - - - +TrigSignatureMoniMT INFO -- #737407430 Events 8 8 0 0 0 0 0 8 5 4 4 2 - - - - 2 +TrigSignatureMoniMT INFO -- #737407430 Features 0 0 0 0 0 10 6 5 5 2 - - - - TrigSignatureMoniMT INFO HLT_mu24_mu10noL1_L1MU20 #2563354236 -TrigSignatureMoniMT INFO -- #2563354236 Events 8 8 0 0 0 0 8 5 4 4 0 0 0 2 2 2 -TrigSignatureMoniMT INFO -- #2563354236 Features 0 0 0 0 10 6 5 5 0 0 0 3 3 +TrigSignatureMoniMT INFO -- #2563354236 Events 8 8 0 0 0 0 0 8 5 4 4 0 0 0 2 2 2 +TrigSignatureMoniMT INFO -- #2563354236 Features 0 0 0 0 0 10 6 5 5 0 0 0 3 3 TrigSignatureMoniMT INFO HLT_mu26_L1MU20 #311138376 -TrigSignatureMoniMT INFO -- #311138376 Events 8 8 0 0 0 0 8 5 4 3 - - - - - 3 -TrigSignatureMoniMT INFO -- #311138376 Features 0 0 0 0 10 6 5 4 - - - - - +TrigSignatureMoniMT INFO -- #311138376 Events 8 8 0 0 0 0 0 8 5 4 3 - - - - - 3 +TrigSignatureMoniMT INFO -- #311138376 Features 0 0 0 0 0 10 6 5 4 - - - - - TrigSignatureMoniMT INFO HLT_mu26_ivarmedium_L1MU20 #3411723090 -TrigSignatureMoniMT INFO -- #3411723090 Events 8 8 0 0 0 0 8 5 4 3 2 - - - - 2 -TrigSignatureMoniMT INFO -- #3411723090 Features 0 0 0 0 10 6 5 4 2 - - - - +TrigSignatureMoniMT INFO -- #3411723090 Events 8 8 0 0 0 0 0 8 5 4 3 2 - - - - 2 +TrigSignatureMoniMT INFO -- #3411723090 Features 0 0 0 0 0 10 6 5 4 2 - - - - TrigSignatureMoniMT INFO HLT_mu26_mu10noL1_L1MU20 #2318302287 -TrigSignatureMoniMT INFO -- #2318302287 Events 8 8 0 0 0 0 8 5 4 3 0 0 0 1 1 1 -TrigSignatureMoniMT INFO -- #2318302287 Features 0 0 0 0 10 6 5 4 0 0 0 2 2 +TrigSignatureMoniMT INFO -- #2318302287 Events 8 8 0 0 0 0 0 8 5 4 3 0 0 0 1 1 1 +TrigSignatureMoniMT INFO -- #2318302287 Features 0 0 0 0 0 10 6 5 4 0 0 0 2 2 TrigSignatureMoniMT INFO HLT_mu26_mu8noL1_L1MU20 #2233067926 -TrigSignatureMoniMT INFO -- #2233067926 Events 8 8 0 0 0 0 8 5 4 3 0 0 0 1 1 1 -TrigSignatureMoniMT INFO -- #2233067926 Features 0 0 0 0 10 6 5 4 0 0 0 2 2 +TrigSignatureMoniMT INFO -- #2233067926 Events 8 8 0 0 0 0 0 8 5 4 3 0 0 0 1 1 1 +TrigSignatureMoniMT INFO -- #2233067926 Features 0 0 0 0 0 10 6 5 4 0 0 0 2 2 TrigSignatureMoniMT INFO HLT_mu28_ivarmedium_L1MU20 #1963262787 -TrigSignatureMoniMT INFO -- #1963262787 Events 8 8 0 0 0 0 8 5 4 3 2 - - - - 2 -TrigSignatureMoniMT INFO -- #1963262787 Features 0 0 0 0 10 6 5 3 2 - - - - +TrigSignatureMoniMT INFO -- #1963262787 Events 8 8 0 0 0 0 0 8 5 4 3 2 - - - - 2 +TrigSignatureMoniMT INFO -- #1963262787 Features 0 0 0 0 0 10 6 5 3 2 - - - - TrigSignatureMoniMT INFO HLT_mu28_mu8noL1_L1MU20 #86648125 -TrigSignatureMoniMT INFO -- #86648125 Events 8 8 0 0 0 0 8 5 4 3 0 0 0 1 1 1 -TrigSignatureMoniMT INFO -- #86648125 Features 0 0 0 0 10 6 5 3 0 0 0 1 1 +TrigSignatureMoniMT INFO -- #86648125 Events 8 8 0 0 0 0 0 8 5 4 3 0 0 0 1 1 1 +TrigSignatureMoniMT INFO -- #86648125 Features 0 0 0 0 0 10 6 5 3 0 0 0 1 1 TrigSignatureMoniMT INFO HLT_mu35_ivarmedium_L1MU20 #597064890 -TrigSignatureMoniMT INFO -- #597064890 Events 8 8 0 0 0 0 8 5 3 2 1 - - - - 1 -TrigSignatureMoniMT INFO -- #597064890 Features 0 0 0 0 10 6 4 2 1 - - - - +TrigSignatureMoniMT INFO -- #597064890 Events 8 8 0 0 0 0 0 8 5 4 2 1 - - - - 1 +TrigSignatureMoniMT INFO -- #597064890 Features 0 0 0 0 0 10 6 4 2 1 - - - - TrigSignatureMoniMT INFO HLT_mu4_l2io_L1MU4 #1048276860 -TrigSignatureMoniMT INFO -- #1048276860 Events 12 12 0 0 0 0 11 11 11 10 - - - - - 10 -TrigSignatureMoniMT INFO -- #1048276860 Features 0 0 0 0 14 46 15 14 - - - - - +TrigSignatureMoniMT INFO -- #1048276860 Events 12 12 0 0 0 0 0 12 12 11 11 - - - - - 11 +TrigSignatureMoniMT INFO -- #1048276860 Features 0 0 0 0 0 15 50 15 15 - - - - - TrigSignatureMoniMT INFO HLT_mu50_L1MU20 #3657158931 -TrigSignatureMoniMT INFO -- #3657158931 Events 8 8 0 0 0 0 8 5 2 1 - - - - - 1 -TrigSignatureMoniMT INFO -- #3657158931 Features 0 0 0 0 10 6 2 1 - - - - - +TrigSignatureMoniMT INFO -- #3657158931 Events 8 8 0 0 0 0 0 8 5 2 1 - - - - - 1 +TrigSignatureMoniMT INFO -- #3657158931 Features 0 0 0 0 0 10 6 2 1 - - - - - TrigSignatureMoniMT INFO HLT_mu50_RPCPEBSecondaryReadout_L1MU20 #827327262 -TrigSignatureMoniMT INFO -- #827327262 Events 8 8 0 0 0 0 8 5 2 1 1 - - - - 1 -TrigSignatureMoniMT INFO -- #827327262 Features 0 0 0 0 10 6 2 1 1 - - - - +TrigSignatureMoniMT INFO -- #827327262 Events 8 8 0 0 0 0 0 8 5 2 1 1 - - - - 1 +TrigSignatureMoniMT INFO -- #827327262 Features 0 0 0 0 0 10 6 2 1 1 - - - - TrigSignatureMoniMT INFO HLT_mu60_0eta105_msonly_L1MU20 #1642591450 -TrigSignatureMoniMT INFO -- #1642591450 Events 8 8 0 0 0 0 1 0 0 - - - - - - 0 -TrigSignatureMoniMT INFO -- #1642591450 Features 0 0 0 0 2 0 0 - - - - - - +TrigSignatureMoniMT INFO -- #1642591450 Events 8 8 0 0 0 0 0 1 0 0 - - - - - - 0 +TrigSignatureMoniMT INFO -- #1642591450 Features 0 0 0 0 0 2 0 0 - - - - - - TrigSignatureMoniMT INFO HLT_mu60_L1MU20 #2871837722 -TrigSignatureMoniMT INFO -- #2871837722 Events 8 8 0 0 0 0 8 5 1 1 - - - - - 1 -TrigSignatureMoniMT INFO -- #2871837722 Features 0 0 0 0 10 6 1 1 - - - - - +TrigSignatureMoniMT INFO -- #2871837722 Events 8 8 0 0 0 0 0 8 5 1 1 - - - - - 1 +TrigSignatureMoniMT INFO -- #2871837722 Features 0 0 0 0 0 10 6 1 1 - - - - - TrigSignatureMoniMT INFO HLT_mu6_L1MU6 #2560542253 -TrigSignatureMoniMT INFO -- #2560542253 Events 10 10 0 0 0 0 10 10 10 9 - - - - - 9 -TrigSignatureMoniMT INFO -- #2560542253 Features 0 0 0 0 13 12 13 12 - - - - - +TrigSignatureMoniMT INFO -- #2560542253 Events 10 10 0 0 0 0 0 10 10 10 10 - - - - - 10 +TrigSignatureMoniMT INFO -- #2560542253 Features 0 0 0 0 0 13 12 13 13 - - - - - TrigSignatureMoniMT INFO HLT_mu6_idperf_L1MU6 #934918532 -TrigSignatureMoniMT INFO -- #934918532 Events 10 10 0 0 0 0 10 10 10 10 - - - - - 10 -TrigSignatureMoniMT INFO -- #934918532 Features 0 0 0 0 13 13 13 13 - - - - - +TrigSignatureMoniMT INFO -- #934918532 Events 10 10 0 0 0 0 0 10 10 10 10 - - - - - 10 +TrigSignatureMoniMT INFO -- #934918532 Features 0 0 0 0 0 13 13 13 13 - - - - - TrigSignatureMoniMT INFO HLT_mu6_ivarmedium_L1MU6 #1012713062 -TrigSignatureMoniMT INFO -- #1012713062 Events 10 10 0 0 0 0 10 10 10 9 6 - - - - 6 -TrigSignatureMoniMT INFO -- #1012713062 Features 0 0 0 0 13 12 13 12 6 - - - - +TrigSignatureMoniMT INFO -- #1012713062 Events 10 10 0 0 0 0 0 10 10 10 10 6 - - - - 6 +TrigSignatureMoniMT INFO -- #1012713062 Features 0 0 0 0 0 13 12 13 13 6 - - - - TrigSignatureMoniMT INFO HLT_mu6_j45_nojcalib_L1J20 #2114129685 -TrigSignatureMoniMT INFO -- #2114129685 Events 19 19 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2114129685 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2114129685 Events 19 19 0 0 0 0 0 9 9 9 9 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2114129685 Features 0 0 0 0 0 11 10 11 11 0 0 - - - TrigSignatureMoniMT INFO HLT_mu6_msonly_L1MU6 #3895421032 -TrigSignatureMoniMT INFO -- #3895421032 Events 10 10 0 0 0 0 10 0 10 - - - - - - 10 -TrigSignatureMoniMT INFO -- #3895421032 Features 0 0 0 0 13 0 13 - - - - - - +TrigSignatureMoniMT INFO -- #3895421032 Events 10 10 0 0 0 0 0 10 0 10 - - - - - - 10 +TrigSignatureMoniMT INFO -- #3895421032 Features 0 0 0 0 0 13 0 13 - - - - - - TrigSignatureMoniMT INFO HLT_mu6_mu4_L12MU4 #1713982776 -TrigSignatureMoniMT INFO -- #1713982776 Events 4 4 0 0 0 0 3 3 2 2 - - - - - 2 -TrigSignatureMoniMT INFO -- #1713982776 Features 0 0 0 0 6 6 4 4 - - - - - +TrigSignatureMoniMT INFO -- #1713982776 Events 4 4 0 0 0 0 0 3 3 2 2 - - - - - 2 +TrigSignatureMoniMT INFO -- #1713982776 Features 0 0 0 0 0 6 6 4 4 - - - - - TrigSignatureMoniMT INFO HLT_mu6_mu6noL1_L1MU6 #451489897 -TrigSignatureMoniMT INFO -- #451489897 Events 10 10 0 0 0 0 10 10 10 9 0 0 0 4 3 3 -TrigSignatureMoniMT INFO -- #451489897 Features 0 0 0 0 13 12 13 12 0 0 0 6 5 +TrigSignatureMoniMT INFO -- #451489897 Events 10 10 0 0 0 0 0 10 10 10 10 0 0 0 6 4 4 +TrigSignatureMoniMT INFO -- #451489897 Features 0 0 0 0 0 13 12 13 13 0 0 0 8 6 TrigSignatureMoniMT INFO HLT_mu6_xe30_mht_L1XE10 #3192713675 -TrigSignatureMoniMT INFO -- #3192713675 Events 19 19 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3192713675 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3192713675 Events 19 19 0 0 0 0 0 9 9 9 9 0 9 - - - 9 +TrigSignatureMoniMT INFO -- #3192713675 Features 0 0 0 0 0 12 11 12 12 0 11 - - - TrigSignatureMoniMT INFO HLT_mu80_L1MU20 #387900377 -TrigSignatureMoniMT INFO -- #387900377 Events 8 8 0 0 0 0 8 5 1 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #387900377 Features 0 0 0 0 10 6 1 0 - - - - - +TrigSignatureMoniMT INFO -- #387900377 Events 8 8 0 0 0 0 0 8 5 1 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #387900377 Features 0 0 0 0 0 10 6 1 0 - - - - - TrigSignatureMoniMT INFO HLT_mu80_msonly_3layersEC_L1MU20 #761101109 -TrigSignatureMoniMT INFO -- #761101109 Events 8 8 0 0 0 0 8 0 1 - - - - - - 1 -TrigSignatureMoniMT INFO -- #761101109 Features 0 0 0 0 10 0 1 - - - - - - +TrigSignatureMoniMT INFO -- #761101109 Events 8 8 0 0 0 0 0 8 0 1 - - - - - - 1 +TrigSignatureMoniMT INFO -- #761101109 Features 0 0 0 0 0 10 0 1 - - - - - - TrigSignatureMoniMT INFO HLT_mu8_L1MU6 #1467711434 -TrigSignatureMoniMT INFO -- #1467711434 Events 10 10 0 0 0 0 10 10 10 9 - - - - - 9 -TrigSignatureMoniMT INFO -- #1467711434 Features 0 0 0 0 13 12 13 12 - - - - - +TrigSignatureMoniMT INFO -- #1467711434 Events 10 10 0 0 0 0 0 10 10 10 10 - - - - - 10 +TrigSignatureMoniMT INFO -- #1467711434 Features 0 0 0 0 0 13 12 13 13 - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1All #2979253164 -TrigSignatureMoniMT INFO -- #2979253164 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2979253164 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2979253164 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2979253164 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1Calo #355689512 -TrigSignatureMoniMT INFO -- #355689512 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #355689512 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #355689512 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #355689512 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1Calo_EMPTY #3717801557 -TrigSignatureMoniMT INFO -- #3717801557 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3717801557 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3717801557 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3717801557 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM10VH #314199913 -TrigSignatureMoniMT INFO -- #314199913 Events 11 11 - - - - - - - - - - - - - 11 -TrigSignatureMoniMT INFO -- #314199913 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #314199913 Events 11 11 - - - - - - - - - - - - - - 11 +TrigSignatureMoniMT INFO -- #314199913 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM12 #3885916609 -TrigSignatureMoniMT INFO -- #3885916609 Events 16 16 - - - - - - - - - - - - - 16 -TrigSignatureMoniMT INFO -- #3885916609 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3885916609 Events 16 16 - - - - - - - - - - - - - - 16 +TrigSignatureMoniMT INFO -- #3885916609 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM15 #480733925 -TrigSignatureMoniMT INFO -- #480733925 Events 14 14 - - - - - - - - - - - - - 14 -TrigSignatureMoniMT INFO -- #480733925 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #480733925 Events 14 14 - - - - - - - - - - - - - - 14 +TrigSignatureMoniMT INFO -- #480733925 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM15VH #2374865899 -TrigSignatureMoniMT INFO -- #2374865899 Events 8 8 - - - - - - - - - - - - - 8 -TrigSignatureMoniMT INFO -- #2374865899 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2374865899 Events 8 8 - - - - - - - - - - - - - - 8 +TrigSignatureMoniMT INFO -- #2374865899 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM20VH #3719542824 -TrigSignatureMoniMT INFO -- #3719542824 Events 7 7 - - - - - - - - - - - - - 7 -TrigSignatureMoniMT INFO -- #3719542824 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3719542824 Events 7 7 - - - - - - - - - - - - - - 7 +TrigSignatureMoniMT INFO -- #3719542824 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM22VHI #1723589313 -TrigSignatureMoniMT INFO -- #1723589313 Events 6 6 - - - - - - - - - - - - - 6 -TrigSignatureMoniMT INFO -- #1723589313 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1723589313 Events 6 6 - - - - - - - - - - - - - - 6 +TrigSignatureMoniMT INFO -- #1723589313 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM3 #4169267792 -TrigSignatureMoniMT INFO -- #4169267792 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #4169267792 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4169267792 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #4169267792 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM7 #3226970354 -TrigSignatureMoniMT INFO -- #3226970354 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3226970354 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3226970354 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3226970354 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM8VH #4065285611 -TrigSignatureMoniMT INFO -- #4065285611 Events 14 14 - - - - - - - - - - - - - 14 -TrigSignatureMoniMT INFO -- #4065285611 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4065285611 Events 14 14 - - - - - - - - - - - - - - 14 +TrigSignatureMoniMT INFO -- #4065285611 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J100 #1026959128 -TrigSignatureMoniMT INFO -- #1026959128 Events 3 3 - - - - - - - - - - - - - 3 -TrigSignatureMoniMT INFO -- #1026959128 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1026959128 Events 3 3 - - - - - - - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #1026959128 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J15 #1976430774 -TrigSignatureMoniMT INFO -- #1976430774 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1976430774 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1976430774 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1976430774 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J20 #2241112369 -TrigSignatureMoniMT INFO -- #2241112369 Events 19 19 - - - - - - - - - - - - - 19 -TrigSignatureMoniMT INFO -- #2241112369 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2241112369 Events 19 19 - - - - - - - - - - - - - - 19 +TrigSignatureMoniMT INFO -- #2241112369 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J25 #39428635 -TrigSignatureMoniMT INFO -- #39428635 Events 17 17 - - - - - - - - - - - - - 17 -TrigSignatureMoniMT INFO -- #39428635 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #39428635 Events 17 17 - - - - - - - - - - - - - - 17 +TrigSignatureMoniMT INFO -- #39428635 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J30 #3523994129 -TrigSignatureMoniMT INFO -- #3523994129 Events 17 17 - - - - - - - - - - - - - 17 -TrigSignatureMoniMT INFO -- #3523994129 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3523994129 Events 17 17 - - - - - - - - - - - - - - 17 +TrigSignatureMoniMT INFO -- #3523994129 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J40 #1497591431 -TrigSignatureMoniMT INFO -- #1497591431 Events 14 14 - - - - - - - - - - - - - 14 -TrigSignatureMoniMT INFO -- #1497591431 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1497591431 Events 14 14 - - - - - - - - - - - - - - 14 +TrigSignatureMoniMT INFO -- #1497591431 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J400 #2494874701 -TrigSignatureMoniMT INFO -- #2494874701 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2494874701 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2494874701 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2494874701 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J50 #3346352675 -TrigSignatureMoniMT INFO -- #3346352675 Events 14 14 - - - - - - - - - - - - - 14 -TrigSignatureMoniMT INFO -- #3346352675 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3346352675 Events 14 14 - - - - - - - - - - - - - - 14 +TrigSignatureMoniMT INFO -- #3346352675 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J75 #1651897827 -TrigSignatureMoniMT INFO -- #1651897827 Events 6 6 - - - - - - - - - - - - - 6 -TrigSignatureMoniMT INFO -- #1651897827 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1651897827 Events 6 6 - - - - - - - - - - - - - - 6 +TrigSignatureMoniMT INFO -- #1651897827 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J85 #166231461 -TrigSignatureMoniMT INFO -- #166231461 Events 5 5 - - - - - - - - - - - - - 5 -TrigSignatureMoniMT INFO -- #166231461 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #166231461 Events 5 5 - - - - - - - - - - - - - - 5 +TrigSignatureMoniMT INFO -- #166231461 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1MBTS_1_1_EMPTY #3063661803 -TrigSignatureMoniMT INFO -- #3063661803 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3063661803 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3063661803 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3063661803 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1MBTS_1_EMPTY #4174355886 -TrigSignatureMoniMT INFO -- #4174355886 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4174355886 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4174355886 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4174355886 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1MBTS_2_EMPTY #2028932677 -TrigSignatureMoniMT INFO -- #2028932677 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2028932677 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2028932677 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2028932677 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1RD0_EMPTY #914660695 -TrigSignatureMoniMT INFO -- #914660695 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #914660695 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #914660695 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #914660695 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1RD0_FILLED #211699639 -TrigSignatureMoniMT INFO -- #211699639 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #211699639 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #211699639 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #211699639 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1Standby #420861540 -TrigSignatureMoniMT INFO -- #420861540 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #420861540 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #420861540 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #420861540 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU12 #4248050338 -TrigSignatureMoniMT INFO -- #4248050338 Events 18 18 - - - - - - - - - - - - - 18 -TrigSignatureMoniMT INFO -- #4248050338 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4248050338 Events 18 18 - - - - - - - - - - - - - - 18 +TrigSignatureMoniMT INFO -- #4248050338 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU12IM #357557968 -TrigSignatureMoniMT INFO -- #357557968 Events 14 14 - - - - - - - - - - - - - 14 -TrigSignatureMoniMT INFO -- #357557968 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #357557968 Events 14 14 - - - - - - - - - - - - - - 14 +TrigSignatureMoniMT INFO -- #357557968 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU20IM #1931583332 -TrigSignatureMoniMT INFO -- #1931583332 Events 10 10 - - - - - - - - - - - - - 10 -TrigSignatureMoniMT INFO -- #1931583332 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1931583332 Events 10 10 - - - - - - - - - - - - - - 10 +TrigSignatureMoniMT INFO -- #1931583332 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU30 #1944789678 -TrigSignatureMoniMT INFO -- #1944789678 Events 13 13 - - - - - - - - - - - - - 13 -TrigSignatureMoniMT INFO -- #1944789678 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1944789678 Events 13 13 - - - - - - - - - - - - - - 13 +TrigSignatureMoniMT INFO -- #1944789678 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU40 #1394621652 -TrigSignatureMoniMT INFO -- #1394621652 Events 7 7 - - - - - - - - - - - - - 7 -TrigSignatureMoniMT INFO -- #1394621652 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1394621652 Events 7 7 - - - - - - - - - - - - - - 7 +TrigSignatureMoniMT INFO -- #1394621652 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU60 #3332424451 -TrigSignatureMoniMT INFO -- #3332424451 Events 5 5 - - - - - - - - - - - - - 5 -TrigSignatureMoniMT INFO -- #3332424451 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3332424451 Events 5 5 - - - - - - - - - - - - - - 5 +TrigSignatureMoniMT INFO -- #3332424451 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE10 #1583053368 -TrigSignatureMoniMT INFO -- #1583053368 Events 19 19 - - - - - - - - - - - - - 19 -TrigSignatureMoniMT INFO -- #1583053368 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1583053368 Events 19 19 - - - - - - - - - - - - - - 19 +TrigSignatureMoniMT INFO -- #1583053368 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE30 #2047368922 -TrigSignatureMoniMT INFO -- #2047368922 Events 14 14 - - - - - - - - - - - - - 14 -TrigSignatureMoniMT INFO -- #2047368922 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2047368922 Events 14 14 - - - - - - - - - - - - - - 14 +TrigSignatureMoniMT INFO -- #2047368922 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE300 #1315853555 -TrigSignatureMoniMT INFO -- #1315853555 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1315853555 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1315853555 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1315853555 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE35 #2313039014 -TrigSignatureMoniMT INFO -- #2313039014 Events 14 14 - - - - - - - - - - - - - 14 -TrigSignatureMoniMT INFO -- #2313039014 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2313039014 Events 14 14 - - - - - - - - - - - - - - 14 +TrigSignatureMoniMT INFO -- #2313039014 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE40 #4293469116 -TrigSignatureMoniMT INFO -- #4293469116 Events 14 14 - - - - - - - - - - - - - 14 -TrigSignatureMoniMT INFO -- #4293469116 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4293469116 Events 14 14 - - - - - - - - - - - - - - 14 +TrigSignatureMoniMT INFO -- #4293469116 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE45 #2365048177 -TrigSignatureMoniMT INFO -- #2365048177 Events 13 13 - - - - - - - - - - - - - 13 -TrigSignatureMoniMT INFO -- #2365048177 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2365048177 Events 13 13 - - - - - - - - - - - - - - 13 +TrigSignatureMoniMT INFO -- #2365048177 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE50 #1168752081 -TrigSignatureMoniMT INFO -- #1168752081 Events 10 10 - - - - - - - - - - - - - 10 -TrigSignatureMoniMT INFO -- #1168752081 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1168752081 Events 10 10 - - - - - - - - - - - - - - 10 +TrigSignatureMoniMT INFO -- #1168752081 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE55 #268928384 -TrigSignatureMoniMT INFO -- #268928384 Events 8 8 - - - - - - - - - - - - - 8 -TrigSignatureMoniMT INFO -- #268928384 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #268928384 Events 8 8 - - - - - - - - - - - - - - 8 +TrigSignatureMoniMT INFO -- #268928384 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE60 #4154240531 -TrigSignatureMoniMT INFO -- #4154240531 Events 8 8 - - - - - - - - - - - - - 8 -TrigSignatureMoniMT INFO -- #4154240531 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4154240531 Events 8 8 - - - - - - - - - - - - - - 8 +TrigSignatureMoniMT INFO -- #4154240531 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE70 #3765216228 -TrigSignatureMoniMT INFO -- #3765216228 Events 4 4 - - - - - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #3765216228 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3765216228 Events 4 4 - - - - - - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #3765216228 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE80 #2742079961 -TrigSignatureMoniMT INFO -- #2742079961 Events 3 3 - - - - - - - - - - - - - 3 -TrigSignatureMoniMT INFO -- #2742079961 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2742079961 Events 3 3 - - - - - - - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #2742079961 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_bkg_L1Bkg #2032528907 -TrigSignatureMoniMT INFO -- #2032528907 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2032528907 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2032528907 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2032528907 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1EM3_EMPTY #2458124284 -TrigSignatureMoniMT INFO -- #2458124284 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2458124284 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2458124284 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2458124284 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1EM7_EMPTY #299938202 -TrigSignatureMoniMT INFO -- #299938202 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #299938202 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #299938202 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #299938202 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1J12_EMPTY #3144024902 -TrigSignatureMoniMT INFO -- #3144024902 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3144024902 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3144024902 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3144024902 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1J12_FIRSTEMPTY #3840098930 -TrigSignatureMoniMT INFO -- #3840098930 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3840098930 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3840098930 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3840098930 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1J30_31ETA49_EMPTY #4143623058 -TrigSignatureMoniMT INFO -- #4143623058 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4143623058 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4143623058 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4143623058 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1J30_EMPTY #2991490897 -TrigSignatureMoniMT INFO -- #2991490897 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2991490897 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2991490897 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2991490897 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1J30_FIRSTEMPTY #2214697960 -TrigSignatureMoniMT INFO -- #2214697960 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2214697960 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2214697960 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2214697960 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1RD1_EMPTY #3925252528 -TrigSignatureMoniMT INFO -- #3925252528 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3925252528 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3925252528 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3925252528 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1ABORTGAPNOTCALIB_noPS #1111222999 -TrigSignatureMoniMT INFO -- #1111222999 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1111222999 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1111222999 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1111222999 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1EMPTY_noPS #1963549452 -TrigSignatureMoniMT INFO -- #1963549452 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1963549452 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1963549452 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1963549452 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1FIRSTEMPTY_noPS #3793900723 -TrigSignatureMoniMT INFO -- #3793900723 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3793900723 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3793900723 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3793900723 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1PhysicsHigh_noPS #783280249 -TrigSignatureMoniMT INFO -- #783280249 Events 19 19 - - - - - - - - - - - - - 19 -TrigSignatureMoniMT INFO -- #783280249 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #783280249 Events 19 19 - - - - - - - - - - - - - - 19 +TrigSignatureMoniMT INFO -- #783280249 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1PhysicsVeryHigh_noPS #3050747401 -TrigSignatureMoniMT INFO -- #3050747401 Events 7 7 - - - - - - - - - - - - - 7 -TrigSignatureMoniMT INFO -- #3050747401 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3050747401 Events 7 7 - - - - - - - - - - - - - - 7 +TrigSignatureMoniMT INFO -- #3050747401 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1RD3_EMPTY #3499439438 -TrigSignatureMoniMT INFO -- #3499439438 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3499439438 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3499439438 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3499439438 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1RD3_FILLED #831126220 -TrigSignatureMoniMT INFO -- #831126220 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #831126220 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #831126220 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #831126220 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1UNPAIRED_ISO_noPS #1376561080 -TrigSignatureMoniMT INFO -- #1376561080 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1376561080 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1376561080 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1376561080 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1UNPAIRED_NONISO_noPS #1020101125 -TrigSignatureMoniMT INFO -- #1020101125 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1020101125 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1020101125 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1020101125 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_idmon_L1RD0_EMPTY #56818284 -TrigSignatureMoniMT INFO -- #56818284 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #56818284 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #56818284 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #56818284 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_idmon_L1RD0_FILLED #1198298874 -TrigSignatureMoniMT INFO -- #1198298874 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1198298874 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1198298874 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1198298874 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_idmon_L1RD0_UNPAIRED_ISO #2536676873 -TrigSignatureMoniMT INFO -- #2536676873 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2536676873 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2536676873 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2536676873 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_l1calo_L1J400 #1694511185 -TrigSignatureMoniMT INFO -- #1694511185 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1694511185 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1694511185 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1694511185 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_mb_L1RD2_EMPTY #3788962163 -TrigSignatureMoniMT INFO -- #3788962163 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3788962163 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3788962163 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3788962163 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_zb_L1ZB #1289992951 -TrigSignatureMoniMT INFO -- #1289992951 Events 0 0 - - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1289992951 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1289992951 Events 0 0 - - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1289992951 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_sct_noise_SCTPEB_L1RD0_EMPTY #3024203296 -TrigSignatureMoniMT INFO -- #3024203296 Events 0 0 0 - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3024203296 Features 0 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3024203296 Events 0 0 0 - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3024203296 Features 0 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_tau0_perf_ptonly_L1TAU100 #2342716369 -TrigSignatureMoniMT INFO -- #2342716369 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2342716369 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #2342716369 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2342716369 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau0_perf_ptonly_L1TAU12 #372992233 -TrigSignatureMoniMT INFO -- #372992233 Events 18 18 18 18 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #372992233 Features 42 27 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #372992233 Events 18 18 18 18 0 0 18 18 - - - - - - - - 18 +TrigSignatureMoniMT INFO -- #372992233 Features 42 27 0 0 27 27 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau0_perf_ptonly_L1TAU60 #1376650121 -TrigSignatureMoniMT INFO -- #1376650121 Events 5 5 5 3 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1376650121 Features 6 3 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1376650121 Events 5 5 5 3 0 0 3 3 - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #1376650121 Features 6 3 0 0 3 3 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_idperf_track_L1TAU100 #714660857 -TrigSignatureMoniMT INFO -- #714660857 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #714660857 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #714660857 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #714660857 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_idperf_tracktwoMVA_L1TAU100 #2725693236 -TrigSignatureMoniMT INFO -- #2725693236 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2725693236 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #2725693236 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2725693236 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_idperf_tracktwo_L1TAU100 #886074432 -TrigSignatureMoniMT INFO -- #886074432 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #886074432 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #886074432 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #886074432 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_medium1_tracktwoEF_L1TAU100 #1720193283 -TrigSignatureMoniMT INFO -- #1720193283 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1720193283 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1720193283 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1720193283 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_medium1_tracktwo_L1TAU100 #4069120574 -TrigSignatureMoniMT INFO -- #4069120574 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4069120574 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #4069120574 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4069120574 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_mediumRNN_tracktwoMVA_L1TAU100 #1747754287 -TrigSignatureMoniMT INFO -- #1747754287 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1747754287 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1747754287 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1747754287 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_perf_tracktwoMVA_L1TAU100 #2334140248 -TrigSignatureMoniMT INFO -- #2334140248 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2334140248 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #2334140248 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2334140248 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_perf_tracktwo_L1TAU100 #1799096347 -TrigSignatureMoniMT INFO -- #1799096347 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1799096347 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1799096347 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1799096347 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau200_medium1_tracktwoEF_L1TAU100 #4203471951 -TrigSignatureMoniMT INFO -- #4203471951 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4203471951 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #4203471951 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4203471951 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau200_mediumRNN_tracktwoMVA_L1TAU100 #1468926272 -TrigSignatureMoniMT INFO -- #1468926272 Events 0 0 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1468926272 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1468926272 Events 0 0 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1468926272 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_idperf_track_L1TAU12IM #554271976 -TrigSignatureMoniMT INFO -- #554271976 Events 14 14 14 13 0 13 13 13 - - - - - - - 13 -TrigSignatureMoniMT INFO -- #554271976 Features 24 16 0 16 16 16 - - - - - - - +TrigSignatureMoniMT INFO -- #554271976 Events 14 14 14 13 0 13 13 13 - - - - - - - - 13 +TrigSignatureMoniMT INFO -- #554271976 Features 24 16 0 16 16 16 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_idperf_tracktwoMVA_L1TAU12IM #988149859 -TrigSignatureMoniMT INFO -- #988149859 Events 14 14 14 13 12 0 11 11 - - - - - - - 11 -TrigSignatureMoniMT INFO -- #988149859 Features 24 17 14 0 13 13 - - - - - - - +TrigSignatureMoniMT INFO -- #988149859 Events 14 14 14 13 12 0 11 11 - - - - - - - - 11 +TrigSignatureMoniMT INFO -- #988149859 Features 24 17 14 0 13 13 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_idperf_tracktwo_L1TAU12IM #3346942453 -TrigSignatureMoniMT INFO -- #3346942453 Events 14 14 14 13 12 12 11 11 - - - - - - - 11 -TrigSignatureMoniMT INFO -- #3346942453 Features 24 17 14 14 13 13 - - - - - - - +TrigSignatureMoniMT INFO -- #3346942453 Events 14 14 14 13 12 12 11 11 - - - - - - - - 11 +TrigSignatureMoniMT INFO -- #3346942453 Features 24 17 14 14 13 13 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_looseRNN_tracktwoMVA_L1TAU12IM #169452969 -TrigSignatureMoniMT INFO -- #169452969 Events 14 14 12 11 10 0 9 8 - - - - - - - 8 -TrigSignatureMoniMT INFO -- #169452969 Features 22 15 12 0 11 9 - - - - - - - +TrigSignatureMoniMT INFO -- #169452969 Events 14 14 12 11 10 0 9 8 - - - - - - - - 8 +TrigSignatureMoniMT INFO -- #169452969 Features 22 15 12 0 11 9 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_looseRNN_tracktwo_L1TAU12IM #2490017573 -TrigSignatureMoniMT INFO -- #2490017573 Events 14 14 12 11 10 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2490017573 Features 22 15 12 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #2490017573 Events 14 14 12 11 10 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2490017573 Features 22 15 12 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_medium1_tracktwoEF_L1TAU12IM #506456080 -TrigSignatureMoniMT INFO -- #506456080 Events 14 14 12 11 10 0 9 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #506456080 Features 22 15 12 0 11 0 - - - - - - - +TrigSignatureMoniMT INFO -- #506456080 Events 14 14 12 11 10 0 9 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #506456080 Features 22 15 12 0 11 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_medium1_tracktwoMVA_L1TAU12IM #4055280067 -TrigSignatureMoniMT INFO -- #4055280067 Events 14 14 12 11 10 0 9 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4055280067 Features 22 15 12 0 11 0 - - - - - - - +TrigSignatureMoniMT INFO -- #4055280067 Events 14 14 12 11 10 0 9 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4055280067 Features 22 15 12 0 11 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_medium1_tracktwo_L1TAU12IM #1433975745 -TrigSignatureMoniMT INFO -- #1433975745 Events 14 14 12 11 10 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1433975745 Features 22 15 12 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1433975745 Events 14 14 12 11 10 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1433975745 Features 22 15 12 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_mediumRNN_tracktwoMVA_L1TAU12IM #2222894847 -TrigSignatureMoniMT INFO -- #2222894847 Events 14 14 12 11 10 0 9 5 - - - - - - - 5 -TrigSignatureMoniMT INFO -- #2222894847 Features 22 15 12 0 11 5 - - - - - - - +TrigSignatureMoniMT INFO -- #2222894847 Events 14 14 12 11 10 0 9 5 - - - - - - - - 5 +TrigSignatureMoniMT INFO -- #2222894847 Features 22 15 12 0 11 5 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_mediumRNN_tracktwo_L1TAU12IM #698603885 -TrigSignatureMoniMT INFO -- #698603885 Events 14 14 12 11 10 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #698603885 Features 22 15 12 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #698603885 Events 14 14 12 11 10 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #698603885 Features 22 15 12 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_perf_tracktwoMVA_L1TAU12IM #112814536 -TrigSignatureMoniMT INFO -- #112814536 Events 14 14 14 13 12 0 11 11 - - - - - - - 11 -TrigSignatureMoniMT INFO -- #112814536 Features 24 17 14 0 13 13 - - - - - - - +TrigSignatureMoniMT INFO -- #112814536 Events 14 14 14 13 12 0 11 11 - - - - - - - - 11 +TrigSignatureMoniMT INFO -- #112814536 Features 24 17 14 0 13 13 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_perf_tracktwo_L1TAU12IM #1129072492 -TrigSignatureMoniMT INFO -- #1129072492 Events 14 14 14 13 12 12 11 11 - - - - - - - 11 -TrigSignatureMoniMT INFO -- #1129072492 Features 24 17 14 14 13 13 - - - - - - - +TrigSignatureMoniMT INFO -- #1129072492 Events 14 14 14 13 12 12 11 11 - - - - - - - - 11 +TrigSignatureMoniMT INFO -- #1129072492 Features 24 17 14 14 13 13 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_tightRNN_tracktwoMVA_L1TAU12IM #2472860683 -TrigSignatureMoniMT INFO -- #2472860683 Events 14 14 12 11 10 0 9 4 - - - - - - - 4 -TrigSignatureMoniMT INFO -- #2472860683 Features 22 15 12 0 11 4 - - - - - - - +TrigSignatureMoniMT INFO -- #2472860683 Events 14 14 12 11 10 0 9 4 - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #2472860683 Features 22 15 12 0 11 4 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_tightRNN_tracktwo_L1TAU12IM #2537544560 -TrigSignatureMoniMT INFO -- #2537544560 Events 14 14 12 11 10 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2537544560 Features 22 15 12 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #2537544560 Events 14 14 12 11 10 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2537544560 Features 22 15 12 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_verylooseRNN_tracktwoMVA_L1TAU12IM #2992830434 -TrigSignatureMoniMT INFO -- #2992830434 Events 14 14 12 11 10 0 9 8 - - - - - - - 8 -TrigSignatureMoniMT INFO -- #2992830434 Features 22 15 12 0 11 9 - - - - - - - +TrigSignatureMoniMT INFO -- #2992830434 Events 14 14 12 11 10 0 9 8 - - - - - - - - 8 +TrigSignatureMoniMT INFO -- #2992830434 Features 22 15 12 0 11 9 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_verylooseRNN_tracktwo_L1TAU12IM #1275052132 -TrigSignatureMoniMT INFO -- #1275052132 Events 14 14 12 11 10 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1275052132 Features 22 15 12 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1275052132 Events 14 14 12 11 10 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1275052132 Features 22 15 12 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau35_mediumRNN_tracktwoMVA_L1TAU12IM #2456480859 -TrigSignatureMoniMT INFO -- #2456480859 Events 14 14 11 10 9 0 8 4 - - - - - - - 4 -TrigSignatureMoniMT INFO -- #2456480859 Features 20 14 11 0 10 4 - - - - - - - +TrigSignatureMoniMT INFO -- #2456480859 Events 14 14 11 10 9 0 8 4 - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #2456480859 Features 20 14 11 0 10 4 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau35_mediumRNN_tracktwoMVA_tau25_mediumRNN_tracktwoMVA_L1DR-TAU20ITAU12I-J25 #1794354861 -TrigSignatureMoniMT INFO -- #1794354861 Events 6 6 6 3 2 0 2 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1794354861 Features 15 6 4 0 4 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1794354861 Events 6 6 6 3 2 0 2 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1794354861 Features 15 6 4 0 4 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau80_medium1_tracktwo_L1TAU60 #598963338 -TrigSignatureMoniMT INFO -- #598963338 Events 5 5 4 2 2 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #598963338 Features 5 2 2 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #598963338 Events 5 5 4 2 2 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #598963338 Features 5 2 2 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau80_mediumRNN_tracktwoMVA_tau35_mediumRNN_tracktwoMVA_L1TAU60_DR-TAU20ITAU12I #1075975502 -TrigSignatureMoniMT INFO -- #1075975502 Events 3 3 2 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1075975502 Features 6 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1075975502 Events 3 3 2 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1075975502 Features 6 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau80_mediumRNN_tracktwoMVA_tau60_mediumRNN_tracktwoMVA_L1TAU60_2TAU40 #400305971 -TrigSignatureMoniMT INFO -- #400305971 Events 3 3 2 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #400305971 Features 5 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #400305971 Events 3 3 2 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #400305971 Features 5 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tilecalib_laser_TilePEB_L1CALREQ2 #1063154655 -TrigSignatureMoniMT INFO -- #1063154655 Events 0 0 0 - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1063154655 Features 0 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1063154655 Events 0 0 0 - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1063154655 Features 0 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_timeburner_L1All #819160059 -TrigSignatureMoniMT INFO -- #819160059 Events 20 0 0 - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #819160059 Features 0 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #819160059 Events 20 0 0 - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #819160059 Features 0 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_unconvtrk120_isohpttrack_icummedium_L1XE50 #4064963182 -TrigSignatureMoniMT INFO -- #4064963182 Events 10 10 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #4064963182 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #4064963182 Events 10 10 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #4064963182 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_unconvtrk120_isohpttrack_imedium_L1XE50 #3425113791 -TrigSignatureMoniMT INFO -- #3425113791 Events 10 10 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #3425113791 Features 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #3425113791 Events 10 10 0 0 0 0 0 0 0 0 0 0 6 - - - 6 +TrigSignatureMoniMT INFO -- #3425113791 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe100_cvfpufit_L1XE50 #2729083465 -TrigSignatureMoniMT INFO -- #2729083465 Events 10 10 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #2729083465 Features 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #2729083465 Events 10 10 0 0 0 0 0 0 0 0 0 0 6 - - - 6 +TrigSignatureMoniMT INFO -- #2729083465 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe100_mht_L1XE50 #532175988 -TrigSignatureMoniMT INFO -- #532175988 Events 10 10 0 0 0 0 0 0 0 0 0 9 - - - 9 -TrigSignatureMoniMT INFO -- #532175988 Features 0 0 0 0 0 0 0 0 0 9 - - - +TrigSignatureMoniMT INFO -- #532175988 Events 10 10 0 0 0 0 0 0 0 0 0 0 9 - - - 9 +TrigSignatureMoniMT INFO -- #532175988 Features 0 0 0 0 0 0 0 0 0 0 9 - - - TrigSignatureMoniMT INFO HLT_xe100_mhtpufit_em_subjesgscIS_L1XE50 #3054195458 -TrigSignatureMoniMT INFO -- #3054195458 Events 10 10 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #3054195458 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #3054195458 Events 10 10 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #3054195458 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_xe100_mhtpufit_pf_subjesgscIS_L1XE50 #2614685150 -TrigSignatureMoniMT INFO -- #2614685150 Events 10 10 0 0 0 0 0 0 0 0 0 4 - - - 4 -TrigSignatureMoniMT INFO -- #2614685150 Features 0 0 0 0 0 0 0 0 0 4 - - - +TrigSignatureMoniMT INFO -- #2614685150 Events 10 10 0 0 0 0 0 0 0 0 0 0 4 - - - 4 +TrigSignatureMoniMT INFO -- #2614685150 Features 0 0 0 0 0 0 0 0 0 0 4 - - - TrigSignatureMoniMT INFO HLT_xe100_pfopufit_L1XE50 #2909333517 -TrigSignatureMoniMT INFO -- #2909333517 Events 10 10 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #2909333517 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #2909333517 Events 10 10 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #2909333517 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_xe100_pfsum_L1XE50 #1890237897 -TrigSignatureMoniMT INFO -- #1890237897 Events 10 10 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #1890237897 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #1890237897 Events 10 10 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #1890237897 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_xe100_tcpufit_L1XE50 #2803198799 -TrigSignatureMoniMT INFO -- #2803198799 Events 10 10 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #2803198799 Features 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #2803198799 Events 10 10 0 0 0 0 0 0 0 0 0 0 6 - - - 6 +TrigSignatureMoniMT INFO -- #2803198799 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe100_trkmht_L1XE50 #1055916731 -TrigSignatureMoniMT INFO -- #1055916731 Events 10 10 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #1055916731 Features 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #1055916731 Events 10 10 0 0 0 0 0 0 0 0 0 0 7 - - - 7 +TrigSignatureMoniMT INFO -- #1055916731 Features 0 0 0 0 0 0 0 0 0 0 7 - - - TrigSignatureMoniMT INFO HLT_xe100_trkmht_xe85_tcpufit_xe65_cell_L1XE50 #451622546 -TrigSignatureMoniMT INFO -- #451622546 Events 10 10 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #451622546 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #451622546 Events 10 10 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #451622546 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_xe110_mht_L1XE50 #3030733259 -TrigSignatureMoniMT INFO -- #3030733259 Events 10 10 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #3030733259 Features 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #3030733259 Events 10 10 0 0 0 0 0 0 0 0 0 0 7 - - - 7 +TrigSignatureMoniMT INFO -- #3030733259 Features 0 0 0 0 0 0 0 0 0 0 7 - - - TrigSignatureMoniMT INFO HLT_xe110_tc_em_L1XE50 #607113828 -TrigSignatureMoniMT INFO -- #607113828 Events 10 10 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #607113828 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #607113828 Events 10 10 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #607113828 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_xe110_tcpufit_L1XE50 #892853397 -TrigSignatureMoniMT INFO -- #892853397 Events 10 10 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #892853397 Features 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #892853397 Events 10 10 0 0 0 0 0 0 0 0 0 0 6 - - - 6 +TrigSignatureMoniMT INFO -- #892853397 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe30_cell_L1XE10 #1649696554 -TrigSignatureMoniMT INFO -- #1649696554 Events 19 19 0 0 0 0 0 0 0 0 0 17 - - - 17 -TrigSignatureMoniMT INFO -- #1649696554 Features 0 0 0 0 0 0 0 0 0 17 - - - +TrigSignatureMoniMT INFO -- #1649696554 Events 19 19 0 0 0 0 0 0 0 0 0 0 17 - - - 17 +TrigSignatureMoniMT INFO -- #1649696554 Features 0 0 0 0 0 0 0 0 0 0 17 - - - TrigSignatureMoniMT INFO HLT_xe30_cell_xe30_tcpufit_L1XE10 #3768353779 -TrigSignatureMoniMT INFO -- #3768353779 Events 19 19 0 0 0 0 0 0 0 0 0 14 - - - 14 -TrigSignatureMoniMT INFO -- #3768353779 Features 0 0 0 0 0 0 0 0 0 14 - - - +TrigSignatureMoniMT INFO -- #3768353779 Events 19 19 0 0 0 0 0 0 0 0 0 0 14 - - - 14 +TrigSignatureMoniMT INFO -- #3768353779 Features 0 0 0 0 0 0 0 0 0 0 14 - - - TrigSignatureMoniMT INFO HLT_xe30_cvfpufit_L1XE10 #3860749499 -TrigSignatureMoniMT INFO -- #3860749499 Events 19 19 0 0 0 0 0 0 0 0 0 14 - - - 14 -TrigSignatureMoniMT INFO -- #3860749499 Features 0 0 0 0 0 0 0 0 0 14 - - - +TrigSignatureMoniMT INFO -- #3860749499 Events 19 19 0 0 0 0 0 0 0 0 0 0 14 - - - 14 +TrigSignatureMoniMT INFO -- #3860749499 Features 0 0 0 0 0 0 0 0 0 0 14 - - - TrigSignatureMoniMT INFO HLT_xe30_mht_L1XE10 #3626903018 -TrigSignatureMoniMT INFO -- #3626903018 Events 19 19 0 0 0 0 0 0 0 0 0 19 - - - 19 -TrigSignatureMoniMT INFO -- #3626903018 Features 0 0 0 0 0 0 0 0 0 19 - - - +TrigSignatureMoniMT INFO -- #3626903018 Events 19 19 0 0 0 0 0 0 0 0 0 0 19 - - - 19 +TrigSignatureMoniMT INFO -- #3626903018 Features 0 0 0 0 0 0 0 0 0 0 19 - - - TrigSignatureMoniMT INFO HLT_xe30_mhtpufit_em_subjesgscIS_L1XE10 #689201557 -TrigSignatureMoniMT INFO -- #689201557 Events 19 19 0 0 0 0 0 0 0 0 0 12 - - - 12 -TrigSignatureMoniMT INFO -- #689201557 Features 0 0 0 0 0 0 0 0 0 12 - - - +TrigSignatureMoniMT INFO -- #689201557 Events 19 19 0 0 0 0 0 0 0 0 0 0 12 - - - 12 +TrigSignatureMoniMT INFO -- #689201557 Features 0 0 0 0 0 0 0 0 0 0 12 - - - TrigSignatureMoniMT INFO HLT_xe30_mhtpufit_pf_subjesgscIS_L1XE10 #1886909707 -TrigSignatureMoniMT INFO -- #1886909707 Events 19 19 0 0 0 0 0 0 0 0 0 15 - - - 15 -TrigSignatureMoniMT INFO -- #1886909707 Features 0 0 0 0 0 0 0 0 0 15 - - - +TrigSignatureMoniMT INFO -- #1886909707 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 +TrigSignatureMoniMT INFO -- #1886909707 Features 0 0 0 0 0 0 0 0 0 0 15 - - - TrigSignatureMoniMT INFO HLT_xe30_pfopufit_L1XE10 #2252641537 -TrigSignatureMoniMT INFO -- #2252641537 Events 19 19 0 0 0 0 0 0 0 0 0 15 - - - 15 -TrigSignatureMoniMT INFO -- #2252641537 Features 0 0 0 0 0 0 0 0 0 15 - - - +TrigSignatureMoniMT INFO -- #2252641537 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 +TrigSignatureMoniMT INFO -- #2252641537 Features 0 0 0 0 0 0 0 0 0 0 15 - - - TrigSignatureMoniMT INFO HLT_xe30_pfsum_L1XE10 #998713382 -TrigSignatureMoniMT INFO -- #998713382 Events 19 19 0 0 0 0 0 0 0 0 0 16 - - - 16 -TrigSignatureMoniMT INFO -- #998713382 Features 0 0 0 0 0 0 0 0 0 16 - - - +TrigSignatureMoniMT INFO -- #998713382 Events 19 19 0 0 0 0 0 0 0 0 0 0 16 - - - 16 +TrigSignatureMoniMT INFO -- #998713382 Features 0 0 0 0 0 0 0 0 0 0 16 - - - TrigSignatureMoniMT INFO HLT_xe30_tcpufit_L1XE10 #1583719916 -TrigSignatureMoniMT INFO -- #1583719916 Events 19 19 0 0 0 0 0 0 0 0 0 14 - - - 14 -TrigSignatureMoniMT INFO -- #1583719916 Features 0 0 0 0 0 0 0 0 0 14 - - - +TrigSignatureMoniMT INFO -- #1583719916 Events 19 19 0 0 0 0 0 0 0 0 0 0 14 - - - 14 +TrigSignatureMoniMT INFO -- #1583719916 Features 0 0 0 0 0 0 0 0 0 0 14 - - - TrigSignatureMoniMT INFO HLT_xe30_trkmht_L1XE10 #2468872349 -TrigSignatureMoniMT INFO -- #2468872349 Events 19 19 0 0 0 0 0 0 0 0 0 15 - - - 15 -TrigSignatureMoniMT INFO -- #2468872349 Features 0 0 0 0 0 0 0 0 0 15 - - - +TrigSignatureMoniMT INFO -- #2468872349 Events 19 19 0 0 0 0 0 0 0 0 0 0 15 - - - 15 +TrigSignatureMoniMT INFO -- #2468872349 Features 0 0 0 0 0 0 0 0 0 0 15 - - - TrigSignatureMoniMT INFO HLT_xe65_cell_L1XE50 #531141817 -TrigSignatureMoniMT INFO -- #531141817 Events 10 10 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #531141817 Features 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #531141817 Events 10 10 0 0 0 0 0 0 0 0 0 0 7 - - - 7 +TrigSignatureMoniMT INFO -- #531141817 Features 0 0 0 0 0 0 0 0 0 0 7 - - - TrigSignatureMoniMT INFO HLT_xe65_cell_xe110_tcpufit_L1XE50 #115518400 -TrigSignatureMoniMT INFO -- #115518400 Events 10 10 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #115518400 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #115518400 Events 10 10 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #115518400 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_xe80_tcpufit_unconvtrk120_isohpttrack_icummedium_L1XE50 #668475349 -TrigSignatureMoniMT INFO -- #668475349 Events 10 10 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #668475349 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #668475349 Events 10 10 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #668475349 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe80_tcpufit_unconvtrk120_isohpttrack_imedium_L1XE50 #1855034723 -TrigSignatureMoniMT INFO -- #1855034723 Events 10 10 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #1855034723 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #1855034723 Events 10 10 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #1855034723 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_xe80_tcpufit_unconvtrk80_isohpttrack_imedium_L1XE50 #153760048 -TrigSignatureMoniMT INFO -- #153760048 Events 10 10 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #153760048 Features 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #153760048 Events 10 10 0 0 0 0 0 0 0 0 0 0 6 - - - 6 +TrigSignatureMoniMT INFO -- #153760048 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe95_trkmht_xe90_tcpufit_xe75_cell_L1XE50 #302256132 -TrigSignatureMoniMT INFO -- #302256132 Events 10 10 0 0 0 0 0 0 0 0 0 4 - - - 4 -TrigSignatureMoniMT INFO -- #302256132 Features 0 0 0 0 0 0 0 0 0 4 - - - +TrigSignatureMoniMT INFO -- #302256132 Events 10 10 0 0 0 0 0 0 0 0 0 0 4 - - - 4 +TrigSignatureMoniMT INFO -- #302256132 Features 0 0 0 0 0 0 0 0 0 0 4 - - - diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoAOD_trigRel21_mc16a_build.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoAOD_trigRel21_mc16a_build.py index fff2952e1bbb703620a1fb11e744dc3e1f25bb6a..70405a41232dc99470841167ee3278cb3ed10954 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoAOD_trigRel21_mc16a_build.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoAOD_trigRel21_mc16a_build.py @@ -59,7 +59,7 @@ rdo2rdotrig.args = '--inputRDOFile=RDO.pool.root --outputRDO_TRIGFile=RDO_TRIG.p rdo2rdotrig.args += ' --asetup="RDOtoRDOTrigger:Athena,21.0-mc16a,slc6,latest"' rdo2rdotrig.args += ' --triggerConfig="MCRECO:MC_pp_v6_tight_mc_prescale"' rdo2rdotrig.args += ' --imf="all:True"' -rdo2rdotrig.args += ' --preExec="all:from TriggerJobOpts.TriggerFlags import TriggerFlags; TriggerFlags.run2Config=\"2016\""' +rdo2rdotrig.args += ' --preExec="all:from TriggerJobOpts.TriggerFlags import TriggerFlags; TriggerFlags.run2Config=\'2016\'"' # Clear AthFile cache from r21 because it is incompatible with py3 r22 (ATR-21489) rm_cache = ExecStep.ExecStep('ClearAthFileCache') diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v1Dev_build.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v1Dev_build.py index 3e0eaa757aacce38888c7019b480bd1f9a642849..fa56448a6e46b9812b25172514c441beec53d741 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v1Dev_build.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v1Dev_build.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -# art-description: Test of transform HITS->RDO with serial athena followed by RDO->RDO_TRIG with threads=1 +# art-description: Test of transform HITS->RDO followed by RDO->RDO_TRIG # art-type: build # art-include: master/Athena # Skipping art-output which has no effect for build tests. @@ -13,6 +13,7 @@ from TrigAnalysisTest.TrigAnalysisSteps import add_analysis_steps hit2rdo = ExecStep.ExecStep('HITtoRDO') hit2rdo.type = 'Reco_tf' hit2rdo.input = 'ttbar_HITS' +hit2rdo.threads = 1 hit2rdo.args = '--outputRDOFile=RDO.pool.root' pu_low = Input.get_input('pileup_low') diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v1Dev_grid.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v1Dev_grid.py index 900593d04688b46013a5f41ef2a66058a54fc5d3..27f0118f23e83ebe1333396b15082f27b7ecb7ae 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v1Dev_grid.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v1Dev_grid.py @@ -1,9 +1,11 @@ #!/usr/bin/env python # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -# art-description: Test of transform HITS->RDO with serial athena followed by RDO->RDO_TRIG with threads=1 +# art-description: Test of transform HITS->RDO followed by RDO->RDO_TRIG # art-type: grid # art-include: master/Athena +# art-athena-mt: 4 +# art-memory: 6000 # art-output: *.txt # art-output: *.log # art-output: log.* @@ -20,15 +22,13 @@ from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps, Input from TrigAnalysisTest.TrigAnalysisSteps import add_analysis_steps -import os - -# To run single-process transform on MCORE sites -if 'ATHENA_NPROC_NUM' in os.environ: - del os.environ['ATHENA_NPROC_NUM'] hit2rdo = ExecStep.ExecStep('HITtoRDO') hit2rdo.type = 'Reco_tf' hit2rdo.input = 'ttbar_HITS' +hit2rdo.max_events = 800 +hit2rdo.threads = 4 +hit2rdo.concurrent_events = 4 hit2rdo.args = '--outputRDOFile=RDO.pool.root' pu_low = Input.get_input('pileup_low') @@ -48,7 +48,8 @@ rdo2rdotrig = ExecStep.ExecStep('RDOtoRDOTrigger') rdo2rdotrig.type = 'Reco_tf' rdo2rdotrig.input = '' rdo2rdotrig.explicit_input = True -rdo2rdotrig.threads = 1 +rdo2rdotrig.threads = 4 +rdo2rdotrig.concurrent_events = 4 rdo2rdotrig.args = '--inputRDOFile=RDO.pool.root --outputRDO_TRIGFile=RDO_TRIG.pool.root' rdo2rdotrig.args += ' --preExec="setMenu=\'LS2_v1_TriggerValidation_mc_prescale\'"' diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v7Primaries_build.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v7Primaries_build.py index 5e7f348274b007f9931fe7b10cef4ed06a6f1d5e..0ad0b76563d0e78cde65cf25fb71f9614645eb15 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v7Primaries_build.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v7Primaries_build.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -# art-description: Test of transform HITS->RDO->RDO_TRIG with serial athena +# art-description: Test of transform HITS->RDO->RDO_TRIG with serial athena (legacy trigger) # art-type: build # art-include: master/Athena # Skipping art-output which has no effect for build tests. diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v7Primaries_grid.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v7Primaries_grid.py index d98efdc98b5930bdd8d499c6dd4f29157d5e2081..9ea5c43968ea747e8a356daea1d7d4f1c623dbe7 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v7Primaries_grid.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_HITtoRDOTrig_v7Primaries_grid.py @@ -1,9 +1,10 @@ #!/usr/bin/env python # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -# art-description: Test of transform HITS->RDO->RDO_TRIG with serial athena +# art-description: Test of transform HITS->RDO->RDO_TRIG with serial athena (legacy trigger) # art-type: grid # art-include: master/Athena +# art-memory: 6000 # art-output: *.txt # art-output: *.log # art-output: log.* @@ -23,15 +24,11 @@ from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps, Input from TrigAnalysisTest.TrigAnalysisSteps import add_analysis_steps -import os - -# To run single-process transform on MCORE sites -if 'ATHENA_NPROC_NUM' in os.environ: - del os.environ['ATHENA_NPROC_NUM'] hit2rdo = ExecStep.ExecStep('HITtoRDO') hit2rdo.type = 'Reco_tf' hit2rdo.input = 'ttbar_HITS' +hit2rdo.max_events = 400 hit2rdo.args = '--outputRDOFile=RDO.pool.root' pu_low = Input.get_input('pileup_low') diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoAOD_v1Dev_grid.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoAOD_v1Dev_grid.py index b4f39eeb94d8abcfb23149acd57897c4dc41ca2d..4d5c93882d632fad20582fd40c4170f4c9d66a2d 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoAOD_v1Dev_grid.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoAOD_v1Dev_grid.py @@ -4,6 +4,8 @@ # art-description: Test of transform RDO->RDO_TRIG->ESD->AOD with threads=1 # art-type: grid # art-include: master/Athena +# art-athena-mt: 4 +# art-memory: 7000 # art-output: *.txt # art-output: *.log # art-output: log.* @@ -20,11 +22,6 @@ from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps from TrigAnalysisTest.TrigAnalysisSteps import add_analysis_steps -import os - -# To run single-process transform on MCORE sites -if 'ATHENA_NPROC_NUM' in os.environ: - del os.environ['ATHENA_NPROC_NUM'] preExec = ';'.join([ 'setMenu=\'LS2_v1_TriggerValidation_mc_prescale\'', @@ -35,8 +32,9 @@ preExec = ';'.join([ rdo2aod = ExecStep.ExecStep() rdo2aod.type = 'Reco_tf' rdo2aod.input = 'ttbar' -rdo2aod.max_events = 500 -rdo2aod.threads = 1 +rdo2aod.max_events = 800 +rdo2aod.threads = 4 +rdo2aod.concurrent_events = 4 rdo2aod.args = '--outputAODFile=AOD.pool.root --steering="doRDO_TRIG"' rdo2aod.args += ' --preExec="all:{:s};"'.format(preExec) diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoAOD_v7Primaries_grid.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoAOD_v7Primaries_grid.py index 9b8958b15f3b03758b67e3094e77dec0c7638f55..79c6398c23d04c2888c04bb98b177e83e3b61aa3 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoAOD_v7Primaries_grid.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoAOD_v7Primaries_grid.py @@ -4,6 +4,7 @@ # art-description: Test of transform RDO->RDO_TRIG->ESD->AOD with serial athena (legacy trigger) # art-type: grid # art-include: master/Athena +# art-memory: 6000 # art-output: *.txt # art-output: *.log # art-output: log.* @@ -23,11 +24,6 @@ from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps from TrigAnalysisTest.TrigAnalysisSteps import add_analysis_steps -import os - -# To run single-process transform on MCORE sites -if 'ATHENA_NPROC_NUM' in os.environ: - del os.environ['ATHENA_NPROC_NUM'] preExec = ';'.join([ 'from TriggerJobOpts.TriggerFlags import TriggerFlags', @@ -38,7 +34,7 @@ preExec = ';'.join([ rdo2aod = ExecStep.ExecStep() rdo2aod.type = 'Reco_tf' rdo2aod.input = 'ttbar' -rdo2aod.max_events = 500 +rdo2aod.max_events = 400 rdo2aod.args = '--outputAODFile=AOD.pool.root --steering="doRDO_TRIG"' rdo2aod.args += ' --preExec="all:{:s};"'.format(preExec) diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoPhysval_v1Dev_grid.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoPhysval_v1Dev_grid.py index 99a620dbc2134b378c50d78f13ec808bb0715feb..dcf7dafd9164faeb0a5e5f60a5201e9de71a5a40 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoPhysval_v1Dev_grid.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoPhysval_v1Dev_grid.py @@ -4,6 +4,8 @@ # art-description: Test of transform RDO->RDO_TRIG->ESD->AOD with threads=1 followed by AOD->NTUP_PHYSVAL with serial athena and PHYSVAL_WEB stage # art-type: grid # art-include: master/Athena +# art-athena-mt: 4 +# art-memory: 7000 # art-output: *.txt # art-output: *.log # art-output: log.* @@ -25,11 +27,6 @@ from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps from TrigAnalysisTest.TrigAnalysisSteps import add_physvalweb_steps -import os - -# To run single-process transform on MCORE sites -if 'ATHENA_NPROC_NUM' in os.environ: - del os.environ['ATHENA_NPROC_NUM'] preExec = ';'.join([ 'setMenu=\'LS2_v1_TriggerValidation_mc_prescale\'', @@ -40,8 +37,9 @@ preExec = ';'.join([ rdo2aod = ExecStep.ExecStep('RDOtoAOD') rdo2aod.type = 'Reco_tf' rdo2aod.input = 'ttbar' -rdo2aod.max_events = 500 -rdo2aod.threads = 1 +rdo2aod.max_events = 800 +rdo2aod.threads = 4 +rdo2aod.concurrent_events = 4 rdo2aod.args = '--outputAODFile=AOD.pool.root --steering="doRDO_TRIG" --valid=True' rdo2aod.args += ' --preExec="all:{:s};"'.format(preExec) diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoPhysval_v7Primaries_grid.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoPhysval_v7Primaries_grid.py index 5ffc9397598c3f48716b26c6ac52d4e93c410d8d..34873a96e978c83827499365e3015a7ff8f5b98f 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoPhysval_v7Primaries_grid.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoPhysval_v7Primaries_grid.py @@ -4,6 +4,7 @@ # art-description: Test of transform RDO->RDO_TRIG->ESD->AOD->NTUP_PHYSVAL with serial athena (legacy trigger) and PHYSVAL_WEB stage # art-type: grid # art-include: master/Athena +# art-memory: 6000 # art-output: *.txt # art-output: *.log # art-output: log.* @@ -25,11 +26,6 @@ from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps from TrigAnalysisTest.TrigAnalysisSteps import add_physvalweb_steps -import os - -# To run single-process transform on MCORE sites -if 'ATHENA_NPROC_NUM' in os.environ: - del os.environ['ATHENA_NPROC_NUM'] preExec = ';'.join([ 'from TriggerJobOpts.TriggerFlags import TriggerFlags', @@ -40,7 +36,7 @@ preExec = ';'.join([ rdo2aod = ExecStep.ExecStep('RDOtoAOD') rdo2aod.type = 'Reco_tf' rdo2aod.input = 'ttbar' -rdo2aod.max_events = 500 +rdo2aod.max_events = 400 rdo2aod.args = '--outputAODFile=AOD.pool.root --steering="doRDO_TRIG" --valid=True' rdo2aod.args += ' --preExec="all:{:s};"'.format(preExec) diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRDOTrig_v1Dev_grid.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRDOTrig_v1Dev_grid.py index 488a7ba65eba604b69b19106a6c8353737165e95..fe1186b0e791044d9bcc6b9b43c06860af89d6e7 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRDOTrig_v1Dev_grid.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRDOTrig_v1Dev_grid.py @@ -1,9 +1,11 @@ #!/usr/bin/env python # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -# art-description: Test of the RDOtoRDOTrigger transform with threads=1 +# art-description: Test of the RDOtoRDOTrigger transform with Dev menu # art-type: grid # art-include: master/Athena +# art-athena-mt: 4 +# art-memory: 6000 # art-output: *.txt # art-output: *.log # art-output: log.* @@ -20,11 +22,6 @@ from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps from TrigAnalysisTest.TrigAnalysisSteps import add_analysis_steps -import os - -# To run single-process transform on MCORE sites -if 'ATHENA_NPROC_NUM' in os.environ: - del os.environ['ATHENA_NPROC_NUM'] preExec = ';'.join([ 'setMenu=\'LS2_v1_TriggerValidation_mc_prescale\'', @@ -35,7 +32,9 @@ preExec = ';'.join([ ex = ExecStep.ExecStep() ex.type = 'Reco_tf' ex.input = 'ttbar' -ex.threads = 1 +ex.max_events = 800 +ex.threads = 4 +ex.concurrent_events = 4 ex.args = '--outputRDO_TRIGFile=RDO_TRIG.pool.root' ex.args += ' --preExec="all:{:s};"'.format(preExec) diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRDOTrig_v7Primaries_grid.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRDOTrig_v7Primaries_grid.py index 41d956e4c26a55d4fe04f41a680ad776bb3d7d46..78744e46473dc86a7f5eaa56d1c109d887205653 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRDOTrig_v7Primaries_grid.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRDOTrig_v7Primaries_grid.py @@ -4,6 +4,7 @@ # art-description: Test of the RDOtoRDOTrigger transform with serial athena (legacy trigger) # art-type: grid # art-include: master/Athena +# art-memory: 5000 # art-output: *.txt # art-output: *.log # art-output: log.* @@ -23,11 +24,6 @@ from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps from TrigAnalysisTest.TrigAnalysisSteps import add_analysis_steps -import os - -# To run single-process transform on MCORE sites -if 'ATHENA_NPROC_NUM' in os.environ: - del os.environ['ATHENA_NPROC_NUM'] preExec = ';'.join([ 'from TriggerJobOpts.TriggerFlags import TriggerFlags', @@ -38,7 +34,7 @@ preExec = ';'.join([ ex = ExecStep.ExecStep() ex.type = 'Reco_tf' ex.input = 'ttbar' -ex.max_events = 500 +ex.max_events = 400 ex.args = '--outputRDO_TRIGFile=RDO_TRIG.pool.root' ex.args += ' --preExec="all:{:s};"'.format(preExec) diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRun3DQ_v1Dev_MT_build.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRun3DQ_v1Dev_MT_build.py new file mode 100755 index 0000000000000000000000000000000000000000..c9e340f28cce0e598973ae37770ce389bf479cf5 --- /dev/null +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRun3DQ_v1Dev_MT_build.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# +# art-description: Multi-threaded test of transform RDO->RDO_TRIG->ESD->AOD followed by HLT monitoring step with Run-3 DQ framework +# art-type: build +# art-include: master/Athena +# art-athena-mt: 4 +# Skipping art-output which has no effect for build tests. +# If you create a grid version, check art-output in existing grid tests. + +from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps + +preExec = ';'.join([ + 'setMenu=\'LS2_v1_TriggerValidation_mc_prescale\'', + 'from TriggerJobOpts.TriggerFlags import TriggerFlags', + 'TriggerFlags.AODEDMSet.set_Value_and_Lock(\\\"AODFULL\\\")', +]) + +rdo2aod = ExecStep.ExecStep('RDOtoAOD') +rdo2aod.type = 'Reco_tf' +rdo2aod.input = 'ttbar' +rdo2aod.threads = 4 +rdo2aod.concurrent_events = 4 +rdo2aod.args = '--outputAODFile=AOD.pool.root --steering="doRDO_TRIG" --valid=True' +rdo2aod.args += ' --preExec="all:{:s};"'.format(preExec) + +dq = ExecStep.ExecStep('Run3DQ') +dq.type = 'other' +dq.executable = 'Run3DQTestingDriver.py' +dq.input = '' +dq.args = '--threads=4' +dq.args += ' --dqOffByDefault' +dq.args += ' Input.Files="[\'AOD.pool.root\']" DQ.Steering.doHLTMon=True' + +test = Test.Test() +test.art_type = 'build' +test.exec_steps = [rdo2aod,dq] +test.check_steps = CheckSteps.default_check_steps(test) + +# Overwrite default histogram file name for checks +for step in [test.get_step(name) for name in ['HistCount', 'RootComp']]: + step.input_file = 'ExampleMonitorOutput.root' + +import sys +sys.exit(test.run()) diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoT0Mon_v1Dev_build.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRun3DQ_v1Dev_build.py similarity index 72% rename from Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoT0Mon_v1Dev_build.py rename to Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRun3DQ_v1Dev_build.py index ef9e3a339a40fca69dd5eef83064ca54cf39b84f..99ec38f567be7c275984fb2c8982cb63c4dfe443 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoT0Mon_v1Dev_build.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRun3DQ_v1Dev_build.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -# art-description: Test of transform RDO->RDO_TRIG->ESD->AOD with threads=1 followed by Tier0 HLT monitoring step with Run-3 DQ framework +# art-description: Test of transform RDO->RDO_TRIG->ESD->AOD followed by HLT monitoring step with Run-3 DQ framework # art-type: build # art-include: master/Athena # Skipping art-output which has no effect for build tests. @@ -22,16 +22,15 @@ rdo2aod.threads = 1 rdo2aod.args = '--outputAODFile=AOD.pool.root --steering="doRDO_TRIG" --valid=True' rdo2aod.args += ' --preExec="all:{:s};"'.format(preExec) -tzmon = ExecStep.ExecStep('Tier0Mon') -tzmon.type = 'other' -tzmon.executable = 'Run3DQTestingDriver.py' -tzmon.input = '' -tzmon.explicit_input = True -tzmon.args = '--dqOffByDefault Input.Files="[\'AOD.pool.root\']" DQ.Steering.doHLTMon=True' +dq = ExecStep.ExecStep('Run3DQ') +dq.type = 'other' +dq.executable = 'Run3DQTestingDriver.py' +dq.input = '' +dq.args = '--dqOffByDefault Input.Files="[\'AOD.pool.root\']" DQ.Steering.doHLTMon=True' test = Test.Test() test.art_type = 'build' -test.exec_steps = [rdo2aod,tzmon] +test.exec_steps = [rdo2aod,dq] test.check_steps = CheckSteps.default_check_steps(test) # Overwrite default histogram file name for checks diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoT0Mon_v1Dev_grid.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRun3DQ_v1Dev_grid.py similarity index 68% rename from Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoT0Mon_v1Dev_grid.py rename to Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRun3DQ_v1Dev_grid.py index 4adbdbfb424b44133ff0118464ac5b486aff9769..22adbb616d325c509952606b48747999d9d0e0c1 100755 --- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoT0Mon_v1Dev_grid.py +++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoRun3DQ_v1Dev_grid.py @@ -1,9 +1,11 @@ #!/usr/bin/env python # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -# art-description: Test of transform RDO->RDO_TRIG->ESD->AOD with threads=1 followed by AOD->NTUP_PHYSVAL with serial athena +# art-description: Test of transform RDO->RDO_TRIG->ESD->AOD followed by HLT monitoring step with Run-3 DQ framework # art-type: grid # art-include: master/Athena +# art-athena-mt: 4 +# art-memory: 7000 # art-output: *.txt # art-output: *.log # art-output: log.* @@ -19,11 +21,6 @@ # art-output: *.check* from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps -import os - -# To run single-process transform on MCORE sites -if 'ATHENA_NPROC_NUM' in os.environ: - del os.environ['ATHENA_NPROC_NUM'] preExec = ';'.join([ 'setMenu=\'LS2_v1_TriggerValidation_mc_prescale\'', @@ -34,21 +31,23 @@ preExec = ';'.join([ rdo2aod = ExecStep.ExecStep('RDOtoAOD') rdo2aod.type = 'Reco_tf' rdo2aod.input = 'ttbar' -rdo2aod.max_events = 500 -rdo2aod.threads = 1 +rdo2aod.max_events = 800 +rdo2aod.threads = 4 +rdo2aod.concurrent_events = 4 rdo2aod.args = '--outputAODFile=AOD.pool.root --steering="doRDO_TRIG" --valid=True' rdo2aod.args += ' --preExec="all:{:s};"'.format(preExec) -tzmon = ExecStep.ExecStep('Tier0Mon') -tzmon.type = 'other' -tzmon.executable = 'Run3DQTestingDriver.py' -tzmon.input = '' -tzmon.explicit_input = True -tzmon.args = '--dqOffByDefault Input.Files="[\'AOD.pool.root\']" DQ.Steering.doHLTMon=True' +dq = ExecStep.ExecStep('Run3DQ') +dq.type = 'other' +dq.executable = 'Run3DQTestingDriver.py' +dq.input = '' +dq.args = '--threads=4' +dq.args += ' --dqOffByDefault' +dq.args += ' Input.Files="[\'AOD.pool.root\']" DQ.Steering.doHLTMon=True' test = Test.Test() test.art_type = 'grid' -test.exec_steps = [rdo2aod,tzmon] +test.exec_steps = [rdo2aod,dq] test.check_steps = CheckSteps.default_check_steps(test) # Overwrite default histogram file name for checks diff --git a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py index 1ef912ba5aa0934776350419a40af6576201221f..b51719c9bc0e02ccfdf6f4c8500a8a3256184a36 100644 --- a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py +++ b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py @@ -85,11 +85,19 @@ class ExecStep(Step): else: self.misconfig_abort('Cannot determine type of this step') - # Ensure no log duplication for transforms if self.executable.endswith('_tf.py'): + def del_env(varname): + if varname in os.environ: + del os.environ[varname] + + # Ensure no log duplication for transforms os.environ['TRF_NOECHO'] = '1' - if 'TRF_ECHO' in os.environ: - del os.environ['TRF_ECHO'] + del_env('TRF_ECHO') + + # We don't use the Reco_tf auto-configuration for MP/MT transforms, + # instead we pass our parameters of choice to athenaopts + del_env('ATHENA_NPROC_NUM') + del_env('ATHENA_CORE_NUMBER') def configure_input(self): self.log.debug('Configuring input for step %s', self.name) diff --git a/Trigger/TrigValidation/TriggerTest/share/ref_data_v1Dev_build.ref b/Trigger/TrigValidation/TriggerTest/share/ref_data_v1Dev_build.ref index 2456e35d582832d2d8662f74633b571bbfe4a1d5..ae0282f4a81f034c08dc2aaea694ef744af42661 100644 --- a/Trigger/TrigValidation/TriggerTest/share/ref_data_v1Dev_build.ref +++ b/Trigger/TrigValidation/TriggerTest/share/ref_data_v1Dev_build.ref @@ -1,1119 +1,1131 @@ TrigSignatureMoniMT INFO HLT_10j40_pf_subresjesgscIS_ftf_L14J15 #3575805394 -TrigSignatureMoniMT INFO -- #3575805394 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3575805394 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3575805394 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3575805394 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_10j40_subjesIS_L14J15 #2760204981 -TrigSignatureMoniMT INFO -- #2760204981 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2760204981 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2760204981 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2760204981 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_10j40_subresjesgscIS_ftf_L14J15 #3568675904 -TrigSignatureMoniMT INFO -- #3568675904 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3568675904 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3568675904 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3568675904 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_2e12_lhloose_mu10_L12EM8VH_MU10 #2518246928 -TrigSignatureMoniMT INFO -- #2518246928 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2518246928 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2518246928 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2518246928 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2e17_etcut_L12EM15VH #3136730292 -TrigSignatureMoniMT INFO -- #3136730292 Events 20 20 4 0 0 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3136730292 Features 4 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3136730292 Events 20 20 4 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3136730292 Features 4 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2e17_lhvloose_L12EM15VH #2280638160 -TrigSignatureMoniMT INFO -- #2280638160 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2280638160 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2280638160 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2280638160 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_2e17_lhvloose_L12EM15VHI #3514903681 -TrigSignatureMoniMT INFO -- #3514903681 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3514903681 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3514903681 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3514903681 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_2e17_lhvloose_L12EM3 #1767768251 -TrigSignatureMoniMT INFO -- #1767768251 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1767768251 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1767768251 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1767768251 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_2e24_lhvloose_L12EM20VH #1796849979 -TrigSignatureMoniMT INFO -- #1796849979 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1796849979 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1796849979 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1796849979 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_2e3_etcut_L12EM3 #2613484113 -TrigSignatureMoniMT INFO -- #2613484113 Events 20 20 15 13 13 - - - - - - - - - - 13 -TrigSignatureMoniMT INFO -- #2613484113 Features 94 324 172 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2613484113 Events 20 20 15 13 13 13 - - - - - - - - - - 13 +TrigSignatureMoniMT INFO -- #2613484113 Features 94 324 172 86 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g10_loose_mu20_L1MU20 #3765708828 -TrigSignatureMoniMT INFO -- #3765708828 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #3765708828 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #3765708828 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #3765708828 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2g15_tight_dPhi15_L1DPHI-M70-2EM12I #2606736960 -TrigSignatureMoniMT INFO -- #2606736960 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2606736960 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2606736960 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2606736960 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g20_tight_L12EM15VH #3837353071 -TrigSignatureMoniMT INFO -- #3837353071 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3837353071 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3837353071 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3837353071 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g20_tight_icaloloose_L12EM15VH #1319738689 -TrigSignatureMoniMT INFO -- #1319738689 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1319738689 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1319738689 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1319738689 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g22_tight_L12EM15VH #708421357 -TrigSignatureMoniMT INFO -- #708421357 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #708421357 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #708421357 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #708421357 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g25_loose_g15_loose_L12EM20VH #1367194755 -TrigSignatureMoniMT INFO -- #1367194755 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1367194755 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1367194755 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1367194755 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g35_etcut_L12EM20VH #58053304 -TrigSignatureMoniMT INFO -- #58053304 Events 20 20 1 0 0 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #58053304 Features 1 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #58053304 Events 20 20 1 0 0 - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #58053304 Features 1 0 0 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g35_medium_L12EM20VH #3965466087 -TrigSignatureMoniMT INFO -- #3965466087 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3965466087 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3965466087 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3965466087 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2g50_loose_L12EM20VH #3590373854 -TrigSignatureMoniMT INFO -- #3590373854 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3590373854 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3590373854 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3590373854 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_2j330_a10sd_csskpf_jes_ftf_35smcINF_L1J100 #3495282139 -TrigSignatureMoniMT INFO -- #3495282139 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3495282139 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3495282139 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3495282139 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_2j330_a10sd_csskpf_nojcalib_ftf_35smcINF_L1J100 #2680976232 -TrigSignatureMoniMT INFO -- #2680976232 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2680976232 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2680976232 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2680976232 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_2j330_a10t_lcw_jes_35smcINF_L1J100 #1295975955 -TrigSignatureMoniMT INFO -- #1295975955 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1295975955 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1295975955 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1295975955 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_2j330_a10t_lcw_nojcalib_35smcINF_L1J100 #891415013 -TrigSignatureMoniMT INFO -- #891415013 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #891415013 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #891415013 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #891415013 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_2j60_L1J15 #927735533 -TrigSignatureMoniMT INFO -- #927735533 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #927735533 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #927735533 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #927735533 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_2mu10_bJpsimumu_L12MU10 #3498558358 -TrigSignatureMoniMT INFO -- #3498558358 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #3498558358 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #3498558358 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #3498558358 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu10_bUpsimumu_L12MU10 #234102568 -TrigSignatureMoniMT INFO -- #234102568 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #234102568 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #234102568 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #234102568 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu14_L12MU10 #2619091790 -TrigSignatureMoniMT INFO -- #2619091790 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2619091790 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2619091790 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2619091790 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu14_l2io_L12MU10 #945295390 -TrigSignatureMoniMT INFO -- #945295390 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #945295390 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #945295390 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #945295390 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu15_L12MU10 #557204938 -TrigSignatureMoniMT INFO -- #557204938 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #557204938 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #557204938 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #557204938 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu4_L12MU4 #2999632714 -TrigSignatureMoniMT INFO -- #2999632714 Events 20 20 0 0 0 0 1 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2999632714 Features 0 0 0 0 4 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2999632714 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2999632714 Features 0 0 0 0 0 4 4 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu4_bDimu_L12MU4 #1730084172 -TrigSignatureMoniMT INFO -- #1730084172 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1730084172 Features 0 0 0 0 4 2 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1730084172 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1730084172 Features 0 0 0 0 0 4 2 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu4_bJpsimumu_L12MU4 #4276347155 -TrigSignatureMoniMT INFO -- #4276347155 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #4276347155 Features 0 0 0 0 4 2 0 0 - - - - - +TrigSignatureMoniMT INFO -- #4276347155 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #4276347155 Features 0 0 0 0 0 4 2 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu4_bUpsimumu_L12MU4 #4008168535 -TrigSignatureMoniMT INFO -- #4008168535 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #4008168535 Features 0 0 0 0 4 2 0 0 - - - - - +TrigSignatureMoniMT INFO -- #4008168535 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #4008168535 Features 0 0 0 0 0 4 2 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu4_muonqual_L12MU4 #1584776935 -TrigSignatureMoniMT INFO -- #1584776935 Events 20 20 0 0 0 0 1 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1584776935 Features 0 0 0 0 4 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1584776935 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1584776935 Features 0 0 0 0 0 4 4 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu6_10invm70_L1MU6 #1316992871 -TrigSignatureMoniMT INFO -- #1316992871 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1316992871 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1316992871 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1316992871 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu6_Dr_L12MU4 #3304584056 -TrigSignatureMoniMT INFO -- #3304584056 Events 20 20 0 0 0 0 1 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3304584056 Features 0 0 0 0 4 0 - - - - - - - +TrigSignatureMoniMT INFO -- #3304584056 Events 20 20 0 0 0 0 0 1 1 - - - - - - - 1 +TrigSignatureMoniMT INFO -- #3304584056 Features 0 0 0 0 0 4 4 - - - - - - - TrigSignatureMoniMT INFO HLT_2mu6_L12MU6 #1747073535 -TrigSignatureMoniMT INFO -- #1747073535 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1747073535 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1747073535 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1747073535 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu6_l2io_L12MU6 #2996403520 -TrigSignatureMoniMT INFO -- #2996403520 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2996403520 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2996403520 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2996403520 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_2mu6_muonqual_L12MU6 #2398136098 -TrigSignatureMoniMT INFO -- #2398136098 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2398136098 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2398136098 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2398136098 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_3j200_L1J100 #2199422919 -TrigSignatureMoniMT INFO -- #2199422919 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2199422919 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2199422919 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2199422919 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_3j200_pf_subresjesgscIS_ftf_L1J100 #794428037 -TrigSignatureMoniMT INFO -- #794428037 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #794428037 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #794428037 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #794428037 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_3j200_subresjesgscIS_ftf_L1J100 #1801834652 -TrigSignatureMoniMT INFO -- #1801834652 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1801834652 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1801834652 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1801834652 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_3mu6_L13MU6 #1832399408 -TrigSignatureMoniMT INFO -- #1832399408 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1832399408 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1832399408 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1832399408 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_3mu6_msonly_L13MU6 #1199773318 -TrigSignatureMoniMT INFO -- #1199773318 Events 20 20 0 0 0 0 0 0 0 - - - - - - 0 -TrigSignatureMoniMT INFO -- #1199773318 Features 0 0 0 0 0 0 0 - - - - - - +TrigSignatureMoniMT INFO -- #1199773318 Events 20 20 0 0 0 0 0 0 0 0 - - - - - - 0 +TrigSignatureMoniMT INFO -- #1199773318 Features 0 0 0 0 0 0 0 0 - - - - - - TrigSignatureMoniMT INFO HLT_3mu8_msonly_L13MU6 #424835335 -TrigSignatureMoniMT INFO -- #424835335 Events 20 20 0 0 0 0 0 0 0 - - - - - - 0 -TrigSignatureMoniMT INFO -- #424835335 Features 0 0 0 0 0 0 0 - - - - - - +TrigSignatureMoniMT INFO -- #424835335 Events 20 20 0 0 0 0 0 0 0 0 - - - - - - 0 +TrigSignatureMoniMT INFO -- #424835335 Features 0 0 0 0 0 0 0 0 - - - - - - TrigSignatureMoniMT INFO HLT_4j120_pf_subresjesgscIS_ftf_L13J50 #1755129033 -TrigSignatureMoniMT INFO -- #1755129033 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1755129033 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1755129033 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1755129033 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_4j120_subjesIS_L13J50 #3722303680 -TrigSignatureMoniMT INFO -- #3722303680 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3722303680 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3722303680 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3722303680 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_4j120_subresjesgscIS_ftf_L13J50 #91006165 -TrigSignatureMoniMT INFO -- #91006165 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #91006165 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #91006165 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #91006165 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_4mu4_L14MU4 #1834383636 -TrigSignatureMoniMT INFO -- #1834383636 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1834383636 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1834383636 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1834383636 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_5j70_0eta240_L14J20 #1175391812 -TrigSignatureMoniMT INFO -- #1175391812 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1175391812 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1175391812 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1175391812 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_5j70_pf_subresjesgscIS_ftf_0eta240_L14J15 #4189027854 -TrigSignatureMoniMT INFO -- #4189027854 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #4189027854 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #4189027854 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #4189027854 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_5j70_subresjesgscIS_ftf_0eta240_L14J15 #819918597 -TrigSignatureMoniMT INFO -- #819918597 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #819918597 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #819918597 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #819918597 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_5j85_pf_subresjesgscIS_ftf_L14J15 #4208121018 -TrigSignatureMoniMT INFO -- #4208121018 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #4208121018 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #4208121018 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #4208121018 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_5j85_subjesIS_L14J15 #2745094401 -TrigSignatureMoniMT INFO -- #2745094401 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2745094401 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2745094401 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2745094401 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_5j85_subresjesgscIS_ftf_L14J15 #1148892499 -TrigSignatureMoniMT INFO -- #1148892499 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1148892499 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1148892499 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1148892499 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j55_pf_subresjesgscIS_ftf_0eta240_L14J15 #1526259867 -TrigSignatureMoniMT INFO -- #1526259867 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1526259867 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1526259867 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1526259867 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j55_subjesIS_0eta240_L14J15 #68179418 -TrigSignatureMoniMT INFO -- #68179418 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #68179418 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #68179418 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #68179418 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j55_subresjesgscIS_ftf_0eta240_L14J15 #1068073241 -TrigSignatureMoniMT INFO -- #1068073241 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1068073241 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1068073241 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1068073241 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j70_pf_subresjesgscIS_ftf_L14J15 #1755772565 -TrigSignatureMoniMT INFO -- #1755772565 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1755772565 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1755772565 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1755772565 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j70_subjesIS_L14J15 #1003115860 -TrigSignatureMoniMT INFO -- #1003115860 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1003115860 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1003115860 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1003115860 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_6j70_subresjesgscIS_ftf_L14J15 #59957514 -TrigSignatureMoniMT INFO -- #59957514 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #59957514 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #59957514 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #59957514 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_7j45_pf_subresjesgscIS_ftf_L14J15 #2701381398 -TrigSignatureMoniMT INFO -- #2701381398 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2701381398 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2701381398 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2701381398 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_7j45_subjesIS_L14J15 #2617173782 -TrigSignatureMoniMT INFO -- #2617173782 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2617173782 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2617173782 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2617173782 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_7j45_subresjesgscIS_ftf_L14J15 #2928962349 -TrigSignatureMoniMT INFO -- #2928962349 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2928962349 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2928962349 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2928962349 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_JetDS_j0_L1J100 #3302698716 -TrigSignatureMoniMT INFO -- #3302698716 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - 0 -TrigSignatureMoniMT INFO -- #3302698716 Features 0 0 0 0 0 0 0 0 0 0 0 0 - +TrigSignatureMoniMT INFO -- #3302698716 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 +TrigSignatureMoniMT INFO -- #3302698716 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 - TrigSignatureMoniMT INFO HLT_alfacalib_AlfaPEB_L1ALFA_ANY #4094852824 -TrigSignatureMoniMT INFO -- #4094852824 Events 20 20 20 - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #4094852824 Features 20 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4094852824 Events 20 20 20 - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #4094852824 Features 20 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_beamspot_allTE_trkfast_BeamSpotPEB_L1J15 #3989372080 -TrigSignatureMoniMT INFO -- #3989372080 Events 20 20 20 20 - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3989372080 Features 20 20 - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3989372080 Events 20 20 20 20 - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3989372080 Features 20 20 - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_beamspot_trkFS_trkfast_BeamSpotPEB_L1J15 #628534730 -TrigSignatureMoniMT INFO -- #628534730 Events 20 20 20 20 - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #628534730 Features 20 20 - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #628534730 Events 20 20 20 20 - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #628534730 Features 20 20 - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_costmonitor_CostMonDS_L1All #843341480 -TrigSignatureMoniMT INFO -- #843341480 Events 20 20 20 - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #843341480 Features 20 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #843341480 Events 20 20 20 - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #843341480 Features 20 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_cscmon_CSCPEB_L1All #445495871 -TrigSignatureMoniMT INFO -- #445495871 Events 20 20 20 - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #445495871 Features 20 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #445495871 Events 20 20 20 - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #445495871 Features 20 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e12_lhloose_2mu10_L12MU10 #4167710884 -TrigSignatureMoniMT INFO -- #4167710884 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #4167710884 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #4167710884 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #4167710884 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_e140_lhloose_L1EM22VHI #3471067710 -TrigSignatureMoniMT INFO -- #3471067710 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3471067710 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3471067710 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3471067710 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e140_lhloose_nod0_L1EM22VHI #4128870680 -TrigSignatureMoniMT INFO -- #4128870680 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4128870680 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #4128870680 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4128870680 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e17_lhloose_mu14_L1EM15VH_MU10 #899946230 -TrigSignatureMoniMT INFO -- #899946230 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #899946230 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #899946230 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #899946230 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_e17_lhvloose_nod0_L1EM15VH #140779220 -TrigSignatureMoniMT INFO -- #140779220 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #140779220 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #140779220 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #140779220 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e20_lhmedium_e15_lhmedium_Zee_L12EM3 #1784800924 -TrigSignatureMoniMT INFO -- #1784800924 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1784800924 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1784800924 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1784800924 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e24_lhmedium_2g12_loose_L1EM20VH_3EM10VH #2668628593 -TrigSignatureMoniMT INFO -- #2668628593 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2668628593 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2668628593 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2668628593 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e24_lhmedium_g25_medium_L12EM20VH #2785977835 -TrigSignatureMoniMT INFO -- #2785977835 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2785977835 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2785977835 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2785977835 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e24_lhvloose_2e12_lhvloose_L1EM20VH_3EM10VH #9348946 -TrigSignatureMoniMT INFO -- #9348946 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #9348946 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #9348946 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #9348946 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e24_lhvloose_L1EM20VH #2442891649 -TrigSignatureMoniMT INFO -- #2442891649 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2442891649 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2442891649 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2442891649 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_etcut_L1EM22VHI #1703681121 -TrigSignatureMoniMT INFO -- #1703681121 Events 20 20 1 1 0 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1703681121 Features 1 2 0 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1703681121 Events 20 20 1 1 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1703681121 Features 1 2 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO HLT_e26_lhloose_L1EM22VHI #3666848578 +TrigSignatureMoniMT INFO -- #3666848578 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3666848578 Features 0 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO HLT_e26_lhmedium_L1EM22VHI #3961631254 +TrigSignatureMoniMT INFO -- #3961631254 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3961631254 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhmedium_mu8noL1_L1EM22VHI #4270718007 -TrigSignatureMoniMT INFO -- #4270718007 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #4270718007 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #4270718007 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #4270718007 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_e26_lhtight_L1EM22VHI #1995263521 -TrigSignatureMoniMT INFO -- #1995263521 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1995263521 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1995263521 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1995263521 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhtight_ivarloose_L1EM22VHI #2918307206 -TrigSignatureMoniMT INFO -- #2918307206 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2918307206 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2918307206 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2918307206 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhtight_ivarmedium_L1EM22VHI #2653558903 -TrigSignatureMoniMT INFO -- #2653558903 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2653558903 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2653558903 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2653558903 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhtight_ivartight_L1EM22VHI #1679339192 -TrigSignatureMoniMT INFO -- #1679339192 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1679339192 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1679339192 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1679339192 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhtight_nod0_L1EM22VHI #939763520 -TrigSignatureMoniMT INFO -- #939763520 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #939763520 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #939763520 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #939763520 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e26_lhtight_nod0_L1EM24VHI #4227411116 -TrigSignatureMoniMT INFO -- #4227411116 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4227411116 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #4227411116 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4227411116 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e300_etcut_L1EM22VHI #2128128255 -TrigSignatureMoniMT INFO -- #2128128255 Events 20 20 0 0 0 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2128128255 Features 0 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2128128255 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2128128255 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e3_etcut1step_g5_etcut_L12EM3 #1745513164 -TrigSignatureMoniMT INFO -- #1745513164 Events 20 20 10 10 10 - - - - - - - - - - 10 -TrigSignatureMoniMT INFO -- #1745513164 Features 23 23 23 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1745513164 Events 20 20 10 10 10 - - - - - - - - - - - 10 +TrigSignatureMoniMT INFO -- #1745513164 Features 23 23 23 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e3_etcut_L1EM3 #683953566 -TrigSignatureMoniMT INFO -- #683953566 Events 20 20 15 14 14 - - - - - - - - - - 14 -TrigSignatureMoniMT INFO -- #683953566 Features 48 163 87 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #683953566 Events 20 20 15 14 14 14 - - - - - - - - - - 14 +TrigSignatureMoniMT INFO -- #683953566 Features 48 163 87 44 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_etcut_L1EM3 #324908483 -TrigSignatureMoniMT INFO -- #324908483 Events 20 20 13 13 13 - - - - - - - - - - 13 -TrigSignatureMoniMT INFO -- #324908483 Features 41 148 49 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #324908483 Events 20 20 13 13 13 13 - - - - - - - - - - 13 +TrigSignatureMoniMT INFO -- #324908483 Features 41 148 49 35 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhloose_L1EM3 #736648247 -TrigSignatureMoniMT INFO -- #736648247 Events 20 20 9 9 9 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #736648247 Features 18 52 27 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #736648247 Events 20 20 9 9 9 9 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #736648247 Features 18 52 27 17 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhloose_noringer_L1EM3 #1053337356 -TrigSignatureMoniMT INFO -- #1053337356 Events 20 20 10 10 10 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1053337356 Features 15 48 29 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1053337356 Events 20 20 10 10 10 10 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1053337356 Features 15 48 29 15 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhmedium_L1EM3 #2713915187 -TrigSignatureMoniMT INFO -- #2713915187 Events 20 20 9 9 9 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2713915187 Features 19 55 27 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2713915187 Events 20 20 9 9 9 9 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2713915187 Features 19 55 27 18 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhmedium_noringer_L1EM3 #176627878 -TrigSignatureMoniMT INFO -- #176627878 Events 20 20 9 9 9 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #176627878 Features 13 51 29 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #176627878 Events 20 20 9 9 9 9 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #176627878 Features 13 51 29 13 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhtight_L1EM3 #2070133824 -TrigSignatureMoniMT INFO -- #2070133824 Events 20 20 8 8 8 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2070133824 Features 16 43 24 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2070133824 Events 20 20 8 8 8 8 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2070133824 Features 16 43 24 15 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhtight_nod0_L1EM3 #3303895627 -TrigSignatureMoniMT INFO -- #3303895627 Events 20 20 8 8 8 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3303895627 Features 16 43 24 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3303895627 Events 20 20 8 8 8 8 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3303895627 Features 16 43 24 15 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhtight_noringer_L1EM3 #2758326765 -TrigSignatureMoniMT INFO -- #2758326765 Events 20 20 9 9 9 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2758326765 Features 13 51 29 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2758326765 Events 20 20 9 9 9 9 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2758326765 Features 13 51 29 13 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e5_lhtight_noringer_nod0_L1EM3 #1690619419 -TrigSignatureMoniMT INFO -- #1690619419 Events 20 20 9 9 9 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1690619419 Features 13 51 29 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1690619419 Events 20 20 9 9 9 9 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1690619419 Features 13 51 29 13 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e60_lhmedium_L1EM22VHI #298591874 -TrigSignatureMoniMT INFO -- #298591874 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #298591874 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #298591874 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #298591874 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e60_lhmedium_nod0_L1EM22VHI #4115486024 -TrigSignatureMoniMT INFO -- #4115486024 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4115486024 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #4115486024 Events 20 20 0 0 0 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4115486024 Features 0 0 0 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_e7_etcut_L1EM3 #1959043579 -TrigSignatureMoniMT INFO -- #1959043579 Events 20 20 13 13 11 - - - - - - - - - - 11 -TrigSignatureMoniMT INFO -- #1959043579 Features 26 96 21 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1959043579 Events 20 20 13 13 11 11 - - - - - - - - - - 11 +TrigSignatureMoniMT INFO -- #1959043579 Features 26 96 21 16 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_e7_lhmedium_mu24_L1MU20 #2970063918 -TrigSignatureMoniMT INFO -- #2970063918 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2970063918 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2970063918 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2970063918 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_eb_low_L1RD2_FILLED #4118297848 -TrigSignatureMoniMT INFO -- #4118297848 Events 20 20 10 - - - - - - - - - - - - 10 -TrigSignatureMoniMT INFO -- #4118297848 Features 10 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4118297848 Events 20 20 10 - - - - - - - - - - - - - 10 +TrigSignatureMoniMT INFO -- #4118297848 Features 10 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_eb_medium_L1RD2_FILLED #1437001236 -TrigSignatureMoniMT INFO -- #1437001236 Events 20 20 7 - - - - - - - - - - - - 7 -TrigSignatureMoniMT INFO -- #1437001236 Features 7 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1437001236 Events 20 20 7 - - - - - - - - - - - - - 7 +TrigSignatureMoniMT INFO -- #1437001236 Features 7 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g120_loose_L1EM22VHI #1771279554 -TrigSignatureMoniMT INFO -- #1771279554 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1771279554 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1771279554 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1771279554 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g140_etcut_L1EM22VHI #3879926061 -TrigSignatureMoniMT INFO -- #3879926061 Events 20 20 0 0 0 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3879926061 Features 0 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3879926061 Events 20 20 0 0 0 - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3879926061 Features 0 0 0 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g140_etcut_L1EM24VHI #1045486446 -TrigSignatureMoniMT INFO -- #1045486446 Events 20 20 0 0 0 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1045486446 Features 0 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1045486446 Events 20 20 0 0 0 - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1045486446 Features 0 0 0 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g140_loose_L1EM22VHI #1776910226 -TrigSignatureMoniMT INFO -- #1776910226 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1776910226 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1776910226 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1776910226 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g20_etcut_LArPEB_L1EM15 #2706532790 -TrigSignatureMoniMT INFO -- #2706532790 Events 20 20 4 4 3 3 - - - - - - - - - 3 -TrigSignatureMoniMT INFO -- #2706532790 Features 5 5 4 4 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2706532790 Events 20 20 4 4 3 3 - - - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #2706532790 Features 5 5 4 4 - - - - - - - - - - +TrigSignatureMoniMT INFO HLT_g20_loose_L1EM15VH #2302901479 +TrigSignatureMoniMT INFO -- #2302901479 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2302901479 Features 0 0 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO HLT_g20_medium_L1EM15VH #3828320433 +TrigSignatureMoniMT INFO -- #3828320433 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3828320433 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g20_tight_L1EM15VH #270010748 -TrigSignatureMoniMT INFO -- #270010748 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #270010748 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #270010748 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #270010748 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g20_tight_icaloloose_L1EM15VH #4091638976 -TrigSignatureMoniMT INFO -- #4091638976 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4091638976 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #4091638976 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4091638976 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g20_tight_icalomedium_L1EM15VH #2032419080 -TrigSignatureMoniMT INFO -- #2032419080 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2032419080 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2032419080 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2032419080 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g20_tight_icalotight_L1EM15VH #2824200612 -TrigSignatureMoniMT INFO -- #2824200612 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2824200612 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #2824200612 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2824200612 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g22_tight_L1EM15VH #1357440659 -TrigSignatureMoniMT INFO -- #1357440659 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1357440659 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1357440659 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1357440659 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g25_etcut_L1EM20VH #1417839619 -TrigSignatureMoniMT INFO -- #1417839619 Events 20 20 3 3 2 - - - - - - - - - - 2 -TrigSignatureMoniMT INFO -- #1417839619 Features 3 3 2 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1417839619 Events 20 20 3 3 2 - - - - - - - - - - - 2 +TrigSignatureMoniMT INFO -- #1417839619 Features 3 3 2 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g25_loose_L1EM20VH #3476696431 -TrigSignatureMoniMT INFO -- #3476696431 Events 20 20 2 2 2 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3476696431 Features 2 2 5 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3476696431 Events 20 20 2 2 2 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3476696431 Features 2 2 5 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g25_medium_L1EM20VH #1519793981 -TrigSignatureMoniMT INFO -- #1519793981 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1519793981 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1519793981 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1519793981 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g25_medium_mu24_ivarmedium_L1MU20 #1007052793 -TrigSignatureMoniMT INFO -- #1007052793 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - 0 -TrigSignatureMoniMT INFO -- #1007052793 Features 0 0 0 0 0 0 0 0 0 - - - - +TrigSignatureMoniMT INFO -- #1007052793 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - - 0 +TrigSignatureMoniMT INFO -- #1007052793 Features 0 0 0 0 0 0 0 0 0 0 - - - - TrigSignatureMoniMT INFO HLT_g25_tight_L1EM20VH #3370790749 -TrigSignatureMoniMT INFO -- #3370790749 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #3370790749 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3370790749 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #3370790749 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g300_etcut_L1EM22VHI #310189774 -TrigSignatureMoniMT INFO -- #310189774 Events 20 20 0 0 0 - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #310189774 Features 0 0 0 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #310189774 Events 20 20 0 0 0 - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #310189774 Features 0 0 0 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g35_loose_mu18_L1EM24VHI #3939387897 -TrigSignatureMoniMT INFO -- #3939387897 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #3939387897 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #3939387897 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #3939387897 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_g35_medium_g25_medium_L12EM20VH #1158879722 -TrigSignatureMoniMT INFO -- #1158879722 Events 20 20 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1158879722 Features 0 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1158879722 Events 20 20 0 0 0 0 - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1158879722 Features 0 0 0 0 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g35_tight_icalotight_mu18noL1_L1EM22VHI #2789346459 -TrigSignatureMoniMT INFO -- #2789346459 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #2789346459 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2789346459 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2789346459 Features 0 0 0 0 0 0 0 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_g5_etcut_L1EM3 #471243435 -TrigSignatureMoniMT INFO -- #471243435 Events 20 20 13 13 13 - - - - - - - - - - 13 -TrigSignatureMoniMT INFO -- #471243435 Features 41 41 50 - - - - - - - - - - +TrigSignatureMoniMT INFO -- #471243435 Events 20 20 13 13 13 - - - - - - - - - - - 13 +TrigSignatureMoniMT INFO -- #471243435 Features 41 41 50 - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g5_etcut_LArPEB_L1EM3 #3486231698 -TrigSignatureMoniMT INFO -- #3486231698 Events 20 20 13 13 13 13 - - - - - - - - - 13 -TrigSignatureMoniMT INFO -- #3486231698 Features 41 41 50 36 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3486231698 Events 20 20 13 13 13 13 - - - - - - - - - - 13 +TrigSignatureMoniMT INFO -- #3486231698 Features 41 41 50 36 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g5_loose_L1EM3 #3230088967 -TrigSignatureMoniMT INFO -- #3230088967 Events 20 20 10 10 10 2 - - - - - - - - - 2 -TrigSignatureMoniMT INFO -- #3230088967 Features 15 15 29 2 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3230088967 Events 20 20 10 10 10 2 - - - - - - - - - - 2 +TrigSignatureMoniMT INFO -- #3230088967 Features 15 15 29 2 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g5_medium_L1EM3 #385248610 -TrigSignatureMoniMT INFO -- #385248610 Events 20 20 9 9 9 2 - - - - - - - - - 2 -TrigSignatureMoniMT INFO -- #385248610 Features 13 13 29 2 - - - - - - - - - +TrigSignatureMoniMT INFO -- #385248610 Events 20 20 9 9 9 2 - - - - - - - - - - 2 +TrigSignatureMoniMT INFO -- #385248610 Features 13 13 29 2 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_g5_tight_L1EM3 #3280865118 -TrigSignatureMoniMT INFO -- #3280865118 Events 20 20 9 9 9 1 - - - - - - - - - 1 -TrigSignatureMoniMT INFO -- #3280865118 Features 13 13 29 1 - - - - - - - - - +TrigSignatureMoniMT INFO -- #3280865118 Events 20 20 9 9 9 1 - - - - - - - - - - 1 +TrigSignatureMoniMT INFO -- #3280865118 Features 13 13 29 1 - - - - - - - - - - TrigSignatureMoniMT INFO HLT_j0_aggSEP1000htSEP30etSEP0eta320_L1J20 #2436664735 -TrigSignatureMoniMT INFO -- #2436664735 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2436664735 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2436664735 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2436664735 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j0_aggSEP500htSEP30etSEP0eta320_L1J20 #4013575747 -TrigSignatureMoniMT INFO -- #4013575747 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #4013575747 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #4013575747 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #4013575747 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j0_perf_L1J12_EMPTY #1341875780 -TrigSignatureMoniMT INFO -- #1341875780 Events 20 20 0 0 0 0 0 0 0 0 0 8 - - - 8 -TrigSignatureMoniMT INFO -- #1341875780 Features 0 0 0 0 0 0 0 0 0 117 - - - +TrigSignatureMoniMT INFO -- #1341875780 Events 20 20 0 0 0 0 0 0 0 0 0 0 8 - - - 8 +TrigSignatureMoniMT INFO -- #1341875780 Features 0 0 0 0 0 0 0 0 0 0 117 - - - TrigSignatureMoniMT INFO HLT_j0_vbenfSEP30etSEP34mass35SEP50fbet_L1J20 #4034799151 -TrigSignatureMoniMT INFO -- #4034799151 Events 20 20 0 0 0 0 0 0 0 0 0 2 - - - 2 -TrigSignatureMoniMT INFO -- #4034799151 Features 0 0 0 0 0 0 0 0 0 24 - - - +TrigSignatureMoniMT INFO -- #4034799151 Events 20 20 0 0 0 0 0 0 0 0 0 0 2 - - - 2 +TrigSignatureMoniMT INFO -- #4034799151 Features 0 0 0 0 0 0 0 0 0 0 24 - - - TrigSignatureMoniMT INFO HLT_j225_subjesgscIS_ftf_bmv2c1040_split_L1J100 #219711753 -TrigSignatureMoniMT INFO -- #219711753 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #219711753 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #219711753 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #219711753 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j260_320eta490_L1J20 #3084792704 -TrigSignatureMoniMT INFO -- #3084792704 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3084792704 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3084792704 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3084792704 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j260_320eta490_L1J75_31ETA49 #3769257182 -TrigSignatureMoniMT INFO -- #3769257182 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3769257182 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3769257182 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3769257182 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j275_pf_subjesgscIS_ftf_bdl1r60_split_L1J100 #2912155644 -TrigSignatureMoniMT INFO -- #2912155644 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2912155644 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2912155644 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2912155644 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j275_pf_subjesgscIS_ftf_boffperf_split_L1J100 #9543810 -TrigSignatureMoniMT INFO -- #9543810 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #9543810 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #9543810 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #9543810 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_bdl1r60_split_L1J100 #2807668578 -TrigSignatureMoniMT INFO -- #2807668578 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2807668578 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2807668578 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2807668578 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_bmv2c1060_split_L1J100 #710546402 -TrigSignatureMoniMT INFO -- #710546402 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #710546402 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #710546402 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #710546402 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j275_subjesgscIS_ftf_boffperf_split_L1J100 #540369970 -TrigSignatureMoniMT INFO -- #540369970 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #540369970 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #540369970 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #540369970 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j300_pf_subjesgscIS_ftf_bdl1r70_split_L1J100 #2576796343 -TrigSignatureMoniMT INFO -- #2576796343 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2576796343 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2576796343 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2576796343 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j300_subjesgscIS_ftf_bdl1r70_split_L1J100 #2952175162 -TrigSignatureMoniMT INFO -- #2952175162 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2952175162 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2952175162 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2952175162 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j300_subjesgscIS_ftf_bmv2c1070_split_L1J100 #2074989613 -TrigSignatureMoniMT INFO -- #2074989613 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #2074989613 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #2074989613 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #2074989613 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j360_pf_subjesgscIS_ftf_bdl1r77_split_L1J100 #3049708671 -TrigSignatureMoniMT INFO -- #3049708671 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3049708671 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3049708671 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3049708671 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j360_subjesgscIS_ftf_bdl1r77_split_L1J100 #1563453863 -TrigSignatureMoniMT INFO -- #1563453863 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1563453863 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1563453863 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1563453863 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j360_subjesgscIS_ftf_bmv2c1077_split_L1J100 #4176355792 -TrigSignatureMoniMT INFO -- #4176355792 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - 0 -TrigSignatureMoniMT INFO -- #4176355792 Features 0 0 0 0 0 0 0 0 0 0 0 - - +TrigSignatureMoniMT INFO -- #4176355792 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 0 - - 0 +TrigSignatureMoniMT INFO -- #4176355792 Features 0 0 0 0 0 0 0 0 0 0 0 0 - - TrigSignatureMoniMT INFO HLT_j420_L1J100 #2659902019 -TrigSignatureMoniMT INFO -- #2659902019 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2659902019 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2659902019 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2659902019 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j420_pf_subresjesgscIS_ftf_L1J100 #3936932891 -TrigSignatureMoniMT INFO -- #3936932891 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3936932891 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3936932891 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3936932891 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j420_subresjesgscIS_ftf_L1J100 #2477128298 -TrigSignatureMoniMT INFO -- #2477128298 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2477128298 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2477128298 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2477128298 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j45_L1J15 #1364976160 -TrigSignatureMoniMT INFO -- #1364976160 Events 20 20 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #1364976160 Features 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #1364976160 Events 20 20 0 0 0 0 0 0 0 0 0 0 6 - - - 6 +TrigSignatureMoniMT INFO -- #1364976160 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_j45_csskpf_nojcalib_ftf_L1J20 #2528888897 -TrigSignatureMoniMT INFO -- #2528888897 Events 20 20 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #2528888897 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #2528888897 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #2528888897 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_j45_cssktc_nojcalib_L1J20 #3295122398 -TrigSignatureMoniMT INFO -- #3295122398 Events 20 20 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #3295122398 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #3295122398 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #3295122398 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_j45_ftf_L1J15 #868405538 -TrigSignatureMoniMT INFO -- #868405538 Events 20 20 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #868405538 Features 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #868405538 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 - - - 7 +TrigSignatureMoniMT INFO -- #868405538 Features 0 0 0 0 0 0 0 0 0 0 7 - - - TrigSignatureMoniMT INFO HLT_j45_nojcalib_L1J20 #2042444294 -TrigSignatureMoniMT INFO -- #2042444294 Events 20 20 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #2042444294 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #2042444294 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #2042444294 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_j45_pf_ftf_L1J20 #3679554988 -TrigSignatureMoniMT INFO -- #3679554988 Events 20 20 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #3679554988 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #3679554988 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #3679554988 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_j45_pf_nojcalib_ftf_L1J20 #4202219904 -TrigSignatureMoniMT INFO -- #4202219904 Events 20 20 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #4202219904 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #4202219904 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #4202219904 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_L1J20 #2187173741 -TrigSignatureMoniMT INFO -- #2187173741 Events 20 20 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #2187173741 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #2187173741 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #2187173741 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_bdl1r70_split_L1J20 #4239752847 -TrigSignatureMoniMT INFO -- #4239752847 Events 20 20 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #4239752847 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #4239752847 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #4239752847 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_j45_pf_subjesgscIS_ftf_boffperf_split_L1J20 #2546763674 -TrigSignatureMoniMT INFO -- #2546763674 Events 20 20 0 0 0 0 0 0 0 0 0 5 5 - - 5 -TrigSignatureMoniMT INFO -- #2546763674 Features 0 0 0 0 0 0 0 0 0 5 5 - - +TrigSignatureMoniMT INFO -- #2546763674 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 - - 5 +TrigSignatureMoniMT INFO -- #2546763674 Features 0 0 0 0 0 0 0 0 0 0 5 5 - - TrigSignatureMoniMT INFO HLT_j45_sktc_nojcalib_L1J20 #1542468090 -TrigSignatureMoniMT INFO -- #1542468090 Events 20 20 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #1542468090 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #1542468090 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #1542468090 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_011jvt_L1J15 #266323220 -TrigSignatureMoniMT INFO -- #266323220 Events 20 20 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #266323220 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #266323220 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #266323220 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_015jvt_L1J15 #3102941497 -TrigSignatureMoniMT INFO -- #3102941497 Events 20 20 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #3102941497 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #3102941497 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #3102941497 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_059jvt_L1J15 #2237035634 -TrigSignatureMoniMT INFO -- #2237035634 Events 20 20 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #2237035634 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #2237035634 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #2237035634 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_L1J15 #1960278431 -TrigSignatureMoniMT INFO -- #1960278431 Events 20 20 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #1960278431 Features 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #1960278431 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 - - - 7 +TrigSignatureMoniMT INFO -- #1960278431 Features 0 0 0 0 0 0 0 0 0 0 7 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_bdl1r70_split_L1J20 #2947439578 -TrigSignatureMoniMT INFO -- #2947439578 Events 20 20 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #2947439578 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #2947439578 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #2947439578 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_bmv2c1070_split_L1J20 #980453000 -TrigSignatureMoniMT INFO -- #980453000 Events 20 20 0 0 0 0 0 0 0 0 0 5 1 - - 1 -TrigSignatureMoniMT INFO -- #980453000 Features 0 0 0 0 0 0 0 0 0 5 1 - - +TrigSignatureMoniMT INFO -- #980453000 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 1 - - 1 +TrigSignatureMoniMT INFO -- #980453000 Features 0 0 0 0 0 0 0 0 0 0 5 1 - - TrigSignatureMoniMT INFO HLT_j45_subjesgscIS_ftf_boffperf_split_L1J20 #3374916154 -TrigSignatureMoniMT INFO -- #3374916154 Events 20 20 0 0 0 0 0 0 0 0 0 5 5 - - 5 -TrigSignatureMoniMT INFO -- #3374916154 Features 0 0 0 0 0 0 0 0 0 5 5 - - +TrigSignatureMoniMT INFO -- #3374916154 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 5 - - 5 +TrigSignatureMoniMT INFO -- #3374916154 Features 0 0 0 0 0 0 0 0 0 0 5 5 - - TrigSignatureMoniMT INFO HLT_j45_subresjesgscIS_ftf_L1J15 #1213239619 -TrigSignatureMoniMT INFO -- #1213239619 Events 20 20 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #1213239619 Features 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #1213239619 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 - - - 7 +TrigSignatureMoniMT INFO -- #1213239619 Features 0 0 0 0 0 0 0 0 0 0 7 - - - TrigSignatureMoniMT INFO HLT_j460_a10_lcw_subjes_L1J100 #3327656707 -TrigSignatureMoniMT INFO -- #3327656707 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3327656707 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3327656707 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3327656707 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10_lcw_subjes_L1J20 #215408633 -TrigSignatureMoniMT INFO -- #215408633 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #215408633 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #215408633 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #215408633 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10r_L1J100 #1151767619 -TrigSignatureMoniMT INFO -- #1151767619 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1151767619 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1151767619 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1151767619 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10r_L1J20 #3875082669 -TrigSignatureMoniMT INFO -- #3875082669 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3875082669 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3875082669 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3875082669 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_jes_ftf_35smcINF_L1J100 #3781128663 -TrigSignatureMoniMT INFO -- #3781128663 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3781128663 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3781128663 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3781128663 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_jes_ftf_L1J100 #1509950051 -TrigSignatureMoniMT INFO -- #1509950051 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1509950051 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1509950051 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1509950051 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_nojcalib_ftf_35smcINF_L1J100 #249842682 -TrigSignatureMoniMT INFO -- #249842682 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #249842682 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #249842682 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #249842682 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_csskpf_nojcalib_ftf_L1J100 #3452032818 -TrigSignatureMoniMT INFO -- #3452032818 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3452032818 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3452032818 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3452032818 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_lcw_nojcalib_L1J100 #3093997295 -TrigSignatureMoniMT INFO -- #3093997295 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3093997295 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3093997295 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3093997295 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10sd_pf_nojcalib_ftf_L1J100 #2138269254 -TrigSignatureMoniMT INFO -- #2138269254 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2138269254 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2138269254 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2138269254 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10t_lcw_jes_30smcINF_L1J100 #2296827117 -TrigSignatureMoniMT INFO -- #2296827117 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2296827117 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2296827117 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2296827117 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10t_lcw_jes_L1J100 #436385969 -TrigSignatureMoniMT INFO -- #436385969 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #436385969 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #436385969 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #436385969 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10t_lcw_nojcalib_35smcINF_L1J100 #3224465417 -TrigSignatureMoniMT INFO -- #3224465417 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3224465417 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3224465417 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3224465417 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j460_a10t_lcw_nojcalib_L1J100 #1966129844 -TrigSignatureMoniMT INFO -- #1966129844 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1966129844 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1966129844 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1966129844 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j80_0eta240_2j60_320eta490_j0_dijetSEP80j1etSEP0j1eta240SEP80j2etSEP0j2eta240SEP700djmass_L1J20 #3634067472 -TrigSignatureMoniMT INFO -- #3634067472 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3634067472 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3634067472 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3634067472 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j80_L1J15 #2440872308 -TrigSignatureMoniMT INFO -- #2440872308 Events 20 20 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #2440872308 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #2440872308 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #2440872308 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_j80_j60_L1J15 #582699527 -TrigSignatureMoniMT INFO -- #582699527 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #582699527 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #582699527 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #582699527 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_j85_L1J20 #510475538 -TrigSignatureMoniMT INFO -- #510475538 Events 20 20 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #510475538 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #510475538 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #510475538 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_j85_ftf_L1J20 #877042532 -TrigSignatureMoniMT INFO -- #877042532 Events 20 20 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #877042532 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #877042532 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #877042532 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_j85_pf_ftf_L1J20 #789444389 -TrigSignatureMoniMT INFO -- #789444389 Events 20 20 0 0 0 0 0 0 0 0 0 2 - - - 2 -TrigSignatureMoniMT INFO -- #789444389 Features 0 0 0 0 0 0 0 0 0 2 - - - +TrigSignatureMoniMT INFO -- #789444389 Events 20 20 0 0 0 0 0 0 0 0 0 0 2 - - - 2 +TrigSignatureMoniMT INFO -- #789444389 Features 0 0 0 0 0 0 0 0 0 0 2 - - - TrigSignatureMoniMT INFO HLT_mb_sptrk_L1RD0_FILLED #4097312640 -TrigSignatureMoniMT INFO -- #4097312640 Events 20 20 20 19 - - - - - - - - - - - 19 -TrigSignatureMoniMT INFO -- #4097312640 Features 20 19 - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4097312640 Events 20 20 20 19 - - - - - - - - - - - - 19 +TrigSignatureMoniMT INFO -- #4097312640 Features 20 19 - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_mu0_muoncalib_L1MU20 #997163309 -TrigSignatureMoniMT INFO -- #997163309 Events 20 20 0 0 0 0 0 - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #997163309 Features 0 0 0 0 0 - - - - - - - - +TrigSignatureMoniMT INFO -- #997163309 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #997163309 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_mu0_muoncalib_L1MU4_EMPTY #782182242 -TrigSignatureMoniMT INFO -- #782182242 Events 20 20 0 0 0 0 0 - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #782182242 Features 0 0 0 0 0 - - - - - - - - +TrigSignatureMoniMT INFO -- #782182242 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #782182242 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_mu10_L1MU10 #209090273 -TrigSignatureMoniMT INFO -- #209090273 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #209090273 Features 0 0 0 0 1 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #209090273 Events 20 20 0 0 0 0 0 2 2 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #209090273 Features 0 0 0 0 0 2 2 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu10_ivarmedium_mu10_10invm70_L12MU10 #2386882549 -TrigSignatureMoniMT INFO -- #2386882549 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - 0 -TrigSignatureMoniMT INFO -- #2386882549 Features 0 0 0 0 0 0 0 0 0 - - - - +TrigSignatureMoniMT INFO -- #2386882549 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - - 0 +TrigSignatureMoniMT INFO -- #2386882549 Features 0 0 0 0 0 0 0 0 0 0 - - - - TrigSignatureMoniMT INFO HLT_mu10_lateMu_L1LATE-MU10_XE50 #1787564306 -TrigSignatureMoniMT INFO -- #1787564306 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1787564306 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1787564306 Events 20 20 0 0 0 0 0 0 0 - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1787564306 Features 0 0 0 0 0 0 0 - - - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bBmumu_L1MU11_2MU6 #947854469 -TrigSignatureMoniMT INFO -- #947854469 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #947854469 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #947854469 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #947854469 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bDimu2700_L1MU11_2MU6 #4293593869 -TrigSignatureMoniMT INFO -- #4293593869 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #4293593869 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #4293593869 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #4293593869 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bDimu_L1MU11_2MU6 #2381335347 -TrigSignatureMoniMT INFO -- #2381335347 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2381335347 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2381335347 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2381335347 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bJpsimumu_L1MU11_2MU6 #2504965945 -TrigSignatureMoniMT INFO -- #2504965945 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2504965945 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2504965945 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2504965945 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bPhi_L1MU11_2MU6 #2079901197 -TrigSignatureMoniMT INFO -- #2079901197 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2079901197 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2079901197 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2079901197 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bTau_L1MU11_2MU6 #1292401093 -TrigSignatureMoniMT INFO -- #1292401093 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1292401093 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1292401093 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1292401093 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu11_mu6_bUpsimumu_L1MU11_2MU6 #1171632195 -TrigSignatureMoniMT INFO -- #1171632195 Events 20 20 0 0 0 0 0 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1171632195 Features 0 0 0 0 0 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1171632195 Events 20 20 0 0 0 0 0 0 0 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1171632195 Features 0 0 0 0 0 0 0 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu14_L1MU10 #1696906927 -TrigSignatureMoniMT INFO -- #1696906927 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1696906927 Features 0 0 0 0 1 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1696906927 Events 20 20 0 0 0 0 0 2 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1696906927 Features 0 0 0 0 0 2 1 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu20_2mu4noL1_L1MU20 #1029128679 -TrigSignatureMoniMT INFO -- #1029128679 Events 20 20 0 0 0 0 1 1 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #1029128679 Features 0 0 0 0 1 1 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #1029128679 Events 20 20 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #1029128679 Features 0 0 0 0 0 1 1 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_mu20_ivarmedium_mu4noL1_10invm70_L1MU20 #2942530653 -TrigSignatureMoniMT INFO -- #2942530653 Events 20 20 0 0 0 0 1 1 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #2942530653 Features 0 0 0 0 1 1 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2942530653 Events 20 20 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2942530653 Features 0 0 0 0 0 1 1 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_mu20_ivarmedium_mu8noL1_L1MU20 #3249386942 -TrigSignatureMoniMT INFO -- #3249386942 Events 20 20 0 0 0 0 1 1 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #3249386942 Features 0 0 0 0 1 1 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #3249386942 Events 20 20 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #3249386942 Features 0 0 0 0 0 1 1 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_mu22_2mu4noL1_L1MU20 #3427670100 -TrigSignatureMoniMT INFO -- #3427670100 Events 20 20 0 0 0 0 1 1 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #3427670100 Features 0 0 0 0 1 1 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #3427670100 Events 20 20 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #3427670100 Features 0 0 0 0 0 1 1 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_mu22_mu8noL1_L1MU20 #3165652409 -TrigSignatureMoniMT INFO -- #3165652409 Events 20 20 0 0 0 0 1 1 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #3165652409 Features 0 0 0 0 1 1 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #3165652409 Events 20 20 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #3165652409 Features 0 0 0 0 0 1 1 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_mu24_2mu4noL1_L1MU20 #3233544630 -TrigSignatureMoniMT INFO -- #3233544630 Events 20 20 0 0 0 0 1 1 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #3233544630 Features 0 0 0 0 1 1 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #3233544630 Events 20 20 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #3233544630 Features 0 0 0 0 0 1 1 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_mu24_L1MU20 #417425162 -TrigSignatureMoniMT INFO -- #417425162 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #417425162 Features 0 0 0 0 1 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #417425162 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #417425162 Features 0 0 0 0 0 1 1 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu24_idperf_L1MU20 #677658909 -TrigSignatureMoniMT INFO -- #677658909 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #677658909 Features 0 0 0 0 1 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #677658909 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #677658909 Features 0 0 0 0 0 1 1 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu24_ivarmedium_L1MU20 #737407430 -TrigSignatureMoniMT INFO -- #737407430 Events 20 20 0 0 0 0 1 1 0 0 0 - - - - 0 -TrigSignatureMoniMT INFO -- #737407430 Features 0 0 0 0 1 1 0 0 0 - - - - +TrigSignatureMoniMT INFO -- #737407430 Events 20 20 0 0 0 0 0 1 1 0 0 0 - - - - 0 +TrigSignatureMoniMT INFO -- #737407430 Features 0 0 0 0 0 1 1 0 0 0 - - - - TrigSignatureMoniMT INFO HLT_mu24_mu10noL1_L1MU20 #2563354236 -TrigSignatureMoniMT INFO -- #2563354236 Events 20 20 0 0 0 0 1 1 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #2563354236 Features 0 0 0 0 1 1 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2563354236 Events 20 20 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2563354236 Features 0 0 0 0 0 1 1 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_mu26_L1MU20 #311138376 -TrigSignatureMoniMT INFO -- #311138376 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #311138376 Features 0 0 0 0 1 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #311138376 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #311138376 Features 0 0 0 0 0 1 1 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu26_ivarmedium_L1MU20 #3411723090 -TrigSignatureMoniMT INFO -- #3411723090 Events 20 20 0 0 0 0 1 1 0 0 0 - - - - 0 -TrigSignatureMoniMT INFO -- #3411723090 Features 0 0 0 0 1 1 0 0 0 - - - - +TrigSignatureMoniMT INFO -- #3411723090 Events 20 20 0 0 0 0 0 1 1 0 0 0 - - - - 0 +TrigSignatureMoniMT INFO -- #3411723090 Features 0 0 0 0 0 1 1 0 0 0 - - - - TrigSignatureMoniMT INFO HLT_mu26_mu10noL1_L1MU20 #2318302287 -TrigSignatureMoniMT INFO -- #2318302287 Events 20 20 0 0 0 0 1 1 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #2318302287 Features 0 0 0 0 1 1 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2318302287 Events 20 20 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2318302287 Features 0 0 0 0 0 1 1 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_mu26_mu8noL1_L1MU20 #2233067926 -TrigSignatureMoniMT INFO -- #2233067926 Events 20 20 0 0 0 0 1 1 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #2233067926 Features 0 0 0 0 1 1 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2233067926 Events 20 20 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #2233067926 Features 0 0 0 0 0 1 1 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_mu28_ivarmedium_L1MU20 #1963262787 -TrigSignatureMoniMT INFO -- #1963262787 Events 20 20 0 0 0 0 1 1 0 0 0 - - - - 0 -TrigSignatureMoniMT INFO -- #1963262787 Features 0 0 0 0 1 1 0 0 0 - - - - +TrigSignatureMoniMT INFO -- #1963262787 Events 20 20 0 0 0 0 0 1 1 0 0 0 - - - - 0 +TrigSignatureMoniMT INFO -- #1963262787 Features 0 0 0 0 0 1 1 0 0 0 - - - - TrigSignatureMoniMT INFO HLT_mu28_mu8noL1_L1MU20 #86648125 -TrigSignatureMoniMT INFO -- #86648125 Events 20 20 0 0 0 0 1 1 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #86648125 Features 0 0 0 0 1 1 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #86648125 Events 20 20 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #86648125 Features 0 0 0 0 0 1 1 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_mu35_ivarmedium_L1MU20 #597064890 -TrigSignatureMoniMT INFO -- #597064890 Events 20 20 0 0 0 0 1 1 0 0 0 - - - - 0 -TrigSignatureMoniMT INFO -- #597064890 Features 0 0 0 0 1 1 0 0 0 - - - - +TrigSignatureMoniMT INFO -- #597064890 Events 20 20 0 0 0 0 0 1 1 0 0 0 - - - - 0 +TrigSignatureMoniMT INFO -- #597064890 Features 0 0 0 0 0 1 1 0 0 0 - - - - TrigSignatureMoniMT INFO HLT_mu4_l2io_L1MU4 #1048276860 -TrigSignatureMoniMT INFO -- #1048276860 Events 20 20 0 0 0 0 2 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1048276860 Features 0 0 0 0 3 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1048276860 Events 20 20 0 0 0 0 0 4 3 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1048276860 Features 0 0 0 0 0 5 4 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu50_L1MU20 #3657158931 -TrigSignatureMoniMT INFO -- #3657158931 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #3657158931 Features 0 0 0 0 1 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #3657158931 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #3657158931 Features 0 0 0 0 0 1 1 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu50_RPCPEBSecondaryReadout_L1MU20 #827327262 -TrigSignatureMoniMT INFO -- #827327262 Events 20 20 0 0 0 0 1 1 0 0 0 - - - - 0 -TrigSignatureMoniMT INFO -- #827327262 Features 0 0 0 0 1 1 0 0 0 - - - - +TrigSignatureMoniMT INFO -- #827327262 Events 20 20 0 0 0 0 0 1 1 0 0 0 - - - - 0 +TrigSignatureMoniMT INFO -- #827327262 Features 0 0 0 0 0 1 1 0 0 0 - - - - TrigSignatureMoniMT INFO HLT_mu60_0eta105_msonly_L1MU20 #1642591450 -TrigSignatureMoniMT INFO -- #1642591450 Events 20 20 0 0 0 0 0 0 0 - - - - - - 0 -TrigSignatureMoniMT INFO -- #1642591450 Features 0 0 0 0 0 0 0 - - - - - - +TrigSignatureMoniMT INFO -- #1642591450 Events 20 20 0 0 0 0 0 0 0 0 - - - - - - 0 +TrigSignatureMoniMT INFO -- #1642591450 Features 0 0 0 0 0 0 0 0 - - - - - - TrigSignatureMoniMT INFO HLT_mu60_L1MU20 #2871837722 -TrigSignatureMoniMT INFO -- #2871837722 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2871837722 Features 0 0 0 0 1 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2871837722 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2871837722 Features 0 0 0 0 0 1 1 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu6_L1MU6 #2560542253 -TrigSignatureMoniMT INFO -- #2560542253 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #2560542253 Features 0 0 0 0 1 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #2560542253 Events 20 20 0 0 0 0 0 2 2 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #2560542253 Features 0 0 0 0 0 2 2 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu6_idperf_L1MU6 #934918532 -TrigSignatureMoniMT INFO -- #934918532 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #934918532 Features 0 0 0 0 1 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #934918532 Events 20 20 0 0 0 0 0 2 2 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #934918532 Features 0 0 0 0 0 2 2 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu6_ivarmedium_L1MU6 #1012713062 -TrigSignatureMoniMT INFO -- #1012713062 Events 20 20 0 0 0 0 1 1 0 0 0 - - - - 0 -TrigSignatureMoniMT INFO -- #1012713062 Features 0 0 0 0 1 1 0 0 0 - - - - +TrigSignatureMoniMT INFO -- #1012713062 Events 20 20 0 0 0 0 0 2 2 0 0 0 - - - - 0 +TrigSignatureMoniMT INFO -- #1012713062 Features 0 0 0 0 0 2 2 0 0 0 - - - - TrigSignatureMoniMT INFO HLT_mu6_j45_nojcalib_L1J20 #2114129685 -TrigSignatureMoniMT INFO -- #2114129685 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2114129685 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2114129685 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2114129685 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_mu6_msonly_L1MU6 #3895421032 -TrigSignatureMoniMT INFO -- #3895421032 Events 20 20 0 0 0 0 1 0 0 - - - - - - 0 -TrigSignatureMoniMT INFO -- #3895421032 Features 0 0 0 0 1 0 0 - - - - - - +TrigSignatureMoniMT INFO -- #3895421032 Events 20 20 0 0 0 0 0 2 0 0 - - - - - - 0 +TrigSignatureMoniMT INFO -- #3895421032 Features 0 0 0 0 0 2 0 0 - - - - - - TrigSignatureMoniMT INFO HLT_mu6_mu4_L12MU4 #1713982776 -TrigSignatureMoniMT INFO -- #1713982776 Events 20 20 0 0 0 0 1 0 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1713982776 Features 0 0 0 0 2 0 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1713982776 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1713982776 Features 0 0 0 0 0 2 2 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu6_mu6noL1_L1MU6 #451489897 -TrigSignatureMoniMT INFO -- #451489897 Events 20 20 0 0 0 0 1 1 0 0 0 0 0 0 0 0 -TrigSignatureMoniMT INFO -- #451489897 Features 0 0 0 0 1 1 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #451489897 Events 20 20 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 +TrigSignatureMoniMT INFO -- #451489897 Features 0 0 0 0 0 2 2 0 0 0 0 0 0 0 TrigSignatureMoniMT INFO HLT_mu6_xe30_mht_L1XE10 #3192713675 -TrigSignatureMoniMT INFO -- #3192713675 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3192713675 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3192713675 Events 20 20 0 0 0 0 0 2 2 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3192713675 Features 0 0 0 0 0 2 2 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_mu80_L1MU20 #387900377 -TrigSignatureMoniMT INFO -- #387900377 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #387900377 Features 0 0 0 0 1 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #387900377 Events 20 20 0 0 0 0 0 1 1 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #387900377 Features 0 0 0 0 0 1 1 0 0 - - - - - TrigSignatureMoniMT INFO HLT_mu80_msonly_3layersEC_L1MU20 #761101109 -TrigSignatureMoniMT INFO -- #761101109 Events 20 20 0 0 0 0 1 0 0 - - - - - - 0 -TrigSignatureMoniMT INFO -- #761101109 Features 0 0 0 0 1 0 0 - - - - - - +TrigSignatureMoniMT INFO -- #761101109 Events 20 20 0 0 0 0 0 1 0 0 - - - - - - 0 +TrigSignatureMoniMT INFO -- #761101109 Features 0 0 0 0 0 1 0 0 - - - - - - TrigSignatureMoniMT INFO HLT_mu8_L1MU6 #1467711434 -TrigSignatureMoniMT INFO -- #1467711434 Events 20 20 0 0 0 0 1 1 0 0 - - - - - 0 -TrigSignatureMoniMT INFO -- #1467711434 Features 0 0 0 0 1 1 0 0 - - - - - +TrigSignatureMoniMT INFO -- #1467711434 Events 20 20 0 0 0 0 0 2 2 0 0 - - - - - 0 +TrigSignatureMoniMT INFO -- #1467711434 Features 0 0 0 0 0 2 2 0 0 - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1All #2979253164 -TrigSignatureMoniMT INFO -- #2979253164 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2979253164 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2979253164 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2979253164 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1Calo #355689512 -TrigSignatureMoniMT INFO -- #355689512 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #355689512 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #355689512 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #355689512 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1Calo_EMPTY #3717801557 -TrigSignatureMoniMT INFO -- #3717801557 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3717801557 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3717801557 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3717801557 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM10VH #314199913 -TrigSignatureMoniMT INFO -- #314199913 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #314199913 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #314199913 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #314199913 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM12 #3885916609 -TrigSignatureMoniMT INFO -- #3885916609 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3885916609 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3885916609 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3885916609 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM15 #480733925 -TrigSignatureMoniMT INFO -- #480733925 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #480733925 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #480733925 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #480733925 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM15VH #2374865899 -TrigSignatureMoniMT INFO -- #2374865899 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2374865899 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2374865899 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2374865899 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM20VH #3719542824 -TrigSignatureMoniMT INFO -- #3719542824 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3719542824 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3719542824 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3719542824 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM22VHI #1723589313 -TrigSignatureMoniMT INFO -- #1723589313 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1723589313 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1723589313 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1723589313 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM3 #4169267792 -TrigSignatureMoniMT INFO -- #4169267792 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #4169267792 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4169267792 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #4169267792 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM7 #3226970354 -TrigSignatureMoniMT INFO -- #3226970354 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3226970354 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3226970354 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3226970354 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1EM8VH #4065285611 -TrigSignatureMoniMT INFO -- #4065285611 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #4065285611 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4065285611 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #4065285611 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J100 #1026959128 -TrigSignatureMoniMT INFO -- #1026959128 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1026959128 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1026959128 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1026959128 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J15 #1976430774 -TrigSignatureMoniMT INFO -- #1976430774 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1976430774 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1976430774 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1976430774 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J20 #2241112369 -TrigSignatureMoniMT INFO -- #2241112369 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2241112369 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2241112369 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2241112369 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J25 #39428635 -TrigSignatureMoniMT INFO -- #39428635 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #39428635 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #39428635 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #39428635 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J30 #3523994129 -TrigSignatureMoniMT INFO -- #3523994129 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3523994129 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3523994129 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3523994129 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J40 #1497591431 -TrigSignatureMoniMT INFO -- #1497591431 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1497591431 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1497591431 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1497591431 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J400 #2494874701 -TrigSignatureMoniMT INFO -- #2494874701 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2494874701 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2494874701 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2494874701 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J50 #3346352675 -TrigSignatureMoniMT INFO -- #3346352675 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3346352675 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3346352675 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3346352675 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J75 #1651897827 -TrigSignatureMoniMT INFO -- #1651897827 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1651897827 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1651897827 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1651897827 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1J85 #166231461 -TrigSignatureMoniMT INFO -- #166231461 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #166231461 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #166231461 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #166231461 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1MBTS_1_1_EMPTY #3063661803 -TrigSignatureMoniMT INFO -- #3063661803 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3063661803 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3063661803 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3063661803 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1MBTS_1_EMPTY #4174355886 -TrigSignatureMoniMT INFO -- #4174355886 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #4174355886 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4174355886 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #4174355886 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1MBTS_2_EMPTY #2028932677 -TrigSignatureMoniMT INFO -- #2028932677 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2028932677 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2028932677 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2028932677 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1RD0_EMPTY #914660695 -TrigSignatureMoniMT INFO -- #914660695 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #914660695 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #914660695 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #914660695 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1RD0_FILLED #211699639 -TrigSignatureMoniMT INFO -- #211699639 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #211699639 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #211699639 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #211699639 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1Standby #420861540 -TrigSignatureMoniMT INFO -- #420861540 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #420861540 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #420861540 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #420861540 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU12 #4248050338 -TrigSignatureMoniMT INFO -- #4248050338 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #4248050338 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4248050338 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #4248050338 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU12IM #357557968 -TrigSignatureMoniMT INFO -- #357557968 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #357557968 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #357557968 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #357557968 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU20IM #1931583332 -TrigSignatureMoniMT INFO -- #1931583332 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1931583332 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1931583332 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1931583332 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU30 #1944789678 -TrigSignatureMoniMT INFO -- #1944789678 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1944789678 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1944789678 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1944789678 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU40 #1394621652 -TrigSignatureMoniMT INFO -- #1394621652 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1394621652 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1394621652 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1394621652 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1TAU60 #3332424451 -TrigSignatureMoniMT INFO -- #3332424451 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3332424451 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3332424451 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3332424451 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE10 #1583053368 -TrigSignatureMoniMT INFO -- #1583053368 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1583053368 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1583053368 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1583053368 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE30 #2047368922 -TrigSignatureMoniMT INFO -- #2047368922 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2047368922 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2047368922 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2047368922 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE300 #1315853555 -TrigSignatureMoniMT INFO -- #1315853555 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1315853555 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1315853555 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1315853555 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE35 #2313039014 -TrigSignatureMoniMT INFO -- #2313039014 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2313039014 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2313039014 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2313039014 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE40 #4293469116 -TrigSignatureMoniMT INFO -- #4293469116 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #4293469116 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4293469116 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #4293469116 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE45 #2365048177 -TrigSignatureMoniMT INFO -- #2365048177 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2365048177 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2365048177 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2365048177 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE50 #1168752081 -TrigSignatureMoniMT INFO -- #1168752081 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1168752081 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1168752081 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1168752081 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE55 #268928384 -TrigSignatureMoniMT INFO -- #268928384 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #268928384 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #268928384 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #268928384 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE60 #4154240531 -TrigSignatureMoniMT INFO -- #4154240531 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #4154240531 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4154240531 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #4154240531 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE70 #3765216228 -TrigSignatureMoniMT INFO -- #3765216228 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3765216228 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3765216228 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3765216228 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_L1XE80 #2742079961 -TrigSignatureMoniMT INFO -- #2742079961 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2742079961 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2742079961 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2742079961 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_bkg_L1Bkg #2032528907 -TrigSignatureMoniMT INFO -- #2032528907 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2032528907 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2032528907 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2032528907 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1EM3_EMPTY #2458124284 -TrigSignatureMoniMT INFO -- #2458124284 Events 20 20 - - - - - - - - - - - - - 15 -TrigSignatureMoniMT INFO -- #2458124284 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2458124284 Events 20 20 - - - - - - - - - - - - - - 15 +TrigSignatureMoniMT INFO -- #2458124284 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1EM7_EMPTY #299938202 -TrigSignatureMoniMT INFO -- #299938202 Events 20 20 - - - - - - - - - - - - - 9 -TrigSignatureMoniMT INFO -- #299938202 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #299938202 Events 20 20 - - - - - - - - - - - - - - 9 +TrigSignatureMoniMT INFO -- #299938202 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1J12_EMPTY #3144024902 -TrigSignatureMoniMT INFO -- #3144024902 Events 20 20 - - - - - - - - - - - - - 8 -TrigSignatureMoniMT INFO -- #3144024902 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3144024902 Events 20 20 - - - - - - - - - - - - - - 8 +TrigSignatureMoniMT INFO -- #3144024902 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1J12_FIRSTEMPTY #3840098930 -TrigSignatureMoniMT INFO -- #3840098930 Events 20 20 - - - - - - - - - - - - - 8 -TrigSignatureMoniMT INFO -- #3840098930 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3840098930 Events 20 20 - - - - - - - - - - - - - - 8 +TrigSignatureMoniMT INFO -- #3840098930 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1J30_31ETA49_EMPTY #4143623058 -TrigSignatureMoniMT INFO -- #4143623058 Events 20 20 - - - - - - - - - - - - - 1 -TrigSignatureMoniMT INFO -- #4143623058 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #4143623058 Events 20 20 - - - - - - - - - - - - - - 1 +TrigSignatureMoniMT INFO -- #4143623058 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1J30_EMPTY #2991490897 -TrigSignatureMoniMT INFO -- #2991490897 Events 20 20 - - - - - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #2991490897 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2991490897 Events 20 20 - - - - - - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #2991490897 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1J30_FIRSTEMPTY #2214697960 -TrigSignatureMoniMT INFO -- #2214697960 Events 20 20 - - - - - - - - - - - - - 4 -TrigSignatureMoniMT INFO -- #2214697960 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2214697960 Events 20 20 - - - - - - - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #2214697960 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_cosmiccalo_L1RD1_EMPTY #3925252528 -TrigSignatureMoniMT INFO -- #3925252528 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3925252528 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3925252528 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3925252528 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1ABORTGAPNOTCALIB_noPS #1111222999 -TrigSignatureMoniMT INFO -- #1111222999 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1111222999 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1111222999 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1111222999 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1EMPTY_noPS #1963549452 -TrigSignatureMoniMT INFO -- #1963549452 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1963549452 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1963549452 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1963549452 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1FIRSTEMPTY_noPS #3793900723 -TrigSignatureMoniMT INFO -- #3793900723 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3793900723 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3793900723 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3793900723 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1PhysicsHigh_noPS #783280249 -TrigSignatureMoniMT INFO -- #783280249 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #783280249 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #783280249 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #783280249 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1PhysicsVeryHigh_noPS #3050747401 -TrigSignatureMoniMT INFO -- #3050747401 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3050747401 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3050747401 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3050747401 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1RD3_EMPTY #3499439438 -TrigSignatureMoniMT INFO -- #3499439438 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3499439438 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3499439438 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3499439438 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1RD3_FILLED #831126220 -TrigSignatureMoniMT INFO -- #831126220 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #831126220 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #831126220 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #831126220 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1UNPAIRED_ISO_noPS #1376561080 -TrigSignatureMoniMT INFO -- #1376561080 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1376561080 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1376561080 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1376561080 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_eb_L1UNPAIRED_NONISO_noPS #1020101125 -TrigSignatureMoniMT INFO -- #1020101125 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1020101125 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1020101125 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1020101125 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_idmon_L1RD0_EMPTY #56818284 -TrigSignatureMoniMT INFO -- #56818284 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #56818284 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #56818284 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #56818284 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_idmon_L1RD0_FILLED #1198298874 -TrigSignatureMoniMT INFO -- #1198298874 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1198298874 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1198298874 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1198298874 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_idmon_L1RD0_UNPAIRED_ISO #2536676873 -TrigSignatureMoniMT INFO -- #2536676873 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #2536676873 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #2536676873 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #2536676873 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_l1calo_L1J400 #1694511185 -TrigSignatureMoniMT INFO -- #1694511185 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1694511185 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1694511185 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1694511185 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_mb_L1RD2_EMPTY #3788962163 -TrigSignatureMoniMT INFO -- #3788962163 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3788962163 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3788962163 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3788962163 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_noalg_zb_L1ZB #1289992951 -TrigSignatureMoniMT INFO -- #1289992951 Events 20 20 - - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1289992951 Features - - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1289992951 Events 20 20 - - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1289992951 Features - - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_sct_noise_SCTPEB_L1RD0_EMPTY #3024203296 -TrigSignatureMoniMT INFO -- #3024203296 Events 20 20 20 - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #3024203296 Features 20 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #3024203296 Events 20 20 20 - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #3024203296 Features 20 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_tau0_perf_ptonly_L1TAU100 #2342716369 -TrigSignatureMoniMT INFO -- #2342716369 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2342716369 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #2342716369 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2342716369 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau0_perf_ptonly_L1TAU12 #372992233 -TrigSignatureMoniMT INFO -- #372992233 Events 20 20 4 4 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #372992233 Features 5 5 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #372992233 Events 20 20 4 4 0 0 4 4 - - - - - - - - 4 +TrigSignatureMoniMT INFO -- #372992233 Features 5 5 0 0 4 4 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau0_perf_ptonly_L1TAU60 #1376650121 -TrigSignatureMoniMT INFO -- #1376650121 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1376650121 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1376650121 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1376650121 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_idperf_track_L1TAU100 #714660857 -TrigSignatureMoniMT INFO -- #714660857 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #714660857 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #714660857 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #714660857 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_idperf_tracktwoMVA_L1TAU100 #2725693236 -TrigSignatureMoniMT INFO -- #2725693236 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2725693236 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #2725693236 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2725693236 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_idperf_tracktwo_L1TAU100 #886074432 -TrigSignatureMoniMT INFO -- #886074432 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #886074432 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #886074432 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #886074432 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_medium1_tracktwoEF_L1TAU100 #1720193283 -TrigSignatureMoniMT INFO -- #1720193283 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1720193283 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1720193283 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1720193283 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_medium1_tracktwo_L1TAU100 #4069120574 -TrigSignatureMoniMT INFO -- #4069120574 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4069120574 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #4069120574 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4069120574 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_mediumRNN_tracktwoMVA_L1TAU100 #1747754287 -TrigSignatureMoniMT INFO -- #1747754287 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1747754287 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1747754287 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1747754287 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_perf_tracktwoMVA_L1TAU100 #2334140248 -TrigSignatureMoniMT INFO -- #2334140248 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2334140248 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #2334140248 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2334140248 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau160_perf_tracktwo_L1TAU100 #1799096347 -TrigSignatureMoniMT INFO -- #1799096347 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1799096347 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1799096347 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1799096347 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau200_medium1_tracktwoEF_L1TAU100 #4203471951 -TrigSignatureMoniMT INFO -- #4203471951 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4203471951 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #4203471951 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4203471951 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau200_mediumRNN_tracktwoMVA_L1TAU100 #1468926272 -TrigSignatureMoniMT INFO -- #1468926272 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1468926272 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1468926272 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1468926272 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_idperf_track_L1TAU12IM #554271976 -TrigSignatureMoniMT INFO -- #554271976 Events 20 20 3 3 0 3 3 3 - - - - - - - 3 -TrigSignatureMoniMT INFO -- #554271976 Features 4 4 0 4 3 3 - - - - - - - +TrigSignatureMoniMT INFO -- #554271976 Events 20 20 3 3 0 3 3 3 - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #554271976 Features 4 4 0 4 3 3 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_idperf_tracktwoMVA_L1TAU12IM #988149859 -TrigSignatureMoniMT INFO -- #988149859 Events 20 20 3 3 3 0 3 3 - - - - - - - 3 -TrigSignatureMoniMT INFO -- #988149859 Features 4 4 3 0 3 3 - - - - - - - +TrigSignatureMoniMT INFO -- #988149859 Events 20 20 3 3 3 0 3 3 - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #988149859 Features 4 4 3 0 3 3 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_idperf_tracktwo_L1TAU12IM #3346942453 -TrigSignatureMoniMT INFO -- #3346942453 Events 20 20 3 3 3 3 3 3 - - - - - - - 3 -TrigSignatureMoniMT INFO -- #3346942453 Features 4 4 3 3 3 3 - - - - - - - +TrigSignatureMoniMT INFO -- #3346942453 Events 20 20 3 3 3 3 3 3 - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #3346942453 Features 4 4 3 3 3 3 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_looseRNN_tracktwoMVA_L1TAU12IM #169452969 -TrigSignatureMoniMT INFO -- #169452969 Events 20 20 3 3 3 0 3 2 - - - - - - - 2 -TrigSignatureMoniMT INFO -- #169452969 Features 4 4 3 0 3 2 - - - - - - - +TrigSignatureMoniMT INFO -- #169452969 Events 20 20 3 3 3 0 3 2 - - - - - - - - 2 +TrigSignatureMoniMT INFO -- #169452969 Features 4 4 3 0 3 2 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_looseRNN_tracktwo_L1TAU12IM #2490017573 -TrigSignatureMoniMT INFO -- #2490017573 Events 20 20 3 3 3 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2490017573 Features 4 4 3 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #2490017573 Events 20 20 3 3 3 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2490017573 Features 4 4 3 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_medium1_tracktwoEF_L1TAU12IM #506456080 -TrigSignatureMoniMT INFO -- #506456080 Events 20 20 3 3 3 0 3 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #506456080 Features 4 4 3 0 3 0 - - - - - - - +TrigSignatureMoniMT INFO -- #506456080 Events 20 20 3 3 3 0 3 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #506456080 Features 4 4 3 0 3 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_medium1_tracktwoMVA_L1TAU12IM #4055280067 -TrigSignatureMoniMT INFO -- #4055280067 Events 20 20 3 3 3 0 3 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #4055280067 Features 4 4 3 0 3 0 - - - - - - - +TrigSignatureMoniMT INFO -- #4055280067 Events 20 20 3 3 3 0 3 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #4055280067 Features 4 4 3 0 3 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_medium1_tracktwo_L1TAU12IM #1433975745 -TrigSignatureMoniMT INFO -- #1433975745 Events 20 20 3 3 3 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1433975745 Features 4 4 3 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1433975745 Events 20 20 3 3 3 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1433975745 Features 4 4 3 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_mediumRNN_tracktwoMVA_L1TAU12IM #2222894847 -TrigSignatureMoniMT INFO -- #2222894847 Events 20 20 3 3 3 0 3 1 - - - - - - - 1 -TrigSignatureMoniMT INFO -- #2222894847 Features 4 4 3 0 3 1 - - - - - - - +TrigSignatureMoniMT INFO -- #2222894847 Events 20 20 3 3 3 0 3 1 - - - - - - - - 1 +TrigSignatureMoniMT INFO -- #2222894847 Features 4 4 3 0 3 1 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_mediumRNN_tracktwo_L1TAU12IM #698603885 -TrigSignatureMoniMT INFO -- #698603885 Events 20 20 3 3 3 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #698603885 Features 4 4 3 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #698603885 Events 20 20 3 3 3 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #698603885 Features 4 4 3 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_perf_tracktwoMVA_L1TAU12IM #112814536 -TrigSignatureMoniMT INFO -- #112814536 Events 20 20 3 3 3 0 3 3 - - - - - - - 3 -TrigSignatureMoniMT INFO -- #112814536 Features 4 4 3 0 3 3 - - - - - - - +TrigSignatureMoniMT INFO -- #112814536 Events 20 20 3 3 3 0 3 3 - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #112814536 Features 4 4 3 0 3 3 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_perf_tracktwo_L1TAU12IM #1129072492 -TrigSignatureMoniMT INFO -- #1129072492 Events 20 20 3 3 3 3 3 3 - - - - - - - 3 -TrigSignatureMoniMT INFO -- #1129072492 Features 4 4 3 3 3 3 - - - - - - - +TrigSignatureMoniMT INFO -- #1129072492 Events 20 20 3 3 3 3 3 3 - - - - - - - - 3 +TrigSignatureMoniMT INFO -- #1129072492 Features 4 4 3 3 3 3 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_tightRNN_tracktwoMVA_L1TAU12IM #2472860683 -TrigSignatureMoniMT INFO -- #2472860683 Events 20 20 3 3 3 0 3 1 - - - - - - - 1 -TrigSignatureMoniMT INFO -- #2472860683 Features 4 4 3 0 3 1 - - - - - - - +TrigSignatureMoniMT INFO -- #2472860683 Events 20 20 3 3 3 0 3 1 - - - - - - - - 1 +TrigSignatureMoniMT INFO -- #2472860683 Features 4 4 3 0 3 1 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_tightRNN_tracktwo_L1TAU12IM #2537544560 -TrigSignatureMoniMT INFO -- #2537544560 Events 20 20 3 3 3 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #2537544560 Features 4 4 3 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #2537544560 Events 20 20 3 3 3 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #2537544560 Features 4 4 3 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_verylooseRNN_tracktwoMVA_L1TAU12IM #2992830434 -TrigSignatureMoniMT INFO -- #2992830434 Events 20 20 3 3 3 0 3 2 - - - - - - - 2 -TrigSignatureMoniMT INFO -- #2992830434 Features 4 4 3 0 3 2 - - - - - - - +TrigSignatureMoniMT INFO -- #2992830434 Events 20 20 3 3 3 0 3 2 - - - - - - - - 2 +TrigSignatureMoniMT INFO -- #2992830434 Features 4 4 3 0 3 2 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau25_verylooseRNN_tracktwo_L1TAU12IM #1275052132 -TrigSignatureMoniMT INFO -- #1275052132 Events 20 20 3 3 3 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1275052132 Features 4 4 3 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1275052132 Events 20 20 3 3 3 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1275052132 Features 4 4 3 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau35_mediumRNN_tracktwoMVA_L1TAU12IM #2456480859 -TrigSignatureMoniMT INFO -- #2456480859 Events 20 20 3 3 3 0 3 1 - - - - - - - 1 -TrigSignatureMoniMT INFO -- #2456480859 Features 4 4 3 0 3 1 - - - - - - - +TrigSignatureMoniMT INFO -- #2456480859 Events 20 20 3 3 3 0 3 1 - - - - - - - - 1 +TrigSignatureMoniMT INFO -- #2456480859 Features 4 4 3 0 3 1 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau35_mediumRNN_tracktwoMVA_tau25_mediumRNN_tracktwoMVA_L1DR-TAU20ITAU12I-J25 #1794354861 -TrigSignatureMoniMT INFO -- #1794354861 Events 20 20 1 1 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1794354861 Features 2 2 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1794354861 Events 20 20 1 1 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1794354861 Features 2 2 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau80_medium1_tracktwo_L1TAU60 #598963338 -TrigSignatureMoniMT INFO -- #598963338 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #598963338 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #598963338 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #598963338 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau80_mediumRNN_tracktwoMVA_tau35_mediumRNN_tracktwoMVA_L1TAU60_DR-TAU20ITAU12I #1075975502 -TrigSignatureMoniMT INFO -- #1075975502 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1075975502 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #1075975502 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1075975502 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tau80_mediumRNN_tracktwoMVA_tau60_mediumRNN_tracktwoMVA_L1TAU60_2TAU40 #400305971 -TrigSignatureMoniMT INFO -- #400305971 Events 20 20 0 0 0 0 0 0 - - - - - - - 0 -TrigSignatureMoniMT INFO -- #400305971 Features 0 0 0 0 0 0 - - - - - - - +TrigSignatureMoniMT INFO -- #400305971 Events 20 20 0 0 0 0 0 0 - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #400305971 Features 0 0 0 0 0 0 - - - - - - - - TrigSignatureMoniMT INFO HLT_tilecalib_laser_TilePEB_L1CALREQ2 #1063154655 -TrigSignatureMoniMT INFO -- #1063154655 Events 20 20 20 - - - - - - - - - - - - 20 -TrigSignatureMoniMT INFO -- #1063154655 Features 20 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #1063154655 Events 20 20 20 - - - - - - - - - - - - - 20 +TrigSignatureMoniMT INFO -- #1063154655 Features 20 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_timeburner_L1All #819160059 -TrigSignatureMoniMT INFO -- #819160059 Events 20 20 0 - - - - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #819160059 Features 0 - - - - - - - - - - - - +TrigSignatureMoniMT INFO -- #819160059 Events 20 20 0 - - - - - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #819160059 Features 0 - - - - - - - - - - - - - TrigSignatureMoniMT INFO HLT_unconvtrk120_isohpttrack_icummedium_L1XE50 #4064963182 -TrigSignatureMoniMT INFO -- #4064963182 Events 20 20 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #4064963182 Features 0 0 0 0 0 0 0 0 0 4 - - - +TrigSignatureMoniMT INFO -- #4064963182 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #4064963182 Features 0 0 0 0 0 0 0 0 0 0 4 - - - TrigSignatureMoniMT INFO HLT_unconvtrk120_isohpttrack_imedium_L1XE50 #3425113791 -TrigSignatureMoniMT INFO -- #3425113791 Events 20 20 0 0 0 0 0 0 0 0 0 9 - - - 9 -TrigSignatureMoniMT INFO -- #3425113791 Features 0 0 0 0 0 0 0 0 0 13 - - - +TrigSignatureMoniMT INFO -- #3425113791 Events 20 20 0 0 0 0 0 0 0 0 0 0 9 - - - 9 +TrigSignatureMoniMT INFO -- #3425113791 Features 0 0 0 0 0 0 0 0 0 0 13 - - - TrigSignatureMoniMT INFO HLT_xe100_cvfpufit_L1XE50 #2729083465 -TrigSignatureMoniMT INFO -- #2729083465 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2729083465 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2729083465 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2729083465 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe100_mht_L1XE50 #532175988 -TrigSignatureMoniMT INFO -- #532175988 Events 20 20 0 0 0 0 0 0 0 0 0 1 - - - 1 -TrigSignatureMoniMT INFO -- #532175988 Features 0 0 0 0 0 0 0 0 0 1 - - - +TrigSignatureMoniMT INFO -- #532175988 Events 20 20 0 0 0 0 0 0 0 0 0 0 1 - - - 1 +TrigSignatureMoniMT INFO -- #532175988 Features 0 0 0 0 0 0 0 0 0 0 1 - - - TrigSignatureMoniMT INFO HLT_xe100_mhtpufit_em_subjesgscIS_L1XE50 #3054195458 -TrigSignatureMoniMT INFO -- #3054195458 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #3054195458 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #3054195458 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #3054195458 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe100_mhtpufit_pf_subjesgscIS_L1XE50 #2614685150 -TrigSignatureMoniMT INFO -- #2614685150 Events 20 20 0 0 0 0 0 0 0 0 0 1 - - - 1 -TrigSignatureMoniMT INFO -- #2614685150 Features 0 0 0 0 0 0 0 0 0 1 - - - +TrigSignatureMoniMT INFO -- #2614685150 Events 20 20 0 0 0 0 0 0 0 0 0 0 1 - - - 1 +TrigSignatureMoniMT INFO -- #2614685150 Features 0 0 0 0 0 0 0 0 0 0 1 - - - TrigSignatureMoniMT INFO HLT_xe100_pfopufit_L1XE50 #2909333517 -TrigSignatureMoniMT INFO -- #2909333517 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2909333517 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2909333517 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2909333517 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe100_pfsum_L1XE50 #1890237897 -TrigSignatureMoniMT INFO -- #1890237897 Events 20 20 0 0 0 0 0 0 0 0 0 1 - - - 1 -TrigSignatureMoniMT INFO -- #1890237897 Features 0 0 0 0 0 0 0 0 0 1 - - - +TrigSignatureMoniMT INFO -- #1890237897 Events 20 20 0 0 0 0 0 0 0 0 0 0 1 - - - 1 +TrigSignatureMoniMT INFO -- #1890237897 Features 0 0 0 0 0 0 0 0 0 0 1 - - - TrigSignatureMoniMT INFO HLT_xe100_tcpufit_L1XE50 #2803198799 -TrigSignatureMoniMT INFO -- #2803198799 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #2803198799 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #2803198799 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #2803198799 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe100_trkmht_L1XE50 #1055916731 -TrigSignatureMoniMT INFO -- #1055916731 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1055916731 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1055916731 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1055916731 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe100_trkmht_xe85_tcpufit_xe65_cell_L1XE50 #451622546 -TrigSignatureMoniMT INFO -- #451622546 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #451622546 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #451622546 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #451622546 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe110_mht_L1XE50 #3030733259 -TrigSignatureMoniMT INFO -- #3030733259 Events 20 20 0 0 0 0 0 0 0 0 0 1 - - - 1 -TrigSignatureMoniMT INFO -- #3030733259 Features 0 0 0 0 0 0 0 0 0 1 - - - +TrigSignatureMoniMT INFO -- #3030733259 Events 20 20 0 0 0 0 0 0 0 0 0 0 1 - - - 1 +TrigSignatureMoniMT INFO -- #3030733259 Features 0 0 0 0 0 0 0 0 0 0 1 - - - TrigSignatureMoniMT INFO HLT_xe110_tc_em_L1XE50 #607113828 -TrigSignatureMoniMT INFO -- #607113828 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #607113828 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #607113828 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #607113828 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe110_tcpufit_L1XE50 #892853397 -TrigSignatureMoniMT INFO -- #892853397 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #892853397 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #892853397 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #892853397 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe30_cell_L1XE10 #1649696554 -TrigSignatureMoniMT INFO -- #1649696554 Events 20 20 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #1649696554 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #1649696554 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #1649696554 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_xe30_cell_xe30_tcpufit_L1XE10 #3768353779 -TrigSignatureMoniMT INFO -- #3768353779 Events 20 20 0 0 0 0 0 0 0 0 0 3 - - - 3 -TrigSignatureMoniMT INFO -- #3768353779 Features 0 0 0 0 0 0 0 0 0 3 - - - +TrigSignatureMoniMT INFO -- #3768353779 Events 20 20 0 0 0 0 0 0 0 0 0 0 3 - - - 3 +TrigSignatureMoniMT INFO -- #3768353779 Features 0 0 0 0 0 0 0 0 0 0 3 - - - TrigSignatureMoniMT INFO HLT_xe30_cvfpufit_L1XE10 #3860749499 -TrigSignatureMoniMT INFO -- #3860749499 Events 20 20 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #3860749499 Features 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #3860749499 Events 20 20 0 0 0 0 0 0 0 0 0 0 6 - - - 6 +TrigSignatureMoniMT INFO -- #3860749499 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe30_mht_L1XE10 #3626903018 -TrigSignatureMoniMT INFO -- #3626903018 Events 20 20 0 0 0 0 0 0 0 0 0 14 - - - 14 -TrigSignatureMoniMT INFO -- #3626903018 Features 0 0 0 0 0 0 0 0 0 14 - - - +TrigSignatureMoniMT INFO -- #3626903018 Events 20 20 0 0 0 0 0 0 0 0 0 0 14 - - - 14 +TrigSignatureMoniMT INFO -- #3626903018 Features 0 0 0 0 0 0 0 0 0 0 14 - - - TrigSignatureMoniMT INFO HLT_xe30_mhtpufit_em_subjesgscIS_L1XE10 #689201557 -TrigSignatureMoniMT INFO -- #689201557 Events 20 20 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #689201557 Features 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #689201557 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 - - - 7 +TrigSignatureMoniMT INFO -- #689201557 Features 0 0 0 0 0 0 0 0 0 0 7 - - - TrigSignatureMoniMT INFO HLT_xe30_mhtpufit_pf_subjesgscIS_L1XE10 #1886909707 -TrigSignatureMoniMT INFO -- #1886909707 Events 20 20 0 0 0 0 0 0 0 0 0 5 - - - 5 -TrigSignatureMoniMT INFO -- #1886909707 Features 0 0 0 0 0 0 0 0 0 5 - - - +TrigSignatureMoniMT INFO -- #1886909707 Events 20 20 0 0 0 0 0 0 0 0 0 0 5 - - - 5 +TrigSignatureMoniMT INFO -- #1886909707 Features 0 0 0 0 0 0 0 0 0 0 5 - - - TrigSignatureMoniMT INFO HLT_xe30_pfopufit_L1XE10 #2252641537 -TrigSignatureMoniMT INFO -- #2252641537 Events 20 20 0 0 0 0 0 0 0 0 0 4 - - - 4 -TrigSignatureMoniMT INFO -- #2252641537 Features 0 0 0 0 0 0 0 0 0 4 - - - +TrigSignatureMoniMT INFO -- #2252641537 Events 20 20 0 0 0 0 0 0 0 0 0 0 4 - - - 4 +TrigSignatureMoniMT INFO -- #2252641537 Features 0 0 0 0 0 0 0 0 0 0 4 - - - TrigSignatureMoniMT INFO HLT_xe30_pfsum_L1XE10 #998713382 -TrigSignatureMoniMT INFO -- #998713382 Events 20 20 0 0 0 0 0 0 0 0 0 7 - - - 7 -TrigSignatureMoniMT INFO -- #998713382 Features 0 0 0 0 0 0 0 0 0 7 - - - +TrigSignatureMoniMT INFO -- #998713382 Events 20 20 0 0 0 0 0 0 0 0 0 0 7 - - - 7 +TrigSignatureMoniMT INFO -- #998713382 Features 0 0 0 0 0 0 0 0 0 0 7 - - - TrigSignatureMoniMT INFO HLT_xe30_tcpufit_L1XE10 #1583719916 -TrigSignatureMoniMT INFO -- #1583719916 Events 20 20 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #1583719916 Features 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #1583719916 Events 20 20 0 0 0 0 0 0 0 0 0 0 6 - - - 6 +TrigSignatureMoniMT INFO -- #1583719916 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe30_trkmht_L1XE10 #2468872349 -TrigSignatureMoniMT INFO -- #2468872349 Events 20 20 0 0 0 0 0 0 0 0 0 6 - - - 6 -TrigSignatureMoniMT INFO -- #2468872349 Features 0 0 0 0 0 0 0 0 0 6 - - - +TrigSignatureMoniMT INFO -- #2468872349 Events 20 20 0 0 0 0 0 0 0 0 0 0 6 - - - 6 +TrigSignatureMoniMT INFO -- #2468872349 Features 0 0 0 0 0 0 0 0 0 0 6 - - - TrigSignatureMoniMT INFO HLT_xe65_cell_L1XE50 #531141817 -TrigSignatureMoniMT INFO -- #531141817 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #531141817 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #531141817 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #531141817 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe65_cell_xe110_tcpufit_L1XE50 #115518400 -TrigSignatureMoniMT INFO -- #115518400 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #115518400 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #115518400 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #115518400 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe80_tcpufit_unconvtrk120_isohpttrack_icummedium_L1XE50 #668475349 -TrigSignatureMoniMT INFO -- #668475349 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #668475349 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #668475349 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #668475349 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe80_tcpufit_unconvtrk120_isohpttrack_imedium_L1XE50 #1855034723 -TrigSignatureMoniMT INFO -- #1855034723 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #1855034723 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #1855034723 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #1855034723 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe80_tcpufit_unconvtrk80_isohpttrack_imedium_L1XE50 #153760048 -TrigSignatureMoniMT INFO -- #153760048 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #153760048 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #153760048 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #153760048 Features 0 0 0 0 0 0 0 0 0 0 0 - - - TrigSignatureMoniMT INFO HLT_xe95_trkmht_xe90_tcpufit_xe75_cell_L1XE50 #302256132 -TrigSignatureMoniMT INFO -- #302256132 Events 20 20 0 0 0 0 0 0 0 0 0 0 - - - 0 -TrigSignatureMoniMT INFO -- #302256132 Features 0 0 0 0 0 0 0 0 0 0 - - - +TrigSignatureMoniMT INFO -- #302256132 Events 20 20 0 0 0 0 0 0 0 0 0 0 0 - - - 0 +TrigSignatureMoniMT INFO -- #302256132 Features 0 0 0 0 0 0 0 0 0 0 0 - - - diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py index 066e6eaa34fb56551845d82bf44ba4692224e543..d341f13a8c47c5ee577a6096c21e0adf9fa786e2 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py @@ -427,6 +427,8 @@ def triggerPOOLOutputCfg(flags, edmSet): menuwriter = CompFactory.getComp("TrigConf::xAODMenuWriterMT")() menuwriter.IsHLTJSONConfig = True menuwriter.IsL1JSONConfig = True + menuwriter.WritexAODTriggerMenu = True # This should be removed in the future + menuwriter.WritexAODTriggerMenuJson = True menuwriter.KeyWriterTool = CompFactory.getComp('TrigConf::KeyWriterTool')('KeyWriterToolOffline') acc.addEventAlgo( menuwriter ) @@ -436,7 +438,11 @@ def triggerPOOLOutputCfg(flags, edmSet): acc.merge( L1PrescaleCondAlgCfg( flags ) ) # Add metadata to the output stream - streamAlg.MetadataItemList += [ "xAOD::TriggerMenuContainer#*", "xAOD::TriggerMenuAuxContainer#*" ] + if menuwriter.WritexAODTriggerMenu: + streamAlg.MetadataItemList += [ "xAOD::TriggerMenuContainer#*", "xAOD::TriggerMenuAuxContainer#*" ] + + if menuwriter.WritexAODTriggerMenuJson: + streamAlg.MetadataItemList += [ "xAOD::TriggerMenuJsonContainer#*", "xAOD::TriggerMenuJsonAuxContainer#*" ] # Ensure OutputStream runs after TrigDecisionMakerMT and xAODMenuWriterMT streamAlg.ExtraInputs += [ diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigGetter.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigGetter.py index f72402cdecbf8f792b62e57bb8ea1a89051011e9..7000180542862e648a1f2c20831064a91a64a441 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigGetter.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigGetter.py @@ -476,16 +476,16 @@ class TriggerConfigGetter(Configured): objKeyStore.addManyTypesMetaData( metadataItems ) if writeMenuJSON: - metadataItems = [ "xAOD::TriggerMenuJSONContainer#MenuJSON_HLT", - "xAOD::TriggerMenuJSONAuxContainer#MenuJSON_HLTAux.", - "xAOD::TriggerMenuJSONContainer#MenuJSON_L1", - "xAOD::TriggerMenuJSONAuxContainer#MenuJSON_L1Aux.", - "xAOD::TriggerMenuJSONContainer#MenuJSON_HLTPS", - "xAOD::TriggerMenuJSONAuxContainer#MenuJSON_HLTPSAux.", - "xAOD::TriggerMenuJSONContainer#MenuJSON_L1PS", - "xAOD::TriggerMenuJSONAuxContainer#MenuJSON_L1PSAux.", - # "xAOD::TriggerMenuJSONContainer#MenuJSON_BG", // TODO - # "xAOD::TriggerMenuJSONAuxContainer#MenuJSON_BGAux.", // TODO + metadataItems = [ "xAOD::TriggerMenuJsonContainer#MenuJSON_HLT", + "xAOD::TriggerMenuJsonAuxContainer#MenuJSON_HLTAux.", + "xAOD::TriggerMenuJsonContainer#MenuJSON_L1", + "xAOD::TriggerMenuJsonAuxContainer#MenuJSON_L1Aux.", + "xAOD::TriggerMenuJsonContainer#MenuJSON_HLTPS", + "xAOD::TriggerMenuJsonAuxContainer#MenuJSON_HLTPSAux.", + "xAOD::TriggerMenuJsonContainer#MenuJSON_L1PS", + "xAOD::TriggerMenuJsonAuxContainer#MenuJSON_L1PSAux.", + # "xAOD::TriggerMenuJsonContainer#MenuJSON_BG", // TODO + # "xAOD::TriggerMenuJsonAuxContainer#MenuJSON_BGAux.", // TODO ] objKeyStore.addManyTypesMetaData( metadataItems ) diff --git a/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py index 56aa312dcf6e410aa7612bda0e0c2ce53375bd89..5b5c3d7e80507ef0cba506185cb61d2378e9df51 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py @@ -61,7 +61,6 @@ class opt: doMonitorSlice = True doBeamspotSlice = True doCosmicSlice = True - doEnhancedBiasSlice = True doUnconventionalTrackingSlice = True reverseViews = False filterViews = False diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/BeamspotChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/BeamspotChainConfiguration.py index a41eca3160cc8a1cc0603c196f806adff47a8743..41fce5817ef833cce87552861c5a0d3095423e5e 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/BeamspotChainConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/BeamspotChainConfiguration.py @@ -84,25 +84,30 @@ class BeamspotChainConfiguration(ChainConfigurationBase): def assembleChain(self): chainSteps = [] log.debug("Assembling chain for " + self.chainName) - # -------------------- - # define here the names of the steps and obtain the chainStep configuration - # -------------------- - stepDictionary = { - "allTE_trkfast":[self.getAllTEStep()], - #"activeTE_trkfast":[self.activeTE_trkfast()], - "trkFS_trkfast":[self.getTrkFSStep()], - } + stepDictionary = self.getStepDictionary() + #key = self.chainPart['EFrecoAlg'] key = self.chainPart['addInfo'][0] + "_" + self.chainPart['l2IDAlg'][0]#TODO: hardcoded index steps=stepDictionary[key] for step in steps: - chainSteps+=[step] + chainstep = getattr(self, step)() + chainSteps+=[chainstep] myChain = self.buildChain(chainSteps) return myChain - + def getStepDictionary(self): + # -------------------- + # define here the names of the steps and obtain the chainStep configuration + # -------------------- + stepDictionary = { + "allTE_trkfast":['getAllTEStep'], + #"activeTE_trkfast":[self.activeTE_trkfast()], + "trkFS_trkfast":['getTrkFSStep'] + } + return stepDictionary + # -------------------- # Configuration of costmonitor (costmonitor ?? but isn't this is the actua chain configuration ??) # -------------------- diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/CalibChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/CalibChainConfiguration.py index 3a9ea2d4fb545cd950674244e6e012b3383d7268..bf77bfef96571fabf3c91684730a248a67fb3b3f 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/CalibChainConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/CalibChainConfiguration.py @@ -19,7 +19,38 @@ class CalibChainConfiguration(ChainConfigurationBase): chainSteps = [] log.debug("Assembling chain for " + self.chainName) + if self.chainPartName == 'larnoiseburst': + chainSteps.append(self.getLArNoiseBurst()) myChain = self.buildChain(chainSteps) return myChain + # -------------------- + # LArNoiseBurst configuration + # -------------------- + def getLArNoiseBurst(self): + + from AthenaConfiguration.ComponentFactory import CompFactory + from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, ChainStep, RecoFragmentsPool + hypoAlg = CompFactory.TrigLArNoiseBurstAlg("NoiseBurstAlg") + from TrigCaloHypo.TrigCaloHypoConfig import TrigLArNoiseBurstHypoToolGen + from TrigT2CaloCommon.CaloDef import clusterFSInputMaker + from AthenaConfiguration.ComponentAccumulator import conf2toConfigurable + from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import cellRecoSequence + noiseBurstInputMakerAlg= conf2toConfigurable(clusterFSInputMaker()) + + from AthenaCommon.CFElements import parOR, seqAND + noiseBurstRecoSeq = parOR( "LArNoiseRecoSeq") + cells_sequence, cells_name = RecoFragmentsPool.retrieve(cellRecoSequence, flags=None, RoIs=noiseBurstInputMakerAlg.RoIs) + noiseBurstRecoSeq += cells_sequence + hypoAlg.CellContainerKey = cells_name + + noiseBurstMenuSeq = seqAND("LArNoiseMenuSeq", [noiseBurstInputMakerAlg, noiseBurstRecoSeq]) + + seq = MenuSequence( + Sequence = noiseBurstMenuSeq, + Maker = noiseBurstInputMakerAlg, + Hypo = hypoAlg, + HypoToolGen = TrigLArNoiseBurstHypoToolGen) + + return ChainStep(name='LArNoiseBurst', Sequences=[seq]) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/EnhancedBiasChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/EnhancedBiasChainConfiguration.py index b2e020da2dc5287e14638e31702bb0fd32942a59..53fa0c40e0a6ad840025941f2c35ddd3aec4b0a1 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/EnhancedBiasChainConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/EnhancedBiasChainConfiguration.py @@ -3,7 +3,7 @@ from TrigHypoCommonTools.TrigHypoCommonToolsConf import L1InfoHypo, L1InfoHypoTool from TriggerMenuMT.HLTMenuConfig.Menu.ChainConfigurationBase import ChainConfigurationBase -from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import ChainStep, MenuSequence, RecoFragmentsPool +from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, RecoFragmentsPool from DecisionHandling.DecisionHandlingConf import InputMakerForRoI, ViewCreatorInitialROITool from AthenaCommon.CFElements import seqAND @@ -84,22 +84,12 @@ def enhancedBiasAthSequence(ConfigFlags): return (enhancedBiasAthSequence, inputMakerAlg, enhancedBiasSequence) -class EnhancedBiasChainConfiguration(ChainConfigurationBase): - def __init__(self, chainDict): - ChainConfigurationBase.__init__(self, chainDict) - - - def assembleChain(self): - chainSteps = [] - log.debug("Assembling chain for " + self.chainName) - - ebSeq = self.enhancedBiasMenuSequence() - chainSteps.append( ChainStep(name='Step1_EnhancedBias', Sequences=[ebSeq]) ) - return self.buildChain(chainSteps) +def enahncedBiasSequence_Cfg(flags): + return enhancedBiasMenuSequence() - def enhancedBiasMenuSequence(self): +def enhancedBiasMenuSequence(): # InputMaker and sequence (_, inputMakerAlg, enhancedBiasSequence) = RecoFragmentsPool.retrieve(enhancedBiasAthSequence, None) @@ -123,3 +113,17 @@ class EnhancedBiasChainConfiguration(ChainConfigurationBase): Maker = inputMakerAlg, Hypo = hypoAlg, HypoToolGen = EnhancedBiasHypoToolGen ) + + +class EnhancedBiasChainConfiguration(ChainConfigurationBase): + def __init__(self, chainDict): + ChainConfigurationBase.__init__(self, chainDict) + + + def assembleChain(self): + chainSteps = [] + log.debug("Assembling chain for " + self.chainName) + + chainSteps.append( self.getStep(1,"EnhancedBias", [enahncedBiasSequence_Cfg]) ) + + return self.buildChain(chainSteps) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/MonitorChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/MonitorChainConfiguration.py index 404aa8e7ec49b8ffb111832e18a402195593ae27..97f82f80bc9c3ce9b4076ca13b085f2182eea23b 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/MonitorChainConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CalibCosmicMon/MonitorChainConfiguration.py @@ -5,7 +5,7 @@ logging.getLogger().info("Importing %s",__name__) log = logging.getLogger("TriggerMenuMT.HLTMenuConfig.CalibCosmicMon.MonitorChainConfiguration") from TriggerMenuMT.HLTMenuConfig.Menu.ChainConfigurationBase import ChainConfigurationBase -from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import ChainStep, MenuSequence +from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence from DecisionHandling.DecisionHandlingConf import InputMakerForRoI, ViewCreatorInitialROITool from AthenaCommon.CFElements import seqAND from TrigGenericAlgs.TrigGenericAlgsConfig import TimeBurnerCfg, TimeBurnerHypoToolGen @@ -15,6 +15,24 @@ from AthenaConfiguration.ComponentAccumulator import conf2toConfigurable # fragments generating configuration will be functions in New JO, # so let's make them functions already now #---------------------------------------------------------------- +def TimeBurnerSequenceCfg(flags): + # Input maker - required by the framework, but inputs don't matter for TimeBurner + inputMaker = InputMakerForRoI("IM_TimeBurner") + inputMaker.RoITool = ViewCreatorInitialROITool() + inputMaker.RoIs="TimeBurnerInputRoIs" + inputMakerSeq = seqAND("TimeBurnerSequence", [inputMaker]) + + # TimeBurner alg works as a reject-all hypo + hypoAlg = conf2toConfigurable(TimeBurnerCfg()) + hypoAlg.SleepTimeMillisec = 200 + + return MenuSequence( + Sequence = inputMakerSeq, + Maker = inputMaker, + Hypo = hypoAlg, + HypoToolGen = TimeBurnerHypoToolGen) + + #---------------------------------------------------------------- # Class to configure chain @@ -45,21 +63,5 @@ class MonitorChainConfiguration(ChainConfigurationBase): # -------------------- # TimeBurner configuration # -------------------- - def getTimeBurnerStep(self): - # Input maker - required by the framework, but inputs don't matter for TimeBurner - inputMaker = InputMakerForRoI("IM_TimeBurner") - inputMaker.RoITool = ViewCreatorInitialROITool() - inputMaker.RoIs="TimeBurnerInputRoIs" - inputMakerSeq = seqAND("TimeBurnerSequence", [inputMaker]) - - # TimeBurner alg works as a reject-all hypo - hypoAlg = conf2toConfigurable(TimeBurnerCfg()) - hypoAlg.SleepTimeMillisec = 200 - - seq = MenuSequence( - Sequence = inputMakerSeq, - Maker = inputMaker, - Hypo = hypoAlg, - HypoToolGen = TimeBurnerHypoToolGen) - - return ChainStep(name='Step1_TimeBurner', Sequences=[seq]) + def getTimeBurnerStep(self): + return self.getStep(1,'TimeBurner',[TimeBurnerSequenceCfg]) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/EventBuildingSequenceSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/EventBuildingSequenceSetup.py index a64911614ac7f27304f3f7b71e4eb2b8e8973d8f..c9223001f7be982ae0a86ca46108f56ac9299855 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/EventBuildingSequenceSetup.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/CommonSequences/EventBuildingSequenceSetup.py @@ -14,7 +14,7 @@ from AthenaCommon.Logging import logging log = logging.getLogger('EventBuildingSequenceSetup') -def addEventBuildingSequence(chain, eventBuildType): +def addEventBuildingSequence(chain, eventBuildType, chainDict): ''' Add an extra ChainStep to a Chain object with a PEBInfoWriter sequence configured for the eventBuildType ''' @@ -36,7 +36,7 @@ def addEventBuildingSequence(chain, eventBuildType): HypoToolGen = pebInfoWriterToolGenerator) step_name = 'Step{:d}_PEBInfoWriter_{:s}'.format(len(chain.steps)+1, eventBuildType) - step = ChainStep(name=step_name, Sequences=[seq]) + step = ChainStep(name=step_name, Sequences=[seq], chainDicts=[chainDict]) chain.steps.append(step) @@ -163,4 +163,4 @@ def alignEventBuildingSteps(all_chains): if pebStepPosition < maxPebStepPosition[ebt]: numStepsNeeded = maxPebStepPosition[ebt] - pebStepPosition log.debug('Aligning PEB step for chain %s by adding %d empty steps', chainDict['chainName'], numStepsNeeded) - chainConfig.insertEmptySteps(chainDict,'EmptyPEBAlign', numStepsNeeded, pebStepPosition-1) + chainConfig.insertEmptySteps('EmptyPEBAlign', numStepsNeeded, pebStepPosition-1) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py index 9e35c8d8be8bd1bc8143081522da748968edacf4..6bf1450f6ab1e9300bf6fb25cd64ebe5e9bb5ccb 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py @@ -11,6 +11,7 @@ from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequenceSetup import fastCa from TriggerMenuMT.HLTMenuConfig.Egamma.ElectronSequenceSetup import fastElectronMenuSequence from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloSequenceSetup import precisionCaloMenuSequence from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionElectronSequenceSetup import precisionElectronMenuSequence +from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionTrackingSequenceSetup import precisionTrackingMenuSequence from AthenaMonitoringKernel.GenericMonitoringTool import GenericMonitoringTool, defineHistogram #---------------------------------------------------------------- @@ -27,6 +28,9 @@ def fastElectronSequenceCfg( flags ): def precisionCaloSequenceCfg( flags ): return precisionCaloMenuSequence('Electron') +def precisionTrackingSequenceCfg( flags ): + return precisionTrackingMenuSequence('Electron') + def precisionElectronSequenceCfg( flags ): return precisionElectronMenuSequence() @@ -65,39 +69,25 @@ class ElectronChainConfiguration(ChainConfigurationBase): stepDictionary = { 'etcut1step': ['getFastCalo'], - 'etcut' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron'], - 'lhloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhvloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhmedium' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhtight' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'etcutnoringer' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron'], - 'lhloosenoringer' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhvloosenoringer' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhmediumnoringer' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhtightnoringer' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhlooseivarloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhlooseivarmedium' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhlooseivartight' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhlmediumivarloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhlmediumivarmedium': ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhlmediumivartight' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhtightivarloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhtightivarmedium' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhtightivartight' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - # gsf sequences. For now just settin gup as normal non-gsf chains - 'lhloosegsf' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhvloosegsf' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhmediumgsf' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhtightgsf' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhloosegsfivarloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhloosegsfivarmedium' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhloosegsfivartight' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhlmediumgsfivarloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhlmediumgsfivarmedium': ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhlmediumgsfivartight' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhtightgsfivarloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhtightgsfivarmedium' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], - 'lhtightgsfivartight' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionElectron'], + 'etcut' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking'], + 'lhloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhvloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhmedium' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhtight' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'etcutnoringer' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking'], + 'lhloosenoringer' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhvloosenoringer' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhmediumnoringer' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhtightnoringer' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhlooseivarloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhlooseivarmedium' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhlooseivartight' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhlmediumivarloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhlmediumivarmedium': ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhlmediumivartight' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhtightivarloose' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhtightivarmedium' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], + 'lhtightivartight' : ['getFastCalo', 'getFastElectron', 'getPrecisionCaloElectron', 'getPrecisionTracking', 'getPrecisionElectron'], } log.debug('electron chain part = ' + str(self.chainPart)) @@ -139,6 +129,10 @@ class ElectronChainConfiguration(ChainConfigurationBase): stepName = "precisionCalo_electron" return self.getStep(3,stepName,[ precisionCaloSequenceCfg]) + def getPrecisionTracking(self): + stepName = "precisionTracking_electron" + return self.getStep(4,stepName,[ precisionTrackingSequenceCfg]) + def getPrecisionElectron(self): isocut = self.chainPart['isoInfo'] @@ -146,8 +140,8 @@ class ElectronChainConfiguration(ChainConfigurationBase): if "Zee" in self.chainName: stepName = "precision_topoelectron"+isocut - return self.getStep(4,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboTools=[diElectronMassComboHypoToolFromDict]) + return self.getStep(5,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboTools=[diElectronMassComboHypoToolFromDict]) else: stepName = "precision_electron"+isocut - return self.getStep(4,stepName,[ precisionElectronSequenceCfg]) + return self.getStep(5,stepName,[ precisionElectronSequenceCfg]) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionElectronSequenceSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionElectronSequenceSetup.py index 3c6b6d40d745586ba638db4673f85d591404f401..83b2b944b0cbcf61c14c6ab44b75142b54259415 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionElectronSequenceSetup.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionElectronSequenceSetup.py @@ -1,5 +1,5 @@ # -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # from AthenaConfiguration.AllConfigFlags import ConfigFlags @@ -25,9 +25,9 @@ def precisionElectronSequence(ConfigFlags): # Configure the reconstruction algorithm sequence from TriggerMenuMT.HLTMenuConfig.Electron.PrecisionElectronRecoSequences import precisionElectronRecoSequence - (electronPrecisionRec, electronPrecisionTrack, sequenceOut) = precisionElectronRecoSequence(InViewRoIs) + (electronPrecisionRec, sequenceOut) = precisionElectronRecoSequence(InViewRoIs) - electronPrecisionInViewAlgs = parOR("electronPrecisionInViewAlgs", [electronPrecisionTrack, electronPrecisionRec]) + electronPrecisionInViewAlgs = parOR("electronPrecisionInViewAlgs", [electronPrecisionRec]) precisionElectronViewsMaker.ViewNodeName = "electronPrecisionInViewAlgs" electronPrecisionAthSequence = seqAND("electronPrecisionAthSequence", [precisionElectronViewsMaker, electronPrecisionInViewAlgs ] ) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionTrackingSequenceSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionTrackingSequenceSetup.py new file mode 100644 index 0000000000000000000000000000000000000000..eb980e7ea8f41d38395527d7aed60c2f89a10f85 --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionTrackingSequenceSetup.py @@ -0,0 +1,54 @@ +# +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# + +from AthenaConfiguration.AllConfigFlags import ConfigFlags + +# menu components +from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, RecoFragmentsPool +from AthenaCommon.CFElements import parOR, seqAND +from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm +from DecisionHandling.DecisionHandlingConf import ViewCreatorInitialROITool + + +def precisionEtcutSequence(ConfigFlags): + """ fourth step: precision electron.....""" + InViewRoIs = "precisionEtcut" + # EVCreator: + precisionEtcutViewsMaker = EventViewCreatorAlgorithm("IMprecisionEtcut") + precisionEtcutViewsMaker.RoIsLink = "initialRoI" + precisionEtcutViewsMaker.RoITool = ViewCreatorInitialROITool() + precisionEtcutViewsMaker.InViewRoIs = InViewRoIs + precisionEtcutViewsMaker.Views = "precisionEtcutViews" + precisionEtcutViewsMaker.ViewFallThrough = True + precisionEtcutViewsMaker.RequireParentView = True + + from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloSequenceSetup import precisionCaloMenuDefs + + # calling precision tracking + from TriggerMenuMT.HLTMenuConfig.Electron.PrecisionTrackSequences import precisionTracking + precisionTrackInViewSequence, trackparticles = precisionTracking(InViewRoIs, precisionCaloMenuDefs.precisionCaloClusters) + + precisionEtcutInViewAlgs = parOR("precisionEtcutInViewAlgs", [precisionTrackInViewSequence]) + precisionEtcutViewsMaker.ViewNodeName = "precisionEtcutInViewAlgs" + + # connect EVC and reco + theSequence = seqAND("precisionEtcutSequence", [precisionEtcutViewsMaker, precisionEtcutInViewAlgs] ) + return (theSequence,precisionEtcutViewsMaker,precisionCaloMenuDefs.precisionCaloClusters,trackparticles) + +def precisionTrackingMenuSequence(name): + """ Creates precisionCalo MENU sequence """ + (sequence, precisionEtcutViewsMaker, caloclusters, trackparticles) = RecoFragmentsPool.retrieve(precisionEtcutSequence, ConfigFlags) + + #Hypo + from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaPrecisionEtcutHypoAlgMT + from TrigEgammaHypo.TrigEgammaPrecisionEtcutHypoTool import TrigEgammaPrecisionEtcutHypoToolFromDict + + thePrecisionEtcutHypo = TrigEgammaPrecisionEtcutHypoAlgMT(name+"precisionEtcutHypo") + thePrecisionEtcutHypo.CaloClusters = caloclusters + + return MenuSequence( Sequence = sequence, + Maker = precisionEtcutViewsMaker, + Hypo = thePrecisionEtcutHypo, + HypoToolGen = TrigEgammaPrecisionEtcutHypoToolFromDict) + diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py index eb8980e28dd4adec6584bec15be0ccdad3deef6a..d5d7844d53e338bed1d3fad8367a79ecd2594192 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py @@ -3,7 +3,6 @@ # from AthenaCommon.CFElements import parOR -from AthenaCommon.GlobalFlags import globalflags #logging from AthenaCommon.Logging import logging @@ -21,66 +20,34 @@ def precisionElectronRecoSequence(RoIs): """ log.debug('precisionElectronRecoSequence(RoIs = %s)',RoIs) - + + import AthenaCommon.CfgMgr as CfgMgr # First the data verifiers: # Here we define the data dependencies. What input needs to be available for the Fexs (i.e. TopoClusters from precisionCalo) in order to run from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloSequenceSetup import precisionCaloMenuDefs - import AthenaCommon.CfgMgr as CfgMgr - - - from TrigInDetConfig.ConfigSettings import getInDetTrigConfig - IDTrigConfig = getInDetTrigConfig( 'electron' ) - - ## Taking Fast Track information computed in 2nd step ## - #TrackCollection = IDTrigConfig.FT().trkTracksFTF() - ViewVerifyTrk = CfgMgr.AthViews__ViewDataVerifier("FastTrackViewDataVerifier") - ViewVerifyTrk.DataObjects = [ #( 'TrackCollection' , 'StoreGateSvc+' + TrackCollection ), - ( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+' + precisionCaloMenuDefs.precisionCaloClusters ), - ( 'CaloCellContainer' , 'StoreGateSvc+CaloCells' ), - ( 'SG::AuxElement' , 'StoreGateSvc+EventInfo.AveIntPerXDecor' ), - ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' ), - ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+precisionElectron' ), - ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ), - ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' )] # the load below doesn't always work - - # These objects must be loaded from SGIL if not from CondInputLoader - from AthenaCommon.AlgSequence import AlgSequence - topSequence = AlgSequence() - if globalflags.InputFormat.is_bytestream(): - ViewVerifyTrk.DataObjects += [( 'IDCInDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ), - ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' )] - else: - topSequence.SGInputLoader.Load += [( 'TRT_RDO_Container' , 'StoreGateSvc+TRT_RDOs' )] - ViewVerifyTrk.DataObjects += [( 'TRT_RDO_Container' , 'StoreGateSvc+TRT_RDOs' )] + # precision Tracking related data dependencies + from TriggerMenuMT.HLTMenuConfig.Egamma.EgammaDefs import TrigEgammaKeys - """ Precision Track Related Setup.... """ - PTAlgs = [] - PTTracks = [] - PTTrackParticles = [] + ViewVerifyTrk = CfgMgr.AthViews__ViewDataVerifier("PrecisionTrackViewDataVerifier") - from TrigInDetConfig.InDetPT import makeInDetPrecisionTracking + ViewVerifyTrk.DataObjects = [( 'CaloCellContainer' , 'StoreGateSvc+CaloCells' ), + ( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+' + precisionCaloMenuDefs.precisionCaloClusters ), + ( 'xAOD::TrackParticleContainer','StoreGateSvc+' + TrigEgammaKeys.TrigElectronTracksCollectionName)] - PTTracks, PTTrackParticles, PTAlgs = makeInDetPrecisionTracking( config = IDTrigConfig, verifier = ViewVerifyTrk, rois= RoIs ) - PTSeq = parOR("precisionTrackingInElectrons", PTAlgs) - trackParticles = PTTrackParticles[-1] - - electronPrecisionTrack = parOR("electronPrecisionTrack") - electronPrecisionTrack += ViewVerifyTrk - electronPrecisionTrack += PTSeq """ Retrieve the factories now """ from TriggerMenuMT.HLTMenuConfig.Electron.TrigElectronFactories import TrigEgammaRecElectron, TrigElectronSuperClusterBuilder, TrigTopoEgammaElectronCfg from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaFactories import TrigEMTrackMatchBuilder - - + #The sequence of these algorithms thesequence = parOR( "precisionElectron_"+RoIs) + thesequence += ViewVerifyTrk # Create the sequence of three steps: # - TrigEgammaRecElectron, TrigElectronSuperClusterBuilder, TrigTopoEgammaElectron trackMatchBuilder = TrigEMTrackMatchBuilder() - trackMatchBuilder.TrackParticlesName = trackParticles + trackMatchBuilder.TrackParticlesName = TrigEgammaKeys.TrigElectronTracksCollectionName TrigEgammaAlgo = TrigEgammaRecElectron() TrigEgammaAlgo.InputTopoClusterContainerName = precisionCaloMenuDefs.precisionCaloClusters @@ -107,4 +74,10 @@ def precisionElectronRecoSequence(RoIs): PrecisionElectronRecoMonAlgo.ElectronKey = trigTopoEgammaAlgo.ElectronOutputName thesequence += PrecisionElectronRecoMonAlgo - return (thesequence, electronPrecisionTrack, collectionOut) + #online monitoring for TrigElectronSuperClusterBuilder + from TriggerMenuMT.HLTMenuConfig.Electron.TrigElectronFactories import PrecisionElectronSuperClusterMonitorCfg + PrecisionElectronSuperClusterMonAlgo = PrecisionElectronSuperClusterMonitorCfg() + PrecisionElectronSuperClusterMonAlgo.InputEgammaRecContainerName = trigElectronAlgo.SuperElectronRecCollectionName + thesequence += PrecisionElectronSuperClusterMonAlgo + + return (thesequence, collectionOut) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackSequences.py new file mode 100644 index 0000000000000000000000000000000000000000..23a68d142cf5dba8780bb416a107223713156c1a --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackSequences.py @@ -0,0 +1,60 @@ +# +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# + +from AthenaCommon.CFElements import parOR +from AthenaCommon.GlobalFlags import globalflags +import AthenaCommon.CfgMgr as CfgMgr + +#logging +from AthenaCommon.Logging import logging +log = logging.getLogger( 'TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionTracking') +#from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloSequenceSetup import precisionCaloMenuDefs + +from TriggerMenuMT.HLTMenuConfig.Egamma.EgammaDefs import TrigEgammaKeys + +def precisionTracking(RoIs, precisionCaloClusters): +## Taking Fast Track information computed in 2nd step ## + from TrigInDetConfig.ConfigSettings import getInDetTrigConfig + IDTrigConfig = getInDetTrigConfig( 'electron' ) + + # TrackCollection="TrigFastTrackFinder_Tracks_Electron" + ViewVerifyTrk = CfgMgr.AthViews__ViewDataVerifier("FastTrackViewDataVerifier") + + ViewVerifyTrk.DataObjects = [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+precisionEtcut' ), + ( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+' + precisionCaloClusters ), + ( 'CaloCellContainer' , 'StoreGateSvc+CaloCells' ), + ( 'SG::AuxElement' , 'StoreGateSvc+EventInfo.AveIntPerXDecor' ), + ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' ), + ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+precisionElectron' ), + ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ), + ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' )] + + # These objects must be loaded from SGIL if not from CondInputLoader + from AthenaCommon.AlgSequence import AlgSequence + topSequence = AlgSequence() + if globalflags.InputFormat.is_bytestream(): + ViewVerifyTrk.DataObjects += [( 'IDCInDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ), + ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' )] + else: + topSequence.SGInputLoader.Load += [( 'TRT_RDO_Container' , 'StoreGateSvc+TRT_RDOs' )] + ViewVerifyTrk.DataObjects += [( 'TRT_RDO_Container' , 'StoreGateSvc+TRT_RDOs' )] + + """ Precision Track Related Setup.... """ + PTAlgs = [] + PTTracks = [] + PTTrackParticles = [] + + from TrigInDetConfig.InDetPT import makeInDetPrecisionTracking + + PTTracks, PTTrackParticles, PTAlgs = makeInDetPrecisionTracking( config = IDTrigConfig, verifier = ViewVerifyTrk, rois= RoIs ) + PTSeq = parOR("precisionTrackingInElectrons", PTAlgs) + #trackParticles = PTTrackParticles[-1] + trackParticles = TrigEgammaKeys.TrigElectronTracksCollectionName + + electronPrecisionTrack = parOR("electronPrecisionTrack") + electronPrecisionTrack += ViewVerifyTrk + electronPrecisionTrack += PTSeq + + return electronPrecisionTrack, trackParticles + diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigElectronFactories.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigElectronFactories.py index 9e30a0ab3c534a5ab5ff93a4e50a3e4361730720..495e90915de4713b0a28166b4ffe01adf004f4a5 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigElectronFactories.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigElectronFactories.py @@ -85,4 +85,19 @@ def PrecisionElectronTopoMonitorCfg(name = 'PrecisionElectronTopoEgammaBuilder') MonTool = monTool ) - return PrecisionElectronTopoMonitor() \ No newline at end of file + return PrecisionElectronTopoMonitor() + +def PrecisionElectronSuperClusterMonitorCfg(name = 'PrecisionElectronSuperClusterBuilder'): + + from TrigEgammaMonitoring import TrigEgammaMonitoringConf + from TrigEgammaMonitoring.egammaMonitorPrecisionConfig import egammaMonitorSuperClusterCfg + monTool = egammaMonitorSuperClusterCfg(name) + + PrecisionElectronSuperClusterMonitor = AlgFactory( TrigEgammaMonitoringConf.egammaMonitorSuperClusterAlgorithm, + name = name, + doAdd = False, + InputEgammaRecContainerName = TrigEgammaKeys.EgammaRecKey, + MonTool = monTool + ) + + return PrecisionElectronSuperClusterMonitor() diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/generateElectron.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/generateElectron.py index 553fbbb9de38512dbbdf12b145a75a9c8620c9e3..213ae8b8304f12b10a05acab4b536a08245438f9 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/generateElectron.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/generateElectron.py @@ -44,8 +44,9 @@ def generateChains( flags, chainDict ): CA = accCalo) accCalo.printConfig() - + # this cannot work for asymmetric combined chains....FP fastCaloStep = ChainStep(name=firstStepName, Sequences=[fastCaloSequence], chainDicts=[chainDict], multiplicity=getChainMultFromDict(chainDict)) + secondStepName = 'ElectronFTF' diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainDictTools.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainDictTools.py index eadbcb44b6f8147790f5877dd795f0f59c6655ad..8f92069262badb3f004d8fc5ffb218adced909b0 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainDictTools.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainDictTools.py @@ -86,7 +86,7 @@ def splitInterSignatureChainDict(chainDict): return listOfSplitChainDicts -# maybe obsolete? + def splitChainDict(chainDict): listOfChainDicts = [] for chainPart in chainDict['chainParts']: @@ -95,10 +95,22 @@ def splitChainDict(chainDict): listOfChainDicts += [newChainDict] return listOfChainDicts +def splitChainDictInLegs(chainDict): + from TrigCompositeUtils.TrigCompositeUtils import legName + if len(chainDict['chainParts']) ==1: + return [chainDict] + chainName= chainDict['chainName'] + listOfChainDicts = [] + for count, chainDictPart in enumerate(chainDict['chainParts']): + onePartChainDict = deepcopy( chainDict ) + onePartChainDict['chainParts'] = [ chainDictPart ] + onePartChainDict['chainName'] = legName(chainName, count) + listOfChainDicts += [onePartChainDict] + return listOfChainDicts -def splitChainInDict(chainName): +def splitChainInLegs(chainName): from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import TriggerConfigHLT from TrigCompositeUtils.TrigCompositeUtils import legName chainDict = TriggerConfigHLT.getChainDictFromChainName(chainName) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainMerging.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainMerging.py index be17ad84a14a497e88861554c66f4ab1b08026b2..d0e5832554b1a68d3b789f5b7700bce9641be7eb 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainMerging.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainMerging.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon.Logging import logging log = logging.getLogger( __name__ ) @@ -68,7 +68,7 @@ def mergeParallel(chainDefList, offset): chainName = '' l1Thresholds = [] alignmentGroups = [] - + for cConfig in chainDefList: if chainName == '': chainName = cConfig.name @@ -109,12 +109,12 @@ def mergeParallel(chainDefList, offset): return combinedChainDef -def getEmptySeqName(stepName, chain_index, step_number): +def getEmptySeqName(stepName, chain_index, step_number, alignGroup): #remove redundant instances of StepN if re.search('^Step[0-9]_',stepName): stepName = stepName[6:] - seqName = 'EmptySeq'+str(step_number)+ '_'+ stepName + '_leg' + str(chain_index) + seqName = 'Empty'+ alignGroup +'Seq'+str(step_number)+ '_'+ stepName + '_leg' + str(chain_index) return seqName @@ -122,7 +122,7 @@ def getEmptyMenuSequence(flags, name): return EmptyMenuSequence(name) -def serial_zip(allSteps, chainName): +def serial_zip(allSteps, chainName, chainDefList): n_chains = len(allSteps) newsteps = [] for chain_index, chainsteps in enumerate(allSteps): @@ -138,9 +138,9 @@ def serial_zip(allSteps, chainName): # all other steps should contain an empty sequence for step_index2, emptyStep in enumerate(stepList): if emptyStep is None: - seqName = getEmptySeqName(step.name, chain_index, step_index+1) + seqName = getEmptySeqName(step.name, chain_index, step_index+1, chainDefList[0].alignmentGroups[0]) emptySeq = RecoFragmentsPool.retrieve(getEmptyMenuSequence, flags=None, name=seqName) - stepList[step_index2] = ChainStep( seqName, Sequences=[emptySeq], chainDicts=step.chainDicts) + stepList[step_index2] = ChainStep( seqName, Sequences=[emptySeq], chainDicts=step.stepDicts) newsteps.append(stepList) log.debug('After serial_zip') @@ -170,7 +170,7 @@ def mergeSerial(chainDefList): log.error("Merging an already merged chain? This is odd! %s",cConfig.alignmentGroups) alignmentGroups.append(cConfig.alignmentGroups[0]) - serialSteps = serial_zip(allSteps, chainName) + serialSteps = serial_zip(allSteps, chainName,chainDefList) mySerialSteps = deepcopy(serialSteps) combChainSteps =[] for step_index, steps in enumerate(mySerialSteps): @@ -212,14 +212,14 @@ def makeCombinedStep(steps, stepNumber, chainDefList): if step is None: # this happens for merging chains with different numbers of steps, we need to "pad" out with empty sequences to propogate the decisions currentStepName = "Step" + str(stepNumber) + "_Empty" + str(chain_index) - seqName = getEmptySeqName(currentStepName, chain_index, stepNumber) + seqName = getEmptySeqName(currentStepName, chain_index, stepNumber, chainDefList[0].alignmentGroups[0]) log.debug(" step %s, empty sequence %s", currentStepName, seqName) emptySeq = RecoFragmentsPool.retrieve(getEmptyMenuSequence, flags=None, name=seqName) stepSeq.append(emptySeq) stepMult.append(1) # we need a chain dict here, use the one corresponding to this leg of the chain - stepDicts.append(deepcopy(chainDefList[chain_index].steps[-1].chainDicts[-1])) + stepDicts.append(deepcopy(chainDefList[chain_index].steps[-1].stepDicts[-1])) else: # Standard step, append it to the combined step log.debug(" step %s, multiplicity = %s", step.name, str(step.multiplicity)) @@ -242,7 +242,7 @@ def makeCombinedStep(steps, stepNumber, chainDefList): stepMult.append(sum(step.multiplicity)) comboHypoTools.extend(step.comboToolConfs) # update the chain dict list for the combined step with the chain dict from this step - stepDicts += deepcopy(step.chainDicts) + stepDicts += deepcopy(step.stepDicts) # the step naming for combined chains needs to be revisted!! @@ -257,4 +257,3 @@ def makeCombinedStep(steps, stepNumber, chainDefList): return theChainStep - diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/DictFromChainName.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/DictFromChainName.py index 0b03fa560f1eed361c666d2825532ae775b5d55e..057d6f7eef225344288f6875251663b97bbdf2ca 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/DictFromChainName.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/DictFromChainName.py @@ -148,6 +148,7 @@ def getChainMultFromDict(chainDict): Look for all multiplicities stored in chains """ allMultis = [] + for cpart in chainDict['chainParts']: if cpart['multiplicity'] != '': allMultis.append( int(cpart['multiplicity'])) @@ -230,6 +231,7 @@ def analyseChainName(chainName, L1thresholds, L1item): 'trigType': sigToken, 'extra': ''} mdicts.append( groupdict ) + log.debug("chain parts: %s", cparts) for cpart in cparts: @@ -252,13 +254,13 @@ def analyseChainName(chainName, L1thresholds, L1item): if theMultiChainIndex not in multichainindex: multichainindex.append(theMultiChainIndex) - log.debug("HLTChainName: %s", hltChainName) - log.debug("HLTChainNameShort: %s", hltChainNameShort) - log.debug("cpart: %s", cpart) - log.debug("groupdict: %s", groupdict) - log.debug("multichainindex: %s", multichainindex) + log.debug("HLTChainName: %s", hltChainName) + log.debug("HLTChainNameShort: %s", hltChainNameShort) + log.debug("cpart: %s", cpart) + log.debug("groupdict: %s", groupdict) + log.debug("multichainindex: %s", multichainindex) - sName = getSignatureNameFromToken(cpart) + sName = getSignatureNameFromToken(cpart) groupdict['signature'] = sName groupdict['alignmentGroup'] = getAlignmentGroupFromPattern(sName, groupdict['extra']) @@ -501,7 +503,7 @@ def dictFromChainName(chainInfo): mergingOffset = chainInfo.mergingOffset mergingOrder = chainInfo.mergingOrder topoStartFrom = chainInfo.topoStartFrom - + else: assert True, "Format of chainInfo passed to genChainDict not known" diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py index f60279990189dfce42b2952e8bdb11ceb9b74a9e..e67017394db74b71353750ba8319288a414aba0f 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py @@ -460,7 +460,7 @@ class GenerateMenuMT(object): eventBuildType = mainChainDict['eventBuildType'] if eventBuildType: log.debug('Configuring event building sequence %s for chain %s', eventBuildType, mainChainDict['chainName']) - EventBuildingSequenceSetup.addEventBuildingSequence(theChainConfig, eventBuildType) + EventBuildingSequenceSetup.addEventBuildingSequence(theChainConfig, eventBuildType, mainChainDict) log.debug('ChainConfigs %s ', theChainConfig) return theChainConfig,lengthOfChainConfigs diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py index 8cb1cb454e15cb34937d47a02aa9895b36a8e518..ec70259e6dde23460acb921ae7180c127533f1fd 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py @@ -377,10 +377,11 @@ def createDataFlow(chains, allDicts): log.debug("\n Configuring chain %s with %d steps: \n - %s ", chain.name,len(chain.steps),'\n - '.join(map(str, [{step.name:step.multiplicity} for step in chain.steps]))) lastCFseq = None + lastDecisions = [] for nstep, chainStep in enumerate( chain.steps ): log.debug("\n************* Start connecting step %d %s for chain %s", nstep+1, chainStep.name, chain.name) - filterInput = chain.L1decisions if nstep == 0 else lastCFseq.decisions + filterInput = chain.L1decisions if nstep == 0 else lastDecisions log.debug("Seeds added; having in the filter now: %s", filterInput) @@ -392,8 +393,9 @@ def createDataFlow(chains, allDicts): sequenceFilter= None filterName = CFNaming.filterName(chainStep.name) filterOutput =[ CFNaming.filterOutName(filterName, inputName) for inputName in filterInput ] - log.debug("Filter outputps: %s", filterOutput) +# log.debug("Filter outputps: %s", filterOutput) +# note: can use (foundFilter, foundCFSeq) = findCFSequences(filterName, CFseqList[nstep]) log.debug("Found %d CF sequences with filter name %s", foundFilter, filterName) # add error if more than one @@ -402,23 +404,28 @@ def createDataFlow(chains, allDicts): CFseq = CFSequence( ChainStep=chainStep, FilterAlg=sequenceFilter) CFseq.connect(filterOutput) CFseqList[nstep].append(CFseq) + lastDecisions=CFseq.decisions lastCFseq=CFseq else: if len(foundCFSeq) > 1: log.error("Found more than one seuqences containig this filter %s", filterName) lastCFseq=foundCFSeq[0] sequenceFilter=lastCFseq.filter - lastCFseq.connect(filterOutput) + #lastCFseq.connect(filterOutput) [ sequenceFilter.addInput(inputName) for inputName in filterInput ] [ sequenceFilter.addOutput(outputName) for outputName in filterOutput ] - + lastCFseq.connect(filterOutput) + if chainStep.isEmpty: + lastDecisions=filterOutput + else: + lastDecisions=lastCFseq.decisions # add chains to the filter: - chainLegs = chain.getChainLegs() + chainLegs = chainStep.getChainLegs() for leg in chainLegs: sequenceFilter.addChain(leg) log.debug("Adding chain %s to %s", leg, sequenceFilter.Alg.name()) - log.debug("Now Filter has chains: %s", sequenceFilter.getChains()) +# log.debug("Now Filter has chains: %s", sequenceFilter.getChains()) if chainStep.isCombo: if chainStep.combo is not None: @@ -427,7 +434,7 @@ def createDataFlow(chains, allDicts): if len(chain.steps) == nstep+1: log.debug("Adding finalDecisions for chain %s at step %d:", chain.name, nstep+1) - for dec in lastCFseq.decisions: + for dec in lastDecisions: finalDecisions[nstep].append(dec) log.debug(dec) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py index 7e2c2389efc8c8dfc386cab8cd3f4743a90455b4..2e2d2bd671a390eb29e6e4dcf9fcfd7ec8339eba 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py @@ -4,7 +4,7 @@ from AthenaCommon.CFElements import findAllAlgorithms, parOR, seqAND, isSequence from AthenaCommon.Logging import logging from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory -from TriggerMenuMT.HLTMenuConfig.Menu.ChainDictTools import splitChainInDict +from TriggerMenuMT.HLTMenuConfig.Menu.ChainDictTools import splitChainInLegs from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import (isComboHypoAlg, isFilterAlg, isHypoAlg, @@ -380,8 +380,8 @@ def generateDecisionTree(chains): hypoAlg.HypoTools.append( step.sequences[sequenceCounter]._hypoToolConf.confAndCreate( chainDict ) ) pass - chainDictLegs = splitChainInDict( chain.name ) - # possible cases: A) number of seqeunces == number of chain parts, e5_mu10 or just e3 type of chain + chainDictLegs = splitChainInLegs( chain.name ) + # possible cases: A) number of seqeunces == number of chain parts, e5_mu10 or just e3 type of chain # ([0, 1], [0, 1]) is the set of indices indices = zip( range( len( step.sequences ) ), range( len( chainDictLegs ) ) )# case A # B) number of sequences == 1 && number of chain parts > 1 for single signature assymetric combined chains e5_e3 type chain @@ -408,6 +408,7 @@ def generateDecisionTree(chains): for comboToolConf in step.comboToolConfs: comboHypoAlg.ComboHypoTools.append( comboToolConf.confAndCreate( TriggerConfigHLT.getChainDictFromChainName( chain.name ) ) ) + for chain in chains: log.info( "CF algorithms for chain {}".format(chain.name)) for stepCounter, step in enumerate( chain.steps, 1 ): diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFDot.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFDot.py index 4b26e7a96473f90d660f5bee971a6cf489dd24a7..2838ac1a876a5269941d0219d877fbffd84c4ffa 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFDot.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFDot.py @@ -139,7 +139,9 @@ def all_DataFlow_to_dot(name, step_list): file.write(' }\n') file.write(findConnections(cfseq_algs)) file.write('\n') - + +# print ("Step connections: ") +# print (step_connections) file.write(findConnections(step_connections)) nstep+=1 @@ -208,7 +210,7 @@ def findConnections(alg_list): if len(dataIntersection) > 0: for line in dataIntersection: lineconnect+=addConnection(compName(nodeA.Alg), compName(nodeB.Alg), line) -# print "Data connections between %s and %s: %s"%(nodeA.Alg.getName(), nodeB.Alg.getName(), line) +# print ("Data connections between ", compName(nodeA.Alg)," and ",compName(nodeB.Alg) ,": ", line) return lineconnect diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py index 974b487c5df17f95abf8a3a1861408e7b16e7f1d..9ebc172df62bb77a7e428a94c8c0722e5e8408c8 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py @@ -95,6 +95,7 @@ def __generateJSON( chainDicts, chainConfigs, HLTAllSteps, menuName, fileName ): # Find L1 Threshold information for current chain l1Thresholds = [] + [ l1Thresholds.append(p['L1threshold']) for p in chain['chainParts'] ] # Now have all information to write the chain to the menu dictionary @@ -102,6 +103,7 @@ def __generateJSON( chainDicts, chainConfigs, HLTAllSteps, menuName, fileName ): menuDict["chains"][chainName] = odict([ ("counter", chain["chainCounter"]), ("nameHash", chain["chainNameHash"]), + ("legMultiplicities", chain["chainMultiplicities"]), ("l1item", chain["L1item"]), ("l1thresholds", l1Thresholds), ("groups", chain["groups"]), diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_emu_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_emu_v1.py index ff1bf431be0d9fca50faa4faba99600170e95b2d..76de91628711dbf65ed6846589f2c1bfc8eb136d 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_emu_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_emu_v1.py @@ -43,15 +43,15 @@ def setupMenu(): ChainProp(name='HLT_TestChain5_gv1_L1EM7', stream=['Main'], groups=['RATE:Test','BW:Other'] ), # combined - ChainProp(name='HLT_TestChain6_muv1_TestChain10_ev1_L1MU6_EM5', stream=['Main'], groups=['RATE:Test','BW:Other'], mergingStrategy = 'parallel' ), - ChainProp(name='HLT_TestChain6_muv2_TestChain8_ev2_L1MU6_EM5', stream=['Main'], groups=['RATE:Test','BW:Other'], mergingStrategy = 'parallel' ), + ChainProp(name='HLT_TestChain6_muv1_TestChain10_ev1_L1MU6_EM5', stream=['Main'], groups=['RATE:Test','BW:Other'], mergingStrategy = 'parallel'), + ChainProp(name='HLT_TestChain6_muv2_TestChain8_ev2_L1MU6_EM5', stream=['Main'], groups=['RATE:Test','BW:Other'], mergingStrategy = 'parallel'), ChainProp(name='HLT_TestChain5_ev1_TestChain8_ev1_L12EM3', stream=['Main'], groups=['RATE:Test','BW:Other'], mergingStrategy = 'parallel'), # ChainProp(name='HLT_TestChain5_ev1_TestChain8_ev1_2TestChain6_muv1_L1EM3_L1EM5_L12MU6', stream=['Main'], groups=['RATE:Test','BW:Other'] ), ChainProp(name='HLT_2TestChain6_muv1_L12MU6', stream=['Main'], groups=['RATE:Test','BW:Other'] ), ChainProp(name='HLT_3TestChain6_muv1_L12MU6', stream=['Main'], groups=['RATE:Test','BW:Other'] ), - ChainProp(name='HLT_TestChain6_muv1_TestChain10_muv1_L12MU6', stream=['Main'], groups=['RATE:Test','BW:Other'], mergingStrategy = 'parallel' ), - ChainProp(name='HLT_2TestChain6_muEmpty1_L12MU6', stream=['Main'], groups=['RATE:Test','BW:Other'], mergingStrategy = 'parallel'), #may differ from manual - ChainProp(name='HLT_TestChain6_muv1_TestChain5_ev1dr_L1MU6_EM5', stream=['Main'], groups=['RATE:Test','BW:Other'], mergingStrategy = 'parallel' ), + ChainProp(name='HLT_TestChain6_muv1_TestChain10_muv1_L12MU6', stream=['Main'], groups=['RATE:Test','BW:Other'], mergingStrategy = 'parallel' ), + ChainProp(name='HLT_2TestChain6_muEmpty1_L12MU6', stream=['Main'], groups=['RATE:Test','BW:Other']), #may differ from manual + ChainProp(name='HLT_TestChain6_muv1_TestChain5_ev1dr_L1MU6_EM5', stream=['Main'], groups=['RATE:Test','BW:Other'], mergingStrategy = 'parallel'), ChainProp(name='HLT_2TestChain4_muv1dr_L12MU6', stream=['Main'], groups=['RATE:Test','BW:Other'] ), # FSNOSEED not implemented in emulation diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py index a3fa68e0d9546f67975f3b084027778aac91cdbe..eb2542b957fad431fae6b10f4ff05e8a5d4a7292 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py @@ -116,6 +116,8 @@ def setupMenu(): # Primary ChainProp(name='HLT_e17_lhvloose_nod0_L1EM15VH', groups=SingleElectronGroup), ChainProp(name='HLT_e24_lhvloose_L1EM20VH', groups=SingleElectronGroup), + ChainProp(name='HLT_e26_lhloose_L1EM22VHI', groups=SingleElectronGroup), + ChainProp(name='HLT_e26_lhmedium_L1EM22VHI', groups=SingleElectronGroup), ChainProp(name='HLT_e26_lhtight_L1EM22VHI', groups=SingleElectronGroup), #ChainProp(name='HLT_e26_lhtight_gsf_L1EM22VHI', groups=SingleElectronGroup), Placeholder for GSF chain ChainProp(name='HLT_e26_lhtight_ivarloose_L1EM22VHI', groups=SingleElectronGroup), @@ -151,6 +153,8 @@ def setupMenu(): ChainProp(name='HLT_g25_medium_L1EM20VH', groups=SinglePhotonGroup), ChainProp(name='HLT_g25_tight_L1EM20VH', groups=SinglePhotonGroup), ChainProp(name='HLT_g22_tight_L1EM15VH', groups=SinglePhotonGroup), + ChainProp(name='HLT_g20_loose_L1EM15VH', groups=SinglePhotonGroup), + ChainProp(name='HLT_g20_medium_L1EM15VH', groups=SinglePhotonGroup), ChainProp(name='HLT_g20_tight_L1EM15VH', groups=SinglePhotonGroup), ChainProp(name='HLT_g20_tight_icaloloose_L1EM15VH', groups=SinglePhotonGroup), ChainProp(name='HLT_g20_tight_icalomedium_L1EM15VH', groups=SinglePhotonGroup), @@ -395,7 +399,8 @@ def setupMenu(): # ChainProp(name='HLT_mb_sp600_trk45_hmt_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup), ] TriggerFlags.CalibSlice.signatures = TriggerFlags.CalibSlice.signatures() + [ - ChainProp(name='HLT_alfacalib_AlfaPEB_L1ALFA_ANY', l1SeedThresholds=['FSNOSEED'], stream=['ALFACalib'], groups=['RATE:ALFACalibration','BW:Detector']) + ChainProp(name='HLT_alfacalib_AlfaPEB_L1ALFA_ANY', l1SeedThresholds=['FSNOSEED'], stream=['ALFACalib'], groups=['RATE:ALFACalibration','BW:Detector']), + #ChainProp(name='HLT_larnoiseburst_L1All', l1SeedThresholds=['FSNOSEED'], stream=['DISCARD'], groups=['Online', 'RATE:DISCARD', 'BW:DISCARD']) ] TriggerFlags.CosmicSlice.signatures = TriggerFlags.CosmicSlice.signatures() + [ ] @@ -408,7 +413,6 @@ def setupMenu(): TriggerFlags.MonitorSlice.signatures = TriggerFlags.MonitorSlice.signatures() + [ ChainProp(name='HLT_cscmon_CSCPEB_L1All', l1SeedThresholds=['FSNOSEED'], stream=['CSC'], groups=['RATE:Monitoring','BW:Other']), - ] # Random Seeded EB chains which select at the HLT based on L1 TBP bits diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py index 0a7a417ca28766c2c0236b7cb09d5f18ba3bc273..1e95b4e6f7087133c734d574701bb0ba72279945 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py @@ -52,7 +52,8 @@ def setupMenu(flags): flags.Trigger.menu.electron = [ ChainProp(name='HLT_e3_etcut_L1EM3', groups=SingleElectronGroup), ChainProp(name='HLT_2e3_etcut_L12EM3', groups=MultiElectronGroup), - ChainProp(name='HLT_e5_etcut_e3_etcut_L12EM3', groups=MultiElectronGroup), +# this chain does not work yet + # ChainProp(name='HLT_e5_etcut_e3_etcut_L12EM3', groups=MultiElectronGroup), ChainProp(name='HLT_e5_etcut_L1EM3', groups=SingleElectronGroup), ChainProp(name='HLT_e7_etcut_L1EM7', groups=SingleElectronGroup) ] diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuAlignmentTools.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuAlignmentTools.py index 7ec9ed562c2443cdfac1903a93f97c90249aabdc..4ec9960baa200040c759335b03260a11aeff39fd 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuAlignmentTools.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuAlignmentTools.py @@ -193,7 +193,7 @@ class MenuAlignment(): aligngroups_set.reverse() for align_grp_to_align in aligngroups_set: - chainConfig.insertEmptySteps(chainDict,'Empty'+align_grp_to_align+'Align',self.length_of_configs[align_grp_to_align],0) + chainConfig.insertEmptySteps('Empty'+align_grp_to_align+'Align',self.length_of_configs[align_grp_to_align],0) log.debug("Finished with retrieving chain configuration for chain %s", chainDict['chainName']) chainConfig.numberAllSteps() @@ -233,7 +233,7 @@ class MenuAlignment(): if length_firstgrp < max_length_firstgrp: #too short! need to add padding steps between two alignment groups... needed_steps = max_length_firstgrp - length_firstgrp - chainConfig.insertEmptySteps(chainDict,'Empty'+self.sets_to_align[alignment_grps[0]][0]+'Align',needed_steps,length_firstgrp) + chainConfig.insertEmptySteps('Empty'+self.sets_to_align[alignment_grps[0]][0]+'Align',needed_steps,length_firstgrp) elif length_firstgrp > max_length_firstgrp: log.error("%s first signature length %d is greater than the max calculated, %d",chainDict.name,length_firstgrp, max_length_firstgrp) @@ -279,11 +279,11 @@ class MenuAlignment(): #too short! gotta add padding steps between two alignmentGroups... needed_steps = max_length_grp - length_in_chain start_step = n_steps_before_grp + length_in_chain - chainConfig.insertEmptySteps(chainDict,'Empty'+align_grp+'Align',needed_steps,start_step) + chainConfig.insertEmptySteps('Empty'+align_grp+'Align',needed_steps,start_step) else: # this sig isn't in the chain, but we still will need empty steps for it # always add them to the start, because we're running in reverse order - chainConfig.insertEmptySteps(chainDict,'Empty'+align_grp+'Align',self.length_of_configs[align_grp],n_steps_before_grp) + chainConfig.insertEmptySteps('Empty'+align_grp+'Align',self.length_of_configs[align_grp],n_steps_before_grp) else: log.error("Should never reach this point. alignmentGroups: %s, sets_to_align: %s",alignment_grps,self.sets_to_align) raise Exception("MenuAlignment.multi_align() needs checking, this should never happen.") diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py index a03c5f1820fec691f667ea407ef5aef7a004a304..f21f12636640ad92e714ccb80070a4d5b16974ce 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py @@ -176,8 +176,6 @@ class HypoAlgNode(AlgNode): log.error("Hypo " + self.name +" has already %s as configured output: you may want to duplicate the Hypo!" + outputs[0]) - - def addHypoTool (self, hypoToolConf): log.debug(" Adding HypoTool %s to %s", hypoToolConf.chainDict['chainName'], compName(self.Alg)) if hypoToolConf.chainDict['chainName'] not in self.tools: @@ -274,14 +272,16 @@ class ComboMaker(AlgNode): def createComboHypoTools(self, chainDict, comboToolConfs): - """Created the ComboHypoTools""" - if not len(comboToolConfs): - return - confs = [ HypoToolConf( tool ) for tool in comboToolConfs ] - log.debug("ComboMaker.createComboHypoTools for chain %s, Alg %s with %d tools", chainDict["chainName"],self.Alg.getName(), len(comboToolConfs)) - for conf in confs: - tools = self.Alg.ComboHypoTools - self.Alg.ComboHypoTools = tools + [ conf.confAndCreate( chainDict ) ] + """Created the ComboHypoTools""" + if not len(comboToolConfs): + return + confs = [ HypoToolConf( tool ) for tool in comboToolConfs ] + log.debug("ComboMaker.createComboHypoTools for chain %s, Alg %s with %d tools", chainDict["chainName"],self.Alg.getName(), len(comboToolConfs)) + for conf in confs: + tools = self.Alg.ComboHypoTools + self.Alg.ComboHypoTools = tools + [ conf.confAndCreate( chainDict ) ] + + ######################################################### @@ -531,6 +531,7 @@ class Chain(object): self.alignmentGroups = alignmentGroups self.vseeds=L1Thresholds + from L1Decoder.L1DecoderConfig import mapThresholdToL1DecisionCollection # L1decisions are used to set the seed type (EM, MU,JET), removing the actual threshold # in practice it is the L1Decoder Decision output @@ -558,7 +559,7 @@ class Chain(object): step.name = 'Step%d_'%(stepID+1)+step_name return - def insertEmptySteps(self, chainDict, empty_step_name, n_new_steps, start_position): + def insertEmptySteps(self, empty_step_name, n_new_steps, start_position): #start position indexed from 0. if start position is 3 and length is 2, it works like: # [old1,old2,old3,old4,old5,old6] ==> [old1,old2,old3,empty1,empty2,old4,old5,old6] import re @@ -575,24 +576,29 @@ class Chain(object): next_step_name = '' prev_step_name = '' + # copy the same dictionary as the last step, which else? + prev_chain_dict = [] if start_position == 0: next_step_name = chain_steps_post_split[0].name if re.search('^Step[0-9]_',next_step_name): next_step_name = next_step_name[6:] prev_step_name = 'empty_'+str(len(self.L1decisions))+'L1in' + prev_chain_dict = chain_steps_post_split[0].stepDicts else: if len(chain_steps_post_split) == 0: log.error("Adding empty steps to the end of a chain - why would you do this?") else: prev_step_name = chain_steps_pre_split[-1].name next_step_name = chain_steps_post_split[0].name + prev_chain_dict = chain_steps_pre_split[-1].stepDicts + steps_to_add = [] for stepID in range(1,n_new_steps+1): new_step_name = prev_step_name+'_'+empty_step_name+'%d_'%stepID+next_step_name log.debug("Configuring empty step " + new_step_name) - steps_to_add += [ChainStep(new_step_name, [], [], [chainDict], comboHypoCfg=ComboHypoCfg)] + steps_to_add += [ChainStep(new_step_name, [], [], chainDicts=prev_chain_dict, comboHypoCfg=ComboHypoCfg)] self.steps = chain_steps_pre_split + steps_to_add + chain_steps_post_split @@ -628,58 +634,21 @@ class Chain(object): seq.setSeed( seed ) log.debug( "setSeedsToSequences: Chain %s adding seed %s to sequence in step %s", self.name, seed, step.name ) - def getChainLegs(self): - """ This is extrapolating the chain legs from the chain dictionary""" - from TriggerMenuMT.HLTMenuConfig.Menu.ChainDictTools import splitChainInDict - listOfChainDictsLegs = splitChainInDict(self.name) - legs = [part['chainName'] for part in listOfChainDictsLegs] - return legs - - + def createHypoTools(self): """ This is extrapolating the hypotool configuration from the chain name""" - log.debug("createHypoTools for chain %s", self.name) - from TriggerMenuMT.HLTMenuConfig.Menu.ChainDictTools import splitChainInDict - - # this spliting is only needed for chains which don't yet attach - # the dictionaries to the chain steps. It should be removed - # later once that migration is done. - listOfChainDictsLegs = splitChainInDict(self.name) + log.debug("createHypoTools for chain %s", self.name) + for step in self.steps: - log.debug("createHypoTools for Step %s", step.name) if len(step.sequences) == 0: continue - - if sum(step.multiplicity) >1 and not step.isCombo: - log.error("This should be an error, because step mult > 1 (%d), but step is not combo", sum(step.multiplicity)) - - if len(step.chainDicts) > 0: - # new way to configure hypo tools, works if the chain dictionaries have been attached to the steps - log.debug('%s in new hypo tool creation method, step mult= %d, isCombo=%d', self.name, sum(step.multiplicity), step.isCombo) - log.debug("N(seq)=%d, N(chainDicts)=%d", len(step.sequences), len(step.chainDicts)) - - assert len(step.sequences)==len(step.chainDicts), "createHypoTools only makes sense if number of sequences == number of chain dicts" - for seq, onePartChainDict in zip(step.sequences, step.chainDicts): - log.debug(' seq: %s, onePartChainDict:', seq.name) - log.debug(' ' + str(onePartChainDict)) - seq.createHypoTools( onePartChainDict ) - - else: - # legacy way, to be removed once all signatures pass the chainDicts to the steps - step_mult = [str(m) for m in step.multiplicity] - log.debug('%s in old hypo tool creation method', self.name) - menu_mult = [ part['chainParts'][0]['multiplicity'] for part in listOfChainDictsLegs ] - if step_mult != menu_mult: - # Probably this shouldn't happen, but it currently does - log.warning("Got multiplicty %s from chain parts, but have %s multiplicity in this step. This is expected only for jet chains, but it has happened for %s, using the first chain dict", menu_mult, step.multiplicity, self.name) - firstChainDict = listOfChainDictsLegs[0] - firstChainDict['chainName']= self.name # rename the chaindict to remove the leg name - for seq in step.sequences: - seq.createHypoTools( firstChainDict ) - else: - # add one hypotool per sequence and chain part - for seq, onePartChainDict in zip(step.sequences, listOfChainDictsLegs): - seq.createHypoTools( onePartChainDict ) + log.debug("createHypoTools for Step %s", step.name) + log.debug('%s in new hypo tool creation method, step mult= %d, isCombo=%d', self.name, sum(step.multiplicity), step.isCombo) + log.debug("N(seq)=%d, N(chainDicts)=%d", len(step.sequences), len(step.stepDicts)) + for seq, onePartChainDict in zip(step.sequences, step.stepDicts): + log.debug(' seq: %s, onePartChainDict:', seq.name) + log.debug(' ' + str(onePartChainDict)) + seq.createHypoTools( onePartChainDict ) step.createComboHypoTools(self.name) @@ -773,6 +742,7 @@ class StepComponent(object): self.multiplicity=multiplicity self.empty=empty +# next: can we remove multiplicity array, if it can be retrieved from the ChainDict? class ChainStep(object): """Class to describe one step of a chain; if multiplicity is greater than 1, the step is combo/combined. Set one multiplicity value per sequence""" def __init__(self, name, Sequences=[], multiplicity=[1], chainDicts=[], comboHypoCfg=ComboHypoCfg, comboToolConfs=[]): @@ -780,24 +750,27 @@ class ChainStep(object): # include cases of emtpy steps with multiplicity = [] or multiplicity=[0,0,0///] if sum(multiplicity)==0: multiplicity=[] - - # This check is commented out (temporarily before can be removed completely) to support signatures wiht one sequence and multiplicty > 1, e.g. HLT_2e3 - # In such case there is only one sequence, however the multiplicty is == 2 - # sanity check on inputs - #if len(Sequences) != len(multiplicity): - # raise RuntimeError("Tried to configure a ChainStep %s with %i Sequences and %i multiplicities. These lists must have the same size" % (name, len(Sequences), len(multiplicity)) ) + else: + # sanity check on inputs, excluding empty steps + if len(Sequences) != len(multiplicity): + raise RuntimeError("Tried to configure a ChainStep %s with %i Sequences and %i multiplicities. These lists must have the same size" % (name, len(Sequences), len(multiplicity)) ) + + if len(Sequences) != len(chainDicts): + raise RuntimeError("Tried to configure a ChainStep %s with %i Sequences and %i dictionaries. These lists must have the same size" % (name, len(Sequences), len(chainDicts)) ) self.name = name self.sequences=Sequences self.multiplicity = multiplicity self.comboHypoCfg=comboHypoCfg self.comboToolConfs=comboToolConfs + self.stepDicts = chainDicts # one dict per leg self.isCombo=sum(multiplicity)>1 + self.isEmpty=sum(multiplicity)==0 self.combo=None - self.chainDicts = chainDicts if self.isCombo: self.makeCombo() - + + def addComboHypoTools(self, tools): self.comboToolConfs.append(tools) @@ -812,6 +785,11 @@ class ChainStep(object): from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import TriggerConfigHLT chainDict = TriggerConfigHLT.getChainDictFromChainName(chainName) self.combo.createComboHypoTools(chainDict, self.comboToolConfs) + + def getChainLegs(self): + """ This is extrapolating the chain legs from the step dictionaries""" + legs = [part['chainName'] for part in self.stepDicts] + return legs def getChainNames(self): if not self.isCombo: @@ -821,20 +799,17 @@ class ChainStep(object): def __repr__(self): if len(self.sequences) == 0: - return "--- ChainStep %s ---\n is Empty, ChainDict = %s "%(self.name, ' '.join(map(str, [dic['chainName'] for dic in self.chainDicts])) ) - if not self.isCombo: - return "--- ChainStep %s ---\n , multiplicity = %d ChainDict = %s \n + MenuSequences = %s "%(self.name, sum(self.multiplicity), ' '.join(map(str, [dic['chainName'] for dic in self.chainDicts])), ' '.join(map(str, [seq.name for seq in self.sequences]) )) - else: - if self.combo: - calg = self.combo.Alg.name() - else: - calg = 'NONE' - return "--- ChainStep %s ---\n + isCombo, multiplicity = %d ChainDict = %s \n + MenuSequences = %s \n + ComboHypo = %s, ComboHypoTools = %s" %\ - (self.name, sum(self.multiplicity), - ' '.join(map(str, [dic['chainName'] for dic in self.chainDicts])), - ' '.join(map(str, [seq.name for seq in self.sequences]) ), - calg, + return "--- ChainStep %s ---\n is Empty, ChainDict = %s "%(self.name, ' '.join(map(str, [dic['chainName'] for dic in self.stepDicts])) ) + + repr_string= "--- ChainStep %s ---\n , multiplicity = %s ChainDict = %s \n + MenuSequences = %s "%\ + (self.name, ' '.join(map(str,[mult for mult in self.multiplicity])), + ' '.join(map(str, [dic['chainName'] for dic in self.stepDicts])), + ' '.join(map(str, [seq.name for seq in self.sequences]) )) + if self.isCombo: + repr_string += "\n+ ComboHypo = %s, ComboHypoTools = %s" %\ + (self.combo.Alg.name(), ' '.join(map(str, [tool.__name__ for tool in self.comboToolConfs]))) + return repr_string def createComboAlg(dummyFlags, name, multiplicity, comboHypoCfg): diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasChainConfiguration.py index f1ca0df55f1b844173d307f46e479f31c08b4f70..1214b696d22898e61c114707bddad089ae1e1e9a 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasChainConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasChainConfiguration.py @@ -6,143 +6,35 @@ log = logging.getLogger( __name__ ) from TriggerMenuMT.HLTMenuConfig.Menu.ChainConfigurationBase import ChainConfigurationBase -from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence -from AthenaCommon.CFElements import parOR -from AthenaCommon.CFElements import seqAND -from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import ChainStep -from TrigInDetConfig.InDetSetup import makeInDetAlgs -from TrigEDMConfig.TriggerEDMRun3 import recordable -from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm -from DecisionHandling.DecisionHandlingConf import ViewCreatorInitialROITool -from AthenaCommon.GlobalFlags import globalflags -from TrigInDetConfig.ConfigSettings import getInDetTrigConfig +from TriggerMenuMT.HLTMenuConfig.MinBias.MinBiasMenuSequences import MinBiasSPSequence, MinBiasTrkSequence + #---------------------------------------------------------------- # fragments generating configuration will be functions in New JO, # so let's make them functions already now #---------------------------------------------------------------- +def MinBiasSPSequenceCfg(flags): + return MinBiasSPSequence() + +def MinBiasTrkSequenceCfg(flags): + return MinBiasTrkSequence() + + class MinBiasChainConfig(ChainConfigurationBase): def __init__(self, chainDict): ChainConfigurationBase.__init__(self,chainDict) - # ---------------------- - # Assemble the chain depending on information from chainName - # ---------------------- + # ---------------------- + # Assemble the chain depending on information from chainName + # ---------------------- def assembleChain(self): log.debug("Assembling chain for " + self.chainName) SpStep = self.getMinBiasSpStep() TrkStep = self.getMinBiasTrkStep() - return self.buildChain([SpStep,TrkStep]) + def getMinBiasSpStep(self): - """ Use the reco-dict to construct a single MinBias step """ - def generateSPCountHypo(chainDict): - hypo = SPCountHypoTool(chainDict["chainName"]) - if "hmt" in chainDict["chainName"]: - hypo.totNumSctSP = int( chainDict["chainParts"][0]["hypoL2Info"].strip("sp") ) - if "mb_sptrk" in chainDict["chainName"]: - hypo.totNumPixSP = 2 - hypo.totNumSctSP = 3 - # will set here thresholds - return hypo - SpList = [] - from TrigT2MinBias.TrigT2MinBiasConf import TrigCountSpacePointsMT, SPCountHypoAlgMT, SPCountHypoTool - - - SPInputMakerAlg = EventViewCreatorAlgorithm("IM_SPEventViewCreator") - SPInputMakerAlg.ViewFallThrough = True - SPInputMakerAlg.RoITool = ViewCreatorInitialROITool() - SPInputMakerAlg.InViewRoIs = "InputRoI" - SPInputMakerAlg.Views = "SPView" - - IDTrigConfig = getInDetTrigConfig( 'minBias' ) - idAlgs, verifier = makeInDetAlgs( config = IDTrigConfig, rois=SPInputMakerAlg.InViewRoIs, viewVerifier='SPViewDataVerifier' ) - verifier.DataObjects += [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+InputRoI' ), - ( 'SCT_ID' , 'DetectorStore+SCT_ID' ), - ( 'PixelID' , 'DetectorStore+PixelID' ), - ( 'TagInfo' , 'DetectorStore+ProcessingTags' )] - - # Make sure required objects are still available at whole-event level - from AthenaCommon.AlgSequence import AlgSequence - topSequence = AlgSequence() - topSequence.SGInputLoader.Load += [( 'SCT_ID' , 'DetectorStore+SCT_ID' ), - ( 'PixelID' , 'DetectorStore+PixelID' ), - ( 'TagInfo' , 'DetectorStore+ProcessingTags' )] - - SpList = idAlgs[:-2] - - SpCount=TrigCountSpacePointsMT() - SpCount.SpacePointsKey=recordable("HLT_SpacePointCounts") - - from TrigT2MinBias.TrigT2MinBiasMonitoringMT import SpCountMonitoring - SpCount.MonTool = SpCountMonitoring() - - SPrecoSeq = parOR("SPrecoSeq", SpList + [ SpCount ]) - SPSequence = seqAND("SPSequence", [SPInputMakerAlg, SPrecoSeq]) - SPInputMakerAlg.ViewNodeName = SPrecoSeq.name() - - - SpCountHypo =SPCountHypoAlgMT() - SpCountHypo.SpacePointsKey=recordable("HLT_SpacePointCounts") - - Step1_SPCount = ChainStep( "Step1_SPCount", [MenuSequence( Sequence = SPSequence, - Maker = SPInputMakerAlg, - Hypo = SpCountHypo, - HypoToolGen = generateSPCountHypo )] ) - - return Step1_SPCount + return self.getStep(1,'SPCount',[MinBiasSPSequenceCfg]) def getMinBiasTrkStep(self): - """ Use the reco-dict to construct a single MinBias step """ - def generateTrackCountHypo(chainDict): - hypo = TrackCountHypoTool(chainDict["chainName"]) - if "hmt" in chainDict["chainName"]: - hypo.required_ntrks = int( chainDict["chainParts"][0]["hypoEFInfo"].strip("trk") ) - if "mb_sptrk" in chainDict["chainName"]: - hypo.min_pt = 0.2 - hypo.max_z0 = 401 - - # will set here cuts - return hypo - from TrigMinBias.TrigMinBiasConf import TrackCountHypoAlgMT, TrackCountHypoTool - - TrkInputMakerAlg = EventViewCreatorAlgorithm("IM_TrkEventViewCreator") - TrkInputMakerAlg.ViewFallThrough = True - TrkInputMakerAlg.RoITool = ViewCreatorInitialROITool() - TrkInputMakerAlg.InViewRoIs = "InputRoI" # contract with the consumer - TrkInputMakerAlg.Views = "TrkView" - TrkInputMakerAlg.RequireParentView = True - TrkInputMakerAlg.ViewNodeName = "TrkCountHypoAlgMTNode" - - # prepare algorithms to run in views, first, inform scheduler that input data is available in parent view (has to be done by hand) - IDTrigConfig = getInDetTrigConfig( 'minBias' ) - idAlgs, verifier = makeInDetAlgs( config = IDTrigConfig, rois=TrkInputMakerAlg.InViewRoIs, viewVerifier='TrkrecoSeqDataVerifier') - verifier.DataObjects += [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+InputRoI' ), - ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' ), - ( 'InDet::SCT_ClusterContainer' , 'StoreGateSvc+SCT_TrigClusters' ), - ( 'SpacePointContainer' , 'StoreGateSvc+SCT_TrigSpacePoints' ), - ( 'InDet::PixelClusterContainer' , 'StoreGateSvc+PixelTrigClusters' ), - ( 'SpacePointContainer' , 'StoreGateSvc+PixelTrigSpacePoints' )] - - if globalflags.InputFormat.is_bytestream(): - verifier.DataObjects += [( 'IDCInDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ), - ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' )] - - - TrkList = idAlgs[-2:] # FTF and Track to xAOD::TrackParticle conversion alg - TrackCountHypo=TrackCountHypoAlgMT() - TrackCountHypo.trackCountKey=recordable("HLT_TrackCount") - TrackCountHypo.tracksKey=recordable("HLT_IDTrack_MinBias_FTF") - - from TrigMinBias.TrackCountMonitoringMT import TrackCountMonitoring - TrackCountHypo.MonTool = TrackCountMonitoring() - - TrkrecoSeq = parOR("TrkrecoSeq", [verifier]+TrkList) - TrkSequence = seqAND("TrkSequence", [TrkInputMakerAlg, TrkrecoSeq]) - TrkInputMakerAlg.ViewNodeName = TrkrecoSeq.name() - - Step2_TrkCount = ChainStep( "Step2_TrkCount", [MenuSequence( Sequence = TrkSequence, - Maker = TrkInputMakerAlg, - Hypo = TrackCountHypo, - HypoToolGen = generateTrackCountHypo )] ) - return Step2_TrkCount + return self.getStep(2,'TrkCount',[MinBiasTrkSequenceCfg]) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasMenuSequences.py index e9b8d2628bd56427e52b9da620663054f7a33f8c..1f3adb4398edb76e73b19ffae563340c750bfc4b 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasMenuSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasMenuSequences.py @@ -1,40 +1,170 @@ # -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, RecoFragmentsPool -from AthenaConfiguration.AllConfigFlags import ConfigFlags +from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence +from AthenaCommon.CFElements import parOR +from AthenaCommon.CFElements import seqAND +from TrigInDetConfig.InDetSetup import makeInDetAlgs +from TrigEDMConfig.TriggerEDMRun3 import recordable +from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm +from DecisionHandling.DecisionHandlingConf import ViewCreatorInitialROITool +from AthenaCommon.GlobalFlags import globalflags +from TrigInDetConfig.ConfigSettings import getInDetTrigConfig -from TrigMinBiasHypo.TrigMinBiasHypoConfigMT import TrigMinBiasHypoToolFromDict -from TrigMinBiasHypo.TrigMinBiasHypoConf import MbCountHypoAlgMT +######## +# to move into TrigMinBiasHypoConfigMT? -def minbiasSpacePointMenuSequence(): - # menu components - # retrieve the reco seuqnece - from TriggerMenuMT.HLTMenuConfig.MinBias.MinBiasSPRecoSequences import minbiasSpacePointAthSequence - ( minbiasSpacePointSequence, InputMakerAlg, sequenceOut) = RecoFragmentsPool.retrieve(minbiasSpacePointAthSequence,ConfigFlags) +def SPCountHypoToolGen(chainDict): + from TrigT2MinBias.TrigT2MinBiasConf import SPCountHypoTool + hypo = SPCountHypoTool(chainDict["chainName"]) + if "hmt" in chainDict["chainName"]: + hypo.totNumSctSP = int( chainDict["chainParts"][0]["hypoL2Info"].strip("sp") ) + if "mb_sptrk" in chainDict["chainName"]: + hypo.totNumPixSP = 2 + hypo.totNumSctSP = 3 + # will set here thresholds + return hypo - #hypo - mbHypoAlg = MbCountHypoAlgMT("MinBiasHypoAlg_sp") - mbHypoAlg.MinBiasContainerKey=sequenceOut - return MenuSequence( Sequence = minbiasSpacePointSequence, - Maker = InputMakerAlg, - Hypo = mbHypoAlg, - HypoToolGen = TrigMinBiasHypoToolFromDict ) +def TrackCountHypoToolGen(chainDict): + from TrigMinBias.TrigMinBiasConf import TrackCountHypoTool + hypo = TrackCountHypoTool(chainDict["chainName"]) + if "hmt" in chainDict["chainName"]: + hypo.required_ntrks = int( chainDict["chainParts"][0]["hypoEFInfo"].strip("trk") ) + if "mb_sptrk" in chainDict["chainName"]: + hypo.min_pt = 0.2 + hypo.max_z0 = 401 + # will set here cuts + return hypo -def minbiasTrackMenuSequence(): - # menu components - # retrieve the reco seuqnece - from TriggerMenuMT.HLTMenuConfig.MinBias.MinBiasTrkRecoSequences import minbiasTrackAthSequence - (minbiasTrackSequence, InputMakerAlg, sequenceOut) = RecoFragmentsPool.retrieve(minbiasTrackAthSequence,ConfigFlags) - #hypo - mbHypoAlg = MbCountHypoAlgMT("MinBiasHypoAlg_trk") - mbHypoAlg.MinBiasContainerKey=sequenceOut +### Now the sequences + +# These are obsoletee and can probably be deleted. Leeft here commented as need feedback fomr experts + +## def minbiasSpacePointMenuSequence(): +## # menu components +## # retrieve the reco seuqnece +## from TriggerMenuMT.HLTMenuConfig.MinBias.MinBiasSPRecoSequences import minbiasSpacePointAthSequence +## ( minbiasSpacePointSequence, InputMakerAlg, sequenceOut) = RecoFragmentsPool.retrieve(minbiasSpacePointAthSequence,ConfigFlags) + +## #hypo +## mbHypoAlg = MbCountHypoAlgMT("MinBiasHypoAlg_sp") +## mbHypoAlg.MinBiasContainerKey=sequenceOut + +## return MenuSequence( Sequence = minbiasSpacePointSequence, +## Maker = InputMakerAlg, +## Hypo = mbHypoAlg, +## HypoToolGen = TrigMinBiasHypoToolFromDict ) + + +## #obsolete? +## def minbiasTrackMenuSequence(): +## # menu components +## # retrieve the reco seuqnece +## from TriggerMenuMT.HLTMenuConfig.MinBias.MinBiasTrkRecoSequences import minbiasTrackAthSequence +## (minbiasTrackSequence, InputMakerAlg, sequenceOut) = RecoFragmentsPool.retrieve(minbiasTrackAthSequence,ConfigFlags) + +## #hypo +## mbHypoAlg = MbCountHypoAlgMT("MinBiasHypoAlg_trk") +## mbHypoAlg.MinBiasContainerKey=sequenceOut + +## return MenuSequence( Sequence = minbiasTrackSequence, +## Maker = InputMakerAlg, +## Hypo = mbHypoAlg, +## HypoToolGen = TrigMinBiasHypoToolFromDict ) + + +# NEW: +def MinBiasSPSequence(): + SpList = [] + from TrigT2MinBias.TrigT2MinBiasConf import TrigCountSpacePointsMT, SPCountHypoAlgMT + + SPInputMakerAlg = EventViewCreatorAlgorithm("IM_SPEventViewCreator") + SPInputMakerAlg.ViewFallThrough = True + SPInputMakerAlg.RoITool = ViewCreatorInitialROITool() + SPInputMakerAlg.InViewRoIs = "InputRoI" + SPInputMakerAlg.Views = "SPView" + + IDTrigConfig = getInDetTrigConfig( 'minBias' ) + idAlgs, verifier = makeInDetAlgs( config = IDTrigConfig, rois=SPInputMakerAlg.InViewRoIs, viewVerifier='SPViewDataVerifier' ) + verifier.DataObjects += [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+InputRoI' ), + ( 'SCT_ID' , 'DetectorStore+SCT_ID' ), + ( 'PixelID' , 'DetectorStore+PixelID' ), + ( 'TagInfo' , 'DetectorStore+ProcessingTags' )] + + # Make sure required objects are still available at whole-event level + from AthenaCommon.AlgSequence import AlgSequence + topSequence = AlgSequence() + topSequence.SGInputLoader.Load += [( 'SCT_ID' , 'DetectorStore+SCT_ID' ), + ( 'PixelID' , 'DetectorStore+PixelID' ), + ( 'TagInfo' , 'DetectorStore+ProcessingTags' )] + + SpList = idAlgs[:-2] + + SpCount=TrigCountSpacePointsMT() + SpCount.SpacePointsKey=recordable("HLT_SpacePointCounts") + + from TrigT2MinBias.TrigT2MinBiasMonitoringMT import SpCountMonitoring + SpCount.MonTool = SpCountMonitoring() + + SPrecoSeq = parOR("SPrecoSeq", SpList + [ SpCount ]) + SPSequence = seqAND("SPSequence", [SPInputMakerAlg, SPrecoSeq]) + SPInputMakerAlg.ViewNodeName = SPrecoSeq.name() + + + SpCountHypo =SPCountHypoAlgMT() + SpCountHypo.SpacePointsKey=recordable("HLT_SpacePointCounts") + + return MenuSequence( Sequence = SPSequence, + Maker = SPInputMakerAlg, + Hypo = SpCountHypo, + HypoToolGen = SPCountHypoToolGen ) + + +def MinBiasTrkSequence(): + from TrigMinBias.TrigMinBiasConf import TrackCountHypoAlgMT + + TrkInputMakerAlg = EventViewCreatorAlgorithm("IM_TrkEventViewCreator") + TrkInputMakerAlg.ViewFallThrough = True + TrkInputMakerAlg.RoITool = ViewCreatorInitialROITool() + TrkInputMakerAlg.InViewRoIs = "InputRoI" # contract with the consumer + TrkInputMakerAlg.Views = "TrkView" + TrkInputMakerAlg.RequireParentView = True + TrkInputMakerAlg.ViewNodeName = "TrkCountHypoAlgMTNode" + + # prepare algorithms to run in views, first, inform scheduler that input data is available in parent view (has to be done by hand) + IDTrigConfig = getInDetTrigConfig( 'minBias' ) + idAlgs, verifier = makeInDetAlgs( config = IDTrigConfig, rois=TrkInputMakerAlg.InViewRoIs, viewVerifier='TrkrecoSeqDataVerifier') + verifier.DataObjects += [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+InputRoI' ), + ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' ), + ( 'InDet::SCT_ClusterContainer' , 'StoreGateSvc+SCT_TrigClusters' ), + ( 'SpacePointContainer' , 'StoreGateSvc+SCT_TrigSpacePoints' ), + ( 'InDet::PixelClusterContainer' , 'StoreGateSvc+PixelTrigClusters' ), + ( 'SpacePointContainer' , 'StoreGateSvc+PixelTrigSpacePoints' )] + + if globalflags.InputFormat.is_bytestream(): + verifier.DataObjects += [( 'IDCInDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ), + ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' )] + + + TrkList = idAlgs[-2:] # FTF and Track to xAOD::TrackParticle conversion alg + TrackCountHypo=TrackCountHypoAlgMT() + TrackCountHypo.trackCountKey=recordable("HLT_TrackCount") + TrackCountHypo.tracksKey=recordable("HLT_IDTrack_MinBias_FTF") + + from TrigMinBias.TrackCountMonitoringMT import TrackCountMonitoring + TrackCountHypo.MonTool = TrackCountMonitoring() + + TrkrecoSeq = parOR("TrkrecoSeq", [verifier]+TrkList) + TrkSequence = seqAND("TrkSequence", [TrkInputMakerAlg, TrkrecoSeq]) + TrkInputMakerAlg.ViewNodeName = TrkrecoSeq.name() + + return MenuSequence( Sequence = TrkSequence, + Maker = TrkInputMakerAlg, + Hypo = TrackCountHypo, + HypoToolGen = TrackCountHypoToolGen ) + - return MenuSequence( Sequence = minbiasTrackSequence, - Maker = InputMakerAlg, - Hypo = mbHypoAlg, - HypoToolGen = TrigMinBiasHypoToolFromDict ) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py index 1db463f1684e2daf14f10ccf80d1f2a96d8c1aff..125532d328340ff32086b37537e09e17e6040498 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py @@ -142,7 +142,7 @@ def muCombAlgSequence(ConfigFlags): # muCombIDSequence = parOR("l2muCombIDSequence", [muFastIDRecoSequence, muCombFilterSequence]) # for Inside-out L2SA - muFastIORecoSequence, sequenceOutL2SAIO = muFastRecoSequence( "MURoIs", doFullScanID=False, InsideOutMode=True ) + muFastIORecoSequence, sequenceOutL2SAIO = muFastRecoSequence( l2muCombViewsMaker.InViewRoIs, doFullScanID=False, InsideOutMode=True ) insideoutMuonChainFilter = MuonChainFilterAlg("FilterInsideOutMuonChains") insideoutMuonChains = getInsideOutMuonChainNames() insideoutMuonChainFilter.ChainsToFilter = insideoutMuonChains diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py index 57209cf03234fb7814026744cf7a34e1c17278e8..a4e2acacb564f197c17ac2c24ccd6a05136166f9 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py @@ -347,29 +347,26 @@ def muFastRecoSequence( RoIs, doFullScanID = False, InsideOutMode=False ): muFastRecoSequence = parOR("l2Mu"+postFix+"ViewNode") # In insideout mode, need to inherit muon decoding objects for TGC, RPC, MDT, CSC + import AthenaCommon.CfgMgr as CfgMgr + ViewVerify = CfgMgr.AthViews__ViewDataVerifier("muFastRecoVDV"+postFix) if InsideOutMode: - import AthenaCommon.CfgMgr as CfgMgr - ViewVerify = CfgMgr.AthViews__ViewDataVerifier("muFastIOmodeViewDataVerifier") ViewVerify.DataObjects = [('Muon::TgcPrepDataContainer','StoreGateSvc+TGC_Measurements'), ('TgcRdoContainer' , 'StoreGateSvc+TGCRDO'), ('Muon::RpcPrepDataContainer','StoreGateSvc+RPC_Measurements'), - ('Muon::MdtPrepDataContainer','StoreGateSvc+MDT_DriftCircles'), - ('TrigRoiDescriptorCollection','StoreGateSvc+MURoIs')] + ('Muon::MdtPrepDataContainer','StoreGateSvc+MDT_DriftCircles')] if MuonGeometryFlags.hasCSC(): ViewVerify.DataObjects += [('Muon::CscPrepDataContainer','StoreGateSvc+CSC_Clusters')] if MuonGeometryFlags.hasSTGC(): ViewVerify.DataObjects += [('Muon::sTgcPrepDataContainer','StoreGateSvc+STGC_Measurements')] if MuonGeometryFlags.hasMM(): ViewVerify.DataObjects += [('Muon::MMPrepDataContainer','StoreGateSvc+MM_Measurements')] - muFastRecoSequence+=ViewVerify - - import AthenaCommon.CfgMgr as CfgMgr - muFastRecoVDV = CfgMgr.AthViews__ViewDataVerifier("muFastRecoVDV") - muFastRecoVDV.DataObjects = [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+'+RoIs ), - ( 'xAOD::EventInfo' , 'StoreGateSvc+EventInfo' ), - ( 'DataVector< LVL1::RecMuonRoI >' , 'StoreGateSvc+HLT_RecMURoIs' )] + #muFastRecoSequence+=ViewVerify + else: + ViewVerify.DataObjects += [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+'+RoIs )] + ViewVerify.DataObjects += [( 'xAOD::EventInfo' , 'StoreGateSvc+EventInfo' ), + ( 'DataVector< LVL1::RecMuonRoI >' , 'StoreGateSvc+HLT_RecMURoIs' )] - muFastRecoSequence += muFastRecoVDV + muFastRecoSequence += ViewVerify if MuonGeometryFlags.hasCSC(): # Configure the L2 CSC data preparator - we can turn off the data decoding here @@ -480,7 +477,9 @@ def muFastRecoSequence( RoIs, doFullScanID = False, InsideOutMode=False ): muFastAlg.FILL_FSIDRoI = doFullScanID muFastAlg.InsideOutMode = InsideOutMode muFastAlg.TrackParticlesContainerName = TrackParticlesName - + #Do not run topo road and inside-out mode at the same time + if InsideOutMode: + muFastAlg.topoRoad = False muFastRecoSequence += muFastAlg sequenceOut = muFastAlg.MuonL2SAInfo diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PhotonRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PhotonRecoSequences.py index 46d47aaef4f61b60ec1a3ca234371c1445c5ec6d..3f3e7a41da2baa18baaab20bf3f27e4119da5b4e 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PhotonRecoSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PhotonRecoSequences.py @@ -73,6 +73,12 @@ def precisionPhotonRecoSequence(RoIs): PrecisionPhotonRecoMonAlgo.PhotonKey = trigTopoEgammaAlgo.PhotonOutputName thesequence += PrecisionPhotonRecoMonAlgo + #online monitoring for TrigPhotonSuperClusterBuilder + from TriggerMenuMT.HLTMenuConfig.Photon.TrigPhotonFactories import PrecisionPhotonSuperClusterMonitorCfg + PrecisionPhotonSuperClusterMonAlgo = PrecisionPhotonSuperClusterMonitorCfg() + PrecisionPhotonSuperClusterMonAlgo.InputEgammaRecContainerName = trigPhotonAlgo.SuperPhotonRecCollectionName + thesequence += PrecisionPhotonSuperClusterMonAlgo + return (thesequence, collectionOut) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/TrigPhotonFactories.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/TrigPhotonFactories.py index d31582f67fdfa325bd0844e556c612e112f141ae..8d43dfd53cdd574d1f66ae51735db31459617919 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/TrigPhotonFactories.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/TrigPhotonFactories.py @@ -84,3 +84,18 @@ def PrecisionPhotonTopoMonitorCfg(name = 'PrecisionPhotonTopoEgammaBuilder'): ) return PrecisionPhotonTopoMonitor() + +def PrecisionPhotonSuperClusterMonitorCfg(name = 'PrecisionPhotonSuperClusterBuilder'): + + from TrigEgammaMonitoring import TrigEgammaMonitoringConf + from TrigEgammaMonitoring.egammaMonitorPrecisionConfig import egammaMonitorSuperClusterCfg + monTool = egammaMonitorSuperClusterCfg(name) + + PrecisionPhotonSuperClusterMonitor = AlgFactory( TrigEgammaMonitoringConf.egammaMonitorSuperClusterAlgorithm, + name = name, + doAdd = False, + InputEgammaRecContainerName = TrigEgammaKeys.EgammaRecKey, + MonTool = monTool + ) + + return PrecisionPhotonSuperClusterMonitor() diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/generatePhoton.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/generatePhoton.py index 074285b1c74dbd86f8959c9e030178f095e86311..acdc24d9714e7275f5e622cc829f01f4601cda7c 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/generatePhoton.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/generatePhoton.py @@ -40,7 +40,7 @@ def generateChains(flags, chainDict): HypoToolGen = TrigEgammaFastCaloHypoToolFromDict, CA = accCalo ) - fastCaloStep = ChainStep(firstStepName, [fastCaloSequence]) + fastCaloStep = ChainStep(firstStepName, [fastCaloSequence], multiplicity=[1],chainDicts=[chainDict] ) secondStepName = 'FastPhoton' @@ -64,7 +64,7 @@ def generateChains(flags, chainDict): HypoToolGen = TrigEgammaFastPhotonHypoToolFromDict, CA = accPhoton ) - l2PhotonStep = ChainStep(secondStepName, [l2PhotonSequence]) + l2PhotonStep = ChainStep(secondStepName, [l2PhotonSequence], multiplicity=[1],chainDicts=[chainDict] ) l1Thresholds=[] diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Base/Thresholds.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Base/Thresholds.py index 607f415ff1573930b07c948d653d04775ece8c84..c02a03c2a082c8f36697f897660f4479373da3b6 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Base/Thresholds.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Base/Thresholds.py @@ -230,8 +230,8 @@ class LegacyThreshold( Threshold ): ("isobits", thrV.isobits), ("etamin", thrV.etamin), ("etamax", thrV.etamax), - ("phimin", thrV.phimax), - ("phimax", thrV.phimin), + ("phimin", thrV.phimin), + ("phimax", thrV.phimax), ("priority", thrV.priority) ]) ) elif self.ttype == ThrType.TAU: @@ -244,8 +244,8 @@ class LegacyThreshold( Threshold ): ("value", thrV.value), ("etamin", thrV.etamin), ("etamax", thrV.etamax), - ("phimin", thrV.phimax), - ("phimax", thrV.phimin), + ("phimin", thrV.phimin), + ("phimax", thrV.phimax), ("window", thrV.window), ("priority", thrV.priority) ]) ) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py index 846421800e0cf9a4e680641c2ce533c42fd30568..8cb186e920ff2b57a94352b2f0d4afa7c1f5e211 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py @@ -636,7 +636,7 @@ class ItemDef: MenuItem('L1_J40.0ETA25_2J15.31ETA49' ).setLogic( d.J400ETA25 & d.J1531ETA49.x(2) & physcond).setTriggerType(TT.calo) MenuItem('L1_J40.0ETA25_2J25_J20.31ETA49' ).setLogic( d.J400ETA25 & d.J25.x(2) & d.J2031ETA49 & physcond).setTriggerType(TT.calo) MenuItem('L1_J40.0ETA25_2J30_J20.31ETA49' ).setLogic( d.J400ETA25 & d.J30.x(2) & d.J2031ETA49 & physcond).setTriggerType(TT.calo) - MenuItem('L1_J45.0ETA20_3J15.0ETA25' ).setLogic( d.J450ETA20 & d.J150ETA25.x(3) & physcond).setTriggerType(TT.calo) + MenuItem('L1_J45.0ETA23_3J15.0ETA25' ).setLogic( d.J450ETA23 & d.J150ETA25.x(3) & physcond).setTriggerType(TT.calo) MenuItem('L1_J50_2J40.0ETA25_3J15.0ETA25' ).setLogic( d.J50 & d.J400ETA25.x(2) & d.J150ETA25.x(3) & physcond).setTriggerType(TT.calo) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDefLegacy.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDefLegacy.py index c8bc26fb2624afd078e418d97e5d577097d4e1e1..e1c9903f3ed027f91bd10a38d0df502697b46ede 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDefLegacy.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDefLegacy.py @@ -261,7 +261,7 @@ class ThresholdDefLegacy: LegacyThreshold('J%iA' % thrV, 'JET').addThrValue(CL.JetOff).addThrValue( thrV, etamin = 15, etamax = 23, priority=1) LegacyThreshold('J%iC' % thrV, 'JET').addThrValue(CL.JetOff).addThrValue( thrV, etamin = -23, etamax = -15, priority=1) # Central jet - for (thrV, etamax) in [(12,23), (12,28), (15,25), (17,22), (20,28), (25,23), (35,23), (20,49), (30,49), (40,25), (45,20)]: + for (thrV, etamax) in [(12,23), (12,28), (15,25), (17,22), (20,28), (25,23), (35,23), (20,49), (30,49), (40,25), (45,23)]: LegacyThreshold('J%i.0ETA%i' % (thrV, etamax), 'JET').addThrValue(CL.JetOff).addThrValue( thrV, etamin = -etamax, etamax = etamax, priority=1) # Standard forward jet diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDef.py index f87b3af90d3f9144bfbffa541a5b853ca90db4df..2a3d6a326959c051d0697b69a0a616ff29e312f7 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDef.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDef.py @@ -17,12 +17,6 @@ class TopoAlgoDef: _etamax = 49 _minet = 0 - - usev7 = False - usev8 = True - log.debug("usev7 %r", usev7) - log.debug("usev8 %r", usev8) - _emscale_for_decision = 1000 / getTypeWideThresholdConfig("EM")["resolutionMeV"] alg = AlgConf.ClusterNoSort( name = 'EMall', inputs = 'ClusterTobArray', outputs = 'EMall' ) @@ -87,8 +81,7 @@ class TopoAlgoDef: alg.addvariable('IsoMask', 0) alg.addvariable('MinEta', 0) alg.addvariable('MaxEta', _etamax) - alg.addgeneric('DoIsoCut', '0') - #alg.addgeneric('DoEtaCut', '1') + alg.addgeneric('DoIsoCut', 0) tm.registerTopoAlgo(alg) @@ -99,8 +92,7 @@ class TopoAlgoDef: alg.addvariable('IsoMask', 3) alg.addvariable('MinEta', 0) alg.addvariable('MaxEta', _etamax) - alg.addgeneric('DoIsoCut', '1') - #alg.addgeneric('DoEtaCut', '1') + alg.addgeneric('DoIsoCut', 1) tm.registerTopoAlgo(alg) @@ -111,8 +103,7 @@ class TopoAlgoDef: alg.addvariable('IsoMask', 2) alg.addvariable('MinEta', 0) alg.addvariable('MaxEta', _etamax) - alg.addgeneric('DoIsoCut', '1') - #alg.addgeneric('DoEtaCut', '1') + alg.addgeneric('DoIsoCut', 1) tm.registerTopoAlgo(alg) @@ -131,7 +122,6 @@ class TopoAlgoDef: # for 0MATCH-4AJ20-4AJj15 - #if not usev8: alg = AlgConf.JetNoSortMatch( name = 'AJMatchall', inputs = 'JetTobArray', outputs = 'AJMatchall' ) alg.addgeneric('InputWidth', HW.InputWidthJET) alg.addgeneric('OutputWidth', HW.InputWidthJET) @@ -181,27 +171,25 @@ class TopoAlgoDef: #input list needed for ATR-18824 - if usev8: - alg = AlgConf.JetSort( name = 'FJjs23ETA49', inputs = 'JetTobArray', outputs = 'FJjs23ETA49') + alg = AlgConf.JetSort( name = 'FJjs23ETA49', inputs = 'JetTobArray', outputs = 'FJjs23ETA49') + alg.addgeneric('InputWidth', HW.InputWidthJET) + alg.addgeneric('InputWidth1stStage', HW.InputWidth1stStageSortJET ) + alg.addgeneric('OutputWidth', HW.OutputWidthSortJET ) + alg.addgeneric('JetSize', 1 if HW.DefaultJetSize.value==2 else 2) + alg.addvariable('MinEta', 23) + alg.addvariable('MaxEta', _etamax) + alg.addgeneric('DoEtaCut', 1) + tm.registerTopoAlgo(alg) - alg.addgeneric('InputWidth', HW.InputWidthJET) - alg.addgeneric('InputWidth1stStage', HW.InputWidth1stStageSortJET ) - alg.addgeneric('OutputWidth', HW.OutputWidthSortJET ) - alg.addgeneric('JetSize', 1 if HW.DefaultJetSize.value==2 else 2) - alg.addvariable('MinEta', 23) - alg.addvariable('MaxEta', _etamax) - alg.addgeneric('DoEtaCut', 1) - tm.registerTopoAlgo(alg) - - - alg = AlgConf.JetSort( name = 'CJsETA21', inputs = 'JetTobArray', outputs = 'CJsETA21') - alg.addgeneric('InputWidth', HW.InputWidthJET) - alg.addgeneric('InputWidth1stStage', HW.InputWidth1stStageSortJET ) - alg.addgeneric('OutputWidth', HW.OutputWidthSortJET ) - alg.addgeneric('JetSize', HW.DefaultJetSize.value) - alg.addvariable('MinEta', 0) - alg.addvariable('MaxEta', 21) - tm.registerTopoAlgo(alg) + + alg = AlgConf.JetSort( name = 'CJsETA21', inputs = 'JetTobArray', outputs = 'CJsETA21') + alg.addgeneric('InputWidth', HW.InputWidthJET) + alg.addgeneric('InputWidth1stStage', HW.InputWidth1stStageSortJET ) + alg.addgeneric('OutputWidth', HW.OutputWidthSortJET ) + alg.addgeneric('JetSize', HW.DefaultJetSize.value) + alg.addvariable('MinEta', 0) + alg.addvariable('MaxEta', 21) + tm.registerTopoAlgo(alg) # Sorted J lists: for jet_type in ['AJ', 'FJ']: @@ -343,135 +331,55 @@ class TopoAlgoDef: # Decision algorithms # VBF items - if usev8: - invm_aj_highmass_map = {"algoname": 'INVM_AJ_HighMass', "Threlist": [ 700], "maxInvm": 9999, "otype" : "AJ", "ocut1" : 30, "olist" : "s", "nleading1" : 6, "inputwidth1": HW.OutputWidthSortJET, "ocut2" : 20, "nleading2" : 6} - else: - invm_aj_highmass_map = {"algoname": 'INVM_AJ_HighMass', "Threlist": [ 900, 800, 700, 500 ], "maxInvm": 9999, "otype" : "AJ", "ocut1" : 30, "olist" : "s", "nleading1" : 6, "inputwidth1": HW.OutputWidthSortJET, "ocut2" : 20, "nleading2" : 6} + invm_aj_highmass_map = { "algoname": 'INVM_AJ_HighMass', "Threlist": [ 700], "maxInvm": 9999, + "otype" : "AJ", "ocut1" : 30, "olist" : "s", "nleading1" : 6, + "inputwidth1": HW.OutputWidthSortJET, "ocut2" : 20, "nleading2" : 6} - if usev8: - invm_aj_lowmass_map = {"algoname": 'INVM_AJ_LowMass', "Threlist": [ 300], "maxInvm": 9999, "otype" : "AJ", "ocut1" : 30, "olist" : "s", "nleading1" : 6, "inputwidth1": HW.OutputWidthSortJET, "ocut2" : 20, "nleading2" : 6} - else: - invm_aj_lowmass_map = {"algoname": 'INVM_AJ_LowMass', "Threlist": [ 400, 300, 200, 100 ], "maxInvm": 9999, "otype" : "AJ", "ocut1" : 30, "olist" : "s", "nleading1" : 6, "inputwidth1": HW.OutputWidthSortJET, "ocut2" : 20, "nleading2" : 6} + invm_aj_lowmass_map = { "algoname": 'INVM_AJ_LowMass', "Threlist": [ 300], "maxInvm": 9999, + "otype" : "AJ", "ocut1" : 30, "olist" : "s", "nleading1" : 6, + "inputwidth1": HW.OutputWidthSortJET, "ocut2" : 20, "nleading2" : 6} - for x in [invm_aj_highmass_map, invm_aj_lowmass_map, - ]: - + for x in [invm_aj_highmass_map, invm_aj_lowmass_map ]: class d: pass for k in x: setattr (d, k, x[k]) - inputList = d.otype + d.olist toponames=[] - for minInvm in d.Threlist: toponame = "%iINVM%i-%s%s%s%s-%s%s%s%s" % (minInvm, d.maxInvm, d.otype, str(d.ocut1) , d.olist, str(d.nleading1) if d.olist=="s" else "", d.otype, str(d.ocut2) , d.olist, str(d.nleading2) if d.olist=="s" else "") toponames.append(toponame) - alg = AlgConf.InvariantMassInclusive1( name = d.algoname, inputs = inputList, outputs = toponames) - alg.addgeneric('InputWidth', d.inputwidth1) alg.addgeneric('MaxTob', d.nleading1) alg.addgeneric('NumResultBits', len(toponames)) - for bitid, minInvm in enumerate(d.Threlist): alg.addvariable('MinET1', d.ocut1, bitid) alg.addvariable('MinET2', d.ocut2, bitid) alg.addvariable('MinMSqr', minInvm * minInvm, bitid) alg.addvariable('MaxMSqr', d.maxInvm * d.maxInvm, bitid) - tm.registerTopoAlgo(alg) - # dimu INVM items - - if not usev8: - listofalgos=[ - - #{"minInvm": 1, "maxInvm": 19, "mult": 2, "otype1" : "MU", "ocut1": 4, "olist" : "ab", "otype2" : "", "ocut2" : 0, "onebarrel": 0},#1INVM19-2MU4ab - {"minInvm": 2, "maxInvm": 8, "mult": 2, "otype1" : "MU", "ocut1": 4, "olist" : "ab", "otype2" : "", "ocut2" : 0, "onebarrel": 0}, #2INVM8-2MU4ab - {"minInvm": 2, "maxInvm": 9, "mult": 2, "otype1" : "MU", "ocut1": 4, "olist" : "ab", "otype2" : "", "ocut2" : 0, "onebarrel": 0}, #2INVM9-2MU4ab - {"minInvm": 8, "maxInvm": 15, "mult": 1, "otype1" : "MU", "ocut1": 6, "olist" : "ab", "otype2" : "MU","ocut2" : 4, "onebarrel": 0}, #8INVM15-MU6ab-MU4ab - {"minInvm": 2, "maxInvm": 8, "mult": 1, "otype1" : "MU", "ocut1": 6, "olist" : "ab", "otype2" : "MU","ocut2" : 4, "onebarrel": 0}, #2INVM8-MU6ab-MU4ab - {"minInvm": 2, "maxInvm": 9, "mult": 1, "otype1" : "MU", "ocut1": 6, "olist" : "ab", "otype2" : "MU","ocut2" : 4, "onebarrel": 0}, #2INVM9-MU6ab-MU4ab - {"minInvm": 8, "maxInvm": 15, "mult": 2, "otype1" : "MU", "ocut1": 6, "olist" : "ab", "otype2" : "", "ocut2" : 0, "onebarrel": 0}, #8INVM15-2MU6ab - {"minInvm": 2, "maxInvm": 9, "mult": 2, "otype1" : "MU", "ocut1": 6, "olist" : "ab", "otype2" : "", "ocut2" : 0, "onebarrel": 0}, #2INVM9-2MU6ab - {"minInvm": 7, "maxInvm": 15, "mult": 2, "otype1" : "MU", "ocut1": 4, "olist" : "ab", "otype2" : "", "ocut2" : 0, "onebarrel": 0}, #7INVM15-2MU4ab - - ] - if usev8: - listofalgos=[] - - for x in listofalgos: - class d: - pass - for k in x: - setattr (d, k, x[k]) - - obj1 = "%s%s%s%s" % ((str(d.mult) if d.mult>1 else ""), d.otype1, str(d.ocut1), d.olist) - obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2), d.olist) - toponame = "%iINVM%i-%s%s%s" % (d.minInvm, d.maxInvm, "ONEBARREL-" if d.onebarrel==1 else "", obj1, "" if d.mult>1 else obj2) - - log.debug("Define %s", toponame) - - - inputList = [d.otype1 + d.olist] if (d.mult>1 or d.otype1==d.otype2) else [d.otype1 + d.olist, d.otype2 + d.olist] - algoname = AlgConf.InvariantMassInclusive1 if (d.mult>1 or d.otype1==d.otype2) else AlgConf.InvariantMassInclusive2 - alg = algoname( name = toponame, inputs = inputList, outputs = [ toponame ]) - - if (d.mult>1 or d.otype1==d.otype2): - alg.addgeneric('InputWidth', HW.OutputWidthSelectMU) - alg.addgeneric('MaxTob', HW.OutputWidthSelectMU) - alg.addgeneric('RequireOneBarrel', d.onebarrel) - else: - alg.addgeneric('InputWidth1', HW.OutputWidthSelectMU) - alg.addgeneric('InputWidth2', HW.OutputWidthSelectMU) - alg.addgeneric('MaxTob1', HW.OutputWidthSelectMU) - alg.addgeneric('MaxTob2', HW.OutputWidthSelectMU) - alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET1', d.ocut1) - alg.addvariable('MinET2', d.ocut2 if d.ocut2>0 else d.ocut1) - alg.addvariable('MinMSqr', d.minInvm * d.minInvm) - alg.addvariable('MaxMSqr', d.maxInvm * d.maxInvm) - tm.registerTopoAlgo(alg) # dimu DR items - if usev8: - listofalgos=[ + listofalgos=[ {"minDr": 0, "maxDr": 15, "mult": 2, "otype1" : "MU", "ocut1": 6, "olist" : "ab", "otype2" : "", "ocut2": 6, "onebarrel": 0}, #0DR15-2MU6ab - ] - else: - listofalgos=[ - {"minDr": 2, "maxDr": 99, "mult": 2, "otype1" : "MU" ,"ocut1": 4, "olist" : "ab", "otype2" : "", "ocut2": 4, "onebarrel": 0}, # SM Y x, 2DR99-2MU4ab - {"minDr": 0, "maxDr": 10, "mult": 1, "otype1" : "MU" ,"ocut1": 10, "olist" : "ab", "otype2" : "MU", "ocut2": 6, "onebarrel": 0}, # Exotic LFV x, 0DR10-MU10ab-MU6ab - {"minDr": 2, "maxDr": 15, "mult": 2, "otype1" : "MU" ,"ocut1": 6, "olist" : "ab", "otype2" : "", "ocut2": 6, "onebarrel": 0}, #x, 2DR15-2MU6ab - {"minDr": 0, "maxDr": 15, "mult": 2, "otype1" : "MU" ,"ocut1": 4, "olist" : "ab", "otype2" : "", "ocut2": 4, "onebarrel": 0}, #0DR15-2MU4ab - {"minDr": 0, "maxDr": 15, "mult": 1, "otype1" : "MU", "ocut1": 6, "olist" : "ab", "otype2" : "MU", "ocut2": 4, "onebarrel": 0}, #0DR15-MU6ab-MU4ab - {"minDr": 0, "maxDr": 34, "mult": 2, "otype1" : "MU" ,"ocut1": 4, "olist" : "ab", "otype2" : "", "ocut2": 4, "onebarrel": 0}, #0DR34-2MU4ab - {"minDr": 0, "maxDr": 24, "mult": 2, "otype1" : "MU" ,"ocut1": 4, "olist" : "ab", "otype2" : "", "ocut2": 4, "onebarrel": 0}, #0DR24-2MU4ab - {"minDr": 0, "maxDr": 22, "mult": 2, "otype1" : "MU" ,"ocut1": 6, "olist" : "ab", "otype2" : "", "ocut2": 6, "onebarrel": 0}, #0DR22-2MU6ab - {"minDr": 0, "maxDr": 22, "mult": 1, "otype1" : "MU", "ocut1": 6, "olist" : "ab", "otype2" : "MU", "ocut2": 4, "onebarrel": 0}, #0DR22-MU6ab-MU4ab - {"minDr": 0, "maxDr": 15, "mult": 2, "otype1" : "MU", "ocut1": 6, "olist" : "ab", "otype2" : "", "ocut2": 6, "onebarrel": 0}, #0DR15-2MU6ab - ] - + ] for x in listofalgos: class d: pass for k in x: setattr (d, k, x[k]) - obj1 = "%s%s%s%s" % ((str(d.mult) if d.mult>1 else ""), d.otype1, str(d.ocut1), d.olist) obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2), d.olist) toponame = "%iDR%i-%s%s%s" % (d.minDr, d.maxDr, "ONEBARREL-" if d.onebarrel==1 else "", obj1, "" if d.mult>1 else obj2) - log.debug("Define %s", toponame) - inputList = [d.otype1 + d.olist] if (d.mult>1 or d.otype1==d.otype2) else [d.otype1 + d.olist, d.otype2 + d.olist] algoname = AlgConf.DeltaRSqrIncl1 if (d.mult>1 or d.otype1==d.otype2) else AlgConf.DeltaRSqrIncl2 - alg = algoname( name = toponame, inputs = inputList, outputs = [ toponame ]) - + alg = algoname( name = toponame, inputs = inputList, outputs = [ toponame ]) if (d.mult>1 or d.otype1==d.otype2): alg.addgeneric('InputWidth', HW.OutputWidthSelectMU) alg.addgeneric('MaxTob', HW.OutputWidthSelectMU) @@ -481,8 +389,6 @@ class TopoAlgoDef: alg.addgeneric('InputWidth2', HW.OutputWidthSelectMU) alg.addgeneric('MaxTob1', HW.OutputWidthSelectMU) alg.addgeneric('MaxTob2', HW.OutputWidthSelectMU) - - alg.addgeneric('NumResultBits', 1) alg.addvariable('MinET1', d.ocut1) alg.addvariable('MinET2', d.ocut2) @@ -493,32 +399,23 @@ class TopoAlgoDef: # deta-dphi with ab+ab algolist=[ - {"minDeta": 5, "maxDeta": 99, "minDphi": 5, "maxDphi": 99, "mult": 1, "otype1" : "MU", "ocut1": 6, "olist1" : "ab", "nleading1": HW.OutputWidthSelectMU, "otype2" : "MU", "ocut2": 4, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, #5DETA99-5DPHI99-MU6ab-MU4ab - {"minDeta": 5, "maxDeta": 99, "minDphi": 5, "maxDphi": 99, "mult": 2, "otype1" : "MU", "ocut1": 6, "olist1" : "ab", "nleading1": HW.OutputWidthSelectMU, "otype2" : "", "ocut2": 6, "olist2": "", "nleading2": HW.OutputWidthSelectMU}, #5DETA99-5DPHI99-2MU6ab - ] - if usev8: - algolist += [ + {"minDeta": 5, "maxDeta": 99, "minDphi": 5, "maxDphi": 99, "mult": 1, "otype1" : "MU", "ocut1": 6, "olist1" : "ab", "nleading1": HW.OutputWidthSelectMU, "otype2" : "MU", "ocut2": 4, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, #5DETA99-5DPHI99-MU6ab-MU4ab + {"minDeta": 5, "maxDeta": 99, "minDphi": 5, "maxDphi": 99, "mult": 2, "otype1" : "MU", "ocut1": 6, "olist1" : "ab", "nleading1": HW.OutputWidthSelectMU, "otype2" : "", "ocut2": 6, "olist2": "", "nleading2": HW.OutputWidthSelectMU}, #5DETA99-5DPHI99-2MU6ab {"minDeta": 5, "maxDeta": 99, "minDphi": 5, "maxDphi": 99, "mult": 2, "otype1" : "MU", "ocut1": 4, "olist1" : "ab", "nleading1": HW.OutputWidthSelectMU, "otype2" : "", "ocut2": 4, "olist2": "", "nleading2": HW.OutputWidthSelectMU}, #5DETA99-5DPHI99-2MU4ab - ] - for x in algolist: - + ] + for x in algolist: class d: pass for k in x: setattr (d, k, x[k]) - obj1 = "%s%s%s%s" % ((str(d.mult) if d.mult>1 else ""), d.otype1, str(d.ocut1), d.olist1) obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2) if d.ocut2>0 else "", d.olist2) - toponame = "%sDETA%s-%sDPHI%s-%s%s" % (d.minDeta, d.maxDeta, d.minDphi, d.maxDphi, obj1, "" if d.mult>1 else obj2) - - log.debug("Define %s", toponame) - + toponame = "%sDETA%s-%sDPHI%s-%s%s" % (d.minDeta, d.maxDeta, d.minDphi, d.maxDphi, obj1, "" if d.mult>1 else obj2) + log.debug("Define %s", toponame) inputList = [d.otype1 + d.olist1] if (d.mult>1 or d.otype1==d.otype2) else [d.otype1 + d.olist1, d.otype2 + d.olist2] algoname = AlgConf.DeltaEtaPhiIncl1 if (d.mult>1 or d.otype1==d.otype2) else AlgConf.DeltaEtaPhiIncl2 alg = algoname( name = toponame, inputs = inputList, outputs = [ toponame ]) - alg.addgeneric('NumResultBits', 1) - - + alg.addgeneric('NumResultBits', 1) if (d.mult>1 or d.otype1==d.otype2): alg.addgeneric('InputWidth', d.nleading1) alg.addgeneric('MaxTob', d.nleading1) @@ -538,36 +435,33 @@ class TopoAlgoDef: alg.addvariable('DeltaPhiMin', d.minDphi) alg.addvariable('DeltaPhiMax', d.maxDphi) alg.addvariable('MinET1', d.ocut1) - alg.addvariable('MinET2', d.ocut2) - + alg.addvariable('MinET2', d.ocut2) tm.registerTopoAlgo(alg) algolist=[ - {"minDr": 0, "maxDr": 28, "otype1" : "MU" ,"ocut1": 10, "olist1" : "ab", "nleading1": HW.OutputWidthSelectMU, "inputwidth1": HW.OutputWidthSelectMU, "otype2" : "TAU", "ocut2": 12, "olist2" : "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU}, # 0DR28-MU10ab-TAU12abi - {"minDr": 0, "maxDr": 28, "otype1" : "TAU" ,"ocut1": 20, "olist1" : "abi","nleading1": HW.OutputWidthSelectTAU, "inputwidth1": HW.OutputWidthSelectTAU,"otype2" : "TAU", "ocut2": 12, "olist2" : "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU}, # 0DR28-TAU20abi-TAU12abi - {"minDr": 0, "maxDr": 25, "otype1" : "TAU" ,"ocut1": 20, "olist1" : "abi","nleading1": HW.OutputWidthSelectTAU, "inputwidth1": HW.OutputWidthSelectTAU,"otype2" : "TAU", "ocut2": 12, "olist2" : "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU}, # 0DR25-TAU20abi-TAU12abi - ] - - + { "minDr": 0, "maxDr": 28, "otype1" : "MU" ,"ocut1": 10, "olist1" : "ab", + "nleading1": HW.OutputWidthSelectMU, "inputwidth1": HW.OutputWidthSelectMU, "otype2" : "TAU", "ocut2": 12, "olist2" : "abi", + "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU}, # 0DR28-MU10ab-TAU12abi + { "minDr": 0, "maxDr": 28, "otype1" : "TAU" ,"ocut1": 20, "olist1" : "abi", + "nleading1": HW.OutputWidthSelectTAU, "inputwidth1": HW.OutputWidthSelectTAU,"otype2" : "TAU", "ocut2": 12, "olist2" : "abi", + "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU}, # 0DR28-TAU20abi-TAU12abi + { "minDr": 0, "maxDr": 25, "otype1" : "TAU" ,"ocut1": 20, "olist1" : "abi", + "nleading1": HW.OutputWidthSelectTAU, "inputwidth1": HW.OutputWidthSelectTAU,"otype2" : "TAU", "ocut2": 12, "olist2" : "abi", + "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU}, # 0DR25-TAU20abi-TAU12abi + ] for x in algolist: - class d: pass for k in x: setattr (d, k, x[k]) - obj1 = "%s%s%s" % (d.otype1, str(d.ocut1), d.olist1) obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2), d.olist2) toponame = "%iDR%i-%s%s" % (d.minDr, d.maxDr, obj1, obj2) - log.debug("Define %s", toponame) - inputList = [d.otype1 + d.olist1] if d.otype1==d.otype2 else [d.otype1 + d.olist1, d.otype2 + d.olist2] algoname = AlgConf.DeltaRSqrIncl1 if d.otype1==d.otype2 else AlgConf.DeltaRSqrIncl2 alg = algoname( name = toponame, inputs = inputList, outputs = [ toponame ]) - - if d.otype1==d.otype2: alg.addgeneric('InputWidth', d.inputwidth1) alg.addgeneric('MaxTob', d.nleading1) @@ -576,9 +470,7 @@ class TopoAlgoDef: alg.addgeneric('InputWidth2', d.inputwidth2) alg.addgeneric('MaxTob1', d.nleading1) alg.addgeneric('MaxTob2', d.nleading2) - alg.addgeneric('NumResultBits', 1) - if d.otype1==d.otype2: alg.addvariable('MinET1', d.ocut1) alg.addvariable('MinET2', d.ocut2) @@ -588,41 +480,24 @@ class TopoAlgoDef: alg.addvariable('MinET1', d.ocut1, 0) alg.addvariable('MinET2', d.ocut2, 0) alg.addvariable('DeltaRMin', d.minDr*d.minDr, 0) - alg.addvariable('DeltaRMax', d.maxDr*d.maxDr, 0) - + alg.addvariable('DeltaRMax', d.maxDr*d.maxDr, 0) tm.registerTopoAlgo(alg) + # (ATR-8194) L1Topo HT Trigger - if usev8: - algoList = [ - {"minHT": 150, "otype" : "J", "ocut" : 20, "olist" : "s", "nleading" : 5, "inputwidth": HW.OutputWidthSortJET, "oeta" : 31}, #HT150-J20s5pETA31 - {"minHT": 190, "otype" : "J", "ocut" : 15, "olist" : "s", "nleading" : 5, "inputwidth": HW.OutputWidthSortJET, "oeta" : 21}, #HT190-J15s5pETA21 - ] - else: - algoList = [ + algoList = [ {"minHT": 150, "otype" : "J", "ocut" : 20, "olist" : "s", "nleading" : 5, "inputwidth": HW.OutputWidthSortJET, "oeta" : 31}, #HT150-J20s5pETA31 {"minHT": 190, "otype" : "J", "ocut" : 15, "olist" : "s", "nleading" : 5, "inputwidth": HW.OutputWidthSortJET, "oeta" : 21}, #HT190-J15s5pETA21 - {"minHT": 190, "otype" : "AJ", "ocut" : 15, "olist" : "all", "nleading" : HW.InputWidthJET, "inputwidth": HW.InputWidthJET, "oeta" : 21}, #HT190-AJ15allpETA21 - {"minHT": 150, "otype" : "AJ", "ocut" : 20, "olist" : "all", "nleading" : HW.InputWidthJET, "inputwidth": HW.InputWidthJET, "oeta" : 31}, #HT150-AJ20allpETA31 - {"minHT": 150, "otype" : "AJj","ocut" : 15, "olist" : "all", "nleading" : HW.InputWidthJET, "inputwidth": HW.InputWidthJET, "oeta" : 49}, #HT150-AJj15allpETA49 - {"minHT": 20, "otype" : "AJj","ocut" : 15, "olist" : "all", "nleading" : HW.InputWidthJET, "inputwidth": HW.InputWidthJET, "oeta" : 49}, #HT20-AJj15allpETA49 - ] - for x in algoList: - + ] + for x in algoList: class d: pass for k in x: setattr (d, k, x[k]) - toponame = "HT%d-%s%s%s%spETA%s" % (d.minHT, d.otype, str(d.ocut), d.olist, str(d.nleading) if d.olist=="s" else "", str(d.oeta)) - log.debug("Define %s", toponame) - inputList = d.otype + d.olist - alg = AlgConf.JetHT( name = toponame, inputs = inputList, outputs = [toponame] ) - - alg.addgeneric('InputWidth', d.inputwidth) alg.addgeneric('MaxTob', d.nleading) alg.addgeneric('NumRegisters', 2 if d.olist=="all" else 0) @@ -633,30 +508,21 @@ class TopoAlgoDef: alg.addvariable('MinHt', d.minHT) tm.registerTopoAlgo(alg) - # INVM_EM for Jpsi - if usev8: - invm_map = {"algoname": 'INVM_EMs6' , "ocutlist": [ 7, 12 ], "minInvm": 1, "maxInvm": 5, "otype" : "EM", "olist" : "s", "nleading" : 1, "inputwidth": HW.OutputWidthSortEM} - else: - invm_map = {"algoname": 'INVM_EMs6' , "ocutlist": [ 0, 7, 12 ], "minInvm": 1, "maxInvm": 5, "otype" : "EM", "olist" : "s", "nleading" : 1, "inputwidth": HW.OutputWidthSortEM} - for x in [ invm_map, - ]: - + # INVM_EM for Jpsi + invm_map = { "algoname": 'INVM_EMs6' , "ocutlist": [ 7, 12 ], "minInvm": 1, "maxInvm": 5, "otype" : "EM", "olist" : "s", + "nleading" : 1, "inputwidth": HW.OutputWidthSortEM} + for x in [ invm_map ]: class d: pass for k in x: setattr (d, k, x[k]) - inputList = d.otype + d.olist toponames=[] - for ocut in d.ocutlist: - toponame = "%iINVM%i-%s%s%s%s-EMs6" % (d.minInvm, d.maxInvm, d.otype, str(ocut) if ocut > 0 else "", d.olist, str(d.nleading) if d.olist=="s" else "") + toponame = "%iINVM%i-%s%s%s%s-EMs6" % (d.minInvm, d.maxInvm, d.otype, str(ocut) if ocut > 0 else "", d.olist, str(d.nleading) if d.olist=="s" else "") toponames.append(toponame) - alg = AlgConf.InvariantMassInclusive2( name = d.algoname, inputs = [inputList, 'EMs'], outputs = toponames) - - alg.addgeneric('InputWidth1', d.inputwidth) #alg.addgeneric('InputWidth2', HW.InputWidthEM) alg.addgeneric('InputWidth2', HW.OutputWidthSortEM) @@ -664,109 +530,30 @@ class TopoAlgoDef: #alg.addgeneric('MaxTob2', HW.InputWidthEM) alg.addgeneric('MaxTob2', HW.OutputWidthSortEM) alg.addgeneric('NumResultBits', len(toponames)) - for bitid, ocut in enumerate(d.ocutlist): alg.addvariable('MinET1', ocut, bitid) alg.addvariable('MinET2', 0, bitid) alg.addvariable('MinMSqr', (d.minInvm * _emscale_for_decision)*(d.minInvm * _emscale_for_decision), bitid) alg.addvariable('MaxMSqr', (d.maxInvm * _emscale_for_decision)*(d.maxInvm * _emscale_for_decision), bitid) - - tm.registerTopoAlgo(alg) - - # W T&P: MINDPHI(J, XE0), (EM, XE0) - - - if not usev8: - alglist = [ - {"minDPhi": 5, "otype" : "AJj", "ocut" : 10, "olist" : "s", "nleading" : 6, "inputwidth": HW.OutputWidthSortJET}, - {"minDPhi": 10, "otype" : "AJj", "ocut" : 10, "olist" : "s", "nleading" : 6, "inputwidth": HW.OutputWidthSortJET}, - {"minDPhi": 15, "otype" : "AJj", "ocut" : 10, "olist" : "s", "nleading" : 6, "inputwidth": HW.OutputWidthSortJET}, - {"minDPhi": 5, "otype" : "EM", "ocut" : 12, "olist" : "s", "nleading" : 6, "inputwidth": HW.OutputWidthSortEM},#new - #{"minDPhi": 10, "otype" : "EM", "ocut" : 12, "olist" : "s", "nleading" : 6, "inputwidth": HW.OutputWidthSortEM},#new - {"minDPhi": 5, "otype" : "EM", "ocut" : 15, "olist" : "s", "nleading" : 6, "inputwidth": HW.OutputWidthSortEM},#same - ] - if usev8: - alglist = [] - - for x in alglist: - - class d: - pass - for k in x: - setattr (d, k, x[k]) - - toponame = "%02dMINDPHI-%s%s%s%s-XE0" % (d.minDPhi, d.otype, str(d.ocut) if d.ocut > 0 else "", d.olist, str(d.nleading) if d.olist=="s" else "") - log.debug("Define %s", toponame) - - inputList = d.otype + d.olist - - alg = AlgConf.MinDeltaPhiIncl2( name = toponame, inputs = [ inputList, 'XE'], outputs = [ toponame ] ) - - - alg.addgeneric('InputWidth1', d.inputwidth) - alg.addgeneric('InputWidth2', 1) - alg.addgeneric('MaxTob1', d.nleading) - alg.addgeneric('MaxTob2', 1) - alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET1', d.ocut) - alg.addvariable('MinET2', 0) - alg.addvariable('DeltaPhiMin', d.minDPhi, 0) tm.registerTopoAlgo(alg) - # W T&P MT - - if not usev8: - alglistmt = [ - {"minMT": 25, "otype" : "EM", "ocut" : "12", "olist" : "s", "nleading" : 6, "inputwidth": HW.OutputWidthSortEM}, - {"minMT": 35, "otype" : "EM", "ocut" : "15", "olist" : "s", "nleading" : 6, "inputwidth": HW.OutputWidthSortEM}, - ] - if usev8: - alglistmt = [] - for x in alglistmt: - class d: - pass - for k in x: - setattr (d, k, x[k]) - - toponame = "%iMT-%s%s%s%s-XE0" % (d.minMT, d.otype, str(d.ocut) if d.ocut > 0 else "", d.olist, str(d.nleading) if d.olist=="s" else "") - log.debug("Define %s", toponame) - - inputList = d.otype + d.olist - - alg = AlgConf.TransverseMassInclusive1( name = toponame, inputs = [ inputList, 'XE'], outputs = [ toponame ] ) - - - - alg.addgeneric('InputWidth', HW.OutputWidthSortEM) - alg.addgeneric('MaxTob', str(d.nleading)) - alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET1', str(d.ocut)) - alg.addvariable('MinET2', 0) - alg.addvariable('MinMTSqr', d.minMT*d.minMT) - tm.registerTopoAlgo(alg) - - # VBF deta + # VBF deta algoList = [ - {"minDeta": 0, "maxDeta": 20, "otype" : "J", "ocut1" : 50, "olist" : "s", "nleading1" : 1, "inputwidth1": HW.OutputWidthSortJET, "ocut2" : 0, "nleading2": 2}, #0DETA20-J50s1-Js2 + { "minDeta": 0, "maxDeta": 20, "otype" : "J", "ocut1" : 50, "olist" : "s", + "nleading1" : 1, "inputwidth1": HW.OutputWidthSortJET, "ocut2" : 0, "nleading2": 2}, #0DETA20-J50s1-Js2 ] for x in algoList: class d: pass for k in x: setattr (d, k, x[k]) - toponame = "%iDETA%i-%s%s%s%s-%s%s%s%s" % (d.minDeta, d.maxDeta, - d.otype, str(d.ocut1) if d.ocut1 > 0 else "", d.olist, str(d.nleading1) if d.olist=="s" else "", - d.otype, str(d.ocut2) if d.ocut2 > 0 else "", d.olist, str(d.nleading2) if d.olist=="s" else "") - + d.otype, d.ocut1 if d.ocut1 > 0 else "", d.olist, d.nleading1 if d.olist=="s" else "", + d.otype, d.ocut2 if d.ocut2 > 0 else "", d.olist, d.nleading2 if d.olist=="s" else "") log.debug("Define %s", toponame) - inputList = d.otype + d.olist - + inputList = d.otype + d.olist alg = AlgConf.DeltaEtaIncl1( name = toponame, inputs = inputList, outputs = toponame ) - - - alg.addgeneric('InputWidth', d.inputwidth1) alg.addgeneric('MaxTob', d.nleading2) alg.addgeneric('NumResultBits', 1) @@ -775,37 +562,24 @@ class TopoAlgoDef: alg.addvariable('MinDeltaEta', d.minDeta, 0) alg.addvariable('MaxDeltaEta', d.maxDeta, 0) tm.registerTopoAlgo(alg) - - # ZH Trigger - - if usev8: - supportedalgolist = [ - {"minDPhi": 10, "otype" : "J", "ocut" : 20, "olist" : "s", "nleading" : 2, "inputwidth": HW.OutputWidthSortJET, "ocut2": 30 }, #10MINDPHI-J20s2-XE30 - {"minDPhi": 10, "otype" : "J", "ocut" : 20, "olist" : "s", "nleading" : 2, "inputwidth": HW.OutputWidthSortJET, "ocut2": 50 }, #10MINDPHI-J20s2-XE50 - ] - else: - supportedalgolist = [ - #{"minDPhi": 10, "otype" : "J", "ocut" : 0, "olist" : "s", "nleading" : 2, "inputwidth": HW.OutputWidthSortJET, "ocut2": 50 }, - {"minDPhi": 10, "otype" : "J", "ocut" : 20, "olist" : "s", "nleading" : 2, "inputwidth": HW.OutputWidthSortJET, "ocut2": 50 }, #10MINDPHI-J20s2-XE50 - {"minDPhi": 10, "otype" : "J", "ocut" : 20, "olist" : "ab", "nleading" : HW.OutputWidthSelectJET, "inputwidth": HW.OutputWidthSelectJET, "ocut2": 50}, #10MINDPHI-J20ab-XE50 - {"minDPhi": 10, "otype" : "CJ","ocut" : 20, "olist" : "ab", "nleading" : HW.OutputWidthSelectJET, "inputwidth": HW.OutputWidthSelectJET, "ocut2": 50}, #10MINDPHI-CJ20ab-XE50 - {"minDPhi": 10, "otype" : "J", "ocut" : 20, "olist" : "s", "nleading" : 2, "inputwidth": HW.OutputWidthSortJET, "ocut2": 30 }, #10MINDPHI-J20s2-XE30 - ] - for x in supportedalgolist: + # ZH Trigger + supportedalgolist = [ + { "minDPhi": 10, "otype" : "J", "ocut" : 20, "olist" : "s", + "nleading" : 2, "inputwidth": HW.OutputWidthSortJET, "ocut2": 30 }, #10MINDPHI-J20s2-XE30 + { "minDPhi": 10, "otype" : "J", "ocut" : 20, "olist" : "s", + "nleading" : 2, "inputwidth": HW.OutputWidthSortJET, "ocut2": 50 }, #10MINDPHI-J20s2-XE50 + ] + for x in supportedalgolist: class d: pass for k in x: setattr (d, k, x[k]) - toponame = "%iMINDPHI-%s%s%s%s-XE%i" % (d.minDPhi, d.otype, str(d.ocut) if d.ocut > 0 else "", d.olist, str(d.nleading) if d.olist=="s" else "",d.ocut2) log.debug("Define %s", toponame) - inputList = d.otype + d.olist - alg = AlgConf.MinDeltaPhiIncl2( name = toponame, inputs = [inputList, 'XE'], outputs = [ toponame ] ) - alg.addgeneric('InputWidth1', d.inputwidth) alg.addgeneric('InputWidth2', 1) alg.addgeneric('MaxTob1', d.nleading) @@ -815,36 +589,22 @@ class TopoAlgoDef: alg.addvariable('MinET2', d.ocut2) alg.addvariable('DeltaPhiMin', d.minDPhi, 0) tm.registerTopoAlgo(alg) + # added for muon-jet: - if not usev8: - algoList = [ - {"minDr": 0, "maxDr": 4, "otype1" : "MU" ,"ocut1": 4, "olist1" : "ab", "otype2" : "CJ", "ocut2": 15, "olist2" : "ab"}, #0DR04-MU4ab-CJ15ab - {"minDr": 0, "maxDr": 4, "otype1" : "MU" ,"ocut1": 4, "olist1" : "ab", "otype2" : "CJ", "ocut2": 30, "olist2" : "ab"}, #0DR04-MU4ab-CJ30ab - {"minDr": 0, "maxDr": 4, "otype1" : "MU" ,"ocut1": 6, "olist1" : "ab", "otype2" : "CJ", "ocut2": 20, "olist2" : "ab"}, #0DR04-MU4ab-CJ20ab - {"minDr": 0, "maxDr": 4, "otype1" : "MU" ,"ocut1": 6, "olist1" : "ab", "otype2" : "CJ", "ocut2": 25, "olist2" : "ab"}, #0DR04-MU6ab-CJ25ab - {"minDr": 0, "maxDr": 4, "otype1" : "MU" ,"ocut1": 4, "olist1" : "ab", "otype2" : "CJ", "ocut2": 20, "olist2" : "ab"}, #0DR04-MU6ab-CJ20ab - ] - if usev8: - algoList = [ - {"minDr": 0, "maxDr": 4, "otype1" : "MU" ,"ocut1": 4, "olist1" : "ab", "otype2" : "CJ", "ocut2": 15, "olist2" : "ab"}, #0DR04-MU4ab-CJ15ab - {"minDr": 0, "maxDr": 4, "otype1" : "MU" ,"ocut1": 6, "olist1" : "ab", "otype2" : "CJ", "ocut2": 20, "olist2" : "ab"}, #0DR04-MU6ab-CJ20ab - ] - + algoList = [ + {"minDr": 0, "maxDr": 4, "otype1" : "MU" ,"ocut1": 4, "olist1" : "ab", "otype2" : "CJ", "ocut2": 15, "olist2" : "ab"}, #0DR04-MU4ab-CJ15ab + {"minDr": 0, "maxDr": 4, "otype1" : "MU" ,"ocut1": 6, "olist1" : "ab", "otype2" : "CJ", "ocut2": 20, "olist2" : "ab"}, #0DR04-MU6ab-CJ20ab + ] for x in algoList: - class d: pass for k in x: setattr (d, k, x[k]) - toponame = "%iDR%02d-%s%s%s-%s%s%s" % (d.minDr, d.maxDr, d.otype1, str(d.ocut1), d.olist1, d.otype2, str(d.ocut2), d.olist2) log.debug("Define %s", toponame) - inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2] - alg = AlgConf.DeltaRSqrIncl2( name = toponame, inputs = inputList, outputs = [ toponame ]) - alg.addgeneric('InputWidth1', HW.OutputWidthSelectMU) alg.addgeneric('InputWidth2', HW.OutputWidthSelectJET) alg.addgeneric('MaxTob1', HW.OutputWidthSelectMU) @@ -858,10 +618,11 @@ class TopoAlgoDef: # MULT-BIT - for x in [ - {"otype1" : "CMU" ,"ocut1": 4, "olist1" : "ab", "nleading1": HW.OutputWidthSelectMU, "inputwidth1": HW.OutputWidthSelectMU}, #MULT-CMU4ab - {"otype1" : "CMU" ,"ocut1": 6, "olist1" : "ab", "nleading1": HW.OutputWidthSelectMU, "inputwidth1": HW.OutputWidthSelectMU}, #MULT-CMU6ab - ]: + algoList = [ + {"otype1" : "CMU" ,"ocut1": 4, "olist1" : "ab", "nleading1": HW.OutputWidthSelectMU, "inputwidth1": HW.OutputWidthSelectMU}, #MULT-CMU4ab + {"otype1" : "CMU" ,"ocut1": 6, "olist1" : "ab", "nleading1": HW.OutputWidthSelectMU, "inputwidth1": HW.OutputWidthSelectMU}, #MULT-CMU6ab + ] + for x in algoList: class d: pass for k in x: @@ -892,208 +653,50 @@ class TopoAlgoDef: tm.registerTopoAlgo(alg) - if not usev8: - algolist=[ - {"minInvm": 2, "maxInvm": 8, "mult": 1, "otype1" : "CMU","ocut1": 4, "olist" : "ab", "otype2" :"MU", "ocut2" : 4, "onebarrel": 0}, #2INVM8-CMU4ab-MU4ab - {"minInvm": 2, "maxInvm": 8, "mult": 1, "otype1" : "MU", "ocut1": 6, "olist" : "ab", "otype2" : "MU","ocut2" : 4, "onebarrel": 1}, #2INVM8-ONEBARREL-MU6ab-MU4ab - ] - if usev8: - algolist=[] - - for x in algolist: - + # LFV DETA ATR-14282 + algoList = [ + { "minDeta": 0, "maxDeta": "04", "mult": 1, "otype1" : "EM", "ocut1": 8, "olist1" : "abi", + "nleading1": HW.OutputWidthSelectEM, "otype2" : "MU", "ocut2": 10, "olist2": "ab", + "nleading2": HW.OutputWidthSelectMU}, #0DETA04-EM8abi-MU10ab + { "minDeta": 0, "maxDeta": "04", "mult": 1, + "otype1" : "EM", "ocut1": 15, "olist1" : "abi", "nleading1": HW.OutputWidthSelectEM, + "otype2" : "MU", "ocut2": 0, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, #0DETA04-EM15abi-MUab + ] + for x in algoList: class d: pass for k in x: setattr (d, k, x[k]) - - obj1 = "%s%s%s%s" % ((str(d.mult) if d.mult>1 else ""), d.otype1, str(d.ocut1), d.olist) - obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2), d.olist) - toponame = "%iINVM%i-%s%s%s" % (d.minInvm, d.maxInvm, "ONEBARREL-" if d.onebarrel==1 else "", obj1, "" if d.mult>1 else obj2) - + toponame = "%sDETA%s-%s%i%s-%s%s%s" % (d.minDeta, d.maxDeta, d.otype1, d.ocut1, d.olist1, d.otype2, str(d.ocut2) if d.ocut2>0 else "", d.olist2) log.debug("Define %s", toponame) - - - inputList = [d.otype1 + d.olist] if (d.mult>1 or d.otype1==d.otype2) else [d.otype1 + d.olist, d.otype2 + d.olist] - algoname = AlgConf.InvariantMassInclusive1 if (d.mult>1 or d.otype1==d.otype2) else AlgConf.InvariantMassInclusive2 - alg = algoname( name = toponame, inputs = inputList, outputs = [ toponame ]) - if (d.mult>1 or d.otype1==d.otype2): - alg.addgeneric('InputWidth', HW.OutputWidthSelectMU) - alg.addgeneric('MaxTob', HW.OutputWidthSelectMU) - alg.addgeneric('RequireOneBarrel', d.onebarrel) - else: - alg.addgeneric('InputWidth1', HW.OutputWidthSelectMU) - alg.addgeneric('InputWidth2', HW.OutputWidthSelectMU) - alg.addgeneric('MaxTob1', HW.OutputWidthSelectMU) - alg.addgeneric('MaxTob2', HW.OutputWidthSelectMU) - + inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2] + alg = AlgConf.DeltaEtaIncl2( name = toponame, inputs = inputList, outputs = [ toponame ]) alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET1', d.ocut1) - alg.addvariable('MinET2', d.ocut2 if d.ocut2>0 else d.ocut1) - alg.addvariable('MinMSqr', d.minInvm * d.minInvm) - alg.addvariable('MaxMSqr', d.maxInvm * d.maxInvm) + alg.addgeneric('InputWidth1', d.nleading1) + alg.addgeneric('InputWidth2', d.nleading2) + alg.addgeneric('MaxTob1', d.nleading1) + alg.addgeneric('MaxTob2', d.nleading2) + alg.addvariable('MinET1', d.ocut1, 0) + alg.addvariable('MinET2', d.ocut2, 0) + alg.addvariable('MinDeltaEta', d.minDeta, 0) + alg.addvariable('MaxDeltaEta', d.maxDeta, 0) tm.registerTopoAlgo(alg) - # dimu DR items - if not usev8: - algolist=[# {"minDr": 2, "maxDr": 15, "mult": 1, "otype1" : "CMU","ocut1": 4, "olist" : "ab", "otype2" : "MU", "ocut2": 4, "onebarrel": 0}, - # {"minDr": 2, "maxDr": 15, "mult": 2, "otype1" : "CMU","ocut1": 4, "olist" : "ab", "otype2" : "", "ocut2": 4, "onebarrel": 0}, - # {"minDr": 2, "maxDr": 15, "mult": 1, "otype1" : "MU", "ocut1": 6, "olist" : "ab", "otype2" : "MU","ocut2": 4, "onebarrel": 1}, - # {"minDr": 2, "maxDr": 15, "mult": 1, "otype1" : "CMU","ocut1": 6, "olist" : "ab", "otype2" : "CMU","ocut2": 4, "onebarrel": 0}, - - #SX - {"minDr": 0, "maxDr": 24, "mult": 2, "otype1" : "CMU","ocut1": 4, "olist" : "ab", "otype2" : "", "ocut2": 4, "onebarrel": 0}, #0DR24-2CMU4ab - {"minDr": 0, "maxDr": 24, "mult": 1, "otype1" : "CMU","ocut1": 4, "olist" : "ab", "otype2" : "MU","ocut2": 4, "onebarrel": 0}, #0DR24-CMU4ab-MU4ab - ] - if usev8: - algolist=[] - for x in algolist : + algoList = [ + {"minDphi": 0, "maxDphi": "03", "mult": 1, "otype1" : "EM", "ocut1": 8, "olist1" : "abi", "nleading1": HW.OutputWidthSelectEM, "otype2" : "MU", "ocut2": 10, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, #0DPHI03-EM8abi-MU10ab + {"minDphi": 0, "maxDphi": "03", "mult": 1, "otype1" : "EM", "ocut1": 15, "olist1" : "abi", "nleading1": HW.OutputWidthSelectEM, "otype2" : "MU", "ocut2": 0, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, #0DPHI03-EM15abi-MUab + ] + for x in algoList: class d: pass for k in x: - setattr (d, k, x[k]) - - obj1 = "%s%s%s%s" % ((str(d.mult) if d.mult>1 else ""), d.otype1, str(d.ocut1), d.olist) - obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2), d.olist) - toponame = "%iDR%i-%s%s%s" % (d.minDr, d.maxDr, "ONEBARREL-" if d.onebarrel==1 else "", obj1, "" if d.mult>1 else obj2) - + setattr (d, k, x[k]) + toponame = "%sDPHI%s-%s%s%s-%s%s%s" % (d.minDphi, d.maxDphi, d.otype1, str(d.ocut1), d.olist1, d.otype2, str(d.ocut2) if d.ocut2>0 else "", d.olist2) log.debug("Define %s", toponame) - - inputList = [d.otype1 + d.olist] if (d.mult>1 or d.otype1==d.otype2) else [d.otype1 + d.olist, d.otype2 + d.olist] - algoname = AlgConf.DeltaRSqrIncl1 if (d.mult>1 or d.otype1==d.otype2) else AlgConf.DeltaRSqrIncl2 - alg = algoname( name = toponame, inputs = inputList, outputs = [ toponame ]) - if (d.mult>1 or d.otype1==d.otype2): - alg.addgeneric('InputWidth', HW.OutputWidthSelectMU) - alg.addgeneric('MaxTob', HW.OutputWidthSelectMU) - alg.addgeneric('RequireOneBarrel', d.onebarrel) - else: - alg.addgeneric('InputWidth1', HW.OutputWidthSelectMU) - alg.addgeneric('InputWidth2', HW.OutputWidthSelectMU) - alg.addgeneric('MaxTob1', HW.OutputWidthSelectMU) - alg.addgeneric('MaxTob2', HW.OutputWidthSelectMU) - - - alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET1', d.ocut1) - alg.addvariable('MinET2', d.ocut2) - alg.addvariable('DeltaRMin', d.minDr*d.minDr) - alg.addvariable('DeltaRMax', d.maxDr*d.maxDr) - tm.registerTopoAlgo(alg) - - # deta-dphi with ab+ab - if usev8: - algoList = [] -# {"minDeta": 0, "maxDeta": "04", "minDphi": 0, "maxDphi": "03", "mult": 1, "otype1" : "EM", "ocut1": 8, "olist1" : "abi", "nleading1": HW.OutputWidthSelectEM, "otype2" : "MU", "ocut2": 10, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, -# {"minDeta": 0, "maxDeta": "04", "minDphi": 0, "maxDphi": "03", "mult": 1, "otype1" : "EM", "ocut1": 15, "olist1" : "abi", "nleading1": HW.OutputWidthSelectEM, "otype2" : "MU", "ocut2": 0, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, -# ] - else: - algoList = [ - {"minDeta": 0, "maxDeta": "04", "minDphi": 0, "maxDphi": "03", "mult": 1, "otype1" : "EM", "ocut1": 8, "olist1" : "abi", "nleading1": HW.OutputWidthSelectEM, "otype2" : "MU", "ocut2": 10, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, - {"minDeta": 0, "maxDeta": "04", "minDphi": 0, "maxDphi": "03", "mult": 1, "otype1" : "EM", "ocut1": 15, "olist1" : "abi", "nleading1": HW.OutputWidthSelectEM, "otype2" : "MU", "ocut2": 0, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, - {"minDeta": 0, "maxDeta": 20, "minDphi": 0, "maxDphi": 20, "mult": 1, "otype1" : "TAU", "ocut1": 20, "olist1" : "abi", "nleading1": HW.OutputWidthSelectTAU, "otype2" : "TAU", "ocut2": 12, "olist2": "abi", "nleading2": HW.OutputWidthSelectTAU}, #0DETA20-0DPHI20-TAU20abi-TAU12abi - ] - - for x in algoList: - class d: - pass - for k in x: - setattr (d, k, x[k]) - - obj1 = "%s%s%s%s" % ((str(d.mult) if d.mult>1 else ""), d.otype1, str(d.ocut1), d.olist1) - obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2) if d.ocut2>0 else "", d.olist2) - toponame = "%sDETA%s-%sDPHI%s-%s%s" % (d.minDeta, d.maxDeta, d.minDphi, d.maxDphi, obj1, "" if d.mult>1 else obj2) - - log.debug("Define %s", toponame) - - inputList = [d.otype1 + d.olist1] if (d.mult>1 or d.otype1==d.otype2) else [d.otype1 + d.olist1, d.otype2 + d.olist2] - algoname = AlgConf.DeltaEtaPhiIncl1 if (d.mult>1 or d.otype1==d.otype2) else AlgConf.DeltaEtaPhiIncl2 - - alg = algoname( name = toponame, inputs = inputList, outputs = [ toponame ]) - alg.addgeneric('NumResultBits', 1) - - if (d.mult>1 or d.otype1==d.otype2): - alg.addgeneric('InputWidth', d.nleading1) - alg.addgeneric('MaxTob', d.nleading1) - alg.addvariable('MinET1', d.ocut1, 0) - alg.addvariable('MinET2', d.ocut2, 0) - alg.addvariable('MinDeltaEta', d.minDeta, 0) - alg.addvariable('MaxDeltaEta', d.maxDeta, 0) - alg.addvariable('MinDeltaPhi', d.minDphi, 0) - alg.addvariable('MaxDeltaPhi', d.maxDphi, 0) - else: - alg.addgeneric('InputWidth1', d.nleading1) - alg.addgeneric('InputWidth2', d.nleading2) - alg.addgeneric('MaxTob1', d.nleading1) - alg.addgeneric('MaxTob2', d.nleading2) - alg.addvariable('MinET1', d.ocut1, 0) - alg.addvariable('MinET2', d.ocut2, 0) - alg.addvariable('DeltaEtaMin', d.minDeta, 0) - alg.addvariable('DeltaEtaMax', d.maxDeta, 0) - alg.addvariable('DeltaPhiMin', d.minDphi, 0) - alg.addvariable('DeltaPhiMax', d.maxDphi, 0) - - - tm.registerTopoAlgo(alg) - - # LFV DETA ATR-14282 - if usev7 or usev8: - algoList = [ - {"minDeta": 0, "maxDeta": "04", "mult": 1, "otype1" : "EM", "ocut1": 8, "olist1" : "abi", "nleading1": HW.OutputWidthSelectEM, "otype2" : "MU", "ocut2": 10, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, #0DETA04-EM8abi-MU10ab - {"minDeta": 0, "maxDeta": "04", "mult": 1, "otype1" : "EM", "ocut1": 15, "olist1" : "abi", "nleading1": HW.OutputWidthSelectEM, "otype2" : "MU", "ocut2": 0, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, #0DETA04-EM15abi-MUab - ] - else: - algoList = [] - - for x in algoList: - - class d: - pass - for k in x: - setattr (d, k, x[k]) - - toponame = "%sDETA%s-%s%s%s-%s%s%s" % (d.minDeta, d.maxDeta, d.otype1, str(d.ocut1), d.olist1, d.otype2, str(d.ocut2) if d.ocut2>0 else "", d.olist2) - - log.debug("Define %s", toponame) - - inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2] - alg = AlgConf.DeltaEtaIncl2( name = toponame, inputs = inputList, outputs = [ toponame ]) - alg.addgeneric('NumResultBits', 1) - - alg.addgeneric('InputWidth1', d.nleading1) - alg.addgeneric('InputWidth2', d.nleading2) - alg.addgeneric('MaxTob1', d.nleading1) - alg.addgeneric('MaxTob2', d.nleading2) - alg.addvariable('MinET1', d.ocut1, 0) - alg.addvariable('MinET2', d.ocut2, 0) - alg.addvariable('MinDeltaEta', d.minDeta, 0) - alg.addvariable('MaxDeltaEta', d.maxDeta, 0) - - tm.registerTopoAlgo(alg) - - if usev7 or usev8: - algoList = [ - {"minDphi": 0, "maxDphi": "03", "mult": 1, "otype1" : "EM", "ocut1": 8, "olist1" : "abi", "nleading1": HW.OutputWidthSelectEM, "otype2" : "MU", "ocut2": 10, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, #0DPHI03-EM8abi-MU10ab - {"minDphi": 0, "maxDphi": "03", "mult": 1, "otype1" : "EM", "ocut1": 15, "olist1" : "abi", "nleading1": HW.OutputWidthSelectEM, "otype2" : "MU", "ocut2": 0, "olist2": "ab", "nleading2": HW.OutputWidthSelectMU}, #0DPHI03-EM15abi-MUab - ] - else: - algoList = [] - - for x in algoList: - - class d: - pass - for k in x: - setattr (d, k, x[k]) - - toponame = "%sDPHI%s-%s%s%s-%s%s%s" % (d.minDphi, d.maxDphi, d.otype1, str(d.ocut1), d.olist1, d.otype2, str(d.ocut2) if d.ocut2>0 else "", d.olist2) - - log.debug("Define %s", toponame) - inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2] alg = AlgConf.DeltaPhiIncl2( name = toponame, inputs = inputList, outputs = [ toponame ]) - alg.addgeneric('NumResultBits', 1) - + alg.addgeneric('NumResultBits', 1) alg.addgeneric('InputWidth1', d.nleading1) alg.addgeneric('InputWidth2', d.nleading2) alg.addgeneric('MaxTob1', d.nleading1) @@ -1102,97 +705,9 @@ class TopoAlgoDef: alg.addvariable('MinET2', d.ocut2, 0) alg.addvariable('MinDeltaPhi', d.minDphi, 0) alg.addvariable('MaxDeltaPhi', d.maxDphi, 0) - tm.registerTopoAlgo(alg) - # JetMatch - if not usev8: - toponame = "0MATCH-4AJ20pETA31-4AJj15pETA31" - alg = AlgConf.MultiplicityCustom( name = toponame, inputs = [ 'AJMatchall' ], outputs = [ toponame ] ) - alg.addgeneric('InputWidth', HW.InputWidthJET) - alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET', 0) - alg.addvariable('MinEta', 0) - alg.addvariable('MaxEta', 31) - alg.addvariable('MinMultiplicity', 4) - tm.registerTopoAlgo(alg) - - # NoMatch for W T&P - if not usev8: - toponame = "NOT-02MATCH-EM10s1-AJj15allpETA49" - alg = AlgConf.NotMatch( name = toponame, inputs = [ 'EMs', 'AJjall'], outputs = [ toponame ] ) - alg.addgeneric('InputWidth1', HW.OutputWidthSortEM) - alg.addgeneric('InputWidth2', HW.InputWidthJET) - alg.addgeneric('MaxTob1', 1) - alg.addgeneric('MaxTob2', HW.InputWidthJET) - alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET1', 10) - alg.addvariable('MinET2', 15) - alg.addvariable('EtaMin1', 0) - alg.addvariable('EtaMax1', 49) - alg.addvariable('EtaMin2', 0) - alg.addvariable('EtaMax2', 49) - alg.addvariable('DRCut', 4) - tm.registerTopoAlgo(alg) - # RATIO SUM for W T&P - #toponame = "05RATIO-XE0-SUM0-EM10s1-HT0-AJj15allpETA49" - #alg = AlgConf.RatioSum( name = toponame, inputs = ['XE', 'AJjall', 'EMs'], outputs = [ toponame ] ); - #alg.addgeneric('InputWidth1', 1) - #alg.addgeneric('InputWidth2', HW.InputWidthJET) - #alg.addgeneric('InputWidth3', HW.OutputWidthSortEM) - #alg.addgeneric('MaxTob1', 1) - #alg.addgeneric('MaxTob2', HW.InputWidthJET) - #alg.addgeneric('MaxTob3', 1) - #alg.addgeneric('NumResultBits', 1) - #alg.addgeneric('UseCluster05Granularity', 1) - #alg.addvariable('MinET2', 15) - #alg.addvariable('EtaMin2', 0) - #alg.addvariable('EtaMax2', 49) - #alg.addvariable('MinET3', 10) - #alg.addvariable('EtaMin3', 0) - #alg.addvariable('EtaMax3', 49) - #alg.addvariable('MinMET', 0) - #alg.addvariable('HT', 0) - #alg.addvariable('SUM', 0) - #alg.addvariable('Ratio', 5, 0) - #tm.registerTopoAlgo(alg) - - # RATIO for W T&P - if not usev8: - algolist = [ - {"minRatio": 5, "ocut" : 15, "Ratio": "RATIO"}, - {"minRatio": 90, "ocut" : 15, "Ratio": "RATIO2"}, - {"minRatio": 250, "ocut" : 15, "Ratio": "RATIO2"}, - ] - if usev8: - algolist = [] - - for x in algolist: - - class d: - pass - for k in x: - setattr (d, k, x[k]) - - toponame = "%02d%s-XE0-HT0-AJj%sallpETA49" % (d.minRatio, d.Ratio, str(d.ocut)) - log.debug("Define %s", toponame) - - alg = AlgConf.Ratio( name = toponame, inputs = ['XE', 'AJjall'], outputs = [ toponame ] ) - alg.addgeneric('InputWidth1', 1) - alg.addgeneric('InputWidth2', HW.InputWidthJET) - alg.addgeneric('MaxTob1', 1) - alg.addgeneric('MaxTob2', HW.InputWidthJET) - alg.addgeneric('NumResultBits', 1) - alg.addgeneric('isXE2', 1 if d.Ratio=="RATIO2" else 0) - alg.addvariable('MinET2', str(d.ocut)) - alg.addvariable('EtaMin', 0) - alg.addvariable('EtaMax', 49) - alg.addvariable('MinET1', 0) - alg.addvariable('HT', 0) - alg.addvariable('Ratio', str(d.minRatio)) - tm.registerTopoAlgo(alg) - # RATIO MATCH dedicated to Exotic toponame = '100RATIO-0MATCH-TAU30si2-EMall' alg = AlgConf.RatioMatch( name = toponame, inputs = [ 'TAUsi', 'EMall'], outputs = [ toponame ] ) @@ -1206,6 +721,7 @@ class TopoAlgoDef: alg.addvariable('Ratio', 100, 0) tm.registerTopoAlgo(alg) + # NOT MATCH dedicated to Exotic toponame = 'NOT-0MATCH-TAU30si1-EMall' alg = AlgConf.NotMatch( name = toponame, inputs = [ 'TAUsi', 'EMall'], outputs = [ toponame ] ) @@ -1223,6 +739,7 @@ class TopoAlgoDef: alg.addvariable('DRCut', 0) tm.registerTopoAlgo(alg) + # DISAMB 1 and 2 lists algolist=[ { "disamb": 1, "otype1" : "TAU", "ocut1": 12, "olist1" : "abi", "nleading1": HW.OutputWidthSelectTAU, @@ -1254,71 +771,41 @@ class TopoAlgoDef: tm.registerTopoAlgo(alg) - # DISAMB 3 lists - if not usev8: - algoList = [ - {"disamb": 1, "otype1" : "EM", "ocut1": 15, "olist1": "shi","nleading1": 2, "inputwidth1": HW.OutputWidthSortEM, "otype2" : "TAU", "ocut2": 12, "olist2": "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU, "otype3" : "J", "ocut3": 25, "olist3": "ab", "nleading3": HW.OutputWidthSelectJET, "inputwidth3": HW.OutputWidthSelectJET}, #1DISAMB-EM15his2-TAU12abi-J25ab - {"disamb": 1, "otype1" : "TAU", "ocut1": 20, "olist1": "abi","nleading1": HW.OutputWidthSelectTAU, "inputwidth1": HW.OutputWidthSelectTAU, "otype2" : "TAU", "ocut2": 12, "olist2": "abi", "nleading2": HW.OutputWidthSelectTAU, "otype3" : "J", "ocut3": 25, "olist3": "ab", "nleading3": HW.OutputWidthSelectTAU}, #1DISAMB-TAU20abi-TAU12abi-J25ab - ] - if usev8: - algoList = [] - - for x in algoList: - - class d: - pass - for k in x: - setattr (d, k, x[k]) - - obj1 = "%s%s%s" % (d.otype1, str(d.ocut1), d.olist1.replace('shi','his') + (str(d.nleading1) if d.olist1.find('s')>=0 else "")) - obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2), d.olist2.replace('shi','his') + (str(d.nleading2) if d.olist2.find('s')>=0 else "")) - obj3 = "-%s%s%s" % (d.otype3, str(d.ocut3), d.olist3) - toponame = "%sDISAMB-%s%s%s" % ( d.disamb if d.disamb>0 else "", obj1, obj2, obj3) - - log.debug("Define %s", toponame) - - inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2, d.otype3 + d.olist3] - alg = AlgConf.DisambiguationIncl3( name = toponame, inputs = inputList, outputs = [ toponame ]) - alg.addgeneric('InputWidth1', d.inputwidth1) - alg.addgeneric('InputWidth2', d.inputwidth2) - alg.addgeneric('InputWidth3', d.inputwidth3) - alg.addgeneric('MaxTob1', d.nleading1) - alg.addgeneric('MaxTob2', d.nleading2) - alg.addgeneric('MaxTob3', d.nleading3) - alg.addgeneric('NumResultBits', 1) - alg.addgeneric('ApplyDR', 0) - alg.addvariable('MinET1', d.ocut1, 0) - alg.addvariable('MinET2', d.ocut2, 0) - alg.addvariable('MinET3', d.ocut3, 0) - alg.addvariable('DisambDRSqr', d.disamb*d.disamb, 0) # DisambDR - tm.registerTopoAlgo(alg) # DISAMB 3 lists with DR cut to 2nd and 3rd lists algolist=[ - { "disamb": 1, "otype1" : "EM", "ocut1": 15, "olist1": "shi","nleading1": 2, "inputwidth1": HW.OutputWidthSortEM, "otype2" : "TAU", "ocut2": 12, "olist2": "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU, "otype3" : "J", "ocut3": 25, "olist3": "ab", "nleading3": HW.OutputWidthSelectJET, "inputwidth3": HW.OutputWidthSelectJET, "drcutmin": 0, "drcutmax": 28}, #1DISAMB-J25ab-0DR28-EM15his2-TAU12abi - { "disamb": 2, "otype1" : "EM", "ocut1": 15, "olist1": "shi","nleading1": 2, "inputwidth1": HW.OutputWidthSortEM, "otype2" : "TAU", "ocut2": 12, - "olist2": "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU, "otype3" : "J", "ocut3": 25, "olist3": "ab", - "nleading3": HW.OutputWidthSelectJET, "inputwidth3": HW.OutputWidthSelectJET, "drcutmin": 0, "drcutmax": 28}, #2DISAMB-J25ab-0DR28-EM15his2-TAU12abi - { "disamb": 2, "otype1" : "TAU", "ocut1": 20, "olist1": "abi","nleading1": HW.OutputWidthSelectTAU, "inputwidth1": HW.OutputWidthSelectTAU, "otype2" : "TAU", "ocut2": 12, "olist2": "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU, "otype3" : "J", "ocut3": 25, "olist3": "ab", "nleading3": HW.OutputWidthSelectJET, "inputwidth3": HW.OutputWidthSelectJET, "drcutmin": 0, "drcutmax": 28}, # 2DISAMB-J25ab-0DR28-TAU20abi-TAU12abi - { "disamb": 2, "otype1" : "TAU", "ocut1": 20, "olist1": "abi","nleading1": HW.OutputWidthSelectTAU, "inputwidth1": HW.OutputWidthSelectTAU, + { "disamb": 1, "otype1" : "EM", + "ocut1": 15, "olist1": "shi","nleading1": 2, "inputwidth1": HW.OutputWidthSortEM, "otype2" : "TAU", + "ocut2": 12, "olist2": "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU, + "otype3" : "J", "ocut3": 25, "olist3": "ab", "nleading3": HW.OutputWidthSelectJET, "inputwidth3": HW.OutputWidthSelectJET, + "drcutmin": 0, "drcutmax": 28}, #1DISAMB-J25ab-0DR28-EM15his2-TAU12abi + { "disamb": 2, + "otype1" : "EM", "ocut1": 15, "olist1": "shi","nleading1": 2, "inputwidth1": HW.OutputWidthSortEM, "otype2" : "TAU", "ocut2": 12, "olist2": "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU, - "otype3" : "J", "ocut3": 25, "olist3": "ab", "nleading3": HW.OutputWidthSelectJET, "inputwidth3": HW.OutputWidthSelectJET, "drcutmin": 0, "drcutmax": 25}, # 2DISAMB-J25ab-0DR25-TAU20abi-TAU12abi + "otype3" : "J", "ocut3": 25, "olist3": "ab", "nleading3": HW.OutputWidthSelectJET, "inputwidth3": HW.OutputWidthSelectJET, + "drcutmin": 0, "drcutmax": 28}, #2DISAMB-J25ab-0DR28-EM15his2-TAU12abi + { "disamb": 2, + "otype1" : "TAU", "ocut1": 20, "olist1": "abi","nleading1": HW.OutputWidthSelectTAU, "inputwidth1": HW.OutputWidthSelectTAU, + "otype2" : "TAU", "ocut2": 12, "olist2": "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU, + "otype3" : "J", "ocut3": 25, "olist3": "ab", "nleading3": HW.OutputWidthSelectJET, "inputwidth3": HW.OutputWidthSelectJET, + "drcutmin": 0, "drcutmax": 28}, # 2DISAMB-J25ab-0DR28-TAU20abi-TAU12abi + { "disamb": 2, + "otype1" : "TAU", "ocut1": 20, "olist1": "abi","nleading1": HW.OutputWidthSelectTAU, "inputwidth1": HW.OutputWidthSelectTAU, + "otype2" : "TAU", "ocut2": 12, "olist2": "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU, + "otype3" : "J", "ocut3": 25, "olist3": "ab", "nleading3": HW.OutputWidthSelectJET, "inputwidth3": HW.OutputWidthSelectJET, + "drcutmin": 0, "drcutmax": 25}, # 2DISAMB-J25ab-0DR25-TAU20abi-TAU12abi ] for x in algolist: - class d: pass for k in x: setattr (d, k, x[k]) - obj1 = "-%s%s%s" % (d.otype1, str(d.ocut1), d.olist1.replace('shi','his') + (str(d.nleading1) if d.olist1.find('s')>=0 else "")) obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2), d.olist2.replace('shi','his') + (str(d.nleading2) if d.olist2.find('s')>=0 else "")) obj3 = "%s%s%s" % (d.otype3, str(d.ocut3), d.olist3) toponame = "%sDISAMB-%s-%dDR%d%s%s" % ( str(d.disamb) if d.disamb>0 else "", obj3, d.drcutmin, d.drcutmax, obj1, obj2) - - log.debug("Define %s", toponame) - + log.debug("Define %s", toponame) inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2, d.otype3 + d.olist3] alg = AlgConf.DisambiguationDRIncl3( name = toponame, inputs = inputList, outputs = [ toponame ]) alg.addgeneric('InputWidth1', d.inputwidth1) @@ -1337,198 +824,25 @@ class TopoAlgoDef: tm.registerTopoAlgo(alg) - # LAR 0<eta<1.4 and 9/16pi<phi<11/16pi for FE crate IO6 - if not usev8: - algoList = [ - {"minEta": 1, "maxEta": 15, "minPhi": 17, "maxPhi": 23, "otype" : "EM", "ocut" : 20, "olist" : "shi", "inputwidth": HW.OutputWidthSortEM}, #LAR-EM20shi1 - {"minEta": 1, "maxEta": 14, "minPhi": 17, "maxPhi": 23, "otype" : "J", "ocut" : 100, "olist" : "s", "inputwidth": HW.OutputWidthSortJET}, #LAR-J100s1 - ] - if usev8: - algoList = [] - - for x in algoList: - - class d: - pass - for k in x: - setattr (d, k, x[k]) - - toponame = "LAR-%s%s%s1" % ( d.otype, str(d.ocut), d.olist ) - - log.debug("Define %s", toponame) - - inputList = d.otype + d.olist - - alg = AlgConf.EtaPhiWindow( name = toponame, inputs = inputList, outputs = toponame ) - alg.addgeneric('InputWidth', d.inputwidth) - alg.addgeneric('MaxTob', 0) - alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET', str(d.ocut)) - alg.addvariable('EtaMin', d.minEta) - alg.addvariable('EtaMax', d.maxEta) - alg.addvariable('PhiMin', d.minPhi) - alg.addvariable('PhiMax', d.maxPhi) - tm.registerTopoAlgo(alg) - - - xemap = [{"etcut": 0, "Threlist": [ 40, 50, 55, 60, 65, 75 ]}] - for x in xemap: - + for x in xemap: class d: pass for k in x: - setattr (d, k, x[k]) - - log.debug("Define %s", toponame) - + setattr (d, k, x[k]) + log.debug("Define %s", toponame) inputList = ['XENoSort', 'AJall'] toponames=[] - for minxe in d.Threlist: - toponames.append("KF-XE%s-AJall" % (minxe)) - + toponames.append("KF-XE%s-AJall" % (minxe)) alg = AlgConf.KalmanMETCorrection( name = "KF-XE-AJall", inputs = inputList, outputs = toponames ) alg.addgeneric('InputWidth', HW.InputWidthJET) alg.addgeneric('NumResultBits', len(toponames)) alg.addvariable('MinET', 0) for bitid,minxe in enumerate(d.Threlist): - alg.addvariable('KFXE', str(minxe), bitid) - - tm.registerTopoAlgo(alg) - - # W T&P: MINDPHI(J, XE0), (EM, XE0) - - if not usev8: - alglist = [ - {"minDPhi": 15, "otype" : "EM", "ocut" : 12, "olist" : "s", "nleading" : 6, "inputwidth": HW.OutputWidthSortEM}, - {"minDPhi": 15, "otype" : "EM", "ocut" : 15, "olist" : "s", "nleading" : 6, "inputwidth": HW.OutputWidthSortEM}, - ] - else: - alglist = [] - - for x in alglist: - - class d: - pass - for k in x: - setattr (d, k, x[k]) - - toponame = "%02dMINDPHI-%s%s%s%s-XE0" % (d.minDPhi, d.otype, str(d.ocut) if d.ocut > 0 else "", d.olist, str(d.nleading) if d.olist=="s" else "") - log.debug("Define %s", toponame) - - inputList = d.otype + d.olist - - alg = AlgConf.MinDeltaPhiIncl2( name = toponame, inputs = [ inputList, 'XE'], outputs = [ toponame ] ) - - - alg.addgeneric('InputWidth1', d.inputwidth) - alg.addgeneric('InputWidth2', 1) - alg.addgeneric('MaxTob1', d.nleading) - alg.addgeneric('MaxTob2', 1) - alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET1', d.ocut) - alg.addvariable('MinET2', 0) - alg.addvariable('DeltaPhiMin', d.minDPhi, 0) + alg.addvariable('KFXE', str(minxe), bitid) tm.registerTopoAlgo(alg) - - # W T&P MT - - if not usev8: - alglistmt = [ - {"minMT": 35, "otype" : "EM", "ocut" : "12", "olist" : "s", "nleading" : 6, "inputwidth": HW.OutputWidthSortEM}, - ] - else: - alglistmt = [] - for x in alglistmt: - class d: - pass - for k in x: - setattr (d, k, x[k]) - - toponame = "%iMT-%s%s%s%s-XE0" % (d.minMT, d.otype, str(d.ocut) if d.ocut > 0 else "", d.olist, str(d.nleading) if d.olist=="s" else "") - log.debug("Define %s", toponame) - - inputList = d.otype + d.olist - - alg = AlgConf.TransverseMassInclusive1( name = toponame, inputs = [ inputList, 'XE'], outputs = [ toponame ] ) - - - - alg.addgeneric('InputWidth', HW.OutputWidthSortEM) - alg.addgeneric('MaxTob', str(d.nleading)) - alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET1', str(d.ocut)) - alg.addvariable('MinET2', 0) - alg.addvariable('MinMTSqr', d.minMT*d.minMT) - tm.registerTopoAlgo(alg) - - # DISAMB 2 lists with DR cut between objects in two lists - if not usev8: - algoList=[ - {"disamb": 0, "otype1" : "EM", "ocut1": 15, "olist1": "shi","nleading1": 2, "inputwidth1": HW.OutputWidthSortEM, "otype2" : "TAU", "ocut2": 12, "olist2": "abi", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU, "drcutmin": 0, "drcutmax": 28}, - ] - if usev8: - algoList=[] - - for x in algoList: - - class d: - pass - for k in x: - setattr (d, k, x[k]) - - obj1 = "-%s%s%s" % (d.otype1, str(d.ocut1), d.olist1.replace('shi','his') + (str(d.nleading1) if d.olist1.find('s')>=0 else "")) - obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2), d.olist2.replace('shi','his') + (str(d.nleading2) if d.olist2.find('s')>=0 else "")) - toponame = "%sDISAMB-%dDR%d%s%s" % ( str(d.disamb) if d.disamb>0 else "", d.drcutmin, d.drcutmax, obj1, obj2) - - log.debug("Define %s", toponame) - - inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2] - alg = AlgConf.DisambiguationDRIncl2( name = toponame, inputs = inputList, outputs = [ toponame ]) - alg.addgeneric('InputWidth1', d.inputwidth1) - alg.addgeneric('InputWidth2', d.inputwidth2) - alg.addgeneric('MaxTob1', d.nleading1) - alg.addgeneric('MaxTob2', d.nleading2) - alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET1', d.ocut1, 0) - alg.addvariable('MinET2', d.ocut2, 0) - alg.addvariable('DisambDRSqrMin', d.drcutmin*d.drcutmin, 0) - alg.addvariable('DisambDRSqrMax', d.drcutmax*d.drcutmax, 0) - tm.registerTopoAlgo(alg) - - # ZH Trigger - if not usev8: - supportedalgolist = [ - {"minDPhi": 10, "otype" : "AJ", "ocut" : 20, "olist" : "s", "nleading" : 2, "inputwidth": HW.OutputWidthSortJET}, - ] - if usev8: - supportedalgolist = [] - - for x in supportedalgolist: - - class d: - pass - for k in x: - setattr (d, k, x[k]) - - toponame = "%iMINDPHI-%s%s%s%s-XE50" % (d.minDPhi, d.otype, str(d.ocut) if d.ocut > 0 else "", d.olist, str(d.nleading) if d.olist=="s" else "") - log.debug("Define %s", toponame) - - inputList = d.otype + d.olist - - alg = AlgConf.MinDeltaPhiIncl2( name = toponame, inputs = [inputList, 'XE'], outputs = [ toponame ] ) - - alg.addgeneric('InputWidth1', d.inputwidth) - alg.addgeneric('InputWidth2', 1) - alg.addgeneric('MaxTob1', d.nleading) - alg.addgeneric('MaxTob2', 1) - alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET1', d.ocut) - alg.addvariable('MinET2', 50) - alg.addvariable('DeltaPhiMin', d.minDPhi, 0) - tm.registerTopoAlgo(alg) # LATE MUON : LATE-MU10s1 for x in [ @@ -1556,193 +870,125 @@ class TopoAlgoDef: # (ATR-12748) fat jet trigger with Simple Cone algo - if not usev8: - algoList = [ - {"minHT": 111, "otype" : "CJ", "ocut" : 15, "olist" : "ab", "nleading" : HW.OutputWidthSelectJET, "inputwidth": HW.OutputWidthSelectJET, "oeta" : 26}, #SC111-CJ15abpETA26 - {"minHT": 85, "otype" : "CJ", "ocut" : 15, "olist" : "ab", "nleading" : HW.OutputWidthSelectJET, "inputwidth": HW.OutputWidthSelectJET, "oeta" : 26}, #SC85-CJ15abpETA26 - ] - if usev8: - algoList = [ - {"minHT": 111, "otype" : "CJ", "ocut" : 15, "olist" : "ab", "nleading" : HW.OutputWidthSelectJET, "inputwidth": HW.OutputWidthSelectJET, "oeta" : 26}, #SC111-CJ15abpETA26 + algoList = [ + {"minHT": 111, "otype" : "CJ", "ocut" : 15, "olist" : "ab", "nleading" : HW.OutputWidthSelectJET, "inputwidth": HW.OutputWidthSelectJET, "oeta" : 26}, #SC111-CJ15abpETA26 ] - for x in algoList: - + for x in algoList: class d: pass for k in x: setattr (d, k, x[k]) - toponame = "SC%d-%s%s%s%spETA%s" % (d.minHT, d.otype, str(d.ocut), d.olist, str(d.nleading) if d.olist=="s" else "", str(d.oeta)) - log.debug("Define %s", toponame) - inputList = d.otype + d.olist - alg = AlgConf.SimpleCone( name = toponame, inputs = inputList, outputs = [toponame] ) - - alg.addgeneric('InputWidth', d.inputwidth) alg.addvariable('MinET', d.ocut) alg.addvariable('MinSumET', d.minHT) alg.addvariable('MaxRSqr', 10*10) tm.registerTopoAlgo(alg) - # DISAMB-INVM - - for x in [ - {"disamb": 0, "minInvm": 30, "maxInvm": 9999,"otype1" : "EM", "ocut1": 20, "olist1": "shi","nleading1": 2, "inputwidth1": HW.OutputWidthSortEM, "otype2" : "TAU", "ocut2": 12, "olist2": "ab", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU}, # DISAMB-30INVM-EM20his2-TAU12ab - ]: - - class d: - pass - for k in x: - setattr (d, k, x[k]) - - obj1 = "%s%s%s" % (d.otype1, str(d.ocut1), d.olist1.replace('shi','his') + (str(d.nleading1) if d.olist1.find('s')>=0 else "")) - obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2), d.olist2) - toponame = "%sDISAMB-%iINVM%s-%s%s" % ( d.disamb if d.disamb>0 else "", d.minInvm, str(d.maxInvm) if d.maxInvm<9999 else "", obj1, obj2) - - log.debug("Define %s", toponame) - inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2] - alg = AlgConf.DisambiguationInvmIncl2( name = toponame, inputs = inputList, outputs = toponame) - - alg.addgeneric('InputWidth1', d.inputwidth1) - alg.addgeneric('InputWidth2', d.inputwidth2) - alg.addgeneric('MaxTob1', d.nleading1) - alg.addgeneric('MaxTob2', d.nleading2) - alg.addgeneric('NumResultBits', 1) - - alg.addvariable('MinET1', d.ocut1) - alg.addvariable('MinET2', d.ocut2) - alg.addvariable('MinMSqr', d.minInvm * d.minInvm) - alg.addvariable('MaxMSqr', d.maxInvm * d.maxInvm) - - tm.registerTopoAlgo(alg) - - - for x in [ - { "minInvm": 400, "maxInvm": 9999, "otype1" : "AJ", "ocut1": 30, "olist1" : "s", "nleading1" : 6, "inputwidth1": HW.OutputWidthSortJET, - "otype2" : "AJ", "ocut2": 20, "olist2" : "s", "nleading2" : 6, "inputwidth2": HW.OutputWidthSortJET, "applyEtaCut":1, - "minEta1": 0 ,"maxEta1": 31 , "minEta2": 31 ,"maxEta2": 49 , }, #400INVM9999-AJ30s6pETA31-AJ20s6p31ETA49 - ]: - - class d: - pass - for k in x: - setattr (d, k, x[k]) - - obj1 = "%s%s%sp%sETA%i" % (d.otype1, str(d.ocut1), d.olist1 + (str(d.nleading1) if d.olist1.find('s')>=0 else ""),str(d.minEta1) if d.minEta1>0 else "", d.maxEta1) - obj2 = "-%s%s%sp%sETA%i" % (d.otype2, str(d.ocut2), d.olist2 + (str(d.nleading2) if d.olist2.find('s')>=0 else ""),str(d.minEta2) if d.minEta2>0 else "", d.maxEta2) - - inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2] - - toponame = "%iINVM%i-%s%s" % (d.minInvm, d.maxInvm, obj1, obj2) - alg = AlgConf.InvariantMassInclusive2( name = toponame, inputs = inputList, outputs = toponame) - - - alg.addgeneric('InputWidth1', d.inputwidth1) - alg.addgeneric('InputWidth2', d.inputwidth2) - alg.addgeneric('MaxTob1', d.nleading1) - alg.addgeneric('MaxTob2', d.nleading2) - alg.addgeneric('NumResultBits', 1) - if (d.applyEtaCut>0): - alg.addgeneric('ApplyEtaCut', d.applyEtaCut) - - alg.addvariable('MinET1', d.ocut1) - alg.addvariable('MinET2', d.ocut2) - alg.addvariable('MinMSqr', d.minInvm * d.minInvm ) - alg.addvariable('MaxMSqr', d.maxInvm * d.maxInvm ) - if (d.applyEtaCut>0): - alg.addvariable('MinEta1', d.minEta1) - alg.addvariable('MaxEta1', d.maxEta1) - alg.addvariable('MinEta2', d.minEta2) - alg.addvariable('MaxEta2', d.maxEta2) - - tm.registerTopoAlgo(alg) - - - # LAR ZEE - if not usev8: - algoList = [ - {"otype" : "EM", "ocut1" : 20, "ocut2" : 20, "olist" : "shi", "nleading1" : 2, "minInvm" : 60, "maxInvm" : 100, "inputwidth": HW.OutputWidthSortEM}, - ] - if usev8: - algoList = [] - - for x in algoList: + # DISAMB-INVM + algoList = [ + { "disamb": 0, "minInvm": 30, "maxInvm": 9999, + "otype1" : "EM", "ocut1": 20, "olist1": "shi","nleading1": 2, "inputwidth1": HW.OutputWidthSortEM, + "otype2" : "TAU", "ocut2": 12, "olist2": "ab", "nleading2": HW.OutputWidthSelectTAU, "inputwidth2": HW.OutputWidthSelectTAU}, # DISAMB-30INVM-EM20his2-TAU12ab + ] + for x in algoList: class d: pass for k in x: setattr (d, k, x[k]) - - toponame = 'ZEE-EM20shi2' - + obj1 = "%s%s%s" % (d.otype1, str(d.ocut1), d.olist1.replace('shi','his') + (str(d.nleading1) if d.olist1.find('s')>=0 else "")) + obj2 = "-%s%s%s" % (d.otype2, str(d.ocut2), d.olist2) + toponame = "%sDISAMB-%iINVM%s-%s%s" % ( d.disamb if d.disamb>0 else "", d.minInvm, str(d.maxInvm) if d.maxInvm<9999 else "", obj1, obj2) log.debug("Define %s", toponame) + inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2] + alg = AlgConf.DisambiguationInvmIncl2( name = toponame, inputs = inputList, outputs = toponame) + alg.addgeneric('InputWidth1', d.inputwidth1) + alg.addgeneric('InputWidth2', d.inputwidth2) + alg.addgeneric('MaxTob1', d.nleading1) + alg.addgeneric('MaxTob2', d.nleading2) + alg.addgeneric('NumResultBits', 1) + alg.addvariable('MinET1', d.ocut1) + alg.addvariable('MinET2', d.ocut2) + alg.addvariable('MinMSqr', d.minInvm * d.minInvm) + alg.addvariable('MaxMSqr', d.maxInvm * d.maxInvm) + tm.registerTopoAlgo(alg) - inputList = d.otype + d.olist - - - alg = AlgConf.InvariantMassInclusive1( name = toponame, inputs = inputList, outputs = toponame) - alg.addgeneric('InputWidth', d.inputwidth) - alg.addgeneric('MaxTob', d.nleading1) + algoList = [ + { "minInvm": 400, "maxInvm": 9999, "otype1" : "AJ", "ocut1": 30, "olist1" : "s", "nleading1" : 6, "inputwidth1": HW.OutputWidthSortJET, + "otype2" : "AJ", "ocut2": 20, "olist2" : "s", "nleading2" : 6, "inputwidth2": HW.OutputWidthSortJET, "applyEtaCut":1, + "minEta1": 0 ,"maxEta1": 31 , "minEta2": 31 ,"maxEta2": 49 , }, #400INVM9999-AJ30s6pETA31-AJ20s6p31ETA49 + ] + for x in algoList: + class d: + pass + for k in x: + setattr (d, k, x[k]) + obj1 = "%s%s%sp%sETA%i" % (d.otype1, str(d.ocut1), d.olist1 + (str(d.nleading1) if d.olist1.find('s')>=0 else ""),str(d.minEta1) if d.minEta1>0 else "", d.maxEta1) + obj2 = "-%s%s%sp%sETA%i" % (d.otype2, str(d.ocut2), d.olist2 + (str(d.nleading2) if d.olist2.find('s')>=0 else ""),str(d.minEta2) if d.minEta2>0 else "", d.maxEta2) + inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2] + toponame = "%iINVM%i-%s%s" % (d.minInvm, d.maxInvm, obj1, obj2) + alg = AlgConf.InvariantMassInclusive2( name = toponame, inputs = inputList, outputs = toponame) + alg.addgeneric('InputWidth1', d.inputwidth1) + alg.addgeneric('InputWidth2', d.inputwidth2) + alg.addgeneric('MaxTob1', d.nleading1) + alg.addgeneric('MaxTob2', d.nleading2) alg.addgeneric('NumResultBits', 1) - + if (d.applyEtaCut>0): + alg.addgeneric('ApplyEtaCut', d.applyEtaCut) alg.addvariable('MinET1', d.ocut1) alg.addvariable('MinET2', d.ocut2) - alg.addvariable('MinMSqr', (d.minInvm * _emscale_for_decision)*(d.minInvm * _emscale_for_decision)) - alg.addvariable('MaxMSqr', (d.maxInvm * _emscale_for_decision)*(d.maxInvm * _emscale_for_decision)) - + alg.addvariable('MinMSqr', d.minInvm * d.minInvm ) + alg.addvariable('MaxMSqr', d.maxInvm * d.maxInvm ) + if (d.applyEtaCut>0): + alg.addvariable('MinEta1', d.minEta1) + alg.addvariable('MaxEta1', d.maxEta1) + alg.addvariable('MinEta2', d.minEta2) + alg.addvariable('MaxEta2', d.maxEta2) tm.registerTopoAlgo(alg) - + # 0INVM9-EM7ab-EMab - for x in [ + algoList = [ {"minInvm" : 0, "maxInvm": 9, "otype" : "EM", "ocut1" : 7, "olist" : "ab", "inputwidth": HW.OutputWidthSelectEM, "ocut2" : 0}, - ]: - + ] + for x in algoList: class d: pass for k in x: setattr (d, k, x[k]) - inputList = d.otype + d.olist toponame = "%iINVM%i-%s%s%s-%s%s" % (d.minInvm, d.maxInvm, d.otype, str(d.ocut1) , d.olist, d.otype, d.olist) - alg = AlgConf.InvariantMassInclusive1( name = toponame, inputs = inputList, outputs = toponame) alg.addgeneric('InputWidth', d.inputwidth) alg.addgeneric('MaxTob', HW.OutputWidthSelectEM) alg.addgeneric('NumResultBits', 1) - alg.addvariable('MinET1', d.ocut1) alg.addvariable('MinET2', d.ocut2) alg.addvariable('MinMSqr', (d.minInvm * _emscale_for_decision)*(d.minInvm * _emscale_for_decision)) alg.addvariable('MaxMSqr', (d.maxInvm * _emscale_for_decision)*(d.maxInvm * _emscale_for_decision)) - tm.registerTopoAlgo(alg) - # added for b-phys, 0DR03-EM7ab-CJ15ab - for x in [ + algoList = [ {"minDr": 0, "maxDr": 3, "otype1" : "EM" ,"ocut1": 7, "olist1" : "ab", "otype2" : "CJ", "ocut2": 15, "olist2" : "ab"} - ]: - + ] + for x in algoList: class d: pass for k in x: setattr (d, k, x[k]) - toponame = "%iDR%02d-%s%s%s-%s%s%s" % (d.minDr, d.maxDr, d.otype1, str(d.ocut1), d.olist1, d.otype2, str(d.ocut2), d.olist2) log.debug("Define %s", toponame) - inputList = [d.otype1 + d.olist1, d.otype2 + d.olist2] - alg = AlgConf.DeltaRSqrIncl2( name = toponame, inputs = inputList, outputs = [ toponame ]) - alg.addgeneric('InputWidth1', HW.OutputWidthSelectEM) alg.addgeneric('InputWidth2', HW.OutputWidthSelectJET) alg.addgeneric('MaxTob1', HW.OutputWidthSelectEM) @@ -1756,39 +1002,27 @@ class TopoAlgoDef: # VBF items INVM_NFF - if usev8: - invm_nff_map = {"algoname": 'INVM_NFF', "Threlist": [ 500 ], "maxInvm": 9999, "otype1" : "J", "ocut1" : 30, "olist1" : "s", "nleading1" : 6, "inputwidth": HW.OutputWidthSortJET, "otype2" : "AJ", "ocut2" : 20, "olist2" : "s", "nleading2" : 6 } - else: - invm_nff_map = {"algoname": 'INVM_NFF', "Threlist": [ 600, 500, 400, 200 ], "maxInvm": 9999, "otype1" : "J", "ocut1" : 30, "olist1" : "s", "nleading1" : 6, "inputwidth": HW.OutputWidthSortJET, "otype2" : "AJ", "ocut2" : 20, "olist2" : "s", "nleading2" : 6 } - - for x in [ invm_nff_map, - ]: - + invm_nff_map = { "algoname": 'INVM_NFF', "Threlist": [ 500 ], "maxInvm": 9999, + "otype1" : "J", "ocut1" : 30, "olist1" : "s", "nleading1" : 6, "inputwidth": HW.OutputWidthSortJET, + "otype2" : "AJ", "ocut2" : 20, "olist2" : "s", "nleading2" : 6 } + for x in [ invm_nff_map ]: class d: pass for k in x: setattr (d, k, x[k]) - inputList = [d.otype1 + d.olist1, d.otype2 + d.olist1] toponames=[] - - for minInvm in d.Threlist: toponame = "%iINVM%i-%s%s%s%s-%s%s%s%s" % (minInvm, d.maxInvm, d.otype1, str(d.ocut1) , d.olist1, str(d.nleading1) if d.olist1=="s" else "", d.otype2, str(d.ocut2) , d.olist2, str(d.nleading2) if d.olist2=="s" else "") toponames.append(toponame) - - alg = AlgConf.InvariantMassInclusive2( name = d.algoname, inputs = inputList, outputs = toponames) - - alg.addgeneric('InputWidth1', d.inputwidth) alg.addgeneric('InputWidth2', d.inputwidth) alg.addgeneric('MaxTob1', d.nleading1) alg.addgeneric('MaxTob2', d.nleading2) alg.addgeneric('NumResultBits', len(toponames)) - for bitid, minInvm in enumerate(d.Threlist): alg.addvariable('MinET1', d.ocut1, bitid) alg.addvariable('MinET2', d.ocut2, bitid) @@ -1797,31 +1031,23 @@ class TopoAlgoDef: tm.registerTopoAlgo(alg) + # Axion 2EM DPHI #27DPHI32-EMs1-EMs6 - - if usev7 or usev8: - algoList = [ - {"minDphi": 27, "maxDphi": 32, "otype" : "EM", "ocut1" : 0, "olist" : "s", "nleading1" : 1, "inputwidth1": HW.OutputWidthSortEM, "ocut2" : 0, "nleading2": 6}, - ] - else: - algoList = [] - + algoList = [ + {"minDphi": 27, "maxDphi": 32, "otype" : "EM", "ocut1" : 0, "olist" : "s", "nleading1" : 1, "inputwidth1": HW.OutputWidthSortEM, "ocut2" : 0, "nleading2": 6}, + ] for x in algoList: class d: pass for k in x: setattr (d, k, x[k]) - toponame = "%iDPHI%i-%s%s%s%s-%s%s%s%s" % (d.minDphi, d.maxDphi, d.otype, str(d.ocut1) if d.ocut1 > 0 else "", d.olist, str(d.nleading1) if d.olist=="s" else "", d.otype, str(d.ocut2) if d.ocut2 > 0 else "", d.olist, str(d.nleading2) if d.olist=="s" else "") - log.debug("Define %s", toponame) - inputList = d.otype + d.olist - + inputList = d.otype + d.olist alg = AlgConf.DeltaPhiIncl1( name = toponame, inputs = inputList, outputs = toponame ) - alg.addgeneric('InputWidth', d.inputwidth1) alg.addgeneric('MaxTob', d.nleading2) alg.addgeneric('NumResultBits', 1) @@ -1833,9 +1059,11 @@ class TopoAlgoDef: # VBF items INVM_NFF + DPHI - NFFDphimap = [ { "minInvm": 400 , "maxInvm": 9999, "minDphi": 0, "maxDphiList": [26, 24, 22, 20], + NFFDphimap = [ + { "minInvm": 400 , "maxInvm": 9999, "minDphi": 0, "maxDphiList": [26, 24, 22, 20], "otype1" : "J", "ocut1" : 30, "olist1" : "s", "nleading1" : 6, "inputwidth": HW.OutputWidthSortJET, - "otype2" : "AJ", "ocut2" : 20, "olist2" : "s", "nleading2" : 6 }] + "otype2" : "AJ", "ocut2" : 20, "olist2" : "s", "nleading2" : 6 } + ] for x in NFFDphimap: class d: pass @@ -2095,18 +1323,6 @@ class TopoAlgoDef: tm.registerTopoAlgo(alg) - # CEP-CJ50s6, CEP-CJ60s6 - #for x in [50,60]: - # toponame = "CEP-CJ%is6" % x - # log.debug("Define %s", toponame) - # inputList = ['CJs'] - # alg = AlgConf.ExclusiveJets( name = toponame, inputs = inputList, outputs = toponame) - # alg.addvariable('MinET1', x) - # alg.addvariable('MinXi', 13000.0*0.02) - # alg.addvariable('MaxXi', 13000.0*0.05) - # tm.registerTopoAlgo(alg) - - # CEP-CJ50s6pETA21 x = 50 toponame = "CEP-CJ%is6pETA21" % x diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefLegacy.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefLegacy.py index 3bb0583614b3b8e861c2e27ab99496474f891dce..e4b95f0d621739707109dc92e5b49bb65942223c 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefLegacy.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefLegacy.py @@ -79,8 +79,7 @@ class TopoAlgoDefLegacy: alg.addvariable('IsoMask', 0) alg.addvariable('MinEta', 0) alg.addvariable('MaxEta', _etamax) - alg.addgeneric('DoIsoCut', '0') - #alg.addgeneric('DoEtaCut', '1') + alg.addgeneric('DoIsoCut', 0) tm.registerTopoAlgo(alg) @@ -91,8 +90,7 @@ class TopoAlgoDefLegacy: alg.addvariable('IsoMask', 3) alg.addvariable('MinEta', 0) alg.addvariable('MaxEta', _etamax) - alg.addgeneric('DoIsoCut', '1') - #alg.addgeneric('DoEtaCut', '1') + alg.addgeneric('DoIsoCut', 1) tm.registerTopoAlgo(alg) @@ -103,8 +101,7 @@ class TopoAlgoDefLegacy: alg.addvariable('IsoMask', 2) alg.addvariable('MinEta', 0) alg.addvariable('MaxEta', _etamax) - alg.addgeneric('DoIsoCut', '1') - #alg.addgeneric('DoEtaCut', '1') + alg.addgeneric('DoIsoCut', 1) tm.registerTopoAlgo(alg) @@ -595,7 +592,7 @@ class TopoAlgoDefLegacy: alg = AlgConf.TransverseMassInclusive1( name = toponame, inputs = [ inputList, 'XE'], outputs = [ toponame ], algoId = currentAlgoId ) currentAlgoId += 1 alg.addgeneric('InputWidth', HW.OutputWidthSortEM) - alg.addgeneric('MaxTob', str(d.nleading)) + alg.addgeneric('MaxTob', d.nleading) alg.addgeneric('NumResultBits', 1) alg.addvariable('MinET1', str(d.ocut)) alg.addvariable('MinET2', 0) @@ -1177,7 +1174,7 @@ class TopoAlgoDefLegacy: alg = AlgConf.TransverseMassInclusive1( name = toponame, inputs = [ inputList, 'XE'], outputs = [ toponame ], algoId = currentAlgoId ) currentAlgoId += 1 alg.addgeneric('InputWidth', HW.OutputWidthSortEM) - alg.addgeneric('MaxTob', str(d.nleading)) + alg.addgeneric('MaxTob', d.nleading) alg.addgeneric('NumResultBits', 1) alg.addvariable('MinET1', str(d.ocut)) alg.addvariable('MinET2', 0) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TypeWideThresholdConfig.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TypeWideThresholdConfig.py index 1609bb0130d1da8eb24b97f098db924eeeb76a8a..0fe451494a081dece84f43723913021bae7e3f3c 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TypeWideThresholdConfig.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TypeWideThresholdConfig.py @@ -48,16 +48,13 @@ def getConfig_eEM(): confObj = odict() confObj["workingPoints"] = odict() confObj["workingPoints"]["Loose"] = [ - odict([("etamin",0),("etamax",21), ("reta", 16), ("wstot", 15), ("had", 30)]), - odict([("etamin",21),("etamax",49), ("reta", 20), ("wstot", 25), ("had", 35)]) + odict([("reta", 0.12), ("wstot", 0.79), ("rhad", 0.31), ("maxEt", 60)]), ] confObj["workingPoints"]["Medium"] = [ - odict([("etamin",0),("etamax",21), ("reta", 17), ("wstot", 20), ("had", 30)]), - odict([("etamin",21),("etamax",49), ("reta", 21), ("wstot", 25), ("had", 35)]) + odict([("reta", 0.09), ("wstot", 0.65), ("rhad", 0.20), ("maxEt", 60)]), ] confObj["workingPoints"]["Tight"] = [ - odict([("etamin",0),("etamax",21), ("reta", 18), ("wstot", 22), ("had", 30)]), - odict([("etamin",21),("etamax",49), ("reta", 22), ("wstot", 25), ("had", 35)]) + odict([("reta", 0.08), ("wstot", 0.52), ("rhad", 0.19), ("maxEt", 60)]), ] confObj["ptMinToTopo"] = 3 confObj["resolutionMeV"] = 100 @@ -68,16 +65,13 @@ def getConfig_eTAU(): confObj = odict() confObj["workingPoints"] = odict() confObj["workingPoints"]["Loose"] = [ - odict([("etamin",0),("etamax",21), ("reta", 16), ("wstot", 15), ("had", 30)]), - odict([("etamin",21),("etamax",49), ("reta", 20), ("wstot", 25), ("had", 35)]) + odict([("isolation", 16), ("maxEt", 25)]), ] confObj["workingPoints"]["Medium"] = [ - odict([("etamin",0),("etamax",21), ("reta", 17), ("wstot", 20), ("had", 30)]), - odict([("etamin",21),("etamax",49), ("reta", 21), ("wstot", 25), ("had", 35)]) + odict([("isolation", 17), ("maxEt", 25)]), ] confObj["workingPoints"]["Tight"] = [ - odict([("etamin",0),("etamax",21), ("reta", 18), ("wstot", 22), ("had", 30)]), - odict([("etamin",21),("etamax",49), ("reta", 22), ("wstot", 25), ("had", 35)]) + odict([("isolation", 18), ("maxEt", 25)]), ] confObj["ptMinToTopo"] = 6 confObj["resolutionMeV"] = 100 diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8.py index aa8f7cadff8189e2c950099df0fc9ccaab52861d..d44ccffe4ccbbb0d6bf38c4f4af73b2d9df0761a 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8.py @@ -141,7 +141,7 @@ def defineMenu(): # multi jet - 'L1_J45.0ETA20_3J15.0ETA25', + 'L1_J45.0ETA23_3J15.0ETA25', 'L1_J50_2J40.0ETA25_3J15.0ETA25', 'L1_3J50', 'L1_4J15', 'L1_4J20', 'L1_3J15.0ETA25_XE40', @@ -479,7 +479,7 @@ def defineMenu(): 'L1_4J15' : 131, 'L1_4J20' : 132, 'L1_3J15.0ETA25_XE40' : 184, - 'L1_J45.0ETA20_3J15.0ETA25' : 86, + 'L1_J45.0ETA23_3J15.0ETA25' : 86, 'L1_J50_2J40.0ETA25_3J15.0ETA25' : 87, 'L1_6J15' : 135, diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8_inputs_legacy.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8_inputs_legacy.py index fd2b604629615485b614a736f92ddac46a6cc4cb..63f19ce04d6d5276f2b281f3093c3def18137f7d 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8_inputs_legacy.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8_inputs_legacy.py @@ -85,7 +85,7 @@ def defineLegacyInputsMenu(): "legacy" : True, "thresholds" : [ 'J30.0ETA49', 'J35.0ETA23', 'J40.0ETA25', # 3 x central Jet - 'J40', 'J50', 'J75', 'J85', 'J100', 'J45.0ETA20', 'J400', # 6 jets + 1 central jet + 'J40', 'J50', 'J75', 'J85', 'J100', 'J45.0ETA23', 'J400', # 6 jets + 1 central jet 'J15.31ETA49', 'J20.31ETA49', 'J30.31ETA49', 'J50.31ETA49', 'J75.31ETA49', # 6 x FJ ] }, diff --git a/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py b/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py index 155328bdfd8d59ccfe691da50dafc36f9ca5c07c..78cbf0474981eb672ad672ee60e5ee33a85bc6c1 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py @@ -14,7 +14,7 @@ def generateChains(): from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain, ChainStep, RecoFragmentsPool - from DecisionHandling.TestUtils import makeChain + from DecisionHandling.TestUtils import makeChain, makeChainStep testChains = [] ################################################################## @@ -26,9 +26,9 @@ def generateChains(): electronSeq = RecoFragmentsPool.retrieve( fastElectronSequenceCfg, None ) precisionCaloSeq = RecoFragmentsPool.retrieve( precisionCaloSequenceCfg, None ) - FastCaloStep = ChainStep("ElectronFastCaloStep", [fastCaloSeq]) - FastElectronStep = ChainStep("ElectronFastTrackStep", [electronSeq]) - PrecisionCaloStep = ChainStep("ElectronPrecisionCaloStep", [precisionCaloSeq]) + FastCaloStep = makeChainStep("ElectronFastCaloStep", [fastCaloSeq]) + FastElectronStep = makeChainStep("ElectronFastTrackStep", [electronSeq]) + PrecisionCaloStep = makeChainStep("ElectronPrecisionCaloStep", [precisionCaloSeq]) electronChains = [ makeChain(name='HLT_e3_etcut1step_L1EM3', L1Thresholds=["EM3"], ChainSteps=[FastCaloStep] ), @@ -43,9 +43,9 @@ def generateChains(): fastPhotonSeq = RecoFragmentsPool.retrieve( fastPhotonSequenceCfg, None ) precisionCaloPhotonSeq = RecoFragmentsPool.retrieve( precisionPhotonCaloSequenceCfg, None) - FastCaloStep = ChainStep("PhotonFastCaloStep", [fastCaloSeq]) - fastPhotonStep = ChainStep("PhotonStep2", [fastPhotonSeq]) - precisionCaloPhotonStep = ChainStep("precisionCaloPhotonStep", [precisionCaloPhotonSeq]) + FastCaloStep = makeChainStep("PhotonFastCaloStep", [fastCaloSeq]) + fastPhotonStep = makeChainStep("PhotonStep2", [fastPhotonSeq]) + precisionCaloPhotonStep = makeChainStep("precisionCaloPhotonStep", [precisionCaloPhotonSeq]) photonChains = [ makeChain(name='HLT_g5_etcut_L1EM3', L1Thresholds=["EM3"], ChainSteps=[ FastCaloStep, fastPhotonStep, precisionCaloPhotonStep] ) @@ -62,18 +62,19 @@ def generateChains(): MuonChains = [] # step1 mufastS= muFastSequence() - step1mufast=ChainStep("Step1_muFast", [ mufastS ]) + step1mufast=makeChainStep("Step1_muFast", [ mufastS ]) # step2 mucombS = muCombSequence() - step2muComb=ChainStep("Step2_muComb", [ mucombS ]) + step2muComb=makeChainStep("Step2_muComb", [ mucombS ]) # step3 muEFSAS = muEFSASequence() - step3muEFSA=ChainStep("Step3_muEFSA", [ muEFSAS ]) + step3muEFSA=makeChainStep("Step3_muEFSA", [ muEFSAS ]) + #/step3muIso =makeChainStep("Step3_muIso", [ muIsoSequence() ]) # step4 muEFCBS = muEFCBSequence() - step4muEFCB=ChainStep("Step4_muEFCB", [ muEFCBS ]) + step4muEFCB=makeChainStep("Step4_muEFCB", [ muEFCBS ]) - emptyStep=ChainStep("Step2_empty", multiplicity=[]) + emptyStep=makeChainStep("Step2_empty", multiplicity=[]) ## single muon trigger MuonChains += [ makeChain(name='HLT_mu6fast_L1MU6', L1Thresholds=["MU6"], ChainSteps=[ step1mufast ])] @@ -83,20 +84,20 @@ def generateChains(): # multi muon trigger # 2muons symmetric - step1_2mufast_sym= ChainStep("Step1_2muFast_sym", [ mufastS], multiplicity=[2]) - step2_2muComb_sym= ChainStep("Step2_2muComb_sym", [ mucombS], multiplicity=[2]) + step1_2mufast_sym= makeChainStep("Step1_2muFast_sym", [ mufastS], multiplicity=[2]) + step2_2muComb_sym= makeChainStep("Step2_2muComb_sym", [ mucombS], multiplicity=[2]) - step3_2muEFSA_sym= ChainStep("Step3_2muEFSA_sym", [ muEFSAS], multiplicity=[2]) - step4_2muEFCB_sym= ChainStep("Step4_2muEFCB_sym", [ muEFCBS], multiplicity=[2]) + step3_2muEFSA_sym= makeChainStep("Step3_2muEFSA_sym", [ muEFSAS], multiplicity=[2]) + step4_2muEFCB_sym= makeChainStep("Step4_2muEFCB_sym", [ muEFCBS], multiplicity=[2]) MuonChains += [ makeChain(name='HLT_2mu6Comb_L12MU6', L1Thresholds=["MU6"], ChainSteps=[ step1_2mufast_sym, step2_2muComb_sym ])] # 2muons asymmetric (this will change): 2 sequences, 2 seeds - step1_2mufast_asym= ChainStep("Step1_2muFast_asym", [ mufastS, mufastS], multiplicity=[1,1]) - step2_2muComb_asym= ChainStep("Step1_2muComb_asym", [ mucombS, mucombS], multiplicity=[1,1]) + step1_2mufast_asym= makeChainStep("Step1_2muFast_asym", [ mufastS, mufastS], multiplicity=[1,1]) + step2_2muComb_asym= makeChainStep("Step1_2muComb_asym", [ mucombS, mucombS], multiplicity=[1,1]) - step3_2muEFSA_asym= ChainStep("Step3_2muEFSA_asym", [ muEFSAS, muEFSAS], multiplicity=[1,1]) - step4_2muEFCB_asym= ChainStep("Step4_2muEFCB_asym", [ muEFCBS, muEFCBS], multiplicity=[1,1]) + step3_2muEFSA_asym= makeChainStep("Step3_2muEFSA_asym", [ muEFSAS, muEFSAS], multiplicity=[1,1]) + step4_2muEFCB_asym= makeChainStep("Step4_2muEFCB_asym", [ muEFCBS, muEFCBS], multiplicity=[1,1]) MuonChains += [ makeChain(name='HLT_mu6_mu4_L12MU4', @@ -106,8 +107,8 @@ def generateChains(): #FS Muon trigger # Full scan MS tracking step - stepFSmuEFSA=ChainStep("Step_FSmuEFSA", [muEFSAFSSequence()]) - stepFSmuEFCB=ChainStep("Step_FSmuEFCB", [muEFCBFSSequence()]) + stepFSmuEFSA=makeChainStep("Step_FSmuEFSA", [muEFSAFSSequence()]) + stepFSmuEFCB=makeChainStep("Step_FSmuEFCB", [muEFCBFSSequence()]) MuonChains += [ makeChain(name='HLT_mu6noL1_L1MU6', L1Thresholds=["FSNOSEED"], ChainSteps=[stepFSmuEFSA, stepFSmuEFCB])] testChains += MuonChains @@ -121,23 +122,23 @@ def generateChains(): # small-R jets, different calibrations HLT_AntiKt4EMTopoJets_subjesIS jetSeq_a4_tc_em = jetMenuSequenceFromString("a4_tc_em_subjesIS") - step_a4_tc_em =ChainStep("Step_jet_a4_tc_em", [jetSeq_a4_tc_em]) + step_a4_tc_em =makeChainStep("Step_jet_a4_tc_em", [jetSeq_a4_tc_em]) jetSeq_a4_tc_em_subjes = jetMenuSequenceFromString("a4_tc_em_subjes") - step_a4_tc_em_subjes = ChainStep("Step_jet_a4_subjes_tc_em", [jetSeq_a4_tc_em_subjes]) + step_a4_tc_em_subjes = makeChainStep("Step_jet_a4_subjes_tc_em", [jetSeq_a4_tc_em_subjes]) jetSeq_a4_tc_em_nocalib = jetMenuSequenceFromString("a4_tc_em_nojcalib") - step_a4_tc_em_nocalib=ChainStep("Step_jet_a4_nojcalib_tc_em", [jetSeq_a4_tc_em_nocalib]) + step_a4_tc_em_nocalib=makeChainStep("Step_jet_a4_nojcalib_tc_em", [jetSeq_a4_tc_em_nocalib]) # jetSeq_a4_tc_lcw = jetMenuSequenceFromString("a10_tc_lcw_subjesIS") # step_a4_tc_lcw=ChainStep("Step_jet_a10_tc_lcw", [jetSeq_a4_tc_lcw]) # large-R jets jetSeq_a10_tc_lcw_subjes = jetMenuSequenceFromString("a10_tc_lcw_subjes") - step_a10_tc_lcw_subjes=ChainStep("Step_jet_a10_subjes_tc_lcw", [jetSeq_a10_tc_lcw_subjes]) + step_a10_tc_lcw_subjes=makeChainStep("Step_jet_a10_subjes_tc_lcw", [jetSeq_a10_tc_lcw_subjes]) jetSeq_a10r = jetMenuSequenceFromString("a10r_tc_em_subjesIS") - step_a10r=ChainStep("Step_jet_a10r", [jetSeq_a10r]) + step_a10r=makeChainStep("Step_jet_a10r", [jetSeq_a10r]) jetChains = [ makeChain(name='HLT_j45_L1J20', L1Thresholds=["J20"], ChainSteps=[step_a4_tc_em] ), @@ -164,8 +165,8 @@ def generateChains(): jetSequence = jetMenuSequenceFromString("a4_tc_em_subjesgscIS_ftf") - step1 = ChainStep("Step1_bjet", [jetSequence] ) - step2 = ChainStep("Step2_bjet", [getBJetSequence()]) + step1 = makeChainStep("Step1_bjet", [jetSequence] ) + step2 = makeChainStep("Step2_bjet", [getBJetSequence()]) bjetChains = [ makeChain(name='HLT_j45_ftf_subjesgscIS_boffperf_split_L1J20' , L1Thresholds=["J20"], ChainSteps=[step1,step2] ), @@ -181,14 +182,14 @@ def generateChains(): if opt.doTauSlice == True and False: from TriggerMenuMT.HLTMenuConfig.Tau.TauMenuSequences import getTauSequence - step1=ChainStep("Step1_tau", [getTauSequence('calo')]) - step1MVA=ChainStep("Step1MVA_tau", [getTauSequence('calo_mva')]) + step1=makeChainStep("Step1_tau", [getTauSequence('calo')]) + step1MVA=makeChainStep("Step1MVA_tau", [getTauSequence('calo_mva')]) #This runs the tau-preselection(TP) step - step2TP=ChainStep("Step2TP_tau", [getTauSequence('track_core')]) + step2TP=makeChainStep("Step2TP_tau", [getTauSequence('track_core')]) #This runs the EFTauMV hypo on top of fast tracks - step2PT=ChainStep("Step2PT_tau", [getTauSequence('precision')]) + step2PT=makeChainStep("Step2PT_tau", [getTauSequence('precision')]) tauChains = [ makeChain(name='HLT_tau0_perf_ptonly_L1TAU12', L1Thresholds=["TAU12"], ChainSteps=[step1, step2] ), @@ -211,9 +212,9 @@ def generateChains(): pufitRecoDict = extractMETRecoDict({'EFrecoAlg': "tcpufit"}) metClusterPufitSeq = metMenuSequence(None, **pufitRecoDict) - metCellStep = ChainStep("Step1_met_cell", [metCellSeq]) - metClusterPufitStep = ChainStep("Step1_met_clusterpufit", [metClusterPufitSeq]) - comboStep_cell_clusterpufit = ChainStep("Step1_combo_cell_clusterpufit", [metCellSeq, metClusterPufitSeq], multiplicity=[1,1]) + metCellStep = makeChainStep("Step1_met_cell", [metCellSeq]) + metClusterPufitStep = makeChainStep("Step1_met_clusterpufit", [metClusterPufitSeq]) + comboStep_cell_clusterpufit = makeChainStep("Step1_combo_cell_clusterpufit", [metCellSeq, metClusterPufitSeq], multiplicity=[1,1]) metChains = [ makeChain(name="HLT_xe65_L1XE50", L1Thresholds=["XE50"], ChainSteps=[metCellStep]), @@ -231,10 +232,10 @@ def generateChains(): from TriggerMenuMT.HLTMenuConfig.Muon.MuonSequenceSetup import muFastSequence, muCombSequence, muEFSASequence, muEFCBSequence from TrigBphysHypo.TrigMultiTrkComboHypoConfig import DimuL2ComboHypoCfg, DimuEFComboHypoCfg - step1_dimufast=ChainStep("Step1_dimuFast", [muFastSequence()], multiplicity=[2]) - step2_dimuComb=ChainStep("Step2_dimuComb", [muCombSequence()], multiplicity=[2], comboHypoCfg=DimuL2ComboHypoCfg) - step3_dimuEFSA=ChainStep("Step3_dimuEFSA", [muEFSASequence()], multiplicity=[2]) - step4_dimuEFCB=ChainStep("Step4_dimuEFCB", [muEFCBSequence()], multiplicity=[2], comboHypoCfg=DimuEFComboHypoCfg) + step1_dimufast=makeChainStep("Step1_dimuFast", [muFastSequence()], multiplicity=[2]) + step2_dimuComb=makeChainStep("Step2_dimuComb", [muCombSequence()], multiplicity=[2], comboHypoCfg=DimuL2ComboHypoCfg) + step3_dimuEFSA=makeChainStep("Step3_dimuEFSA", [muEFSASequence()], multiplicity=[2]) + step4_dimuEFCB=makeChainStep("Step4_dimuEFCB", [muEFCBSequence()], multiplicity=[2], comboHypoCfg=DimuEFComboHypoCfg) steps = [step1_dimufast, step2_dimuComb, step3_dimuEFSA, step4_dimuEFCB] BphysChains = [ @@ -256,8 +257,8 @@ def generateChains(): from TriggerMenuMT.HLTMenuConfig.Muon.MuonSequenceSetup import muFastSequence - comboStep_et_mufast = ChainStep("Step1_et_mufast", [fastCaloSeq, muFastSequence()], multiplicity=[1,1]) - comboStep_mufast_etcut1_step1 = ChainStep("Step1_mufast_etcut1", [muFastSequence(), fastCaloSeq], multiplicity=[1,1]) + comboStep_et_mufast = makeChainStep("Step1_et_mufast", [fastCaloSeq, muFastSequence()], multiplicity=[1,1]) + comboStep_mufast_etcut1_step1 = makeChainStep("Step1_mufast_etcut1", [muFastSequence(), fastCaloSeq], multiplicity=[1,1]) comboChains = [ makeChain(name='HLT_e3_etcut_mu6_L1EM8I_MU10', L1Thresholds=["EM8I", "MU10"], ChainSteps=[comboStep_et_mufast ])] # comboChains += [Chain(name='HLT_mu8fast_e8_etcut1step', ChainSteps=[ comboStep_mufast_etcut1_step1 ])]