Gaudi Framework Tutorial, April 2006 7 Algorithm Tools: what they are, how to write them, how to use them.

Slides:



Advertisements
Similar presentations
Object-Oriented Application Development Using VB.NET 1 Chapter 8 Understanding Inheritance and Interfaces.
Advertisements

Gaudi Framework Tutorial, April Accessing Event Data.
Road Map Introduction to object oriented programming. Classes
Iterators T.J. Niglio Computer & Systems Engineering Fall 2003 Software Design & Documentation Object Behavioral.
June 1, 2000 Object Oriented Programming in Java (95-707) Java Language Basics 1 Lecture 3 Object Oriented Programming in Java Language Basics Classes,
Terms and Rules Professor Evan Korth New York University (All rights reserved)
Factory Design Pattern, cont’d COMP 401 Fall 2014 Lecture 13 10/2/2014.
Creational Patterns Making Objects The Smart Way Brent Ramerth Abstract Factory, Builder.
1 Using Classes Object-Oriented Programming Using C++ Second Edition 5.
Programming Languages and Paradigms Object-Oriented Programming.
Chapter 6 Class Inheritance F Superclasses and Subclasses F Keywords: super F Overriding methods F The Object Class F Modifiers: protected, final and abstract.
Recap (önemli noktaları yinelemek) from last week Paradigm Kay’s Description Intro to Objects Messages / Interconnections Information Hiding Classes Inheritance.
Programming in Java Unit 2. Class and variable declaration A class is best thought of as a template from which objects are created. You can create many.
CSCI-383 Object-Oriented Programming & Design Lecture 13.
CERN Tutorial, September Job Options and Printing.
Job Options and Printing 1 LHCb software tutorial - September 2011.
Chapter 2 Introducing Interfaces Summary prepared by Kirk Scott.
Tuc Goodwin  Object and Component-Oriented Programming  Classes in C#  Scope and Accessibility  Methods and Properties  Nested.
Introduction to Gaudi LHCb software tutorial - September
9 Associators How to relate objects to each other Create relations Save relations Use relations: Associators.
Particle to MC truth association Juan Palacios (Nikhef) LHCb software week June
Use of Gaudi in Reconstruction Weidong Li 23/06/2004.
CSCI-383 Object-Oriented Programming & Design Lecture 18.
Gaudi Framework Tutorial, April Job Options and Printing.
Chapter 10 Defining Classes. The Internal Structure of Classes and Objects Object – collection of data and operations, in which the data can be accessed.
Reconstruction Configuration with Python Chris Jones University of Cambridge.
Microsoft Visual Basic 2008 CHAPTER ELEVEN Multiple Classes and Inheritance.
CSCI 1100/1202 April 1-3, Program Development The creation of software involves four basic activities: –establishing the requirements –creating.
Behavioral Patterns CSE301 University of Sunderland Harry R Erwin, PhD.
Fall 2015CISC/CMPE320 - Prof. McLeod1 CISC/CMPE320 Today: –Review declaration, implementation, simple class structure. –Add an exception class and show.
Interfaces F What is an Interface? F Creating an Interface F Implementing an Interface F What is Marker Interface?
Bologna Tutorial, April Job Options and Printing.
April 6, 2000 LHCb Event Data Model Pavel Binko, Gloria Corti LHCb / CERN 1 LHCb Software week LHCb Event Data Model Pavel Binko Gloria Corti LHCb / CERN.
Tutorial: Examples (09may00 - ATLAS Software LBNL) May 2000 Prototype Framework Tutorial: Examples Paolo Calafiura, Charles Leggett HCG/NERSC/LBNL.
Access Specifier. Anything declared public can be accessed from anywhere. Anything declared private cannot be seen outside of its class. When a member.
Gaudi Framework Tutorial, April Creating Objects and Writing Data.
DaVinciAssociators How to relate physics objects to MC truth.
1 C# - Inheritance and Polymorphism. 2 1.Inheritance 2.Implementing Inheritance in C# 3.Constructor calls in Inheritance 4.Protected Access Modifier 5.The.
Design Patterns. Outline Purpose Purpose Useful Definitions Useful Definitions Pattern Overview Pattern Overview.
Terms and Rules II Professor Evan Korth New York University (All rights reserved)
Athena Tutorial: Liquid Argon Example ATHENA The ATLAS Control Framework Tutorial: Liquid Argon Example Based on original by S. Rajagopalan BNL.
Marco Cattaneo, 6-Apr Issues identified in sub-detector OO software reviews Calorimeters:18th February Tracking:24th March Rich:31st March.
Proposal for extension of GaudiAlgorithm and GaudiTool classes Vanya Belyaev CERN & ITEP/Moscow.
Gaudi Framework Tutorial, Algorithm Tools: what they are and how to use them.
Gaudi Framework Tutorial, April Histograms And N-tuples.
9 Associators How to relate objects to each other Create relations Save relations Use relations: Associators.
Gaudi Framework Tutorial, April Histograms And N-tuples.
Copyright © Jim Fawcett Spring 2017
“Algorithm Tools” what they are, how to get them and how to use them
Writing Physics Tools Schedule: Timing Topic 20 minutes Lecture
Object-Oriented Programming & Design Lecture 14 Martin van Bommel
Out-of-Process Components
LHCb Software Tutorial
Abstract Classes and Inheritence Operator over-loading
CMPE212 – Stuff… Assn 3 due and Quiz 2 in the lab next week.
Java Programming Language
Advanced Java Programming
Ms Munawar Khatoon IV Year I Sem Computer Science Engineering
CISC124 Assignment 4 on Inheritance due next Friday.
CISC/CMPE320 - Prof. McLeod
CISC124 Assignment 3 sample solution will be posted tonight after 7pm.
Fundaments of Game Design
2 Getting Started.
Out-of-Process Components
2 Getting Started.
Review of Previous Lesson
2 Getting Started.
Winter 2019 CMPE212 5/25/2019 CMPE212 – Reminders
CMPE212 – Reminders Assignment 2 due next Friday.
Accessing Event Data Schedule: Timing Topic 20 minutes Lecture
Presentation transcript:

