Skip to content
Snippets Groups Projects
Commit 817171e6 authored by Christopher Rob Jones's avatar Christopher Rob Jones
Browse files

TrackCheckerBase: Modernise, make tool instances private to allow for correct...

TrackCheckerBase: Modernise, make tool instances private to allow for correct configuration of data dependencies.
parent 12df9fe6
No related branches found
No related tags found
2 merge requests!3788Draft: Update SciFi cluster monitoring,!3642Performance Updates to RICH Reconstruction
Pipeline #6734841 passed
......@@ -16,14 +16,11 @@
// Initialization. Check parameters
//=============================================================================
StatusCode TrackCheckerBase::initialize() {
static const std::string histoDir = "Track/";
if ( "" == histoTopDir() ) setHistoTopDir( histoDir );
if ( "" == histoTopDir() ) { setHistoTopDir( "Track/" ); }
// Mandatory initialization of GaudiAlgorithm
return GaudiHistoAlg::initialize().andThen( [&] {
const TrackMaps::RecMap& theMap = TrackMaps::recDescription();
m_recCat = theMap.find( m_selectionCriteria )->second;
const auto& theMap = TrackMaps::recDescription();
m_recCat = theMap.find( m_selectionCriteria )->second;
} );
}
......@@ -45,8 +42,8 @@ const LHCb::MCParticle* TrackCheckerBase::mcTruth( const LHCb::Track& track, con
bool TrackCheckerBase::bAncestorWithReconstructibleDaughters( const LHCb::MCParticle* mcPart ) const {
// loop back and see if there is a B in the history
bool fromB = false;
const LHCb::MCParticle* mother = mcPart->mother();
bool fromB = false;
const auto* mother = mcPart->mother();
while ( mother && !fromB ) {
fromB = mother->particleID().hasBottom() && ( mother->particleID().isMeson() || mother->particleID().isBaryon() );
if ( fromB && !allDaughtersReconstructible( mother ) ) return false;
......@@ -57,8 +54,8 @@ bool TrackCheckerBase::bAncestorWithReconstructibleDaughters( const LHCb::MCPart
bool TrackCheckerBase::bAncestor( const LHCb::MCParticle* mcPart ) const {
// loop back and see if there is a B in the history
bool fromB = false;
const LHCb::MCParticle* mother = mcPart->mother();
bool fromB = false;
const auto* mother = mcPart->mother();
while ( mother && !fromB ) {
fromB = mother->particleID().hasBottom() && ( mother->particleID().isMeson() || mother->particleID().isBaryon() );
mother = mother->mother();
......@@ -68,22 +65,20 @@ bool TrackCheckerBase::bAncestor( const LHCb::MCParticle* mcPart ) const {
bool TrackCheckerBase::ksLambdaAncestor( const LHCb::MCParticle* mcPart ) const {
// loop back and see if there is a B in the history
bool fromKsL = false;
const LHCb::MCParticle* mother = mcPart->mother();
bool fromKsL = false;
const auto* mother = mcPart->mother();
while ( mother && !fromKsL ) {
if ( abs( mother->particleID().pid() ) == 310 || abs( mother->particleID().pid() ) == 3122 ) fromKsL = true;
if ( abs( mother->particleID().pid() ) == 310 || abs( mother->particleID().pid() ) == 3122 ) { fromKsL = true; }
mother = mother->mother();
} // loop
return fromKsL;
}
bool TrackCheckerBase::allDaughtersReconstructible( const LHCb::MCParticle* mcPart ) const {
const SmartRefVector<LHCb::MCVertex>& vtx = mcPart->endVertices();
for ( SmartRefVector<LHCb::MCVertex>::const_iterator i = vtx.begin(); i != vtx.end(); ++i ) {
const SmartRefVector<LHCb::MCParticle>& ch = ( *i )->products();
for ( SmartRefVector<LHCb::MCParticle>::const_iterator j = ch.begin(); j != ch.end(); ++j ) {
const auto& vtx = mcPart->endVertices();
for ( auto i = vtx.begin(); i != vtx.end(); ++i ) {
const auto& ch = ( *i )->products();
for ( auto j = ch.begin(); j != ch.end(); ++j ) {
if ( ( abs( ( *j )->particleID().pid() ) == 321 || abs( ( *j )->particleID().pid() ) == 211 ||
abs( ( *j )->particleID().pid() ) == 13 || abs( ( *j )->particleID().pid() ) == 11 ||
abs( ( *j )->particleID().pid() ) == 2212 ) ) {
......@@ -92,10 +87,10 @@ bool TrackCheckerBase::allDaughtersReconstructible( const LHCb::MCParticle* mcPa
( *j )->mother()->particleID().pid() != 310 && ( *j )->mother()->particleID().pid() != 3122 ) {
return false;
}
} else if ( !allDaughtersReconstructible( *j ) )
} else if ( !allDaughtersReconstructible( *j ) ) {
return false;
}
}
}
return true;
}
......@@ -8,14 +8,12 @@
* granted to it by virtue of its status as an Intergovernmental Organization *
* or submit itself to any jurisdiction. *
\*****************************************************************************/
#ifndef TRACKCHECKERBASE_H
#define TRACKCHECKERBASE_H 1
#pragma once
// from Gaudi
#include "GaudiAlg/GaudiHistoAlg.h"
#include <string>
// interfaces
#include "GaudiKernel/IMagneticFieldSvc.h"
#include "MCInterfaces/IIdealStateCreator.h"
......@@ -28,6 +26,8 @@
#include "Event/MCParticle.h"
#include "Event/Track.h"
#include <string>
/** @class TrackCheckerBase TrackCheckerBase.h "TrackCheckers/TrackCheckerBase"
*
* Base class for track monitoring: essentially a 'box' of common tools
......@@ -45,35 +45,36 @@ public:
/** Algorithm initialization */
StatusCode initialize() override;
public:
/** small struct for link info */
struct LinkInfo {
LinkInfo( const LHCb::Track* t, unsigned int c, double p ) : track( t ), clone( c ), purity( p ) {}
LinkInfo() = default;
const LHCb::Track* track{nullptr};
unsigned int clone{0};
double purity{-1};
};
public:
/** Get a pointer to Magnetic field service
* @return field service
*/
const IMagneticFieldSvc* fieldSvc() const;
auto fieldSvc() const { return m_pIMF.get(); }
/** Get a pointer to the track selection tool
* @return field service
*/
const IMCReconstructible* selector() const;
auto selector() const { return m_selector.get(); }
/** Get a pointer to the idealStateCreator
* @return IdealStateCreator
*/
const IIdealStateCreator* idealStateCreator() const;
auto idealStateCreator() const { return m_stateCreator.get(); }
/** Get a pointer to the track extrapolator
* @return extrapolator
*/
const ITrackExtrapolator* extrapolator() const;
/** small struct for link info */
struct LinkInfo {
LinkInfo( const LHCb::Track* t, unsigned int c, double p ) : track( t ), clone( c ), purity( p ) {}
LinkInfo() = default;
const LHCb::Track* track{nullptr};
unsigned int clone{0};
double purity{-1};
};
auto extrapolator() const { return m_extrapolator.get(); }
/** link to truth
* @param aTrack track
......@@ -85,12 +86,14 @@ public:
*
* @return bool
*/
bool selected( const LHCb::MCParticle* particle ) const;
bool selected( const LHCb::MCParticle* particle ) const {
return selector()->isReconstructibleAs( m_recCat, particle );
}
/** Whether to split by algorithm
* @return splitByAlgorithm true or false
*/
bool splitByAlgorithm() const;
bool splitByAlgorithm() const { return m_splitByAlgorithm.value(); }
/** Whether to split by algorithm
* @return splitByType true or false
......@@ -100,12 +103,12 @@ public:
/** Pointer to the visible primary vertex tool
* @return IVisPrimVertTool
*/
const IVisPrimVertTool* visPrimVertTool() const;
auto visPrimVertTool() const { return m_visPrimVertTool.get(); }
/** Pointer to ghost classification tool
* @return ITrackGhostClassification
*/
const ITrackGhostClassification* ghostClassification() const;
auto ghostClassification() const { return m_ghostClassification.get(); }
/** Is a b child ? ie has b quark somewhere in history
* @param mcPart MC particle
......@@ -119,53 +122,30 @@ public:
*/
bool ksLambdaAncestor( const LHCb::MCParticle* mcPart ) const;
/** are all stable daughters of this particle reconstructible?
/** Are all stable daughters of this particle reconstructible?
* @param mcPart MC particle
* @return bool true/false
*/
bool allDaughtersReconstructible( const LHCb::MCParticle* mcPart ) const;
/** Are all stable daughters of this particle reconstructible *and* is a b child ?
* @param mcPart MC particle
* @return bool true/false
*/
bool bAncestorWithReconstructibleDaughters( const LHCb::MCParticle* mcPart ) const;
private:
Gaudi::Property<std::string> m_selectionCriteria{this, "SelectionCriteria", "ChargedLong"};
IMCReconstructible::RecCategory m_recCat; ///< Pointer to selector
ServiceHandle<IMagneticFieldSvc> m_pIMF{this, "MagneticFieldService",
"MagneticFieldSvc"}; ///< Pointer to the magn. field service
ToolHandle<ITrackGhostClassification> m_ghostClassification{
this, "GhostTool", "LongGhostClassification/GhostTool"}; ///< Pointer to ghost tool
ToolHandle<IMCReconstructible> m_selector{this, "Selector", "MCReconstructible/Selector"}; ///< Pointer to selector
PublicToolHandle<ITrackExtrapolator> m_extrapolator{this, "Extrapolator",
"TrackMasterExtrapolator"}; ///< Pointer to extrapolator
PublicToolHandle<IIdealStateCreator> m_stateCreator{this, "StateCreator",
"IdealStateCreator"}; ///< IdealStateCreator
PublicToolHandle<IVisPrimVertTool> m_visPrimVertTool{this, "VisPrimVertTool",
"VisPrimVertTool"}; ///< Visible primary vertices..
IMCReconstructible::RecCategory m_recCat;
ServiceHandle<const IMagneticFieldSvc> m_pIMF{this, "MagneticFieldService", "MagneticFieldSvc"};
ToolHandle<const ITrackGhostClassification> m_ghostClassification{this, "GhostTool",
"LongGhostClassification/GhostTool"};
ToolHandle<const IMCReconstructible> m_selector{this, "Selector", "MCReconstructible/Selector"};
ToolHandle<const ITrackExtrapolator> m_extrapolator{this, "Extrapolator", "TrackMasterExtrapolator"};
ToolHandle<const IIdealStateCreator> m_stateCreator{this, "StateCreator", "IdealStateCreator"};
ToolHandle<const IVisPrimVertTool> m_visPrimVertTool{this, "VisPrimVertTool", "VisPrimVertTool"};
Gaudi::Property<bool> m_splitByAlgorithm{this, "SplitByAlgorithm", false};
Gaudi::Property<bool> m_splitByType{this, "SplitByType", false};
};
inline const IMagneticFieldSvc* TrackCheckerBase::fieldSvc() const { return m_pIMF.get(); }
inline const IMCReconstructible* TrackCheckerBase::selector() const { return m_selector.get(); }
inline bool TrackCheckerBase::selected( const LHCb::MCParticle* particle ) const {
return selector()->isReconstructibleAs( m_recCat, particle );
}
inline const ITrackExtrapolator* TrackCheckerBase::extrapolator() const { return m_extrapolator.get(); }
inline const IIdealStateCreator* TrackCheckerBase::idealStateCreator() const { return m_stateCreator.get(); }
inline const IVisPrimVertTool* TrackCheckerBase::visPrimVertTool() const { return m_visPrimVertTool.get(); }
inline bool TrackCheckerBase::splitByAlgorithm() const { return m_splitByAlgorithm.value(); }
inline const ITrackGhostClassification* TrackCheckerBase::ghostClassification() const {
return m_ghostClassification.get();
}
#endif // TRACKCHECKERBASE_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment