示例#1
0
def process_single_stream(cfg, infile, outfile):
    click.echo('Input: {}'.format(infile))
    hybrid_mode = (cfg['clsim_hybrid_mode']
                   and cfg['icemodel'].lower() != 'spicelea')
    ignore_muon_light = (cfg['clsim_ignore_muon_light']
                         and cfg['clsim_hybrid_mode'])
    click.echo('UseGPUs: {}'.format(cfg['clsim_usegpus']))
    click.echo('IceModel: {}'.format(cfg['icemodel']))
    if not cfg['icemodel_location'] is None:
        click.echo('IceModelLocation: {}'.format(cfg['icemodel_location']))
    click.echo('DomOversize {}'.format(cfg['clsim_dom_oversize']))
    click.echo('UnshadowedFraction: {0:.2f}'.format(
        cfg['clsim_unshadowed_fraction']))
    click.echo('HybridMode: {}'.format(hybrid_mode))
    click.echo('IgnoreMuonLight: {}'.format(ignore_muon_light))
    click.echo('KeepMCPE: {}'.format(cfg['clsim_keep_mcpe']))
    click.echo('Output: {}'.format(outfile))

    tray = I3Tray()
    tray.context['I3FileStager'] = dataio.get_stagers()
    random_services, _ = create_random_services(
        dataset_number=cfg['dataset_number'],
        run_number=cfg['run_number'],
        seed=cfg['seed'],
        n_services=process_single_stream.n_streams)

    random_service = random_services[process_single_stream.i_th_stream]
    tray.context['I3RandomService'] = random_service
    tray.Add('I3Reader', FilenameList=[cfg['gcd'], infile])

    if hybrid_mode:
        cascade_tables = segments.LoadCascadeTables(IceModel=cfg['icemodel'],
                                                    TablePath=SPLINE_TABLES)
    else:
        cascade_tables = None

    if cfg['clsim_usegpus']:
        use_gpus = True
        use_cpus = False
    else:
        use_gpus = True
        use_cpus = False

    tray.AddSegment(segments.PropagatePhotons,
                    "PropagatePhotons",
                    RandomService=random_service,
                    MaxParallelEvents=MAX_PARALLEL_EVENTS,
                    KeepIndividualMaps=cfg['clsim_keep_mcpe'],
                    IceModel=cfg['icemodel'],
                    IceModelLocation=cfg['icemodel_location'],
                    UnshadowedFraction=cfg['clsim_unshadowed_fraction'],
                    IgnoreMuons=ignore_muon_light,
                    HybridMode=hybrid_mode,
                    UseGPUs=use_gpus,
                    UseAllCPUCores=use_cpus,
                    DOMOversizeFactor=cfg['clsim_dom_oversize'],
                    CascadeService=cascade_tables)

    outfile = outfile.replace(' ', '0')
    tray.AddModule("I3Writer",
                   "writer",
                   Filename=outfile,
                   Streams=[
                       icetray.I3Frame.DAQ, icetray.I3Frame.Physics,
                       icetray.I3Frame.Stream('S'),
                       icetray.I3Frame.Stream('M')
                   ])
    tray.AddModule("TrashCan", "the can")
    tray.Execute()
    tray.Finish()
    print "flavor", options.FLAVOR

if delayed_zip:
    print "writing to %s," % outfile
    print "then zipping to %s" % final_outfile
else:
    print "writing to", outfile
print "detector is", options.DETECTOR
print "using GCD file", gcdFile
print "seed", options.SEED
print "scratch space at", scratchDir
print ""

if options.HYBRIDSIMULATION:
    print "loading spline tables.."
    cascade_tables = segments.LoadCascadeTables(IceModel=options.ICEMODEL,
                                                TablePath=cascadeTablePath)
    print "done."
else:
    cascade_tables = None

tray = I3Tray()

maxDatasetNumber = 10000
maxRunNumber = 100000
maxInternalRunNumber = maxDatasetNumber * maxRunNumber

if options.RUNNUMBER < 0:
    raise RuntimeError("negative run numbers are not supported")
elif options.RUNNUMBER >= maxRunNumber:
    raise RuntimeError("run numbers > %u are not supported" % maxRunNumber)
