58 map<const reco::Candidate*, const reco::Candidate*> iMap;
59 const vector<const reco::Candidate*>& daug =
daughters();
63 for (i = 0; i <
n; ++
i) {
67 for (i = 0; i <
n; ++
i) {
71 const vector<BPHRecoConstCandPtr>& dComp =
daughComp();
74 for (j = 0; j <
m; ++
j) {
75 const map<const reco::Candidate*, double>&
dMap = dComp[
j]->dMSig;
76 dMSig.insert(dMap.begin(), dMap.end());
108 const vector<const reco::Candidate*>& daugs =
daughFull();
109 vector<RefCountedKinematicParticle> plist;
112 set<RefCountedKinematicParticle>
pset;
114 int n = names.size();
115 int m = daugs.size();
117 for (i = 0; i <
n; ++
i) {
118 const string&
pname = names[
i];
123 if (pset.find(kp) != pset.end())
130 map<const reco::Candidate*, RefCountedKinematicParticle>::const_iterator iter =
kinMap.find(
getDaug(pname));
131 map<const reco::Candidate*, RefCountedKinematicParticle>::const_iterator iend =
kinMap.end();
134 if (pset.find(kp) != pset.end())
139 edm::LogPrint(
"ParticleNotFound") <<
"BPHKinematicFit::kinParticles: " << pname <<
" not found";
182 vector<RefCountedKinematicParticle> kComp;
183 vector<RefCountedKinematicParticle> kTail;
186 if (comp ==
nullptr) {
187 edm::LogPrint(
"ParticleNotFound") <<
"BPHKinematicFit::kinematicTree: " <<
name <<
" daughter not found";
192 int nn = ns = names.size();
193 vector<string> nfull(nn + 1);
197 vector<RefCountedKinematicParticle> kPart =
kinParticles(nfull);
198 vector<RefCountedKinematicParticle>::const_iterator iter = kPart.begin();
199 vector<RefCountedKinematicParticle>::const_iterator imid = iter + ns;
200 vector<RefCountedKinematicParticle>::const_iterator iend = kPart.end();
201 kComp.insert(kComp.end(), iter, imid);
202 kTail.insert(kTail.end(), imid, iend);
209 if (compTree->isEmpty())
212 compTree = kinFitter.
fit(kc, compTree);
213 if (compTree->isEmpty())
215 compTree->movePointerToTheTop();
216 if (!kTail.empty()) {
218 if (!compPart->currentState().isValid())
220 kTail.push_back(compPart);
226 edm::LogPrint(
"FitFailed") <<
"BPHKinematicFit::kinematicTree: " 240 vector<string> nfull;
243 if (comp ==
nullptr) {
244 edm::LogPrint(
"ParticleNotFound") <<
"BPHKinematicFit::kinematicTree: " <<
name <<
" daughter not found";
248 int nn = names.size();
249 nfull.resize(nn + 1);
254 nfull.push_back(
"*");
260 edm::LogPrint(
"FitFailed") <<
"BPHKinematicFit::kinematicTree: " 281 if (kPart.get() ==
nullptr)
283 return kPart->currentState().isValid();
289 return kinTree->currentParticle();
295 return kinTree->currentDecayVertex();
300 if (kPart.get() ==
nullptr)
328 const map<const reco::Candidate*, double>&
dMap = comp->dMSig;
329 dMSig.insert(dMap.begin(), dMap.end());
342 const vector<const reco::Candidate*>& daug =
daughFull();
351 float sigma =
dMSig.find(cand)->second;
369 double m = ks.
mass();
370 double e =
sqrt((x * x) + (y * y) + (z * z) + (m * m));
373 edm::LogPrint(
"FitNotFound") <<
"BPHKinematicFit::fitMomentum: " 374 <<
"simple momentum sum computed";
376 const vector<const reco::Candidate*>& daug =
daughters();
const reco::Candidate * cand
virtual const math::XYZTLorentzVector & p4() const
compute total momentum after the fit
RefCountedKinematicTree fit(const std::vector< RefCountedKinematicParticle > &part)
virtual void buildParticles() const
virtual void addK(const std::string &name, const reco::Candidate *daug, double mass=-1.0, double sigma=-1.0)
BPHGenericPtr< const BPHRecoCandidate >::type BPHRecoConstCandPtr
reco::TransientTrack * getTransientTrack(const reco::Candidate *cand) const
get TransientTrack for a daughter
virtual bool isEmpty() const
GlobalVector globalMomentum() const
virtual ParticleMass mass() const
std::map< std::string, const reco::Candidate * > dMap
virtual const std::vector< const reco::Candidate * > & daughters() const
const std::string names[nVars_]
virtual const RefCountedKinematicParticle currentParticle() const
std::vector< RefCountedKinematicTree > fit(KinematicConstraint *cs, const std::vector< RefCountedKinematicTree > &trees) const
ParticleMass mass() const
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
double constrSigma() const
std::map< const reco::Candidate *, RefCountedKinematicParticle > kinMap
double constrMass() const
retrieve the constraint
virtual void fitMomentum() const
virtual const RefCountedKinematicTree & kinematicTree() const
perform the kinematic fit and get the result
std::map< const reco::Candidate *, double > dMSig
virtual void addV(const std::string &name, const reco::Candidate *daug, const std::string &searchList, double mass)
virtual const RefCountedKinematicVertex currentDecayVertex() const
virtual const std::vector< RefCountedKinematicParticle > & kinParticles() const
get kinematic particles
void setNotUpdated() const override
const std::vector< Component > & componentList() const
RefCountedKinematicTree fit(const std::vector< RefCountedKinematicParticle > &particles) const
virtual const reco::Candidate * originalReco(const reco::Candidate *daug) const
get the original particle from the clone
void setNotUpdated() const override
virtual void resetKinematicFit() const
reset the kinematic fit
ReferenceCountingPointer< KinematicVertex > RefCountedKinematicVertex
ReferenceCountingPointer< KinematicTree > RefCountedKinematicTree
std::vector< RefCountedKinematicParticle > allParticles
virtual bool isValidFit() const
RefCountedKinematicTree kinTree
virtual double mass() const =0
mass
ReferenceCountingPointer< KinematicParticle > RefCountedKinematicParticle
virtual BPHRecoConstCandPtr getComp(const std::string &name) const
virtual const std::vector< BPHRecoConstCandPtr > & daughComp() const
virtual const std::vector< const reco::Candidate * > & daughFull() const
RefCountedKinematicParticle particle(const reco::TransientTrack &initialTrack, const ParticleMass &massGuess, float chiSquared, float degreesOfFr, float &m_sigma) const
void setConstraint(double mass, double sigma)
apply a mass constraint
math::XYZTLorentzVector totalMomentum
virtual const std::vector< std::string > & daugNames() const
virtual const reco::Candidate * getDaug(const std::string &name) const
~BPHKinematicFit() override
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run