IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an...

55
IceTray Part I: For Users Fabian Kislat, DESY 22.11.2010

Transcript of IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an...

Page 1: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

IceTray Part I:For Users

Fabian Kislat, DESY22.11.2010

Page 2: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 2

What this talk is:A starting point for using icetray.A brief overview over the features.

What this talk is not:An in depth tutorial to all ofthe IceCube software.

Page 3: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 3

IceTray Concepts

A simple I3Tray

Extracting data for analysis

Applying cuts

Installing IceRec

Page 4: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 4

The Tray

● I3Tray: IceTray framework

● I3Tray: Series of modules

● I3Module:● Read data● Generate Monte Carlo● Do physics● Write data● TrashCan

● I3Tray: Carry data from module to module

● I3Frame: Container for data

● Implemented in Python script

I3Tray

I3Module: Source

I3Module

I3Module

I3Module

I3Module: Write

TrashCan

I3Frame: ●Data

I3Frame: ●Data●Data

●Data

I3Frame: ●Data●Data

●Data●Data

I3Frame: ●Data●Data

●Data●Data

●Data

I3Frame: ●Data●Data

●Data●Data

●Data

Page 5: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 5

The I3Frame

● Data container

● Objects stored under unique name

● Write once read many: Users can● put new data in frame● read data in frame● delete data from frame● not change data in frame

I3Frame

● “I3Calibration”⇒ I3Calibration

● “I3DetectorStatus”⇒ I3DetectorStatus

● “I3Geometry”⇒ I3Geometry

● “LineFitParams”⇒ I3LineFitParams

● “MuonPulseSeriesReco”⇒ I3RecoPulseSeriesMap

● “TopEvent_0”⇒ I3RecoPulseSeriesMap

Page 6: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 6

Creating an I3Tray

● Example Python script

● Load I3Tray module

● Create an instance of I3Tray object

#!/usr/bin/env python

from I3Tray import *

tray = I3Tray()

Page 7: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 7

Creating an I3Tray#!/usr/bin/env python

from I3Tray import *

tray = I3Tray()

Make the script executableEnsure using correct python

Page 8: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 8

Creating an I3Tray

Import all functions/classes from I3Tray module

#!/usr/bin/env python

from I3Tray import *

tray = I3Tray()

Page 9: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 9

Creating an I3Tray

Create instance ofI3Tray object

#!/usr/bin/env python

from I3Tray import *

tray = I3Tray()

Page 10: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 10

Creating an I3Tray

● Example Python script

● Load I3Tray module

● Create an instance of I3Tray object

● Add module to read input file

#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )

Page 11: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 11

Creating an I3Tray#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )

Add a module tothe tray

Page 12: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 12

I3Reader = type of module

Creating an I3Tray

Add a module tothe tray

#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )

Page 13: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 13

I3Reader = type of module

Creating an I3Tray

Add a module tothe tray

#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )

Every module on the trayhas a distinct name

Page 14: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 14

I3Reader = type of module

Creating an I3Tray

Add a module tothe tray

#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )

Every module on the trayhas a distinct name

Module option:Input file name

Page 15: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 15

Creating an I3Tray#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )

Before you we can actuallyuse I3Reader, we have to

import the dataio module.Module icetray is always needed

Page 16: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 16

Creating an I3Tray

● Example Python script

● Load I3Tray module

● Create an instance of I3Tray object

● Add module to read input file

● Add a Physics module

#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio, linefit

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )tray.AddModule(“I3LineFit”, “linefit”, InputRecoPulses = “MuonPulses” )

Page 17: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 17

Creating an I3Tray#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio, linefit

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )tray.AddModule(“I3LineFit”, “linefit”, InputRecoPulses = “MuonPulses” )

Import the required module

Page 18: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 18

Creating an I3Tray#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio, linefit

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )tray.AddModule(“I3LineFit”, “linefit”, InputRecoPulses = “MuonPulses” )

Add I3LineFit moduleto our I3Tray

Page 19: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 19

Creating an I3Tray#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio, linefit

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )tray.AddModule(“I3LineFit”, “linefit”, InputRecoPulses = “MuonPulsesReco” )

Load the requiredshared library

Add I3LineFit moduleto our I3Tray

Tell linefit what data itshould operate on

Page 20: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 20

Creating an I3Tray

● Example Python script

