level 2 trigger software interface

24
9/12/99 R. Moore 1 Level 2 Trigger Software Interface R. Moore, Michigan State University

Upload: xia

Post on 14-Jan-2016

36 views

Category:

Documents


0 download

DESCRIPTION

Level 2 Trigger Software Interface. R. Moore, Michigan State University. L2 Crate. Administrator. Worker. Worker. Worker. Trigger Control Computer. Data Input. Data Output. External Communications. Internal Communications. Software Components. Worker. Global Worker. Pre-Proc - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Level 2 Trigger Software Interface

9/12/99 R. Moore 1

Level 2 Trigger Software Interface

R. Moore,Michigan State

University

Page 2: Level 2 Trigger Software Interface

9/12/99 R. Moore 2

L2 Crate

Administrator

Worker WorkerWorker

Data Input Data Output

Trigger Control Computer

ExternalCommunications

InternalCommunications

Page 3: Level 2 Trigger Software Interface

9/12/99 R. Moore 3

Software Components

AdministratorMBus

Worker LevelUser code

Tool LevelUser code

L2 Software Framework

Worker

Physics!

Pre-ProcWorker

GlobalTool

GlobalWorker

Page 4: Level 2 Trigger Software Interface

9/12/99 R. Moore 4

L2 Simulator

PackedData

RawChunk

UnpackData

Chunk

Ev

ent In

terfac

e

WorkerCode

Ev

ent In

terfac

e

Online

Offline

(testing only)

dynamic_cast<>

Online Code

Offline Package

I/Ogen

I/Ogen

Page 5: Level 2 Trigger Software Interface

9/12/99 R. Moore 5

L2 Simulator

• L2 simulator runs online worker code only– framework code

(administrator) not included because it has no physics impact

• Online L2 framework replaced by offline code:– control hooks replaced by

offline framework package– data interface replaced to

use unpacked data chunks

Page 6: Level 2 Trigger Software Interface

9/12/99 R. Moore 6

Writing L2 Code

• What you need to know:– L2 coding guidelines

