Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 #include "JetRec/JetClusterer.h"
26 
28  // Public methods:
30 
31  // Constructors
34  AsgTool(name) {
35  }
36 
37  // Destructor
40  = default;
41 
42  // Athena algtool's Hooks
45  {
46  ATH_MSG_INFO ("Initializing " << name() << "...");
47  if (m_tightOP) m_fjvtThresh = 0.53;
48  else m_fjvtThresh = 0.72;
49 
51 
52  if(m_jetContainerName.empty()){
53  ATH_MSG_ERROR("JetForwardPFlowJvtTool needs to have its input jet container configured!");
54  return StatusCode::FAILURE;
55  }
56 
57  //FlowElement jets instead of PFO jets
58  if(!m_FEKey.empty()){
59  if(!m_orFEKey.key().empty()){
60  m_orFEKey = m_jetContainerName + "." + m_orFEKey.key();
61  }
62  }
63  else{ //PFO reconstruction
64  if(!m_orKey.key().empty()){
65  m_orKey = m_jetContainerName + "." + m_orKey.key();
66  }
67  }
68  ATH_CHECK(m_PFOKey.initialize( m_FEKey.empty() ));
69  ATH_CHECK(m_orKey.initialize( m_FEKey.empty() && !m_orKey.key().empty() ));
70  ATH_CHECK(m_FEKey.initialize( !m_FEKey.empty() ));
71  ATH_CHECK(m_orFEKey.initialize( !m_FEKey.empty() && !m_orFEKey.key().empty() ));
73 
78  m_passJvtKey = m_jetContainerName + "." + m_passJvtKey.key(); //nnjvt pass
79 
84  ATH_CHECK(m_passJvtKey.initialize());
85 
86  ATH_CHECK(m_vxContKey.initialize());
87 
88 
89 
90  return StatusCode::SUCCESS;
91  }
92 
94  std::vector<TVector2> pileupMomenta;
95 
96  pileupMomenta=calculateVertexMomenta(&jetCont,m_pvind, m_vertices);
97 
100  if(pileupMomenta.empty()) {
101  ATH_MSG_DEBUG( "pileupMomenta is empty, this can happen for events with no PU vertices."
102  <<" fJVT won't be computed for this event and will be set to 0 instead." );
103  for(const xAOD::Jet* jetF : jetCont) {
104  fjvtHandle(*jetF) = 1;
105  fjvtRawHandle(*jetF) = 0;
106  }
107  return StatusCode::SUCCESS;
108  }
109 
110  for(const xAOD::Jet* jetF : jetCont) {
111  fjvtHandle(*jetF) = 1;
112  fjvtRawHandle(*jetF) = 0;
113 
114  if (isForwardJet(jetF)){
115  double fjvt = getFJVT(jetF,pileupMomenta);
116  if (fjvt>m_fjvtThresh) fjvtHandle(*jetF) = 0;
117  fjvtRawHandle(*jetF) = fjvt;
118  }
119  }
120  return StatusCode::SUCCESS;
121  }
122 
123  float JetForwardPFlowJvtTool::getFJVT(const xAOD::Jet *jet, const std::vector<TVector2>& pileupMomenta) const {
124  TVector2 fjet(jet->pt()*cos(jet->phi()),jet->pt()*sin(jet->phi()));
125  double fjvt = 0;
126  for (const TVector2& pu : pileupMomenta) {
127  double projection = pu*fjet/fjet.Mod();
128  if (projection<fjvt) fjvt = projection;
129  }
130  return -1*fjvt/fjet.Mod();
131  }
132 
134  int pvind, int vertices) const {
135  std::vector<TVector2> pileupMomenta;
136  // -- Retrieve PV index if not provided by user
137  const std::size_t pv_index = (pvind==-1) ? getPV() : std::size_t(pvind);
138 
140 
141  for(const xAOD::Vertex* vx: *vxContHandle) {
142  if(vx->vertexType()!=xAOD::VxType::PriVtx && vx->vertexType()!=xAOD::VxType::PileUp) continue;
143  if(vx->index()==(size_t)pv_index) continue;
144 
145  TString jname = m_jetsName.value();
146  jname += vx->index();
147 
148  pflow::puJets vertjets = buildPFlowPUjets(*vx);
149  if( !vertjets.jetCont || !vertjets.jetAuxCont ){
150  ATH_MSG_WARNING(" Some issue appeared while building the pflow pileup jets for vertex "
151  << vx->index() << " (vxType = " << vx->vertexType()<<" )!" );
152  return pileupMomenta;
153  }
154 
155  TVector2 vertex_met;
156  for( const xAOD::Jet *jet : *(vertjets.jetCont) ) {
157 
158  // Remove jets which are close to hs
159  if (!m_includePV && hasCloseByHSjet(jet,pjets)) continue;
160 
161  // Calculate vertex missing momentum
162  if (isCentralJet(jet) && getRpt(jet)> m_rptCut)
163  {
164  vertex_met += TVector2(jet->pt()*cos(jet->phi()),jet->pt()*sin(jet->phi()) ) ;
165  }
166  else{
167  vertex_met += TVector2(jet->jetP4(m_jetchargedp4).Pt()*cos(jet->jetP4(m_jetchargedp4).Phi()),
168  jet->jetP4(m_jetchargedp4).Pt()*sin(jet->jetP4(m_jetchargedp4).Phi()) );
169  }
170  }
171 
172  pileupMomenta.push_back(vertex_met);
173  if(vertices!=-1 && int(vx->index())==vertices) break;
174  }
175  return pileupMomenta;
176  }
177 
179  for (const xAOD::Jet* pjet : *pjets) {
180  char jet_nnjvtpass=false;
182  jet_nnjvtpass = passJvtHandle(*pjet);
183  if (pjet->p4().DeltaR(jet->p4())<0.3 && jet_nnjvtpass && isCentralJet(pjet) ) return true;
184  }
185  return false;
186  }
187 
189  pflow::puJets pu_jets;
190  const std::size_t pv_index = (m_pvind==-1) ? getPV() : std::size_t (m_pvind);
191 
192  std::vector<fastjet::PseudoJet> input_pfo;
193  std::set<int> charged_pfo;
194 
196 
197  if (!tvaHandle.isValid()){
198  ATH_MSG_ERROR("Could not retrieve the TrackVertexAssociation: "
199  << m_tvaKey.key());
200  return pu_jets;
201  }
202 
203  if(!m_FEKey.empty()){
205 
206  for(const xAOD::FlowElement* fe : *FlowElementHandle){
207  if (!m_orFEKey.key().empty()){
209  if (!orHandle(*fe)) continue;
210  }
211  if (fe->isCharged()) {
212  const xAOD::TrackParticle* track = dynamic_cast<const xAOD::TrackParticle*>(fe->chargedObject(0));
213 
214  if (vx.index()==pv_index && std::abs((vx.z()-track->z0())*sin(track->theta()))>m_dzCut)
215  continue;
216  if (vx.index()!=pv_index
217  && (!tvaHandle->associatedVertex(track)
218  || vx.index()!=tvaHandle->associatedVertex(track)->index())
219  ) continue;
220  input_pfo.push_back(feToPseudoJet(fe, CP::charged, &vx) );
221  charged_pfo.insert(fe->index());
222  }
223  else if (std::abs(fe->eta())<m_neutMaxRap && !fe->isCharged() && fe->e()>0)
224  {
225  input_pfo.push_back(feToPseudoJet(fe, CP::neutral, &vx) );
226  }
227  }
228  }
229  else{
231 
232  for(const xAOD::PFO* pfo : *PFOHandle){
233  if (!m_orKey.key().empty()){
235  if (!orHandle(*pfo)) continue;
236  }
237  if (pfo->isCharged()) {
238  if (vx.index()==pv_index && std::abs((vx.z()-pfo->track(0)->z0())*sin(pfo->track(0)->theta()))>m_dzCut)
239  continue;
240  if (vx.index()!=pv_index
241  && (!tvaHandle->associatedVertex(pfo->track(0))
242  || vx.index()!=tvaHandle->associatedVertex(pfo->track(0))->index())
243  ) continue;
244  input_pfo.push_back(pfoToPseudoJet(pfo, CP::charged, &vx) );
245  charged_pfo.insert(pfo->index());
246  }
247  else if (std::abs(pfo->eta())<m_neutMaxRap && !pfo->isCharged() && pfo->eEM()>0)
248  {
249  input_pfo.push_back(pfoToPseudoJet(pfo, CP::neutral, &vx) );
250  }
251  }
252  }
253 
254  std::shared_ptr<xAOD::JetContainer> vertjets = std::make_shared<xAOD::JetContainer>();
255  std::shared_ptr<xAOD::JetAuxContainer> vertjetsAux = std::make_shared<xAOD::JetAuxContainer>();
256 
257  vertjets->setStore(vertjetsAux.get());
258  TString newname = m_jetsName.value();
259  newname += vx.index();
260 
261  // Use run/event number as random number seeds.
262  std::vector<int> seeds;
263  auto evtInfoHandle = SG::makeHandle(m_eventInfoKey);
264  if (!evtInfoHandle.isValid())
265  {
266  ATH_MSG_ERROR("Unable to retrieve event info");
267  return pu_jets;
268  }
269  JetClustererHelper::seedsFromEventInfo(evtInfoHandle.cptr(), seeds);
270 
271  fastjet::JetDefinition jet_def(fastjet::antikt_algorithm,0.4);
272  fastjet::AreaDefinition area_def(fastjet::active_area_explicit_ghosts,
273  fastjet::GhostedAreaSpec(fastjet::SelectorAbsRapMax(m_maxRap)));
274  area_def = area_def.with_fixed_seed(seeds);
275  fastjet::ClusterSequenceArea clust_pfo(input_pfo,jet_def,area_def);
276  std::vector<fastjet::PseudoJet> inclusive_jets = sorted_by_pt(clust_pfo.inclusive_jets(5000.));
277 
278  for (size_t i = 0; i < inclusive_jets.size(); i++) {
279  xAOD::Jet* jet= new xAOD::Jet();
280  xAOD::JetFourMom_t tempjetp4(inclusive_jets[i].pt(),
281  inclusive_jets[i].eta(),
282  inclusive_jets[i].phi(),
283  inclusive_jets[i].m());
284  xAOD::JetFourMom_t newArea(inclusive_jets[i].area_4vector().perp(),
285  inclusive_jets[i].area_4vector().eta(),
286  inclusive_jets[i].area_4vector().phi(),
287  inclusive_jets[i].area_4vector().m());
288  vertjets->push_back(jet);
289  jet->setJetP4(tempjetp4);
290  jet->setJetP4("JetConstitScaleMomentum",tempjetp4);
291  jet->setJetP4("JetPileupScaleMomentum",tempjetp4);
292  jet->setAttribute("ActiveArea4vec",newArea);
293  jet->setAttribute("DetectorEta",jet->eta());
294  std::vector<fastjet::PseudoJet> constituents = inclusive_jets[i].constituents();
295  float chargedpart = 0;
296  for (size_t j = 0; j < constituents.size(); j++) {
297  if (charged_pfo.count(constituents[j].user_index())>=1) {
298  chargedpart += constituents[j].perp();
299  }
300  }
301  xAOD::JetFourMom_t chargejetp4(chargedpart,inclusive_jets[i].eta(),inclusive_jets[i].phi(),inclusive_jets[i].m());
302  jet->setJetP4(m_jetchargedp4,chargejetp4);
303  }
304 
305  if((m_pfoJES->modify(*vertjets)).isFailure()){
306  ATH_MSG_ERROR(" Failed to calibrate PU jet container ");
307  return pu_jets;
308  }
309 
310  pu_jets.jetCont = vertjets;
311  pu_jets.jetAuxCont = vertjetsAux;
312  return pu_jets;
313  }
314 
315  fastjet::PseudoJet JetForwardPFlowJvtTool::pfoToPseudoJet(const xAOD::PFO* pfo, const CP::PFO_JetMETConfig_charge& theCharge, const xAOD::Vertex *vx) const {
316  TLorentzVector pfo_p4;
317  if (CP::charged == theCharge){
318  float pweight = m_weight;
319  if( (m_wpfotool->fillWeight(*pfo,pweight)).isSuccess() ){
320  // Create a PSeudojet with the momentum of the selected IParticle
321  pfo_p4= TLorentzVector(pfo->p4().Px()*pweight,pfo->p4().Py()*pweight,pfo->p4().Pz()*pweight,pfo->e()*pweight);
322  }
323  } else if (CP::neutral == theCharge){
324  pfo_p4= pfo->GetVertexCorrectedEMFourVec(*vx);
325  }
326  fastjet::PseudoJet psj(pfo_p4);
327  // User index is used to identify the xAOD object used for the PSeudoJet
328  if (CP::charged == theCharge){
329  psj.set_user_index(pfo->index());
330  }else{
331  psj.set_user_index(-1);
332  }
333 
334  return psj;
335  }
336 
337  fastjet::PseudoJet JetForwardPFlowJvtTool::feToPseudoJet(const xAOD::FlowElement* fe, const CP::PFO_JetMETConfig_charge& theCharge, const xAOD::Vertex *vx) const {
338  TLorentzVector fe_p4;
339  if (CP::charged == theCharge){
340  float pweight = m_weight;
341  if( (m_wpfotool->fillWeight(*fe,pweight)).isSuccess() ){
342  // Create a Peeudojet with the momentum of the selected IParticle
343  fe_p4= TLorentzVector(fe->p4().Px()*pweight,fe->p4().Py()*pweight,fe->p4().Pz()*pweight,fe->e()*pweight);
344  }
345  } else if (CP::neutral == theCharge){
346  fe_p4=FEHelpers::getVertexCorrectedFourVec(*fe, *vx);
347  }
348  fastjet::PseudoJet psj(fe_p4);
349  // User index is used to identify the xAOD object used for the PseudoJet
350  if (CP::charged == theCharge){
351  psj.set_user_index(fe->index());
352  }else{
353  psj.set_user_index(-1);
354  }
355 
356  return psj;
357  }
358 
360  if (std::abs(jet->eta())<m_etaThresh) return false;
361  if (jet->pt()<m_forwardMinPt || (m_forwardMaxPt>0 && jet->pt()>m_forwardMaxPt) ) return false;
362  return true;
363  }
364 
366  if (std::abs(jet->eta())>m_etaThresh) return false;
367  if (jet->pt()<m_centerMinPt || (m_centerMaxPt>0 && jet->pt()>m_centerMaxPt)) return false;
368  return true;
369  }
370 
372  double Rpt;
373  Rpt= jet->jetP4(m_jetchargedp4).Pt()/ jet->pt();
374  return Rpt;
375  }
376 
377  std::size_t JetForwardPFlowJvtTool::getPV() const{
378  if (m_includePV) return -1;
379 
380  //const xAOD::VertexContainer *vxCont = 0;
382  ATH_MSG_DEBUG("Successfully retrieved primary vertex container");
383  for(const xAOD::Vertex *vx : *vxContHandle) {
384  if(vx->vertexType()==xAOD::VxType::PriVtx) return vx->index();
385  }
386  // If no verticies are found in the event the Primary Vertex container will just contain a dummy vertex and no primary vertex
387  if(vxContHandle->empty() ){
388  ATH_MSG_ERROR("Primary vertex container is empty ");
389  } else if(vxContHandle->size() != 1 ){
390  ATH_MSG_WARNING("Couldn't identify the hard-scatter primary vertex (no vertex with \"vx->vertexType()==xAOD::VxType::PriVtx\" in the container)! ");
391  }
392  // this almost certainly isn't what we should do here, the
393  // caller doesn't check this for errors
394  return 0;
395  }
396 
400 
401  for(const xAOD::Jet *jet : *jets) {
402  bool ishs = false;
403  bool ispu = true;
404  for(const xAOD::Jet *tjet : *truthJets) {
405  if (tjet->p4().DeltaR(jet->p4())<0.3 && tjet->pt()>10e3) ishs = true;
406  if (tjet->p4().DeltaR(jet->p4())<0.6) ispu = false;
407  }
408  isHSHandle(*jet)=ishs;
409  isPUHandle(*jet)=ispu;
410  }
411  return StatusCode::SUCCESS;
412  }
413 
JetForwardPFlowJvtTool::calculateVertexMomenta
virtual std::vector< TVector2 > calculateVertexMomenta(const xAOD::JetContainer *jets, int pvind, int vertices) const
Definition: JetForwardPFlowJvtTool.cxx:133
pflow::puJets::jetAuxCont
std::shared_ptr< xAOD::JetAuxContainer > jetAuxCont
Definition: JetForwardPFlowJvtTool.h:85
JetForwardPFlowJvtTool::isForwardJet
bool isForwardJet(const xAOD::Jet *jet) const
Definition: JetForwardPFlowJvtTool.cxx:359
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:93
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
JetForwardPFlowJvtTool::m_centerMinPt
Gaudi::Property< double > m_centerMinPt
Definition: JetForwardPFlowJvtTool.h:137
perp
Scalar perp() const
perp method - perpenticular length
Definition: AmgMatrixBasePlugin.h:44
JetForwardPFlowJvtTool::pfoToPseudoJet
fastjet::PseudoJet pfoToPseudoJet(const xAOD::PFO *pfo, const CP::PFO_JetMETConfig_charge &theCharge, const xAOD::Vertex *vx) const
Definition: JetForwardPFlowJvtTool.cxx:315
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
JetForwardPFlowJvtTool::hasCloseByHSjet
bool hasCloseByHSjet(const xAOD::Jet *jet, const xAOD::JetContainer *pjets) const
Definition: JetForwardPFlowJvtTool.cxx:178
JetForwardPFlowJvtTool::m_jetContainerName
Gaudi::Property< std::string > m_jetContainerName
Definition: JetForwardPFlowJvtTool.h:126
JetForwardPFlowJvtTool::m_pvind
Gaudi::Property< int > m_pvind
Definition: JetForwardPFlowJvtTool.h:131
JetForwardPFlowJvtTool.h
JetAttributes.h
JetForwardPFlowJvtTool::tagTruth
StatusCode tagTruth(const xAOD::JetContainer *jets, const xAOD::JetContainer *truthJets)
Definition: JetForwardPFlowJvtTool.cxx:397
test_pyathena.pt
pt
Definition: test_pyathena.py:11
defineDB.jets
jets
Definition: JetTagCalibration/share/defineDB.py:24
JetForwardPFlowJvtTool::m_tvaKey
SG::ReadHandleKey< jet::TrackVertexAssociation > m_tvaKey
Definition: JetForwardPFlowJvtTool.h:125
JetForwardPFlowJvtTool::m_weight
Gaudi::Property< float > m_weight
Definition: JetForwardPFlowJvtTool.h:145
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:133
JetForwardPFlowJvtTool::m_wpfotool
ToolHandle< CP::WeightPFOTool > m_wpfotool
Definition: JetForwardPFlowJvtTool.h:166
JetForwardPFlowJvtTool::m_pfoJES
ToolHandle< IJetCalibrationTool > m_pfoJES
Definition: JetForwardPFlowJvtTool.h:167
JetForwardPFlowJvtTool::~JetForwardPFlowJvtTool
virtual ~JetForwardPFlowJvtTool()
Destructor:
JetForwardPFlowJvtTool::m_vertices
Gaudi::Property< int > m_vertices
Definition: JetForwardPFlowJvtTool.h:132
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:274
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:164
JetForwardPFlowJvtTool::m_jetchargedp4
Gaudi::Property< std::string > m_jetchargedp4
Definition: JetForwardPFlowJvtTool.h:128
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
pflow::puJets::jetCont
std::shared_ptr< xAOD::JetContainer > jetCont
Definition: JetForwardPFlowJvtTool.h:84
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::m_eventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Definition: JetForwardPFlowJvtTool.h:155
JetForwardPFlowJvtTool::getPV
std::size_t getPV() const
Definition: JetForwardPFlowJvtTool.cxx:377
lumiFormat.i
int i
Definition: lumiFormat.py:85
JetForwardPFlowJvtTool::m_passJvtKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_passJvtKey
Definition: JetForwardPFlowJvtTool.h:157
JetForwardPFlowJvtTool::m_jetsName
Gaudi::Property< std::string > m_jetsName
Definition: JetForwardPFlowJvtTool.h:127
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:100
JetForwardPFlowJvtTool::m_fjvtRawKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_fjvtRawKey
Definition: JetForwardPFlowJvtTool.h:162
JetForwardPFlowJvtTool::m_fjvtKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_fjvtKey
Definition: JetForwardPFlowJvtTool.h:161
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:572
JetForwardPFlowJvtTool::feToPseudoJet
fastjet::PseudoJet feToPseudoJet(const xAOD::FlowElement *fe, const CP::PFO_JetMETConfig_charge &theCharge, const xAOD::Vertex *vx) const
Definition: JetForwardPFlowJvtTool.cxx:337
JetClustererHelper::seedsFromEventInfo
void seedsFromEventInfo(const xAOD::EventInfo *ei, std::vector< int > &seeds)
Fill seeds vector from run & event number. This functio is separated from the class so it's easier to...
Definition: JetClusterer.cxx:27
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:152
JetForwardPFlowJvtTool::m_dzCut
Gaudi::Property< double > m_dzCut
Definition: JetForwardPFlowJvtTool.h:142
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
JetForwardPFlowJvtTool::m_rptCut
Gaudi::Property< double > m_rptCut
Definition: JetForwardPFlowJvtTool.h:140
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:33
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:365
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
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:154
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:574
JetForwardPFlowJvtTool::m_forwardMaxPt
Gaudi::Property< double > m_forwardMaxPt
Definition: JetForwardPFlowJvtTool.h:136
xAOD::PFO_v1
Class describing a particle flow object.
Definition: PFO_v1.h:35
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
JetForwardPFlowJvtTool::m_tightOP
Gaudi::Property< bool > m_tightOP
Definition: JetForwardPFlowJvtTool.h:146
JetClusterer.h
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:135
xAOD::JetAlgorithmType::antikt_algorithm
@ antikt_algorithm
Definition: JetContainerInfo.h:33
JetForwardPFlowJvtTool::m_orFEKey
SG::ReadDecorHandleKey< xAOD::FlowElement > m_orFEKey
Definition: JetForwardPFlowJvtTool.h:159
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:139
pflow::puJets
Definition: JetForwardPFlowJvtTool.h:83
JetForwardPFlowJvtTool::m_neutMaxRap
Gaudi::Property< double > m_neutMaxRap
Definition: JetForwardPFlowJvtTool.h:144
JetForwardPFlowJvtTool::getRpt
double getRpt(const xAOD::Jet *jet) const
Definition: JetForwardPFlowJvtTool.cxx:371
xAOD::FlowElement_v1::p4
virtual FourMom_t p4() const override
The full 4-momentum of the particle.
Definition: FlowElement_v1.cxx:33
SG::WriteDecorHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
JetForwardPFlowJvtTool::m_centerMaxPt
Gaudi::Property< double > m_centerMaxPt
Definition: JetForwardPFlowJvtTool.h:138
JetForwardPFlowJvtTool::initialize
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition: JetForwardPFlowJvtTool.cxx:44
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
JetForwardPFlowJvtTool::m_maxRap
Gaudi::Property< double > m_maxRap
Definition: JetForwardPFlowJvtTool.h:143
JetForwardPFlowJvtTool::m_isHSKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_isHSKey
Definition: JetForwardPFlowJvtTool.h:163
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:153
JetForwardPFlowJvtTool::m_etaThresh
Gaudi::Property< double > m_etaThresh
Definition: JetForwardPFlowJvtTool.h:134
createCoolChannelIdFile.newname
newname
Definition: createCoolChannelIdFile.py:106
JetFromPseudojet.h
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
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:188
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
JetForwardPFlowJvtTool::getFJVT
float getFJVT(const xAOD::Jet *jet, const std::vector< TVector2 > &pileupMomenta) const
Definition: JetForwardPFlowJvtTool.cxx:123
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:158
xAOD::FlowElement_v1
A detector object made of other lower level object(s)
Definition: FlowElement_v1.h:25