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 
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 
30  mvaVariables_.push_back(-9999.);
31 
32  gsfTrackRef_ = gsfTrack;
34 
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  gsfTrackRef_= ref;
49 }
50 
52  pout_ = pout;
53 
54 }
55 
57  kfTrackRef_ = ref;
58  float nhit_kf=0;
59  float chi2_kf=-0.01;
60  // if the reference is null, it does not mean that the variables have not been set
61  if(kfTrackRef_.isNonnull()) {
62  nhit_kf=(float)kfTrackRef_->hitPattern().trackerLayersWithMeasurement();
63  chi2_kf=kfTrackRef_->normalizedChi2();
64  }
65  setVariable(MVA_NhitsKf,nhit_kf);
66  setVariable(MVA_Chi2Kf,chi2_kf);
67 }
68 
70  lateBrem_ = val;
72 }
73 
75  earlyBrem_ = val;
77 }
78 
80  hadEnergy_ = val;
81  if(!clusterEnergies_.empty())
83 }
84 
86  sigmaEtaEta_ = val;
88 }
89 
91  deltaEta_ = val;
93 }
94 
95 
96 void PFCandidateEGammaExtra::setClusterEnergies(const std::vector<float>& energies){
97  clusterEnergies_=energies;
98 
99  if(pout_.t()!=0.)
101 
102  const float m_el2=0.00051*0.00051;
103  float Ein_gsf =sqrt(gsfTrackRef_->pMode()*
104  gsfTrackRef_->pMode()+m_el2);
105 
106  float etot=0;
107  unsigned size=clusterEnergies_.size();
108  // std::cout << " N clusters " << size << std::endl;
109  float ebrem=0.;
110  for(unsigned ic=0;ic<size;++ic) {
111  etot+=clusterEnergies_[ic];
112  if(ic>0)
113  ebrem+=clusterEnergies_[ic];
114  }
115  setVariable(MVA_EtotOverPin,etot/Ein_gsf);
116  setVariable(MVA_EbremOverDeltaP,ebrem/(Ein_gsf-pout_.t()));
117 
118  // recompute - as in PFElectronAglo, the had energy is filled before the cluster energies
119  if(hadEnergy_!=-9999.)
121 
122 }
123 
125  setVariable(MVA_MVA,val);
126 }
127 
129 
131  mvaStatus_ |= (1 << (type)) ;
132 }
133 
134 
136  if(status) {
137  status_ |= (1 << type);
138  }
139  else {
140  status_ &= ~(1 <<type);
141  }
142 }
143 
145  return status_ & (1<<flag) ;
146 }
147 
149  return mvaStatus_ & (1<< (flag)) ;
150 }
151 
153  return (mvaStatus(var) ? mvaVariables_[var] : -9999. );
154 }
155 
156 void PFCandidateEGammaExtra::addSingleLegConvTrackRefMva(const std::pair<reco::TrackRef, float> &trackrefmva){
157  assoSingleLeg_.push_back(trackrefmva);
158 }
159 
162 }
163 
166 }
167 
168 static const char * const listVar[] = {
169  "LogPt",
170  "Eta",
171  "SigmaPtOverPt",
172  "fbrem",
173  "Chi2Gsf",
174  "NhitsKf",
175  "Chi2Kf",
176  "EtotOverPin",
177  "EseedOverPout",
178  "EbremOverDeltaP",
179  "DeltaEtaTrackCluster",
180  "LogSigmaEtaEta",
181  "H/(H+E)",
182  "LateBrem",
183  "FirstBrem",
184  "MVA"
185 };
186 
187 std::ostream& reco::operator<<(std::ostream& out,
188  const PFCandidateEGammaExtra& extra ) {
189  if(!out) return out;
190 
191  out << std::setiosflags(std::ios::left)<< std::setw(20) << "Variable index" << std::setw(20) << "Name" << std::setw(10) << "Set(0/1)" << std::setw(8) << "value" << std::endl;
194  out << std::setw(20)<< i << std::setw(20) << listVar[i] << std::setw(10) << extra.mvaStatus(i) << std::setw(8) << extra.mvaVariable(i) << std::endl;
195  }
196 
197  return out;
198 }
size
Write out results.
edm::Ref< GsfTrackCollection > GsfTrackRef
persistent reference to a GsfTrack
Definition: GsfTrackFwd.h:13
type
Definition: HCALResponse.h:21
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:251
reco::TrackRef kfTrackRef_
Ref to the KF track.
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
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:71
T sqrt(T t)
Definition: SSEVec.h:18
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.
int electronStatus() const
access to the status
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
bool mvaStatus(MvaVariable flag) const
access to mva variable status
void addConversionRef(const reco::ConversionRef &convref)
add Conversions from PF
fixed size matrix
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
Definition: RefVector.h:69
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_
float mvaVariable(MvaVariable var) const
access to any variable