Пример #1
0
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"
Пример #2
0
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.)
Пример #5
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
Пример #6
0
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()
Пример #7
0
            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",
Пример #8
0
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 = []
Пример #10
0

# ******************************#
####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")
Пример #11
0
               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,
Пример #12
0
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"
        )
Пример #14
0
	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)
Пример #15
0
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
Пример #16
0
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
Пример #17
0
        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(
Пример #18
0
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