MPHitFilter

The purpose of this module is to optimize the efficiency of coincident event simulation by filtering all event which would not produce hits in the detector. Otherwise, a majority of events would contain only one particle which is actually detected and therefore no different than a single event. One can set the threshold as a minimum number of hits. It is possible, for example to request that each event should on its own be able to trigger the detector. At present we set the threshold to 1 hit per particle. In addition, MPHitFilter can also trim-down the I3MCTree and remove all branches whose particles don’t produce enough PEs in the detector, making it much easier to read and reducing the storage requirements.

MPHitFilter has the following configurable paramters: MPHitFilter:

CleanHitMap
  Description :  Remove hitseries for missing DOMs
  Default     :  True

HitOMThreshold
  Description :  Minimum number of hit OMs to pass filter
  Default     :  1

HitSeriesMapName
  Description :  Name of HitSeriesMap object to scan
  Default     :

HitSeriesMapNames
  Description :  List of names of HitSeriesMap objects to scan
  Default     :  <icecube.icetray.vector_string object at 0x2a9a718c50>

NumberOfPrimaries
  Description :  Number of primary particles to merge
  Default     :  1

WeightMap
  Description :  map of weights to merge
  Default     :  'CorsikaWeightMap'

WeightSumName
  Description :  Name to store weightsum in summary service
  Default     :  'WeightSum'

This module should be run after the photon propagation (ClSim or PPC). The following example uses PoissonMerger to combine events which are then propagated and their light emission has been simulated. MPHit filter then trims down the MCTree and removesEvents that did not produce light in the detector:

from icecube.icetray import I3Units
from icecube.polyplopia import CoicidentI3ReaderService

# Read events from file ""BACKGROUNDFILE.i3"
background = polyplopia.CoincidentI3ReaderService()
background.open("BACKGROUNDFILE.i3")

tray.AddModule("PoissonMerger","merge",
   BGWeights = "CorsikaWeightMap",
   CoincidentEventService = background,
 )

tray.AddModule("Rename",keys=["I3MCTree","I3MCTree_preMuonProp"])
tray.AddSegment(segments.PropagateMuons, "PropagateMuons",
     RandomService = randomServiceForPropagators)

from icecube.simprod import segments
tray.AddSegment(segments.PropagatePhotons, "normalpes",
        RandomService = "I3RandomService",
        HybridMode = False,
        IgnoreMuons = False,
        IgnoreCascades = False,
        UseGPUs = True,
        UseAllCPUCores = False,
        InputMCTree = "I3MCTree",
        UseGeant4 = False)


tray.AddModule("MPHitFilter","hitfilter",
               HitOMThreshold=1,
               WeightMap="CorsikaWeightMap")