CMS 3D CMS Logo

BPHDecayVertex.cc
Go to the documentation of this file.
1 /*
2  * See header file for a description of this class.
3  *
4  * \author Paolo Ronchese INFN Padova
5  *
6  */
7 
8 //-----------------------
9 // This Class' Header --
10 //-----------------------
12 
13 //-------------------------------
14 // Collaborating Class Headers --
15 //-------------------------------
29 
30 //---------------
31 // C++ Headers --
32 //---------------
33 #include <iostream>
34 
35 using namespace std;
36 
37 //-------------------
38 // Initializations --
39 //-------------------
40 
41 //----------------
42 // Constructors --
43 //----------------
45  : evSetup(es), oldTracks(true), oldVertex(true), validTks(false) {}
46 
49  map<const reco::Candidate*, const reco::Candidate*> iMap;
50  const vector<const reco::Candidate*>& daug = daughters();
51  const vector<Component>& list = ptr->componentList();
52  int i;
53  int n = daug.size();
54  for (i = 0; i < n; ++i) {
55  const reco::Candidate* cand = daug[i];
56  iMap[originalReco(cand)] = cand;
57  }
58  for (i = 0; i < n; ++i) {
59  const Component& c = list[i];
60  searchMap[iMap[c.cand]] = c.searchList;
61  }
62  const vector<BPHRecoConstCandPtr>& dComp = daughComp();
63  int j;
64  int m = dComp.size();
65  for (j = 0; j < m; ++j) {
66  const map<const reco::Candidate*, string>& dMap = dComp[j]->searchMap;
67  searchMap.insert(dMap.begin(), dMap.end());
68  }
69 }
70 
71 //--------------
72 // Destructor --
73 //--------------
75 
76 //--------------
77 // Operations --
78 //--------------
80  if (oldVertex)
81  fitVertex();
82  return validTks;
83 }
84 
86  if (oldVertex)
87  fitVertex();
88  return validTks && fittedVertex.isValid();
89 }
90 
92  if (oldVertex)
93  fitVertex();
94  return fittedVertex;
95 }
96 
97 const vector<const reco::Track*>& BPHDecayVertex::tracks() const {
98  if (oldTracks)
99  tTracks();
100  return rTracks;
101 }
102 
104  if (oldTracks)
105  tTracks();
106  map<const reco::Candidate*, const reco::Track*>::const_iterator iter = tkMap.find(cand);
107  map<const reco::Candidate*, const reco::Track*>::const_iterator iend = tkMap.end();
108  return (iter != iend ? iter->second : nullptr);
109 }
110 
111 const vector<reco::TransientTrack>& BPHDecayVertex::transientTracks() const {
112  if (oldTracks)
113  tTracks();
114  return trTracks;
115 }
116 
118  if (oldTracks)
119  tTracks();
120  map<const reco::Candidate*, reco::TransientTrack*>::const_iterator iter = ttMap.find(cand);
121  map<const reco::Candidate*, reco::TransientTrack*>::const_iterator iend = ttMap.end();
122  return (iter != iend ? iter->second : nullptr);
123 }
124 
126  static string dum = "";
127  map<const reco::Candidate*, string>::const_iterator iter = searchMap.find(cand);
128  if (iter != searchMap.end())
129  return iter->second;
130  return dum;
131 }
132 
133 void BPHDecayVertex::addV(const string& name, const reco::Candidate* daug, const string& searchList, double mass) {
134  addP(name, daug, mass);
135  searchMap[daughters().back()] = searchList;
136  return;
137 }
138 
139 void BPHDecayVertex::addV(const string& name, const BPHRecoConstCandPtr& comp) {
140  addP(name, comp);
141  const map<const reco::Candidate*, string>& dMap = comp->searchMap;
142  searchMap.insert(dMap.begin(), dMap.end());
143  return;
144 }
145 
148  oldTracks = oldVertex = true;
149  validTks = false;
150  return;
151 }
152 
154  oldTracks = false;
155  rTracks.clear();
156  trTracks.clear();
157  tkMap.clear();
158  ttMap.clear();
160  evSetup->get<TransientTrackRecord>().get("TransientTrackBuilder", ttB);
161  const vector<const reco::Candidate*>& dL = daughFull();
162  int n = dL.size();
163  trTracks.reserve(n);
164  validTks = true;
165  while (n--) {
166  const reco::Candidate* rp = dL[n];
167  tkMap[rp] = nullptr;
168  ttMap[rp] = nullptr;
169  if (!rp->charge())
170  continue;
171  const reco::Track* tp;
172  const char* searchList = "cfhp";
173  map<const reco::Candidate*, string>::const_iterator iter = searchMap.find(rp);
174  if (iter != searchMap.end())
175  searchList = iter->second.c_str();
176  tp = BPHTrackReference::getTrack(*rp, searchList);
177  if (tp == nullptr) {
178  edm::LogPrint("DataNotFound") << "BPHDecayVertex::tTracks: "
179  << "no track for reco::(PF)Candidate";
180  validTks = false;
181  continue;
182  }
183  rTracks.push_back(tp);
184  trTracks.push_back(ttB->build(tp));
185  reco::TransientTrack* ttp = &trTracks.back();
186  tkMap[rp] = tp;
187  ttMap[rp] = ttp;
188  }
189  return;
190 }
191 
193  oldVertex = false;
194  if (oldTracks)
195  tTracks();
196  if (trTracks.size() < 2)
197  return;
198  KalmanVertexFitter kvf(true);
199  TransientVertex tv = kvf.vertex(trTracks);
200  fittedVertex = tv;
201  return;
202 }
const reco::Candidate * cand
const reco::Track * getTrack(const reco::Candidate *cand) const
get Track for a daughter
BPHGenericPtr< const BPHRecoCandidate >::type BPHRecoConstCandPtr
reco::TransientTrack * getTransientTrack(const reco::Candidate *cand) const
get TransientTrack for a daughter
bool isValid() const
Tells whether the vertex is valid.
Definition: Vertex.h:71
virtual void setNotUpdated() const
virtual bool validVertex() const
reco::TransientTrack build(const reco::Track *p) const
virtual void tTracks() const
std::vector< reco::TransientTrack > trTracks
std::map< std::string, const reco::Candidate * > dMap
std::map< const reco::Candidate *, std::string > searchMap
virtual const std::vector< const reco::Candidate * > & daughters() const
const std::string & getTrackSearchList(const reco::Candidate *cand) const
retrieve track search list
virtual void fitVertex() const
static const reco::Track * getTrack(const reco::Candidate &rc, const char *modeList="cfhbpmnigse", char *modeFlag=0)
virtual void addV(const std::string &name, const reco::Candidate *daug, const std::string &searchList, double mass)
const std::vector< Component > & componentList() const
CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &tracks) const override
std::map< const reco::Candidate *, reco::TransientTrack * > ttMap
const std::vector< const reco::Track * > & tracks() const
get list of Tracks
virtual void addP(const std::string &name, const reco::Candidate *daug, double mass=-1.0)
virtual const reco::Candidate * originalReco(const reco::Candidate *daug) const
get the original particle from the clone
void setNotUpdated() const override
reco::Vertex fittedVertex
BPHDecayVertex(const edm::EventSetup *es)
std::map< const reco::Candidate *, const reco::Track * > tkMap
const edm::EventSetup * evSetup
virtual bool validTracks() const
check for valid reconstructed vertex
virtual int charge() const =0
electric charge
virtual const std::vector< BPHRecoConstCandPtr > & daughComp() const
T get() const
Definition: EventSetup.h:73
const std::vector< reco::TransientTrack > & transientTracks() const
get list of TransientTracks
virtual const std::vector< const reco::Candidate * > & daughFull() const
std::vector< const reco::Track * > rTracks
~BPHDecayVertex() 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
virtual const reco::Vertex & vertex() const
get reconstructed vertex