Build a collection of piZeros from objects in the input jet.
225 edm::LogPrint(
"RecoTauPiZeroStripPlugin3") <<
"<RecoTauPiZeroStripPlugin3::operator()>:" ;
241 for ( CandPtrs::iterator
cand = candsVector.begin();
242 cand != candsVector.end(); ++
cand ) {
244 edm::LogPrint(
"RecoTauPiZeroStripPlugin3") <<
"PFGamma #" << idx <<
" (" <<
cand->id() <<
":" <<
cand->key() <<
"): Et = " << (*cand)->et() <<
", eta = " << (*cand)->eta() <<
", phi = " << (*cand)->phi() ;
248 edm::LogPrint(
"RecoTauPiZeroStripPlugin3") <<
"--> assigning seedCandId = " << seedCands.size() ;
251 edm::LogPrint(
"RecoTauPiZeroStripPlugin3") <<
"track: Pt = " << candTrack->
pt() <<
" eta = " << candTrack->
eta() <<
", phi = " << candTrack->
phi() <<
", charge = " << candTrack->
charge() ;
254 <<
" chi2 = " << candTrack->
normalizedChi2() <<
", dPt/Pt = " << (candTrack->
ptError()/candTrack->
pt()) <<
")" ;
257 seedCands.push_back(*
cand);
260 edm::LogPrint(
"RecoTauPiZeroStripPlugin3") <<
"--> assigning addCandId = " << addCands.size() ;
262 addCands.push_back(*
cand);
267 std::vector<bool> seedCandFlags(seedCands.size());
268 std::vector<bool> addCandFlags(addCands.size());
270 std::set<size_t> seedCandIdsCurrentStrip;
271 std::set<size_t> addCandIdsCurrentStrip;
274 while ( idxSeed < seedCands.size() ) {
277 seedCandIdsCurrentStrip.clear();
278 addCandIdsCurrentStrip.clear();
281 strip->addDaughter(seedCands[idxSeed]);
282 seedCandIdsCurrentStrip.insert(idxSeed);
285 int stripBuildIteration = 0;
296 ++stripBuildIteration;
303 if (
strip->daughterPtr(0).isNonnull() )
strip->setVertex(
strip->daughterPtr(0)->vertex());
304 output.push_back(
strip);
307 markCandsInStrip(seedCandFlags, seedCandIdsCurrentStrip);
308 markCandsInStrip(addCandFlags, addCandIdsCurrentStrip);
314 while ( idxSeed < seedCands.size() && seedCandFlags[idxSeed] ) {
323 output.sort(output.begin(), output.end(),
331 for ( PiZeroVector::const_iterator
first = output.begin();
333 for ( PiZeroVector::const_iterator
second =
first+1;
342 std::auto_ptr<RecoTauPiZero> combinedStrips(
343 new RecoTauPiZero(0, totalP4,
349 for (
auto const&
gamma :
first->daughterPtrVector()) {
350 combinedStrips->addDaughter(
gamma);
352 for (
auto const&
gamma :
second->daughterPtrVector()) {
353 combinedStrips->addDaughter(
gamma);
356 if ( combinedStrips->daughterPtr(0).isNonnull() ) {
357 combinedStrips->setVertex(combinedStrips->daughterPtr(0)->vertex());
361 stripCombinations.push_back(combinedStrips);
366 output.transfer(output.end(), stripCombinations);
371 for ( PiZeroVector::iterator
strip = output.begin();
373 double bendCorrEta = 0.;
374 double bendCorrPhi = 0.;
376 for (
auto const&
gamma :
strip->daughterPtrVector()) {
379 energySum +=
gamma->energy();
381 if ( energySum > 1.
e-2 ) {
386 strip->setBendCorrEta(bendCorrEta);
387 strip->setBendCorrPhi(bendCorrPhi);
390 return output.release();
std::vector< CandidatePtr > pfCandidates(const Jet &jet, int particleId, bool sort=true)
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)
bool updateStripAfterEachDaughter_
double phi() const
azimuthal angle of momentum vector
double pt() const final
transverse momentum
bool isNonnull() const
Checks for non-null.
U second(std::pair< T, U > const &p)
double eta() const
pseudorapidity of momentum vector
std::vector< reco::CandidatePtr > CandPtrs
double pt() const
track transverse momentum
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
void addCandsToStrip(RecoTauPiZero &, CandPtrs &, const std::vector< bool > &, std::set< size_t > &, bool &) const
std::unique_ptr< const TFormula > etaAssociationDistance_
std::unique_ptr< RecoTauQualityCuts > qcuts_
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)
double minGammaEtStripSeed_
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
int maxStripBuildIterations_
double combinatoricStripMassHypo_
math::XYZTLorentzVector LorentzVector
Lorentz vector.
int numberOfValidTrackerHits() const
reco::VertexRef associatedVertex(const Jet &jet) const
boost::ptr_vector< RecoTauPiZero > PiZeroVector
std::unique_ptr< const TFormula > phiAssociationDistance_
RecoTauVertexAssociator vertexAssociator_
AddFourMomenta p4Builder_
int numberOfValidPixelHits() const
std::vector< int > inputParticleIds_
double minGammaEtStripAdd_
math::XYZPoint Point
point in the space
int charge() const
track electric charge
void set(reco::Candidate &c) const
set up a candidate
double energySum(const DataFrame &df, int fs, int ls)
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...