def writeSigHitsMapToFrame(frame, domsUsed, hitThresh, domThresh, maxResidual, geoMap): primary = frame["NuGPrimary"] mctree = frame["I3MCTree"] track = dataclasses.I3MCTree.first_child(mctree, primary) track.shape = dataclasses.I3Particle.InfiniteTrack mcpeMap = frame["MCPESeriesMap"] significantMCPEMap = simclasses.I3MCPESeriesMap() for omkey in domsUsed: position = geoMap[omkey].position if omkey not in mcpeMap: continue if passDOM(mcpeMap[omkey], hitThresh, maxResidual, position, track): significantMCPEMap[omkey] = getSignificantMCPEs( mcpeMap[omkey], hitThresh) # sanity check if len(mcpeMap) < domThresh: raise ValueError( "Not enough DOMs in map. Make sure to filter with passFrame before calling this function" ) frame.Put("MCPESeriesMap_significant_hits", significantMCPEMap) return frame
def StressTestPEGenerator( frame, \ hit_times = None, weights = None, ) : # if weights not set, set it to list filled with None with same size as hit_times weights = weights if weights else [ None for h in hit_times ] if len( hit_times ) != len( weights ) : print("ERROR : Different sizes for 'hit_times' and 'weights'.") print("Either 'weights' needs to be empty (unweighted) or of the same size as 'hit_times'.") sys.exit(0) mcpes = sc.I3MCPESeries() for t,w in zip( hit_times, weights ) : hit = sc.I3MCPE() hit.time = t hit.npe = w if w else 1 mcpes.append( hit ) # this goes in the frame mcpe_map = sc.I3MCPESeriesMap() for omkey, geo in frame.Get("I3Geometry").omgeo : # Only InIce and IceTop DOMs if 0 < omkey.om < 65: mcpe_map[ omkey ] = mcpes frame["I3MCPESeriesMap"] = mcpe_map
def makeHits(frame): hits = simclasses.I3MCPESeriesMap() geo = frame["I3Geometry"] doms = list(geo.omgeo.keys()) for dom in doms: hits[dom] = simclasses.I3MCPESeries() for i in range(0, 10): hit = simclasses.I3MCPE() hit.npe = 1 hit.time = 29000 * i hits[dom].append(hit) #dom = list(geo.omgeo.keys())[3] #hits[dom] = simclasses.I3MCPESeries() #for i in range(0,10): #hit = simclasses.I3MCPE() #hit.npe=1 #hit.time=29000*i #hits[dom].append(hit) #dom = list(geo.omgeo.keys())[4] #hits[dom] = simclasses.I3MCPESeries() #for i in range(0,10): #hit = simclasses.I3MCPE() #hit.npe=1 #hit.time=29000*i #hits[dom].append(hit) #dom = list(geo.omgeo.keys())[5] #hits[dom] = simclasses.I3MCPESeries() #for i in range(0,10): #hit = simclasses.I3MCPE() #hit.npe=1 #hit.time=29000*i #hits[dom].append(hit) frame["MCPESeriesMap"] = hits
def Process(self): frame = icetray.I3Frame(icetray.I3Frame.DAQ) mcpes = simclasses.I3MCPESeries() for i in range(1000) : mcpes.append(simclasses.I3MCPE(1)) mcpemap = simclasses.I3MCPESeriesMap() mcpemap[icetray.OMKey(21,30)] = mcpes frame["I3MCPESeriesMap"] = mcpemap self.PushFrame(frame)
def CombineHits(frame, InputHits = ["I3MCPESeriesMapTracks", "I3MCPESeriesMapCascades"], OutputHits = "I3MCPESeriesMap"): from icecube import dataclasses, polyplopia, simclasses newhits = simclasses.I3MCPESeriesMap() for hitmap in InputHits: hits = frame[hitmap] polyplopia.MergeHits(newhits,hits,0.0) frame[OutputHits] = newhits return True
def makeHits(frame): hits = simclasses.I3MCPESeriesMap() geo = frame["I3Geometry"] dom = list(geo.omgeo.keys())[2] hits[dom] = simclasses.I3MCPESeries() for i in range(0, 10): hit = simclasses.I3MCPE() hit.npe = 10 hit.time = 10 * i hits[dom].append(hit) dom = list(geo.omgeo.keys())[3] hits[dom] = simclasses.I3MCPESeries() for i in range(0, 10): hit = simclasses.I3MCPE() hit.npe = 10 hit.time = 10 * i hits[dom].append(hit) frame["MCPESeriesMap"] = hits frame["I3EventHeader"] = dataclasses.I3EventHeader()
def DAQ(self, frame): min_time = self.time_window[0] max_time = self.time_window[1] peseries = simclasses.I3MCPESeries() # put 1000 within the time window for i in range(1000): pe = simclasses.I3MCPE() pe.time = random.uniform(min_time / 10., max_time / 10.) peseries.append(pe) # determine the median time times = sorted([pe.time for pe in peseries]) median_time = times[int(len(times) / 2.)] # put 250 outside the time window for i in range(250): pe = simclasses.I3MCPE() time = min_time - random.uniform(100 * I3Units.ms, 1000 * I3Units.ms) pe.time = time peseries.append(pe) for i in range(250): pe = simclasses.I3MCPE() time = max_time + random.uniform(100 * I3Units.ms, 1000 * I3Units.ms) pe.time = time peseries.append(pe) pemap = simclasses.I3MCPESeriesMap() pemap[icetray.OMKey(21, 30)] = peseries frame["I3MCPESeriesMap"] = pemap self.PushFrame(frame)
if survived(photon,omkey): mcpe = simclasses.I3MCPE() #mcpe.id = dataclasses.I3ParticleID(photon.particleMajorID, photon.particleMinorID) mcpe.npe = 1 mcpe.time = photon.time #TODO: change to corrected time mcpeList.append(mcpe) photonList.append(photon) return mcpeList, photonList # TODO: def getCorrectedTime(photon, omkey): while( infile.more() ): frame = infile.pop_daq() photonDOMMap = frame["I3Photons"] mcpeMap = simclasses.I3MCPESeriesMap() succPhotonMap = simclasses.I3CompressedPhotonSeriesMap() for modkey in photonDOMMap.keys(): mcpeList, photonList = generateMCPEList(photonDOMMap[modkey], modkey) omkey = OMKey(modkey.string, modkey.om, 0) if len(mcpeList) > 0: mcpeMap[omkey] = mcpeList succPhotonMap[modkey] = photonList frame["MCPESeriesMap"] = mcpeMap # only add frame to file if a hit was generated if passFrame(frame, mcpeMap.keys(), int(args.hitThresh), int(args.domThresh)): frame["SuccPhotonMap"] = succPhotonMap frame.Delete("I3Photons") outfile.push(frame)
def TestSetup(frame, add_empty_trigger=False, add_mchits=True): p = dataclasses.I3Particle() p.time = TIME frame["MCPrimary"] = p mctree = dataclasses.I3MCTree() mctree.add_primary(p) frame["MCTree"] = mctree # I3MMCTrack mmctrack = simclasses.I3MMCTrack() mmctrack.SetParticle(p) mmctrack.ti = TIME mmctrack.tc = TIME mmctrack.tf = TIME mmctracklist = simclasses.I3MMCTrackList() mmctracklist.append(mmctrack) frame["MMCTracks"] = mmctracklist # I3TriggerHierarchy t = dataclasses.I3Trigger() t.time = TIME t.fired = True trigger_h = dataclasses.I3TriggerHierarchy() if not add_empty_trigger: trigger_h.insert(t) frame["Trigger"] = trigger_h # I3VectorI3Trigger t1 = dataclasses.I3Trigger() t1.time = TIME t1.fired = True trigger_v = dataclasses.I3VectorI3Trigger() trigger_v.append(t1) frame["TriggerVector"] = trigger_v # I3FlasherInfoVector fi = dataclasses.I3FlasherInfo() fi.flash_time = TIME fi_v = dataclasses.I3FlasherInfoVect() fi_v.append(fi) frame["FlasherInfos"] = fi_v # I3DOMLaunchSeriesMap d = dataclasses.I3DOMLaunch() d.time = TIME launchseries = dataclasses.I3DOMLaunchSeries() launchseries.append(d) launchmap = dataclasses.I3DOMLaunchSeriesMap() launchmap[icetray.OMKey(21, 30)] = launchseries frame["DOMLaunchMap"] = launchmap # I3MCHit mchit = dataclasses.I3MCHit() mchit.time = TIME mchitseries = dataclasses.I3MCHitSeries() mchitseries.append(mchit) mchitmap = dataclasses.I3MCHitSeriesMap() mchitmap[icetray.OMKey(21, 30)] = mchitseries if add_mchits: frame["MCHitMap"] = mchitmap # I3MCPE mcpe = simclasses.I3MCPE() mcpe.time = TIME mcpeseries = simclasses.I3MCPESeries() mcpeseries.append(mcpe) mcpemap = simclasses.I3MCPESeriesMap() mcpemap[icetray.OMKey(21, 30)] = mcpeseries frame["MCPEMap"] = mcpemap # I3MCPulse mcpulse = simclasses.I3MCPulse() mcpulse.time = TIME mcpulseseries = simclasses.I3MCPulseSeries() mcpulseseries.append(mcpulse) mcpulsemap = simclasses.I3MCPulseSeriesMap() mcpulsemap[icetray.OMKey(21, 30)] = mcpulseseries frame["MCPulseMap"] = mcpulsemap # I3Double sometime = dataclasses.I3Double(TIME) frame["SomeTime"] = sometime nottime = dataclasses.I3Double(TIME) frame["NotTime"] = nottime