14 const EventContext& )
const {
16 if (tau.jet() ==
nullptr) {
18 return StatusCode::FAILURE;
24 std::vector<TLorentzVector> jet_const_vec;
26 TLorentzVector baryCenter;
31 baryCenter += const_p4;
32 jet_const_vec.push_back(const_p4);
35 ATH_MSG_DEBUG(
"barycenter (eta, phi): " << baryCenter.Eta() <<
" " << baryCenter.Phi());
38 TLorentzVector tauDetectorAxis;
40 for (
const auto& constituentP4 : jet_const_vec) {
41 if (baryCenter.DeltaR(constituentP4) >
m_clusterCone)
continue;
42 tauDetectorAxis += constituentP4;
46 ATH_MSG_DEBUG(
"this tau candidate does not have any constituent clusters!");
47 return StatusCode::FAILURE;
50 ATH_MSG_DEBUG(
"detector axis:" << tauDetectorAxis.Pt()<<
" " << tauDetectorAxis.Eta() <<
" " << tauDetectorAxis.Phi() <<
" " << tauDetectorAxis.E());
51 tau.setP4(tauDetectorAxis.Pt(), tauDetectorAxis.Eta(), tauDetectorAxis.Phi(), tau.m());
57 TLorentzVector tauInterAxis;
62 if (jetVertex != tau.vertex()) {
65 if (tau.vertex() ==
nullptr) {
66 ATH_MSG_WARNING(
"The seed jet has a vertex, while the tau candidate does not. It should not happen.");
67 return StatusCode::FAILURE;
74 if (jetVertex !=
nullptr) {
79 std::vector<TLorentzVector> jet_const_vec_vtxcorr;
81 TLorentzVector baryCenterTauVertex;
87 baryCenterTauVertex += const_vtxcorr_p4;
88 jet_const_vec_vtxcorr.push_back(const_vtxcorr_p4);
90 ATH_MSG_DEBUG(
"barycenter (eta, phi) at tau vertex: " << baryCenterTauVertex.Eta() <<
" " << baryCenterTauVertex.Phi());
94 for (
const auto& constituent_vtxcorr_P4 : jet_const_vec_vtxcorr) {
95 if (baryCenterTauVertex.DeltaR(constituent_vtxcorr_P4) >
m_clusterCone)
continue;
96 tauInterAxis += constituent_vtxcorr_P4;
100 tauInterAxis = tauDetectorAxis;
103 if (tauInterAxis.Pt() == 0.) {
104 ATH_MSG_DEBUG(
"this tau candidate does not have any constituent clusters!");
105 return StatusCode::FAILURE;
108 ATH_MSG_DEBUG(
"tau axis:" << tauInterAxis.Pt()<<
" " << tauInterAxis.Eta() <<
" " << tauInterAxis.Phi() <<
" " << tauInterAxis.E() );
109 tau.setP4(tauInterAxis.Pt(), tauInterAxis.Eta(), tauInterAxis.Phi(), tau.m());
113 return StatusCode::SUCCESS;
120 TLorentzVector vertexCorrectedP4;
131 ATH_MSG_WARNING(
"Seed jet constituent type not supported, will not do vertex correction !");
135 return vertexCorrectedP4;
141 TLorentzVector vertexCorrectedP4;
144 TVector3 pos(position.x(), position.y(), position.z());
148 vertexCorrectedP4 = fe.
p4();
152 " eta: " << fe.
eta() <<
" phi: " << fe.
phi() <<
" e: " << fe.
e());
153 ATH_MSG_DEBUG(
"Vertex corrected four momentum, pt: " << vertexCorrectedP4.Pt() <<
154 " eta: " << vertexCorrectedP4.Eta() <<
" phi: " << vertexCorrectedP4.Phi() <<
" e: " << vertexCorrectedP4.E());
156 return vertexCorrectedP4;
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
TLorentzVector getVertexCorrectedP4(const xAOD::JetConstituent &constituent, const Amg::Vector3D &position) const
Get the vertex corrected four momentum.
Gaudi::Property< bool > m_doVertexCorrection
virtual StatusCode executeTool(xAOD::TauJet &tau, const EventContext &ctx) const override
Execute - called for each tau candidate.
TauAxisSetter(const std::string &name)
Constructor.
Gaudi::Property< double > m_clusterCone
virtual FourMom_t p4() const final
The full 4-momentum of the particle.
Evaluate cluster kinematics with a different vertex / signal state.
virtual double pt() const override
virtual double phi() const override
The azimuthal angle ( ) of the particle.
virtual double eta() const override
The pseudorapidity ( ) of the particle.
virtual double e() const override
The total energy of the particle.
virtual FourMom_t p4() const override
The full 4-momentum of the particle.
A vector of jet constituents at the scale used during jet finding.
4-vector of jet constituent at the scale used during jet finding.
Type::ObjectType type() const
The full 4-momentum of the particle.
const IParticle * rawConstituent() const
Access the real underlying IParticle.
JetConstituentVector getConstituents() const
Return a vector of consituents. The object behaves like vector<const IParticle*>. See JetConstituentV...
const Amg::Vector3D & position() const
Returns the 3-pos.
Eigen::Matrix< double, 3, 1 > Vector3D
TLorentzVector getVertexCorrectedFourVec(const xAOD::FlowElement &fe, const xAOD::Vertex &vertexToCorrectTo)
@ FlowElement
The object is a track-calo-cluster.
@ CaloCluster
The object is a calorimeter cluster.
Jet_v1 Jet
Definition of the current "jet version".
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
FlowElement_v1 FlowElement
Definition of the current "pfo version".
Vertex_v1 Vertex
Define the latest version of the vertex class.
TauJet_v3 TauJet
Definition of the current "tau version".