228 if(trajs.size() == 0)
return;
235 std::vector<bool>
keep(trajs.size(),
true);
237 for(
unsigned int i = 0;
i < trajs.size();
i++)
239 std::vector<TrajectoryMeasurement> meas = trajs[
i].measurements();
241 for(std::vector<TrajectoryMeasurement>::iterator im = meas.begin();
242 im!= meas.end(); im++)
243 if(im->recHit()->isValid())
245 const TransientTrackingRecHit* recHit = &(*(im->recHit()));
247 recHitMap[recHit].push_back(
i);
252 typedef std::map<unsigned int,int,less<unsigned int> > TrajMap;
254 for(
unsigned int i = 0;
i < trajs.size();
i++)
258 std::vector<DetId> detIds;
259 std::vector<int> detLayers;
262 std::vector<TrajectoryMeasurement> meas = trajs[
i].measurements();
263 for(std::vector<TrajectoryMeasurement>::iterator im = meas.begin();
264 im!= meas.end(); im++)
266 if(im->recHit()->isValid())
269 const TransientTrackingRecHit* recHit = &(*(im->recHit()));
270 const std::vector<unsigned int>& sharing(recHitMap[recHit]);
272 for(std::vector<unsigned int>::const_iterator
j = sharing.begin();
273 j!= sharing.end();
j++)
274 if(i < *
j) trajMap[*
j]++;
283 for(TrajMap::iterator sharing = trajMap.begin();
284 sharing!= trajMap.end(); sharing++)
286 unsigned int j = (*sharing).first;
290 if((*sharing).second >
min(trajs[i].foundHits(),
291 trajs[j].foundHits())/2)
293 if(
sameSeed(trajs[i].seed(), trajs[j].seed()) )
295 bool hasCommonLayer =
false;
309 if(hasCommonLayer ==
false)
311 std::vector<TrajectoryMeasurement> measj = trajs[
j].measurements();
312 for(std::vector<TrajectoryMeasurement>::iterator
313 tmj = measj.begin(); tmj!= measj.end(); tmj++)
314 if(tmj->recHit()->isValid())
318 std::vector<TrajectoryMeasurement> measi = trajs[
i].measurements();
319 for(std::vector<TrajectoryMeasurement>::iterator
320 tmi = measi.begin(); tmi!= measi.end(); tmi++)
321 if(tmi->recHit()->isValid())
323 &(*(tmj->recHit()))) &&
325 &(*(tmi->recHit()))))
326 { match =
true ;
break; }
338 if(trajs[i].chiSquared() < trajs[j].chiSquared())
350 for(
unsigned int i = 0; i < trajs.size(); i++)
357 trajs[
i].invalidate();
359 std::cerr <<
" [TrajecCleaner] cleaned trajs : " << ok <<
"/" << trajs.size() <<
360 " (with " << trajs[0].measurements().size() <<
"/" << recHitMap.size() <<
" hits)" << std::endl;
void reOrderMeasurements(Trajectory &traj) const
bool sameSeed(const TrajectorySeed &s1, const TrajectorySeed &s2) const
int getLayer(const DetId &id) const
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
DetId geographicalId() const