diff --git a/DDSim/DD4hepSimulation.py b/DDSim/DD4hepSimulation.py index a296135ed74bea4a66569ad9aa950377b3d2f28c..720e978bbe1abfb8e7862fced599127b420b915a 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 aba55a16683d2e2d451cb8015e2e3616771dfd5b..03a27801b1536cd0cabb0f3bf59e4efa832b226e 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 c4e564ae4962db70a5a58455ba7e3dd3b7d8274b..ea910c8e3a2ace64f9c422f641717cb0d340c4f1 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'] )