Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
JetVariable.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 
3 /*
4  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 #ifndef JETMONITORING_JETVARIABLE_H
8 #define JETMONITORING_JETVARIABLE_H
9 #include <vector>
10 
11 #include "xAODJet/Jet.h"
12 
26 
27 
28 
29 namespace JetVar {
30  template<typename T>
32 
33 
37  struct VectorValue {
38  struct VectorWrapper {
39  virtual ~VectorWrapper(){}
40  virtual float at(int) const =0;
41  virtual size_t size() const =0;
42  };
43  VectorValue(VectorWrapper * v=nullptr , float s=1.) : m_v(v), m_scale(s){}
44  float operator[](int i) const {return m_v->at(i)*m_scale;}
45  size_t size()const {return m_v->size();}
46  std::unique_ptr<VectorWrapper> m_v;
47  float m_scale=1;
48  };
49 
50 
51  class Variable {
52  public:
53 
54  Variable(const std::string & name) : m_name(name) {}
55  virtual ~Variable() = default;
56  virtual float value(const xAOD::Jet &) const = 0;
57 
59  virtual bool isVector() const {return false;}
60 
62  virtual VectorValue vector(const xAOD::Jet &) const {return VectorValue();}
63 
64 
65  virtual std::string name() const {return m_name;}
66 
67  float scale() const {return m_scale;}
68  void setScale(float s) { m_scale=s;}
69 
70 
71 
74  static std::unique_ptr<Variable> create(const std::string & name, const std::string &type="float", int index=-1);
75 
76  std::string m_name;
77  float m_scale = 1;
78  int m_index = -1;
79  };
80 
81 
82 
83 
84  // ********************************************************
85  // Concrete implementations of Variable
86 
87 
89  template<typename T>
90  struct VariableAtt : public Variable {
91  VariableAtt(const std::string & name) : Variable(name), m_acc(name) {}
92  virtual float value(const xAOD::Jet & j) const {
93  if ( m_acc.isAvailable( j ) ) return m_acc(j)*m_scale;
94  else return -999.;
95  }
97  };
98 
99 
100 
102  template<typename T>
103  struct VariableAtt<std::vector<T> > : public Variable {
104  typedef typename std::vector<T> vect_t;
105  struct VectorWrapperT : public VectorValue::VectorWrapper {
106  VectorWrapperT(const vect_t *v): m_v(v){};
107  float at(int i) const {return (*m_v)[i];}
108  size_t size() const {return m_v->size();}
109  const vect_t * m_v;
110  };
111 
112  VariableAtt(const std::string & name, int index) : Variable(name), m_acc(name) {
113  m_index=index;
114  }
115 
116  virtual std::string name() const {
117  if(isVector() )return m_name;
118  return m_name+std::to_string(m_index);
119  }
120 
121  // returns false if the index is valid : in this case it is a simple variable
122  virtual bool isVector() const {return m_index==-1;}
123 
124  // use only if the index is valid
125  virtual float value(const xAOD::Jet & j) const {
126  if ( m_acc.isAvailable( j ) && m_index >= 0 && m_acc(j).size() > (unsigned) m_index ) {
127  return m_acc(j)[m_index]*m_scale;
128  }
129  else return -999.;
130  }
131 
132  virtual VectorValue vector(const xAOD::Jet &j) const {
133  if ( m_acc.isAvailable( j ) ) {
134  VectorValue v( new VectorWrapperT(&m_acc(j)) , m_scale ) ;
135  return v;
136  }
137  else {
138  VectorValue junk( new VectorWrapperT(&s_dummy), m_scale );
139  return junk;
140  }
141  }
142 
143 
145  // this is the value used returned when a vector attribute is not accessible
146  const static inline vect_t s_dummy{-999};
147  };
148 
149 
150 
151 
152  // *******************************************
153  // The classes below represent variables not stored as attribute in the Jet EDM
154  //
155 
156  struct EVar : public Variable {
157  using Variable::Variable;
158  virtual float value(const xAOD::Jet & j) const { return j.e()*m_scale;}
159  };
160 
161  struct PzVar : public Variable {
162  using Variable::Variable;
163  virtual float value(const xAOD::Jet & j) const { return j.pz()*m_scale;}
164  };
165 
166  struct NconstitVar : public Variable {
167  using Variable::Variable;
168  virtual float value(const xAOD::Jet & j) const { return j.numConstituents();}
169  };
170 
171  struct Rapidity : public Variable {
172  using Variable::Variable;
173  virtual float value(const xAOD::Jet & j) const { return j.rapidity();}
174  };
175 
176  struct AbsEtaVar : public Variable {
177  using Variable::Variable;
178  virtual float value(const xAOD::Jet & j) const { return fabs(j.eta());}
179  };
180 
181  struct EtVar : public Variable {
182  using Variable::Variable;
183  virtual float value(const xAOD::Jet & j) const { return j.p4().Et()*m_scale;}
184  };
185 
186  struct FChargedVar : public Variable {
187  using Variable::Variable;
188  virtual float value(const xAOD::Jet & j) const {
189  bool status = false;
190  float constScalePt = 0.;
191  std::vector<float> SumPtChargedPFOPt500;
192  status = j.getAttribute<float>("JetConstitScaleMomentum_pt", constScalePt ); // Jet pT at the constituent scale
193  if (!status) return 0;
194  status = j.getAttribute<std::vector<float> >("SumPtChargedPFOPt500", SumPtChargedPFOPt500 ); //Vector over all vertices in the event, each element contains the sum pT of all charged PFO with a pT > 0.5 GeV associated to the vertex.
195  if (!status) return 0;
196  return SumPtChargedPFOPt500.at(0)/=constScalePt; //definition of "fCharge", index 0 points to the primary vertex
197  }
198  };
199 
200  struct EM3FracVar : public Variable {
201  using Variable::Variable;
202  virtual float value(const xAOD::Jet & j) const {
203  float constitScaleEnergy = 0.;
204  std::vector<float> samplingFrac;
205  xAOD::JetFourMom_t fourVec;
206  bool status = false;
207 
208  status = j.getAttribute<xAOD::JetFourMom_t>( "JetConstitScaleMomentum", fourVec ); // Jet four-momentum at constituent scale
209  if( status ) constitScaleEnergy = fourVec.E() * m_scale ;
210  else return 0.;
211  status = j.getAttribute<std::vector<float> >("EnergyPerSampling", samplingFrac ); //EnergyPerSampling is a vector of size 24; element i refers to the energy deposited in calo sampling i, see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/Run2JetMoments#Sampling_layers
212  if( status ) return (samplingFrac[3]+samplingFrac[7])/constitScaleEnergy; //3 is 'EMB3' in the LAr barrel, 7 is 'EME3' in the LAr EM endcap
213  else return 0.;
214  }
215  };
216 
217  struct Tile0FracVar : public Variable {
218  using Variable::Variable;
219  virtual float value(const xAOD::Jet & j) const {
220  float constitScaleEnergy = 0.;
221  std::vector<float> samplingFrac;
222  xAOD::JetFourMom_t fourVec;
223  bool status = false;
224 
225  status = j.getAttribute<xAOD::JetFourMom_t>( "JetConstitScaleMomentum", fourVec ); // Jet four-momentum at constituent scale
226  if( status ) constitScaleEnergy = fourVec.E() * m_scale ;
227  else return 0.;
228  status = j.getAttribute<std::vector<float> >("EnergyPerSampling", samplingFrac ); // refer to EM3FracVar above
229  if( status ) return (samplingFrac[12]+samplingFrac[18])/constitScaleEnergy; //12 is 'TileBar0' in the Tile barrel, 18 is 'TileExt0' in the Tile extended barrel
230  else return 0.;
231  }
232  };
233 
234 }
235 
236 #endif
JetVar::EVar
Definition: JetVariable.h:156
JetVar::VectorValue::VectorWrapper::~VectorWrapper
virtual ~VectorWrapper()
Definition: JetVariable.h:39
JetVar::FChargedVar
Definition: JetVariable.h:186
JetVar::EtVar
Definition: JetVariable.h:181
Jet.h
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
JetVar::VariableAtt
Definition: JetVariable.h:90
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:68
index
Definition: index.py:1
JetVar::VariableAtt::value
virtual float value(const xAOD::Jet &j) const
Definition: JetVariable.h:92
JetVar::Tile0FracVar::value
virtual float value(const xAOD::Jet &j) const
Definition: JetVariable.h:219
JetVar::VariableAtt< std::vector< T > >::isVector
virtual bool isVector() const
return true if the underlying variable is of type vector<X>
Definition: JetVariable.h:122
JetVar::Variable::setScale
void setScale(float s)
Definition: JetVariable.h:68
JetVar::VectorValue::VectorWrapper::at
virtual float at(int) const =0
JetVar::Variable::isVector
virtual bool isVector() const
return true if the underlying variable is of type vector<X>
Definition: JetVariable.h:59
JetVar::VariableAtt< std::vector< T > >::value
virtual float value(const xAOD::Jet &j) const
Definition: JetVariable.h:125
JetVar::VectorValue
VectorValue is a helper class to access any jet variable of type vector<X> It is implemented this way...
Definition: JetVariable.h:37
JetVar::Rapidity::value
virtual float value(const xAOD::Jet &j) const
Definition: JetVariable.h:173
JetVar::PzVar::value
virtual float value(const xAOD::Jet &j) const
Definition: JetVariable.h:163
JetVar::VectorValue::m_v
std::unique_ptr< VectorWrapper > m_v
Definition: JetVariable.h:46
JetVar::VariableAtt< std::vector< T > >::VectorWrapperT::VectorWrapperT
VectorWrapperT(const vect_t *v)
Definition: JetVariable.h:106
xAOD::Jet_v1::getAttribute
bool getAttribute(AttributeID type, T &value) const
Retrieve attribute moment by enum.
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
JetVar::FChargedVar::value
virtual float value(const xAOD::Jet &j) const
Definition: JetVariable.h:188
JetVar::Variable::create
static std::unique_ptr< Variable > create(const std::string &name, const std::string &type="float", int index=-1)
create and return a new Variable of a given name & type.
Definition: JetVariable.cxx:10
JetVar::EVar::value
virtual float value(const xAOD::Jet &j) const
Definition: JetVariable.h:158
JetVar::Rapidity
Definition: JetVariable.h:171
JetVar::Tile0FracVar
Definition: JetVariable.h:217
JetVar::PzVar
Definition: JetVariable.h:161
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
JetVar::Variable::scale
float scale() const
Definition: JetVariable.h:67
xAOD::Jet_v1::pz
float pz() const
The z-component of the jet's momentum.
Definition: Jet_v1.cxx:99
JetVar::Variable
Definition: JetVariable.h:51
JetVar::AbsEtaVar::value
virtual float value(const xAOD::Jet &j) const
Definition: JetVariable.h:178
JetVar::Variable::m_index
int m_index
Definition: JetVariable.h:78
lumiFormat.i
int i
Definition: lumiFormat.py:85
JetVar::VariableAtt< std::vector< T > >::vector
virtual VectorValue vector(const xAOD::Jet &j) const
return a helper object allowing to iterate over the underlying vector. !!! use only if isVector()==tr...
Definition: JetVariable.h:132
vector
Definition: MultiHisto.h:13
JetVar::VectorValue::VectorValue
VectorValue(VectorWrapper *v=nullptr, float s=1.)
Definition: JetVariable.h:43
JetVar::EM3FracVar
Definition: JetVariable.h:200
JetVar::VectorValue::m_scale
float m_scale
Definition: JetVariable.h:47
JetVar
Definition: JetSelectorAttribute.h:15
JetVar::VariableAtt< std::vector< T > >::VectorWrapperT::size
size_t size() const
Definition: JetVariable.h:108
xAOD::Jet_v1::rapidity
virtual double rapidity() const
The true rapidity (y) of the particle.
Definition: Jet_v1.cxx:67
JetVar::Variable::Variable
Variable(const std::string &name)
Definition: JetVariable.h:54
xAOD::Jet_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition: Jet_v1.cxx:49
JetVar::VariableAtt< std::vector< T > >::m_acc
Accessor< vect_t > m_acc
Definition: JetVariable.h:144
xAOD::JetFourMom_t
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
Definition: JetTypes.h:17
JetVar::EtVar::value
virtual float value(const xAOD::Jet &j) const
Definition: JetVariable.h:183
JetVar::AbsEtaVar
Definition: JetVariable.h:176
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
JetVar::Variable::name
virtual std::string name() const
Definition: JetVariable.h:65
JetVar::VariableAtt< std::vector< T > >::VectorWrapperT::at
float at(int i) const
Definition: JetVariable.h:107
JetVar::VectorValue::operator[]
float operator[](int i) const
Definition: JetVariable.h:44
JetVar::VariableAtt< std::vector< T > >::VectorWrapperT::m_v
const vect_t * m_v
Definition: JetVariable.h:109
JetVar::NconstitVar::value
virtual float value(const xAOD::Jet &j) const
Definition: JetVariable.h:168
JetVar::Variable::value
virtual float value(const xAOD::Jet &) const =0
JetVar::VectorValue::VectorWrapper
Definition: JetVariable.h:38
JetVar::NconstitVar
Definition: JetVariable.h:166
JetVar::VariableAtt< std::vector< T > >::name
virtual std::string name() const
Definition: JetVariable.h:116
JetVar::Variable::~Variable
virtual ~Variable()=default
python.PyAthena.v
v
Definition: PyAthena.py:154
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
DeMoScan.index
string index
Definition: DeMoScan.py:364
xAOD::Jet_v1::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: Jet_v1.cxx:71
xAOD::Jet_v1::e
virtual double e() const
The total energy of the particle.
Definition: Jet_v1.cxx:63
JetVar::VariableAtt::m_acc
Accessor< T > m_acc
Definition: JetVariable.h:96
JetVar::VariableAtt< std::vector< T > >::vect_t
std::vector< T > vect_t
Definition: JetVariable.h:104
JetVar::EM3FracVar::value
virtual float value(const xAOD::Jet &j) const
Definition: JetVariable.h:202
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
JetVar::VectorValue::size
size_t size() const
Definition: JetVariable.h:45
merge.status
status
Definition: merge.py:17
JetVar::VariableAtt::VariableAtt
VariableAtt(const std::string &name)
Definition: JetVariable.h:91
JetVar::VariableAtt< std::vector< T > >::VariableAtt
VariableAtt(const std::string &name, int index)
Definition: JetVariable.h:112
JetVar::Variable::m_name
std::string m_name
Definition: JetVariable.h:76
JetVar::VectorValue::VectorWrapper::size
virtual size_t size() const =0
xAOD::Jet_v1::numConstituents
size_t numConstituents() const
Number of constituents in this jets (this is valid even when reading a file where the constituents ha...
Definition: Jet_v1.cxx:153
JetVar::Variable::vector
virtual VectorValue vector(const xAOD::Jet &) const
return a helper object allowing to iterate over the underlying vector. !!! use only if isVector()==tr...
Definition: JetVariable.h:62
JetVar::Variable::m_scale
float m_scale
Definition: JetVariable.h:77