Gaudi Framework Tutorial, April Algorithm Tools: what they are, how to write them, how to use them

7-2 Gaudi Framework Tutorial, April 2006 Objectives After completing this lesson you should be able to: Understand the difference between tools and algorithms Retrieve and use tools in an algorithm Understand tools interfaces Define and implement a tool After completing this lesson you should be able to: Understand the difference between tools and algorithms Retrieve and use tools in an algorithm Understand tools interfaces Define and implement a tool

7-3 Gaudi Framework Tutorial, April 2006 Why Algorithm Tools? Sometimes in an Algorithm it is necessary to execute the same operation more than once per event, only for some events, on specific non identifiable data objects, producing new objects that will be put in the Event Store later. Or the same operation might need to be performed by several different algorithms.  Needed to introduce a new concept Sometimes in an Algorithm it is necessary to execute the same operation more than once per event, only for some events, on specific non identifiable data objects, producing new objects that will be put in the Event Store later. Or the same operation might need to be performed by several different algorithms.  Needed to introduce a new concept

7-4 Gaudi Framework Tutorial, April 2006 Algorithm Tools The concept of Algorithms Tools, being a sort of simple algorithms callable many times and with arguments, was introduced in Gaudi Examples – Vertexing – Track transport – Association to truth – Filtering of particles based on a pID CL The concept of Algorithms Tools, being a sort of simple algorithms callable many times and with arguments, was introduced in Gaudi Examples – Vertexing – Track transport – Association to truth – Filtering of particles based on a pID CL

7-5 Gaudi Framework Tutorial, April 2006 ToolSvc The ToolSvc is the service that manages Algorithm Tools (private or shared) Algorithms ask the ToolSvc for a given Tool by type/name, they can then keep a pointer to the tool and use it when necessary Manages the life-cycle of Tools creating them on a first request basis Keeps track of existing Tools, holding all instances and dispatching them as requested Tools can be configured using the JobOptions, like Algorithms or Services The ToolSvc is the service that manages Algorithm Tools (private or shared) Algorithms ask the ToolSvc for a given Tool by type/name, they can then keep a pointer to the tool and use it when necessary Manages the life-cycle of Tools creating them on a first request basis Keeps track of existing Tools, holding all instances and dispatching them as requested Tools can be configured using the JobOptions, like Algorithms or Services

7-6 Gaudi Framework Tutorial, April 2006 Accessing Tools from GaudiAlgorithm In MyAlgorithm.h: private: IMCAcceptanceTool* m_accTool; ///< Tool interface IMCAcceptanceTool* m_accTool; ///< Tool interface In MyAlgorithm::initialize() // Get the tool from the toolSvc // Get the tool from the toolSvc m_accTool = tool ( "MCAcceptanceTool/MyTool" ); m_accTool = tool ( "MCAcceptanceTool/MyTool" ); In MyAlgorithm::execute() // Do something with it if( m_accTool->accepted( *itP )) { ++numAccepted; } In MyAlgorithm.h: private: IMCAcceptanceTool* m_accTool; ///< Tool interface IMCAcceptanceTool* m_accTool; ///< Tool interface In MyAlgorithm::initialize() // Get the tool from the toolSvc // Get the tool from the toolSvc m_accTool = tool ( "MCAcceptanceTool/MyTool" ); m_accTool = tool ( "MCAcceptanceTool/MyTool" ); In MyAlgorithm::execute() // Do something with it if( m_accTool->accepted( *itP )) { ++numAccepted; }

