CMS 3D CMS Logo

PFCandidateEGammaExtra.cc
Go to the documentation of this file.
3 #include <ostream>
4 #include <iomanip>
5 
6 using namespace reco;
7 
9  status_ = 0;
10  mvaStatus_ = 0;
11  pout_ = math::XYZTLorentzVector(0., 0., 0., 0.);
12  hadEnergy_ = -9999.;
13  sigmaEtaEta_ = -9999.;
14 
15  for (MvaVariable m = MVA_FIRST; m < MVA_LAST; m = MvaVariable(m + 1))
16  mvaVariables_.push_back(-9999.);
17 
20 }
21 
23  status_ = 0;
24  mvaStatus_ = 0;
25  pout_ = math::XYZTLorentzVector(0., 0., 0., 0.);
26  hadEnergy_ = -9999.;
27  sigmaEtaEta_ = -9999.;
28 
29  for (MvaVariable m = MVA_FIRST; m < MVA_LAST; m = MvaVariable(m + 1))
30  mvaVariables_.push_back(-9999.);
31 
32  gsfTrackRef_ = gsfTrack;
34 
36  setVariable(MVA_EtaGsf, gsfTrackRef_->etaMode());
37  setVariable(MVA_Chi2Gsf, gsfTrackRef_->normalizedChi2());
38  float ptmodeerror = gsfTrackRef_->ptModeError();
39  if (ptmodeerror > 0.)
40  setVariable(MVA_SigmaPtOverPt, ptmodeerror / gsfTrackRef_->ptMode());
41  else
43 
44  setVariable(MVA_Fbrem, (gsfTrackRef_->ptMode() - pout_.pt()) / gsfTrackRef_->ptMode());
45 }
46 
48 
50 
52  kfTrackRef_ = ref;
53  float nhit_kf = 0;
54  float chi2_kf = -0.01;
55  // if the reference is null, it does not mean that the variables have not been set
56  if (kfTrackRef_.isNonnull()) {
57  nhit_kf = (float)kfTrackRef_->hitPattern().trackerLayersWithMeasurement();
58  chi2_kf = kfTrackRef_->normalizedChi2();
59  }
60  setVariable(MVA_NhitsKf, nhit_kf);
61  setVariable(MVA_Chi2Kf, chi2_kf);
62 }
63 
65  lateBrem_ = val;
67 }
68 
70  earlyBrem_ = val;
72 }
73 
75  hadEnergy_ = val;
76  if (!clusterEnergies_.empty())
78 }
79 
81  sigmaEtaEta_ = val;
83 }
84 
86  deltaEta_ = val;
88 }
89 
90 void PFCandidateEGammaExtra::setClusterEnergies(const std::vector<float>& energies) {
91  clusterEnergies_ = energies;
92 
93  if (pout_.t() != 0.)
95 
96  const float m_el2 = 0.00051 * 0.00051;
97  float Ein_gsf = sqrt(gsfTrackRef_->pMode() * gsfTrackRef_->pMode() + m_el2);
98 
99  float etot = 0;
100  unsigned size = clusterEnergies_.size();
101  // std::cout << " N clusters " << size << std::endl;
102  float ebrem = 0.;
103  for (unsigned ic = 0; ic < size; ++ic) {
104  etot += clusterEnergies_[ic];
105  if (ic > 0)
106  ebrem += clusterEnergies_[ic];
107  }
108  setVariable(MVA_EtotOverPin, etot / Ein_gsf);
109  setVariable(MVA_EbremOverDeltaP, ebrem / (Ein_gsf - pout_.t()));
110 
111  // recompute - as in PFElectronAglo, the had energy is filled before the cluster energies
112  if (hadEnergy_ != -9999.)
114 }
115 
117 
120  mvaStatus_ |= (1 << (type));
121 }
122 
124  if (status) {
125  status_ |= (1 << type);
126  } else {
127  status_ &= ~(1 << type);
128  }
129 }
130 
132 
134 
136  return (mvaStatus(var) ? mvaVariables_[var] : -9999.);
137 }
138 
139 void PFCandidateEGammaExtra::addSingleLegConvTrackRefMva(const std::pair<reco::TrackRef, float>& trackrefmva) {
140  assoSingleLeg_.push_back(trackrefmva);
141 }
142 
145 }
146 
149 }
150 
151 static const char* const listVar[] = {"LogPt",
152  "Eta",
153  "SigmaPtOverPt",
154  "fbrem",
155  "Chi2Gsf",
156  "NhitsKf",
157  "Chi2Kf",
158  "EtotOverPin",
159  "EseedOverPout",
160  "EbremOverDeltaP",
161  "DeltaEtaTrackCluster",
162  "LogSigmaEtaEta",
163  "H/(H+E)",
164  "LateBrem",
165  "FirstBrem",
166  "MVA"};
167 
168 std::ostream& reco::operator<<(std::ostream& out, const PFCandidateEGammaExtra& extra) {
169  if (!out)
170  return out;
171 
172  out << std::setiosflags(std::ios::left) << std::setw(20) << "Variable index" << std::setw(20) << "Name"
173  << std::setw(10) << "Set(0/1)" << std::setw(8) << "value" << std::endl;
176  out << std::setw(20) << i << std::setw(20) << listVar[i] << std::setw(10) << extra.mvaStatus(i) << std::setw(8)
177  << extra.mvaVariable(i) << std::endl;
178  }
179 
180  return out;
181 }
edm::Ref< GsfTrackCollection > GsfTrackRef
persistent reference to a GsfTrack
Definition: GsfTrackFwd.h:13
reco::TrackRef kfTrackRef_
Ref to the KF track.
float mvaVariable(MvaVariable var) const
access to any variable
void setStatus(StatusFlag type, bool status=true)
set status
int status_
Status of the electron.
void addSingleLegConvTrackRefMva(const std::pair< reco::TrackRef, float > &trackrefmva)
add Single Leg Conversion TrackRef
void setHadEnergy(float val)
set the had energy. The cluster energies should be entered before
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
int mvaStatus_
status of mva variables
std::vector< std::pair< reco::TrackRef, float > > assoSingleLeg_
vector of TrackRef from Single Leg conversions and associated mva value
static const char *const listVar[]
void setGsfTrackRef(const reco::GsfTrackRef &ref)
set gsftrack reference
reco::ConversionRefVector assoConversionsRef_
vector of ConversionRef from PF
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
void setSigmaEtaEta(float val)
set the sigmaetaeta
std::vector< float > mvaVariables_
mva variables - transient !
std::ostream & operator<<(std::ostream &, BeamSpot beam)
Definition: BeamSpot.cc:66
bool mvaStatus(MvaVariable flag) const
access to mva variable status
T sqrt(T t)
Definition: SSEVec.h:23
void setEarlyBrem(float val)
set EarlyBrem
void setVariable(MvaVariable type, float var)
void setGsfTrackPout(const math::XYZTLorentzVector &pout)
set the pout (not trivial to get from the GSF track)
void addSingleLegConversionRef(const reco::ConversionRef &convref)
add Conversions from PF
reco::GsfTrackRef gsfTrackRef_
Ref to the GSF track.
void setClusterEnergies(const std::vector< float > &energies)
set the cluster energies. the Pout should be saved first
math::XYZTLorentzVector pout_
Variables entering the MVA that should be saved.
void setDeltaEta(float val)
set the delta eta
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
void addConversionRef(const reco::ConversionRef &convref)
add Conversions from PF
int electronStatus() const
access to the status
fixed size matrix
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
Definition: RefVector.h:67
void setKfTrackRef(const reco::TrackRef &ref)
set kf track reference
void setMVA(float val)
set the result (mostly for debugging)
void setLateBrem(float val)
set LateBrem
reco::ConversionRefVector singleLegConversions_