1 / 24

Level 2 Trigger Software Interface

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

xia
Download Presentation

Level 2 Trigger Software Interface

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Level 2 Trigger Software Interface R. Moore, Michigan State University R. Moore

  2. L2 Crate Administrator Worker Worker Worker Trigger Control Computer Data Input Data Output External Communications Internal Communications R. Moore

  3. Software Components Worker Global Worker Pre-Proc Worker Global Tool L2 Software Framework Administrator MBus Worker Level User code Physics! Tool Level User code R. Moore

  4. L2 Simulator Online Code Offline Package Worker Code Event Interface Event Interface Online Packed Data I/Ogen (testing only) Unpack Data Chunk Raw Chunk I/Ogen Offline dynamic_cast<> 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 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 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 … R. Moore

  8. Writing the Worker Class • Worker class is ONLINE code • ALLL2 workers need one • Required methods: • void processEvent(void) • Plus others to be added later for monitoring, initialization etc. • MUSTobey L2 online coding guidelines: no STL! • processEvent(void) • processes the current event • Event I/O handled by offline or online framework 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: $") • e.g. Regtsim_l2gbl.cpp #include "framework/Registry.hpp" #include "l2workersim/FrameworkMacros.hpp" L2FWK_REGISTRY_DECL(Global) R. Moore

  10. Input Format L2Header Object Object Object L2Trailer = 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 R. Moore

  11. Output Format L2Header L2Header Object Object Object Object Object Object L2Trailer L2Trailer Raw Data Unpacked Data Chunk L3Header Channel Node Header Channel Channel Module Channel L3Trailer Channel R. Moore

  12. High Level Format Raw Data Unpacked Data Chunk • Each worker and administrator has three possible output modules • Normal L2 output • Copy of inputs (UBS events) • Special UBS event data output Crate = System L3 Output UBS Inputs = Module UBS Output 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 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… R. Moore

  15. Example.evi [Worker] package = l2gblworker name = Global system = GBL_L2 stdout = GBL_STD_OUTPUT ubsout = GBL_UBS_OUTPUT ubsin = GBL_UBS_INPUTS [Input0] name = pTTrack object = CTTPTTrack type = unpacked limit = 50 system = CTT_L2 module = CTT_STD_OUTPUT channel = GBL_PTTRACK comment = pT tracks from CTT R. Moore

  16. Example.evi II [StdOutput0] object = Electron getter = l2workerbase/FetchTag channel = GBLOUT_ELECTRON majorver = 0 minorver = 1 [StdOutput4] object = Tau getter = l2workerbase/FetchTag channel = GBLOUT_TAU majorver = 0 minorver = 1 [UbsOutput0] object = Electron getter = l2workerbase/FetchAll channel = GBLOUT_ELECTRON majorver = 0 minorver = 1 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(); … } R. Moore

  18. Writing the Data • To use provided “Getter” classes output objects inherit from a “Creator” class Electron : public Creator<Electron> { … }; • This provides a static method “create()” which returns a pointer to a new class instance • you cannot use ‘new’ ! Electron *myelectron = Electron::create(); 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 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) 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… 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 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 R. Moore

  24. I/Ogen in l2io Configuration File [l2io.iogen] Python Script IO Classes DataClasses R. Moore

More Related