200 likes | 321 Vues
This document outlines the need for persistent analysis objects in the context of muon reconstruction for the COBRA experiment, presented by Norbert Neumeister. Key topics include the definition and hierarchy of analysis objects, the challenges faced in dependencies and configurations, and requirements for efficient storage and retrieval of reconstructed objects. The utilization of COmmon Basis for Reconstructive Analysis (COBRA) interfaces, ROOT trees, and the importance of user-defined persistency are explored, aiming to enhance data management and analysis in high-energy physics experiments.
E N D
Persistent Analysis ObjectsMuon Persistency Norbert Neumeister µ-PRS meeting February 10, 2004
Outline • What are analysis objects • Why persistent analysis objects • COBRA interfaces • Muon Persistency • Impact on Muon/MuonReco software Norbert Neumeister
Introduction • Analysis Objects (reconstructed objects): • clusters, RecHits, track segments, etc. • tracks, vertices, muons, electrons, jets, etc. • Persistent analysis objects • store the result of event reconstruction DST/ESD • need a first prototype for DC04 • Persistency • Use COBRA/POOL • Use RootTrees (rootcint) • User defined persistency (e.g. ntuple like RootTree) Norbert Neumeister
RecObject Persistency Requirements: • Ability to make the data part of the object persistent • Ability to store relations between RecObjects • Ability to query for the stored objects, and trigger reconstruction if the stored objects do not correspond to the query Norbert Neumeister
Analysis Objects • Reconstructed objects are hierarchical: • High-level objects are constructed from lower level objects • Examples: Jets are constructed from Tracks, Vertices are constructed from Tracks, etc. • At the lowest level all objects are constructed from raw data (Digis) • A single reconstruction algorithm (aka RecUnit) may use several instances of lower level algorithms simultaneously • Reconstructed tracks from various algorithms (Kalman Filter, DAF, GSF) may be combined in a high level object. Norbert Neumeister
Problems • Collection of RecObjects is identified by a string • RecUnits (reconstruction algorithms) are just identified by a string (e.g. GlobalMuonReconstructor) • Dependencies on other RecObjects are not taken care of • The hierarchy of RecUnits is not handled. • A RecObject provided by a RecUnit may depend on • other RecUnits (in general a tree of components) • their associated parameters • the versions of the algorithms used It is necessary to get the configuration used to create the objects together with the object collection! Therefore a collection of reconstructed objects is not just identified by a string! Norbert Neumeister
Requirements (I) • A collection of reconstructed objects is defined by: • Type of reconstructed object • Name of algorithm • similar to the current string • identifies the algorithm builder • Version of algorithm • the developer must set the version of an algorithm • avoid new version when only documentation is changed • ParameterSet(parameters of all algorithms but not of all components) • ComponentSet(dependency on other RecUnits) • Calibration • Save full dependency and check state of underlying objects • i.e. collection of jets depends on tracks and CaloClusters, tracks depend on tracker digis, etc. • Guarantee same results for same configuration Norbert Neumeister
Requirements (II) • The user can access a collection of reconstructed objects by specifying the RecObject type and a RecQuery (see later) • Provide only one documented user interface to retrieve reconstructed objects: RecCollection • No pointer to G3EventProxy should be necessary • default is current event • new RecCollection interface Norbert Neumeister
Configuration • The full configuration is defined by: • Name • Version • ParameterSet • ComponentSet • CalibrationSet • RecConfig defines the full configuration of a RecUnit • Defines “equal” operator • The operator returns true only if all parts compare equal • Every reconstruction algorithm needs a default configuration! • RecQuery • defines a subset of the full configuration • can obtain the full configuration from a registered RecUnit Norbert Neumeister
RecConfig Settings Order of initialization: 1) defaultConfig of the algorithm • That’s the only place where parameter names and types are defined 2) .orcarc: Every parameter is configurable with the following syntax • AlgorithmName:ParameterName = value • overwrites 1) 3) The current RecQuery overwrites 2) For components same sequence as for parameters in a recursive way: AlgorithmName:ComponentName:ParameterName = value Norbert Neumeister
ParameterSet (I) • A class that contains the complete set of RecUnit parameters exposed as configurable by the author • If a RecUnit is implemented by several algorithmic classes, like a TrackReconstructor which uses SeedGenerator, TrajectoryBuilder, etc. then all parameters of all such classes are grouped in a single parameter set • The Parameters of lower level algorithms are not part of the parameter set of a high-level algorithm Norbert Neumeister
ParameterSet (II) • Parameters are organized as pair of string and value (name, value) • The name is in the scope of the ParameterSet and can be reused in other ParameterSets • The only way to instantiate a non-empty ParameterSet is by using a ParameterSetBuilder (prevent from changing an existing ParameterSet) • The following types are supported: int, bool, double, string • For double the equal operator allows tolerances • If nothing set explicitly all parameters are default values • Usage: ParameterSetBuilder builder; // add integer builder.addParameter(“numberOfTracks”,10); // add double with tolerance builder addParameter(“deltaRCut”,0.6,0.002) ParameterSet ps = builder.result(); int nTracks = ps.value<int>(“numberOfTracks”); Norbert Neumeister
ComponetSet A B C D E F G • If a RecUnit uses the result of other RecUnits, like a Vertex algorithm uses reconstructed tracks, it should fully specify the configuration of the lower level RecUnits via RecConfigs. • A ComponentSet is a set of pairs (name, RecQuery) • The name is in the scope of the concrete component • The ComponentSet is a set of all RecQuery objects • use a recursive query! RecUnits: A, B, C, D, E, F, G B, C, D, E, F, G are components of A In addition RecUnit A can use a list of algorithms (TrajectoryBuilder, TrajectoryCleaner, TrajectorySmoother). Norbert Neumeister
RecCollection Retrieving (persistent) objects: MyRecObj inherits from RecObject RecCollection<MyRecObj> myobjects(RecQuery("Name_of_algorithm“)); cout << myobjects.query() << endl; RecCollection<MyRecObj>::const_iterator it; Recommendation: Use RecCollection instead of AutoRecCollection or RecItr in ORCA. Don’t use RecItr, AutoRecCollection anymore. Norbert Neumeister
Usage RecQuery q(“JetFinder”); q.setParameter("ConeSize", 0.77); RecQuery myTF(“TrackFinder”); q.setComponent("TrackReconstructor",myTF); ... RecCollection<Jet> myjets(q); cout << myjets.size() << endl; cout << myjets.query() << endl; Norbert Neumeister
Muon Object Track RecObj BasicRecTrack value semantics proxy TTrack RecTrack ConcreteRecTrack PRecTrack RecMuon IsolatedRecMuon Norbert Neumeister
Persistent Muon • Persistent Track data: • First and last Trajectory State • Track quality criteria • Chi^2 (smoothed) • Number of degrees of freedom • Number of hits used in the fit • Number of “lost” hits • Persistent RecMuon data: • innermost and outermost Trajectory State • Vertex extrapolated State (MuonUpdatorAtVertex: stateAtIP, stateAtVertex) • Track quality • TrajectoryState persistency as for Tracker • TRecRef<TTrack> muonTrack • TRecRef<TTrack> trackerTrack • Foresee a reference to “Seed” for L2 and L3 reconstruction Norbert Neumeister
Muon Reconstruction • For the time being we have four different muon reconstruction algorithms implemented: • StandAloneMuonReconstructor • GlobalMuonReconstructor • L2MuonReconstructor • L3MuonReconstructor • Convert all four algorithms into RecAlgorithm<RecMuon> • must inherit from RecAlgorithm<T> • The result of the reconstruction (e.g. RecMuon) must inherit from RecObj • Each algorithm must have a registered Builder • inherit from RecBuilder<AlgorithmName> • In first iteration no RecAlgorithm components • SeedGenerator is a first candidate for a configurable component Norbert Neumeister
Muon Isolation • We have a variety of isolation algorithms • calo, pixel, tracker; combined; on HLT or offline; • based on simple deposit, probability, nominal efficiency… • The result of any algorithm can be summarized in a single float variable • User cuts on: can choose efficiency vs. rejection • The variable can have whatever meaning • The user must know the meaning • Nominal efficiency, e.g. cut > 0.97 ⇒ ε = 97% on signal • Simple deposit in GeV (the most requested in the past: if not provided • Bottom line: 1 algo ↔ 1 float • RecMuon has no isolation information stored • Create additional RecObj: IsolatedRecMuon • Has a reference to a RecMuon and one float. • Result of 2 isolation algorithms are in 2 different RecCollection<IsolatedRecMuon> Norbert Neumeister
Summary • Status • First implementation in COBRA_7_6_0_pre1 and ORCA_7_7_0_pre1 • Works on a toy example • Persistent Tracker Tracks in CORCA_7_7_pre3 • Should be used by all high-level subsystems • For all analysis objects: Tracks, Muons, Electrons, Jets, etc. • Muon software: • Hope to have a first version by the end of the week • Start with a RecMuon class prototype • Test with standalone muon reconstruction Norbert Neumeister