def process_single_stream(cfg, infile, outfile):
    click.echo('Input: {}'.format(infile))
    hybrid_mode = (cfg['clsim_hybrid_mode']
                   and cfg['icemodel'].lower() != 'spicelea')
    ignore_muon_light = (cfg['clsim_ignore_muon_light']
                         and cfg['clsim_hybrid_mode'])
    click.echo('UseGPUs: {}'.format(cfg['clsim_usegpus']))
    click.echo('IceModel: {}'.format(cfg['icemodel']))
    if not cfg['icemodel_location'] is None:
        click.echo('IceModelLocation: {}'.format(cfg['icemodel_location']))
    click.echo('DomOversize {}'.format(cfg['clsim_dom_oversize']))
    click.echo('UnshadowedFraction: {0:.2f}'.format(
        cfg['clsim_unshadowed_fraction']))
    click.echo('HybridMode: {}'.format(hybrid_mode))
    click.echo('IgnoreMuonLight: {}'.format(ignore_muon_light))
    click.echo('KeepMCPE: {}'.format(cfg['clsim_keep_mcpe']))
    click.echo('Output: {}'.format(outfile))

    tray = I3Tray()
    tray.context['I3FileStager'] = dataio.get_stagers()
    random_services, _ = create_random_services(
        dataset_number=cfg['dataset_number'],
        run_number=cfg['run_number'],
        seed=cfg['seed'],
        n_services=process_single_stream.n_streams)

    random_service = random_services[process_single_stream.i_th_stream]
    tray.context['I3RandomService'] = random_service
    tray.Add('I3Reader', FilenameList=[cfg['gcd'], infile])

    if hybrid_mode:
        cascade_tables = segments.LoadCascadeTables(
            IceModel=cfg['icemodel'], TablePath=cfg['spline_table_dir'])
    else:
        cascade_tables = None

    if cfg['clsim_usegpus']:
        use_gpus = True
        use_cpus = False
    else:
        use_gpus = True
        use_cpus = False

    if 'additional_clsim_params' in cfg:
        additional_clsim_params = cfg['additional_clsim_params']
    else:
        additional_clsim_params = {}

    if not cfg['clsim_input_is_sliced']:
        MCTreeName = "I3MCTree"
        MMCTrackListName = "MMCTrackList"
    else:
        MCTreeName = "I3MCTree_sliced"
        MMCTrackListName = None
    #use_gpus=False
    #use_cpus=True
    tray.AddSegment(segments.PropagatePhotons,
                    "PropagatePhotons",
                    GCDFile=cfg['gcd'],
                    RandomService=random_service,
                    KeepIndividualMaps=cfg['clsim_keep_mcpe'],
                    IceModel=cfg['icemodel'],
                    IceModelLocation=cfg['icemodel_location'],
                    UnshadowedFraction=cfg['clsim_unshadowed_fraction'],
                    IgnoreMuons=ignore_muon_light,
                    HybridMode=hybrid_mode,
                    UseGPUs=use_gpus,
                    UseAllCPUCores=use_cpus,
                    DOMOversizeFactor=cfg['clsim_dom_oversize'],
                    CascadeService=cascade_tables,
                    **additional_clsim_params)

    # tray.AddSegment(clsim.I3CLSimMakeHits, "makeCLSimHits",
    #     GCDFile = cfg['gcd'],
    #     PhotonSeriesName = cfg['photonSeriesName'],
    #     MCTreeName = MCTreeName,
    #     MMCTrackListName = MMCTrackListName,
    #     RandomService = random_service,
    #     MCPESeriesName = cfg['mcpe_series_map'],
    #     UnshadowedFraction = cfg['clsim_unshadowed_fraction'],
    #     UseGPUs = use_gpus,
    #     UseCPUs = use_cpus,
    #     IceModelLocation = os.path.expandvars("$I3_BUILD/ice-models/resources/models/spice_lea"),
    #     )

    outfile = outfile.replace(' ', '0')
    tray.AddModule("I3Writer",
                   "writer",
                   Filename=outfile,
                   Streams=[
                       icetray.I3Frame.DAQ, icetray.I3Frame.Physics,
                       icetray.I3Frame.Stream('S'),
                       icetray.I3Frame.Stream('M')
                   ])

    tray.Execute()
    del tray