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)
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_
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.
virtual float phi() const GCC11_FINAL
momentum azimuthal angle
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.
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
virtual float eta() const GCC11_FINAL
momentum pseudorapidity
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.
virtual float pt() const GCC11_FINAL
transverse momentum
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_