● Load I3Tray module

● Create an instance of I3Tray object

● Add module to read input file

● Add a Physics module

● Write data to disk

#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio, linefit

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )tray.AddModule(“I3LineFit”, “linefit”, InputRecoPulses = “MuonPulsesReco” )tray.AddModule(“I3Writer”, “writer”, FileName = “output.i3.gz” )

Page 21: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 21

Creating an I3Tray#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio, linefit

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )tray.AddModule(“I3LineFit”, “linefit”, InputRecoPulses = “MuonPulsesReco” )tray.AddModule(“I3Writer”, “writer”, FileName = “output.i3.gz” )

Add I3Writer module toI3Tray and specify output

file name

Module dataio alsocontains I3Writer

Page 22: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 22

Creating an I3Tray

● Example Python script

● Load I3Tray module

● Create an instance of I3Tray object

● Add module to read input file

● Add a Physics module

● Write data to disk

● Add TrashCan

● Execute!

#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio, linefit

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )tray.AddModule(“I3LineFit”, “linefit”, InputRecoPulses = “MuonPulsesReco” )tray.AddModule(“I3Writer”, “writer”, FileName = “output.i3.gz” )tray.AddModule(“TrashCan”, “trash”)

tray.Execute()tray.Finish()

Page 23: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 23

Creating an I3Tray#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio, linefit

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )tray.AddModule(“I3LineFit”, “linefit”, InputRecoPulses = “MuonPulsesReco” )tray.AddModule(“I3Writer”, “writer”, FileName = “output.i3.gz” )tray.AddModule(“TrashCan”, “trash”)

tray.Execute()tray.Finish()

Add a TrashCanIt is just a special I3Module

Page 24: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 24

Creating an I3Tray#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio, linefit

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )tray.AddModule(“I3LineFit”, “linefit”, InputRecoPulses = “MuonPulsesReco” )tray.AddModule(“I3Writer”, “writer”, FileName = “output.i3.gz” )tray.AddModule(“TrashCan”, “trash”)

tray.Execute()tray.Finish()

Run the data processingAlternative form: tray.Execute(100)for testing

Page 25: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 25

Creating an I3Tray#!/usr/bin/env python

from I3Tray import *

from icecube import icetrayfrom icecube import dataio, linefit

tray = I3Tray()

tray.AddModule(“I3Reader”, “reader”, FileName = “input.i3.gz” )tray.AddModule(“I3LineFit”, “linefit”, InputRecoPulses = “MuonPulsesReco” )tray.AddModule(“I3Writer”, “writer”, FileName = “output.i3.gz” )tray.AddModule(“TrashCan”, “trash”)

tray.Execute()tray.Finish()

Finish: Close files, general cleanup

Page 26: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 26

Using the script

● Make the script executable$ chmod +x myscript.py

● Run it:$ ~/scratch/icerec/build/env-shell.sh myscript.py

Assuming IceRec is installed in~/scratch/icerec/build

env-shell.sh sets up shellenvironment, like PATH,LD_LIBRARY_PATH, …

Run your script

Here you can passfurther parameters

to your script

Page 27: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 27

I3Tray Summary I

● I3Tray = IceCube's framework for data processing and simulation

● I3Module = Software to do one specific job, e.g.● Calibrate data, e.g. DOMcalibrator, topeventbuilder● Waveform processing, e.g. FeatureExtractor, NFE, topwaveprocessor● Apply reconstruction, e.g. linefit, credo, toprec● Simulation, e.g. pmt-simulator, DOMsimulator, mmc

● Service = Provides some functionality to be used by modules● For instance: Random numbers, Database access

● Main use: processing

● IceTray is not good for making plots

Page 28: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 28

dataio-shovel / icetray-inspect

● Inspect file contents with dataio-shovel

● Event viewer glshovel or pythen-eventviewer

● Files must be unzipped

● Listing module parameters: icetray-inspect

Demonstration

Page 29: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 29

Extracting data

● IceTray not well-suited for analysis

● Extract data to ROOT or hdf5 format for analysis with other tools

● IceTray's tool for the job: tableio● For ROOT files: rootwriter● For hdf5 files: hdfwriter

● You can book everything that comes with a converter

● More info at: http://software.icecube.wisc.edu/offline-software.trunk/projects/tableio/ [Link]

