Skip to content
Snippets Groups Projects

Converted TrackMuonUpgradeAlg Class to Functional Framework

Merged Raphael Skuza requested to merge rskuza_TrackMuonUpgradeAlg into master
All threads resolved!
@@ -9,7 +9,7 @@
* or submit itself to any jurisdiction. *
\*****************************************************************************/
// Gaudi
#include "GaudiAlg/GaudiAlgorithm.h"
#include "GaudiAlg/Transformer.h"
#include "GaudiKernel/ToolHandle.h"
// event
@@ -17,46 +17,24 @@
#include "Event/TrackFitResult.h"
#include <string>
class TrackMuonUpgradeAlg : public GaudiAlgorithm {
class TrackMuonUpgradeAlg
: public Gaudi::Functional::Transformer<LHCb::Tracks( const LHCb::Track::Range&, const LHCb::Tracks& )> {
public:
// Constructors and destructor
TrackMuonUpgradeAlg( const std::string& name, ISvcLocator* pSvcLocator );
virtual ~TrackMuonUpgradeAlg();
StatusCode execute() override;
TrackMuonUpgradeAlg( const std::string& name, ISvcLocator* pSvcLocator )
: Transformer( name, pSvcLocator,
{KeyValue{"MuonInputLocation", LHCb::TrackLocation::Muon},
KeyValue{"TrackInputLocation", LHCb::TrackLocation::Default}},
KeyValue{"OutputLocation", "Rec/Track/LongMuons"} ){};
private:
std::string m_inputLocation;
std::string m_trackInputLocation;
std::string m_outputLocation;
LHCb::Tracks operator()( const LHCb::Track::Range& muontracks, const LHCb::Tracks& inputtracks ) const override;
};
DECLARE_COMPONENT( TrackMuonUpgradeAlg )
TrackMuonUpgradeAlg::TrackMuonUpgradeAlg( const std::string& name, ISvcLocator* pSvcLocator )
: GaudiAlgorithm( name, pSvcLocator ) {
// constructor
declareProperty( "MuonInputLocation", m_inputLocation = LHCb::TrackLocation::Muon );
declareProperty( "TrackInputLocation", m_trackInputLocation = LHCb::TrackLocation::Default );
declareProperty( "OutputLocation", m_outputLocation = "Rec/Track/LongMuons" );
}
TrackMuonUpgradeAlg::~TrackMuonUpgradeAlg() {
// destructor
}
StatusCode TrackMuonUpgradeAlg::execute() {
// get them as a range .... then const-cast:-)
LHCb::Track::Range muontracks = get<LHCb::Track::Range>( m_inputLocation );
LHCb::Tracks* outtracks( 0 );
if ( m_inputLocation != m_outputLocation ) {
outtracks = new LHCb::Tracks();
put( outtracks, m_outputLocation );
} else {
error() << "upgrade not yet inimplemented" << endmsg;
return StatusCode::FAILURE;
}
LHCb::Tracks TrackMuonUpgradeAlg::operator()( const LHCb::Track::Range& muontracks,
const LHCb::Tracks& inputtracks ) const {
LHCb::Tracks outtracks;
const LHCb::Tracks* besttracks( 0 );
for ( const auto* muontrack : muontracks ) {
@@ -64,26 +42,29 @@ StatusCode TrackMuonUpgradeAlg::execute() {
if ( muontrack->ancestors().empty() ) {
debug() << "Problem: muon track has no ancestors!" << endmsg;
if ( besttracks == 0 ) besttracks = get<LHCb::Tracks>( m_trackInputLocation );
if ( besttracks == 0 ) {
const LHCb::Tracks* tracks = &inputtracks;
besttracks = tracks;
}
origtrack = static_cast<const LHCb::Track*>( besttracks->containedObject( muontrack->key() ) );
} else {
origtrack = muontrack->ancestors().front();
}
if ( origtrack && origtrack->type() == LHCb::Track::Long ) {
// for now, let's make a new track in a new container
if ( outtracks ) {
if ( outtracks.empty() ) {
// clone
auto track = new LHCb::Track( *origtrack );
// add the muon hits
track->addSortedToLhcbIDs( muontrack->lhcbIDs() );
// invalidate the fit
track->setFitResult( 0 );
outtracks->insert( track );
outtracks.insert( track );
} else {
// upgrade an existing track. to be done ...
}
}
}
return StatusCode::SUCCESS;
return outtracks;
}
Loading