ATLAS Offline Software
JetForwardPFlowJvtTool.cxx
Go to the documentation of this file.
1 
3 /*
4  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 // JetForwardPFlowJvtTool.cxx
8 // Implementation file for class JetForwardPFlowJvtTool
9 // Author: Anastasia Kotsokechagia <anastasia.kotsokechagia@cern.ch>
11 
12 // JetForwardPFlowJvtTool includes
14 
15 // Jet EDM
16 #include "xAODJet/JetAttributes.h"
17 
18 // FastJet
19 #include "fastjet/ClusterSequence.hh"
20 #include "fastjet/ClusterSequenceArea.hh"
21 #include <fastjet/AreaDefinition.hh>
22 
23 // Jet
25 
27  // Public methods:
29 
30  // Constructors
33  AsgTool(name) {
34  }
35 
36  // Destructor
39  = default;
40 
41  // Athena algtool's Hooks
44  {
45  ATH_MSG_INFO ("Initializing " << name() << "...");
46  if (m_tightOP) m_fjvtThresh = 0.53;
47  else m_fjvtThresh = 0.72;
48 
50 
51  if(m_jetContainerName.empty()){
52  ATH_MSG_ERROR("JetForwardPFlowJvtTool needs to have its input jet container configured!");
53  return StatusCode::FAILURE;
54  }
55 
56  //FlowElement jets instead of PFO jets
57  if(!m_FEKey.empty()){
58  if(!m_orFEKey.key().empty()){
59  m_orFEKey = m_jetContainerName + "." + m_orFEKey.key();
60  }
61  }
62  else{ //PFO reconstruction
63  if(!m_orKey.key().empty()){
64  m_orKey = m_jetContainerName + "." + m_orKey.key();
65  }
66  }
67  ATH_CHECK(m_PFOKey.initialize( m_FEKey.empty() ));
68  ATH_CHECK(m_orKey.initialize( m_FEKey.empty() && !m_orKey.key().empty() ));
69  ATH_CHECK(m_FEKey.initialize( !m_FEKey.empty() ));
70  ATH_CHECK(m_orFEKey.initialize( !m_FEKey.empty() && !m_orFEKey.key().empty() ));
71 
72  m_fjvtKey = m_jetContainerName + "." + m_fjvtKey.key();
74  m_isHSKey = m_jetContainerName + "." + m_isHSKey.key();
75  m_isPUKey = m_jetContainerName + "." + m_isPUKey.key();
76  m_passJvtKey = m_jetContainerName + "." + m_passJvtKey.key(); //nnjvt pass
77 
78  ATH_CHECK(m_fjvtKey.initialize());
79  ATH_CHECK(m_fjvtRawKey.initialize());
80  ATH_CHECK(m_isHSKey.initialize());
81  ATH_CHECK(m_isPUKey.initialize());
82  ATH_CHECK(m_passJvtKey.initialize());
83 
84  ATH_CHECK(m_vxContKey.initialize());
85 
86 
87 
88  return StatusCode::SUCCESS;
89  }
90 
92  std::vector<TVector2> pileupMomenta;
93 
94  pileupMomenta=calculateVertexMomenta(&jetCont,m_pvind, m_vertices);
95 
98  if(pileupMomenta.empty()) {
99  ATH_MSG_DEBUG( "pileupMomenta is empty, this can happen for events with no PU vertices."
100  <<" fJVT won't be computed for this event and will be set to 0 instead." );
101  for(const xAOD::Jet* jetF : jetCont) {
102  fjvtHandle(*jetF) = 1;
103  fjvtRawHandle(*jetF) = 0;
104  }
105  return StatusCode::SUCCESS;
106  }
107 
108  for(const xAOD::Jet* jetF : jetCont) {
109  fjvtHandle(*jetF) = 1;
110  fjvtRawHandle(*jetF) = 0;
111 
112  if (isForwardJet(jetF)){
113  double fjvt = getFJVT(jetF,pileupMomenta);
114  if (fjvt>m_fjvtThresh) fjvtHandle(*jetF) = 0;
115  fjvtRawHandle(*jetF) = fjvt;
116  }
117  }
118  return StatusCode::SUCCESS;
119  }
120 
121  float JetForwardPFlowJvtTool::getFJVT(const xAOD::Jet *jet, const std::vector<TVector2>& pileupMomenta) const {
122  TVector2 fjet(jet->pt()*cos(jet->phi()),jet->pt()*sin(jet->phi()));
123  double fjvt = 0;
124  for (const TVector2& pu : pileupMomenta) {
125  double projection = pu*fjet/fjet.Mod();
126  if (projection<fjvt) fjvt = projection;
127  }
128  return -1*fjvt/fjet.Mod();
129  }
130 
132  int pvind, int vertices) const {
133  std::vector<TVector2> pileupMomenta;
134  // -- Retrieve PV index if not provided by user
135  const std::size_t pv_index = (pvind==-1) ? getPV() : std::size_t(pvind);
136 
138 
139  for(const xAOD::Vertex* vx: *vxContHandle) {
140  if(vx->vertexType()!=xAOD::VxType::PriVtx && vx->vertexType()!=xAOD::VxType::PileUp) continue;
141  if(vx->index()==(size_t)pv_index) continue;
142 
143  TString jname = m_jetsName.value();
144  jname += vx->index();
145 
146  pflow::puJets vertjets = buildPFlowPUjets(*vx);
147  if( !vertjets.jetCont || !vertjets.jetAuxCont ){
148  ATH_MSG_WARNING(" Some issue appeared while building the pflow pileup jets for vertex "
149  << vx->index() << " (vxType = " << vx->vertexType()<<" )!" );
150  return pileupMomenta;
151  }
152 
153  TVector2 vertex_met;
154  for( const xAOD::Jet *jet : *(vertjets.jetCont) ) {
155 
156  // Remove jets which are close to hs
157  if (!m_includePV && hasCloseByHSjet(jet,pjets)) continue;
158 
159  // Calculate vertex missing momentum
160  if (isCentralJet(jet) && getRpt(jet)> m_rptCut)
161  {
162  vertex_met += TVector2(jet->pt()*cos(jet->phi()),jet->pt()*sin(jet->phi()) ) ;
163  }
164  else{
165  vertex_met += TVector2(jet->jetP4(m_jetchargedp4).Pt()*cos(jet->jetP4(m_jetchargedp4).Phi()),
166  jet->jetP4(m_jetchargedp4).Pt()*sin(jet->jetP4(m_jetchargedp4).Phi()) );
167  }
168  }
169 
170  pileupMomenta.push_back(vertex_met);
171  if(vertices!=-1 && int(vx->index())==vertices) break;
172  }
173  return pileupMomenta;
174  }
175 
177  for (const xAOD::Jet* pjet : *pjets) {
178  char jet_nnjvtpass=false;
180  jet_nnjvtpass = passJvtHandle(*pjet);
181  if (pjet->p4().DeltaR(jet->p4())<0.3 && jet_nnjvtpass && isCentralJet(pjet) ) return true;
182  }
183  return false;
184  }
185 
187  pflow::puJets pu_jets;
188  const std::size_t pv_index = (m_pvind==-1) ? getPV() : std::size_t (m_pvind);
189 
190  std::vector<fastjet::PseudoJet> input_pfo;
191  std::set<int> charged_pfo;
192 
194 
195  if (!tvaHandle.isValid()){
196  ATH_MSG_ERROR("Could not retrieve the TrackVertexAssociation: "
197  << m_tvaKey.key());
198  return pu_jets;
199  }
200 
201  if(!m_FEKey.empty()){
203 
204  for(const xAOD::FlowElement* fe : *FlowElementHandle){
205  if (!m_orFEKey.key().empty()){
207  if (!orHandle(*fe)) continue;
208  }
209  if (fe->isCharged()) {
210  const xAOD::TrackParticle* track = dynamic_cast<const xAOD::TrackParticle*>(fe->chargedObject(0));
211 
212  if (vx.index()==pv_index && std::abs((vx.z()-track->z0())*sin(track->theta()))>m_dzCut)
213  continue;
214  if (vx.index()!=pv_index
215  && (!tvaHandle->associatedVertex(track)
216  || vx.index()!=tvaHandle->associatedVertex(track)->index())
217  ) continue;
218  input_pfo.push_back(feToPseudoJet(fe, CP::charged, &vx) );
219  charged_pfo.insert(fe->index());
220  }
221  else if (std::abs(fe->eta())<m_neutMaxRap && !fe->isCharged() && fe->e()>0)
222  {
223  input_pfo.push_back(feToPseudoJet(fe, CP::neutral, &vx) );
224  }
225  }
226  }
227  else{
229 
230  for(const xAOD::PFO* pfo : *PFOHandle){
231  if (!m_orKey.key().empty()){
233  if (!orHandle(*pfo)) continue;
234  }
235  if (pfo->isCharged()) {
236  if (vx.index()==pv_index && std::abs((vx.z()-pfo->track(0)->z0())*sin(pfo->track(0)->theta()))>m_dzCut)
237  continue;
238  if (vx.index()!=pv_index
239  && (!tvaHandle->associatedVertex(pfo->track(0))
240  || vx.index()!=tvaHandle->associatedVertex(pfo->track(0))->index())
241  ) continue;
242  input_pfo.push_back(pfoToPseudoJet(pfo, CP::charged, &vx) );
243  charged_pfo.insert(pfo->index());
244  }
245  else if (std::abs(pfo->eta())<m_neutMaxRap && !pfo->isCharged() && pfo->eEM()>0)
246  {
247  input_pfo.push_back(pfoToPseudoJet(pfo, CP::neutral, &vx) );
248  }
249  }
250  }
251 
252  std::shared_ptr<xAOD::JetContainer> vertjets = std::make_shared<xAOD::JetContainer>();
253  std::shared_ptr<xAOD::JetAuxContainer> vertjetsAux = std::make_shared<xAOD::JetAuxContainer>();
254 
255  vertjets->setStore(vertjetsAux.get());
256  TString newname = m_jetsName.value();
257  newname += vx.index();
258 
259  fastjet::JetDefinition jet_def(fastjet::antikt_algorithm,0.4);
260  fastjet::AreaDefinition area_def(fastjet::active_area_explicit_ghosts,
261  fastjet::GhostedAreaSpec(fastjet::SelectorAbsRapMax(m_maxRap)));
262  fastjet::ClusterSequenceArea clust_pfo(input_pfo,jet_def,area_def);
263  std::vector<fastjet::PseudoJet> inclusive_jets = sorted_by_pt(clust_pfo.inclusive_jets(5000.));
264 
265  for (size_t i = 0; i < inclusive_jets.size(); i++) {
266  xAOD::Jet* jet= new xAOD::Jet();
267  xAOD::JetFourMom_t tempjetp4(inclusive_jets[i].pt(),
268  inclusive_jets[i].eta(),
269  inclusive_jets[i].phi(),
270  inclusive_jets[i].m());
271  xAOD::JetFourMom_t newArea(inclusive_jets[i].area_4vector().perp(),
272  inclusive_jets[i].area_4vector().eta(),
273  inclusive_jets[i].area_4vector().phi(),
274  inclusive_jets[i].area_4vector().m());
275  vertjets->push_back(jet);
276  jet->setJetP4(tempjetp4);
277  jet->setJetP4("JetConstitScaleMomentum",tempjetp4);
278  jet->setJetP4("JetPileupScaleMomentum",tempjetp4);
279  jet->setAttribute("ActiveArea4vec",newArea);
280  jet->setAttribute("DetectorEta",jet->eta());
281  std::vector<fastjet::PseudoJet> constituents = inclusive_jets[i].constituents();
282  float chargedpart = 0;
283  for (size_t j = 0; j < constituents.size(); j++) {
284  if (charged_pfo.count(constituents[j].user_index())>=1) {
285  chargedpart += constituents[j].perp();
286  }
287  }
288  xAOD::JetFourMom_t chargejetp4(chargedpart,inclusive_jets[i].eta(),inclusive_jets[i].phi(),inclusive_jets[i].m());
289  jet->setJetP4(m_jetchargedp4,chargejetp4);
290  }
291 
292  if((m_pfoJES->modify(*vertjets)).isFailure()){
293  ATH_MSG_ERROR(" Failed to calibrate PU jet container ");
294  return pu_jets;
295  }
296 
297  pu_jets.jetCont = vertjets;
298  pu_jets.jetAuxCont = vertjetsAux;
299  return pu_jets;
300  }
301 
302  fastjet::PseudoJet JetForwardPFlowJvtTool::pfoToPseudoJet(const xAOD::PFO* pfo, const CP::PFO_JetMETConfig_charge& theCharge, const xAOD::Vertex *vx) const {
303  TLorentzVector pfo_p4;
304  if (CP::charged == theCharge){
305  float pweight = m_weight;
306  if( (m_wpfotool->fillWeight(*pfo,pweight)).isSuccess() ){
307  // Create a PSeudojet with the momentum of the selected IParticle
308  pfo_p4= TLorentzVector(pfo->p4().Px()*pweight,pfo->p4().Py()*pweight,pfo->p4().Pz()*pweight,pfo->e()*pweight);
309  }
310  } else if (CP::neutral == theCharge){
311  pfo_p4= pfo->GetVertexCorrectedEMFourVec(*vx);
312  }
313  fastjet::PseudoJet psj(pfo_p4);
314  // User index is used to identify the xAOD object used for the PSeudoJet
315  if (CP::charged == theCharge){
316  psj.set_user_index(pfo->index());
317  }else{
318  psj.set_user_index(-1);
319  }
320 
321  return psj;
322  }
323 
324  fastjet::PseudoJet JetForwardPFlowJvtTool::feToPseudoJet(const xAOD::FlowElement* fe, const CP::PFO_JetMETConfig_charge& theCharge, const xAOD::Vertex *vx) const {
325  TLorentzVector fe_p4;
326  if (CP::charged == theCharge){
327  float pweight = m_weight;
328  if( (m_wpfotool->fillWeight(*fe,pweight)).isSuccess() ){
329  // Create a Peeudojet with the momentum of the selected IParticle
330  fe_p4= TLorentzVector(fe->p4().Px()*pweight,fe->p4().Py()*pweight,fe->p4().Pz()*pweight,fe->e()*pweight);
331  }
332  } else if (CP::neutral == theCharge){
333  fe_p4=FEHelpers::getVertexCorrectedFourVec(*fe, *vx);
334  }
335  fastjet::PseudoJet psj(fe_p4);
336  // User index is used to identify the xAOD object used for the PseudoJet
337  if (CP::charged == theCharge){
338  psj.set_user_index(fe->index());
339  }else{
340  psj.set_user_index(-1);
341  }
342 
343  return psj;
344  }
345 
347  if (std::abs(jet->eta())<m_etaThresh) return false;
348  if (jet->pt()<m_forwardMinPt || (m_forwardMaxPt>0 && jet->pt()>m_forwardMaxPt) ) return false;
349  return true;
350  }
351 
353  if (std::abs(jet->eta())>m_etaThresh) return false;
354  if (jet->pt()<m_centerMinPt || (m_centerMaxPt>0 && jet->pt()>m_centerMaxPt)) return false;
355  return true;
356  }
357 
359  double Rpt;
360  Rpt= jet->jetP4(m_jetchargedp4).Pt()/ jet->pt();
361  return Rpt;
362  }
363 
364  std::size_t JetForwardPFlowJvtTool::getPV() const{
365  if (m_includePV) return -1;
366 
367  //const xAOD::VertexContainer *vxCont = 0;
369  ATH_MSG_DEBUG("Successfully retrieved primary vertex container");
370  for(const xAOD::Vertex *vx : *vxContHandle) {
371  if(vx->vertexType()==xAOD::VxType::PriVtx) return vx->index();
372  }
373  // If no verticies are found in the event the Primary Vertex container will just contain a dummy vertex and no primary vertex
374  if(vxContHandle->empty() ){
375  ATH_MSG_ERROR("Primary vertex container is empty ");
376  } else if(vxContHandle->size() != 1 ){
377  ATH_MSG_WARNING("Couldn't identify the hard-scatter primary vertex (no vertex with \"vx->vertexType()==xAOD::VxType::PriVtx\" in the container)! ");
378  }
379  // this almost certainly isn't what we should do here, the
380  // caller doesn't check this for errors
381  return 0;
382  }
383 
387 
388  for(const xAOD::Jet *jet : *jets) {
389  bool ishs = false;
390  bool ispu = true;
391  for(const xAOD::Jet *tjet : *truthJets) {
392  if (tjet->p4().DeltaR(jet->p4())<0.3 && tjet->pt()>10e3) ishs = true;
393  if (tjet->p4().DeltaR(jet->p4())<0.6) ispu = false;
394  }
395  isHSHandle(*jet)=ishs;
396  isPUHandle(*jet)=ispu;
397  }
398  return StatusCode::SUCCESS;
399  }
400 
JetForwardPFlowJvtTool::calculateVertexMomenta
virtual std::vector< TVector2 > calculateVertexMomenta(const xAOD::JetContainer *jets, int pvind, int vertices) const
Definition: JetForwardPFlowJvtTool.cxx:131
pflow::puJets::jetAuxCont
std::shared_ptr< xAOD::JetAuxContainer > jetAuxCont
Definition: JetForwardPFlowJvtTool.h:83
JetForwardPFlowJvtTool::isForwardJet
bool isForwardJet(const xAOD::Jet *jet) const
Definition: JetForwardPFlowJvtTool.cxx:346
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
JetForwardPFlowJvtTool::decorate
virtual StatusCode decorate(const xAOD::JetContainer &jetCont) const override
Decorate a jet collection without otherwise modifying it.
Definition: JetForwardPFlowJvtTool.cxx:91
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
JetForwardPFlowJvtTool::m_centerMinPt
Gaudi::Property< double > m_centerMinPt
Definition: JetForwardPFlowJvtTool.h:135
perp
Scalar perp() const
perp method - perpenticular length
Definition: AmgMatrixBasePlugin.h:35
JetForwardPFlowJvtTool::pfoToPseudoJet
fastjet::PseudoJet pfoToPseudoJet(const xAOD::PFO *pfo, const CP::PFO_JetMETConfig_charge &theCharge, const xAOD::Vertex *vx) const
Definition: JetForwardPFlowJvtTool.cxx:302
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
JetForwardPFlowJvtTool::hasCloseByHSjet
bool hasCloseByHSjet(const xAOD::Jet *jet, const xAOD::JetContainer *pjets) const
Definition: JetForwardPFlowJvtTool.cxx:176
JetForwardPFlowJvtTool::m_jetContainerName
Gaudi::Property< std::string > m_jetContainerName
Definition: JetForwardPFlowJvtTool.h:124
JetForwardPFlowJvtTool::m_pvind
Gaudi::Property< int > m_pvind
Definition: JetForwardPFlowJvtTool.h:129
JetForwardPFlowJvtTool.h
JetAttributes.h
JetForwardPFlowJvtTool::tagTruth
StatusCode tagTruth(const xAOD::JetContainer *jets, const xAOD::JetContainer *truthJets)
Definition: JetForwardPFlowJvtTool.cxx:384
test_pyathena.pt
pt
Definition: test_pyathena.py:11
JetForwardPFlowJvtTool::m_tvaKey
SG::ReadHandleKey< jet::TrackVertexAssociation > m_tvaKey
Definition: JetForwardPFlowJvtTool.h:123
JetForwardPFlowJvtTool::m_weight
Gaudi::Property< float > m_weight
Definition: JetForwardPFlowJvtTool.h:143
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
JetForwardPFlowJvtTool::m_includePV
Gaudi::Property< bool > m_includePV
Definition: JetForwardPFlowJvtTool.h:131
JetForwardPFlowJvtTool::m_wpfotool
ToolHandle< CP::WeightPFOTool > m_wpfotool
Definition: JetForwardPFlowJvtTool.h:163
JetForwardPFlowJvtTool::m_pfoJES
ToolHandle< IJetCalibrationTool > m_pfoJES
Definition: JetForwardPFlowJvtTool.h:164
JetForwardPFlowJvtTool::~JetForwardPFlowJvtTool
virtual ~JetForwardPFlowJvtTool()
Destructor:
JetForwardPFlowJvtTool::m_vertices
Gaudi::Property< int > m_vertices
Definition: JetForwardPFlowJvtTool.h:130
xAOD::PFO_v1::e
virtual double e() const
The total energy of the particle.
Definition: PFO_v1.cxx:81
JetForwardPFlowJvtTool::m_isPUKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_isPUKey
Definition: JetForwardPFlowJvtTool.h:161
JetForwardPFlowJvtTool::m_jetchargedp4
Gaudi::Property< std::string > m_jetchargedp4
Definition: JetForwardPFlowJvtTool.h:126
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
pflow::puJets::jetCont
std::shared_ptr< xAOD::JetContainer > jetCont
Definition: JetForwardPFlowJvtTool.h:82
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CheckAppliedSFs.e3
e3
Definition: CheckAppliedSFs.py:264
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
JetForwardPFlowJvtTool::getPV
std::size_t getPV() const
Definition: JetForwardPFlowJvtTool.cxx:364
lumiFormat.i
int i
Definition: lumiFormat.py:92
JetForwardPFlowJvtTool::m_passJvtKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_passJvtKey
Definition: JetForwardPFlowJvtTool.h:154
JetForwardPFlowJvtTool::m_jetsName
Gaudi::Property< std::string > m_jetsName
Definition: JetForwardPFlowJvtTool.h:125
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:99
JetForwardPFlowJvtTool::m_fjvtRawKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_fjvtRawKey
Definition: JetForwardPFlowJvtTool.h:159
JetForwardPFlowJvtTool::m_fjvtKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_fjvtKey
Definition: JetForwardPFlowJvtTool.h:158
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:571
JetForwardPFlowJvtTool::feToPseudoJet
fastjet::PseudoJet feToPseudoJet(const xAOD::FlowElement *fe, const CP::PFO_JetMETConfig_charge &theCharge, const xAOD::Vertex *vx) const
Definition: JetForwardPFlowJvtTool.cxx:324
xAOD::PFO_v1::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: PFO_v1.cxx:95
JetForwardPFlowJvtTool::m_vxContKey
SG::ReadHandleKey< xAOD::VertexContainer > m_vxContKey
Definition: JetForwardPFlowJvtTool.h:150
JetForwardPFlowJvtTool::m_dzCut
Gaudi::Property< double > m_dzCut
Definition: JetForwardPFlowJvtTool.h:140
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
JetForwardPFlowJvtTool::m_rptCut
Gaudi::Property< double > m_rptCut
Definition: JetForwardPFlowJvtTool.h:138
xAOD::Vertex_v1::z
float z() const
Returns the z position.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
JetForwardPFlowJvtTool::JetForwardPFlowJvtTool
JetForwardPFlowJvtTool(const std::string &name)
Constructor with parameters:
Definition: JetForwardPFlowJvtTool.cxx:32
SG::AuxElement::index
size_t index() const
Return the index of this element within its container.
JetForwardPFlowJvtTool::isCentralJet
bool isCentralJet(const xAOD::Jet *jet) const
Definition: JetForwardPFlowJvtTool.cxx:352
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
jet::TrackVertexAssociation::associatedVertex
const xAOD::Vertex * associatedVertex(const xAOD::TrackParticle *trk) const
Definition: TrackVertexAssociation.cxx:23
JetForwardPFlowJvtTool::m_FEKey
SG::ReadHandleKey< xAOD::FlowElementContainer > m_FEKey
Definition: JetForwardPFlowJvtTool.h:152
xAOD::JetFourMom_t
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
Definition: JetTypes.h:17
CP::neutral
@ neutral
Definition: Reconstruction/PFlow/PFlowUtils/PFlowUtils/PFODefs.h:11
xAOD::VxType::PileUp
@ PileUp
Pile-up vertex.
Definition: TrackingPrimitives.h:573
JetForwardPFlowJvtTool::m_forwardMaxPt
Gaudi::Property< double > m_forwardMaxPt
Definition: JetForwardPFlowJvtTool.h:134
xAOD::PFO_v1
Class describing a particle flow object.
Definition: PFO_v1.h:35
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
JetForwardPFlowJvtTool::m_tightOP
Gaudi::Property< bool > m_tightOP
Definition: JetForwardPFlowJvtTool.h:144
xAOD::FlowElement_v1::e
virtual double e() const override
The total energy of the particle.
Definition: FlowElement_v1.cxx:25
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
JetForwardPFlowJvtTool::m_forwardMinPt
Gaudi::Property< double > m_forwardMinPt
Definition: JetForwardPFlowJvtTool.h:133
xAOD::JetAlgorithmType::antikt_algorithm
@ antikt_algorithm
Definition: JetContainerInfo.h:33
JetForwardPFlowJvtTool::m_orFEKey
SG::ReadDecorHandleKey< xAOD::FlowElement > m_orFEKey
Definition: JetForwardPFlowJvtTool.h:156
CheckAppliedSFs.pu
pu
Definition: CheckAppliedSFs.py:311
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
JetForwardPFlowJvtTool::m_fjvtThresh
Gaudi::Property< double > m_fjvtThresh
Definition: JetForwardPFlowJvtTool.h:137
pflow::puJets
Definition: JetForwardPFlowJvtTool.h:81
JetForwardPFlowJvtTool::m_neutMaxRap
Gaudi::Property< double > m_neutMaxRap
Definition: JetForwardPFlowJvtTool.h:142
JetForwardPFlowJvtTool::getRpt
double getRpt(const xAOD::Jet *jet) const
Definition: JetForwardPFlowJvtTool.cxx:358
xAOD::FlowElement_v1::p4
virtual FourMom_t p4() const override
The full 4-momentum of the particle.
Definition: FlowElement_v1.cxx:33
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
JetForwardPFlowJvtTool::m_centerMaxPt
Gaudi::Property< double > m_centerMaxPt
Definition: JetForwardPFlowJvtTool.h:136
JetForwardPFlowJvtTool::initialize
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition: JetForwardPFlowJvtTool.cxx:43
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
JetForwardPFlowJvtTool::m_maxRap
Gaudi::Property< double > m_maxRap
Definition: JetForwardPFlowJvtTool.h:141
JetForwardPFlowJvtTool::m_isHSKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_isHSKey
Definition: JetForwardPFlowJvtTool.h:160
CP::PFO_JetMETConfig_charge
PFO_JetMETConfig_charge
Definition: Reconstruction/PFlow/PFlowUtils/PFlowUtils/PFODefs.h:11
JetForwardPFlowJvtTool::m_PFOKey
SG::ReadHandleKey< xAOD::PFOContainer > m_PFOKey
Definition: JetForwardPFlowJvtTool.h:151
JetForwardPFlowJvtTool::m_etaThresh
Gaudi::Property< double > m_etaThresh
Definition: JetForwardPFlowJvtTool.h:132
createCoolChannelIdFile.newname
newname
Definition: createCoolChannelIdFile.py:106
defineDB.jets
list jets
Definition: JetTagCalibration/share/defineDB.py:24
JetFromPseudojet.h
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
JetForwardPFlowJvtTool::buildPFlowPUjets
pflow::puJets buildPFlowPUjets(const xAOD::Vertex &vx) const
Definition: JetForwardPFlowJvtTool.cxx:186
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
JetForwardPFlowJvtTool::getFJVT
float getFJVT(const xAOD::Jet *jet, const std::vector< TVector2 > &pileupMomenta) const
Definition: JetForwardPFlowJvtTool.cxx:121
xAOD::PFO_v1::GetVertexCorrectedEMFourVec
TLorentzVector GetVertexCorrectedEMFourVec(const xAOD::Vertex &vertexToCorrectTo) const
Correct EM scale 4-vector to point at a vertex.
Definition: PFO_v1.cxx:737
FEHelpers::getVertexCorrectedFourVec
TLorentzVector getVertexCorrectedFourVec(const xAOD::FlowElement &fe, const xAOD::Vertex &vertexToCorrectTo)
Definition: FEHelpers.cxx:13
xAOD::Jet
Jet_v1 Jet
Definition of the current "jet version".
Definition: Event/xAOD/xAODJet/xAODJet/Jet.h:17
CP::charged
@ charged
Definition: Reconstruction/PFlow/PFlowUtils/PFlowUtils/PFODefs.h:11
JetForwardPFlowJvtTool::m_orKey
SG::ReadDecorHandleKey< xAOD::PFO > m_orKey
Definition: JetForwardPFlowJvtTool.h:155
xAOD::FlowElement_v1
A detector object made of other lower level object(s)
Definition: FlowElement_v1.h:25