CMS 3D CMS Logo

TemplatedSoftLeptonTagInfo.h
Go to the documentation of this file.
1 #ifndef DataFormats_BTauReco_TemplatedSoftLeptonTagInfo_h
2 #define DataFormats_BTauReco_TemplatedSoftLeptonTagInfo_h
3 
4 #include <vector>
5 #include <limits>
6 
12 
13 namespace reco {
14 
16 public:
18  sip2dsig( std::numeric_limits<float>::quiet_NaN() ),
19  sip3dsig( std::numeric_limits<float>::quiet_NaN() ),
20  sip2d( std::numeric_limits<float>::quiet_NaN() ),
21  sip3d( std::numeric_limits<float>::quiet_NaN() ),
22  ptRel( std::numeric_limits<float>::quiet_NaN() ),
23  p0Par( std::numeric_limits<float>::quiet_NaN() ),
24  etaRel( std::numeric_limits<float>::quiet_NaN() ),
25  deltaR( std::numeric_limits<float>::quiet_NaN() ),
26  ratio( std::numeric_limits<float>::quiet_NaN() ),
27  ratioRel( std::numeric_limits<float>::quiet_NaN() ),
28  elec_mva( std::numeric_limits<float>::quiet_NaN() ),
29  charge( -10 )
30  { }
31 
32  float sip2dsig; // 2D signed impact parameter significance
33  float sip3dsig; // 3D signed impact parameter significance
34  float sip2d; // 2D signed impact parameter
35  float sip3d; // 3D signed impact parameter
36  float ptRel; // transverse momentum wrt. the jet axis
37  float p0Par; // momentum along the jet direction, in the jet rest frame
38 
39  float etaRel; // (pseudo)rapidity along jet axis
40  float deltaR; // (pseudo)angular distance to jet axis
41  float ratio; // momentum over jet energy
42  float ratioRel; // momentum parallel to jet axis over jet energy
43 
44  float elec_mva;
45 
46  int charge;
47 
48  struct Quality {
49  static const float undef;
50 
51  // these first two entries work for both electrons and muons,
52  // entries afterwards can be specific to either one
53  // electrons & muons shared the same indicies to avoid waste of space
54  enum Generic {
55  leptonId = 0,
57  };
58 
59  enum Electron {
63  };
64 
65  enum Muon {
66  muonId = 0,
68  };
69 
70  template<typename T> static inline T byName(const char *name)
71  { return static_cast<T>(internalByName(name)); }
72 
73  private:
74  static unsigned int internalByName(const char *name);
75  };
76 
77  // check to see if quality has been set
78 
79  inline float hasQuality() const
80  { return quality() != Quality::undef; }
81  inline float hasQuality(Quality::Generic qual) const
82  { return quality((unsigned int)qual, false) != Quality::undef; }
83  inline float hasQuality(Quality::Muon qual) const
84  { return quality((unsigned int)qual, false) != Quality::undef; }
85  inline float hasQuality(Quality::Electron qual) const
86  { return quality((unsigned int)qual, false) != Quality::undef; }
87 
88  // retrieve lepton quality
89 
90  inline float quality(Quality::Generic qual, bool throwIfUndefined = true) const
91  { return quality((unsigned int)qual, throwIfUndefined); }
92  inline float quality(Quality::Muon qual, bool throwIfUndefined = true) const
93  { return quality((unsigned int)qual, throwIfUndefined); }
94  inline float quality(Quality::Electron qual, bool throwIfUndefined = true) const
95  { return quality((unsigned int)qual, throwIfUndefined); }
96 
97  // default value
98  inline float quality() const { return quality(0, false); }
99 
100  // set lepton quality
101 
102  inline void setQuality(Quality::Generic qual, float value)
103  { setQuality((unsigned int)qual, value); }
104  inline void setQuality(Quality::Muon qual, float value)
105  { setQuality((unsigned int)qual, value); }
106  inline void setQuality(Quality::Electron qual, float value)
107  { setQuality((unsigned int)qual, value); }
108 
109 private:
110  float quality(unsigned int index, bool throwIfUndefined) const;
111  void setQuality(unsigned int index, float value);
112 
113  std::vector<float> qualities_; // lepton qualities
114 };
115 
116 template<class REF>
118 public:
119  typedef std::vector< std::pair< REF, SoftLeptonProperties > > LeptonMap;
120 
121  TemplatedSoftLeptonTagInfo(void) : m_leptons() {}
122 
123  ~TemplatedSoftLeptonTagInfo(void) override {}
124 
125  TemplatedSoftLeptonTagInfo* clone(void) const override { return new TemplatedSoftLeptonTagInfo(*this); }
126 
127  unsigned int leptons(void) const {
128  return m_leptons.size();
129  }
130 
131  const REF & lepton(size_t i) const {
132  return m_leptons[i].first;
133  }
134 
135  const SoftLeptonProperties & properties(size_t i) const {
136  return m_leptons[i].second;
137  }
138 
139  void insert(const REF & lepton, const SoftLeptonProperties & properties) {
140  m_leptons.push_back( std::pair< REF, SoftLeptonProperties > (lepton, properties) );
141  }
142 
144  TaggingVariableList taggingVariables(void) const override;
145 
146  // Used by ROOT storage
148 
149 private:
150  LeptonMap m_leptons;
151 
152 };
153 
154 template<class REF>
155 TaggingVariableList TemplatedSoftLeptonTagInfo<REF>::taggingVariables(void) const {
157 
158  const Jet & jet = *( this->jet() );
159  list.insert( TaggingVariable(btau::jetEnergy, jet.energy()), true );
160  list.insert( TaggingVariable(btau::jetPt, jet.et()), true );
161  list.insert( TaggingVariable(btau::jetEta, jet.eta()), true );
162  list.insert( TaggingVariable(btau::jetPhi, jet.phi()), true );
163 
164  for (unsigned int i = 0; i < m_leptons.size(); ++i) {
165  const REF & trackRef = m_leptons[i].first;
166  list.insert( TaggingVariable(btau::trackMomentum, reco::btag::toTrack(trackRef)->p()), true );
167  list.insert( TaggingVariable(btau::trackEta, reco::btag::toTrack(trackRef)->eta()), true );
168  list.insert( TaggingVariable(btau::trackPhi, reco::btag::toTrack(trackRef)->phi()), true );
169  list.insert( TaggingVariable(btau::trackChi2, reco::btag::toTrack(trackRef)->normalizedChi2()), true );
170  const SoftLeptonProperties & data = m_leptons[i].second;
173  list.insert( TaggingVariable(btau::trackSip2dVal, data.sip2d), true );
174  list.insert( TaggingVariable(btau::trackSip3dVal, data.sip3d), true );
175  list.insert( TaggingVariable(btau::trackSip2dSig, data.sip2dsig), true );
176  list.insert( TaggingVariable(btau::trackSip3dSig, data.sip3dsig), true );
177  list.insert( TaggingVariable(btau::trackPtRel, data.ptRel), true );
178  list.insert( TaggingVariable(btau::trackP0Par, data.p0Par), true );
179  list.insert( TaggingVariable(btau::trackEtaRel, data.etaRel), true );
180  list.insert( TaggingVariable(btau::trackDeltaR, data.deltaR), true );
182  list.insert( TaggingVariable(btau::electronMVA, data.elec_mva), true );
183  list.insert( TaggingVariable(btau::trackCharge, data.charge), true );
184  }
185 
186  list.finalize();
187  return list;
188 }
189 
190 }
191 
192 #endif // DataFormats_BTauReco_TemplatedSoftLeptonTagInfo_h
double eta() const final
momentum pseudorapidity
TemplatedSoftLeptonTagInfo * clone(void) const override
clone
float quality(Quality::Generic qual, bool throwIfUndefined=true) const
float hasQuality(Quality::Generic qual) const
float quality(Quality::Muon qual, bool throwIfUndefined=true) const
#define CMS_CLASS_VERSION(_version_)
const reco::Track * toTrack(const reco::TrackBaseRef &t)
Definition: IPTagInfo.h:24
const SoftLeptonProperties & properties(size_t i) const
float quality(Quality::Electron qual, bool throwIfUndefined=true) const
void setQuality(Quality::Generic qual, float value)
Definition: Muon.py:1
Definition: Jet.py:1
double et() const final
transverse energy
float hasQuality(Quality::Muon qual) const
double energy() const final
energy
def template(fileName, svg, replaceme="REPLACEME")
Definition: svgfig.py:521
Definition: value.py:1
std::pair< TaggingVariableName, TaggingValue > TaggingVariable
void setQuality(Quality::Electron qual, float value)
void insert(const REF &lepton, const SoftLeptonProperties &properties)
fixed size matrix
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
static unsigned int internalByName(const char *name)
std::vector< std::pair< REF, SoftLeptonProperties > > LeptonMap
float hasQuality(Quality::Electron qual) const
void setQuality(Quality::Muon qual, float value)
long double T
double phi() const final
momentum azimuthal angle
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
void insert(const TaggingVariable &variable, bool delayed=false)