diff --git a/Phys/DecayTreeFitter/src/RecoElectronTrack.cpp b/Phys/DecayTreeFitter/src/RecoElectronTrack.cpp index def03b921320de7b9edc66910af3581cde98ad77..5ca74f279141187960f3192b74ae1d0283ef2507 100644 --- a/Phys/DecayTreeFitter/src/RecoElectronTrack.cpp +++ b/Phys/DecayTreeFitter/src/RecoElectronTrack.cpp @@ -249,14 +249,15 @@ namespace DecayTreeFitter { //++m_itCount; if ( m_hasBrem ) - p.Vfast( 5, 5 ) = sig2 + 0. * p_particle * std::abs( p.r( 5 ) ); + p.Vfast( 5, 5 ) = sig2 + 0.03 * p_particle * std::abs( p.r( 5 ) ); else //if ( ! m_hasBrem ) - p.Vfast( 5, 5 ) = ( p.r( 5 ) < 0. ) ? sig2 + 0.4 * p_particle * std::abs( p.r( 5 ) ) : sig2; + p.Vfast( 5, 5 ) = ( p.r( 5 ) < 0. ) ? sig2 + 0.20 * p_particle * std::abs( p.r( 5 ) ) : sig2; // char const* aboutBrem = m_hasBrem ? "Has Brem" : "No Brem"; // std::printf( "[%-10s] C5: %f iter: %d sig: %f modified sig: %f;\n", aboutBrem, p.r( 5 ), //m_itCount, // std::sqrt( sig2 ), std::sqrt( p.Vfast( 5, 5 ) ) ); + return status; } } // namespace DecayTreeFitter diff --git a/Phys/DecayTreeFitter/src/RecoElectronTrack.h b/Phys/DecayTreeFitter/src/RecoElectronTrack.h index 3144699b2e3405fe47a87e3b74bac572af14daa3..5285af08a7057247f3ed8b52030acaac1623cddf 100644 --- a/Phys/DecayTreeFitter/src/RecoElectronTrack.h +++ b/Phys/DecayTreeFitter/src/RecoElectronTrack.h @@ -19,6 +19,21 @@ namespace DecayTreeFitter { double m_bremEnergy{0.}; double m_bremEnergyCov{0.}; bool m_hasBrem{false}; + + void applyBremCorrectionHack( double bremEnergy, double bremEnergyCov ) { + int charge = m_state.qOverP() > 0 ? 1 : -1; + double qop = m_state.qOverP(); + double qopnew = 1.0 / ( 1.0 / qop + charge * bremEnergy ); // = qop / (1 + qop * charge * bremEnergy ) + // update the m_state + m_state.setQOverP( qopnew ); + // update the covariance matrix (multiply left/right with matrix diag(1,1,1,1,dqopnewdqop) + double dqopnewdqop = qopnew * qopnew / ( qop * qop ); + for ( unsigned int i = 0; i < 4; ++i ) m_state.covariance()( 4, i ) *= dqopnewdqop; + m_state.covariance()( 4, 4 ) *= dqopnewdqop * dqopnewdqop; + // add the contribution from the bremenergy + double dqopnewdbremE = qopnew * qopnew * charge; + m_state.covariance()( 4, 4 ) += dqopnewdbremE * dqopnewdbremE * bremEnergyCov; + } // mutable int m_itCount{0}; }; } // namespace DecayTreeFitter