Page 30: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 30

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, linefit, tableiofrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

Page 31: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 31

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, linefit, tableiofrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

Make classes/functions from icetrayand dataclasses known to python

Page 32: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 32

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, linefit, tableiofrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

Import the tableio module

Page 33: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 33

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, tableio, linefitfrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

For your convenience: importI3TableWriter to toplevel namespace

Page 34: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 34

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, linefit, tableiofrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

Import rootwriter and/or hdfwriter

Page 35: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 35

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, linefit, tableiofrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

tray = I3Tray()...

The usual stuff: create I3Tray,add modules, ....

Page 36: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 36

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, linefit, tableiofrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

tray = I3Tray()...

root_service = I3ROOTTableService(“output.root”)hdf_service = I3HDFTableService(“output.hd5”)

I3ROOTTableService and I3HDFTableService create output files

Page 37: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 37

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, linefit, tableiofrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

tray = I3Tray()...

root_service = I3ROOTTableService(“output.root”)hdf_service = I3HDFTableService(“output.hd5”)

tray.AddModule(I3TableWriter, “writer”, Keys = [ “LineFitParams”, “LineFit” ], TableService = [ root_service, hdf_service ] )

Add I3TableWriter

Page 38: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 38

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, linefit, tableiofrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

tray = I3Tray()...

root_service = I3ROOTTableService(“output.root”)hdf_service = I3HDFTableService(“output.hd5”)

tray.AddModule(I3TableWriter, “writer”, Keys = [ “LineFitParams”, “LineFit” ], TableService = [ root_service, hdf_service ] )

No quotes!

Page 39: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 39

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, linefit, tableiofrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

tray = I3Tray()...

root_service = I3ROOTTableService(“output.root”)hdf_service = I3HDFTableService(“output.hd5”)

tray.AddModule(I3TableWriter, “writer”, Keys = [ “LineFitParams”, “LineFit” ], TableService = [ root_service, hdf_service ] )

Define output file contents

Page 40: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 40

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, linefit, tableiofrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

tray = I3Tray()...

root_service = I3ROOTTableService(“output.root”)hdf_service = I3HDFTableService(“output.hd5”)

tray.AddModule(I3TableWriter, “writer”, Keys = [ “LineFitParams”, “LineFit” ], TableService = [ root_service, hdf_service ] )

Use table servicesdefined above

Page 41: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 41

tableio examplefrom I3Tray import *from icecube import icetray, dataclasses, linefit, tableiofrom icecube.tableio import I3TableWriterfrom icecube.rootwriter import I3ROOTTableServicefrom icecube.hdfwriter import I3HDFTableService

tray = I3Tray()...

root_service = I3ROOTTableService(“output.root”)hdf_service = I3HDFTableService(“output.hd5”)

tray.AddModule(I3TableWriter, “writer”, Keys = [ “LineFitParams”, “LineFit” ], TableService = [ root_service, hdf_service ] )

tray.AddModule(“TrashCan”, “trash”)tray.Execute()tray.Finish()

Page 42: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 42

Applying Cuts

● Use python to make an event selection

● Simple function that● Takes an I3rame as argument● Returns

– True to keep the event– False to reject it

Page 43: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 43

Cut example

● Select only events where IceTop ShowerCombined converged

from icecube import icetray, dataclasses

def selection(frame): if “ShowerCombined” in frame: particle = frame[“ShowerCombined”] return particle.FitStatus == dataclasses.I3Particle.OK return False

We need to use objects in python

Page 44: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 44

Cut example

● Select only events where IceTop ShowerCombined converged

from icecube import icetray, dataclasses

def selection(frame): if “ShowerCombined” in frame: particle = frame[“ShowerCombined”] return particle.FitStatus == dataclasses.I3Particle.OK return False

Function called selectionthat takes frame as argument

Page 45: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 45

Cut example

● Select only events where IceTop ShowerCombined converged

from icecube import icetray, dataclasses

def selection(frame): if “ShowerCombined” in frame: particle = frame[“ShowerCombined”] return particle.FitStatus == dataclasses.I3Particle.OK return False

A frame acts like a dictionaryCheck if object named

“ShowerCombined” is in frame

Page 46: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 46

Cut example

● Select only events where IceTop ShowerCombined converged

from icecube import icetray, dataclasses

