38 namespace reco {
namespace tau {
44 double factor =
sqrt(vec.energy()*vec.energy()-mass*mass)/vec.P();
46 vec.px()*factor,vec.py()*factor,vec.pz()*factor,vec.energy());
90 vertexAssociator_(pset.getParameter<edm::
ParameterSet>(
"qualityCuts"),std::move(iC)),
93 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
"<RecoTauPiZeroStripPlugin2::RecoTauPiZeroStripPlugin2>:" ;
109 qcuts_pset.
addParameter<
double>(
"minTrackPt",
std::min(minGammaEtStripSeed_, minGammaEtStripAdd_));
111 qcuts_pset.
addParameter<
double>(
"maxTransverseImpactParameter", 1.e+9);
113 qcuts_pset.
addParameter<
double>(
"minTrackVertexWeight", -1.);
114 qcuts_pset.
addParameter<
unsigned>(
"minTrackPixelHits", 0);
118 qcuts_pset.
addParameter<
double>(
"minGammaEt",
std::min(minGammaEtStripSeed_, minGammaEtStripAdd_));
129 if ( combineStrips_ ) {
147 std::set<size_t>& candIdsCurrentStrip,
bool& isCandAdded)
const
149 size_t numCands = cands.size();
150 for (
size_t candId = 0; candId < numCands; ++candId ) {
151 if ( (!candFlags[candId]) && candIdsCurrentStrip.find(candId) == candIdsCurrentStrip.end() ) {
155 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
"--> candId = " << candId <<
" has been added." ;
159 candIdsCurrentStrip.insert(candId);
167 for ( std::set<size_t>::const_iterator candId = candIds.begin();
168 candId != candIds.end(); ++candId ) {
169 candFlags[*candId] =
true;
194 for ( PFCandPtrs::iterator cand = candsVector.
begin();
195 cand != candsVector.
end(); ++cand ) {
196 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
"PFGamma (" << idx <<
"): Et = " << (*cand)->et() <<
","
197 <<
" eta = " << (*cand)->eta() <<
", phi = " << (*cand)->phi();
199 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
" --> assigning seedCandId = " << seedCands.size() ;
203 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
"has Track: pt = " << candTrack->
pt() <<
" +/- " << candTrack->
ptError() <<
","
204 <<
" eta = " << candTrack->
eta() <<
", phi = " << candTrack->
phi() <<
","
205 <<
" charge = " << candTrack->
charge() ;
214 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
"ECAL Et: calibrated = " << (*cand)->ecalEnergy()*
sin((*cand)->theta()) <<
","
215 <<
" raw = " << (*cand)->rawEcalEnergy()*
sin((*cand)->theta()) ;
216 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
"HCAL Et: calibrated = " << (*cand)->hcalEnergy()*
sin((*cand)->theta()) <<
","
217 <<
" raw = " << (*cand)->rawHcalEnergy()*
sin((*cand)->theta()) ;
218 seedCands.push_back(*cand);
220 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
" --> assigning addCandId = " << addCands.size();
221 addCands.push_back(*cand);
223 LogTrace(
"RecoTauPiZeroStripPlugin2") ;
227 std::vector<bool> seedCandFlags(seedCands.size());
228 std::vector<bool> addCandFlags(addCands.size());
230 std::set<size_t> seedCandIdsCurrentStrip;
231 std::set<size_t> addCandIdsCurrentStrip;
234 while ( idxSeed < seedCands.size() ) {
235 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
"idxSeed = " << idxSeed ;
237 seedCandIdsCurrentStrip.clear();
238 addCandIdsCurrentStrip.clear();
241 strip->addDaughter(seedCands[idxSeed]);
242 seedCandIdsCurrentStrip.insert(idxSeed);
245 int stripBuildIteration = 0;
249 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
" adding seedCands to strip..." ;
250 addCandsToStrip(*strip, seedCands, seedCandFlags, seedCandIdsCurrentStrip, isCandAdded);
251 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
" adding addCands to strip..." ;
252 addCandsToStrip(*strip, addCands, addCandFlags, addCandIdsCurrentStrip, isCandAdded);
256 ++stripBuildIteration;
260 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
"Strip: Et = " << strip->et() <<
","
261 <<
" eta = " << strip->eta() <<
", phi = " << strip->phi()
262 <<
" --> building it !!" ;
265 if ( strip->daughterPtr(0).isNonnull() ) strip->setVertex(strip->daughterPtr(0)->vertex());
266 output.push_back(strip);
272 LogTrace(
"RecoTauPiZeroStripPlugin2") <<
"Strip: Et = " << strip->et() <<
","
273 <<
" eta = " << strip->eta() <<
", phi = " << strip->phi()
274 <<
" --> discarding it !!" ;
278 while ( idxSeed < seedCands.size() && seedCandFlags[idxSeed] ) {
287 output.sort(output.begin(), output.end(),
295 for ( PiZeroVector::const_iterator
first = output.begin();
297 for ( PiZeroVector::const_iterator
second =
first+1;
306 std::auto_ptr<RecoTauPiZero> combinedStrips(
314 first->daughterPtrVector()) {
315 combinedStrips->addDaughter(gamma);
318 second->daughterPtrVector()) {
319 combinedStrips->addDaughter(gamma);
322 if ( combinedStrips->daughterPtr(0).isNonnull() )
323 combinedStrips->setVertex(combinedStrips->daughterPtr(0)->vertex());
325 stripCombinations.push_back(combinedStrips);
330 output.transfer(output.end(), stripCombinations);
333 return output.release();
double minGammaEtStripSeed_
RecoTauPiZeroStripPlugin2(const edm::ParameterSet &, edm::ConsumesCollector &&iC)
T getParameter(std::string const &) const
InputIterator takeNElements(const InputIterator &begin, const InputIterator &end, size_t N)
virtual float pt() const
transverse momentum
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
void markCandsInStrip(std::vector< bool > &candFlags, const std::set< size_t > &candIds)
virtual ~RecoTauPiZeroStripPlugin2()
Coll filterCandRefs(const Coll &refcoll, bool invert=false) const
Filter a ref vector of PFCandidates.
double etaAssociationDistance_
virtual float phi() const
momentum azimuthal angle
int numberOfValidHits() const
virtual const_iterator end() const
last daughter const_iterator
Sin< T >::type sin(const T &t)
reco::VertexRef associatedVertex(const PFJet &jet) const
double phi() const
azimuthal angle of momentum vector
void setEvent(const edm::Event &evt)
Load the vertices from the event.
RecoTauVertexAssociator vertexAssociator_
bool applyElecTrackQcuts_
Jets made from PFObjects.
bool updateStripAfterEachDaughter_
std::vector< PFCandidatePtr > pfCandidates(const PFJet &jet, int particleId, bool sort=true)
reco::TrackRef trackRef() const
U second(std::pair< T, U > const &p)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
bool isNonnull() const
Checks for non-null.
double eta() const
pseudorapidity of momentum vector
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
void setPV(const reco::VertexRef &vtx) const
Update the primary vertex.
virtual float eta() const
momentum pseudorapidity
double pt() const
track transverse momentum
void addParameter(std::string const &name, T const &value)
std::vector< int > inputPdgIds_
virtual const_iterator begin() const
first daughter const_iterator
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Abs< T >::type abs(const T &t)
double phiAssociationDistance_
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Container::value_type value_type
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
static const TrackGhostTrackState * getTrack(const BasicGhostTrackState *basic)
return_type operator()(const reco::PFJet &) const override
Build a collection of piZeros from objects in the input jet.
const edm::Event * evt() const
ParameterSet const & getParameterSet(std::string const &) const
tuple idx
DEBUGGING if hasattr(process,"trackMonIterativeTracking2012"): print "trackMonIterativeTracking2012 D...
math::XYZTLorentzVector LorentzVector
Lorentz vector.
double minGammaEtStripAdd_
std::auto_ptr< PiZeroVector > return_type
int maxStripBuildIterations_
double combinatoricStripMassHypo_
Particle reconstructed by the particle flow algorithm.
boost::ptr_vector< RecoTauPiZero > PiZeroVector
reco::GsfTrackRef gsfTrackRef() const
std::vector< reco::PFCandidatePtr > PFCandPtrs
void addDaughter(const CandidatePtr &)
add a daughter via a reference
int numberOfValidPixelHits() const
math::XYZPoint Point
point in the space
int charge() const
track electric charge
#define DEFINE_EDM_PLUGIN(factory, type, name)
void set(reco::Candidate &c) const
set up a candidate
virtual void beginEvent() override
Hook called at the beginning of the event.
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
bool isNonnull() const
Checks for non-null.
RecoTauQualityCuts * qcuts_
void addCandsToStrip(RecoTauPiZero &, PFCandPtrs &, const std::vector< bool > &, std::set< size_t > &, bool &) const
AddFourMomenta p4Builder_