diff --git a/Phys/DecayTreeFitter/include/DecayTreeFitter/Fitter.h b/Phys/DecayTreeFitter/include/DecayTreeFitter/Fitter.h index d3509542628c3f0eb766dd290e4f534871dadb7b..273a139e5766ef562db05b9ed47c31f33b222e70 100644 --- a/Phys/DecayTreeFitter/include/DecayTreeFitter/Fitter.h +++ b/Phys/DecayTreeFitter/include/DecayTreeFitter/Fitter.h @@ -43,21 +43,21 @@ namespace DecayTreeFitter { public: /// constructor from the particle (decay head) - Fitter( const LHCb::Particle& bc, const bool forceFitAll = true, const ITrackStateProvider* extrapolator = 0 ); + Fitter( const LHCb::Particle& bc, const bool forceFitAll = true, const ITrackStateProvider* extrapolator = 0, bool useTrackTraj = true); /// constructor from the particle (decay head) - Fitter( const LHCb::Particle& bc, const ITrackStateProvider* extrapolator, const bool forceFitAll = true ); + Fitter( const LHCb::Particle& bc, const ITrackStateProvider* extrapolator, const bool forceFitAll = true, bool useTrackTraj = true); /// constructor from the particle (decay head) and primary vertex Fitter( const LHCb::Particle& bc, const LHCb::VertexBase& pv, const bool forceFitAll = true, - const ITrackStateProvider* extrapolator = 0 ); + const ITrackStateProvider* extrapolator = 0, bool useTrackTraj = true); /// constructor from the particle (decay head) and v2 primary vertex Fitter( const LHCb::Particle& bc, const LHCb::Event::v2::RecVertex& pv, const bool forceFitAll = true, - const ITrackStateProvider* extrapolator = 0 ); + const ITrackStateProvider* extrapolator = 0, bool useTrackTraj = true); /// constructor from the particle (decay head) and primary vertex Fitter( const LHCb::Particle& bc, const LHCb::VertexBase& pv, const ITrackStateProvider* extrapolator, - const bool forceFitAll = true ); + const bool forceFitAll = true, bool useTrackTraj = true); /// constructor from the particle (decay head) and v2 primary vertex Fitter( const LHCb::Particle& bc, const LHCb::Event::v2::RecVertex& pv, const ITrackStateProvider* extrapolator, - const bool forceFitAll = true ); + const bool forceFitAll = true, bool useTrackTraj = true); /// destructor ~Fitter(); // destructor diff --git a/Phys/DecayTreeFitter/src/component/DecayTreeFitterAlg.cpp b/Phys/DecayTreeFitter/src/component/DecayTreeFitterAlg.cpp index e3cbb32b7d7918842d2cd570b1ba8659ecada971..0277a2c0d9fa1aa6ab60c4a5ef5ebcd985e2d5eb 100644 --- a/Phys/DecayTreeFitter/src/component/DecayTreeFitterAlg.cpp +++ b/Phys/DecayTreeFitter/src/component/DecayTreeFitterAlg.cpp @@ -166,6 +166,8 @@ private: // properties Gaudi::Property<std::vector<std::string>> m_massConstraints{this, "MassConstraints"}; + Gaudi::Property<bool> m_useTrackTraj{this, "useTrackTraj", true}; + Gaudi::Property<bool> m_forceFitAll{this, "forceFitAll", true}; // counters mutable Gaudi::Accumulators::Counter<> m_eventCount{this, "Events"}; @@ -197,7 +199,11 @@ typename GaudiSignature<NoPV, LHCb::Particle::Range>::Output_t DecayTreeFitterAl NIter_t niter_out; for ( auto* p : parts ) { - auto fitter = DecayTreeFitter::Fitter( *p, m_stateprovider ); + if (!m_stateprovider.retrieve().isSuccess()) + { + warning() << "Can not retrive StateProvider correctly." << endmsg; + } + auto fitter = DecayTreeFitter::Fitter( *p, m_stateprovider.get(), m_forceFitAll.value(), m_useTrackTraj.value() ); for ( const auto& C : m_massConstraints ) { const LHCb::ParticleProperty* p_prop = m_particlePropertySvc->find( C ); fitter.setMassConstraint( p_prop->particleID() ); @@ -251,7 +257,11 @@ operator()( const LHCb::Particle::Range& parts, const LHCb::Event::PV::PrimaryVe NIter_t niter_out; for ( const auto& p : parts ) { - auto fitter = DecayTreeFitter::Fitter( *p, Sel::getBestPV( *p, vertices ), m_stateprovider ); + if (!m_stateprovider.retrieve().isSuccess()) + { + warning() << "Can not retrive StateProvider correctly." << endmsg; + } + auto fitter = DecayTreeFitter::Fitter( *p, Sel::getBestPV( *p, vertices ), m_stateprovider.get(), m_forceFitAll.value(), m_useTrackTraj.value() ); for ( const auto& C : m_massConstraints ) { const LHCb::ParticleProperty* p_prop = m_particlePropertySvc->find( C ); fitter.setMassConstraint( p_prop->particleID() ); @@ -308,7 +318,11 @@ operator()( const LHCb::Particle::Range& parts, const LHCb::Event::PV::PrimaryVe for ( const auto& p : parts ) { for ( const auto& v : vertices ) { - auto fitter = DecayTreeFitter::Fitter( *p, v, m_stateprovider ); + if (!m_stateprovider.retrieve().isSuccess()) + { + warning() << "Can not retrive StateProvider correctly." << endmsg; + } + auto fitter = DecayTreeFitter::Fitter( *p, v, m_stateprovider.get(), m_forceFitAll.value(), m_useTrackTraj.value() ); for ( const auto& C : m_massConstraints ) { const LHCb::ParticleProperty* p_prop = m_particlePropertySvc->find( C ); fitter.setMassConstraint( p_prop->particleID() ); diff --git a/Phys/DecayTreeFitter/src/lib/Configuration.h b/Phys/DecayTreeFitter/src/lib/Configuration.h index 8d7b47fda9bcbc569998500a5b6657044623d91d..0f69e775f6a713acb03ee9e3abc763a667ff8c02 100644 --- a/Phys/DecayTreeFitter/src/lib/Configuration.h +++ b/Phys/DecayTreeFitter/src/lib/Configuration.h @@ -16,8 +16,8 @@ struct ITrackStateProvider; namespace DecayTreeFitter { class Configuration { public: - Configuration( bool forceFitAll = true, const ITrackStateProvider* stateprovider = 0 ) - : m_forceFitAll( forceFitAll ), m_stateprovider( stateprovider ), m_useTrackTraj( true ) {} + Configuration( bool forceFitAll = true, const ITrackStateProvider* stateprovider = 0, bool useTrackTraj = true) + : m_forceFitAll( forceFitAll ), m_stateprovider( stateprovider ), m_useTrackTraj( useTrackTraj ) {} const ITrackStateProvider* stateProvider() const { return m_stateprovider; } diff --git a/Phys/DecayTreeFitter/src/lib/Fitter.cpp b/Phys/DecayTreeFitter/src/lib/Fitter.cpp index 62f373ac1de1835db5807d29e94317ea6e46d220..a9af784c3c586766a735534dd5ee842ef73c4e26 100644 --- a/Phys/DecayTreeFitter/src/lib/Fitter.cpp +++ b/Phys/DecayTreeFitter/src/lib/Fitter.cpp @@ -39,14 +39,14 @@ namespace DecayTreeFitter { // ========================================================================== // constructor from the particle (decay head) // ========================================================================== - Fitter::Fitter( const LHCb::Particle& bc, const bool forceFitAll, const ITrackStateProvider* extrapolator ) + Fitter::Fitter( const LHCb::Particle& bc, const bool forceFitAll, const ITrackStateProvider* extrapolator, bool useTrackTraj) : m_particle( &bc ) , m_status( UnFitted ) , m_chiSquare( -1 ) , m_niter( -1 ) , m_errCode( 0 ) , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) ) { - Configuration config( forceFitAll, extrapolator ); + Configuration config( forceFitAll, extrapolator, useTrackTraj ); // build the tree m_decaychain = std::make_unique<DecayChain>( bc, config ); // allocate the fit parameters @@ -55,14 +55,14 @@ namespace DecayTreeFitter { // ========================================================================== // constructor from the particle (decay head) // ========================================================================== - Fitter::Fitter( const LHCb::Particle& bc, const ITrackStateProvider* extrapolator, const bool forceFitAll ) + Fitter::Fitter( const LHCb::Particle& bc, const ITrackStateProvider* extrapolator, const bool forceFitAll, bool useTrackTraj) : m_particle( &bc ) , m_status( UnFitted ) , m_chiSquare( -1 ) , m_niter( -1 ) , m_errCode( 0 ) , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) ) { - Configuration config( forceFitAll, extrapolator ); + Configuration config( forceFitAll, extrapolator, useTrackTraj ); // build the tree m_decaychain = std::make_unique<DecayChain>( bc, config ); // allocate the fit parameters @@ -72,7 +72,7 @@ namespace DecayTreeFitter { // constructor from the particle (decay head) and primary vertex // ========================================================================== Fitter::Fitter( const LHCb::Particle& bc, const LHCb::VertexBase& pv, const bool forceFitAll, - const ITrackStateProvider* extrapolator ) + const ITrackStateProvider* extrapolator, bool useTrackTraj) : m_particle( &bc ) , m_status( UnFitted ) , m_chiSquare( -1 ) @@ -82,7 +82,7 @@ namespace DecayTreeFitter { , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) ) // { - Configuration config( forceFitAll, extrapolator ); + Configuration config( forceFitAll, extrapolator, useTrackTraj ); m_decaychain = std::make_unique<DecayChain>( bc, pv, config ); m_fitparams = std::make_unique<FitParams>( m_decaychain->dim() ); } @@ -90,7 +90,7 @@ namespace DecayTreeFitter { // constructor from the particle (decay head) and v2 primary vertex // ========================================================================== Fitter::Fitter( const LHCb::Particle& bc, const LHCb::Event::v2::RecVertex& pv, const bool forceFitAll, - const ITrackStateProvider* extrapolator ) + const ITrackStateProvider* extrapolator, bool useTrackTraj) : m_particle( &bc ) , m_status( UnFitted ) , m_chiSquare( -1 ) @@ -100,7 +100,7 @@ namespace DecayTreeFitter { , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) ) // { - Configuration config( forceFitAll, extrapolator ); + Configuration config( forceFitAll, extrapolator, useTrackTraj ); m_decaychain = std::make_unique<DecayChain>( bc, pv, config ); m_fitparams = std::make_unique<FitParams>( m_decaychain->dim() ); } @@ -108,7 +108,7 @@ namespace DecayTreeFitter { // constructor from the particle (decay head) and primary vertex // ========================================================================== Fitter::Fitter( const LHCb::Particle& bc, const LHCb::VertexBase& pv, const ITrackStateProvider* extrapolator, - const bool forceFitAll ) + const bool forceFitAll, bool useTrackTraj) : m_particle( &bc ) , m_status( UnFitted ) , m_chiSquare( -1 ) @@ -118,7 +118,7 @@ namespace DecayTreeFitter { , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) ) // { - Configuration config( forceFitAll, extrapolator ); + Configuration config( forceFitAll, extrapolator, useTrackTraj ); m_decaychain = std::make_unique<DecayChain>( bc, pv, config ); m_fitparams = std::make_unique<FitParams>( m_decaychain->dim() ); } @@ -126,7 +126,7 @@ namespace DecayTreeFitter { // constructor from the particle (decay head) and v2 primary vertex // ========================================================================== Fitter::Fitter( const LHCb::Particle& bc, const LHCb::Event::v2::RecVertex& pv, - const ITrackStateProvider* extrapolator, const bool forceFitAll ) + const ITrackStateProvider* extrapolator, const bool forceFitAll, bool useTrackTraj) : m_particle( &bc ) , m_status( UnFitted ) , m_chiSquare( -1 ) @@ -136,7 +136,7 @@ namespace DecayTreeFitter { , m_extrapolator( const_cast<ITrackStateProvider*>( extrapolator ) ) // { - Configuration config( forceFitAll, extrapolator ); + Configuration config( forceFitAll, extrapolator, useTrackTraj ); m_decaychain = std::make_unique<DecayChain>( bc, pv, config ); m_fitparams = std::make_unique<FitParams>( m_decaychain->dim() ); }