level 2 trigger software interface

Post on 14-Jan-2016

36 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

9/12/99 R. Moore 1

Level 2 Trigger Software Interface

R. Moore,Michigan State

University

9/12/99 R. Moore 2

L2 Crate

Administrator

Worker WorkerWorker

Data Input Data Output

Trigger Control Computer

ExternalCommunications

InternalCommunications

9/12/99 R. Moore 3

Software Components

AdministratorMBus

Worker LevelUser code

Tool LevelUser code

L2 Software Framework

Worker

Physics!

Pre-ProcWorker

GlobalTool

GlobalWorker

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

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

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

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 …

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

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

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

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

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

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

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…

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

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

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();…}

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();

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

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)

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…

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

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

9/12/99 R. Moore 24

I/Ogen in l2io

ConfigurationFile [l2io.iogen]

Python Script

IO Classes Data Classes

top related