7-7 Gaudi Framework Tutorial, April 2006 ParentName.ToolName Configuring a tool A concrete tool can be configured using the jobOptions Follow usual convention: IdentifyingNameOfTool.NameOfProperty A concrete tool can be configured using the jobOptions Follow usual convention: IdentifyingNameOfTool.NameOfProperty Through the base class all tools have the OutputLevel property The default value is that of the parent Through the base class all tools have the OutputLevel property The default value is that of the parent ToolSvc.MyTool.MinPz = 0.1*GeV;

7-8 Gaudi Framework Tutorial, April 2006 Algorithm Tools Types Different tools can implement the same functionality Since the algorithms interacts with them only through the interface they are interchangeable The choice can be done via the job options at run time This offers a way to evolve and improve Tools Different tools can implement the same functionality Since the algorithms interacts with them only through the interface they are interchangeable The choice can be done via the job options at run time This offers a way to evolve and improve Tools

7-9 Gaudi Framework Tutorial, April 2006 Tools Specific Interfaces A tool must have an additional interface to define its functionality – which must inherit from the IAlgTool interface, so that the tool can be managed by ToolSvc –Remember: The implementation of the IAlgTool interface is done by the AlgTool base class, you don’t need to worry about it – Tools performing a similar operation in different ways will share the same interface (ex. Vertexer) A tool must have an additional interface to define its functionality – which must inherit from the IAlgTool interface, so that the tool can be managed by ToolSvc –Remember: The implementation of the IAlgTool interface is done by the AlgTool base class, you don’t need to worry about it – Tools performing a similar operation in different ways will share the same interface (ex. Vertexer)

7-10 Gaudi Framework Tutorial, April 2006 Tools Interfaces YourTool IAlgTool IYourTool IAlgTool name(), type(), parent() IYourTool Interface for your tool

7-11 Gaudi Framework Tutorial, April 2006 GaudiTool base class All tools should inherit from GaudiTool Similar functionality to GaudiAlgorithm Hides details of – MsgStream – Event Data Service access – etc. All tools should inherit from GaudiTool Similar functionality to GaudiAlgorithm Hides details of – MsgStream – Event Data Service access – etc.

7-12 Gaudi Framework Tutorial, April 2006 How to write concrete tools When encapsulating some reoccurring functionality in a tool you need to: Identify the tool functionality and define its special interface: ITool.h –Unless the interface already exists Inherit from the GaudiTool base class in MyTool.h Implement the tool specific functionality in MyTool.cpp When encapsulating some reoccurring functionality in a tool you need to: Identify the tool functionality and define its special interface: ITool.h –Unless the interface already exists Inherit from the GaudiTool base class in MyTool.h Implement the tool specific functionality in MyTool.cpp

7-13 Gaudi Framework Tutorial, April 2006 Tools interfaces in practice See Kernel/IMCAcceptanceTool.h in Tutorial/TutKernel package class IMCAcceptanceTool : virtual public IAlgTool { public:} public:} #include “GaudiKernel/IAlgTool.h” static const InterfaceID IID_IMCAcceptanceTool(“IMCAcceptanceTool”, 1, 0) static const InterfaceID IID_IMCAcceptanceTool(“IMCAcceptanceTool”, 1, 0) Necessary for Inheritance Unique interface ID /// Retrieve interface ID /// Retrieve interface ID static const InterfaceID& interfaceID() { static const InterfaceID& interfaceID() { return IID_IMCAcceptanceTool; return IID_IMCAcceptanceTool; } /// Retrieve interface ID /// Retrieve interface ID static const InterfaceID& interfaceID() { static const InterfaceID& interfaceID() { return IID_IMCAcceptanceTool; return IID_IMCAcceptanceTool; } /// + specific signature virtual bool accepted(const LHCb::MCParticle* mother) = 0; /// + specific signature virtual bool accepted(const LHCb::MCParticle* mother) = 0; Pure virtual method(s)

7-14 Gaudi Framework Tutorial, April 2006 A concrete tool will inherit from the GaudiTool base class: – has properties – debug(), info(), warning() etc. – get() – tool(), svc() – possible initialize(), finalize() A concrete tool will inherit from the GaudiTool base class: – has properties – debug(), info(), warning() etc. – get() – tool(), svc() – possible initialize(), finalize() Called after creation by ToolSvc GaudiTool inheritance Configurable via job options access to event data Configured at creation access to other tools, services

7-15 Gaudi Framework Tutorial, April 2006 GaudiTools life-cycle GaudiTools are created by a factory DECLARE_TOOL_FACTORY( MCAcceptanceTool ); This must be instantiated in the implementation file As for Algorithms but TOOL_FACTORY Done for you by emacs This must be instantiated in the implementation file As for Algorithms but TOOL_FACTORY Done for you by emacs

