From 5c4a2727c59a0936023fafcde1186ae817338874 Mon Sep 17 00:00:00 2001 From: Andre Sailer <andre.philippe.sailer@cern.ch> Date: Wed, 2 Dec 2015 14:19:14 +0000 Subject: [PATCH] DDSim:Filter: Add handling of default filters if not specific filter is set the default filter for tracker or calorimeter is applied (if a default filter is set) To turn off all filters just assign an empty string, empty list or None to the mapDetFilter update doc --- DDSim/DD4hepSimulation.py | 8 ++++---- DDSim/Helper/ConfigHelper.py | 2 +- DDSim/Helper/Filter.py | 14 +++++++++++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/DDSim/DD4hepSimulation.py b/DDSim/DD4hepSimulation.py index a296135ed..720e978bb 100644 --- a/DDSim/DD4hepSimulation.py +++ b/DDSim/DD4hepSimulation.py @@ -391,14 +391,14 @@ class DD4hepSimulation(object): # ---- add the trackers: try: - self.__setupSensitiveDetectors( trk, simple.setupTracker) + self.__setupSensitiveDetectors( trk, simple.setupTracker, self.filter.tracker) except Exception as e: print "ERROR setting up sensitive detector", str(e) raise # ---- add the calorimeters: try: - self.__setupSensitiveDetectors( cal, simple.setupCalorimeter ) + self.__setupSensitiveDetectors( cal, simple.setupCalorimeter, self.filter.calo ) except Exception as e: print "ERROR setting up sensitive detector", str(e) raise @@ -569,7 +569,7 @@ class DD4hepSimulation(object): return runHeader - def __setupSensitiveDetectors(self, detectors, setupFuction): + def __setupSensitiveDetectors(self, detectors, setupFuction, defaultFilter=None): """ attach sensitive detector actions for all subdetectors can be steered with the `Action` ConfigHelpers @@ -594,7 +594,7 @@ class DD4hepSimulation(object): seq,act = setupFuction( det, type=action ) else: seq,act = setupFuction( det ) - self.filter.applyFilters( seq, det ) + self.filter.applyFilters( seq, det, defaultFilter ) ##set detailed hit creation mode for this if self.enableDetailedShowerMode: act.HitCreationMode = 2 diff --git a/DDSim/Helper/ConfigHelper.py b/DDSim/Helper/ConfigHelper.py index aba55a166..03a27801b 100644 --- a/DDSim/Helper/ConfigHelper.py +++ b/DDSim/Helper/ConfigHelper.py @@ -45,7 +45,7 @@ class ConfigHelper( object ): @staticmethod def makeList( stringVal, sep=" "): """returns a list from a string separated by sep""" - if stringVal is None: + if not stringVal: return [] if isinstance( stringVal, list ): return stringVal diff --git a/DDSim/Helper/Filter.py b/DDSim/Helper/Filter.py index c4e564ae4..ea910c8e3 100644 --- a/DDSim/Helper/Filter.py +++ b/DDSim/Helper/Filter.py @@ -21,6 +21,9 @@ class Filter( ConfigHelper ): Or more than one filter: >>> SIM.filter.mapDetFilter['FTD'] = ["edep1kev", "geantino"] + Don't use the default filter or anything else: + >>> SIM.filter.mapDetFilter['TPC'] = None ## or "" or [] + Create a custom filter. The dictionary is used to instantiate the filter later on >>> SIM.filter.filters['edep3kev'] = dict(name="EnergyDepositMinimumCut/3keV", parameter={"Cut": 3.0*keV} ) @@ -35,7 +38,7 @@ class Filter( ConfigHelper ): @property def tracker( self ): - """ default filter for tracking sensitive detectors """ + """ default filter for tracking sensitive detectors; this is applied if no other filter is used for a tracker""" return self._tracker @tracker.setter def tracker( self, val ): @@ -43,7 +46,7 @@ class Filter( ConfigHelper ): @property def calo( self ): - """ default filter for calorimeter sensitive detectors """ + """ default filter for calorimeter sensitive detectors; this is applied if no other filter is used for a calorimeter """ return self._calo @calo.setter def calo( self, val ): @@ -123,7 +126,7 @@ class Filter( ConfigHelper ): if requestedFilter - setOfFilters: raise RuntimeError(" Filter(s) '%s' are not registered!" % str(requestedFilter - setOfFilters) ) - def applyFilters( self, seq, det ): + def applyFilters( self, seq, det, defaultFilter=None): """apply the filters to to the sensitive detector :param seq: sequence object returned when creating sensitive detector @@ -131,8 +134,13 @@ class Filter( ConfigHelper ): :returns: None """ self.__makeMapDetList() + foundFilter=False for pattern, filts in self.mapDetFilter.iteritems(): if pattern.lower() in det.lower(): + foundFilter = True for filt in filts: print "Adding filter '%s' matched with '%s' to sensitive detector for '%s' " %( filt, pattern, det ) seq.add( self.filters[filt]['filter'] ) + + if not foundFilter and defaultFilter: + seq.add( self.filters[defaultFilter]['filter'] ) -- GitLab