def selection(frame): if “ShowerCombined” in frame: particle = frame[“ShowerCombined”] return particle.FitStatus == dataclasses.I3Particle.OK return False

If object exists:Get it from the frame

Page 47: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 47

Cut example

● Select only events where IceTop ShowerCombined converged

from icecube import icetray, dataclasses

def selection(frame): if “ShowerCombined” in frame: particle = frame[“ShowerCombined”] return particle.FitStatus == dataclasses.I3Particle.OK return False

Check fit status

Page 48: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 48

Cut example

● Select only events where IceTop ShowerCombined converged

from icecube import icetray, dataclasses

def selection(frame): if “ShowerCombined” in frame: particle = frame[“ShowerCombined”] return particle.FitStatus == dataclasses.I3Particle.OK return False

If object not there: return False

Page 49: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 49

Cut example

● Select only events where IceTop ShowerCombined converged

from icecube import icetray, dataclasses

def selection(frame): if “ShowerCombined” in frame: particle = frame[“ShowerCombined”] return particle.FitStatus == dataclasses.I3Particle.OK return False

... Create I3Tray; add modules; ...

Page 50: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 50

Cut example

● Select only events where IceTop ShowerCombined converged

from icecube import icetray, dataclasses

def selection(frame): if “ShowerCombined” in frame: particle = frame[“ShowerCombined”] return particle.FitStatus == dataclasses.I3Particle.OK return False

...

tray.AddModule(selection, “Selection”)

Now you can use the function as a moduleIf it returns False ⇒ frame goes into the trash

If it returns True or None ⇒ processing continues

Page 51: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 51

Cut example

● Select only events where IceTop ShowerCombined converged

from icecube import icetray, dataclasses

def selection(frame): if “ShowerCombined” in frame: particle = frame[“ShowerCombined”] return particle.FitStatus == dataclasses.I3Particle.OK return False

...

tray.AddModule(selection, “Selection”) # skip frames

or tray.AddModule(“SomeOtherModule”, “conditional_module”, If = selection ) Use the python function to conditionally

execute another module

Page 52: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 52

An IceTray Glossary

● A “project” is a collection of one or more modules for a specific task● linefit contains module I3Linefit● toprec contains modules I3TopRecoCore, I3TopLateralfit, …

● IceRec and Simulation are “meta-projects”● Collection of several modules● Both contain meta-project offline-software as a subset

● All software hosted in IceCube subversion repository:http://www.code.icecube.wisc.edu/svn

● 3rd party software maintained in I3Ports distribution

Page 53: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 53

Installing IceRec

● First, you need I3Ports:http://software.icecube.wisc.edu/offline-software.trunk/projects/cmake/installing_ports.html [Link]

● At DESY a central installation of I3Ports is maintained by Robert

● All you need:$ . /afs/ifh.de/group/amanda/icecube/ports-v3_test/ports_setup.zsh

● Create a source directory (in your scratch, I would suggest):$ cd scratch && mkdir IceRec$ cd IceRec

● Check out the source code (into directory src):$ svn co \ http://code.icecube.wisc.edu/svn/meta-projects/icerec/trunk src

Page 54: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 54

Installing IceRec

● Create a build directory:$ mkdir build-release$ cd build-release

● Configure build by running cmake (creates an optimized build):$ $I3_PORTS/bin/cmake ../src -DCMAKE_BUILD_TYPE:String=Release

● Compile:$ nice make -j9

● Always use nice for long-running jobs

● -jX specifies the number of parallel builds

● Good choice: X = #cores + 1● Get a coffee.

● Enjoy!

Page 55: IceTray Part I: For Users - DESY...22.11.2010 Fabian Kislat - IceTray I: For Users 19 Creating an I3Tray #!/usr/bin/env python from I3Tray import * from icecube import icetray from

22.11.2010 Fabian Kislat - IceTray I: For Users 55

Useful miscellanea

To wrap up, here is a list of useful things to know

● For debugging:tray.AddModule(“Dump”, “dump”)Outputs current frame contents

● IceRec documentation:http://www-zeuthen.desy.de/~kislat/www/icerec/docs/trunk/

Contains complete offline-software documentation + IceRec modules

● Mailing lists:● [email protected]

[email protected]

● Join us on IRC: #icecube and/or #i3berlin(see also http://wiki.icecube.wisc.edu/index.php/Join_us_on_IRC)