7-16 Gaudi Framework Tutorial, April 2006 How to write concrete tools: implementation file Declare in constructor specific properties Get services necessary for implementation in constructor or initialize method –Very similarly to Algorithms Implement necessary functionality –Additional methods specific to the tool Declare in constructor specific properties Get services necessary for implementation in constructor or initialize method –Very similarly to Algorithms Implement necessary functionality –Additional methods specific to the tool

7-17 Gaudi Framework Tutorial, April 2006 A note about packaging Tools, like Algorithms, are components –They should reside in a component library Header files of Tool interfaces are public –They should reside in a public include directory Component packages should not export an include directory –include_path none –Put the interface in a separate Kernel package e.g. TutKernel/vxry/Kernel –Component library will depend on Kernel package If interface changes, Components must be recompiled THINK TWICE before changing an interface! Tools, like Algorithms, are components –They should reside in a component library Header files of Tool interfaces are public –They should reside in a public include directory Component packages should not export an include directory –include_path none –Put the interface in a separate Kernel package e.g. TutKernel/vxry/Kernel –Component library will depend on Kernel package If interface changes, Components must be recompiled THINK TWICE before changing an interface!

7-18 Gaudi Framework Tutorial, April 2006 Hands on: MCAcceptanceTool Write a simple Monte Carlo tool that: checks if a MCParticle satisfies a list of criteria and returns true/false –Define the cuts as properties of the Tool implements simple cuts: –Minimum Pz cut –Is produced close to IP (zOrigin < value) –Does not decay before end of the magnet (zDecay> value) –Use what you learned about MCParticle & MCVertex Write a simple Monte Carlo tool that: checks if a MCParticle satisfies a list of criteria and returns true/false –Define the cuts as properties of the Tool implements simple cuts: –Minimum Pz cut –Is produced close to IP (zOrigin < value) –Does not decay before end of the magnet (zDecay> value) –Use what you learned about MCParticle & MCVertex When you start from scratch emacs will provide you with a skeleton

7-19 Gaudi Framework Tutorial, April 2006 Hands on: MCAcceptanceTool Modify VisibleEnergyAlgorithm to use the new tool plot the primary vertex multiplicity of MCParticles in the acceptance –Retrieve and use the tool as shown in slide 7-6 If you have time afterward (homework?) extend the tool –Check if the MCParticle has reached the last Tracking stations (has hits in at least n layers of the Inner Tracker or Outer Tracker after a certain z position) Modify VisibleEnergyAlgorithm to use the new tool plot the primary vertex multiplicity of MCParticles in the acceptance –Retrieve and use the tool as shown in slide 7-6 If you have time afterward (homework?) extend the tool –Check if the MCParticle has reached the last Tracking stations (has hits in at least n layers of the Inner Tracker or Outer Tracker after a certain z position)

7-20 Gaudi Framework Tutorial, April 2006 Hands on: MCAcceptanceTool.h Inherit from IMCAcceptanceTool Declare the interface method(s) Inherit from IMCAcceptanceTool Declare the interface method(s) class MCAcceptanceTool : public GaudiTool, virtual public IMCAcceptanceTool { virtual public IMCAcceptanceTool { virtual bool accepted( const LHCb::MCParticle* mother ); class MCAcceptanceTool : public GaudiTool, virtual public IMCAcceptanceTool { virtual public IMCAcceptanceTool { virtual bool accepted( const LHCb::MCParticle* mother );

7-21 Gaudi Framework Tutorial, April 2006 Hands on: MCAcceptanceTool.cpp constructor Declare specific Interface(s) Implement the interface method Declare specific Interface(s) Implement the interface method declareInterface (this); bool MCAcceptanceTool::accepted( const LHCb::MCParticle* mcpart ) { /// Momentum cut (Pz) /// Momentum cut (Pz) if ( mcpart->momentum().z() momentum().z() < m_minPz ) { return false; return false; } else { } else { return true; }} bool MCAcceptanceTool::accepted( const LHCb::MCParticle* mcpart ) { /// Momentum cut (Pz) /// Momentum cut (Pz) if ( mcpart->momentum().z() momentum().z() < m_minPz ) { return false; return false; } else { } else { return true; }}

7-22 Gaudi Framework Tutorial, April 2006 Solution In src.data directory of Tutorial/Components package To try this solution: In src.data directory of Tutorial/Components package To try this solution: cd ~/cmtuser/Tutorial/Component/v7r0/src Move your modified files if you want to keep them cp../src.usetool/*.*. cd../cmt gmake $MAINROOT/$CMTCONFIG/Main.exe $MAINROOT/options/jobOptions.opts