229 if(trajs.size() == 0)
return;
236 std::vector<bool>
keep(trajs.size(),
true);
238 for(
unsigned int i = 0;
i < trajs.size();
i++)
240 std::vector<TrajectoryMeasurement> meas = trajs[
i].measurements();
242 for(std::vector<TrajectoryMeasurement>::iterator im = meas.begin();
243 im!= meas.end(); im++)
244 if(im->recHit()->isValid())
246 const TransientTrackingRecHit* recHit = &(*(im->recHit()));
248 recHitMap[recHit].push_back(
i);
253 typedef std::map<unsigned int,int,less<unsigned int> > TrajMap;
255 for(
unsigned int i = 0;
i < trajs.size();
i++)
259 std::vector<DetId> detIds;
260 std::vector<int> detLayers;
263 std::vector<TrajectoryMeasurement> meas = trajs[
i].measurements();
264 for(std::vector<TrajectoryMeasurement>::iterator im = meas.begin();
265 im!= meas.end(); im++)
267 if(im->recHit()->isValid())
270 const TransientTrackingRecHit* recHit = &(*(im->recHit()));
271 const std::vector<unsigned int>& sharing(recHitMap[recHit]);
273 for(std::vector<unsigned int>::const_iterator
j = sharing.begin();
274 j!= sharing.end();
j++)
275 if(i < *
j) trajMap[*
j]++;
284 for(TrajMap::iterator sharing = trajMap.begin();
285 sharing!= trajMap.end(); sharing++)
287 unsigned int j = (*sharing).first;
291 if((*sharing).second >
min(trajs[i].foundHits(),
292 trajs[j].foundHits())/2)
294 if(
sameSeed(trajs[i].seed(), trajs[j].seed()) )
296 bool hasCommonLayer =
false;
310 if(hasCommonLayer ==
false)
312 std::vector<TrajectoryMeasurement> measj = trajs[
j].measurements();
313 for(std::vector<TrajectoryMeasurement>::iterator
314 tmj = measj.begin(); tmj!= measj.end(); tmj++)
315 if(tmj->recHit()->isValid())
319 std::vector<TrajectoryMeasurement> measi = trajs[
i].measurements();
320 for(std::vector<TrajectoryMeasurement>::iterator
321 tmi = measi.begin(); tmi!= measi.end(); tmi++)
322 if(tmi->recHit()->isValid())
324 &(*(tmj->recHit()))) &&
326 &(*(tmi->recHit()))))
327 { match =
true ;
break; }
339 if(trajs[i].chiSquared() < trajs[j].chiSquared())
351 for(
unsigned int i = 0; i < trajs.size(); i++)
358 trajs[
i].invalidate();
360 std::cerr <<
" [TrajecCleaner] cleaned trajs : " << ok <<
"/" << trajs.size() <<
361 " (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