def GetPhotonicsService(service_type="inf_muon"): table_base = "" if os.path.isfile( os.path.expandvars( "$I3_DATA/photon-tables/splines/ems_mie_z20_a10.%s.fits") % "abs"): table_base = os.path.expandvars( "$I3_DATA/photon-tables/splines/ems_mie_z20_a10.%s.fits") elif os.path.isfile("splines/ems_mie_z20_a10.%s.fits" % "abs"): table_base = os.path.expandvars("splines/ems_mie_z20_a10.%s.fits") elif os.path.isfile( "/cvmfs/icecube.opensciencegrid.org/data/photon-tables/splines/ems_mie_z20_a10.%s.fits" % "abs"): table_base = os.path.expandvars( "/cvmfs/icecube.opensciencegrid.org/data/photon-tables/splines/ems_mie_z20_a10.%s.fits" ) elif os.path.isfile( "/home/icecube/i3/data/generalized_starting_events/splines/ems_mie_z20_a10.%s.fits" % "abs"): table_base = os.path.expandvars( "/home/icecube/i3/data/generalized_starting_events/splines/ems_mie_z20_a10.%s.fits" ) else: print "You don't have splines anywhere I can find. This will eventually raise an error, for now it semi-silently dies" if service_type == "cscd": cascade_service = photonics_service.I3PhotoSplineService( table_base % "abs", table_base % "prob", 0, maxRadius=600.0) return cascade_service elif service_type == "seg_muon": seg_muon_service = photonics_service.I3PhotoSplineService( amplitudetable=os.path.join( os.path.expandvars("$I3_DATA/photon-tables/splines/"), "ZeroLengthMieMuons_250_z20_a10.abs.fits" ), ## Amplitude tables timingtable=os.path.join( os.path.expandvars("$I3_DATA/photon-tables/splines/"), "ZeroLengthMieMuons_250_z20_a10.prob.fits"), ## Timing tables timingSigma=0.0, maxRadius=600.0) return seg_muon_service elif service_type == "inf_muon": inf_muon_service = photonics_service.I3PhotoSplineService( amplitudetable=os.path.join( os.path.expandvars("$I3_DATA/photon-tables/splines/"), "InfBareMu_mie_abs_z20a10.fits"), ## Amplitude tables timingtable=os.path.join( os.path.expandvars("$I3_DATA/photon-tables/splines/"), "InfBareMu_mie_prob_z20a10.fits"), ## Timing tables timingSigma=0.0, maxRadius=600.0) return inf_muon_service else: print "You didn't give me a spline service type I recognize. This will eventually raise an error, for now it semi-silently dies"
def LoadCascadeTables(Use_cvmfs=False, amplitude_fits = None, timing_fits = None): # Now we import the photon stuff from icecube import photonics_service # get the amplitude spline table if Use_cvmfs: spline_path = os.path.join(Use_cvmfs,'data','photon-tables','splines', os.path.basename(amplitude_fits)) if Use_cvmfs and os.path.exists(spline_path): amplitude_fits = spline_path elif isurl(amplitude_fits): download(amplitude_fits) amplitude_fits = os.path.basename(amplitude_fits) # get the timing spline table if Use_cvmfs: spline_path = os.path.join(Use_cvmfs,'data','photon-tables','splines', os.path.basename(timing_fits)) if Use_cvmfs and os.path.exists(spline_path): timing_fits = spline_path elif isurl(timing_fits): download(timing_fits) timing_fits = os.path.basename(timing_fits) return photonics_service.I3PhotoSplineService( amplitudetable=amplitude_fits, timingtable=timing_fits, timingSigma=0.)
def LoadCascadeTables(IceModel = "SpiceMie", TablePath = "/data/sim/sim-new/spline-tables"): from icecube import photonics_service if IceModel == "Spice1": amplitudetable = TablePath+'/ems_spice1_z20_a10.abs.fits' timingtable = TablePath+'/ems_spice1_z20_a10.prob.fits' elif IceModel == "SpiceMie": amplitudetable = TablePath+'/ems_mie_z20_a10.abs.fits' timingtable = TablePath+'/ems_mie_z20_a10.prob.fits' elif IceModel == "SpiceMieNoHoleIce": amplitudetable = TablePath+'/NoHoleIceCascades_250_z20_a10.abs.fits' timingtable = TablePath+'/NoHoleIceCascades_250_z20_a10.prob.fits' else: raise RuntimeError("Unknown ice model: %s", IceModel) logging.debug("Loading cascade tables : ") logging.debug(" amp = ", amplitudetable) logging.debug(" time = ", timingtable) cascade_service = photonics_service.I3PhotoSplineService( amplitudetable=amplitudetable, timingtable=timingtable, timingSigma=0., maxRadius=800.*icetray.I3Units.meter) return cascade_service
def get_pxs(): base = os.path.expandvars( "$I3_DATA/photon-tables/splines/InfBareMu_mie_%s_z20a10.fits") if not os.path.exists(base % "abs"): raise errno.ENOENT((base % "abs") + " does not exist!") if not os.path.exists(base % "prob"): raise errno.ENOENT((base % "prob") + " does not exist!") return photonics_service.I3PhotoSplineService(base % "abs", base % "prob", 0.)
def Monopod(tray, name, Pulses='OfflinePulses', If=lambda f: True): def forgeseed(fr): seed = dataclasses.I3Particle() seed.pos=fr['CascadeLlhVertexFit_DP'].pos seed.time=fr['CascadeLlhVertexFit_DP'].time seed.dir=fr['SPEFit32_DP'].dir seed.shape=dataclasses.I3Particle.Cascade seed.type=dataclasses.I3Particle.EMinus seed.fit_status=dataclasses.I3Particle.OK fr['CascadeSeed']=seed tray.AddModule(forgeseed, 'cscd-seed') cascade_service_spicemie = photonics_service.I3PhotoSplineService('/cvmfs/icecube.opensciencegrid.org/data/photon-tables/splines/ems_mie_z20_a10.abs.fits', '/cvmfs/icecube.opensciencegrid.org/data/photon-tables/splines/ems_mie_z20_a10.prob.fits', 0) tray.AddModule(icecube.wavedeform.AddMissingTimeWindow, "add-timewindow", Pulses=Pulses, WaveformTimeRange="CalibratedWaveformRange") tray.AddSegment(millipede.MonopodFit, 'MonopodAngularGuess', #Pulses='SplitOfflinePulses', Pulses=Pulses, Iterations=1, Parametrization="SIMPLE", #Seed="CascadeLLH", Seed="CascadeSeed", CascadePhotonicsService=cascade_service_spicemie, PhotonsPerBin=15, #ExcludedDOMs=['CalibrationErrata', 'SaturatedDOMs', 'BadDomsListSLC', 'InIceErrata'], ExcludedDOMs=['OfflineInIceCalibrationErrata', 'SaturatedDOMs', 'BadDomsList', 'BadDomsListSLC', 'InIceErrata'], PartialExclusion=False) tray.AddSegment(millipede.MonopodFit, 'MonopodAngular', #Pulses='SplitOfflinePulses', Pulses=Pulses, #Iterations=4, Iterations=32, Parametrization="HalfSphere", Seed="MonopodAngularGuess", CascadePhotonicsService=cascade_service_spicemie, PhotonsPerBin=15, #ExcludedDOMs=['CalibrationErrata', 'SaturatedDOMs', 'BadDomsListSLC', 'InIceErrata'], ExcludedDOMs=['OfflineInIceCalibrationErrata', 'SaturatedDOMs', 'BadDomsList', 'BadDomsListSLC', 'InIceErrata'], PartialExclusion=False) return
from icecube import icetray, photonics_service, dataclasses from icecube.icetray import I3Units import os import matplotlib.pyplot as plt import numpy as np from copy import deepcopy from sampler_functions import sampler_demo, gradient_demo PhotonicsDir = "/cvmfs/icecube.opensciencegrid.org/data/photon-tables/" PhotonicsSplineDirectory = os.path.join(PhotonicsDir, "splines") cascade_service = photonics_service.I3PhotoSplineService( amplitudetable=os.path.join( PhotonicsSplineDirectory, "LowEnergyCorrectedCascades_z20_a10_250m.abs.fits" ), ## Amplitude tables timingtable=os.path.join( PhotonicsSplineDirectory, "LowEnergyCorrectedCascades_z20_a10_250m.prob.fits"), ## Timing tables timingSigma=0.0, maxRadius=np.inf ) ## If the light sensor is further from the source than this distance - zero will be returned, default value is infinite # calling functions from sampler_demo.py # print "Running script with demos, for comments check sampler_functions.py " sampler_demo(cascade_service) gradient_demo(cascade_service) plt.show()
for p in pes ] l = len(residuals) assert (l > 900 and l < 6000) m = np.mean(residuals) assert (m > 200 and m < 500) s = np.std(residuals) assert (s > 300 and s < 600) randomService = phys_services.I3SPRNGRandomService(seed=12345, nstreams=10000, streamnum=1) cascade_service = photonics_service.I3PhotoSplineService( amplitudetable=amplitudetable, timingtable=timingtable, timingSigma=0.) tray = I3Tray() tray.AddModule("I3InfiniteSource", "source", prefix=gcdfile) tray.AddModule(muon_injector, Streams=[icetray.I3Frame.DAQ]) tray.AddSegment(PropagateMuons, RandomService=randomService) tray.AddModule("I3MCTreeHybridSimulationSplitter") tray.AddModule("I3PhotonicsHitMaker", CascadeService=cascade_service, TrackService=None, Input="I3MCTreeCascades",
from parser_options import * params = RunParameters() usage = "%usage: %prog [options]" parser = OptionParser(usage) parseOptions(parser, params) Pulses = 'SRTTWOfflinePulsesDC' ReadoutWindow = 'WaveformRange' ExcludedDOMs = ['CalibrationErrata', 'BadDomsList'] from icecube import photonics_service, millipede cascade_base = "/mnt/home/neergarr/icecube/pegleg_testing/splines/ems_mie_z20_a10.%s.fits" muon_base = "/mnt/home/neergarr/icecube/pegleg_testing/splines/emu_%s.fits" cascade_tables = photonics_service.I3PhotoSplineService( cascade_base % "abs", cascade_base % "prob", 0) muon_tables = photonics_service.I3PhotoSplineService(muon_base % "abs", muon_base % "prob", 0) muon_energy_loss = 4.5 # meters/GeV (divide track length by muon energy loss to get muon energy) hadron_pdg = -2000001006 global llh_value llh_value = [] global temp_parameters # 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. #parameters = [x,y,z,lepton azimuth,lepton zenith,time,energy, track lengeth, hadron azimuth, hadron zenith] parameters = [ 59.44779725056501, -50.40980604647394, -315.12215116285233, 0.760880564153089, 1.717751242710285, 9798.736378713807,
from icecube import dataclasses from icecube import icetray from icecube.icetray import I3Units from icecube import lilliput import icecube.lilliput.segments # icetray.logging.console() #TODO Breaks some stuff, think about this #from icecube.oscNext.tools.data_quality import check_object_exists #added myself from icecube.oscNext.selection.globals import * from icecube.oscNext.selection.oscNext_cuts import oscNext_cut from icecube.oscNext.selection.oscNext_L6 import RETRO_RECO_PARTICLE_KEY, RETRO_FIT_METHOD, check_retro_reco_success from icecube import photonics_service, millipede table_base = os.path.expandvars( '$I3_DATA/photon-tables/splines/ems_mie_z20_a10.%s.fits') cascade_service = photonics_service.I3PhotoSplineService( table_base % 'abs', table_base % 'prob', 0) def check_object_exists(frame, object_key): ''' Module that filters out frames that do not contain `object_key` ''' return object_key in frame # # Globals # # Define all output frame objects L7_HDF5_KEYS = []
# ******************************# ####NOTE HERE STUFFS ARE DONE## #******************************# # load tables spline_tables = photonics_service.I3MapOMTypeI3PhotonicsService() omtype = dataclasses.I3OMGeo.OMType if args.detector.lower() == "gen2": iceModelBaseNames = {"Homogeneous_mdom": "stacked_splines_cascade_mDOM_homogeneousIce", "Homogeneous_pdom": "stacked_splines_cascade_pDOM_homogeneousIce"} iceModelBaseName_mdom = iceModelBaseNames[args.icemodel+"_mdom"] spline_tables[omtype.UnknownType] = photonics_service.I3PhotoSplineService(mdom_cascade_spline_table_folder + iceModelBaseName_mdom + '_amplitude.abs.pspl.fits', mdom_cascade_spline_table_folder + iceModelBaseName_mdom + '_time.prob.pspl.fits') iceModelBaseName_pdom = iceModelBaseNames[args.icemodel+"_pdom"] spline_tables[omtype.IceCube] = photonics_service.I3PhotoSplineService(pdom_cascade_spline_table_folder + iceModelBaseName_pdom + '_amplitude.abs.pspl.fits', pdom_cascade_spline_table_folder + iceModelBaseName_pdom + '_time.prob.pspl.fits') cascade_service = photonics_service.I3PhotonicsServiceCollection(spline_tables) elif args.detector.lower() == "icecube": iceModelBaseNames = {"SpiceMie_dom": "ems_mie_z20_a10", "Spice1_dom": "ems_spice1_z20_a10"} iceModelBaseName_dom = iceModelBaseNames[args.icemodel+"_dom"] spline_tables[omtype.IceCube] = photonics_service.I3PhotoSplineService(dom_cascade_spline_table_folder + iceModelBaseName_dom + '.abs.fits', dom_cascade_spline_table_folder + iceModelBaseName_dom + '.prob.fits') cascade_service = photonics_service.I3PhotonicsServiceCollection(spline_tables) else: raise Exception("Choose a valid detector, IceCube or Gen2")
rectrk="", result="MuEXAngular4", lcspan=0, repeat=4, usempe=True, detail=False, energy=False, icedir=os.path.expandvars("$I3_BUILD/mue/resources/ice/mie")) # spline MPE infmuonprobsplinepath = "/cvmfs/icecube.opensciencegrid.org/data/photon-tables/splines/InfBareMu_mie_prob_z20a10_V2.fits" infmuonampsplinepath = '/cvmfs/icecube.opensciencegrid.org/data/photon-tables/splines/InfBareMu_mie_abs_z20a10_V2.fits' from icecube import photonics_service spline_mie = photonics_service.I3PhotoSplineService(infmuonampsplinepath, infmuonprobsplinepath, 4) llh = "MPE" tray.AddService("I3GulliverMinuitFactory", "Minuit", Algorithm="SIMPLEX", MaxIterations=1000, Tolerance=0.01) tray.AddService("I3SimpleParametrizationFactory", "SimpleTrack", StepX=20 * I3Units.m, StepY=20 * I3Units.m, StepZ=20 * I3Units.m, StepZenith=0.1 * I3Units.radian, StepAzimuth=0.2 * I3Units.radian,
outfilebase = args.outfilebase verbose = args.verbose print infiles, len(infiles) print outfilebase from icecube import dataclasses, phys_services, dataio, icetray, photonics_service, StartingTrackVeto from I3Tray import * #You will need to point this to the correct spline tables PhotonicsDir = "/cvmfs/icecube.opensciencegrid.org/data/photon-tables/" PhotonicsSplineDirectory = os.path.join(PhotonicsDir, "splines") inf_muon_service = photonics_service.I3PhotoSplineService( amplitudetable=os.path.join( PhotonicsSplineDirectory, "InfBareMu_mie_abs_z20a10.fits"), ## Amplitude tables timingtable=os.path.join( PhotonicsSplineDirectory, "InfBareMu_mie_prob_z20a10.fits"), ## Timing tables timingSigma=0.0) #maxRadius = 125.0) seg_muon_service = photonics_service.I3PhotoSplineService( amplitudetable=os.path.join( PhotonicsSplineDirectory, "ZeroLengthMieMuons_250_z20_a10.abs.fits"), ## Amplitude tables timingtable=os.path.join( PhotonicsSplineDirectory, "ZeroLengthMieMuons_250_z20_a10.prob.fits"), ## Timing tables timingSigma=0.0) #maxRadius = 125.0) tray = I3Tray()
def return_photonics_service(service_type="inf_muon"): ''' Checks various locations for Spline Tables then loads and returns a I3PhotoSplineService. Inputs: ------- - service_type: type of photonics service to load. choices: "inf_muon", "seg_muon", "cscd" Outputs: -------- - I3PhotoSplineService of requested type for use in the StartinTrackVeto calculations ''' #Find location of spline tables table_base = "" if os.path.isfile( os.path.expandvars( "$I3_DATA/photon-tables/splines/ems_mie_z20_a10.%s.fits") % "abs"): table_base = os.path.expandvars( "$I3_DATA/photon-tables/splines/ems_mie_z20_a10.%s.fits") elif os.path.isfile("splines/ems_mie_z20_a10.%s.fits" % "abs"): table_base = os.path.expandvars("splines/ems_mie_z20_a10.%s.fits") elif os.path.isfile( "/cvmfs/icecube.opensciencegrid.org/data/photon-tables/splines/ems_mie_z20_a10.%s.fits" % "abs"): table_base = os.path.expandvars( "/cvmfs/icecube.opensciencegrid.org/data/photon-tables/splines/ems_mie_z20_a10.%s.fits" ) elif os.path.isfile( "/home/icecube/i3/data/generalized_starting_events/splines/ems_mie_z20_a10.%s.fits" % "abs"): table_base = os.path.expandvars( "/home/icecube/i3/data/generalized_starting_events/splines/ems_mie_z20_a10.%s.fits" ) else: print( "You don't have splines anywhere I can find. This will eventually raise an error, for now it semi-silently dies" ) #Load photospline service from location found above if service_type == "cscd": cascade_service = photonics_service.I3PhotoSplineService( table_base % "abs", table_base % "prob", 0, maxRadius=600.0) return cascade_service elif service_type == "seg_muon": seg_muon_service = photonics_service.I3PhotoSplineService( amplitudetable=os.path.join( os.path.expandvars("$I3_DATA/photon-tables/splines/"), "ZeroLengthMieMuons_250_z20_a10.abs.fits" ), ## Amplitude tables timingtable=os.path.join( os.path.expandvars("$I3_DATA/photon-tables/splines/"), "ZeroLengthMieMuons_250_z20_a10.prob.fits"), ## Timing tables timingSigma=0.0, maxRadius=600.0) return seg_muon_service elif service_type == "inf_muon": inf_muon_service = photonics_service.I3PhotoSplineService( amplitudetable=os.path.join( os.path.expandvars("$I3_DATA/photon-tables/splines/"), "InfBareMu_mie_abs_z20a10.fits"), ## Amplitude tables timingtable=os.path.join( os.path.expandvars("$I3_DATA/photon-tables/splines/"), "InfBareMu_mie_prob_z20a10.fits"), ## Timing tables timingSigma=0.0, maxRadius=600.0) return inf_muon_service else: print( "You didn't give me a spline service type I recognize. This will eventually raise an error, for now it semi-silently dies" )
print 'Usage: %s minimizer tolerance output.i3 input1.i3 [input2.i3] ...' sys.exit(1) files = sys.argv[5:] tol = float(sys.argv[2]) geofile = dataio.I3File(sys.argv[4]) gFrame = geofile.pop_frame() gFrame = geofile.pop_frame() geometry_ = gFrame["I3Geometry"] #Photonics: muon_service = photonics_service.I3PhotoSplineService('/data/user/mntobin/NuIceRec/MieTables-Corrected/ZeroLengthMieMuons_150_z20_a10.abs.fits', '/data/user/mntobin/NuIceRec/MieTables-Corrected/ZeroLengthMieMuons_150_z20_a10.prob.fits', 0, 150.0) #cascade_service = photonics_service.I3PhotoSplineService('/net/user/mntobin/IceRec/Tables/ems_spice1_z20_a10_150.abs.fits', '/net/user/mntobin/IceRec/Tables/ems_spice1_z20_a10_150.prob.fits', 0) #cascade_service_mie = photonics_service.I3PhotoSplineService('/net/user/mntobin/IceRec/Tables/ems_mie_z20_a10_150.abs.fits', '/net/user/mntobin/IceRec/Tables/ems_mie_z20_a10_150.prob.fits', 0) cascade_service_mie = photonics_service.I3PhotoSplineService('/data/user/mntobin/IceRec/Tables/LowEnergyCorrectedCascades_z20_a10_150m.abs.fits', '/data/user/mntobin/IceRec/Tables/LowEnergyCorrectedCascades_z20_a10_150m.prob.fits', 0.0, 150.0) print "Yum Photonics Tables!" #Begin: tray = I3Tray() #icetray.set_log_level(icetray.I3LogLevel.LOG_TRACE) #icetray.set_log_level_for_unit('lilliput',icetray.I3LogLevel.LOG_TRACE) #icetray.set_log_level_for_unit('I3Gulliver',icetray.I3LogLevel.LOG_TRACE) #icetray.set_log_level_for_unit('millipede',icetray.I3LogLevel.LOG_TRACE) tray.AddModule('I3Reader', 'reader', FilenameList=files)
def scan_pixel_distributed_client(frame,pulsesName,output,baseline): event_id_string = str(frame[-1]['I3EventHeader'].event_id) base_GCD_path = baseline # At HESE energies, deposited light is dominated by the stochastic losses # (muon part emits so little light in comparison) # This is why we can use ems_mie instead of InfBareMu_mie even for tracks base = os.path.expandvars('$I3_DATA/photon-tables/splines/ems_mie_z20_a10.%s.fits') cascade_service = photonics_service.I3PhotoSplineService(base % "abs", base % "prob", 0) basemu = os.path.expandvars('$I3_DATA/photon-tables/splines/InfBareMu_mie_%s_z20a10_V2.fits') # muon_service = photonics_service.I3PhotoSplineService(basemu % "abs", basemu% "prob", 0) muon_service = None iceModelBaseNames = {"SpiceMie": "ems_mie_z20_a10", "Spice1": "ems_spice1_z20_a10"} iceModelBaseName = iceModelBaseNames["SpiceMie"] SPEScale = 0.99 print(len(frame)) ########## the tray tray = I3Tray() tray.Add(FrameReader, frames=frame) # ########## perform the fit def notifyStart(frame): print("got data - uncompressing GCD", datetime.datetime.now()) tray.AddModule(notifyStart, "notifyStart") tray.Add(uncompress, "GCD_patch", keep_compressed=False, base_path=base_GCD_path) def notifyExclusions(frame): print("determining DOM exclusions for this event", datetime.datetime.now()) tray.AddModule(notifyExclusions, "notifyExclusions") ExcludedDOMs = \ tray.AddSegment(millipede.HighEnergyExclusions, 'millipede_DOM_exclusions', Pulses = pulsesName, ExcludeDeepCore='DeepCoreDOMs', ExcludeSaturatedDOMs='SaturatedDOMs', ExcludeBrightDOMs='BrightDOMs', BadDomsList='BadDomsList', CalibrationErrata='CalibrationErrata', SaturationWindows='SaturationWindows' ) # # I like having frame objects in there even if they are empty for some frames def createEmptyDOMLists(frame, ListNames=[]): print("Making list of DOMs") for name in ListNames: if name in frame: continue frame[name] = dataclasses.I3VectorOMKey() tray.AddModule(createEmptyDOMLists, 'createEmptyDOMLists', ListNames = ["BrightDOMs"], Streams=[icetray.I3Frame.Physics]) # add the late pulse exclusion windows ExcludedDOMs = ExcludedDOMs + [pulsesName+'LatePulseCleanedTimeWindows'] def notify0(frame): print("starting a new fit!", datetime.datetime.now()) tray.AddModule(notify0, "notify0") tray.AddService('MillipedeLikelihoodFactory', 'millipedellh', MuonPhotonicsService=muon_service, CascadePhotonicsService=cascade_service, ShowerRegularization=0, PhotonsPerBin=15, DOMEfficiency=SPEScale, ExcludedDOMs=ExcludedDOMs, PartialExclusion=True, ReadoutWindow=pulsesName+'TimeRange', Pulses=pulsesName, BinSigma=3) tray.AddService('I3GSLRandomServiceFactory','I3RandomService') tray.AddService('I3GSLSimplexFactory', 'simplex', MaxIterations=20000) tray.AddService('MuMillipedeParametrizationFactory', 'coarseSteps', MuonSpacing=0.*I3Units.m, ShowerSpacing=5.*I3Units.m, StepX = 10.*I3Units.m, StepY = 10.*I3Units.m, StepZ = 10.*I3Units.m, StepT = 0., StepZenith = 0., StepAzimuth = 0., ) tray.AddService('I3BasicSeedServiceFactory', 'vetoseed', FirstGuesses=['MillipedeSeedParticle'], TimeShiftType='TNone', PositionShiftType='None') tray.AddModule('I3SimpleFitter', 'MillipedeStarting1stPass', OutputName='MillipedeStarting1stPass', SeedService='vetoseed', Parametrization='coarseSteps', LogLikelihood='millipedellh', Minimizer='simplex') def notify1(frame): print("1st pass done!", datetime.datetime.now()) print("MillipedeStarting1stPass", frame["MillipedeStarting1stPass"]) tray.AddModule(notify1, "notify1") tray.AddService('MuMillipedeParametrizationFactory', 'fineSteps', MuonSpacing=0.*I3Units.m, ShowerSpacing=2.5*I3Units.m, StepX = 2.*I3Units.m, StepY = 2.*I3Units.m, StepZ = 2.*I3Units.m, StepT = 5.*I3Units.ns, # now, also fit for time StepZenith = 0., StepAzimuth = 0., ) tray.AddService('I3BasicSeedServiceFactory', 'firstFitSeed', FirstGuess='MillipedeStarting1stPass', TimeShiftType='TNone', PositionShiftType='None') tray.AddModule('I3SimpleFitter', 'MillipedeStarting2ndPass', OutputName='MillipedeStarting2ndPass', SeedService='firstFitSeed', Parametrization='fineSteps', LogLikelihood='millipedellh', Minimizer='simplex') def notify2(frame): print("2nd pass done!", datetime.datetime.now()) print("MillipedeStarting2ndPass", frame["MillipedeStarting2ndPass"]) tray.AddModule(notify2, "notify2") #Write Output files tray.AddModule(CollectRecoResults, "CollectRecoResults", event_id = event_id_string, output_dir = output ) print("Executing Tray") tray.Execute() tray.Finish() del tray
import sys from icecube import icetray, dataio, dataclasses, photonics_service, gulliver from icecube import millipede, wavedeform load('gulliver-modules') load('BiPed') load('WaveCalibrator') load('libparticleforge') if len(sys.argv) < 3: print 'Usage: %s output.i3 input1.i3 [input2.i3] ...' sys.exit(1) files = sys.argv[2:] muon_service = photonics_service.I3PhotoSplineService( '/net/user/mntobin/IceRec/Tables/ZeroLengthMuons_z20_a10_150.abs.fits', '/net/user/mntobin/IceRec/Tables/ZeroLengthMuons_z20_a10_150.prob.fits', 0) #cascade_service = photonics_service.I3PhotoSplineService('/net/user/mntobin/IceRec/Tables/ems_spice1_z20_a10_150.abs.fits', '/net/user/mntobin/IceRec/Tables/ems_spice1_z20_a10_150.prob.fits', 0) cascade_service_mie = photonics_service.I3PhotoSplineService( '/net/user/mntobin/IceRec/Tables/ems_mie_z20_a10_150.abs.fits', '/net/user/mntobin/IceRec/Tables/ems_mie_z20_a10_150.prob.fits', 0) print "Yum Photonics Tables!" tray = I3Tray() #icetray.set_log_level(icetray.I3LogLevel.LOG_INFO) tray.AddModule('I3Reader', 'reader', FilenameList=files) #fixup code from JVS def flag_borked_slc(frame): # Find SLC launches affected by DOMsimulator off-by-one bug, # and tell Millipede to ignore them
mode=-1, opts=mmcOpts, ShiftParticles=False, ) # split the MCTree into a cascade-only and a track-only version tray.AddModule("I3MCTreeHybridSimulationSplitter", "splitMCTree", InputMCTreeName="I3MCTree", OutputMCTreeNameTracks="I3MCTreeTracks", OutputMCTreeNameCascades="I3MCTreeCascades") # simulate cascades (with photonics-hit-maker) cascade_service = photonics_service.I3PhotoSplineService( amplitudetable= '/Users/claudio/Documents/Work/IceTray/PhotonTables/spline-tables/ems_spice1_z20_a10.abs.fits', timingtable= '/Users/claudio/Documents/Work/IceTray/PhotonTables/spline-tables/ems_spice1_z20_a10.prob.fits', timingSigma=0.) tray.AddModule( "I3PhotonicsHitMaker", "hitsFromTheTable", CascadeService=cascade_service, TrackService=None, # tracks are handled by clsim UnshadowedFraction=0.9, Input="I3MCTreeCascades", Output="I3MCPESeriesMapCascades", RandomService=randomService) # simulate tracks (with clsim) tray.AddSegment(
def scan_pixel(broker, auth_token, topic_in, topic_out, pulsesName="SplitInIcePulsesLatePulseCleaned", all_partitions=False, fake_scan=False): ########## load data # At HESE energies, deposited light is dominated by the stochastic losses # (muon part emits so little light in comparison) # This is why we can use ems_mie instead of InfBareMu_mie even for tracks base = os.path.expandvars('$I3_DATA/photon-tables/splines/ems_mie_z20_a10.%s.fits') cascade_service = photonics_service.I3PhotoSplineService(base % "abs", base % "prob", 0) # basemu = os.path.expandvars('$I3_DATA/photon-tables/splines/InfBareMu_mie_%s_z20a10_V2.fits') # muon_service = photonics_service.I3PhotoSplineService(basemu % "abs", basemu% "prob", 0) muon_service = None SPEScale = 0.99 # connect to pulsar client_service = PulsarClientService( BrokerURL=broker, AuthToken=auth_token, ) receiver_service = ReceiverService( client_service=client_service, topic=topic_in, subscription_name="skymap-worker-sub", subscribe_to_single_random_partition=not all_partitions # if the input is a partitioned topic, subscribe to only *one* partition ) if all_partitions: receiving_from_partition = None receiving_from_partition_index = None print("This worker is receiving from all partitions") else: receiving_from_partition = receiver_service.chosen_partition() receiving_from_partition_index = receiver_service.chosen_partition_index() print("This worker is receiving from partition number {} [\"{}\"]".format(receiving_from_partition_index, receiving_from_partition)) ########## the tray tray = I3Tray() tray.Add(ReceivePFrameWithMetadata, "ReceivePFrameWithMetadata", ReceiverService=receiver_service, MaxCacheEntriesPerFrameStop=100, # cache more (so we do not have to re-connect in case we are collecting many different events) ) ########## perform the fit def notifyStart(frame): print("got data - uncompressing GCD", datetime.datetime.now()) print("Name {}, Pixel {}, NSide {}, PosVarIndex {}, OverallIndex {}".format( frame["SCAN_EventName"].value, frame["SCAN_HealpixPixel"].value, frame["SCAN_HealpixNSide"].value, frame["SCAN_PositionVariationIndex"].value, frame["SCAN_EventOverallIndex"].value, )) tray.AddModule(notifyStart, "notifyStart") tray.Add(uncompress, "GCD_patch", keep_compressed=False, base_path=config.base_GCD_path) def notifyExclusions(frame): print("determining DOM exclusions for this event", datetime.datetime.now()) tray.AddModule(notifyExclusions, "notifyExclusions") ExcludedDOMs = [ 'CalibrationErrata', 'BadDomsList', 'DeepCoreDOMs', 'SaturatedDOMs', 'BrightDOMs', pulsesName+'TimeWindows' ] if fake_scan: def add_fake_scan(frame): fp = millipede.MillipedeFitParams() fp.logl = random.uniform(4000.,6000.) frame["MillipedeStarting2ndPass_millipedellh"] = fp p = dataclasses.I3Particle() frame["MillipedeStarting2ndPass"] = p time.sleep(0.1) tray.AddModule(add_fake_scan, "add_fake_scan") else: def notify0(frame): print("starting a new fit!", datetime.datetime.now()) tray.AddModule(notify0, "notify0") tray.AddService('MillipedeLikelihoodFactory', 'millipedellh', MuonPhotonicsService=muon_service, CascadePhotonicsService=cascade_service, ShowerRegularization=0, PhotonsPerBin=15, DOMEfficiency=SPEScale, ExcludedDOMs=ExcludedDOMs, PartialExclusion=True, ReadoutWindow=pulsesName+'TimeRange', Pulses=pulsesName, BinSigma=3) tray.AddService('I3GSLRandomServiceFactory','I3RandomService') tray.AddService('I3GSLSimplexFactory', 'simplex', MaxIterations=20000) tray.AddService('MuMillipedeParametrizationFactory', 'coarseSteps', MuonSpacing=0.*I3Units.m, ShowerSpacing=5.*I3Units.m, StepX = 10.*I3Units.m, StepY = 10.*I3Units.m, StepZ = 10.*I3Units.m, StepT = 0., StepZenith = 0., StepAzimuth = 0., ) tray.AddService('I3BasicSeedServiceFactory', 'vetoseed', FirstGuesses=['MillipedeSeedParticle'], TimeShiftType='TNone', PositionShiftType='None') tray.AddModule('I3SimpleFitter', 'MillipedeStarting1stPass', OutputName='MillipedeStarting1stPass', SeedService='vetoseed', Parametrization='coarseSteps', LogLikelihood='millipedellh', Minimizer='simplex') def notify1(frame): print("1st pass done!", datetime.datetime.now()) print("MillipedeStarting1stPass", frame["MillipedeStarting1stPass"]) tray.AddModule(notify1, "notify1") tray.AddService('MuMillipedeParametrizationFactory', 'fineSteps', MuonSpacing=0.*I3Units.m, ShowerSpacing=2.5*I3Units.m, StepX = 2.*I3Units.m, StepY = 2.*I3Units.m, StepZ = 2.*I3Units.m, StepT = 5.*I3Units.ns, # now, also fit for time StepZenith = 0., StepAzimuth = 0., ) tray.AddService('I3BasicSeedServiceFactory', 'firstFitSeed', FirstGuess='MillipedeStarting1stPass', TimeShiftType='TNone', PositionShiftType='None') tray.AddModule('I3SimpleFitter', 'MillipedeStarting2ndPass', OutputName='MillipedeStarting2ndPass', SeedService='firstFitSeed', Parametrization='fineSteps', LogLikelihood='millipedellh', Minimizer='simplex') def notify2(frame): print("2nd pass done!", datetime.datetime.now()) print("MillipedeStarting2ndPass", frame["MillipedeStarting2ndPass"]) tray.AddModule(notify2, "notify2") # now send the topic! tray.Add(SendPFrameWithMetadata, "SendPFrameWithMetadata", ClientService=client_service, Topic=topic_out, MetadataTopicBase=None, # no specific metadata topic, will be dynamic according to incoming frame tags ProducerName=None, # each worker is on its own, there are no specific producer names (otherwise deduplication would mess things up) PartitionKey=lambda frame: frame["SCAN_EventName"].value + '_' + str(frame["SCAN_HealpixNSide"].value) + '_' + str(frame["SCAN_HealpixPixel"].value), SendToSinglePartitionIndex=receiving_from_partition_index # send to a specific partition only (the same index we are receiving from) # IMPORTANT: this assumes the input and the output topic have the same number of partitions! ) tray.Add(AcknowledgeReceivedPFrame, "AcknowledgeReceivedPFrame", ReceiverService=receiver_service ) tray.Execute() del tray del receiver_service del client_service