(http://d0lxmsu1.fnal.gov/L2/L2CodingGuidelines.pdf)

• How to use DOC++

– How to use the offline build environment

• CTBuild user guide hopefully appearing soon…?

– Input and output object formats• tell Dylan and he’ll add them to the

L2 I/Ogen configuration file

– Worker algorithm

• What you don’t need to know!– Unpacked data chunks– Whether you are running online

or offline

Page 7: Level 2 Trigger Software Interface

9/12/99 R. Moore 7

Creating a Worker

• Create a new package for the algorithm code named:– l2<worker abbrev>worker– e.g. l2gblworker, l2cttworker

• Write the main worker class and put it into this package– the same class is used online

AND offline– Class name: <worker>Worker

e.g. GlobalWorker

• Create a new package to interface to trigsim, called:– tsim_l2<worker abbrev>– e.g. tsim_l2gbl, tsim_l2ctt …

Page 8: Level 2 Trigger Software Interface

9/12/99 R. Moore 8

Writing the Worker Class

• Worker class is ONLINE code– ALL L2 workers need one– Required methods:

• void processEvent(void)• Plus others to be added later

for monitoring, initialization etc.

– MUST obey L2 online coding guidelines: no STL!

• processEvent(void)– processes the current

event– Event I/O handled by

offline or online framework

Page 9: Level 2 Trigger Software Interface

9/12/99 R. Moore 9

Offline Interface

• Use L2 specific macros to register with framework– e.g. tsim_l2gbl.cpp

#include "framework/Registry.hpp"#include "l2workersim/FrameworkMacros.hpp"#include "l2gblworker/GlobalWorker.hpp"#include "l2gblworker/GlobalEventInput.hpp"#include "l2gblworker/GlobalEventOutput.hpp"#include "l2workersim/WorkerSim.hpp"

using namespace l2gblworker;using namespace l2workersim;

L2FWK_REGISTRY_IMPL(Global,"$Name: $")

#include "framework/Registry.hpp"#include "l2workersim/FrameworkMacros.hpp"

L2FWK_REGISTRY_DECL(Global)

– e.g. Regtsim_l2gbl.cpp

Page 10: Level 2 Trigger Software Interface

9/12/99 R. Moore 10

Input Format

L2Header

Object

L2Trailer

Object

Object

= InputBuffer<Object>

= ChunkInputBuffer <Object>

• Single MBT (or UDC if offline) channel maps to a template class•Behaves like an array

of the given object type•Inherits from L2Header

to allow access to header data

Page 11: Level 2 Trigger Software Interface

9/12/99 R. Moore 11

Output Format

L3Header

L3Trailer

Node Header

L2Header

Object

L2Trailer

Object

Object

L2Header

Object

L2Trailer

Object

Object

Channel

Channel

Channel

Channel

Channel

Module

Raw Data Unpacked Data Chunk

Page 12: Level 2 Trigger Software Interface

9/12/99 R. Moore 12

High Level Format

• Each worker and administrator has three possible output modules– Normal L2 output– Copy of inputs (UBS events)– Special UBS event data

output

Raw Data Unpacked Data Chunk

Crate = System

L3 OutputUBS Inputs = ModuleUBS Output

Page 13: Level 2 Trigger Software Interface

9/12/99 R. Moore 13

Building the Output

• Output created by ‘ChannelFiller’ templates which each fill one channel

• Template parameters:– Object type stored in channel– ‘Getter’ class

• ‘Getter’ class fetches the data from the worker code:– bool gotData() returns true if

there is more data to get– <Object> &nextObject()

returns the next object– void newEvent() notifies class

of a new event

• Some standard ‘Getters’ provided

Page 14: Level 2 Trigger Software Interface

9/12/99 R. Moore 14

Event I/O

• Classes to access data created by evigen python script– <worker>EventInput– <worker>EventOutput

• Configuration file similar to Windows .ini files

• Full documentation being worked on…

Page 15: Level 2 Trigger Software Interface

9/12/99 R. Moore 15

Example.evi

[Worker]package = l2gblworkername = Globalsystem = GBL_L2stdout = GBL_STD_OUTPUTubsout = GBL_UBS_OUTPUTubsin = GBL_UBS_INPUTS

[Input0]name = pTTrackobject = CTTPTTracktype = unpackedlimit = 50system = CTT_L2module = CTT_STD_OUTPUTchannel = GBL_PTTRACKcomment = pT tracks from CTT

Page 16: Level 2 Trigger Software Interface

9/12/99 R. Moore 16

Example.evi II

[StdOutput0]object = Electrongetter = l2workerbase/FetchTagchannel = GBLOUT_ELECTRONmajorver = 0minorver = 1

[StdOutput4]object = Taugetter = l2workerbase/FetchTagchannel = GBLOUT_TAUmajorver = 0minorver = 1

[UbsOutput0]object = Electrongetter = l2workerbase/FetchAllchannel = GBLOUT_ELECTRONmajorver = 0minorver = 1

Page 17: Level 2 Trigger Software Interface

9/12/99 R. Moore 17

Accessing the Data

• To access the input data inherit the EventInput class

class ATool : public GlobalEventInput {…void findElectron(void);…};

void ATool::findElectron(void) {if (pTTrack.bunch() != emCluster.bunch()) errlog << “Calling SCL init!”…… dphi=pTTrack[i].phi()-

emCluster[j].phi();…}

Page 18: Level 2 Trigger Software Interface

9/12/99 R. Moore 18

Writing the Data

• To use provided “Getter” classes output objects inherit from a “Creator”

• This provides a static method “create()” which returns a pointer to a new class instance– you cannot use ‘new’ !

class Electron : public Creator<Electron> {…};

Electron *myelectron = Electron::create();

Page 19: Level 2 Trigger Software Interface

9/12/99 R. Moore 19

Current Status

• Basic software packages written and docs in progress– Basic interface stable, only

minor changes or additions– Ready for L2PP’s to start

using framework– BUT still a little rough:

• Need to liase with Dylan/me• Not everything will work “out

of the box” just yet

– Toy “GlobalWorker” written by Dylan• Can test single Global tools

Page 20: Level 2 Trigger Software Interface

9/12/99 R. Moore 20

Still to do…

• Add interface to L2 low level parser– L2parser package written

and documented– Can’t use RCP: online code

• Add hook for monitoring data: collectStatus()

• Add support for ‘non-standard’ data formats:– e.g. CTT has private header– if L2 input not stored in L3

raw data need to write a package to recreate it

– BUT some L1 packages will use L2 UDC standard (L1Cal)

Page 21: Level 2 Trigger Software Interface

9/12/99 R. Moore 21

Yet more to do…

• Make a L2 release– Currently all packages in CVS

but not in a release

• Understand the build system (CTBuild/SRT/…)– Need to set compiler options

• e.g. “-DOFFLINE”, “-DDEBUG”

– CTBuild docs promised…

Page 22: Level 2 Trigger Software Interface

9/12/99 R. Moore 22

Conclusion

• The basic L2 framework is complete and ready for use– should remove a lot of the pain

we have had to endure!

• Switching to online is easy… once we have the hardware– Code written 6+ months ago– Needs interfacing with low level

device drivers

• “Bells and whistles” will be added over the next several months as interfaces are agreed upon– monitoring– configuration

Page 23: Level 2 Trigger Software Interface

9/12/99 R. Moore 23

Data I/O

• All L2 I/O done using I/Ogen classes:– Python script which

generates code to convert between packed memory and C++ class

– handles multiple format versions in offline

– centralizes object formats to ensure compatibility

– interfaces easily to the (new) Unpacked Data Chunks

– creates routines to print data classes in human-readable form

Page 24: Level 2 Trigger Software Interface

9/12/99 R. Moore 24

I/Ogen in l2io

ConfigurationFile [l2io.iogen]

Python Script

IO Classes Data Classes