Skip to content
Snippets Groups Projects

Converted ParticleToTrackContainer Class to Functional Framework

Merged Raphael Skuza requested to merge rskuza_ParticleToTrackContainer into master
1 file
+ 14
50
Compare changes
  • Side-by-side
  • Inline
@@ -18,64 +18,28 @@
#include "Event/Particle.h"
#include "Event/Track.h"
#include "GaudiAlg/GaudiAlgorithm.h"
#include "GaudiAlg/Transformer.h"
#include "GaudiKernel/SharedObjectsContainer.h"
#include "GaudiKernel/ToolHandle.h"
#include "TrackInterfaces/ITrackSelector.h"
#include <string>
class ParticleToTrackContainer : public GaudiAlgorithm {
class ParticleToTrackContainer
: public Gaudi::Functional::Transformer<LHCb::Track::Selection( const LHCb::Particle::Range& )> {
public:
// Constructors and destructor
ParticleToTrackContainer( const std::string& name, ISvcLocator* pSvcLocator );
virtual ~ParticleToTrackContainer();
ParticleToTrackContainer( const std::string& name, ISvcLocator* pSvcLocator )
: Transformer( name, pSvcLocator, KeyValue{"ParticleLocation", ""}, KeyValue{"Selector", ""} )
, m_selector( "", this ){};
StatusCode initialize() override;
StatusCode finalize() override;
StatusCode execute() override;
LHCb::Track::Selection operator()( const LHCb::Particle::Range& particles ) const override;
private:
std::string m_inputLocation;
std::string m_outputLocation;
ToolHandle<ITrackSelector> m_selector;
};
DECLARE_COMPONENT( ParticleToTrackContainer )
ParticleToTrackContainer::ParticleToTrackContainer( const std::string& name, ISvcLocator* pSvcLocator )
: GaudiAlgorithm( name, pSvcLocator ), m_selector( "", this ) {
// constructor
declareProperty( "ParticleLocation", m_inputLocation );
declareProperty( "TrackLocation", m_outputLocation );
declareProperty( "Selector", m_selector );
}
ParticleToTrackContainer::~ParticleToTrackContainer() {
// destructor
}
StatusCode ParticleToTrackContainer::initialize() {
// Initializes TsaInitialization at the begin of program execution.
StatusCode sc = GaudiAlgorithm::initialize();
if ( sc.isFailure() ) { return Error( "Failed to initialize" ); }
// retrieve the selector if it is set
if ( !m_selector.empty() ) {
sc = m_selector.retrieve();
if ( sc.isFailure() ) error() << "Failed to retrieve selector." << endmsg;
}
return sc;
}
StatusCode ParticleToTrackContainer::finalize() {
if ( !m_selector.empty() ) m_selector.release().ignore();
return GaudiAlgorithm::finalize();
}
namespace {
void extractTracks( const LHCb::Particle& p, std::vector<const LHCb::Track*>& tracks ) {
if ( p.proto() && p.proto()->track() ) tracks.push_back( p.proto()->track() );
@@ -83,10 +47,8 @@ namespace {
}
} // namespace
StatusCode ParticleToTrackContainer::execute() {
LHCb::Particle::Range particles = get<LHCb::Particle::Range>( m_inputLocation );
LHCb::Track::Selection* tracks = new LHCb::Track::Selection();
put( tracks, m_outputLocation );
LHCb::Track::Selection ParticleToTrackContainer::operator()( const LHCb::Particle::Range& particles ) const {
LHCb::Track::Selection tracks;
// get all the tracks
std::vector<const LHCb::Track*> alltracks;
@@ -100,11 +62,13 @@ StatusCode ParticleToTrackContainer::execute() {
for ( const auto* tr : alltracks ) {
bool accept = true;
if ( !m_selector.empty() ) accept = m_selector->accept( *tr );
if ( accept ) tracks->insert( tr );
if ( accept ) tracks.insert( tr );
}
debug() << "candidates, tracks, selected tracks: " << particles.size() << " " << alltracks.size() << " "
<< tracks->size() << endmsg;
<< tracks.size() << endmsg;
if ( !m_selector.empty() ) m_selector.release().ignore();
return StatusCode::SUCCESS;
return tracks;
}
Loading